Browse Source

Plan 9 from Bell Labs 2005-02-12

David du Colombier 19 years ago
parent
commit
5730bed47c

+ 13 - 19
dist/replica/_plan9.db

@@ -1,15 +1,15 @@
 386 - 20000000775 sys sys 1010957353 0
 386/9load - 775 sys sys 1100269948 208708
-386/9loaddebug - 775 sys sys 1106021711 306647
+386/9loaddebug - 775 sys sys 1108095056 306473
 386/9loadlite - 775 sys sys 1100269949 132260
 386/9loadlitedebug - 775 sys sys 1104122096 195560
-386/9pc - 775 sys sys 1107577216 1834252
+386/9pc - 775 sys sys 1108095061 1833118
 386/9pc.gz - 664 sys sys 1077049336 635727
-386/9pccpu - 775 sys sys 1107490494 1488803
+386/9pccpu - 775 sys sys 1108095065 1487669
 386/9pccpu.gz - 664 sys sys 1077049387 519909
-386/9pcdisk - 775 sys sys 1107577221 2039954
+386/9pcdisk - 775 sys sys 1108095069 2038820
 386/9pcdisk.gz - 664 sys sys 1040006345 703136
-386/9pcf - 775 sys sys 1107577226 2382786
+386/9pcf - 775 sys sys 1108095074 2381652
 386/9pcf.gz - 664 sys sys 1077049490 872650
 386/9pxeload - 775 sys sys 1100269949 208708
 386/_9pcdisk.gz - 664 sys sys 1039764191 695837
@@ -402,7 +402,7 @@
 386/bin/sshnet - 775 sys sys 1104122059 282717
 386/bin/stats - 775 sys sys 1106799180 189982
 386/bin/strings - 775 sys sys 1104122059 62124
-386/bin/strip - 775 sys sys 1104122060 61981
+386/bin/strip - 775 sys sys 1108095056 61981
 386/bin/sum - 775 sys sys 1104122060 39470
 386/bin/swap - 775 sys sys 1104122060 62094
 386/bin/syscall - 775 sys sys 1104122060 73536
@@ -546,7 +546,7 @@
 386/lib/libhttpd.a - 664 sys sys 1105161539 99488
 386/lib/libip.a - 664 sys sys 1105161539 35602
 386/lib/libl.a - 664 sys sys 1105161539 5384
-386/lib/libmach.a - 664 sys sys 1108008338 652906
+386/lib/libmach.a - 664 sys sys 1108095075 652906
 386/lib/libmemdraw.a - 664 sys sys 1105161541 283188
 386/lib/libmemlayer.a - 664 sys sys 1105161541 47360
 386/lib/libmp.a - 664 sys sys 1105161541 79532
@@ -3461,7 +3461,7 @@ sys/include/html.h - 664 sys sys 1091904420 15220
 sys/include/httpd.h - 664 sys sys 1091904418 5771
 sys/include/ip.h - 664 sys sys 1103554773 2989
 sys/include/keyboard.h - 664 sys sys 1079577798 815
-sys/include/libc.h - 664 sys sys 1102093062 19516
+sys/include/libc.h - 664 sys sys 1108157980 19587
 sys/include/libsec.h - 664 sys sys 1084318867 9264
 sys/include/mach.h - 664 sys sys 1089313992 8164
 sys/include/memdraw.h - 664 sys sys 1091904419 5645
@@ -4844,7 +4844,7 @@ sys/man/2/ctime - 664 sys sys 954378853 2547
 sys/man/2/ctype - 664 sys sys 1079535676 2611
 sys/man/2/debugger - 664 sys sys 944959696 8629
 sys/man/2/des - 664 sys sys 1032058673 3517
-sys/man/2/dial - 664 sys sys 1015701029 6523
+sys/man/2/dial - 664 sys sys 1108158522 6594
 sys/man/2/dirread - 664 sys sys 1015091519 1901
 sys/man/2/disk - 664 sys sys 1015091519 3188
 sys/man/2/draw - 664 sys sys 1059484405 19362
@@ -7252,7 +7252,7 @@ sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/lex.c - 664 sys sys 1089299182 23826
 sys/src/cmd/cc/lexbody - 664 sys sys 1098499731 9014
 sys/src/cmd/cc/mac.c - 664 sys sys 944960808 36
-sys/src/cmd/cc/macbody - 664 sys sys 1098463324 11358
+sys/src/cmd/cc/macbody - 664 sys sys 1108151652 11712
 sys/src/cmd/cc/machcap.c - 664 sys sys 1084472048 78
 sys/src/cmd/cc/mkfile - 664 sys sys 1107365240 563
 sys/src/cmd/cc/pickle.c - 664 sys sys 1063855374 4829
@@ -9792,7 +9792,7 @@ sys/src/cmd/nfs.c - 664 sys sys 1050068720 31096
 sys/src/cmd/nm.c - 664 sys sys 1073313392 4912
 sys/src/cmd/nntpfs.c - 664 sys sys 1100524486 18920
 sys/src/cmd/ns.c - 664 sys sys 984717934 3558
-sys/src/cmd/p.c - 664 sys sys 1043516305 1497
+sys/src/cmd/p.c - 664 sys sys 1108151788 1502
 sys/src/cmd/page - 20000000775 sys sys 956344628 0
 sys/src/cmd/page/filter.c - 664 sys sys 1069793856 2166
 sys/src/cmd/page/gfx.c - 664 sys sys 1084470500 6894
@@ -11591,7 +11591,7 @@ sys/src/libc/9sys/dirwstat.c - 664 sys sys 1014927337 246
 sys/src/libc/9sys/fcallfmt.c - 664 sys sys 1033829606 5733
 sys/src/libc/9sys/fork.c - 664 sys sys 950892938 89
 sys/src/libc/9sys/getenv.c - 664 sys sys 985023079 548
-sys/src/libc/9sys/getnetconninfo.c - 664 sys sys 1014927338 2030
+sys/src/libc/9sys/getnetconninfo.c - 664 sys sys 1108157974 2477
 sys/src/libc/9sys/getpid.c - 664 sys sys 944961712 198
 sys/src/libc/9sys/getppid.c - 664 sys sys 944961712 202
 sys/src/libc/9sys/getwd.c - 664 sys sys 971455516 248
@@ -12467,10 +12467,4 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
-386/9loaddebug - 775 sys sys 1108095056 306473
-386/9pc - 775 sys sys 1108095061 1833118
-386/9pccpu - 775 sys sys 1108095065 1487669
-386/9pcdisk - 775 sys sys 1108095069 2038820
-386/9pcf - 775 sys sys 1108095074 2381652
-386/bin/strip - 775 sys sys 1108095056 61981
-386/lib/libmach.a - 664 sys sys 1108095075 652906
+sys/src/cmd/cc/macbody - 664 sys sys 1108182410 11358

+ 5 - 5
dist/replica/plan9.db

@@ -3461,7 +3461,7 @@ sys/include/html.h - 664 sys sys 1091904420 15220
 sys/include/httpd.h - 664 sys sys 1091904418 5771
 sys/include/ip.h - 664 sys sys 1103554773 2989
 sys/include/keyboard.h - 664 sys sys 1079577798 815
-sys/include/libc.h - 664 sys sys 1102093062 19516
+sys/include/libc.h - 664 sys sys 1108157980 19587
 sys/include/libsec.h - 664 sys sys 1084318867 9264
 sys/include/mach.h - 664 sys sys 1089313992 8164
 sys/include/memdraw.h - 664 sys sys 1091904419 5645
@@ -4844,7 +4844,7 @@ sys/man/2/ctime - 664 sys sys 954378853 2547
 sys/man/2/ctype - 664 sys sys 1079535676 2611
 sys/man/2/debugger - 664 sys sys 944959696 8629
 sys/man/2/des - 664 sys sys 1032058673 3517
-sys/man/2/dial - 664 sys sys 1015701029 6523
+sys/man/2/dial - 664 sys sys 1108158522 6594
 sys/man/2/dirread - 664 sys sys 1015091519 1901
 sys/man/2/disk - 664 sys sys 1015091519 3188
 sys/man/2/draw - 664 sys sys 1059484405 19362
@@ -7252,7 +7252,7 @@ sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/lex.c - 664 sys sys 1089299182 23826
 sys/src/cmd/cc/lexbody - 664 sys sys 1098499731 9014
 sys/src/cmd/cc/mac.c - 664 sys sys 944960808 36
-sys/src/cmd/cc/macbody - 664 sys sys 1098463324 11358
+sys/src/cmd/cc/macbody - 664 sys sys 1108182410 11358
 sys/src/cmd/cc/machcap.c - 664 sys sys 1084472048 78
 sys/src/cmd/cc/mkfile - 664 sys sys 1107365240 563
 sys/src/cmd/cc/pickle.c - 664 sys sys 1063855374 4829
@@ -9792,7 +9792,7 @@ sys/src/cmd/nfs.c - 664 sys sys 1050068720 31096
 sys/src/cmd/nm.c - 664 sys sys 1073313392 4912
 sys/src/cmd/nntpfs.c - 664 sys sys 1100524486 18920
 sys/src/cmd/ns.c - 664 sys sys 984717934 3558
-sys/src/cmd/p.c - 664 sys sys 1043516305 1497
+sys/src/cmd/p.c - 664 sys sys 1108151788 1502
 sys/src/cmd/page - 20000000775 sys sys 956344628 0
 sys/src/cmd/page/filter.c - 664 sys sys 1069793856 2166
 sys/src/cmd/page/gfx.c - 664 sys sys 1084470500 6894
@@ -11591,7 +11591,7 @@ sys/src/libc/9sys/dirwstat.c - 664 sys sys 1014927337 246
 sys/src/libc/9sys/fcallfmt.c - 664 sys sys 1033829606 5733
 sys/src/libc/9sys/fork.c - 664 sys sys 950892938 89
 sys/src/libc/9sys/getenv.c - 664 sys sys 985023079 548
-sys/src/libc/9sys/getnetconninfo.c - 664 sys sys 1014927338 2030
+sys/src/libc/9sys/getnetconninfo.c - 664 sys sys 1108157974 2477
 sys/src/libc/9sys/getpid.c - 664 sys sys 944961712 198
 sys/src/libc/9sys/getppid.c - 664 sys sys 944961712 202
 sys/src/libc/9sys/getwd.c - 664 sys sys 971455516 248

+ 6 - 0
dist/replica/plan9.log

@@ -13534,3 +13534,9 @@
 1108096243 4 c 386/9pcf - 775 sys sys 1108095074 2381652
 1108096243 5 c 386/bin/strip - 775 sys sys 1108095056 61981
 1108096243 6 c 386/lib/libmach.a - 664 sys sys 1108095075 652906
+1108152055 0 c sys/src/cmd/cc/macbody - 664 sys sys 1108151652 11712
+1108152055 1 c sys/src/cmd/p.c - 664 sys sys 1108151788 1502
+1108159256 0 c sys/include/libc.h - 664 sys sys 1108157980 19587
+1108159256 1 c sys/man/2/dial - 664 sys sys 1108158522 6594
+1108159256 2 c sys/src/libc/9sys/getnetconninfo.c - 664 sys sys 1108157974 2477
+1108182661 0 c sys/src/cmd/cc/macbody - 664 sys sys 1108182410 11358

+ 2 - 0
sys/include/libc.h

@@ -491,6 +491,8 @@ struct NetConnInfo
 	char	*lserv;		/* local service */
 	char	*rsys;		/* remote system */
 	char	*rserv;		/* remote service */
+	char	*laddr;		/* local address */
+	char *raddr;		/* remote address */
 };
 extern	NetConnInfo*	getnetconninfo(char*, int);
 extern	void		freenetconninfo(NetConnInfo*);

+ 2 - 0
sys/man/2/dial

@@ -195,6 +195,8 @@ network connection.  The structure is:
 	char	*lserv;		/* local service */
 	char	*rsys;		/* remote system */
 	char	*rserv;		/* remote service */
+	char	*laddr;		/* local address */
+	char	*raddr;		/* remote address */
   };
 .EE
 .PP

+ 1 - 1
sys/src/cmd/p.c

@@ -33,7 +33,7 @@ main(int argc, char *argv[])
 			n++;
 			f = open(argv[0], OREAD);
 			if(f < 0){
-				fprint(2, "p: can't open %s\n", argv[0]);
+				fprint(2, "p: can't open %s - %r\n", argv[0]);
 				continue;
 			}
 			printfile(f);

+ 481 - 0
sys/src/games/catback.p

@@ -0,0 +1,481 @@
+#define catback_width 150
+#define catback_height 300
+#define catback_x_hot -1
+#define catback_y_hot -1
+static uchar catback_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xfe, 0x00,
+   0x07, 0xff, 0xc0, 0x00, 0x7f, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xf7, 0xff, 0x80, 0x7f, 0xff, 0xfc, 0x01, 0xff,
+   0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
+   0xff, 0xe7, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xd7, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xea, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x57, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x5f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfa, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xea, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x57,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x57,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf5, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xf5, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xaf, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xf5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xaf, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
+   0xff, 0x80, 0xff, 0xff, 0xff, 0x01, 0xff, 0xd7, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xfc, 0x00, 0x1f, 0xff, 0xf8,
+   0x00, 0x3f, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xef, 0xf8, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x1f, 0xf7, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x07,
+   0xff, 0xe0, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0,
+   0x00, 0x01, 0xff, 0x80, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x01, 0xff, 0x80, 0x00,
+   0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xff, 0xc0, 0x00, 0x01, 0xff, 0x80, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0xff,
+   0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0xff, 0x00, 0x00, 0x01, 0xff, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00,
+   0x00, 0xff, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0xff, 0x00, 0x00, 0x01,
+   0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
+   0x80, 0x00, 0x00, 0xff, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0xff, 0x00,
+   0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x07, 0xff, 0x80, 0x00, 0x00, 0xff, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x01,
+   0xff, 0x80, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0x80, 0x00, 0x03, 0xff,
+   0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0,
+   0x00, 0x01, 0xff, 0x80, 0x00, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00,
+   0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+   0xff, 0xf0, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x0f, 0xff,
+   0xf0, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x1f, 0xff, 0xfc, 0x00, 0x1f, 0xab, 0xf8, 0x00, 0x3f, 0xff, 0xf0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80,
+   0xff, 0x55, 0xff, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0xaa, 0xff, 0xff, 0xff,
+   0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
+   0xff, 0xff, 0xfd, 0x55, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0xaa, 0xff,
+   0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x1f, 0xff, 0xff, 0xff, 0xfd, 0x55, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfe,
+   0xaa, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x00, 0x1f,
+   0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x20,
+   0x00, 0x02, 0xaa, 0x80, 0x00, 0x08, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x30, 0x00, 0x31, 0x55, 0x18, 0x00,
+   0x18, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+   0xf8, 0x18, 0x00, 0x60, 0xaa, 0x0c, 0x00, 0x30, 0x3f, 0xf0, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x0c, 0x00, 0xc0, 0x54,
+   0x06, 0x00, 0xe0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x0f, 0xf8, 0x07, 0xff, 0xc6, 0x00, 0x63, 0xff, 0x80, 0x3f, 0xe0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x03, 0xff,
+   0x0c, 0x00, 0x30, 0xff, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x0f, 0xfc, 0x40, 0x00, 0x08, 0x00, 0x18, 0x00, 0x08,
+   0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc,
+   0x70, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x38, 0x7f, 0xe0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x1f, 0xff, 0xf0, 0x00, 0x07,
+   0xff, 0xe0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x07, 0xfe, 0x07, 0xff, 0xc0, 0x00, 0x01, 0xff, 0x00, 0xff, 0xc0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x07, 0xff, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x01, 0xff,
+   0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
+   0x0f, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x0f, 0xf8, 0x00, 0x0f, 0xf0,
+   0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xff, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x01, 0xff, 0xff,
+   0xff, 0x80, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xfe, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00,
+   0x7f, 0xff, 0xfe, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x3f,
+   0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+   0xfc, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x03, 0xff, 0xc0,
+   0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x1f, 0xff, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00,
+   0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
+   0xf8, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff,
+   0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x70, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0f, 0xff, 0xfc, 0x00,
+   0x7f, 0xf8, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x04, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x10,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1f,
+   0xff, 0xff, 0xff, 0x80, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x0f, 0xc0,
+   0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+   0xe0, 0x00, 0x7f, 0x01, 0xf0, 0xf8, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x3f, 0xff, 0x8f, 0x03, 0x87,
+   0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x30, 0x00, 0x00, 0x00, 0xe9, 0x86, 0x8c, 0x00, 0x00, 0x00, 0x00, 0xc0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x38,
+   0x84, 0xb8, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x18, 0x00, 0xc0, 0xff, 0xfc, 0x00,
+   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
+   0x00, 0x08, 0x00, 0xff, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0xff, 0xff, 0xf8, 0x00, 0xc0, 0x00,
+   0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+   0x00, 0x00, 0x00, 0x08, 0x00, 0xff, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x86,
+   0x81, 0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x08, 0x00, 0x00, 0x1f, 0xfd, 0x83, 0xc0, 0x0f, 0x00, 0x00, 0x08,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xf0,
+   0x0e, 0x01, 0xf0, 0x01, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x18, 0x00, 0x0f, 0x00, 0x3f, 0xff, 0xfe, 0x00, 0x00,
+   0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00,
+   0xf8, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff,
+   0xf0, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xdf, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x01, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x04, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x02, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfc, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x02, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xe0, 0x01,
+   0xff, 0xff, 0xff, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x04, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x01,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x7f, 0xff, 0xf8,
+   0x01, 0x38, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x08, 0x00, 0x3f, 0xff, 0xe0, 0x03, 0x24, 0x00, 0xff, 0xff,
+   0xe0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x3f,
+   0xff, 0xc0, 0x01, 0x04, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x40, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x3f, 0xff, 0x00, 0x01, 0x08, 0x00,
+   0x1f, 0xff, 0xc0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+   0x00, 0x1f, 0xfc, 0x00, 0x01, 0x10, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x40,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1f, 0xf8, 0x42, 0x01,
+   0x20, 0x00, 0x03, 0xff, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x20, 0x00, 0x1f, 0xf0, 0xc6, 0x03, 0xbc, 0x00, 0x81, 0xff, 0x08,
+   0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x1f, 0xe0,
+   0x42, 0x00, 0x00, 0x01, 0x80, 0xff, 0x18, 0x00, 0x20, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x40, 0x01, 0x8f, 0xe0, 0x42, 0x00, 0x00, 0x00, 0x80,
+   0xff, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+   0xef, 0xc0, 0x42, 0x00, 0x00, 0x00, 0x80, 0x7f, 0xe0, 0x00, 0x10, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x3f, 0xc0, 0x42, 0x00, 0x00,
+   0x00, 0x80, 0x3f, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x1f, 0x80, 0xe7, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x06, 0x00,
+   0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x00, 0x00,
+   0x00, 0x00, 0x01, 0xc0, 0x1f, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x80, 0x06, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+   0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x1e,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x07, 0xc1, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+   0x10, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x81, 0x00, 0x18,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x18, 0x3c, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x07, 0x86, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x80, 0x0c, 0x38, 0x47, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3, 0xcc,
+   0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x38, 0xc8,
+   0x80, 0x00, 0x00, 0x00, 0x01, 0x23, 0xf8, 0x20, 0x38, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x80, 0x41, 0xf8, 0x48, 0x80, 0x00, 0x00, 0x00, 0x00,
+   0x23, 0xe0, 0x60, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60,
+   0x78, 0x48, 0x80, 0x00, 0x00, 0x00, 0x00, 0x43, 0xe0, 0xc0, 0x38, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x70, 0x48, 0x80, 0x00, 0x00,
+   0x00, 0x00, 0x81, 0xf3, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xe0, 0x18, 0x70, 0x48, 0x80, 0x00, 0x00, 0x00, 0x01, 0x01, 0xfb, 0x00,
+   0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x06, 0xf0, 0xe7, 0x00,
+   0x00, 0x00, 0x00, 0x01, 0xe1, 0xfe, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xf8, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0xfe, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc7, 0xf0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+   0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
+   0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+   0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0xc0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x79, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xff, 0xff, 0xf2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xff, 0xff,
+   0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x20, 0x00,
+   0x00, 0xe0, 0x00, 0x00, 0x09, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xff, 0xff, 0xf1, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x31,
+   0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0,
+   0x20, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x09, 0xff, 0xff, 0xf8, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x20, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x89, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+   0xff, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xff, 0xff, 0xf8,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
+   0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+   0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+   0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+   0xff, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xff, 0xff, 0xf8,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x10, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xa1, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xff, 0xff, 0xf1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x21, 0xff,
+   0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xe0,
+   0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03,
+   0xf1, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+   0xf1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xf8, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xe0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x21, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff,
+   0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+   0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+   0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf8,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0xff, 0xff, 0xfe, 0x01, 0xf8, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0xf8,
+   0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0xff, 0x00,
+   0x10, 0x00, 0x00, 0x02, 0x00, 0x1f, 0xe8, 0x03, 0xf8, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0xf4, 0x31, 0xff, 0x80, 0x20, 0x00, 0x00, 0x03, 0xc0,
+   0x3f, 0xc8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x10,
+   0xff, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x60, 0x7f, 0x8c, 0x00, 0x78, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x10, 0x7f, 0xe0, 0x40, 0x00, 0x00,
+   0x02, 0x20, 0xff, 0x84, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xc4, 0x10, 0x7f, 0xf0, 0x40, 0x00, 0x00, 0x02, 0x20, 0xff, 0x86, 0x00,
+   0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x10, 0x6f, 0xf8, 0x40,
+   0x00, 0xf0, 0x01, 0xc1, 0xff, 0x43, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x84, 0x10, 0x67, 0xfc, 0x00, 0x01, 0x00, 0x00, 0x03, 0xfe,
+   0x61, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x10, 0x63,
+   0xfe, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xfe, 0x30, 0x80, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x84, 0x30, 0x43, 0xff, 0x00, 0x01, 0xe0, 0x00,
+   0x1f, 0xfe, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
+   0x20, 0x43, 0xff, 0x80, 0x01, 0x10, 0x00, 0x3f, 0xfe, 0x18, 0x00, 0x08,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0xc3, 0xff, 0xe0, 0x01,
+   0x10, 0x00, 0xff, 0xfe, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x80, 0x01, 0x83, 0xff, 0xf8, 0x00, 0xe0, 0x03, 0xff, 0xfb, 0x00,
+   0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x03, 0xff,
+   0xff, 0x00, 0x00, 0x1f, 0xff, 0xf9, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x80, 0x02, 0x06, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff,
+   0xf9, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+   0x0c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xc0, 0x00, 0x08, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfc, 0x60, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x00,
+   0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf6, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
+   0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x00, 0x00, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+   0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
+   0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+   0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xc0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00,
+   0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};

+ 386 - 0
sys/src/games/catclock.c

@@ -0,0 +1,386 @@
+/* Copyright 1985 Massachusetts Institute of Technology */
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <event.h>
+
+#define add addpt
+#define sub subpt
+int wind = 1;
+
+typedef enum{
+	Odd=1,
+	Nonzero=~0
+}Windrule;
+#include "catback.p"
+#include "eyes.p"
+#define CATWID	150		/* width of body bitmap */
+#define CATHGT	300		/* height of body bitmap */
+#define	TAILWID	150		/* width of tail bitmap */
+#define	TAILHGT	89		/* height of tail bitmap */
+#define	MINULEN	27		/* length of minute hand */
+#define	HOURLEN	15		/* length of hour hand */
+#define	HANDWID	4		/* width of clock hands */
+#define	UPDATE	(1000/NTAIL)	/* ms/update -- tail waves at roughly 1/2 hz */
+#define	BLACK	(~0)
+#define	WHITE	0
+#define NTP	7
+Point tp[NTP]={			/* tail polygon */
+	 0, 0,
+	 0,76,
+	 3,82,
+	10,84,
+	18,82,
+	21,76,
+	21,70,
+};
+#define	NTAIL	16
+Image *eye[NTAIL+1];
+Image *tail[NTAIL+1];
+Image *cat;			/* cat body */
+Image *eyes;			/* eye background */
+Point toffs={ 74, -15 };	/* tail polygon offset */
+Point tailoffs={0, 211};	/* tail bitmap offset, relative to body */
+Point eyeoffs={49, 30};		/* eye bitmap offset, relative to body */
+Point catoffs;			/* cat offset, relative to screen */
+int xredraw;
+int crosseyed;
+void drawclock(void);
+void drawhand(int, int, double);
+void init(void);
+Image *draweye(double);
+Image *drawtail(double);
+Image *eballoc(Rectangle, int);
+//int myfillpoly(Image *, Point [], int, Windrule, int, Fcode);
+//void mydrawpoly(Image *, Point [], int, int, Fcode);
+Image *eballoc(Rectangle r, int chan){
+	Image *b=allocimage(display, r, chan, 0, DWhite);
+	if(b==0){
+		fprint(2, "catclock: can't allocate bitmap\n");
+		exits("allocimage");
+	}
+	return b;
+}
+
+void
+eloadimage(Image *i, Rectangle r, uchar *d, int nd)
+{
+	int n;
+	n = loadimage(i, r, d, nd);
+	if(n < nd) {
+		fprint(2, "loadimage fails: %r\n");
+		exits("loadimage");
+	}
+}
+
+int round(double x){
+	return x>=0.?x+.5:x-.5;
+}
+
+void
+redraw(Image *screen)
+{
+	Rectangle r = Rect(0,0,Dx(screen->r), Dy(screen->r));
+	catoffs.x=(Dx(r)-CATWID)/2;
+	catoffs.y=(Dy(r)-CATHGT)/2;
+	if(!ptinrect(catoffs, r)) fprint(2, "catclock: window too small, resize!\n");
+	xredraw=1;
+}
+
+void
+eresized(int new)
+{
+	if(new && getwindow(display, Refmesg) < 0)
+		fprint(2,"can't reattach to window");
+	redraw(screen);
+}
+
+void main(int argc, char *argv[]){
+	int i;
+	ARGBEGIN{
+	case 'c': crosseyed++; break;
+	default:
+		fprint(2, "Usage: %s [-c]\n", argv0);
+		exits("usage");
+	}ARGEND
+	initdraw(0, 0, "cat clock");
+	einit(Emouse);
+	redraw(screen);
+	for(i=0; i<nelem(catback_bits); i++)
+		catback_bits[i] ^= 0xFF;
+	for(i=0; i<nelem(eyes_bits); i++)
+		eyes_bits[i] ^= 0xFF;
+	cat=eballoc(Rect(0, 0, CATWID, CATHGT), GREY1);
+	eloadimage(cat, cat->r, catback_bits, sizeof(catback_bits));
+//	wrbitmap(cat, cat->r.min.y, cat->r.max.y, catback_bits);
+	for(i=0;i<=NTAIL;i++){
+		tail[i]=drawtail(i*PI/NTAIL);
+		eye[i]=draweye(i*PI/NTAIL);
+	}
+	for(;;){
+		if(ecanmouse()) emouse();	/* don't get resize events without this! */
+		drawclock();
+		flushimage(display, 1);
+//		bflush();
+		sleep(UPDATE);
+	}
+}
+/*
+ * Draw a clock hand, theta is clockwise angle from noon
+ */
+void drawhand(int length, int width, double theta){
+	double c=cos(theta), s=sin(theta);
+	double ws=width*s, wc=width*c;
+	Point vhand[4];
+	vhand[0]=add(screen->r.min, add(catoffs, Pt(CATWID/2+round(length*s), CATHGT/2-round(length*c))));
+	vhand[1]=add(screen->r.min, add(catoffs, Pt(CATWID/2-round(ws+wc), CATHGT/2+round(wc-ws))));
+	vhand[2]=add(screen->r.min, add(catoffs, Pt(CATWID/2-round(ws-wc), CATHGT/2+round(wc+ws))));
+	vhand[3] = vhand[0];
+	fillpoly(screen, vhand, 4, wind, display->white, 
+		addpt(screen->r.min, vhand[0]));
+	poly(screen, vhand, 4, Endsquare, Endsquare, 0, display->black,
+		addpt(screen->r.min, vhand[0]));
+//	myfillpoly(&screen, vhand, 3, Nonzero, WHITE, S);
+//	mydrawpoly(&screen, vhand, 3, BLACK, S);
+}
+/*
+ * draw a cat tail, t is time (mod 1 second)
+ */
+Image *drawtail(double t){
+	Image *bp;
+	double theta=.4*sin(t+3.*PIO2)-.08;	/* an assymetric tail leans to one side */
+	double s=sin(theta), c=cos(theta);
+	Point rtp[NTP];
+	int i;
+	bp=eballoc(Rect(0, 0, TAILWID, TAILHGT), GREY1);
+	for(i=0;i!=NTP;i++)
+		rtp[i]=add(Pt(tp[i].x*c+tp[i].y*s, -tp[i].x*s+tp[i].y*c), toffs);
+	fillpoly(bp, rtp, NTP, wind, display->black, rtp[0]);
+	return bp;
+}
+/*
+ * draw the cat's eyes, t is time (mod 1 second)
+ */
+Image *draweye(double t){
+	Image *bp;
+	double u;
+	double angle=0.7*sin(t+3*PIO2)+PI/2.0;	/* direction eyes point */
+	Point pts[100];
+	int i, j;
+	struct{
+		double	x, y, z;
+	}pt;
+	if(eyes==0){
+		eyes=eballoc(Rect(0, 0, eyes_width, eyes_height), GREY1);
+		eloadimage(eyes, eyes->r, eyes_bits, sizeof(eyes_bits));
+//		wrbitmap(eyes, eyes->r.min.y, eyes->r.max.y, eyes_bits);
+	}
+	bp=eballoc(eyes->r, GREY1);
+	draw(bp, bp->r, eyes, nil, ZP);
+//	bitblt(bp, bp->r.min, eyes, eyes->r, S);
+	for(i=0,u=-PI/2.0;u<PI/2.0;i++,u+=0.25){
+		pt.x=cos(u)*cos(angle+PI/7.0);
+		pt.y=sin(u);
+		pt.z=2.+cos(u)*sin(angle+PI/7.0);
+		pts[i].x=(pt.z==0.0?pt.x:pt.x/pt.z)*23.0+12.0;
+		pts[i].y=(pt.z==0.0?pt.y:pt.y/pt.z)*23.0+11.0;
+	}
+	for(u=PI/2.0;u>-PI/2.0;i++,u-=0.25){
+		pt.x=cos(u)*cos(angle-PI/7.0);
+		pt.y=sin(u);
+		pt.z=2.+cos(u)*sin(angle-PI/7.0);
+		pts[i].x=(pt.z==0.0?pt.x:pt.x/pt.z)*23.0+12.0;
+		pts[i].y=(pt.z==0.0?pt.y:pt.y/pt.z)*23.0+11.0;
+	}
+	fillpoly(bp, pts, i, wind, display->black, pts[0]);
+//	fillpoly(bp, pts, i, Nonzero, BLACK, S);
+	if(crosseyed){
+		angle=0.7*sin(PI-t+3*PIO2)+PI/2.0;
+		for(i=0,u=-PI/2.0;u<PI/2.0;i++,u+=0.25){
+			pt.x=cos(u)*cos(angle+PI/7.0);
+			pt.y=sin(u);
+			pt.z=2.+cos(u)*sin(angle+PI/7.0);
+			pts[i].x=(pt.z==0.0?pt.x:pt.x/pt.z)*23.0+12.0;
+			pts[i].y=(pt.z==0.0?pt.y:pt.y/pt.z)*23.0+11.0;
+		}
+		for(u=PI/2.0;u>-PI/2.0;i++,u-=0.25){
+			pt.x=cos(u)*cos(angle-PI/7.0);
+			pt.y=sin(u);
+			pt.z=2.+cos(u)*sin(angle-PI/7.0);
+			pts[i].x=(pt.z==0.0?pt.x:pt.x/pt.z)*23.0+12.0;
+			pts[i].y=(pt.z==0.0?pt.y:pt.y/pt.z)*23.0+11.0;
+		}
+	}
+	for(j=0;j<i;j++) pts[j].x+=31;
+	fillpoly(bp, pts, i, wind, display->black, pts[0]);
+//	fillpoly(bp, pts, i, Nonzero, BLACK, S);
+	return bp;
+}
+void
+drawclock(void){
+	static int t=0, dt=1;
+	static Tm otm;
+	Tm tm=*localtime(time(0));
+	tm.hour%=12;
+	if(xredraw || tm.min!=otm.min || tm.hour!=otm.hour){
+		if(xredraw){
+			draw(screen, screen->r, display->white, nil, ZP);
+			border(screen, screen->r, 4, display->black, ZP);
+			//bitblt(&screen, screen.r.min, &screen, screen.r, Zero);
+			//border(&screen, screen.r, 4, F);
+		}
+		draw(screen, screen->r, cat, nil, mulpt(catoffs, -1));
+		flushimage(display, 1);
+		//bitblt(&screen, catoffs, cat, cat->r, S);
+		drawhand(MINULEN, HANDWID, 2.*PI*tm.min/60.);
+		drawhand(HOURLEN, HANDWID, 2.*PI*(tm.hour+tm.min/60.)/12.);
+		xredraw=0;
+	}
+	draw(screen, screen->r, tail[t], nil, 
+		mulpt(add(catoffs, tailoffs), -1));
+	draw(screen, screen->r, eye[t], nil, 
+		mulpt(add(catoffs, eyeoffs), -1));
+	//bitblt(&screen, add(catoffs, tailoffs), tail[t], tail[t]->r, S);
+	//bitblt(&screen, add(catoffs, eyeoffs), eye[t], eye[t]->r, S);
+	t+=dt;
+	if(t<0 || t>NTAIL){
+		t-=2*dt;
+		dt=-dt;
+	}
+	otm=tm;
+}
+#ifdef NOTDEF
+void drawpoly(Bitmap *dst, Point p[], int np, int v, Fcode f){
+	int i;
+	Point q=p[np-1];
+	for(i=0;i!=np;i++){
+		segment(dst, p[i], q, v, f);
+		q=p[i];
+	}
+}
+/*
+ * Fillpoly -- a polygon tiler
+ * Updating the edgelist from scanline to scanline could be quicker if no
+ * edges cross:  we can just merge the incoming edges.  The code can handle
+ * multiply-connected polygons with holes, but the interface can't.  If
+ * the scan-line filling routine were a parameter, we could do textured
+ * polygons, polyblt, and other such stuff.
+ */
+typedef struct edge Edge;
+struct edge{
+	Point p;	/* point of crossing current scan-line */
+	int maxy;	/* scan line at which to discard edge */
+	int dx;		/* x increment if x fraction<1 */
+	int dx1;	/* x increment if x fraction>=1 */
+	int x;		/* x fraction, scaled by den */
+	int num;	/* x fraction increment for unit y change, scaled by den */
+	int den;	/* x fraction increment for unit x change, scaled by num */
+	int dwind;	/* increment of winding number on passing this edge */
+	Edge *next;	/* next edge on current scanline */
+	Edge *prev;	/* previous edge on current scanline */
+};
+void insert(Edge *ep, Edge **yp){
+	while(*yp && (*yp)->p.x<ep->p.x) yp=&(*yp)->next;
+	ep->next=*yp;
+	*yp=ep;
+	if(ep->next){
+		ep->prev=ep->next->prev;
+		ep->next->prev=ep;
+		if(ep->prev)
+			ep->prev->next=ep;
+	}
+	else
+		ep->prev=0;
+}
+int myfillpoly(Bitmap *b, Point vert[], int nvert, Windrule w, int v, Fcode f){
+	Edge *edges, *ep, *nextep, **ylist, **eylist, **yp;
+	Point *p, *q, *evert, p0, p1, p10;
+	int dy, nbig, y, left, right, wind, nwind;
+	edges=(Edge *)malloc(nvert*sizeof(Edge));
+	if(edges==0){
+	NoSpace:
+		return 0;
+	}
+	ylist=(Edge **)malloc((b->r.max.y-b->r.min.y)*sizeof(Edge *));
+	if(ylist==0) goto NoSpace;
+	eylist=ylist+(b->r.max.y-b->r.min.y);
+	for(yp=ylist;yp!=eylist;yp++) *yp=0;
+	evert=vert+nvert;
+	for(p=evert-1, q=vert, ep=edges;q!=evert;p=q, q++, ep++){
+		if(p->y==q->y) continue;
+		if(p->y<q->y){
+			p0=*p;
+			p1=*q;
+			ep->dwind=1;
+		}
+		else{
+			p0=*q;
+			p1=*p;
+			ep->dwind=-1;
+		}
+		if(p1.y<=b->r.min.y) continue;
+		if(p0.y>=b->r.max.y) continue;
+		ep->p=p0;
+		if(p1.y>b->r.max.y)
+			ep->maxy=b->r.max.y;
+		else
+			ep->maxy=p1.y;
+		p10=sub(p1, p0);
+		if(p10.x>=0){
+			ep->dx=p10.x/p10.y;
+			ep->dx1=ep->dx+1;
+		}
+		else{
+			p10.x=-p10.x;
+			ep->dx=-(p10.x/p10.y); /* this nonsense rounds toward zero */
+			ep->dx1=ep->dx-1;
+		}
+		ep->x=0;
+		ep->num=p10.x%p10.y;
+		ep->den=p10.y;
+		if(ep->p.y<b->r.min.y){
+			dy=b->r.min.y-ep->p.y;
+			ep->x+=dy*ep->num;
+			nbig=ep->x/ep->den;
+			ep->p.x+=ep->dx1*nbig+ep->dx*(dy-nbig);
+			ep->x%=ep->den;
+			ep->p.y=b->r.min.y;
+		}
+		insert(ep, ylist+(ep->p.y-b->r.min.y));
+	}
+	left=0;
+	for(yp=ylist,y=b->r.min.y;yp!=eylist;yp++,y++){
+		wind=0;
+		for(ep=*yp;ep;ep=nextep){
+			nwind=wind+ep->dwind;
+			if(nwind&w){	/* inside */
+				if(!(wind&w)){
+					left=ep->p.x;
+					if(left<b->r.min.x) left=b->r.min.x;
+				}
+			}
+			else if(wind&w){
+				right=ep->p.x;
+				if(right>=b->r.max.x) right=b->r.max.x;
+				if(right>left)
+					segment(b, Pt(left, y), Pt(right, y), v, f);
+			}
+			wind=nwind;
+			nextep=ep->next;
+			if(++ep->p.y!=ep->maxy){
+				ep->x+=ep->num;
+				if(ep->x>=ep->den){
+					ep->x-=ep->den;
+					ep->p.x+=ep->dx1;
+				}
+				else
+					ep->p.x+=ep->dx;
+				insert(ep, yp+1);
+			}
+		}
+	}
+	free((char *)edges);
+	free((char *)ylist);
+	return 1;
+}
+#endif

+ 20 - 0
sys/src/games/eyes.p

@@ -0,0 +1,20 @@
+#define eyes_width 54
+#define eyes_height 23
+#define eyes_x_hot -1
+#define eyes_y_hot -1
+static uchar eyes_bits[] = {
+   0xff, 0x01, 0xff, 0xff, 0xfe, 0x03, 0xfc, 0xf8, 0x00, 0x3f, 0xff, 0xf0,
+   0x00, 0x7c, 0xf0, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x3c, 0xe0, 0x00, 0x0f,
+   0xff, 0xc0, 0x00, 0x1c, 0xc0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x0c, 0x80,
+   0x00, 0x03, 0xff, 0x00, 0x00, 0x04, 0x80, 0x00, 0x03, 0xff, 0x00, 0x00,
+   0x04, 0x80, 0x00, 0x03, 0xff, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0xfe,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x80, 0x00, 0x03,
+   0xff, 0x00, 0x00, 0x04, 0x80, 0x00, 0x03, 0xff, 0x00, 0x00, 0x04, 0x80,
+   0x00, 0x03, 0xff, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x07, 0xff, 0x80, 0x00,
+   0x0c, 0xe0, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x1c, 0xf0, 0x00, 0x1f, 0xff,
+   0xe0, 0x00, 0x3c, 0xf8, 0x00, 0x3f, 0x57, 0xf0, 0x00, 0x7c, 0xff, 0x01,
+   0xfe, 0xab, 0xfe, 0x03, 0xfc
+};

+ 44 - 0
sys/src/games/mkfile

@@ -0,0 +1,44 @@
+</$objtype/mkfile
+
+TARG=catclock\
+	juggle\
+
+OFILES=
+HFILES=
+
+</sys/src/cmd/mkmany
+BIN=/$objtype/bin/games
+
+DIRS=\
+	mahjongg\
+	sokoban\
+
+catclock.$O:	catback.p eyes.p
+
+all:V:	dirall
+install:V:	dirinstall
+clean:V:
+	for (i in $DIRS) @{
+		cd $i
+		mk clean
+	}
+	rm -f *.[$OS] [$OS].* y.tab.? y.debug y.output $TARG
+
+nuke:V:
+	for (i in $DIRS) @{
+		cd $i
+		mk nuke
+	}
+	rm -f *.[$OS] [$OS].* y.tab.? y.debug y.output $TARG
+
+dirinstall:V:
+	for (i in $DIRS) @{
+		cd $i
+		mk install
+	}
+
+dirall:V:
+	for (i in $DIRS) @{
+		cd $i
+		mk all
+	}

+ 13 - 1
sys/src/libc/9sys/getnetconninfo.c

@@ -43,6 +43,7 @@ getnetconninfo(char *dir, int fd)
 	Dir *d;
 	char spec[10];
 	char path[128];
+	char netname[128], *p;
 
 	/* get a directory address via fd */
 	if(dir == nil || *dir == 0){
@@ -90,7 +91,16 @@ getnetconninfo(char *dir, int fd)
 	getendpoint(nci->dir, "remote", &nci->rsys, &nci->rserv);
 	if(nci->rsys == nil || nci->rserv == nil)
 		goto err;
-	
+
+	strecpy(netname, netname+sizeof netname, nci->dir);
+	if((p = strrchr(netname, '/')) != nil)
+		*p = 0;
+	if(strncmp(netname, "/net/", 5) == 0)
+		memmove(netname, netname+5, strlen(netname+5)+1);
+	nci->laddr = smprint("%s!%s!%s", netname, nci->lsys, nci->lserv);
+	nci->raddr = smprint("%s!%s!%s", netname, nci->rsys, nci->rserv);
+	if(nci->laddr == nil || nci->raddr == nil)
+		goto err;
 	return nci;
 err:
 	freenetconninfo(nci);
@@ -117,5 +127,7 @@ freenetconninfo(NetConnInfo *nci)
 	xfree(nci->lserv);
 	xfree(nci->rsys);
 	xfree(nci->rserv);
+	xfree(nci->laddr);
+	xfree(nci->raddr);
 	free(nci);
 }