From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam To: <9fans@cse.psu.edu> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="571241096-1024903052-1024872166=:16321" Content-ID: Subject: [9fans] Galaxy screensaver updated Date: Sun, 23 Jun 2002 18:44:25 -0400 Topicbox-Message-UUID: b6c996fc-eaca-11e9-9e20-41e7f4b1d025 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --571241096-1024903052-1024872166=:16321 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Attached is the new and improved galaxy screensaver. I've put suggestions as to what to do next, if anyone wants to pick up the ball. I've wasted enough time on this. ;) The middle mouse button picks different colors, as well as some options. See the end of the list. My favourite is definitely 'Random.' If you want to see some really neat effects, see line 351. Thanks Andrey, I had a super blast with this! Cheers, Sam --571241096-1024903052-1024872166=:16321 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="galaxy.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="galaxy.c" LyogVG91Y2hlZCBieToNCiAgKiAgc2FoQGNvcmFpZC5jb20sIDA2LzAyDQog ICoNCiAgKiBUbyBkbzoNCiAgKiBEZWNyZWFzZSB0aGUgbWFzcyBvZiB0aGUg Z2FsYXh5IGFzIHRoZSBzdGFycyBsZWF2ZS4NCiAgKiBBZGQgZnVsbHNjcmVl biBvcHRpb24gb24gcmlnaHQgYnV0dG9uIG1lbnUuDQogICogR2l2ZSBzdGFy cyB0aW55IG1hc3MgYW5kIG1ha2UgdGhlbSByZWFjdCB0byBlYWNoIG90aGVy Lg0KICAqIEdpdmUgc3RhcnMgc2l6ZSBiYXNlZCBvbiB0aGVpciBtYXNzLg0K ICAqLw0KI2luY2x1ZGUgPHUuaD4NCiNpbmNsdWRlIDxsaWJjLmg+DQojaW5j bHVkZSA8ZHJhdy5oPg0KI2luY2x1ZGUgPGV2ZW50Lmg+DQoNCiNkZWZpbmUg TUlOX0dBTFMJCQkyDQojZGVmaW5lIE1BWF9HQUxTCQkJNA0KI2RlZmluZSBN QVhfU1RBUlMJCQk1MDANCiNkZWZpbmUgTUFYX0lERUxUQVQJCTUwDQojZGVm aW5lIE1JTl9HQUxTWgkJCTFlLTENCiNkZWZpbmUgTUFYX0dBTFNaCQkJMS41 ZS0xDQojZGVmaW5lIENPTE9SQkFTRQkJCTE2DQoNCiNkZWZpbmUgRVBTSUxP TiAJCQkxZS04DQojZGVmaW5lIFNRUlRfRVBTSUxPTiAJCTFlLTQNCiNkZWZp bmUgREVMVEFUIAkJCShNQVhfSURFTFRBVCAqIFNRUlRfRVBTSUxPTikNCiNk ZWZpbmUgUUNPTlMJCQkJMWUtMw0KI2RlZmluZSBFUFMJCQkJMS8oRVBTSUxP TiAqIFNRUlRfRVBTSUxPTiAqIERFTFRBVCAqIERFTFRBVCAqIFFDT05TKTsN CiNkZWZpbmUgTV9QSQkJCQkzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4 MyANCg0KdHlwZWRlZiBzdHJ1Y3QgU3RhciBTdGFyOw0Kc3RydWN0IFN0YXIg ew0KCWRvdWJsZSBwb3NbM10sIHZlbFszXTsNCn07DQoNCnR5cGVkZWYgc3Ry dWN0IEdhbGF4eSBHYWxheHk7DQpzdHJ1Y3QgR2FsYXh5IHsNCglpbnQgbWFz cywgbnN0YXJzLCBnYWxjb2wsIHN3YXBwb2ludHMsIGNvbDsNCglkb3VibGUg cG9zWzNdLCB2ZWxbM10sIG9wb3NbM10sIG92ZWxbM107DQoJU3RhciBzdGFy c1tNQVhfU1RBUlNdOw0KCVBvaW50IG9sZHBvaW50c1tNQVhfU1RBUlNdLCBu ZXdwb2ludHNbTUFYX1NUQVJTXTsNCn07DQoNCnR5cGVkZWYgc3RydWN0IFVu aSBVbmk7DQpzdHJ1Y3QgVW5pIHsNCglpbnQgbWlkeCwgbWlkeSwgbmdhbHMs IGZfaGl0aXRlcmF0aW9ucywgc3RlcDsNCglkb3VibGUgbWF0WzNdWzNdLCBz Y2FsZSwgZGlmZlszXSwgcm90X3gsIHJvdF95Ow0KCUdhbGF4eSBnYWxzW01B WF9HQUxTXTsNCn07DQoNCmVudW0gewlXSElURSwgUEFMRUdSRVlHUkVFTiwg UEFMRUdSRVlCTFVFLCBHUkVZR1JFRU4sIEdSRVlCTFVFLCANCgkJUkVELCBH UkVFTiwgQkxVRSwgQ1lBTiwgTUFHRU5UQSwgWUVMTE9XLCBQQUxFWUVMTE9X LCBEQVJLWUVMTE9XLCANCgkJREFSS0dSRUVOLCBQQUxFR1JFRU4sIE1FREdS RUVOLCBEQVJLQkxVRSwgUEFMRUJMVUVHUkVFTiwgUEFMRUJMVUUsDQoJCUJM VUVHUkVFTiwgWUVMTE9XR1JFRU4sIE1FREJMVUUsIFBVUlBMRUJMVUUsIFJB TkRZLCANCgkJVFdJTktMRSwgU1BBUktMRSwgRldPUktTLCBOQ09MT1JTLA0K fTsNCg0KaW50IGNvbG9yc1tOQ09MT1JTXSA9IHsNCltXSElURV0gCQkJRFdo aXRlLA0KW1JFRF0JCQlEUmVkLA0KW0dSRUVOXQkJCURHcmVlbiwNCltCTFVF XQkJCURCbHVlLA0KW0NZQU5dCQkJREN5YW4sDQpbTUFHRU5UQV0JCURNYWdl bnRhLA0KW1lFTExPV10JCQlEWWVsbG93LA0KW1BBTEVZRUxMT1ddCQlEUGFs ZXllbGxvdywNCltEQVJLWUVMTE9XXQkJRERhcmt5ZWxsb3csDQpbREFSS0dS RUVOXQkJRERhcmtncmVlbiwNCltQQUxFR1JFRU5dCQlEUGFsZWdyZWVuLA0K W01FREdSRUVOXQkJRE1lZGdyZWVuLA0KW0RBUktCTFVFXQkJRERhcmtibHVl LA0KW1BBTEVCTFVFR1JFRU5dCURQYWxlYmx1ZWdyZWVuLA0KW1BBTEVCTFVF XQkJRFBhbGVibHVlLA0KW0JMVUVHUkVFTl0JCURCbHVlZ3JlZW4sDQpbR1JF WUdSRUVOXQkJREdyZXlncmVlbiwNCltQQUxFR1JFWUdSRUVOXQlEUGFsZWdy ZXlncmVlbiwNCltZRUxMT1dHUkVFTl0JRFllbGxvd2dyZWVuLA0KW01FREJM VUVdCQlETWVkYmx1ZSwNCltHUkVZQkxVRV0JCURHcmV5Ymx1ZSwNCltQQUxF R1JFWUJMVUVdCURQYWxlZ3JleWJsdWUsDQpbUFVSUExFQkxVRV0JCURQdXJw bGVibHVlDQp9Ow0KDQpjaGFyICptYnRuc1tdID0gew0KW1dISVRFXSAJCQki V2hpdGUiLA0KW1JFRF0JCQkiUmVkIiwNCltHUkVFTl0JCQkiR3JlZW4iLA0K W0JMVUVdCQkJIkJsdWUiLA0KW0NZQU5dCQkJIkN5YW4iLA0KW01BR0VOVEFd CQkiTWFnZW50YSIsDQpbWUVMTE9XXQkJCSJZZWxsb3ciLA0KW1BBTEVZRUxM T1ddCQkiUGFsZXllbGxvdyIsDQpbREFSS1lFTExPV10JCSJEYXJreWVsbG93 IiwNCltEQVJLR1JFRU5dCQkiRGFya2dyZWVuIiwNCltQQUxFR1JFRU5dCQki UGFsZWdyZWVuIiwNCltNRURHUkVFTl0JCSJNZWRncmVlbiIsDQpbREFSS0JM VUVdCQkiRGFya2JsdWUiLA0KW1BBTEVCTFVFR1JFRU5dCSJQYWxlYmx1ZWdy ZWVuIiwNCltQQUxFQkxVRV0JCSJQYWxlYmx1ZSIsDQpbQkxVRUdSRUVOXQkJ IkJsdWVncmVlbiIsDQpbR1JFWUdSRUVOXQkJIkdyZXlncmVlbiIsDQpbUEFM RUdSRVlHUkVFTl0JIlBhbGVncmV5Z3JlZW4iLA0KW1lFTExPV0dSRUVOXQki WWVsbG93Z3JlZW4iLA0KW01FREJMVUVdCQkiTWVkYmx1ZSIsDQpbR1JFWUJM VUVdCQkiR3JleWJsdWUiLA0KW1BBTEVHUkVZQkxVRV0JIlBhbGVncmV5Ymx1 ZSIsDQpbUFVSUExFQkxVRV0JCSJQdXJwbGVCbHVlIiwNCltSQU5EWV0JCQki UmFuZG9tIiwNCltGV09SS1NdCQkJIkZpcmV3b3JrcyIsDQpbU1BBUktMRV0J CQkiU3BhcmtsZSIsDQpbVFdJTktMRV0JCSJUd2lua2xlIiwNCltOQ09MT1JT XQkJMA0KfTsNCg0KY2hhciAqcmJ0bnNbXSA9IHsgImV4aXQiLCAwIH07DQoN CkltYWdlICppbWFnZXNbTkNPTE9SU107DQpVbmkgdW5pdjsNCnVpbnQgY29s b3I7DQoNCmludA0KYWxsb2NfY29sb3JzKHZvaWQpDQp7DQoJaW50IGk7DQoN Cglmb3IoaT0wOyBpPE5DT0xPUlM7IGkrKykNCgkJaW1hZ2VzW2ldID0gYWxs b2NpbWFnZShkaXNwbGF5LCBSZWN0KDAsMCwyLDIpLCBkaXNwbGF5LT5jaGFu LCAwLCBjb2xvcnNbaV0pOw0KCXJldHVybiAxOw0KfQ0KDQp2b2lkDQpmcmVl X2NvbG9ycyh2b2lkKQ0Kew0KCWludCBpOw0KDQoJZm9yKGk9MDsgaTxOQ09M T1JTOyBpKyspDQoJCWZyZWVpbWFnZShpbWFnZXNbaV0pOw0KfQ0KDQovKiBt YXQ/ICovDQp2b2lkDQppbml0X21hdCh2b2lkKQ0Kew0KCWRvdWJsZSB3MSwg dzIsIHNpbncxLCBzaW53MiwgY29zdzEsIGNvc3cyOw0KDQoJdzEgPSB3MiA9 IDIuMCAqIE1fUEkgKiBmcmFuZCgpOw0KDQoJc2ludzEgPSBzaW4odzEpOw0K CXNpbncyID0gc2luKHcyKTsNCgljb3N3MSA9IGNvcyh3MSk7DQoJY29zdzIg PSBjb3ModzIpOw0KDQoJdW5pdi5tYXRbMF1bMF0gPSBjb3N3MjsNCgl1bml2 Lm1hdFswXVsxXSA9IC1zaW53MSAqIHNpbncyOw0KCXVuaXYubWF0WzBdWzJd ID0gY29zdzEgKiBzaW53MjsNCgl1bml2Lm1hdFsxXVswXSA9IDAuMDsNCgl1 bml2Lm1hdFsxXVsxXSA9IGNvc3cxOw0KCXVuaXYubWF0WzFdWzJdID0gc2lu dzE7DQoJdW5pdi5tYXRbMl1bMF0gPSAtc2ludzI7DQoJdW5pdi5tYXRbMl1b MV0gPSAtc2ludzEgKiBjb3N3MjsNCgl1bml2Lm1hdFsyXVsyXSA9IGNvc3cx ICogY29zdzI7DQp9DQoNCnZvaWQNCmluaXRfZ2FsKEdhbGF4eSAqZykNCnsN CglnLT52ZWxbMF0gPSBnLT52ZWxbMV0gPSBnLT52ZWxbMl0gPSBmcmFuZCgp ICogMi4wIC0gMS4wOw0KCWctPm92ZWxbMF0gPSBnLT5vdmVsWzFdID0gZy0+ b3ZlbFsyXSA9IGctPnZlbFswXTsNCglnLT5wb3NbMF0gPSBnLT5vcG9zWzBd ID0gLWctPnZlbFswXSAqIERFTFRBVCAqIHVuaXYuZl9oaXRpdGVyYXRpb25z ICsgZnJhbmQoKSAtIDAuNTsNCglnLT5wb3NbMV0gPSBnLT5vcG9zWzBdID0g LWctPnZlbFsxXSAqIERFTFRBVCAqIHVuaXYuZl9oaXRpdGVyYXRpb25zICsg ZnJhbmQoKSAtIDAuNTsNCglnLT5wb3NbMl0gPSBnLT5vcG9zWzBdID0gLWct PnZlbFsyXSAqIERFTFRBVCAqIHVuaXYuZl9oaXRpdGVyYXRpb25zICsgZnJh bmQoKSAtIDAuNTsNCglnLT5tYXNzID0gKGludCkgKGZyYW5kKCkgKiAxMDAw LjApICsgMTsNCglnLT5uc3RhcnMgPSBucmFuZChNQVhfU1RBUlMgLyAyKSAr IE1BWF9TVEFSUyAvIDI7DQoNCglpZihjb2xvciA9PSBSQU5EWSkNCgkJZy0+ Y29sID0gcmFuZCgpJVJBTkRZOw0KfQ0KDQp2b2lkDQppbml0X3N0YXJzKEdh bGF4eSAqZykNCnsNCglpbnQgaTsNCglkb3VibGUgZ2Fsc3osIHNpbncsIGNv c3csIGQsIGgsIHY7DQoJU3RhciAqc3Q7DQoJUG9pbnQgKm9sZHAsICpuZXdw Ow0KDQoJZ2Fsc3ogPSBNQVhfR0FMU1oqZnJhbmQoKSArIE1JTl9HQUxTWjsN CglzdCA9IGctPnN0YXJzOw0KCW9sZHAgPSBnLT5vbGRwb2ludHM7DQoJbmV3 cCA9IGctPm5ld3BvaW50czsNCg0KCWZvciAoaT0wOyBpIDwgZy0+bnN0YXJz OyBpKyssIHN0KyssIG9sZHArKywgbmV3cCsrKSB7DQoJCWQgPSAyLjAgKiBN X1BJICogZnJhbmQoKTsNCgkJc2ludyA9IHNpbihkKTsNCgkJY29zdyA9IGNv cyhkKTsNCgkJZCA9IGZyYW5kKCkgKiBnYWxzejsNCgkJaCA9IGZyYW5kKCkg KiBleHAoLTIuMCAqIChkIC8gZ2Fsc3opKSAvIDUuMCAqIGdhbHN6Ow0KDQoJ CWlmKGZyYW5kKCkgPCAwLjUpDQoJCQloID0gLWg7DQoJCXN0LT5wb3NbMF0g PSB1bml2Lm1hdFswXVswXSAqIGQgKiBjb3N3ICsgdW5pdi5tYXRbMV1bMF0g KiBkICogc2ludyArIHVuaXYubWF0WzJdWzBdICoNCgkJCQkgCWggKyBnLT5w b3NbMF07DQoJCXN0LT5wb3NbMV0gPSB1bml2Lm1hdFswXVsxXSAqIGQgKiBj b3N3ICsgdW5pdi5tYXRbMV1bMV0gKiBkICogc2ludyArIHVuaXYubWF0WzJd WzFdICoNCgkJCQkgCWggKyBnLT5wb3NbMV07DQoJCXN0LT5wb3NbMl0gPSB1 bml2Lm1hdFswXVsyXSAqIGQgKiBjb3N3ICsgdW5pdi5tYXRbMV1bMl0gKiBk ICogc2ludyArIHVuaXYubWF0WzJdWzJdICoNCgkJCQkgCWggKyBnLT5wb3Nb Ml07DQoNCgkJdiA9IHNxcnQoZy0+bWFzcyAqIFFDT05TIC8gc3FydChkICog ZCArIGggKiBoKSk7DQoJCXN0LT52ZWxbMF0gPSAtdW5pdi5tYXRbMF1bMF0g KiB2ICogc2ludyArIHVuaXYubWF0WzFdWzBdICogdiAqIGNvc3cgKyBnLT52 ZWxbMF07DQoJCXN0LT52ZWxbMV0gPSAtdW5pdi5tYXRbMF1bMV0gKiB2ICog c2ludyArIHVuaXYubWF0WzFdWzFdICogdiAqIGNvc3cgKyBnLT52ZWxbMV07 DQoJCXN0LT52ZWxbMl0gPSAtdW5pdi5tYXRbMF1bMl0gKiB2ICogc2ludyAr IHVuaXYubWF0WzFdWzJdICogdiAqIGNvc3cgKyBnLT52ZWxbMl07DQoNCgkJ c3QtPnZlbFswXSAqPSBERUxUQVQ7DQoJCXN0LT52ZWxbMV0gKj0gREVMVEFU Ow0KCQlzdC0+dmVsWzJdICo9IERFTFRBVDsNCgkNCgkJKm9sZHAgPSBQdCgw LCAwKTsNCgkJKm5ld3AgPSBQdCgwLCAwKTs7DQoJfQ0KIH0NCg0Kc3RhdGlj IHZvaWQNCnN0YXJ0b3Zlcih2b2lkKQ0Kew0KCWludCBpOw0KCUdhbGF4eSAq ZzsNCg0KCXVuaXYuc3RlcCA9IDA7DQoJdW5pdi5yb3RfeSA9IDA7DQoJdW5p di5yb3RfeCA9IDA7DQoJdW5pdi5uZ2FscyA9IE1JTl9HQUxTICsgKGZyYW5k KCkqKE1BWF9HQUxTLU1JTl9HQUxTKzEpKTsNCglmb3IoaT0wLCBnPXVuaXYu Z2FsczsgaSA8IHVuaXYubmdhbHM7IGkrKywgZysrKSB7DQoJCWluaXRfbWF0 KCk7DQoJCWluaXRfZ2FsKGcpOw0KCQlpbml0X3N0YXJzKGcpOw0KCX0NCglk cmF3KHNjcmVlbiwgc2NyZWVuLT5yLCBkaXNwbGF5LT5ibGFjaywgbmlsLCBa UCk7DQp9DQoNCnZvaWQNCmluaXQodm9pZCkNCnsNCglzcmFuZCh0aW1lKDAp KTsNCg0KCWlmKGluaXRkcmF3KG5pbCwgbmlsLCAiYmV6IikgPCAwKQ0KCQlz eXNmYXRhbCgiaW5pdGRyYXcgZmFpbGVkOiAlciIpOw0KCWlmKCFhbGxvY19j b2xvcnMoKSkNCgkJc3lzZmF0YWwoImZhaWxlZCB0byBpbml0IGNvbG9yc1xu Iik7DQoJdW5pdi5mX2hpdGl0ZXJhdGlvbnMgPSAxMDA7DQoJdW5pdi5zY2Fs ZSA9IChkb3VibGUpIChEeChzY3JlZW4tPnIpICsgRHkoc2NyZWVuLT5yKSkg LyA4LjA7DQoJdW5pdi5taWR4ID0gIHNjcmVlbi0+ci5taW4ueCArIER4KHNj cmVlbi0+cikgIC8gMjsNCgl1bml2Lm1pZHkgPSAgc2NyZWVuLT5yLm1pbi55 ICtEeShzY3JlZW4tPnIpIC8gMjsNCn0NCg0KLyogY2FsY3VsYXRlIHN0YXIg cG9zLHZlbCByZWxhdGl2ZSB0byB0aGUgZ3Jhdml0eSBvZiB0aGUgb3RoZXIg Z2FsYXhpZXMgKi8NCnZvaWQNCmNhbGNfc3Rhcl9yZWxfZ2FsKEdhbGF4eSAq ZywgU3RhciAqcykNCnsNCglkb3VibGUgZCwgZDAsIGQxLCBkMiwgdjAsIHYx LCB2MjsNCg0KCXYwID0gcy0+dmVsWzBdLCB2MSA9IHMtPnZlbFsxXSwgdjIg PSBzLT52ZWxbMl07DQoJZDAgPSBnLT5wb3NbMF0gLSBzLT5wb3NbMF07DQoJ ZDEgPSBnLT5wb3NbMV0gLSBzLT5wb3NbMV07DQoJZDIgPSBnLT5wb3NbMl0g LSBzLT5wb3NbMl07DQoJZCA9IGQwICogZDAgKyBkMSAqIGQxICsgZDIgKiBk MjsNCg0KCWlmIChkID4gRVBTSUxPTikNCgkJZCA9IGctPm1hc3MgLyAoZCAq IHNxcnQoZCkpICogREVMVEFUICogREVMVEFUICogUUNPTlM7DQoJZWxzZQ0K CQlkID0gZy0+bWFzcyAqIEVQUzsNCgl2MCArPSBkMCAqIGQ7DQoJdjEgKz0g ZDEgKiBkOw0KCXYyICs9IGQyICogZDsNCglzLT52ZWxbMF0gPSB2MCwgcy0+ dmVsWzFdID0gdjEsIHMtPnZlbFsyXSA9IHYyOw0KCXMtPnBvc1swXSArPSB2 MCwgcy0+cG9zWzFdICs9IHYxLCBzLT5wb3NbMl0gKz0gdjI7DQp9DQoNCi8q IGNhbGN1bGF0ZSBnYWxheHkgcG9zL3ZlbCByZWxhdGl2ZSB0byBvdGhlciBn YWxheGllcyAqLw0Kdm9pZA0KY2FsY19nYWxfcmVsX2dhbHMoR2FsYXh5ICp0 aGlzZykNCnsNCglkb3VibGUgZCwgZDAsIGQxLCBkMjsNCglpbnQgaTsNCglH YWxheHkgKmc7DQoNCglmb3IgKGk9MCwgZz11bml2LmdhbHM7IGkgPCB1bml2 Lm5nYWxzOyBpKyssIGcrKykgew0KCQlpZihnID09IHRoaXNnKQ0KCQkJY29u dGludWU7DQoJCWQwID0gZy0+b3Bvc1swXSAtIHRoaXNnLT5wb3NbMF07DQoJ CWQxID0gZy0+b3Bvc1sxXSAtIHRoaXNnLT5wb3NbMV07DQoJCWQyID0gZy0+ b3Bvc1syXSAtIHRoaXNnLT5wb3NbMl07DQoJCWQgPSBkMCAqIGQwICsgZDEg KiBkMSArIGQyICogZDI7DQoNCgkJaWYoZCA+IEVQU0lMT04pDQoJCQlkID0g dGhpc2ctPm1hc3MgKiB0aGlzZy0+bWFzcyAvIChkICogc3FydChkKSk7DQoJ CWVsc2UNCgkJCWQgPSB0aGlzZy0+bWFzcyAqIHRoaXNnLT5tYXNzIC8gKEVQ U0lMT04gKiBTUVJUX0VQU0lMT04pOw0KCQlkICo9IERFTFRBVCAqIFFDT05T Ow0KCQlkMCAqPSBkOw0KCQlkMSAqPSBkOw0KCQlkMiAqPSBkOw0KCQl0aGlz Zy0+dmVsWzBdICs9IGQwIC8gdGhpc2ctPm1hc3M7DQoJCXRoaXNnLT52ZWxb MV0gKz0gZDEgLyB0aGlzZy0+bWFzczsNCgkJdGhpc2ctPnZlbFsyXSArPSBk MiAvIHRoaXNnLT5tYXNzOw0KCQlnLT52ZWxbMF0gLT0gZDAgLyBnLT5tYXNz Ow0KCQlnLT52ZWxbMV0gLT0gZDEgLyBnLT5tYXNzOw0KCQlnLT52ZWxbMl0g LT0gZDIgLyBnLT5tYXNzOw0KCX0NCgl0aGlzZy0+cG9zWzBdICs9IHRoaXNn LT52ZWxbMF0gKiBERUxUQVQ7DQoJdGhpc2ctPnBvc1sxXSArPSB0aGlzZy0+ dmVsWzFdICogREVMVEFUOw0KCXRoaXNnLT5wb3NbMl0gKz0gdGhpc2ctPnZl bFsyXSAqIERFTFRBVDsNCn0NCg0Kdm9pZA0KcmVkcmF3X3N0YXJzKEdhbGF4 eSAqZykNCnsNCgl1aW50IGk7DQoJUmVjdGFuZ2xlIHI7DQoJUG9pbnQgKm9s ZHAsICpuZXdwOw0KDQoJaWYoKGctPnN3YXBwb2ludHMgXj0gMSkpIHsNCgkJ b2xkcCA9IGctPm5ld3BvaW50czsNCgkJbmV3cCA9IGctPm9sZHBvaW50czsN Cgl9IGVsc2Ugew0KCQlvbGRwPWctPm9sZHBvaW50czsNCgkJbmV3cD1nLT5u ZXdwb2ludHM7DQoJfQ0KCWlmKGNvbG9yID09IEZXT1JLUykNCgkJZy0+Y29s ID0gcmFuZCgpJVJBTkRZOw0KCWZvcihpPTA7IGkgPCBnLT5uc3RhcnM7IGkr Kywgb2xkcCsrLCBuZXdwKyspIHsNCgkJaWYoY29sb3IgPT0gU1BBUktMRSkN CgkJCWctPmNvbCA9IHJhbmQoKSVSQU5EWTsNCgkJZWxzZSBpZihjb2xvciA9 PSBUV0lOS0xFKQ0KCQkJZy0+Y29sID0gcmFuZCgpJVBBTEVHUkVZQkxVRTsN CgkJciA9IFJwdCgqb2xkcCwgYWRkcHQoKm9sZHAsIFB0KDIsIDIpKSk7DQoJ CWRyYXcoc2NyZWVuLCByLCBkaXNwbGF5LT5ibGFjaywgbmlsLCBaUCk7DQoJ CXIgPSBScHQoKm5ld3AsIGFkZHB0KCpuZXdwLCBQdCgyLCAyKSkpOw0KCQlk cmF3KHNjcmVlbiwgciwgaW1hZ2VzW2ctPmNvbF0sIG5pbCwgWlApOw0KDQoJ fQ0KIH0NCg0Kdm9pZA0KcmVkcmF3X2dhbChHYWxheHkgKmcpDQp7DQoJaW50 IGk7DQoJUG9pbnQgKnA7DQoJU3RhciAqczsNCg0KCXM9Zy0+c3RhcnM7DQoN Ci8vCXRyeSBvbmUgb2YgdGhlc2UgaW5zdGVhZCBmb3IgbmlmdHkgZWZmZWN0 cyA7KQ0KLy8JcCA9IGctPm5ld3BvaW50czsNCi8vCXAgPSBnLT5zd2FwcG9p bnRzID8gZy0+b2xkcG9pbnRzIDogZy0+bmV3cG9pbnRzOw0KCXAgPSBnLT5z d2FwcG9pbnRzID8gZy0+bmV3cG9pbnRzIDogZy0+b2xkcG9pbnRzOw0KDQoJ Zm9yKGk9MDsgaSA8IGctPm5zdGFyczsgaSsrLCBzKyssIHArKykgew0KCQlj YWxjX3N0YXJfcmVsX2dhbChnLCBzKTsNCgkJcC0+eCA9ICgoKHMtPnBvc1sw XSkgLSAocy0+cG9zWzJdKSkgKiB1bml2LnNjYWxlKSArIHVuaXYubWlkeDsN CgkJcC0+eSA9ICgoKHMtPnBvc1sxXSkgLSAoKChzLT5wb3NbMF0pICsgKHMt PnBvc1syXSkpKSkgKiB1bml2LnNjYWxlKSArIHVuaXYubWlkeTsNCgl9DQoJ Y2FsY19nYWxfcmVsX2dhbHMoZyk7DQoJcmVkcmF3X3N0YXJzKGcpOw0KfQ0K DQp2b2lkDQpyZWRyYXdfdW5pdih2b2lkKQ0Kew0KCWludCBpOyANCglHYWxh eHkgKmc7DQoNCgl1bml2LnJvdF95ICs9IDAuMDE7DQoJdW5pdi5yb3RfeCAr PSAwLjAwNDsNCg0KCWZvcihpPTAsIGc9dW5pdi5nYWxzOyBpIDwgdW5pdi5u Z2FsczsgaSsrLCBnKyspDQoJCXJlZHJhd19nYWwoZyk7DQoJZm9yKGk9MCwg Zz11bml2LmdhbHM7IGkgPCB1bml2Lm5nYWxzOyBpKyssIGcrKykgew0KCQln LT5vdmVsWzBdID0gZy0+dmVsWzBdOw0KCQlnLT5vdmVsWzFdID0gZy0+dmVs WzFdOw0KCQlnLT5vdmVsWzJdID0gZy0+dmVsWzJdOw0KCQlnLT5vcG9zWzBd ID0gZy0+cG9zWzBdOw0KCQlnLT5vcG9zWzFdID0gZy0+cG9zWzFdOw0KCQln LT5vcG9zWzJdID0gZy0+cG9zWzJdOw0KCX0NCglpZigrK3VuaXYuc3RlcCA+ IHVuaXYuZl9oaXRpdGVyYXRpb25zICogNCkNCgkJc3RhcnRvdmVyKCk7DQp9 DQoNCnZvaWQNCmVyZXNpemVkKGludCBuZXcpDQp7DQoJaWYobmV3ICYmIGdl dHdpbmRvdyhkaXNwbGF5LCBSZWZub25lKSA8IDApDQoJCXN5c2ZhdGFsKCJj YW4ndCByZWF0dGFjaCB0byB3aW5kb3ciKTsNCglkcmF3KHNjcmVlbiwgc2Ny ZWVuLT5yLCBkaXNwbGF5LT5ibGFjaywgbmlsLCBaUCk7DQp9DQoNCnZvaWQN CnNldF9nYWxjb2xvcihpbnQgY29sKQ0Kew0KCWludCBpOw0KCUdhbGF4eSAq ZzsNCg0KCWlmKGNvbCA8IFJBTkRZKQ0KCQlmb3IoaT0wLCBnPXVuaXYuZ2Fs czsgaSA8IHVuaXYubmdhbHM7IGkrKywgZysrKQ0KCQkJZy0+Y29sID0gY29s Ow0KCWVsc2UgaWYoY29sID09IFJBTkRZKQ0KCQlmb3IoaT0wLCBnPXVuaXYu Z2FsczsgaSA8IHVuaXYubmdhbHM7IGkrKywgZysrKQ0KCQkJZy0+Y29sID0g cmFuZCgpJVJBTkRZOw0KCQkNCn0NCg0KTWVudSBybWVudSA9IHsgcmJ0bnMg fSwgbW1lbnUgPSB7IG1idG5zIH07DQpNb3VzZSBtOw0KDQp2b2lkIA0KbWFp bih2b2lkKQ0Kew0KCXZsb25nIHRiZWdpbiwgdGVuZDsNCgl1bG9uZyBmcmFt ZXM9MDsNCgl2b2lkIGluaXQodm9pZCk7DQoJaW50IGNvbDsNCg0KCWluaXQo KTsNCgllaW5pdChFbW91c2UpOw0KCWVyZXNpemVkKDApOw0KCXRiZWdpbiA9 IG5zZWMoKTsNCg0KCWZvcig7Oykgew0KCQlpZihlY2FubW91c2UoKSkgew0K CQkJbSA9IGVtb3VzZSgpOw0KCQkJaWYobS5idXR0b25zJjQpDQoJCQlpZigh ZW1lbnVoaXQoMywgJm0sICZybWVudSkpIHsNCgkJCQl0ZW5kID0gbnNlYygp Ow0KCQkJCXByaW50KCJmcHM6ICV1ZlxuIiwgZnJhbWVzLygodGVuZCAtIHRi ZWdpbikvMTAwMDAwMDAwMC4wKSk7DQoJCQkJZXhpdHMoMCk7DQoJCQl9DQoJ CQlpZihtLmJ1dHRvbnMmMikNCgkJCWlmKChjb2w9ZW1lbnVoaXQoMiwgJm0s ICZtbWVudSkpID49IDApDQoJCQkJc2V0X2dhbGNvbG9yKGNvbG9yPWNvbCk7 DQoJCX0NCgkJcmVkcmF3X3VuaXYoKTsNCgkJZnJhbWVzKys7DQoJfQ0KfQ0K --571241096-1024903052-1024872166=:16321--