diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/char/ip2 |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/char/ip2')
-rw-r--r-- | drivers/char/ip2/fip_firm.h | 2149 | ||||
-rw-r--r-- | drivers/char/ip2/i2cmd.c | 209 | ||||
-rw-r--r-- | drivers/char/ip2/i2cmd.h | 643 | ||||
-rw-r--r-- | drivers/char/ip2/i2ellis.c | 1487 | ||||
-rw-r--r-- | drivers/char/ip2/i2ellis.h | 615 | ||||
-rw-r--r-- | drivers/char/ip2/i2hw.h | 648 | ||||
-rw-r--r-- | drivers/char/ip2/i2lib.c | 2219 | ||||
-rw-r--r-- | drivers/char/ip2/i2lib.h | 351 | ||||
-rw-r--r-- | drivers/char/ip2/i2os.h | 127 | ||||
-rw-r--r-- | drivers/char/ip2/i2pack.h | 364 | ||||
-rw-r--r-- | drivers/char/ip2/ip2.h | 107 | ||||
-rw-r--r-- | drivers/char/ip2/ip2ioctl.h | 35 | ||||
-rw-r--r-- | drivers/char/ip2/ip2trace.h | 42 | ||||
-rw-r--r-- | drivers/char/ip2/ip2types.h | 57 |
14 files changed, 9053 insertions, 0 deletions
diff --git a/drivers/char/ip2/fip_firm.h b/drivers/char/ip2/fip_firm.h new file mode 100644 index 000000000000..4c525fa4929f --- /dev/null +++ b/drivers/char/ip2/fip_firm.h | |||
@@ -0,0 +1,2149 @@ | |||
1 | /* fip_firm.h - Intelliport II loadware */ | ||
2 | /* -31232 bytes read from ff.lod */ | ||
3 | |||
4 | static unsigned char fip_firm[] __initdata = { | ||
5 | 0x3C,0x42,0x37,0x18,0x02,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
6 | 0x57,0x65,0x64,0x20,0x44,0x65,0x63,0x20,0x30,0x31,0x20,0x31,0x32,0x3A,0x32,0x34, | ||
7 | 0x3A,0x33,0x30,0x20,0x31,0x39,0x39,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
8 | 0xE9,0x6C,0x0F,0x42,0x65,0x47,0x69,0x4E,0x6E,0x49,0x6E,0x47,0x20,0x6F,0x46,0x20, | ||
9 | 0x63,0x4F,0x64,0x45,0xCC,0x13,0x5A,0x15,0xE8,0x16,0x76,0x18,0x04,0x1A,0x92,0x1B, | ||
10 | 0x20,0x1D,0xAE,0x1E,0x3C,0x20,0xCA,0x21,0x58,0x23,0xE6,0x24,0x74,0x26,0x02,0x28, | ||
11 | 0x90,0x29,0x1E,0x2B,0xAC,0x2C,0x3A,0x2E,0xC8,0x2F,0x56,0x31,0xE4,0x32,0x72,0x34, | ||
12 | 0x00,0x36,0x8E,0x37,0x1C,0x39,0xAA,0x3A,0x38,0x3C,0xC6,0x3D,0x54,0x3F,0xE2,0x40, | ||
13 | 0x70,0x42,0xFE,0x43,0x8C,0x45,0x1A,0x47,0xA8,0x48,0x36,0x4A,0xC4,0x4B,0x52,0x4D, | ||
14 | 0xE0,0x4E,0x6E,0x50,0xFC,0x51,0x8A,0x53,0x18,0x55,0xA6,0x56,0x34,0x58,0xC2,0x59, | ||
15 | 0x50,0x5B,0xDE,0x5C,0x6C,0x5E,0xFA,0x5F,0x88,0x61,0x16,0x63,0xA4,0x64,0x32,0x66, | ||
16 | 0xC0,0x67,0x4E,0x69,0xDC,0x6A,0x6A,0x6C,0xF8,0x6D,0x86,0x6F,0x14,0x71,0xA2,0x72, | ||
17 | 0x30,0x74,0xBE,0x75,0x4C,0x77,0x6C,0x77,0x8C,0x77,0xAC,0x77,0x33,0xDB,0x8A,0xDC, | ||
18 | 0x53,0x33,0xDB,0x25,0x07,0x00,0x75,0x0A,0x8A,0x1E,0x08,0x01,0x83,0xE3,0x0C,0xEB, | ||
19 | 0x20,0x90,0x3C,0x01,0x75,0x0A,0x8A,0x1E,0x08,0x01,0x80,0xE3,0xC0,0xEB,0x12,0x90, | ||
20 | 0x8A,0x1E,0x0D,0x01,0x3C,0x02,0x75,0x06,0x80,0xE3,0x0C,0xEB,0x04,0x90,0x80,0xE3, | ||
21 | 0xC0,0x53,0x50,0x8B,0x1E,0xBA,0x13,0x8E,0xDB,0xE8,0x6A,0x65,0x55,0x8B,0xEC,0x53, | ||
22 | 0x1E,0x2B,0xC0,0x8E,0xD8,0x8B,0x5E,0x04,0xC1,0xE3,0x04,0x03,0x5E,0x06,0xD1,0xE3, | ||
23 | 0x2E,0x8B,0x9F,0x44,0x00,0x8D,0x47,0x2A,0x1E,0x5A,0x1F,0x5B,0x5D,0xC3,0x55,0x8B, | ||
24 | 0xEC,0x53,0x1E,0x2B,0xC0,0x8E,0xD8,0x8B,0x5E,0x04,0xC1,0xE3,0x04,0x03,0x5E,0x06, | ||
25 | 0xD1,0xE3,0x2E,0x8B,0x9F,0x44,0x00,0x8D,0x47,0x34,0x1E,0x5A,0x1F,0x5B,0x5D,0xC3, | ||
26 | 0xFB,0x55,0x8B,0xEC,0x53,0x51,0x52,0x56,0x57,0x1E,0x06,0x1E,0x07,0x33,0xC0,0x8E, | ||
27 | 0xD8,0x8B,0x5E,0x04,0x26,0x8A,0x47,0x59,0x25,0x03,0x00,0x8B,0xF0,0xD1,0xE6,0x2E, | ||
28 | 0x8B,0xB4,0xC4,0x00,0xC1,0xE0,0x04,0x26,0x02,0x47,0x1A,0xD1,0xE0,0x8B,0xE8,0x2E, | ||
29 | 0x8B,0xAE,0x44,0x00,0x89,0x2C,0x26,0x8A,0x47,0x1C,0x88,0x44,0x0F,0x26,0x8A,0x47, | ||
30 | 0x1D,0x88,0x44,0x10,0x26,0x8A,0x47,0x1E,0x88,0x44,0x11,0x26,0x8A,0x47,0x1F,0x88, | ||
31 | 0x44,0x12,0x26,0x8A,0x47,0x20,0x88,0x44,0x13,0x26,0x8A,0x47,0x23,0x88,0x44,0x14, | ||
32 | 0x26,0x8A,0x47,0x24,0x88,0x44,0x15,0x26,0x8A,0x47,0x5A,0x88,0x44,0x0E,0x33,0xC0, | ||
33 | 0x89,0x44,0x06,0x89,0x44,0x08,0x88,0x44,0x0B,0x88,0x44,0x0A,0xB0,0x21,0xB4,0x64, | ||
34 | 0x89,0x44,0x04,0x89,0x44,0x02,0xB0,0x55,0x88,0x44,0x0D,0x88,0x44,0x0C,0xE8,0x6A, | ||
35 | 0x00,0x72,0x5B,0xE8,0xC9,0x00,0xE8,0xC1,0x10,0x89,0x44,0x08,0x80,0x7C,0x0F,0x01, | ||
36 | 0x74,0x29,0xE8,0x2B,0x02,0xE8,0x7F,0x02,0x80,0x7C,0x0F,0x03,0x74,0x1D,0xE8,0xA9, | ||
37 | 0x10,0x8B,0xF8,0x2B,0x44,0x08,0x3D,0xA0,0x0F,0x72,0x10,0x89,0x7C,0x08,0x33,0xC0, | ||
38 | 0x87,0x44,0x06,0x85,0xC0,0x75,0x04,0xC6,0x44,0x0A,0xFF,0x8A,0x44,0x0A,0x84,0xC0, | ||
39 | 0x75,0x0B,0xB8,0x08,0x00,0xE8,0x6A,0x4A,0xE8,0xA9,0x01,0x73,0xBF,0xE8,0x4F,0x01, | ||
40 | 0x81,0x66,0x48,0x7F,0xFF,0x83,0x66,0x7A,0xBF,0xB0,0x02,0xE8,0x04,0x0E,0x8A,0x44, | ||
41 | 0x0A,0x98,0x07,0x1F,0x5F,0x5E,0x5A,0x59,0x5B,0x5D,0xC3,0x81,0x4E,0x48,0x80,0x00, | ||
42 | 0xB0,0x40,0xE8,0x3D,0x4A,0xE8,0x89,0x40,0x73,0x2A,0xE8,0x4D,0x10,0x8B,0xD8,0xB0, | ||
43 | 0x05,0xE8,0x2E,0x4A,0xF6,0x46,0x27,0x02,0x75,0x1A,0xE8,0x3D,0x10,0x2B,0xC3,0x3D, | ||
44 | 0x58,0x1B,0x72,0xEB,0x81,0x66,0x48,0x7F,0xFF,0xB0,0x02,0xE8,0xC4,0x0D,0xC6,0x44, | ||
45 | 0x0A,0x01,0xF9,0xC3,0x83,0x4E,0x7A,0x40,0xF8,0xC3,0xFB,0xB0,0x01,0xE8,0x02,0x4A, | ||
46 | 0xFA,0xE8,0x99,0x1E,0xE4,0x0A,0x84,0xC0,0x75,0xF0,0xB0,0x4E,0xE6,0x0A,0xFB,0xB0, | ||
47 | 0x01,0xE8,0xEE,0x49,0xFA,0xE8,0x85,0x1E,0xE4,0x0A,0x84,0xC0,0x75,0xF0,0xC3,0xFA, | ||
48 | 0xE8,0x7A,0x1E,0xE4,0xEC,0x88,0x44,0x16,0xE4,0xE4,0x88,0x44,0x17,0xE4,0xF8,0x88, | ||
49 | 0x44,0x18,0xE4,0xF0,0x88,0x44,0x19,0xE4,0x10,0x88,0x44,0x1A,0xE4,0x12,0x88,0x44, | ||
50 | 0x1B,0xE4,0x14,0x88,0x44,0x1C,0xE4,0x34,0x88,0x44,0x1D,0xE4,0x36,0x88,0x44,0x1E, | ||
51 | 0xE4,0xD8,0x24,0x01,0x8A,0xE0,0xE4,0xDA,0x24,0x02,0x0A,0xC4,0x88,0x44,0x1F,0x8A, | ||
52 | 0x44,0x10,0xE8,0xCD,0x1F,0x8A,0x44,0x11,0xE8,0x35,0x21,0x8A,0x44,0x12,0xE8,0x89, | ||
53 | 0x21,0x8A,0x44,0x13,0xE8,0x43,0x21,0xC6,0x86,0xA1,0x00,0x00,0xE4,0x14,0x24,0x10, | ||
54 | 0xE6,0x14,0xE4,0x12,0x24,0x3D,0xE6,0x12,0x8A,0x44,0x15,0x3C,0x01,0x72,0x1E,0x77, | ||
55 | 0x16,0xB0,0x11,0xE6,0x34,0xB0,0x13,0xE6,0x36,0xE4,0x14,0x0C,0x10,0xE6,0x14,0xE4, | ||
56 | 0x12,0x0C,0x40,0xE6,0x12,0xEB,0x06,0xE4,0x12,0x0C,0x02,0xE6,0x12,0x8A,0x44,0x0F, | ||
57 | 0x3C,0x01,0x74,0x06,0x3C,0x02,0x74,0x0A,0xEB,0x0E,0xE4,0x12,0x0C,0x08,0xE6,0x12, | ||
58 | 0xEB,0x06,0xE4,0x12,0x0C,0x10,0xE6,0x12,0xE8,0x2F,0xFF,0x8A,0x44,0x14,0x3C,0x02, | ||
59 | 0x75,0x08,0xB0,0x55,0x88,0x44,0x0C,0x88,0x44,0x0D,0xB0,0x21,0xB4,0x64,0x89,0x44, | ||
60 | 0x04,0x89,0x44,0x02,0xE4,0x0C,0x0C,0x10,0xE6,0x0C,0xE8,0xED,0x39,0xFB,0xC3,0xE8, | ||
61 | 0x5F,0x3F,0x73,0x08,0xFB,0xB0,0x0A,0xE8,0x08,0x49,0xEB,0xF3,0xFA,0xE8,0x9D,0x1D, | ||
62 | 0x8A,0x64,0x16,0x8A,0x44,0x17,0x89,0x86,0x94,0x00,0xE6,0xE4,0x8A,0xC4,0xE6,0xEC, | ||
63 | 0x8A,0x64,0x18,0x8A,0x44,0x19,0x89,0x86,0x96,0x00,0xE6,0xF0,0x8A,0xC4,0xE6,0xF8, | ||
64 | 0x8A,0x44,0x1A,0xE6,0x10,0x8A,0x44,0x1B,0xE6,0x12,0x8A,0x44,0x1C,0xE6,0x14,0x8A, | ||
65 | 0x44,0x1D,0xE6,0x34,0x8A,0x44,0x1E,0xE6,0x36,0x8A,0x44,0x1F,0xE6,0xD8,0xE6,0xDA, | ||
66 | 0xE9,0xB7,0xFE,0x90,0xFA,0x8A,0x44,0x0E,0xE6,0xFE,0xE4,0x02,0xA8,0x01,0x75,0x05, | ||
67 | 0x33,0xC0,0xFB,0xF8,0xC3,0x33,0xC0,0xE4,0x00,0xFB,0xF9,0xC3,0x8A,0x64,0x14,0x80, | ||
68 | 0xFC,0x02,0x74,0x2B,0xFE,0xC0,0xFE,0xC7,0x80,0xFF,0x4E,0x72,0x1C,0x74,0x09,0x80, | ||
69 | 0xFF,0x50,0x73,0x08,0xB0,0x0A,0xEB,0x17,0xB0,0x0D,0xEB,0x13,0x02,0xDC,0x32,0xFF, | ||
70 | 0x80,0xFB,0x7F,0x7C,0x02,0xB3,0x21,0x8A,0xC3,0x3C,0x7F,0x7C,0x02,0xB0,0x21,0xC3, | ||
71 | 0xFA,0x80,0x7C,0x0B,0x04,0x76,0x02,0xFB,0xC3,0x8B,0x46,0x24,0x3D,0x08,0x00,0x72, | ||
72 | 0xF6,0x8E,0x46,0x02,0x8B,0x7E,0x22,0x8A,0x44,0x0C,0x8B,0x5C,0x02,0xAA,0xE8,0xAB, | ||
73 | 0xFF,0xAA,0xE8,0xA7,0xFF,0xAA,0xE8,0xA3,0xFF,0xAA,0xE8,0x9F,0xFF,0x88,0x44,0x0C, | ||
74 | 0x89,0x5C,0x02,0x80,0x44,0x0B,0x04,0x89,0x7E,0x22,0x83,0x6E,0x24,0x04,0x83,0x46, | ||
75 | 0x1A,0x04,0x80,0x7E,0x26,0x02,0x74,0x06,0x80,0x66,0x26,0xFD,0xFB,0xC3,0x60,0xB0, | ||
76 | 0xFD,0xE8,0x02,0x3F,0x61,0xFB,0xC3,0xFA,0x80,0x7C,0x0F,0x03,0x75,0x09,0xC6,0x44, | ||
77 | 0x0B,0x00,0xE8,0xE5,0x38,0xFB,0xC3,0xC4,0x7E,0x14,0x8B,0x4E,0x3A,0x85,0xC9,0x75, | ||
78 | 0x35,0x26,0x8B,0x0D,0x47,0x47,0xE3,0xEA,0x3B,0x7E,0x04,0x76,0x22,0xB8,0x02,0x00, | ||
79 | 0x39,0x46,0x2E,0x77,0x07,0xC7,0x46,0x2E,0x00,0x00,0xEB,0x13,0x8B,0x5E,0x2C,0x89, | ||
80 | 0x5E,0x04,0x26,0xC7,0x07,0x00,0x00,0x43,0x43,0x89,0x5E,0x2C,0x29,0x46,0x2E,0x85, | ||
81 | 0xC9,0x78,0xCE,0x89,0x4E,0x3A,0x8A,0x44,0x0D,0x8B,0x5C,0x04,0x26,0x8A,0x25,0x47, | ||
82 | 0x3A,0xC4,0x75,0x16,0xFE,0x4C,0x0B,0xFF,0x44,0x06,0xE8,0x0F,0xFF,0xE2,0xED,0x88, | ||
83 | 0x44,0x0D,0x89,0x5C,0x04,0x89,0x4E,0x3A,0xEB,0xA7,0xC6,0x44,0x0A,0xFE,0xE8,0x79, | ||
84 | 0x38,0xFB,0xC3,0x90,0xE8,0xB3,0x0D,0x8A,0xE8,0x8A,0x0E,0xCB,0x13,0xB3,0x07,0x8A, | ||
85 | 0xC1,0xEE,0xEB,0x00,0xEC,0x3A,0xC1,0x75,0x09,0x02,0xCD,0xFE,0xCB,0x75,0xF0,0xEB, | ||
86 | 0x0C,0x90,0x88,0x0E,0xCB,0x13,0x8A,0xE8,0xBB,0xFF,0xFF,0xF9,0xC3,0x88,0x0E,0xCB, | ||
87 | 0x13,0xF8,0xC3,0x90,0xBB,0x3F,0x3F,0x8A,0x8E,0x9E,0x00,0xBA,0xFE,0x00,0xEC,0x8A, | ||
88 | 0xE8,0x32,0xC1,0x22,0xC3,0x75,0x02,0xF8,0xC3,0xF9,0xC3,0x90,0xE8,0xE5,0xFF,0x73, | ||
89 | 0x01,0xC3,0xBA,0xD0,0x00,0xBB,0x03,0x03,0x8A,0x8E,0x9F,0x00,0xEC,0x8A,0xE8,0x32, | ||
90 | 0xC1,0x22,0xC3,0x75,0x02,0xF8,0xC3,0xF9,0xC3,0x90,0x33,0xC0,0x8E,0xD8,0x8E,0xC0, | ||
91 | 0x80,0x3E,0xC8,0x13,0x00,0x75,0x07,0xB0,0x0A,0xE8,0x26,0x47,0xEB,0xF2,0xFB,0x33, | ||
92 | 0xDB,0x8A,0x1E,0xC9,0x13,0x43,0x43,0x83,0xFB,0x7E,0x76,0x07,0x33,0xDB,0xB0,0x02, | ||
93 | 0xE8,0x0F,0x47,0x2E,0x8B,0xAF,0x44,0x00,0x83,0x7E,0x08,0x00,0x74,0xE7,0x88,0x1E, | ||
94 | 0xC9,0x13,0xB0,0x02,0xE8,0xFB,0x46,0xFA,0xF7,0x46,0x38,0x40,0x00,0x74,0x14,0xE8, | ||
95 | 0x96,0x1B,0xE8,0x7F,0xFF,0x72,0x1C,0x33,0xD2,0x8A,0x96,0x9F,0x00,0x83,0xC2,0x0E, | ||
96 | 0xEB,0x0C,0x90,0xE8,0x77,0x1B,0xE8,0x83,0xFF,0x72,0x08,0xBA,0x48,0x00,0xE8,0x33, | ||
97 | 0xFF,0x73,0xAB,0x23,0xCB,0x89,0x8E,0x9A,0x00,0x89,0x96,0x9C,0x00,0xFE,0x86,0xB5, | ||
98 | 0x00,0xC6,0x06,0xC8,0x13,0x00,0xB0,0x0A,0xE8,0x67,0x0A,0xFB,0xEB,0x89,0x10,0x18, | ||
99 | 0x08,0x28,0x33,0xC0,0xA0,0x05,0x01,0x8A,0xC8,0x24,0x40,0x75,0x24,0xC7,0x06,0x7C, | ||
100 | 0x12,0x8E,0x45,0xC7,0x06,0x42,0x12,0x01,0x00,0xC6,0x06,0x54,0x12,0x02,0xB0,0x08, | ||
101 | 0xF6,0xC1,0x01,0x74,0x02,0xB0,0x04,0xA3,0x46,0x12,0xA2,0x4C,0x12,0xA2,0x94,0x12, | ||
102 | 0xC3,0xC7,0x06,0x7C,0x12,0xB6,0x45,0xA0,0x0F,0x01,0x84,0xC0,0x75,0x0E,0x6A,0x00, | ||
103 | 0x1F,0xC6,0x06,0x93,0x12,0x1E,0x9C,0x0E,0xE8,0xB1,0x0C,0x90,0xC7,0x06,0x44,0x12, | ||
104 | 0x01,0x00,0xA3,0x42,0x12,0x8B,0xD8,0xC1,0xE3,0x04,0x88,0x1E,0x94,0x12,0xBE,0xE2, | ||
105 | 0x05,0x2B,0xF0,0x8B,0xC8,0x33,0xDB,0x8B,0xFB,0x2E,0xAC,0x88,0x85,0x48,0x12,0x8A, | ||
106 | 0xD8,0x0C,0x05,0xE6,0xFE,0x8A,0xE0,0xEB,0x00,0xE4,0xFE,0x32,0xC4,0xA8,0x3F,0x74, | ||
107 | 0x03,0xE9,0x9E,0x00,0xE4,0x00,0x88,0x85,0x50,0x12,0x8A,0xE0,0x24,0x30,0xBA,0x10, | ||
108 | 0xFF,0x3C,0x30,0x74,0x12,0x80,0xFC,0x04,0x74,0x0A,0xBA,0x04,0x03,0xF6,0x06,0x08, | ||
109 | 0x01,0xFE,0x74,0x03,0xBA,0x08,0x0F,0x88,0x95,0x4C,0x12,0x02,0xFA,0x32,0xC0,0xF6, | ||
110 | 0xC4,0x08,0x74,0x02,0xB0,0x01,0x88,0x85,0x58,0x12,0x8A,0xC4,0x3C,0x35,0x74,0x5B, | ||
111 | 0x3C,0x36,0x74,0x57,0x3C,0x34,0x74,0x53,0x3C,0x04,0x74,0x4F,0x3C,0x14,0x74,0x4B, | ||
112 | 0x3C,0x15,0x74,0x47,0xA8,0x40,0x74,0x25,0xC6,0x85,0x54,0x12,0x04,0xD1,0xE7,0xB4, | ||
113 | 0x03,0x8A,0xC3,0x89,0x85,0x5C,0x12,0x8A,0xC3,0x8A,0xE3,0x80,0xCC,0x01,0x89,0x85, | ||
114 | 0x64,0x12,0xD1,0xEF,0x47,0xE2,0x03,0xEB,0x1A,0x90,0xE9,0x6C,0xFF,0xC6,0x85,0x54, | ||
115 | 0x12,0x02,0xD1,0xE7,0x8A,0xE6,0x8A,0xC3,0x0C,0x04,0x89,0x85,0x5C,0x12,0xD1,0xEF, | ||
116 | 0x47,0xE2,0xE7,0x33,0xC0,0x8A,0xC7,0xA3,0x46,0x12,0xC3,0xC6,0x85,0x54,0x12,0x06, | ||
117 | 0xEB,0xBB,0xC6,0x85,0x54,0x12,0x00,0x33,0xC0,0x88,0x85,0x50,0x12,0x88,0x85,0x4C, | ||
118 | 0x12,0x88,0x85,0x58,0x12,0xEB,0xA6,0xC7,0x46,0x26,0x02,0x12,0x8B,0x46,0x1E,0x89, | ||
119 | 0x46,0x00,0x89,0x46,0x22,0x8B,0x46,0x20,0x89,0x46,0x24,0xC7,0x46,0x1A,0x00,0x00, | ||
120 | 0xC3,0xC7,0x46,0x3C,0x80,0x00,0xC7,0x46,0x38,0x01,0x00,0x1E,0x56,0x8B,0x76,0x30, | ||
121 | 0x89,0x76,0x04,0x89,0x76,0x14,0x8E,0x5E,0x06,0x33,0xC0,0x89,0x04,0x46,0x46,0x89, | ||
122 | 0x76,0x2C,0x89,0x46,0x3A,0x8B,0x46,0x32,0x48,0x48,0x89,0x46,0x2E,0x5E,0x1F,0xC3, | ||
123 | 0x33,0xC0,0x89,0x46,0x48,0x89,0x46,0x4A,0xC7,0x46,0x46,0xAE,0x01,0x89,0x46,0x4E, | ||
124 | 0x8B,0x46,0x44,0x89,0x46,0x50,0x8B,0x46,0x42,0x89,0x46,0x40,0x89,0x46,0x08,0xC3, | ||
125 | 0x33,0xC0,0x89,0x46,0x76,0x89,0x46,0x78,0xC7,0x46,0x7A,0x10,0x00,0x56,0x1E,0x8B, | ||
126 | 0x76,0x70,0x89,0x76,0x10,0x89,0x76,0x0C,0x8E,0x5E,0x12,0xC7,0x04,0x00,0x00,0x8B, | ||
127 | 0x46,0x72,0x89,0x46,0x74,0x1F,0x5E,0xC3,0x89,0x56,0x18,0x89,0x56,0x02,0x89,0x56, | ||
128 | 0x06,0x89,0x56,0x0A,0x89,0x56,0x0E,0x89,0x56,0x12,0x89,0x56,0x16,0x8B,0xD8,0x4B, | ||
129 | 0x4B,0xC1,0xE3,0x02,0xBF,0x02,0x00,0x89,0x7E,0x1E,0x03,0xFB,0x89,0x7E,0x30,0x03, | ||
130 | 0xFB,0x89,0x7E,0x42,0x03,0xFB,0x89,0x7E,0x70,0x83,0xEB,0x08,0x89,0x5E,0x20,0x89, | ||
131 | 0x5E,0x32,0x89,0x5E,0x44,0x89,0x5E,0x72,0x50,0xE8,0x2B,0xFF,0xE8,0x71,0xFF,0xE8, | ||
132 | 0x3F,0xFF,0xE8,0x8B,0xFF,0x58,0xC3,0xB8,0x30,0x75,0xC1,0xE8,0x04,0x0E,0x5B,0x03, | ||
133 | 0xC3,0xA3,0xBA,0x13,0x83,0x3E,0x42,0x12,0x00,0x74,0x07,0x80,0x3E,0x94,0x12,0x00, | ||
134 | 0x75,0x0E,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x1E,0x9C,0x0E,0xE8,0xBD,0x0A,0x90, | ||
135 | 0xB8,0x30,0x7A,0xC1,0xE8,0x04,0x40,0xA3,0xC0,0x13,0x2B,0x06,0x12,0x01,0xF7,0xD8, | ||
136 | 0x33,0xD2,0x8B,0xCA,0x8A,0x0E,0x94,0x12,0xF7,0xF1,0x3D,0x80,0x00,0x77,0x0E,0x6A, | ||
137 | 0x00,0x1F,0xC6,0x06,0x93,0x12,0x25,0x9C,0x0E,0xE8,0x90,0x0A,0x90,0x48,0x3D,0xFF, | ||
138 | 0x07,0x72,0x03,0xB8,0xFF,0x07,0xA3,0xC2,0x13,0x33,0xC9,0x8A,0x0E,0x94,0x12,0x33, | ||
139 | 0xF6,0xB8,0x00,0x09,0x2E,0x8B,0xAC,0x44,0x00,0x89,0x46,0x4C,0x40,0x46,0x46,0xE2, | ||
140 | 0xF3,0x8A,0x0E,0x94,0x12,0x33,0xF6,0x8B,0x16,0xC0,0x13,0xA1,0xC2,0x13,0x2E,0x8B, | ||
141 | 0xAC,0x44,0x00,0xE8,0x22,0xFF,0x03,0xD0,0x46,0x46,0xE2,0xF2,0xC3,0x33,0xC0,0x2E, | ||
142 | 0x8B,0xAD,0x44,0x00,0x89,0x46,0x08,0x47,0x47,0xE2,0xF4,0xC3,0x51,0x33,0xC0,0x0A, | ||
143 | 0xC2,0x2E,0x8B,0xAD,0x44,0x00,0x89,0x86,0x9E,0x00,0x81,0x4E,0x38,0x00,0x20,0x47, | ||
144 | 0x47,0xFE,0xC4,0x80,0xFC,0x04,0x72,0x04,0x32,0xE4,0xFE,0xC0,0xE2,0xE3,0x59,0x83, | ||
145 | 0xE9,0x10,0x74,0x05,0xF7,0xD9,0xE8,0xC4,0xFF,0xC3,0x51,0x33,0xC0,0x0A,0xC2,0x2E, | ||
146 | 0x8B,0xAD,0x44,0x00,0x89,0x86,0x9E,0x00,0x83,0x4E,0x38,0x40,0x47,0x47,0x80,0xC4, | ||
147 | 0x10,0x79,0x04,0x32,0xE4,0xFE,0xC0,0xE2,0xE6,0x59,0x83,0xE9,0x10,0x74,0x05,0xF7, | ||
148 | 0xD9,0xE8,0x99,0xFF,0xC3,0xE8,0xD2,0xFF,0xC3,0x8D,0x08,0x9C,0x08,0xCA,0x08,0xF5, | ||
149 | 0x08,0x8B,0x0E,0x42,0x12,0x33,0xF6,0x51,0x56,0x33,0xDB,0x8B,0xCB,0x8A,0x94,0x48, | ||
150 | 0x12,0x8A,0x8C,0x4C,0x12,0x8A,0x9C,0x54,0x12,0x8B,0xFE,0xC1,0xE7,0x05,0x85,0xDB, | ||
151 | 0x75,0x02,0xB1,0x10,0x2E,0xFF,0x97,0xF9,0x08,0x5E,0x59,0x46,0xE2,0xD9,0xC3,0x01, | ||
152 | 0xCC,0x03,0xD0,0x00,0xE8,0x02,0xD0,0x00,0xE8,0x01,0xD0,0x00,0xE8,0x00,0xD0,0x00, | ||
153 | 0xE8,0x04,0xD0,0xA8,0xDA,0x00,0xDC,0x00,0xDE,0x01,0xD8,0x03,0xCC,0x03,0xCC,0x03, | ||
154 | 0xCC,0x04,0xD0,0xA8,0xDA,0x20,0xDC,0x00,0xDE,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x00, | ||
155 | 0xD8,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03, | ||
156 | 0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03,0xCC,0x03, | ||
157 | 0xCC,0x04,0xD0,0x00,0xDA,0x20,0xDC,0x03,0xDE,0x01,0xD8,0x03,0xCC,0x03,0xCC,0x03, | ||
158 | 0xCC,0x03,0xCC,0x00,0xD8,0x00,0xCC,0x00,0xD0,0x00,0x00,0x56,0x52,0x1E,0x0E,0x1F, | ||
159 | 0xBE,0x2F,0x09,0x33,0xD2,0xFC,0xAD,0x85,0xC0,0x74,0x0D,0x8A,0xD4,0xEE,0xAD,0x85, | ||
160 | 0xC0,0x74,0x05,0x8A,0xD4,0xEE,0xEB,0xEE,0x1F,0x5A,0x5E,0xC3,0xE4,0x80,0x84,0xC0, | ||
161 | 0x74,0x16,0x78,0x14,0xB0,0x27,0xE6,0xFC,0xB0,0x11,0xE6,0x34,0xE4,0xFC,0x3C,0x27, | ||
162 | 0x75,0x06,0xE4,0x11,0x75,0x02,0xF8,0xC3,0xF9,0xC3,0x83,0xC2,0x06,0xB0,0xBF,0xEE, | ||
163 | 0x83,0xEA,0x02,0xB0,0x10,0xEE,0x88,0x86,0xAF,0x00,0xB0,0x11,0x83,0xC2,0x04,0xEE, | ||
164 | 0x83,0xC2,0x02,0xEE,0xB0,0x13,0x83,0xC2,0x02,0xEE,0x83,0xC2,0x02,0xEE,0x2E,0xA1, | ||
165 | 0x4C,0x2D,0x89,0x86,0x94,0x00,0x83,0xEA,0x0E,0xEE,0x83,0xC2,0x02,0x8A,0xC4,0xEE, | ||
166 | 0x83,0xC2,0x04,0xB0,0x03,0xEE,0x88,0x86,0xA8,0x00,0x83,0xEA,0x04,0x32,0xC0,0xEE, | ||
167 | 0x83,0xC2,0x02,0xB0,0x89,0xEE,0x88,0x86,0xA6,0x00,0x0C,0x06,0xEE,0xB0,0x40,0xB4, | ||
168 | 0x38,0x89,0x46,0x1C,0xC7,0x46,0x36,0x38,0x00,0x83,0xC2,0x04,0x32,0xC0,0xEE,0x88, | ||
169 | 0x86,0xA7,0x00,0xC3,0x83,0xC2,0x06,0xB0,0xBF,0xEE,0x83,0xEA,0x02,0xEC,0x3A,0x86, | ||
170 | 0xAF,0x00,0x75,0x24,0x83,0xC2,0x04,0xEC,0x3C,0x11,0x75,0x1C,0x83,0xC2,0x06,0xEC, | ||
171 | 0x3C,0x13,0x75,0x14,0x83,0xEA,0x08,0x8A,0x86,0xA8,0x00,0xEE,0x83,0xEA,0x02,0xEC, | ||
172 | 0x24,0xC0,0x3C,0xC0,0x75,0x02,0xF8,0xC3,0xF9,0xC3,0x33,0xC9,0x8B,0xD1,0x8B,0xF1, | ||
173 | 0x8A,0x0E,0x94,0x12,0xC1,0xE9,0x02,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38,0x00, | ||
174 | 0x20,0x74,0x0E,0x8A,0x86,0x9E,0x00,0xE6,0xFE,0x32,0xC0,0xE6,0x80,0x42,0xE8,0xFA, | ||
175 | 0xFE,0x83,0xC6,0x08,0xE2,0xE1,0x85,0xD2,0x74,0x03,0xE8,0x05,0x08,0xC3,0x33,0xC9, | ||
176 | 0x8B,0xF1,0x8A,0x0E,0x94,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38,0x40,0x00, | ||
177 | 0x74,0x06,0xE8,0x73,0x16,0xE8,0x12,0xFF,0x46,0x46,0xE2,0xEA,0xC3,0x33,0xC9,0x8B, | ||
178 | 0xF1,0x8A,0x0E,0x94,0x12,0xC1,0xE9,0x02,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38, | ||
179 | 0x00,0x20,0x74,0x16,0xE8,0x46,0x16,0xE8,0xD2,0xFE,0x73,0x0E,0x6A,0x00,0x1F,0xC6, | ||
180 | 0x06,0x93,0x12,0x1C,0x9C,0x0E,0xE8,0xE3,0x07,0x90,0x83,0xC6,0x08,0xE2,0xD9,0xC3, | ||
181 | 0x33,0xC9,0x8B,0xF1,0x8A,0x0E,0x94,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38, | ||
182 | 0x40,0x00,0x74,0x16,0xE8,0x21,0x16,0xE8,0x2A,0xFF,0x73,0x0E,0x6A,0x00,0x1F,0xC6, | ||
183 | 0x06,0x93,0x12,0x1C,0x9C,0x0E,0xE8,0xB3,0x07,0x90,0x46,0x46,0xE2,0xDA,0xC3,0x0C, | ||
184 | 0x00,0x00,0x10,0x00,0x13,0x12,0x00,0x00,0x14,0x00,0x28,0x3C,0x00,0x1B,0x3E,0x00, | ||
185 | 0x00,0x2A,0x00,0x00,0x2C,0x00,0x00,0x42,0x00,0x14,0xD8,0x00,0x00,0xDA,0x00,0x00, | ||
186 | 0x34,0x00,0x11,0x36,0x00,0x13,0x38,0x00,0x11,0x3A,0x00,0x13,0x00,0x00,0x56,0x50, | ||
187 | 0x52,0xBE,0x2F,0x0B,0x2E,0xAD,0x85,0xC0,0x74,0x06,0x92,0x2E,0xAC,0xEE,0xEB,0xF4, | ||
188 | 0x5A,0x58,0x5E,0xC3,0x53,0x2E,0xA1,0x60,0x22,0xE6,0xE4,0xE6,0xF0,0x8A,0xC4,0xE6, | ||
189 | 0xEC,0xE6,0xF8,0xE8,0xD8,0xFF,0xB0,0x4B,0xE6,0x10,0xB0,0x50,0xE6,0x12,0xB0,0x38, | ||
190 | 0xE6,0x14,0xE8,0xAE,0x15,0xB0,0x46,0xE6,0x0A,0xE8,0xA7,0x15,0xB0,0x1A,0xE6,0x0A, | ||
191 | 0xE8,0xA0,0x15,0xB0,0x22,0xE6,0x0A,0xE8,0x99,0x15,0xE8,0xFD,0x06,0x8B,0xD8,0xE4, | ||
192 | 0x16,0xA8,0x04,0x75,0x18,0xE8,0xF2,0x06,0x2B,0xC3,0x3D,0x32,0x00,0x72,0xF0,0x6A, | ||
193 | 0x00,0x1F,0xC6,0x06,0x93,0x12,0x23,0x9C,0x0E,0xE8,0x10,0x07,0x90,0xE8,0xDA,0x06, | ||
194 | 0x2B,0xC3,0x3D,0x24,0x00,0x77,0x1B,0xB0,0x31,0xE6,0xFC,0x56,0x51,0x55,0xB9,0x10, | ||
195 | 0x00,0x2E,0x8B,0xAC,0x44,0x00,0x81,0x4E,0x38,0x80,0x00,0x46,0x46,0xE2,0xF2,0x5D, | ||
196 | 0x59,0x5E,0xE8,0x69,0xFF,0xE8,0x4B,0x15,0xB0,0x46,0xE6,0x0A,0xE8,0x44,0x15,0x5B, | ||
197 | 0xC3,0x33,0xF6,0x8B,0x0E,0x42,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38,0x00, | ||
198 | 0x20,0x74,0x06,0xE8,0x17,0x15,0xE8,0x5B,0xFF,0x83,0xC6,0x20,0xE2,0xE9,0xC3,0x8B, | ||
199 | 0xC2,0x05,0x04,0x00,0x89,0x46,0x28,0x2E,0xA1,0x4C,0x2D,0x89,0x86,0x8E,0x00,0x89, | ||
200 | 0x86,0x90,0x00,0x89,0x86,0x92,0x00,0xC6,0x86,0xA3,0x00,0x0A,0xC6,0x86,0xC3,0x00, | ||
201 | 0x03,0x52,0x83,0xC2,0x04,0x8A,0x86,0xA6,0x00,0x0C,0x06,0xEE,0x5A,0x83,0xC2,0x02, | ||
202 | 0xB0,0x05,0xEE,0x88,0x86,0xA5,0x00,0xC3,0xE8,0x03,0xFF,0xE8,0xE5,0x14,0xB0,0x42, | ||
203 | 0xE6,0x0A,0xF7,0x46,0x38,0x80,0x00,0x74,0x06,0x2E,0xA1,0x9C,0x22,0xEB,0x04,0x2E, | ||
204 | 0xA1,0x6C,0x22,0xC7,0x46,0x1C,0x0C,0x00,0x89,0x86,0x94,0x00,0x89,0x86,0x96,0x00, | ||
205 | 0x89,0x86,0x8E,0x00,0x89,0x86,0x90,0x00,0x89,0x86,0x92,0x00,0xE6,0xF0,0xE6,0xE4, | ||
206 | 0x8A,0xC4,0xE6,0xF8,0xE6,0xEC,0xC6,0x86,0xC3,0x00,0x03,0xE8,0xA5,0x14,0xB0,0x1A, | ||
207 | 0xE6,0x0A,0xB0,0x10,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xC3,0x33,0xC9,0x8B,0xF1,0x8A, | ||
208 | 0x0E,0x94,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38,0x40,0x00,0x74,0x06,0xE8, | ||
209 | 0x76,0x14,0xE8,0x5A,0xFF,0x46,0x46,0xE2,0xEA,0xC3,0x33,0xC9,0x8B,0xF1,0x8A,0x0E, | ||
210 | 0x94,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xF7,0x46,0x38,0x00,0x20,0x74,0x06,0xE8,0x4C, | ||
211 | 0x14,0xE8,0x74,0xFF,0x46,0x46,0xE2,0xEA,0xC3,0x90,0x83,0x3E,0x44,0x12,0x00,0x75, | ||
212 | 0x14,0xB0,0x01,0xBA,0x06,0x01,0xEE,0x2A,0xC0,0xEE,0xB0,0x02,0xEE,0xB0,0x04,0xEE, | ||
213 | 0xB8,0x00,0x02,0xEB,0x0F,0xBA,0x06,0x01,0xB0,0x40,0xEE,0xB8,0x01,0x00,0x8A,0x0E, | ||
214 | 0x0E,0x01,0xD3,0xE0,0xA3,0x88,0x12,0xC3,0xA1,0x88,0x12,0xA3,0x84,0x12,0x2D,0x20, | ||
215 | 0x00,0xA3,0x8A,0x12,0x2D,0x20,0x00,0xA3,0x82,0x12,0xC7,0x06,0x86,0x12,0x20,0x00, | ||
216 | 0xC7,0x06,0x80,0x12,0x32,0x00,0xC3,0x83,0x3E,0x44,0x12,0x00,0x74,0x76,0x8B,0x0E, | ||
217 | 0x42,0x12,0x33,0xF6,0x8A,0xA4,0x54,0x12,0x84,0xE4,0x74,0x5F,0x8A,0x84,0x48,0x12, | ||
218 | 0x0C,0x04,0xE6,0xFE,0xF6,0xC4,0x04,0x74,0x25,0xB0,0x1B,0xBA,0x00,0x00,0xEE,0xEB, | ||
219 | 0x00,0x2A,0xC0,0xBA,0x02,0x00,0xEE,0xEB,0x00,0xB0,0x03,0xEE,0xEB,0x00,0x32,0xC0, | ||
220 | 0xBA,0x02,0x00,0xEE,0xEB,0x00,0xBA,0x00,0x00,0xB0,0x00,0xEE,0xEB,0x2D,0xB0,0x1F, | ||
221 | 0xBA,0x00,0x00,0xEE,0xEB,0x00,0x2A,0xC0,0xBA,0x02,0x00,0xEE,0xEB,0x00,0xB0,0x03, | ||
222 | 0xEE,0xEB,0x00,0xD1,0xE6,0x8A,0x84,0x5D,0x12,0xD1,0xEE,0xF6,0xD0,0xBA,0x02,0x00, | ||
223 | 0xEE,0xEB,0x00,0xBA,0x00,0x00,0xB0,0x0A,0xEE,0xEB,0x00,0xE4,0x04,0xEB,0x00,0xE4, | ||
224 | 0x04,0x46,0xE2,0x90,0xC3,0x90,0xB8,0x14,0x00,0xBA,0x3E,0xFF,0xEF,0xB8,0x06,0x00, | ||
225 | 0xBA,0x32,0xFF,0xEF,0xB8,0x0F,0x00,0xBA,0x34,0xFF,0xEF,0xBA,0x36,0xFF,0xEF,0x83, | ||
226 | 0x3E,0x44,0x12,0x00,0x75,0x16,0xB8,0x11,0x00,0xBA,0x38,0xFF,0xEF,0xB8,0x12,0x00, | ||
227 | 0xBA,0x3A,0xFF,0xEF,0xB8,0x1B,0x00,0xBA,0x3C,0xFF,0xEF,0xC3,0xB8,0x11,0x00,0xBA, | ||
228 | 0x38,0xFF,0xEF,0xB8,0x12,0x00,0xBA,0x3A,0xFF,0xEF,0xB8,0x1B,0x00,0xBA,0x3C,0xFF, | ||
229 | 0xEF,0xC3,0xB8,0xFC,0x00,0xBA,0x28,0xFF,0xEF,0xFB,0x83,0x3E,0x44,0x12,0x00,0x74, | ||
230 | 0x07,0xB8,0xCC,0x00,0xBA,0x28,0xFF,0xEF,0xC3,0x00,0xFF,0xFF,0x20,0x24,0x28,0xFF, | ||
231 | 0x2C,0xFF,0xFF,0x30,0x34,0x38,0xFF,0xFF,0x3C,0x90,0x3C,0x0F,0x77,0x0E,0xBB,0x19, | ||
232 | 0x0E,0x2E,0xD7,0x3C,0xFF,0x74,0x05,0x8A,0xD8,0xF8,0xC3,0x90,0x2A,0xDB,0xF9,0xC3, | ||
233 | 0x83,0x3E,0x44,0x12,0x00,0x74,0x27,0xA0,0x06,0x01,0x80,0x26,0x06,0x01,0x30,0x80, | ||
234 | 0x3E,0x06,0x01,0x30,0x75,0x18,0xB9,0x02,0x00,0xBF,0xC4,0x13,0xBA,0x06,0x01,0xEC, | ||
235 | 0xA8,0x20,0x75,0xF8,0xBA,0x04,0x01,0xED,0xAB,0xE2,0xF1,0xEB,0x16,0x90,0xB9,0x04, | ||
236 | 0x00,0xBF,0xC4,0x13,0xBA,0x06,0x01,0xEC,0xA8,0x20,0x75,0xF8,0xBA,0x04,0x01,0xEC, | ||
237 | 0xAA,0xE2,0xF1,0xFA,0x90,0xBE,0xC4,0x13,0xAD,0x80,0xE4,0x3F,0x80,0xFC,0x02,0x74, | ||
238 | 0x0E,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x0A,0x9C,0x0E,0xE8,0x3E,0x04,0x90,0xAD, | ||
239 | 0x3C,0x0F,0x75,0xED,0x8A,0xC4,0xE8,0x81,0xFF,0x72,0xE6,0x88,0x1E,0x1A,0x01,0xC6, | ||
240 | 0x06,0x8E,0x12,0x00,0xB0,0x00,0x0A,0x06,0x1A,0x01,0xBA,0x00,0x01,0xEE,0xC6,0x06, | ||
241 | 0x8F,0x12,0x40,0x83,0x3E,0x44,0x12,0x00,0x75,0x06,0xB8,0x0C,0x00,0xEB,0x04,0x90, | ||
242 | 0xB8,0x4C,0x00,0xBA,0x28,0xFF,0xEF,0xC3,0x83,0x3E,0x44,0x12,0x00,0x75,0x01,0xC3, | ||
243 | 0xA1,0x50,0x12,0x0B,0x06,0x52,0x12,0x0A,0xC4,0xA8,0x08,0x74,0xF2,0xA0,0x0F,0x01, | ||
244 | 0x2A,0xE4,0x50,0xFF,0x36,0xBA,0x13,0x1F,0xE8,0x50,0x56,0x83,0xC4,0x02,0x6A,0x00, | ||
245 | 0x1F,0x33,0xC0,0xA3,0xBC,0x13,0xA0,0x0F,0x01,0xA3,0xBE,0x13,0x8B,0x1E,0xBC,0x13, | ||
246 | 0x8A,0x87,0x50,0x12,0xF6,0x87,0x50,0x12,0x08,0x74,0x0D,0x24,0x07,0x8A,0xE0,0xBE, | ||
247 | 0xCC,0x00,0xA0,0xBC,0x13,0xE8,0x94,0x3D,0xFF,0x06,0xBC,0x13,0xFF,0x0E,0xBE,0x13, | ||
248 | 0x75,0xDA,0xC3,0x90,0x1E,0x33,0xC0,0x8E,0xD8,0xB0,0x01,0xE8,0x54,0x3D,0x1F,0xC3, | ||
249 | 0x33,0xC9,0x8B,0xF1,0x8A,0x0E,0x94,0x12,0x2E,0x8B,0xAC,0x44,0x00,0xC7,0x46,0x62, | ||
250 | 0x38,0x44,0xC7,0x46,0x7C,0xFC,0x3B,0xC7,0x46,0x7E,0xE2,0x3B,0xC7,0x86,0x80,0x00, | ||
251 | 0xEC,0x3C,0xE8,0xAB,0x16,0xC6,0x86,0xC0,0x00,0x11,0x83,0x7E,0x08,0x00,0x74,0x07, | ||
252 | 0x51,0x56,0xE8,0x33,0x33,0x5E,0x59,0x46,0x46,0xE2,0xCD,0xC3,0x33,0xC9,0x8B,0xF1, | ||
253 | 0x8B,0xF9,0x8A,0x0E,0x94,0x12,0xC1,0xE9,0x02,0xE3,0x13,0x2E,0x8B,0xAC,0x44,0x00, | ||
254 | 0x8A,0x86,0x9E,0x00,0x88,0x85,0x6C,0x12,0x83,0xC6,0x08,0x47,0xE2,0xED,0xC3,0xFA, | ||
255 | 0xFC,0xB0,0xC0,0xBA,0x00,0x01,0xEE,0x33,0xC0,0x8E,0xD8,0x8E,0xC0,0x8E,0xD0,0xBF, | ||
256 | 0x16,0x01,0xB9,0xCC,0x77,0x2B,0xCF,0xD1,0xE9,0xF3,0xAB,0xBC,0x40,0x12,0xE8,0xD9, | ||
257 | 0x02,0xE8,0x70,0x3C,0xBE,0xCC,0x0F,0xE8,0xF2,0x3C,0xF4,0x90,0x33,0xC0,0x8E,0xD8, | ||
258 | 0x8E,0xC0,0x8E,0xD0,0xF6,0x06,0x0A,0x01,0x80,0x74,0x0B,0xBE,0x35,0x55,0xE8,0xDB, | ||
259 | 0x3C,0xB0,0x01,0xE8,0xAC,0x3C,0xE8,0xB3,0x00,0xE8,0xF6,0xF5,0xE8,0x08,0xF8,0xE8, | ||
260 | 0x0F,0xF9,0xE8,0x85,0xFA,0xE8,0xB6,0xFA,0xE8,0xEF,0xFC,0xE8,0xC2,0x10,0xE8,0x03, | ||
261 | 0x3C,0xE8,0xB2,0xFD,0xE8,0x30,0xFD,0xE8,0x54,0x02,0xC6,0x06,0x8F,0x12,0xC0,0xE8, | ||
262 | 0xBB,0xFA,0xE8,0xEB,0xFA,0xE8,0xE9,0xFB,0xE8,0xAF,0xFC,0xE8,0x8D,0xFC,0xE8,0x1F, | ||
263 | 0xFF,0xE8,0x58,0xFF,0xE8,0xDB,0xFD,0xE8,0x16,0xFE,0x33,0xC0,0xBE,0x5A,0x05,0xE8, | ||
264 | 0x8A,0x3C,0xE8,0xA3,0xFE,0xE8,0xE0,0xFC,0xFB,0xBE,0xA4,0x44,0xE8,0x7D,0x3C,0xE9, | ||
265 | 0xCA,0x2D,0x56,0x98,0x8B,0xF0,0x8B,0x42,0x52,0x85,0xC0,0x75,0x27,0xC7,0x42,0x52, | ||
266 | 0x01,0x00,0x53,0x36,0x8B,0x9C,0x2C,0x01,0xF6,0xC3,0x01,0x75,0x0C,0x36,0x89,0x68, | ||
267 | 0x52,0x36,0x89,0xAC,0x2C,0x01,0x5B,0x5E,0xC3,0x36,0x89,0xAC,0x2C,0x01,0x36,0x89, | ||
268 | 0xAC,0x1C,0x01,0x5B,0x5E,0xC3,0x56,0x98,0x8B,0xF0,0x33,0xED,0x36,0x8B,0x84,0x1C, | ||
269 | 0x01,0xA8,0x01,0x75,0x15,0x8B,0xE8,0x33,0xC0,0x87,0x42,0x52,0x36,0x89,0x84,0x1C, | ||
270 | 0x01,0xA8,0x01,0x74,0x05,0x36,0x89,0x84,0x2C,0x01,0x5E,0xC3,0x56,0x51,0x33,0xF6, | ||
271 | 0xB8,0x01,0x00,0xB9,0x08,0x00,0x89,0x84,0x1C,0x01,0x89,0x84,0x2C,0x01,0x46,0x46, | ||
272 | 0xE2,0xF4,0x59,0x5E,0xC3,0x90,0xBB,0x01,0x00,0x8B,0xE8,0xFF,0x4E,0x6E,0x74,0x0A, | ||
273 | 0x8B,0xDD,0x8B,0x46,0x58,0xA8,0x01,0x74,0xF0,0xC3,0x8B,0x46,0x48,0xA9,0x08,0x00, | ||
274 | 0x74,0x45,0xF7,0x46,0x38,0x40,0x00,0x74,0x27,0xE8,0x5C,0x10,0x80,0xC2,0x06,0x8A, | ||
275 | 0x86,0xA8,0x00,0x24,0xBF,0x88,0x86,0xA8,0x00,0xEE,0x60,0xB0,0xFE,0xE8,0x86,0x32, | ||
276 | 0x61,0xB0,0x02,0xE8,0x4C,0xFF,0x8B,0x46,0x48,0x24,0xF7,0x89,0x46,0x48,0xEB,0x17, | ||
277 | 0xE8,0x2A,0x10,0x81,0x4E,0x26,0x00,0x40,0x8A,0x86,0xA5,0x00,0x0C,0x02,0x88,0x86, | ||
278 | 0xA5,0x00,0xE6,0x0C,0x8B,0x46,0x48,0xA9,0x04,0x00,0x74,0x14,0xB0,0x02,0xE8,0x21, | ||
279 | 0xFF,0x8B,0x46,0x48,0x24,0xFB,0x89,0x46,0x48,0x60,0xB0,0xDF,0xE8,0x47,0x32,0x61, | ||
280 | 0x33,0xC0,0x87,0x46,0x58,0xF6,0xC3,0x01,0x75,0x0B,0x36,0x89,0x47,0x58,0xA8,0x01, | ||
281 | 0x75,0x0D,0xE9,0x74,0xFF,0xA3,0x22,0x01,0xA8,0x01,0x75,0x03,0xE9,0x6A,0xFF,0x89, | ||
282 | 0x1E,0x32,0x01,0xC3,0xBB,0x01,0x00,0x8B,0xE8,0xF7,0x46,0x38,0x40,0x00,0x74,0x15, | ||
283 | 0xE8,0xD5,0x0F,0x80,0xC2,0x0A,0xEC,0xA8,0x40,0x75,0x0A,0x8B,0xDD,0x8B,0x46,0x56, | ||
284 | 0xA8,0x01,0x74,0xE3,0xC3,0x8B,0x46,0x26,0x80,0xE4,0xFE,0x80,0xCC,0x02,0x89,0x46, | ||
285 | 0x26,0xB0,0x02,0xE8,0xBC,0xFE,0x33,0xC0,0x87,0x46,0x56,0xF6,0xC3,0x01,0x75,0x0A, | ||
286 | 0x36,0x89,0x47,0x56,0xA8,0x01,0x75,0x0B,0xEB,0xBD,0xA3,0x20,0x01,0xA8,0x01,0x75, | ||
287 | 0x02,0xEB,0xB4,0x89,0x1E,0x30,0x01,0xC3,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA0, | ||
288 | 0x90,0x12,0x84,0xC0,0x75,0x49,0xA1,0x22,0x01,0xA8,0x01,0x75,0x03,0xE8,0xF6,0xFE, | ||
289 | 0xA1,0x20,0x01,0xA8,0x01,0x75,0x03,0xE8,0x8A,0xFF,0xA1,0xAC,0x13,0x48,0x78,0x05, | ||
290 | 0x74,0x45,0xA3,0xAC,0x13,0xA1,0xAE,0x13,0x48,0x78,0x05,0x74,0x51,0xA3,0xAE,0x13, | ||
291 | 0xA1,0xB0,0x13,0x48,0x78,0x05,0x74,0x63,0xA3,0xB0,0x13,0xA1,0x7E,0x12,0x40,0x78, | ||
292 | 0x03,0xA3,0x7E,0x12,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0xA0, | ||
293 | 0x91,0x12,0x40,0x3C,0x02,0x72,0x0B,0x33,0xC0,0xA2,0x91,0x12,0xFF,0x16,0x7C,0x12, | ||
294 | 0xEB,0xA4,0xA2,0x91,0x12,0xEB,0x9F,0xA0,0x8E,0x12,0x32,0x06,0x8F,0x12,0xA2,0x8E, | ||
295 | 0x12,0x0A,0x06,0x1A,0x01,0xBA,0x00,0x01,0xEE,0xB8,0x2C,0x01,0xEB,0xA4,0x83,0x3E, | ||
296 | 0x84,0x12,0x10,0x72,0x11,0xBA,0x28,0xFF,0xED,0x0C,0x81,0xEF,0xE8,0x53,0x37,0xBA, | ||
297 | 0x28,0xFF,0xED,0x24,0x7E,0xEF,0xB8,0x04,0x00,0xEB,0x92,0xC6,0x06,0x8D,0x12,0x01, | ||
298 | 0xE8,0x3F,0x37,0xC6,0x06,0x8D,0x12,0x00,0xA1,0xB2,0x13,0xEB,0x8B,0x90,0x8A,0x1E, | ||
299 | 0x0B,0x01,0x2A,0xFF,0x6B,0xC3,0x19,0xBA,0x62,0xFF,0xEF,0xB8,0x0A,0x00,0xBA,0x60, | ||
300 | 0xFF,0xEF,0xB8,0x01,0xE0,0xBA,0x66,0xFF,0xEF,0xB8,0xFF,0xFF,0xBA,0x52,0xFF,0xEF, | ||
301 | 0xB8,0x09,0xC0,0xBA,0x56,0xFF,0xEF,0xC7,0x06,0xAC,0x13,0x2C,0x01,0xC7,0x06,0xAE, | ||
302 | 0x13,0x04,0x00,0xC6,0x06,0x91,0x12,0x00,0xC3,0x90,0x8A,0x1E,0x0B,0x01,0x2A,0xFF, | ||
303 | 0x6B,0xC3,0x05,0xD1,0xE8,0xA3,0x18,0x01,0xC3,0x90,0x52,0xBA,0x50,0xFF,0xED,0x5A, | ||
304 | 0xC3,0x90,0x53,0x51,0x8B,0x1E,0x18,0x01,0xB9,0x32,0x05,0x90,0xE2,0xFE,0x4B,0x75, | ||
305 | 0xF7,0x59,0x5B,0xC3,0xB0,0x80,0xBA,0x00,0x01,0x0A,0x06,0x1A,0x01,0xEE,0xC3,0x90, | ||
306 | 0xB0,0x40,0xEB,0xF2,0xB0,0xC0,0xEB,0xEE,0xB0,0x00,0xEB,0xEA,0xFA,0x60,0x06,0x1E, | ||
307 | 0x16,0x2B,0xDB,0x8E,0xDB,0x2E,0xA1,0xBA,0x4C,0x2E,0xA3,0x92,0x4C,0xA0,0x93,0x12, | ||
308 | 0x98,0x8B,0xE8,0x89,0x26,0x2D,0x7A,0x80,0x3E,0xCA,0x13,0x00,0x74,0x03,0xE9,0x6B, | ||
309 | 0x42,0xE8,0xC0,0xFF,0xE8,0xAB,0xFF,0xE8,0xA8,0xFF,0xB0,0x20,0xC6,0x06,0x90,0x12, | ||
310 | 0x00,0xFF,0x16,0x7C,0x12,0x8B,0xFD,0x83,0xFF,0x0A,0x72,0x11,0xE8,0xB9,0xFF,0xE8, | ||
311 | 0x90,0xFF,0xE8,0xAB,0xFF,0xE8,0x8A,0xFF,0x83,0xEF,0x0A,0xEB,0xEA,0x0B,0xFF,0x74, | ||
312 | 0x0F,0xE8,0xA4,0xFF,0xE8,0x7B,0xFF,0xE8,0x9A,0xFF,0xE8,0x75,0xFF,0x4F,0x75,0xF1, | ||
313 | 0xE8,0x95,0xFF,0xE8,0x6C,0xFF,0xEB,0xB9,0x8A,0x86,0xA5,0x00,0x24,0xFD,0xEE,0x88, | ||
314 | 0x86,0xA5,0x00,0xC3,0x8A,0x86,0xA6,0x00,0x0C,0x02,0xEE,0xC3,0x8B,0x76,0x38,0xF7, | ||
315 | 0xC6,0x01,0x00,0x74,0xEF,0x8B,0x4E,0x36,0x8B,0x46,0x2E,0x3B,0xC1,0x73,0x02,0x8B, | ||
316 | 0xC8,0x2B,0xC1,0x89,0x46,0x2E,0x01,0x4E,0x34,0xC4,0x7E,0x04,0x26,0x01,0x0D,0x8B, | ||
317 | 0x7E,0x2C,0x83,0xEA,0x04,0xF3,0x6C,0x8E,0xC1,0x89,0x7E,0x2C,0x3B,0x46,0x3C,0x72, | ||
318 | 0x12,0xF7,0xC6,0x20,0x00,0x75,0x0B,0x83,0xCE,0x20,0x89,0x76,0x38,0xB0,0x00,0xE8, | ||
319 | 0xA0,0xFC,0xC3,0xF7,0xC6,0x04,0x00,0x74,0x1B,0x8B,0xD8,0x83,0xCE,0x10,0x89,0x76, | ||
320 | 0x38,0x8A,0x86,0xA7,0x00,0x24,0xFE,0x88,0x86,0xA7,0x00,0x83,0xC2,0x08,0xEE,0x83, | ||
321 | 0xEA,0x08,0x8B,0xC3,0x3D,0x40,0x00,0x72,0x01,0xC3,0x81,0x4E,0x38,0x00,0x04,0x83, | ||
322 | 0xC2,0x02,0x8A,0x86,0xA5,0x00,0x24,0xFA,0x88,0x86,0xA5,0x00,0xEE,0xC3,0x8A,0x86, | ||
323 | 0xA6,0x00,0x0C,0x02,0xEE,0xC3,0xF7,0x46,0x38,0x01,0x00,0x74,0xF1,0x8B,0x4E,0x2E, | ||
324 | 0x32,0xDB,0x8A,0xBE,0xA3,0x00,0x83,0xC2,0x06,0xC4,0x76,0x04,0x8B,0x7E,0x2C,0x83, | ||
325 | 0xF9,0x08,0x72,0x2C,0xEC,0xA8,0x01,0x74,0x16,0x8A,0xE0,0x83,0xEA,0x0A,0xEC,0x83, | ||
326 | 0xC2,0x0A,0x84,0xE7,0x75,0x51,0xAA,0xFE,0xC3,0x49,0x83,0xF9,0x08,0x73,0xE5,0x32, | ||
327 | 0xFF,0x26,0x01,0x1C,0x01,0x5E,0x34,0x89,0x76,0x04,0x89,0x4E,0x2E,0x89,0x7E,0x2C, | ||
328 | 0x3B,0x4E,0x3C,0x72,0x11,0xF6,0x46,0x38,0x20,0x74,0x01,0xC3,0x83,0x4E,0x38,0x20, | ||
329 | 0xB0,0x00,0xE8,0xFD,0xFB,0xC3,0xF6,0x46,0x38,0x04,0x74,0x15,0x83,0x4E,0x38,0x10, | ||
330 | 0x8A,0x86,0xA7,0x00,0x24,0xFE,0x88,0x86,0xA7,0x00,0x83,0xEA,0x02,0xEE,0x83,0xC2, | ||
331 | 0x02,0x3D,0x40,0x00,0x72,0x5D,0xC3,0x32,0xFF,0x26,0x03,0x1C,0x85,0xDB,0x74,0x09, | ||
332 | 0x26,0x89,0x1C,0x8B,0xF7,0x47,0x47,0x49,0x49,0x80,0xE4,0x1E,0x80,0xCC,0xC0,0x26, | ||
333 | 0x89,0x04,0xF6,0xC4,0x10,0x74,0x27,0x8B,0x76,0x38,0xF7,0xC6,0x00,0x10,0x74,0x0B, | ||
334 | 0x50,0xFE,0x86,0xB2,0x00,0xB0,0x0A,0xE8,0xA8,0xFB,0x58,0xF7,0xC6,0x00,0x01,0x74, | ||
335 | 0x0D,0xE8,0x82,0x26,0x8B,0x76,0x38,0x8B,0x4E,0x2E,0x8B,0x7E,0x04,0xAB,0x8B,0xF7, | ||
336 | 0x33,0xC0,0xAB,0x32,0xDB,0x8A,0xBE,0xA3,0x00,0x49,0x49,0x83,0xF9,0x08,0x72,0x17, | ||
337 | 0xE9,0x41,0xFF,0x81,0x4E,0x38,0x00,0x04,0x83,0xC2,0xF8,0x8A,0x86,0xA5,0x00,0x24, | ||
338 | 0xFA,0x88,0x86,0xA5,0x00,0xEE,0xC3,0xE9,0x45,0xFF,0x83,0xC2,0x08,0xEC,0x88,0x86, | ||
339 | 0xAA,0x00,0xC0,0xE8,0x04,0x8A,0xE0,0x8A,0xC8,0x86,0x86,0xA9,0x00,0x32,0xE0,0x8B, | ||
340 | 0x5E,0x3E,0x84,0xE3,0x74,0x4F,0x8A,0xC1,0x8B,0x4E,0x26,0xF6,0xC5,0x04,0x74,0x0C, | ||
341 | 0xA8,0x08,0x74,0x05,0x80,0xE1,0xBF,0xEB,0x03,0x80,0xC9,0x40,0xF6,0xC5,0x08,0x74, | ||
342 | 0x0C,0xA8,0x02,0x74,0x05,0x80,0xE1,0x7F,0xEB,0x03,0x80,0xC9,0x80,0x88,0x4E,0x26, | ||
343 | 0x8B,0xF0,0x8A,0x86,0xA5,0x00,0x84,0xC9,0x74,0x08,0xA8,0x02,0x74,0x15,0x24,0xFD, | ||
344 | 0xEB,0x06,0xA8,0x02,0x75,0x0D,0x0C,0x02,0x88,0x86,0xA5,0x00,0x83,0xEA,0x0A,0xEE, | ||
345 | 0x83,0xC2,0x0A,0x8B,0xC6,0x84,0xE7,0x75,0x01,0xC3,0xC6,0x86,0xBA,0x00,0x01,0xB0, | ||
346 | 0x0E,0xE8,0xEE,0xFA,0xF7,0x46,0x38,0x00,0x02,0x74,0xEE,0x83,0x7E,0x2E,0x06,0x72, | ||
347 | 0xE8,0x8A,0xA6,0xAA,0x00,0xC4,0x5E,0x04,0x8B,0x7E,0x2C,0xB0,0xFF,0xAA,0xB0,0x02, | ||
348 | 0xAB,0x26,0x83,0x07,0x03,0x83,0x6E,0x2E,0x03,0x89,0x7E,0x2C,0xF6,0x46,0x38,0x20, | ||
349 | 0x74,0x01,0xC3,0x83,0x4E,0x38,0x20,0xB0,0x00,0xE8,0xB6,0xFA,0xC3,0x90,0x83,0xEA, | ||
350 | 0x08,0xE9,0xB4,0xFD,0x83,0xC2,0x06,0x8B,0x5E,0x26,0xF6,0xC3,0xC0,0x75,0xEF,0x8B, | ||
351 | 0x4E,0x1C,0xEC,0x88,0x86,0xA4,0x00,0x83,0xEA,0x0A,0xA8,0x20,0x75,0x02,0x8A,0xCD, | ||
352 | 0x32,0xED,0x8B,0x46,0x1A,0x3B,0xC8,0x73,0x18,0x01,0x4E,0x2A,0x2B,0xC1,0x89,0x46, | ||
353 | 0x1A,0xC5,0x76,0x00,0xF3,0x6E,0x8E,0xD9,0x89,0x76,0x00,0x3D,0x20,0x00,0x72,0x30, | ||
354 | 0xC3,0x85,0xC0,0x74,0x31,0x8B,0xC8,0x01,0x46,0x2A,0xC5,0x76,0x00,0xF3,0x6E,0x8E, | ||
355 | 0xD9,0x80,0xCB,0x02,0x89,0x5E,0x26,0xE8,0x32,0xF1,0xF6,0xC7,0x01,0x75,0x16,0x83, | ||
356 | 0xC2,0x02,0xE8,0x53,0xFD,0xF6,0xC7,0x10,0x75,0x0B,0xB0,0x02,0xE8,0x43,0xFA,0xC3, | ||
357 | 0xF6,0xC7,0x01,0x74,0xF0,0xC3,0x80,0xCB,0x02,0x89,0x5E,0x26,0xF6,0xC7,0x01,0x74, | ||
358 | 0xDE,0x83,0xC2,0x02,0xE8,0x31,0xFD,0xF6,0x86,0xA4,0x00,0x40,0x74,0x0B,0x80,0xE7, | ||
359 | 0xFE,0x80,0xCF,0x02,0x89,0x5E,0x26,0xEB,0xCC,0xB0,0x04,0xE8,0x14,0xFA,0xC3,0xC0, | ||
360 | 0xC2,0xC8,0xCA,0xC4,0xC6,0xCC,0xCE,0xD0,0xD2,0xD8,0xDA,0xD4,0xD6,0xDC,0xDE,0x90, | ||
361 | 0xE9,0x0E,0x01,0xE4,0xC4,0x8A,0xE0,0xE4,0xC4,0x8B,0xD0,0x83,0xF9,0x08,0x72,0xF0, | ||
362 | 0x26,0x83,0x3F,0x00,0x74,0x04,0x8B,0xDF,0x49,0x49,0x8B,0xFB,0x8A,0xDE,0x83,0xE3, | ||
363 | 0x0F,0x2E,0x8A,0xA7,0x2F,0x16,0xAB,0xF6,0xC4,0x10,0x74,0x24,0xF7,0xC6,0x00,0x10, | ||
364 | 0x74,0x0B,0x50,0xFE,0x86,0xB2,0x00,0xB0,0x0A,0xE8,0xC6,0xF9,0x58,0xF7,0xC6,0x00, | ||
365 | 0x01,0x74,0x0D,0xE8,0xA0,0x24,0x8B,0x76,0x38,0x8B,0x4E,0x2E,0x8B,0x7E,0x04,0xAB, | ||
366 | 0x89,0x7E,0x04,0x33,0xC0,0xAB,0x49,0x49,0x89,0x4E,0x2E,0x89,0x7E,0x2C,0x8B,0xC1, | ||
367 | 0xEB,0x4E,0x90,0xEB,0x9E,0x90,0xE4,0xD6,0x84,0xC0,0x79,0x63,0xE6,0xD0,0x8A,0xC8, | ||
368 | 0x25,0x03,0x00,0x03,0xD8,0xD1,0xE3,0x2E,0x8B,0xAF,0x44,0x00,0x88,0x8E,0xAE,0x00, | ||
369 | 0x8B,0x4E,0x2E,0xC4,0x5E,0x04,0x8B,0x7E,0x2C,0x8B,0x76,0x38,0xE4,0x86,0x24,0x07, | ||
370 | 0x3C,0x03,0x75,0xCF,0xE4,0x1C,0x91,0x3B,0xC1,0x73,0x02,0x8B,0xC8,0x2B,0xC1,0x89, | ||
371 | 0x46,0x2E,0x01,0x4E,0x34,0x26,0x01,0x0F,0xBA,0xC4,0x00,0xF3,0x6C,0x89,0x7E,0x2C, | ||
372 | 0x3B,0x46,0x3C,0x72,0x1C,0xF7,0xC6,0x20,0x00,0x75,0x0B,0x83,0xCE,0x20,0x89,0x76, | ||
373 | 0x38,0xB0,0x00,0xE8,0x3C,0xF9,0x8A,0x86,0xAE,0x00,0x24,0x3F,0xE6,0xD6,0xC3,0xF9, | ||
374 | 0xC3,0xF7,0xC6,0x0A,0x00,0x74,0x35,0xF7,0xC6,0x10,0x00,0x75,0x2F,0x83,0xCE,0x10, | ||
375 | 0x89,0x76,0x38,0xF7,0xC6,0x02,0x00,0x74,0x0E,0x50,0xE4,0xD8,0x24,0xFE,0xE6,0xD8, | ||
376 | 0x58,0xF7,0xC6,0x08,0x00,0x74,0x15,0x50,0x51,0xB9,0xE8,0x03,0xE4,0x0A,0x84,0xC0, | ||
377 | 0xE0,0xFA,0x84,0xC0,0x75,0x04,0xB0,0x24,0xE6,0x0A,0x59,0x58,0x3D,0x40,0x00,0x73, | ||
378 | 0xB5,0x8A,0x86,0xA5,0x00,0x24,0xEF,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x81,0xCE,0x10, | ||
379 | 0x04,0x89,0x76,0x38,0xEB,0xA0,0x00,0x08,0x04,0x0C,0x01,0x09,0x05,0x0D,0x02,0x0A, | ||
380 | 0x06,0x0E,0x03,0x0B,0x07,0x0F,0x00,0x40,0x80,0xC0,0x20,0x60,0xA0,0xE0,0x10,0x50, | ||
381 | 0x90,0xD0,0x30,0x70,0xB0,0xF0,0xE4,0xD2,0xE6,0xD0,0x8A,0xC8,0x25,0x03,0x00,0x03, | ||
382 | 0xD8,0xD1,0xE3,0x2E,0x8B,0xAF,0x44,0x00,0x88,0x8E,0xAE,0x00,0xE4,0xD8,0xC0,0xE8, | ||
383 | 0x04,0x8B,0xD8,0x2E,0x8A,0x87,0x66,0x17,0x8A,0xE0,0x8A,0xC8,0x86,0x86,0xA9,0x00, | ||
384 | 0x32,0xE0,0xE4,0x98,0x8B,0x5E,0x3E,0x84,0xE3,0x74,0x54,0x8A,0xC1,0x8B,0x4E,0x26, | ||
385 | 0xF6,0xC5,0x04,0x74,0x0C,0xA8,0x08,0x74,0x05,0x80,0xE1,0xBF,0xEB,0x03,0x80,0xC9, | ||
386 | 0x40,0xF6,0xC5,0x08,0x74,0x0C,0xA8,0x02,0x74,0x05,0x80,0xE1,0x7F,0xEB,0x03,0x80, | ||
387 | 0xC9,0x80,0x88,0x4E,0x26,0x8B,0xF0,0x8A,0x86,0xA5,0x00,0xF6,0xC1,0xFD,0x74,0x08, | ||
388 | 0xA8,0x06,0x74,0x19,0x24,0xF9,0xEB,0x0F,0xA8,0x06,0x75,0x11,0xF6,0xC5,0x01,0x75, | ||
389 | 0x04,0x0C,0x04,0xEB,0x02,0x0C,0x02,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x8B,0xC6,0x84, | ||
390 | 0xE7,0x75,0x09,0x8A,0x86,0xAE,0x00,0x24,0x3F,0xE6,0xD2,0xC3,0xC6,0x86,0xBA,0x00, | ||
391 | 0x01,0xB0,0x0E,0xE8,0x1C,0xF8,0xF7,0x46,0x38,0x00,0x02,0x74,0xE6,0x83,0x7E,0x2E, | ||
392 | 0x06,0x72,0xE0,0x8A,0x86,0xA9,0x00,0x8A,0xE0,0x86,0x86,0xAA,0x00,0x8A,0xC8,0x32, | ||
393 | 0xC4,0x80,0xC9,0x0B,0x22,0xC1,0xC0,0xE4,0x04,0x0A,0xE0,0xC4,0x5E,0x04,0x8B,0x7E, | ||
394 | 0x2C,0xB0,0xFF,0xAA,0xB0,0x02,0xAB,0x26,0x83,0x07,0x03,0x83,0x6E,0x2E,0x03,0x89, | ||
395 | 0x7E,0x2C,0xF6,0x46,0x38,0x20,0x75,0xAB,0x83,0x4E,0x38,0x20,0xB0,0x00,0xE8,0xD1, | ||
396 | 0xF7,0xEB,0xA0,0x90,0xE4,0x12,0x24,0xDF,0xE6,0x12,0x81,0xE3,0xFE,0x9F,0x89,0x5E, | ||
397 | 0x26,0x83,0x66,0x48,0xF7,0xEB,0x73,0x90,0xF6,0xC7,0x20,0x75,0xE7,0xE4,0x12,0x0C, | ||
398 | 0x20,0xE6,0x12,0x32,0xC0,0xE6,0xC6,0xB0,0x83,0xE6,0xC6,0x80,0xCF,0x20,0x89,0x5E, | ||
399 | 0x26,0x8A,0x86,0xA5,0x00,0x0C,0x02,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xEB,0x74,0x90, | ||
400 | 0xF6,0xC7,0x40,0x75,0xD3,0xE4,0x12,0x0C,0x20,0xE6,0x12,0x32,0xC0,0xE6,0xC6,0xB0, | ||
401 | 0x81,0xE6,0xC6,0x80,0xE7,0xDF,0x80,0xCB,0x01,0x89,0x5E,0x26,0xB0,0x06,0xE8,0x71, | ||
402 | 0xF7,0x90,0x8A,0x86,0xA5,0x00,0x24,0xF9,0xE6,0x0C,0x88,0x86,0xA5,0x00,0xEB,0x43, | ||
403 | 0xE4,0xD4,0xE6,0xD0,0x8B,0xF8,0x25,0x03,0x00,0x03,0xD8,0xD1,0xE3,0x2E,0x8B,0xAF, | ||
404 | 0x44,0x00,0x8B,0x5E,0x26,0xF6,0xC7,0x60,0x75,0xB6,0xF6,0xC3,0xC0,0x75,0xD3,0xBA, | ||
405 | 0xC6,0x00,0x8B,0x4E,0x1C,0x8B,0x46,0x1A,0x3B,0xC8,0x73,0x1E,0x01,0x4E,0x2A,0x2B, | ||
406 | 0xC1,0x89,0x46,0x1A,0xC5,0x76,0x00,0xF3,0x6E,0x8E,0xD9,0x89,0x76,0x00,0x3D,0x20, | ||
407 | 0x00,0x72,0x3D,0x8B,0xC7,0x24,0x3F,0xE6,0xD4,0xC3,0x85,0xC0,0x74,0x39,0x8B,0xC8, | ||
408 | 0x01,0x46,0x2A,0xC5,0x76,0x00,0xF3,0x6E,0x8E,0xD9,0x83,0xCB,0x02,0x89,0x5E,0x26, | ||
409 | 0xE8,0xD9,0xED,0xF6,0xC7,0x01,0x75,0x39,0x8A,0x86,0xA5,0x00,0x24,0xF9,0xE6,0x0C, | ||
410 | 0x88,0x86,0xA5,0x00,0xF6,0xC7,0x10,0x75,0xCA,0xB0,0x02,0xE8,0xE4,0xF6,0xEB,0xC3, | ||
411 | 0xF6,0xC7,0x01,0x74,0xEF,0xEB,0xBC,0xF6,0xC7,0x01,0x74,0xDC,0x8A,0x86,0xA5,0x00, | ||
412 | 0xA8,0x02,0x74,0x11,0x81,0xE3,0xFF,0xFE,0x81,0xCB,0x00,0x02,0x89,0x5E,0x26,0xEB, | ||
413 | 0xC7,0x8A,0x86,0xA5,0x00,0x24,0xFB,0x0C,0x02,0xE6,0x0C,0x88,0x86,0xA5,0x00,0xEB, | ||
414 | 0x92,0x90,0xFD,0xF7,0xDF,0x7F,0xFE,0xFB,0xEF,0xBF,0x00,0x04,0x00,0x04,0x05,0x04, | ||
415 | 0x05,0x04,0x01,0x04,0x00,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
416 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x02,0x04,0x00,0x04,0x05,0x04, | ||
417 | 0x05,0x04,0x01,0x04,0x00,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
418 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04, | ||
419 | 0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
420 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04, | ||
421 | 0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
422 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x03,0x04,0x00,0x04,0x05,0x04, | ||
423 | 0x05,0x04,0x01,0x04,0x00,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
424 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x02,0x04,0x00,0x04,0x05,0x04, | ||
425 | 0x05,0x04,0x01,0x04,0x00,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
426 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04, | ||
427 | 0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
428 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04, | ||
429 | 0x05,0x04,0x07,0x04,0x07,0x04,0x05,0x04,0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04, | ||
430 | 0x05,0x04,0x06,0x04,0x06,0x04,0x05,0x04,0x05,0x04,0x33,0xDB,0x8A,0xD8,0x8A,0x87, | ||
431 | 0x6C,0x12,0xE6,0xFE,0xC1,0xE3,0x02,0xE4,0xCE,0xA8,0x04,0x75,0x09,0xA8,0x02,0x74, | ||
432 | 0x03,0xE9,0x2C,0xFE,0xF9,0xC3,0x50,0x53,0xE8,0xCB,0xFC,0x5B,0x58,0xA8,0x02,0x74, | ||
433 | 0x03,0xE9,0x1C,0xFE,0xF8,0xC3,0x33,0xDB,0x8A,0xD8,0x8A,0x87,0x6C,0x12,0xE6,0xFE, | ||
434 | 0xC1,0xE3,0x02,0xE9,0xD0,0xFB,0x9A,0x1A,0xC6,0x1A,0x00,0x00,0x02,0x00,0x04,0x00, | ||
435 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
436 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0A,0x00,0x02,0x00,0x04,0x00, | ||
437 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
438 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0C,0x00,0x02,0x00,0x04,0x00, | ||
439 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
440 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0A,0x00,0x02,0x00,0x04,0x00, | ||
441 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
442 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0E,0x00,0x02,0x00,0x04,0x00, | ||
443 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
444 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0A,0x00,0x02,0x00,0x04,0x00, | ||
445 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
446 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0C,0x00,0x02,0x00,0x04,0x00, | ||
447 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
448 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x0A,0x00,0x02,0x00,0x04,0x00, | ||
449 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x08,0x00,0x02,0x00,0x04,0x00, | ||
450 | 0x02,0x00,0x06,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0xC3,0x90,0xDA,0x14,0x94,0x15, | ||
451 | 0x5C,0x13,0xE6,0x13,0xDA,0x1B,0xDA,0x1B,0xE6,0x13,0xDA,0x1B,0x8B,0x94,0x64,0x12, | ||
452 | 0xC1,0xE6,0x04,0xA8,0x01,0x74,0x35,0x50,0x33,0xC0,0x8A,0xC2,0xE6,0xFE,0xE4,0xA0, | ||
453 | 0x85,0xC0,0x74,0x27,0x8B,0xD8,0x2E,0x8A,0x9F,0xDA,0x1A,0x52,0x56,0x2E,0x8B,0xA8, | ||
454 | 0x44,0x00,0x8B,0x56,0x28,0xEC,0xA8,0x01,0x75,0x0D,0x88,0x86,0xAD,0x00,0x24,0x0E, | ||
455 | 0x8A,0xD8,0x2E,0xFF,0x97,0xDC,0x1B,0x5E,0x5A,0xEB,0xCD,0x58,0xA8,0x02,0x74,0x36, | ||
456 | 0x83,0xC6,0x10,0x33,0xC0,0x8A,0xC6,0xE6,0xFE,0xE4,0xA0,0x85,0xC0,0x74,0x27,0x8B, | ||
457 | 0xD8,0x2E,0x8A,0x9F,0xDA,0x1A,0x52,0x56,0x2E,0x8B,0xA8,0x44,0x00,0x8B,0x56,0x28, | ||
458 | 0xEC,0xA8,0x01,0x75,0x0D,0x88,0x86,0xAD,0x00,0x24,0x0E,0x8A,0xD8,0x2E,0xFF,0x97, | ||
459 | 0xDC,0x1B,0x5E,0x5A,0xEB,0xCD,0xC3,0x90,0x32,0xE4,0x8B,0xD8,0x8B,0xD0,0x2E,0x8A, | ||
460 | 0x9F,0x9A,0x19,0x2E,0x22,0x97,0x92,0x19,0x56,0x52,0x8A,0xC3,0x24,0x03,0x03,0xC6, | ||
461 | 0x80,0xE3,0x04,0xD0,0xEB,0x2E,0xFF,0x97,0xD6,0x1A,0x58,0x5E,0xA9,0x55,0x00,0x75, | ||
462 | 0xD9,0xC3,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5C,0x12,0xE6,0xFE,0xE4,0x00, | ||
463 | 0x22,0xC4,0x74,0x08,0x33,0xF6,0xE8,0xBF,0xFF,0xEB,0xEE,0x90,0xE4,0x04,0x07,0xE4, | ||
464 | 0x04,0x1F,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B, | ||
465 | 0xC0,0x8E,0xD8,0xA1,0x5E,0x12,0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x74,0x08,0xBE,0x04, | ||
466 | 0x00,0xE8,0x94,0xFF,0xEB,0xED,0xE4,0x04,0x07,0xE4,0x04,0x1F,0xB8,0x00,0x80,0xBA, | ||
467 | 0x22,0xFF,0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5C,0x12, | ||
468 | 0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x74,0x18,0x33,0xF6,0xE8,0x6B,0xFF,0xA1,0x60,0x12, | ||
469 | 0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x74,0xE5,0xBE,0x08,0x00,0xE8,0x5A,0xFF,0xEB,0xDD, | ||
470 | 0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x75,0xED,0xE4,0x04,0x07,0xE4,0x04, | ||
471 | 0xA1,0x5C,0x12,0xE6,0xFE,0xE4,0x04,0x1F,0xE4,0x04,0xB8,0x00,0x80,0xBA,0x22,0xFF, | ||
472 | 0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5E,0x12,0xE6,0xFE, | ||
473 | 0xE4,0x00,0x22,0xC4,0x74,0x19,0xBE,0x04,0x00,0xE8,0x1C,0xFF,0xA1,0x62,0x12,0xE6, | ||
474 | 0xFE,0xE4,0x00,0x22,0xC4,0x74,0xE4,0xBE,0x0C,0x00,0xE8,0x0B,0xFF,0xEB,0xDC,0xA1, | ||
475 | 0x62,0x12,0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x75,0xED,0xE4,0x04,0x07,0xE4,0x04,0xA1, | ||
476 | 0x5E,0x12,0xE6,0xFE,0xE4,0x04,0x1F,0xE4,0x04,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF, | ||
477 | 0x61,0xCF,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5C,0x12,0xE6,0xFE,0xE4,0x80, | ||
478 | 0x84,0xC4,0x74,0x08,0x33,0xF6,0xE8,0x53,0xFE,0xEB,0xEE,0x90,0xB8,0x00,0x80,0xBA, | ||
479 | 0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1, | ||
480 | 0x5E,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0x08,0xBE,0x02,0x00,0xE8,0x2C,0xFE, | ||
481 | 0xEB,0xED,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90,0x60,0x1E, | ||
482 | 0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0x08, | ||
483 | 0xBE,0x04,0x00,0xE8,0x06,0xFE,0xEB,0xED,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x07, | ||
484 | 0x1F,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x62,0x12,0xE6,0xFE, | ||
485 | 0xE4,0x80,0x84,0xC4,0x74,0x08,0xBE,0x06,0x00,0xE8,0xE0,0xFD,0xEB,0xED,0xB8,0x00, | ||
486 | 0x80,0xBA,0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E, | ||
487 | 0xD8,0xA1,0x5C,0x12,0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x74,0x18,0x33,0xF6,0xE8,0x37, | ||
488 | 0xFE,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0xE5,0xBE,0x04,0x00,0xE8, | ||
489 | 0xAA,0xFD,0xEB,0xDD,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x75,0xED,0xA1, | ||
490 | 0x5C,0x12,0xE6,0xFE,0xE4,0x04,0x07,0xE4,0x04,0x1F,0xB8,0x00,0x80,0xBA,0x22,0xFF, | ||
491 | 0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5E,0x12,0xE6,0xFE, | ||
492 | 0xE4,0x00,0x22,0xC4,0x74,0x19,0xBE,0x04,0x00,0xE8,0xEC,0xFD,0xA1,0x62,0x12,0xE6, | ||
493 | 0xFE,0xE4,0x80,0x84,0xC4,0x74,0xE4,0xBE,0x06,0x00,0xE8,0x5F,0xFD,0xEB,0xDC,0xA1, | ||
494 | 0x62,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x75,0xED,0xA1,0x5E,0x12,0xE6,0xFE,0xE4, | ||
495 | 0x04,0x07,0xE4,0x04,0x1F,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x61,0xCF,0x60,0x1E, | ||
496 | 0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5C,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0x18, | ||
497 | 0x33,0xF6,0xE8,0x27,0xFD,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x74,0xE5, | ||
498 | 0xBE,0x08,0x00,0xE8,0x92,0xFD,0xEB,0xDD,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x00,0x22, | ||
499 | 0xC4,0x75,0xED,0xE4,0x04,0x07,0xE4,0x04,0x1F,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF, | ||
500 | 0x61,0xCF,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1,0x5E,0x12,0xE6,0xFE,0xE4,0x80, | ||
501 | 0x84,0xC4,0x74,0x19,0xBE,0x02,0x00,0xE8,0xE2,0xFC,0xA1,0x62,0x12,0xE6,0xFE,0xE4, | ||
502 | 0x00,0x22,0xC4,0x74,0xE4,0xBE,0x0C,0x00,0xE8,0x4D,0xFD,0xEB,0xDC,0xA1,0x62,0x12, | ||
503 | 0xE6,0xFE,0xE4,0x00,0x22,0xC4,0x75,0xED,0xE4,0x04,0x07,0xE4,0x04,0x1F,0xB8,0x00, | ||
504 | 0x80,0xBA,0x22,0xFF,0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1, | ||
505 | 0x5C,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0x18,0x33,0xF6,0xE8,0x9D,0xFC,0xA1, | ||
506 | 0x60,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0xE5,0xBE,0x04,0x00,0xE8,0x8C,0xFC, | ||
507 | 0xEB,0xDD,0xA1,0x60,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x75,0xED,0x07,0x1F,0xB8, | ||
508 | 0x00,0x80,0xBA,0x22,0xFF,0xEF,0x61,0xCF,0x60,0x1E,0x06,0x2B,0xC0,0x8E,0xD8,0xA1, | ||
509 | 0x5E,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0x19,0xBE,0x02,0x00,0xE8,0x5C,0xFC, | ||
510 | 0xA1,0x62,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x74,0xE4,0xBE,0x06,0x00,0xE8,0x4B, | ||
511 | 0xFC,0xEB,0xDC,0xA1,0x62,0x12,0xE6,0xFE,0xE4,0x80,0x84,0xC4,0x75,0xED,0x07,0x1F, | ||
512 | 0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x61,0xCF,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E, | ||
513 | 0xD8,0x90,0x2A,0xC0,0xE6,0xFE,0xE4,0xCE,0xA8,0x01,0x74,0x14,0x33,0xDB,0xE8,0xD5, | ||
514 | 0xF6,0xEB,0xEF,0x90,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90, | ||
515 | 0xF6,0x06,0x05,0x01,0x01,0x75,0xED,0xB0,0x01,0xE6,0xFE,0xE4,0xCE,0xA8,0x01,0x74, | ||
516 | 0xE3,0xBB,0x04,0x00,0xE8,0xAF,0xF6,0xEB,0xC9,0x90,0x60,0x1E,0x06,0x2B,0xC0,0x8E, | ||
517 | 0xD8,0x90,0xFB,0x90,0xFA,0x2A,0xC0,0xE6,0xFE,0xE4,0xCE,0xA8,0x02,0x74,0x13,0x33, | ||
518 | 0xDB,0xE8,0xCC,0xF8,0xEB,0xEC,0xB8,0x00,0x80,0xBA,0x22,0xFF,0xEF,0x07,0x1F,0x61, | ||
519 | 0xCF,0x90,0xA8,0x04,0x74,0xF0,0x33,0xDB,0xE8,0x5B,0xF7,0xEB,0xD5,0x90,0x60,0x1E, | ||
520 | 0x06,0x2B,0xC0,0x8E,0xD8,0x90,0xFB,0x90,0xFA,0xB0,0x01,0xE6,0xFE,0xE4,0xCE,0xA8, | ||
521 | 0x02,0x74,0x15,0xBB,0x04,0x00,0xE8,0x97,0xF8,0xEB,0xEB,0x90,0xB8,0x00,0x80,0xBA, | ||
522 | 0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90,0xA8,0x04,0x74,0xF0,0xBB,0x04,0x00,0xE8, | ||
523 | 0x24,0xF7,0xEB,0xD2,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x09,0x9C,0x0E,0xE8,0x6B, | ||
524 | 0xF2,0x90,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x29,0x9C,0x0E,0xE8,0x5D,0xF2,0x90, | ||
525 | 0x72,0x20,0x72,0x20,0x72,0x20,0xCE,0x1D,0x92,0x1C,0xE6,0x1C,0x1A,0x1E,0x72,0x20, | ||
526 | 0x82,0x1D,0xAE,0x1E,0x38,0x1F,0x72,0x20,0x82,0x1D,0x72,0x20,0x72,0x20,0x38,0x1F, | ||
527 | 0x72,0x20,0x72,0x20,0x72,0x20,0xF4,0x1D,0xBC,0x1C,0x34,0x1D,0x64,0x1E,0x72,0x20, | ||
528 | 0xA8,0x1D,0xF2,0x1E,0x78,0x1F,0x72,0x20,0xA8,0x1D,0x72,0x20,0x72,0x20,0x78,0x1F, | ||
529 | 0xFC,0xB9,0x40,0x00,0x8C,0xCB,0xB8,0x64,0x20,0x2B,0xFF,0xAB,0x93,0xAB,0x93,0xE2, | ||
530 | 0xFA,0xC7,0x06,0x4C,0x00,0xA8,0x11,0x83,0x3E,0x44,0x12,0x00,0x75,0x20,0xC7,0x06, | ||
531 | 0x3C,0x00,0x08,0x4B,0xC7,0x06,0x30,0x00,0xBA,0x1F,0xC7,0x06,0x34,0x00,0xFA,0x1F, | ||
532 | 0xF6,0x06,0x05,0x01,0x01,0x75,0x06,0xC7,0x06,0x38,0x00,0x2E,0x20,0xC3,0xC7,0x06, | ||
533 | 0x3C,0x00,0x56,0x4B,0x33,0xDB,0x8A,0x1E,0x54,0x12,0xC1,0xE3,0x02,0x02,0x1E,0x56, | ||
534 | 0x12,0x2E,0x8B,0x87,0x80,0x20,0xA3,0x30,0x00,0x8A,0x1E,0x55,0x12,0xC1,0xE3,0x02, | ||
535 | 0x02,0x1E,0x57,0x12,0x2E,0x8B,0x87,0xA0,0x20,0xA3,0x34,0x00,0xC3,0x8B,0x86,0x9E, | ||
536 | 0x00,0xE6,0xFE,0x86,0xC4,0xE6,0xD0,0xC3,0x8B,0x86,0x9E,0x00,0xE6,0xFE,0x33,0xD2, | ||
537 | 0x8A,0xD4,0xC3,0x51,0xB9,0x10,0x27,0xE4,0x0A,0x90,0x90,0x84,0xC0,0x74,0x05,0xE2, | ||
538 | 0xF6,0x59,0xF9,0xC3,0x59,0xF8,0xC3,0x84,0xC0,0x78,0x1E,0x51,0x8A,0xE8,0x8A,0xC8, | ||
539 | 0xB8,0x01,0x00,0xD3,0xE0,0x09,0x86,0x98,0x00,0x3A,0xAE,0xA0,0x00,0x59,0x75,0x10, | ||
540 | 0xE8,0xA9,0xE5,0x83,0x4E,0x26,0x02,0xF9,0xC3,0x98,0x89,0x86,0x98,0x00,0xEB,0xF0, | ||
541 | 0xF8,0xC3,0x84,0xC0,0x78,0x12,0x51,0x8A,0xE0,0x8A,0xC8,0xB8,0x01,0x00,0xD3,0xE0, | ||
542 | 0x59,0xF7,0xD0,0x21,0x86,0x98,0x00,0xC3,0xC7,0x86,0x98,0x00,0x00,0x00,0xC3,0x83, | ||
543 | 0xC2,0x04,0x8A,0x86,0xA6,0x00,0x0C,0x04,0xEE,0x83,0xEA,0x04,0xC3,0xE8,0x93,0xFF, | ||
544 | 0x72,0x04,0xB0,0x82,0xE6,0x0A,0xC3,0x8B,0x46,0x26,0xA8,0xFD,0x74,0x11,0x8A,0x86, | ||
545 | 0xA5,0x00,0xA8,0x06,0x74,0x08,0x24,0xF9,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xC3,0xF6, | ||
546 | 0xC4,0x01,0x74,0x0A,0x8A,0x86,0xA5,0x00,0x24,0xFB,0x0C,0x02,0xEB,0x0C,0xA8,0x02, | ||
547 | 0x75,0x0F,0x8A,0x86,0xA5,0x00,0x24,0xFD,0x0C,0x04,0x3A,0x86,0xA5,0x00,0x75,0xD8, | ||
548 | 0xC3,0x8A,0x86,0xA5,0x00,0xEB,0xCF,0xE4,0xD8,0x33,0xDB,0x8A,0xD8,0xC0,0xEB,0x04, | ||
549 | 0x2E,0x8A,0x9F,0x66,0x17,0x88,0x9E,0xA9,0x00,0x8B,0x5E,0x26,0x80,0xE3,0x3F,0xF6, | ||
550 | 0xC7,0x04,0x74,0x07,0xA8,0x10,0x75,0x03,0x80,0xCB,0x40,0xF6,0xC7,0x08,0x74,0x07, | ||
551 | 0xA8,0x80,0x75,0x03,0x80,0xCB,0x40,0x88,0x5E,0x26,0x8A,0x86,0xA5,0x00,0xF6,0xC3, | ||
552 | 0xFD,0x74,0x0D,0xA8,0x06,0x74,0x08,0x24,0xF9,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xC3, | ||
553 | 0xF6,0xC7,0x01,0x74,0x04,0x0C,0x02,0xEB,0xF0,0xF6,0xC3,0x02,0x75,0xE9,0x0C,0x04, | ||
554 | 0xEB,0xE7,0xC4,0x04,0xC4,0x04,0x85,0x04,0x59,0x04,0x48,0x04,0x41,0x04,0xC3,0x03, | ||
555 | 0x82,0x03,0x41,0x03,0x82,0x02,0x57,0x02,0x41,0x02,0x82,0x01,0x41,0x01,0x82,0x00, | ||
556 | 0x41,0x00,0x4E,0x02,0xAD,0x01,0x57,0x01,0x2D,0x00,0x2B,0x00,0x27,0x00,0x21,0x00, | ||
557 | 0x16,0x00,0xF4,0x04,0xF4,0x04,0xA3,0x04,0x6F,0x04,0x5B,0x04,0x51,0x04,0xF4,0x03, | ||
558 | 0xA3,0x03,0x51,0x03,0xA3,0x02,0x6D,0x02,0x51,0x02,0xA3,0x01,0x51,0x01,0xA3,0x00, | ||
559 | 0x51,0x00,0x62,0x02,0xD9,0x01,0x6D,0x01,0x38,0x00,0x36,0x00,0x31,0x00,0x29,0x00, | ||
560 | 0x1B,0x00,0x51,0x57,0xBF,0x02,0x00,0xEB,0x0F,0x90,0x51,0x56,0xBF,0x01,0x00,0xEB, | ||
561 | 0x07,0x90,0x51,0x56,0xBF,0x03,0x00,0x90,0x3C,0x19,0x76,0x02,0xB0,0x17,0x98,0x8B, | ||
562 | 0xF0,0x8A,0x82,0xC4,0x00,0x2A,0xE4,0x8B,0xF0,0x83,0xFE,0x18,0x73,0x46,0xD1,0xE6, | ||
563 | 0x2E,0x8B,0x8C,0x52,0x22,0xF7,0x46,0x38,0x80,0x00,0x74,0x05,0x2E,0x8B,0x8C,0x82, | ||
564 | 0x22,0xF7,0xC7,0x02,0x00,0x74,0x12,0x3B,0x8E,0x94,0x00,0x74,0x0C,0x89,0x8E,0x94, | ||
565 | 0x00,0x8A,0xC5,0xE6,0xEC,0x8A,0xC1,0xE6,0xE4,0xF7,0xC7,0x01,0x00,0x74,0x12,0x3B, | ||
566 | 0x8E,0x96,0x00,0x74,0x0C,0x89,0x8E,0x96,0x00,0x8A,0xC5,0xE6,0xF8,0x8A,0xC1,0xE6, | ||
567 | 0xF0,0x5E,0x59,0xC3,0x77,0x06,0x8B,0x8E,0x8E,0x00,0xEB,0xC5,0x8B,0x8E,0x90,0x00, | ||
568 | 0xEB,0xBF,0xD5,0x03,0xF6,0x00,0x3E,0x00,0x10,0x00,0x04,0x00,0xCA,0x04,0x33,0x01, | ||
569 | 0x4D,0x00,0x14,0x00,0x05,0x00,0x01,0x03,0x05,0x07,0x09,0x00,0x01,0x02,0x03,0x04, | ||
570 | 0x80,0x84,0x1E,0x00,0xA0,0x25,0x26,0x00,0x00,0x00,0x60,0x8B,0xF0,0x33,0xFF,0x2E, | ||
571 | 0xA1,0x50,0x23,0x2E,0x8B,0x16,0x52,0x23,0xBB,0x32,0x23,0xF7,0x46,0x38,0x80,0x00, | ||
572 | 0x74,0x0C,0x2E,0xA1,0x54,0x23,0x2E,0x8B,0x16,0x56,0x23,0xBB,0x3C,0x23,0xB9,0x05, | ||
573 | 0x00,0x2E,0x3B,0x31,0x73,0x0A,0x47,0x47,0xE2,0xF7,0xB8,0xFF,0xFF,0xEB,0x1D,0x90, | ||
574 | 0xD1,0xEF,0x2E,0x8A,0x8D,0x46,0x23,0x2A,0xED,0xD1,0xEA,0xD1,0xD8,0xE2,0xFA,0xF7, | ||
575 | 0xF6,0x05,0x02,0x00,0xC1,0xE8,0x02,0x2E,0x8A,0xA5,0x4B,0x23,0x2E,0xA3,0x58,0x23, | ||
576 | 0x61,0x2E,0xA1,0x58,0x23,0xC3,0x08,0x00,0x20,0x00,0x80,0x00,0x00,0x02,0x60,0x09, | ||
577 | 0x08,0x00,0x20,0x00,0x80,0x00,0x00,0x02,0x00,0x08,0x00,0x00,0x01,0x00,0x02,0x00, | ||
578 | 0x03,0x00,0x04,0x00,0x52,0x56,0x57,0x85,0xC0,0x74,0x05,0x3D,0x01,0x09,0x76,0x03, | ||
579 | 0xB8,0x01,0x09,0xBF,0x5B,0x01,0xF7,0x46,0x38,0x80,0x00,0x74,0x03,0xBF,0xB2,0x01, | ||
580 | 0x33,0xF6,0x2E,0x3B,0x84,0xB6,0x23,0x76,0x04,0x46,0x46,0xEB,0xF5,0xF7,0xE7,0x2E, | ||
581 | 0x8B,0xBC,0xC0,0x23,0x03,0xC7,0x83,0xD2,0x00,0xD1,0xE7,0xF7,0xF7,0x2E,0x8A,0xA4, | ||
582 | 0xCA,0x23,0x5F,0x5E,0x5A,0xC3,0xE4,0x3E,0x80,0xBE,0xC3,0x00,0x03,0x75,0x0C,0xF7, | ||
583 | 0x46,0x7A,0x20,0x00,0x74,0x05,0x0C,0x80,0xE6,0x3E,0xC3,0x24,0x7F,0xE6,0x3E,0xC3, | ||
584 | 0x24,0x03,0x88,0x86,0xC3,0x00,0x8A,0xE0,0xE4,0x10,0x24,0xFC,0x0A,0xC4,0xE6,0x10, | ||
585 | 0x80,0x8E,0xA1,0x00,0x42,0xE8,0xCE,0xFF,0xC3,0x90,0x56,0x8B,0xF0,0x83,0xE6,0x07, | ||
586 | 0xD1,0xE6,0x2E,0xFF,0xA4,0x58,0x24,0x90,0x68,0x24,0x6C,0x24,0x70,0x24,0x74,0x24, | ||
587 | 0x78,0x24,0x87,0x24,0x87,0x24,0x87,0x24,0xB4,0x00,0xEB,0x0E,0xB4,0xC0,0xEB,0x0A, | ||
588 | 0xB4,0x40,0xEB,0x06,0xB4,0x20,0xEB,0x02,0xB4,0xA0,0xE4,0x10,0x24,0x1F,0x0A,0xC4, | ||
589 | 0xE6,0x10,0x80,0x8E,0xA1,0x00,0x42,0x5E,0xC3,0x90,0x3C,0x02,0x77,0x12,0x8A,0xE0, | ||
590 | 0xE4,0x10,0x24,0xF3,0xC0,0xE4,0x02,0x0A,0xC4,0xE6,0x10,0x80,0x8E,0xA1,0x00,0x42, | ||
591 | 0xC3,0x90,0x8B,0x5E,0x38,0x84,0xC0,0x74,0x1F,0x3C,0x02,0x74,0x20,0x83,0xCB,0x08, | ||
592 | 0x8B,0x46,0x2E,0x3B,0x46,0x3C,0x77,0x0C,0xE8,0x88,0xFC,0x72,0x07,0xB0,0x24,0xE6, | ||
593 | 0x0A,0x83,0xCB,0x10,0x89,0x5E,0x38,0xC3,0x83,0xE3,0xF7,0xEB,0xF7,0xF7,0xC3,0x10, | ||
594 | 0x00,0x74,0xF5,0xE8,0x6D,0xFC,0x72,0xEC,0x8A,0x86,0xC0,0x00,0xE6,0x38,0xB0,0x23, | ||
595 | 0xE6,0x0A,0xEB,0xE0,0x8B,0x5E,0x38,0x8B,0x46,0x2E,0x3B,0x46,0x3C,0xE4,0xD8,0x77, | ||
596 | 0x0B,0x24,0xFE,0x80,0xCB,0x12,0xE6,0xD8,0x89,0x5E,0x38,0xC3,0x0C,0x01,0x80,0xCB, | ||
597 | 0x02,0xEB,0xF3,0x50,0x33,0xDB,0xC1,0xE8,0x04,0x25,0x0F,0x0F,0x8A,0xD8,0x2E,0x8A, | ||
598 | 0x87,0x66,0x17,0x8A,0xDC,0x2E,0x8A,0xA7,0x66,0x17,0x09,0x46,0x3E,0x58,0xC3,0x50, | ||
599 | 0x33,0xDB,0xC1,0xE8,0x04,0x25,0x0F,0x0F,0x8A,0xD8,0x2E,0x8A,0x87,0x66,0x17,0x8A, | ||
600 | 0xDC,0x2E,0x8A,0xA7,0x66,0x17,0xF7,0xD0,0x21,0x46,0x3E,0x58,0xC3,0x8B,0x46,0x3E, | ||
601 | 0x33,0xDB,0x8A,0xD8,0x0A,0xDC,0x2E,0x8A,0x87,0x76,0x17,0xE6,0x2C,0x8A,0xE0,0xE4, | ||
602 | 0x2A,0x24,0x0F,0x0A,0xC4,0xE6,0x2A,0x8A,0x86,0xA5,0x00,0x84,0xE4,0x75,0x0D,0xA8, | ||
603 | 0x80,0x74,0x11,0x24,0x7F,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xC3,0xA8,0x80,0x75,0x04, | ||
604 | 0x0C,0x80,0xEB,0xF1,0xC3,0x1E,0x60,0x33,0xC9,0x33,0xD2,0x33,0xF6,0x8E,0xD9,0x8D, | ||
605 | 0xBE,0xFD,0x00,0x57,0x8B,0x05,0x84,0xC0,0x74,0x16,0x8B,0xD1,0x42,0x8B,0xFE,0x4F, | ||
606 | 0x78,0x09,0x38,0xA3,0xE4,0x00,0x74,0x08,0x4F,0x79,0xF7,0x88,0xA2,0xE4,0x00,0x46, | ||
607 | 0x5F,0x83,0xC7,0x09,0x41,0x83,0xF9,0x10,0x72,0xD9,0x89,0xB6,0x86,0x00,0x89,0x96, | ||
608 | 0x84,0x00,0x61,0x1F,0xC3,0x53,0xC7,0x46,0x66,0x00,0x00,0x8B,0x46,0x64,0xA9,0x40, | ||
609 | 0x00,0x74,0x0D,0xB3,0x00,0xA9,0x80,0x00,0x74,0x02,0xB3,0x7F,0x88,0x9E,0xC1,0x00, | ||
610 | 0x32,0xDB,0xA9,0x02,0x00,0x74,0x03,0x80,0xCB,0x40,0xA9,0x00,0x40,0x74,0x03,0x80, | ||
611 | 0xCB,0x02,0xA9,0x00,0x80,0x74,0x03,0x80,0xCB,0x01,0xA9,0x30,0x1E,0x74,0x03,0x80, | ||
612 | 0xCB,0xBC,0xA9,0x00,0x20,0x74,0x03,0x80,0xCB,0x08,0xA9,0x04,0x01,0x74,0x03,0x80, | ||
613 | 0xCB,0x10,0xA9,0x08,0x00,0x74,0x03,0x80,0xCB,0x20,0x88,0x9E,0xC2,0x00,0x5B,0xC3, | ||
614 | 0x06,0x51,0x57,0x50,0x16,0x07,0x8D,0xBE,0xC4,0x00,0xB9,0x1F,0x00,0x33,0xC0,0xAA, | ||
615 | 0x40,0xE2,0xFC,0x8B,0x86,0x92,0x00,0x89,0x86,0x8E,0x00,0x89,0x86,0x90,0x00,0x58, | ||
616 | 0x5F,0x59,0x07,0xC3,0xE4,0xD8,0xC0,0xE8,0x04,0x53,0x25,0x0F,0x00,0x8B,0xD8,0x2E, | ||
617 | 0x8A,0x87,0x66,0x17,0x88,0x86,0xA9,0x00,0x5A,0xC3,0x08,0x86,0xAC,0x00,0xC6,0x86, | ||
618 | 0xBA,0x00,0x01,0xB0,0x0E,0xE8,0xEA,0xE9,0xC3,0xAD,0x36,0xA3,0xB4,0x13,0xAD,0x36, | ||
619 | 0xA3,0xB6,0x13,0xAD,0x36,0xA3,0xB8,0x13,0x83,0xE9,0x06,0x36,0xF7,0x06,0xB6,0x13, | ||
620 | 0x0F,0x00,0xC3,0x8A,0x46,0x26,0xF7,0x46,0x48,0x80,0x00,0x74,0x02,0x0C,0x10,0x88, | ||
621 | 0x86,0xBD,0x00,0x32,0xC0,0x83,0x7E,0x1A,0x00,0x75,0x0E,0x8B,0x5E,0x40,0x43,0x80, | ||
622 | 0xE3,0xFE,0x3B,0x5E,0x08,0x75,0x02,0x0C,0x01,0x83,0x7E,0x3A,0x00,0x75,0x0D,0x1E, | ||
623 | 0xC5,0x5E,0x14,0x8B,0x1F,0x1F,0x85,0xDB,0x75,0x02,0x0C,0x02,0xF7,0x46,0x38,0x10, | ||
624 | 0x00,0x74,0x02,0x0C,0x04,0x8B,0x5E,0x7A,0xF7,0xC3,0x02,0x00,0x74,0x02,0x0C,0x08, | ||
625 | 0xF7,0xC3,0x04,0x00,0x74,0x02,0x0C,0x10,0xF7,0xC3,0x08,0x00,0x74,0x02,0x0C,0x20, | ||
626 | 0xF7,0xC3,0x40,0x00,0x74,0x02,0x0C,0x40,0x88,0x86,0xBF,0x00,0xC3,0x90,0x6A,0x00, | ||
627 | 0x1F,0xC6,0x06,0x93,0x12,0x0D,0x9C,0x0E,0xE8,0xF1,0xEB,0x90,0xB0,0x02,0xE6,0xDA, | ||
628 | 0xF8,0xC3,0x33,0xC0,0xE6,0xDA,0xF8,0xC3,0xB0,0x01,0xE6,0xD8,0xF8,0xC3,0x33,0xC0, | ||
629 | 0xE6,0xD8,0xF8,0xC3,0xB0,0xFF,0xE8,0x4E,0xFA,0xE8,0xA1,0xFA,0xF8,0xC3,0xAC,0x49, | ||
630 | 0xE8,0xAF,0xFB,0xF8,0xC3,0x90,0xAC,0x49,0xE8,0x15,0xFD,0xF8,0xC3,0x90,0xAC,0x49, | ||
631 | 0xE8,0x67,0xFD,0xF8,0xC3,0x90,0xAC,0x49,0xE8,0x1F,0xFD,0xF8,0xC3,0x90,0xAC,0x49, | ||
632 | 0xE6,0x34,0xF8,0xC3,0xAC,0x49,0xE6,0x36,0xF8,0xC3,0xAC,0x49,0x3C,0x02,0x77,0x1F, | ||
633 | 0x84,0xC0,0x75,0x1D,0xE4,0x14,0x24,0xEF,0xE6,0x14,0xE4,0x12,0x24,0x3F,0xE6,0x12, | ||
634 | 0xE4,0x16,0xA8,0x04,0x74,0x09,0xE8,0xEA,0xF9,0x72,0x04,0xB0,0x18,0xE6,0x0A,0xF8, | ||
635 | 0xC3,0x8A,0xE0,0xE4,0x14,0x0C,0x10,0xE6,0x14,0xE4,0x12,0x0C,0xC0,0xF6,0xC4,0x01, | ||
636 | 0x74,0x02,0x24,0x7F,0xE6,0x12,0xF8,0xC3,0xAC,0x49,0xE8,0x25,0xFD,0xF8,0xC3,0x90, | ||
637 | 0xB8,0x00,0x40,0xE8,0x7D,0xFD,0xE8,0xB4,0xFD,0xE8,0xA8,0xFE,0xB0,0x01,0xE8,0xB9, | ||
638 | 0xFE,0xF8,0xC3,0x90,0xB8,0x00,0x40,0xE8,0x85,0xFD,0xE8,0xA0,0xFD,0xF8,0xC3,0x90, | ||
639 | 0xB8,0x00,0x10,0xE8,0x5D,0xFD,0xE8,0x94,0xFD,0xE8,0x88,0xFE,0xB0,0x08,0xE8,0x99, | ||
640 | 0xFE,0xF8,0xC3,0x90,0xB8,0x00,0x10,0xE8,0x65,0xFD,0xE8,0x80,0xFD,0xF8,0xC3,0x90, | ||
641 | 0xB8,0x00,0x80,0xE8,0x3D,0xFD,0xE8,0x74,0xFD,0xE8,0x68,0xFE,0xB0,0x02,0xE8,0x79, | ||
642 | 0xFE,0xF8,0xC3,0x90,0xB8,0x00,0x80,0xE8,0x45,0xFD,0xE8,0x60,0xFD,0xF8,0xC3,0x90, | ||
643 | 0xB8,0x00,0x20,0xE8,0x1D,0xFD,0xE8,0x54,0xFD,0xE8,0x48,0xFE,0xB0,0x04,0xE8,0x59, | ||
644 | 0xFE,0xF8,0xC3,0x90,0xB8,0x00,0x20,0xE8,0x25,0xFD,0xE8,0x40,0xFD,0xF8,0xC3,0x90, | ||
645 | 0xAC,0x49,0xE8,0x48,0x14,0xE4,0x3C,0x24,0xE7,0x0A,0xC4,0xE6,0x3C,0xF8,0xC3,0x90, | ||
646 | 0xB8,0xFC,0x3B,0x89,0x46,0x7C,0xE4,0x3C,0x0C,0x18,0xE6,0x3C,0xF8,0xC3,0xE4,0x12, | ||
647 | 0x0C,0x02,0xE6,0x12,0xF8,0xC3,0xE4,0x12,0x24,0xFD,0xEB,0xF6,0xE8,0xB5,0xFC,0xF8, | ||
648 | 0xC3,0x90,0x83,0x66,0x38,0xFD,0xF8,0xC3,0xAC,0x49,0xA8,0x01,0x74,0x06,0x83,0x4E, | ||
649 | 0x7A,0x20,0xEB,0x04,0x83,0x66,0x7A,0xDF,0xE8,0xCB,0xFB,0xF8,0xC3,0x90,0x8A,0x86, | ||
650 | 0xA5,0x00,0x0C,0x02,0x24,0xFB,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x81,0x4E,0x26,0x01, | ||
651 | 0x20,0xAC,0x49,0x32,0xE4,0x89,0x46,0x6E,0x83,0x4E,0x48,0x08,0x49,0x46,0xF9,0xC3, | ||
652 | 0x8A,0x86,0xA5,0x00,0x0C,0x02,0x24,0xFB,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x81,0x4E, | ||
653 | 0x26,0x01,0x20,0xAC,0xB4,0x0A,0xF6,0xE4,0xEB,0xD8,0xE8,0xFA,0x13,0xE4,0x3C,0x24, | ||
654 | 0xF8,0x0A,0xC4,0xE6,0x3C,0xF8,0xC3,0x90,0xAD,0x49,0x49,0x89,0x46,0x64,0xA9,0x01, | ||
655 | 0x00,0x74,0x1B,0x8B,0xD8,0x83,0xE3,0xFA,0x75,0x1A,0xA9,0x04,0x00,0x74,0x0F,0xE4, | ||
656 | 0x3E,0x0C,0x02,0xE6,0x3E,0xB8,0x38,0x44,0x89,0x46,0x62,0xF8,0xC3,0x90,0xE4,0x3E, | ||
657 | 0x24,0xFC,0xEB,0xEF,0xE4,0x3E,0x24,0xFC,0xE6,0x3E,0xE8,0xE8,0xFC,0xB8,0xAA,0x40, | ||
658 | 0xEB,0xE6,0xE8,0x6E,0xF8,0x72,0x05,0xB0,0x18,0xE6,0x0A,0xF8,0xC3,0x90,0xAC,0x49, | ||
659 | 0xE8,0xCF,0xF9,0xF8,0xC3,0x90,0xAC,0x49,0xE8,0xCF,0xF9,0xF8,0xC3,0x90,0xE8,0x68, | ||
660 | 0xFD,0x75,0x06,0x32,0xC0,0xE6,0xDA,0xF8,0xC3,0xB0,0x02,0xE6,0xDA,0x36,0xA0,0xB4, | ||
661 | 0x13,0x24,0x10,0x34,0x10,0xE8,0x16,0x01,0x36,0xA1,0xB4,0x13,0xA9,0x01,0x00,0x74, | ||
662 | 0x05,0xE8,0xFC,0xFE,0xEB,0x0E,0xA9,0x02,0x00,0x74,0x04,0x32,0xC0,0xEB,0x02,0xB0, | ||
663 | 0x01,0xE8,0xDE,0xFE,0x36,0xA1,0xB4,0x13,0xE8,0xB5,0x13,0xE4,0x3C,0x24,0xF8,0x0A, | ||
664 | 0xC4,0xE6,0x3C,0x36,0xA1,0xB4,0x13,0xC1,0xE8,0x05,0x25,0x01,0x00,0xE8,0xFA,0xFE, | ||
665 | 0x36,0xA0,0xB5,0x13,0x24,0x10,0xE8,0x59,0xFB,0x32,0xC0,0x36,0x8A,0x26,0xB5,0x13, | ||
666 | 0xF6,0xC4,0x04,0x74,0x09,0xFE,0xC0,0xF6,0xC4,0x08,0x74,0x02,0xFE,0xC0,0xE8,0xDB, | ||
667 | 0xFD,0x36,0xA1,0xB6,0x13,0x25,0x0F,0x00,0xE8,0x57,0xF9,0x36,0xA1,0xB6,0x13,0xC1, | ||
668 | 0xE8,0x04,0x25,0x03,0x00,0xE8,0xB8,0xFA,0x36,0xA1,0xB6,0x13,0xC1,0xE8,0x05,0x25, | ||
669 | 0x02,0x00,0xE8,0x05,0xFB,0x36,0xA1,0xB6,0x13,0xF6,0xC4,0x01,0x75,0x04,0x32,0xC0, | ||
670 | 0xEB,0x09,0x80,0xE4,0x02,0xD0,0xEC,0xB0,0x02,0x2A,0xC4,0xE8,0xAC,0xFA,0x36,0xF6, | ||
671 | 0x06,0xB7,0x13,0x40,0x74,0x05,0xE8,0x83,0xFE,0xEB,0x03,0xE8,0x84,0xFE,0x36,0xF6, | ||
672 | 0x06,0xB7,0x13,0x20,0x74,0x05,0xE8,0x65,0xFE,0xEB,0x03,0xE8,0x68,0xFE,0xF8,0xC3, | ||
673 | 0xE4,0x12,0x0C,0x01,0xE6,0x12,0xF8,0xC3,0xE4,0x12,0x24,0xFE,0xEB,0xF6,0xE4,0x14, | ||
674 | 0x24,0xF0,0x0C,0x05,0xE6,0x14,0xE4,0x2A,0x24,0xF0,0x0C,0x06,0xE6,0x2A,0xF8,0xC3, | ||
675 | 0xE4,0x2A,0x24,0xF0,0xE6,0x2A,0xE4,0x14,0x24,0xF0,0x0C,0x07,0xE6,0x14,0xF8,0xC3, | ||
676 | 0xAD,0x49,0x49,0xE8,0x64,0xF9,0x89,0x86,0x8E,0x00,0xF8,0xC3,0xAD,0x49,0x49,0xE8, | ||
677 | 0x58,0xF9,0x89,0x86,0x90,0x00,0xF8,0xC3,0x83,0x4E,0x26,0x04,0xE8,0xA8,0xF7,0xF8, | ||
678 | 0xC3,0x90,0x83,0x66,0x26,0xFB,0xE8,0x9E,0xF7,0xF8,0xC3,0x90,0xAC,0x49,0x84,0xC0, | ||
679 | 0x75,0x0D,0xE4,0x10,0x24,0xEF,0xE6,0x10,0x80,0x8E,0xA1,0x00,0x42,0xF8,0xC3,0xE4, | ||
680 | 0x10,0x0C,0x10,0xEB,0xF1,0x90,0xAC,0x49,0x3C,0x02,0x76,0x02,0x32,0xC0,0xC0,0xE0, | ||
681 | 0x04,0xA8,0x20,0x74,0x02,0x0C,0x08,0x24,0x18,0x8A,0xE0,0xE4,0x12,0x24,0xE7,0x0A, | ||
682 | 0xC4,0xE6,0x12,0x80,0x8E,0xA1,0x00,0x44,0xF8,0xC3,0xAC,0x49,0x88,0x86,0xC0,0x00, | ||
683 | 0xF8,0xC3,0xAC,0x49,0xE6,0x3A,0xF8,0xC3,0xAC,0x49,0x84,0xC0,0x74,0x08,0xE4,0x12, | ||
684 | 0x0C,0x04,0xE6,0x12,0xF8,0xC3,0xE4,0x12,0x24,0xFB,0xEB,0xF6,0xAC,0x49,0xE8,0xD6, | ||
685 | 0xF6,0x73,0x03,0xE8,0x27,0xF7,0xF8,0xC3,0xE4,0x12,0xA8,0x02,0x74,0x04,0x24,0xFD, | ||
686 | 0xE6,0x12,0xB8,0xF0,0x00,0xE8,0x87,0xFA,0x81,0x66,0x26,0xFF,0xF3,0xE8,0x57,0xF7, | ||
687 | 0xE8,0x9A,0xFA,0xF8,0xC3,0x90,0xB8,0x80,0x00,0xE8,0x57,0xFA,0x80,0x4E,0x27,0x08, | ||
688 | 0xE8,0x44,0xF7,0xE8,0x87,0xFA,0xF8,0xC3,0xB8,0x80,0x00,0xE8,0x61,0xFA,0x81,0x66, | ||
689 | 0x26,0xFF,0xF7,0xE8,0x31,0xF7,0xE8,0x74,0xFA,0xF8,0xC3,0x90,0xB8,0x10,0x00,0xE8, | ||
690 | 0x31,0xFA,0x80,0x4E,0x27,0x04,0xE8,0x1E,0xF7,0xE8,0x61,0xFA,0xF8,0xC3,0xB8,0x10, | ||
691 | 0x00,0xE8,0x3B,0xFA,0x81,0x66,0x26,0xFF,0xFB,0xE8,0x0B,0xF7,0xE8,0x4E,0xFA,0xF8, | ||
692 | 0xC3,0x90,0x33,0xC0,0xAC,0x49,0x3C,0x01,0x73,0x04,0xB0,0x01,0xEB,0x06,0x3C,0x0C, | ||
693 | 0x76,0x02,0xB0,0x0C,0x89,0x46,0x1C,0xF8,0xC3,0x90,0x81,0x4E,0x26,0x00,0x20,0x8A, | ||
694 | 0x86,0xA5,0x00,0x0C,0x02,0x24,0xFB,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x83,0x4E,0x26, | ||
695 | 0x01,0xF8,0xC3,0x90,0x81,0x4E,0x26,0x00,0x40,0x8A,0x86,0xA5,0x00,0x0C,0x02,0x88, | ||
696 | 0x86,0xA5,0x00,0xE6,0x0C,0xF8,0xC3,0x90,0xAC,0x49,0x50,0xE8,0x05,0xF6,0x58,0x72, | ||
697 | 0x08,0xE6,0x38,0xB0,0x23,0xE6,0x0A,0xF8,0xC3,0xF9,0xC3,0x90,0xAC,0x50,0xAD,0xE8, | ||
698 | 0x82,0xF8,0x5A,0xF6,0xC2,0x01,0x74,0x12,0x39,0x86,0x96,0x00,0x74,0x0C,0x89,0x86, | ||
699 | 0x96,0x00,0xE6,0xF0,0x86,0xE0,0xE6,0xF8,0x86,0xE0,0xF6,0xC2,0x02,0x74,0x10,0x39, | ||
700 | 0x86,0x94,0x00,0x74,0x0A,0x89,0x86,0x94,0x00,0xE6,0xE4,0x86,0xE0,0xE6,0xEC,0x83, | ||
701 | 0xE9,0x03,0xC3,0x90,0xE4,0x16,0x88,0x86,0xBC,0x00,0xE8,0xE6,0xFA,0x33,0xDB,0xE4, | ||
702 | 0x0C,0xA8,0x06,0x74,0x03,0x80,0xCB,0x01,0xA8,0x10,0x74,0x03,0x80,0xCB,0x02,0xA8, | ||
703 | 0x80,0x74,0x03,0x80,0xCB,0x04,0xE4,0x12,0x8A,0xE0,0x24,0x18,0x0A,0xD8,0xE4,0xDA, | ||
704 | 0xF6,0xC4,0x02,0x74,0x07,0xA8,0x40,0x75,0x03,0x80,0xCB,0x20,0xA8,0x02,0x75,0x09, | ||
705 | 0xE4,0x2A,0xA8,0x0F,0x74,0x03,0x80,0xCB,0x40,0xF7,0x46,0x38,0x02,0x00,0x74,0x09, | ||
706 | 0xE4,0xD8,0xA8,0x01,0x75,0x03,0x80,0xCB,0x80,0x88,0x9E,0xBE,0x00,0xFE,0x86,0xB4, | ||
707 | 0x00,0xB0,0x0A,0xE8,0x5C,0xE4,0xF8,0xC3,0xAC,0x49,0x3C,0x02,0x74,0x41,0x77,0x1F, | ||
708 | 0x50,0xE8,0x4F,0xF5,0x58,0x72,0x0C,0x84,0xC0,0x74,0x0A,0xB0,0x12,0xE6,0x0A,0x80, | ||
709 | 0x4E,0x38,0x01,0xF8,0xC3,0xB0,0x11,0xE6,0x0A,0x80,0x66,0x38,0xFE,0xF8,0xC3,0x8B, | ||
710 | 0x46,0x38,0x25,0xFF,0xF7,0x89,0x46,0x38,0xA9,0x00,0x04,0x75,0xE6,0x8A,0x86,0xA5, | ||
711 | 0x00,0xA8,0x10,0x75,0xDE,0x0C,0x10,0x88,0x86,0xA5,0x00,0xE6,0x0C,0xF8,0xC3,0x81, | ||
712 | 0x4E,0x38,0x00,0x08,0x8A,0x86,0xA5,0x00,0xA8,0x10,0x74,0xC7,0x24,0xEF,0xEB,0xE7, | ||
713 | 0xAD,0x49,0x49,0x3C,0x01,0x72,0x11,0x3C,0x0C,0x77,0x0D,0x50,0x8A,0xE0,0xE4,0x14, | ||
714 | 0x25,0xF0,0x0F,0x0A,0xC4,0xE6,0x14,0x58,0x8A,0xC4,0x84,0xC0,0x74,0x02,0xE6,0x42, | ||
715 | 0xF8,0xC3,0xE8,0xCF,0xF9,0xFE,0x86,0xB9,0x00,0xB0,0x0E,0xE8,0xD4,0xE3,0xF8,0xC3, | ||
716 | 0x3A,0x86,0xAF,0x00,0x74,0x1F,0x88,0x86,0xAF,0x00,0x8A,0xE0,0x80,0xC2,0x06,0xB0, | ||
717 | 0xBF,0xEE,0x80,0xEA,0x02,0x8A,0xC4,0xEE,0x8A,0x86,0xA8,0x00,0x80,0xC2,0x02,0xEE, | ||
718 | 0x80,0xEA,0x06,0x8A,0xC4,0xC3,0x8B,0x46,0x3E,0x85,0xC0,0x8A,0x86,0xA5,0x00,0x74, | ||
719 | 0x12,0xA8,0x08,0x75,0x0D,0x0C,0x08,0x88,0x86,0xA5,0x00,0x80,0xC2,0x02,0xEE,0x80, | ||
720 | 0xEA,0x02,0xC3,0xA8,0x08,0x74,0xFB,0x24,0xF7,0xEB,0xEC,0x8B,0x46,0x26,0x84,0xC0, | ||
721 | 0x74,0x16,0x8A,0x86,0xA5,0x00,0xA8,0x02,0x74,0x0D,0x24,0xFD,0x88,0x86,0xA5,0x00, | ||
722 | 0x83,0xC2,0x02,0xEE,0x83,0xEA,0x02,0xC3,0x8A,0x86,0xA5,0x00,0xA8,0x02,0x75,0xF7, | ||
723 | 0x0C,0x02,0xEB,0xE8,0x52,0x83,0xC2,0x0C,0xEC,0xC0,0xE8,0x04,0x88,0x86,0xA9,0x00, | ||
724 | 0x8B,0x5E,0x26,0x80,0xE3,0x3F,0xF6,0xC7,0x04,0x74,0x07,0xA8,0x08,0x75,0x03,0x80, | ||
725 | 0xCB,0x40,0xF6,0xC7,0x08,0x74,0x07,0xA8,0x02,0x75,0x03,0x80,0xCB,0x80,0x88,0x5E, | ||
726 | 0x26,0x8A,0x86,0xA5,0x00,0x84,0xDB,0x74,0x10,0xA8,0x02,0x74,0x0A,0x24,0xFD,0x88, | ||
727 | 0x86,0xA5,0x00,0x83,0xEA,0x0A,0xEE,0x5A,0xC3,0xA8,0x02,0x75,0xFA,0x0C,0x02,0xEB, | ||
728 | 0xEE,0x90,0xFF,0xFF,0x00,0x48,0x00,0x30,0xBA,0x20,0xC4,0x1A,0x00,0x18,0x00,0x12, | ||
729 | 0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x02,0x80,0x01,0xC0,0x00,0x60,0x00,0x30,0x00, | ||
730 | 0x18,0x00,0xCD,0x01,0x00,0x01,0x80,0x00,0x10,0x00,0x10,0x00,0x0E,0x00,0x0C,0x00, | ||
731 | 0x08,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x03,0x00,0x02,0x00,0x01,0x00, | ||
732 | 0x52,0x51,0x56,0x3C,0x1E,0x77,0x47,0x98,0x8B,0xF0,0x8A,0x82,0xC4,0x00,0x32,0xE4, | ||
733 | 0x83,0xFE,0x18,0x74,0x3D,0x83,0xFE,0x19,0x74,0x3E,0x83,0xFE,0x1E,0x77,0x2F,0xD1, | ||
734 | 0xE6,0x2E,0x8B,0x8C,0x32,0x2D,0x3B,0x8E,0x94,0x00,0x74,0x22,0x89,0x8E,0x94,0x00, | ||
735 | 0x83,0xC2,0x06,0x8A,0x86,0xA8,0x00,0x8A,0xE0,0x0C,0x80,0xEE,0x83,0xEA,0x06,0x8A, | ||
736 | 0xC1,0xEE,0x83,0xC2,0x02,0x8A,0xC5,0xEE,0x83,0xC2,0x04,0x8A,0xC4,0xEE,0x5E,0x59, | ||
737 | 0x5A,0xC3,0x8B,0x8E,0x8E,0x00,0xEB,0xCE,0x8B,0x8E,0x90,0x00,0xEB,0xC8,0x52,0x51, | ||
738 | 0x3D,0x05,0x00,0x77,0x03,0xB8,0x05,0x00,0x8B,0xC8,0xBA,0x02,0x00,0xB8,0x00,0xD0, | ||
739 | 0xF7,0xF1,0x05,0x01,0x00,0xD1,0xE8,0x59,0x5A,0xC3,0x8B,0x46,0x7A,0xA8,0x20,0x74, | ||
740 | 0x0B,0x80,0xBE,0xC3,0x00,0x03,0x75,0x04,0x0C,0x01,0xEB,0x02,0x24,0xFE,0x89,0x46, | ||
741 | 0x7A,0xC3,0x24,0x03,0x88,0x86,0xC3,0x00,0x8A,0xA6,0xA8,0x00,0x8A,0xDC,0x80,0xE4, | ||
742 | 0xFC,0x0A,0xC4,0x3A,0xC3,0x74,0x0B,0x88,0x86,0xA8,0x00,0x83,0xC2,0x06,0xEE,0x83, | ||
743 | 0xEA,0x06,0xE8,0xC5,0xFF,0xC3,0x00,0x08,0x18,0x38,0x28,0x90,0x3C,0x04,0x77,0x23, | ||
744 | 0x32,0xE4,0x8B,0xD8,0x2E,0x8A,0x87,0x26,0x2E,0x8A,0xA6,0xA8,0x00,0x8A,0xDC,0x80, | ||
745 | 0xE4,0xC7,0x0A,0xC4,0x3A,0xC3,0x74,0x0B,0x88,0x86,0xA8,0x00,0x83,0xC2,0x06,0xEE, | ||
746 | 0x83,0xEA,0x06,0xC3,0x84,0xC0,0x74,0x02,0xB0,0x04,0x8A,0xA6,0xA8,0x00,0x8A,0xDC, | ||
747 | 0x80,0xE4,0xFB,0x0A,0xC4,0x3A,0xC3,0x74,0x0B,0x88,0x86,0xA8,0x00,0x83,0xC2,0x06, | ||
748 | 0xEE,0x83,0xEA,0x06,0xC3,0x90,0x8B,0x5E,0x38,0x84,0xC0,0x74,0x34,0x3C,0x02,0x74, | ||
749 | 0x3B,0x8A,0x86,0xAF,0x00,0x0C,0x04,0xE8,0xE6,0xFD,0x8B,0x46,0x2E,0x3B,0x46,0x3C, | ||
750 | 0x77,0x1B,0xF7,0xC3,0x00,0x04,0x75,0x15,0x81,0xCB,0x00,0x04,0x83,0xC2,0x02,0x8A, | ||
751 | 0x86,0xA5,0x00,0x24,0xFA,0x88,0x86,0xA5,0x00,0xEE,0x83,0xEA,0x02,0x89,0x5E,0x38, | ||
752 | 0xC3,0x8A,0x86,0xAF,0x00,0x24,0xFB,0xE8,0xB6,0xFD,0xEB,0xF1,0xF7,0xC3,0x10,0x00, | ||
753 | 0x74,0xEF,0xEB,0xED,0x83,0xC2,0x0C,0xEC,0x83,0xEA,0x0C,0xC0,0xE8,0x04,0x88,0x86, | ||
754 | 0xA9,0x00,0xC3,0x90,0x8A,0x86,0xA7,0x00,0x0C,0x01,0x88,0x86,0xA7,0x00,0x8B,0xDA, | ||
755 | 0x80,0xC2,0x08,0xEE,0x8B,0xD3,0xF8,0xC3,0x8A,0x86,0xA7,0x00,0x24,0xFE,0xEB,0xEA, | ||
756 | 0x8A,0x86,0xA7,0x00,0x0C,0x02,0xEB,0xE2,0x8A,0x86,0xA7,0x00,0x24,0xFD,0xEB,0xDA, | ||
757 | 0xB0,0xFF,0xE8,0x52,0xF2,0xE8,0x97,0xF2,0xF8,0xC3,0xAC,0x49,0xE8,0x61,0xFE,0xF8, | ||
758 | 0xC3,0x90,0xAC,0x49,0xE8,0xEB,0xFE,0xF8,0xC3,0x90,0xAC,0x49,0xE8,0x35,0xFF,0xF8, | ||
759 | 0xC3,0x90,0xAC,0x49,0xE8,0x05,0xFF,0xF8,0xC3,0x90,0x52,0x83,0xC2,0x06,0xB0,0xBF, | ||
760 | 0xEE,0x52,0x83,0xC2,0x02,0xAC,0x49,0xEE,0x5A,0x8A,0x86,0xA8,0x00,0xEE,0x5A,0xF8, | ||
761 | 0xC3,0x90,0x52,0x83,0xC2,0x06,0xB0,0xBF,0xEE,0x52,0x83,0xC2,0x06,0xEB,0xE6,0x90, | ||
762 | 0xAC,0x49,0x3C,0x02,0x77,0x0D,0x84,0xC0,0x75,0x0B,0x8A,0x86,0xAF,0x00,0x24,0xFD, | ||
763 | 0xE8,0x0D,0xFD,0xF8,0xC3,0x50,0x8A,0x86,0xAF,0x00,0x0C,0x02,0xE8,0x01,0xFD,0x5B, | ||
764 | 0x83,0xC2,0x08,0x8A,0x86,0xA7,0x00,0xF6,0xC3,0x01,0x74,0x0C,0x24,0xDF,0x88,0x86, | ||
765 | 0xA7,0x00,0xEE,0x83,0xEA,0x08,0xF8,0xC3,0x0C,0x20,0xEB,0xF2,0xAC,0x49,0xE8,0xE5, | ||
766 | 0xFE,0xF8,0xC3,0x90,0xB8,0x00,0x40,0xE8,0x69,0xF5,0xE8,0xF9,0xFC,0xE8,0x24,0xFF, | ||
767 | 0xB0,0x01,0xE8,0xA5,0xF6,0xF8,0xC3,0x90,0xB8,0x00,0x40,0xE8,0x71,0xF5,0xE8,0xE5, | ||
768 | 0xFC,0xF8,0xC3,0x90,0xB8,0x00,0x10,0xE8,0x49,0xF5,0xE8,0xD9,0xFC,0xE8,0x04,0xFF, | ||
769 | 0xB0,0x08,0xE8,0x85,0xF6,0xF8,0xC3,0x90,0xB8,0x00,0x10,0xE8,0x51,0xF5,0xE8,0xC5, | ||
770 | 0xFC,0xF8,0xC3,0x90,0xB8,0x00,0x80,0xE8,0x29,0xF5,0xE8,0xB9,0xFC,0xE8,0xE4,0xFE, | ||
771 | 0xB0,0x02,0xE8,0x65,0xF6,0xF8,0xC3,0x90,0xB8,0x00,0x80,0xE8,0x31,0xF5,0xE8,0xA5, | ||
772 | 0xFC,0xF8,0xC3,0x90,0xB8,0x00,0x20,0xE8,0x09,0xF5,0xE8,0x99,0xFC,0xE8,0xC4,0xFE, | ||
773 | 0xB0,0x04,0xE8,0x45,0xF6,0xF8,0xC3,0x90,0xB8,0x00,0x20,0xE8,0x11,0xF5,0xE8,0x85, | ||
774 | 0xFC,0xF8,0xC3,0x90,0xAC,0x49,0xE8,0x34,0x0C,0xF8,0xC3,0x90,0xB8,0xFC,0x3B,0x89, | ||
775 | 0x46,0x7C,0xF8,0xC3,0x8A,0x86,0xAF,0x00,0x0C,0x80,0xE8,0x43,0xFC,0xF8,0xC3,0x90, | ||
776 | 0x8A,0x86,0xAF,0x00,0x24,0x7F,0xEB,0xF2,0x8A,0x86,0xAF,0x00,0x0C,0x40,0xE8,0x2F, | ||
777 | 0xFC,0xF8,0xC3,0x90,0x8A,0x86,0xAF,0x00,0x24,0xBF,0xEB,0xF2,0xAC,0x49,0xA8,0x01, | ||
778 | 0x74,0x07,0x83,0x4E,0x7A,0x20,0xEB,0x05,0x90,0x83,0x66,0x7A,0xDF,0xE8,0x8A,0xFD, | ||
779 | 0xF8,0xC3,0x83,0xC2,0x06,0x8A,0x86,0xA8,0x00,0x0C,0x40,0x88,0x86,0xA8,0x00,0xEE, | ||
780 | 0x83,0xEA,0x06,0xAC,0x49,0x32,0xE4,0x89,0x46,0x6E,0x83,0x4E,0x26,0x01,0x83,0x4E, | ||
781 | 0x48,0x08,0xB0,0x06,0xE8,0xBB,0xDF,0x49,0x46,0xF9,0xC3,0x90,0x83,0xC2,0x06,0x8A, | ||
782 | 0x86,0xA8,0x00,0x0C,0x40,0x88,0x86,0xA8,0x00,0xEE,0x83,0xEA,0x06,0xAC,0xB4,0x0A, | ||
783 | 0xF6,0xE4,0xEB,0xD0,0xE8,0xE0,0x0B,0xF8,0xC3,0x90,0xAD,0x49,0x49,0x89,0x46,0x64, | ||
784 | 0xA9,0x01,0x00,0x74,0x19,0x8B,0xD8,0x83,0xE3,0xFA,0x75,0x0A,0xA9,0x04,0x00,0x74, | ||
785 | 0x0D,0xB8,0xE2,0x3F,0xEB,0x0B,0xE8,0xEC,0xF4,0xB8,0xAA,0x40,0xEB,0x03,0xB8,0x38, | ||
786 | 0x44,0x89,0x46,0x62,0xF8,0xC3,0x8A,0x86,0xAF,0x00,0xA8,0x02,0x74,0x0A,0x24,0xFD, | ||
787 | 0xE8,0x8D,0xFB,0x0C,0x02,0xE8,0x88,0xFB,0xF8,0xC3,0xAC,0x49,0xE8,0x81,0xFC,0xF8, | ||
788 | 0xC3,0x90,0xAC,0x49,0xE8,0x79,0xFC,0xF8,0xC3,0x90,0xE8,0x5C,0xF5,0x75,0x05,0xE8, | ||
789 | 0xE6,0xFD,0xF8,0xC3,0xE8,0xCD,0xFD,0x36,0xA0,0xB4,0x13,0x24,0x10,0x34,0x10,0xE8, | ||
790 | 0x26,0x01,0x36,0xA1,0xB4,0x13,0xA9,0x01,0x00,0x74,0x05,0xE8,0xFE,0xFE,0xEB,0x0E, | ||
791 | 0xA9,0x02,0x00,0x74,0x04,0x32,0xC0,0xEB,0x02,0xB0,0x01,0xE8,0xE8,0xFE,0x36,0xA1, | ||
792 | 0xB4,0x13,0xE8,0xAB,0x0B,0x36,0xA1,0xB4,0x13,0xC1,0xE8,0x05,0x25,0x01,0x00,0xE8, | ||
793 | 0x0C,0xFF,0x36,0xA0,0xB5,0x13,0x24,0x10,0xE8,0x2B,0xFD,0x32,0xC0,0x36,0x8A,0x26, | ||
794 | 0xB5,0x13,0xF6,0xC4,0x04,0x74,0x09,0xFE,0xC0,0xF6,0xC4,0x08,0x74,0x02,0xFE,0xC0, | ||
795 | 0xE8,0xEF,0xFD,0x36,0xA1,0xB6,0x13,0x25,0x0F,0x00,0xE8,0x03,0xFC,0x36,0xA1,0xB6, | ||
796 | 0x13,0xC1,0xE8,0x04,0x25,0x03,0x00,0xE8,0x88,0xFC,0x36,0xA1,0xB6,0x13,0xC1,0xE8, | ||
797 | 0x05,0x25,0x02,0x00,0xE8,0xCD,0xFC,0x36,0xA1,0xB6,0x13,0xF6,0xC4,0x01,0x75,0x04, | ||
798 | 0x32,0xC0,0xEB,0x09,0x80,0xE4,0x02,0xD0,0xEC,0xB0,0x02,0x2A,0xC4,0xE8,0x8C,0xFC, | ||
799 | 0x36,0xF6,0x06,0xB7,0x13,0x40,0x74,0x05,0xE8,0x8D,0xFE,0xEB,0x03,0xE8,0x94,0xFE, | ||
800 | 0x36,0xF6,0x06,0xB7,0x13,0x20,0x74,0x05,0xE8,0x69,0xFE,0xEB,0x03,0xE8,0x70,0xFE, | ||
801 | 0xF8,0xC3,0xF8,0xC3,0x8B,0x46,0x38,0xA9,0x04,0x00,0x75,0x23,0x0D,0x04,0x00,0x89, | ||
802 | 0x46,0x38,0x83,0xC2,0x08,0x8B,0x46,0x2E,0x3B,0x46,0x3C,0x73,0x14,0x83,0x4E,0x38, | ||
803 | 0x10,0x8A,0x86,0xA7,0x00,0x24,0xFE,0x88,0x86,0xA7,0x00,0xEE,0x83,0xEA,0x08,0xF8, | ||
804 | 0xC3,0x8A,0x86,0xA7,0x00,0x0C,0x01,0xEB,0xEE,0x90,0x8B,0x46,0x38,0xA9,0x04,0x00, | ||
805 | 0x74,0x06,0x25,0xFB,0xFF,0x89,0x46,0x38,0xF8,0xC3,0xAD,0x49,0x49,0xE8,0xBE,0xFB, | ||
806 | 0x89,0x86,0x8E,0x00,0xF8,0xC3,0xAD,0x49,0x49,0xE8,0xB2,0xFB,0x89,0x86,0x90,0x00, | ||
807 | 0xF8,0xC3,0x83,0x4E,0x26,0x04,0xE8,0x92,0xFA,0xF8,0xC3,0x90,0x83,0x66,0x26,0xFB, | ||
808 | 0xE8,0x88,0xFA,0xF8,0xC3,0x90,0xAC,0x49,0x84,0xC0,0x75,0x07,0x80,0x8E,0xA3,0x00, | ||
809 | 0x04,0xF8,0xC3,0x80,0xA6,0xA3,0x00,0xFB,0xF8,0xC3,0xAC,0x49,0x83,0xC2,0x08,0x3C, | ||
810 | 0x02,0x76,0x02,0x32,0xC0,0x3C,0x01,0x74,0x12,0x77,0x0B,0x8A,0x86,0xA7,0x00,0x24, | ||
811 | 0xEF,0x88,0x86,0xA7,0x00,0xEE,0x83,0xEA,0x08,0xF8,0xC3,0x8A,0x86,0xA7,0x00,0x0C, | ||
812 | 0x10,0xEB,0xEE,0x90,0x52,0x83,0xC2,0x06,0xB0,0xBF,0xEE,0x52,0x83,0xC2,0x04,0xAC, | ||
813 | 0x49,0xEE,0x5A,0x8A,0x86,0xA8,0x00,0xEE,0x5A,0xF8,0xC3,0x90,0x52,0x83,0xC2,0x06, | ||
814 | 0xB0,0xBF,0xEE,0x52,0x83,0xC2,0x08,0xEB,0xE6,0x90,0xAC,0x49,0xF8,0xC3,0xAC,0x49, | ||
815 | 0xE8,0xB4,0xEE,0x73,0x03,0xE8,0xF7,0xEE,0xF8,0xC3,0x8A,0x86,0xAF,0x00,0x24,0x7F, | ||
816 | 0xE8,0xBD,0xF9,0xB8,0xF0,0x00,0xE8,0x66,0xF2,0x81,0x66,0x26,0xFF,0xF3,0xE8,0x23, | ||
817 | 0xFA,0xE8,0xD2,0xF9,0xF8,0xC3,0xB8,0x80,0x00,0xE8,0x37,0xF2,0x80,0x4E,0x27,0x08, | ||
818 | 0xE8,0x11,0xFA,0xE8,0xC0,0xF9,0xF8,0xC3,0xB8,0x80,0x00,0xE8,0x41,0xF2,0x81,0x66, | ||
819 | 0x26,0xFF,0xF7,0xE8,0xFE,0xF9,0xE8,0xAD,0xF9,0xF8,0xC3,0x90,0xB8,0x10,0x00,0xE8, | ||
820 | 0x11,0xF2,0x80,0x4E,0x27,0x04,0xE8,0xEB,0xF9,0xE8,0x9A,0xF9,0xF8,0xC3,0xB8,0x10, | ||
821 | 0x00,0xE8,0xFF,0xF1,0x81,0x66,0x26,0xFF,0xFB,0xE8,0xD8,0xF9,0xF8,0xC3,0xAC,0x49, | ||
822 | 0xF8,0xC3,0x83,0xC2,0x06,0x8A,0x86,0xA8,0x00,0x0C,0x40,0x88,0x86,0xA8,0x00,0xEE, | ||
823 | 0x83,0xEA,0x06,0xF8,0xC3,0x90,0x83,0xC2,0x06,0x8A,0x86,0xA8,0x00,0x24,0xBF,0xEB, | ||
824 | 0xEA,0x90,0xAC,0x49,0x8A,0xE0,0x80,0xC2,0x0A,0xEC,0x80,0xEA,0x0A,0xA8,0x20,0x74, | ||
825 | 0x05,0x8A,0xC4,0xEE,0xF8,0xC3,0x06,0x51,0x57,0x8B,0x4E,0x24,0xE3,0x34,0x49,0x89, | ||
826 | 0x4E,0x24,0xFF,0x46,0x1A,0x8E,0x46,0x02,0x8B,0x7E,0x22,0x8A,0xC4,0xAA,0x89,0x7E, | ||
827 | 0x22,0x8B,0x46,0x26,0x24,0xFD,0x89,0x46,0x26,0x75,0x29,0x8A,0x86,0xA5,0x00,0xA8, | ||
828 | 0x02,0x75,0x21,0x80,0xC2,0x02,0x0C,0x02,0x88,0x86,0xA5,0x00,0xEE,0x80,0xEA,0x02, | ||
829 | 0xEB,0x12,0xC4,0x7E,0x00,0x3B,0x7E,0x1E,0x76,0x0A,0x4F,0x26,0x88,0x25,0x89,0x7E, | ||
830 | 0x00,0xFF,0x46,0x1A,0x5F,0x59,0x07,0xF8,0xC3,0x90,0xAC,0xAD,0x83,0xE9,0x03,0x85, | ||
831 | 0xC0,0x74,0x05,0x3D,0x00,0x20,0x72,0x05,0xB8,0xFF,0xFF,0xEB,0x03,0xC1,0xE0,0x03, | ||
832 | 0x3B,0x86,0x94,0x00,0x74,0x26,0x89,0x86,0x94,0x00,0x8B,0xD8,0x52,0x83,0xC2,0x06, | ||
833 | 0x8A,0x86,0xA8,0x00,0x8A,0xE0,0x0C,0x80,0xEE,0x83,0xEA,0x06,0x8A,0xC3,0xEE,0x83, | ||
834 | 0xC2,0x02,0x8A,0xC7,0xEE,0x83,0xC2,0x04,0x8A,0xC4,0xEE,0x5A,0xF8,0xC3,0xB0,0x88, | ||
835 | 0x88,0x86,0xBC,0x00,0xE8,0x8C,0xF2,0x33,0xDB,0x8A,0x86,0xA5,0x00,0xA8,0x02,0x74, | ||
836 | 0x03,0x80,0xCB,0x01,0xA8,0x05,0x74,0x03,0x80,0xCB,0x02,0xA8,0x08,0x74,0x03,0x80, | ||
837 | 0xCB,0x04,0xF6,0x86,0xA7,0x00,0x10,0x74,0x03,0x80,0xCB,0x10,0x8A,0x86,0xA9,0x00, | ||
838 | 0xF6,0xC3,0x04,0x75,0x0A,0x83,0xC2,0x0C,0xEC,0x83,0xEA,0x0C,0xC0,0xE8,0x04,0x8A, | ||
839 | 0xE0,0x8A,0x86,0xAF,0x00,0xA8,0x80,0x74,0x08,0xF6,0xC4,0x01,0x75,0x03,0x80,0xCB, | ||
840 | 0x20,0xF6,0x86,0xA7,0x00,0x02,0x75,0x0A,0xF7,0x46,0x38,0x04,0x00,0x74,0x03,0x80, | ||
841 | 0xCB,0x40,0x88,0x9E,0xBE,0x00,0xFE,0x86,0xB4,0x00,0xB0,0x0A,0xE8,0xF3,0xDB,0xF8, | ||
842 | 0xC3,0xFE,0x86,0xB4,0x00,0xB0,0x0A,0xE8,0xE8,0xDB,0xF8,0xC3,0xAC,0x49,0x3C,0x02, | ||
843 | 0x74,0x37,0x77,0x10,0x84,0xC0,0x74,0x06,0x80,0x4E,0x38,0x01,0xF8,0xC3,0x80,0x66, | ||
844 | 0x38,0xFE,0xF8,0xC3,0x8B,0x46,0x38,0x25,0xFF,0xF7,0x89,0x46,0x38,0xA9,0x00,0x04, | ||
845 | 0x75,0xEA,0x8A,0x86,0xA5,0x00,0xA8,0x01,0x75,0xE2,0x0C,0x05,0x83,0xC2,0x02,0x88, | ||
846 | 0x86,0xA5,0x00,0xEE,0x83,0xEA,0x02,0xF8,0xC3,0x81,0x4E,0x38,0x00,0x08,0x8A,0x86, | ||
847 | 0xA5,0x00,0xA8,0x01,0x74,0xC6,0x24,0xFA,0xEB,0xE2,0xAD,0x49,0x49,0xF8,0xC3,0x90, | ||
848 | 0xE8,0x11,0xFA,0xFE,0x86,0xB9,0x00,0xB0,0x0E,0xE8,0x86,0xDB,0xF8,0xC3,0xB0,0xFF, | ||
849 | 0xE8,0xBF,0xEC,0xF8,0xC3,0x90,0x83,0x66,0x7A,0xFB,0xB0,0x00,0xE8,0x73,0xDB,0xF8, | ||
850 | 0xC3,0x90,0xAC,0x49,0xE8,0x53,0xD9,0x72,0x11,0x36,0x88,0x1E,0x1A,0x01,0x36,0xA0, | ||
851 | 0x8E,0x12,0x0A,0xC3,0x52,0xBA,0x00,0x01,0xEE,0x5A,0xF8,0xC3,0xAC,0x49,0x32,0xE4, | ||
852 | 0x36,0xA3,0x86,0x12,0x05,0x06,0x00,0x36,0x8B,0x1E,0x88,0x12,0x2B,0xD8,0x36,0x89, | ||
853 | 0x1E,0x8A,0x12,0xF8,0xC3,0x90,0xAD,0x8B,0xD8,0xAD,0x83,0xE9,0x04,0x03,0xC3,0x2B, | ||
854 | 0x46,0x76,0x89,0x46,0x78,0xF7,0x46,0x7A,0x02,0x00,0x74,0x0A,0x83,0x66,0x7A,0xFD, | ||
855 | 0xB8,0x00,0x00,0xE8,0x1C,0xDB,0xF8,0xC3,0x06,0x16,0x07,0xAC,0x49,0x25,0x0F,0x00, | ||
856 | 0x6B,0xC0,0x09,0x8D,0xBE,0xFD,0x00,0x03,0xF8,0xAC,0x49,0x25,0x0F,0x00,0xAA,0x85, | ||
857 | 0xC0,0x74,0x08,0x2B,0xC8,0x51,0x8B,0xC8,0xF3,0xA4,0x59,0xE8,0x27,0xF0,0xE8,0x44, | ||
858 | 0x03,0x07,0xF8,0xC3,0x33,0xC0,0xAC,0x49,0x36,0xA3,0xB2,0x13,0x36,0xA3,0xB0,0x13, | ||
859 | 0xF8,0xC3,0x83,0x66,0x7A,0xEF,0xE8,0x2C,0x03,0xF8,0xC3,0x90,0x83,0x4E,0x7A,0x10, | ||
860 | 0xEB,0xF4,0xE8,0x9B,0xF0,0xF8,0xC3,0x90,0xAD,0x3C,0x19,0x77,0x0E,0x3C,0x19,0x77, | ||
861 | 0x0A,0x8B,0xF8,0x81,0xE7,0xFF,0x00,0x88,0xA6,0xC4,0x00,0xF8,0xC3,0x90,0x83,0x4E, | ||
862 | 0x26,0x20,0xAC,0x49,0x32,0xE4,0xD1,0xE0,0x8B,0xD8,0xC1,0xE3,0x02,0x03,0xC3,0x89, | ||
863 | 0x46,0x6E,0x83,0x4E,0x48,0x04,0xB0,0x06,0xE8,0x97,0xDA,0x49,0x46,0xF9,0xC3,0x90, | ||
864 | 0xFE,0x86,0xB3,0x00,0xB0,0x0A,0xE8,0x89,0xDA,0xF8,0xC3,0x90,0x33,0xC0,0xAC,0x49, | ||
865 | 0x6B,0xC0,0x0A,0x89,0x86,0x8A,0x00,0xF8,0xC3,0x90,0xAC,0x49,0x32,0xE4,0x3D,0x0A, | ||
866 | 0x00,0x77,0x05,0xB8,0x0A,0x00,0xEB,0x08,0x3D,0x5A,0x00,0x72,0x03,0xB8,0x5A,0x00, | ||
867 | 0x51,0xF7,0xD8,0x05,0x64,0x00,0x8B,0xC8,0x8B,0x46,0x44,0xF7,0xE1,0xB9,0x64,0x00, | ||
868 | 0xF7,0xF1,0x89,0x46,0x46,0x59,0xF8,0xC3,0xAC,0x49,0xE8,0x85,0xEB,0xF8,0xC3,0x90, | ||
869 | 0xAC,0x49,0x84,0xC0,0x75,0x07,0x81,0x66,0x38,0xFF,0xFD,0xF8,0xC3,0x81,0x4E,0x38, | ||
870 | 0x00,0x02,0xF7,0x46,0x38,0x40,0x00,0x75,0x08,0x8A,0x86,0xA9,0x00,0x88,0x86,0xAA, | ||
871 | 0x00,0xF8,0xC3,0x90,0x51,0x56,0xE8,0x7F,0x0C,0x5E,0x59,0xF8,0xC3,0x90,0xFE,0x86, | ||
872 | 0xB6,0x00,0xB0,0x0A,0xE8,0x0B,0xDA,0xF8,0xC3,0x90,0xFE,0x86,0xB7,0x00,0xB0,0x0A, | ||
873 | 0xE8,0xFF,0xD9,0xF8,0xC3,0x90,0xFE,0x86,0xB8,0x00,0xB0,0x0A,0xE8,0xF3,0xD9,0xF8, | ||
874 | 0xC3,0x90,0x00,0x90,0x51,0x55,0xAC,0x2E,0xA2,0x52,0x36,0x33,0xC9,0xAD,0x8B,0xF9, | ||
875 | 0xC1,0xE7,0x05,0xA9,0x01,0x00,0x74,0x23,0x2E,0x8B,0xAD,0x44,0x00,0x83,0x7E,0x08, | ||
876 | 0x00,0x74,0x18,0x2E,0x80,0x3E,0x52,0x36,0x01,0x74,0x09,0x60,0xB0,0x04,0xE8,0xBB, | ||
877 | 0x0C,0x61,0xEB,0x07,0x60,0xB0,0xFB,0xE8,0xEC,0x0C,0x61,0x47,0x47,0xD1,0xE8,0x75, | ||
878 | 0xD2,0x41,0x83,0xF9,0x04,0x72,0xC6,0x5D,0x59,0x83,0xE9,0x05,0xF7,0x46,0x38,0x40, | ||
879 | 0x00,0x74,0x05,0xE8,0x87,0xEA,0xF8,0xC3,0xE8,0x8D,0xEA,0xF8,0xC3,0x90,0x36,0xC6, | ||
880 | 0x06,0xC8,0x13,0x01,0xF8,0xC3,0x33,0xC0,0xAC,0x49,0x36,0xA3,0x80,0x12,0xAC,0x49, | ||
881 | 0x36,0x2B,0x06,0x88,0x12,0xF7,0xD8,0x36,0xA3,0x82,0x12,0xF8,0xC3,0x90,0xDE,0x26, | ||
882 | 0xDE,0x26,0xEC,0x26,0xF2,0x26,0xF8,0x26,0xFE,0x26,0x04,0x27,0x0E,0x27,0x16,0x27, | ||
883 | 0x1E,0x27,0x26,0x27,0x2E,0x27,0x34,0x27,0xBE,0x34,0xC6,0x34,0xD2,0x34,0x3A,0x27, | ||
884 | 0x78,0x27,0x80,0x27,0x94,0x27,0xA0,0x27,0xB4,0x27,0xC0,0x27,0xD4,0x27,0xE0,0x27, | ||
885 | 0xF4,0x27,0x00,0x28,0x10,0x28,0xEC,0x34,0xDE,0x26,0x1E,0x28,0x26,0x28,0x2C,0x28, | ||
886 | 0x32,0x28,0x38,0x28,0x4E,0x28,0x8A,0x28,0x06,0x35,0x28,0x35,0x98,0x28,0xBE,0x28, | ||
887 | 0xD2,0x28,0xDE,0x28,0xE6,0x28,0x54,0x35,0x62,0x35,0x6C,0x35,0xEE,0x28,0xC0,0x29, | ||
888 | 0xC8,0x29,0xCE,0x29,0xE0,0x29,0x72,0x35,0x78,0x35,0xF0,0x29,0xFC,0x29,0x8E,0x35, | ||
889 | 0x08,0x2A,0x12,0x2A,0x1C,0x2A,0xB0,0x35,0x36,0x2A,0xBC,0x35,0x5A,0x2A,0x62,0x2A, | ||
890 | 0x68,0x2A,0xCA,0x35,0x7C,0x2A,0xF8,0x35,0x88,0x2A,0xA6,0x2A,0xB8,0x2A,0xCC,0x2A, | ||
891 | 0xDE,0x2A,0xF2,0x2A,0x00,0x36,0x0A,0x2B,0x24,0x2B,0x24,0x36,0x38,0x2B,0x4C,0x2B, | ||
892 | 0x84,0x2B,0x2E,0x36,0x3A,0x36,0x46,0x36,0x54,0x36,0xE8,0x2B,0xAE,0x36,0x40,0x2C, | ||
893 | 0x62,0x2C,0xB6,0x36,0x70,0x28,0xDE,0x26,0xDE,0x26,0xD4,0x2E,0xE8,0x2E,0xF0,0x2E, | ||
894 | 0xF8,0x2E,0x00,0x2F,0x0A,0x2F,0x12,0x2F,0x1A,0x2F,0x22,0x2F,0x2A,0x2F,0x42,0x2F, | ||
895 | 0xBE,0x34,0xC6,0x34,0xD2,0x34,0x50,0x2F,0x8C,0x2F,0x94,0x2F,0xA8,0x2F,0xB4,0x2F, | ||
896 | 0xC8,0x2F,0xD4,0x2F,0xE8,0x2F,0xF4,0x2F,0x08,0x30,0x14,0x30,0x1C,0x30,0xEC,0x34, | ||
897 | 0xDE,0x26,0x24,0x30,0x30,0x30,0x38,0x30,0x44,0x30,0x4C,0x30,0x62,0x30,0xA4,0x30, | ||
898 | 0x06,0x35,0x28,0x35,0xAA,0x30,0xCE,0x30,0xD6,0x30,0xEA,0x30,0xF2,0x30,0x54,0x35, | ||
899 | 0x62,0x35,0x6C,0x35,0xFA,0x30,0xC2,0x31,0xC2,0x31,0xC4,0x31,0xFA,0x31,0x72,0x35, | ||
900 | 0x78,0x35,0x0A,0x32,0x16,0x32,0x8E,0x35,0x22,0x32,0x2C,0x32,0x36,0x32,0xB0,0x35, | ||
901 | 0x4A,0x32,0xBC,0x35,0x74,0x32,0x8C,0x32,0x9A,0x32,0xCA,0x35,0x9E,0x32,0xF8,0x35, | ||
902 | 0xAA,0x32,0xC6,0x32,0xD8,0x32,0xEC,0x32,0xFE,0x32,0x0E,0x33,0x00,0x36,0x12,0x33, | ||
903 | 0x26,0x33,0x24,0x36,0x32,0x33,0x9A,0x33,0xDE,0x33,0x2E,0x36,0x3A,0x36,0x46,0x36, | ||
904 | 0x54,0x36,0x5C,0x34,0xAE,0x36,0xAA,0x34,0xB0,0x34,0xB6,0x36,0x8C,0x30,0xE3,0x28, | ||
905 | 0xF7,0x46,0x38,0x40,0x00,0x75,0x32,0xE8,0xE3,0xE8,0x33,0xC0,0xAC,0x49,0x3D,0x5B, | ||
906 | 0x00,0x77,0x19,0x8B,0xD8,0xD1,0xE3,0x2E,0xFF,0x97,0xCE,0x36,0x72,0x0B,0x85,0xC9, | ||
907 | 0x75,0xE8,0x8B,0x46,0x48,0xE8,0x1A,0x0C,0xC3,0x4E,0x41,0xC3,0x6A,0x00,0x1F,0xC6, | ||
908 | 0x06,0x93,0x12,0x0C,0x9C,0x0E,0xE8,0x63,0xDA,0xE8,0xBC,0xE8,0x33,0xC0,0xAC,0x49, | ||
909 | 0x3D,0x5B,0x00,0x77,0xE7,0x8B,0xD8,0xD1,0xE3,0x2E,0xFF,0x97,0x86,0x37,0x72,0xD9, | ||
910 | 0x85,0xC9,0x75,0xE8,0xC3,0xF7,0x46,0x7A,0x10,0x00,0x75,0x0F,0x83,0xBE,0x84,0x00, | ||
911 | 0x00,0x74,0x08,0xB8,0x48,0x3A,0x89,0x86,0x80,0x00,0xC3,0x81,0xBE,0x80,0x00,0xEC, | ||
912 | 0x3C,0x74,0xF7,0x83,0xBE,0x88,0x00,0x00,0x75,0x05,0xB8,0xEC,0x3C,0xEB,0xE7,0xF7, | ||
913 | 0x46,0x7A,0x08,0x00,0x75,0x40,0x1E,0x60,0x8B,0x8E,0x88,0x00,0x3B,0x4E,0x74,0x77, | ||
914 | 0x33,0x3B,0x4E,0x78,0x77,0x2E,0xC4,0x7E,0x10,0x8B,0xDF,0x26,0x03,0x3D,0x47,0x47, | ||
915 | 0x33,0xC0,0x8E,0xD8,0x8D,0xB6,0xF4,0x00,0x8B,0xC1,0xF7,0x46,0x7A,0x01,0x00,0x75, | ||
916 | 0x1D,0xF3,0xA4,0x26,0x01,0x07,0x29,0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0xB0, | ||
917 | 0x0C,0xE8,0x3E,0xD7,0x61,0x1F,0xC7,0x86,0x88,0x00,0x00,0x00,0xEB,0xAC,0xE3,0xE3, | ||
918 | 0x50,0x90,0xAC,0x24,0x7F,0xAA,0xE2,0xFA,0x58,0xEB,0xD8,0x90,0x8B,0x8E,0x88,0x00, | ||
919 | 0xE3,0x46,0x8B,0x9E,0x8A,0x00,0x85,0xDB,0x74,0x3E,0xBA,0x50,0xFF,0xED,0x2B,0x86, | ||
920 | 0x82,0x00,0x3B,0xC3,0x72,0x37,0x8D,0xB6,0xF4,0x00,0xC4,0x7E,0x10,0x8B,0xDF,0x26, | ||
921 | 0x03,0x3D,0x47,0x47,0x8B,0xC1,0x16,0x1F,0xF7,0x46,0x7A,0x01,0x00,0x75,0x24,0xF3, | ||
922 | 0xA4,0x26,0x01,0x07,0x29,0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0xC7,0x86,0x88, | ||
923 | 0x00,0x00,0x00,0xB0,0x0C,0xE8,0xDA,0xD6,0x83,0x66,0x7A,0xF7,0xC3,0xB0,0x00,0xE8, | ||
924 | 0xD0,0xD6,0xC3,0xE3,0xDC,0x50,0xAC,0x24,0x7F,0xAA,0xE2,0xFA,0x58,0xEB,0xD2,0x90, | ||
925 | 0x1E,0x60,0x33,0xC0,0x8E,0xD8,0x8D,0xB6,0xFD,0x00,0x8B,0x86,0x88,0x00,0x8B,0x96, | ||
926 | 0x84,0x00,0x3A,0x04,0x75,0x10,0x8B,0xDE,0x46,0x8B,0xC8,0x8D,0xBE,0xF4,0x00,0xF3, | ||
927 | 0xA6,0x74,0x66,0x8B,0xF3,0x90,0x83,0xC6,0x09,0x4A,0x75,0xE6,0x8D,0xB6,0xFD,0x00, | ||
928 | 0x8B,0x96,0x84,0x00,0x3A,0x04,0x73,0x10,0x8B,0xDE,0x46,0x8B,0xC8,0x8D,0xBE,0xF4, | ||
929 | 0x00,0xF3,0xA6,0x74,0x76,0x8B,0xF3,0x90,0x83,0xC6,0x09,0x4A,0x75,0xE6,0x8D,0xB6, | ||
930 | 0xF4,0x00,0xAC,0xF7,0x46,0x7A,0x01,0x00,0x74,0x02,0x24,0x7F,0x1E,0xC5,0x5E,0x10, | ||
931 | 0x8B,0x37,0x88,0x40,0x02,0x46,0x89,0x37,0xFF,0x4E,0x78,0xFF,0x46,0x76,0xFF,0x4E, | ||
932 | 0x74,0x1F,0x8B,0x8E,0x88,0x00,0x49,0x89,0x8E,0x88,0x00,0xE3,0x43,0x8D,0xB6,0xF4, | ||
933 | 0x00,0x8B,0xFE,0x46,0xF3,0xA4,0xE9,0x7D,0xFF,0xC5,0x76,0x10,0x8B,0x1C,0x85,0xDB, | ||
934 | 0x74,0x08,0x03,0xF3,0x83,0xC6,0x03,0x83,0xE6,0xFE,0x8B,0x86,0x84,0x00,0x2B,0xC2, | ||
935 | 0xB4,0x80,0x89,0x04,0x46,0x46,0xC7,0x04,0x00,0x00,0x89,0x76,0x10,0x83,0x4E,0x7A, | ||
936 | 0x04,0xC7,0x86,0x88,0x00,0x00,0x00,0x61,0x1F,0xF9,0xC3,0x33,0xC0,0x61,0x1F,0xC3, | ||
937 | 0xB0,0x80,0x84,0xC0,0x61,0x1F,0xC3,0x90,0x8B,0x4E,0x78,0x2B,0x8E,0x88,0x00,0x76, | ||
938 | 0x27,0x89,0xB6,0x8C,0x00,0x8B,0x5E,0x74,0x3B,0xCB,0x72,0x02,0x8B,0xCB,0x3B,0xC8, | ||
939 | 0x72,0x02,0x8B,0xC8,0x8B,0xC1,0xE3,0x44,0x33,0xD2,0x8E,0xC2,0x8B,0xD1,0x83,0xBE, | ||
940 | 0x88,0x00,0x00,0x74,0x06,0xE9,0x8E,0x00,0x33,0xC0,0xC3,0x8B,0x5E,0x10,0x03,0x1F, | ||
941 | 0x43,0x43,0x52,0xF7,0x46,0x7A,0x01,0x00,0x75,0x2A,0xAC,0x8D,0xBE,0xE4,0x00,0x8B, | ||
942 | 0x8E,0x86,0x00,0xF2,0xAE,0x74,0x34,0x88,0x07,0x43,0x4A,0x75,0xED,0x58,0x8B,0x5E, | ||
943 | 0x10,0x01,0x07,0x29,0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0x8B,0xC6,0x2B,0x86, | ||
944 | 0x8C,0x00,0xC3,0x90,0xAC,0x8D,0xBE,0xE4,0x00,0x8B,0x8E,0x86,0x00,0xF2,0xAE,0x74, | ||
945 | 0x0A,0x24,0x7F,0x88,0x07,0x43,0x4A,0x75,0xEB,0xEB,0xD2,0x88,0x86,0xF4,0x00,0xC7, | ||
946 | 0x86,0x88,0x00,0x01,0x00,0x58,0x2B,0xC2,0x74,0x0E,0x8B,0x5E,0x10,0x01,0x07,0x29, | ||
947 | 0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0x40,0xE8,0x94,0xFE,0x72,0xBE,0x4A,0x75, | ||
948 | 0x15,0x83,0xBE,0x8A,0x00,0x00,0x74,0xB4,0xBA,0x50,0xFF,0xED,0x89,0x86,0x82,0x00, | ||
949 | 0x83,0x4E,0x7A,0x08,0xEB,0xA6,0x8D,0xBE,0xF4,0x00,0x03,0xBE,0x88,0x00,0xA4,0xFF, | ||
950 | 0x86,0x88,0x00,0xE8,0x6A,0xFE,0x72,0x94,0x79,0x06,0x4A,0x74,0x8F,0xE9,0x5B,0xFF, | ||
951 | 0x4A,0x74,0xCE,0xEB,0xE1,0x90,0x50,0xE8,0x11,0xCC,0x8B,0x46,0x74,0x39,0x46,0x72, | ||
952 | 0x74,0x27,0x1E,0x56,0x51,0x33,0xC9,0xC5,0x76,0x0C,0xAD,0x74,0x10,0x78,0x09,0x03, | ||
953 | 0xC8,0x05,0x01,0x00,0x24,0xFE,0x03,0xF0,0x3B,0x76,0x10,0x76,0xED,0x29,0x4E,0x76, | ||
954 | 0x01,0x4E,0x78,0xE8,0x37,0xCC,0x59,0x5E,0x1F,0x58,0xC3,0x90,0xC4,0x7E,0x10,0x26, | ||
955 | 0x8B,0x1D,0x83,0xC3,0x03,0x26,0x89,0x1D,0x4B,0x03,0xFB,0xAB,0x91,0xAA,0xB8,0x03, | ||
956 | 0x00,0x29,0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0xC3,0x90,0xC4,0x7E,0x10,0x26, | ||
957 | 0x8B,0x1D,0x43,0x26,0x89,0x1D,0x43,0x03,0xFB,0xAA,0xFF,0x4E,0x78,0xFF,0x46,0x76, | ||
958 | 0xFF,0x4E,0x74,0xC3,0xE8,0xE5,0xFF,0xC3,0x80,0x81,0x84,0x85,0x82,0x83,0x86,0x87, | ||
959 | 0x50,0x53,0x8A,0xDC,0x83,0xE3,0x0E,0xD1,0xEB,0x2E,0x8A,0x87,0x98,0x3B,0x08,0x86, | ||
960 | 0xB0,0x00,0xFE,0x86,0xB1,0x00,0xB0,0x0A,0xE8,0x87,0xD4,0x5B,0x58,0xC3,0x50,0x8A, | ||
961 | 0xC8,0xB8,0xFF,0x00,0xE8,0x95,0xFF,0x58,0xC3,0x90,0x8A,0x86,0xBB,0x00,0xE8,0xAB, | ||
962 | 0xFF,0xC3,0xE8,0xCB,0xFF,0xE8,0xF2,0xFF,0xC3,0x90,0xE8,0xC3,0xFF,0xE8,0xB4,0xFF, | ||
963 | 0xC3,0x90,0x33,0xC0,0xE8,0x95,0xFF,0xC3,0xB8,0xFF,0x00,0x33,0xC9,0xE8,0x6C,0xFF, | ||
964 | 0xC3,0x90,0xB8,0xFF,0x01,0xB1,0x10,0xE8,0x62,0xFF,0xC3,0x90,0xC3,0xFC,0x3B,0xE2, | ||
965 | 0x3B,0xF2,0x3B,0xF2,0x3B,0xFC,0x3B,0xE2,0x3B,0xE8,0x3B,0xE8,0x3B,0xFC,0x3B,0xE2, | ||
966 | 0x3B,0xE8,0x3B,0xE8,0x3B,0xFC,0x3B,0xE2,0x3B,0xE2,0x3B,0xE2,0x3B,0x00,0x10,0x00, | ||
967 | 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00, | ||
968 | 0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x08,0x00, | ||
969 | 0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x51,0x53,0x8B, | ||
970 | 0x4E,0x38,0x81,0xE1,0xFF,0xEE,0xA8,0x04,0x74,0x04,0x81,0xC9,0x00,0x01,0x8A,0xE0, | ||
971 | 0x80,0xE4,0x03,0x24,0x18,0xD0,0xE4,0x0A,0xC4,0x33,0xDB,0x8A,0xD8,0x2E,0x8B,0x87, | ||
972 | 0xFD,0x3B,0x89,0x46,0x7C,0x2E,0x0B,0x8F,0x1D,0x3C,0x89,0x4E,0x38,0xD1,0xEB,0x2E, | ||
973 | 0x8A,0xA7,0x3D,0x3C,0x5B,0x59,0xC3,0xAC,0x49,0x3C,0x01,0x72,0x1D,0x74,0x20,0x3C, | ||
974 | 0x03,0x72,0x23,0x74,0x28,0x3C,0x08,0x72,0x2B,0x74,0x30,0x3C,0x20,0x72,0x37,0x74, | ||
975 | 0x3A,0xBB,0xDA,0x3B,0x32,0xE4,0x89,0x5E,0x7E,0xC3,0xBB,0xA0,0x3B,0xEB,0xF5,0xBB, | ||
976 | 0x94,0x3B,0xB4,0x01,0xEB,0xF0,0xBB,0xFC,0x3B,0xB4,0x02,0xEB,0xE9,0xBB,0xE2,0x3B, | ||
977 | 0xB4,0x03,0xEB,0xE2,0xBB,0xBE,0x3B,0xB4,0x04,0xEB,0xDB,0xBB,0xCA,0x3B,0xAC,0x49, | ||
978 | 0x88,0x86,0xBB,0x00,0xEB,0xCE,0xBB,0xD2,0x3B,0xEB,0xF3,0xBB,0xFC,0x3B,0xEB,0xC4, | ||
979 | 0xA9,0x04,0x00,0x75,0xD1,0xA9,0x08,0x00,0x75,0xDA,0xEB,0xD1,0x8B,0x5E,0x74,0x8B, | ||
980 | 0x4E,0x78,0x3B,0xCB,0x72,0x02,0x8B,0xCB,0x3B,0xC8,0x72,0x02,0x8B,0xC8,0x8B,0xC1, | ||
981 | 0xE3,0x2C,0xC4,0x7E,0x10,0x8B,0xDF,0x26,0x03,0x3D,0x47,0x47,0xF7,0x46,0x7A,0x01, | ||
982 | 0x00,0x75,0x1C,0xF7,0xC7,0x01,0x00,0x74,0x02,0x49,0xA4,0xD1,0xE9,0xF3,0xA5,0x73, | ||
983 | 0x01,0xA4,0x26,0x01,0x07,0x29,0x46,0x78,0x01,0x46,0x76,0x29,0x46,0x74,0xC3,0x50, | ||
984 | 0x53,0xBB,0x7F,0x7F,0xF7,0xC7,0x01,0x00,0x74,0x05,0x49,0xAC,0x22,0xC3,0xAA,0xD1, | ||
985 | 0xE9,0xE3,0x1D,0x9C,0xAD,0x23,0xC3,0xAB,0x49,0x74,0x14,0xAD,0x23,0xC3,0xAB,0x49, | ||
986 | 0x74,0x0D,0xAD,0x23,0xC3,0xAB,0x49,0x74,0x06,0xAD,0x23,0xC3,0xAB,0xE2,0xE5,0x9D, | ||
987 | 0x73,0x04,0xAC,0x22,0xC3,0xAB,0x5B,0x58,0xEB,0xB8,0xE8,0xCE,0xC9,0x8B,0x5E,0x38, | ||
988 | 0xF7,0xC3,0x10,0x04,0x75,0x01,0xC3,0xF7,0xC3,0x40,0x00,0x74,0x05,0xE8,0xB8,0xE3, | ||
989 | 0xEB,0x03,0xE8,0xA8,0xE3,0x81,0x66,0x38,0xEF,0xFB,0xF6,0xC3,0x10,0x74,0x3C,0xF6, | ||
990 | 0xC3,0x02,0x74,0x06,0xE4,0xD8,0x0C,0x01,0xE6,0xD8,0xF6,0xC3,0x04,0x74,0x11,0x83, | ||
991 | 0xC2,0x08,0x8A,0x86,0xA7,0x00,0x0C,0x01,0xEE,0x88,0x86,0xA7,0x00,0x83,0xEA,0x08, | ||
992 | 0xF6,0xC3,0x08,0x74,0x0F,0xE8,0x8B,0xE3,0x72,0x0A,0x8A,0x86,0xC0,0x00,0xE6,0x38, | ||
993 | 0xB0,0x23,0xE6,0x0A,0xF7,0xC3,0x00,0x04,0x75,0x01,0xC3,0xF7,0xC3,0x00,0x08,0x75, | ||
994 | 0xF9,0x8A,0x86,0xA5,0x00,0xF6,0xC3,0x40,0x75,0x0D,0xA8,0x10,0x75,0xEC,0x0C,0x10, | ||
995 | 0x88,0x86,0xA5,0x00,0xE6,0x0C,0xC3,0xA8,0x01,0x75,0xDF,0x83,0xC2,0x02,0x0C,0x05, | ||
996 | 0xEE,0x88,0x86,0xA5,0x00,0xC3,0xB0,0x00,0xE8,0x47,0xD2,0xEB,0x0F,0xB0,0x02,0xE8, | ||
997 | 0x90,0x0E,0xEB,0x08,0x83,0x66,0x38,0xDF,0x83,0x4E,0x7A,0x02,0x33,0xC0,0x8E,0xD8, | ||
998 | 0xFA,0xA0,0x92,0x12,0x40,0xA2,0x92,0x12,0x3C,0x05,0x72,0x1E,0xC6,0x06,0x92,0x12, | ||
999 | 0x00,0xFB,0xB0,0x01,0xE8,0x6B,0x0E,0xFA,0xA1,0x26,0x01,0x23,0x06,0x2A,0x01,0xA8, | ||
1000 | 0x01,0x75,0x07,0xE8,0xE2,0x07,0xE8,0x61,0x09,0x90,0xB0,0x00,0xE8,0x37,0xD2,0xFB, | ||
1001 | 0x85,0xED,0x74,0xB9,0xFA,0xF7,0x46,0x7A,0x46,0x00,0x75,0xC0,0x8B,0x46,0x78,0x3D, | ||
1002 | 0x0A,0x00,0x72,0xB0,0x8B,0x4E,0x74,0x83,0xF9,0x50,0x72,0x9A,0x83,0x66,0x38,0xDF, | ||
1003 | 0xC5,0x76,0x14,0x8B,0x46,0x3A,0x85,0xC0,0x75,0x58,0xAD,0x85,0xC0,0x75,0x0F,0xE8, | ||
1004 | 0xF8,0xFE,0xF7,0x46,0x7A,0x08,0x00,0x74,0x93,0xE8,0xA0,0xFA,0xEB,0x8E,0x3B,0x76, | ||
1005 | 0x04,0x76,0x21,0xB9,0x02,0x00,0x39,0x4E,0x2E,0x77,0x05,0xC7,0x46,0x2E,0x00,0x00, | ||
1006 | 0x56,0x8B,0x76,0x2C,0x89,0x76,0x04,0xC7,0x04,0x00,0x00,0x46,0x46,0x89,0x76,0x2C, | ||
1007 | 0x29,0x4E,0x2E,0x5E,0x85,0xC0,0x79,0x17,0xF6,0xC4,0x10,0x74,0x05,0xFF,0x56,0x7C, | ||
1008 | 0xEB,0x03,0xFF,0x56,0x7E,0x89,0x76,0x14,0xB0,0x0C,0xE8,0x85,0xD1,0xEB,0x86,0x89, | ||
1009 | 0x46,0x3A,0xFF,0x96,0x80,0x00,0x29,0x46,0x3A,0x89,0x76,0x14,0xB0,0x0C,0xE8,0x71, | ||
1010 | 0xD1,0xE9,0x71,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x10,0x02, | ||
1011 | 0x01,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1012 | 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1013 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1014 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1015 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1016 | 0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, | ||
1017 | 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80, | ||
1018 | 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1019 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1020 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1021 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1022 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1023 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1024 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1025 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, | ||
1026 | 0x80,0x80,0x80,0x80,0x4E,0x41,0x78,0x41,0xD0,0x41,0xF4,0x41,0x06,0x42,0x18,0x42, | ||
1027 | 0xC3,0x90,0x8E,0x46,0x02,0x8B,0x7E,0x22,0x89,0x7E,0x6C,0x80,0x66,0x27,0xFD,0x8B, | ||
1028 | 0x56,0x24,0x83,0xFA,0x04,0x72,0xE9,0x83,0xEA,0x02,0x8B,0xD9,0x3B,0xCA,0x76,0x02, | ||
1029 | 0x8B,0xCA,0xB0,0x0A,0x57,0x51,0x8B,0xFE,0xF2,0xAE,0x8B,0xC1,0x59,0x5F,0x75,0x1E, | ||
1030 | 0x50,0x40,0x2B,0xC8,0x74,0x06,0x2B,0xD1,0x2B,0xD9,0xF3,0xA4,0x59,0x4B,0x4A,0x4A, | ||
1031 | 0xB0,0x0D,0xAA,0xA4,0x3B,0xCA,0x76,0x02,0x8B,0xCA,0xE3,0x13,0xEB,0xD4,0x2B,0xD9, | ||
1032 | 0xF7,0xC6,0x01,0x00,0x74,0x02,0xA4,0x49,0xD1,0xE9,0xF3,0xA5,0x73,0x01,0xA4,0x89, | ||
1033 | 0x7E,0x22,0x2B,0x7E,0x6C,0x29,0x7E,0x24,0x01,0x7E,0x1A,0x8B,0xCB,0x80,0x7E,0x26, | ||
1034 | 0x02,0x74,0x05,0x80,0x66,0x26,0xFD,0xC3,0x60,0xB0,0xFD,0xE8,0x18,0x03,0x61,0xC3, | ||
1035 | 0xC3,0x90,0xE8,0x7C,0x02,0x72,0xF9,0x90,0x83,0x4E,0x26,0x20,0x8B,0x46,0x6A,0x89, | ||
1036 | 0x46,0x6E,0x8B,0x46,0x48,0x0D,0x04,0x00,0x25,0xBF,0xFF,0x89,0x46,0x48,0xB0,0x06, | ||
1037 | 0xE8,0xBF,0xCF,0xC3,0x89,0x7E,0x22,0x2B,0x7E,0x6C,0x01,0x7E,0x1A,0x29,0x7E,0x24, | ||
1038 | 0x80,0x7E,0x26,0x02,0x74,0x05,0x83,0x66,0x26,0xFD,0xC3,0x60,0xB0,0xFD,0xE8,0xD5, | ||
1039 | 0x02,0x61,0xC3,0x90,0x8A,0xBE,0xC2,0x00,0xEB,0x24,0xF7,0x46,0x48,0x40,0x00,0x75, | ||
1040 | 0xB1,0x8E,0x46,0x02,0x8B,0x7E,0x22,0x89,0x7E,0x6C,0x8B,0x56,0x24,0x83,0xEA,0x0A, | ||
1041 | 0x78,0x9E,0x03,0xD7,0x80,0x66,0x27,0xFD,0x33,0xC0,0x8A,0xBE,0xC2,0x00,0xE3,0xB4, | ||
1042 | 0x3B,0xFA,0x77,0xB0,0xAC,0x49,0x93,0x2E,0x8A,0x87,0xD4,0x3E,0x93,0x22,0xDF,0x75, | ||
1043 | 0x17,0xAA,0xE3,0xA0,0x3B,0xFA,0x77,0x9C,0xAC,0x49,0x93,0x2E,0x8A,0x87,0xD4,0x3E, | ||
1044 | 0x93,0x22,0xDF,0x75,0x03,0xAA,0xEB,0xD6,0xF6,0xC3,0x7F,0x75,0x05,0xFF,0x46,0x66, | ||
1045 | 0xEB,0xDF,0xF6,0xC3,0x40,0x75,0x0C,0x8B,0xD8,0x83,0xEB,0x08,0xD1,0xE3,0x2E,0xFF, | ||
1046 | 0xA7,0xD4,0x3F,0xFF,0x46,0x66,0x2C,0x20,0xEB,0xC7,0x85,0xC0,0x74,0x2C,0x89,0x46, | ||
1047 | 0x6A,0x83,0x4E,0x48,0x40,0x89,0x7E,0x22,0x2B,0x7E,0x6C,0x01,0x7E,0x1A,0x29,0x7E, | ||
1048 | 0x24,0x80,0x7E,0x26,0x02,0x74,0x08,0x83,0x66,0x26,0xFD,0xE8,0xA3,0x01,0xC3,0x60, | ||
1049 | 0xB0,0xFD,0xE8,0x31,0x02,0x61,0xE8,0x98,0x01,0xC3,0xE9,0x57,0xFF,0x90,0x8B,0x5E, | ||
1050 | 0x66,0x4B,0x78,0x03,0x89,0x5E,0x66,0xAA,0x8B,0x5E,0x64,0xF7,0xC3,0x00,0x20,0x75, | ||
1051 | 0x03,0xE9,0x40,0xFF,0xF7,0xC3,0x40,0x00,0x74,0x08,0x8A,0x86,0xC1,0x00,0xAA,0xE9, | ||
1052 | 0x32,0xFF,0xB8,0x32,0x00,0xEB,0xA3,0x90,0x8B,0x5E,0x66,0x89,0x5E,0x68,0x83,0xC3, | ||
1053 | 0x08,0x80,0xE3,0xF8,0x89,0x5E,0x66,0x8B,0x5E,0x64,0x81,0xE3,0x00,0x18,0x81,0xFB, | ||
1054 | 0x00,0x18,0x74,0x2D,0xAA,0x85,0xDB,0x74,0x25,0xF7,0x46,0x64,0x40,0x00,0x75,0x18, | ||
1055 | 0x81,0xFB,0x00,0x10,0x74,0x0C,0x8B,0x46,0x66,0x2B,0x46,0x68,0xC1,0xE0,0x04,0xE9, | ||
1056 | 0x68,0xFF,0xB8,0x64,0x00,0xE9,0x62,0xFF,0x8A,0x86,0xC1,0x00,0xAA,0xAA,0xE9,0xE3, | ||
1057 | 0xFE,0x51,0x8B,0x4E,0x66,0x2B,0x4E,0x68,0xB0,0x20,0xF3,0xAA,0x59,0xE9,0xD4,0xFE, | ||
1058 | 0x8B,0x5E,0x66,0x89,0x5E,0x68,0x8B,0x5E,0x64,0xF7,0xC3,0x24,0x00,0x74,0x10,0xC7, | ||
1059 | 0x46,0x66,0x00,0x00,0xF7,0xC3,0x04,0x00,0x74,0x05,0xB0,0x0D,0xAA,0xB0,0x0A,0xAA, | ||
1060 | 0xEB,0x48,0x90,0x90,0xAA,0xF7,0x46,0x64,0x00,0x40,0x74,0x06,0xB8,0xD0,0x07,0xE9, | ||
1061 | 0x18,0xFF,0xE9,0x9F,0xFE,0x90,0xAA,0xF7,0x46,0x64,0x00,0x80,0x74,0x06,0xB8,0xD0, | ||
1062 | 0x07,0xE9,0x06,0xFF,0xE9,0x8D,0xFE,0x90,0x8B,0x5E,0x66,0x89,0x5E,0x68,0x85,0xDB, | ||
1063 | 0x75,0x0C,0x8B,0x5E,0x64,0xF7,0xC3,0x10,0x00,0x74,0x06,0xE9,0x76,0xFE,0x8B,0x5E, | ||
1064 | 0x64,0xF7,0xC3,0x08,0x00,0x74,0x27,0xB0,0x0A,0xAA,0xF7,0xC3,0x20,0x00,0x75,0x1F, | ||
1065 | 0xF7,0xC3,0x00,0x01,0x75,0x03,0xE9,0x5B,0xFE,0xF7,0xC3,0x40,0x00,0x75,0x06,0xB8, | ||
1066 | 0x64,0x00,0xE9,0xC5,0xFE,0x8A,0x86,0xC1,0x00,0xAA,0xAA,0xE9,0x46,0xFE,0xAA,0xC7, | ||
1067 | 0x46,0x66,0x00,0x00,0xF7,0xC3,0x00,0x06,0x74,0xF1,0xF7,0xC3,0x40,0x00,0x74,0x19, | ||
1068 | 0x8A,0x86,0xC1,0x00,0x81,0xE3,0x00,0x06,0x81,0xFB,0x00,0x04,0x72,0x06,0x76,0x02, | ||
1069 | 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xE9,0x1B,0xFE,0x81,0xE3,0x00,0x06,0x81,0xFB,0x00, | ||
1070 | 0x04,0x72,0x0E,0x76,0x06,0xB8,0x96,0x00,0xE9,0x7F,0xFE,0xB8,0x64,0x00,0xE9,0x79, | ||
1071 | 0xFE,0x8B,0x46,0x68,0xE9,0x73,0xFE,0x90,0x36,0x8B,0x0E,0xDA,0x12,0x83,0xF9,0x32, | ||
1072 | 0x73,0x1D,0x1E,0x06,0x33,0xC0,0x8E,0xD8,0x8E,0xC0,0x8D,0x76,0x4C,0xBF,0xDC,0x12, | ||
1073 | 0x03,0xF9,0xA5,0xA5,0xA5,0x83,0xC1,0x06,0x89,0x0E,0xDA,0x12,0x07,0x1F,0xC3,0xB0, | ||
1074 | 0x08,0xE8,0x6E,0xCD,0xC3,0x90,0x83,0x66,0x48,0xFE,0xE8,0x93,0xC4,0xE8,0xC8,0xFF, | ||
1075 | 0xC3,0xF6,0x46,0x27,0x02,0x75,0x0F,0x9C,0xFA,0x83,0x7E,0x1A,0x00,0x74,0x09,0x80, | ||
1076 | 0x4E,0x27,0x01,0x9D,0xF9,0xC3,0xF8,0xC3,0x50,0x52,0xF7,0x46,0x38,0x40,0x00,0x74, | ||
1077 | 0x1D,0xE8,0x34,0xDE,0x83,0xC2,0x0A,0xEC,0xA8,0x40,0x75,0x27,0x83,0xEA,0x08,0x8A, | ||
1078 | 0x86,0xA5,0x00,0x0C,0x02,0x88,0x86,0xA5,0x00,0xEE,0x5A,0x58,0xEB,0xD1,0xE8,0x0C, | ||
1079 | 0xDE,0x8A,0x86,0xA5,0x00,0x24,0xFB,0x0C,0x02,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x5A, | ||
1080 | 0x58,0xEB,0xBC,0x80,0x4E,0x27,0x02,0x5A,0x58,0x9D,0xF8,0xC3,0x08,0x46,0x26,0x9C, | ||
1081 | 0xFA,0x8A,0x8E,0xA5,0x00,0xF7,0x46,0x38,0x40,0x00,0x75,0x14,0xF6,0xC1,0x06,0x74, | ||
1082 | 0x23,0xE8,0xD9,0xDD,0x8A,0xC1,0x24,0xF9,0x88,0x86,0xA5,0x00,0xE6,0x0C,0x9D,0xC3, | ||
1083 | 0xF6,0xC1,0x02,0x74,0x0F,0xE8,0xD0,0xDD,0x83,0xC2,0x02,0x8A,0xC1,0x24,0xFD,0x88, | ||
1084 | 0x86,0xA5,0x00,0xEE,0x9D,0xC3,0x8B,0x5E,0x26,0x22,0xC3,0x88,0x46,0x26,0x74,0x01, | ||
1085 | 0xC3,0x80,0x66,0x27,0xFD,0x9C,0xFA,0x8A,0x8E,0xA5,0x00,0xF7,0x46,0x38,0x40,0x00, | ||
1086 | 0x75,0x16,0xF6,0xC1,0x04,0x75,0x0F,0xE8,0x93,0xDD,0x8A,0xC1,0x24,0xFD,0x0C,0x04, | ||
1087 | 0x88,0x86,0xA5,0x00,0xE6,0x0C,0x9D,0xC3,0xF6,0xC1,0x02,0x75,0xF9,0xE8,0x88,0xDD, | ||
1088 | 0x83,0xC2,0x0A,0xEC,0xA8,0x20,0x75,0x0E,0x83,0xEA,0x08,0x8A,0xC1,0x0C,0x02,0x88, | ||
1089 | 0x86,0xA5,0x00,0xEE,0x9D,0xC3,0x83,0xEA,0x0A,0x33,0xC9,0x8A,0x4E,0x1C,0x8B,0x46, | ||
1090 | 0x1A,0x3B,0xC8,0x73,0x1B,0x01,0x4E,0x2A,0x2B,0xC1,0x89,0x46,0x1A,0x1E,0xC5,0x76, | ||
1091 | 0x00,0xF3,0x6E,0x1F,0x89,0x76,0x00,0x83,0xC2,0x02,0x8A,0x86,0xA5,0x00,0xEB,0xCD, | ||
1092 | 0x85,0xC0,0x74,0x12,0x01,0x46,0x2A,0x8B,0xC8,0x1E,0xC5,0x76,0x00,0xF3,0x6E,0x1F, | ||
1093 | 0x89,0x76,0x00,0x89,0x4E,0x1A,0xF6,0xC7,0x01,0x75,0x23,0x80,0xCB,0x02,0x89,0x5E, | ||
1094 | 0x26,0xE8,0x08,0xC3,0x83,0xC2,0x02,0x8A,0x86,0xA5,0x00,0x24,0xFD,0xEE,0x88,0x86, | ||
1095 | 0xA5,0x00,0xF6,0xC7,0x10,0x75,0x05,0xB0,0x02,0xE8,0x16,0xCC,0x9D,0xC3,0x83,0xC2, | ||
1096 | 0x02,0x8A,0x86,0xA5,0x00,0xEB,0x86,0x90,0x8B,0xD1,0x8B,0x46,0x24,0x3B,0xC8,0x76, | ||
1097 | 0x02,0x8B,0xC8,0x2B,0xD1,0x2B,0xC1,0x8B,0xD9,0xE3,0x22,0x80,0x66,0x27,0xFD,0x8E, | ||
1098 | 0x46,0x02,0x8B,0x7E,0x22,0xF7,0xC6,0x01,0x00,0x74,0x02,0xA4,0x49,0xD1,0xE9,0xF3, | ||
1099 | 0xA5,0x73,0x01,0xA4,0x89,0x7E,0x22,0x89,0x46,0x24,0x01,0x5E,0x1A,0x8B,0xCA,0x80, | ||
1100 | 0x7E,0x26,0x02,0x74,0x05,0x80,0x66,0x26,0xFD,0xC3,0x60,0xB0,0xFD,0xE8,0xF6,0xFE, | ||
1101 | 0x61,0xC3,0x50,0xE4,0x0A,0x84,0xC0,0x75,0x0A,0x86,0x86,0xA1,0x00,0x84,0xC0,0x74, | ||
1102 | 0x0A,0xE6,0x0A,0x58,0x0C,0x20,0x89,0x46,0x48,0xF9,0xC3,0x58,0x24,0xDF,0x89,0x46, | ||
1103 | 0x48,0xF8,0xC3,0x90,0xFB,0xB0,0x02,0xE8,0xE8,0x07,0xFA,0xE8,0x2E,0x01,0xFB,0xB0, | ||
1104 | 0x01,0xE8,0xDE,0x07,0xFA,0xB0,0x02,0xE8,0xBC,0xCB,0xFB,0x85,0xED,0x74,0xE5,0xFA, | ||
1105 | 0x8E,0x5E,0x0A,0xFB,0x90,0xFA,0x8B,0x46,0x48,0x8B,0x76,0x40,0xA8,0x8C,0x75,0xDE, | ||
1106 | 0xA8,0x20,0x74,0x1A,0x50,0xE8,0x55,0xDC,0x58,0xE8,0xA6,0xFF,0x73,0x10,0xB0,0x02, | ||
1107 | 0xE8,0x5F,0xCB,0xEB,0xC9,0x90,0x25,0xFF,0x00,0x8B,0xC8,0xEB,0x36,0x90,0xA8,0x01, | ||
1108 | 0x75,0x22,0x46,0x83,0xE6,0xFE,0x3B,0x76,0x08,0x74,0x79,0xAD,0x8A,0xFC,0xB3,0xF0, | ||
1109 | 0x22,0xFB,0x3A,0xFB,0x74,0xE0,0x3A,0xBE,0xA0,0x00,0x74,0x2E,0xE8,0xD2,0xFD,0x73, | ||
1110 | 0x77,0xEB,0x9B,0x90,0x8A,0xE0,0x24,0xFC,0x88,0x46,0x48,0x8B,0x4E,0x4A,0xF6,0xC4, | ||
1111 | 0x02,0x74,0x1D,0xE8,0xBB,0xFD,0x72,0x86,0xE8,0x13,0xF3,0x89,0x76,0x40,0xE3,0x93, | ||
1112 | 0x83,0x4E,0x48,0x03,0x89,0x4E,0x4A,0xE9,0x74,0xFF,0x25,0xFF,0x0F,0x8B,0xC8,0x90, | ||
1113 | 0x8B,0x86,0x98,0x00,0x85,0xC0,0x74,0x1A,0x51,0x8A,0x8E,0xA0,0x00,0xC0,0xE9,0x04, | ||
1114 | 0xBA,0x01,0x00,0xD3,0xE2,0x59,0x23,0xC2,0x74,0x08,0x03,0xF1,0x89,0x76,0x40,0xE9, | ||
1115 | 0x61,0xFF,0xFF,0x56,0x62,0xE3,0xF5,0x83,0x4E,0x48,0x01,0x89,0x4E,0x4A,0x89,0x76, | ||
1116 | 0x40,0xE9,0x3A,0xFF,0x81,0x4E,0x26,0x00,0x10,0x8B,0x46,0x50,0x3B,0x46,0x46,0x77, | ||
1117 | 0x03,0xE8,0x52,0xFD,0xE9,0x27,0xFF,0x90,0x88,0xBE,0xA0,0x00,0xEB,0xAC,0x0A,0x06, | ||
1118 | 0x90,0x12,0x8A,0xE0,0xBA,0x06,0x01,0xB0,0x04,0xEE,0xEC,0x84,0xC0,0x75,0x12,0xB0, | ||
1119 | 0x04,0xEE,0x8A,0xC4,0xEE,0x32,0xE4,0xA8,0x80,0x74,0x06,0xC7,0x06,0x84,0x12,0x00, | ||
1120 | 0x00,0x88,0x26,0x90,0x12,0xC3,0x0A,0x06,0x90,0x12,0x8A,0xE0,0xBA,0x06,0x01,0xEC, | ||
1121 | 0xA8,0x01,0x75,0xED,0xBA,0x08,0x01,0x8A,0xC4,0xEE,0x32,0xE4,0xA8,0x80,0x74,0xE1, | ||
1122 | 0xC7,0x06,0x84,0x12,0x00,0x00,0x88,0x26,0x90,0x12,0xC3,0x90,0x36,0xF7,0x06,0x24, | ||
1123 | 0x01,0x01,0x00,0x75,0x30,0x36,0x8B,0x0E,0xDA,0x12,0x80,0xF9,0x36,0x73,0x26,0x33, | ||
1124 | 0xC0,0x8E,0xC0,0x8E,0xD8,0xBF,0xDC,0x12,0x03,0xF9,0xB0,0x08,0xE8,0x77,0xCA,0x85, | ||
1125 | 0xED,0x74,0x0E,0x8D,0x76,0x4C,0xA5,0xA5,0xA5,0x80,0xC1,0x06,0x80,0xF9,0x36,0x72, | ||
1126 | 0xE9,0x89,0x0E,0xDA,0x12,0xC3,0xC3,0x90,0xF7,0x06,0x26,0x01,0x01,0x00,0x75,0xF6, | ||
1127 | 0x8B,0x0E,0x20,0x13,0x85,0xC9,0x75,0xEE,0x33,0xC0,0x8E,0xC0,0x8E,0xD8,0xBF,0x24, | ||
1128 | 0x13,0xB9,0x36,0x00,0xB0,0x0A,0xE8,0x3D,0xCA,0x85,0xED,0x75,0x06,0xE9,0x12,0x01, | ||
1129 | 0xE9,0x0A,0x01,0x33,0xDB,0x8A,0x46,0x4C,0x8A,0xA6,0xB3,0x00,0xFE,0xCC,0x78,0x0E, | ||
1130 | 0x88,0xA6,0xB3,0x00,0x0A,0xDC,0xB4,0x0A,0xAB,0x83,0xE9,0x02,0x76,0xE2,0x8A,0xA6, | ||
1131 | 0xB2,0x00,0xFE,0xCC,0x78,0x0E,0x88,0xA6,0xB2,0x00,0x0A,0xDC,0xB4,0x08,0xAB,0x83, | ||
1132 | 0xE9,0x02,0x76,0xCC,0x8A,0xA6,0xB1,0x00,0xFE,0xCC,0x78,0x18,0x8A,0xBE,0xB0,0x00, | ||
1133 | 0x75,0x04,0x88,0xA6,0xB0,0x00,0x88,0xA6,0xB1,0x00,0x0A,0xDC,0x8A,0xE7,0xAB,0x83, | ||
1134 | 0xE9,0x02,0x76,0xAC,0x8A,0xA6,0xB4,0x00,0xFE,0xCC,0x78,0x1F,0x88,0xA6,0xB4,0x00, | ||
1135 | 0x0A,0xDC,0xB4,0x0B,0xAB,0x8A,0x86,0xBC,0x00,0x8A,0xA6,0xBD,0x00,0xAB,0x8B,0x86, | ||
1136 | 0xBE,0x00,0xAB,0x83,0xE9,0x06,0x76,0x88,0x8A,0x46,0x4C,0x8A,0xA6,0xB6,0x00,0xFE, | ||
1137 | 0xCC,0x78,0x19,0x88,0xA6,0xB6,0x00,0x0A,0xDC,0xB4,0x0C,0xAB,0xE8,0xDB,0xCB,0xAB, | ||
1138 | 0x8B,0x46,0x2A,0xAB,0x83,0xE9,0x06,0x76,0x74,0x8A,0x46,0x4C,0x8A,0xA6,0xB7,0x00, | ||
1139 | 0xFE,0xCC,0x78,0x19,0x88,0xA6,0xB7,0x00,0x0A,0xDC,0xB4,0x0D,0xAB,0xE8,0xBA,0xCB, | ||
1140 | 0xAB,0x8B,0x46,0x34,0xAB,0x83,0xE9,0x06,0x76,0x53,0x8A,0x46,0x4C,0x8A,0xA6,0xB8, | ||
1141 | 0x00,0xFE,0xCC,0x78,0x19,0x88,0xA6,0xB8,0x00,0x0A,0xDC,0xB4,0x0E,0xAB,0xA1,0x50, | ||
1142 | 0x12,0xAB,0xA1,0x52,0x12,0xAB,0x83,0xE9,0x06,0x76,0x32,0x8A,0x46,0x4C,0x8A,0xA6, | ||
1143 | 0xB5,0x00,0xFE,0xCC,0x78,0x18,0x88,0xA6,0xB5,0x00,0x0A,0xDC,0xB4,0x0F,0xAB,0x8B, | ||
1144 | 0x86,0x9A,0x00,0xAB,0x8B,0x86,0x9C,0x00,0xAB,0x83,0xE9,0x06,0x76,0x0F,0x84,0xDB, | ||
1145 | 0x75,0x03,0xE9,0xEF,0xFE,0xB0,0x0A,0xE8,0xF8,0xC8,0xE9,0xE7,0xFE,0xB0,0x0A,0xE8, | ||
1146 | 0xF0,0xC8,0xF7,0xD9,0x83,0xC1,0x36,0x8B,0xC1,0x0D,0x80,0x00,0x86,0xC4,0xA3,0x22, | ||
1147 | 0x13,0x41,0x41,0x89,0x0E,0x20,0x13,0xC3,0xA1,0x84,0x12,0x2B,0xC1,0x72,0x11,0xA3, | ||
1148 | 0x84,0x12,0xBE,0x22,0x13,0xD1,0xE9,0xF3,0x6F,0x90,0x89,0x0E,0x20,0x13,0xF8,0xC3, | ||
1149 | 0xF9,0xC3,0xC3,0x81,0xEF,0x6A,0x13,0x74,0xF9,0x8B,0xC7,0x0D,0x80,0x00,0x86,0xC4, | ||
1150 | 0xA3,0x68,0x13,0x47,0x47,0x89,0x3E,0x66,0x13,0xC3,0xF7,0x06,0x2A,0x01,0x01,0x00, | ||
1151 | 0x75,0xE0,0x8B,0x0E,0x66,0x13,0xE3,0x07,0x80,0xF9,0x20,0x77,0xD5,0x49,0x49,0x33, | ||
1152 | 0xC0,0x8E,0xC0,0x8E,0xD8,0xBF,0x6A,0x13,0x8B,0xF7,0x03,0xF9,0x83,0xC6,0x34,0x3B, | ||
1153 | 0xFE,0x77,0xC0,0xB0,0x0E,0xE8,0xAE,0xC8,0x85,0xED,0x74,0xB7,0x8A,0x46,0x4C,0x8A, | ||
1154 | 0xB6,0xB9,0x00,0xFE,0xCE,0x78,0x15,0x88,0xB6,0xB9,0x00,0x8A,0xA6,0xA9,0x00,0x80, | ||
1155 | 0xCC,0xC0,0xAB,0x84,0xF6,0x74,0x05,0xB0,0x0E,0xE8,0x56,0xC8,0x8A,0xB6,0xBA,0x00, | ||
1156 | 0xFE,0xCE,0x78,0xCB,0x8A,0x9E,0xA9,0x00,0x8A,0xBE,0xAB,0x00,0x8A,0x56,0x3F,0x8A, | ||
1157 | 0xF3,0x32,0xF7,0x0A,0xB6,0xAC,0x00,0xC6,0x86,0xAC,0x00,0x00,0x22,0xF2,0x74,0x4B, | ||
1158 | 0xF6,0xC6,0x08,0x74,0x0F,0xB4,0x02,0xF6,0xC3,0x08,0x75,0x02,0xB4,0x03,0xAB,0x80, | ||
1159 | 0xE6,0xF7,0x74,0x37,0xF6,0xC6,0x01,0x74,0x0F,0xB4,0x00,0xF6,0xC3,0x01,0x75,0x02, | ||
1160 | 0xB4,0x01,0xAB,0x80,0xE6,0xFE,0x74,0x23,0xF6,0xC6,0x02,0x74,0x0F,0xB4,0x04,0xF6, | ||
1161 | 0xC3,0x02,0x75,0x02,0xB4,0x05,0xAB,0x80,0xE6,0xFD,0x74,0x0F,0xF6,0xC6,0x04,0x74, | ||
1162 | 0x0A,0xB4,0x06,0xF6,0xC3,0x04,0x75,0x02,0xB4,0x07,0xAB,0xC6,0x86,0xBA,0x00,0x00, | ||
1163 | 0x88,0x9E,0xAB,0x00,0xE9,0x58,0xFF,0x90,0xA1,0x84,0x12,0x2B,0xC1,0x72,0x11,0xA3, | ||
1164 | 0x84,0x12,0xBE,0x68,0x13,0xD1,0xE9,0xF3,0x6F,0x90,0x89,0x0E,0x66,0x13,0xF8,0xC3, | ||
1165 | 0xF9,0xC3,0xA1,0x84,0x12,0x41,0x41,0x2B,0xC1,0x72,0x23,0xA3,0x84,0x12,0x8B,0xC1, | ||
1166 | 0x48,0x48,0x32,0xE4,0x0C,0x80,0x86,0xC4,0xEF,0x90,0x90,0x90,0x90,0x90,0xBE,0xDC, | ||
1167 | 0x12,0x49,0x49,0xD1,0xE9,0xF3,0x6F,0x90,0x89,0x0E,0xDA,0x12,0xF8,0xC3,0xF9,0xC3, | ||
1168 | 0x8A,0xC8,0x8A,0x46,0x4C,0xB4,0x01,0x83,0xEB,0x06,0xEF,0x90,0x90,0x90,0x90,0x90, | ||
1169 | 0xB8,0x01,0x00,0xEF,0x90,0x90,0x90,0x90,0x90,0x8A,0xC1,0xEF,0x90,0x90,0x90,0x90, | ||
1170 | 0x90,0xE9,0x97,0x00,0xE9,0xAC,0x00,0x33,0xC0,0x8E,0xD8,0x89,0x1E,0x84,0x12,0xC3, | ||
1171 | 0x36,0x8B,0x1E,0x84,0x12,0xFB,0x90,0xFA,0xB0,0x0C,0xE8,0x89,0xC7,0x85,0xED,0x74, | ||
1172 | 0xE6,0xC5,0x76,0x0C,0x83,0xFB,0x14,0x72,0xDB,0xFB,0x90,0xFA,0xAD,0x85,0xC0,0x78, | ||
1173 | 0xAF,0x74,0xE2,0x8B,0xFE,0x03,0xF8,0x36,0x8B,0x0E,0x86,0x12,0x3B,0xC1,0x77,0x02, | ||
1174 | 0x8B,0xC8,0x83,0xEB,0x04,0x3B,0xD9,0x77,0x02,0x8B,0xCB,0x33,0xC0,0x8A,0x46,0x4C, | ||
1175 | 0xEF,0x90,0x90,0x90,0x90,0x90,0x8B,0xC1,0xEF,0x90,0x90,0x90,0x90,0x90,0x41,0x80, | ||
1176 | 0xE1,0xFE,0x2B,0xD9,0x51,0xD1,0xE9,0xF3,0x6F,0x90,0x59,0x8B,0xC7,0x40,0x24,0xFE, | ||
1177 | 0x3B,0xC6,0x74,0x27,0x2B,0xFE,0x4E,0x4E,0x53,0x8B,0x5E,0x10,0x3B,0xF3,0x72,0x13, | ||
1178 | 0x03,0x1F,0x83,0xC3,0x03,0x80,0xE3,0xFE,0xC7,0x07,0x00,0x00,0x83,0x6E,0x74,0x02, | ||
1179 | 0x89,0x5E,0x10,0x5B,0x89,0x3C,0x89,0x76,0x0C,0xEB,0x89,0x89,0x76,0x0C,0x39,0x76, | ||
1180 | 0x10,0x77,0x81,0x72,0x08,0x83,0x3C,0x00,0x74,0x03,0xE9,0x77,0xFF,0xE8,0x0D,0xBE, | ||
1181 | 0xE9,0x62,0xFF,0x36,0x89,0x1E,0x84,0x12,0xB0,0x0C,0xE8,0xB5,0xC6,0x33,0xC0,0x8E, | ||
1182 | 0xD8,0xC3,0xA1,0x84,0x12,0x3D,0x10,0x00,0x72,0x77,0xBA,0x04,0x01,0x3B,0x06,0x88, | ||
1183 | 0x12,0x75,0x06,0xC7,0x06,0x7E,0x12,0x00,0x00,0x8B,0x0E,0xDA,0x12,0xE3,0x0B,0xE8, | ||
1184 | 0xD0,0xFE,0x72,0x57,0xC7,0x06,0x7E,0x12,0xFF,0x7F,0x8B,0x0E,0x20,0x13,0xE3,0x0B, | ||
1185 | 0xE8,0xA5,0xFD,0x72,0x46,0xC7,0x06,0x7E,0x12,0xFF,0x7F,0x8B,0x0E,0x66,0x13,0xE3, | ||
1186 | 0x0B,0xE8,0x94,0xFE,0x72,0x35,0xC7,0x06,0x7E,0x12,0xFF,0x7F,0xA1,0x28,0x01,0xA9, | ||
1187 | 0x01,0x00,0x75,0x03,0xE8,0xF9,0xFE,0x80,0x3E,0x8D,0x12,0x00,0x75,0x1D,0xA1,0x84, | ||
1188 | 0x12,0x3D,0x20,0x00,0x76,0x15,0x3B,0x06,0x82,0x12,0x76,0x09,0xA1,0x7E,0x12,0x3B, | ||
1189 | 0x06,0x80,0x12,0x72,0x0C,0x80,0x0E,0x90,0x12,0x80,0xC3,0xB0,0x80,0xFF,0x16,0x7C, | ||
1190 | 0x12,0xC3,0x80,0x0E,0x90,0x12,0x40,0xC3,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x17, | ||
1191 | 0x9C,0x0E,0xE8,0xB7,0xC8,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x20,0x9C,0x0E,0xE8, | ||
1192 | 0xAA,0xC8,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x16,0x9C,0x0E,0xE8,0x9D,0xC8,0x90, | ||
1193 | 0xBA,0x06,0x01,0xEC,0xA8,0x20,0x75,0xCA,0xFB,0x90,0xFA,0xBA,0x04,0x01,0xED,0x90, | ||
1194 | 0x90,0x90,0x90,0x90,0x3A,0x06,0x94,0x12,0x77,0xBE,0x33,0xDB,0x8A,0xD8,0xD1,0xE3, | ||
1195 | 0x2E,0x8B,0xAF,0x44,0x00,0xC4,0x7E,0x08,0x85,0xFF,0x74,0xB9,0xF6,0xC4,0xC0,0x75, | ||
1196 | 0x55,0x32,0xC0,0xC1,0xE0,0x02,0x80,0xE4,0xF0,0x8B,0xF0,0xED,0x90,0x90,0x90,0x90, | ||
1197 | 0x90,0x85,0xC0,0x74,0xBB,0x8B,0xC8,0x41,0x80,0xE1,0xFE,0x0B,0xC6,0x8B,0x5E,0x50, | ||
1198 | 0x4B,0x4B,0x2B,0xD9,0x78,0x9C,0xAB,0x8B,0xC1,0x40,0x40,0x01,0x46,0x4E,0xD1,0xE9, | ||
1199 | 0xF3,0x6D,0x90,0x89,0x5E,0x50,0x89,0x7E,0x08,0x8B,0x46,0x26,0x80,0xE4,0xEF,0x89, | ||
1200 | 0x46,0x26,0xF6,0xC4,0x01,0x75,0x0C,0xF7,0x46,0x48,0x0C,0x00,0x75,0x05,0xB0,0x02, | ||
1201 | 0xE8,0x7F,0xC5,0xE9,0x7A,0xFF,0x86,0xC4,0x8B,0xC8,0x83,0xE1,0x3F,0x41,0x80,0xE1, | ||
1202 | 0xFE,0xE3,0x0A,0x3C,0x80,0x72,0x09,0x24,0x3F,0xB4,0xF0,0xEB,0xB0,0xE9,0x60,0xFF, | ||
1203 | 0x25,0x3F,0x00,0x33,0xFF,0x8E,0xC7,0xBF,0x96,0x12,0x8B,0xF7,0xD1,0xE9,0xF3,0x6D, | ||
1204 | 0x90,0x8B,0xC8,0xE8,0x48,0xED,0xE9,0x47,0xFF,0x90,0x6A,0x00,0x1F,0xC6,0x06,0x93, | ||
1205 | 0x12,0x1B,0x9C,0x0E,0xE8,0xD5,0xC7,0x90,0x60,0x1E,0x06,0x33,0xC0,0x8E,0xD8,0x8E, | ||
1206 | 0xC0,0xBA,0x06,0x01,0xEC,0xA8,0x04,0x74,0xE1,0xB0,0x06,0xEE,0xEC,0xA2,0x8C,0x12, | ||
1207 | 0xA8,0x40,0x74,0x11,0xA1,0x88,0x12,0xA3,0x84,0x12,0xC6,0x06,0x8D,0x12,0x00,0xE8, | ||
1208 | 0x60,0xFE,0xA0,0x8C,0x12,0xA8,0x80,0x74,0x03,0xE8,0x04,0xFF,0xB8,0x00,0x80,0xBA, | ||
1209 | 0x22,0xFF,0xEF,0x07,0x1F,0x61,0xCF,0x90,0x6A,0x00,0x1F,0xC6,0x06,0x93,0x12,0x1B, | ||
1210 | 0x9C,0x0E,0xE8,0x87,0xC7,0x90,0x60,0x1E,0x06,0x33,0xC0,0x8E,0xD8,0x8E,0xC0,0xBA, | ||
1211 | 0x06,0x01,0xEC,0xA8,0x04,0x74,0xE1,0xBA,0x08,0x01,0xEC,0xA2,0x8C,0x12,0xA8,0x40, | ||
1212 | 0x74,0x11,0xA1,0x88,0x12,0xA3,0x84,0x12,0xC6,0x06,0x8D,0x12,0x00,0xE8,0x12,0xFE, | ||
1213 | 0xA0,0x8C,0x12,0xA8,0x80,0x74,0x03,0xE8,0xB6,0xFE,0xB8,0x00,0x80,0xBA,0x22,0xFF, | ||
1214 | 0xEF,0x07,0x1F,0x61,0xCF,0x90,0xEE,0x86,0xE0,0xEE,0x86,0xE0,0xEC,0x86,0xE0,0xEC, | ||
1215 | 0x86,0xE0,0x80,0xE1,0xFE,0xF3,0x6C,0x90,0x80,0xE1,0xFE,0xF3,0x6E,0x90,0x05,0x00, | ||
1216 | 0x75,0x47,0xA8,0x4B,0x05,0x00,0x75,0x48,0xA8,0x4B,0x05,0x00,0xA3,0x48,0xA8,0x4B, | ||
1217 | 0x05,0x00,0x35,0x49,0xA8,0x4B,0x06,0x00,0x98,0x48,0x96,0x4B,0x06,0x00,0xBA,0x48, | ||
1218 | 0x96,0x4B,0x06,0x00,0xC3,0x48,0x96,0x4B,0x06,0x00,0xCB,0x48,0x96,0x4B,0x06,0x00, | ||
1219 | 0x20,0x49,0x96,0x4B,0x06,0x00,0x28,0x49,0x96,0x4B,0x06,0x00,0x4E,0x4A,0x9C,0x4B, | ||
1220 | 0x06,0x00,0x7B,0x4A,0x9C,0x4B,0x05,0x00,0x9E,0x4A,0xA2,0x4B,0x05,0x00,0xEC,0x4A, | ||
1221 | 0xA2,0x4B,0x00,0x00,0x1E,0x06,0x83,0x3E,0x44,0x12,0x00,0x74,0x09,0xA0,0x06,0x01, | ||
1222 | 0x24,0x30,0x3C,0x30,0x74,0x1A,0x8C,0xC8,0x8E,0xD8,0x8E,0xC0,0xBB,0xAE,0x4B,0x8B, | ||
1223 | 0x0F,0xE3,0x0D,0x8B,0x7F,0x02,0x8B,0x77,0x04,0xF3,0xA4,0x83,0xC3,0x06,0xEB,0xEF, | ||
1224 | 0x07,0x1F,0xC3,0x90,0x33,0xC0,0xA3,0x3E,0x01,0xB9,0x0C,0x01,0xBE,0x40,0x01,0x8B, | ||
1225 | 0xFE,0x81,0xC6,0xB4,0x0F,0x89,0x04,0x8B,0xC6,0x2B,0xF1,0x3B,0xC7,0x77,0xF6,0xA3, | ||
1226 | 0x3C,0x01,0xC3,0x90,0x1E,0x06,0x60,0x36,0x8B,0x2E,0x3E,0x01,0x8B,0x5E,0x00,0x3B, | ||
1227 | 0xEB,0x74,0x2B,0x8B,0x76,0x02,0x89,0x1C,0x89,0x77,0x02,0x36,0xA1,0x3C,0x01,0x89, | ||
1228 | 0x46,0x00,0x36,0x89,0x2E,0x3C,0x01,0x8B,0xEB,0xFF,0x4E,0x06,0x74,0x08,0x8B,0x6E, | ||
1229 | 0x00,0xFF,0x4E,0x06,0x75,0xF8,0x36,0x89,0x2E,0x3E,0x01,0x8B,0x66,0x04,0x61,0x07, | ||
1230 | 0x1F,0xC3,0x1E,0x06,0x60,0x36,0x8B,0x2E,0x3E,0x01,0x98,0x89,0x46,0x06,0x89,0x66, | ||
1231 | 0x04,0x3B,0x6E,0x00,0x74,0x10,0x8B,0x6E,0x00,0xFF,0x4E,0x06,0x75,0xF8,0x36,0x89, | ||
1232 | 0x2E,0x3E,0x01,0x8B,0x66,0x04,0x61,0x07,0x1F,0xC3,0xC3,0x90,0x1E,0x06,0x60,0x9C, | ||
1233 | 0xFA,0x33,0xED,0x8E,0xDD,0x8B,0x2E,0x3C,0x01,0x85,0xED,0x74,0x3D,0x8B,0x4E,0x00, | ||
1234 | 0x89,0x0E,0x3C,0x01,0x8B,0xCC,0x8D,0xA6,0x0A,0x01,0x56,0x1E,0x06,0x60,0x89,0x66, | ||
1235 | 0x04,0xC7,0x46,0x08,0x0F,0x1A,0xC7,0x46,0x06,0x01,0x00,0x8B,0x1E,0x3E,0x01,0x85, | ||
1236 | 0xDB,0x74,0x1D,0x8B,0xC5,0x87,0x07,0x89,0x46,0x00,0x89,0x5E,0x02,0x8B,0xD8,0x89, | ||
1237 | 0x6F,0x02,0x8B,0xE1,0x9D,0x61,0x07,0x1F,0xF8,0xC3,0x9D,0x61,0x07,0x1F,0xF9,0xC3, | ||
1238 | 0x89,0x2E,0x3E,0x01,0x89,0x6E,0x00,0x89,0x6E,0x02,0x87,0xE1,0x9D,0x8B,0xE1,0xEB, | ||
1239 | 0xE4,0x00,0x0D,0x0A,0x54,0x65,0x72,0x6D,0x69,0x6E,0x61,0x6C,0x73,0x20,0x73,0x75, | ||
1240 | 0x70,0x70,0x6F,0x72,0x74,0x65,0x64,0x3A,0x0D,0x0A,0x31,0x29,0x20,0x41,0x4E,0x53, | ||
1241 | 0x49,0x20,0x63,0x6F,0x6D,0x70,0x61,0x74,0x69,0x62,0x6C,0x65,0x0D,0x0A,0x32,0x29, | ||
1242 | 0x20,0x57,0x79,0x73,0x65,0x20,0x33,0x30,0x0D,0x0A,0x50,0x6C,0x65,0x61,0x73,0x65, | ||
1243 | 0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x3A,0x20,0x00,0x0D,0x0A,0x63,0x6F,0x64,0x65, | ||
1244 | 0x20,0x73,0x65,0x67,0x6D,0x65,0x6E,0x74,0x3D,0x00,0x0D,0x0A,0x4D,0x6F,0x6E,0x69, | ||
1245 | 0x74,0x6F,0x72,0x20,0x76,0x32,0x2E,0x35,0x0A,0x0D,0x0A,0x3E,0x00,0x0D,0x0A,0x50, | ||
1246 | 0x61,0x72,0x64,0x6F,0x6E,0x3F,0x00,0x0D,0x0A,0x4E,0x6F,0x20,0x61,0x64,0x64,0x72, | ||
1247 | 0x65,0x73,0x73,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x00,0x0D,0x0A, | ||
1248 | 0x3A,0x00,0x0D,0x0A,0x00,0x4C,0x6F,0x63,0x3D,0x00,0x0D,0x0A,0x46,0x41,0x54,0x41, | ||
1249 | 0x4C,0x20,0x45,0x52,0x52,0x4F,0x52,0x3D,0x00,0x0D,0x0A,0x4D,0x6F,0x6E,0x69,0x74, | ||
1250 | 0x6F,0x72,0x20,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x73,0x3A,0x2D,0x0D,0x0A,0x20, | ||
1251 | 0x20,0x20,0x44,0x2C,0x64,0x5B,0x5B,0x78,0x78,0x78,0x78,0x3A,0x5D,0x78,0x78,0x78, | ||
1252 | 0x78,0x5D,0x20,0x2D,0x20,0x64,0x75,0x6D,0x70,0x20,0x6D,0x65,0x6D,0x6F,0x72,0x79, | ||
1253 | 0x0D,0x0A,0x20,0x20,0x20,0x4C,0x2C,0x6C,0x5B,0x5B,0x78,0x78,0x78,0x78,0x3A,0x5D, | ||
1254 | 0x78,0x78,0x78,0x78,0x5D,0x20,0x2D,0x20,0x64,0x75,0x6D,0x70,0x20,0x73,0x69,0x6E, | ||
1255 | 0x67,0x6C,0x65,0x20,0x6C,0x69,0x6E,0x65,0x0D,0x0A,0x20,0x20,0x20,0x45,0x2C,0x65, | ||
1256 | 0x5B,0x5B,0x78,0x78,0x78,0x78,0x3A,0x5D,0x78,0x78,0x78,0x78,0x5D,0x20,0x2D,0x20, | ||
1257 | 0x65,0x64,0x69,0x74,0x20,0x6D,0x65,0x6D,0x6F,0x72,0x79,0x0D,0x0A,0x20,0x20,0x20, | ||
1258 | 0x46,0x2C,0x66,0x5B,0x5B,0x78,0x78,0x78,0x78,0x20,0x5D,0x78,0x78,0x78,0x78,0x5D, | ||
1259 | 0x20,0x2D,0x20,0x66,0x69,0x6C,0x6C,0x20,0x6D,0x65,0x6D,0x6F,0x72,0x79,0x20,0x70, | ||
1260 | 0x61,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x0D,0x0A,0x20,0x20,0x20,0x49,0x5B, | ||
1261 | 0x78,0x78,0x78,0x78,0x5D,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D, | ||
1262 | 0x20,0x77,0x6F,0x72,0x64,0x20,0x69,0x6E,0x70,0x75,0x74,0x20,0x66,0x72,0x6F,0x6D, | ||
1263 | 0x20,0x70,0x6F,0x72,0x74,0x0D,0x0A,0x20,0x20,0x20,0x69,0x5B,0x78,0x78,0x78,0x78, | ||
1264 | 0x5D,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x62,0x79,0x74, | ||
1265 | 0x65,0x20,0x69,0x6E,0x70,0x75,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x70,0x6F,0x72, | ||
1266 | 0x74,0x0D,0x0A,0x20,0x20,0x20,0x4F,0x78,0x78,0x78,0x78,0x20,0x78,0x78,0x20,0x20, | ||
1267 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x6F,0x75,0x74,0x70,0x75,0x74,0x20, | ||
1268 | 0x77,0x6F,0x72,0x64,0x20,0x74,0x6F,0x20,0x70,0x6F,0x72,0x74,0x0D,0x0A,0x20,0x20, | ||
1269 | 0x20,0x6F,0x78,0x78,0x78,0x78,0x20,0x78,0x78,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1270 | 0x20,0x20,0x2D,0x20,0x6F,0x75,0x74,0x70,0x75,0x74,0x20,0x62,0x79,0x74,0x65,0x20, | ||
1271 | 0x74,0x6F,0x20,0x70,0x6F,0x72,0x74,0x0D,0x0A,0x20,0x20,0x20,0x47,0x5B,0x5B,0x78, | ||
1272 | 0x78,0x78,0x78,0x3A,0x5D,0x78,0x78,0x78,0x78,0x5D,0x20,0x20,0x20,0x2D,0x20,0x67, | ||
1273 | 0x6F,0x74,0x6F,0x20,0x61,0x64,0x64,0x72,0x65,0x73,0x73,0x0D,0x0A,0x20,0x20,0x20, | ||
1274 | 0x57,0x5B,0x5B,0x78,0x78,0x78,0x78,0x3A,0x5D,0x78,0x78,0x78,0x78,0x5D,0x20,0x20, | ||
1275 | 0x20,0x2D,0x20,0x77,0x61,0x74,0x63,0x68,0x20,0x61,0x20,0x77,0x6F,0x72,0x64,0x0D, | ||
1276 | 0x0A,0x20,0x20,0x20,0x43,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1277 | 0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x69,0x6E,0x74,0x65,0x72,0x72,0x75,0x70,0x74, | ||
1278 | 0x73,0x20,0x6F,0x66,0x66,0x0D,0x0A,0x20,0x20,0x20,0x53,0x20,0x20,0x20,0x20,0x20, | ||
1279 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x69,0x6E,0x74, | ||
1280 | 0x65,0x72,0x72,0x75,0x70,0x74,0x73,0x20,0x6F,0x6E,0x0D,0x0A,0x20,0x20,0x20,0x73, | ||
1281 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1282 | 0x2D,0x20,0x73,0x69,0x6E,0x67,0x6C,0x65,0x20,0x73,0x74,0x65,0x70,0x0D,0x0A,0x20, | ||
1283 | 0x20,0x20,0x42,0x78,0x78,0x78,0x78,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1284 | 0x20,0x20,0x20,0x2D,0x20,0x62,0x72,0x65,0x61,0x6B,0x70,0x6F,0x69,0x6E,0x74,0x20, | ||
1285 | 0x73,0x65,0x74,0x0D,0x0A,0x20,0x20,0x20,0x62,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1286 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x62,0x72,0x65,0x61,0x6B, | ||
1287 | 0x70,0x6F,0x69,0x6E,0x74,0x20,0x63,0x6C,0x65,0x61,0x72,0x0D,0x0A,0x20,0x20,0x20, | ||
1288 | 0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1289 | 0x20,0x2D,0x20,0x72,0x65,0x73,0x74,0x61,0x72,0x74,0x20,0x62,0x72,0x65,0x61,0x6B, | ||
1290 | 0x70,0x6F,0x69,0x6E,0x74,0x0D,0x0A,0x20,0x20,0x20,0x72,0x20,0x20,0x20,0x20,0x20, | ||
1291 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x72,0x65,0x67, | ||
1292 | 0x69,0x73,0x74,0x65,0x72,0x73,0x20,0x61,0x74,0x20,0x62,0x72,0x6B,0x70,0x74,0x0D, | ||
1293 | 0x0A,0x20,0x20,0x20,0x58,0x2C,0x78,0x20,0x6E,0x20,0x20,0x20,0x20,0x20,0x20,0x20, | ||
1294 | 0x20,0x20,0x20,0x20,0x20,0x2D,0x20,0x65,0x78,0x61,0x6D,0x69,0x6E,0x65,0x20,0x63, | ||
1295 | 0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x6E,0x0D,0x0A,0x20,0x20,0x20,0x48,0x2C,0x3F, | ||
1296 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2D,0x20, | ||
1297 | 0x74,0x68,0x69,0x73,0x20,0x6D,0x65,0x73,0x73,0x61,0x67,0x65,0x00,0x1B,0x5B,0x32, | ||
1298 | 0x4A,0x1B,0x5B,0x31,0x3B,0x31,0x48,0x41,0x4E,0x53,0x49,0x20,0x54,0x65,0x72,0x6D, | ||
1299 | 0x69,0x6E,0x61,0x6C,0x0D,0x0A,0x0A,0x00,0x1B,0x5B,0x4B,0x00,0x1B,0x5B,0x4A,0x00, | ||
1300 | 0x1B,0x5B,0x32,0x4A,0x1B,0x5B,0x31,0x3B,0x31,0x48,0x00,0x1B,0x5B,0x44,0x20,0x1B, | ||
1301 | 0x5B,0x44,0x00,0x1B,0x5B,0x31,0x3B,0x37,0x32,0x48,0x00,0x1B,0x5B,0x00,0x3B,0x00, | ||
1302 | 0x48,0x00,0x1B,0x5B,0x73,0x00,0x1B,0x5B,0x75,0x00,0x1B,0x7A,0x2B,0x0B,0x7F,0x1B, | ||
1303 | 0x7A,0x2E,0x0C,0x7F,0x1B,0x7A,0x2D,0x08,0x7F,0x1B,0x7A,0x2C,0x0A,0x7F,0x1B,0x7A, | ||
1304 | 0x22,0x08,0x7F,0x1A,0x57,0x79,0x73,0x65,0x20,0x33,0x30,0x20,0x54,0x65,0x72,0x6D, | ||
1305 | 0x69,0x6E,0x61,0x6C,0x0D,0x0A,0x00,0x1B,0x54,0x00,0x1B,0x59,0x00,0x1A,0x00,0x1E, | ||
1306 | 0x00,0x08,0x20,0x08,0x00,0x00,0x1B,0x3D,0x00,0x00,0x00,0x1B,0x46,0x00,0x0D,0x00, | ||
1307 | 0x3F,0x44,0x64,0x45,0x65,0x46,0x66,0x47,0x67,0x48,0x68,0x49,0x69,0x4F,0x6F,0x43, | ||
1308 | 0x63,0x53,0x73,0x42,0x62,0x52,0x72,0x57,0x77,0x58,0x78,0x4C,0x6C,0x3C,0x60,0xD4, | ||
1309 | 0x57,0xD4,0x57,0x50,0x58,0x50,0x58,0xD6,0x59,0xD6,0x59,0xB4,0x59,0xB4,0x59,0x3C, | ||
1310 | 0x60,0x3C,0x60,0x6C,0x57,0x48,0x57,0x26,0x57,0x06,0x57,0x90,0x57,0x90,0x57,0x98, | ||
1311 | 0x57,0x48,0x5F,0x0C,0x5F,0x58,0x5F,0x33,0x5F,0x40,0x5F,0xA0,0x57,0xA0,0x57,0xFE, | ||
1312 | 0x59,0xFE,0x59,0xDC,0x57,0xDC,0x57,0x88,0x61,0x98,0x61,0xC0,0x61,0xCC,0x61,0xD8, | ||
1313 | 0x61,0xF6,0x61,0x02,0x62,0x22,0x62,0xF8,0x56,0x4A,0x62,0x58,0x62,0x60,0x59,0x20, | ||
1314 | 0x20,0x66,0x6C,0x61,0x67,0x73,0x3D,0x00,0x20,0x20,0x61,0x78,0x3D,0x00,0x20,0x20, | ||
1315 | 0x62,0x78,0x3D,0x00,0x20,0x20,0x63,0x78,0x3D,0x00,0x20,0x20,0x64,0x78,0x3D,0x00, | ||
1316 | 0x20,0x20,0x63,0x73,0x3D,0x00,0x20,0x20,0x64,0x73,0x3D,0x00,0x20,0x20,0x65,0x73, | ||
1317 | 0x3D,0x00,0x20,0x20,0x73,0x73,0x3D,0x00,0x20,0x20,0x64,0x69,0x3D,0x00,0x20,0x20, | ||
1318 | 0x73,0x69,0x3D,0x00,0x20,0x20,0x62,0x70,0x3D,0x00,0x20,0x20,0x73,0x70,0x3D,0x00, | ||
1319 | 0x20,0x20,0x69,0x70,0x3D,0x00,0x20,0x63,0x68,0x61,0x6E,0x65,0x6C,0x3D,0x00,0x20, | ||
1320 | 0x20,0x20,0x20,0x73,0x65,0x67,0x3D,0x00,0x20,0x74,0x69,0x5F,0x73,0x74,0x72,0x3D, | ||
1321 | 0x00,0x20,0x74,0x69,0x5F,0x74,0x6F,0x73,0x3D,0x00,0x20,0x74,0x69,0x5F,0x6D,0x61, | ||
1322 | 0x78,0x3D,0x00,0x20,0x74,0x69,0x5F,0x62,0x61,0x73,0x3D,0x00,0x20,0x74,0x69,0x5F, | ||
1323 | 0x73,0x69,0x7A,0x3D,0x00,0x20,0x74,0x69,0x5F,0x73,0x74,0x66,0x3D,0x00,0x20,0x74, | ||
1324 | 0x69,0x5F,0x72,0x6F,0x6F,0x3D,0x00,0x20,0x74,0x69,0x5F,0x66,0x6C,0x67,0x3D,0x00, | ||
1325 | 0x20,0x74,0x69,0x5F,0x74,0x6F,0x74,0x3D,0x00,0x20,0x72,0x69,0x5F,0x70,0x63,0x6E, | ||
1326 | 0x3D,0x00,0x20,0x72,0x69,0x5F,0x73,0x74,0x72,0x3D,0x00,0x20,0x72,0x69,0x5F,0x73, | ||
1327 | 0x74,0x66,0x3D,0x00,0x20,0x72,0x69,0x5F,0x72,0x6F,0x6F,0x3D,0x00,0x20,0x72,0x69, | ||
1328 | 0x5F,0x62,0x61,0x73,0x3D,0x00,0x20,0x72,0x69,0x5F,0x73,0x69,0x7A,0x3D,0x00,0x20, | ||
1329 | 0x72,0x69,0x5F,0x74,0x6F,0x74,0x3D,0x00,0x20,0x72,0x69,0x5F,0x6D,0x69,0x6E,0x3D, | ||
1330 | 0x00,0x20,0x72,0x69,0x5F,0x66,0x6C,0x67,0x3D,0x00,0x20,0x72,0x69,0x5F,0x74,0x6F, | ||
1331 | 0x73,0x3D,0x00,0x20,0x72,0x69,0x5F,0x74,0x68,0x72,0x3D,0x00,0x20,0x74,0x68,0x5F, | ||
1332 | 0x73,0x74,0x66,0x3D,0x00,0x20,0x74,0x68,0x5F,0x73,0x74,0x72,0x3D,0x00,0x20,0x74, | ||
1333 | 0x68,0x5F,0x62,0x61,0x73,0x3D,0x00,0x20,0x74,0x68,0x5F,0x73,0x69,0x7A,0x3D,0x00, | ||
1334 | 0x20,0x74,0x68,0x5F,0x74,0x72,0x67,0x3D,0x00,0x20,0x74,0x68,0x5F,0x66,0x6C,0x67, | ||
1335 | 0x3D,0x00,0x20,0x74,0x68,0x5F,0x63,0x6E,0x74,0x3D,0x00,0x20,0x72,0x68,0x5F,0x73, | ||
1336 | 0x74,0x72,0x3D,0x00,0x20,0x72,0x68,0x5F,0x73,0x74,0x66,0x3D,0x00,0x20,0x72,0x68, | ||
1337 | 0x5F,0x62,0x61,0x73,0x3D,0x00,0x20,0x72,0x68,0x5F,0x73,0x69,0x7A,0x3D,0x00,0x20, | ||
1338 | 0x72,0x68,0x5F,0x73,0x70,0x61,0x3D,0x00,0x20,0x72,0x68,0x5F,0x61,0x73,0x6F,0x3D, | ||
1339 | 0x00,0x20,0x72,0x68,0x5F,0x72,0x6F,0x6F,0x3D,0x00,0x20,0x72,0x68,0x5F,0x66,0x6C, | ||
1340 | 0x67,0x3D,0x00,0x20,0x6D,0x5F,0x63,0x61,0x72,0x65,0x3D,0x00,0x20,0x70,0x74,0x5F, | ||
1341 | 0x66,0x6C,0x6F,0x3D,0x00,0x20,0x61,0x73,0x5F,0x66,0x6C,0x6F,0x3D,0x00,0x20,0x72, | ||
1342 | 0x6D,0x5F,0x66,0x6C,0x6F,0x3D,0x00,0x20,0x20,0x20,0x71,0x5F,0x69,0x6E,0x3D,0x00, | ||
1343 | 0x20,0x20,0x71,0x5F,0x6F,0x75,0x74,0x3D,0x00,0x20,0x71,0x5F,0x64,0x72,0x61,0x6E, | ||
1344 | 0x3D,0x00,0x20,0x20,0x71,0x5F,0x74,0x69,0x6D,0x3D,0x00,0x20,0x20,0x20,0x71,0x5F, | ||
1345 | 0x66,0x63,0x3D,0x00,0x20,0x71,0x5F,0x73,0x74,0x61,0x74,0x3D,0x00,0x20,0x71,0x5F, | ||
1346 | 0x64,0x61,0x74,0x61,0x3D,0x00,0x20,0x71,0x5F,0x6D,0x6F,0x64,0x6D,0x3D,0x00,0x20, | ||
1347 | 0x68,0x61,0x6E,0x64,0x5F,0x6F,0x3D,0x00,0x20,0x68,0x61,0x6E,0x64,0x5F,0x62,0x3D, | ||
1348 | 0x00,0x20,0x68,0x61,0x6E,0x64,0x5F,0x65,0x3D,0x00,0x20,0x68,0x61,0x6E,0x64,0x5F, | ||
1349 | 0x69,0x3D,0x00,0x20,0x20,0x6F,0x70,0x6F,0x73,0x74,0x3D,0x00,0x20,0x20,0x74,0x69, | ||
1350 | 0x6D,0x65,0x6F,0x3D,0x00,0x20,0x63,0x75,0x73,0x74,0x6D,0x31,0x3D,0x00,0x20,0x63, | ||
1351 | 0x75,0x73,0x74,0x6D,0x32,0x3D,0x00,0x20,0x63,0x75,0x73,0x74,0x6D,0x64,0x3D,0x00, | ||
1352 | 0x20,0x74,0x78,0x72,0x61,0x74,0x65,0x3D,0x00,0x20,0x72,0x78,0x72,0x61,0x74,0x65, | ||
1353 | 0x3D,0x00,0x20,0x20,0x63,0x5F,0x6D,0x61,0x70,0x3D,0x00,0x20,0x63,0x5F,0x61,0x64, | ||
1354 | 0x64,0x72,0x3D,0x00,0x20,0x63,0x5F,0x61,0x69,0x73,0x72,0x3D,0x00,0x20,0x63,0x5F, | ||
1355 | 0x78,0x74,0x61,0x67,0x3D,0x00,0x20,0x63,0x5F,0x64,0x65,0x66,0x72,0x3D,0x00,0x20, | ||
1356 | 0x63,0x5F,0x66,0x6C,0x73,0x68,0x3D,0x00,0x20,0x74,0x78,0x6D,0x61,0x78,0x73,0x3D, | ||
1357 | 0x00,0x20,0x72,0x69,0x5F,0x65,0x6D,0x73,0x3D,0x00,0x20,0x20,0x63,0x5F,0x6C,0x73, | ||
1358 | 0x72,0x3D,0x00,0x20,0x20,0x63,0x5F,0x69,0x65,0x72,0x3D,0x00,0x20,0x20,0x63,0x5F, | ||
1359 | 0x66,0x63,0x72,0x3D,0x00,0x20,0x20,0x63,0x5F,0x6D,0x63,0x72,0x3D,0x00,0x20,0x20, | ||
1360 | 0x63,0x5F,0x6C,0x63,0x72,0x3D,0x00,0x20,0x20,0x63,0x5F,0x64,0x73,0x73,0x3D,0x00, | ||
1361 | 0x20,0x63,0x5F,0x64,0x73,0x73,0x69,0x3D,0x00,0x20,0x63,0x5F,0x64,0x73,0x73,0x72, | ||
1362 | 0x3D,0x00,0x20,0x20,0x63,0x5F,0x69,0x73,0x72,0x3D,0x00,0x20,0x20,0x63,0x5F,0x63, | ||
1363 | 0x61,0x72,0x3D,0x00,0x20,0x20,0x63,0x5F,0x65,0x66,0x72,0x3D,0x00,0x20,0x63,0x5F, | ||
1364 | 0x65,0x72,0x73,0x74,0x3D,0x00,0x20,0x63,0x5F,0x65,0x63,0x6E,0x74,0x3D,0x00,0x20, | ||
1365 | 0x63,0x5F,0x62,0x72,0x6B,0x63,0x3D,0x00,0x20,0x63,0x5F,0x62,0x6F,0x6B,0x63,0x3D, | ||
1366 | 0x00,0x20,0x63,0x5F,0x72,0x65,0x70,0x6C,0x3D,0x00,0x20,0x63,0x5F,0x63,0x63,0x73, | ||
1367 | 0x72,0x3D,0x00,0x20,0x63,0x5F,0x73,0x74,0x74,0x31,0x3D,0x00,0x20,0x63,0x5F,0x73, | ||
1368 | 0x74,0x74,0x32,0x3D,0x00,0x2B,0xC0,0x8E,0xD8,0x8E,0xC0,0xE8,0xC2,0x00,0xE8,0xE5, | ||
1369 | 0x00,0xFA,0xBF,0x84,0x00,0xC7,0x05,0xDC,0x56,0x8C,0x4D,0x02,0xBF,0x0C,0x00,0xC7, | ||
1370 | 0x05,0x6E,0x5E,0x8C,0x4D,0x02,0xBF,0x04,0x00,0xC7,0x05,0xBA,0x5E,0x8C,0x4D,0x02, | ||
1371 | 0xE8,0xF1,0x00,0x90,0xE8,0x49,0x01,0xE8,0x16,0x00,0xF4,0x90,0xE8,0xE5,0x00,0xBE, | ||
1372 | 0xBA,0x4D,0xE8,0x09,0x0C,0xA0,0x93,0x12,0xE8,0x5D,0x0C,0xE8,0xC2,0x09,0xEB,0xE4, | ||
1373 | 0xE8,0xD5,0x0C,0xE8,0xC4,0x0C,0x0A,0xC0,0x74,0xF6,0x8B,0x1E,0xF8,0x79,0x3C,0x0D, | ||
1374 | 0x74,0x2E,0x3C,0x08,0x74,0x17,0x3C,0x7F,0x74,0x13,0x83,0xFB,0x20,0x7F,0xE1,0x88, | ||
1375 | 0x87,0xD6,0x79,0x43,0x89,0x1E,0xF8,0x79,0xE8,0x77,0x0C,0xEB,0xD3,0x0B,0xDB,0x74, | ||
1376 | 0xCF,0x4B,0x89,0x1E,0xF8,0x79,0x8B,0x36,0x16,0x7A,0xE8,0xC1,0x0B,0xEB,0xC1,0x90, | ||
1377 | 0xE8,0x02,0x00,0xEB,0xBB,0xC6,0x87,0xD6,0x79,0x00,0x0B,0xDB,0x74,0x1E,0xA0,0xD6, | ||
1378 | 0x79,0xBF,0x60,0x51,0xB9,0x1D,0x00,0x8B,0xD9,0x06,0x0E,0x07,0xF2,0xAE,0x07,0x75, | ||
1379 | 0x17,0x41,0x2B,0xD9,0xD1,0xE3,0x2E,0xFF,0x97,0x7D,0x51,0x90,0x33,0xC0,0xA3,0xF8, | ||
1380 | 0x79,0xBE,0x89,0x4D,0xE8,0x87,0x0B,0xC3,0xBE,0x8D,0x4D,0xE8,0x80,0x0B,0xEB,0xEC, | ||
1381 | 0xBA,0x00,0x02,0xB0,0x93,0xEE,0xB0,0x55,0xEE,0xBA,0x10,0x02,0xB0,0x93,0xEE,0xB0, | ||
1382 | 0xAA,0xEE,0xBA,0x00,0x02,0xEC,0x3C,0x55,0x75,0x08,0xBA,0x10,0x02,0xEC,0x3C,0xAA, | ||
1383 | 0x74,0x03,0xE8,0x2F,0xF6,0xC3,0xBA,0x04,0x02,0xB0,0x1A,0xEE,0xB0,0x20,0xEE,0xB0, | ||
1384 | 0x30,0xEE,0xB0,0x40,0xEE,0xB0,0x80,0xEE,0xBA,0x00,0x02,0xB0,0x13,0xEE,0xB0,0x07, | ||
1385 | 0xEE,0xBA,0x08,0x02,0xB0,0x80,0xEE,0xBA,0x02,0x02,0xB0,0xBB,0xEE,0xBA,0x04,0x02, | ||
1386 | 0xB0,0x05,0xEE,0xC3,0xC6,0x06,0xCA,0x13,0x01,0xC7,0x06,0xF8,0x79,0x00,0x00,0xC6, | ||
1387 | 0x06,0xF6,0x79,0x01,0xC7,0x06,0xD0,0x79,0x00,0x00,0xC7,0x06,0xD2,0x79,0x00,0x00, | ||
1388 | 0xC7,0x06,0xD4,0x79,0x00,0x00,0xC7,0x06,0xFA,0x79,0x00,0x00,0xC7,0x06,0xFC,0x79, | ||
1389 | 0x00,0x00,0xC7,0x06,0xFE,0x79,0x00,0x00,0xC7,0x06,0x00,0x7A,0x00,0x00,0xC7,0x06, | ||
1390 | 0x02,0x7A,0xCE,0x59,0x8C,0x0E,0x04,0x7A,0xC7,0x06,0x06,0x7A,0x00,0x00,0xC7,0x06, | ||
1391 | 0x27,0x7A,0x00,0x00,0xC6,0x06,0x29,0x7A,0x00,0xC6,0x06,0x2A,0x7A,0x00,0xC3,0x90, | ||
1392 | 0xBE,0x22,0x4D,0xE8,0xC8,0x0A,0xE8,0x3F,0x00,0x2C,0x31,0x3C,0x01,0x77,0xF7,0xE8, | ||
1393 | 0x81,0x09,0x8B,0x36,0x0C,0x7A,0xE8,0xB5,0x0A,0xBE,0x6A,0x4D,0xE8,0xAF,0x0A,0x0E, | ||
1394 | 0x58,0xE8,0xF8,0x0A,0xBE,0x7A,0x4D,0xE8,0xA4,0x0A,0xC3,0x90,0x60,0xD1,0xE3,0x83, | ||
1395 | 0xFB,0x18,0x73,0x11,0x1E,0xBA,0x00,0x00,0x8E,0xDA,0x2E,0xFF,0x97,0xB7,0x51,0x8B, | ||
1396 | 0xEC,0x89,0x46,0x10,0x1F,0x61,0xCF,0x90,0xE8,0x4F,0x0B,0x0A,0xC0,0x75,0x05,0xE8, | ||
1397 | 0x56,0x0B,0xEB,0xF4,0xC3,0x90,0x83,0x3E,0xF8,0x79,0x01,0x74,0x16,0xBE,0xD7,0x79, | ||
1398 | 0xE8,0x31,0x0A,0x8B,0xD0,0xAC,0x3C,0x2C,0x74,0x04,0x3C,0x20,0x75,0x05,0xE8,0x23, | ||
1399 | 0x0A,0xEE,0xC3,0xE9,0xD2,0xFE,0x83,0x3E,0xF8,0x79,0x01,0x74,0xF6,0xBE,0xD7,0x79, | ||
1400 | 0xE8,0x11,0x0A,0x8B,0xD0,0xAC,0x3C,0x2C,0x74,0x08,0x3C,0x20,0x74,0x04,0xE9,0xB7, | ||
1401 | 0xFE,0x90,0xE8,0xFF,0x09,0xEF,0xC3,0x90,0x8B,0x16,0x06,0x7A,0x83,0x3E,0xF8,0x79, | ||
1402 | 0x01,0x74,0x0B,0xBE,0xD7,0x79,0xE8,0xEB,0x09,0x8B,0xD0,0xA3,0x06,0x7A,0xB0,0x20, | ||
1403 | 0xE8,0x57,0x0B,0x8B,0x16,0x06,0x7A,0xEC,0xE8,0x6F,0x0B,0xC3,0x8B,0x16,0x06,0x7A, | ||
1404 | 0x83,0x3E,0xF8,0x79,0x01,0x74,0x0B,0xBE,0xD7,0x79,0xE8,0xC7,0x09,0x8B,0xD0,0xA3, | ||
1405 | 0x06,0x7A,0xB0,0x20,0xE8,0x33,0x0B,0x8B,0x16,0x06,0x7A,0xED,0xE8,0x67,0x0B,0xC3, | ||
1406 | 0xFA,0xC6,0x06,0xF6,0x79,0x00,0xC3,0x90,0xC6,0x06,0xF6,0x79,0x01,0xFB,0xC3,0x90, | ||
1407 | 0x06,0xE8,0x58,0x09,0xB0,0x20,0xE8,0x11,0x0B,0x26,0x8B,0x05,0xE8,0x47,0x0B,0xB0, | ||
1408 | 0x08,0xE8,0x06,0x0B,0xE8,0x03,0x0B,0xE8,0x00,0x0B,0xE8,0xFD,0x0A,0xB8,0x01,0x00, | ||
1409 | 0xE8,0xCF,0xF4,0xBA,0x02,0x02,0xEC,0x24,0x01,0x75,0x02,0xEB,0xDC,0xBA,0x06,0x02, | ||
1410 | 0xEC,0x07,0xC3,0x90,0xC7,0x06,0x08,0x7A,0x10,0x00,0xEB,0x06,0xC7,0x06,0x08,0x7A, | ||
1411 | 0x01,0x00,0x06,0x8E,0x06,0xFC,0x79,0x8B,0x3E,0xFA,0x79,0xE8,0x0E,0x09,0xE8,0x0B, | ||
1412 | 0x00,0x89,0x3E,0xFA,0x79,0x8C,0x06,0xFC,0x79,0x07,0xC3,0x90,0xBE,0xB2,0x4D,0xE8, | ||
1413 | 0x7C,0x09,0x8B,0x16,0x08,0x7A,0x52,0xE8,0x2A,0x09,0xE8,0x0F,0x0A,0xE8,0x0C,0x0A, | ||
1414 | 0x33,0xDB,0xB9,0x10,0x00,0x90,0x26,0x8A,0x01,0xE8,0xBC,0x09,0xE8,0xFD,0x09,0x43, | ||
1415 | 0xE2,0xF4,0xE8,0xF7,0x09,0xE8,0xF4,0x09,0x33,0xDB,0xB9,0x10,0x00,0x90,0x26,0x8A, | ||
1416 | 0x01,0x3C,0x20,0x72,0x05,0x3C,0x7E,0x76,0x03,0x90,0xB0,0x2E,0xE8,0xE3,0x09,0x43, | ||
1417 | 0xE2,0xEC,0xBE,0xB2,0x4D,0xE8,0x36,0x09,0x83,0xC7,0x10,0x5A,0x4A,0x75,0xB7,0xC3, | ||
1418 | 0x06,0x8E,0x06,0x00,0x7A,0x8B,0x3E,0xFE,0x79,0xE8,0xA0,0x08,0x89,0x3E,0xFE,0x79, | ||
1419 | 0x8C,0x06,0x00,0x7A,0x57,0x8B,0x36,0x0E,0x7A,0xE8,0x12,0x09,0xC7,0x06,0x08,0x7A, | ||
1420 | 0x10,0x00,0xBA,0x00,0x02,0xE8,0xE8,0x00,0xE8,0x81,0xFF,0x5F,0xBA,0x00,0x00,0xE8, | ||
1421 | 0xDE,0x00,0xBE,0xB5,0x4D,0xE8,0xF6,0x08,0x8C,0xC0,0xE8,0x3F,0x09,0xB0,0x3A,0xE8, | ||
1422 | 0x90,0x09,0x8B,0xC7,0xE8,0x35,0x09,0xE8,0x7E,0x08,0xE8,0xC3,0x00,0x90,0xE8,0xB7, | ||
1423 | 0x09,0xE8,0xA6,0x09,0x0A,0xC0,0x74,0xF6,0x3C,0x0B,0x75,0x06,0x83,0xEF,0x10,0xEB, | ||
1424 | 0x19,0x90,0x3C,0x0A,0x75,0x06,0x83,0xC7,0x10,0xEB,0x0F,0x90,0x3C,0x0C,0x75,0x04, | ||
1425 | 0x47,0xEB,0x07,0x90,0x3C,0x08,0x75,0x24,0x4F,0x90,0x8B,0x36,0xFE,0x79,0x8B,0xC7, | ||
1426 | 0x2B,0xC6,0x3D,0x00,0x01,0x72,0xA5,0x3D,0x10,0x01,0x72,0x04,0x83,0xEE,0x20,0x90, | ||
1427 | 0x83,0xC6,0x10,0x89,0x36,0xFE,0x79,0x57,0x8B,0xFE,0xEB,0x80,0x3C,0x2E,0x75,0x08, | ||
1428 | 0xBA,0x01,0x13,0xE8,0x6A,0x00,0x07,0xC3,0xC6,0x06,0x0A,0x7A,0x02,0x32,0xC9,0x90, | ||
1429 | 0x3C,0x30,0x72,0x4C,0x3C,0x39,0x76,0x0C,0x24,0x5F,0x3C,0x41,0x72,0x42,0x3C,0x46, | ||
1430 | 0x77,0x3E,0x2C,0x07,0x2C,0x30,0x50,0xE8,0xCC,0x08,0x58,0x02,0xC8,0xFE,0x0E,0x0A, | ||
1431 | 0x7A,0x74,0x0F,0xC0,0xE1,0x04,0xE8,0x2F,0x09,0xE8,0x1E,0x09,0x0A,0xC0,0x74,0xF6, | ||
1432 | 0xEB,0xCE,0x26,0x88,0x0D,0xE8,0xE0,0x07,0x8A,0xD0,0xE8,0x23,0x00,0x8A,0xC1,0x3C, | ||
1433 | 0x20,0x72,0x05,0x3C,0x7E,0x76,0x03,0x90,0xB0,0x2E,0xE8,0xD5,0x08,0xE9,0x70,0xFF, | ||
1434 | 0xE8,0xC5,0x07,0xE8,0x0A,0x00,0x26,0x8A,0x05,0xE8,0x7C,0x08,0xE9,0x1D,0xFF,0x90, | ||
1435 | 0xF6,0x06,0x26,0x7A,0x02,0x75,0x02,0x86,0xF2,0x52,0x8B,0x36,0x1A,0x7A,0xE8,0x0D, | ||
1436 | 0x08,0x5A,0x52,0x8A,0xC6,0x02,0x06,0x24,0x7A,0xF6,0x06,0x26,0x7A,0x01,0x75,0x06, | ||
1437 | 0xE8,0x9F,0x08,0xEB,0x0D,0x90,0x32,0xE4,0xE8,0x0D,0x08,0x8B,0x36,0x1C,0x7A,0xE8, | ||
1438 | 0xEC,0x07,0x5A,0x8A,0xC2,0x02,0x06,0x25,0x7A,0xF6,0x06,0x26,0x7A,0x01,0x75,0x06, | ||
1439 | 0xE8,0x7F,0x08,0xEB,0x06,0x90,0x32,0xE4,0xE8,0xED,0x07,0x8B,0x36,0x1E,0x7A,0xE8, | ||
1440 | 0xCC,0x07,0xC3,0x90,0x06,0x8E,0x06,0x04,0x7A,0x8B,0x3E,0x02,0x7A,0xE8,0x3C,0x07, | ||
1441 | 0x89,0x3E,0x02,0x7A,0x8C,0x06,0x04,0x7A,0x07,0xFF,0x1E,0x02,0x7A,0xC3,0xBE,0x97, | ||
1442 | 0x4D,0xE8,0xAA,0x07,0xCB,0x90,0x06,0x57,0xBE,0xD7,0x79,0xE8,0x66,0x07,0x8B,0xD8, | ||
1443 | 0xE8,0x61,0x07,0x8B,0xC8,0x2B,0xCB,0x78,0x11,0x8E,0xC3,0xBF,0x00,0x00,0xB8,0xFF, | ||
1444 | 0xFF,0x51,0xB9,0x08,0x00,0xF3,0xAB,0x59,0xE2,0xF7,0x5F,0x07,0xC3,0x90,0x06,0xBE, | ||
1445 | 0xD7,0x79,0xE8,0x3F,0x07,0x8B,0xD8,0xD1,0xE3,0x2E,0x8B,0x9F,0x44,0x00,0xBE,0x26, | ||
1446 | 0x52,0xE8,0xF1,0x08,0x8B,0xC3,0xE8,0xDD,0x08,0xB8,0x01,0x00,0xE8,0x73,0xF2,0xE8, | ||
1447 | 0xE0,0x08,0xBE,0x2F,0x52,0xE8,0xDD,0x08,0x8B,0x47,0x18,0xE8,0xC8,0x08,0xBE,0x77, | ||
1448 | 0x52,0xE8,0xD1,0x08,0x8B,0x47,0x26,0xE8,0xBC,0x08,0xBE,0x53,0x52,0xE8,0xC5,0x08, | ||
1449 | 0x8B,0x47,0x1E,0xE8,0xB0,0x08,0xBE,0x5C,0x52,0xE8,0xB9,0x08,0x8B,0x47,0x20,0xE8, | ||
1450 | 0xA4,0x08,0xBE,0x6E,0x52,0xE8,0xAD,0x08,0x8B,0x47,0x24,0xE8,0x98,0x08,0xBE,0x80, | ||
1451 | 0x52,0xE8,0xA1,0x08,0x8B,0x47,0x2A,0xE8,0x8C,0x08,0xE8,0x95,0x08,0xBE,0x38,0x52, | ||
1452 | 0xE8,0x92,0x08,0x8B,0x07,0xE8,0x7E,0x08,0xBE,0x41,0x52,0xE8,0x87,0x08,0x8B,0x47, | ||
1453 | 0x1A,0xE8,0x72,0x08,0xBE,0x4A,0x52,0xE8,0x7B,0x08,0x8B,0x47,0x1C,0xE8,0x66,0x08, | ||
1454 | 0xBE,0x65,0x52,0xE8,0x6F,0x08,0x8B,0x47,0x22,0xE8,0x5A,0x08,0xE8,0x63,0x08,0xBE, | ||
1455 | 0xD1,0x52,0xE8,0x60,0x08,0x8B,0x47,0x38,0xE8,0x4B,0x08,0xBE,0xAD,0x52,0xE8,0x54, | ||
1456 | 0x08,0x8B,0x47,0x30,0xE8,0x3F,0x08,0xBE,0xB6,0x52,0xE8,0x48,0x08,0x8B,0x47,0x32, | ||
1457 | 0xE8,0x33,0x08,0xBE,0xA4,0x52,0xE8,0x3C,0x08,0x8B,0x47,0x2E,0xE8,0x27,0x08,0xBE, | ||
1458 | 0xBF,0x52,0xE8,0x30,0x08,0x8B,0x47,0x34,0xE8,0x1B,0x08,0xE8,0x24,0x08,0xBE,0x89, | ||
1459 | 0x52,0xE8,0x21,0x08,0x8B,0x47,0x04,0xE8,0x0C,0x08,0xBE,0x92,0x52,0xE8,0x15,0x08, | ||
1460 | 0x8B,0x47,0x14,0xE8,0x00,0x08,0xBE,0x9B,0x52,0xE8,0x09,0x08,0x8B,0x47,0x2C,0xE8, | ||
1461 | 0xF4,0x07,0xBE,0xC8,0x52,0xE8,0xFD,0x07,0x8B,0x47,0x36,0xE8,0xE8,0x07,0xBE,0xDA, | ||
1462 | 0x52,0xE8,0xF1,0x07,0x8B,0x47,0x3A,0xE8,0xDC,0x07,0xBE,0xE3,0x52,0xE8,0xE5,0x07, | ||
1463 | 0x8B,0x47,0x3C,0xE8,0xD0,0x07,0xE8,0xD9,0x07,0xBE,0x19,0x53,0xE8,0xD6,0x07,0x8B, | ||
1464 | 0x47,0x48,0xE8,0xC1,0x07,0xBE,0xFE,0x52,0xE8,0xCA,0x07,0x8B,0x47,0x42,0xE8,0xB5, | ||
1465 | 0x07,0xBE,0x07,0x53,0xE8,0xBE,0x07,0x8B,0x47,0x44,0xE8,0xA9,0x07,0xBE,0x7C,0x53, | ||
1466 | 0xE8,0xB2,0x07,0x8B,0x47,0x4C,0xE8,0x9D,0x07,0xBE,0x85,0x53,0xE8,0xA6,0x07,0x8B, | ||
1467 | 0x47,0x4E,0xE8,0x91,0x07,0xBE,0x8E,0x53,0xE8,0x9A,0x07,0x8B,0x47,0x50,0xE8,0x85, | ||
1468 | 0x07,0xE8,0x8E,0x07,0xBE,0x22,0x53,0xE8,0x8B,0x07,0x8B,0x47,0x4A,0xE8,0x76,0x07, | ||
1469 | 0xBE,0xEC,0x52,0xE8,0x7F,0x07,0x8B,0x47,0x08,0xE8,0x6A,0x07,0xBE,0xF5,0x52,0xE8, | ||
1470 | 0x73,0x07,0x8B,0x47,0x40,0xE8,0x5E,0x07,0xBE,0x10,0x53,0xE8,0x67,0x07,0x8B,0x47, | ||
1471 | 0x46,0xE8,0x52,0x07,0xE8,0x5B,0x07,0xBE,0x6A,0x53,0xE8,0x58,0x07,0x8B,0x47,0x7A, | ||
1472 | 0xE8,0x43,0x07,0xBE,0x3D,0x53,0xE8,0x4C,0x07,0x8B,0x47,0x70,0xE8,0x37,0x07,0xBE, | ||
1473 | 0x46,0x53,0xE8,0x40,0x07,0x8B,0x47,0x72,0xE8,0x2B,0x07,0xBE,0x4F,0x53,0xE8,0x34, | ||
1474 | 0x07,0x8B,0x47,0x74,0xE8,0x1F,0x07,0xE8,0x28,0x07,0xBE,0x2B,0x53,0xE8,0x25,0x07, | ||
1475 | 0x8B,0x47,0x0C,0xE8,0x10,0x07,0xBE,0x34,0x53,0xE8,0x19,0x07,0x8B,0x47,0x10,0xE8, | ||
1476 | 0x04,0x07,0xBE,0x58,0x53,0xE8,0x0D,0x07,0x8B,0x47,0x76,0xE8,0xF8,0x06,0xBE,0x61, | ||
1477 | 0x53,0xE8,0x01,0x07,0x8B,0x47,0x78,0xE8,0xEC,0x06,0xBE,0x73,0x53,0xE8,0xF5,0x06, | ||
1478 | 0x8B,0x47,0x3E,0xE8,0xE0,0x06,0xE8,0xE9,0x06,0xBE,0x97,0x53,0xE8,0xE6,0x06,0x8B, | ||
1479 | 0x47,0x52,0xE8,0xD1,0x06,0xBE,0xA0,0x53,0xE8,0xDA,0x06,0x8B,0x47,0x54,0xE8,0xC5, | ||
1480 | 0x06,0xBE,0xA9,0x53,0xE8,0xCE,0x06,0x8B,0x47,0x56,0xE8,0xB9,0x06,0xBE,0xB2,0x53, | ||
1481 | 0xE8,0xC2,0x06,0x8B,0x47,0x58,0xE8,0xAD,0x06,0xBE,0xBB,0x53,0xE8,0xB6,0x06,0x8B, | ||
1482 | 0x47,0x5A,0xE8,0xA1,0x06,0xBE,0xC4,0x53,0xE8,0xAA,0x06,0x8B,0x47,0x5C,0xE8,0x95, | ||
1483 | 0x06,0xE8,0x9E,0x06,0xBE,0xCD,0x53,0xE8,0x9B,0x06,0x8B,0x47,0x5E,0xE8,0x86,0x06, | ||
1484 | 0xBE,0xD6,0x53,0xE8,0x8F,0x06,0x8B,0x47,0x60,0xE8,0x7A,0x06,0xBE,0xDF,0x53,0xE8, | ||
1485 | 0x83,0x06,0x8B,0x47,0x62,0xE8,0x6E,0x06,0xBE,0xE8,0x53,0xE8,0x77,0x06,0x8B,0x47, | ||
1486 | 0x7C,0xE8,0x62,0x06,0xBE,0xF1,0x53,0xE8,0x6B,0x06,0x8B,0x47,0x7E,0xE8,0x56,0x06, | ||
1487 | 0xBE,0xFA,0x53,0xE8,0x5F,0x06,0x8B,0x87,0x80,0x00,0xE8,0x49,0x06,0xE8,0x52,0x06, | ||
1488 | 0xBE,0x42,0x54,0xE8,0x4F,0x06,0x8B,0x87,0x9E,0x00,0xE8,0x39,0x06,0xBE,0x03,0x54, | ||
1489 | 0xE8,0x42,0x06,0x8B,0x47,0x64,0xE8,0x2D,0x06,0xBE,0x0C,0x54,0xE8,0x36,0x06,0x8B, | ||
1490 | 0x47,0x6E,0xE8,0x21,0x06,0xBE,0x15,0x54,0xE8,0x2A,0x06,0x8B,0x87,0x8E,0x00,0xE8, | ||
1491 | 0x14,0x06,0xBE,0x1E,0x54,0xE8,0x1D,0x06,0x8B,0x87,0x90,0x00,0xE8,0x07,0x06,0xBE, | ||
1492 | 0x27,0x54,0xE8,0x10,0x06,0x8B,0x87,0x92,0x00,0xE8,0xFA,0x05,0xE8,0x03,0x06,0xBE, | ||
1493 | 0x30,0x54,0xE8,0x00,0x06,0x8B,0x87,0x94,0x00,0xE8,0xEA,0x05,0xBE,0x39,0x54,0xE8, | ||
1494 | 0xF3,0x05,0x8B,0x87,0x96,0x00,0xE8,0xDD,0x05,0xBE,0x6F,0x54,0xE8,0xE6,0x05,0x8B, | ||
1495 | 0x87,0x98,0x00,0xE8,0xD0,0x05,0xBE,0x5D,0x54,0xE8,0xD9,0x05,0x8A,0x87,0xA0,0x00, | ||
1496 | 0xE8,0xA7,0x05,0xBE,0x54,0x54,0xE8,0xCC,0x05,0x8A,0x47,0x28,0xE8,0x9B,0x05,0xBE, | ||
1497 | 0x66,0x54,0xE8,0xC0,0x05,0x8A,0x87,0xA1,0x00,0xE8,0x8E,0x05,0xE8,0xB3,0x05,0xBE, | ||
1498 | 0x78,0x54,0xE8,0xB0,0x05,0x8A,0x87,0xA2,0x00,0xE8,0x7E,0x05,0xBE,0x81,0x54,0xE8, | ||
1499 | 0xA3,0x05,0x8A,0x87,0xA3,0x00,0xE8,0x71,0x05,0xBE,0x8A,0x54,0xE8,0x96,0x05,0x8A, | ||
1500 | 0x87,0xA4,0x00,0xE8,0x64,0x05,0xBE,0x93,0x54,0xE8,0x89,0x05,0x8A,0x87,0xA5,0x00, | ||
1501 | 0xE8,0x57,0x05,0xBE,0x9C,0x54,0xE8,0x7C,0x05,0x8A,0x87,0xA6,0x00,0xE8,0x4A,0x05, | ||
1502 | 0xBE,0xA5,0x54,0xE8,0x6F,0x05,0x8A,0x87,0xA7,0x00,0xE8,0x3D,0x05,0xBE,0xAE,0x54, | ||
1503 | 0xE8,0x62,0x05,0x8A,0x87,0xA8,0x00,0xE8,0x30,0x05,0xE8,0x55,0x05,0xBE,0xB7,0x54, | ||
1504 | 0xE8,0x52,0x05,0x8A,0x87,0xA9,0x00,0xE8,0x20,0x05,0xBE,0xC0,0x54,0xE8,0x45,0x05, | ||
1505 | 0x8A,0x87,0xAA,0x00,0xE8,0x13,0x05,0xBE,0xC9,0x54,0xE8,0x38,0x05,0x8A,0x87,0xAB, | ||
1506 | 0x00,0xE8,0x06,0x05,0xBE,0xD2,0x54,0xE8,0x2B,0x05,0x8A,0x87,0xAD,0x00,0xE8,0xF9, | ||
1507 | 0x04,0xBE,0xDB,0x54,0xE8,0x1E,0x05,0x8A,0x87,0xAE,0x00,0xE8,0xEC,0x04,0xBE,0xE4, | ||
1508 | 0x54,0xE8,0x11,0x05,0x8A,0x87,0xAF,0x00,0xE8,0xDF,0x04,0xBE,0xED,0x54,0xE8,0x04, | ||
1509 | 0x05,0x8A,0x87,0xB0,0x00,0xE8,0xD2,0x04,0xE8,0xF7,0x04,0xBE,0xF6,0x54,0xE8,0xF4, | ||
1510 | 0x04,0x8A,0x87,0xB1,0x00,0xE8,0xC2,0x04,0xBE,0xFF,0x54,0xE8,0xE7,0x04,0x8A,0x87, | ||
1511 | 0xB2,0x00,0xE8,0xB5,0x04,0xBE,0x08,0x55,0xE8,0xDA,0x04,0x8A,0x87,0xB3,0x00,0xE8, | ||
1512 | 0xA8,0x04,0xBE,0x11,0x55,0xE8,0xCD,0x04,0x8A,0x87,0xBB,0x00,0xE8,0x9B,0x04,0xE8, | ||
1513 | 0xC0,0x04,0xBE,0x1A,0x55,0xE8,0xBD,0x04,0x8A,0x87,0xBC,0x00,0xE8,0x8B,0x04,0xBE, | ||
1514 | 0x23,0x55,0xE8,0xB0,0x04,0x8A,0x87,0xBE,0x00,0xE8,0x7E,0x04,0xBE,0x2C,0x55,0xE8, | ||
1515 | 0xA3,0x04,0x8A,0x87,0xBF,0x00,0xE8,0x71,0x04,0xE8,0x96,0x04,0x07,0xC3,0x60,0x06, | ||
1516 | 0x1E,0x16,0x8B,0xEC,0xFF,0x4E,0x16,0xF7,0x46,0x1A,0x00,0x02,0x74,0x01,0xFB,0xB8, | ||
1517 | 0x00,0x00,0x8E,0xD8,0x8E,0xC0,0x89,0x2E,0x2D,0x7A,0xE8,0xCB,0x00,0x81,0x66,0x1A, | ||
1518 | 0xFF,0xFE,0xC6,0x06,0x2A,0x7A,0x00,0xE8,0xD8,0x00,0xB8,0x00,0x5F,0xA3,0x2B,0x7A, | ||
1519 | 0xE8,0x5D,0x00,0x80,0x3E,0x2A,0x7A,0x00,0x74,0x0A,0x81,0x4E,0x1A,0x00,0x01,0xC6, | ||
1520 | 0x06,0x2A,0x7A,0x00,0x17,0x1F,0x07,0x61,0xCF,0x90,0x60,0x06,0x1E,0x16,0x8B,0xEC, | ||
1521 | 0xF7,0x46,0x1A,0x00,0x02,0x74,0x01,0xFB,0xB8,0x00,0x00,0x8E,0xD8,0x8E,0xC0,0x89, | ||
1522 | 0x2E,0x2D,0x7A,0x81,0x66,0x1A,0xFF,0xFE,0xC6,0x06,0x2A,0x7A,0x00,0xE8,0x92,0x00, | ||
1523 | 0xB8,0x00,0x5F,0xA3,0x2B,0x7A,0xE8,0x17,0x00,0x80,0x3E,0x2A,0x7A,0x00,0x74,0x0A, | ||
1524 | 0x81,0x4E,0x1A,0x00,0x01,0xC6,0x06,0x2A,0x7A,0x00,0x17,0x1F,0x07,0x61,0xCF,0x90, | ||
1525 | 0xB8,0xF0,0x00,0xE8,0x8C,0xED,0xFF,0x26,0x2B,0x7A,0xC3,0x90,0x06,0x53,0x56,0x80, | ||
1526 | 0x3E,0x29,0x7A,0x00,0x74,0x03,0xE8,0x3F,0x00,0xBE,0xD7,0x79,0xE8,0x25,0x02,0x8B, | ||
1527 | 0xD8,0xA3,0x27,0x7A,0x2E,0x8A,0x07,0xA2,0x29,0x7A,0xB0,0xCC,0x2E,0x88,0x07,0x5E, | ||
1528 | 0x5B,0x07,0xC3,0xC6,0x06,0x2A,0x7A,0x00,0xB8,0x0A,0x5F,0xA3,0x2B,0x7A,0xC3,0x90, | ||
1529 | 0x8B,0x2E,0x2D,0x7A,0xE8,0x2B,0x00,0xC3,0xC6,0x06,0x2A,0x7A,0x01,0xE8,0x08,0x00, | ||
1530 | 0xB8,0x0A,0x5F,0xA3,0x2B,0x7A,0xC3,0x90,0x57,0x80,0x3E,0x29,0x7A,0x00,0x74,0x0F, | ||
1531 | 0x8B,0x3E,0x27,0x7A,0xA0,0x29,0x7A,0x2E,0x88,0x05,0xC6,0x06,0x29,0x7A,0x00,0x5F, | ||
1532 | 0xC3,0x90,0xBE,0xB2,0x4D,0xE8,0x06,0x02,0xBE,0xD8,0x51,0xE8,0x00,0x02,0xFF,0x76, | ||
1533 | 0x14,0x58,0xE8,0x47,0x02,0xBE,0xDE,0x51,0xE8,0xF3,0x01,0xFF,0x76,0x0E,0x58,0xE8, | ||
1534 | 0x3A,0x02,0xBE,0xE4,0x51,0xE8,0xE6,0x01,0xFF,0x76,0x12,0x58,0xE8,0x2D,0x02,0xBE, | ||
1535 | 0xEA,0x51,0xE8,0xD9,0x01,0xFF,0x76,0x10,0x58,0xE8,0x20,0x02,0xBE,0x14,0x52,0xE8, | ||
1536 | 0xCC,0x01,0xFF,0x76,0x0A,0x58,0xE8,0x13,0x02,0xBE,0x1A,0x52,0xE8,0xBF,0x01,0xFF, | ||
1537 | 0x76,0x0C,0x58,0xE8,0x06,0x02,0xBE,0xCF,0x51,0xE8,0xB2,0x01,0xFF,0x76,0x1A,0x58, | ||
1538 | 0xE8,0xF9,0x01,0xBE,0xB2,0x4D,0xE8,0xA5,0x01,0xBE,0xF0,0x51,0xE8,0x9F,0x01,0xFF, | ||
1539 | 0x76,0x18,0x58,0xE8,0xE6,0x01,0xBE,0xF6,0x51,0xE8,0x92,0x01,0xFF,0x76,0x02,0x58, | ||
1540 | 0xE8,0xD9,0x01,0xBE,0xFC,0x51,0xE8,0x85,0x01,0xFF,0x76,0x04,0x58,0xE8,0xCC,0x01, | ||
1541 | 0xBE,0x02,0x52,0xE8,0x78,0x01,0xFF,0x76,0x00,0x58,0xE8,0xBF,0x01,0xBE,0x08,0x52, | ||
1542 | 0xE8,0x6B,0x01,0xFF,0x76,0x06,0x58,0xE8,0xB2,0x01,0xBE,0x0E,0x52,0xE8,0x5E,0x01, | ||
1543 | 0xFF,0x76,0x08,0x58,0xE8,0xA5,0x01,0xBE,0x20,0x52,0xE8,0x51,0x01,0xFF,0x76,0x16, | ||
1544 | 0x58,0xE8,0x98,0x01,0xBE,0x89,0x4D,0xE8,0x44,0x01,0xC3,0x90,0xBE,0xC9,0x4D,0xE8, | ||
1545 | 0x3C,0x01,0xC3,0x3C,0x00,0x74,0x05,0x3C,0x01,0x74,0x59,0xC3,0xC7,0x06,0x0C,0x7A, | ||
1546 | 0xCD,0x50,0xC7,0x06,0x0E,0x7A,0xF0,0x50,0xC7,0x06,0x10,0x7A,0xE8,0x50,0xC7,0x06, | ||
1547 | 0x12,0x7A,0xEC,0x50,0xC7,0x06,0x14,0x7A,0xF4,0x50,0xC7,0x06,0x16,0x7A,0xFB,0x50, | ||
1548 | 0xC7,0x06,0x18,0x7A,0x03,0x51,0xC7,0x06,0x1A,0x7A,0x0B,0x51,0xC7,0x06,0x1C,0x7A, | ||
1549 | 0x0E,0x51,0xC7,0x06,0x1E,0x7A,0x10,0x51,0xC7,0x06,0x20,0x7A,0x12,0x51,0xC7,0x06, | ||
1550 | 0x22,0x7A,0x16,0x51,0xC6,0x06,0x24,0x7A,0x01,0xC6,0x06,0x25,0x7A,0x01,0xC6,0x06, | ||
1551 | 0x26,0x7A,0x03,0xC3,0xC7,0x06,0x0C,0x7A,0x1A,0x51,0xC7,0x06,0x0E,0x7A,0x4D,0x51, | ||
1552 | 0xC7,0x06,0x10,0x7A,0x47,0x51,0xC7,0x06,0x12,0x7A,0x4A,0x51,0xC7,0x06,0x14,0x7A, | ||
1553 | 0x4F,0x51,0xC7,0x06,0x16,0x7A,0x51,0x51,0xC7,0x06,0x18,0x7A,0x55,0x51,0xC7,0x06, | ||
1554 | 0x1A,0x7A,0x56,0x51,0xC7,0x06,0x1C,0x7A,0x59,0x51,0xC7,0x06,0x1E,0x7A,0x5A,0x51, | ||
1555 | 0xC7,0x06,0x20,0x7A,0x5B,0x51,0xC7,0x06,0x22,0x7A,0x5E,0x51,0xC6,0x06,0x24,0x7A, | ||
1556 | 0x20,0xC6,0x06,0x25,0x7A,0x20,0xC6,0x06,0x26,0x7A,0x02,0xC3,0xA1,0xF8,0x79,0x48, | ||
1557 | 0x74,0x14,0xBE,0xD7,0x79,0xE8,0x3C,0x00,0x8B,0xF8,0xAC,0x3C,0x3A,0x75,0x07,0x8E, | ||
1558 | 0xC7,0xE8,0x30,0x00,0x8B,0xF8,0xC3,0x90,0x8B,0xC7,0x2B,0x06,0xFE,0x79,0x8A,0xF0, | ||
1559 | 0x24,0x0F,0x8A,0xD0,0x02,0xD0,0x02,0xD0,0x80,0xC2,0x0B,0xC0,0xEE,0x04,0x80,0xC6, | ||
1560 | 0x03,0x04,0x3D,0xC3,0x8C,0xC0,0xE8,0x93,0x00,0xB0,0x3A,0xE8,0xE4,0x00,0x8B,0xC7, | ||
1561 | 0xE8,0x89,0x00,0xC3,0x51,0x33,0xC9,0x90,0xAC,0x3C,0x20,0x74,0xFB,0x90,0x0A,0xC0, | ||
1562 | 0x74,0x26,0x2C,0x30,0x72,0x22,0x3C,0x09,0x76,0x14,0x3C,0x11,0x72,0x1A,0x2C,0x07, | ||
1563 | 0x3C,0x0F,0x76,0x0A,0x3C,0x2A,0x72,0x10,0x2C,0x20,0x3C,0x0F,0x77,0x0A,0x98,0xC1, | ||
1564 | 0xE1,0x04,0x03,0xC8,0xAC,0xEB,0xD7,0x90,0x4E,0x8B,0xC1,0x59,0xC3,0x90,0x06,0x8C, | ||
1565 | 0xC8,0x8E,0xC0,0xE8,0x02,0x00,0x07,0xC3,0x26,0x8A,0x04,0x46,0x0A,0xC0,0x74,0x06, | ||
1566 | 0xE8,0x8F,0x00,0xEB,0xF3,0x90,0xC3,0x90,0x0B,0xC0,0x74,0x7A,0x51,0x33,0xD2,0xB9, | ||
1567 | 0xE8,0x03,0xF7,0xF1,0x8B,0xCA,0xE8,0x03,0x00,0x8B,0xC1,0x59,0xBA,0x64,0x00,0xF6, | ||
1568 | 0xF2,0xE8,0x0C,0x00,0x8A,0xC4,0x98,0xB2,0x0A,0xF6,0xF2,0xE8,0x02,0x00,0x8A,0xC4, | ||
1569 | 0x50,0x0A,0xF0,0x74,0x05,0x04,0x30,0xE8,0x58,0x00,0x58,0xC3,0x86,0xC4,0xE8,0x07, | ||
1570 | 0x00,0x86,0xC4,0xE8,0x02,0x00,0xC3,0x90,0xC1,0xC8,0x04,0xE8,0x08,0x00,0xC1,0xC0, | ||
1571 | 0x04,0xE8,0x02,0x00,0xC3,0x90,0x53,0x50,0x24,0x0F,0xBB,0xCA,0x62,0x2E,0xD7,0xE8, | ||
1572 | 0x30,0x00,0x58,0x5B,0xC3,0x90,0x86,0xC4,0xE8,0x07,0x00,0x86,0xC4,0xE8,0x02,0x00, | ||
1573 | 0xC3,0x90,0x50,0xB9,0x08,0x00,0x8A,0xE0,0x32,0xC0,0xD1,0xC0,0x04,0x30,0xE8,0x11, | ||
1574 | 0x00,0xE2,0xF5,0x58,0xC3,0x90,0xB0,0x30,0xE8,0x07,0x00,0xC3,0xB0,0x20,0xE8,0x01, | ||
1575 | 0x00,0xC3,0x56,0x8B,0x36,0xD0,0x79,0x88,0x84,0xD0,0x77,0x46,0x81,0xE6,0xFF,0x01, | ||
1576 | 0xFF,0x06,0xD4,0x79,0x89,0x36,0xD0,0x79,0x81,0x3E,0xD4,0x79,0xFE,0x01,0x75,0x08, | ||
1577 | 0x56,0xE8,0x14,0x00,0x5E,0xEB,0xF1,0x90,0x5E,0xC3,0xBA,0x02,0x02,0xEC,0x24,0x01, | ||
1578 | 0x74,0x04,0xBA,0x06,0x02,0xEC,0xC3,0x90,0x80,0x3E,0xF6,0x79,0x00,0x74,0x09,0x60, | ||
1579 | 0xB8,0x01,0x00,0xE8,0x2C,0xEA,0x61,0x90,0xBA,0x02,0x02,0xEC,0xA8,0x04,0x74,0x28, | ||
1580 | 0x8B,0x36,0xD2,0x79,0x83,0x3E,0xD4,0x79,0x00,0x74,0x1D,0x8A,0x84,0xD0,0x77,0x46, | ||
1581 | 0x81,0xE6,0xFF,0x01,0x89,0x36,0xD2,0x79,0xFF,0x0E,0xD4,0x79,0xBA,0x06,0x02,0xEE, | ||
1582 | 0xBA,0x02,0x02,0xEC,0xA8,0x04,0x75,0xDC,0xA1,0xD4,0x79,0xC3,0x52,0xBA,0x06,0x02, | ||
1583 | 0xEE,0x5A,0xC3,0x90,0x52,0x50,0xBA,0x02,0x02,0xEC,0xA8,0x04,0x74,0x08,0x58,0x5A, | ||
1584 | 0xE8,0xE9,0xFF,0xF9,0xC3,0x90,0x58,0x5A,0xF8,0xC3,0x52,0x50,0xBA,0x02,0x02,0xEC, | ||
1585 | 0xA8,0x04,0x74,0xFB,0x58,0x5A,0xE8,0xD3,0xFF,0xC3,0x30,0x31,0x32,0x33,0x34,0x35, | ||
1586 | 0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46,0x53,0x50,0x8A,0xE0,0x80,0xE4, | ||
1587 | 0x0F,0xBB,0xCA,0x62,0xC0,0xE8,0x04,0x2E,0xD7,0xE8,0xCE,0xFF,0x8A,0xC4,0x2E,0xD7, | ||
1588 | 0xE8,0xC7,0xFF,0x58,0x5B,0xC3,0x86,0xE0,0xE8,0xDF,0xFF,0x86,0xE0,0xE8,0xDA,0xFF, | ||
1589 | 0xC3,0x90,0xBE,0xB2,0x4D,0x50,0x2E,0xAC,0x3C,0x00,0x74,0x05,0xE8,0xAB,0xFF,0xEB, | ||
1590 | 0xF5,0x58,0xC3,0x90,0xC8,0x08,0x00,0x00,0x56,0x57,0x8B,0x76,0x04,0xBF,0x04,0x00, | ||
1591 | 0xC7,0x46,0xFC,0x00,0x00,0xC7,0x46,0xFA,0x00,0x00,0xC7,0x46,0xF8,0x00,0x00,0x83, | ||
1592 | 0x7E,0x06,0x00,0x75,0x0E,0x56,0xE8,0xB6,0x0E,0x59,0x0B,0xC0,0x75,0x05,0x8B,0xC7, | ||
1593 | 0xE9,0x5B,0x01,0x8B,0x46,0xFC,0x89,0x46,0xFE,0x0B,0xFF,0x75,0x05,0xB8,0x01,0x00, | ||
1594 | 0xEB,0x02,0x33,0xC0,0x50,0x56,0xE8,0xA4,0x0D,0x59,0x59,0xB4,0x00,0x89,0x46,0xFC, | ||
1595 | 0x8B,0x5E,0xFC,0x83,0xFB,0x08,0x76,0x03,0xE9,0x2B,0x01,0xD1,0xE3,0x2E,0xFF,0xA7, | ||
1596 | 0xB2,0x64,0xB8,0x03,0x00,0xE9,0x26,0x01,0x83,0x7E,0xFA,0x00,0x74,0x14,0xC7,0x46, | ||
1597 | 0xFA,0x00,0x00,0x8A,0x44,0x58,0x98,0x50,0x8A,0x44,0x59,0x98,0x50,0xE8,0xC2,0x0F, | ||
1598 | 0x59,0x59,0x83,0x7E,0xF8,0x00,0x74,0x0A,0xC7,0x46,0xF8,0x00,0x00,0x56,0xE8,0x9B, | ||
1599 | 0x08,0x59,0x83,0x7E,0x06,0x00,0x75,0x05,0x8B,0xC7,0xE9,0xF1,0x00,0x83,0xFF,0x04, | ||
1600 | 0x75,0x03,0xE9,0xE6,0x00,0x8B,0xC7,0xE9,0xE4,0x00,0x83,0x7E,0xFE,0x00,0x75,0x03, | ||
1601 | 0xBF,0x02,0x00,0xE9,0xD5,0x00,0x83,0x7E,0xFE,0x00,0x75,0x03,0xBF,0x01,0x00,0xE9, | ||
1602 | 0xC9,0x00,0x8B,0x5E,0xFE,0x83,0xFB,0x07,0x76,0x03,0xE9,0x86,0x00,0xD1,0xE3,0x2E, | ||
1603 | 0xFF,0xA7,0xA2,0x64,0x33,0xFF,0xE9,0x7F,0x00,0xBF,0x04,0x00,0x80,0x7C,0x58,0x0F, | ||
1604 | 0x74,0x22,0x83,0x7E,0xF8,0x00,0x75,0x1C,0xFE,0x44,0x58,0x6A,0x08,0x56,0xE8,0x7E, | ||
1605 | 0x0C,0x59,0x59,0x8A,0x44,0x58,0x04,0x80,0x50,0x56,0xE8,0x72,0x0C,0x59,0x59,0xC7, | ||
1606 | 0x46,0xFA,0x01,0x00,0x83,0x7E,0xF8,0x00,0x74,0x0A,0xC7,0x46,0xF8,0x00,0x00,0x56, | ||
1607 | 0xE8,0x19,0x08,0x59,0xEB,0x42,0xBF,0x04,0x00,0x80,0x7C,0x58,0x00,0x74,0x22,0x83, | ||
1608 | 0x7E,0xF8,0x00,0x75,0x1C,0xFE,0x4C,0x58,0x6A,0x08,0x56,0xE8,0x41,0x0C,0x59,0x59, | ||
1609 | 0x8A,0x44,0x58,0x04,0x80,0x50,0x56,0xE8,0x35,0x0C,0x59,0x59,0xC7,0x46,0xFA,0x01, | ||
1610 | 0x00,0x83,0x7E,0xF8,0x00,0x74,0x0A,0xC7,0x46,0xF8,0x00,0x00,0x56,0xE8,0xDC,0x07, | ||
1611 | 0x59,0xEB,0x05,0xBF,0x04,0x00,0xEB,0x00,0xEB,0x31,0xBF,0x04,0x00,0xEB,0x2C,0xC7, | ||
1612 | 0x46,0xF8,0x01,0x00,0x6A,0x08,0x56,0xE8,0x05,0x0C,0x59,0x59,0x80,0x7C,0x58,0x09, | ||
1613 | 0x7D,0x04,0xB0,0x0F,0xEB,0x02,0xB0,0x00,0x04,0x80,0x50,0x56,0xE8,0xF0,0x0B,0x59, | ||
1614 | 0x59,0xBF,0x04,0x00,0xEB,0x05,0xBF,0x04,0x00,0xEB,0x00,0xE9,0xA5,0xFE,0x5F,0x5E, | ||
1615 | 0xC9,0xC3,0xE4,0x63,0x63,0x64,0x63,0x64,0x63,0x64,0x63,0x64,0xE9,0x63,0x26,0x64, | ||
1616 | 0x51,0x64,0x78,0x63,0xBA,0x63,0xC6,0x63,0x96,0x64,0xD2,0x63,0x6A,0x64,0x6A,0x64, | ||
1617 | 0x6F,0x64,0x72,0x63,0xC8,0x08,0x00,0x00,0x56,0x57,0x8B,0x76,0x04,0x8B,0x7E,0x08, | ||
1618 | 0x6A,0x01,0x56,0xE8,0xA9,0x0B,0x59,0x59,0x8A,0x46,0x06,0xC0,0xE0,0x06,0x04,0x80, | ||
1619 | 0x50,0x56,0xE8,0x9A,0x0B,0x59,0x59,0xC7,0x46,0xFE,0x00,0x00,0x89,0x7E,0xF8,0xEB, | ||
1620 | 0x03,0xFF,0x46,0xFE,0x8B,0x5E,0xF8,0xFF,0x46,0xF8,0x80,0x3F,0x00,0x75,0xF2,0x83, | ||
1621 | 0x7E,0xFE,0x10,0x7D,0x25,0xB8,0x10,0x00,0x2B,0x46,0xFE,0xD1,0xF8,0x89,0x46,0xFC, | ||
1622 | 0xC7,0x46,0xFA,0x00,0x00,0xEB,0x0B,0x6A,0x20,0x56,0xE8,0x62,0x0B,0x59,0x59,0xFF, | ||
1623 | 0x46,0xFA,0x8B,0x46,0xFA,0x3B,0x46,0xFC,0x7C,0xED,0xEB,0x0C,0x8B,0xDF,0x47,0x8A, | ||
1624 | 0x07,0x50,0x56,0xE8,0x49,0x0B,0x59,0x59,0x80,0x3D,0x00,0x75,0xEF,0x6A,0x02,0x56, | ||
1625 | 0xE8,0x3C,0x0B,0x59,0x59,0xEB,0x00,0x5F,0x5E,0xC9,0xC3,0xC8,0x04,0x00,0x00,0x56, | ||
1626 | 0x57,0x8B,0x7E,0x04,0xC7,0x46,0xFE,0x00,0x00,0xBE,0x14,0x00,0xE9,0x09,0x01,0x8B, | ||
1627 | 0x5E,0xFE,0x83,0xC3,0x04,0x2B,0xDF,0x8A,0x87,0xAC,0x0B,0x88,0x44,0x5A,0xC6,0x44, | ||
1628 | 0x58,0x08,0x8A,0x46,0xFE,0x88,0x44,0x59,0xC7,0x44,0x06,0x00,0x00,0xC6,0x44,0x19, | ||
1629 | 0x00,0xC6,0x44,0x1A,0x00,0xC6,0x44,0x1B,0x00,0xC6,0x44,0x1D,0x0D,0xC6,0x44,0x1E, | ||
1630 | 0x03,0xC6,0x44,0x1F,0x00,0xC6,0x44,0x20,0x00,0xC6,0x44,0x21,0x00,0xC6,0x44,0x5B, | ||
1631 | 0x00,0xC6,0x44,0x5D,0x00,0xC6,0x44,0x5E,0x00,0xC6,0x44,0x5F,0x00,0xC6,0x44,0x60, | ||
1632 | 0x00,0xC7,0x46,0xFC,0x00,0x00,0xEB,0x0D,0x8B,0x5E,0xFC,0xD1,0xE3,0xC7,0x40,0x30, | ||
1633 | 0x00,0x00,0xFF,0x46,0xFC,0x83,0x7E,0xFC,0x10,0x7C,0xED,0xC7,0x46,0xFC,0x00,0x00, | ||
1634 | 0xEB,0x0A,0x8B,0x5E,0xFC,0xC6,0x40,0x50,0x00,0xFF,0x46,0xFC,0x83,0x7E,0xFC,0x04, | ||
1635 | 0x7C,0xF0,0xC7,0x44,0x54,0x00,0x00,0xC7,0x44,0x56,0x00,0x00,0x8A,0x44,0x5A,0x98, | ||
1636 | 0xBA,0xF8,0x00,0x23,0xD0,0xB8,0x05,0x00,0x0B,0xC2,0x89,0x46,0xFC,0x9C,0xFA,0x8A, | ||
1637 | 0x46,0xFC,0xBA,0xFE,0x00,0xEE,0xBA,0x00,0x00,0xEC,0x9D,0x24,0x08,0x88,0x46,0xFC, | ||
1638 | 0x83,0x7E,0xFC,0x00,0x75,0x02,0xEB,0x4A,0xFF,0x76,0xFE,0xE8,0x7A,0x0C,0x59,0x68, | ||
1639 | 0x35,0x02,0x56,0xE8,0x32,0x0A,0x59,0x59,0x0B,0xC0,0x75,0x34,0x68,0x38,0x02,0x56, | ||
1640 | 0xE8,0x25,0x0A,0x59,0x59,0x0B,0xC0,0x75,0x27,0x68,0x42,0x02,0x56,0xE8,0x18,0x0A, | ||
1641 | 0x59,0x59,0x0B,0xC0,0x75,0x1A,0x68,0x4C,0x02,0x56,0xE8,0x0B,0x0A,0x59,0x59,0x0B, | ||
1642 | 0xC0,0x75,0x0D,0x68,0x56,0x02,0x56,0xE8,0xFE,0x09,0x59,0x59,0x0B,0xC0,0x74,0x02, | ||
1643 | 0xEB,0x00,0xFF,0x46,0xFE,0x83,0xC6,0x62,0x39,0x7E,0xFE,0x7D,0x03,0xE9,0xEF,0xFE, | ||
1644 | 0xEB,0x00,0x5F,0x5E,0xC9,0xC3,0xC8,0x08,0x00,0x00,0x56,0x57,0x8B,0x46,0x04,0xBA, | ||
1645 | 0x62,0x00,0xF7,0xEA,0x05,0x14,0x00,0x8B,0xF0,0x83,0x7E,0x06,0x00,0x74,0x05,0xB8, | ||
1646 | 0x10,0x00,0xEB,0x03,0xB8,0x08,0x00,0x89,0x44,0x04,0x8A,0x46,0x08,0x88,0x44,0x5C, | ||
1647 | 0x56,0xE8,0x59,0x04,0x59,0x8B,0xF8,0x8B,0xC7,0x89,0x44,0x56,0x89,0x44,0x54,0x8A, | ||
1648 | 0x44,0x5D,0x88,0x44,0x2F,0x0B,0xFF,0x75,0x1D,0x68,0xC2,0x0F,0x6A,0x01,0x56,0xE8, | ||
1649 | 0x02,0xFE,0x83,0xC4,0x06,0xEB,0x00,0x6A,0x01,0x56,0xE8,0x47,0xFC,0x59,0x59,0x0B, | ||
1650 | 0xC0,0x75,0xF4,0xBF,0x01,0x00,0x89,0x7E,0xFA,0xB9,0x05,0x00,0xBB,0xE9,0x6A,0x2E, | ||
1651 | 0x8B,0x07,0x3B,0x46,0xFA,0x74,0x07,0x43,0x43,0xE2,0xF4,0xE9,0xA4,0x03,0x2E,0xFF, | ||
1652 | 0x67,0x0A,0xC7,0x44,0x06,0x02,0x00,0xC7,0x44,0x08,0xF4,0x08,0x8B,0x5E,0x04,0xD1, | ||
1653 | 0xE3,0x8B,0x87,0xFC,0x08,0x89,0x44,0x0A,0x33,0xC0,0x8B,0xF8,0x89,0x44,0x54,0xE9, | ||
1654 | 0x80,0x03,0x56,0xE8,0xBB,0x05,0x59,0xBF,0x01,0x00,0x8A,0x44,0x5D,0x88,0x44,0x60, | ||
1655 | 0xE9,0x6F,0x03,0x83,0x7C,0x04,0x08,0x75,0x30,0x80,0x7C,0x5C,0x01,0x75,0x15,0x8A, | ||
1656 | 0x44,0x5D,0xB4,0x00,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0xE4,0x08,0x56,0xE8,0xF7,0x08, | ||
1657 | 0x59,0x59,0xEB,0x13,0x8A,0x44,0x5D,0xB4,0x00,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0xC4, | ||
1658 | 0x08,0x56,0xE8,0xE2,0x08,0x59,0x59,0xEB,0x2E,0x80,0x7C,0x5C,0x01,0x75,0x15,0x8A, | ||
1659 | 0x44,0x5D,0xB4,0x00,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0xD4,0x08,0x56,0xE8,0xC7,0x08, | ||
1660 | 0x59,0x59,0xEB,0x13,0x8A,0x44,0x5D,0xB4,0x00,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0xB4, | ||
1661 | 0x08,0x56,0xE8,0xB2,0x08,0x59,0x59,0x6A,0x01,0x56,0xE8,0x87,0xFB,0x59,0x59,0x8B, | ||
1662 | 0xD8,0x83,0xFB,0x03,0x77,0x2A,0xD1,0xE3,0x2E,0xFF,0xA7,0xE1,0x6A,0xBF,0x01,0x00, | ||
1663 | 0x8A,0x44,0x5D,0x88,0x44,0x5E,0xEB,0x18,0x8A,0x44,0x5D,0x04,0xFF,0x24,0x07,0x88, | ||
1664 | 0x44,0x5D,0xEB,0x0C,0x8A,0x44,0x5D,0xFE,0xC0,0x24,0x07,0x88,0x44,0x5D,0xEB,0x00, | ||
1665 | 0xE9,0xCF,0x02,0x8A,0x44,0x5D,0xB4,0x00,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0xFD,0x02, | ||
1666 | 0x56,0xE8,0x63,0x08,0x59,0x59,0x68,0x1D,0x03,0x56,0xE8,0x5A,0x08,0x59,0x59,0x6A, | ||
1667 | 0x01,0x56,0xE8,0x2F,0xFB,0x59,0x59,0x8B,0xD8,0x83,0xFB,0x03,0x77,0x36,0xD1,0xE3, | ||
1668 | 0x2E,0xFF,0xA7,0xD9,0x6A,0xBF,0x01,0x00,0x8A,0x44,0x5D,0x88,0x44,0x5F,0xEB,0x24, | ||
1669 | 0x8A,0x44,0x5D,0x04,0xFF,0x8A,0x54,0x04,0x80,0xC2,0xFF,0x22,0xC2,0x88,0x44,0x5D, | ||
1670 | 0xEB,0x12,0x8A,0x44,0x5D,0xFE,0xC0,0x8A,0x54,0x04,0x80,0xC2,0xFF,0x22,0xC2,0x88, | ||
1671 | 0x44,0x5D,0xEB,0x00,0xE9,0x6B,0x02,0x8B,0x5C,0x06,0x83,0xC3,0xFE,0xD1,0xE3,0x8B, | ||
1672 | 0x40,0x08,0x89,0x04,0x8B,0x1C,0xFF,0x77,0x06,0x6A,0x00,0x56,0xE8,0x85,0xFC,0x83, | ||
1673 | 0xC4,0x06,0x8B,0x5C,0x06,0x4B,0xD1,0xE3,0x8B,0x40,0x08,0x89,0x44,0x02,0x8B,0x5C, | ||
1674 | 0x02,0xFF,0x77,0x06,0x6A,0x01,0x56,0xE8,0x6A,0xFC,0x83,0xC4,0x06,0x6A,0x01,0x56, | ||
1675 | 0xE8,0xB1,0xFA,0x59,0x59,0x8B,0xD8,0x83,0xFB,0x03,0x76,0x03,0xE9,0x1F,0x02,0xD1, | ||
1676 | 0xE3,0x2E,0xFF,0xA7,0xD1,0x6A,0x8B,0x5C,0x02,0x8B,0x47,0x04,0x89,0x44,0x02,0x8B, | ||
1677 | 0x5C,0x02,0x80,0x3F,0x44,0x75,0x0D,0x8B,0x5C,0x02,0x8A,0x47,0x01,0xB4,0x00,0x3B, | ||
1678 | 0x44,0x04,0x7D,0xE2,0x8B,0x46,0x04,0xD1,0xE0,0x8B,0x1C,0x03,0xD8,0x8B,0x44,0x02, | ||
1679 | 0x89,0x47,0x08,0x8B,0x5C,0x06,0x4B,0xD1,0xE3,0x8B,0x44,0x02,0x89,0x40,0x08,0xE9, | ||
1680 | 0xDE,0x01,0x8B,0x5C,0x02,0x8B,0x47,0x02,0x89,0x44,0x02,0x8B,0x5C,0x02,0x80,0x3F, | ||
1681 | 0x44,0x75,0x0D,0x8B,0x5C,0x02,0x8A,0x47,0x01,0xB4,0x00,0x3B,0x44,0x04,0x7D,0xE2, | ||
1682 | 0x8B,0x46,0x04,0xD1,0xE0,0x8B,0x1C,0x03,0xD8,0x8B,0x44,0x02,0x89,0x47,0x08,0x8B, | ||
1683 | 0x5C,0x06,0x4B,0xD1,0xE3,0x8B,0x44,0x02,0x89,0x40,0x08,0xE9,0xA2,0x01,0xBF,0x01, | ||
1684 | 0x00,0xE9,0x9C,0x01,0x8B,0x5C,0x02,0x8A,0x07,0xB4,0x00,0x89,0x46,0xF8,0xB9,0x0C, | ||
1685 | 0x00,0xBB,0xA1,0x6A,0x2E,0x8B,0x07,0x3B,0x46,0xF8,0x74,0x07,0x43,0x43,0xE2,0xF4, | ||
1686 | 0xE9,0x77,0x01,0x2E,0xFF,0x67,0x18,0x8B,0x46,0x04,0xD1,0xE0,0x8B,0x5C,0x02,0x03, | ||
1687 | 0xD8,0x8B,0x47,0x08,0x8B,0x5C,0x06,0xFF,0x44,0x06,0xD1,0xE3,0x89,0x40,0x08,0x8B, | ||
1688 | 0x1C,0x80,0x7F,0x01,0x00,0x74,0x12,0x8B,0x5C,0x02,0x8A,0x47,0x01,0x8B,0x1C,0x8A, | ||
1689 | 0x57,0x01,0xB6,0x00,0x8B,0xDA,0x88,0x40,0x18,0xE9,0x40,0x01,0xFF,0x4C,0x06,0xE9, | ||
1690 | 0x3A,0x01,0x8B,0x5C,0x02,0x8A,0x47,0x01,0x8B,0x1C,0x8A,0x57,0x01,0xB6,0x00,0x8B, | ||
1691 | 0xDA,0x88,0x40,0x18,0xE9,0x25,0x01,0x8B,0x5C,0x02,0x8A,0x47,0x01,0x8B,0x1C,0x8A, | ||
1692 | 0x57,0x01,0xB6,0x00,0x8B,0xDA,0x88,0x40,0x18,0xFF,0x4C,0x06,0xE9,0x0D,0x01,0x8B, | ||
1693 | 0x5C,0x02,0x8A,0x47,0x01,0x8B,0x1C,0x8A,0x57,0x01,0xB6,0x00,0x8B,0xDA,0x30,0x40, | ||
1694 | 0x18,0xE9,0xF8,0x00,0xB8,0xF0,0x10,0x8B,0xF8,0x89,0x44,0x54,0x8A,0x44,0x5F,0x88, | ||
1695 | 0x44,0x5D,0xE9,0xE7,0x00,0x8A,0x44,0x1C,0x98,0x3D,0x02,0x00,0x74,0x07,0x3D,0x03, | ||
1696 | 0x00,0x74,0x02,0xEB,0x07,0xC7,0x46,0xFE,0x00,0x00,0xEB,0x2B,0x8A,0x44,0x1C,0x98, | ||
1697 | 0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0x69,0x02,0x56,0xE8,0x6B,0x06,0x59,0x59,0x6A,0x01, | ||
1698 | 0x56,0xE8,0x40,0xF9,0x59,0x59,0x89,0x46,0xFE,0x83,0x7E,0xFE,0x00,0x74,0x06,0x83, | ||
1699 | 0x7E,0xFE,0x03,0x75,0xE9,0xEB,0x00,0x83,0x7E,0xFE,0x03,0x74,0x62,0x8A,0x44,0x1C, | ||
1700 | 0x98,0xD1,0xE0,0x8B,0xD8,0xFF,0xB7,0x6D,0x02,0x56,0xE8,0x3A,0x06,0x59,0x59,0x56, | ||
1701 | 0xE8,0x4D,0x97,0x59,0x89,0x46,0xFC,0x8B,0x5E,0xFC,0x83,0xEB,0xFE,0x83,0xFB,0x03, | ||
1702 | 0x77,0x33,0xD1,0xE3,0x2E,0xFF,0xA7,0x99,0x6A,0x68,0xAC,0x02,0x56,0xE8,0x17,0x06, | ||
1703 | 0x59,0x59,0xEB,0x23,0x68,0x8F,0x02,0x56,0xE8,0x0C,0x06,0x59,0x59,0xEB,0x18,0x68, | ||
1704 | 0x75,0x02,0x56,0xE8,0x01,0x06,0x59,0x59,0xEB,0x0D,0x68,0xC6,0x02,0x56,0xE8,0xF6, | ||
1705 | 0x05,0x59,0x59,0xEB,0x02,0xEB,0x00,0x6A,0x01,0x56,0xE8,0xC7,0xF8,0x59,0x59,0xBF, | ||
1706 | 0x01,0x00,0xEB,0x38,0x68,0xDD,0x02,0x56,0xE8,0xDC,0x05,0x59,0x59,0x6A,0x01,0x56, | ||
1707 | 0xE8,0xB1,0xF8,0x59,0x59,0xBF,0x01,0x00,0xEB,0x22,0xB8,0xD0,0x30,0x8B,0xF8,0x89, | ||
1708 | 0x44,0x54,0x8A,0x44,0x60,0x88,0x44,0x5D,0xEB,0x12,0xB8,0xE0,0x20,0x8B,0xF8,0x89, | ||
1709 | 0x44,0x54,0x8A,0x44,0x5E,0x88,0x44,0x5D,0xEB,0x02,0xEB,0x00,0xEB,0x02,0xEB,0x00, | ||
1710 | 0xEB,0x00,0xE9,0x41,0xFC,0x5F,0x5E,0xC9,0xC3,0x19,0x6A,0x24,0x6A,0x2F,0x6A,0x3A, | ||
1711 | 0x6A,0x00,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44, | ||
1712 | 0x00,0x80,0x00,0x81,0x00,0x82,0x00,0xFF,0x00,0x17,0x69,0x54,0x6A,0x7A,0x6A,0xA5, | ||
1713 | 0x69,0x52,0x69,0x94,0x69,0x6A,0x6A,0x67,0x69,0x52,0x69,0x7F,0x69,0x67,0x69,0x4C, | ||
1714 | 0x69,0xF4,0x68,0x76,0x68,0xB2,0x68,0xEE,0x68,0xF5,0x67,0x00,0x68,0x12,0x68,0xF5, | ||
1715 | 0x67,0x9D,0x67,0xA8,0x67,0xB4,0x67,0x9D,0x67,0x00,0x00,0x01,0x00,0xF0,0x10,0xE0, | ||
1716 | 0x20,0xD0,0x30,0x27,0x68,0xF2,0x66,0xC3,0x67,0x23,0x67,0x12,0x67,0xC8,0x04,0x00, | ||
1717 | 0x00,0x56,0x57,0x8B,0x76,0x04,0x8A,0x44,0x59,0x98,0x89,0x46,0xFC,0x6A,0x09,0x8B, | ||
1718 | 0x46,0xFC,0x05,0x84,0x01,0x50,0xE8,0x93,0x08,0x59,0x59,0x8B,0xF8,0x8B,0xC7,0x25, | ||
1719 | 0x00,0xF0,0x3D,0x00,0x10,0x75,0x55,0x8B,0xC7,0x25,0xF0,0x00,0x3D,0xF0,0x00,0x75, | ||
1720 | 0x4B,0x8B,0xC7,0x25,0x00,0x0F,0xC1,0xF8,0x08,0x89,0x46,0xFE,0x8B,0x44,0x04,0x3B, | ||
1721 | 0x46,0xFE,0x7D,0x05,0x33,0xC0,0xE9,0xEF,0x00,0x8B,0xC7,0x25,0x0F,0x00,0xBA,0x0F, | ||
1722 | 0x00,0x2B,0xD0,0x3B,0x56,0xFE,0x74,0x05,0x33,0xC0,0xE9,0xDB,0x00,0xC7,0x44,0x02, | ||
1723 | 0x04,0x09,0x8A,0x46,0xFE,0x88,0x44,0x5F,0x88,0x44,0x5D,0x8B,0x5E,0xFC,0xD1,0xE3, | ||
1724 | 0xC7,0x87,0xFC,0x08,0x04,0x09,0xB8,0xF0,0x10,0xE9,0xBC,0x00,0x8B,0xC7,0x25,0x00, | ||
1725 | 0xF0,0x3D,0x00,0x20,0x75,0x52,0x8B,0xC7,0x25,0xF0,0x00,0x3D,0xE0,0x00,0x75,0x48, | ||
1726 | 0x8B,0xC7,0x25,0x00,0x0F,0xC1,0xF8,0x08,0x89,0x46,0xFE,0x83,0x7E,0xFE,0x08,0x7E, | ||
1727 | 0x05,0x33,0xC0,0xE9,0x92,0x00,0x8B,0xC7,0x25,0x0F,0x00,0xBA,0x0F,0x00,0x2B,0xD0, | ||
1728 | 0x3B,0x56,0xFE,0x74,0x05,0x33,0xC0,0xEB,0x7F,0x90,0xC7,0x44,0x02,0x0C,0x09,0x8A, | ||
1729 | 0x46,0xFE,0x88,0x44,0x5E,0x88,0x44,0x5D,0x8B,0x5E,0xFC,0xD1,0xE3,0xC7,0x87,0xFC, | ||
1730 | 0x08,0x0C,0x09,0xB8,0xE0,0x20,0xEB,0x60,0x8B,0xC7,0x25,0x00,0xF0,0x3D,0x00,0x30, | ||
1731 | 0x75,0x52,0x8B,0xC7,0x25,0xF0,0x00,0x3D,0xD0,0x00,0x75,0x48,0x8B,0xC7,0x25,0x00, | ||
1732 | 0x0F,0xC1,0xF8,0x08,0x89,0x46,0xFE,0x8B,0x44,0x04,0x3B,0x46,0xFE,0x7D,0x04,0x33, | ||
1733 | 0xC0,0xEB,0x35,0x8B,0xC7,0x25,0x0F,0x00,0xBA,0x0F,0x00,0x2B,0xD0,0x3B,0x56,0xFE, | ||
1734 | 0x74,0x04,0x33,0xC0,0xEB,0x22,0xC7,0x44,0x02,0x14,0x09,0x8A,0x46,0xFE,0x88,0x44, | ||
1735 | 0x60,0x88,0x44,0x5D,0x8B,0x5E,0xFC,0xD1,0xE3,0xC7,0x87,0xFC,0x08,0x14,0x09,0xB8, | ||
1736 | 0xD0,0x30,0xEB,0x04,0x33,0xC0,0xEB,0x00,0x5F,0x5E,0xC9,0xC3,0xC8,0x06,0x00,0x00, | ||
1737 | 0x56,0x8B,0x76,0x04,0x6A,0x08,0x56,0xE8,0x35,0x04,0x59,0x59,0x8A,0x44,0x58,0x04, | ||
1738 | 0x80,0x50,0x56,0xE8,0x29,0x04,0x59,0x59,0x8B,0x44,0x54,0x3B,0x44,0x56,0x75,0x0A, | ||
1739 | 0x8A,0x44,0x5D,0x3A,0x44,0x2F,0x75,0x02,0xEB,0x64,0x8B,0x44,0x54,0x89,0x44,0x56, | ||
1740 | 0x8B,0x5C,0x02,0x8A,0x47,0x01,0x88,0x44,0x2F,0x8A,0x44,0x5D,0xB4,0x00,0xC1,0xE0, | ||
1741 | 0x08,0x8B,0x54,0x54,0x0B,0xD0,0x8A,0x44,0x5D,0xB4,0x00,0xBB,0x0F,0x00,0x2B,0xD8, | ||
1742 | 0x0B,0xD3,0x89,0x56,0xFE,0x6A,0x10,0x8A,0x44,0x59,0x98,0x05,0x04,0x00,0x99,0x05, | ||
1743 | 0x40,0x01,0x83,0xD2,0x00,0x52,0x50,0xE8,0x54,0x08,0x83,0xC4,0x06,0x89,0x56,0xFC, | ||
1744 | 0x89,0x46,0xFA,0x8B,0x46,0xFE,0x09,0x46,0xFA,0x83,0x4E,0xFC,0x00,0x6A,0x19,0xFF, | ||
1745 | 0x76,0xFC,0xFF,0x76,0xFA,0xE8,0x73,0x07,0x83,0xC4,0x06,0xE8,0xFE,0x07,0x5E,0xC9, | ||
1746 | 0xC3,0xC8,0x1C,0x00,0x00,0x56,0x57,0x8B,0x5E,0x04,0x8A,0x47,0x59,0x98,0x8B,0xF0, | ||
1747 | 0x8B,0x5E,0x04,0x8A,0x47,0x5D,0xB4,0x00,0x89,0x46,0xE6,0x83,0x7E,0xE6,0x00,0x7D, | ||
1748 | 0x0A,0x8B,0x5E,0x04,0x8B,0x47,0x04,0x48,0x89,0x46,0xE6,0x8B,0x5E,0x04,0x8B,0x47, | ||
1749 | 0x04,0x3B,0x46,0xE6,0x7F,0x05,0xC7,0x46,0xE6,0x00,0x00,0x8B,0x5E,0x04,0x8A,0x46, | ||
1750 | 0xE6,0x88,0x47,0x5D,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x59,0x02,0xC6,0x47,0x02,0x20, | ||
1751 | 0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x59,0x02,0xC6,0x47,0x03,0x30,0x8B,0xDE,0xD1,0xE3, | ||
1752 | 0x8B,0x9F,0x61,0x02,0xC6,0x47,0x02,0x20,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x61,0x02, | ||
1753 | 0xC6,0x47,0x03,0x30,0x8B,0x46,0xE6,0x89,0x46,0xFA,0x83,0x7E,0xFA,0x00,0x74,0x18, | ||
1754 | 0x8B,0x46,0xFA,0xBB,0x0A,0x00,0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1, | ||
1755 | 0xE3,0x8B,0x9F,0x59,0x02,0x88,0x57,0x03,0xBB,0x0A,0x00,0x8B,0x46,0xFA,0x33,0xD2, | ||
1756 | 0xF7,0xF3,0x89,0x46,0xFA,0x83,0x7E,0xFA,0x00,0x74,0x18,0x8B,0x46,0xFA,0xBB,0x0A, | ||
1757 | 0x00,0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x59,0x02, | ||
1758 | 0x88,0x57,0x02,0x8B,0x46,0xE6,0x89,0x46,0xFA,0x83,0x7E,0xFA,0x00,0x74,0x18,0x8B, | ||
1759 | 0x46,0xFA,0xBB,0x0A,0x00,0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1,0xE3, | ||
1760 | 0x8B,0x9F,0x61,0x02,0x88,0x57,0x03,0xBB,0x0A,0x00,0x8B,0x46,0xFA,0x33,0xD2,0xF7, | ||
1761 | 0xF3,0x89,0x46,0xFA,0x83,0x7E,0xFA,0x00,0x74,0x18,0x8B,0x46,0xFA,0xBB,0x0A,0x00, | ||
1762 | 0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x61,0x02,0x88, | ||
1763 | 0x57,0x02,0x8B,0x5E,0xE6,0xD1,0xE3,0xFF,0xB7,0x12,0x02,0x6A,0x00,0xFF,0x76,0x04, | ||
1764 | 0xE8,0xD1,0xF6,0x83,0xC4,0x06,0x68,0xD3,0x0F,0x6A,0x01,0xFF,0x76,0x04,0xE8,0xC3, | ||
1765 | 0xF6,0x83,0xC4,0x06,0xFF,0x76,0xE6,0x56,0xE8,0x01,0x93,0x59,0x59,0x89,0x56,0xF2, | ||
1766 | 0x89,0x46,0xF0,0xFF,0x76,0xE6,0x56,0xE8,0x14,0x93,0x59,0x59,0x89,0x56,0xEE,0x89, | ||
1767 | 0x46,0xEC,0x9C,0xFA,0xC4,0x5E,0xF0,0x26,0x8B,0x07,0x89,0x46,0xEA,0xC4,0x5E,0xEC, | ||
1768 | 0x26,0x8B,0x07,0x89,0x46,0xE8,0xBA,0x50,0xFF,0xED,0x89,0x46,0xFE,0x9D,0xC7,0x46, | ||
1769 | 0xE4,0x01,0x00,0xE8,0xEE,0xA0,0xBA,0x50,0xFF,0xED,0x89,0x46,0xFC,0x8B,0x46,0xFC, | ||
1770 | 0x2B,0x46,0xFE,0x3D,0xE8,0x03,0x73,0x03,0xE9,0x80,0x01,0x9C,0xFA,0xBA,0x50,0xFF, | ||
1771 | 0xED,0x89,0x46,0xFC,0x8B,0x46,0xFC,0x2B,0x46,0xFE,0x89,0x46,0xF8,0xC4,0x5E,0xF0, | ||
1772 | 0x26,0x8B,0x07,0x2B,0x46,0xEA,0x89,0x46,0xF6,0xC4,0x5E,0xF0,0x26,0x8B,0x07,0x89, | ||
1773 | 0x46,0xEA,0xC4,0x5E,0xEC,0x26,0x8B,0x07,0x2B,0x46,0xE8,0x89,0x46,0xF4,0xC4,0x5E, | ||
1774 | 0xEC,0x26,0x8B,0x07,0x89,0x46,0xE8,0xBA,0x50,0xFF,0xED,0x89,0x46,0xFE,0x9D,0x81, | ||
1775 | 0x7E,0xF8,0xE8,0x03,0x76,0x1C,0xFF,0x76,0xF8,0xFF,0x76,0xF6,0xE8,0x76,0x01,0x59, | ||
1776 | 0x59,0x89,0x46,0xF6,0xFF,0x76,0xF8,0xFF,0x76,0xF4,0xE8,0x68,0x01,0x59,0x59,0x89, | ||
1777 | 0x46,0xF4,0xBF,0x0E,0x00,0xEB,0x17,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x59,0x02,0xC6, | ||
1778 | 0x01,0x20,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x61,0x02,0xC6,0x01,0x20,0x47,0x83,0xFF, | ||
1779 | 0x11,0x76,0xE4,0x8B,0xDE,0xD1,0xE3,0x8B,0x9F,0x59,0x02,0xC6,0x47,0x0D,0x30,0x8B, | ||
1780 | 0xDE,0xD1,0xE3,0x8B,0x9F,0x61,0x02,0xC6,0x47,0x0D,0x30,0x83,0x7E,0xF6,0x09,0x77, | ||
1781 | 0x05,0xB8,0x0D,0x00,0xEB,0x26,0x83,0x7E,0xF6,0x63,0x77,0x05,0xB8,0x0E,0x00,0xEB, | ||
1782 | 0x1B,0x81,0x7E,0xF6,0xE7,0x03,0x77,0x05,0xB8,0x0F,0x00,0xEB,0x0F,0x81,0x7E,0xF6, | ||
1783 | 0x0F,0x27,0x77,0x05,0xB8,0x10,0x00,0xEB,0x03,0xB8,0x11,0x00,0x8B,0xF8,0xEB,0x25, | ||
1784 | 0x8B,0x46,0xF6,0xBB,0x0A,0x00,0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1, | ||
1785 | 0xE3,0x8B,0x9F,0x59,0x02,0x88,0x11,0x4F,0xBB,0x0A,0x00,0x8B,0x46,0xF6,0x33,0xD2, | ||
1786 | 0xF7,0xF3,0x89,0x46,0xF6,0x83,0x7E,0xF6,0x00,0x75,0xD5,0x83,0x7E,0xF4,0x09,0x77, | ||
1787 | 0x05,0xB8,0x0D,0x00,0xEB,0x26,0x83,0x7E,0xF4,0x63,0x77,0x05,0xB8,0x0E,0x00,0xEB, | ||
1788 | 0x1B,0x81,0x7E,0xF4,0xE7,0x03,0x77,0x05,0xB8,0x0F,0x00,0xEB,0x0F,0x81,0x7E,0xF4, | ||
1789 | 0x0F,0x27,0x77,0x05,0xB8,0x10,0x00,0xEB,0x03,0xB8,0x11,0x00,0x8B,0xF8,0xEB,0x25, | ||
1790 | 0x8B,0x46,0xF4,0xBB,0x0A,0x00,0x33,0xD2,0xF7,0xF3,0x80,0xC2,0x30,0x8B,0xDE,0xD1, | ||
1791 | 0xE3,0x8B,0x9F,0x61,0x02,0x88,0x11,0x4F,0xBB,0x0A,0x00,0x8B,0x46,0xF4,0x33,0xD2, | ||
1792 | 0xF7,0xF3,0x89,0x46,0xF4,0x83,0x7E,0xF4,0x00,0x75,0xD5,0x8B,0xDE,0xD1,0xE3,0xFF, | ||
1793 | 0xB7,0x59,0x02,0xFF,0x76,0x04,0xE8,0x6E,0x00,0x59,0x59,0x8B,0xDE,0xD1,0xE3,0xFF, | ||
1794 | 0xB7,0x61,0x02,0xFF,0x76,0x04,0xE8,0x5E,0x00,0x59,0x59,0x6A,0x00,0xFF,0x76,0x04, | ||
1795 | 0xE8,0x31,0xF3,0x59,0x59,0x8B,0xD8,0x83,0xFB,0x04,0x77,0x1F,0xD1,0xE3,0x2E,0xFF, | ||
1796 | 0xA7,0x1B,0x70,0xEB,0x22,0xC7,0x46,0xE4,0x00,0x00,0xFF,0x4E,0xE6,0xEB,0x0C,0xC7, | ||
1797 | 0x46,0xE4,0x00,0x00,0xFF,0x46,0xE6,0xEB,0x02,0xEB,0x00,0x83,0x7E,0xE4,0x00,0x74, | ||
1798 | 0x03,0xE9,0x2A,0xFE,0xE9,0xD4,0xFC,0x5F,0x5E,0xC9,0xC3,0xF3,0x6F,0xF5,0x6F,0xFF, | ||
1799 | 0x6F,0xF3,0x6F,0x09,0x70,0x55,0x8B,0xEC,0x8B,0x46,0x04,0xB9,0xE8,0x03,0xF7,0xE1, | ||
1800 | 0x8B,0x4E,0x06,0xF7,0xF1,0x5D,0xC3,0x55,0x8B,0xEC,0x56,0x8B,0x76,0x06,0xEB,0x0E, | ||
1801 | 0x8B,0xDE,0x46,0x8A,0x07,0x50,0xFF,0x76,0x04,0xE8,0x33,0x00,0x59,0x59,0x80,0x3C, | ||
1802 | 0x00,0x75,0xED,0xEB,0x00,0x5E,0x5D,0xC3,0x55,0x8B,0xEC,0x56,0x8B,0x76,0x06,0xEB, | ||
1803 | 0x14,0x8B,0xDE,0x46,0x8A,0x07,0x50,0xFF,0x76,0x04,0xE8,0x45,0x00,0x59,0x59,0x0B, | ||
1804 | 0xC0,0x74,0x02,0xEB,0x07,0x80,0x3C,0x00,0x75,0xE7,0xEB,0x00,0x5E,0x5D,0xC3,0xC8, | ||
1805 | 0x02,0x00,0x00,0x56,0x8B,0x76,0x04,0x8A,0x44,0x5A,0x98,0x89,0x46,0xFE,0x9C,0xFA, | ||
1806 | 0x8A,0x46,0xFE,0xBA,0xFE,0x00,0xEE,0xBA,0x02,0x00,0xEC,0xA8,0x02,0x74,0x06,0x9D, | ||
1807 | 0xE8,0x91,0x9E,0xEB,0xE9,0xBA,0x00,0x00,0x8A,0x46,0x06,0xEE,0x9D,0xEB,0x00,0x5E, | ||
1808 | 0xC9,0xC3,0xC8,0x04,0x00,0x00,0x56,0x8B,0x76,0x04,0x8A,0x44,0x5A,0x98,0x89,0x46, | ||
1809 | 0xFE,0xE8,0xE6,0xA1,0x89,0x46,0xFC,0xE8,0xE0,0xA1,0x2B,0x46,0xFC,0x3D,0xB8,0x0B, | ||
1810 | 0x76,0x05,0xB8,0x01,0x00,0xEB,0x23,0x9C,0xFA,0x8A,0x46,0xFE,0xBA,0xFE,0x00,0xEE, | ||
1811 | 0xBA,0x02,0x00,0xEC,0xA8,0x02,0x74,0x06,0x9D,0xE8,0x48,0x9E,0xEB,0xD9,0xBA,0x00, | ||
1812 | 0x00,0x8A,0x46,0x06,0xEE,0x9D,0x33,0xC0,0xEB,0x00,0x5E,0xC9,0xC3,0xC8,0x04,0x00, | ||
1813 | 0x00,0x56,0x57,0x8B,0x76,0x04,0x83,0x7E,0x06,0x00,0x74,0x07,0x56,0xE8,0x03,0x01, | ||
1814 | 0x59,0xEB,0x05,0x56,0xE8,0xA2,0x00,0x59,0x88,0x46,0xFF,0x80,0x7E,0xFF,0x08,0x77, | ||
1815 | 0x06,0x8A,0x46,0xFF,0xE9,0x84,0x00,0x80,0x7E,0xFF,0x0F,0x76,0x03,0xEB,0x79,0x90, | ||
1816 | 0x8A,0x46,0xFF,0xB4,0x00,0x2D,0x0A,0x00,0x8B,0xD8,0x83,0xFB,0x04,0x77,0x67,0xD1, | ||
1817 | 0xE3,0x2E,0xFF,0xA7,0xAF,0x71,0xB0,0x00,0xEB,0x61,0x56,0xE8,0x6B,0x00,0x59,0xB4, | ||
1818 | 0x00,0x25,0x0F,0x00,0x89,0x46,0xFC,0x56,0xE8,0x5E,0x00,0x59,0xB4,0x00,0x8B,0xF8, | ||
1819 | 0x56,0xE8,0x55,0x00,0x59,0xB4,0x00,0xC1,0xE0,0x08,0x8B,0xD7,0x03,0xD0,0x8B,0xFA, | ||
1820 | 0x8B,0x5E,0xFC,0xD1,0xE3,0x89,0x78,0x30,0xEB,0x2E,0x56,0xE8,0x3B,0x00,0x59,0x88, | ||
1821 | 0x44,0x5B,0xEB,0x24,0x56,0xE8,0x31,0x00,0x59,0x88,0x44,0x50,0x56,0xE8,0x29,0x00, | ||
1822 | 0x59,0x88,0x44,0x51,0x56,0xE8,0x21,0x00,0x59,0x88,0x44,0x52,0x56,0xE8,0x19,0x00, | ||
1823 | 0x59,0x88,0x44,0x53,0xEB,0x02,0xEB,0x00,0xE9,0x5B,0xFF,0x5F,0x5E,0xC9,0xC3,0x46, | ||
1824 | 0x71,0xA6,0x71,0x4A,0x71,0x7A,0x71,0x84,0x71,0xC8,0x04,0x00,0x00,0x56,0x8B,0x76, | ||
1825 | 0x04,0x8A,0x44,0x5A,0x98,0x89,0x46,0xFE,0x9C,0xFA,0x8A,0x46,0xFE,0xBA,0xFE,0x00, | ||
1826 | 0xEE,0xBA,0x02,0x00,0xEC,0xA8,0x01,0x75,0x06,0x9D,0xE8,0x57,0x9D,0xEB,0xE9,0xBA, | ||
1827 | 0x00,0x00,0xEC,0x88,0x46,0xFD,0x9D,0x8A,0x46,0xFD,0xEB,0x00,0x5E,0xC9,0xC3,0xC8, | ||
1828 | 0x02,0x00,0x00,0x56,0x8B,0x76,0x04,0x8A,0x44,0x5A,0x98,0x89,0x46,0xFE,0x9C,0xFA, | ||
1829 | 0x8A,0x46,0xFE,0xBA,0xFE,0x00,0xEE,0xBA,0x02,0x00,0xEC,0x32,0xE4,0x24,0x01,0x9D, | ||
1830 | 0x5E,0xC9,0xC3,0xC8,0x06,0x00,0x00,0x56,0x8B,0x76,0x04,0x8A,0x44,0x5A,0x98,0x89, | ||
1831 | 0x46,0xFE,0xE8,0x85,0xA0,0x89,0x46,0xFA,0xE8,0x7F,0xA0,0x2B,0x46,0xFA,0x3D,0xB8, | ||
1832 | 0x0B,0x76,0x04,0xB0,0x08,0xEB,0x24,0x9C,0xFA,0x8A,0x46,0xFE,0xBA,0xFE,0x00,0xEE, | ||
1833 | 0xBA,0x02,0x00,0xEC,0xA8,0x01,0x75,0x06,0x9D,0xE8,0xE8,0x9C,0xEB,0xDA,0xBA,0x00, | ||
1834 | 0x00,0xEC,0x88,0x46,0xFD,0x9D,0x8A,0x46,0xFD,0xEB,0x00,0x5E,0xC9,0xC3,0x55,0x8B, | ||
1835 | 0xEC,0x56,0x8B,0x56,0x04,0x8A,0x46,0x06,0xEE,0x33,0xF6,0xEB,0x03,0x50,0x58,0x46, | ||
1836 | 0x83,0xFE,0x14,0x7C,0xF8,0x5E,0x5D,0xC3,0xC8,0x02,0x00,0x00,0x56,0x8B,0x56,0x04, | ||
1837 | 0xEC,0x88,0x46,0xFF,0x33,0xF6,0xEB,0x03,0x50,0x58,0x46,0x83,0xFE,0x14,0x7C,0xF8, | ||
1838 | 0x8A,0x46,0xFF,0xEB,0x00,0x5E,0xC9,0xC3,0xC8,0x02,0x00,0x00,0x56,0x57,0x8B,0x76, | ||
1839 | 0x04,0x83,0x3E,0xB0,0x0B,0x00,0x75,0x1F,0xBA,0x88,0x01,0xB0,0x00,0xEE,0xBA,0x86, | ||
1840 | 0x01,0xB0,0x00,0xEE,0x6A,0x09,0x6A,0x00,0x68,0x30,0x01,0xE8,0x7D,0x01,0x83,0xC4, | ||
1841 | 0x06,0xC7,0x06,0xB0,0x0B,0x01,0x00,0x6A,0x09,0x8B,0xC6,0x05,0x80,0x01,0x50,0xE8, | ||
1842 | 0xDA,0x00,0x59,0x59,0x8B,0xF8,0x8B,0xC7,0xC1,0xE8,0x0C,0x25,0x0F,0x00,0x89,0x46, | ||
1843 | 0xFE,0x8B,0xC7,0xC1,0xE8,0x08,0x25,0x0F,0x00,0x8B,0x56,0xFE,0x83,0xF2,0x0C,0x3B, | ||
1844 | 0xC2,0x75,0x21,0x8B,0xC7,0xC1,0xE8,0x04,0x25,0x0F,0x00,0x8B,0x56,0xFE,0x83,0xF2, | ||
1845 | 0x06,0x3B,0xC2,0x75,0x0F,0x8B,0xC7,0x25,0x0F,0x00,0x8B,0x56,0xFE,0x83,0xF2,0x09, | ||
1846 | 0x3B,0xC2,0x74,0x0D,0x6A,0x07,0x56,0xE8,0x38,0x00,0x59,0x59,0xC7,0x46,0xFE,0x07, | ||
1847 | 0x00,0x8A,0x46,0xFE,0x04,0x80,0xA2,0x33,0x02,0x8B,0xC6,0xBA,0x62,0x00,0xF7,0xEA, | ||
1848 | 0x8A,0x56,0xFE,0x8B,0xD8,0x88,0x97,0x6C,0x00,0x68,0x32,0x02,0x8B,0xC6,0xBA,0x62, | ||
1849 | 0x00,0xF7,0xEA,0x05,0x14,0x00,0x50,0xE8,0x0E,0xFD,0x59,0x59,0xEB,0x00,0x5F,0x5E, | ||
1850 | 0xC9,0xC3,0xC8,0x02,0x00,0x00,0x56,0x8B,0x76,0x06,0x83,0xE6,0x0F,0x8B,0xC6,0xC1, | ||
1851 | 0xE0,0x0C,0x8B,0xD6,0x83,0xF2,0x0C,0xC1,0xE2,0x08,0x0B,0xC2,0x8B,0xD6,0x83,0xF2, | ||
1852 | 0x06,0xC1,0xE2,0x04,0x0B,0xC2,0x8B,0xD6,0x83,0xF2,0x09,0x0B,0xC2,0x89,0x46,0xFE, | ||
1853 | 0x6A,0x19,0x6A,0x10,0x8B,0x46,0x04,0x99,0x05,0x40,0x01,0x83,0xD2,0x00,0x52,0x50, | ||
1854 | 0xE8,0x6B,0x01,0x83,0xC4,0x06,0x0B,0x46,0xFE,0x83,0xCA,0x00,0x52,0x50,0xE8,0x9A, | ||
1855 | 0x00,0x83,0xC4,0x06,0xE8,0x25,0x01,0xEB,0x00,0x5E,0xC9,0xC3,0x55,0x8B,0xEC,0x56, | ||
1856 | 0x57,0x33,0xFF,0x6A,0x01,0x68,0x86,0x01,0xE8,0xA3,0xFE,0x59,0x59,0xB1,0x10,0x2A, | ||
1857 | 0x4E,0x06,0xD3,0x66,0x04,0x33,0xF6,0xEB,0x2E,0x81,0x7E,0x04,0x00,0x80,0x72,0x04, | ||
1858 | 0xB0,0x01,0xEB,0x02,0xB0,0x00,0x50,0x68,0x88,0x01,0xE8,0x81,0xFE,0x59,0x59,0x6A, | ||
1859 | 0x03,0x68,0x86,0x01,0xE8,0x77,0xFE,0x59,0x59,0x6A,0x01,0x68,0x86,0x01,0xE8,0x6D, | ||
1860 | 0xFE,0x59,0x59,0xD1,0x66,0x04,0x46,0x3B,0x76,0x06,0x7C,0xCD,0x33,0xF6,0xEB,0x24, | ||
1861 | 0xD1,0xE7,0x6A,0x03,0x68,0x86,0x01,0xE8,0x54,0xFE,0x59,0x59,0x6A,0x01,0x68,0x86, | ||
1862 | 0x01,0xE8,0x4A,0xFE,0x59,0x59,0x68,0x88,0x01,0xE8,0x5C,0xFE,0x59,0x98,0x25,0x01, | ||
1863 | 0x00,0x0B,0xF8,0x46,0x83,0xFE,0x10,0x7C,0xD7,0x6A,0x00,0x68,0x86,0x01,0xE8,0x2D, | ||
1864 | 0xFE,0x59,0x59,0x8B,0xC7,0xEB,0x00,0x5F,0x5E,0x5D,0xC3,0x55,0x8B,0xEC,0x56,0x57, | ||
1865 | 0x8B,0x7E,0x08,0x6A,0x01,0x68,0x86,0x01,0xE8,0x13,0xFE,0x59,0x59,0xB8,0x20,0x00, | ||
1866 | 0x2B,0xC7,0x50,0xFF,0x76,0x06,0xFF,0x76,0x04,0xE8,0xA2,0x00,0x83,0xC4,0x06,0x89, | ||
1867 | 0x56,0x06,0x89,0x46,0x04,0x33,0xF6,0xEB,0x47,0x81,0x7E,0x06,0x00,0x80,0x72,0x0C, | ||
1868 | 0x75,0x06,0x83,0x7E,0x04,0x00,0x72,0x04,0xB0,0x01,0xEB,0x02,0xB0,0x00,0x50,0x68, | ||
1869 | 0x88,0x01,0xE8,0xD9,0xFD,0x59,0x59,0x6A,0x03,0x68,0x86,0x01,0xE8,0xCF,0xFD,0x59, | ||
1870 | 0x59,0x6A,0x01,0x68,0x86,0x01,0xE8,0xC5,0xFD,0x59,0x59,0x6A,0x01,0xFF,0x76,0x06, | ||
1871 | 0xFF,0x76,0x04,0xE8,0x58,0x00,0x83,0xC4,0x06,0x89,0x56,0x06,0x89,0x46,0x04,0x46, | ||
1872 | 0x3B,0xF7,0x7C,0xB5,0x6A,0x00,0x68,0x86,0x01,0xE8,0xA2,0xFD,0x59,0x59,0x6A,0x00, | ||
1873 | 0x68,0x86,0x01,0xE8,0x98,0xFD,0x59,0x59,0x5F,0x5E,0x5D,0xC3,0x55,0x8B,0xEC,0x56, | ||
1874 | 0x6A,0x01,0x68,0x86,0x01,0xE8,0x86,0xFD,0x59,0x59,0x33,0xF6,0xEB,0x00,0x68,0x88, | ||
1875 | 0x01,0xE8,0x94,0xFD,0x59,0xA8,0x01,0x75,0x08,0x8B,0xC6,0x46,0x3D,0x64,0x00,0x7C, | ||
1876 | 0xED,0x6A,0x00,0x68,0x86,0x01,0xE8,0x65,0xFD,0x59,0x59,0x5E,0x5D,0xC3,0xC8,0x04, | ||
1877 | 0x00,0x00,0x8B,0x46,0x04,0x8B,0x56,0x06,0x8B,0x4E,0x08,0xE3,0x06,0xD1,0xE0,0xD1, | ||
1878 | 0xD2,0xE2,0xFA,0x89,0x46,0xFC,0x89,0x56,0xFE,0x8B,0x56,0xFE,0x8B,0x46,0xFC,0xEB, | ||
1879 | 0x00,0xC9,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1880 | 0x50,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,0x20,0x4D,0x65,0x6E,0x75,0x00,0x42,0x65, | ||
1881 | 0x67,0x69,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1882 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1883 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1884 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1885 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1886 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1887 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1888 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1889 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1890 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1891 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1892 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1893 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1894 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1895 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1896 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1897 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1898 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1899 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1900 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1901 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1902 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1903 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1904 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
1905 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x6F,0x72,0x74, | ||
1906 | 0x20,0x30,0x00,0x50,0x6F,0x72,0x74,0x20,0x31,0x00,0x50,0x6F,0x72,0x74,0x20,0x32, | ||
1907 | 0x00,0x50,0x6F,0x72,0x74,0x20,0x33,0x00,0x50,0x6F,0x72,0x74,0x20,0x34,0x00,0x50, | ||
1908 | 0x6F,0x72,0x74,0x20,0x35,0x00,0x50,0x6F,0x72,0x74,0x20,0x36,0x00,0x50,0x6F,0x72, | ||
1909 | 0x74,0x20,0x37,0x00,0x50,0x6F,0x72,0x74,0x20,0x38,0x00,0x50,0x6F,0x72,0x74,0x20, | ||
1910 | 0x39,0x00,0x50,0x6F,0x72,0x74,0x20,0x31,0x30,0x00,0x50,0x6F,0x72,0x74,0x20,0x31, | ||
1911 | 0x31,0x00,0x50,0x6F,0x72,0x74,0x20,0x31,0x32,0x00,0x50,0x6F,0x72,0x74,0x20,0x31, | ||
1912 | 0x33,0x00,0x50,0x6F,0x72,0x74,0x20,0x31,0x34,0x00,0x50,0x6F,0x72,0x74,0x20,0x31, | ||
1913 | 0x35,0x00,0x9C,0x01,0xA3,0x01,0xAA,0x01,0xB1,0x01,0xB8,0x01,0xBF,0x01,0xC6,0x01, | ||
1914 | 0xCD,0x01,0xD4,0x01,0xDB,0x01,0xE2,0x01,0xEA,0x01,0xF2,0x01,0xFA,0x01,0x02,0x02, | ||
1915 | 0x0A,0x02,0x08,0x00,0x00,0x07,0x81,0x00,0x03,0x80,0x80,0x80,0x9F,0x91,0x95,0x91, | ||
1916 | 0x9F,0x00,0x03,0x81,0x84,0x8E,0x95,0x84,0x84,0x84,0x84,0x00,0x03,0x82,0x84,0x84, | ||
1917 | 0x84,0x84,0x95,0x8E,0x84,0x00,0x04,0x88,0x00,0xB2,0x0B,0xC6,0x0B,0xDA,0x0B,0xEE, | ||
1918 | 0x0B,0x02,0x0C,0x16,0x0C,0x2A,0x0C,0x3E,0x0C,0x52,0x0C,0x77,0x0C,0x9C,0x0C,0xBE, | ||
1919 | 0x0C,0xE0,0x0C,0x02,0x0D,0x01,0x80,0x20,0x54,0x65,0x73,0x74,0x20,0x50,0x61,0x73, | ||
1920 | 0x73,0x65,0x64,0x20,0x1F,0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x80,0x02,0x00,0x01, | ||
1921 | 0x80,0x20,0x4D,0x69,0x73,0x73,0x69,0x6E,0x67,0x20,0x52,0x78,0x20,0x44,0x61,0x74, | ||
1922 | 0x61,0x1F,0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x80,0x02,0x00,0x01,0x80,0x20,0x42, | ||
1923 | 0x61,0x64,0x20,0x52,0x78,0x20,0x44,0x61,0x74,0x61,0x20,0x1F,0x20,0x50,0x72,0x65, | ||
1924 | 0x73,0x73,0x20,0x80,0x02,0x00,0x01,0x80,0x20,0x58,0x6D,0x74,0x72,0x20,0x42,0x75, | ||
1925 | 0x73,0x79,0x1F,0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x80,0x02,0x00,0x01,0x80,0x20, | ||
1926 | 0x6E,0x6F,0x74,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x6C,0x79,0x1F,0x20,0x20, | ||
1927 | 0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x65,0x64,0x02,0x00,0x24,0x0D,0x2F, | ||
1928 | 0x0D,0x3A,0x0D,0x45,0x0D,0x50,0x0D,0x5B,0x0D,0x66,0x0D,0x71,0x0D,0x7C,0x0D,0x87, | ||
1929 | 0x0D,0x92,0x0D,0x9D,0x0D,0xA8,0x0D,0xB3,0x0D,0xBE,0x0D,0xC9,0x0D,0x53,0x80,0x2C, | ||
1930 | 0x32,0x54,0x44,0x20,0x53,0x86,0x2C,0x33,0x44,0x54,0x52,0x20,0x53,0x82,0x2C,0x33, | ||
1931 | 0x52,0x54,0x53,0x20,0x1F,0x53,0x81,0x2C,0x32,0x52,0x44,0x20,0x53,0x85,0x2C,0x32, | ||
1932 | 0x43,0x44,0x20,0x53,0x83,0x2C,0x33,0x43,0x54,0x53,0x20,0x53,0x84,0x2C,0x33,0x44, | ||
1933 | 0x53,0x52,0x20,0x53,0x87,0x2C,0x32,0x52,0x49,0x27,0x02,0x00,0x01,0x80,0x20,0x20, | ||
1934 | 0x44,0x43,0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x32,0x30,0x1F,0x27,0x53,0x85, | ||
1935 | 0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89, | ||
1936 | 0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x53,0x52, | ||
1937 | 0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x31,0x31,0x1F,0x27,0x53,0x84,0x2E,0x31,0x81, | ||
1938 | 0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C, | ||
1939 | 0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x43,0x54,0x53,0x20,0x2D,0x20, | ||
1940 | 0x70,0x69,0x6E,0x20,0x34,0x1F,0x27,0x53,0x83,0x2E,0x31,0x81,0x82,0x63,0x90,0x80, | ||
1941 | 0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27, | ||
1942 | 0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x49,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x32, | ||
1943 | 0x32,0x1F,0x27,0x53,0x87,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84, | ||
1944 | 0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80, | ||
1945 | 0x20,0x20,0x44,0x54,0x52,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x36,0x2F,0x38,0x1F, | ||
1946 | 0x27,0x53,0x86,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86, | ||
1947 | 0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20, | ||
1948 | 0x52,0x54,0x53,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x35,0x1F,0x27,0x53,0x82,0x2E, | ||
1949 | 0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A, | ||
1950 | 0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x78,0x44,0x20, | ||
1951 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x32,0x1F,0x27,0x53,0x81,0x2E,0x30,0x53,0x4D,0x81, | ||
1952 | 0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C, | ||
1953 | 0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x54,0x78,0x44,0x20,0x2D,0x20, | ||
1954 | 0x70,0x69,0x6E,0x20,0x33,0x1F,0x27,0x53,0x80,0x2E,0x30,0x53,0x4D,0x81,0x82,0x63, | ||
1955 | 0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E, | ||
1956 | 0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x43,0x44,0x20,0x2D,0x20,0x70,0x69, | ||
1957 | 0x6E,0x20,0x35,0x1F,0x27,0x53,0x85,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82, | ||
1958 | 0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00, | ||
1959 | 0x01,0x80,0x20,0x20,0x44,0x53,0x52,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x35,0x1F, | ||
1960 | 0x27,0x53,0x84,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86, | ||
1961 | 0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20, | ||
1962 | 0x43,0x54,0x53,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x31,0x1F,0x27,0x53,0x83,0x2E, | ||
1963 | 0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A, | ||
1964 | 0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x49,0x20,0x2D, | ||
1965 | 0x20,0x28,0x6E,0x2E,0x63,0x2E,0x29,0x1F,0x27,0x53,0x87,0x2E,0x31,0x81,0x82,0x63, | ||
1966 | 0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E, | ||
1967 | 0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x54,0x52,0x20,0x2D,0x20,0x70,0x69, | ||
1968 | 0x6E,0x20,0x32,0x1F,0x27,0x53,0x86,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82, | ||
1969 | 0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00, | ||
1970 | 0x01,0x80,0x20,0x20,0x52,0x54,0x53,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x37,0x1F, | ||
1971 | 0x27,0x53,0x82,0x2E,0x31,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86, | ||
1972 | 0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20, | ||
1973 | 0x52,0x78,0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x36,0x1F,0x27,0x53,0x81,0x2E, | ||
1974 | 0x30,0x53,0x4D,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88, | ||
1975 | 0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x54,0x78, | ||
1976 | 0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x33,0x1F,0x27,0x53,0x80,0x2E,0x30,0x53, | ||
1977 | 0x4D,0x81,0x82,0x63,0x90,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A, | ||
1978 | 0x8B,0x8C,0x8D,0x8E,0x8F,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x43,0x44,0x20, | ||
1979 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x35,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x85,0x2E, | ||
1980 | 0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00, | ||
1981 | 0x01,0x80,0x20,0x20,0x44,0x53,0x52,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x35,0x1F, | ||
1982 | 0x20,0x20,0x20,0x20,0x27,0x53,0x84,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82, | ||
1983 | 0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x43,0x54,0x53,0x20, | ||
1984 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x31,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x83,0x2E, | ||
1985 | 0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00, | ||
1986 | 0x01,0x80,0x20,0x20,0x52,0x49,0x20,0x2D,0x20,0x28,0x6E,0x2E,0x63,0x2E,0x29,0x1F, | ||
1987 | 0x20,0x20,0x20,0x20,0x27,0x53,0x87,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82, | ||
1988 | 0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x54,0x52,0x20, | ||
1989 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x32,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x86,0x2E, | ||
1990 | 0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00, | ||
1991 | 0x01,0x80,0x20,0x20,0x52,0x54,0x53,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x37,0x1F, | ||
1992 | 0x20,0x20,0x20,0x20,0x27,0x53,0x82,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82, | ||
1993 | 0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x78,0x44,0x20, | ||
1994 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x36,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x81,0x2E, | ||
1995 | 0x30,0x53,0x4D,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27, | ||
1996 | 0x02,0x00,0x01,0x80,0x20,0x20,0x54,0x78,0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20, | ||
1997 | 0x33,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x80,0x2E,0x30,0x53,0x4D,0x81,0x82,0x63, | ||
1998 | 0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20, | ||
1999 | 0x44,0x43,0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x32,0x30,0x1F,0x20,0x20,0x20, | ||
2000 | 0x20,0x27,0x53,0x85,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85, | ||
2001 | 0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x44,0x53,0x52,0x20,0x2D,0x20,0x70, | ||
2002 | 0x69,0x6E,0x20,0x31,0x31,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x84,0x2E,0x31,0x81, | ||
2003 | 0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80, | ||
2004 | 0x20,0x20,0x43,0x54,0x53,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x34,0x1F,0x20,0x20, | ||
2005 | 0x20,0x20,0x27,0x53,0x83,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84, | ||
2006 | 0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x49,0x20,0x2D,0x20,0x70, | ||
2007 | 0x69,0x6E,0x20,0x32,0x32,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x87,0x2E,0x31,0x81, | ||
2008 | 0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80, | ||
2009 | 0x20,0x20,0x44,0x54,0x52,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x36,0x2F,0x38,0x1F, | ||
2010 | 0x20,0x20,0x20,0x20,0x27,0x53,0x86,0x2E,0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82, | ||
2011 | 0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x52,0x54,0x53,0x20, | ||
2012 | 0x2D,0x20,0x70,0x69,0x6E,0x20,0x35,0x1F,0x20,0x20,0x20,0x20,0x27,0x53,0x82,0x2E, | ||
2013 | 0x31,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00, | ||
2014 | 0x01,0x80,0x20,0x20,0x52,0x78,0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x32,0x1F, | ||
2015 | 0x20,0x20,0x20,0x20,0x27,0x53,0x81,0x2E,0x30,0x53,0x4D,0x81,0x82,0x63,0x88,0x80, | ||
2016 | 0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x27,0x02,0x00,0x01,0x80,0x20,0x20,0x54,0x78, | ||
2017 | 0x44,0x20,0x2D,0x20,0x70,0x69,0x6E,0x20,0x33,0x1F,0x20,0x20,0x20,0x20,0x27,0x53, | ||
2018 | 0x80,0x2E,0x30,0x53,0x4D,0x81,0x82,0x63,0x88,0x80,0x81,0x82,0x83,0x84,0x85,0x86, | ||
2019 | 0x87,0x27,0x02,0x00,0x68,0x04,0x96,0x04,0xB6,0x03,0x3C,0x04,0x0E,0x04,0x89,0x03, | ||
2020 | 0x5C,0x03,0xE2,0x03,0x60,0x08,0x8A,0x08,0xBE,0x07,0x38,0x08,0x0E,0x08,0x95,0x07, | ||
2021 | 0x6C,0x07,0xE6,0x07,0x1C,0x05,0x74,0x05,0xFA,0x05,0xC4,0x04,0xF0,0x04,0xCC,0x05, | ||
2022 | 0xA0,0x05,0x48,0x05,0x78,0x06,0xC8,0x06,0x42,0x07,0x28,0x06,0x50,0x06,0x18,0x07, | ||
2023 | 0xF0,0x06,0xA0,0x06,0x00,0x00,0xF4,0x08,0xF4,0x08,0xD4,0x0D,0x04,0x09,0x04,0x09, | ||
2024 | 0x04,0x09,0x04,0x09,0x42,0x00,0x0C,0x09,0x1C,0x09,0xE5,0x0D,0x02,0x00,0x14,0x09, | ||
2025 | 0x04,0x09,0xF4,0x0D,0x43,0x00,0x1C,0x09,0x0C,0x09,0x05,0x0E,0x00,0x04,0x04,0x09, | ||
2026 | 0x14,0x09,0x12,0x0E,0x2C,0x09,0x2C,0x09,0x2C,0x09,0x2C,0x09,0x00,0x00,0x3C,0x09, | ||
2027 | 0x6C,0x09,0x1E,0x0E,0x74,0x09,0x74,0x09,0x74,0x09,0x74,0x09,0x00,0x01,0x4C,0x09, | ||
2028 | 0x2C,0x09,0x2D,0x0E,0x74,0x09,0x74,0x09,0x74,0x09,0x74,0x09,0x00,0x02,0x5C,0x09, | ||
2029 | 0x3C,0x09,0x3D,0x0E,0x74,0x09,0x74,0x09,0x74,0x09,0x74,0x09,0x00,0x03,0x6C,0x09, | ||
2030 | 0x4C,0x09,0x4D,0x0E,0x74,0x09,0x74,0x09,0x74,0x09,0x74,0x09,0xFF,0x00,0x2C,0x09, | ||
2031 | 0x5C,0x09,0x00,0x00,0x00,0x05,0x84,0x09,0xEC,0x09,0x5E,0x0E,0xF4,0x09,0xF4,0x09, | ||
2032 | 0xF4,0x09,0xF4,0x09,0x00,0x06,0x94,0x09,0x74,0x09,0x68,0x0E,0xAC,0x0A,0xAC,0x0A, | ||
2033 | 0xAC,0x0A,0xAC,0x0A,0x00,0x07,0xA4,0x09,0x84,0x09,0x72,0x0E,0xBC,0x0A,0xBC,0x0A, | ||
2034 | 0xBC,0x0A,0xBC,0x0A,0x00,0x08,0xB4,0x09,0x94,0x09,0x7C,0x0E,0xD4,0x0A,0xD4,0x0A, | ||
2035 | 0xD4,0x0A,0xD4,0x0A,0x00,0x0B,0xC4,0x09,0xA4,0x09,0x83,0x0E,0xFC,0x0A,0xFC,0x0A, | ||
2036 | 0xFC,0x0A,0xFC,0x0A,0x00,0x0C,0xD4,0x09,0xB4,0x09,0x90,0x0E,0x14,0x0B,0x14,0x0B, | ||
2037 | 0x14,0x0B,0x14,0x0B,0x00,0x02,0xE4,0x09,0xC4,0x09,0xA0,0x0E,0x2C,0x0B,0x2C,0x0B, | ||
2038 | 0x2C,0x0B,0x2C,0x0B,0x04,0x00,0xEC,0x09,0xD4,0x09,0x0E,0x00,0xFF,0x00,0x74,0x09, | ||
2039 | 0xE4,0x09,0x00,0x00,0x82,0x01,0xFC,0x09,0xA4,0x0A,0xAC,0x0E,0x82,0x02,0x04,0x0A, | ||
2040 | 0xF4,0x09,0xAF,0x0E,0x82,0x03,0x0C,0x0A,0xFC,0x09,0xB2,0x0E,0x82,0x04,0x14,0x0A, | ||
2041 | 0x04,0x0A,0xB6,0x0E,0x82,0x05,0x1C,0x0A,0x0C,0x0A,0xBC,0x0E,0x82,0x06,0x24,0x0A, | ||
2042 | 0x14,0x0A,0xC0,0x0E,0x82,0x07,0x2C,0x0A,0x1C,0x0A,0xC4,0x0E,0x82,0x08,0x34,0x0A, | ||
2043 | 0x24,0x0A,0xC8,0x0E,0x82,0x09,0x3C,0x0A,0x2C,0x0A,0xCC,0x0E,0x82,0x0A,0x44,0x0A, | ||
2044 | 0x34,0x0A,0xD1,0x0E,0x82,0x10,0x4C,0x0A,0x3C,0x0A,0xD6,0x0E,0x82,0x0B,0x54,0x0A, | ||
2045 | 0x44,0x0A,0xDB,0x0E,0x82,0x11,0x5C,0x0A,0x4C,0x0A,0xE0,0x0E,0x82,0x0C,0x64,0x0A, | ||
2046 | 0x54,0x0A,0xE5,0x0E,0x82,0x12,0x6C,0x0A,0x5C,0x0A,0xEA,0x0E,0x82,0x0D,0x74,0x0A, | ||
2047 | 0x64,0x0A,0xEF,0x0E,0x82,0x0E,0x7C,0x0A,0x6C,0x0A,0xF4,0x0E,0x82,0x0F,0x84,0x0A, | ||
2048 | 0x74,0x0A,0xFB,0x0E,0x82,0x13,0x8C,0x0A,0x7C,0x0A,0x02,0x0F,0x82,0x14,0x94,0x0A, | ||
2049 | 0x84,0x0A,0x09,0x0F,0x82,0x15,0x9C,0x0A,0x8C,0x0A,0x10,0x0F,0x82,0x16,0xA4,0x0A, | ||
2050 | 0x94,0x0A,0x17,0x0F,0x82,0x17,0xF4,0x09,0x9C,0x0A,0x1E,0x0F,0x82,0x02,0xB4,0x0A, | ||
2051 | 0xB4,0x0A,0x26,0x0F,0x82,0x03,0xAC,0x0A,0xAC,0x0A,0x2D,0x0F,0x82,0x00,0xC4,0x0A, | ||
2052 | 0xCC,0x0A,0x34,0x0F,0x82,0x01,0xCC,0x0A,0xBC,0x0A,0x3F,0x0F,0x82,0x02,0xBC,0x0A, | ||
2053 | 0xC4,0x0A,0x4D,0x0F,0x82,0x00,0xDC,0x0A,0xF4,0x0A,0x59,0x0F,0x82,0x01,0xE4,0x0A, | ||
2054 | 0xD4,0x0A,0x63,0x0F,0x82,0x02,0xEC,0x0A,0xDC,0x0A,0x6E,0x0F,0x82,0x03,0xF4,0x0A, | ||
2055 | 0xE4,0x0A,0x7A,0x0F,0x82,0x04,0xD4,0x0A,0xEC,0x0A,0x87,0x0F,0x82,0x00,0x04,0x0B, | ||
2056 | 0x0C,0x0B,0x93,0x0F,0x82,0x01,0x0C,0x0B,0xFC,0x0A,0x9B,0x0F,0x82,0x02,0xFC,0x0A, | ||
2057 | 0x04,0x0B,0xA7,0x0F,0x82,0x00,0x1C,0x0B,0x24,0x0B,0xB0,0x0F,0x82,0x01,0x24,0x0B, | ||
2058 | 0x14,0x0B,0xB5,0x0F,0x82,0x02,0x14,0x0B,0x1C,0x0B,0xBE,0x0F,0x44,0x00,0x34,0x0B, | ||
2059 | 0xA4,0x0B,0x9C,0x01,0x44,0x01,0x3C,0x0B,0x2C,0x0B,0xA3,0x01,0x44,0x02,0x44,0x0B, | ||
2060 | 0x34,0x0B,0xAA,0x01,0x44,0x03,0x4C,0x0B,0x3C,0x0B,0xB1,0x01,0x44,0x04,0x54,0x0B, | ||
2061 | 0x44,0x0B,0xB8,0x01,0x44,0x05,0x5C,0x0B,0x4C,0x0B,0xBF,0x01,0x44,0x06,0x64,0x0B, | ||
2062 | 0x54,0x0B,0xC6,0x01,0x44,0x07,0x6C,0x0B,0x5C,0x0B,0xCD,0x01,0x44,0x08,0x74,0x0B, | ||
2063 | 0x64,0x0B,0xD4,0x01,0x44,0x09,0x7C,0x0B,0x6C,0x0B,0xDB,0x01,0x44,0x0A,0x84,0x0B, | ||
2064 | 0x74,0x0B,0xE2,0x01,0x44,0x0B,0x8C,0x0B,0x7C,0x0B,0xEA,0x01,0x44,0x0C,0x94,0x0B, | ||
2065 | 0x84,0x0B,0xF2,0x01,0x44,0x0D,0x9C,0x0B,0x8C,0x0B,0xFA,0x01,0x44,0x0E,0xA4,0x0B, | ||
2066 | 0x94,0x0B,0x02,0x02,0x44,0x0F,0x2C,0x0B,0x9C,0x0B,0x0A,0x02,0x17,0x1F,0x0F,0x2F, | ||
2067 | 0x00,0x00,0x01,0x80,0x78,0x78,0x3A,0x20,0x74,0x78,0x20,0x63,0x70,0x73,0x20,0x2A, | ||
2068 | 0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0x80,0x78,0x78,0x3A,0x20,0x74,0x78,0x20,0x63, | ||
2069 | 0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0x80,0x78,0x78,0x3A,0x20, | ||
2070 | 0x74,0x78,0x20,0x63,0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0x80, | ||
2071 | 0x78,0x78,0x3A,0x20,0x74,0x78,0x20,0x63,0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A, | ||
2072 | 0x02,0x00,0x01,0xC0,0x78,0x78,0x3A,0x20,0x72,0x63,0x20,0x63,0x70,0x73,0x20,0x2A, | ||
2073 | 0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0xC0,0x78,0x78,0x3A,0x20,0x72,0x63,0x20,0x63, | ||
2074 | 0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0xC0,0x78,0x78,0x3A,0x20, | ||
2075 | 0x72,0x63,0x20,0x63,0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A,0x02,0x00,0x01,0xC0, | ||
2076 | 0x78,0x78,0x3A,0x20,0x72,0x63,0x20,0x63,0x70,0x73,0x20,0x2A,0x2A,0x2A,0x2A,0x2A, | ||
2077 | 0x02,0x00,0x01,0x80,0x49,0x6E,0x73,0x74,0x61,0x6C,0x6C,0x20,0x4C,0x6F,0x6F,0x70, | ||
2078 | 0x62,0x61,0x63,0x6B,0x1F,0x50,0x72,0x65,0x73,0x73,0x20,0x80,0x20,0x74,0x6F,0x20, | ||
2079 | 0x73,0x74,0x61,0x72,0x74,0x02,0x00,0x01,0x80,0x20,0x43,0x61,0x62,0x6C,0x65,0x20, | ||
2080 | 0x74,0x6F,0x20,0x52,0x65,0x6D,0x6F,0x74,0x65,0x1F,0x50,0x72,0x65,0x73,0x73,0x20, | ||
2081 | 0x80,0x20,0x74,0x6F,0x20,0x73,0x74,0x61,0x72,0x74,0x02,0x00,0x01,0x80,0x20,0x4C, | ||
2082 | 0x6F,0x63,0x61,0x6C,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61,0x63,0x6B,0x20,0x1F,0x20, | ||
2083 | 0x20,0x52,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x2E,0x2E,0x2E,0x02,0x00,0x01,0x80, | ||
2084 | 0x52,0x65,0x6D,0x6F,0x74,0x65,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61,0x63,0x6B,0x20, | ||
2085 | 0x1F,0x20,0x20,0x52,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x2E,0x2E,0x2E,0x02,0x00, | ||
2086 | 0x01,0x80,0x20,0x49,0x6E,0x74,0x72,0x6E,0x6C,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61, | ||
2087 | 0x63,0x6B,0x1F,0x20,0x20,0x52,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x2E,0x2E,0x2E, | ||
2088 | 0x02,0x00,0x01,0x80,0x54,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x50,0x61,0x74, | ||
2089 | 0x74,0x65,0x72,0x6E,0x1F,0x20,0x20,0x52,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x2E, | ||
2090 | 0x2E,0x2E,0x02,0x00,0x01,0x80,0x20,0x20,0x30,0x3A,0x20,0x27,0x43,0x80,0x00,0x01, | ||
2091 | 0x80,0x20,0x20,0x31,0x3A,0x20,0x27,0x43,0x81,0x00,0x01,0x80,0x20,0x20,0x32,0x3A, | ||
2092 | 0x20,0x27,0x43,0x82,0x00,0x01,0x80,0x20,0x20,0x33,0x3A,0x20,0x27,0x43,0x83,0x00, | ||
2093 | 0x01,0x80,0x20,0x20,0x34,0x3A,0x20,0x27,0x43,0x84,0x00,0x01,0x80,0x20,0x20,0x35, | ||
2094 | 0x3A,0x20,0x27,0x43,0x85,0x00,0x01,0x80,0x20,0x20,0x36,0x3A,0x20,0x27,0x43,0x86, | ||
2095 | 0x00,0x01,0x80,0x20,0x20,0x37,0x3A,0x20,0x27,0x43,0x87,0x00,0x01,0x80,0x20,0x20, | ||
2096 | 0x38,0x3A,0x20,0x27,0x43,0x88,0x00,0x01,0x80,0x20,0x20,0x39,0x3A,0x20,0x27,0x43, | ||
2097 | 0x89,0x00,0x01,0x80,0x20,0x31,0x30,0x3A,0x20,0x27,0x43,0x8A,0x00,0x01,0x80,0x20, | ||
2098 | 0x31,0x31,0x3A,0x20,0x27,0x43,0x8B,0x00,0x01,0x80,0x20,0x31,0x32,0x3A,0x20,0x27, | ||
2099 | 0x43,0x8C,0x00,0x01,0x80,0x20,0x31,0x33,0x3A,0x20,0x27,0x43,0x8D,0x00,0x01,0x80, | ||
2100 | 0x20,0x31,0x34,0x3A,0x20,0x27,0x43,0x8E,0x00,0x01,0x80,0x20,0x31,0x35,0x3A,0x20, | ||
2101 | 0x27,0x43,0x8F,0x00,0x2A,0x2A,0x20,0x4D,0x61,0x69,0x6E,0x20,0x20,0x4D,0x65,0x6E, | ||
2102 | 0x75,0x20,0x2A,0x2A,0x00,0x4D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x20,0x61,0x20,0x50, | ||
2103 | 0x6F,0x72,0x74,0x00,0x4D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x20,0x61,0x20,0x53,0x69, | ||
2104 | 0x67,0x6E,0x61,0x6C,0x00,0x45,0x73,0x74,0x69,0x6D,0x61,0x74,0x65,0x20,0x43,0x50, | ||
2105 | 0x53,0x00,0x44,0x69,0x61,0x67,0x6E,0x6F,0x73,0x74,0x69,0x63,0x73,0x00,0x4C,0x6F, | ||
2106 | 0x63,0x61,0x6C,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61,0x63,0x6B,0x00,0x52,0x65,0x6D, | ||
2107 | 0x6F,0x74,0x65,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61,0x63,0x6B,0x00,0x49,0x6E,0x74, | ||
2108 | 0x72,0x6E,0x6C,0x20,0x4C,0x6F,0x6F,0x70,0x62,0x61,0x63,0x6B,0x00,0x54,0x72,0x61, | ||
2109 | 0x6E,0x73,0x6D,0x69,0x74,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x00,0x42,0x61, | ||
2110 | 0x75,0x64,0x20,0x52,0x61,0x74,0x65,0x00,0x44,0x61,0x74,0x61,0x20,0x42,0x69,0x74, | ||
2111 | 0x73,0x00,0x53,0x74,0x6F,0x70,0x20,0x42,0x69,0x74,0x73,0x00,0x50,0x61,0x72,0x69, | ||
2112 | 0x74,0x79,0x00,0x44,0x61,0x74,0x61,0x20,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x00, | ||
2113 | 0x54,0x78,0x20,0x46,0x6C,0x6F,0x77,0x20,0x43,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x00, | ||
2114 | 0x50,0x6F,0x72,0x74,0x20,0x4E,0x75,0x6D,0x62,0x65,0x72,0x00,0x35,0x30,0x00,0x37, | ||
2115 | 0x35,0x00,0x31,0x31,0x30,0x00,0x31,0x33,0x34,0x2E,0x35,0x00,0x31,0x35,0x30,0x00, | ||
2116 | 0x32,0x30,0x30,0x00,0x33,0x30,0x30,0x00,0x36,0x30,0x30,0x00,0x31,0x32,0x30,0x30, | ||
2117 | 0x00,0x31,0x38,0x30,0x30,0x00,0x32,0x30,0x30,0x30,0x00,0x32,0x34,0x30,0x30,0x00, | ||
2118 | 0x33,0x36,0x30,0x30,0x00,0x34,0x38,0x30,0x30,0x00,0x37,0x32,0x30,0x30,0x00,0x39, | ||
2119 | 0x36,0x30,0x30,0x00,0x31,0x39,0x2C,0x32,0x30,0x30,0x00,0x33,0x38,0x2C,0x34,0x30, | ||
2120 | 0x30,0x00,0x35,0x36,0x2C,0x30,0x30,0x30,0x00,0x35,0x37,0x2C,0x36,0x30,0x30,0x00, | ||
2121 | 0x36,0x34,0x2C,0x30,0x30,0x30,0x00,0x37,0x36,0x2C,0x38,0x30,0x30,0x00,0x31,0x31, | ||
2122 | 0x35,0x2C,0x32,0x30,0x30,0x00,0x37,0x20,0x62,0x69,0x74,0x73,0x00,0x38,0x20,0x62, | ||
2123 | 0x69,0x74,0x73,0x00,0x31,0x20,0x73,0x74,0x6F,0x70,0x20,0x62,0x69,0x74,0x00,0x31, | ||
2124 | 0x2E,0x35,0x20,0x73,0x74,0x6F,0x70,0x20,0x62,0x69,0x74,0x73,0x00,0x32,0x20,0x73, | ||
2125 | 0x74,0x6F,0x70,0x20,0x62,0x69,0x74,0x73,0x00,0x6E,0x6F,0x20,0x70,0x61,0x72,0x69, | ||
2126 | 0x74,0x79,0x00,0x6F,0x64,0x64,0x20,0x70,0x61,0x72,0x69,0x74,0x79,0x00,0x65,0x76, | ||
2127 | 0x65,0x6E,0x20,0x70,0x61,0x72,0x69,0x74,0x79,0x00,0x73,0x70,0x61,0x63,0x65,0x20, | ||
2128 | 0x70,0x61,0x72,0x69,0x74,0x79,0x00,0x6D,0x61,0x72,0x6B,0x20,0x70,0x61,0x72,0x69, | ||
2129 | 0x74,0x79,0x00,0x43,0x6F,0x6C,0x75,0x6D,0x6E,0x73,0x00,0x42,0x61,0x72,0x62,0x65, | ||
2130 | 0x72,0x20,0x50,0x6F,0x6C,0x65,0x00,0x55,0x55,0x55,0x55,0x55,0x2E,0x2E,0x2E,0x00, | ||
2131 | 0x4E,0x6F,0x6E,0x65,0x00,0x58,0x6F,0x6E,0x2F,0x58,0x6F,0x66,0x66,0x00,0x43,0x54, | ||
2132 | 0x53,0x00,0x50,0x72,0x65,0x73,0x73,0x20,0x80,0x20,0x66,0x6F,0x72,0x20,0x6D,0x65, | ||
2133 | 0x6E,0x75,0x00,0x28,0x63,0x6F,0x75,0x6E,0x74,0x69,0x6E,0x67,0x2E,0x2E,0x2E,0x29, | ||
2134 | 0x00,0x00,0x65,0x4E,0x64,0x20,0x4F,0x66,0x20,0x43,0x6F,0x44,0x65,0x00,0x00,0x00, | ||
2135 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2136 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2137 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2138 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2139 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2140 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2141 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2142 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2143 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2144 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2145 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2146 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2147 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2148 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | ||
2149 | }; | ||
diff --git a/drivers/char/ip2/i2cmd.c b/drivers/char/ip2/i2cmd.c new file mode 100644 index 000000000000..fd299d6c42ac --- /dev/null +++ b/drivers/char/ip2/i2cmd.c | |||
@@ -0,0 +1,209 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Definition table for In-line and Bypass commands. Applicable | ||
12 | * only when the standard loadware is active. (This is included | ||
13 | * source code, not a separate compilation module.) | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | |||
17 | //------------------------------------------------------------------------------ | ||
18 | // | ||
19 | // Revision History: | ||
20 | // | ||
21 | // 10 October 1991 MAG First Draft | ||
22 | // 7 November 1991 MAG Reflects additional commands. | ||
23 | // 24 February 1992 MAG Additional commands for 1.4.x loadware | ||
24 | // 11 March 1992 MAG Additional commands | ||
25 | // 30 March 1992 MAG Additional command: CMD_DSS_NOW | ||
26 | // 18 May 1992 MAG Discovered commands 39 & 40 must be at the end of a | ||
27 | // packet: affects implementation. | ||
28 | //------------------------------------------------------------------------------ | ||
29 | |||
30 | //************ | ||
31 | //* Includes * | ||
32 | //************ | ||
33 | |||
34 | #include "i2cmd.h" /* To get some bit-defines */ | ||
35 | |||
36 | //------------------------------------------------------------------------------ | ||
37 | // Here is the table of global arrays which represent each type of command | ||
38 | // supported in the IntelliPort standard loadware. See also i2cmd.h | ||
39 | // for a more complete explanation of what is going on. | ||
40 | //------------------------------------------------------------------------------ | ||
41 | |||
42 | // Here are the various globals: note that the names are not used except through | ||
43 | // the macros defined in i2cmd.h. Also note that although they are character | ||
44 | // arrays here (for extendability) they are cast to structure pointers in the | ||
45 | // i2cmd.h macros. See i2cmd.h for flags definitions. | ||
46 | |||
47 | // Length Flags Command | ||
48 | static UCHAR ct02[] = { 1, BTH, 0x02 }; // DTR UP | ||
49 | static UCHAR ct03[] = { 1, BTH, 0x03 }; // DTR DN | ||
50 | static UCHAR ct04[] = { 1, BTH, 0x04 }; // RTS UP | ||
51 | static UCHAR ct05[] = { 1, BTH, 0x05 }; // RTS DN | ||
52 | static UCHAR ct06[] = { 1, BYP, 0x06 }; // START FL | ||
53 | static UCHAR ct07[] = { 2, BTH, 0x07,0 }; // BAUD | ||
54 | static UCHAR ct08[] = { 2, BTH, 0x08,0 }; // BITS | ||
55 | static UCHAR ct09[] = { 2, BTH, 0x09,0 }; // STOP | ||
56 | static UCHAR ct10[] = { 2, BTH, 0x0A,0 }; // PARITY | ||
57 | static UCHAR ct11[] = { 2, BTH, 0x0B,0 }; // XON | ||
58 | static UCHAR ct12[] = { 2, BTH, 0x0C,0 }; // XOFF | ||
59 | static UCHAR ct13[] = { 1, BTH, 0x0D }; // STOP FL | ||
60 | static UCHAR ct14[] = { 1, BYP|VIP, 0x0E }; // ACK HOTK | ||
61 | //static UCHAR ct15[]={ 2, BTH|VIP, 0x0F,0 }; // IRQ SET | ||
62 | static UCHAR ct16[] = { 2, INL, 0x10,0 }; // IXONOPTS | ||
63 | static UCHAR ct17[] = { 2, INL, 0x11,0 }; // OXONOPTS | ||
64 | static UCHAR ct18[] = { 1, INL, 0x12 }; // CTSENAB | ||
65 | static UCHAR ct19[] = { 1, BTH, 0x13 }; // CTSDSAB | ||
66 | static UCHAR ct20[] = { 1, INL, 0x14 }; // DCDENAB | ||
67 | static UCHAR ct21[] = { 1, BTH, 0x15 }; // DCDDSAB | ||
68 | static UCHAR ct22[] = { 1, BTH, 0x16 }; // DSRENAB | ||
69 | static UCHAR ct23[] = { 1, BTH, 0x17 }; // DSRDSAB | ||
70 | static UCHAR ct24[] = { 1, BTH, 0x18 }; // RIENAB | ||
71 | static UCHAR ct25[] = { 1, BTH, 0x19 }; // RIDSAB | ||
72 | static UCHAR ct26[] = { 2, BTH, 0x1A,0 }; // BRKENAB | ||
73 | static UCHAR ct27[] = { 1, BTH, 0x1B }; // BRKDSAB | ||
74 | //static UCHAR ct28[]={ 2, BTH, 0x1C,0 }; // MAXBLOKSIZE | ||
75 | //static UCHAR ct29[]={ 2, 0, 0x1D,0 }; // reserved | ||
76 | static UCHAR ct30[] = { 1, INL, 0x1E }; // CTSFLOWENAB | ||
77 | static UCHAR ct31[] = { 1, INL, 0x1F }; // CTSFLOWDSAB | ||
78 | static UCHAR ct32[] = { 1, INL, 0x20 }; // RTSFLOWENAB | ||
79 | static UCHAR ct33[] = { 1, INL, 0x21 }; // RTSFLOWDSAB | ||
80 | static UCHAR ct34[] = { 2, BTH, 0x22,0 }; // ISTRIPMODE | ||
81 | static UCHAR ct35[] = { 2, BTH|END, 0x23,0 }; // SENDBREAK | ||
82 | static UCHAR ct36[] = { 2, BTH, 0x24,0 }; // SETERRMODE | ||
83 | //static UCHAR ct36a[]={ 3, INL, 0x24,0,0 }; // SET_REPLACE | ||
84 | |||
85 | // The following is listed for completeness, but should never be sent directly | ||
86 | // by user-level code. It is sent only by library routines in response to data | ||
87 | // movement. | ||
88 | //static UCHAR ct37[]={ 5, BYP|VIP, 0x25,0,0,0,0 }; // FLOW PACKET | ||
89 | |||
90 | // Back to normal | ||
91 | //static UCHAR ct38[] = {11, BTH|VAR, 0x26,0,0,0,0,0,0,0,0,0,0 }; // DEF KEY SEQ | ||
92 | //static UCHAR ct39[]={ 3, BTH|END, 0x27,0,0 }; // OPOSTON | ||
93 | //static UCHAR ct40[]={ 1, BTH|END, 0x28 }; // OPOSTOFF | ||
94 | static UCHAR ct41[] = { 1, BYP, 0x29 }; // RESUME | ||
95 | //static UCHAR ct42[]={ 2, BTH, 0x2A,0 }; // TXBAUD | ||
96 | //static UCHAR ct43[]={ 2, BTH, 0x2B,0 }; // RXBAUD | ||
97 | //static UCHAR ct44[]={ 2, BTH, 0x2C,0 }; // MS PING | ||
98 | //static UCHAR ct45[]={ 1, BTH, 0x2D }; // HOTENAB | ||
99 | //static UCHAR ct46[]={ 1, BTH, 0x2E }; // HOTDSAB | ||
100 | static UCHAR ct47[] = { 7, BTH, 0x2F,0,0,0,0,0,0 }; // UNIX FLAGS | ||
101 | //static UCHAR ct48[]={ 1, BTH, 0x30 }; // DSRFLOWENAB | ||
102 | //static UCHAR ct49[]={ 1, BTH, 0x31 }; // DSRFLOWDSAB | ||
103 | //static UCHAR ct50[]={ 1, BTH, 0x32 }; // DTRFLOWENAB | ||
104 | //static UCHAR ct51[]={ 1, BTH, 0x33 }; // DTRFLOWDSAB | ||
105 | //static UCHAR ct52[]={ 1, BTH, 0x34 }; // BAUDTABRESET | ||
106 | //static UCHAR ct53[] = { 3, BTH, 0x35,0,0 }; // BAUDREMAP | ||
107 | static UCHAR ct54[] = { 3, BTH, 0x36,0,0 }; // CUSTOMBAUD1 | ||
108 | static UCHAR ct55[] = { 3, BTH, 0x37,0,0 }; // CUSTOMBAUD2 | ||
109 | static UCHAR ct56[] = { 2, BTH|END, 0x38,0 }; // PAUSE | ||
110 | static UCHAR ct57[] = { 1, BYP, 0x39 }; // SUSPEND | ||
111 | static UCHAR ct58[] = { 1, BYP, 0x3A }; // UNSUSPEND | ||
112 | static UCHAR ct59[] = { 2, BTH, 0x3B,0 }; // PARITYCHK | ||
113 | static UCHAR ct60[] = { 1, INL|VIP, 0x3C }; // BOOKMARKREQ | ||
114 | //static UCHAR ct61[]={ 2, BTH, 0x3D,0 }; // INTERNALLOOP | ||
115 | //static UCHAR ct62[]={ 2, BTH, 0x3E,0 }; // HOTKTIMEOUT | ||
116 | static UCHAR ct63[] = { 2, INL, 0x3F,0 }; // SETTXON | ||
117 | static UCHAR ct64[] = { 2, INL, 0x40,0 }; // SETTXOFF | ||
118 | //static UCHAR ct65[]={ 2, BTH, 0x41,0 }; // SETAUTORTS | ||
119 | //static UCHAR ct66[]={ 2, BTH, 0x42,0 }; // SETHIGHWAT | ||
120 | //static UCHAR ct67[]={ 2, BYP, 0x43,0 }; // STARTSELFL | ||
121 | //static UCHAR ct68[]={ 2, INL, 0x44,0 }; // ENDSELFL | ||
122 | //static UCHAR ct69[]={ 1, BYP, 0x45 }; // HWFLOW_OFF | ||
123 | //static UCHAR ct70[]={ 1, BTH, 0x46 }; // ODSRFL_ENAB | ||
124 | //static UCHAR ct71[]={ 1, BTH, 0x47 }; // ODSRFL_DSAB | ||
125 | //static UCHAR ct72[]={ 1, BTH, 0x48 }; // ODCDFL_ENAB | ||
126 | //static UCHAR ct73[]={ 1, BTH, 0x49 }; // ODCDFL_DSAB | ||
127 | //static UCHAR ct74[]={ 2, BTH, 0x4A,0 }; // LOADLEVEL | ||
128 | //static UCHAR ct75[]={ 2, BTH, 0x4B,0 }; // STATDATA | ||
129 | //static UCHAR ct76[]={ 1, BYP, 0x4C }; // BREAK_ON | ||
130 | //static UCHAR ct77[]={ 1, BYP, 0x4D }; // BREAK_OFF | ||
131 | //static UCHAR ct78[]={ 1, BYP, 0x4E }; // GETFC | ||
132 | static UCHAR ct79[] = { 2, BYP, 0x4F,0 }; // XMIT_NOW | ||
133 | //static UCHAR ct80[]={ 4, BTH, 0x50,0,0,0 }; // DIVISOR_LATCH | ||
134 | //static UCHAR ct81[]={ 1, BYP, 0x51 }; // GET_STATUS | ||
135 | //static UCHAR ct82[]={ 1, BYP, 0x52 }; // GET_TXCNT | ||
136 | //static UCHAR ct83[]={ 1, BYP, 0x53 }; // GET_RXCNT | ||
137 | //static UCHAR ct84[]={ 1, BYP, 0x54 }; // GET_BOXIDS | ||
138 | //static UCHAR ct85[]={10, BYP, 0x55,0,0,0,0,0,0,0,0,0 }; // ENAB_MULT | ||
139 | //static UCHAR ct86[]={ 2, BTH, 0x56,0 }; // RCV_ENABLE | ||
140 | static UCHAR ct87[] = { 1, BYP, 0x57 }; // HW_TEST | ||
141 | //static UCHAR ct88[]={ 3, BTH, 0x58,0,0 }; // RCV_THRESHOLD | ||
142 | static UCHAR ct89[]={ 1, BYP, 0x59 }; // DSS_NOW | ||
143 | //static UCHAR ct90[]={ 3, BYP, 0x5A,0,0 }; // Set SILO | ||
144 | //static UCHAR ct91[]={ 2, BYP, 0x5B,0 }; // timed break | ||
145 | |||
146 | // Some composite commands as well | ||
147 | //static UCHAR cc01[]={ 2, BTH, 0x02,0x04 }; // DTR & RTS UP | ||
148 | //static UCHAR cc02[]={ 2, BTH, 0x03,0x05 }; // DTR & RTS DN | ||
149 | |||
150 | //******** | ||
151 | //* Code * | ||
152 | //******** | ||
153 | |||
154 | //****************************************************************************** | ||
155 | // Function: i2cmdUnixFlags(iflag, cflag, lflag) | ||
156 | // Parameters: Unix tty flags | ||
157 | // | ||
158 | // Returns: Pointer to command structure | ||
159 | // | ||
160 | // Description: | ||
161 | // | ||
162 | // This routine sets the parameters of command 47 and returns a pointer to the | ||
163 | // appropriate structure. | ||
164 | //****************************************************************************** | ||
165 | cmdSyntaxPtr | ||
166 | i2cmdUnixFlags(unsigned short iflag,unsigned short cflag,unsigned short lflag) | ||
167 | { | ||
168 | cmdSyntaxPtr pCM = (cmdSyntaxPtr) ct47; | ||
169 | |||
170 | pCM->cmd[1] = (unsigned char) iflag; | ||
171 | pCM->cmd[2] = (unsigned char) (iflag >> 8); | ||
172 | pCM->cmd[3] = (unsigned char) cflag; | ||
173 | pCM->cmd[4] = (unsigned char) (cflag >> 8); | ||
174 | pCM->cmd[5] = (unsigned char) lflag; | ||
175 | pCM->cmd[6] = (unsigned char) (lflag >> 8); | ||
176 | return pCM; | ||
177 | } | ||
178 | |||
179 | //****************************************************************************** | ||
180 | // Function: i2cmdBaudDef(which, rate) | ||
181 | // Parameters: ? | ||
182 | // | ||
183 | // Returns: Pointer to command structure | ||
184 | // | ||
185 | // Description: | ||
186 | // | ||
187 | // This routine sets the parameters of commands 54 or 55 (according to the | ||
188 | // argument which), and returns a pointer to the appropriate structure. | ||
189 | //****************************************************************************** | ||
190 | cmdSyntaxPtr | ||
191 | i2cmdBaudDef(int which, unsigned short rate) | ||
192 | { | ||
193 | cmdSyntaxPtr pCM; | ||
194 | |||
195 | switch(which) | ||
196 | { | ||
197 | case 1: | ||
198 | pCM = (cmdSyntaxPtr) ct54; | ||
199 | break; | ||
200 | default: | ||
201 | case 2: | ||
202 | pCM = (cmdSyntaxPtr) ct55; | ||
203 | break; | ||
204 | } | ||
205 | pCM->cmd[1] = (unsigned char) rate; | ||
206 | pCM->cmd[2] = (unsigned char) (rate >> 8); | ||
207 | return pCM; | ||
208 | } | ||
209 | |||
diff --git a/drivers/char/ip2/i2cmd.h b/drivers/char/ip2/i2cmd.h new file mode 100644 index 000000000000..c41728a85710 --- /dev/null +++ b/drivers/char/ip2/i2cmd.h | |||
@@ -0,0 +1,643 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1999 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Definitions and support for In-line and Bypass commands. | ||
12 | * Applicable only when the standard loadware is active. | ||
13 | * | ||
14 | *******************************************************************************/ | ||
15 | //------------------------------------------------------------------------------ | ||
16 | // Revision History: | ||
17 | // | ||
18 | // 10 October 1991 MAG First Draft | ||
19 | // 7 November 1991 MAG Reflects some new commands | ||
20 | // 20 February 1992 MAG CMD_HOTACK corrected: no argument. | ||
21 | // 24 February 1992 MAG Support added for new commands for 1.4.x loadware. | ||
22 | // 11 March 1992 MAG Additional commands. | ||
23 | // 16 March 1992 MAG Additional commands. | ||
24 | // 30 March 1992 MAG Additional command: CMD_DSS_NOW | ||
25 | // 18 May 1992 MAG Changed CMD_OPOST | ||
26 | // | ||
27 | //------------------------------------------------------------------------------ | ||
28 | #ifndef I2CMD_H // To prevent multiple includes | ||
29 | #define I2CMD_H 1 | ||
30 | |||
31 | #include "ip2types.h" | ||
32 | |||
33 | // This module is designed to provide a uniform method of sending commands to | ||
34 | // the board through command packets. The difficulty is, some commands take | ||
35 | // parameters, others do not. Furthermore, it is often useful to send several | ||
36 | // commands to the same channel as part of the same packet. (See also i2pack.h.) | ||
37 | // | ||
38 | // This module is designed so that the caller should not be responsible for | ||
39 | // remembering the exact syntax of each command, or at least so that the | ||
40 | // compiler could check things somewhat. I'll explain as we go... | ||
41 | // | ||
42 | // First, a structure which can embody the syntax of each type of command. | ||
43 | // | ||
44 | typedef struct _cmdSyntax | ||
45 | { | ||
46 | UCHAR length; // Number of bytes in the command | ||
47 | UCHAR flags; // Information about the command (see below) | ||
48 | |||
49 | // The command and its parameters, which may be of arbitrary length. Don't | ||
50 | // worry yet how the parameters will be initialized; macros later take care | ||
51 | // of it. Also, don't worry about the arbitrary length issue; this structure | ||
52 | // is never used to allocate space (see i2cmd.c). | ||
53 | UCHAR cmd[2]; | ||
54 | } cmdSyntax, *cmdSyntaxPtr; | ||
55 | |||
56 | // Bit assignments for flags | ||
57 | |||
58 | #define INL 1 // Set if suitable for inline commands | ||
59 | #define BYP 2 // Set if suitable for bypass commands | ||
60 | #define BTH (INL|BYP) // suitable for either! | ||
61 | #define END 4 // Set if this must be the last command in a block | ||
62 | #define VIP 8 // Set if this command is special in some way and really | ||
63 | // should only be sent from the library-level and not | ||
64 | // directly from user-level | ||
65 | #define VAR 0x10 // This command is of variable length! | ||
66 | |||
67 | //----------------------------------- | ||
68 | // External declarations for i2cmd.c | ||
69 | //----------------------------------- | ||
70 | // Routine to set up parameters for the "define hot-key sequence" command. Since | ||
71 | // there is more than one parameter to assign, we must use a function rather | ||
72 | // than a macro (used usually). | ||
73 | // | ||
74 | extern cmdSyntaxPtr i2cmdUnixFlags(USHORT iflag,USHORT cflag,USHORT lflag); | ||
75 | extern cmdSyntaxPtr i2cmdBaudDef(int which, USHORT rate); | ||
76 | |||
77 | // Declarations for the global arrays used to bear the commands and their | ||
78 | // arguments. | ||
79 | // | ||
80 | // Note: Since these are globals and the arguments might change, it is important | ||
81 | // that the library routine COPY these into buffers from whence they would be | ||
82 | // sent, rather than merely storing the pointers. In multi-threaded | ||
83 | // environments, important that the copy should obtain before any context switch | ||
84 | // is allowed. Also, for parameterized commands, DO NOT ISSUE THE SAME COMMAND | ||
85 | // MORE THAN ONCE WITH THE SAME PARAMETERS in the same call. | ||
86 | // | ||
87 | static UCHAR ct02[]; | ||
88 | static UCHAR ct03[]; | ||
89 | static UCHAR ct04[]; | ||
90 | static UCHAR ct05[]; | ||
91 | static UCHAR ct06[]; | ||
92 | static UCHAR ct07[]; | ||
93 | static UCHAR ct08[]; | ||
94 | static UCHAR ct09[]; | ||
95 | static UCHAR ct10[]; | ||
96 | static UCHAR ct11[]; | ||
97 | static UCHAR ct12[]; | ||
98 | static UCHAR ct13[]; | ||
99 | static UCHAR ct14[]; | ||
100 | static UCHAR ct15[]; | ||
101 | static UCHAR ct16[]; | ||
102 | static UCHAR ct17[]; | ||
103 | static UCHAR ct18[]; | ||
104 | static UCHAR ct19[]; | ||
105 | static UCHAR ct20[]; | ||
106 | static UCHAR ct21[]; | ||
107 | static UCHAR ct22[]; | ||
108 | static UCHAR ct23[]; | ||
109 | static UCHAR ct24[]; | ||
110 | static UCHAR ct25[]; | ||
111 | static UCHAR ct26[]; | ||
112 | static UCHAR ct27[]; | ||
113 | static UCHAR ct28[]; | ||
114 | static UCHAR ct29[]; | ||
115 | static UCHAR ct30[]; | ||
116 | static UCHAR ct31[]; | ||
117 | static UCHAR ct32[]; | ||
118 | static UCHAR ct33[]; | ||
119 | static UCHAR ct34[]; | ||
120 | static UCHAR ct35[]; | ||
121 | static UCHAR ct36[]; | ||
122 | static UCHAR ct36a[]; | ||
123 | static UCHAR ct41[]; | ||
124 | static UCHAR ct42[]; | ||
125 | static UCHAR ct43[]; | ||
126 | static UCHAR ct44[]; | ||
127 | static UCHAR ct45[]; | ||
128 | static UCHAR ct46[]; | ||
129 | static UCHAR ct48[]; | ||
130 | static UCHAR ct49[]; | ||
131 | static UCHAR ct50[]; | ||
132 | static UCHAR ct51[]; | ||
133 | static UCHAR ct52[]; | ||
134 | static UCHAR ct56[]; | ||
135 | static UCHAR ct57[]; | ||
136 | static UCHAR ct58[]; | ||
137 | static UCHAR ct59[]; | ||
138 | static UCHAR ct60[]; | ||
139 | static UCHAR ct61[]; | ||
140 | static UCHAR ct62[]; | ||
141 | static UCHAR ct63[]; | ||
142 | static UCHAR ct64[]; | ||
143 | static UCHAR ct65[]; | ||
144 | static UCHAR ct66[]; | ||
145 | static UCHAR ct67[]; | ||
146 | static UCHAR ct68[]; | ||
147 | static UCHAR ct69[]; | ||
148 | static UCHAR ct70[]; | ||
149 | static UCHAR ct71[]; | ||
150 | static UCHAR ct72[]; | ||
151 | static UCHAR ct73[]; | ||
152 | static UCHAR ct74[]; | ||
153 | static UCHAR ct75[]; | ||
154 | static UCHAR ct76[]; | ||
155 | static UCHAR ct77[]; | ||
156 | static UCHAR ct78[]; | ||
157 | static UCHAR ct79[]; | ||
158 | static UCHAR ct80[]; | ||
159 | static UCHAR ct81[]; | ||
160 | static UCHAR ct82[]; | ||
161 | static UCHAR ct83[]; | ||
162 | static UCHAR ct84[]; | ||
163 | static UCHAR ct85[]; | ||
164 | static UCHAR ct86[]; | ||
165 | static UCHAR ct87[]; | ||
166 | static UCHAR ct88[]; | ||
167 | static UCHAR ct89[]; | ||
168 | static UCHAR ct90[]; | ||
169 | static UCHAR ct91[]; | ||
170 | static UCHAR cc01[]; | ||
171 | static UCHAR cc02[]; | ||
172 | |||
173 | // Now, refer to i2cmd.c, and see the character arrays defined there. They are | ||
174 | // cast here to cmdSyntaxPtr. | ||
175 | // | ||
176 | // There are library functions for issuing bypass or inline commands. These | ||
177 | // functions take one or more arguments of the type cmdSyntaxPtr. The routine | ||
178 | // then can figure out how long each command is supposed to be and easily add it | ||
179 | // to the list. | ||
180 | // | ||
181 | // For ease of use, we define manifests which return pointers to appropriate | ||
182 | // cmdSyntaxPtr things. But some commands also take arguments. If a single | ||
183 | // argument is used, we define a macro which performs the single assignment and | ||
184 | // (through the expedient of a comma expression) references the appropriate | ||
185 | // pointer. For commands requiring several arguments, we actually define a | ||
186 | // function to perform the assignments. | ||
187 | |||
188 | #define CMD_DTRUP (cmdSyntaxPtr)(ct02) // Raise DTR | ||
189 | #define CMD_DTRDN (cmdSyntaxPtr)(ct03) // Lower DTR | ||
190 | #define CMD_RTSUP (cmdSyntaxPtr)(ct04) // Raise RTS | ||
191 | #define CMD_RTSDN (cmdSyntaxPtr)(ct05) // Lower RTS | ||
192 | #define CMD_STARTFL (cmdSyntaxPtr)(ct06) // Start Flushing Data | ||
193 | |||
194 | #define CMD_DTRRTS_UP (cmdSyntaxPtr)(cc01) // Raise DTR and RTS | ||
195 | #define CMD_DTRRTS_DN (cmdSyntaxPtr)(cc02) // Lower DTR and RTS | ||
196 | |||
197 | // Set Baud Rate for transmit and receive | ||
198 | #define CMD_SETBAUD(arg) \ | ||
199 | (((cmdSyntaxPtr)(ct07))->cmd[1] = (arg),(cmdSyntaxPtr)(ct07)) | ||
200 | |||
201 | #define CBR_50 1 | ||
202 | #define CBR_75 2 | ||
203 | #define CBR_110 3 | ||
204 | #define CBR_134 4 | ||
205 | #define CBR_150 5 | ||
206 | #define CBR_200 6 | ||
207 | #define CBR_300 7 | ||
208 | #define CBR_600 8 | ||
209 | #define CBR_1200 9 | ||
210 | #define CBR_1800 10 | ||
211 | #define CBR_2400 11 | ||
212 | #define CBR_4800 12 | ||
213 | #define CBR_9600 13 | ||
214 | #define CBR_19200 14 | ||
215 | #define CBR_38400 15 | ||
216 | #define CBR_2000 16 | ||
217 | #define CBR_3600 17 | ||
218 | #define CBR_7200 18 | ||
219 | #define CBR_56000 19 | ||
220 | #define CBR_57600 20 | ||
221 | #define CBR_64000 21 | ||
222 | #define CBR_76800 22 | ||
223 | #define CBR_115200 23 | ||
224 | #define CBR_C1 24 // Custom baud rate 1 | ||
225 | #define CBR_C2 25 // Custom baud rate 2 | ||
226 | #define CBR_153600 26 | ||
227 | #define CBR_230400 27 | ||
228 | #define CBR_307200 28 | ||
229 | #define CBR_460800 29 | ||
230 | #define CBR_921600 30 | ||
231 | |||
232 | // Set Character size | ||
233 | // | ||
234 | #define CMD_SETBITS(arg) \ | ||
235 | (((cmdSyntaxPtr)(ct08))->cmd[1] = (arg),(cmdSyntaxPtr)(ct08)) | ||
236 | |||
237 | #define CSZ_5 0 | ||
238 | #define CSZ_6 1 | ||
239 | #define CSZ_7 2 | ||
240 | #define CSZ_8 3 | ||
241 | |||
242 | // Set number of stop bits | ||
243 | // | ||
244 | #define CMD_SETSTOP(arg) \ | ||
245 | (((cmdSyntaxPtr)(ct09))->cmd[1] = (arg),(cmdSyntaxPtr)(ct09)) | ||
246 | |||
247 | #define CST_1 0 | ||
248 | #define CST_15 1 // 1.5 stop bits | ||
249 | #define CST_2 2 | ||
250 | |||
251 | // Set parity option | ||
252 | // | ||
253 | #define CMD_SETPAR(arg) \ | ||
254 | (((cmdSyntaxPtr)(ct10))->cmd[1] = (arg),(cmdSyntaxPtr)(ct10)) | ||
255 | |||
256 | #define CSP_NP 0 // no parity | ||
257 | #define CSP_OD 1 // odd parity | ||
258 | #define CSP_EV 2 // Even parity | ||
259 | #define CSP_SP 3 // Space parity | ||
260 | #define CSP_MK 4 // Mark parity | ||
261 | |||
262 | // Define xon char for transmitter flow control | ||
263 | // | ||
264 | #define CMD_DEF_IXON(arg) \ | ||
265 | (((cmdSyntaxPtr)(ct11))->cmd[1] = (arg),(cmdSyntaxPtr)(ct11)) | ||
266 | |||
267 | // Define xoff char for transmitter flow control | ||
268 | // | ||
269 | #define CMD_DEF_IXOFF(arg) \ | ||
270 | (((cmdSyntaxPtr)(ct12))->cmd[1] = (arg),(cmdSyntaxPtr)(ct12)) | ||
271 | |||
272 | #define CMD_STOPFL (cmdSyntaxPtr)(ct13) // Stop Flushing data | ||
273 | |||
274 | // Acknowledge receipt of hotkey signal | ||
275 | // | ||
276 | #define CMD_HOTACK (cmdSyntaxPtr)(ct14) | ||
277 | |||
278 | // Define irq level to use. Should actually be sent by library-level code, not | ||
279 | // directly from user... | ||
280 | // | ||
281 | #define CMDVALUE_IRQ 15 // For library use at initialization. Until this command | ||
282 | // is sent, board processing doesn't really start. | ||
283 | #define CMD_SET_IRQ(arg) \ | ||
284 | (((cmdSyntaxPtr)(ct15))->cmd[1] = (arg),(cmdSyntaxPtr)(ct15)) | ||
285 | |||
286 | #define CIR_POLL 0 // No IRQ - Poll | ||
287 | #define CIR_3 3 // IRQ 3 | ||
288 | #define CIR_4 4 // IRQ 4 | ||
289 | #define CIR_5 5 // IRQ 5 | ||
290 | #define CIR_7 7 // IRQ 7 | ||
291 | #define CIR_10 10 // IRQ 10 | ||
292 | #define CIR_11 11 // IRQ 11 | ||
293 | #define CIR_12 12 // IRQ 12 | ||
294 | #define CIR_15 15 // IRQ 15 | ||
295 | |||
296 | // Select transmit flow xon/xoff options | ||
297 | // | ||
298 | #define CMD_IXON_OPT(arg) \ | ||
299 | (((cmdSyntaxPtr)(ct16))->cmd[1] = (arg),(cmdSyntaxPtr)(ct16)) | ||
300 | |||
301 | #define CIX_NONE 0 // Incoming Xon/Xoff characters not special | ||
302 | #define CIX_XON 1 // Xoff disable, Xon enable | ||
303 | #define CIX_XANY 2 // Xoff disable, any key enable | ||
304 | |||
305 | // Select receive flow xon/xoff options | ||
306 | // | ||
307 | #define CMD_OXON_OPT(arg) \ | ||
308 | (((cmdSyntaxPtr)(ct17))->cmd[1] = (arg),(cmdSyntaxPtr)(ct17)) | ||
309 | |||
310 | #define COX_NONE 0 // Don't send Xon/Xoff | ||
311 | #define COX_XON 1 // Send xon/xoff to start/stop incoming data | ||
312 | |||
313 | |||
314 | #define CMD_CTS_REP (cmdSyntaxPtr)(ct18) // Enable CTS reporting | ||
315 | #define CMD_CTS_NREP (cmdSyntaxPtr)(ct19) // Disable CTS reporting | ||
316 | |||
317 | #define CMD_DCD_REP (cmdSyntaxPtr)(ct20) // Enable DCD reporting | ||
318 | #define CMD_DCD_NREP (cmdSyntaxPtr)(ct21) // Disable DCD reporting | ||
319 | |||
320 | #define CMD_DSR_REP (cmdSyntaxPtr)(ct22) // Enable DSR reporting | ||
321 | #define CMD_DSR_NREP (cmdSyntaxPtr)(ct23) // Disable DSR reporting | ||
322 | |||
323 | #define CMD_RI_REP (cmdSyntaxPtr)(ct24) // Enable RI reporting | ||
324 | #define CMD_RI_NREP (cmdSyntaxPtr)(ct25) // Disable RI reporting | ||
325 | |||
326 | // Enable break reporting and select style | ||
327 | // | ||
328 | #define CMD_BRK_REP(arg) \ | ||
329 | (((cmdSyntaxPtr)(ct26))->cmd[1] = (arg),(cmdSyntaxPtr)(ct26)) | ||
330 | |||
331 | #define CBK_STAT 0x00 // Report breaks as a status (exception,irq) | ||
332 | #define CBK_NULL 0x01 // Report breaks as a good null | ||
333 | #define CBK_STAT_SEQ 0x02 // Report breaks as a status AND as in-band character | ||
334 | // sequence FFh, 01h, 10h | ||
335 | #define CBK_SEQ 0x03 // Report breaks as the in-band | ||
336 | //sequence FFh, 01h, 10h ONLY. | ||
337 | #define CBK_FLSH 0x04 // if this bit set also flush input data | ||
338 | #define CBK_POSIX 0x08 // if this bit set report as FF,0,0 sequence | ||
339 | #define CBK_SINGLE 0x10 // if this bit set with CBK_SEQ or CBK_STAT_SEQ | ||
340 | //then reports single null instead of triple | ||
341 | |||
342 | #define CMD_BRK_NREP (cmdSyntaxPtr)(ct27) // Disable break reporting | ||
343 | |||
344 | // Specify maximum block size for received data | ||
345 | // | ||
346 | #define CMD_MAX_BLOCK(arg) \ | ||
347 | (((cmdSyntaxPtr)(ct28))->cmd[1] = (arg),(cmdSyntaxPtr)(ct28)) | ||
348 | |||
349 | // -- COMMAND 29 is reserved -- | ||
350 | |||
351 | #define CMD_CTSFL_ENAB (cmdSyntaxPtr)(ct30) // Enable CTS flow control | ||
352 | #define CMD_CTSFL_DSAB (cmdSyntaxPtr)(ct31) // Disable CTS flow control | ||
353 | #define CMD_RTSFL_ENAB (cmdSyntaxPtr)(ct32) // Enable RTS flow control | ||
354 | #define CMD_RTSFL_DSAB (cmdSyntaxPtr)(ct33) // Disable RTS flow control | ||
355 | |||
356 | // Specify istrip option | ||
357 | // | ||
358 | #define CMD_ISTRIP_OPT(arg) \ | ||
359 | (((cmdSyntaxPtr)(ct34))->cmd[1] = (arg),(cmdSyntaxPtr)(ct34)) | ||
360 | |||
361 | #define CIS_NOSTRIP 0 // Strip characters to character size | ||
362 | #define CIS_STRIP 1 // Strip any 8-bit characters to 7 bits | ||
363 | |||
364 | // Send a break of arg milliseconds | ||
365 | // | ||
366 | #define CMD_SEND_BRK(arg) \ | ||
367 | (((cmdSyntaxPtr)(ct35))->cmd[1] = (arg),(cmdSyntaxPtr)(ct35)) | ||
368 | |||
369 | // Set error reporting mode | ||
370 | // | ||
371 | #define CMD_SET_ERROR(arg) \ | ||
372 | (((cmdSyntaxPtr)(ct36))->cmd[1] = (arg),(cmdSyntaxPtr)(ct36)) | ||
373 | |||
374 | #define CSE_ESTAT 0 // Report error in a status packet | ||
375 | #define CSE_NOREP 1 // Treat character as though it were good | ||
376 | #define CSE_DROP 2 // Discard the character | ||
377 | #define CSE_NULL 3 // Replace with a null | ||
378 | #define CSE_MARK 4 // Replace with a 3-character sequence (as Unix) | ||
379 | |||
380 | #define CMD_SET_REPLACEMENT(arg,ch) \ | ||
381 | (((cmdSyntaxPtr)(ct36a))->cmd[1] = (arg), \ | ||
382 | (((cmdSyntaxPtr)(ct36a))->cmd[2] = (ch), \ | ||
383 | (cmdSyntaxPtr)(ct36a)) | ||
384 | |||
385 | #define CSE_REPLACE 0x8 // Replace the errored character with the | ||
386 | // replacement character defined here | ||
387 | |||
388 | #define CSE_STAT_REPLACE 0x18 // Replace the errored character with the | ||
389 | // replacement character defined here AND | ||
390 | // report the error as a status packet (as in | ||
391 | // CSE_ESTAT). | ||
392 | |||
393 | |||
394 | // COMMAND 37, to send flow control packets, is handled only by low-level | ||
395 | // library code in response to data movement and shouldn't ever be sent by the | ||
396 | // user code. See i2pack.h and the body of i2lib.c for details. | ||
397 | |||
398 | // Enable on-board post-processing, using options given in oflag argument. | ||
399 | // Formerly, this command was automatically preceded by a CMD_OPOST_OFF command | ||
400 | // because the loadware does not permit sending back-to-back CMD_OPOST_ON | ||
401 | // commands without an intervening CMD_OPOST_OFF. BUT, WE LEARN 18 MAY 92, that | ||
402 | // CMD_OPOST_ON and CMD_OPOST_OFF must each be at the end of a packet (or in a | ||
403 | // solo packet). This means the caller must specify separately CMD_OPOST_OFF, | ||
404 | // CMD_OPOST_ON(parm) when he calls i2QueueCommands(). That function will ensure | ||
405 | // each gets a separate packet. Extra CMD_OPOST_OFF's are always ok. | ||
406 | // | ||
407 | #define CMD_OPOST_ON(oflag) \ | ||
408 | (*(USHORT *)(((cmdSyntaxPtr)(ct39))->cmd[1]) = (oflag), \ | ||
409 | (cmdSyntaxPtr)(ct39)) | ||
410 | |||
411 | #define CMD_OPOST_OFF (cmdSyntaxPtr)(ct40) // Disable on-board post-proc | ||
412 | |||
413 | #define CMD_RESUME (cmdSyntaxPtr)(ct41) // Resume: behave as though an XON | ||
414 | // were received; | ||
415 | |||
416 | // Set Transmit baud rate (see command 7 for arguments) | ||
417 | // | ||
418 | #define CMD_SETBAUD_TX(arg) \ | ||
419 | (((cmdSyntaxPtr)(ct42))->cmd[1] = (arg),(cmdSyntaxPtr)(ct42)) | ||
420 | |||
421 | // Set Receive baud rate (see command 7 for arguments) | ||
422 | // | ||
423 | #define CMD_SETBAUD_RX(arg) \ | ||
424 | (((cmdSyntaxPtr)(ct43))->cmd[1] = (arg),(cmdSyntaxPtr)(ct43)) | ||
425 | |||
426 | // Request interrupt from board each arg milliseconds. Interrupt will specify | ||
427 | // "received data", even though there may be no data present. If arg == 0, | ||
428 | // disables any such interrupts. | ||
429 | // | ||
430 | #define CMD_PING_REQ(arg) \ | ||
431 | (((cmdSyntaxPtr)(ct44))->cmd[1] = (arg),(cmdSyntaxPtr)(ct44)) | ||
432 | |||
433 | #define CMD_HOT_ENAB (cmdSyntaxPtr)(ct45) // Enable Hot-key checking | ||
434 | #define CMD_HOT_DSAB (cmdSyntaxPtr)(ct46) // Disable Hot-key checking | ||
435 | |||
436 | // COMMAND 47: Send Protocol info via Unix flags: | ||
437 | // iflag = Unix tty t_iflag | ||
438 | // cflag = Unix tty t_cflag | ||
439 | // lflag = Unix tty t_lflag | ||
440 | // See System V Unix/Xenix documentation for the meanings of the bit fields | ||
441 | // within these flags | ||
442 | // | ||
443 | #define CMD_UNIX_FLAGS(iflag,cflag,lflag) i2cmdUnixFlags(iflag,cflag,lflag) | ||
444 | |||
445 | #define CMD_DSRFL_ENAB (cmdSyntaxPtr)(ct48) // Enable DSR receiver ctrl | ||
446 | #define CMD_DSRFL_DSAB (cmdSyntaxPtr)(ct49) // Disable DSR receiver ctrl | ||
447 | #define CMD_DTRFL_ENAB (cmdSyntaxPtr)(ct50) // Enable DTR flow control | ||
448 | #define CMD_DTRFL_DSAB (cmdSyntaxPtr)(ct51) // Disable DTR flow control | ||
449 | #define CMD_BAUD_RESET (cmdSyntaxPtr)(ct52) // Reset baudrate table | ||
450 | |||
451 | // COMMAND 54: Define custom rate #1 | ||
452 | // rate = (short) 1/10 of the desired baud rate | ||
453 | // | ||
454 | #define CMD_BAUD_DEF1(rate) i2cmdBaudDef(1,rate) | ||
455 | |||
456 | // COMMAND 55: Define custom rate #2 | ||
457 | // rate = (short) 1/10 of the desired baud rate | ||
458 | // | ||
459 | #define CMD_BAUD_DEF2(rate) i2cmdBaudDef(2,rate) | ||
460 | |||
461 | // Pause arg hundredths of seconds. (Note, this is NOT milliseconds.) | ||
462 | // | ||
463 | #define CMD_PAUSE(arg) \ | ||
464 | (((cmdSyntaxPtr)(ct56))->cmd[1] = (arg),(cmdSyntaxPtr)(ct56)) | ||
465 | |||
466 | #define CMD_SUSPEND (cmdSyntaxPtr)(ct57) // Suspend output | ||
467 | #define CMD_UNSUSPEND (cmdSyntaxPtr)(ct58) // Un-Suspend output | ||
468 | |||
469 | // Set parity-checking options | ||
470 | // | ||
471 | #define CMD_PARCHK(arg) \ | ||
472 | (((cmdSyntaxPtr)(ct59))->cmd[1] = (arg),(cmdSyntaxPtr)(ct59)) | ||
473 | |||
474 | #define CPK_ENAB 0 // Enable parity checking on input | ||
475 | #define CPK_DSAB 1 // Disable parity checking on input | ||
476 | |||
477 | #define CMD_BMARK_REQ (cmdSyntaxPtr)(ct60) // Bookmark request | ||
478 | |||
479 | |||
480 | // Enable/Disable internal loopback mode | ||
481 | // | ||
482 | #define CMD_INLOOP(arg) \ | ||
483 | (((cmdSyntaxPtr)(ct61))->cmd[1] = (arg),(cmdSyntaxPtr)(ct61)) | ||
484 | |||
485 | #define CIN_DISABLE 0 // Normal operation (default) | ||
486 | #define CIN_ENABLE 1 // Internal (local) loopback | ||
487 | #define CIN_REMOTE 2 // Remote loopback | ||
488 | |||
489 | // Specify timeout for hotkeys: Delay will be (arg x 10) milliseconds, arg == 0 | ||
490 | // --> no timeout: wait forever. | ||
491 | // | ||
492 | #define CMD_HOT_TIME(arg) \ | ||
493 | (((cmdSyntaxPtr)(ct62))->cmd[1] = (arg),(cmdSyntaxPtr)(ct62)) | ||
494 | |||
495 | |||
496 | // Define (outgoing) xon for receive flow control | ||
497 | // | ||
498 | #define CMD_DEF_OXON(arg) \ | ||
499 | (((cmdSyntaxPtr)(ct63))->cmd[1] = (arg),(cmdSyntaxPtr)(ct63)) | ||
500 | |||
501 | // Define (outgoing) xoff for receiver flow control | ||
502 | // | ||
503 | #define CMD_DEF_OXOFF(arg) \ | ||
504 | (((cmdSyntaxPtr)(ct64))->cmd[1] = (arg),(cmdSyntaxPtr)(ct64)) | ||
505 | |||
506 | // Enable/Disable RTS on transmit (1/2 duplex-style) | ||
507 | // | ||
508 | #define CMD_RTS_XMIT(arg) \ | ||
509 | (((cmdSyntaxPtr)(ct65))->cmd[1] = (arg),(cmdSyntaxPtr)(ct65)) | ||
510 | |||
511 | #define CHD_DISABLE 0 | ||
512 | #define CHD_ENABLE 1 | ||
513 | |||
514 | // Set high-water-mark level (debugging use only) | ||
515 | // | ||
516 | #define CMD_SETHIGHWAT(arg) \ | ||
517 | (((cmdSyntaxPtr)(ct66))->cmd[1] = (arg),(cmdSyntaxPtr)(ct66)) | ||
518 | |||
519 | // Start flushing tagged data (tag = 0-14) | ||
520 | // | ||
521 | #define CMD_START_SELFL(tag) \ | ||
522 | (((cmdSyntaxPtr)(ct67))->cmd[1] = (tag),(cmdSyntaxPtr)(ct67)) | ||
523 | |||
524 | // End flushing tagged data (tag = 0-14) | ||
525 | // | ||
526 | #define CMD_END_SELFL(tag) \ | ||
527 | (((cmdSyntaxPtr)(ct68))->cmd[1] = (tag),(cmdSyntaxPtr)(ct68)) | ||
528 | |||
529 | #define CMD_HWFLOW_OFF (cmdSyntaxPtr)(ct69) // Disable HW TX flow control | ||
530 | #define CMD_ODSRFL_ENAB (cmdSyntaxPtr)(ct70) // Enable DSR output f/c | ||
531 | #define CMD_ODSRFL_DSAB (cmdSyntaxPtr)(ct71) // Disable DSR output f/c | ||
532 | #define CMD_ODCDFL_ENAB (cmdSyntaxPtr)(ct72) // Enable DCD output f/c | ||
533 | #define CMD_ODCDFL_DSAB (cmdSyntaxPtr)(ct73) // Disable DCD output f/c | ||
534 | |||
535 | // Set transmit interrupt load level. Count should be an even value 2-12 | ||
536 | // | ||
537 | #define CMD_LOADLEVEL(count) \ | ||
538 | (((cmdSyntaxPtr)(ct74))->cmd[1] = (count),(cmdSyntaxPtr)(ct74)) | ||
539 | |||
540 | // If reporting DSS changes, map to character sequence FFh, 2, MSR | ||
541 | // | ||
542 | #define CMD_STATDATA(arg) \ | ||
543 | (((cmdSyntaxPtr)(ct75))->cmd[1] = (arg),(cmdSyntaxPtr)(ct75)) | ||
544 | |||
545 | #define CSTD_DISABLE// Report DSS changes as status packets only (default) | ||
546 | #define CSTD_ENABLE // Report DSS changes as in-band data sequence as well as | ||
547 | // by status packet. | ||
548 | |||
549 | #define CMD_BREAK_ON (cmdSyntaxPtr)(ct76)// Set break and stop xmit | ||
550 | #define CMD_BREAK_OFF (cmdSyntaxPtr)(ct77)// End break and restart xmit | ||
551 | #define CMD_GETFC (cmdSyntaxPtr)(ct78)// Request for flow control packet | ||
552 | // from board. | ||
553 | |||
554 | // Transmit this character immediately | ||
555 | // | ||
556 | #define CMD_XMIT_NOW(ch) \ | ||
557 | (((cmdSyntaxPtr)(ct79))->cmd[1] = (ch),(cmdSyntaxPtr)(ct79)) | ||
558 | |||
559 | // Set baud rate via "divisor latch" | ||
560 | // | ||
561 | #define CMD_DIVISOR_LATCH(which,value) \ | ||
562 | (((cmdSyntaxPtr)(ct80))->cmd[1] = (which), \ | ||
563 | *(USHORT *)(((cmdSyntaxPtr)(ct80))->cmd[2]) = (value), \ | ||
564 | (cmdSyntaxPtr)(ct80)) | ||
565 | |||
566 | #define CDL_RX 1 // Set receiver rate | ||
567 | #define CDL_TX 2 // Set transmit rate | ||
568 | // (CDL_TX | CDL_RX) Set both rates | ||
569 | |||
570 | // Request for special diagnostic status pkt from the board. | ||
571 | // | ||
572 | #define CMD_GET_STATUS (cmdSyntaxPtr)(ct81) | ||
573 | |||
574 | // Request time-stamped transmit character count packet. | ||
575 | // | ||
576 | #define CMD_GET_TXCNT (cmdSyntaxPtr)(ct82) | ||
577 | |||
578 | // Request time-stamped receive character count packet. | ||
579 | // | ||
580 | #define CMD_GET_RXCNT (cmdSyntaxPtr)(ct83) | ||
581 | |||
582 | // Request for box/board I.D. packet. | ||
583 | #define CMD_GET_BOXIDS (cmdSyntaxPtr)(ct84) | ||
584 | |||
585 | // Enable or disable multiple channels according to bit-mapped ushorts box 1-4 | ||
586 | // | ||
587 | #define CMD_ENAB_MULT(enable, box1, box2, box3, box4) \ | ||
588 | (((cmdSytaxPtr)(ct85))->cmd[1] = (enable), \ | ||
589 | *(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[2]) = (box1), \ | ||
590 | *(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[4]) = (box2), \ | ||
591 | *(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[6]) = (box3), \ | ||
592 | *(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[8]) = (box4), \ | ||
593 | (cmdSyntaxPtr)(ct85)) | ||
594 | |||
595 | #define CEM_DISABLE 0 | ||
596 | #define CEM_ENABLE 1 | ||
597 | |||
598 | // Enable or disable receiver or receiver interrupts (default both enabled) | ||
599 | // | ||
600 | #define CMD_RCV_ENABLE(ch) \ | ||
601 | (((cmdSyntaxPtr)(ct86))->cmd[1] = (ch),(cmdSyntaxPtr)(ct86)) | ||
602 | |||
603 | #define CRE_OFF 0 // Disable the receiver | ||
604 | #define CRE_ON 1 // Enable the receiver | ||
605 | #define CRE_INTOFF 2 // Disable receiver interrupts (to loadware) | ||
606 | #define CRE_INTON 3 // Enable receiver interrupts (to loadware) | ||
607 | |||
608 | // Starts up a hardware test process, which runs transparently, and sends a | ||
609 | // STAT_HWFAIL packet in case a hardware failure is detected. | ||
610 | // | ||
611 | #define CMD_HW_TEST (cmdSyntaxPtr)(ct87) | ||
612 | |||
613 | // Change receiver threshold and timeout value: | ||
614 | // Defaults: timeout = 20mS | ||
615 | // threshold count = 8 when DTRflow not in use, | ||
616 | // threshold count = 5 when DTRflow in use. | ||
617 | // | ||
618 | #define CMD_RCV_THRESHOLD(count,ms) \ | ||
619 | (((cmdSyntaxPtr)(ct88))->cmd[1] = (count), \ | ||
620 | ((cmdSyntaxPtr)(ct88))->cmd[2] = (ms), \ | ||
621 | (cmdSyntaxPtr)(ct88)) | ||
622 | |||
623 | // Makes the loadware report DSS signals for this channel immediately. | ||
624 | // | ||
625 | #define CMD_DSS_NOW (cmdSyntaxPtr)(ct89) | ||
626 | |||
627 | // Set the receive silo parameters | ||
628 | // timeout is ms idle wait until delivery (~VTIME) | ||
629 | // threshold is max characters cause interrupt (~VMIN) | ||
630 | // | ||
631 | #define CMD_SET_SILO(timeout,threshold) \ | ||
632 | (((cmdSyntaxPtr)(ct90))->cmd[1] = (timeout), \ | ||
633 | ((cmdSyntaxPtr)(ct90))->cmd[2] = (threshold), \ | ||
634 | (cmdSyntaxPtr)(ct90)) | ||
635 | |||
636 | // Set timed break in decisecond (1/10s) | ||
637 | // | ||
638 | #define CMD_LBREAK(ds) \ | ||
639 | (((cmdSyntaxPtr)(ct91))->cmd[1] = (ds),(cmdSyntaxPtr)(ct66)) | ||
640 | |||
641 | |||
642 | |||
643 | #endif // I2CMD_H | ||
diff --git a/drivers/char/ip2/i2ellis.c b/drivers/char/ip2/i2ellis.c new file mode 100644 index 000000000000..f834d05ccc97 --- /dev/null +++ b/drivers/char/ip2/i2ellis.c | |||
@@ -0,0 +1,1487 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Low-level interface code for the device driver | ||
12 | * (This is included source code, not a separate compilation | ||
13 | * module.) | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | //--------------------------------------------- | ||
17 | // Function declarations private to this module | ||
18 | //--------------------------------------------- | ||
19 | // Functions called only indirectly through i2eBordStr entries. | ||
20 | |||
21 | static int iiWriteBuf16(i2eBordStrPtr, unsigned char *, int); | ||
22 | static int iiWriteBuf8(i2eBordStrPtr, unsigned char *, int); | ||
23 | static int iiReadBuf16(i2eBordStrPtr, unsigned char *, int); | ||
24 | static int iiReadBuf8(i2eBordStrPtr, unsigned char *, int); | ||
25 | |||
26 | static unsigned short iiReadWord16(i2eBordStrPtr); | ||
27 | static unsigned short iiReadWord8(i2eBordStrPtr); | ||
28 | static void iiWriteWord16(i2eBordStrPtr, unsigned short); | ||
29 | static void iiWriteWord8(i2eBordStrPtr, unsigned short); | ||
30 | |||
31 | static int iiWaitForTxEmptyII(i2eBordStrPtr, int); | ||
32 | static int iiWaitForTxEmptyIIEX(i2eBordStrPtr, int); | ||
33 | static int iiTxMailEmptyII(i2eBordStrPtr); | ||
34 | static int iiTxMailEmptyIIEX(i2eBordStrPtr); | ||
35 | static int iiTrySendMailII(i2eBordStrPtr, unsigned char); | ||
36 | static int iiTrySendMailIIEX(i2eBordStrPtr, unsigned char); | ||
37 | |||
38 | static unsigned short iiGetMailII(i2eBordStrPtr); | ||
39 | static unsigned short iiGetMailIIEX(i2eBordStrPtr); | ||
40 | |||
41 | static void iiEnableMailIrqII(i2eBordStrPtr); | ||
42 | static void iiEnableMailIrqIIEX(i2eBordStrPtr); | ||
43 | static void iiWriteMaskII(i2eBordStrPtr, unsigned char); | ||
44 | static void iiWriteMaskIIEX(i2eBordStrPtr, unsigned char); | ||
45 | |||
46 | static void ii2DelayTimer(unsigned int); | ||
47 | static void ii2DelayWakeup(unsigned long id); | ||
48 | static void ii2Nop(void); | ||
49 | |||
50 | //*************** | ||
51 | //* Static Data * | ||
52 | //*************** | ||
53 | |||
54 | static int ii2Safe; // Safe I/O address for delay routine | ||
55 | |||
56 | static int iiDelayed; // Set when the iiResetDelay function is | ||
57 | // called. Cleared when ANY board is reset. | ||
58 | static struct timer_list * pDelayTimer; // Used by iiDelayTimer | ||
59 | static wait_queue_head_t pDelayWait; // Used by iiDelayTimer | ||
60 | static rwlock_t Dl_spinlock; | ||
61 | |||
62 | //******** | ||
63 | //* Code * | ||
64 | //******** | ||
65 | |||
66 | //======================================================= | ||
67 | // Initialization Routines | ||
68 | // | ||
69 | // iiSetAddress | ||
70 | // iiReset | ||
71 | // iiResetDelay | ||
72 | // iiInitialize | ||
73 | //======================================================= | ||
74 | |||
75 | //****************************************************************************** | ||
76 | // Function: iiEllisInit() | ||
77 | // Parameters: None | ||
78 | // | ||
79 | // Returns: Nothing | ||
80 | // | ||
81 | // Description: | ||
82 | // | ||
83 | // This routine performs any required initialization of the iiEllis subsystem. | ||
84 | // | ||
85 | //****************************************************************************** | ||
86 | static void | ||
87 | iiEllisInit(void) | ||
88 | { | ||
89 | pDelayTimer = kmalloc ( sizeof (struct timer_list), GFP_KERNEL ); | ||
90 | init_timer(pDelayTimer); | ||
91 | init_waitqueue_head(&pDelayWait); | ||
92 | LOCK_INIT(&Dl_spinlock); | ||
93 | } | ||
94 | |||
95 | //****************************************************************************** | ||
96 | // Function: iiEllisCleanup() | ||
97 | // Parameters: None | ||
98 | // | ||
99 | // Returns: Nothing | ||
100 | // | ||
101 | // Description: | ||
102 | // | ||
103 | // This routine performs any required cleanup of the iiEllis subsystem. | ||
104 | // | ||
105 | //****************************************************************************** | ||
106 | static void | ||
107 | iiEllisCleanup(void) | ||
108 | { | ||
109 | if ( pDelayTimer != NULL ) { | ||
110 | kfree ( pDelayTimer ); | ||
111 | } | ||
112 | } | ||
113 | |||
114 | //****************************************************************************** | ||
115 | // Function: iiSetAddress(pB, address, delay) | ||
116 | // Parameters: pB - pointer to the board structure | ||
117 | // address - the purported I/O address of the board | ||
118 | // delay - pointer to the 1-ms delay function to use | ||
119 | // in this and any future operations to this board | ||
120 | // | ||
121 | // Returns: True if everything appears copacetic. | ||
122 | // False if there is any error: the pB->i2eError field has the error | ||
123 | // | ||
124 | // Description: | ||
125 | // | ||
126 | // This routine (roughly) checks for address validity, sets the i2eValid OK and | ||
127 | // sets the state to II_STATE_COLD which means that we haven't even sent a reset | ||
128 | // yet. | ||
129 | // | ||
130 | //****************************************************************************** | ||
131 | static int | ||
132 | iiSetAddress( i2eBordStrPtr pB, int address, delayFunc_t delay ) | ||
133 | { | ||
134 | // Should any failure occur before init is finished... | ||
135 | pB->i2eValid = I2E_INCOMPLETE; | ||
136 | |||
137 | // Cannot check upper limit except extremely: Might be microchannel | ||
138 | // Address must be on an 8-byte boundary | ||
139 | |||
140 | if ((unsigned int)address <= 0x100 | ||
141 | || (unsigned int)address >= 0xfff8 | ||
142 | || (address & 0x7) | ||
143 | ) | ||
144 | { | ||
145 | COMPLETE(pB,I2EE_BADADDR); | ||
146 | } | ||
147 | |||
148 | // Initialize accelerators | ||
149 | pB->i2eBase = address; | ||
150 | pB->i2eData = address + FIFO_DATA; | ||
151 | pB->i2eStatus = address + FIFO_STATUS; | ||
152 | pB->i2ePointer = address + FIFO_PTR; | ||
153 | pB->i2eXMail = address + FIFO_MAIL; | ||
154 | pB->i2eXMask = address + FIFO_MASK; | ||
155 | |||
156 | // Initialize i/o address for ii2DelayIO | ||
157 | ii2Safe = address + FIFO_NOP; | ||
158 | |||
159 | // Initialize the delay routine | ||
160 | pB->i2eDelay = ((delay != (delayFunc_t)NULL) ? delay : (delayFunc_t)ii2Nop); | ||
161 | |||
162 | pB->i2eValid = I2E_MAGIC; | ||
163 | pB->i2eState = II_STATE_COLD; | ||
164 | |||
165 | COMPLETE(pB, I2EE_GOOD); | ||
166 | } | ||
167 | |||
168 | //****************************************************************************** | ||
169 | // Function: iiReset(pB) | ||
170 | // Parameters: pB - pointer to the board structure | ||
171 | // | ||
172 | // Returns: True if everything appears copacetic. | ||
173 | // False if there is any error: the pB->i2eError field has the error | ||
174 | // | ||
175 | // Description: | ||
176 | // | ||
177 | // Attempts to reset the board (see also i2hw.h). Normally, we would use this to | ||
178 | // reset a board immediately after iiSetAddress(), but it is valid to reset a | ||
179 | // board from any state, say, in order to change or re-load loadware. (Under | ||
180 | // such circumstances, no reason to re-run iiSetAddress(), which is why it is a | ||
181 | // separate routine and not included in this routine. | ||
182 | // | ||
183 | //****************************************************************************** | ||
184 | static int | ||
185 | iiReset(i2eBordStrPtr pB) | ||
186 | { | ||
187 | // Magic number should be set, else even the address is suspect | ||
188 | if (pB->i2eValid != I2E_MAGIC) | ||
189 | { | ||
190 | COMPLETE(pB, I2EE_BADMAGIC); | ||
191 | } | ||
192 | |||
193 | OUTB(pB->i2eBase + FIFO_RESET, 0); // Any data will do | ||
194 | iiDelay(pB, 50); // Pause between resets | ||
195 | OUTB(pB->i2eBase + FIFO_RESET, 0); // Second reset | ||
196 | |||
197 | // We must wait before even attempting to read anything from the FIFO: the | ||
198 | // board's P.O.S.T may actually attempt to read and write its end of the | ||
199 | // FIFO in order to check flags, loop back (where supported), etc. On | ||
200 | // completion of this testing it would reset the FIFO, and on completion | ||
201 | // of all // P.O.S.T., write the message. We must not mistake data which | ||
202 | // might have been sent for testing as part of the reset message. To | ||
203 | // better utilize time, say, when resetting several boards, we allow the | ||
204 | // delay to be performed externally; in this way the caller can reset | ||
205 | // several boards, delay a single time, then call the initialization | ||
206 | // routine for all. | ||
207 | |||
208 | pB->i2eState = II_STATE_RESET; | ||
209 | |||
210 | iiDelayed = 0; // i.e., the delay routine hasn't been called since the most | ||
211 | // recent reset. | ||
212 | |||
213 | // Ensure anything which would have been of use to standard loadware is | ||
214 | // blanked out, since board has now forgotten everything!. | ||
215 | |||
216 | pB->i2eUsingIrq = IRQ_UNDEFINED; // Not set up to use an interrupt yet | ||
217 | pB->i2eWaitingForEmptyFifo = 0; | ||
218 | pB->i2eOutMailWaiting = 0; | ||
219 | pB->i2eChannelPtr = NULL; | ||
220 | pB->i2eChannelCnt = 0; | ||
221 | |||
222 | pB->i2eLeadoffWord[0] = 0; | ||
223 | pB->i2eFifoInInts = 0; | ||
224 | pB->i2eFifoOutInts = 0; | ||
225 | pB->i2eFatalTrap = NULL; | ||
226 | pB->i2eFatal = 0; | ||
227 | |||
228 | COMPLETE(pB, I2EE_GOOD); | ||
229 | } | ||
230 | |||
231 | //****************************************************************************** | ||
232 | // Function: iiResetDelay(pB) | ||
233 | // Parameters: pB - pointer to the board structure | ||
234 | // | ||
235 | // Returns: True if everything appears copacetic. | ||
236 | // False if there is any error: the pB->i2eError field has the error | ||
237 | // | ||
238 | // Description: | ||
239 | // | ||
240 | // Using the delay defined in board structure, waits two seconds (for board to | ||
241 | // reset). | ||
242 | // | ||
243 | //****************************************************************************** | ||
244 | static int | ||
245 | iiResetDelay(i2eBordStrPtr pB) | ||
246 | { | ||
247 | if (pB->i2eValid != I2E_MAGIC) { | ||
248 | COMPLETE(pB, I2EE_BADMAGIC); | ||
249 | } | ||
250 | if (pB->i2eState != II_STATE_RESET) { | ||
251 | COMPLETE(pB, I2EE_BADSTATE); | ||
252 | } | ||
253 | iiDelay(pB,2000); /* Now we wait for two seconds. */ | ||
254 | iiDelayed = 1; /* Delay has been called: ok to initialize */ | ||
255 | COMPLETE(pB, I2EE_GOOD); | ||
256 | } | ||
257 | |||
258 | //****************************************************************************** | ||
259 | // Function: iiInitialize(pB) | ||
260 | // Parameters: pB - pointer to the board structure | ||
261 | // | ||
262 | // Returns: True if everything appears copacetic. | ||
263 | // False if there is any error: the pB->i2eError field has the error | ||
264 | // | ||
265 | // Description: | ||
266 | // | ||
267 | // Attempts to read the Power-on reset message. Initializes any remaining fields | ||
268 | // in the pB structure. | ||
269 | // | ||
270 | // This should be called as the third step of a process beginning with | ||
271 | // iiReset(), then iiResetDelay(). This routine checks to see that the structure | ||
272 | // is "valid" and in the reset state, also confirms that the delay routine has | ||
273 | // been called since the latest reset (to any board! overly strong!). | ||
274 | // | ||
275 | //****************************************************************************** | ||
276 | static int | ||
277 | iiInitialize(i2eBordStrPtr pB) | ||
278 | { | ||
279 | int itemp; | ||
280 | unsigned char c; | ||
281 | unsigned short utemp; | ||
282 | unsigned int ilimit; | ||
283 | |||
284 | if (pB->i2eValid != I2E_MAGIC) | ||
285 | { | ||
286 | COMPLETE(pB, I2EE_BADMAGIC); | ||
287 | } | ||
288 | |||
289 | if (pB->i2eState != II_STATE_RESET || !iiDelayed) | ||
290 | { | ||
291 | COMPLETE(pB, I2EE_BADSTATE); | ||
292 | } | ||
293 | |||
294 | // In case there is a failure short of our completely reading the power-up | ||
295 | // message. | ||
296 | pB->i2eValid = I2E_INCOMPLETE; | ||
297 | |||
298 | |||
299 | // Now attempt to read the message. | ||
300 | |||
301 | for (itemp = 0; itemp < sizeof(porStr); itemp++) | ||
302 | { | ||
303 | // We expect the entire message is ready. | ||
304 | if (HAS_NO_INPUT(pB)) | ||
305 | { | ||
306 | pB->i2ePomSize = itemp; | ||
307 | COMPLETE(pB, I2EE_PORM_SHORT); | ||
308 | } | ||
309 | |||
310 | pB->i2ePom.c[itemp] = c = BYTE_FROM(pB); | ||
311 | |||
312 | // We check the magic numbers as soon as they are supposed to be read | ||
313 | // (rather than after) to minimize effect of reading something we | ||
314 | // already suspect can't be "us". | ||
315 | if ( (itemp == POR_1_INDEX && c != POR_MAGIC_1) || | ||
316 | (itemp == POR_2_INDEX && c != POR_MAGIC_2)) | ||
317 | { | ||
318 | pB->i2ePomSize = itemp+1; | ||
319 | COMPLETE(pB, I2EE_BADMAGIC); | ||
320 | } | ||
321 | } | ||
322 | |||
323 | pB->i2ePomSize = itemp; | ||
324 | |||
325 | // Ensure that this was all the data... | ||
326 | if (HAS_INPUT(pB)) | ||
327 | COMPLETE(pB, I2EE_PORM_LONG); | ||
328 | |||
329 | // For now, we'll fail to initialize if P.O.S.T reports bad chip mapper: | ||
330 | // Implying we will not be able to download any code either: That's ok: the | ||
331 | // condition is pretty explicit. | ||
332 | if (pB->i2ePom.e.porDiag1 & POR_BAD_MAPPER) | ||
333 | { | ||
334 | COMPLETE(pB, I2EE_POSTERR); | ||
335 | } | ||
336 | |||
337 | // Determine anything which must be done differently depending on the family | ||
338 | // of boards! | ||
339 | switch (pB->i2ePom.e.porID & POR_ID_FAMILY) | ||
340 | { | ||
341 | case POR_ID_FII: // IntelliPort-II | ||
342 | |||
343 | pB->i2eFifoStyle = FIFO_II; | ||
344 | pB->i2eFifoSize = 512; // 512 bytes, always | ||
345 | pB->i2eDataWidth16 = NO; | ||
346 | |||
347 | pB->i2eMaxIrq = 15; // Because board cannot tell us it is in an 8-bit | ||
348 | // slot, we do allow it to be done (documentation!) | ||
349 | |||
350 | pB->i2eGoodMap[1] = | ||
351 | pB->i2eGoodMap[2] = | ||
352 | pB->i2eGoodMap[3] = | ||
353 | pB->i2eChannelMap[1] = | ||
354 | pB->i2eChannelMap[2] = | ||
355 | pB->i2eChannelMap[3] = 0; | ||
356 | |||
357 | switch (pB->i2ePom.e.porID & POR_ID_SIZE) | ||
358 | { | ||
359 | case POR_ID_II_4: | ||
360 | pB->i2eGoodMap[0] = | ||
361 | pB->i2eChannelMap[0] = 0x0f; // four-port | ||
362 | |||
363 | // Since porPorts1 is based on the Hardware ID register, the numbers | ||
364 | // should always be consistent for IntelliPort-II. Ditto below... | ||
365 | if (pB->i2ePom.e.porPorts1 != 4) | ||
366 | { | ||
367 | COMPLETE(pB, I2EE_INCONSIST); | ||
368 | } | ||
369 | break; | ||
370 | |||
371 | case POR_ID_II_8: | ||
372 | case POR_ID_II_8R: | ||
373 | pB->i2eGoodMap[0] = | ||
374 | pB->i2eChannelMap[0] = 0xff; // Eight port | ||
375 | if (pB->i2ePom.e.porPorts1 != 8) | ||
376 | { | ||
377 | COMPLETE(pB, I2EE_INCONSIST); | ||
378 | } | ||
379 | break; | ||
380 | |||
381 | case POR_ID_II_6: | ||
382 | pB->i2eGoodMap[0] = | ||
383 | pB->i2eChannelMap[0] = 0x3f; // Six Port | ||
384 | if (pB->i2ePom.e.porPorts1 != 6) | ||
385 | { | ||
386 | COMPLETE(pB, I2EE_INCONSIST); | ||
387 | } | ||
388 | break; | ||
389 | } | ||
390 | |||
391 | // Fix up the "good channel list based on any errors reported. | ||
392 | if (pB->i2ePom.e.porDiag1 & POR_BAD_UART1) | ||
393 | { | ||
394 | pB->i2eGoodMap[0] &= ~0x0f; | ||
395 | } | ||
396 | |||
397 | if (pB->i2ePom.e.porDiag1 & POR_BAD_UART2) | ||
398 | { | ||
399 | pB->i2eGoodMap[0] &= ~0xf0; | ||
400 | } | ||
401 | |||
402 | break; // POR_ID_FII case | ||
403 | |||
404 | case POR_ID_FIIEX: // IntelliPort-IIEX | ||
405 | |||
406 | pB->i2eFifoStyle = FIFO_IIEX; | ||
407 | |||
408 | itemp = pB->i2ePom.e.porFifoSize; | ||
409 | |||
410 | // Implicit assumption that fifo would not grow beyond 32k, | ||
411 | // nor would ever be less than 256. | ||
412 | |||
413 | if (itemp < 8 || itemp > 15) | ||
414 | { | ||
415 | COMPLETE(pB, I2EE_INCONSIST); | ||
416 | } | ||
417 | pB->i2eFifoSize = (1 << itemp); | ||
418 | |||
419 | // These are based on what P.O.S.T thinks should be there, based on | ||
420 | // box ID registers | ||
421 | ilimit = pB->i2ePom.e.porNumBoxes; | ||
422 | if (ilimit > ABS_MAX_BOXES) | ||
423 | { | ||
424 | ilimit = ABS_MAX_BOXES; | ||
425 | } | ||
426 | |||
427 | // For as many boxes as EXIST, gives the type of box. | ||
428 | // Added 8/6/93: check for the ISA-4 (asic) which looks like an | ||
429 | // expandable but for whom "8 or 16?" is not the right question. | ||
430 | |||
431 | utemp = pB->i2ePom.e.porFlags; | ||
432 | if (utemp & POR_CEX4) | ||
433 | { | ||
434 | pB->i2eChannelMap[0] = 0x000f; | ||
435 | } else { | ||
436 | utemp &= POR_BOXES; | ||
437 | for (itemp = 0; itemp < ilimit; itemp++) | ||
438 | { | ||
439 | pB->i2eChannelMap[itemp] = | ||
440 | ((utemp & POR_BOX_16) ? 0xffff : 0x00ff); | ||
441 | utemp >>= 1; | ||
442 | } | ||
443 | } | ||
444 | |||
445 | // These are based on what P.O.S.T actually found. | ||
446 | |||
447 | utemp = (pB->i2ePom.e.porPorts2 << 8) + pB->i2ePom.e.porPorts1; | ||
448 | |||
449 | for (itemp = 0; itemp < ilimit; itemp++) | ||
450 | { | ||
451 | pB->i2eGoodMap[itemp] = 0; | ||
452 | if (utemp & 1) pB->i2eGoodMap[itemp] |= 0x000f; | ||
453 | if (utemp & 2) pB->i2eGoodMap[itemp] |= 0x00f0; | ||
454 | if (utemp & 4) pB->i2eGoodMap[itemp] |= 0x0f00; | ||
455 | if (utemp & 8) pB->i2eGoodMap[itemp] |= 0xf000; | ||
456 | utemp >>= 4; | ||
457 | } | ||
458 | |||
459 | // Now determine whether we should transfer in 8 or 16-bit mode. | ||
460 | switch (pB->i2ePom.e.porBus & (POR_BUS_SLOT16 | POR_BUS_DIP16) ) | ||
461 | { | ||
462 | case POR_BUS_SLOT16 | POR_BUS_DIP16: | ||
463 | pB->i2eDataWidth16 = YES; | ||
464 | pB->i2eMaxIrq = 15; | ||
465 | break; | ||
466 | |||
467 | case POR_BUS_SLOT16: | ||
468 | pB->i2eDataWidth16 = NO; | ||
469 | pB->i2eMaxIrq = 15; | ||
470 | break; | ||
471 | |||
472 | case 0: | ||
473 | case POR_BUS_DIP16: // In an 8-bit slot, DIP switch don't care. | ||
474 | default: | ||
475 | pB->i2eDataWidth16 = NO; | ||
476 | pB->i2eMaxIrq = 7; | ||
477 | break; | ||
478 | } | ||
479 | break; // POR_ID_FIIEX case | ||
480 | |||
481 | default: // Unknown type of board | ||
482 | COMPLETE(pB, I2EE_BAD_FAMILY); | ||
483 | break; | ||
484 | } // End the switch based on family | ||
485 | |||
486 | // Temporarily, claim there is no room in the outbound fifo. | ||
487 | // We will maintain this whenever we check for an empty outbound FIFO. | ||
488 | pB->i2eFifoRemains = 0; | ||
489 | |||
490 | // Now, based on the bus type, should we expect to be able to re-configure | ||
491 | // interrupts (say, for testing purposes). | ||
492 | switch (pB->i2ePom.e.porBus & POR_BUS_TYPE) | ||
493 | { | ||
494 | case POR_BUS_T_ISA: | ||
495 | case POR_BUS_T_UNK: // If the type of bus is undeclared, assume ok. | ||
496 | pB->i2eChangeIrq = YES; | ||
497 | break; | ||
498 | case POR_BUS_T_MCA: | ||
499 | case POR_BUS_T_EISA: | ||
500 | pB->i2eChangeIrq = NO; | ||
501 | break; | ||
502 | default: | ||
503 | COMPLETE(pB, I2EE_BADBUS); | ||
504 | } | ||
505 | |||
506 | if (pB->i2eDataWidth16 == YES) | ||
507 | { | ||
508 | pB->i2eWriteBuf = iiWriteBuf16; | ||
509 | pB->i2eReadBuf = iiReadBuf16; | ||
510 | pB->i2eWriteWord = iiWriteWord16; | ||
511 | pB->i2eReadWord = iiReadWord16; | ||
512 | } else { | ||
513 | pB->i2eWriteBuf = iiWriteBuf8; | ||
514 | pB->i2eReadBuf = iiReadBuf8; | ||
515 | pB->i2eWriteWord = iiWriteWord8; | ||
516 | pB->i2eReadWord = iiReadWord8; | ||
517 | } | ||
518 | |||
519 | switch(pB->i2eFifoStyle) | ||
520 | { | ||
521 | case FIFO_II: | ||
522 | pB->i2eWaitForTxEmpty = iiWaitForTxEmptyII; | ||
523 | pB->i2eTxMailEmpty = iiTxMailEmptyII; | ||
524 | pB->i2eTrySendMail = iiTrySendMailII; | ||
525 | pB->i2eGetMail = iiGetMailII; | ||
526 | pB->i2eEnableMailIrq = iiEnableMailIrqII; | ||
527 | pB->i2eWriteMask = iiWriteMaskII; | ||
528 | |||
529 | break; | ||
530 | |||
531 | case FIFO_IIEX: | ||
532 | pB->i2eWaitForTxEmpty = iiWaitForTxEmptyIIEX; | ||
533 | pB->i2eTxMailEmpty = iiTxMailEmptyIIEX; | ||
534 | pB->i2eTrySendMail = iiTrySendMailIIEX; | ||
535 | pB->i2eGetMail = iiGetMailIIEX; | ||
536 | pB->i2eEnableMailIrq = iiEnableMailIrqIIEX; | ||
537 | pB->i2eWriteMask = iiWriteMaskIIEX; | ||
538 | |||
539 | break; | ||
540 | |||
541 | default: | ||
542 | COMPLETE(pB, I2EE_INCONSIST); | ||
543 | } | ||
544 | |||
545 | // Initialize state information. | ||
546 | pB->i2eState = II_STATE_READY; // Ready to load loadware. | ||
547 | |||
548 | // Some Final cleanup: | ||
549 | // For some boards, the bootstrap firmware may perform some sort of test | ||
550 | // resulting in a stray character pending in the incoming mailbox. If one is | ||
551 | // there, it should be read and discarded, especially since for the standard | ||
552 | // firmware, it's the mailbox that interrupts the host. | ||
553 | |||
554 | pB->i2eStartMail = iiGetMail(pB); | ||
555 | |||
556 | // Throw it away and clear the mailbox structure element | ||
557 | pB->i2eStartMail = NO_MAIL_HERE; | ||
558 | |||
559 | // Everything is ok now, return with good status/ | ||
560 | |||
561 | pB->i2eValid = I2E_MAGIC; | ||
562 | COMPLETE(pB, I2EE_GOOD); | ||
563 | } | ||
564 | |||
565 | //======================================================= | ||
566 | // Delay Routines | ||
567 | // | ||
568 | // iiDelayIO | ||
569 | // iiNop | ||
570 | //======================================================= | ||
571 | |||
572 | static void | ||
573 | ii2DelayWakeup(unsigned long id) | ||
574 | { | ||
575 | wake_up_interruptible ( &pDelayWait ); | ||
576 | } | ||
577 | |||
578 | //****************************************************************************** | ||
579 | // Function: ii2DelayTimer(mseconds) | ||
580 | // Parameters: mseconds - number of milliseconds to delay | ||
581 | // | ||
582 | // Returns: Nothing | ||
583 | // | ||
584 | // Description: | ||
585 | // | ||
586 | // This routine delays for approximately mseconds milliseconds and is intended | ||
587 | // to be called indirectly through i2Delay field in i2eBordStr. It uses the | ||
588 | // Linux timer_list mechanism. | ||
589 | // | ||
590 | // The Linux timers use a unit called "jiffies" which are 10mS in the Intel | ||
591 | // architecture. This function rounds the delay period up to the next "jiffy". | ||
592 | // In the Alpha architecture the "jiffy" is 1mS, but this driver is not intended | ||
593 | // for Alpha platforms at this time. | ||
594 | // | ||
595 | //****************************************************************************** | ||
596 | static void | ||
597 | ii2DelayTimer(unsigned int mseconds) | ||
598 | { | ||
599 | wait_queue_t wait; | ||
600 | |||
601 | init_waitqueue_entry(&wait, current); | ||
602 | |||
603 | init_timer ( pDelayTimer ); | ||
604 | |||
605 | add_wait_queue(&pDelayWait, &wait); | ||
606 | |||
607 | set_current_state( TASK_INTERRUPTIBLE ); | ||
608 | |||
609 | pDelayTimer->expires = jiffies + ( mseconds + 9 ) / 10; | ||
610 | pDelayTimer->function = ii2DelayWakeup; | ||
611 | pDelayTimer->data = 0; | ||
612 | |||
613 | add_timer ( pDelayTimer ); | ||
614 | |||
615 | schedule(); | ||
616 | |||
617 | set_current_state( TASK_RUNNING ); | ||
618 | remove_wait_queue(&pDelayWait, &wait); | ||
619 | |||
620 | del_timer ( pDelayTimer ); | ||
621 | } | ||
622 | |||
623 | #if 0 | ||
624 | //static void ii2DelayIO(unsigned int); | ||
625 | //****************************************************************************** | ||
626 | // !!! Not Used, this is DOS crap, some of you young folks may be interested in | ||
627 | // in how things were done in the stone age of caculating machines !!! | ||
628 | // Function: ii2DelayIO(mseconds) | ||
629 | // Parameters: mseconds - number of milliseconds to delay | ||
630 | // | ||
631 | // Returns: Nothing | ||
632 | // | ||
633 | // Description: | ||
634 | // | ||
635 | // This routine delays for approximately mseconds milliseconds and is intended | ||
636 | // to be called indirectly through i2Delay field in i2eBordStr. It is intended | ||
637 | // for use where a clock-based function is impossible: for example, DOS drivers. | ||
638 | // | ||
639 | // This function uses the IN instruction to place bounds on the timing and | ||
640 | // assumes that ii2Safe has been set. This is because I/O instructions are not | ||
641 | // subject to caching and will therefore take a certain minimum time. To ensure | ||
642 | // the delay is at least long enough on fast machines, it is based on some | ||
643 | // fastest-case calculations. On slower machines this may cause VERY long | ||
644 | // delays. (3 x fastest case). In the fastest case, everything is cached except | ||
645 | // the I/O instruction itself. | ||
646 | // | ||
647 | // Timing calculations: | ||
648 | // The fastest bus speed for I/O operations is likely to be 10 MHz. The I/O | ||
649 | // operation in question is a byte operation to an odd address. For 8-bit | ||
650 | // operations, the architecture generally enforces two wait states. At 10 MHz, a | ||
651 | // single cycle time is 100nS. A read operation at two wait states takes 6 | ||
652 | // cycles for a total time of 600nS. Therefore approximately 1666 iterations | ||
653 | // would be required to generate a single millisecond delay. The worst | ||
654 | // (reasonable) case would be an 8MHz system with no cacheing. In this case, the | ||
655 | // I/O instruction would take 125nS x 6 cyles = 750 nS. More importantly, code | ||
656 | // fetch of other instructions in the loop would take time (zero wait states, | ||
657 | // however) and would be hard to estimate. This is minimized by using in-line | ||
658 | // assembler for the in inner loop of IN instructions. This consists of just a | ||
659 | // few bytes. So we'll guess about four code fetches per loop. Each code fetch | ||
660 | // should take four cycles, so we have 125nS * 8 = 1000nS. Worst case then is | ||
661 | // that what should have taken 1 mS takes instead 1666 * (1750) = 2.9 mS. | ||
662 | // | ||
663 | // So much for theoretical timings: results using 1666 value on some actual | ||
664 | // machines: | ||
665 | // IBM 286 6MHz 3.15 mS | ||
666 | // Zenith 386 33MHz 2.45 mS | ||
667 | // (brandX) 386 33MHz 1.90 mS (has cache) | ||
668 | // (brandY) 486 33MHz 2.35 mS | ||
669 | // NCR 486 ?? 1.65 mS (microchannel) | ||
670 | // | ||
671 | // For most machines, it is probably safe to scale this number back (remember, | ||
672 | // for robust operation use an actual timed delay if possible), so we are using | ||
673 | // a value of 1190. This yields 1.17 mS for the fastest machine in our sample, | ||
674 | // 1.75 mS for typical 386 machines, and 2.25 mS the absolute slowest machine. | ||
675 | // | ||
676 | // 1/29/93: | ||
677 | // The above timings are too slow. Actual cycle times might be faster. ISA cycle | ||
678 | // times could approach 500 nS, and ... | ||
679 | // The IBM model 77 being microchannel has no wait states for 8-bit reads and | ||
680 | // seems to be accessing the I/O at 440 nS per access (from start of one to | ||
681 | // start of next). This would imply we need 1000/.440 = 2272 iterations to | ||
682 | // guarantee we are fast enough. In actual testing, we see that 2 * 1190 are in | ||
683 | // fact enough. For diagnostics, we keep the level at 1190, but developers note | ||
684 | // this needs tuning. | ||
685 | // | ||
686 | // Safe assumption: 2270 i/o reads = 1 millisecond | ||
687 | // | ||
688 | //****************************************************************************** | ||
689 | |||
690 | |||
691 | static int ii2DelValue = 1190; // See timing calculations below | ||
692 | // 1666 for fastest theoretical machine | ||
693 | // 1190 safe for most fast 386 machines | ||
694 | // 1000 for fastest machine tested here | ||
695 | // 540 (sic) for AT286/6Mhz | ||
696 | static void | ||
697 | ii2DelayIO(unsigned int mseconds) | ||
698 | { | ||
699 | if (!ii2Safe) | ||
700 | return; /* Do nothing if this variable uninitialized */ | ||
701 | |||
702 | while(mseconds--) { | ||
703 | int i = ii2DelValue; | ||
704 | while ( i-- ) { | ||
705 | INB ( ii2Safe ); | ||
706 | } | ||
707 | } | ||
708 | } | ||
709 | #endif | ||
710 | |||
711 | //****************************************************************************** | ||
712 | // Function: ii2Nop() | ||
713 | // Parameters: None | ||
714 | // | ||
715 | // Returns: Nothing | ||
716 | // | ||
717 | // Description: | ||
718 | // | ||
719 | // iiInitialize will set i2eDelay to this if the delay parameter is NULL. This | ||
720 | // saves checking for a NULL pointer at every call. | ||
721 | //****************************************************************************** | ||
722 | static void | ||
723 | ii2Nop(void) | ||
724 | { | ||
725 | return; // no mystery here | ||
726 | } | ||
727 | |||
728 | //======================================================= | ||
729 | // Routines which are available in 8/16-bit versions, or | ||
730 | // in different fifo styles. These are ALL called | ||
731 | // indirectly through the board structure. | ||
732 | //======================================================= | ||
733 | |||
734 | //****************************************************************************** | ||
735 | // Function: iiWriteBuf16(pB, address, count) | ||
736 | // Parameters: pB - pointer to board structure | ||
737 | // address - address of data to write | ||
738 | // count - number of data bytes to write | ||
739 | // | ||
740 | // Returns: True if everything appears copacetic. | ||
741 | // False if there is any error: the pB->i2eError field has the error | ||
742 | // | ||
743 | // Description: | ||
744 | // | ||
745 | // Writes 'count' bytes from 'address' to the data fifo specified by the board | ||
746 | // structure pointer pB. Should count happen to be odd, an extra pad byte is | ||
747 | // sent (identity unknown...). Uses 16-bit (word) operations. Is called | ||
748 | // indirectly through pB->i2eWriteBuf. | ||
749 | // | ||
750 | //****************************************************************************** | ||
751 | static int | ||
752 | iiWriteBuf16(i2eBordStrPtr pB, unsigned char *address, int count) | ||
753 | { | ||
754 | // Rudimentary sanity checking here. | ||
755 | if (pB->i2eValid != I2E_MAGIC) | ||
756 | COMPLETE(pB, I2EE_INVALID); | ||
757 | |||
758 | OUTSW ( pB->i2eData, address, count); | ||
759 | |||
760 | COMPLETE(pB, I2EE_GOOD); | ||
761 | } | ||
762 | |||
763 | //****************************************************************************** | ||
764 | // Function: iiWriteBuf8(pB, address, count) | ||
765 | // Parameters: pB - pointer to board structure | ||
766 | // address - address of data to write | ||
767 | // count - number of data bytes to write | ||
768 | // | ||
769 | // Returns: True if everything appears copacetic. | ||
770 | // False if there is any error: the pB->i2eError field has the error | ||
771 | // | ||
772 | // Description: | ||
773 | // | ||
774 | // Writes 'count' bytes from 'address' to the data fifo specified by the board | ||
775 | // structure pointer pB. Should count happen to be odd, an extra pad byte is | ||
776 | // sent (identity unknown...). This is to be consistent with the 16-bit version. | ||
777 | // Uses 8-bit (byte) operations. Is called indirectly through pB->i2eWriteBuf. | ||
778 | // | ||
779 | //****************************************************************************** | ||
780 | static int | ||
781 | iiWriteBuf8(i2eBordStrPtr pB, unsigned char *address, int count) | ||
782 | { | ||
783 | /* Rudimentary sanity checking here */ | ||
784 | if (pB->i2eValid != I2E_MAGIC) | ||
785 | COMPLETE(pB, I2EE_INVALID); | ||
786 | |||
787 | OUTSB ( pB->i2eData, address, count ); | ||
788 | |||
789 | COMPLETE(pB, I2EE_GOOD); | ||
790 | } | ||
791 | |||
792 | //****************************************************************************** | ||
793 | // Function: iiReadBuf16(pB, address, count) | ||
794 | // Parameters: pB - pointer to board structure | ||
795 | // address - address to put data read | ||
796 | // count - number of data bytes to read | ||
797 | // | ||
798 | // Returns: True if everything appears copacetic. | ||
799 | // False if there is any error: the pB->i2eError field has the error | ||
800 | // | ||
801 | // Description: | ||
802 | // | ||
803 | // Reads 'count' bytes into 'address' from the data fifo specified by the board | ||
804 | // structure pointer pB. Should count happen to be odd, an extra pad byte is | ||
805 | // received (identity unknown...). Uses 16-bit (word) operations. Is called | ||
806 | // indirectly through pB->i2eReadBuf. | ||
807 | // | ||
808 | //****************************************************************************** | ||
809 | static int | ||
810 | iiReadBuf16(i2eBordStrPtr pB, unsigned char *address, int count) | ||
811 | { | ||
812 | // Rudimentary sanity checking here. | ||
813 | if (pB->i2eValid != I2E_MAGIC) | ||
814 | COMPLETE(pB, I2EE_INVALID); | ||
815 | |||
816 | INSW ( pB->i2eData, address, count); | ||
817 | |||
818 | COMPLETE(pB, I2EE_GOOD); | ||
819 | } | ||
820 | |||
821 | //****************************************************************************** | ||
822 | // Function: iiReadBuf8(pB, address, count) | ||
823 | // Parameters: pB - pointer to board structure | ||
824 | // address - address to put data read | ||
825 | // count - number of data bytes to read | ||
826 | // | ||
827 | // Returns: True if everything appears copacetic. | ||
828 | // False if there is any error: the pB->i2eError field has the error | ||
829 | // | ||
830 | // Description: | ||
831 | // | ||
832 | // Reads 'count' bytes into 'address' from the data fifo specified by the board | ||
833 | // structure pointer pB. Should count happen to be odd, an extra pad byte is | ||
834 | // received (identity unknown...). This to match the 16-bit behaviour. Uses | ||
835 | // 8-bit (byte) operations. Is called indirectly through pB->i2eReadBuf. | ||
836 | // | ||
837 | //****************************************************************************** | ||
838 | static int | ||
839 | iiReadBuf8(i2eBordStrPtr pB, unsigned char *address, int count) | ||
840 | { | ||
841 | // Rudimentary sanity checking here. | ||
842 | if (pB->i2eValid != I2E_MAGIC) | ||
843 | COMPLETE(pB, I2EE_INVALID); | ||
844 | |||
845 | INSB ( pB->i2eData, address, count); | ||
846 | |||
847 | COMPLETE(pB, I2EE_GOOD); | ||
848 | } | ||
849 | |||
850 | //****************************************************************************** | ||
851 | // Function: iiReadWord16(pB) | ||
852 | // Parameters: pB - pointer to board structure | ||
853 | // | ||
854 | // Returns: True if everything appears copacetic. | ||
855 | // False if there is any error: the pB->i2eError field has the error | ||
856 | // | ||
857 | // Description: | ||
858 | // | ||
859 | // Returns the word read from the data fifo specified by the board-structure | ||
860 | // pointer pB. Uses a 16-bit operation. Is called indirectly through | ||
861 | // pB->i2eReadWord. | ||
862 | // | ||
863 | //****************************************************************************** | ||
864 | static unsigned short | ||
865 | iiReadWord16(i2eBordStrPtr pB) | ||
866 | { | ||
867 | return (unsigned short)( INW(pB->i2eData) ); | ||
868 | } | ||
869 | |||
870 | //****************************************************************************** | ||
871 | // Function: iiReadWord8(pB) | ||
872 | // Parameters: pB - pointer to board structure | ||
873 | // | ||
874 | // Returns: True if everything appears copacetic. | ||
875 | // False if there is any error: the pB->i2eError field has the error | ||
876 | // | ||
877 | // Description: | ||
878 | // | ||
879 | // Returns the word read from the data fifo specified by the board-structure | ||
880 | // pointer pB. Uses two 8-bit operations. Bytes are assumed to be LSB first. Is | ||
881 | // called indirectly through pB->i2eReadWord. | ||
882 | // | ||
883 | //****************************************************************************** | ||
884 | static unsigned short | ||
885 | iiReadWord8(i2eBordStrPtr pB) | ||
886 | { | ||
887 | unsigned short urs; | ||
888 | |||
889 | urs = INB ( pB->i2eData ); | ||
890 | |||
891 | return ( ( INB ( pB->i2eData ) << 8 ) | urs ); | ||
892 | } | ||
893 | |||
894 | //****************************************************************************** | ||
895 | // Function: iiWriteWord16(pB, value) | ||
896 | // Parameters: pB - pointer to board structure | ||
897 | // value - data to write | ||
898 | // | ||
899 | // Returns: True if everything appears copacetic. | ||
900 | // False if there is any error: the pB->i2eError field has the error | ||
901 | // | ||
902 | // Description: | ||
903 | // | ||
904 | // Writes the word 'value' to the data fifo specified by the board-structure | ||
905 | // pointer pB. Uses 16-bit operation. Is called indirectly through | ||
906 | // pB->i2eWriteWord. | ||
907 | // | ||
908 | //****************************************************************************** | ||
909 | static void | ||
910 | iiWriteWord16(i2eBordStrPtr pB, unsigned short value) | ||
911 | { | ||
912 | WORD_TO(pB, (int)value); | ||
913 | } | ||
914 | |||
915 | //****************************************************************************** | ||
916 | // Function: iiWriteWord8(pB, value) | ||
917 | // Parameters: pB - pointer to board structure | ||
918 | // value - data to write | ||
919 | // | ||
920 | // Returns: True if everything appears copacetic. | ||
921 | // False if there is any error: the pB->i2eError field has the error | ||
922 | // | ||
923 | // Description: | ||
924 | // | ||
925 | // Writes the word 'value' to the data fifo specified by the board-structure | ||
926 | // pointer pB. Uses two 8-bit operations (writes LSB first). Is called | ||
927 | // indirectly through pB->i2eWriteWord. | ||
928 | // | ||
929 | //****************************************************************************** | ||
930 | static void | ||
931 | iiWriteWord8(i2eBordStrPtr pB, unsigned short value) | ||
932 | { | ||
933 | BYTE_TO(pB, (char)value); | ||
934 | BYTE_TO(pB, (char)(value >> 8) ); | ||
935 | } | ||
936 | |||
937 | //****************************************************************************** | ||
938 | // Function: iiWaitForTxEmptyII(pB, mSdelay) | ||
939 | // Parameters: pB - pointer to board structure | ||
940 | // mSdelay - period to wait before returning | ||
941 | // | ||
942 | // Returns: True if the FIFO is empty. | ||
943 | // False if it not empty in the required time: the pB->i2eError | ||
944 | // field has the error. | ||
945 | // | ||
946 | // Description: | ||
947 | // | ||
948 | // Waits up to "mSdelay" milliseconds for the outgoing FIFO to become empty; if | ||
949 | // not empty by the required time, returns false and error in pB->i2eError, | ||
950 | // otherwise returns true. | ||
951 | // | ||
952 | // mSdelay == 0 is taken to mean must be empty on the first test. | ||
953 | // | ||
954 | // This version operates on IntelliPort-II - style FIFO's | ||
955 | // | ||
956 | // Note this routine is organized so that if status is ok there is no delay at | ||
957 | // all called either before or after the test. Is called indirectly through | ||
958 | // pB->i2eWaitForTxEmpty. | ||
959 | // | ||
960 | //****************************************************************************** | ||
961 | static int | ||
962 | iiWaitForTxEmptyII(i2eBordStrPtr pB, int mSdelay) | ||
963 | { | ||
964 | unsigned long flags; | ||
965 | int itemp; | ||
966 | |||
967 | for (;;) | ||
968 | { | ||
969 | // This routine hinges on being able to see the "other" status register | ||
970 | // (as seen by the local processor). His incoming fifo is our outgoing | ||
971 | // FIFO. | ||
972 | // | ||
973 | // By the nature of this routine, you would be using this as part of a | ||
974 | // larger atomic context: i.e., you would use this routine to ensure the | ||
975 | // fifo empty, then act on this information. Between these two halves, | ||
976 | // you will generally not want to service interrupts or in any way | ||
977 | // disrupt the assumptions implicit in the larger context. | ||
978 | // | ||
979 | // Even worse, however, this routine "shifts" the status register to | ||
980 | // point to the local status register which is not the usual situation. | ||
981 | // Therefore for extra safety, we force the critical section to be | ||
982 | // completely atomic, and pick up after ourselves before allowing any | ||
983 | // interrupts of any kind. | ||
984 | |||
985 | |||
986 | WRITE_LOCK_IRQSAVE(&Dl_spinlock,flags) | ||
987 | OUTB(pB->i2ePointer, SEL_COMMAND); | ||
988 | OUTB(pB->i2ePointer, SEL_CMD_SH); | ||
989 | |||
990 | itemp = INB(pB->i2eStatus); | ||
991 | |||
992 | OUTB(pB->i2ePointer, SEL_COMMAND); | ||
993 | OUTB(pB->i2ePointer, SEL_CMD_UNSH); | ||
994 | |||
995 | if (itemp & ST_IN_EMPTY) | ||
996 | { | ||
997 | UPDATE_FIFO_ROOM(pB); | ||
998 | WRITE_UNLOCK_IRQRESTORE(&Dl_spinlock,flags) | ||
999 | COMPLETE(pB, I2EE_GOOD); | ||
1000 | } | ||
1001 | |||
1002 | WRITE_UNLOCK_IRQRESTORE(&Dl_spinlock,flags) | ||
1003 | |||
1004 | if (mSdelay-- == 0) | ||
1005 | break; | ||
1006 | |||
1007 | iiDelay(pB, 1); /* 1 mS granularity on checking condition */ | ||
1008 | } | ||
1009 | COMPLETE(pB, I2EE_TXE_TIME); | ||
1010 | } | ||
1011 | |||
1012 | //****************************************************************************** | ||
1013 | // Function: iiWaitForTxEmptyIIEX(pB, mSdelay) | ||
1014 | // Parameters: pB - pointer to board structure | ||
1015 | // mSdelay - period to wait before returning | ||
1016 | // | ||
1017 | // Returns: True if the FIFO is empty. | ||
1018 | // False if it not empty in the required time: the pB->i2eError | ||
1019 | // field has the error. | ||
1020 | // | ||
1021 | // Description: | ||
1022 | // | ||
1023 | // Waits up to "mSdelay" milliseconds for the outgoing FIFO to become empty; if | ||
1024 | // not empty by the required time, returns false and error in pB->i2eError, | ||
1025 | // otherwise returns true. | ||
1026 | // | ||
1027 | // mSdelay == 0 is taken to mean must be empty on the first test. | ||
1028 | // | ||
1029 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1030 | // | ||
1031 | // Note this routine is organized so that if status is ok there is no delay at | ||
1032 | // all called either before or after the test. Is called indirectly through | ||
1033 | // pB->i2eWaitForTxEmpty. | ||
1034 | // | ||
1035 | //****************************************************************************** | ||
1036 | static int | ||
1037 | iiWaitForTxEmptyIIEX(i2eBordStrPtr pB, int mSdelay) | ||
1038 | { | ||
1039 | unsigned long flags; | ||
1040 | |||
1041 | for (;;) | ||
1042 | { | ||
1043 | // By the nature of this routine, you would be using this as part of a | ||
1044 | // larger atomic context: i.e., you would use this routine to ensure the | ||
1045 | // fifo empty, then act on this information. Between these two halves, | ||
1046 | // you will generally not want to service interrupts or in any way | ||
1047 | // disrupt the assumptions implicit in the larger context. | ||
1048 | |||
1049 | WRITE_LOCK_IRQSAVE(&Dl_spinlock,flags) | ||
1050 | |||
1051 | if (INB(pB->i2eStatus) & STE_OUT_MT) { | ||
1052 | UPDATE_FIFO_ROOM(pB); | ||
1053 | WRITE_UNLOCK_IRQRESTORE(&Dl_spinlock,flags) | ||
1054 | COMPLETE(pB, I2EE_GOOD); | ||
1055 | } | ||
1056 | WRITE_UNLOCK_IRQRESTORE(&Dl_spinlock,flags) | ||
1057 | |||
1058 | if (mSdelay-- == 0) | ||
1059 | break; | ||
1060 | |||
1061 | iiDelay(pB, 1); // 1 mS granularity on checking condition | ||
1062 | } | ||
1063 | COMPLETE(pB, I2EE_TXE_TIME); | ||
1064 | } | ||
1065 | |||
1066 | //****************************************************************************** | ||
1067 | // Function: iiTxMailEmptyII(pB) | ||
1068 | // Parameters: pB - pointer to board structure | ||
1069 | // | ||
1070 | // Returns: True if the transmit mailbox is empty. | ||
1071 | // False if it not empty. | ||
1072 | // | ||
1073 | // Description: | ||
1074 | // | ||
1075 | // Returns true or false according to whether the transmit mailbox is empty (and | ||
1076 | // therefore able to accept more mail) | ||
1077 | // | ||
1078 | // This version operates on IntelliPort-II - style FIFO's | ||
1079 | // | ||
1080 | //****************************************************************************** | ||
1081 | static int | ||
1082 | iiTxMailEmptyII(i2eBordStrPtr pB) | ||
1083 | { | ||
1084 | int port = pB->i2ePointer; | ||
1085 | OUTB ( port, SEL_OUTMAIL ); | ||
1086 | return ( INB(port) == 0 ); | ||
1087 | } | ||
1088 | |||
1089 | //****************************************************************************** | ||
1090 | // Function: iiTxMailEmptyIIEX(pB) | ||
1091 | // Parameters: pB - pointer to board structure | ||
1092 | // | ||
1093 | // Returns: True if the transmit mailbox is empty. | ||
1094 | // False if it not empty. | ||
1095 | // | ||
1096 | // Description: | ||
1097 | // | ||
1098 | // Returns true or false according to whether the transmit mailbox is empty (and | ||
1099 | // therefore able to accept more mail) | ||
1100 | // | ||
1101 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1102 | // | ||
1103 | //****************************************************************************** | ||
1104 | static int | ||
1105 | iiTxMailEmptyIIEX(i2eBordStrPtr pB) | ||
1106 | { | ||
1107 | return !(INB(pB->i2eStatus) & STE_OUT_MAIL); | ||
1108 | } | ||
1109 | |||
1110 | //****************************************************************************** | ||
1111 | // Function: iiTrySendMailII(pB,mail) | ||
1112 | // Parameters: pB - pointer to board structure | ||
1113 | // mail - value to write to mailbox | ||
1114 | // | ||
1115 | // Returns: True if the transmit mailbox is empty, and mail is sent. | ||
1116 | // False if it not empty. | ||
1117 | // | ||
1118 | // Description: | ||
1119 | // | ||
1120 | // If outgoing mailbox is empty, sends mail and returns true. If outgoing | ||
1121 | // mailbox is not empty, returns false. | ||
1122 | // | ||
1123 | // This version operates on IntelliPort-II - style FIFO's | ||
1124 | // | ||
1125 | //****************************************************************************** | ||
1126 | static int | ||
1127 | iiTrySendMailII(i2eBordStrPtr pB, unsigned char mail) | ||
1128 | { | ||
1129 | int port = pB->i2ePointer; | ||
1130 | |||
1131 | OUTB(port, SEL_OUTMAIL); | ||
1132 | if (INB(port) == 0) { | ||
1133 | OUTB(port, SEL_OUTMAIL); | ||
1134 | OUTB(port, mail); | ||
1135 | return 1; | ||
1136 | } | ||
1137 | return 0; | ||
1138 | } | ||
1139 | |||
1140 | //****************************************************************************** | ||
1141 | // Function: iiTrySendMailIIEX(pB,mail) | ||
1142 | // Parameters: pB - pointer to board structure | ||
1143 | // mail - value to write to mailbox | ||
1144 | // | ||
1145 | // Returns: True if the transmit mailbox is empty, and mail is sent. | ||
1146 | // False if it not empty. | ||
1147 | // | ||
1148 | // Description: | ||
1149 | // | ||
1150 | // If outgoing mailbox is empty, sends mail and returns true. If outgoing | ||
1151 | // mailbox is not empty, returns false. | ||
1152 | // | ||
1153 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1154 | // | ||
1155 | //****************************************************************************** | ||
1156 | static int | ||
1157 | iiTrySendMailIIEX(i2eBordStrPtr pB, unsigned char mail) | ||
1158 | { | ||
1159 | if(INB(pB->i2eStatus) & STE_OUT_MAIL) { | ||
1160 | return 0; | ||
1161 | } | ||
1162 | OUTB(pB->i2eXMail, mail); | ||
1163 | return 1; | ||
1164 | } | ||
1165 | |||
1166 | //****************************************************************************** | ||
1167 | // Function: iiGetMailII(pB,mail) | ||
1168 | // Parameters: pB - pointer to board structure | ||
1169 | // | ||
1170 | // Returns: Mailbox data or NO_MAIL_HERE. | ||
1171 | // | ||
1172 | // Description: | ||
1173 | // | ||
1174 | // If no mail available, returns NO_MAIL_HERE otherwise returns the data from | ||
1175 | // the mailbox, which is guaranteed != NO_MAIL_HERE. | ||
1176 | // | ||
1177 | // This version operates on IntelliPort-II - style FIFO's | ||
1178 | // | ||
1179 | //****************************************************************************** | ||
1180 | static unsigned short | ||
1181 | iiGetMailII(i2eBordStrPtr pB) | ||
1182 | { | ||
1183 | if (HAS_MAIL(pB)) { | ||
1184 | OUTB(pB->i2ePointer, SEL_INMAIL); | ||
1185 | return INB(pB->i2ePointer); | ||
1186 | } else { | ||
1187 | return NO_MAIL_HERE; | ||
1188 | } | ||
1189 | } | ||
1190 | |||
1191 | //****************************************************************************** | ||
1192 | // Function: iiGetMailIIEX(pB,mail) | ||
1193 | // Parameters: pB - pointer to board structure | ||
1194 | // | ||
1195 | // Returns: Mailbox data or NO_MAIL_HERE. | ||
1196 | // | ||
1197 | // Description: | ||
1198 | // | ||
1199 | // If no mail available, returns NO_MAIL_HERE otherwise returns the data from | ||
1200 | // the mailbox, which is guaranteed != NO_MAIL_HERE. | ||
1201 | // | ||
1202 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1203 | // | ||
1204 | //****************************************************************************** | ||
1205 | static unsigned short | ||
1206 | iiGetMailIIEX(i2eBordStrPtr pB) | ||
1207 | { | ||
1208 | if (HAS_MAIL(pB)) { | ||
1209 | return INB(pB->i2eXMail); | ||
1210 | } else { | ||
1211 | return NO_MAIL_HERE; | ||
1212 | } | ||
1213 | } | ||
1214 | |||
1215 | //****************************************************************************** | ||
1216 | // Function: iiEnableMailIrqII(pB) | ||
1217 | // Parameters: pB - pointer to board structure | ||
1218 | // | ||
1219 | // Returns: Nothing | ||
1220 | // | ||
1221 | // Description: | ||
1222 | // | ||
1223 | // Enables board to interrupt host (only) by writing to host's in-bound mailbox. | ||
1224 | // | ||
1225 | // This version operates on IntelliPort-II - style FIFO's | ||
1226 | // | ||
1227 | //****************************************************************************** | ||
1228 | static void | ||
1229 | iiEnableMailIrqII(i2eBordStrPtr pB) | ||
1230 | { | ||
1231 | OUTB(pB->i2ePointer, SEL_MASK); | ||
1232 | OUTB(pB->i2ePointer, ST_IN_MAIL); | ||
1233 | } | ||
1234 | |||
1235 | //****************************************************************************** | ||
1236 | // Function: iiEnableMailIrqIIEX(pB) | ||
1237 | // Parameters: pB - pointer to board structure | ||
1238 | // | ||
1239 | // Returns: Nothing | ||
1240 | // | ||
1241 | // Description: | ||
1242 | // | ||
1243 | // Enables board to interrupt host (only) by writing to host's in-bound mailbox. | ||
1244 | // | ||
1245 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1246 | // | ||
1247 | //****************************************************************************** | ||
1248 | static void | ||
1249 | iiEnableMailIrqIIEX(i2eBordStrPtr pB) | ||
1250 | { | ||
1251 | OUTB(pB->i2eXMask, MX_IN_MAIL); | ||
1252 | } | ||
1253 | |||
1254 | //****************************************************************************** | ||
1255 | // Function: iiWriteMaskII(pB) | ||
1256 | // Parameters: pB - pointer to board structure | ||
1257 | // | ||
1258 | // Returns: Nothing | ||
1259 | // | ||
1260 | // Description: | ||
1261 | // | ||
1262 | // Writes arbitrary value to the mask register. | ||
1263 | // | ||
1264 | // This version operates on IntelliPort-II - style FIFO's | ||
1265 | // | ||
1266 | //****************************************************************************** | ||
1267 | static void | ||
1268 | iiWriteMaskII(i2eBordStrPtr pB, unsigned char value) | ||
1269 | { | ||
1270 | OUTB(pB->i2ePointer, SEL_MASK); | ||
1271 | OUTB(pB->i2ePointer, value); | ||
1272 | } | ||
1273 | |||
1274 | //****************************************************************************** | ||
1275 | // Function: iiWriteMaskIIEX(pB) | ||
1276 | // Parameters: pB - pointer to board structure | ||
1277 | // | ||
1278 | // Returns: Nothing | ||
1279 | // | ||
1280 | // Description: | ||
1281 | // | ||
1282 | // Writes arbitrary value to the mask register. | ||
1283 | // | ||
1284 | // This version operates on IntelliPort-IIEX - style FIFO's | ||
1285 | // | ||
1286 | //****************************************************************************** | ||
1287 | static void | ||
1288 | iiWriteMaskIIEX(i2eBordStrPtr pB, unsigned char value) | ||
1289 | { | ||
1290 | OUTB(pB->i2eXMask, value); | ||
1291 | } | ||
1292 | |||
1293 | //****************************************************************************** | ||
1294 | // Function: iiDownloadBlock(pB, pSource, isStandard) | ||
1295 | // Parameters: pB - pointer to board structure | ||
1296 | // pSource - loadware block to download | ||
1297 | // isStandard - True if "standard" loadware, else false. | ||
1298 | // | ||
1299 | // Returns: Success or Failure | ||
1300 | // | ||
1301 | // Description: | ||
1302 | // | ||
1303 | // Downloads a single block (at pSource)to the board referenced by pB. Caller | ||
1304 | // sets isStandard to true/false according to whether the "standard" loadware is | ||
1305 | // what's being loaded. The normal process, then, is to perform an iiInitialize | ||
1306 | // to the board, then perform some number of iiDownloadBlocks using the returned | ||
1307 | // state to determine when download is complete. | ||
1308 | // | ||
1309 | // Possible return values: (see I2ELLIS.H) | ||
1310 | // II_DOWN_BADVALID | ||
1311 | // II_DOWN_BADFILE | ||
1312 | // II_DOWN_CONTINUING | ||
1313 | // II_DOWN_GOOD | ||
1314 | // II_DOWN_BAD | ||
1315 | // II_DOWN_BADSTATE | ||
1316 | // II_DOWN_TIMEOUT | ||
1317 | // | ||
1318 | // Uses the i2eState and i2eToLoad fields (initialized at iiInitialize) to | ||
1319 | // determine whether this is the first block, whether to check for magic | ||
1320 | // numbers, how many blocks there are to go... | ||
1321 | // | ||
1322 | //****************************************************************************** | ||
1323 | static int | ||
1324 | iiDownloadBlock ( i2eBordStrPtr pB, loadHdrStrPtr pSource, int isStandard) | ||
1325 | { | ||
1326 | int itemp; | ||
1327 | int loadedFirst; | ||
1328 | |||
1329 | if (pB->i2eValid != I2E_MAGIC) return II_DOWN_BADVALID; | ||
1330 | |||
1331 | switch(pB->i2eState) | ||
1332 | { | ||
1333 | case II_STATE_READY: | ||
1334 | |||
1335 | // Loading the first block after reset. Must check the magic number of the | ||
1336 | // loadfile, store the number of blocks we expect to load. | ||
1337 | if (pSource->e.loadMagic != MAGIC_LOADFILE) | ||
1338 | { | ||
1339 | return II_DOWN_BADFILE; | ||
1340 | } | ||
1341 | |||
1342 | // Next we store the total number of blocks to load, including this one. | ||
1343 | pB->i2eToLoad = 1 + pSource->e.loadBlocksMore; | ||
1344 | |||
1345 | // Set the state, store the version numbers. ('Cause this may have come | ||
1346 | // from a file - we might want to report these versions and revisions in | ||
1347 | // case of an error! | ||
1348 | pB->i2eState = II_STATE_LOADING; | ||
1349 | pB->i2eLVersion = pSource->e.loadVersion; | ||
1350 | pB->i2eLRevision = pSource->e.loadRevision; | ||
1351 | pB->i2eLSub = pSource->e.loadSubRevision; | ||
1352 | |||
1353 | // The time and date of compilation is also available but don't bother | ||
1354 | // storing it for normal purposes. | ||
1355 | loadedFirst = 1; | ||
1356 | break; | ||
1357 | |||
1358 | case II_STATE_LOADING: | ||
1359 | loadedFirst = 0; | ||
1360 | break; | ||
1361 | |||
1362 | default: | ||
1363 | return II_DOWN_BADSTATE; | ||
1364 | } | ||
1365 | |||
1366 | // Now we must be in the II_STATE_LOADING state, and we assume i2eToLoad | ||
1367 | // must be positive still, because otherwise we would have cleaned up last | ||
1368 | // time and set the state to II_STATE_LOADED. | ||
1369 | if (!iiWaitForTxEmpty(pB, MAX_DLOAD_READ_TIME)) { | ||
1370 | return II_DOWN_TIMEOUT; | ||
1371 | } | ||
1372 | |||
1373 | if (!iiWriteBuf(pB, pSource->c, LOADWARE_BLOCK_SIZE)) { | ||
1374 | return II_DOWN_BADVALID; | ||
1375 | } | ||
1376 | |||
1377 | // If we just loaded the first block, wait for the fifo to empty an extra | ||
1378 | // long time to allow for any special startup code in the firmware, like | ||
1379 | // sending status messages to the LCD's. | ||
1380 | |||
1381 | if (loadedFirst) { | ||
1382 | if (!iiWaitForTxEmpty(pB, MAX_DLOAD_START_TIME)) { | ||
1383 | return II_DOWN_TIMEOUT; | ||
1384 | } | ||
1385 | } | ||
1386 | |||
1387 | // Determine whether this was our last block! | ||
1388 | if (--(pB->i2eToLoad)) { | ||
1389 | return II_DOWN_CONTINUING; // more to come... | ||
1390 | } | ||
1391 | |||
1392 | // It WAS our last block: Clean up operations... | ||
1393 | // ...Wait for last buffer to drain from the board... | ||
1394 | if (!iiWaitForTxEmpty(pB, MAX_DLOAD_READ_TIME)) { | ||
1395 | return II_DOWN_TIMEOUT; | ||
1396 | } | ||
1397 | // If there were only a single block written, this would come back | ||
1398 | // immediately and be harmless, though not strictly necessary. | ||
1399 | itemp = MAX_DLOAD_ACK_TIME/10; | ||
1400 | while (--itemp) { | ||
1401 | if (HAS_INPUT(pB)) { | ||
1402 | switch(BYTE_FROM(pB)) | ||
1403 | { | ||
1404 | case LOADWARE_OK: | ||
1405 | pB->i2eState = | ||
1406 | isStandard ? II_STATE_STDLOADED :II_STATE_LOADED; | ||
1407 | |||
1408 | // Some revisions of the bootstrap firmware (e.g. ISA-8 1.0.2) | ||
1409 | // will, // if there is a debug port attached, require some | ||
1410 | // time to send information to the debug port now. It will do | ||
1411 | // this before // executing any of the code we just downloaded. | ||
1412 | // It may take up to 700 milliseconds. | ||
1413 | if (pB->i2ePom.e.porDiag2 & POR_DEBUG_PORT) { | ||
1414 | iiDelay(pB, 700); | ||
1415 | } | ||
1416 | |||
1417 | return II_DOWN_GOOD; | ||
1418 | |||
1419 | case LOADWARE_BAD: | ||
1420 | default: | ||
1421 | return II_DOWN_BAD; | ||
1422 | } | ||
1423 | } | ||
1424 | |||
1425 | iiDelay(pB, 10); // 10 mS granularity on checking condition | ||
1426 | } | ||
1427 | |||
1428 | // Drop-through --> timed out waiting for firmware confirmation | ||
1429 | |||
1430 | pB->i2eState = II_STATE_BADLOAD; | ||
1431 | return II_DOWN_TIMEOUT; | ||
1432 | } | ||
1433 | |||
1434 | //****************************************************************************** | ||
1435 | // Function: iiDownloadAll(pB, pSource, isStandard, size) | ||
1436 | // Parameters: pB - pointer to board structure | ||
1437 | // pSource - loadware block to download | ||
1438 | // isStandard - True if "standard" loadware, else false. | ||
1439 | // size - size of data to download (in bytes) | ||
1440 | // | ||
1441 | // Returns: Success or Failure | ||
1442 | // | ||
1443 | // Description: | ||
1444 | // | ||
1445 | // Given a pointer to a board structure, a pointer to the beginning of some | ||
1446 | // loadware, whether it is considered the "standard loadware", and the size of | ||
1447 | // the array in bytes loads the entire array to the board as loadware. | ||
1448 | // | ||
1449 | // Assumes the board has been freshly reset and the power-up reset message read. | ||
1450 | // (i.e., in II_STATE_READY). Complains if state is bad, or if there seems to be | ||
1451 | // too much or too little data to load, or if iiDownloadBlock complains. | ||
1452 | //****************************************************************************** | ||
1453 | static int | ||
1454 | iiDownloadAll(i2eBordStrPtr pB, loadHdrStrPtr pSource, int isStandard, int size) | ||
1455 | { | ||
1456 | int status; | ||
1457 | |||
1458 | // We know (from context) board should be ready for the first block of | ||
1459 | // download. Complain if not. | ||
1460 | if (pB->i2eState != II_STATE_READY) return II_DOWN_BADSTATE; | ||
1461 | |||
1462 | while (size > 0) { | ||
1463 | size -= LOADWARE_BLOCK_SIZE; // How much data should there be left to | ||
1464 | // load after the following operation ? | ||
1465 | |||
1466 | // Note we just bump pSource by "one", because its size is actually that | ||
1467 | // of an entire block, same as LOADWARE_BLOCK_SIZE. | ||
1468 | status = iiDownloadBlock(pB, pSource++, isStandard); | ||
1469 | |||
1470 | switch(status) | ||
1471 | { | ||
1472 | case II_DOWN_GOOD: | ||
1473 | return ( (size > 0) ? II_DOWN_OVER : II_DOWN_GOOD); | ||
1474 | |||
1475 | case II_DOWN_CONTINUING: | ||
1476 | break; | ||
1477 | |||
1478 | default: | ||
1479 | return status; | ||
1480 | } | ||
1481 | } | ||
1482 | |||
1483 | // We shouldn't drop out: it means "while" caught us with nothing left to | ||
1484 | // download, yet the previous DownloadBlock did not return complete. Ergo, | ||
1485 | // not enough data to match the size byte in the header. | ||
1486 | return II_DOWN_UNDER; | ||
1487 | } | ||
diff --git a/drivers/char/ip2/i2ellis.h b/drivers/char/ip2/i2ellis.h new file mode 100644 index 000000000000..510b026d7d26 --- /dev/null +++ b/drivers/char/ip2/i2ellis.h | |||
@@ -0,0 +1,615 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1999 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Mainline code for the device driver | ||
12 | * | ||
13 | *******************************************************************************/ | ||
14 | //------------------------------------------------------------------------------ | ||
15 | // i2ellis.h | ||
16 | // | ||
17 | // IntelliPort-II and IntelliPort-IIEX | ||
18 | // | ||
19 | // Extremely | ||
20 | // Low | ||
21 | // Level | ||
22 | // Interface | ||
23 | // Services | ||
24 | // | ||
25 | // Structure Definitions and declarations for "ELLIS" service routines found in | ||
26 | // i2ellis.c | ||
27 | // | ||
28 | // These routines are based on properties of the IntelliPort-II and -IIEX | ||
29 | // hardware and bootstrap firmware, and are not sensitive to particular | ||
30 | // conventions of any particular loadware. | ||
31 | // | ||
32 | // Unlike i2hw.h, which provides IRONCLAD hardware definitions, the material | ||
33 | // here and in i2ellis.c is intended to provice a useful, but not required, | ||
34 | // layer of insulation from the hardware specifics. | ||
35 | //------------------------------------------------------------------------------ | ||
36 | #ifndef I2ELLIS_H /* To prevent multiple includes */ | ||
37 | #define I2ELLIS_H 1 | ||
38 | //------------------------------------------------ | ||
39 | // Revision History: | ||
40 | // | ||
41 | // 30 September 1991 MAG First Draft Started | ||
42 | // 12 October 1991 ...continued... | ||
43 | // | ||
44 | // 20 December 1996 AKM Linux version | ||
45 | //------------------------------------------------- | ||
46 | |||
47 | //---------------------- | ||
48 | // Mandatory Includes: | ||
49 | //---------------------- | ||
50 | #include <linux/config.h> | ||
51 | #include "ip2types.h" | ||
52 | #include "i2hw.h" // The hardware definitions | ||
53 | |||
54 | //------------------------------------------ | ||
55 | // STAT_BOXIDS packets | ||
56 | //------------------------------------------ | ||
57 | #define MAX_BOX 4 | ||
58 | |||
59 | typedef struct _bidStat | ||
60 | { | ||
61 | unsigned char bid_value[MAX_BOX]; | ||
62 | } bidStat, *bidStatPtr; | ||
63 | |||
64 | // This packet is sent in response to a CMD_GET_BOXIDS bypass command. For -IIEX | ||
65 | // boards, reports the hardware-specific "asynchronous resource register" on | ||
66 | // each expansion box. Boxes not present report 0xff. For -II boards, the first | ||
67 | // element contains 0x80 for 8-port, 0x40 for 4-port boards. | ||
68 | |||
69 | // Box IDs aka ARR or Async Resource Register (more than you want to know) | ||
70 | // 7 6 5 4 3 2 1 0 | ||
71 | // F F N N L S S S | ||
72 | // ============================= | ||
73 | // F F - Product Family Designator | ||
74 | // =====+++++++++++++++++++++++++++++++ | ||
75 | // 0 0 - Intelliport II EX / ISA-8 | ||
76 | // 1 0 - IntelliServer | ||
77 | // 0 1 - SAC - Port Device (Intelliport III ??? ) | ||
78 | // =====+++++++++++++++++++++++++++++++++++++++ | ||
79 | // N N - Number of Ports | ||
80 | // 0 0 - 8 (eight) | ||
81 | // 0 1 - 4 (four) | ||
82 | // 1 0 - 12 (twelve) | ||
83 | // 1 1 - 16 (sixteen) | ||
84 | // =++++++++++++++++++++++++++++++++++ | ||
85 | // L - LCD Display Module Present | ||
86 | // 0 - No | ||
87 | // 1 - LCD module present | ||
88 | // =========+++++++++++++++++++++++++++++++++++++ | ||
89 | // S S S - Async Signals Supported Designator | ||
90 | // 0 0 0 - 8dss, Mod DCE DB25 Female | ||
91 | // 0 0 1 - 6dss, RJ-45 | ||
92 | // 0 1 0 - RS-232/422 dss, DB25 Female | ||
93 | // 0 1 1 - RS-232/422 dss, separate 232/422 DB25 Female | ||
94 | // 1 0 0 - 6dss, 921.6 I/F with ST654's | ||
95 | // 1 0 1 - RS-423/232 8dss, RJ-45 10Pin | ||
96 | // 1 1 0 - 6dss, Mod DCE DB25 Female | ||
97 | // 1 1 1 - NO BOX PRESENT | ||
98 | |||
99 | #define FF(c) ((c & 0xC0) >> 6) | ||
100 | #define NN(c) ((c & 0x30) >> 4) | ||
101 | #define L(c) ((c & 0x08) >> 3) | ||
102 | #define SSS(c) (c & 0x07) | ||
103 | |||
104 | #define BID_HAS_654(x) (SSS(x) == 0x04) | ||
105 | #define BID_NO_BOX 0xff /* no box */ | ||
106 | #define BID_8PORT 0x80 /* IP2-8 port */ | ||
107 | #define BID_4PORT 0x81 /* IP2-4 port */ | ||
108 | #define BID_EXP_MASK 0x30 /* IP2-EX */ | ||
109 | #define BID_EXP_8PORT 0x00 /* 8, */ | ||
110 | #define BID_EXP_4PORT 0x10 /* 4, */ | ||
111 | #define BID_EXP_UNDEF 0x20 /* UNDEF, */ | ||
112 | #define BID_EXP_16PORT 0x30 /* 16, */ | ||
113 | #define BID_LCD_CTRL 0x08 /* LCD Controller */ | ||
114 | #define BID_LCD_NONE 0x00 /* - no controller present */ | ||
115 | #define BID_LCD_PRES 0x08 /* - controller present */ | ||
116 | #define BID_CON_MASK 0x07 /* - connector pinouts */ | ||
117 | #define BID_CON_DB25 0x00 /* - DB-25 F */ | ||
118 | #define BID_CON_RJ45 0x01 /* - rj45 */ | ||
119 | |||
120 | //------------------------------------------------------------------------------ | ||
121 | // i2eBordStr | ||
122 | // | ||
123 | // This structure contains all the information the ELLIS routines require in | ||
124 | // dealing with a particular board. | ||
125 | //------------------------------------------------------------------------------ | ||
126 | // There are some queues here which are guaranteed to never contain the entry | ||
127 | // for a single channel twice. So they must be slightly larger to allow | ||
128 | // unambiguous full/empty management | ||
129 | // | ||
130 | #define CH_QUEUE_SIZE ABS_MOST_PORTS+2 | ||
131 | |||
132 | typedef struct _i2eBordStr | ||
133 | { | ||
134 | porStr i2ePom; // Structure containing the power-on message. | ||
135 | |||
136 | unsigned short i2ePomSize; | ||
137 | // The number of bytes actually read if | ||
138 | // different from sizeof i2ePom, indicates | ||
139 | // there is an error! | ||
140 | |||
141 | unsigned short i2eStartMail; | ||
142 | // Contains whatever inbound mailbox data | ||
143 | // present at startup. NO_MAIL_HERE indicates | ||
144 | // nothing was present. No special | ||
145 | // significance as of this writing, but may be | ||
146 | // useful for diagnostic reasons. | ||
147 | |||
148 | unsigned short i2eValid; | ||
149 | // Indicates validity of the structure; if | ||
150 | // i2eValid == I2E_MAGIC, then we can trust | ||
151 | // the other fields. Some (especially | ||
152 | // initialization) functions are good about | ||
153 | // checking for validity. Many functions do | ||
154 | // not, it being assumed that the larger | ||
155 | // context assures we are using a valid | ||
156 | // i2eBordStrPtr. | ||
157 | |||
158 | unsigned short i2eError; | ||
159 | // Used for returning an error condition from | ||
160 | // several functions which use i2eBordStrPtr | ||
161 | // as an argument. | ||
162 | |||
163 | // Accelerators to characterize separate features of a board, derived from a | ||
164 | // number of sources. | ||
165 | |||
166 | unsigned short i2eFifoSize; | ||
167 | // Always, the size of the FIFO. For | ||
168 | // IntelliPort-II, always the same, for -IIEX | ||
169 | // taken from the Power-On reset message. | ||
170 | |||
171 | volatile | ||
172 | unsigned short i2eFifoRemains; | ||
173 | // Used during normal operation to indicate a | ||
174 | // lower bound on the amount of data which | ||
175 | // might be in the outbound fifo. | ||
176 | |||
177 | unsigned char i2eFifoStyle; | ||
178 | // Accelerator which tells which style (-II or | ||
179 | // -IIEX) FIFO we are using. | ||
180 | |||
181 | unsigned char i2eDataWidth16; | ||
182 | // Accelerator which tells whether we should | ||
183 | // do 8 or 16-bit data transfers. | ||
184 | |||
185 | unsigned char i2eMaxIrq; | ||
186 | // The highest allowable IRQ, based on the | ||
187 | // slot size. | ||
188 | |||
189 | unsigned char i2eChangeIrq; | ||
190 | // Whether tis valid to change IRQ's | ||
191 | // ISA = ok, EISA, MicroChannel, no | ||
192 | |||
193 | // Accelerators for various addresses on the board | ||
194 | int i2eBase; // I/O Address of the Board | ||
195 | int i2eData; // From here data transfers happen | ||
196 | int i2eStatus; // From here status reads happen | ||
197 | int i2ePointer; // (IntelliPort-II: pointer/commands) | ||
198 | int i2eXMail; // (IntelliPOrt-IIEX: mailboxes | ||
199 | int i2eXMask; // (IntelliPort-IIEX: mask write | ||
200 | |||
201 | //------------------------------------------------------- | ||
202 | // Information presented in a common format across boards | ||
203 | // For each box, bit map of the channels present. Box closest to | ||
204 | // the host is box 0. LSB is channel 0. IntelliPort-II (non-expandable) | ||
205 | // is taken to be box 0. These are derived from product i.d. registers. | ||
206 | |||
207 | unsigned short i2eChannelMap[ABS_MAX_BOXES]; | ||
208 | |||
209 | // Same as above, except each is derived from firmware attempting to detect | ||
210 | // the uart presence (by reading a valid GFRCR register). If bits are set in | ||
211 | // i2eChannelMap and not in i2eGoodMap, there is a potential problem. | ||
212 | |||
213 | unsigned short i2eGoodMap[ABS_MAX_BOXES]; | ||
214 | |||
215 | // --------------------------- | ||
216 | // For indirect function calls | ||
217 | |||
218 | // Routine to cause an N-millisecond delay: Patched by the ii2Initialize | ||
219 | // function. | ||
220 | |||
221 | void (*i2eDelay)(unsigned int); | ||
222 | |||
223 | // Routine to write N bytes to the board through the FIFO. Returns true if | ||
224 | // all copacetic, otherwise returns false and error is in i2eError field. | ||
225 | // IF COUNT IS ODD, ROUNDS UP TO THE NEXT EVEN NUMBER. | ||
226 | |||
227 | int (*i2eWriteBuf)(struct _i2eBordStr *, unsigned char *, int); | ||
228 | |||
229 | // Routine to read N bytes from the board through the FIFO. Returns true if | ||
230 | // copacetic, otherwise returns false and error in i2eError. | ||
231 | // IF COUNT IS ODD, ROUNDS UP TO THE NEXT EVEN NUMBER. | ||
232 | |||
233 | int (*i2eReadBuf)(struct _i2eBordStr *, unsigned char *, int); | ||
234 | |||
235 | // Returns a word from FIFO. Will use 2 byte operations if needed. | ||
236 | |||
237 | unsigned short (*i2eReadWord)(struct _i2eBordStr *); | ||
238 | |||
239 | // Writes a word to FIFO. Will use 2 byte operations if needed. | ||
240 | |||
241 | void (*i2eWriteWord)(struct _i2eBordStr *, unsigned short); | ||
242 | |||
243 | // Waits specified time for the Transmit FIFO to go empty. Returns true if | ||
244 | // ok, otherwise returns false and error in i2eError. | ||
245 | |||
246 | int (*i2eWaitForTxEmpty)(struct _i2eBordStr *, int); | ||
247 | |||
248 | // Returns true or false according to whether the outgoing mailbox is empty. | ||
249 | |||
250 | int (*i2eTxMailEmpty)(struct _i2eBordStr *); | ||
251 | |||
252 | // Checks whether outgoing mailbox is empty. If so, sends mail and returns | ||
253 | // true. Otherwise returns false. | ||
254 | |||
255 | int (*i2eTrySendMail)(struct _i2eBordStr *, unsigned char); | ||
256 | |||
257 | // If no mail available, returns NO_MAIL_HERE, else returns the value in the | ||
258 | // mailbox (guaranteed can't be NO_MAIL_HERE). | ||
259 | |||
260 | unsigned short (*i2eGetMail)(struct _i2eBordStr *); | ||
261 | |||
262 | // Enables the board to interrupt the host when it writes to the mailbox. | ||
263 | // Irqs will not occur, however, until the loadware separately enables | ||
264 | // interrupt generation to the host. The standard loadware does this in | ||
265 | // response to a command packet sent by the host. (Also, disables | ||
266 | // any other potential interrupt sources from the board -- other than the | ||
267 | // inbound mailbox). | ||
268 | |||
269 | void (*i2eEnableMailIrq)(struct _i2eBordStr *); | ||
270 | |||
271 | // Writes an arbitrary value to the mask register. | ||
272 | |||
273 | void (*i2eWriteMask)(struct _i2eBordStr *, unsigned char); | ||
274 | |||
275 | |||
276 | // State information | ||
277 | |||
278 | // During downloading, indicates the number of blocks remaining to download | ||
279 | // to the board. | ||
280 | |||
281 | short i2eToLoad; | ||
282 | |||
283 | // State of board (see manifests below) (e.g., whether in reset condition, | ||
284 | // whether standard loadware is installed, etc. | ||
285 | |||
286 | unsigned char i2eState; | ||
287 | |||
288 | // These three fields are only valid when there is loadware running on the | ||
289 | // board. (i2eState == II_STATE_LOADED or i2eState == II_STATE_STDLOADED ) | ||
290 | |||
291 | unsigned char i2eLVersion; // Loadware version | ||
292 | unsigned char i2eLRevision; // Loadware revision | ||
293 | unsigned char i2eLSub; // Loadware subrevision | ||
294 | |||
295 | // Flags which only have meaning in the context of the standard loadware. | ||
296 | // Somewhat violates the layering concept, but there is so little additional | ||
297 | // needed at the board level (while much additional at the channel level), | ||
298 | // that this beats maintaining two different per-board structures. | ||
299 | |||
300 | // Indicates which IRQ the board has been initialized (from software) to use | ||
301 | // For MicroChannel boards, any value different from IRQ_UNDEFINED means | ||
302 | // that the software command has been sent to enable interrupts (or specify | ||
303 | // they are disabled). Special value: IRQ_UNDEFINED indicates that the | ||
304 | // software command to select the interrupt has not yet been sent, therefore | ||
305 | // (since the standard loadware insists that it be sent before any other | ||
306 | // packets are sent) no other packets should be sent yet. | ||
307 | |||
308 | unsigned short i2eUsingIrq; | ||
309 | |||
310 | // This is set when we hit the MB_OUT_STUFFED mailbox, which prevents us | ||
311 | // putting more in the mailbox until an appropriate mailbox message is | ||
312 | // received. | ||
313 | |||
314 | unsigned char i2eWaitingForEmptyFifo; | ||
315 | |||
316 | // Any mailbox bits waiting to be sent to the board are OR'ed in here. | ||
317 | |||
318 | unsigned char i2eOutMailWaiting; | ||
319 | |||
320 | // The head of any incoming packet is read into here, is then examined and | ||
321 | // we dispatch accordingly. | ||
322 | |||
323 | unsigned short i2eLeadoffWord[1]; | ||
324 | |||
325 | // Running counter of interrupts where the mailbox indicated incoming data. | ||
326 | |||
327 | unsigned short i2eFifoInInts; | ||
328 | |||
329 | // Running counter of interrupts where the mailbox indicated outgoing data | ||
330 | // had been stripped. | ||
331 | |||
332 | unsigned short i2eFifoOutInts; | ||
333 | |||
334 | // If not void, gives the address of a routine to call if fatal board error | ||
335 | // is found (only applies to standard l/w). | ||
336 | |||
337 | void (*i2eFatalTrap)(struct _i2eBordStr *); | ||
338 | |||
339 | // Will point to an array of some sort of channel structures (whose format | ||
340 | // is unknown at this level, being a function of what loadware is | ||
341 | // installed and the code configuration (max sizes of buffers, etc.)). | ||
342 | |||
343 | void *i2eChannelPtr; | ||
344 | |||
345 | // Set indicates that the board has gone fatal. | ||
346 | |||
347 | unsigned short i2eFatal; | ||
348 | |||
349 | // The number of elements pointed to by i2eChannelPtr. | ||
350 | |||
351 | unsigned short i2eChannelCnt; | ||
352 | |||
353 | // Ring-buffers of channel structures whose channels have particular needs. | ||
354 | |||
355 | rwlock_t Fbuf_spinlock; | ||
356 | volatile | ||
357 | unsigned short i2Fbuf_strip; // Strip index | ||
358 | volatile | ||
359 | unsigned short i2Fbuf_stuff; // Stuff index | ||
360 | void *i2Fbuf[CH_QUEUE_SIZE]; // An array of channel pointers | ||
361 | // of channels who need to send | ||
362 | // flow control packets. | ||
363 | rwlock_t Dbuf_spinlock; | ||
364 | volatile | ||
365 | unsigned short i2Dbuf_strip; // Strip index | ||
366 | volatile | ||
367 | unsigned short i2Dbuf_stuff; // Stuff index | ||
368 | void *i2Dbuf[CH_QUEUE_SIZE]; // An array of channel pointers | ||
369 | // of channels who need to send | ||
370 | // data or in-line command packets. | ||
371 | rwlock_t Bbuf_spinlock; | ||
372 | volatile | ||
373 | unsigned short i2Bbuf_strip; // Strip index | ||
374 | volatile | ||
375 | unsigned short i2Bbuf_stuff; // Stuff index | ||
376 | void *i2Bbuf[CH_QUEUE_SIZE]; // An array of channel pointers | ||
377 | // of channels who need to send | ||
378 | // bypass command packets. | ||
379 | |||
380 | /* | ||
381 | * A set of flags to indicate that certain events have occurred on at least | ||
382 | * one of the ports on this board. We use this to decide whether to spin | ||
383 | * through the channels looking for breaks, etc. | ||
384 | */ | ||
385 | int got_input; | ||
386 | int status_change; | ||
387 | bidStat channelBtypes; | ||
388 | |||
389 | /* | ||
390 | * Debugging counters, etc. | ||
391 | */ | ||
392 | unsigned long debugFlowQueued; | ||
393 | unsigned long debugInlineQueued; | ||
394 | unsigned long debugDataQueued; | ||
395 | unsigned long debugBypassQueued; | ||
396 | unsigned long debugFlowCount; | ||
397 | unsigned long debugInlineCount; | ||
398 | unsigned long debugBypassCount; | ||
399 | |||
400 | rwlock_t read_fifo_spinlock; | ||
401 | rwlock_t write_fifo_spinlock; | ||
402 | |||
403 | // For queuing interrupt bottom half handlers. /\/\|=mhw=|\/\/ | ||
404 | struct work_struct tqueue_interrupt; | ||
405 | |||
406 | struct timer_list SendPendingTimer; // Used by iiSendPending | ||
407 | unsigned int SendPendingRetry; | ||
408 | } i2eBordStr, *i2eBordStrPtr; | ||
409 | |||
410 | //------------------------------------------------------------------- | ||
411 | // Macro Definitions for the indirect calls defined in the i2eBordStr | ||
412 | //------------------------------------------------------------------- | ||
413 | // | ||
414 | #define iiDelay(a,b) (*(a)->i2eDelay)(b) | ||
415 | #define iiWriteBuf(a,b,c) (*(a)->i2eWriteBuf)(a,b,c) | ||
416 | #define iiReadBuf(a,b,c) (*(a)->i2eReadBuf)(a,b,c) | ||
417 | |||
418 | #define iiWriteWord(a,b) (*(a)->i2eWriteWord)(a,b) | ||
419 | #define iiReadWord(a) (*(a)->i2eReadWord)(a) | ||
420 | |||
421 | #define iiWaitForTxEmpty(a,b) (*(a)->i2eWaitForTxEmpty)(a,b) | ||
422 | |||
423 | #define iiTxMailEmpty(a) (*(a)->i2eTxMailEmpty)(a) | ||
424 | #define iiTrySendMail(a,b) (*(a)->i2eTrySendMail)(a,b) | ||
425 | |||
426 | #define iiGetMail(a) (*(a)->i2eGetMail)(a) | ||
427 | #define iiEnableMailIrq(a) (*(a)->i2eEnableMailIrq)(a) | ||
428 | #define iiDisableMailIrq(a) (*(a)->i2eWriteMask)(a,0) | ||
429 | #define iiWriteMask(a,b) (*(a)->i2eWriteMask)(a,b) | ||
430 | |||
431 | //------------------------------------------- | ||
432 | // Manifests for i2eBordStr: | ||
433 | //------------------------------------------- | ||
434 | |||
435 | #define YES 1 | ||
436 | #define NO 0 | ||
437 | |||
438 | #define NULLFUNC (void (*)(void))0 | ||
439 | #define NULLPTR (void *)0 | ||
440 | |||
441 | typedef void (*delayFunc_t)(unsigned int); | ||
442 | |||
443 | // i2eValid | ||
444 | // | ||
445 | #define I2E_MAGIC 0x4251 // Structure is valid. | ||
446 | #define I2E_INCOMPLETE 0x1122 // Structure failed during init. | ||
447 | |||
448 | |||
449 | // i2eError | ||
450 | // | ||
451 | #define I2EE_GOOD 0 // Operation successful | ||
452 | #define I2EE_BADADDR 1 // Address out of range | ||
453 | #define I2EE_BADSTATE 2 // Attempt to perform a function when the board | ||
454 | // structure was in the incorrect state | ||
455 | #define I2EE_BADMAGIC 3 // Bad magic number from Power On test (i2ePomSize | ||
456 | // reflects what was read | ||
457 | #define I2EE_PORM_SHORT 4 // Power On message too short | ||
458 | #define I2EE_PORM_LONG 5 // Power On message too long | ||
459 | #define I2EE_BAD_FAMILY 6 // Un-supported board family type | ||
460 | #define I2EE_INCONSIST 7 // Firmware reports something impossible, | ||
461 | // e.g. unexpected number of ports... Almost no | ||
462 | // excuse other than bad FIFO... | ||
463 | #define I2EE_POSTERR 8 // Power-On self test reported a bad error | ||
464 | #define I2EE_BADBUS 9 // Unknown Bus type declared in message | ||
465 | #define I2EE_TXE_TIME 10 // Timed out waiting for TX Fifo to empty | ||
466 | #define I2EE_INVALID 11 // i2eValid field does not indicate a valid and | ||
467 | // complete board structure (for functions which | ||
468 | // require this be so.) | ||
469 | #define I2EE_BAD_PORT 12 // Discrepancy between channels actually found and | ||
470 | // what the product is supposed to have. Check | ||
471 | // i2eGoodMap vs i2eChannelMap for details. | ||
472 | #define I2EE_BAD_IRQ 13 // Someone specified an unsupported IRQ | ||
473 | #define I2EE_NOCHANNELS 14 // No channel structures have been defined (for | ||
474 | // functions requiring this). | ||
475 | |||
476 | // i2eFifoStyle | ||
477 | // | ||
478 | #define FIFO_II 0 /* IntelliPort-II style: see also i2hw.h */ | ||
479 | #define FIFO_IIEX 1 /* IntelliPort-IIEX style */ | ||
480 | |||
481 | // i2eGetMail | ||
482 | // | ||
483 | #define NO_MAIL_HERE 0x1111 // Since mail is unsigned char, cannot possibly | ||
484 | // promote to 0x1111. | ||
485 | // i2eState | ||
486 | // | ||
487 | #define II_STATE_COLD 0 // Addresses have been defined, but board not even | ||
488 | // reset yet. | ||
489 | #define II_STATE_RESET 1 // Board,if it exists, has just been reset | ||
490 | #define II_STATE_READY 2 // Board ready for its first block | ||
491 | #define II_STATE_LOADING 3 // Board continuing load | ||
492 | #define II_STATE_LOADED 4 // Board has finished load: status ok | ||
493 | #define II_STATE_BADLOAD 5 // Board has finished load: failed! | ||
494 | #define II_STATE_STDLOADED 6 // Board has finished load: standard firmware | ||
495 | |||
496 | // i2eUsingIrq | ||
497 | // | ||
498 | #define IRQ_UNDEFINED 0x1352 // No valid irq (or polling = 0) can ever | ||
499 | // promote to this! | ||
500 | //------------------------------------------ | ||
501 | // Handy Macros for i2ellis.c and others | ||
502 | // Note these are common to -II and -IIEX | ||
503 | //------------------------------------------ | ||
504 | |||
505 | // Given a pointer to the board structure, does the input FIFO have any data or | ||
506 | // not? | ||
507 | // | ||
508 | #define HAS_INPUT(pB) !(INB(pB->i2eStatus) & ST_IN_EMPTY) | ||
509 | #define HAS_NO_INPUT(pB) (INB(pB->i2eStatus) & ST_IN_EMPTY) | ||
510 | |||
511 | // Given a pointer to board structure, read a byte or word from the fifo | ||
512 | // | ||
513 | #define BYTE_FROM(pB) (unsigned char)INB(pB->i2eData) | ||
514 | #define WORD_FROM(pB) (unsigned short)INW(pB->i2eData) | ||
515 | |||
516 | // Given a pointer to board structure, is there room for any data to be written | ||
517 | // to the data fifo? | ||
518 | // | ||
519 | #define HAS_OUTROOM(pB) !(INB(pB->i2eStatus) & ST_OUT_FULL) | ||
520 | #define HAS_NO_OUTROOM(pB) (INB(pB->i2eStatus) & ST_OUT_FULL) | ||
521 | |||
522 | // Given a pointer to board structure, write a single byte to the fifo | ||
523 | // structure. Note that for 16-bit interfaces, the high order byte is undefined | ||
524 | // and unknown. | ||
525 | // | ||
526 | #define BYTE_TO(pB, c) OUTB(pB->i2eData,(c)) | ||
527 | |||
528 | // Write a word to the fifo structure. For 8-bit interfaces, this may have | ||
529 | // unknown results. | ||
530 | // | ||
531 | #define WORD_TO(pB, c) OUTW(pB->i2eData,(c)) | ||
532 | |||
533 | // Given a pointer to the board structure, is there anything in the incoming | ||
534 | // mailbox? | ||
535 | // | ||
536 | #define HAS_MAIL(pB) (INB(pB->i2eStatus) & ST_IN_MAIL) | ||
537 | |||
538 | #define UPDATE_FIFO_ROOM(pB) (pB)->i2eFifoRemains=(pB)->i2eFifoSize | ||
539 | |||
540 | // Handy macro to round up a number (like the buffer write and read routines do) | ||
541 | // | ||
542 | #define ROUNDUP(number) (((number)+1) & (~1)) | ||
543 | |||
544 | //------------------------------------------ | ||
545 | // Function Declarations for i2ellis.c | ||
546 | //------------------------------------------ | ||
547 | // | ||
548 | // Functions called directly | ||
549 | // | ||
550 | // Initialization of a board & structure is in four (five!) parts: | ||
551 | // | ||
552 | // 0) iiEllisInit() - Initialize iiEllis subsystem. | ||
553 | // 1) iiSetAddress() - Define the board address & delay function for a board. | ||
554 | // 2) iiReset() - Reset the board (provided it exists) | ||
555 | // -- Note you may do this to several boards -- | ||
556 | // 3) iiResetDelay() - Delay for 2 seconds (once for all boards) | ||
557 | // 4) iiInitialize() - Attempt to read Power-up message; further initialize | ||
558 | // accelerators | ||
559 | // | ||
560 | // Then you may use iiDownloadAll() or iiDownloadFile() (in i2file.c) to write | ||
561 | // loadware. To change loadware, you must begin again with step 2, resetting | ||
562 | // the board again (step 1 not needed). | ||
563 | |||
564 | static void iiEllisInit(void); | ||
565 | static int iiSetAddress(i2eBordStrPtr, int, delayFunc_t ); | ||
566 | static int iiReset(i2eBordStrPtr); | ||
567 | static int iiResetDelay(i2eBordStrPtr); | ||
568 | static int iiInitialize(i2eBordStrPtr); | ||
569 | |||
570 | // Routine to validate that all channels expected are there. | ||
571 | // | ||
572 | extern int iiValidateChannels(i2eBordStrPtr); | ||
573 | |||
574 | // Routine used to download a block of loadware. | ||
575 | // | ||
576 | static int iiDownloadBlock(i2eBordStrPtr, loadHdrStrPtr, int); | ||
577 | |||
578 | // Return values given by iiDownloadBlock, iiDownloadAll, iiDownloadFile: | ||
579 | // | ||
580 | #define II_DOWN_BADVALID 0 // board structure is invalid | ||
581 | #define II_DOWN_CONTINUING 1 // So far, so good, firmware expects more | ||
582 | #define II_DOWN_GOOD 2 // Download complete, CRC good | ||
583 | #define II_DOWN_BAD 3 // Download complete, but CRC bad | ||
584 | #define II_DOWN_BADFILE 4 // Bad magic number in loadware file | ||
585 | #define II_DOWN_BADSTATE 5 // Board is in an inappropriate state for | ||
586 | // downloading loadware. (see i2eState) | ||
587 | #define II_DOWN_TIMEOUT 6 // Timeout waiting for firmware | ||
588 | #define II_DOWN_OVER 7 // Too much data | ||
589 | #define II_DOWN_UNDER 8 // Not enough data | ||
590 | #define II_DOWN_NOFILE 9 // Loadware file not found | ||
591 | |||
592 | // Routine to download an entire loadware module: Return values are a subset of | ||
593 | // iiDownloadBlock's, excluding, of course, II_DOWN_CONTINUING | ||
594 | // | ||
595 | static int iiDownloadAll(i2eBordStrPtr, loadHdrStrPtr, int, int); | ||
596 | |||
597 | // Called indirectly always. Needed externally so the routine might be | ||
598 | // SPECIFIED as an argument to iiReset() | ||
599 | // | ||
600 | //static void ii2DelayIO(unsigned int); // N-millisecond delay using | ||
601 | //hardware spin | ||
602 | //static void ii2DelayTimer(unsigned int); // N-millisecond delay using Linux | ||
603 | //timer | ||
604 | |||
605 | // Many functions defined here return True if good, False otherwise, with an | ||
606 | // error code in i2eError field. Here is a handy macro for setting the error | ||
607 | // code and returning. | ||
608 | // | ||
609 | #define COMPLETE(pB,code) \ | ||
610 | if(1){ \ | ||
611 | pB->i2eError = code; \ | ||
612 | return (code == I2EE_GOOD);\ | ||
613 | } | ||
614 | |||
615 | #endif // I2ELLIS_H | ||
diff --git a/drivers/char/ip2/i2hw.h b/drivers/char/ip2/i2hw.h new file mode 100644 index 000000000000..15fe04e748f4 --- /dev/null +++ b/drivers/char/ip2/i2hw.h | |||
@@ -0,0 +1,648 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1999 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Definitions limited to properties of the hardware or the | ||
12 | * bootstrap firmware. As such, they are applicable regardless of | ||
13 | * operating system or loadware (standard or diagnostic). | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | #ifndef I2HW_H | ||
17 | #define I2HW_H 1 | ||
18 | //------------------------------------------------------------------------------ | ||
19 | // Revision History: | ||
20 | // | ||
21 | // 23 September 1991 MAG First Draft Started...through... | ||
22 | // 11 October 1991 ... Continuing development... | ||
23 | // 6 August 1993 Added support for ISA-4 (asic) which is architected | ||
24 | // as an ISA-CEX with a single 4-port box. | ||
25 | // | ||
26 | // 20 December 1996 AKM Version for Linux | ||
27 | // | ||
28 | //------------------------------------------------------------------------------ | ||
29 | /*------------------------------------------------------------------------------ | ||
30 | |||
31 | HARDWARE DESCRIPTION: | ||
32 | |||
33 | Introduction: | ||
34 | |||
35 | The IntelliPort-II and IntelliPort-IIEX products occupy a block of eight (8) | ||
36 | addresses in the host's I/O space. | ||
37 | |||
38 | Some addresses are used to transfer data to/from the board, some to transfer | ||
39 | so-called "mailbox" messages, and some to read bit-mapped status information. | ||
40 | While all the products in the line are functionally similar, some use a 16-bit | ||
41 | data path to transfer data while others use an 8-bit path. Also, the use of | ||
42 | command /status/mailbox registers differs slightly between the II and IIEX | ||
43 | branches of the family. | ||
44 | |||
45 | The host determines what type of board it is dealing with by reading a string of | ||
46 | sixteen characters from the board. These characters are always placed in the | ||
47 | fifo by the board's local processor whenever the board is reset (either from | ||
48 | power-on or under software control) and are known as the "Power-on Reset | ||
49 | Message." In order that this message can be read from either type of board, the | ||
50 | hardware registers used in reading this message are the same. Once this message | ||
51 | has been read by the host, then it has the information required to operate. | ||
52 | |||
53 | General Differences between boards: | ||
54 | |||
55 | The greatest structural difference is between the -II and -IIEX families of | ||
56 | product. The -II boards use the Am4701 dual 512x8 bidirectional fifo to support | ||
57 | the data path, mailbox registers, and status registers. This chip contains some | ||
58 | features which are not used in the IntelliPort-II products; a description of | ||
59 | these is omitted here. Because of these many features, it contains many | ||
60 | registers, too many to access directly within a small address space. They are | ||
61 | accessed by first writing a value to a "pointer" register. This value selects | ||
62 | the register to be accessed. The next read or write to that address accesses | ||
63 | the selected register rather than the pointer register. | ||
64 | |||
65 | The -IIEX boards use a proprietary design similar to the Am4701 in function. But | ||
66 | because of a simpler, more streamlined design it doesn't require so many | ||
67 | registers. This means they can be accessed directly in single operations rather | ||
68 | than through a pointer register. | ||
69 | |||
70 | Besides these differences, there are differences in whether 8-bit or 16-bit | ||
71 | transfers are used to move data to the board. | ||
72 | |||
73 | The -II boards are capable only of 8-bit data transfers, while the -IIEX boards | ||
74 | may be configured for either 8-bit or 16-bit data transfers. If the on-board DIP | ||
75 | switch #8 is ON, and the card has been installed in a 16-bit slot, 16-bit | ||
76 | transfers are supported (and will be expected by the standard loadware). The | ||
77 | on-board firmware can determine the position of the switch, and whether the | ||
78 | board is installed in a 16-bit slot; it supplies this information to the host as | ||
79 | part of the power-up reset message. | ||
80 | |||
81 | The configuration switch (#8) and slot selection do not directly configure the | ||
82 | hardware. It is up to the on-board loadware and host-based drivers to act | ||
83 | according to the selected options. That is, loadware and drivers could be | ||
84 | written to perform 8-bit transfers regardless of the state of the DIP switch or | ||
85 | slot (and in a diagnostic environment might well do so). Likewise, 16-bit | ||
86 | transfers could be performed as long as the card is in a 16-bit slot. | ||
87 | |||
88 | Note the slot selection and DIP switch selection are provided separately: a | ||
89 | board running in 8-bit mode in a 16-bit slot has a greater range of possible | ||
90 | interrupts to choose from; information of potential use to the host. | ||
91 | |||
92 | All 8-bit data transfers are done in the same way, regardless of whether on a | ||
93 | -II board or a -IIEX board. | ||
94 | |||
95 | The host must consider two things then: 1) whether a -II or -IIEX product is | ||
96 | being used, and 2) whether an 8-bit or 16-bit data path is used. | ||
97 | |||
98 | A further difference is that -II boards always have a 512-byte fifo operating in | ||
99 | each direction. -IIEX boards may use fifos of varying size; this size is | ||
100 | reported as part of the power-up message. | ||
101 | |||
102 | I/O Map Of IntelliPort-II and IntelliPort-IIEX boards: | ||
103 | (Relative to the chosen base address) | ||
104 | |||
105 | Addr R/W IntelliPort-II IntelliPort-IIEX | ||
106 | ---- --- -------------- ---------------- | ||
107 | 0 R/W Data Port (byte) Data Port (byte or word) | ||
108 | 1 R/W (Not used) (MSB of word-wide data written to Data Port) | ||
109 | 2 R Status Register Status Register | ||
110 | 2 W Pointer Register Interrupt Mask Register | ||
111 | 3 R/W (Not used) Mailbox Registers (6 bits: 11111100) | ||
112 | 4,5 -- Reserved for future products | ||
113 | 6 -- Reserved for future products | ||
114 | 7 R Guaranteed to have no effect | ||
115 | 7 W Hardware reset of board. | ||
116 | |||
117 | |||
118 | Rules: | ||
119 | All data transfers are performed using the even i/o address. If byte-wide data | ||
120 | transfers are being used, do INB/OUTB operations on the data port. If word-wide | ||
121 | transfers are used, do INW/OUTW operations. In some circumstances (such as | ||
122 | reading the power-up message) you will do INB from the data port, but in this | ||
123 | case the MSB of each word read is lost. When accessing all other unreserved | ||
124 | registers, use byte operations only. | ||
125 | ------------------------------------------------------------------------------*/ | ||
126 | |||
127 | //------------------------------------------------ | ||
128 | // Mandatory Includes: | ||
129 | //------------------------------------------------ | ||
130 | // | ||
131 | #include "ip2types.h" | ||
132 | #include "i2os.h" /* For any o.s., compiler, or host-related issues */ | ||
133 | |||
134 | //------------------------------------------------------------------------- | ||
135 | // Manifests for the I/O map: | ||
136 | //------------------------------------------------------------------------- | ||
137 | // R/W: Data port (byte) for IntelliPort-II, | ||
138 | // R/W: Data port (byte or word) for IntelliPort-IIEX | ||
139 | // Incoming or outgoing data passes through a FIFO, the status of which is | ||
140 | // available in some of the bits in FIFO_STATUS. This (bidirectional) FIFO is | ||
141 | // the primary means of transferring data, commands, flow-control, and status | ||
142 | // information between the host and board. | ||
143 | // | ||
144 | #define FIFO_DATA 0 | ||
145 | |||
146 | // Another way of passing information between the board and the host is | ||
147 | // through "mailboxes". Unlike a FIFO, a mailbox holds only a single byte of | ||
148 | // data. Writing data to the mailbox causes a status bit to be set, and | ||
149 | // potentially interrupting the intended receiver. The sender has some way to | ||
150 | // determine whether the data has been read yet; as soon as it has, it may send | ||
151 | // more. The mailboxes are handled differently on -II and -IIEX products, as | ||
152 | // suggested below. | ||
153 | //------------------------------------------------------------------------------ | ||
154 | // Read: Status Register for IntelliPort-II or -IIEX | ||
155 | // The presence of any bit set here will cause an interrupt to the host, | ||
156 | // provided the corresponding bit has been unmasked in the interrupt mask | ||
157 | // register. Furthermore, interrupts to the host are disabled globally until the | ||
158 | // loadware selects the irq line to use. With the exception of STN_MR, the bits | ||
159 | // remain set so long as the associated condition is true. | ||
160 | // | ||
161 | #define FIFO_STATUS 2 | ||
162 | |||
163 | // Bit map of status bits which are identical for -II and -IIEX | ||
164 | // | ||
165 | #define ST_OUT_FULL 0x40 // Outbound FIFO full | ||
166 | #define ST_IN_EMPTY 0x20 // Inbound FIFO empty | ||
167 | #define ST_IN_MAIL 0x04 // Inbound Mailbox full | ||
168 | |||
169 | // The following exists only on the Intelliport-IIEX, and indicates that the | ||
170 | // board has not read the last outgoing mailbox data yet. In the IntelliPort-II, | ||
171 | // the outgoing mailbox may be read back: a zero indicates the board has read | ||
172 | // the data. | ||
173 | // | ||
174 | #define STE_OUT_MAIL 0x80 // Outbound mailbox full (!) | ||
175 | |||
176 | // The following bits are defined differently for -II and -IIEX boards. Code | ||
177 | // which relies on these bits will need to be functionally different for the two | ||
178 | // types of boards and should be generally avoided because of the additional | ||
179 | // complexity this creates: | ||
180 | |||
181 | // Bit map of status bits only on -II | ||
182 | |||
183 | // Fifo has been RESET (cleared when the status register is read). Note that | ||
184 | // this condition cannot be masked and would always interrupt the host, except | ||
185 | // that the hardware reset also disables interrupts globally from the board | ||
186 | // until re-enabled by loadware. This could also arise from the | ||
187 | // Am4701-supported command to reset the chip, but this command is generally not | ||
188 | // used here. | ||
189 | // | ||
190 | #define STN_MR 0x80 | ||
191 | |||
192 | // See the AMD Am4701 data sheet for details on the following four bits. They | ||
193 | // are not presently used by Computone drivers. | ||
194 | // | ||
195 | #define STN_OUT_AF 0x10 // Outbound FIFO almost full (programmable) | ||
196 | #define STN_IN_AE 0x08 // Inbound FIFO almost empty (programmable) | ||
197 | #define STN_BD 0x02 // Inbound byte detected | ||
198 | #define STN_PE 0x01 // Parity/Framing condition detected | ||
199 | |||
200 | // Bit-map of status bits only on -IIEX | ||
201 | // | ||
202 | #define STE_OUT_HF 0x10 // Outbound FIFO half full | ||
203 | #define STE_IN_HF 0x08 // Inbound FIFO half full | ||
204 | #define STE_IN_FULL 0x02 // Inbound FIFO full | ||
205 | #define STE_OUT_MT 0x01 // Outbound FIFO empty | ||
206 | |||
207 | //------------------------------------------------------------------------------ | ||
208 | |||
209 | // Intelliport-II -- Write Only: the pointer register. | ||
210 | // Values are written to this register to select the Am4701 internal register to | ||
211 | // be accessed on the next operation. | ||
212 | // | ||
213 | #define FIFO_PTR 0x02 | ||
214 | |||
215 | // Values for the pointer register | ||
216 | // | ||
217 | #define SEL_COMMAND 0x1 // Selects the Am4701 command register | ||
218 | |||
219 | // Some possible commands: | ||
220 | // | ||
221 | #define SEL_CMD_MR 0x80 // Am4701 command to reset the chip | ||
222 | #define SEL_CMD_SH 0x40 // Am4701 command to map the "other" port into the | ||
223 | // status register. | ||
224 | #define SEL_CMD_UNSH 0 // Am4701 command to "unshift": port maps into its | ||
225 | // own status register. | ||
226 | #define SEL_MASK 0x2 // Selects the Am4701 interrupt mask register. The | ||
227 | // interrupt mask register is bit-mapped to match | ||
228 | // the status register (FIFO_STATUS) except for | ||
229 | // STN_MR. (See above.) | ||
230 | #define SEL_BYTE_DET 0x3 // Selects the Am4701 byte-detect register. (Not | ||
231 | // normally used except in diagnostics.) | ||
232 | #define SEL_OUTMAIL 0x4 // Selects the outbound mailbox (R/W). Reading back | ||
233 | // a value of zero indicates that the mailbox has | ||
234 | // been read by the board and is available for more | ||
235 | // data./ Writing to the mailbox optionally | ||
236 | // interrupts the board, depending on the loadware's | ||
237 | // setting of its interrupt mask register. | ||
238 | #define SEL_AEAF 0x5 // Selects AE/AF threshold register. | ||
239 | #define SEL_INMAIL 0x6 // Selects the inbound mailbox (Read) | ||
240 | |||
241 | //------------------------------------------------------------------------------ | ||
242 | // IntelliPort-IIEX -- Write Only: interrupt mask (and misc flags) register: | ||
243 | // Unlike IntelliPort-II, bit assignments do NOT match those of the status | ||
244 | // register. | ||
245 | // | ||
246 | #define FIFO_MASK 0x2 | ||
247 | |||
248 | // Mailbox readback select: | ||
249 | // If set, reads to FIFO_MAIL will read the OUTBOUND mailbox (host to board). If | ||
250 | // clear (default on reset) reads to FIFO_MAIL will read the INBOUND mailbox. | ||
251 | // This is the normal situation. The clearing of a mailbox is determined on | ||
252 | // -IIEX boards by waiting for the STE_OUT_MAIL bit to clear. Readback | ||
253 | // capability is provided for diagnostic purposes only. | ||
254 | // | ||
255 | #define MX_OUTMAIL_RSEL 0x80 | ||
256 | |||
257 | #define MX_IN_MAIL 0x40 // Enables interrupts when incoming mailbox goes | ||
258 | // full (ST_IN_MAIL set). | ||
259 | #define MX_IN_FULL 0x20 // Enables interrupts when incoming FIFO goes full | ||
260 | // (STE_IN_FULL). | ||
261 | #define MX_IN_MT 0x08 // Enables interrupts when incoming FIFO goes empty | ||
262 | // (ST_IN_MT). | ||
263 | #define MX_OUT_FULL 0x04 // Enables interrupts when outgoing FIFO goes full | ||
264 | // (ST_OUT_FULL). | ||
265 | #define MX_OUT_MT 0x01 // Enables interrupts when outgoing FIFO goes empty | ||
266 | // (STE_OUT_MT). | ||
267 | |||
268 | // Any remaining bits are reserved, and should be written to ZERO for | ||
269 | // compatibility with future Computone products. | ||
270 | |||
271 | //------------------------------------------------------------------------------ | ||
272 | // IntelliPort-IIEX: -- These are only 6-bit mailboxes !!! -- 11111100 (low two | ||
273 | // bits always read back 0). | ||
274 | // Read: One of the mailboxes, usually Inbound. | ||
275 | // Inbound Mailbox (MX_OUTMAIL_RSEL = 0) | ||
276 | // Outbound Mailbox (MX_OUTMAIL_RSEL = 1) | ||
277 | // Write: Outbound Mailbox | ||
278 | // For the IntelliPort-II boards, the outbound mailbox is read back to determine | ||
279 | // whether the board has read the data (0 --> data has been read). For the | ||
280 | // IntelliPort-IIEX, this is done by reading a status register. To determine | ||
281 | // whether mailbox is available for more outbound data, use the STE_OUT_MAIL bit | ||
282 | // in FIFO_STATUS. Moreover, although the Outbound Mailbox can be read back by | ||
283 | // setting MX_OUTMAIL_RSEL, it is NOT cleared when the board reads it, as is the | ||
284 | // case with the -II boards. For this reason, FIFO_MAIL is normally used to read | ||
285 | // the inbound FIFO, and MX_OUTMAIL_RSEL kept clear. (See above for | ||
286 | // MX_OUTMAIL_RSEL description.) | ||
287 | // | ||
288 | #define FIFO_MAIL 0x3 | ||
289 | |||
290 | //------------------------------------------------------------------------------ | ||
291 | // WRITE ONLY: Resets the board. (Data doesn't matter). | ||
292 | // | ||
293 | #define FIFO_RESET 0x7 | ||
294 | |||
295 | //------------------------------------------------------------------------------ | ||
296 | // READ ONLY: Will have no effect. (Data is undefined.) | ||
297 | // Actually, there will be an effect, in that the operation is sure to generate | ||
298 | // a bus cycle: viz., an I/O byte Read. This fact can be used to enforce short | ||
299 | // delays when no comparable time constant is available. | ||
300 | // | ||
301 | #define FIFO_NOP 0x7 | ||
302 | |||
303 | //------------------------------------------------------------------------------ | ||
304 | // RESET & POWER-ON RESET MESSAGE | ||
305 | /*------------------------------------------------------------------------------ | ||
306 | RESET: | ||
307 | |||
308 | The IntelliPort-II and -IIEX boards are reset in three ways: Power-up, channel | ||
309 | reset, and via a write to the reset register described above. For products using | ||
310 | the ISA bus, these three sources of reset are equvalent. For MCA and EISA buses, | ||
311 | the Power-up and channel reset sources cause additional hardware initialization | ||
312 | which should only occur at system startup time. | ||
313 | |||
314 | The third type of reset, called a "command reset", is done by writing any data | ||
315 | to the FIFO_RESET address described above. This resets the on-board processor, | ||
316 | FIFO, UARTS, and associated hardware. | ||
317 | |||
318 | This passes control of the board to the bootstrap firmware, which performs a | ||
319 | Power-On Self Test and which detects its current configuration. For example, | ||
320 | -IIEX products determine the size of FIFO which has been installed, and the | ||
321 | number and type of expansion boxes attached. | ||
322 | |||
323 | This and other information is then written to the FIFO in a 16-byte data block | ||
324 | to be read by the host. This block is guaranteed to be present within two (2) | ||
325 | seconds of having received the command reset. The firmware is now ready to | ||
326 | receive loadware from the host. | ||
327 | |||
328 | It is good practice to perform a command reset to the board explicitly as part | ||
329 | of your software initialization. This allows your code to properly restart from | ||
330 | a soft boot. (Many systems do not issue channel reset on soft boot). | ||
331 | |||
332 | Because of a hardware reset problem on some of the Cirrus Logic 1400's which are | ||
333 | used on the product, it is recommended that you reset the board twice, separated | ||
334 | by an approximately 50 milliseconds delay. (VERY approximately: probably ok to | ||
335 | be off by a factor of five. The important point is that the first command reset | ||
336 | in fact generates a reset pulse on the board. This pulse is guaranteed to last | ||
337 | less than 10 milliseconds. The additional delay ensures the 1400 has had the | ||
338 | chance to respond sufficiently to the first reset. Why not a longer delay? Much | ||
339 | more than 50 milliseconds gets to be noticable, but the board would still work. | ||
340 | |||
341 | Once all 16 bytes of the Power-on Reset Message have been read, the bootstrap | ||
342 | firmware is ready to receive loadware. | ||
343 | |||
344 | Note on Power-on Reset Message format: | ||
345 | The various fields have been designed with future expansion in view. | ||
346 | Combinations of bitfields and values have been defined which define products | ||
347 | which may not currently exist. This has been done to allow drivers to anticipate | ||
348 | the possible introduction of products in a systematic fashion. This is not | ||
349 | intended to suggest that each potential product is actually under consideration. | ||
350 | ------------------------------------------------------------------------------*/ | ||
351 | |||
352 | //---------------------------------------- | ||
353 | // Format of Power-on Reset Message | ||
354 | //---------------------------------------- | ||
355 | |||
356 | typedef union _porStr // "por" stands for Power On Reset | ||
357 | { | ||
358 | unsigned char c[16]; // array used when considering the message as a | ||
359 | // string of undifferentiated characters | ||
360 | |||
361 | struct // Elements used when considering values | ||
362 | { | ||
363 | // The first two bytes out of the FIFO are two magic numbers. These are | ||
364 | // intended to establish that there is indeed a member of the | ||
365 | // IntelliPort-II(EX) family present. The remaining bytes may be | ||
366 | // expected // to be valid. When reading the Power-on Reset message, | ||
367 | // if the magic numbers do not match it is probably best to stop | ||
368 | // reading immediately. You are certainly not reading our board (unless | ||
369 | // hardware is faulty), and may in fact be reading some other piece of | ||
370 | // hardware. | ||
371 | |||
372 | unsigned char porMagic1; // magic number: first byte == POR_MAGIC_1 | ||
373 | unsigned char porMagic2; // magic number: second byte == POR_MAGIC_2 | ||
374 | |||
375 | // The Version, Revision, and Subrevision are stored as absolute numbers | ||
376 | // and would normally be displayed in the format V.R.S (e.g. 1.0.2) | ||
377 | |||
378 | unsigned char porVersion; // Bootstrap firmware version number | ||
379 | unsigned char porRevision; // Bootstrap firmware revision number | ||
380 | unsigned char porSubRev; // Bootstrap firmware sub-revision number | ||
381 | |||
382 | unsigned char porID; // Product ID: Bit-mapped according to | ||
383 | // conventions described below. Among other | ||
384 | // things, this allows us to distinguish | ||
385 | // IntelliPort-II boards from IntelliPort-IIEX | ||
386 | // boards. | ||
387 | |||
388 | unsigned char porBus; // IntelliPort-II: Unused | ||
389 | // IntelliPort-IIEX: Bus Information: | ||
390 | // Bit-mapped below | ||
391 | |||
392 | unsigned char porMemory; // On-board DRAM size: in 32k blocks | ||
393 | |||
394 | // porPorts1 (and porPorts2) are used to determine the ports which are | ||
395 | // available to the board. For non-expandable product, a single number | ||
396 | // is sufficient. For expandable product, the board may be connected | ||
397 | // to as many as four boxes. Each box may be (so far) either a 16-port | ||
398 | // or an 8-port size. Whenever an 8-port box is used, the remaining 8 | ||
399 | // ports leave gaps between existing channels. For that reason, | ||
400 | // expandable products must report a MAP of available channels. Since | ||
401 | // each UART supports four ports, we represent each UART found by a | ||
402 | // single bit. Using two bytes to supply the mapping information we | ||
403 | // report the presense or absense of up to 16 UARTS, or 64 ports in | ||
404 | // steps of 4 ports. For -IIEX products, the ports are numbered | ||
405 | // starting at the box closest to the controller in the "chain". | ||
406 | |||
407 | // Interpreted Differently for IntelliPort-II and -IIEX. | ||
408 | // -II: Number of ports (Derived actually from product ID). See | ||
409 | // Diag1&2 to indicate if uart was actually detected. | ||
410 | // -IIEX: Bit-map of UARTS found, LSB (see below for MSB of this). This | ||
411 | // bitmap is based on detecting the uarts themselves; | ||
412 | // see porFlags for information from the box i.d's. | ||
413 | unsigned char porPorts1; | ||
414 | |||
415 | unsigned char porDiag1; // Results of on-board P.O.S.T, 1st byte | ||
416 | unsigned char porDiag2; // Results of on-board P.O.S.T, 2nd byte | ||
417 | unsigned char porSpeed; // Speed of local CPU: given as MHz x10 | ||
418 | // e.g., 16.0 MHz CPU is reported as 160 | ||
419 | unsigned char porFlags; // Misc information (see manifests below) | ||
420 | // Bit-mapped: CPU type, UART's present | ||
421 | |||
422 | unsigned char porPorts2; // -II: Undefined | ||
423 | // -IIEX: Bit-map of UARTS found, MSB (see | ||
424 | // above for LSB) | ||
425 | |||
426 | // IntelliPort-II: undefined | ||
427 | // IntelliPort-IIEX: 1 << porFifoSize gives the size, in bytes, of the | ||
428 | // host interface FIFO, in each direction. When running the -IIEX in | ||
429 | // 8-bit mode, fifo capacity is halved. The bootstrap firmware will | ||
430 | // have already accounted for this fact in generating this number. | ||
431 | unsigned char porFifoSize; | ||
432 | |||
433 | // IntelliPort-II: undefined | ||
434 | // IntelliPort-IIEX: The number of boxes connected. (Presently 1-4) | ||
435 | unsigned char porNumBoxes; | ||
436 | } e; | ||
437 | } porStr, *porStrPtr; | ||
438 | |||
439 | //-------------------------- | ||
440 | // Values for porStr fields | ||
441 | //-------------------------- | ||
442 | |||
443 | //--------------------- | ||
444 | // porMagic1, porMagic2 | ||
445 | //---------------------- | ||
446 | // | ||
447 | #define POR_MAGIC_1 0x96 // The only valid value for porMagic1 | ||
448 | #define POR_MAGIC_2 0x35 // The only valid value for porMagic2 | ||
449 | #define POR_1_INDEX 0 // Byte position of POR_MAGIC_1 | ||
450 | #define POR_2_INDEX 1 // Ditto for POR_MAGIC_2 | ||
451 | |||
452 | //---------------------- | ||
453 | // porID | ||
454 | //---------------------- | ||
455 | // | ||
456 | #define POR_ID_FAMILY 0xc0 // These bits indicate the general family of | ||
457 | // product. | ||
458 | #define POR_ID_FII 0x00 // Family is "IntelliPort-II" | ||
459 | #define POR_ID_FIIEX 0x40 // Family is "IntelliPort-IIEX" | ||
460 | |||
461 | // These bits are reserved, presently zero. May be used at a later date to | ||
462 | // convey other product information. | ||
463 | // | ||
464 | #define POR_ID_RESERVED 0x3c | ||
465 | |||
466 | #define POR_ID_SIZE 0x03 // Remaining bits indicate number of ports & | ||
467 | // Connector information. | ||
468 | #define POR_ID_II_8 0x00 // For IntelliPort-II, indicates 8-port using | ||
469 | // standard brick. | ||
470 | #define POR_ID_II_8R 0x01 // For IntelliPort-II, indicates 8-port using | ||
471 | // RJ11's (no CTS) | ||
472 | #define POR_ID_II_6 0x02 // For IntelliPort-II, indicates 6-port using | ||
473 | // RJ45's | ||
474 | #define POR_ID_II_4 0x03 // For IntelliPort-II, indicates 4-port using | ||
475 | // 4xRJ45 connectors | ||
476 | #define POR_ID_EX 0x00 // For IntelliPort-IIEX, indicates standard | ||
477 | // expandable controller (other values reserved) | ||
478 | |||
479 | //---------------------- | ||
480 | // porBus | ||
481 | //---------------------- | ||
482 | |||
483 | // IntelliPort-IIEX only: Board is installed in a 16-bit slot | ||
484 | // | ||
485 | #define POR_BUS_SLOT16 0x20 | ||
486 | |||
487 | // IntelliPort-IIEX only: DIP switch #8 is on, selecting 16-bit host interface | ||
488 | // operation. | ||
489 | // | ||
490 | #define POR_BUS_DIP16 0x10 | ||
491 | |||
492 | // Bits 0-2 indicate type of bus: This information is stored in the bootstrap | ||
493 | // loadware, different loadware being used on different products for different | ||
494 | // buses. For most situations, the drivers do not need this information; but it | ||
495 | // is handy in a diagnostic environment. For example, on microchannel boards, | ||
496 | // you would not want to try to test several interrupts, only the one for which | ||
497 | // you were configured. | ||
498 | // | ||
499 | #define POR_BUS_TYPE 0x07 | ||
500 | |||
501 | // Unknown: this product doesn't know what bus it is running in. (e.g. if same | ||
502 | // bootstrap firmware were wanted for two different buses.) | ||
503 | // | ||
504 | #define POR_BUS_T_UNK 0 | ||
505 | |||
506 | // Note: existing firmware for ISA-8 and MC-8 currently report the POR_BUS_T_UNK | ||
507 | // state, since the same bootstrap firmware is used for each. | ||
508 | |||
509 | #define POR_BUS_T_MCA 1 // MCA BUS */ | ||
510 | #define POR_BUS_T_EISA 2 // EISA BUS */ | ||
511 | #define POR_BUS_T_ISA 3 // ISA BUS */ | ||
512 | |||
513 | // Values 4-7 Reserved | ||
514 | |||
515 | // Remaining bits are reserved | ||
516 | |||
517 | //---------------------- | ||
518 | // porDiag1 | ||
519 | //---------------------- | ||
520 | |||
521 | #define POR_BAD_MAPPER 0x80 // HW failure on P.O.S.T: Chip mapper failed | ||
522 | |||
523 | // These two bits valid only for the IntelliPort-II | ||
524 | // | ||
525 | #define POR_BAD_UART1 0x01 // First 1400 bad | ||
526 | #define POR_BAD_UART2 0x02 // Second 1400 bad | ||
527 | |||
528 | //---------------------- | ||
529 | // porDiag2 | ||
530 | //---------------------- | ||
531 | |||
532 | #define POR_DEBUG_PORT 0x80 // debug port was detected by the P.O.S.T | ||
533 | #define POR_DIAG_OK 0x00 // Indicates passage: Failure codes not yet | ||
534 | // available. | ||
535 | // Other bits undefined. | ||
536 | //---------------------- | ||
537 | // porFlags | ||
538 | //---------------------- | ||
539 | |||
540 | #define POR_CPU 0x03 // These bits indicate supposed CPU type | ||
541 | #define POR_CPU_8 0x01 // Board uses an 80188 (no such thing yet) | ||
542 | #define POR_CPU_6 0x02 // Board uses an 80186 (all existing products) | ||
543 | #define POR_CEX4 0x04 // If set, this is an ISA-CEX/4: An ISA-4 (asic) | ||
544 | // which is architected like an ISA-CEX connected | ||
545 | // to a (hitherto impossible) 4-port box. | ||
546 | #define POR_BOXES 0xf0 // Valid for IntelliPort-IIEX only: Map of Box | ||
547 | // sizes based on box I.D. | ||
548 | #define POR_BOX_16 0x10 // Set indicates 16-port, clear 8-port | ||
549 | |||
550 | //------------------------------------- | ||
551 | // LOADWARE and DOWNLOADING CODE | ||
552 | //------------------------------------- | ||
553 | |||
554 | /* | ||
555 | Loadware may be sent to the board in two ways: | ||
556 | 1) It may be read from a (binary image) data file block by block as each block | ||
557 | is sent to the board. This is only possible when the initialization is | ||
558 | performed by code which can access your file system. This is most suitable | ||
559 | for diagnostics and appications which use the interface library directly. | ||
560 | |||
561 | 2) It may be hard-coded into your source by including a .h file (typically | ||
562 | supplied by Computone), which declares a data array and initializes every | ||
563 | element. This acheives the same result as if an entire loadware file had | ||
564 | been read into the array. | ||
565 | |||
566 | This requires more data space in your program, but access to the file system | ||
567 | is not required. This method is more suited to driver code, which typically | ||
568 | is running at a level too low to access the file system directly. | ||
569 | |||
570 | At present, loadware can only be generated at Computone. | ||
571 | |||
572 | All Loadware begins with a header area which has a particular format. This | ||
573 | includes a magic number which identifies the file as being (purportedly) | ||
574 | loadware, CRC (for the loader), and version information. | ||
575 | */ | ||
576 | |||
577 | |||
578 | //----------------------------------------------------------------------------- | ||
579 | // Format of loadware block | ||
580 | // | ||
581 | // This is defined as a union so we can pass a pointer to one of these items | ||
582 | // and (if it is the first block) pick out the version information, etc. | ||
583 | // | ||
584 | // Otherwise, to deal with this as a simple character array | ||
585 | //------------------------------------------------------------------------------ | ||
586 | |||
587 | #define LOADWARE_BLOCK_SIZE 512 // Number of bytes in each block of loadware | ||
588 | |||
589 | typedef union _loadHdrStr | ||
590 | { | ||
591 | unsigned char c[LOADWARE_BLOCK_SIZE]; // Valid for every block | ||
592 | |||
593 | struct // These fields are valid for only the first block of loadware. | ||
594 | { | ||
595 | unsigned char loadMagic; // Magic number: see below | ||
596 | unsigned char loadBlocksMore; // How many more blocks? | ||
597 | unsigned char loadCRC[2]; // Two CRC bytes: used by loader | ||
598 | unsigned char loadVersion; // Version number | ||
599 | unsigned char loadRevision; // Revision number | ||
600 | unsigned char loadSubRevision; // Sub-revision number | ||
601 | unsigned char loadSpares[9]; // Presently unused | ||
602 | unsigned char loadDates[32]; // Null-terminated string which can give | ||
603 | // date and time of compilation | ||
604 | } e; | ||
605 | } loadHdrStr, *loadHdrStrPtr; | ||
606 | |||
607 | //------------------------------------ | ||
608 | // Defines for downloading code: | ||
609 | //------------------------------------ | ||
610 | |||
611 | // The loadMagic field in the first block of the loadfile must be this, else the | ||
612 | // file is not valid. | ||
613 | // | ||
614 | #define MAGIC_LOADFILE 0x3c | ||
615 | |||
616 | // How do we know the load was successful? On completion of the load, the | ||
617 | // bootstrap firmware returns a code to indicate whether it thought the download | ||
618 | // was valid and intends to execute it. These are the only possible valid codes: | ||
619 | // | ||
620 | #define LOADWARE_OK 0xc3 // Download was ok | ||
621 | #define LOADWARE_BAD 0x5a // Download was bad (CRC error) | ||
622 | |||
623 | // Constants applicable to writing blocks of loadware: | ||
624 | // The first block of loadware might take 600 mS to load, in extreme cases. | ||
625 | // (Expandable board: worst case for sending startup messages to the LCD's). | ||
626 | // The 600mS figure is not really a calculation, but a conservative | ||
627 | // guess/guarantee. Usually this will be within 100 mS, like subsequent blocks. | ||
628 | // | ||
629 | #define MAX_DLOAD_START_TIME 1000 // 1000 mS | ||
630 | #define MAX_DLOAD_READ_TIME 100 // 100 mS | ||
631 | |||
632 | // Firmware should respond with status (see above) within this long of host | ||
633 | // having sent the final block. | ||
634 | // | ||
635 | #define MAX_DLOAD_ACK_TIME 100 // 100 mS, again! | ||
636 | |||
637 | //------------------------------------------------------ | ||
638 | // MAXIMUM NUMBER OF PORTS PER BOARD: | ||
639 | // This is fixed for now (with the expandable), but may | ||
640 | // be expanding according to even newer products. | ||
641 | //------------------------------------------------------ | ||
642 | // | ||
643 | #define ABS_MAX_BOXES 4 // Absolute most boxes per board | ||
644 | #define ABS_BIGGEST_BOX 16 // Absolute the most ports per box | ||
645 | #define ABS_MOST_PORTS (ABS_MAX_BOXES * ABS_BIGGEST_BOX) | ||
646 | |||
647 | #endif // I2HW_H | ||
648 | |||
diff --git a/drivers/char/ip2/i2lib.c b/drivers/char/ip2/i2lib.c new file mode 100644 index 000000000000..82c5f30375ac --- /dev/null +++ b/drivers/char/ip2/i2lib.c | |||
@@ -0,0 +1,2219 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1999 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: High-level interface code for the device driver. Uses the | ||
12 | * Extremely Low Level Interface Support (i2ellis.c). Provides an | ||
13 | * interface to the standard loadware, to support drivers or | ||
14 | * application code. (This is included source code, not a separate | ||
15 | * compilation module.) | ||
16 | * | ||
17 | *******************************************************************************/ | ||
18 | //------------------------------------------------------------------------------ | ||
19 | // Note on Strategy: | ||
20 | // Once the board has been initialized, it will interrupt us when: | ||
21 | // 1) It has something in the fifo for us to read (incoming data, flow control | ||
22 | // packets, or whatever). | ||
23 | // 2) It has stripped whatever we have sent last time in the FIFO (and | ||
24 | // consequently is ready for more). | ||
25 | // | ||
26 | // Note also that the buffer sizes declared in i2lib.h are VERY SMALL. This | ||
27 | // worsens performance considerably, but is done so that a great many channels | ||
28 | // might use only a little memory. | ||
29 | //------------------------------------------------------------------------------ | ||
30 | |||
31 | //------------------------------------------------------------------------------ | ||
32 | // Revision History: | ||
33 | // | ||
34 | // 0.00 - 4/16/91 --- First Draft | ||
35 | // 0.01 - 4/29/91 --- 1st beta release | ||
36 | // 0.02 - 6/14/91 --- Changes to allow small model compilation | ||
37 | // 0.03 - 6/17/91 MAG Break reporting protected from interrupts routines with | ||
38 | // in-line asm added for moving data to/from ring buffers, | ||
39 | // replacing a variety of methods used previously. | ||
40 | // 0.04 - 6/21/91 MAG Initial flow-control packets not queued until | ||
41 | // i2_enable_interrupts time. Former versions would enqueue | ||
42 | // them at i2_init_channel time, before we knew how many | ||
43 | // channels were supposed to exist! | ||
44 | // 0.05 - 10/12/91 MAG Major changes: works through the ellis.c routines now; | ||
45 | // supports new 16-bit protocol and expandable boards. | ||
46 | // - 10/24/91 MAG Most changes in place and stable. | ||
47 | // 0.06 - 2/20/92 MAG Format of CMD_HOTACK corrected: the command takes no | ||
48 | // argument. | ||
49 | // 0.07 -- 3/11/92 MAG Support added to store special packet types at interrupt | ||
50 | // level (mostly responses to specific commands.) | ||
51 | // 0.08 -- 3/30/92 MAG Support added for STAT_MODEM packet | ||
52 | // 0.09 -- 6/24/93 MAG i2Link... needed to update number of boards BEFORE | ||
53 | // turning on the interrupt. | ||
54 | // 0.10 -- 6/25/93 MAG To avoid gruesome death from a bad board, we sanity check | ||
55 | // some incoming. | ||
56 | // | ||
57 | // 1.1 - 12/25/96 AKM Linux version. | ||
58 | // - 10/09/98 DMC Revised Linux version. | ||
59 | //------------------------------------------------------------------------------ | ||
60 | |||
61 | //************ | ||
62 | //* Includes * | ||
63 | //************ | ||
64 | |||
65 | #include <linux/sched.h> | ||
66 | #include "i2lib.h" | ||
67 | |||
68 | |||
69 | //*********************** | ||
70 | //* Function Prototypes * | ||
71 | //*********************** | ||
72 | static void i2QueueNeeds(i2eBordStrPtr, i2ChanStrPtr, int); | ||
73 | static i2ChanStrPtr i2DeQueueNeeds(i2eBordStrPtr, int ); | ||
74 | static void i2StripFifo(i2eBordStrPtr); | ||
75 | static void i2StuffFifoBypass(i2eBordStrPtr); | ||
76 | static void i2StuffFifoFlow(i2eBordStrPtr); | ||
77 | static void i2StuffFifoInline(i2eBordStrPtr); | ||
78 | static int i2RetryFlushOutput(i2ChanStrPtr); | ||
79 | |||
80 | // Not a documented part of the library routines (careful...) but the Diagnostic | ||
81 | // i2diag.c finds them useful to help the throughput in certain limited | ||
82 | // single-threaded operations. | ||
83 | static void iiSendPendingMail(i2eBordStrPtr); | ||
84 | static void serviceOutgoingFifo(i2eBordStrPtr); | ||
85 | |||
86 | // Functions defined in ip2.c as part of interrupt handling | ||
87 | static void do_input(void *); | ||
88 | static void do_status(void *); | ||
89 | |||
90 | //*************** | ||
91 | //* Debug Data * | ||
92 | //*************** | ||
93 | #ifdef DEBUG_FIFO | ||
94 | |||
95 | unsigned char DBGBuf[0x4000]; | ||
96 | unsigned short I = 0; | ||
97 | |||
98 | static void | ||
99 | WriteDBGBuf(char *s, unsigned char *src, unsigned short n ) | ||
100 | { | ||
101 | char *p = src; | ||
102 | |||
103 | // XXX: We need a spin lock here if we ever use this again | ||
104 | |||
105 | while (*s) { // copy label | ||
106 | DBGBuf[I] = *s++; | ||
107 | I = I++ & 0x3fff; | ||
108 | } | ||
109 | while (n--) { // copy data | ||
110 | DBGBuf[I] = *p++; | ||
111 | I = I++ & 0x3fff; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | static void | ||
116 | fatality(i2eBordStrPtr pB ) | ||
117 | { | ||
118 | int i; | ||
119 | |||
120 | for (i=0;i<sizeof(DBGBuf);i++) { | ||
121 | if ((i%16) == 0) | ||
122 | printk("\n%4x:",i); | ||
123 | printk("%02x ",DBGBuf[i]); | ||
124 | } | ||
125 | printk("\n"); | ||
126 | for (i=0;i<sizeof(DBGBuf);i++) { | ||
127 | if ((i%16) == 0) | ||
128 | printk("\n%4x:",i); | ||
129 | if (DBGBuf[i] >= ' ' && DBGBuf[i] <= '~') { | ||
130 | printk(" %c ",DBGBuf[i]); | ||
131 | } else { | ||
132 | printk(" . "); | ||
133 | } | ||
134 | } | ||
135 | printk("\n"); | ||
136 | printk("Last index %x\n",I); | ||
137 | } | ||
138 | #endif /* DEBUG_FIFO */ | ||
139 | |||
140 | //******** | ||
141 | //* Code * | ||
142 | //******** | ||
143 | |||
144 | static inline int | ||
145 | i2Validate ( i2ChanStrPtr pCh ) | ||
146 | { | ||
147 | //ip2trace(pCh->port_index, ITRC_VERIFY,ITRC_ENTER,2,pCh->validity, | ||
148 | // (CHANNEL_MAGIC | CHANNEL_SUPPORT)); | ||
149 | return ((pCh->validity & (CHANNEL_MAGIC_BITS | CHANNEL_SUPPORT)) | ||
150 | == (CHANNEL_MAGIC | CHANNEL_SUPPORT)); | ||
151 | } | ||
152 | |||
153 | //****************************************************************************** | ||
154 | // Function: iiSendPendingMail(pB) | ||
155 | // Parameters: Pointer to a board structure | ||
156 | // Returns: Nothing | ||
157 | // | ||
158 | // Description: | ||
159 | // If any outgoing mail bits are set and there is outgoing mailbox is empty, | ||
160 | // send the mail and clear the bits. | ||
161 | //****************************************************************************** | ||
162 | static inline void | ||
163 | iiSendPendingMail(i2eBordStrPtr pB) | ||
164 | { | ||
165 | if (pB->i2eOutMailWaiting && (!pB->i2eWaitingForEmptyFifo) ) | ||
166 | { | ||
167 | if (iiTrySendMail(pB, pB->i2eOutMailWaiting)) | ||
168 | { | ||
169 | /* If we were already waiting for fifo to empty, | ||
170 | * or just sent MB_OUT_STUFFED, then we are | ||
171 | * still waiting for it to empty, until we should | ||
172 | * receive an MB_IN_STRIPPED from the board. | ||
173 | */ | ||
174 | pB->i2eWaitingForEmptyFifo |= | ||
175 | (pB->i2eOutMailWaiting & MB_OUT_STUFFED); | ||
176 | pB->i2eOutMailWaiting = 0; | ||
177 | pB->SendPendingRetry = 0; | ||
178 | } else { | ||
179 | /* The only time we hit this area is when "iiTrySendMail" has | ||
180 | failed. That only occurs when the outbound mailbox is | ||
181 | still busy with the last message. We take a short breather | ||
182 | to let the board catch up with itself and then try again. | ||
183 | 16 Retries is the limit - then we got a borked board. | ||
184 | /\/\|=mhw=|\/\/ */ | ||
185 | |||
186 | if( ++pB->SendPendingRetry < 16 ) { | ||
187 | |||
188 | init_timer( &(pB->SendPendingTimer) ); | ||
189 | pB->SendPendingTimer.expires = jiffies + 1; | ||
190 | pB->SendPendingTimer.function = (void*)(unsigned long)iiSendPendingMail; | ||
191 | pB->SendPendingTimer.data = (unsigned long)pB; | ||
192 | add_timer( &(pB->SendPendingTimer) ); | ||
193 | } else { | ||
194 | printk( KERN_ERR "IP2: iiSendPendingMail unable to queue outbound mail\n" ); | ||
195 | } | ||
196 | } | ||
197 | } | ||
198 | } | ||
199 | |||
200 | //****************************************************************************** | ||
201 | // Function: i2InitChannels(pB, nChannels, pCh) | ||
202 | // Parameters: Pointer to Ellis Board structure | ||
203 | // Number of channels to initialize | ||
204 | // Pointer to first element in an array of channel structures | ||
205 | // Returns: Success or failure | ||
206 | // | ||
207 | // Description: | ||
208 | // | ||
209 | // This function patches pointers, back-pointers, and initializes all the | ||
210 | // elements in the channel structure array. | ||
211 | // | ||
212 | // This should be run after the board structure is initialized, through having | ||
213 | // loaded the standard loadware (otherwise it complains). | ||
214 | // | ||
215 | // In any case, it must be done before any serious work begins initializing the | ||
216 | // irq's or sending commands... | ||
217 | // | ||
218 | //****************************************************************************** | ||
219 | static int | ||
220 | i2InitChannels ( i2eBordStrPtr pB, int nChannels, i2ChanStrPtr pCh) | ||
221 | { | ||
222 | int index, stuffIndex; | ||
223 | i2ChanStrPtr *ppCh; | ||
224 | |||
225 | if (pB->i2eValid != I2E_MAGIC) { | ||
226 | COMPLETE(pB, I2EE_BADMAGIC); | ||
227 | } | ||
228 | if (pB->i2eState != II_STATE_STDLOADED) { | ||
229 | COMPLETE(pB, I2EE_BADSTATE); | ||
230 | } | ||
231 | |||
232 | LOCK_INIT(&pB->read_fifo_spinlock); | ||
233 | LOCK_INIT(&pB->write_fifo_spinlock); | ||
234 | LOCK_INIT(&pB->Dbuf_spinlock); | ||
235 | LOCK_INIT(&pB->Bbuf_spinlock); | ||
236 | LOCK_INIT(&pB->Fbuf_spinlock); | ||
237 | |||
238 | // NO LOCK needed yet - this is init | ||
239 | |||
240 | pB->i2eChannelPtr = pCh; | ||
241 | pB->i2eChannelCnt = nChannels; | ||
242 | |||
243 | pB->i2Fbuf_strip = pB->i2Fbuf_stuff = 0; | ||
244 | pB->i2Dbuf_strip = pB->i2Dbuf_stuff = 0; | ||
245 | pB->i2Bbuf_strip = pB->i2Bbuf_stuff = 0; | ||
246 | |||
247 | pB->SendPendingRetry = 0; | ||
248 | |||
249 | memset ( pCh, 0, sizeof (i2ChanStr) * nChannels ); | ||
250 | |||
251 | for (index = stuffIndex = 0, ppCh = (i2ChanStrPtr *)(pB->i2Fbuf); | ||
252 | nChannels && index < ABS_MOST_PORTS; | ||
253 | index++) | ||
254 | { | ||
255 | if ( !(pB->i2eChannelMap[index >> 4] & (1 << (index & 0xf)) ) ) { | ||
256 | continue; | ||
257 | } | ||
258 | LOCK_INIT(&pCh->Ibuf_spinlock); | ||
259 | LOCK_INIT(&pCh->Obuf_spinlock); | ||
260 | LOCK_INIT(&pCh->Cbuf_spinlock); | ||
261 | LOCK_INIT(&pCh->Pbuf_spinlock); | ||
262 | // NO LOCK needed yet - this is init | ||
263 | // Set up validity flag according to support level | ||
264 | if (pB->i2eGoodMap[index >> 4] & (1 << (index & 0xf)) ) { | ||
265 | pCh->validity = CHANNEL_MAGIC | CHANNEL_SUPPORT; | ||
266 | } else { | ||
267 | pCh->validity = CHANNEL_MAGIC; | ||
268 | } | ||
269 | pCh->pMyBord = pB; /* Back-pointer */ | ||
270 | |||
271 | // Prepare an outgoing flow-control packet to send as soon as the chance | ||
272 | // occurs. | ||
273 | if ( pCh->validity & CHANNEL_SUPPORT ) { | ||
274 | pCh->infl.hd.i2sChannel = index; | ||
275 | pCh->infl.hd.i2sCount = 5; | ||
276 | pCh->infl.hd.i2sType = PTYPE_BYPASS; | ||
277 | pCh->infl.fcmd = 37; | ||
278 | pCh->infl.asof = 0; | ||
279 | pCh->infl.room = IBUF_SIZE - 1; | ||
280 | |||
281 | pCh->whenSendFlow = (IBUF_SIZE/5)*4; // when 80% full | ||
282 | |||
283 | // The following is similar to calling i2QueueNeeds, except that this | ||
284 | // is done in longhand, since we are setting up initial conditions on | ||
285 | // many channels at once. | ||
286 | pCh->channelNeeds = NEED_FLOW; // Since starting from scratch | ||
287 | pCh->sinceLastFlow = 0; // No bytes received since last flow | ||
288 | // control packet was queued | ||
289 | stuffIndex++; | ||
290 | *ppCh++ = pCh; // List this channel as needing | ||
291 | // initial flow control packet sent | ||
292 | } | ||
293 | |||
294 | // Don't allow anything to be sent until the status packets come in from | ||
295 | // the board. | ||
296 | |||
297 | pCh->outfl.asof = 0; | ||
298 | pCh->outfl.room = 0; | ||
299 | |||
300 | // Initialize all the ring buffers | ||
301 | |||
302 | pCh->Ibuf_stuff = pCh->Ibuf_strip = 0; | ||
303 | pCh->Obuf_stuff = pCh->Obuf_strip = 0; | ||
304 | pCh->Cbuf_stuff = pCh->Cbuf_strip = 0; | ||
305 | |||
306 | memset( &pCh->icount, 0, sizeof (struct async_icount) ); | ||
307 | pCh->hotKeyIn = HOT_CLEAR; | ||
308 | pCh->channelOptions = 0; | ||
309 | pCh->bookMarks = 0; | ||
310 | init_waitqueue_head(&pCh->pBookmarkWait); | ||
311 | |||
312 | init_waitqueue_head(&pCh->open_wait); | ||
313 | init_waitqueue_head(&pCh->close_wait); | ||
314 | init_waitqueue_head(&pCh->delta_msr_wait); | ||
315 | |||
316 | // Set base and divisor so default custom rate is 9600 | ||
317 | pCh->BaudBase = 921600; // MAX for ST654, changed after we get | ||
318 | pCh->BaudDivisor = 96; // the boxids (UART types) later | ||
319 | |||
320 | pCh->dataSetIn = 0; | ||
321 | pCh->dataSetOut = 0; | ||
322 | |||
323 | pCh->wopen = 0; | ||
324 | pCh->throttled = 0; | ||
325 | |||
326 | pCh->speed = CBR_9600; | ||
327 | |||
328 | pCh->flags = 0; | ||
329 | |||
330 | pCh->ClosingDelay = 5*HZ/10; | ||
331 | pCh->ClosingWaitTime = 30*HZ; | ||
332 | |||
333 | // Initialize task queue objects | ||
334 | INIT_WORK(&pCh->tqueue_input, do_input, pCh); | ||
335 | INIT_WORK(&pCh->tqueue_status, do_status, pCh); | ||
336 | |||
337 | #ifdef IP2DEBUG_TRACE | ||
338 | pCh->trace = ip2trace; | ||
339 | #endif | ||
340 | |||
341 | ++pCh; | ||
342 | --nChannels; | ||
343 | } | ||
344 | // No need to check for wrap here; this is initialization. | ||
345 | pB->i2Fbuf_stuff = stuffIndex; | ||
346 | COMPLETE(pB, I2EE_GOOD); | ||
347 | |||
348 | } | ||
349 | |||
350 | //****************************************************************************** | ||
351 | // Function: i2DeQueueNeeds(pB, type) | ||
352 | // Parameters: Pointer to a board structure | ||
353 | // type bit map: may include NEED_INLINE, NEED_BYPASS, or NEED_FLOW | ||
354 | // Returns: | ||
355 | // Pointer to a channel structure | ||
356 | // | ||
357 | // Description: Returns pointer struct of next channel that needs service of | ||
358 | // the type specified. Otherwise returns a NULL reference. | ||
359 | // | ||
360 | //****************************************************************************** | ||
361 | static i2ChanStrPtr | ||
362 | i2DeQueueNeeds(i2eBordStrPtr pB, int type) | ||
363 | { | ||
364 | unsigned short queueIndex; | ||
365 | unsigned long flags; | ||
366 | |||
367 | i2ChanStrPtr pCh = NULL; | ||
368 | |||
369 | switch(type) { | ||
370 | |||
371 | case NEED_INLINE: | ||
372 | |||
373 | WRITE_LOCK_IRQSAVE(&pB->Dbuf_spinlock,flags); | ||
374 | if ( pB->i2Dbuf_stuff != pB->i2Dbuf_strip) | ||
375 | { | ||
376 | queueIndex = pB->i2Dbuf_strip; | ||
377 | pCh = pB->i2Dbuf[queueIndex]; | ||
378 | queueIndex++; | ||
379 | if (queueIndex >= CH_QUEUE_SIZE) { | ||
380 | queueIndex = 0; | ||
381 | } | ||
382 | pB->i2Dbuf_strip = queueIndex; | ||
383 | pCh->channelNeeds &= ~NEED_INLINE; | ||
384 | } | ||
385 | WRITE_UNLOCK_IRQRESTORE(&pB->Dbuf_spinlock,flags); | ||
386 | break; | ||
387 | |||
388 | case NEED_BYPASS: | ||
389 | |||
390 | WRITE_LOCK_IRQSAVE(&pB->Bbuf_spinlock,flags); | ||
391 | if (pB->i2Bbuf_stuff != pB->i2Bbuf_strip) | ||
392 | { | ||
393 | queueIndex = pB->i2Bbuf_strip; | ||
394 | pCh = pB->i2Bbuf[queueIndex]; | ||
395 | queueIndex++; | ||
396 | if (queueIndex >= CH_QUEUE_SIZE) { | ||
397 | queueIndex = 0; | ||
398 | } | ||
399 | pB->i2Bbuf_strip = queueIndex; | ||
400 | pCh->channelNeeds &= ~NEED_BYPASS; | ||
401 | } | ||
402 | WRITE_UNLOCK_IRQRESTORE(&pB->Bbuf_spinlock,flags); | ||
403 | break; | ||
404 | |||
405 | case NEED_FLOW: | ||
406 | |||
407 | WRITE_LOCK_IRQSAVE(&pB->Fbuf_spinlock,flags); | ||
408 | if (pB->i2Fbuf_stuff != pB->i2Fbuf_strip) | ||
409 | { | ||
410 | queueIndex = pB->i2Fbuf_strip; | ||
411 | pCh = pB->i2Fbuf[queueIndex]; | ||
412 | queueIndex++; | ||
413 | if (queueIndex >= CH_QUEUE_SIZE) { | ||
414 | queueIndex = 0; | ||
415 | } | ||
416 | pB->i2Fbuf_strip = queueIndex; | ||
417 | pCh->channelNeeds &= ~NEED_FLOW; | ||
418 | } | ||
419 | WRITE_UNLOCK_IRQRESTORE(&pB->Fbuf_spinlock,flags); | ||
420 | break; | ||
421 | default: | ||
422 | printk(KERN_ERR "i2DeQueueNeeds called with bad type:%x\n",type); | ||
423 | break; | ||
424 | } | ||
425 | return pCh; | ||
426 | } | ||
427 | |||
428 | //****************************************************************************** | ||
429 | // Function: i2QueueNeeds(pB, pCh, type) | ||
430 | // Parameters: Pointer to a board structure | ||
431 | // Pointer to a channel structure | ||
432 | // type bit map: may include NEED_INLINE, NEED_BYPASS, or NEED_FLOW | ||
433 | // Returns: Nothing | ||
434 | // | ||
435 | // Description: | ||
436 | // For each type of need selected, if the given channel is not already in the | ||
437 | // queue, adds it, and sets the flag indicating it is in the queue. | ||
438 | //****************************************************************************** | ||
439 | static void | ||
440 | i2QueueNeeds(i2eBordStrPtr pB, i2ChanStrPtr pCh, int type) | ||
441 | { | ||
442 | unsigned short queueIndex; | ||
443 | unsigned long flags; | ||
444 | |||
445 | // We turn off all the interrupts during this brief process, since the | ||
446 | // interrupt-level code might want to put things on the queue as well. | ||
447 | |||
448 | switch (type) { | ||
449 | |||
450 | case NEED_INLINE: | ||
451 | |||
452 | WRITE_LOCK_IRQSAVE(&pB->Dbuf_spinlock,flags); | ||
453 | if ( !(pCh->channelNeeds & NEED_INLINE) ) | ||
454 | { | ||
455 | pCh->channelNeeds |= NEED_INLINE; | ||
456 | queueIndex = pB->i2Dbuf_stuff; | ||
457 | pB->i2Dbuf[queueIndex++] = pCh; | ||
458 | if (queueIndex >= CH_QUEUE_SIZE) | ||
459 | queueIndex = 0; | ||
460 | pB->i2Dbuf_stuff = queueIndex; | ||
461 | } | ||
462 | WRITE_UNLOCK_IRQRESTORE(&pB->Dbuf_spinlock,flags); | ||
463 | break; | ||
464 | |||
465 | case NEED_BYPASS: | ||
466 | |||
467 | WRITE_LOCK_IRQSAVE(&pB->Bbuf_spinlock,flags); | ||
468 | if ((type & NEED_BYPASS) && !(pCh->channelNeeds & NEED_BYPASS)) | ||
469 | { | ||
470 | pCh->channelNeeds |= NEED_BYPASS; | ||
471 | queueIndex = pB->i2Bbuf_stuff; | ||
472 | pB->i2Bbuf[queueIndex++] = pCh; | ||
473 | if (queueIndex >= CH_QUEUE_SIZE) | ||
474 | queueIndex = 0; | ||
475 | pB->i2Bbuf_stuff = queueIndex; | ||
476 | } | ||
477 | WRITE_UNLOCK_IRQRESTORE(&pB->Bbuf_spinlock,flags); | ||
478 | break; | ||
479 | |||
480 | case NEED_FLOW: | ||
481 | |||
482 | WRITE_LOCK_IRQSAVE(&pB->Fbuf_spinlock,flags); | ||
483 | if ((type & NEED_FLOW) && !(pCh->channelNeeds & NEED_FLOW)) | ||
484 | { | ||
485 | pCh->channelNeeds |= NEED_FLOW; | ||
486 | queueIndex = pB->i2Fbuf_stuff; | ||
487 | pB->i2Fbuf[queueIndex++] = pCh; | ||
488 | if (queueIndex >= CH_QUEUE_SIZE) | ||
489 | queueIndex = 0; | ||
490 | pB->i2Fbuf_stuff = queueIndex; | ||
491 | } | ||
492 | WRITE_UNLOCK_IRQRESTORE(&pB->Fbuf_spinlock,flags); | ||
493 | break; | ||
494 | |||
495 | case NEED_CREDIT: | ||
496 | pCh->channelNeeds |= NEED_CREDIT; | ||
497 | break; | ||
498 | default: | ||
499 | printk(KERN_ERR "i2QueueNeeds called with bad type:%x\n",type); | ||
500 | break; | ||
501 | } | ||
502 | return; | ||
503 | } | ||
504 | |||
505 | //****************************************************************************** | ||
506 | // Function: i2QueueCommands(type, pCh, timeout, nCommands, pCs,...) | ||
507 | // Parameters: type - PTYPE_BYPASS or PTYPE_INLINE | ||
508 | // pointer to the channel structure | ||
509 | // maximum period to wait | ||
510 | // number of commands (n) | ||
511 | // n commands | ||
512 | // Returns: Number of commands sent, or -1 for error | ||
513 | // | ||
514 | // get board lock before calling | ||
515 | // | ||
516 | // Description: | ||
517 | // Queues up some commands to be sent to a channel. To send possibly several | ||
518 | // bypass or inline commands to the given channel. The timeout parameter | ||
519 | // indicates how many HUNDREDTHS OF SECONDS to wait until there is room: | ||
520 | // 0 = return immediately if no room, -ive = wait forever, +ive = number of | ||
521 | // 1/100 seconds to wait. Return values: | ||
522 | // -1 Some kind of nasty error: bad channel structure or invalid arguments. | ||
523 | // 0 No room to send all the commands | ||
524 | // (+) Number of commands sent | ||
525 | //****************************************************************************** | ||
526 | static int | ||
527 | i2QueueCommands(int type, i2ChanStrPtr pCh, int timeout, int nCommands, | ||
528 | cmdSyntaxPtr pCs0,...) | ||
529 | { | ||
530 | int totalsize = 0; | ||
531 | int blocksize; | ||
532 | int lastended; | ||
533 | cmdSyntaxPtr *ppCs; | ||
534 | cmdSyntaxPtr pCs; | ||
535 | int count; | ||
536 | int flag; | ||
537 | i2eBordStrPtr pB; | ||
538 | |||
539 | unsigned short maxBlock; | ||
540 | unsigned short maxBuff; | ||
541 | short bufroom; | ||
542 | unsigned short stuffIndex; | ||
543 | unsigned char *pBuf; | ||
544 | unsigned char *pInsert; | ||
545 | unsigned char *pDest, *pSource; | ||
546 | unsigned short channel; | ||
547 | int cnt; | ||
548 | unsigned long flags = 0; | ||
549 | rwlock_t *lock_var_p = NULL; | ||
550 | |||
551 | // Make sure the channel exists, otherwise do nothing | ||
552 | if ( !i2Validate ( pCh ) ) { | ||
553 | return -1; | ||
554 | } | ||
555 | |||
556 | ip2trace (CHANN, ITRC_QUEUE, ITRC_ENTER, 0 ); | ||
557 | |||
558 | pB = pCh->pMyBord; | ||
559 | |||
560 | // Board must also exist, and THE INTERRUPT COMMAND ALREADY SENT | ||
561 | if (pB->i2eValid != I2E_MAGIC || pB->i2eUsingIrq == IRQ_UNDEFINED) { | ||
562 | return -2; | ||
563 | } | ||
564 | // If the board has gone fatal, return bad, and also hit the trap routine if | ||
565 | // it exists. | ||
566 | if (pB->i2eFatal) { | ||
567 | if ( pB->i2eFatalTrap ) { | ||
568 | (*(pB)->i2eFatalTrap)(pB); | ||
569 | } | ||
570 | return -3; | ||
571 | } | ||
572 | // Set up some variables, Which buffers are we using? How big are they? | ||
573 | switch(type) | ||
574 | { | ||
575 | case PTYPE_INLINE: | ||
576 | flag = INL; | ||
577 | maxBlock = MAX_OBUF_BLOCK; | ||
578 | maxBuff = OBUF_SIZE; | ||
579 | pBuf = pCh->Obuf; | ||
580 | break; | ||
581 | case PTYPE_BYPASS: | ||
582 | flag = BYP; | ||
583 | maxBlock = MAX_CBUF_BLOCK; | ||
584 | maxBuff = CBUF_SIZE; | ||
585 | pBuf = pCh->Cbuf; | ||
586 | break; | ||
587 | default: | ||
588 | return -4; | ||
589 | } | ||
590 | // Determine the total size required for all the commands | ||
591 | totalsize = blocksize = sizeof(i2CmdHeader); | ||
592 | lastended = 0; | ||
593 | ppCs = &pCs0; | ||
594 | for ( count = nCommands; count; count--, ppCs++) | ||
595 | { | ||
596 | pCs = *ppCs; | ||
597 | cnt = pCs->length; | ||
598 | // Will a new block be needed for this one? | ||
599 | // Two possible reasons: too | ||
600 | // big or previous command has to be at the end of a packet. | ||
601 | if ((blocksize + cnt > maxBlock) || lastended) { | ||
602 | blocksize = sizeof(i2CmdHeader); | ||
603 | totalsize += sizeof(i2CmdHeader); | ||
604 | } | ||
605 | totalsize += cnt; | ||
606 | blocksize += cnt; | ||
607 | |||
608 | // If this command had to end a block, then we will make sure to | ||
609 | // account for it should there be any more blocks. | ||
610 | lastended = pCs->flags & END; | ||
611 | } | ||
612 | for (;;) { | ||
613 | // Make sure any pending flush commands go out before we add more data. | ||
614 | if ( !( pCh->flush_flags && i2RetryFlushOutput( pCh ) ) ) { | ||
615 | // How much room (this time through) ? | ||
616 | switch(type) { | ||
617 | case PTYPE_INLINE: | ||
618 | lock_var_p = &pCh->Obuf_spinlock; | ||
619 | WRITE_LOCK_IRQSAVE(lock_var_p,flags); | ||
620 | stuffIndex = pCh->Obuf_stuff; | ||
621 | bufroom = pCh->Obuf_strip - stuffIndex; | ||
622 | break; | ||
623 | case PTYPE_BYPASS: | ||
624 | lock_var_p = &pCh->Cbuf_spinlock; | ||
625 | WRITE_LOCK_IRQSAVE(lock_var_p,flags); | ||
626 | stuffIndex = pCh->Cbuf_stuff; | ||
627 | bufroom = pCh->Cbuf_strip - stuffIndex; | ||
628 | break; | ||
629 | default: | ||
630 | return -5; | ||
631 | } | ||
632 | if (--bufroom < 0) { | ||
633 | bufroom += maxBuff; | ||
634 | } | ||
635 | |||
636 | ip2trace (CHANN, ITRC_QUEUE, 2, 1, bufroom ); | ||
637 | |||
638 | // Check for overflow | ||
639 | if (totalsize <= bufroom) { | ||
640 | // Normal Expected path - We still hold LOCK | ||
641 | break; /* from for()- Enough room: goto proceed */ | ||
642 | } | ||
643 | } | ||
644 | |||
645 | ip2trace (CHANN, ITRC_QUEUE, 3, 1, totalsize ); | ||
646 | |||
647 | // Prepare to wait for buffers to empty | ||
648 | WRITE_UNLOCK_IRQRESTORE(lock_var_p,flags); | ||
649 | serviceOutgoingFifo(pB); // Dump what we got | ||
650 | |||
651 | if (timeout == 0) { | ||
652 | return 0; // Tired of waiting | ||
653 | } | ||
654 | if (timeout > 0) | ||
655 | timeout--; // So negative values == forever | ||
656 | |||
657 | if (!in_interrupt()) { | ||
658 | current->state = TASK_INTERRUPTIBLE; | ||
659 | schedule_timeout(1); // short nap | ||
660 | } else { | ||
661 | // we cannot sched/sleep in interrrupt silly | ||
662 | return 0; | ||
663 | } | ||
664 | if (signal_pending(current)) { | ||
665 | return 0; // Wake up! Time to die!!! | ||
666 | } | ||
667 | |||
668 | ip2trace (CHANN, ITRC_QUEUE, 4, 0 ); | ||
669 | |||
670 | } // end of for(;;) | ||
671 | |||
672 | // At this point we have room and the lock - stick them in. | ||
673 | channel = pCh->infl.hd.i2sChannel; | ||
674 | pInsert = &pBuf[stuffIndex]; // Pointer to start of packet | ||
675 | pDest = CMD_OF(pInsert); // Pointer to start of command | ||
676 | |||
677 | // When we start counting, the block is the size of the header | ||
678 | for (blocksize = sizeof(i2CmdHeader), count = nCommands, | ||
679 | lastended = 0, ppCs = &pCs0; | ||
680 | count; | ||
681 | count--, ppCs++) | ||
682 | { | ||
683 | pCs = *ppCs; // Points to command protocol structure | ||
684 | |||
685 | // If this is a bookmark request command, post the fact that a bookmark | ||
686 | // request is pending. NOTE THIS TRICK ONLY WORKS BECAUSE CMD_BMARK_REQ | ||
687 | // has no parameters! The more general solution would be to reference | ||
688 | // pCs->cmd[0]. | ||
689 | if (pCs == CMD_BMARK_REQ) { | ||
690 | pCh->bookMarks++; | ||
691 | |||
692 | ip2trace (CHANN, ITRC_DRAIN, 30, 1, pCh->bookMarks ); | ||
693 | |||
694 | } | ||
695 | cnt = pCs->length; | ||
696 | |||
697 | // If this command would put us over the maximum block size or | ||
698 | // if the last command had to be at the end of a block, we end | ||
699 | // the existing block here and start a new one. | ||
700 | if ((blocksize + cnt > maxBlock) || lastended) { | ||
701 | |||
702 | ip2trace (CHANN, ITRC_QUEUE, 5, 0 ); | ||
703 | |||
704 | PTYPE_OF(pInsert) = type; | ||
705 | CHANNEL_OF(pInsert) = channel; | ||
706 | // count here does not include the header | ||
707 | CMD_COUNT_OF(pInsert) = blocksize - sizeof(i2CmdHeader); | ||
708 | stuffIndex += blocksize; | ||
709 | if(stuffIndex >= maxBuff) { | ||
710 | stuffIndex = 0; | ||
711 | pInsert = pBuf; | ||
712 | } | ||
713 | pInsert = &pBuf[stuffIndex]; // Pointer to start of next pkt | ||
714 | pDest = CMD_OF(pInsert); | ||
715 | blocksize = sizeof(i2CmdHeader); | ||
716 | } | ||
717 | // Now we know there is room for this one in the current block | ||
718 | |||
719 | blocksize += cnt; // Total bytes in this command | ||
720 | pSource = pCs->cmd; // Copy the command into the buffer | ||
721 | while (cnt--) { | ||
722 | *pDest++ = *pSource++; | ||
723 | } | ||
724 | // If this command had to end a block, then we will make sure to account | ||
725 | // for it should there be any more blocks. | ||
726 | lastended = pCs->flags & END; | ||
727 | } // end for | ||
728 | // Clean up the final block by writing header, etc | ||
729 | |||
730 | PTYPE_OF(pInsert) = type; | ||
731 | CHANNEL_OF(pInsert) = channel; | ||
732 | // count here does not include the header | ||
733 | CMD_COUNT_OF(pInsert) = blocksize - sizeof(i2CmdHeader); | ||
734 | stuffIndex += blocksize; | ||
735 | if(stuffIndex >= maxBuff) { | ||
736 | stuffIndex = 0; | ||
737 | pInsert = pBuf; | ||
738 | } | ||
739 | // Updates the index, and post the need for service. When adding these to | ||
740 | // the queue of channels, we turn off the interrupt while doing so, | ||
741 | // because at interrupt level we might want to push a channel back to the | ||
742 | // end of the queue. | ||
743 | switch(type) | ||
744 | { | ||
745 | case PTYPE_INLINE: | ||
746 | pCh->Obuf_stuff = stuffIndex; // Store buffer pointer | ||
747 | WRITE_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); | ||
748 | |||
749 | pB->debugInlineQueued++; | ||
750 | // Add the channel pointer to list of channels needing service (first | ||
751 | // come...), if it's not already there. | ||
752 | i2QueueNeeds(pB, pCh, NEED_INLINE); | ||
753 | break; | ||
754 | |||
755 | case PTYPE_BYPASS: | ||
756 | pCh->Cbuf_stuff = stuffIndex; // Store buffer pointer | ||
757 | WRITE_UNLOCK_IRQRESTORE(&pCh->Cbuf_spinlock,flags); | ||
758 | |||
759 | pB->debugBypassQueued++; | ||
760 | // Add the channel pointer to list of channels needing service (first | ||
761 | // come...), if it's not already there. | ||
762 | i2QueueNeeds(pB, pCh, NEED_BYPASS); | ||
763 | break; | ||
764 | } | ||
765 | |||
766 | ip2trace (CHANN, ITRC_QUEUE, ITRC_RETURN, 1, nCommands ); | ||
767 | |||
768 | return nCommands; // Good status: number of commands sent | ||
769 | } | ||
770 | |||
771 | //****************************************************************************** | ||
772 | // Function: i2GetStatus(pCh,resetBits) | ||
773 | // Parameters: Pointer to a channel structure | ||
774 | // Bit map of status bits to clear | ||
775 | // Returns: Bit map of current status bits | ||
776 | // | ||
777 | // Description: | ||
778 | // Returns the state of data set signals, and whether a break has been received, | ||
779 | // (see i2lib.h for bit-mapped result). resetBits is a bit-map of any status | ||
780 | // bits to be cleared: I2_BRK, I2_PAR, I2_FRA, I2_OVR,... These are cleared | ||
781 | // AFTER the condition is passed. If pCh does not point to a valid channel, | ||
782 | // returns -1 (which would be impossible otherwise. | ||
783 | //****************************************************************************** | ||
784 | static int | ||
785 | i2GetStatus(i2ChanStrPtr pCh, int resetBits) | ||
786 | { | ||
787 | unsigned short status; | ||
788 | i2eBordStrPtr pB; | ||
789 | |||
790 | ip2trace (CHANN, ITRC_STATUS, ITRC_ENTER, 2, pCh->dataSetIn, resetBits ); | ||
791 | |||
792 | // Make sure the channel exists, otherwise do nothing */ | ||
793 | if ( !i2Validate ( pCh ) ) | ||
794 | return -1; | ||
795 | |||
796 | pB = pCh->pMyBord; | ||
797 | |||
798 | status = pCh->dataSetIn; | ||
799 | |||
800 | // Clear any specified error bits: but note that only actual error bits can | ||
801 | // be cleared, regardless of the value passed. | ||
802 | if (resetBits) | ||
803 | { | ||
804 | pCh->dataSetIn &= ~(resetBits & (I2_BRK | I2_PAR | I2_FRA | I2_OVR)); | ||
805 | pCh->dataSetIn &= ~(I2_DDCD | I2_DCTS | I2_DDSR | I2_DRI); | ||
806 | } | ||
807 | |||
808 | ip2trace (CHANN, ITRC_STATUS, ITRC_RETURN, 1, pCh->dataSetIn ); | ||
809 | |||
810 | return status; | ||
811 | } | ||
812 | |||
813 | //****************************************************************************** | ||
814 | // Function: i2Input(pChpDest,count) | ||
815 | // Parameters: Pointer to a channel structure | ||
816 | // Pointer to data buffer | ||
817 | // Number of bytes to read | ||
818 | // Returns: Number of bytes read, or -1 for error | ||
819 | // | ||
820 | // Description: | ||
821 | // Strips data from the input buffer and writes it to pDest. If there is a | ||
822 | // collosal blunder, (invalid structure pointers or the like), returns -1. | ||
823 | // Otherwise, returns the number of bytes read. | ||
824 | //****************************************************************************** | ||
825 | static int | ||
826 | i2Input(i2ChanStrPtr pCh) | ||
827 | { | ||
828 | int amountToMove; | ||
829 | unsigned short stripIndex; | ||
830 | int count; | ||
831 | unsigned long flags = 0; | ||
832 | |||
833 | ip2trace (CHANN, ITRC_INPUT, ITRC_ENTER, 0); | ||
834 | |||
835 | // Ensure channel structure seems real | ||
836 | if ( !i2Validate( pCh ) ) { | ||
837 | count = -1; | ||
838 | goto i2Input_exit; | ||
839 | } | ||
840 | WRITE_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,flags); | ||
841 | |||
842 | // initialize some accelerators and private copies | ||
843 | stripIndex = pCh->Ibuf_strip; | ||
844 | |||
845 | count = pCh->Ibuf_stuff - stripIndex; | ||
846 | |||
847 | // If buffer is empty or requested data count was 0, (trivial case) return | ||
848 | // without any further thought. | ||
849 | if ( count == 0 ) { | ||
850 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
851 | goto i2Input_exit; | ||
852 | } | ||
853 | // Adjust for buffer wrap | ||
854 | if ( count < 0 ) { | ||
855 | count += IBUF_SIZE; | ||
856 | } | ||
857 | // Don't give more than can be taken by the line discipline | ||
858 | amountToMove = pCh->pTTY->ldisc.receive_room( pCh->pTTY ); | ||
859 | if (count > amountToMove) { | ||
860 | count = amountToMove; | ||
861 | } | ||
862 | // How much could we copy without a wrap? | ||
863 | amountToMove = IBUF_SIZE - stripIndex; | ||
864 | |||
865 | if (amountToMove > count) { | ||
866 | amountToMove = count; | ||
867 | } | ||
868 | // Move the first block | ||
869 | pCh->pTTY->ldisc.receive_buf( pCh->pTTY, | ||
870 | &(pCh->Ibuf[stripIndex]), NULL, amountToMove ); | ||
871 | // If we needed to wrap, do the second data move | ||
872 | if (count > amountToMove) { | ||
873 | pCh->pTTY->ldisc.receive_buf( pCh->pTTY, | ||
874 | pCh->Ibuf, NULL, count - amountToMove ); | ||
875 | } | ||
876 | // Bump and wrap the stripIndex all at once by the amount of data read. This | ||
877 | // method is good regardless of whether the data was in one or two pieces. | ||
878 | stripIndex += count; | ||
879 | if (stripIndex >= IBUF_SIZE) { | ||
880 | stripIndex -= IBUF_SIZE; | ||
881 | } | ||
882 | pCh->Ibuf_strip = stripIndex; | ||
883 | |||
884 | // Update our flow control information and possibly queue ourselves to send | ||
885 | // it, depending on how much data has been stripped since the last time a | ||
886 | // packet was sent. | ||
887 | pCh->infl.asof += count; | ||
888 | |||
889 | if ((pCh->sinceLastFlow += count) >= pCh->whenSendFlow) { | ||
890 | pCh->sinceLastFlow -= pCh->whenSendFlow; | ||
891 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
892 | i2QueueNeeds(pCh->pMyBord, pCh, NEED_FLOW); | ||
893 | } else { | ||
894 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
895 | } | ||
896 | |||
897 | i2Input_exit: | ||
898 | |||
899 | ip2trace (CHANN, ITRC_INPUT, ITRC_RETURN, 1, count); | ||
900 | |||
901 | return count; | ||
902 | } | ||
903 | |||
904 | //****************************************************************************** | ||
905 | // Function: i2InputFlush(pCh) | ||
906 | // Parameters: Pointer to a channel structure | ||
907 | // Returns: Number of bytes stripped, or -1 for error | ||
908 | // | ||
909 | // Description: | ||
910 | // Strips any data from the input buffer. If there is a collosal blunder, | ||
911 | // (invalid structure pointers or the like), returns -1. Otherwise, returns the | ||
912 | // number of bytes stripped. | ||
913 | //****************************************************************************** | ||
914 | static int | ||
915 | i2InputFlush(i2ChanStrPtr pCh) | ||
916 | { | ||
917 | int count; | ||
918 | unsigned long flags; | ||
919 | |||
920 | // Ensure channel structure seems real | ||
921 | if ( !i2Validate ( pCh ) ) | ||
922 | return -1; | ||
923 | |||
924 | ip2trace (CHANN, ITRC_INPUT, 10, 0); | ||
925 | |||
926 | WRITE_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,flags); | ||
927 | count = pCh->Ibuf_stuff - pCh->Ibuf_strip; | ||
928 | |||
929 | // Adjust for buffer wrap | ||
930 | if (count < 0) { | ||
931 | count += IBUF_SIZE; | ||
932 | } | ||
933 | |||
934 | // Expedient way to zero out the buffer | ||
935 | pCh->Ibuf_strip = pCh->Ibuf_stuff; | ||
936 | |||
937 | |||
938 | // Update our flow control information and possibly queue ourselves to send | ||
939 | // it, depending on how much data has been stripped since the last time a | ||
940 | // packet was sent. | ||
941 | |||
942 | pCh->infl.asof += count; | ||
943 | |||
944 | if ( (pCh->sinceLastFlow += count) >= pCh->whenSendFlow ) | ||
945 | { | ||
946 | pCh->sinceLastFlow -= pCh->whenSendFlow; | ||
947 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
948 | i2QueueNeeds(pCh->pMyBord, pCh, NEED_FLOW); | ||
949 | } else { | ||
950 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
951 | } | ||
952 | |||
953 | ip2trace (CHANN, ITRC_INPUT, 19, 1, count); | ||
954 | |||
955 | return count; | ||
956 | } | ||
957 | |||
958 | //****************************************************************************** | ||
959 | // Function: i2InputAvailable(pCh) | ||
960 | // Parameters: Pointer to a channel structure | ||
961 | // Returns: Number of bytes available, or -1 for error | ||
962 | // | ||
963 | // Description: | ||
964 | // If there is a collosal blunder, (invalid structure pointers or the like), | ||
965 | // returns -1. Otherwise, returns the number of bytes stripped. Otherwise, | ||
966 | // returns the number of bytes available in the buffer. | ||
967 | //****************************************************************************** | ||
968 | #if 0 | ||
969 | static int | ||
970 | i2InputAvailable(i2ChanStrPtr pCh) | ||
971 | { | ||
972 | int count; | ||
973 | |||
974 | // Ensure channel structure seems real | ||
975 | if ( !i2Validate ( pCh ) ) return -1; | ||
976 | |||
977 | |||
978 | // initialize some accelerators and private copies | ||
979 | READ_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,flags); | ||
980 | count = pCh->Ibuf_stuff - pCh->Ibuf_strip; | ||
981 | READ_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); | ||
982 | |||
983 | // Adjust for buffer wrap | ||
984 | if (count < 0) | ||
985 | { | ||
986 | count += IBUF_SIZE; | ||
987 | } | ||
988 | |||
989 | return count; | ||
990 | } | ||
991 | #endif | ||
992 | |||
993 | //****************************************************************************** | ||
994 | // Function: i2Output(pCh, pSource, count) | ||
995 | // Parameters: Pointer to channel structure | ||
996 | // Pointer to source data | ||
997 | // Number of bytes to send | ||
998 | // Returns: Number of bytes sent, or -1 for error | ||
999 | // | ||
1000 | // Description: | ||
1001 | // Queues the data at pSource to be sent as data packets to the board. If there | ||
1002 | // is a collosal blunder, (invalid structure pointers or the like), returns -1. | ||
1003 | // Otherwise, returns the number of bytes written. What if there is not enough | ||
1004 | // room for all the data? If pCh->channelOptions & CO_NBLOCK_WRITE is set, then | ||
1005 | // we transfer as many characters as we can now, then return. If this bit is | ||
1006 | // clear (default), routine will spin along until all the data is buffered. | ||
1007 | // Should this occur, the 1-ms delay routine is called while waiting to avoid | ||
1008 | // applications that one cannot break out of. | ||
1009 | //****************************************************************************** | ||
1010 | static int | ||
1011 | i2Output(i2ChanStrPtr pCh, const char *pSource, int count, int user ) | ||
1012 | { | ||
1013 | i2eBordStrPtr pB; | ||
1014 | unsigned char *pInsert; | ||
1015 | int amountToMove; | ||
1016 | int countOriginal = count; | ||
1017 | unsigned short channel; | ||
1018 | unsigned short stuffIndex; | ||
1019 | unsigned long flags; | ||
1020 | int rc = 0; | ||
1021 | |||
1022 | int bailout = 10; | ||
1023 | |||
1024 | ip2trace (CHANN, ITRC_OUTPUT, ITRC_ENTER, 2, count, user ); | ||
1025 | |||
1026 | // Ensure channel structure seems real | ||
1027 | if ( !i2Validate ( pCh ) ) | ||
1028 | return -1; | ||
1029 | |||
1030 | // initialize some accelerators and private copies | ||
1031 | pB = pCh->pMyBord; | ||
1032 | channel = pCh->infl.hd.i2sChannel; | ||
1033 | |||
1034 | // If the board has gone fatal, return bad, and also hit the trap routine if | ||
1035 | // it exists. | ||
1036 | if (pB->i2eFatal) { | ||
1037 | if (pB->i2eFatalTrap) { | ||
1038 | (*(pB)->i2eFatalTrap)(pB); | ||
1039 | } | ||
1040 | return -1; | ||
1041 | } | ||
1042 | // Proceed as though we would do everything | ||
1043 | while ( count > 0 ) { | ||
1044 | |||
1045 | // How much room in output buffer is there? | ||
1046 | READ_LOCK_IRQSAVE(&pCh->Obuf_spinlock,flags); | ||
1047 | amountToMove = pCh->Obuf_strip - pCh->Obuf_stuff - 1; | ||
1048 | READ_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); | ||
1049 | if (amountToMove < 0) { | ||
1050 | amountToMove += OBUF_SIZE; | ||
1051 | } | ||
1052 | // Subtract off the headers size and see how much room there is for real | ||
1053 | // data. If this is negative, we will discover later. | ||
1054 | amountToMove -= sizeof (i2DataHeader); | ||
1055 | |||
1056 | // Don't move more (now) than can go in a single packet | ||
1057 | if ( amountToMove > (int)(MAX_OBUF_BLOCK - sizeof(i2DataHeader)) ) { | ||
1058 | amountToMove = MAX_OBUF_BLOCK - sizeof(i2DataHeader); | ||
1059 | } | ||
1060 | // Don't move more than the count we were given | ||
1061 | if (amountToMove > count) { | ||
1062 | amountToMove = count; | ||
1063 | } | ||
1064 | // Now we know how much we must move: NB because the ring buffers have | ||
1065 | // an overflow area at the end, we needn't worry about wrapping in the | ||
1066 | // middle of a packet. | ||
1067 | |||
1068 | // Small WINDOW here with no LOCK but I can't call Flush with LOCK | ||
1069 | // We would be flushing (or ending flush) anyway | ||
1070 | |||
1071 | ip2trace (CHANN, ITRC_OUTPUT, 10, 1, amountToMove ); | ||
1072 | |||
1073 | if ( !(pCh->flush_flags && i2RetryFlushOutput(pCh) ) | ||
1074 | && amountToMove > 0 ) | ||
1075 | { | ||
1076 | WRITE_LOCK_IRQSAVE(&pCh->Obuf_spinlock,flags); | ||
1077 | stuffIndex = pCh->Obuf_stuff; | ||
1078 | |||
1079 | // Had room to move some data: don't know whether the block size, | ||
1080 | // buffer space, or what was the limiting factor... | ||
1081 | pInsert = &(pCh->Obuf[stuffIndex]); | ||
1082 | |||
1083 | // Set up the header | ||
1084 | CHANNEL_OF(pInsert) = channel; | ||
1085 | PTYPE_OF(pInsert) = PTYPE_DATA; | ||
1086 | TAG_OF(pInsert) = 0; | ||
1087 | ID_OF(pInsert) = ID_ORDINARY_DATA; | ||
1088 | DATA_COUNT_OF(pInsert) = amountToMove; | ||
1089 | |||
1090 | // Move the data | ||
1091 | if ( user ) { | ||
1092 | rc = copy_from_user((char*)(DATA_OF(pInsert)), pSource, | ||
1093 | amountToMove ); | ||
1094 | } else { | ||
1095 | memcpy( (char*)(DATA_OF(pInsert)), pSource, amountToMove ); | ||
1096 | } | ||
1097 | // Adjust pointers and indices | ||
1098 | pSource += amountToMove; | ||
1099 | pCh->Obuf_char_count += amountToMove; | ||
1100 | stuffIndex += amountToMove + sizeof(i2DataHeader); | ||
1101 | count -= amountToMove; | ||
1102 | |||
1103 | if (stuffIndex >= OBUF_SIZE) { | ||
1104 | stuffIndex = 0; | ||
1105 | } | ||
1106 | pCh->Obuf_stuff = stuffIndex; | ||
1107 | |||
1108 | WRITE_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); | ||
1109 | |||
1110 | ip2trace (CHANN, ITRC_OUTPUT, 13, 1, stuffIndex ); | ||
1111 | |||
1112 | } else { | ||
1113 | |||
1114 | // Cannot move data | ||
1115 | // becuz we need to stuff a flush | ||
1116 | // or amount to move is <= 0 | ||
1117 | |||
1118 | ip2trace(CHANN, ITRC_OUTPUT, 14, 3, | ||
1119 | amountToMove, pB->i2eFifoRemains, | ||
1120 | pB->i2eWaitingForEmptyFifo ); | ||
1121 | |||
1122 | // Put this channel back on queue | ||
1123 | // this ultimatly gets more data or wakes write output | ||
1124 | i2QueueNeeds(pB, pCh, NEED_INLINE); | ||
1125 | |||
1126 | if ( pB->i2eWaitingForEmptyFifo ) { | ||
1127 | |||
1128 | ip2trace (CHANN, ITRC_OUTPUT, 16, 0 ); | ||
1129 | |||
1130 | // or schedule | ||
1131 | if (!in_interrupt()) { | ||
1132 | |||
1133 | ip2trace (CHANN, ITRC_OUTPUT, 61, 0 ); | ||
1134 | |||
1135 | current->state = TASK_INTERRUPTIBLE; | ||
1136 | schedule_timeout(2); | ||
1137 | if (signal_pending(current)) { | ||
1138 | break; | ||
1139 | } | ||
1140 | continue; | ||
1141 | } else { | ||
1142 | |||
1143 | ip2trace (CHANN, ITRC_OUTPUT, 62, 0 ); | ||
1144 | |||
1145 | // let interrupt in = WAS restore_flags() | ||
1146 | // We hold no lock nor is irq off anymore??? | ||
1147 | |||
1148 | break; | ||
1149 | } | ||
1150 | break; // from while(count) | ||
1151 | } | ||
1152 | else if ( pB->i2eFifoRemains < 32 && !pB->i2eTxMailEmpty ( pB ) ) | ||
1153 | { | ||
1154 | ip2trace (CHANN, ITRC_OUTPUT, 19, 2, | ||
1155 | pB->i2eFifoRemains, | ||
1156 | pB->i2eTxMailEmpty ); | ||
1157 | |||
1158 | break; // from while(count) | ||
1159 | } else if ( pCh->channelNeeds & NEED_CREDIT ) { | ||
1160 | |||
1161 | ip2trace (CHANN, ITRC_OUTPUT, 22, 0 ); | ||
1162 | |||
1163 | break; // from while(count) | ||
1164 | } else if ( --bailout) { | ||
1165 | |||
1166 | // Try to throw more things (maybe not us) in the fifo if we're | ||
1167 | // not already waiting for it. | ||
1168 | |||
1169 | ip2trace (CHANN, ITRC_OUTPUT, 20, 0 ); | ||
1170 | |||
1171 | serviceOutgoingFifo(pB); | ||
1172 | //break; CONTINUE; | ||
1173 | } else { | ||
1174 | ip2trace (CHANN, ITRC_OUTPUT, 21, 3, | ||
1175 | pB->i2eFifoRemains, | ||
1176 | pB->i2eOutMailWaiting, | ||
1177 | pB->i2eWaitingForEmptyFifo ); | ||
1178 | |||
1179 | break; // from while(count) | ||
1180 | } | ||
1181 | } | ||
1182 | } // End of while(count) | ||
1183 | |||
1184 | i2QueueNeeds(pB, pCh, NEED_INLINE); | ||
1185 | |||
1186 | // We drop through either when the count expires, or when there is some | ||
1187 | // count left, but there was a non-blocking write. | ||
1188 | if (countOriginal > count) { | ||
1189 | |||
1190 | ip2trace (CHANN, ITRC_OUTPUT, 17, 2, countOriginal, count ); | ||
1191 | |||
1192 | serviceOutgoingFifo( pB ); | ||
1193 | } | ||
1194 | |||
1195 | ip2trace (CHANN, ITRC_OUTPUT, ITRC_RETURN, 2, countOriginal, count ); | ||
1196 | |||
1197 | return countOriginal - count; | ||
1198 | } | ||
1199 | |||
1200 | //****************************************************************************** | ||
1201 | // Function: i2FlushOutput(pCh) | ||
1202 | // Parameters: Pointer to a channel structure | ||
1203 | // Returns: Nothing | ||
1204 | // | ||
1205 | // Description: | ||
1206 | // Sends bypass command to start flushing (waiting possibly forever until there | ||
1207 | // is room), then sends inline command to stop flushing output, (again waiting | ||
1208 | // possibly forever). | ||
1209 | //****************************************************************************** | ||
1210 | static inline void | ||
1211 | i2FlushOutput(i2ChanStrPtr pCh) | ||
1212 | { | ||
1213 | |||
1214 | ip2trace (CHANN, ITRC_FLUSH, 1, 1, pCh->flush_flags ); | ||
1215 | |||
1216 | if (pCh->flush_flags) | ||
1217 | return; | ||
1218 | |||
1219 | if ( 1 != i2QueueCommands(PTYPE_BYPASS, pCh, 0, 1, CMD_STARTFL) ) { | ||
1220 | pCh->flush_flags = STARTFL_FLAG; // Failed - flag for later | ||
1221 | |||
1222 | ip2trace (CHANN, ITRC_FLUSH, 2, 0 ); | ||
1223 | |||
1224 | } else if ( 1 != i2QueueCommands(PTYPE_INLINE, pCh, 0, 1, CMD_STOPFL) ) { | ||
1225 | pCh->flush_flags = STOPFL_FLAG; // Failed - flag for later | ||
1226 | |||
1227 | ip2trace (CHANN, ITRC_FLUSH, 3, 0 ); | ||
1228 | } | ||
1229 | } | ||
1230 | |||
1231 | static int | ||
1232 | i2RetryFlushOutput(i2ChanStrPtr pCh) | ||
1233 | { | ||
1234 | int old_flags = pCh->flush_flags; | ||
1235 | |||
1236 | ip2trace (CHANN, ITRC_FLUSH, 14, 1, old_flags ); | ||
1237 | |||
1238 | pCh->flush_flags = 0; // Clear flag so we can avoid recursion | ||
1239 | // and queue the commands | ||
1240 | |||
1241 | if ( old_flags & STARTFL_FLAG ) { | ||
1242 | if ( 1 == i2QueueCommands(PTYPE_BYPASS, pCh, 0, 1, CMD_STARTFL) ) { | ||
1243 | old_flags = STOPFL_FLAG; //Success - send stop flush | ||
1244 | } else { | ||
1245 | old_flags = STARTFL_FLAG; //Failure - Flag for retry later | ||
1246 | } | ||
1247 | |||
1248 | ip2trace (CHANN, ITRC_FLUSH, 15, 1, old_flags ); | ||
1249 | |||
1250 | } | ||
1251 | if ( old_flags & STOPFL_FLAG ) { | ||
1252 | if (1 == i2QueueCommands(PTYPE_INLINE, pCh, 0, 1, CMD_STOPFL)) { | ||
1253 | old_flags = 0; // Success - clear flags | ||
1254 | } | ||
1255 | |||
1256 | ip2trace (CHANN, ITRC_FLUSH, 16, 1, old_flags ); | ||
1257 | } | ||
1258 | pCh->flush_flags = old_flags; | ||
1259 | |||
1260 | ip2trace (CHANN, ITRC_FLUSH, 17, 1, old_flags ); | ||
1261 | |||
1262 | return old_flags; | ||
1263 | } | ||
1264 | |||
1265 | //****************************************************************************** | ||
1266 | // Function: i2DrainOutput(pCh,timeout) | ||
1267 | // Parameters: Pointer to a channel structure | ||
1268 | // Maximum period to wait | ||
1269 | // Returns: ? | ||
1270 | // | ||
1271 | // Description: | ||
1272 | // Uses the bookmark request command to ask the board to send a bookmark back as | ||
1273 | // soon as all the data is completely sent. | ||
1274 | //****************************************************************************** | ||
1275 | static void | ||
1276 | i2DrainWakeup(i2ChanStrPtr pCh) | ||
1277 | { | ||
1278 | ip2trace (CHANN, ITRC_DRAIN, 10, 1, pCh->BookmarkTimer.expires ); | ||
1279 | |||
1280 | pCh->BookmarkTimer.expires = 0; | ||
1281 | wake_up_interruptible( &pCh->pBookmarkWait ); | ||
1282 | } | ||
1283 | |||
1284 | static void | ||
1285 | i2DrainOutput(i2ChanStrPtr pCh, int timeout) | ||
1286 | { | ||
1287 | wait_queue_t wait; | ||
1288 | i2eBordStrPtr pB; | ||
1289 | |||
1290 | ip2trace (CHANN, ITRC_DRAIN, ITRC_ENTER, 1, pCh->BookmarkTimer.expires); | ||
1291 | |||
1292 | pB = pCh->pMyBord; | ||
1293 | // If the board has gone fatal, return bad, | ||
1294 | // and also hit the trap routine if it exists. | ||
1295 | if (pB->i2eFatal) { | ||
1296 | if (pB->i2eFatalTrap) { | ||
1297 | (*(pB)->i2eFatalTrap)(pB); | ||
1298 | } | ||
1299 | return; | ||
1300 | } | ||
1301 | if ((timeout > 0) && (pCh->BookmarkTimer.expires == 0 )) { | ||
1302 | // One per customer (channel) | ||
1303 | init_timer( &(pCh->BookmarkTimer) ); | ||
1304 | pCh->BookmarkTimer.expires = jiffies + timeout; | ||
1305 | pCh->BookmarkTimer.function = (void*)(unsigned long)i2DrainWakeup; | ||
1306 | pCh->BookmarkTimer.data = (unsigned long)pCh; | ||
1307 | |||
1308 | ip2trace (CHANN, ITRC_DRAIN, 1, 1, pCh->BookmarkTimer.expires ); | ||
1309 | |||
1310 | add_timer( &(pCh->BookmarkTimer) ); | ||
1311 | } | ||
1312 | |||
1313 | i2QueueCommands( PTYPE_INLINE, pCh, -1, 1, CMD_BMARK_REQ ); | ||
1314 | |||
1315 | init_waitqueue_entry(&wait, current); | ||
1316 | add_wait_queue(&(pCh->pBookmarkWait), &wait); | ||
1317 | set_current_state( TASK_INTERRUPTIBLE ); | ||
1318 | |||
1319 | serviceOutgoingFifo( pB ); | ||
1320 | |||
1321 | schedule(); // Now we take our interruptible sleep on | ||
1322 | |||
1323 | // Clean up the queue | ||
1324 | set_current_state( TASK_RUNNING ); | ||
1325 | remove_wait_queue(&(pCh->pBookmarkWait), &wait); | ||
1326 | |||
1327 | // if expires == 0 then timer poped, then do not need to del_timer | ||
1328 | if ((timeout > 0) && pCh->BookmarkTimer.expires && | ||
1329 | time_before(jiffies, pCh->BookmarkTimer.expires)) { | ||
1330 | del_timer( &(pCh->BookmarkTimer) ); | ||
1331 | pCh->BookmarkTimer.expires = 0; | ||
1332 | |||
1333 | ip2trace (CHANN, ITRC_DRAIN, 3, 1, pCh->BookmarkTimer.expires ); | ||
1334 | |||
1335 | } | ||
1336 | ip2trace (CHANN, ITRC_DRAIN, ITRC_RETURN, 1, pCh->BookmarkTimer.expires ); | ||
1337 | return; | ||
1338 | } | ||
1339 | |||
1340 | //****************************************************************************** | ||
1341 | // Function: i2OutputFree(pCh) | ||
1342 | // Parameters: Pointer to a channel structure | ||
1343 | // Returns: Space in output buffer | ||
1344 | // | ||
1345 | // Description: | ||
1346 | // Returns -1 if very gross error. Otherwise returns the amount of bytes still | ||
1347 | // free in the output buffer. | ||
1348 | //****************************************************************************** | ||
1349 | static int | ||
1350 | i2OutputFree(i2ChanStrPtr pCh) | ||
1351 | { | ||
1352 | int amountToMove; | ||
1353 | unsigned long flags; | ||
1354 | |||
1355 | // Ensure channel structure seems real | ||
1356 | if ( !i2Validate ( pCh ) ) { | ||
1357 | return -1; | ||
1358 | } | ||
1359 | READ_LOCK_IRQSAVE(&pCh->Obuf_spinlock,flags); | ||
1360 | amountToMove = pCh->Obuf_strip - pCh->Obuf_stuff - 1; | ||
1361 | READ_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); | ||
1362 | |||
1363 | if (amountToMove < 0) { | ||
1364 | amountToMove += OBUF_SIZE; | ||
1365 | } | ||
1366 | // If this is negative, we will discover later | ||
1367 | amountToMove -= sizeof(i2DataHeader); | ||
1368 | |||
1369 | return (amountToMove < 0) ? 0 : amountToMove; | ||
1370 | } | ||
1371 | static void | ||
1372 | |||
1373 | ip2_owake( PTTY tp) | ||
1374 | { | ||
1375 | i2ChanStrPtr pCh; | ||
1376 | |||
1377 | if (tp == NULL) return; | ||
1378 | |||
1379 | pCh = tp->driver_data; | ||
1380 | |||
1381 | ip2trace (CHANN, ITRC_SICMD, 10, 2, tp->flags, | ||
1382 | (1 << TTY_DO_WRITE_WAKEUP) ); | ||
1383 | |||
1384 | wake_up_interruptible ( &tp->write_wait ); | ||
1385 | if ( ( tp->flags & (1 << TTY_DO_WRITE_WAKEUP) ) | ||
1386 | && tp->ldisc.write_wakeup ) | ||
1387 | { | ||
1388 | (tp->ldisc.write_wakeup) ( tp ); | ||
1389 | |||
1390 | ip2trace (CHANN, ITRC_SICMD, 11, 0 ); | ||
1391 | |||
1392 | } | ||
1393 | } | ||
1394 | |||
1395 | static inline void | ||
1396 | set_baud_params(i2eBordStrPtr pB) | ||
1397 | { | ||
1398 | int i,j; | ||
1399 | i2ChanStrPtr *pCh; | ||
1400 | |||
1401 | pCh = (i2ChanStrPtr *) pB->i2eChannelPtr; | ||
1402 | |||
1403 | for (i = 0; i < ABS_MAX_BOXES; i++) { | ||
1404 | if (pB->channelBtypes.bid_value[i]) { | ||
1405 | if (BID_HAS_654(pB->channelBtypes.bid_value[i])) { | ||
1406 | for (j = 0; j < ABS_BIGGEST_BOX; j++) { | ||
1407 | if (pCh[i*16+j] == NULL) | ||
1408 | break; | ||
1409 | (pCh[i*16+j])->BaudBase = 921600; // MAX for ST654 | ||
1410 | (pCh[i*16+j])->BaudDivisor = 96; | ||
1411 | } | ||
1412 | } else { // has cirrus cd1400 | ||
1413 | for (j = 0; j < ABS_BIGGEST_BOX; j++) { | ||
1414 | if (pCh[i*16+j] == NULL) | ||
1415 | break; | ||
1416 | (pCh[i*16+j])->BaudBase = 115200; // MAX for CD1400 | ||
1417 | (pCh[i*16+j])->BaudDivisor = 12; | ||
1418 | } | ||
1419 | } | ||
1420 | } | ||
1421 | } | ||
1422 | } | ||
1423 | |||
1424 | //****************************************************************************** | ||
1425 | // Function: i2StripFifo(pB) | ||
1426 | // Parameters: Pointer to a board structure | ||
1427 | // Returns: ? | ||
1428 | // | ||
1429 | // Description: | ||
1430 | // Strips all the available data from the incoming FIFO, identifies the type of | ||
1431 | // packet, and either buffers the data or does what needs to be done. | ||
1432 | // | ||
1433 | // Note there is no overflow checking here: if the board sends more data than it | ||
1434 | // ought to, we will not detect it here, but blindly overflow... | ||
1435 | //****************************************************************************** | ||
1436 | |||
1437 | // A buffer for reading in blocks for unknown channels | ||
1438 | static unsigned char junkBuffer[IBUF_SIZE]; | ||
1439 | |||
1440 | // A buffer to read in a status packet. Because of the size of the count field | ||
1441 | // for these things, the maximum packet size must be less than MAX_CMD_PACK_SIZE | ||
1442 | static unsigned char cmdBuffer[MAX_CMD_PACK_SIZE + 4]; | ||
1443 | |||
1444 | // This table changes the bit order from MSR order given by STAT_MODEM packet to | ||
1445 | // status bits used in our library. | ||
1446 | static char xlatDss[16] = { | ||
1447 | 0 | 0 | 0 | 0 , | ||
1448 | 0 | 0 | 0 | I2_CTS , | ||
1449 | 0 | 0 | I2_DSR | 0 , | ||
1450 | 0 | 0 | I2_DSR | I2_CTS , | ||
1451 | 0 | I2_RI | 0 | 0 , | ||
1452 | 0 | I2_RI | 0 | I2_CTS , | ||
1453 | 0 | I2_RI | I2_DSR | 0 , | ||
1454 | 0 | I2_RI | I2_DSR | I2_CTS , | ||
1455 | I2_DCD | 0 | 0 | 0 , | ||
1456 | I2_DCD | 0 | 0 | I2_CTS , | ||
1457 | I2_DCD | 0 | I2_DSR | 0 , | ||
1458 | I2_DCD | 0 | I2_DSR | I2_CTS , | ||
1459 | I2_DCD | I2_RI | 0 | 0 , | ||
1460 | I2_DCD | I2_RI | 0 | I2_CTS , | ||
1461 | I2_DCD | I2_RI | I2_DSR | 0 , | ||
1462 | I2_DCD | I2_RI | I2_DSR | I2_CTS }; | ||
1463 | |||
1464 | static inline void | ||
1465 | i2StripFifo(i2eBordStrPtr pB) | ||
1466 | { | ||
1467 | i2ChanStrPtr pCh; | ||
1468 | int channel; | ||
1469 | int count; | ||
1470 | unsigned short stuffIndex; | ||
1471 | int amountToRead; | ||
1472 | unsigned char *pc, *pcLimit; | ||
1473 | unsigned char uc; | ||
1474 | unsigned char dss_change; | ||
1475 | unsigned long bflags,cflags; | ||
1476 | |||
1477 | // ip2trace (ITRC_NO_PORT, ITRC_SFIFO, ITRC_ENTER, 0 ); | ||
1478 | |||
1479 | while (HAS_INPUT(pB)) { | ||
1480 | // ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 2, 0 ); | ||
1481 | |||
1482 | // Process packet from fifo a one atomic unit | ||
1483 | WRITE_LOCK_IRQSAVE(&pB->read_fifo_spinlock,bflags); | ||
1484 | |||
1485 | // The first word (or two bytes) will have channel number and type of | ||
1486 | // packet, possibly other information | ||
1487 | pB->i2eLeadoffWord[0] = iiReadWord(pB); | ||
1488 | |||
1489 | switch(PTYPE_OF(pB->i2eLeadoffWord)) | ||
1490 | { | ||
1491 | case PTYPE_DATA: | ||
1492 | pB->got_input = 1; | ||
1493 | |||
1494 | // ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 3, 0 ); | ||
1495 | |||
1496 | channel = CHANNEL_OF(pB->i2eLeadoffWord); /* Store channel */ | ||
1497 | count = iiReadWord(pB); /* Count is in the next word */ | ||
1498 | |||
1499 | // NEW: Check the count for sanity! Should the hardware fail, our death | ||
1500 | // is more pleasant. While an oversize channel is acceptable (just more | ||
1501 | // than the driver supports), an over-length count clearly means we are | ||
1502 | // sick! | ||
1503 | if ( ((unsigned int)count) > IBUF_SIZE ) { | ||
1504 | pB->i2eFatal = 2; | ||
1505 | WRITE_UNLOCK_IRQRESTORE(&pB->read_fifo_spinlock,bflags); | ||
1506 | return; /* Bail out ASAP */ | ||
1507 | } | ||
1508 | // Channel is illegally big ? | ||
1509 | if ((channel >= pB->i2eChannelCnt) || | ||
1510 | (NULL==(pCh = ((i2ChanStrPtr*)pB->i2eChannelPtr)[channel]))) | ||
1511 | { | ||
1512 | iiReadBuf(pB, junkBuffer, count); | ||
1513 | WRITE_UNLOCK_IRQRESTORE(&pB->read_fifo_spinlock,bflags); | ||
1514 | break; /* From switch: ready for next packet */ | ||
1515 | } | ||
1516 | |||
1517 | // Channel should be valid, then | ||
1518 | |||
1519 | // If this is a hot-key, merely post its receipt for now. These are | ||
1520 | // always supposed to be 1-byte packets, so we won't even check the | ||
1521 | // count. Also we will post an acknowledgement to the board so that | ||
1522 | // more data can be forthcoming. Note that we are not trying to use | ||
1523 | // these sequences in this driver, merely to robustly ignore them. | ||
1524 | if(ID_OF(pB->i2eLeadoffWord) == ID_HOT_KEY) | ||
1525 | { | ||
1526 | pCh->hotKeyIn = iiReadWord(pB) & 0xff; | ||
1527 | WRITE_UNLOCK_IRQRESTORE(&pB->read_fifo_spinlock,bflags); | ||
1528 | i2QueueCommands(PTYPE_BYPASS, pCh, 0, 1, CMD_HOTACK); | ||
1529 | break; /* From the switch: ready for next packet */ | ||
1530 | } | ||
1531 | |||
1532 | // Normal data! We crudely assume there is room for the data in our | ||
1533 | // buffer because the board wouldn't have exceeded his credit limit. | ||
1534 | WRITE_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,cflags); | ||
1535 | // We have 2 locks now | ||
1536 | stuffIndex = pCh->Ibuf_stuff; | ||
1537 | amountToRead = IBUF_SIZE - stuffIndex; | ||
1538 | if (amountToRead > count) | ||
1539 | amountToRead = count; | ||
1540 | |||
1541 | // stuffIndex would have been already adjusted so there would | ||
1542 | // always be room for at least one, and count is always at least | ||
1543 | // one. | ||
1544 | |||
1545 | iiReadBuf(pB, &(pCh->Ibuf[stuffIndex]), amountToRead); | ||
1546 | pCh->icount.rx += amountToRead; | ||
1547 | |||
1548 | // Update the stuffIndex by the amount of data moved. Note we could | ||
1549 | // never ask for more data than would just fit. However, we might | ||
1550 | // have read in one more byte than we wanted because the read | ||
1551 | // rounds up to even bytes. If this byte is on the end of the | ||
1552 | // packet, and is padding, we ignore it. If the byte is part of | ||
1553 | // the actual data, we need to move it. | ||
1554 | |||
1555 | stuffIndex += amountToRead; | ||
1556 | |||
1557 | if (stuffIndex >= IBUF_SIZE) { | ||
1558 | if ((amountToRead & 1) && (count > amountToRead)) { | ||
1559 | pCh->Ibuf[0] = pCh->Ibuf[IBUF_SIZE]; | ||
1560 | amountToRead++; | ||
1561 | stuffIndex = 1; | ||
1562 | } else { | ||
1563 | stuffIndex = 0; | ||
1564 | } | ||
1565 | } | ||
1566 | |||
1567 | // If there is anything left over, read it as well | ||
1568 | if (count > amountToRead) { | ||
1569 | amountToRead = count - amountToRead; | ||
1570 | iiReadBuf(pB, &(pCh->Ibuf[stuffIndex]), amountToRead); | ||
1571 | pCh->icount.rx += amountToRead; | ||
1572 | stuffIndex += amountToRead; | ||
1573 | } | ||
1574 | |||
1575 | // Update stuff index | ||
1576 | pCh->Ibuf_stuff = stuffIndex; | ||
1577 | WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,cflags); | ||
1578 | WRITE_UNLOCK_IRQRESTORE(&pB->read_fifo_spinlock,bflags); | ||
1579 | |||
1580 | #ifdef USE_IQ | ||
1581 | schedule_work(&pCh->tqueue_input); | ||
1582 | #else | ||
1583 | do_input(pCh); | ||
1584 | #endif | ||
1585 | |||
1586 | // Note we do not need to maintain any flow-control credits at this | ||
1587 | // time: if we were to increment .asof and decrement .room, there | ||
1588 | // would be no net effect. Instead, when we strip data, we will | ||
1589 | // increment .asof and leave .room unchanged. | ||
1590 | |||
1591 | break; // From switch: ready for next packet | ||
1592 | |||
1593 | case PTYPE_STATUS: | ||
1594 | ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 4, 0 ); | ||
1595 | |||
1596 | count = CMD_COUNT_OF(pB->i2eLeadoffWord); | ||
1597 | |||
1598 | iiReadBuf(pB, cmdBuffer, count); | ||
1599 | // We can release early with buffer grab | ||
1600 | WRITE_UNLOCK_IRQRESTORE(&pB->read_fifo_spinlock,bflags); | ||
1601 | |||
1602 | pc = cmdBuffer; | ||
1603 | pcLimit = &(cmdBuffer[count]); | ||
1604 | |||
1605 | while (pc < pcLimit) { | ||
1606 | channel = *pc++; | ||
1607 | |||
1608 | ip2trace (channel, ITRC_SFIFO, 7, 2, channel, *pc ); | ||
1609 | |||
1610 | /* check for valid channel */ | ||
1611 | if (channel < pB->i2eChannelCnt | ||
1612 | && | ||
1613 | (pCh = (((i2ChanStrPtr*)pB->i2eChannelPtr)[channel])) != NULL | ||
1614 | ) | ||
1615 | { | ||
1616 | dss_change = 0; | ||
1617 | |||
1618 | switch (uc = *pc++) | ||
1619 | { | ||
1620 | /* Breaks and modem signals are easy: just update status */ | ||
1621 | case STAT_CTS_UP: | ||
1622 | if ( !(pCh->dataSetIn & I2_CTS) ) | ||
1623 | { | ||
1624 | pCh->dataSetIn |= I2_DCTS; | ||
1625 | pCh->icount.cts++; | ||
1626 | dss_change = 1; | ||
1627 | } | ||
1628 | pCh->dataSetIn |= I2_CTS; | ||
1629 | break; | ||
1630 | |||
1631 | case STAT_CTS_DN: | ||
1632 | if ( pCh->dataSetIn & I2_CTS ) | ||
1633 | { | ||
1634 | pCh->dataSetIn |= I2_DCTS; | ||
1635 | pCh->icount.cts++; | ||
1636 | dss_change = 1; | ||
1637 | } | ||
1638 | pCh->dataSetIn &= ~I2_CTS; | ||
1639 | break; | ||
1640 | |||
1641 | case STAT_DCD_UP: | ||
1642 | ip2trace (channel, ITRC_MODEM, 1, 1, pCh->dataSetIn ); | ||
1643 | |||
1644 | if ( !(pCh->dataSetIn & I2_DCD) ) | ||
1645 | { | ||
1646 | ip2trace (CHANN, ITRC_MODEM, 2, 0 ); | ||
1647 | pCh->dataSetIn |= I2_DDCD; | ||
1648 | pCh->icount.dcd++; | ||
1649 | dss_change = 1; | ||
1650 | } | ||
1651 | pCh->dataSetIn |= I2_DCD; | ||
1652 | |||
1653 | ip2trace (channel, ITRC_MODEM, 3, 1, pCh->dataSetIn ); | ||
1654 | break; | ||
1655 | |||
1656 | case STAT_DCD_DN: | ||
1657 | ip2trace (channel, ITRC_MODEM, 4, 1, pCh->dataSetIn ); | ||
1658 | if ( pCh->dataSetIn & I2_DCD ) | ||
1659 | { | ||
1660 | ip2trace (channel, ITRC_MODEM, 5, 0 ); | ||
1661 | pCh->dataSetIn |= I2_DDCD; | ||
1662 | pCh->icount.dcd++; | ||
1663 | dss_change = 1; | ||
1664 | } | ||
1665 | pCh->dataSetIn &= ~I2_DCD; | ||
1666 | |||
1667 | ip2trace (channel, ITRC_MODEM, 6, 1, pCh->dataSetIn ); | ||
1668 | break; | ||
1669 | |||
1670 | case STAT_DSR_UP: | ||
1671 | if ( !(pCh->dataSetIn & I2_DSR) ) | ||
1672 | { | ||
1673 | pCh->dataSetIn |= I2_DDSR; | ||
1674 | pCh->icount.dsr++; | ||
1675 | dss_change = 1; | ||
1676 | } | ||
1677 | pCh->dataSetIn |= I2_DSR; | ||
1678 | break; | ||
1679 | |||
1680 | case STAT_DSR_DN: | ||
1681 | if ( pCh->dataSetIn & I2_DSR ) | ||
1682 | { | ||
1683 | pCh->dataSetIn |= I2_DDSR; | ||
1684 | pCh->icount.dsr++; | ||
1685 | dss_change = 1; | ||
1686 | } | ||
1687 | pCh->dataSetIn &= ~I2_DSR; | ||
1688 | break; | ||
1689 | |||
1690 | case STAT_RI_UP: | ||
1691 | if ( !(pCh->dataSetIn & I2_RI) ) | ||
1692 | { | ||
1693 | pCh->dataSetIn |= I2_DRI; | ||
1694 | pCh->icount.rng++; | ||
1695 | dss_change = 1; | ||
1696 | } | ||
1697 | pCh->dataSetIn |= I2_RI ; | ||
1698 | break; | ||
1699 | |||
1700 | case STAT_RI_DN: | ||
1701 | // to be compat with serial.c | ||
1702 | //if ( pCh->dataSetIn & I2_RI ) | ||
1703 | //{ | ||
1704 | // pCh->dataSetIn |= I2_DRI; | ||
1705 | // pCh->icount.rng++; | ||
1706 | // dss_change = 1; | ||
1707 | //} | ||
1708 | pCh->dataSetIn &= ~I2_RI ; | ||
1709 | break; | ||
1710 | |||
1711 | case STAT_BRK_DET: | ||
1712 | pCh->dataSetIn |= I2_BRK; | ||
1713 | pCh->icount.brk++; | ||
1714 | dss_change = 1; | ||
1715 | break; | ||
1716 | |||
1717 | // Bookmarks? one less request we're waiting for | ||
1718 | case STAT_BMARK: | ||
1719 | pCh->bookMarks--; | ||
1720 | if (pCh->bookMarks <= 0 ) { | ||
1721 | pCh->bookMarks = 0; | ||
1722 | wake_up_interruptible( &pCh->pBookmarkWait ); | ||
1723 | |||
1724 | ip2trace (channel, ITRC_DRAIN, 20, 1, pCh->BookmarkTimer.expires ); | ||
1725 | } | ||
1726 | break; | ||
1727 | |||
1728 | // Flow control packets? Update the new credits, and if | ||
1729 | // someone was waiting for output, queue him up again. | ||
1730 | case STAT_FLOW: | ||
1731 | pCh->outfl.room = | ||
1732 | ((flowStatPtr)pc)->room - | ||
1733 | (pCh->outfl.asof - ((flowStatPtr)pc)->asof); | ||
1734 | |||
1735 | ip2trace (channel, ITRC_STFLW, 1, 1, pCh->outfl.room ); | ||
1736 | |||
1737 | if (pCh->channelNeeds & NEED_CREDIT) | ||
1738 | { | ||
1739 | ip2trace (channel, ITRC_STFLW, 2, 1, pCh->channelNeeds); | ||
1740 | |||
1741 | pCh->channelNeeds &= ~NEED_CREDIT; | ||
1742 | i2QueueNeeds(pB, pCh, NEED_INLINE); | ||
1743 | if ( pCh->pTTY ) | ||
1744 | ip2_owake(pCh->pTTY); | ||
1745 | } | ||
1746 | |||
1747 | ip2trace (channel, ITRC_STFLW, 3, 1, pCh->channelNeeds); | ||
1748 | |||
1749 | pc += sizeof(flowStat); | ||
1750 | break; | ||
1751 | |||
1752 | /* Special packets: */ | ||
1753 | /* Just copy the information into the channel structure */ | ||
1754 | |||
1755 | case STAT_STATUS: | ||
1756 | |||
1757 | pCh->channelStatus = *((debugStatPtr)pc); | ||
1758 | pc += sizeof(debugStat); | ||
1759 | break; | ||
1760 | |||
1761 | case STAT_TXCNT: | ||
1762 | |||
1763 | pCh->channelTcount = *((cntStatPtr)pc); | ||
1764 | pc += sizeof(cntStat); | ||
1765 | break; | ||
1766 | |||
1767 | case STAT_RXCNT: | ||
1768 | |||
1769 | pCh->channelRcount = *((cntStatPtr)pc); | ||
1770 | pc += sizeof(cntStat); | ||
1771 | break; | ||
1772 | |||
1773 | case STAT_BOXIDS: | ||
1774 | pB->channelBtypes = *((bidStatPtr)pc); | ||
1775 | pc += sizeof(bidStat); | ||
1776 | set_baud_params(pB); | ||
1777 | break; | ||
1778 | |||
1779 | case STAT_HWFAIL: | ||
1780 | i2QueueCommands (PTYPE_INLINE, pCh, 0, 1, CMD_HW_TEST); | ||
1781 | pCh->channelFail = *((failStatPtr)pc); | ||
1782 | pc += sizeof(failStat); | ||
1783 | break; | ||
1784 | |||
1785 | /* No explicit match? then | ||
1786 | * Might be an error packet... | ||
1787 | */ | ||
1788 | default: | ||
1789 | switch (uc & STAT_MOD_ERROR) | ||
1790 | { | ||
1791 | case STAT_ERROR: | ||
1792 | if (uc & STAT_E_PARITY) { | ||
1793 | pCh->dataSetIn |= I2_PAR; | ||
1794 | pCh->icount.parity++; | ||
1795 | } | ||
1796 | if (uc & STAT_E_FRAMING){ | ||
1797 | pCh->dataSetIn |= I2_FRA; | ||
1798 | pCh->icount.frame++; | ||
1799 | } | ||
1800 | if (uc & STAT_E_OVERRUN){ | ||
1801 | pCh->dataSetIn |= I2_OVR; | ||
1802 | pCh->icount.overrun++; | ||
1803 | } | ||
1804 | break; | ||
1805 | |||
1806 | case STAT_MODEM: | ||
1807 | // the answer to DSS_NOW request (not change) | ||
1808 | pCh->dataSetIn = (pCh->dataSetIn | ||
1809 | & ~(I2_RI | I2_CTS | I2_DCD | I2_DSR) ) | ||
1810 | | xlatDss[uc & 0xf]; | ||
1811 | wake_up_interruptible ( &pCh->dss_now_wait ); | ||
1812 | default: | ||
1813 | break; | ||
1814 | } | ||
1815 | } /* End of switch on status type */ | ||
1816 | if (dss_change) { | ||
1817 | #ifdef USE_IQ | ||
1818 | schedule_work(&pCh->tqueue_status); | ||
1819 | #else | ||
1820 | do_status(pCh); | ||
1821 | #endif | ||
1822 | } | ||
1823 | } | ||
1824 | else /* Or else, channel is invalid */ | ||
1825 | { | ||
1826 | // Even though the channel is invalid, we must test the | ||
1827 | // status to see how much additional data it has (to be | ||
1828 | // skipped) | ||
1829 | switch (*pc++) | ||
1830 | { | ||
1831 | case STAT_FLOW: | ||
1832 | pc += 4; /* Skip the data */ | ||
1833 | break; | ||
1834 | |||
1835 | default: | ||
1836 | break; | ||
1837 | } | ||
1838 | } | ||
1839 | } // End of while (there is still some status packet left) | ||
1840 | break; | ||
1841 | |||
1842 | default: // Neither packet? should be impossible | ||
1843 | ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 5, 1, | ||
1844 | PTYPE_OF(pB->i2eLeadoffWord) ); | ||
1845 | |||
1846 | break; | ||
1847 | } // End of switch on type of packets | ||
1848 | } //while(board HAS_INPUT) | ||
1849 | |||
1850 | ip2trace (ITRC_NO_PORT, ITRC_SFIFO, ITRC_RETURN, 0 ); | ||
1851 | |||
1852 | // Send acknowledgement to the board even if there was no data! | ||
1853 | pB->i2eOutMailWaiting |= MB_IN_STRIPPED; | ||
1854 | return; | ||
1855 | } | ||
1856 | |||
1857 | //****************************************************************************** | ||
1858 | // Function: i2Write2Fifo(pB,address,count) | ||
1859 | // Parameters: Pointer to a board structure, source address, byte count | ||
1860 | // Returns: bytes written | ||
1861 | // | ||
1862 | // Description: | ||
1863 | // Writes count bytes to board io address(implied) from source | ||
1864 | // Adjusts count, leaves reserve for next time around bypass cmds | ||
1865 | //****************************************************************************** | ||
1866 | static int | ||
1867 | i2Write2Fifo(i2eBordStrPtr pB, unsigned char *source, int count,int reserve) | ||
1868 | { | ||
1869 | int rc = 0; | ||
1870 | unsigned long flags; | ||
1871 | WRITE_LOCK_IRQSAVE(&pB->write_fifo_spinlock,flags); | ||
1872 | if (!pB->i2eWaitingForEmptyFifo) { | ||
1873 | if (pB->i2eFifoRemains > (count+reserve)) { | ||
1874 | pB->i2eFifoRemains -= count; | ||
1875 | iiWriteBuf(pB, source, count); | ||
1876 | pB->i2eOutMailWaiting |= MB_OUT_STUFFED; | ||
1877 | rc = count; | ||
1878 | } | ||
1879 | } | ||
1880 | WRITE_UNLOCK_IRQRESTORE(&pB->write_fifo_spinlock,flags); | ||
1881 | return rc; | ||
1882 | } | ||
1883 | //****************************************************************************** | ||
1884 | // Function: i2StuffFifoBypass(pB) | ||
1885 | // Parameters: Pointer to a board structure | ||
1886 | // Returns: Nothing | ||
1887 | // | ||
1888 | // Description: | ||
1889 | // Stuffs as many bypass commands into the fifo as possible. This is simpler | ||
1890 | // than stuffing data or inline commands to fifo, since we do not have | ||
1891 | // flow-control to deal with. | ||
1892 | //****************************************************************************** | ||
1893 | static inline void | ||
1894 | i2StuffFifoBypass(i2eBordStrPtr pB) | ||
1895 | { | ||
1896 | i2ChanStrPtr pCh; | ||
1897 | unsigned char *pRemove; | ||
1898 | unsigned short stripIndex; | ||
1899 | unsigned short packetSize; | ||
1900 | unsigned short paddedSize; | ||
1901 | unsigned short notClogged = 1; | ||
1902 | unsigned long flags; | ||
1903 | |||
1904 | int bailout = 1000; | ||
1905 | |||
1906 | // Continue processing so long as there are entries, or there is room in the | ||
1907 | // fifo. Each entry represents a channel with something to do. | ||
1908 | while ( --bailout && notClogged && | ||
1909 | (NULL != (pCh = i2DeQueueNeeds(pB,NEED_BYPASS)))) | ||
1910 | { | ||
1911 | WRITE_LOCK_IRQSAVE(&pCh->Cbuf_spinlock,flags); | ||
1912 | stripIndex = pCh->Cbuf_strip; | ||
1913 | |||
1914 | // as long as there are packets for this channel... | ||
1915 | |||
1916 | while (stripIndex != pCh->Cbuf_stuff) { | ||
1917 | pRemove = &(pCh->Cbuf[stripIndex]); | ||
1918 | packetSize = CMD_COUNT_OF(pRemove) + sizeof(i2CmdHeader); | ||
1919 | paddedSize = ROUNDUP(packetSize); | ||
1920 | |||
1921 | if (paddedSize > 0) { | ||
1922 | if ( 0 == i2Write2Fifo(pB, pRemove, paddedSize,0)) { | ||
1923 | notClogged = 0; /* fifo full */ | ||
1924 | i2QueueNeeds(pB, pCh, NEED_BYPASS); // Put back on queue | ||
1925 | break; // Break from the channel | ||
1926 | } | ||
1927 | } | ||
1928 | #ifdef DEBUG_FIFO | ||
1929 | WriteDBGBuf("BYPS", pRemove, paddedSize); | ||
1930 | #endif /* DEBUG_FIFO */ | ||
1931 | pB->debugBypassCount++; | ||
1932 | |||
1933 | pRemove += packetSize; | ||
1934 | stripIndex += packetSize; | ||
1935 | if (stripIndex >= CBUF_SIZE) { | ||
1936 | stripIndex = 0; | ||
1937 | pRemove = pCh->Cbuf; | ||
1938 | } | ||
1939 | } | ||
1940 | // Done with this channel. Move to next, removing this one from | ||
1941 | // the queue of channels if we cleaned it out (i.e., didn't get clogged. | ||
1942 | pCh->Cbuf_strip = stripIndex; | ||
1943 | WRITE_UNLOCK_IRQRESTORE(&pCh->Cbuf_spinlock,flags); | ||
1944 | } // Either clogged or finished all the work | ||
1945 | |||
1946 | #ifdef IP2DEBUG_TRACE | ||
1947 | if ( !bailout ) { | ||
1948 | ip2trace (ITRC_NO_PORT, ITRC_ERROR, 1, 0 ); | ||
1949 | } | ||
1950 | #endif | ||
1951 | } | ||
1952 | |||
1953 | //****************************************************************************** | ||
1954 | // Function: i2StuffFifoFlow(pB) | ||
1955 | // Parameters: Pointer to a board structure | ||
1956 | // Returns: Nothing | ||
1957 | // | ||
1958 | // Description: | ||
1959 | // Stuffs as many flow control packets into the fifo as possible. This is easier | ||
1960 | // even than doing normal bypass commands, because there is always at most one | ||
1961 | // packet, already assembled, for each channel. | ||
1962 | //****************************************************************************** | ||
1963 | static inline void | ||
1964 | i2StuffFifoFlow(i2eBordStrPtr pB) | ||
1965 | { | ||
1966 | i2ChanStrPtr pCh; | ||
1967 | unsigned short paddedSize = ROUNDUP(sizeof(flowIn)); | ||
1968 | |||
1969 | ip2trace (ITRC_NO_PORT, ITRC_SFLOW, ITRC_ENTER, 2, | ||
1970 | pB->i2eFifoRemains, paddedSize ); | ||
1971 | |||
1972 | // Continue processing so long as there are entries, or there is room in the | ||
1973 | // fifo. Each entry represents a channel with something to do. | ||
1974 | while ( (NULL != (pCh = i2DeQueueNeeds(pB,NEED_FLOW)))) { | ||
1975 | pB->debugFlowCount++; | ||
1976 | |||
1977 | // NO Chan LOCK needed ??? | ||
1978 | if ( 0 == i2Write2Fifo(pB,(unsigned char *)&(pCh->infl),paddedSize,0)) { | ||
1979 | break; | ||
1980 | } | ||
1981 | #ifdef DEBUG_FIFO | ||
1982 | WriteDBGBuf("FLOW",(unsigned char *) &(pCh->infl), paddedSize); | ||
1983 | #endif /* DEBUG_FIFO */ | ||
1984 | |||
1985 | } // Either clogged or finished all the work | ||
1986 | |||
1987 | ip2trace (ITRC_NO_PORT, ITRC_SFLOW, ITRC_RETURN, 0 ); | ||
1988 | } | ||
1989 | |||
1990 | //****************************************************************************** | ||
1991 | // Function: i2StuffFifoInline(pB) | ||
1992 | // Parameters: Pointer to a board structure | ||
1993 | // Returns: Nothing | ||
1994 | // | ||
1995 | // Description: | ||
1996 | // Stuffs as much data and inline commands into the fifo as possible. This is | ||
1997 | // the most complex fifo-stuffing operation, since there if now the channel | ||
1998 | // flow-control issue to deal with. | ||
1999 | //****************************************************************************** | ||
2000 | static inline void | ||
2001 | i2StuffFifoInline(i2eBordStrPtr pB) | ||
2002 | { | ||
2003 | i2ChanStrPtr pCh; | ||
2004 | unsigned char *pRemove; | ||
2005 | unsigned short stripIndex; | ||
2006 | unsigned short packetSize; | ||
2007 | unsigned short paddedSize; | ||
2008 | unsigned short notClogged = 1; | ||
2009 | unsigned short flowsize; | ||
2010 | unsigned long flags; | ||
2011 | |||
2012 | int bailout = 1000; | ||
2013 | int bailout2; | ||
2014 | |||
2015 | ip2trace (ITRC_NO_PORT, ITRC_SICMD, ITRC_ENTER, 3, pB->i2eFifoRemains, | ||
2016 | pB->i2Dbuf_strip, pB->i2Dbuf_stuff ); | ||
2017 | |||
2018 | // Continue processing so long as there are entries, or there is room in the | ||
2019 | // fifo. Each entry represents a channel with something to do. | ||
2020 | while ( --bailout && notClogged && | ||
2021 | (NULL != (pCh = i2DeQueueNeeds(pB,NEED_INLINE))) ) | ||
2022 | { | ||
2023 | WRITE_LOCK_IRQSAVE(&pCh->Obuf_spinlock,flags); | ||
2024 | stripIndex = pCh->Obuf_strip; | ||
2025 | |||
2026 | ip2trace (CHANN, ITRC_SICMD, 3, 2, stripIndex, pCh->Obuf_stuff ); | ||
2027 | |||
2028 | // as long as there are packets for this channel... | ||
2029 | bailout2 = 1000; | ||
2030 | while ( --bailout2 && stripIndex != pCh->Obuf_stuff) { | ||
2031 | pRemove = &(pCh->Obuf[stripIndex]); | ||
2032 | |||
2033 | // Must determine whether this be a data or command packet to | ||
2034 | // calculate correctly the header size and the amount of | ||
2035 | // flow-control credit this type of packet will use. | ||
2036 | if (PTYPE_OF(pRemove) == PTYPE_DATA) { | ||
2037 | flowsize = DATA_COUNT_OF(pRemove); | ||
2038 | packetSize = flowsize + sizeof(i2DataHeader); | ||
2039 | } else { | ||
2040 | flowsize = CMD_COUNT_OF(pRemove); | ||
2041 | packetSize = flowsize + sizeof(i2CmdHeader); | ||
2042 | } | ||
2043 | flowsize = CREDIT_USAGE(flowsize); | ||
2044 | paddedSize = ROUNDUP(packetSize); | ||
2045 | |||
2046 | ip2trace (CHANN, ITRC_SICMD, 4, 2, pB->i2eFifoRemains, paddedSize ); | ||
2047 | |||
2048 | // If we don't have enough credits from the board to send the data, | ||
2049 | // flag the channel that we are waiting for flow control credit, and | ||
2050 | // break out. This will clean up this channel and remove us from the | ||
2051 | // queue of hot things to do. | ||
2052 | |||
2053 | ip2trace (CHANN, ITRC_SICMD, 5, 2, pCh->outfl.room, flowsize ); | ||
2054 | |||
2055 | if (pCh->outfl.room <= flowsize) { | ||
2056 | // Do Not have the credits to send this packet. | ||
2057 | i2QueueNeeds(pB, pCh, NEED_CREDIT); | ||
2058 | notClogged = 0; | ||
2059 | break; // So to do next channel | ||
2060 | } | ||
2061 | if ( (paddedSize > 0) | ||
2062 | && ( 0 == i2Write2Fifo(pB, pRemove, paddedSize, 128))) { | ||
2063 | // Do Not have room in fifo to send this packet. | ||
2064 | notClogged = 0; | ||
2065 | i2QueueNeeds(pB, pCh, NEED_INLINE); | ||
2066 | break; // Break from the channel | ||
2067 | } | ||
2068 | #ifdef DEBUG_FIFO | ||
2069 | WriteDBGBuf("DATA", pRemove, paddedSize); | ||
2070 | #endif /* DEBUG_FIFO */ | ||
2071 | pB->debugInlineCount++; | ||
2072 | |||
2073 | pCh->icount.tx += flowsize; | ||
2074 | // Update current credits | ||
2075 | pCh->outfl.room -= flowsize; | ||
2076 | pCh->outfl.asof += flowsize; | ||
2077 | if (PTYPE_OF(pRemove) == PTYPE_DATA) { | ||
2078 | pCh->Obuf_char_count -= DATA_COUNT_OF(pRemove); | ||
2079 | } | ||
2080 | pRemove += packetSize; | ||
2081 | stripIndex += packetSize; | ||
2082 | |||
2083 | ip2trace (CHANN, ITRC_SICMD, 6, 2, stripIndex, pCh->Obuf_strip); | ||
2084 | |||
2085 | if (stripIndex >= OBUF_SIZE) { | ||
2086 | stripIndex = 0; | ||
2087 | pRemove = pCh->Obuf; | ||
2088 | |||
2089 | ip2trace (CHANN, ITRC_SICMD, 7, 1, stripIndex ); | ||
2090 | |||
2091 | } | ||
2092 | } /* while */ | ||
2093 | if ( !bailout2 ) { | ||
2094 | ip2trace (CHANN, ITRC_ERROR, 3, 0 ); | ||
2095 | } | ||
2096 | // Done with this channel. Move to next, removing this one from the | ||
2097 | // queue of channels if we cleaned it out (i.e., didn't get clogged. | ||
2098 | pCh->Obuf_strip = stripIndex; | ||
2099 | WRITE_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); | ||
2100 | if ( notClogged ) | ||
2101 | { | ||
2102 | |||
2103 | ip2trace (CHANN, ITRC_SICMD, 8, 0 ); | ||
2104 | |||
2105 | if ( pCh->pTTY ) { | ||
2106 | ip2_owake(pCh->pTTY); | ||
2107 | } | ||
2108 | } | ||
2109 | } // Either clogged or finished all the work | ||
2110 | |||
2111 | if ( !bailout ) { | ||
2112 | ip2trace (ITRC_NO_PORT, ITRC_ERROR, 4, 0 ); | ||
2113 | } | ||
2114 | |||
2115 | ip2trace (ITRC_NO_PORT, ITRC_SICMD, ITRC_RETURN, 1,pB->i2Dbuf_strip); | ||
2116 | } | ||
2117 | |||
2118 | //****************************************************************************** | ||
2119 | // Function: serviceOutgoingFifo(pB) | ||
2120 | // Parameters: Pointer to a board structure | ||
2121 | // Returns: Nothing | ||
2122 | // | ||
2123 | // Description: | ||
2124 | // Helper routine to put data in the outgoing fifo, if we aren't already waiting | ||
2125 | // for something to be there. If the fifo has only room for a very little data, | ||
2126 | // go head and hit the board with a mailbox hit immediately. Otherwise, it will | ||
2127 | // have to happen later in the interrupt processing. Since this routine may be | ||
2128 | // called both at interrupt and foreground time, we must turn off interrupts | ||
2129 | // during the entire process. | ||
2130 | //****************************************************************************** | ||
2131 | static void | ||
2132 | serviceOutgoingFifo(i2eBordStrPtr pB) | ||
2133 | { | ||
2134 | // If we aren't currently waiting for the board to empty our fifo, service | ||
2135 | // everything that is pending, in priority order (especially, Bypass before | ||
2136 | // Inline). | ||
2137 | if ( ! pB->i2eWaitingForEmptyFifo ) | ||
2138 | { | ||
2139 | i2StuffFifoFlow(pB); | ||
2140 | i2StuffFifoBypass(pB); | ||
2141 | i2StuffFifoInline(pB); | ||
2142 | |||
2143 | iiSendPendingMail(pB); | ||
2144 | } | ||
2145 | } | ||
2146 | |||
2147 | //****************************************************************************** | ||
2148 | // Function: i2ServiceBoard(pB) | ||
2149 | // Parameters: Pointer to a board structure | ||
2150 | // Returns: Nothing | ||
2151 | // | ||
2152 | // Description: | ||
2153 | // Normally this is called from interrupt level, but there is deliberately | ||
2154 | // nothing in here specific to being called from interrupt level. All the | ||
2155 | // hardware-specific, interrupt-specific things happen at the outer levels. | ||
2156 | // | ||
2157 | // For example, a timer interrupt could drive this routine for some sort of | ||
2158 | // polled operation. The only requirement is that the programmer deal with any | ||
2159 | // atomiticity/concurrency issues that result. | ||
2160 | // | ||
2161 | // This routine responds to the board's having sent mailbox information to the | ||
2162 | // host (which would normally cause an interrupt). This routine reads the | ||
2163 | // incoming mailbox. If there is no data in it, this board did not create the | ||
2164 | // interrupt and/or has nothing to be done to it. (Except, if we have been | ||
2165 | // waiting to write mailbox data to it, we may do so. | ||
2166 | // | ||
2167 | // Based on the value in the mailbox, we may take various actions. | ||
2168 | // | ||
2169 | // No checking here of pB validity: after all, it shouldn't have been called by | ||
2170 | // the handler unless pB were on the list. | ||
2171 | //****************************************************************************** | ||
2172 | static inline int | ||
2173 | i2ServiceBoard ( i2eBordStrPtr pB ) | ||
2174 | { | ||
2175 | unsigned inmail; | ||
2176 | unsigned long flags; | ||
2177 | |||
2178 | |||
2179 | /* This should be atomic because of the way we are called... */ | ||
2180 | if (NO_MAIL_HERE == ( inmail = pB->i2eStartMail ) ) { | ||
2181 | inmail = iiGetMail(pB); | ||
2182 | } | ||
2183 | pB->i2eStartMail = NO_MAIL_HERE; | ||
2184 | |||
2185 | ip2trace (ITRC_NO_PORT, ITRC_INTR, 2, 1, inmail ); | ||
2186 | |||
2187 | if (inmail != NO_MAIL_HERE) { | ||
2188 | // If the board has gone fatal, nothing to do but hit a bit that will | ||
2189 | // alert foreground tasks to protest! | ||
2190 | if ( inmail & MB_FATAL_ERROR ) { | ||
2191 | pB->i2eFatal = 1; | ||
2192 | goto exit_i2ServiceBoard; | ||
2193 | } | ||
2194 | |||
2195 | /* Assuming no fatal condition, we proceed to do work */ | ||
2196 | if ( inmail & MB_IN_STUFFED ) { | ||
2197 | pB->i2eFifoInInts++; | ||
2198 | i2StripFifo(pB); /* There might be incoming packets */ | ||
2199 | } | ||
2200 | |||
2201 | if (inmail & MB_OUT_STRIPPED) { | ||
2202 | pB->i2eFifoOutInts++; | ||
2203 | WRITE_LOCK_IRQSAVE(&pB->write_fifo_spinlock,flags); | ||
2204 | pB->i2eFifoRemains = pB->i2eFifoSize; | ||
2205 | pB->i2eWaitingForEmptyFifo = 0; | ||
2206 | WRITE_UNLOCK_IRQRESTORE(&pB->write_fifo_spinlock,flags); | ||
2207 | |||
2208 | ip2trace (ITRC_NO_PORT, ITRC_INTR, 30, 1, pB->i2eFifoRemains ); | ||
2209 | |||
2210 | } | ||
2211 | serviceOutgoingFifo(pB); | ||
2212 | } | ||
2213 | |||
2214 | ip2trace (ITRC_NO_PORT, ITRC_INTR, 8, 0 ); | ||
2215 | |||
2216 | exit_i2ServiceBoard: | ||
2217 | |||
2218 | return 0; | ||
2219 | } | ||
diff --git a/drivers/char/ip2/i2lib.h b/drivers/char/ip2/i2lib.h new file mode 100644 index 000000000000..952e113ccd8a --- /dev/null +++ b/drivers/char/ip2/i2lib.h | |||
@@ -0,0 +1,351 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Header file for high level library functions | ||
12 | * | ||
13 | *******************************************************************************/ | ||
14 | #ifndef I2LIB_H | ||
15 | #define I2LIB_H 1 | ||
16 | //------------------------------------------------------------------------------ | ||
17 | // I2LIB.H | ||
18 | // | ||
19 | // IntelliPort-II and IntelliPort-IIEX | ||
20 | // | ||
21 | // Defines, structure definitions, and external declarations for i2lib.c | ||
22 | //------------------------------------------------------------------------------ | ||
23 | //-------------------------------------- | ||
24 | // Mandatory Includes: | ||
25 | //-------------------------------------- | ||
26 | #include "ip2types.h" | ||
27 | #include "i2ellis.h" | ||
28 | #include "i2pack.h" | ||
29 | #include "i2cmd.h" | ||
30 | #include <linux/workqueue.h> | ||
31 | |||
32 | //------------------------------------------------------------------------------ | ||
33 | // i2ChanStr -- Channel Structure: | ||
34 | // Used to track per-channel information for the library routines using standard | ||
35 | // loadware. Note also, a pointer to an array of these structures is patched | ||
36 | // into the i2eBordStr (see i2ellis.h) | ||
37 | //------------------------------------------------------------------------------ | ||
38 | // | ||
39 | // If we make some limits on the maximum block sizes, we can avoid dealing with | ||
40 | // buffer wrap. The wrapping of the buffer is based on where the start of the | ||
41 | // packet is. Then there is always room for the packet contiguously. | ||
42 | // | ||
43 | // Maximum total length of an outgoing data or in-line command block. The limit | ||
44 | // of 36 on data is quite arbitrary and based more on DOS memory limitations | ||
45 | // than the board interface. However, for commands, the maximum packet length is | ||
46 | // MAX_CMD_PACK_SIZE, because the field size for the count is only a few bits | ||
47 | // (see I2PACK.H) in such packets. For data packets, the count field size is not | ||
48 | // the limiting factor. As of this writing, MAX_OBUF_BLOCK < MAX_CMD_PACK_SIZE, | ||
49 | // but be careful if wanting to modify either. | ||
50 | // | ||
51 | #define MAX_OBUF_BLOCK 36 | ||
52 | |||
53 | // Another note on maximum block sizes: we are buffering packets here. Data is | ||
54 | // put into the buffer (if there is room) regardless of the credits from the | ||
55 | // board. The board sends new credits whenever it has removed from his buffers a | ||
56 | // number of characters equal to 80% of total buffer size. (Of course, the total | ||
57 | // buffer size is what is reported when the very first set of flow control | ||
58 | // status packets are received from the board. Therefore, to be robust, you must | ||
59 | // always fill the board to at least 80% of the current credit limit, else you | ||
60 | // might not give it enough to trigger a new report. These conditions are | ||
61 | // obtained here so long as the maximum output block size is less than 20% the | ||
62 | // size of the board's output buffers. This is true at present by "coincidence" | ||
63 | // or "infernal knowledge": the board's output buffers are at least 700 bytes | ||
64 | // long (20% = 140 bytes, at least). The 80% figure is "official", so the safest | ||
65 | // strategy might be to trap the first flow control report and guarantee that | ||
66 | // the effective maxObufBlock is the minimum of MAX_OBUF_BLOCK and 20% of first | ||
67 | // reported buffer credit. | ||
68 | // | ||
69 | #define MAX_CBUF_BLOCK 6 // Maximum total length of a bypass command block | ||
70 | |||
71 | #define IBUF_SIZE 512 // character capacity of input buffer per channel | ||
72 | #define OBUF_SIZE 1024// character capacity of output buffer per channel | ||
73 | #define CBUF_SIZE 10 // character capacity of output bypass buffer | ||
74 | |||
75 | typedef struct _i2ChanStr | ||
76 | { | ||
77 | // First, back-pointers so that given a pointer to this structure, you can | ||
78 | // determine the correct board and channel number to reference, (say, when | ||
79 | // issuing commands, etc. (Note, channel number is in infl.hd.i2sChannel.) | ||
80 | |||
81 | int port_index; // Index of port in channel structure array attached | ||
82 | // to board structure. | ||
83 | PTTY pTTY; // Pointer to tty structure for port (OS specific) | ||
84 | USHORT validity; // Indicates whether the given channel has been | ||
85 | // initialized, really exists (or is a missing | ||
86 | // channel, e.g. channel 9 on an 8-port box.) | ||
87 | |||
88 | i2eBordStrPtr pMyBord; // Back-pointer to this channel's board structure | ||
89 | |||
90 | int wopen; // waiting fer carrier | ||
91 | |||
92 | int throttled; // Set if upper layer can take no data | ||
93 | |||
94 | int flags; // Defined in tty.h | ||
95 | |||
96 | PWAITQ open_wait; // Pointer for OS sleep function. | ||
97 | PWAITQ close_wait; // Pointer for OS sleep function. | ||
98 | PWAITQ delta_msr_wait;// Pointer for OS sleep function. | ||
99 | PWAITQ dss_now_wait; // Pointer for OS sleep function. | ||
100 | |||
101 | struct timer_list BookmarkTimer; // Used by i2DrainOutput | ||
102 | wait_queue_head_t pBookmarkWait; // Used by i2DrainOutput | ||
103 | |||
104 | int BaudBase; | ||
105 | int BaudDivisor; | ||
106 | |||
107 | USHORT ClosingDelay; | ||
108 | USHORT ClosingWaitTime; | ||
109 | |||
110 | volatile | ||
111 | flowIn infl; // This structure is initialized as a completely | ||
112 | // formed flow-control command packet, and as such | ||
113 | // has the channel number, also the capacity and | ||
114 | // "as-of" data needed continuously. | ||
115 | |||
116 | USHORT sinceLastFlow; // Counts the number of characters read from input | ||
117 | // buffers, since the last time flow control info | ||
118 | // was sent. | ||
119 | |||
120 | USHORT whenSendFlow; // Determines when new flow control is to be sent to | ||
121 | // the board. Note unlike earlier manifestations of | ||
122 | // the driver, these packets can be sent from | ||
123 | // in-place. | ||
124 | |||
125 | USHORT channelNeeds; // Bit map of important things which must be done | ||
126 | // for this channel. (See bits below ) | ||
127 | |||
128 | volatile | ||
129 | flowStat outfl; // Same type of structure is used to hold current | ||
130 | // flow control information used to control our | ||
131 | // output. "asof" is kept updated as data is sent, | ||
132 | // and "room" never goes to zero. | ||
133 | |||
134 | // The incoming ring buffer | ||
135 | // Unlike the outgoing buffers, this holds raw data, not packets. The two | ||
136 | // extra bytes are used to hold the byte-padding when there is room for an | ||
137 | // odd number of bytes before we must wrap. | ||
138 | // | ||
139 | UCHAR Ibuf[IBUF_SIZE + 2]; | ||
140 | volatile | ||
141 | USHORT Ibuf_stuff; // Stuffing index | ||
142 | volatile | ||
143 | USHORT Ibuf_strip; // Stripping index | ||
144 | |||
145 | // The outgoing ring-buffer: Holds Data and command packets. N.B., even | ||
146 | // though these are in the channel structure, the channel is also written | ||
147 | // here, the easier to send it to the fifo when ready. HOWEVER, individual | ||
148 | // packets here are NOT padded to even length: the routines for writing | ||
149 | // blocks to the fifo will pad to even byte counts. | ||
150 | // | ||
151 | UCHAR Obuf[OBUF_SIZE+MAX_OBUF_BLOCK+4]; | ||
152 | volatile | ||
153 | USHORT Obuf_stuff; // Stuffing index | ||
154 | volatile | ||
155 | USHORT Obuf_strip; // Stripping index | ||
156 | int Obuf_char_count; | ||
157 | |||
158 | // The outgoing bypass-command buffer. Unlike earlier manifestations, the | ||
159 | // flow control packets are sent directly from the structures. As above, the | ||
160 | // channel number is included in the packet, but they are NOT padded to even | ||
161 | // size. | ||
162 | // | ||
163 | UCHAR Cbuf[CBUF_SIZE+MAX_CBUF_BLOCK+2]; | ||
164 | volatile | ||
165 | USHORT Cbuf_stuff; // Stuffing index | ||
166 | volatile | ||
167 | USHORT Cbuf_strip; // Stripping index | ||
168 | |||
169 | // The temporary buffer for the Linux tty driver PutChar entry. | ||
170 | // | ||
171 | UCHAR Pbuf[MAX_OBUF_BLOCK - sizeof (i2DataHeader)]; | ||
172 | volatile | ||
173 | USHORT Pbuf_stuff; // Stuffing index | ||
174 | |||
175 | // The state of incoming data-set signals | ||
176 | // | ||
177 | USHORT dataSetIn; // Bit-mapped according to below. Also indicates | ||
178 | // whether a break has been detected since last | ||
179 | // inquiry. | ||
180 | |||
181 | // The state of outcoming data-set signals (as far as we can tell!) | ||
182 | // | ||
183 | USHORT dataSetOut; // Bit-mapped according to below. | ||
184 | |||
185 | // Most recent hot-key identifier detected | ||
186 | // | ||
187 | USHORT hotKeyIn; // Hot key as sent by the board, HOT_CLEAR indicates | ||
188 | // no hot key detected since last examined. | ||
189 | |||
190 | // Counter of outstanding requests for bookmarks | ||
191 | // | ||
192 | short bookMarks; // Number of outstanding bookmark requests, (+ive | ||
193 | // whenever a bookmark request if queued up, -ive | ||
194 | // whenever a bookmark is received). | ||
195 | |||
196 | // Misc options | ||
197 | // | ||
198 | USHORT channelOptions; // See below | ||
199 | |||
200 | // To store various incoming special packets | ||
201 | // | ||
202 | debugStat channelStatus; | ||
203 | cntStat channelRcount; | ||
204 | cntStat channelTcount; | ||
205 | failStat channelFail; | ||
206 | |||
207 | // To store the last values for line characteristics we sent to the board. | ||
208 | // | ||
209 | int speed; | ||
210 | |||
211 | int flush_flags; | ||
212 | |||
213 | void (*trace)(unsigned short,unsigned char,unsigned char,unsigned long,...); | ||
214 | |||
215 | /* | ||
216 | * Kernel counters for the 4 input interrupts | ||
217 | */ | ||
218 | struct async_icount icount; | ||
219 | |||
220 | /* | ||
221 | * Task queues for processing input packets from the board. | ||
222 | */ | ||
223 | struct work_struct tqueue_input; | ||
224 | struct work_struct tqueue_status; | ||
225 | struct work_struct tqueue_hangup; | ||
226 | |||
227 | rwlock_t Ibuf_spinlock; | ||
228 | rwlock_t Obuf_spinlock; | ||
229 | rwlock_t Cbuf_spinlock; | ||
230 | rwlock_t Pbuf_spinlock; | ||
231 | |||
232 | } i2ChanStr, *i2ChanStrPtr; | ||
233 | |||
234 | //--------------------------------------------------- | ||
235 | // Manifests and bit-maps for elements in i2ChanStr | ||
236 | //--------------------------------------------------- | ||
237 | // | ||
238 | // flush flags | ||
239 | // | ||
240 | #define STARTFL_FLAG 1 | ||
241 | #define STOPFL_FLAG 2 | ||
242 | |||
243 | // validity | ||
244 | // | ||
245 | #define CHANNEL_MAGIC_BITS 0xff00 | ||
246 | #define CHANNEL_MAGIC 0x5300 // (validity & CHANNEL_MAGIC_BITS) == | ||
247 | // CHANNEL_MAGIC --> structure good | ||
248 | |||
249 | #define CHANNEL_SUPPORT 0x0001 // Indicates channel is supported, exists, | ||
250 | // and passed P.O.S.T. | ||
251 | |||
252 | // channelNeeds | ||
253 | // | ||
254 | #define NEED_FLOW 1 // Indicates flow control has been queued | ||
255 | #define NEED_INLINE 2 // Indicates inline commands or data queued | ||
256 | #define NEED_BYPASS 4 // Indicates bypass commands queued | ||
257 | #define NEED_CREDIT 8 // Indicates would be sending except has not sufficient | ||
258 | // credit. The data is still in the channel structure, | ||
259 | // but the channel is not enqueued in the board | ||
260 | // structure again until there is a credit received from | ||
261 | // the board. | ||
262 | |||
263 | // dataSetIn (Also the bits for i2GetStatus return value) | ||
264 | // | ||
265 | #define I2_DCD 1 | ||
266 | #define I2_CTS 2 | ||
267 | #define I2_DSR 4 | ||
268 | #define I2_RI 8 | ||
269 | |||
270 | // dataSetOut (Also the bits for i2GetStatus return value) | ||
271 | // | ||
272 | #define I2_DTR 1 | ||
273 | #define I2_RTS 2 | ||
274 | |||
275 | // i2GetStatus() can optionally clear these bits | ||
276 | // | ||
277 | #define I2_BRK 0x10 // A break was detected | ||
278 | #define I2_PAR 0x20 // A parity error was received | ||
279 | #define I2_FRA 0x40 // A framing error was received | ||
280 | #define I2_OVR 0x80 // An overrun error was received | ||
281 | |||
282 | // i2GetStatus() automatically clears these bits */ | ||
283 | // | ||
284 | #define I2_DDCD 0x100 // DCD changed from its former value | ||
285 | #define I2_DCTS 0x200 // CTS changed from its former value | ||
286 | #define I2_DDSR 0x400 // DSR changed from its former value | ||
287 | #define I2_DRI 0x800 // RI changed from its former value | ||
288 | |||
289 | // hotKeyIn | ||
290 | // | ||
291 | #define HOT_CLEAR 0x1322 // Indicates that no hot-key has been detected | ||
292 | |||
293 | // channelOptions | ||
294 | // | ||
295 | #define CO_NBLOCK_WRITE 1 // Writes don't block waiting for buffer. (Default | ||
296 | // is, they do wait.) | ||
297 | |||
298 | // fcmodes | ||
299 | // | ||
300 | #define I2_OUTFLOW_CTS 0x0001 | ||
301 | #define I2_INFLOW_RTS 0x0002 | ||
302 | #define I2_INFLOW_DSR 0x0004 | ||
303 | #define I2_INFLOW_DTR 0x0008 | ||
304 | #define I2_OUTFLOW_DSR 0x0010 | ||
305 | #define I2_OUTFLOW_DTR 0x0020 | ||
306 | #define I2_OUTFLOW_XON 0x0040 | ||
307 | #define I2_OUTFLOW_XANY 0x0080 | ||
308 | #define I2_INFLOW_XON 0x0100 | ||
309 | |||
310 | #define I2_CRTSCTS (I2_OUTFLOW_CTS|I2_INFLOW_RTS) | ||
311 | #define I2_IXANY_MODE (I2_OUTFLOW_XON|I2_OUTFLOW_XANY) | ||
312 | |||
313 | //------------------------------------------- | ||
314 | // Macros used from user level like functions | ||
315 | //------------------------------------------- | ||
316 | |||
317 | // Macros to set and clear channel options | ||
318 | // | ||
319 | #define i2SetOption(pCh, option) pCh->channelOptions |= option | ||
320 | #define i2ClrOption(pCh, option) pCh->channelOptions &= ~option | ||
321 | |||
322 | // Macro to set fatal-error trap | ||
323 | // | ||
324 | #define i2SetFatalTrap(pB, routine) pB->i2eFatalTrap = routine | ||
325 | |||
326 | //-------------------------------------------- | ||
327 | // Declarations and prototypes for i2lib.c | ||
328 | //-------------------------------------------- | ||
329 | // | ||
330 | static int i2InitChannels(i2eBordStrPtr, int, i2ChanStrPtr); | ||
331 | static int i2QueueCommands(int, i2ChanStrPtr, int, int, cmdSyntaxPtr,...); | ||
332 | static int i2GetStatus(i2ChanStrPtr, int); | ||
333 | static int i2Input(i2ChanStrPtr); | ||
334 | static int i2InputFlush(i2ChanStrPtr); | ||
335 | static int i2Output(i2ChanStrPtr, const char *, int, int); | ||
336 | static int i2OutputFree(i2ChanStrPtr); | ||
337 | static int i2ServiceBoard(i2eBordStrPtr); | ||
338 | static void i2DrainOutput(i2ChanStrPtr, int); | ||
339 | |||
340 | #ifdef IP2DEBUG_TRACE | ||
341 | void ip2trace(unsigned short,unsigned char,unsigned char,unsigned long,...); | ||
342 | #else | ||
343 | #define ip2trace(a,b,c,d...) do {} while (0) | ||
344 | #endif | ||
345 | |||
346 | // Argument to i2QueueCommands | ||
347 | // | ||
348 | #define C_IN_LINE 1 | ||
349 | #define C_BYPASS 0 | ||
350 | |||
351 | #endif // I2LIB_H | ||
diff --git a/drivers/char/ip2/i2os.h b/drivers/char/ip2/i2os.h new file mode 100644 index 000000000000..eff9b542d699 --- /dev/null +++ b/drivers/char/ip2/i2os.h | |||
@@ -0,0 +1,127 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1999 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Defines, definitions and includes which are heavily dependent | ||
12 | * on O/S, host, compiler, etc. This file is tailored for: | ||
13 | * Linux v2.0.0 and later | ||
14 | * Gnu gcc c2.7.2 | ||
15 | * 80x86 architecture | ||
16 | * | ||
17 | *******************************************************************************/ | ||
18 | |||
19 | #ifndef I2OS_H /* To prevent multiple includes */ | ||
20 | #define I2OS_H 1 | ||
21 | |||
22 | //------------------------------------------------- | ||
23 | // Required Includes | ||
24 | //------------------------------------------------- | ||
25 | |||
26 | #include "ip2types.h" | ||
27 | #include <asm/io.h> /* For inb, etc */ | ||
28 | |||
29 | //------------------------------------ | ||
30 | // Defines for I/O instructions: | ||
31 | //------------------------------------ | ||
32 | |||
33 | #define INB(port) inb(port) | ||
34 | #define OUTB(port,value) outb((value),(port)) | ||
35 | #define INW(port) inw(port) | ||
36 | #define OUTW(port,value) outw((value),(port)) | ||
37 | #define OUTSW(port,addr,count) outsw((port),(addr),(((count)+1)/2)) | ||
38 | #define OUTSB(port,addr,count) outsb((port),(addr),(((count)+1))&-2) | ||
39 | #define INSW(port,addr,count) insw((port),(addr),(((count)+1)/2)) | ||
40 | #define INSB(port,addr,count) insb((port),(addr),(((count)+1))&-2) | ||
41 | |||
42 | //-------------------------------------------- | ||
43 | // Interrupt control | ||
44 | //-------------------------------------------- | ||
45 | |||
46 | #define LOCK_INIT(a) rwlock_init(a) | ||
47 | |||
48 | #define SAVE_AND_DISABLE_INTS(a,b) { \ | ||
49 | /* printk("get_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
50 | spin_lock_irqsave(a,b); \ | ||
51 | } | ||
52 | |||
53 | #define RESTORE_INTS(a,b) { \ | ||
54 | /* printk("rel_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
55 | spin_unlock_irqrestore(a,b); \ | ||
56 | } | ||
57 | |||
58 | #define READ_LOCK_IRQSAVE(a,b) { \ | ||
59 | /* printk("get_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
60 | read_lock_irqsave(a,b); \ | ||
61 | } | ||
62 | |||
63 | #define READ_UNLOCK_IRQRESTORE(a,b) { \ | ||
64 | /* printk("rel_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
65 | read_unlock_irqrestore(a,b); \ | ||
66 | } | ||
67 | |||
68 | #define WRITE_LOCK_IRQSAVE(a,b) { \ | ||
69 | /* printk("get_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
70 | write_lock_irqsave(a,b); \ | ||
71 | } | ||
72 | |||
73 | #define WRITE_UNLOCK_IRQRESTORE(a,b) { \ | ||
74 | /* printk("rel_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \ | ||
75 | write_unlock_irqrestore(a,b); \ | ||
76 | } | ||
77 | |||
78 | |||
79 | //------------------------------------------------------------------------------ | ||
80 | // Hardware-delay loop | ||
81 | // | ||
82 | // Probably used in only one place (see i2ellis.c) but this helps keep things | ||
83 | // together. Note we have unwound the IN instructions. On machines with a | ||
84 | // reasonable cache, the eight instructions (1 byte each) should fit in cache | ||
85 | // nicely, and on un-cached machines, the code-fetch would tend not to dominate. | ||
86 | // Note that cx is shifted so that "count" still reflects the total number of | ||
87 | // iterations assuming no unwinding. | ||
88 | //------------------------------------------------------------------------------ | ||
89 | |||
90 | //#define DELAY1MS(port,count,label) | ||
91 | |||
92 | //------------------------------------------------------------------------------ | ||
93 | // Macros to switch to a new stack, saving stack pointers, and to restore the | ||
94 | // old stack (Used, for example, in i2lib.c) "heap" is the address of some | ||
95 | // buffer which will become the new stack (working down from highest address). | ||
96 | // The two words at the two lowest addresses in this stack are for storing the | ||
97 | // SS and SP. | ||
98 | //------------------------------------------------------------------------------ | ||
99 | |||
100 | //#define TO_NEW_STACK(heap,size) | ||
101 | //#define TO_OLD_STACK(heap) | ||
102 | |||
103 | //------------------------------------------------------------------------------ | ||
104 | // Macros to save the original IRQ vectors and masks, and to patch in new ones. | ||
105 | //------------------------------------------------------------------------------ | ||
106 | |||
107 | //#define SAVE_IRQ_MASKS(dest) | ||
108 | //#define WRITE_IRQ_MASKS(src) | ||
109 | //#define SAVE_IRQ_VECTOR(value,dest) | ||
110 | //#define WRITE_IRQ_VECTOR(value,src) | ||
111 | |||
112 | //------------------------------------------------------------------------------ | ||
113 | // Macro to copy data from one far pointer to another. | ||
114 | //------------------------------------------------------------------------------ | ||
115 | |||
116 | #define I2_MOVE_DATA(fpSource,fpDest,count) memmove(fpDest,fpSource,count); | ||
117 | |||
118 | //------------------------------------------------------------------------------ | ||
119 | // Macros to issue eoi's to host interrupt control (IBM AT 8259-style). | ||
120 | //------------------------------------------------------------------------------ | ||
121 | |||
122 | //#define MASTER_EOI | ||
123 | //#define SLAVE_EOI | ||
124 | |||
125 | #endif /* I2OS_H */ | ||
126 | |||
127 | |||
diff --git a/drivers/char/ip2/i2pack.h b/drivers/char/ip2/i2pack.h new file mode 100644 index 000000000000..e9b87a78622c --- /dev/null +++ b/drivers/char/ip2/i2pack.h | |||
@@ -0,0 +1,364 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Definitions of the packets used to transfer data and commands | ||
12 | * Host <--> Board. Information provided here is only applicable | ||
13 | * when the standard loadware is active. | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | #ifndef I2PACK_H | ||
17 | #define I2PACK_H 1 | ||
18 | |||
19 | //----------------------------------------------- | ||
20 | // Revision History: | ||
21 | // | ||
22 | // 10 October 1991 MAG First draft | ||
23 | // 24 February 1992 MAG Additions for 1.4.x loadware | ||
24 | // 11 March 1992 MAG New status packets | ||
25 | // | ||
26 | //----------------------------------------------- | ||
27 | |||
28 | //------------------------------------------------------------------------------ | ||
29 | // Packet Formats: | ||
30 | // | ||
31 | // Information passes between the host and board through the FIFO in packets. | ||
32 | // These have headers which indicate the type of packet. Because the fifo data | ||
33 | // path may be 16-bits wide, the protocol is constrained such that each packet | ||
34 | // is always padded to an even byte count. (The lower-level interface routines | ||
35 | // -- i2ellis.c -- are designed to do this). | ||
36 | // | ||
37 | // The sender (be it host or board) must place some number of complete packets | ||
38 | // in the fifo, then place a message in the mailbox that packets are available. | ||
39 | // Placing such a message interrupts the "receiver" (be it board or host), who | ||
40 | // reads the mailbox message and determines that there are incoming packets | ||
41 | // ready. Since there are no partial packets, and the length of a packet is | ||
42 | // given in the header, the remainder of the packet can be read without checking | ||
43 | // for FIFO empty condition. The process is repeated, packet by packet, until | ||
44 | // the incoming FIFO is empty. Then the receiver uses the outbound mailbox to | ||
45 | // signal the board that it has read the data. Only then can the sender place | ||
46 | // additional data in the fifo. | ||
47 | //------------------------------------------------------------------------------ | ||
48 | // | ||
49 | //------------------------------------------------ | ||
50 | // Definition of Packet Header Area | ||
51 | //------------------------------------------------ | ||
52 | // | ||
53 | // Caution: these only define header areas. In actual use the data runs off | ||
54 | // beyond the end of these structures. | ||
55 | // | ||
56 | // Since these structures are based on sequences of bytes which go to the board, | ||
57 | // there cannot be ANY padding between the elements. | ||
58 | #pragma pack(1) | ||
59 | |||
60 | //---------------------------- | ||
61 | // DATA PACKETS | ||
62 | //---------------------------- | ||
63 | |||
64 | typedef struct _i2DataHeader | ||
65 | { | ||
66 | unsigned char i2sChannel; /* The channel number: 0-255 */ | ||
67 | |||
68 | // -- Bitfields are allocated LSB first -- | ||
69 | |||
70 | // For incoming data, indicates whether this is an ordinary packet or a | ||
71 | // special one (e.g., hot key hit). | ||
72 | unsigned i2sId : 2 __attribute__ ((__packed__)); | ||
73 | |||
74 | // For tagging data packets. There are flush commands which flush only data | ||
75 | // packets bearing a particular tag. (used in implementing IntelliView and | ||
76 | // IntelliPrint). THE TAG VALUE 0xf is RESERVED and must not be used (it has | ||
77 | // meaning internally to the loadware). | ||
78 | unsigned i2sTag : 4; | ||
79 | |||
80 | // These two bits determine the type of packet sent/received. | ||
81 | unsigned i2sType : 2; | ||
82 | |||
83 | // The count of data to follow: does not include the possible additional | ||
84 | // padding byte. MAXIMUM COUNT: 4094. The top four bits must be 0. | ||
85 | unsigned short i2sCount; | ||
86 | |||
87 | } i2DataHeader, *i2DataHeaderPtr; | ||
88 | |||
89 | // Structure is immediately followed by the data, proper. | ||
90 | |||
91 | //---------------------------- | ||
92 | // NON-DATA PACKETS | ||
93 | //---------------------------- | ||
94 | |||
95 | typedef struct _i2CmdHeader | ||
96 | { | ||
97 | unsigned char i2sChannel; // The channel number: 0-255 (Except where noted | ||
98 | // - see below | ||
99 | |||
100 | // Number of bytes of commands, status or whatever to follow | ||
101 | unsigned i2sCount : 6; | ||
102 | |||
103 | // These two bits determine the type of packet sent/received. | ||
104 | unsigned i2sType : 2; | ||
105 | |||
106 | } i2CmdHeader, *i2CmdHeaderPtr; | ||
107 | |||
108 | // Structure is immediately followed by the applicable data. | ||
109 | |||
110 | //--------------------------------------- | ||
111 | // Flow Control Packets (Outbound) | ||
112 | //--------------------------------------- | ||
113 | |||
114 | // One type of outbound command packet is so important that the entire structure | ||
115 | // is explicitly defined here. That is the flow-control packet. This is never | ||
116 | // sent by user-level code (as would be the commands to raise/lower DTR, for | ||
117 | // example). These are only sent by the library routines in response to reading | ||
118 | // incoming data into the buffers. | ||
119 | // | ||
120 | // The parameters inside the command block are maintained in place, then the | ||
121 | // block is sent at the appropriate time. | ||
122 | |||
123 | typedef struct _flowIn | ||
124 | { | ||
125 | i2CmdHeader hd; // Channel #, count, type (see above) | ||
126 | unsigned char fcmd; // The flow control command (37) | ||
127 | unsigned short asof; // As of byte number "asof" (LSB first!) I have room | ||
128 | // for "room" bytes | ||
129 | unsigned short room; | ||
130 | } flowIn, *flowInPtr; | ||
131 | |||
132 | //---------------------------------------- | ||
133 | // (Incoming) Status Packets | ||
134 | //---------------------------------------- | ||
135 | |||
136 | // Incoming packets which are non-data packets are status packets. In this case, | ||
137 | // the channel number in the header is unimportant. What follows are one or more | ||
138 | // sub-packets, the first word of which consists of the channel (first or low | ||
139 | // byte) and the status indicator (second or high byte), followed by possibly | ||
140 | // more data. | ||
141 | |||
142 | #define STAT_CTS_UP 0 /* CTS raised (no other bytes) */ | ||
143 | #define STAT_CTS_DN 1 /* CTS dropped (no other bytes) */ | ||
144 | #define STAT_DCD_UP 2 /* DCD raised (no other bytes) */ | ||
145 | #define STAT_DCD_DN 3 /* DCD dropped (no other bytes) */ | ||
146 | #define STAT_DSR_UP 4 /* DSR raised (no other bytes) */ | ||
147 | #define STAT_DSR_DN 5 /* DSR dropped (no other bytes) */ | ||
148 | #define STAT_RI_UP 6 /* RI raised (no other bytes) */ | ||
149 | #define STAT_RI_DN 7 /* RI dropped (no other bytes) */ | ||
150 | #define STAT_BRK_DET 8 /* BRK detect (no other bytes) */ | ||
151 | #define STAT_FLOW 9 /* Flow control(-- more: see below */ | ||
152 | #define STAT_BMARK 10 /* Bookmark (no other bytes) | ||
153 | * Bookmark is sent as a response to | ||
154 | * a command 60: request for bookmark | ||
155 | */ | ||
156 | #define STAT_STATUS 11 /* Special packet: see below */ | ||
157 | #define STAT_TXCNT 12 /* Special packet: see below */ | ||
158 | #define STAT_RXCNT 13 /* Special packet: see below */ | ||
159 | #define STAT_BOXIDS 14 /* Special packet: see below */ | ||
160 | #define STAT_HWFAIL 15 /* Special packet: see below */ | ||
161 | |||
162 | #define STAT_MOD_ERROR 0xc0 | ||
163 | #define STAT_MODEM 0xc0/* If status & STAT_MOD_ERROR: | ||
164 | * == STAT_MODEM, then this is a modem | ||
165 | * status packet, given in response to a | ||
166 | * CMD_DSS_NOW command. | ||
167 | * The low nibble has each data signal: | ||
168 | */ | ||
169 | #define STAT_MOD_DCD 0x8 | ||
170 | #define STAT_MOD_RI 0x4 | ||
171 | #define STAT_MOD_DSR 0x2 | ||
172 | #define STAT_MOD_CTS 0x1 | ||
173 | |||
174 | #define STAT_ERROR 0x80/* If status & STAT_MOD_ERROR | ||
175 | * == STAT_ERROR, then | ||
176 | * sort of error on the channel. | ||
177 | * The remaining seven bits indicate | ||
178 | * what sort of error it is. | ||
179 | */ | ||
180 | /* The low three bits indicate parity, framing, or overrun errors */ | ||
181 | |||
182 | #define STAT_E_PARITY 4 /* Parity error */ | ||
183 | #define STAT_E_FRAMING 2 /* Framing error */ | ||
184 | #define STAT_E_OVERRUN 1 /* (uxart) overrun error */ | ||
185 | |||
186 | //--------------------------------------- | ||
187 | // STAT_FLOW packets | ||
188 | //--------------------------------------- | ||
189 | |||
190 | typedef struct _flowStat | ||
191 | { | ||
192 | unsigned short asof; | ||
193 | unsigned short room; | ||
194 | }flowStat, *flowStatPtr; | ||
195 | |||
196 | // flowStat packets are received from the board to regulate the flow of outgoing | ||
197 | // data. A local copy of this structure is also kept to track the amount of | ||
198 | // credits used and credits remaining. "room" is the amount of space in the | ||
199 | // board's buffers, "as of" having received a certain byte number. When sending | ||
200 | // data to the fifo, you must calculate how much buffer space your packet will | ||
201 | // use. Add this to the current "asof" and subtract it from the current "room". | ||
202 | // | ||
203 | // The calculation for the board's buffer is given by CREDIT_USAGE, where size | ||
204 | // is the un-rounded count of either data characters or command characters. | ||
205 | // (Which is to say, the count rounded up, plus two). | ||
206 | |||
207 | #define CREDIT_USAGE(size) (((size) + 3) & ~1) | ||
208 | |||
209 | //--------------------------------------- | ||
210 | // STAT_STATUS packets | ||
211 | //--------------------------------------- | ||
212 | |||
213 | typedef struct _debugStat | ||
214 | { | ||
215 | unsigned char d_ccsr; | ||
216 | unsigned char d_txinh; | ||
217 | unsigned char d_stat1; | ||
218 | unsigned char d_stat2; | ||
219 | } debugStat, *debugStatPtr; | ||
220 | |||
221 | // debugStat packets are sent to the host in response to a CMD_GET_STATUS | ||
222 | // command. Each byte is bit-mapped as described below: | ||
223 | |||
224 | #define D_CCSR_XON 2 /* Has received XON, ready to transmit */ | ||
225 | #define D_CCSR_XOFF 4 /* Has received XOFF, not transmitting */ | ||
226 | #define D_CCSR_TXENAB 8 /* Transmitter is enabled */ | ||
227 | #define D_CCSR_RXENAB 0x80 /* Receiver is enabled */ | ||
228 | |||
229 | #define D_TXINH_BREAK 1 /* We are sending a break */ | ||
230 | #define D_TXINH_EMPTY 2 /* No data to send */ | ||
231 | #define D_TXINH_SUSP 4 /* Output suspended via command 57 */ | ||
232 | #define D_TXINH_CMD 8 /* We are processing an in-line command */ | ||
233 | #define D_TXINH_LCD 0x10 /* LCD diagnostics are running */ | ||
234 | #define D_TXINH_PAUSE 0x20 /* We are processing a PAUSE command */ | ||
235 | #define D_TXINH_DCD 0x40 /* DCD is low, preventing transmission */ | ||
236 | #define D_TXINH_DSR 0x80 /* DSR is low, preventing transmission */ | ||
237 | |||
238 | #define D_STAT1_TXEN 1 /* Transmit INTERRUPTS enabled */ | ||
239 | #define D_STAT1_RXEN 2 /* Receiver INTERRUPTS enabled */ | ||
240 | #define D_STAT1_MDEN 4 /* Modem (data set sigs) interrupts enabled */ | ||
241 | #define D_STAT1_RLM 8 /* Remote loopback mode selected */ | ||
242 | #define D_STAT1_LLM 0x10 /* Local internal loopback mode selected */ | ||
243 | #define D_STAT1_CTS 0x20 /* CTS is low, preventing transmission */ | ||
244 | #define D_STAT1_DTR 0x40 /* DTR is low, to stop remote transmission */ | ||
245 | #define D_STAT1_RTS 0x80 /* RTS is low, to stop remote transmission */ | ||
246 | |||
247 | #define D_STAT2_TXMT 1 /* Transmit buffers are all empty */ | ||
248 | #define D_STAT2_RXMT 2 /* Receive buffers are all empty */ | ||
249 | #define D_STAT2_RXINH 4 /* Loadware has tried to inhibit remote | ||
250 | * transmission: dropped DTR, sent XOFF, | ||
251 | * whatever... | ||
252 | */ | ||
253 | #define D_STAT2_RXFLO 8 /* Loadware can send no more data to host | ||
254 | * until it receives a flow-control packet | ||
255 | */ | ||
256 | //----------------------------------------- | ||
257 | // STAT_TXCNT and STAT_RXCNT packets | ||
258 | //---------------------------------------- | ||
259 | |||
260 | typedef struct _cntStat | ||
261 | { | ||
262 | unsigned short cs_time; // (Assumes host is little-endian!) | ||
263 | unsigned short cs_count; | ||
264 | } cntStat, *cntStatPtr; | ||
265 | |||
266 | // These packets are sent in response to a CMD_GET_RXCNT or a CMD_GET_TXCNT | ||
267 | // bypass command. cs_time is a running 1 Millisecond counter which acts as a | ||
268 | // time stamp. cs_count is a running counter of data sent or received from the | ||
269 | // uxarts. (Not including data added by the chip itself, as with CRLF | ||
270 | // processing). | ||
271 | //------------------------------------------ | ||
272 | // STAT_HWFAIL packets | ||
273 | //------------------------------------------ | ||
274 | |||
275 | typedef struct _failStat | ||
276 | { | ||
277 | unsigned char fs_written; | ||
278 | unsigned char fs_read; | ||
279 | unsigned short fs_address; | ||
280 | } failStat, *failStatPtr; | ||
281 | |||
282 | // This packet is sent whenever the on-board diagnostic process detects an | ||
283 | // error. At startup, this process is dormant. The host can wake it up by | ||
284 | // issuing the bypass command CMD_HW_TEST. The process runs at low priority and | ||
285 | // performs continuous hardware verification; writing data to certain on-board | ||
286 | // registers, reading it back, and comparing. If it detects an error, this | ||
287 | // packet is sent to the host, and the process goes dormant again until the host | ||
288 | // sends another CMD_HW_TEST. It then continues with the next register to be | ||
289 | // tested. | ||
290 | |||
291 | //------------------------------------------------------------------------------ | ||
292 | // Macros to deal with the headers more easily! Note that these are defined so | ||
293 | // they may be used as "left" as well as "right" expressions. | ||
294 | //------------------------------------------------------------------------------ | ||
295 | |||
296 | // Given a pointer to the packet, reference the channel number | ||
297 | // | ||
298 | #define CHANNEL_OF(pP) ((i2DataHeaderPtr)(pP))->i2sChannel | ||
299 | |||
300 | // Given a pointer to the packet, reference the Packet type | ||
301 | // | ||
302 | #define PTYPE_OF(pP) ((i2DataHeaderPtr)(pP))->i2sType | ||
303 | |||
304 | // The possible types of packets | ||
305 | // | ||
306 | #define PTYPE_DATA 0 /* Host <--> Board */ | ||
307 | #define PTYPE_BYPASS 1 /* Host ---> Board */ | ||
308 | #define PTYPE_INLINE 2 /* Host ---> Board */ | ||
309 | #define PTYPE_STATUS 2 /* Host <--- Board */ | ||
310 | |||
311 | // Given a pointer to a Data packet, reference the Tag | ||
312 | // | ||
313 | #define TAG_OF(pP) ((i2DataHeaderPtr)(pP))->i2sTag | ||
314 | |||
315 | // Given a pointer to a Data packet, reference the data i.d. | ||
316 | // | ||
317 | #define ID_OF(pP) ((i2DataHeaderPtr)(pP))->i2sId | ||
318 | |||
319 | // The possible types of ID's | ||
320 | // | ||
321 | #define ID_ORDINARY_DATA 0 | ||
322 | #define ID_HOT_KEY 1 | ||
323 | |||
324 | // Given a pointer to a Data packet, reference the count | ||
325 | // | ||
326 | #define DATA_COUNT_OF(pP) ((i2DataHeaderPtr)(pP))->i2sCount | ||
327 | |||
328 | // Given a pointer to a Data packet, reference the beginning of data | ||
329 | // | ||
330 | #define DATA_OF(pP) &((unsigned char *)(pP))[4] // 4 = size of header | ||
331 | |||
332 | // Given a pointer to a Non-Data packet, reference the count | ||
333 | // | ||
334 | #define CMD_COUNT_OF(pP) ((i2CmdHeaderPtr)(pP))->i2sCount | ||
335 | |||
336 | #define MAX_CMD_PACK_SIZE 62 // Maximum size of such a count | ||
337 | |||
338 | // Given a pointer to a Non-Data packet, reference the beginning of data | ||
339 | // | ||
340 | #define CMD_OF(pP) &((unsigned char *)(pP))[2] // 2 = size of header | ||
341 | |||
342 | //-------------------------------- | ||
343 | // MailBox Bits: | ||
344 | //-------------------------------- | ||
345 | |||
346 | //-------------------------- | ||
347 | // Outgoing (host to board) | ||
348 | //-------------------------- | ||
349 | // | ||
350 | #define MB_OUT_STUFFED 0x80 // Host has placed output in fifo | ||
351 | #define MB_IN_STRIPPED 0x40 // Host has read in all input from fifo | ||
352 | |||
353 | //-------------------------- | ||
354 | // Incoming (board to host) | ||
355 | //-------------------------- | ||
356 | // | ||
357 | #define MB_IN_STUFFED 0x80 // Board has placed input in fifo | ||
358 | #define MB_OUT_STRIPPED 0x40 // Board has read all output from fifo | ||
359 | #define MB_FATAL_ERROR 0x20 // Board has encountered a fatal error | ||
360 | |||
361 | #pragma pack(4) // Reset padding to command-line default | ||
362 | |||
363 | #endif // I2PACK_H | ||
364 | |||
diff --git a/drivers/char/ip2/ip2.h b/drivers/char/ip2/ip2.h new file mode 100644 index 000000000000..936ccc533949 --- /dev/null +++ b/drivers/char/ip2/ip2.h | |||
@@ -0,0 +1,107 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Driver constants for configuration and tuning | ||
12 | * | ||
13 | * NOTES: | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | #ifndef IP2_H | ||
17 | #define IP2_H | ||
18 | |||
19 | #include "ip2types.h" | ||
20 | #include "i2cmd.h" | ||
21 | |||
22 | /*************/ | ||
23 | /* Constants */ | ||
24 | /*************/ | ||
25 | |||
26 | /* Device major numbers - since version 2.0.26. */ | ||
27 | #define IP2_TTY_MAJOR 71 | ||
28 | #define IP2_CALLOUT_MAJOR 72 | ||
29 | #define IP2_IPL_MAJOR 73 | ||
30 | |||
31 | /* Board configuration array. | ||
32 | * This array defines the hardware irq and address for up to IP2_MAX_BOARDS | ||
33 | * (4 supported per ip2_types.h) ISA board addresses and irqs MUST be specified, | ||
34 | * PCI and EISA boards are probed for and automagicly configed | ||
35 | * iff the addresses are set to 1 and 2 respectivily. | ||
36 | * 0x0100 - 0x03f0 == ISA | ||
37 | * 1 == PCI | ||
38 | * 2 == EISA | ||
39 | * 0 == (skip this board) | ||
40 | * This array defines the hardware addresses for them. Special | ||
41 | * addresses are EISA and PCI which go sniffing for boards. | ||
42 | |||
43 | * In a multiboard system the position in the array determines which port | ||
44 | * devices are assigned to each board: | ||
45 | * board 0 is assigned ttyF0.. to ttyF63, | ||
46 | * board 1 is assigned ttyF64 to ttyF127, | ||
47 | * board 2 is assigned ttyF128 to ttyF191, | ||
48 | * board 3 is assigned ttyF192 to ttyF255. | ||
49 | * | ||
50 | * In PCI and EISA bus systems each range is mapped to card in | ||
51 | * monotonically increasing slot number order, ISA position is as specified | ||
52 | * here. | ||
53 | |||
54 | * If the irqs are ALL set to 0,0,0,0 all boards operate in | ||
55 | * polled mode. For interrupt operation ISA boards require that the IRQ be | ||
56 | * specified, while PCI and EISA boards any nonzero entry | ||
57 | * will enable interrupts using the BIOS configured irq for the board. | ||
58 | * An invalid irq entry will default to polled mode for that card and print | ||
59 | * console warning. | ||
60 | |||
61 | * When the driver is loaded as a module these setting can be overridden on the | ||
62 | * modprobe command line or on an option line in /etc/modprobe.conf. | ||
63 | * If the driver is built-in the configuration must be | ||
64 | * set here for ISA cards and address set to 1 and 2 for PCI and EISA. | ||
65 | * | ||
66 | * Here is an example that shows most if not all possibe combinations: | ||
67 | |||
68 | *static ip2config_t ip2config = | ||
69 | *{ | ||
70 | * {11,1,0,0}, // irqs | ||
71 | * { // Addresses | ||
72 | * 0x0308, // Board 0, ttyF0 - ttyF63// ISA card at io=0x308, irq=11 | ||
73 | * 0x0001, // Board 1, ttyF64 - ttyF127//PCI card configured by BIOS | ||
74 | * 0x0000, // Board 2, ttyF128 - ttyF191// Slot skipped | ||
75 | * 0x0002 // Board 3, ttyF192 - ttyF255//EISA card configured by BIOS | ||
76 | * // but polled not irq driven | ||
77 | * } | ||
78 | *}; | ||
79 | */ | ||
80 | |||
81 | /* this structure is zeroed out because the suggested method is to configure | ||
82 | * the driver as a module, set up the parameters with an options line in | ||
83 | * /etc/modprobe.conf and load with modprobe or kmod, the kernel | ||
84 | * module loader | ||
85 | */ | ||
86 | |||
87 | /* This structure is NOW always initialized when the driver is initialized. | ||
88 | * Compiled in defaults MUST be added to the io and irq arrays in | ||
89 | * ip2.c. Those values are configurable from insmod parameters in the | ||
90 | * case of modules or from command line parameters (ip2=io,irq) when | ||
91 | * compiled in. | ||
92 | */ | ||
93 | |||
94 | static ip2config_t ip2config = | ||
95 | { | ||
96 | {0,0,0,0}, // irqs | ||
97 | { // Addresses | ||
98 | /* Do NOT set compile time defaults HERE! Use the arrays in | ||
99 | ip2.c! These WILL be overwritten! =mhw= */ | ||
100 | 0x0000, // Board 0, ttyF0 - ttyF63 | ||
101 | 0x0000, // Board 1, ttyF64 - ttyF127 | ||
102 | 0x0000, // Board 2, ttyF128 - ttyF191 | ||
103 | 0x0000 // Board 3, ttyF192 - ttyF255 | ||
104 | } | ||
105 | }; | ||
106 | |||
107 | #endif | ||
diff --git a/drivers/char/ip2/ip2ioctl.h b/drivers/char/ip2/ip2ioctl.h new file mode 100644 index 000000000000..aa0a9da85e05 --- /dev/null +++ b/drivers/char/ip2/ip2ioctl.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Driver constants for configuration and tuning | ||
12 | * | ||
13 | * NOTES: | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | |||
17 | #ifndef IP2IOCTL_H | ||
18 | #define IP2IOCTL_H | ||
19 | |||
20 | //************* | ||
21 | //* Constants * | ||
22 | //************* | ||
23 | |||
24 | // High baud rates (if not defined elsewhere. | ||
25 | #ifndef B153600 | ||
26 | # define B153600 0010005 | ||
27 | #endif | ||
28 | #ifndef B307200 | ||
29 | # define B307200 0010006 | ||
30 | #endif | ||
31 | #ifndef B921600 | ||
32 | # define B921600 0010007 | ||
33 | #endif | ||
34 | |||
35 | #endif | ||
diff --git a/drivers/char/ip2/ip2trace.h b/drivers/char/ip2/ip2trace.h new file mode 100644 index 000000000000..da20435dc8a6 --- /dev/null +++ b/drivers/char/ip2/ip2trace.h | |||
@@ -0,0 +1,42 @@ | |||
1 | |||
2 | // | ||
3 | union ip2breadcrumb | ||
4 | { | ||
5 | struct { | ||
6 | unsigned char port, cat, codes, label; | ||
7 | } __attribute__ ((packed)) hdr; | ||
8 | unsigned long value; | ||
9 | }; | ||
10 | |||
11 | #define ITRC_NO_PORT 0xFF | ||
12 | #define CHANN (pCh->port_index) | ||
13 | |||
14 | #define ITRC_ERROR '!' | ||
15 | #define ITRC_INIT 'A' | ||
16 | #define ITRC_OPEN 'B' | ||
17 | #define ITRC_CLOSE 'C' | ||
18 | #define ITRC_DRAIN 'D' | ||
19 | #define ITRC_IOCTL 'E' | ||
20 | #define ITRC_FLUSH 'F' | ||
21 | #define ITRC_STATUS 'G' | ||
22 | #define ITRC_HANGUP 'H' | ||
23 | #define ITRC_INTR 'I' | ||
24 | #define ITRC_SFLOW 'J' | ||
25 | #define ITRC_SBCMD 'K' | ||
26 | #define ITRC_SICMD 'L' | ||
27 | #define ITRC_MODEM 'M' | ||
28 | #define ITRC_INPUT 'N' | ||
29 | #define ITRC_OUTPUT 'O' | ||
30 | #define ITRC_PUTC 'P' | ||
31 | #define ITRC_QUEUE 'Q' | ||
32 | #define ITRC_STFLW 'R' | ||
33 | #define ITRC_SFIFO 'S' | ||
34 | #define ITRC_VERIFY 'V' | ||
35 | #define ITRC_WRITE 'W' | ||
36 | |||
37 | #define ITRC_ENTER 0x00 | ||
38 | #define ITRC_RETURN 0xFF | ||
39 | |||
40 | #define ITRC_QUEUE_ROOM 2 | ||
41 | #define ITRC_QUEUE_CMD 6 | ||
42 | |||
diff --git a/drivers/char/ip2/ip2types.h b/drivers/char/ip2/ip2types.h new file mode 100644 index 000000000000..9d67b260b2f6 --- /dev/null +++ b/drivers/char/ip2/ip2types.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /******************************************************************************* | ||
2 | * | ||
3 | * (c) 1998 by Computone Corporation | ||
4 | * | ||
5 | ******************************************************************************** | ||
6 | * | ||
7 | * | ||
8 | * PACKAGE: Linux tty Device Driver for IntelliPort II family of multiport | ||
9 | * serial I/O controllers. | ||
10 | * | ||
11 | * DESCRIPTION: Driver constants and type definitions. | ||
12 | * | ||
13 | * NOTES: | ||
14 | * | ||
15 | *******************************************************************************/ | ||
16 | #ifndef IP2TYPES_H | ||
17 | #define IP2TYPES_H | ||
18 | |||
19 | //************* | ||
20 | //* Constants * | ||
21 | //************* | ||
22 | |||
23 | // Define some limits for this driver. Ports per board is a hardware limitation | ||
24 | // that will not change. Current hardware limits this to 64 ports per board. | ||
25 | // Boards per driver is a self-imposed limit. | ||
26 | // | ||
27 | #define IP2_MAX_BOARDS 4 | ||
28 | #define IP2_PORTS_PER_BOARD ABS_MOST_PORTS | ||
29 | #define IP2_MAX_PORTS (IP2_MAX_BOARDS*IP2_PORTS_PER_BOARD) | ||
30 | |||
31 | #define ISA 0 | ||
32 | #define PCI 1 | ||
33 | #define EISA 2 | ||
34 | |||
35 | //******************** | ||
36 | //* Type Definitions * | ||
37 | //******************** | ||
38 | |||
39 | typedef struct tty_struct * PTTY; | ||
40 | typedef wait_queue_head_t PWAITQ; | ||
41 | |||
42 | typedef unsigned char UCHAR; | ||
43 | typedef unsigned int UINT; | ||
44 | typedef unsigned short USHORT; | ||
45 | typedef unsigned long ULONG; | ||
46 | |||
47 | typedef struct | ||
48 | { | ||
49 | short irq[IP2_MAX_BOARDS]; | ||
50 | unsigned short addr[IP2_MAX_BOARDS]; | ||
51 | int type[IP2_MAX_BOARDS]; | ||
52 | #ifdef CONFIG_PCI | ||
53 | struct pci_dev *pci_dev[IP2_MAX_BOARDS]; | ||
54 | #endif | ||
55 | } ip2config_t; | ||
56 | |||
57 | #endif | ||