This message generated a parse failure. Raw output follows here. Please use 'back' to navigate. From devnull@lkml.org Wed Apr 24 13:33:18 2024 Received: from nic.funet.fi (nic.funet.fi [128.214.248.6]) by herbie.ucs.indiana.edu (8.7.5/8.6.12) with ESMTP id RAA04278 for ; Wed, 4 Dec 1996 17:27:44 -0500 (EST) Received: from vger.rutgers.edu ([128.6.190.2]) by nic.funet.fi with ESMTP id <75299-9742>; Thu, 5 Dec 1996 00:26:39 +0200 Received: by vger.rutgers.edu id <213247-249>; Wed, 4 Dec 1996 17:23:06 -0500 Date: Wed, 4 Dec 1996 17:22:39 -0500 (EST) From: "Richard B. Johnson" To: Linux kernel Subject: TCP/IP Checksumming Message-Id: Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1295196120-1051634761-849738159=:110" Sender: owner-linux-kernel@vger.rutgers.edu Precedence: bulk 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. ---1295196120-1051634761-849738159=:110 Content-Type: TEXT/PLAIN; charset=US-ASCII Okay. The following included MASM program operates in 32-bit protected mode and puts everything back together before returning to MS-DOS in real mode. It will write its saved output to stdout after it gets back to real mode. It tests various TCP/IP checksumming routines for speed. The Linux checksumming routine is included in the program so you can check it against other procedures. Your mileage may very. I tried this on different "Pentiums" and got totally different results. Some machines show a 3:1 difference between finely tuned routines and the simplest. Other machines show 20:1. Some machines, i.e., Gateway$, are not even Pentiums even though purchased as such. The best performing that I tested is a Micronics M55Hi-Plus using a real Pentium at 166 MHz. It shows the about 0x200 clocks for the Linux routine, and about 0x900 clocks for the simplest. It looks as though there are many differences in how the cache controllers perform. At the very least, the included source will unravel some of the mystery about how to get a Pentium into and out of Protected mode with a minumum of fuss. Cheers, Dick Johnson -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Richard B. Johnson Project Engineer Analogic Corporation Voice : (508) 977-3000 ext. 3754 Fax : (508) 532-6097 Modem : (508) 977-6870 Ftp : ftp@boneserver.analogic.com Email : rjohnson@analogic.com, johnson@analogic.com Penguin : Linux version 2.1.13 on an i586 machine. Warning : It's hard to remain at the trailing edge of technology. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ---1295196120-1051634761-849738159=:110 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="chksum.asm" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Q09NTUVOVCAqDQ0KDQ0KCVdyaXR0ZW4gYnkgUmljaGFyZCBCLiBKb2huc29u LCByam9obnNvbkBhbmFsb2dpYy5jb20uDQ0KCUdpdmVuIHRvIHRoZSBMaW51 eCBjb21tdW5pdHkgaW4gaG9wZXMgdGhhdCBzb21lb25lIHdpbGwgZmluZA0N CglhIHVzZSBmb3IgdGhpcyB0b29sLiBUaGlzIHJ1bnMgaW4gMzItYml0IHBy b3RlY3RlZCBtb2RlIG9uIGENDQoJTVMtRE9TIG1hY2hpbmUuIFlvdSBtdXN0 IHJlbW92ZSBhbnkgbWVtb3J5IG1hbmFnZXIgdG8gdXNlIHRoaXMuDQ0KCUhv d2V2ZXIsIHRoaXMgc29mdHdhcmUgd2lsbCBzYXZlIGV2ZXJ5dGhpbmcgYW5k IHJldHVybiB0byBNUy1ET1MNDQoJd2hlbiBpdCBleGl0cyAzMi1iaXQgcHJv dGVjdGVkIG1vZGUuIEl0IHdyaXRlcyBpdHMgcmVzdWx0cyBvdXQNDQoJTVMt RE9TJ3Mgc3RhbmRhcmQgb3V0cHV0IHNvIHlvdSBjYW4gcmVkaXJlY3QgdG8g ZmlsZXMsIGV0Yy4NDQoNDQoJVG8gY29tcGlsZToNDQoJTUFTTSBDSEtTVU07 DQ0KCUxJTksgQ0hLU1VNOw0NCg0NCglJZiB5b3UgdXNlIFRBU00sIHlvdSBo YXZlIHRvIGNoYW5nZSB0aGUgMzItYml0IFRFU1QgaW5zdHJ1Y3Rpb25zDQ0K ICAgICAgICBsaWtlOiAJVEVTVAlFQ1gsKE5PVCAoNjQtMSkpDQ0KCQlKWgku Li4uLi4NDQoJdG86ICAgICBDTVAJRUNYLDY0DQ0KCQlKQUUJLi4uLi4uDQ0K CW9yIHNvbWV0aGluZyBlbHNlIG9yIHRoZSBhc3NlbWJsZXIgd2lsbCBoYW5n IGZvcmV2ZXIuIE5pY2UgdG9vbC4NDQoNDQoJVGhpcyBjb2RlIHRlc3RzIHRo ZSBzcGVlZCBvZiB2YXJpb3VzIFRDUC9JUCBjaGVja3N1bSBtZXRob2RzLg0N CglJdCByZWNvcmRzIHRoZSBhY3R1YWwgbWFjaGluZSBjeWNsZXMgbmVjZXNz YXJ5IHRvIGFjY29tcGxpc2gNDQoJdGFzay4gVGhlIHByb2Nlc3NvciBtYWNo aW5lIGN5Y2xlcyBjb250aW51ZSB0byBhY2N1bXVsYXRlIGV2ZW4NDQoJd2hl biB0aGUgcHJvY2Vzc29yIGlzIEhBTFRFRC4gSXQgaXMsIHRoZXJlZm9yZSwg YSB2ZXJ5IG5pY2Ugd2F5DQ0KCW9mIHRlc3RpbmcgdGhlIHBlcmZvcm1hbmNl IG9mIGFuIGFjdHVhbCByb3V0aW5lIHdpdGhvdXQgaW5mbHVlbmNlDQ0KCWZy b20gb3RoZXIgdGhpbmdzIHRoYXQgdXN1YWxseSBoYXBwZW4gb24gdGhlIHRh cmdldCBtYWNoaW5lLg0NCg0NCglZb3UgY2FuIHJlYWRpbHkgaW5zZXJ0IGNv ZGUgdG8gdGVzdCBvdGhlciB0aGluZ3Mgc3VjaCBhcyBzdHJpbmcNDQoJcHJp bWF0aXZlcyBjYWxsZWQgYnkgdGhlICdDJyBydW50aW1lIGxpYnJhcnkuDQ0K DQ0KCVRoaXMgY29kZSByZXF1aXJlcyBhIFBlbnRpdW0gdG8gb3BlcmF0ZSBi ZWNhdXNlIHRoaXMgY2hpcCBoYXMNDQoJdGhlIGludGVybmFsIGNvdW50ZXIg dGhhdCB3ZSBhY2Nlc3MuIEhvd2V2ZXIgdGhlIHRlc3RpbmcgcmVzdWx0cw0N CglzaG91bGQgYmUgKGFyZSkgc2NhbGFibGUgdG8gb3RoZXIgbWFjaGluZXMu DQ0KDQ0KCVdBUk5JTkchIHNvbWUgZGVtbyBjb2RlIGFzc3VtZXMgdGhhdCBh IFRDUC9JUCBjaGVja3N1bSB3aWxsIGFsd2F5cw0NCgljaGVja3N1bSBhbiBF VkVOIG51bWJlciBvZiBieXRlcy4gQWRkaW5nIGxvZ2ljIGZvciBhbiBleHRy YSBieXRlDQ0KCWl0IHRyaXZpYWwsIGJ1dCB0YWtlcyBDUFUgdGltZSBhcyB3 ZWxsLiBBbGwgVENQL0lQIGJ1ZmZlcnMgQVJFDQ0KCUVWRU4gdG8gc3RhcnQs IGlmIE9ERCwgeW91IGFkZCB0aGUgZXh0cmEgbG9naWMgT05DRSBwZXIgY2Fs bC4NDQoNDQoJTm90ZSB0aGF0IGFsbCByZWZlcmVuY2VzIHRvICJ0aGUgSW50 ZWwgUmFnIiBtZWFuczoNDQoNDQoJCUludGVsNDg2IE1pY3JvcHJvY2Vzc29y IEZhbWlseQ0NCgkJUHJvZ3JhbW1lcidzIFJlZmVyZW5jZSBNYW51YWwNDQoJ CVB1Ymxpc2hlZCBpbiAxOTkyLg0NCgkJT3JkZXIgTm8uIDI0MDQ4Ni0wMDIN DQoNDQoJVGhpcyBib29rIGNvbnRhaW5zIHNldmVyYWwgZXJyb3JzLiBBIHBh cnRpY3VsYXJseSBiYWQgb25lDQ0KCWlzIG9uIHBhZ2UgNS05IHdoZXJlIGl0 IGltcHJvcGVybHkgZGVmaW5lcyAiSW5kZXg6IiBhbmQNDQoJc2F5cyAiVGhl IHByb2Nlc3NvciBtdWx0aXBsaWVzIHRoZSBpbmRleCB2YWx1ZSBieSA4ICh0 aGUNDQoJbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2VnbWVudCBkZXNjcmlwdG9y KSBhbmQgYWRkcyB0aGUgcmVzdWx0DQ0KCXRvIHRoZSBiYXNlIGFkZHJlc3Mu Li4uIi4gVGhpcyBpcyB3cm9uZy4gWU9VLCBpLmUuLCB0aGUgY29kZXIsDQ0K CXBlcmZvcm0gdGhlIG11bHRpcGxpY2F0aW9uIGFuZCB5b3UgYWRkIG5vdGhp bmcuIFRoaXMgbWVhbnMgdGhhdA0NCgl0aGUgZmlyc3QgaW5kZXggaXMgMCwg dGhlIHNlY29uZCBpcyA4LCB0aGUgdGhpcmQgaXMgMTYsIGV0Yy4sDQ0KCWlu c3RlYWQgb2YgMCwgMSwgYW5kIDIgYXMgdGhlIEludGVsIFJhZyBzdGF0ZXMu DQ0KDQ0KCVRoaXMgY29kZSB0cmFuc2l0aW9ucyB0byAzMi1iaXQgbGluZWFy IGFkZHJlc3MgbW9kZSB3aXRoIDMyLWJpdA0NCglpbnN0cnVjdGlvbnMuIEl0 IGRvZXMgaXRzIHRoaW5nLCB0aGVuIHRyYW5zaXRpb25zIGJhY2sgdG8gMTYt Yml0DQ0KCSJyZWFsIiBtb2RlIHRvIGRpc3BsYXkgdGhlIHJlc3VsdHMuIEl0 IGRvZXMgdGhpcyBhbGwgd2l0aG91dA0NCgl0cmFzaGluZyBNUy1ET1MgaWYs IGFuZCBvbmx5IGlmLCB5b3U6DQ0KDQ0KCSgxKQlEbyBOT1QgbG9hZCBhIG1l bW9yeSBtYW5hZ2VyLg0NCgkoMikJRG8gTk9UIGhhdmUgdG9vIG1hbnkgVFNS IHByb2dyYW1zIHdoaWNoIGVhdCBtZW1vcnkuDQ0KDQ0KCUFmdGVyIGl0IGlz IHRocm91Z2gsIGl0IHRyYW5zaXRpb25zIGJhY2sgdG8gdGhlIE1TLURPUyBw cm9tcHQuDQ0KCVRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGVkaXQgYW5kIGNv bXBpbGUgbmV3IHByb2NlZHVyZXMgdG8NDQoJYmUgZXhlY3V0ZWQgaW4gMzIt Yml0IHByb3RlY3RlZCBtb2RlIHVzaW5nIERPUyB0b29scyBhbmQgeW91cg0N CglmYXZvcml0ZSBET1MgZWRpdG9yLg0NCg0NCglNZW1vcnkgaXMgc2V0IHVw IGxpa2UgdGhpczoNDQoNDQoJICAtLSBMb3dlc3QgYWRkcmVzcyAtLQ0NCiAg ICAgIDAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0K ICAgICAgICAgIHwgSW50ZXJydXB0IHRhYmxlLiAgICAgICAgICAgICAgICB8 DQ0KICAgICAgICAgIHwgTVMtRE9TIGJ1ZmZlcnMgYW5kIGNvZGUgICAgICAg ICB8DQ0KICAgICAgMSAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX198IDQwOTYgYnl0ZSBwYWdlcw0NCiAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfA0NCiAgICAgICAgICB8IFVuZGVm aW5lZCB3aGVyZSBET1MgbG9hZGVkIHVzLiAgfA0NCiAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0NCiAgICAgIDIgICB8 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0NCiAgICAgICAg ICB8IFN0YXJ0dXAgY29kZSByZWxvY2F0ZWQgdG8gbmV4dCAgfA0NCiAgICAg ICAgICB8IGF2YWlsYWJsZSBwYWdlIG9uIGEgcGFnZSAgICAgICAgfC0tLS0t DQ0KICAgICAgICAgIHwgYm91bmRhcnkuICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICB8DQ0KICAgICAgTiAgIHxfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX198IDwtLS18DQ0KICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8DQ0KICAgICAgICAgIHwgVmFyaWFibGUg bnVtYmVyIG9mIHBhZ2VzLiAgICAgICB8LS0tLS0gIFN0YXJ0dXAgcmVsb2Nh dGVzDQ0KICAgICAgMTQ0IHxfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX198ICAgICB8IDMyLWJpdCBjb2RlLg0NCiAgICAgICAgICB8IDMyLWJp dCBleGVjdXRlcyBhdCBsaW5lYXIgICAgICAgfCA8LS0tDQ0KICAgICAgICAg IHwgYWRkcmVzcyAweDkwMDAwLiAgVGhpcyBpcyAgICAgICB8DQ0KICAgICAg ICAgIHwgd2hlcmUgQ09NTUFORC5DT00gbm9ybWFsbHkgICAgICB8DQ0KICAg ICAgICAgIHwgbGl2ZXMuIEl0IGlzIGxlZ2FsIHRvIG92ZXJ3cml0ZSB8DQ0K ICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198 DQ0KDQ0KICAgICAgICAgIC0tIEhpZ2hlc3QgYWRkcmVzcyAtLQ0NCg0NCglU aGUgc3RhcnR1cCBjb2RlIHJlbG9jYXRlcyBpdHNlbGYgdG8gdGhlIG5leHQg aGlnaGVzdCBhdmFpbGFibGUNDQoJcGFnZSBvbiBhIHBhZ2UgYm91bmRhcnks IGkuZS4sIDB4MjAwMCwgMHgzMDAwLCAweDQwMDAsIGV0Yy4gVGhpcw0NCglp cyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhIHByb2Nlc3NvciBidWcgKGZlYXR1 cmUpLg0NCg0NCglJdCB0aGVuIHJlbG9jYXRlcyB0aGUgMzItYml0IGFwcGxp Y2F0aW9uIGNvZGUgdG8gcGh5c2ljYWwgYWRkcmVzcw0NCgkweDkwMDAwIHdo ZXJlIHRoZSBNUy1ET1MgY29tbWFuZCBpbnRlcnByZXRlciBub3JtYWxseSBs aXZlcy4gSXQNDQoJaXMgbGVnYWwgdG8gb3ZlcndyaXRlIHRoaXMuIEEgRE9T IHByb2dyYW0gb3ducyBBTEwgbWVtb3J5IGZyb20NDQoJZm9yIHdoZXJlIGl0 J3MgbG9hZGVkIHVwIHRvIHRoZSBlbmQgb2YgMTYtYml0IGFkZHJlc3Npbmcu IEl0DQ0KCW11c3Qgbm90IGNoYW5nZSBzdHVmZiBiZWxvdyBpdCBvciBNUy1E T1MgY2FuJ3QgcmVzdGFydC4NDQoNDQoJVGhlbiB2YXJpb3VzIGRlc2NyaXB0 b3JzIGFyZSBzZXQgdXAgYW5kIGxvYWRlZC4gVGhlIG1hY2hpbmUgdGhlbg0N Cgl0cmFuc2l0aW9ucyB0byBwcm90ZWN0ZWQgMzItYml0IG1vZGUgYW5kIGV4 ZWN1dGVzIHRoZSBhcHBsaWNhdGlvbg0NCgljb2RlLiBUaGlzIGNvZGUgbGVh dmVzIGl0cyByZXN1bHRzIGluIGEgYnVmZmVyIHdoaWNoIGNhbiBiZQ0NCgls b2NhdGVkIGFmdGVyIHRoZSB0cmFuc2l0aW9uIGJhY2sgdG8gcmVhbCBtb2Rl Lg0NCg0NCglBZnRlciB0aGUgYXBwbGljYXRpb24gY29kZSBpcyBleGVjdXRl ZCwgaXQgdHJhbnNpdGlvbnMgdGhyb3VnaA0NCglhIENBTEwgR2F0ZSB0byBh IDE2LWJpdCBwcm9wZXJseSBhbGlnbmVkIHNlZ21lbnQgdG8gZ2V0IGJhY2sg dG8NDQoJdGhlIHN0YXJ0dXAgY29kZS4NDQoNDQoJVGhlbiBhIHRyYW5zaXRp b24gZnJvbSBwcm90ZWN0ZWQgbW9kZSB0byByZWFsIG1vZGUgb2NjdXJzLiBS ZWFsDQ0KCW1vZGUgc2VnbWVudHMgYXJlIHNldCB1cCwgYW5kIGludGVycnVw dHMgYXJlIHR1cm5lZCBiYWNrIG9uLg0NCglUaGUgcmVzdWx0cyBvZiB0aGUg MzItYml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gd3JpdHRlbiB0byBzdGFuZGFy ZA0NCglvdXRwdXQgdXNpbmcgTVMtRE9TLg0NCg0NCglUaGUgY29kZSBleGl0 cyB0byBNUy1ET1MgYXMgdGhvdWdoIHRoaXMgd2FzIGEgbm9ybWFsLCB0cml2 aWFsDQ0KCXByb2dyYW0uDQ0KDQ0KCUlmIHRoZSBERUJVRyB2YXJpYWJsZSBp cyBzZXQsIG91dHB1dCBpcyB3cml0dGVuIHRvIHRoZSBmaXJzdA0NCglDT00g cG9ydCBhdCA5NjAwIGJhdWQsIGFuZCBhbGwgQ09NIHBvcnRzIGluIHByb3Rl Y3RlZCBtb2RlLg0NCg0NCglOb3RlIHRvIGhlbHBmdWwgcGVvcGxlOg0NCglU aGUgTGludXggc291cmNlIHRyZWUgZG9lcyBub3Qgc2VlbSB0byBjb250YWlu IGFueSBpbmZvcm1hdGlvbg0NCglhYm91dCBob3cgdG8gcmV0dXJuIHRvIDE2 LWJpdCByZWFsIG1vZGUuIEl0IGp1c3QgYXNrcyB0aGUNDQoJa2V5Ym9hcmQg Y29udHJvbGxlciB0byBoaXQgdGhlIHJlc2V0IHN3aXRjaC4NDQoNDQoqDQ0K Ow0NCjtERUJVRwlFUVUJMQkJCTsgRm9yIFVBUlQgZGVidWcgb3V0cHV0Lg0N CjsNDQo7LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQo7DQ0K OwlKdXN0IGEgZmV3IE1BQ1JPUyBzaW5jZSB0aGlzIElTIGEgTUFDUk8gYXNz ZW1ibGVyDQ0KOw0NCkZMVVNICU1BQ1JPDQ0KCUxPQ0FMCVgxLCBYMg0NCglK TVAgU0hPUlQgWDENDQpYMToJSk1QIFNIT1JUIFgyDQ0KWDI6DQ0KRU5ETQ0N CjsNDQpBU0NJSQlNQUNSTyBURVhUDQ0KSUZOQgk8VEVYVD4NDQoJREIJJyAg ICcNDQoJREIJJyZURVhUJywwREgsIDBBSA0NCkVMU0UNDQoJREIJMERILCAw QUgNDQpFTkRJRg0NCkVORE0NDQoNDQpFT0wJTUFDUk8NDQoJREIJMA0NCkVO RE0NDQoNDQpJRkRFRglERUJVRw0NCjsNDQo7CVB1dCBhIGJ5dGUgaW4gQUwg b3V0IHRoZSBDT00gcG9ydC4NDQo7DQ0KCVNIT1cJTUFDUk8gQ0hBUg0NCgkJ TU9WCUFMLENIQVINDQoJCUNBTEwJUE9VVA0NCglFTkRNDQ0KRUxTRQ0NCglT SE9XCU1BQ1JPIENIQVINDQoJRU5ETQ0NCkVORElGDQ0KOw0NClBSRUZJWAlN QUNSTw0NCglEQgk2NkgNDQpFTkRNDQ0KOw0NCjsJVGhpcyBtYWtlcyBhIGxp bmVhciBhZGRyZXNzIG91dCBvZiBhIERXT1JEIHBvaW50ZXIuDQ0KOw0NCk1B S0VfUkVBTCBNQUNSTyBCQVNFLCBQT0lOVEVSDQ0KCU1PVglBWCxCQVNFDQ0K CU1PVglDWCwxMEgJCQk7IDE2LWJ5dGUgc2VnbWVudHMNDQoJTVVMCUNYDQ0K SUZOQgk8UE9JTlRFUj4NDQoJQURECUFYLE9GRlNFVCBQT0lOVEVSCTsgU3Vt IHRoZSBvZmZzZXQNDQoJQURDCURYLDAJCQk7IFRha2UgY2FyZSBvZiBDWQ0N CkVORElGDQ0KRU5ETQ0NCjsNDQo7LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS0NDQo7DQ0KOwlMaWtlIGEgJ0MnIHR5cGVkZWYgc3RydWN0Lg0N CjsNDQpUT0RPCVNUUlVDDQ0KRElTUAlERAkJPwkJOyBPZmZzZXQgb2YgY29t bWVudHMgdG8gcHJpbnQNDQpFWEVDCURECQk/CQk7IE9mZnNldCBvZiByb3V0 aW5lIHRvIGNhbGwNDQpUT0RPCUVORFMNDQo7DQ0KQkFTCUVRVQkwCQkJCTsg QmFzZSAoZGF0YSkgcG9ydA0NCklFUglFUVUJMQkJCQk7IEludGVycnVwdCBl bmFibGUgcmVnaXN0ZXINDQpJSVIJRVFVCTIJCQkJOyBJbnRlcnJ1cHQgaWRl bnQgcmVnaXN0ZXINDQpMQ1IJRVFVCTMJCQkJOyBMaW5lIGNvbnRyb2wgcmVn aXN0ZXINDQpNQ1IJRVFVCTQJCQkJOyBNb2RlbSBjb250cm9sIHJlZ2lzdGVy DQ0KTFNSCUVRVQk1CQkJCTsgTGluZSBzdGF0dXMgcmVnaXN0ZXINDQpNU1IJ RVFVCTYJCQkJOyBNb2RlbSBzdGF0dXMgcmVnaXN0ZXINDQoNDQpQT1JUMQlF UVUJM0Y4SAkJCQk7IENPTTEgVUFSVCBiYXNlIGFkZHJlc3MNDQpDT0RFCUVR VQk4CQkJCTsgRGVmYXVsdCBjb2RlIHNlZ21lbnQNDQpEQVRBCUVRVQkxNgkJ CQk7IERlZmF1bHQgZGF0YSBzZWdtZW50DQ0KQVBQTEMJRVFVCTI0CQkJCTsg QXBwbGljYXRpb24gY29kZQ0NCkFQUExECUVRVQkzMgkJCQk7IEFwcGxpY2F0 aW9uIGRhdGENDQpBUFBMUwlFUVUJNDAJCQkJOyBBcHBsaWNhdGlvbiBzdGFj aw0NCk5PTkNTCUVRVQk0OAkJCQk7IDE2LWJpdCBub25jb25mb3JtaW5nIGNv ZGUNDQpCQUNLCUVRVQk1NgkJCQk7IEhvdyB0byBnZXQgYmFjaw0NCkRPUwlF UVUJNjQJCQkJOyBET1Mgc2VnbWVudA0NCjsNDQo7DQ0KOy09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOw0NCjsgICBHb2luZyB0byBuZWVk IHRvIG1ha2UgRkFSIGNhbGxzLiBOZWVkIHRvIG1ha2UgYW4gIi5FWEUiIGZp bGUgdG8gbWFrZQ0NCjsgICBpdCBlYXNpZXIuIFdlIGFjdHVhbGx5IHNldCBv dXIgb3duIHN0YWNrIGJlZm9yZSB1c2UsIHNvIHdlIGRlZmluZQ0NCjsgICBv bmx5IGEgc2luZ2xlIHdvcmQgb2Ygc3RhY2sgYXJlYS4gVGhpcyBwcmV2ZW50 cyB0aGUgbG9hZGVyIGZyb20NDQo7ICAgYWxsb2NhdGluZyBhIGRlZmF1bHQt c2l6ZWQgc3RhY2sgd2hpY2ggd2lsbCB3YXN0ZSBtZW1vcnkuDQ0KOw0NClNU SwlTRUdNRU5UIFBBUkEgU1RBQ0sgJ1NUQUNLJw0NCglEVwk/DQ0KU1RLCUVO RFMNDQo7DQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0K Ow0NCjsJVGhpcyBpcyB3aGVyZSB0aGUgMzItYml0IGNvZGUgYW5kIGRhdGEg d2lsbCBsaXZlLg0NCjsNDQpSRUxPQwlTRUdNRU5UCUFUIDkwMDBIDQ0KCUFT U1VNRSAgQ1M6UkVMT0MsIERTOk5PVEhJTkcsIEVTOk5PVEhJTkcsIFNTOk5P VEhJTkcNDQpSRUxPQwlFTkRTDQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tDQ0KOw0NCjsJVGhpcyBpcyB0aGUgc3RhcnR1cCBhbmQgcnVu ZG93biBjb2RlLg0NCjsNDQpNQUlOCVNFR01FTlQJUEFSQSBQVUJMSUMgJ0ZJ UlNUJw0NCglBU1NVTUUJQ1M6TUFJTiwgRFM6TUFJTiwgRVM6TUFJTiwgU1M6 U1RLDQ0KU1RBUlRVUAlQUk9DCU5FQVINDQoJSk1QCUJZUEFTUw0NCjsNDQo7 CVRoaXMgaXMgaG93IHRoZSBtYWluIEdEVCBlbnRyaWVzIGFyZSBvcmdhbml6 ZWQNDQo7DQ0KOwlEVwkxMDAxMDAxMDAwMDAwMDAwQg0NCjsgICAgICAgICAg ICAgICB8fHx8fHx8fHx8fHx8fHx8X19fXyBNb3JlIGJhc2UgYWRkcmVzcyAy MzoxNg0NCjsgICAgICAgICAgICAgICB8fHx8fHx8fF9fX19fX19fX19fXyB0 eXBlIChkYXRhIFIvVykNDQo7ICAgICAgICAgICAgICAgfHx8fF9fX19fX19f X19fX19fX18gU3lzdGVtIHNlZ21lbnQNDQo7ICAgICAgICAgICAgICAgfHx8 X19fX19fX19fX19fX19fX18gUHJpdiBsZXZlbCAoMCkNDQo7ICAgICAgICAg ICAgICAgfF9fX19fX19fX19fX19fX19fX18gU2VnbWVudCBwcmVzZW50DQ0K Ow0NCjsNDQo7CURXCTAwMDAwMDAwMTExMTExMTFCDQ0KOyAgICAgICAgICAg ICAgIHx8fHx8fHx8fHx8fHx8fHxfX19fIE1vcmUgbGltaXQgMTk6MTYNDQo7 ICAgICAgICAgICAgICAgfHx8fHx8fHx8fHx8X19fX19fX18gQXZhaWxhYmxl IGZvciB1c2UNDQo7ICAgICAgICAgICAgICAgfHx8fHx8fHx8fHxfX19fX19f X18gU2VnbWVudCBzaXplICgzMi1CaXQpDQ0KOyAgICAgICAgICAgICAgIHx8 fHx8fHx8fHxfX19fX19fX19fIENvZGUgc2l6ZSBzaXplIDAgPSAxNiwgMSA9 IDMyLWJpdA0NCjsgICAgICAgICAgICAgICB8fHx8fHx8fHxfX19fX19fX19f XyBHcmFudWxhcml0eSAoNDA5NikNDQo7ICAgICAgICAgICAgICAgfHx8fHx8 fHxfX19fX19fX19fX18gTW9yZSBiYXNlIDI0OjMxDQ0KOw0NCg0NCkFMSUdO CTEwSA0NCjstPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0NCjsN DQo7CVRoaXMgaXMgdGhlIHJlYWwgR0RULiBJdCBpcyBOT1QgaW5kZXhlZCBi eSA4IHdoZW4gYSBzZWdtZW50DQ0KOwkoc2VsZWN0b3IpIGlzIGxvYWRlZC4g VGhlcmVmb3JlIHNlbGVjdG9ycyBhcmUgbnVtYmVyZWQNDQo7CTAsIDgsIDE2 LCBldGMuDQ0KOw0NCkdEVAlEVwkwCQk7IER1bW15ICBTZWdtZW50ID0gMDsN DQoJRFcJMA0NCglEVwkwDQ0KCURXCTANDQoJCQkJOyBTZWdtZW50ID0gOA0N CglEVwkwRkZGRkgJCTsgOE1iLCBsaW1pdCA9IDIwNDcNDQoJRFcJMDAwMEgJ CTsgQmFzZSBhZGRyZXNzID0gMA0NCglEVwk5QTAwSAkJOyBDb2RlIHJlYWQv ZXhlY3V0ZQ0NCglEVwkwMENGSAkJOyBHcmFudWxhcml0eSA9IDQwOTYsIDM4 Ng0NCgkJCQk7IFNlZ21lbnQgPSAxNg0NCglEVwkwRkZGRkgJCTsgOE1iLCBs aW1pdCA9IDIwNDcNDQoJRFcJMDAwMEgJCTsgQmFzZSBhZGRyZXNzID0gMTU6 MA0NCglEVwk5MjAwSAkJOyBEYXRhIHJlYWQvd3JpdGUNDQoJRFcJMDBDRkgJ CTsgR3JhbnVsYXJpdHk9NDA5Ng0NCjsNDQo7CVRoZSBmb2xsb3dpbmcgaXMg c3VwcG9zZWQgdG8gZGVmaW5lIHRoZSBjb2RlLCBkYXRhIGFuZCBzdGFjaw0N CjsJc2VnbWVudHMgdG8gYmUgdXNlZCBmb3IgdGhlIHByb2NlZHVyZSBiZWlu ZyBjYWxsZWQuIFRoZXkgYXJlDQ0KOwkzMi1iaXQgYWRkcmVzc2luZyB3aXRo IDMyLWJpdCBjb2RlLg0NCjsNDQoJCQkJOyBTZWdtZW50IDI0DQ0KCURXCTBG RkZGSAkJOyBHaWdhbnRpYyBsaW1pdA0NCkJfQUREQwlEVwkwMDAwSAkJOyBC YXNlIGFkZHJlc3MgPSA5MDAwMEgNDQpCX0FESEMJRFcJOUEwMEgJCTsgQ29k ZSByZWFkL2V4ZWN1dGUgKGFuZCBtb3JlIGJhc2UgYWRkcmVzcykNDQoJRFcJ MDBGRkgJCTsgR3JhbnVsYXJpdHk9NDA5NiwgMzg2DQ0KCQkJCTsgU2VnbWVu dCA9IDMyDQ0KCURXCTBGRkZGSAkJOyBHaWdhbnRpYyBsaW1pdA0NCkJfQURE RAlEVwkwMDAwSAkJOyBCYXNlIGFkZHJlc3MgPSA5MDAwMEgNDQpCX0FESEQJ RFcJOTIwMEgJCTsgRGF0YSByZWFkL3dyaXRlIChhbmQgbW9yZSBiYXNlIGFk ZHJlc3MpDQ0KCURXCTAwRkZICQk7IEdyYW51bGFyaXR5PTQwOTYsIDM4Ng0N CgkJCQk7IFNlZ21lbnQgPSA0MA0NCglEVwkwRkZGRkgJCTsgR2lnYW50aWMg bGltaXQNDQpCX0FERFMJRFcJMDAwMEgJCTsgQmFzZSBhZGRyZXNzID0gOTAw MDBIDQ0KQl9BREhTCURXCTkyMDBICQk7IERhdGEgcmVhZC93cml0ZSAoYW5k IG1vcmUgYmFzZSBhZGRyZXNzKQ0NCglEVwkwMEZGSAkJOyBHcmFudWxhcml0 eT00MDk2LCAzODYNDQo7DQ0KOwlUaGlzIHNlbGVjdG9yIGlzIHVzZWQgdG8g Z2V0IGJhY2sgdG8gMTYtYml0IGNvZGUgd2l0aCAxNi1iaXQNDQo7CW9mZnNl dHMgYW5kIDE2LWJpdCBzZWdtZW50cy4NDQo7DQ0KCQkJCTsgU2VnbWVudCA9 IDQ4DQ0KCURXCTBGRkZGSAkJOyBsaW1pdCA9IDY0aw0NClJfQkFTTAlEVwkw MDAwSAkJOyBCYXNlIGFkZHJlc3MgPSBSZWxvY2F0ZWQgc2VnbWVudA0NClJf QkFTSAlEVwk5QTAwSAkJOyBDb2RlIHJlYWQvZXhlY3V0ZSAoYW5kIG1vcmUg YmFzZSBhZGRyZXNzKQ0NCglEVwkwMDAwMDAwMDAwMDEwMDAwQg0NCjsgICAg ICAgICAgICAgICB8fHx8fHx8fHx8fHx8fHx8X19fXyBNb3JlIGxpbWl0IDE5 OjE2DQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8fHx8fF9fX19fX19fIEF2 YWlsYWJsZSBmb3IgdXNlDQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8fHx8 X19fX19fX19fIFNlZ21lbnQgc2l6ZSAwID0gMTYtYml0DQ0KOyAgICAgICAg ICAgICAgIHx8fHx8fHx8fHxfX19fX19fX19fIENvZGUgc2l6ZSAwID0gMTYt Yml0DQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8fF9fX19fX19fX19fIEdy YW51bGFyaXR5IEJ5dGUgZ3JhbnVsYXJpdHkNDQo7ICAgICAgICAgICAgICAg fHx8fHx8fHxfX19fX19fX19fX18gTW9yZSBiYXNlIDI0OjMxDQ0KOw0NCjsJ VGhpcyBpcyBhICdDQUxMJyBHYXRlLiBJdCBpcyB1c2VkIHRvIGdldCBiYWNr IHRvIDE2LWJpdA0NCjsJc2VnbWVudHMgc28gd2UgY2FuIHJldHVybiB0byBy ZWFsIG1vZGUuDQ0KOw0NCgkJCQk7IFNlZ21lbnQgNTYNDQpSX0FEREwJRFcJ MDAwMEgJCTsgT2Zmc2V0IGluIHNlZ21lbnQgTE9XIHdvcmQNDQoJRFcJTk9O Q1MJCTsgU2VnbWVudCBzZWxlY3RvciAoTm9uIGNvbmZvcm1pbmcpDQ0KCURC CTAwSAkJOyBEV09SRCBjb3VudCAobm8gcGFyYW1ldGVycyBwYXNzZWQpDQ0K CURCCTEwMDAxMTAwQgk7IFNob3cgaXQncyBhIENBTEwgZ2F0ZSwgc2VnbWVu dCBwcmVzZW50DQ0KUl9BRERICURXCTAwMDBICQk7IE1vcmUgb2Zmc2V0IEhJ R0ggd29yZA0NCjsNDQo7CVRoaXMgZGVmaW5lcyB0aGUgZGF0YSBhbmQgc3Rh Y2sgc2VnbWVudHMgdXNlZCBpbiAxNi1iaXQgcmVhbCBtb2RlDQ0KOwlzbyB3 ZSBoYXZlIHZhbGlkIGRlc2NyaXB0b3JzIHdoZW4gcmV0dXJuaW5nIHRvIHJl YWwgbW9kZS4NDQo7DQ0KCQkJCTsgU2VnbWVudCA9IDY0IChET1Mgc2VnbWVu dCkNDQoJRFcJMEZGRkZICQk7IGxpbWl0ID0gNjRrDQ0KCURXCTAwMDBICQk7 IEJhc2UgYWRkcmVzcyA9IDANDQoJRFcJOTIwMEgJCTsgUmVhZGFibGUgLyB3 cml0YWJsZQ0NCglEVwkwMDAwMDAwMDAwMDEwMDAwQg0NCjsgICAgICAgICAg ICAgICB8fHx8fHx8fHx8fHx8fHx8X19fXyBNb3JlIGxpbWl0IDE5OjE2DQ0K OyAgICAgICAgICAgICAgIHx8fHx8fHx8fHx8fF9fX19fX19fIEF2YWlsYWJs ZSBmb3IgdXNlDQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8fHx8X19fX19f X19fIFNlZ21lbnQgc2l6ZSAoMzItQml0KQ0NCjsgICAgICAgICAgICAgICB8 fHx8fHx8fHx8X19fX19fX19fXyBDb2RlIHNpemUgMCA9IDE2LCAxID0gMzIt Yml0DQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8fF9fX19fX19fX19fIEdy YW51bGFyaXR5IGJ5dGVzDQ0KOyAgICAgICAgICAgICAgIHx8fHx8fHx8X19f X19fX19fX19fIE1vcmUgYmFzZSAyNDozMQ0NCjsNDQoNDQpMSU1JVAlFUVUJ KCQgLSBHRFQpIC0gMQ0NCjstPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LQ0NCjsNDQo7CVRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIEdEVCB0 aGF0IGlzIGxvYWRlZCB3aXRoIHRoZSBMREdUDQ0KOwlpbnN0cnVjdGlvbi4g VGhlIGZpcnN0IFdPUkQgZWxlbWVudCBpcyB0aGUgbnVtYmVyIG9mIHJlYWwg R0RUDQ0KOwllbnRyaWVzIC0gMS4gVGhlIHNlY29uZCBEV09SRCBlbGVtZW50 IGlzIHRoZSBsaW5lYXIgYWRkcmVzcw0NCjsJb2YgdGhlIHJlYWwgR0RULg0N CjsNDQpBTElHTgkxMEgNDQpHRFRfNDg2CQlEVwlMSU1JVAkJOyAoR0RUIGVu dHJpZXMgKiA4KSAtMQ0NCkdEVF9MT1cJCURXCT8JCTsgTG93IHdvcmQgb2Yg R0RUDQ0KR0RUX0hJRwkJRFcJPwkJOyBIaWdoIERXT1JEIG9mIEdEVA0NCgkJ REQJMA0NCjstPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0NCjsN DQo7CUhlcmUgd2Ugc2F2ZSB0aGUgb2xkIGludGVycnVwdCBkZXNjcmlwdG9y IHRhYmxlIHRvIGJlIHJlc3RvcmVkDQ0KOwl3aGVuIHdlIHJldHVybiB0byAx Ni1iaXQgcmVhbCBtb2RlLg0NCjsNDQpBTElHTgkxMEgNDQpPTERfSURUCQlE Vwk/CQk7IE9sZCBpbnRlcnJ1cHQgZGVzY3JpcHRvciBsaW1pdA0NCk9MRF9J RFRfTE9XCURXCT8JCTsgT2xkIGludGVycnVwdCBkZXNjcmlwdG9yIGJhc2UN DQpPTERfSURUX0hJRwlEVwk/DQ0KCQlERAkwCQk7IER1bW15DQ0KOy09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOw0NCjsJVGhpcyBpbnRl cnJ1cHQgZGVzY3JpcHRvciB0YWJsZSBpcyB1c2VkIGR1cmluZyAzMi1iaXQg bW9kZQ0NCjsJdG8gZGlzYWJsZSBldmVuIHNvZnR3YXJlIGludGVycnVwdHMu DQ0KOw0NCkFMSUdOCTEwSA0NCk5FV19JRFQJCURXCTAJCTsgT2xkIGludGVy cnVwdCBkZXNjcmlwdG9yIGxpbWl0DQ0KTkVXX0lEVF9MT1cJRFcJMAkJOyBP bGQgaW50ZXJydXB0IGRlc2NyaXB0b3IgYmFzZQ0NCk5FV19JRFRfSElHCURX CTANDQoJCURECTAJCTsgRHVtbXkNDQo7LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS0NDQo7DQ0KQllQQVNTOglNT1YJQVgsQ1MJCQk7IEdldCB3 aGVyZSBET1MgcHV0IHVzDQ0KCU1PVglEUyxBWAkJCTsgTWFrZSBhbGwgc3Vy ZSBzZWdtZW50cyBhcmUgc2V0Lg0NCglNT1YJRVMsQVgNDQoJTU9WCVNTLEFY DQ0KCU1PVglTUCxPRkZTRVQgTENMX1NUSwk7IFN0YWNrIHdoZXJlIHdlIGtu b3cgaXQgaXMuDQ0KOw0NCjsJV2Ugd2lsbCBub3cgdHJ5IHRvIGZpbmQgYSBz ZWdtZW50IEFCT1ZFIHVzIHRoYXQgbGllcyBvbiBhDQ0KOwlwYWdlIGJvdW5k YXJ5Lg0NCjsNDQoJTU9WCUFYLENTDQ0KCUFERAlBWCwxMDAwSAkJOyBQb3Nz aWJsZSA2NGsgZm9yIG91ciBjb2RlDQ0KCUFERAlBWCwxMDAwSAkJOyBQb3Nz aWJsZSA2NGsgZm9yIHRoZWlyIGNvZGUNDQoJQU5ECUFYLDBGMDAwSAkJOyBF dmVuIHBhZ2VzDQ0KCU1PVglXT1JEIFBUUiBCT1RUT00sQVgJOyBVc2UgdGhp cyBmb3IgdGhlIGJvdHRvbSBhZGRyZXNzDQ0KCUNMSQkJCQk7IE5vIGludGVy cnVwdHMgZnJvbSBub3cgb24uDQ0KCUNMRAkJCQk7IEZvcndhcmRzDQ0KSUZE RUYJREVCVUcNDQoJQ0FMTAlJTkk4MjUwCQkJOyBJbml0aWFsaXplIHRoZSBV QVJUDQ0KRU5ESUYNDQoJU0hPVwknQScNDQo7DQ0KCUlOCUFMLDBBMUgJCQk7 IEdldCBvbGQgaW50ZXJydXB0IG1hc2sNDQoJTU9WCUJZVEUgUFRSIElOVENf SElHLEFMCTsgU2F2ZSBvbGQgaW50ZXJydXB0IG1hc2sNDQoJTU9WCUFMLDBG RkgJCQk7IE1hc2sgb2ZmIGFsbCBpbnRlcnJ1cHRzDQ0KCU9VVAkwQTFILEFM CQkJOyBTZWNvbmQgY29udHJvbGxlcg0NCglJTglBTCwyMUgJCQk7IEdldCBv bGQgaW50ZXJydXB0IG1hc2sNDQoJTU9WCUJZVEUgUFRSIElOVENfTE9XLEFM CTsgU2F2ZSBvbGQgaW50ZXJydXB0IG1hc2sNDQoJTU9WCUFMLDBGRkgJCQk7 IEZpcnN0IGNvbnRyb2xsZXINDQoJT1VUCTIxSCxBTA0NCjsNDQoJTU9WCUFM LDgwSAkJCTsgU2V0IGhpZ2ggYml0IG9mIGluZGV4Lg0NCglPVVQJNzBILEFM CQkJOyBEaXNhYmxlIE5NSQ0NCjsNDQo7CUZpcnN0IEkgd2lsbCByZWxvY2F0 ZSB0aGUgMzItYml0IGNvZGUgdG8gaGlnaGVyIG1lbW9yeSwgYWxpZ25lZA0N CjsJb24gYSBwYWdlIGJvdW5kYXJ5LiBTaW5jZSB0aGlzIGlzIGFib3ZlIHVz LCB3ZSBjYW4gY29weSBmb3J3YXJkcw0NCjsJd2l0aG91dCB3b3JyeWluZyBh Ym91dCBvdmVybGFwLg0NCjsNDQoJTU9WCUFYLFJFTE9DCQk7IFNlZ21lbnQg d2Ugd2lsbCBjb3B5IHRvDQ0KCU1PVglFUyxBWAkJCTsgU2V0IHRoZSBzZWdt ZW50DQ0KCU1PVglBWCxQU0VHCQkJOyBTZWdtZW50IHdlIHdpbGwgY29weSBm cm9tDQ0KCU1PVglEUyxBWAkJCTsgU2V0IHRoZSBzZWdtZW50DQ0KCVhPUglT SSxTSQkJCTsgV2hlcmUgd2UgZ2V0IHRoZSBjb2RlDQ0KCVhPUglESSxESQkJ CTsgV2hlcmUgd2UgcHV0IHRoZSBjb2RlDQ0KCU1PVglDWCwgKE9GRlNFVCBQ U0VHOlRPUCAtIE9GRlNFVCBQU0VHOkhPTUUpDQ0KCUlOQwlDWAkJCTsgTmVl ZCB0byBtYWtlIGV2ZW4NDQoJU0hSCUNYLDEJCQk7IE1ha2Ugd29yZHMNDQoJ UkVQCU1PVlNXCQkJOyBDb3B5IHRoZSBkYXRhDQ0KCU1PVglBWCxDUwkJCTsg R2V0IGN1cnJlbnQgc2VnbWVudA0NCglNT1YJRFMsQVgJCQk7IFNldCB0aGUg c2VnbWVudHMNDQoJTU9WCUVTLEFYCQkJOyBTZXQgdGhlIHNlZ21lbnRzDQ0K DQ0KCVNIT1cJJ0InDQ0KOw0NCjsJRHVlIHRvIHNvbWUgcHJvY2Vzc29yIGJ1 ZywgSSBoYXZlIHRvIG1vdmUgdGhpcyBzdHVmZiB0byBhbiANDQo7CWFkZHJl c3Mgd2hlcmUgdGhlcmUgaXMgYSAxOjEgcGh5c2ljYWwgdG8gbG9naWNhbCB0 cmFuc2xhdGlvbi4NDQo7CWkuZS4sIGFsaWduZWQgb24gYSBwYWdlLiBJIHdp bGwgcmVsb2NhdGUgdGhlIGNvZGUgYW5kIEdEVCB0bw0NCjsJdGhpcyBhcmVh IGFuZCB0aGVuIG1ha2UgYSBGQVIgY2FsbCB0byB0aGUgcHJvY2VkdXJlIHRv IHNldCBpdCB1cC4NDQo7CTM4NiBwcm9jZXNzb3JzIGRvbid0IHJlcXVpcmUg dGhpcyBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgdXNlDQ0KOwl0aGUgb2Zmc2V0 IGVudHJpZXMgaW4gdGhlIEdEVC4NDQo7DQ0KCU1PVglBWCxXT1JEIFBUUiBC T1RUT00JOyBTZWdtZW50IHdlIHdpbGwgY29weSB0bw0NCglNT1YJRVMsQVgJ CQk7IFNldCB0aGUgc2VnbWVudA0NCglNT1YJQVgsTUFJTgkJCTsgU2VnbWVu dCB3ZSB3aWxsIGNvcHkgZnJvbQ0NCglNT1YJRFMsQVgJCQk7IFNldCB0aGUg c2VnbWVudA0NCglYT1IJU0ksU0kJCQk7IFdoZXJlIHdlIGdldCB0aGUgY29k ZQ0NCglYT1IJREksREkJCQk7IFdoZXJlIHdlIHB1dCB0aGUgY29kZQ0NCglN T1YJQ1gsIChPRkZTRVQgTUFJTjpTQVZFX1NUVUZGIC0gT0ZGU0VUIE1BSU46 U1RBUlRVUCkNDQoJSU5DCUNYCQkJOyBOZWVkIHRvIG1ha2UgZXZlbg0NCglT SFIJQ1gsMQkJCTsgTWFrZSB3b3Jkcw0NCglSRVAJTU9WU1cJCQk7IENvcHkg dGhlIGRhdGENDQoJTU9WCUFYLENTCQkJOyBHZXQgY3VycmVudCBzZWdtZW50 DQ0KCU1PVglEUyxBWAkJCTsgU2V0IHRoZSBzZWdtZW50cw0NCglNT1YJRVMs QVgJCQk7IFNldCB0aGUgc2VnbWVudHMNDQoJU0hPVwknQycNDQoJTU9WCUFY LFdPUkQgUFRSIEJPVFRPTQk7IFNlZ21lbnQgb2YgcmVsb2NhdGVkIGNvZGUN DQoJUFVTSAlBWAkJCTsgUHV0IHRoYXQgb24gdGhlIHN0YWNrDQ0KCU1PVglB WCxPRkZTRVQgR09UTwkJOyBPZmZzZXQgb2YgdGhlIHJlbG9jYXRlZCBjb2Rl DQ0KCVBVU0gJQVgJCQk7IFB1dCB0aGF0IG9uIHRoZSBzdGFjaw0NCglSRVRG CQkJCTsgRkFSICdyZXR1cm4nIHRvIHRoZSByZWxvY2F0ZWQgY29kZQ0NCglI TFQNDQo7DQ0KOwlUaGlzIGNvZGUgaXMgbm93IGV4ZWN1dGluZyBvdXQgb2Yg dGhlIHJlbG9jYXRlZCBsb2NhdGlvbiwgaS5lLiwNDQo7CXRoZSBuZXh0IHBh Z2UgYWJvdmUgd2hlcmUgd2Ugd2VyZSBsb2FkZWQgYnkgTVMtRE9TDQ0KOw0N CkdPVE86CU1PVglBWCxDUwkJCTsgVGhpcyBpcyB3aGVyZSB3ZSBhcmUNDQoJ TU9WCURTLEFYCQkJOyBNYWtlIHN1cmUgc2VnbWVudHMgYXJlIHNldC4NDQoJ TU9WCUVTLEFYDQ0KCU1PVglTUyxBWAkJCTsgVGhlIHN0YWNrLXBvaW50ZXIg aXMgc3RpbGwgbGV2ZWwuDQ0KCVNIT1cJJ0QnCQkJOyBTaG93IHRoZSB3b3Js ZCB3ZSBnb3QgaGVyZQ0NCjsNDQo7CUdldCB0aGUgbGluZWFyIGFkZHJlc3Mg b2YgdGhlIHJlbG9jYXRlZCBjb2RlIGFuZCBmaXggdGhlDQ0KOwlhZGRyZXNz ZXMgaW4gdGhlIGRpc2NyaXB0b3JzDQ0KOw0NCglNQUtFX1JFQUwgUkVMT0MN DQoJTU9WCVdPUkQgUFRSIEJfQUREQyxBWAk7IEJhc2UgYWRkcmVzcyBmb3Ig ZGF0YQ0NCglNT1YJV09SRCBQVFIgQl9BRERELEFYCTsgQmFzZSBhZGRyZXNz IGZvciBjb2RlDQ0KCU1PVglXT1JEIFBUUiBCX0FERFMsQVgJOyBCYXNlIGFk ZHJlc3MgZm9yIHN0YWNrDQ0KOw0NCglPUglXT1JEIFBUUiBCX0FESEMsRFgJ OyBGaXggdXAgaGlnaCB3b3JkDQ0KCU9SCVdPUkQgUFRSIEJfQURIRCxEWAk7 IEZpeCB1cCBoaWdoIHdvcmQNDQoJT1IJV09SRCBQVFIgQl9BREhTLERYCTsg Rml4IHVwIGhpZ2ggd29yZA0NCjsNDQoJTUFLRV9SRUFMIDxXT1JEIFBUUiBb Qk9UVE9NXT4NDQoJTU9WCVdPUkQgUFRSIFJfQkFTTCxBWAk7IFNldCBsb3cg YmFzZSBhZGRyZXNzDQ0KCU9SCVdPUkQgUFRSIFJfQkFTSCxEWAk7IFNldCBo aWdoIGJhc2UgYWRkcmVzcw0NCglNT1YJV09SRCBQVFIgUl9BRERMLE9GRlNF VCBEUk9QCTsgU2V0IGFkZHJlc3MsIGxvdyB3b3JkDQ0KCU1PVglXT1JEIFBU UiBSX0FEREgsMAk7IFNldCBhZGRyZXNzLCBoaWdoIHdvcmQNDQoJTU9WCVdP UkQgUFRSIERST1BDUyxDUwk7IFNldCB1cCBqdW1wIHNlZ21lbnQNDQo7DQ0K OwlHZXQgdGhlIGxpbmVhciBhZGRyZXNzIG9mIHRoZSBHRFQgYmFzZSBhbmQg Zml4IHRoZSBhZGRyZXNzDQ0KOwlpbiB0aGUgZGlzY3JpcHRvci4NDQo7DQ0K CU1BS0VfUkVBTCBDUywgR0RUDQ0KCU1PVglXT1JEIFBUUiBHRFRfTE9XLEFY DQ0KCU1PVglXT1JEIFBUUiBHRFRfSElHLERYDQ0KOw0NCjsJTm93IGxvYWQg dGhlIEdsb2JhbCBkaXNjcmlwdG9yIHRhYmxlLiBXZSB3aWxsIGFsc28gc2F2 ZSB0aGUNDQo7CWN1cnJlbnQgc3RhdGUgb2YgdGhlIElEVCBzbyB3ZSBjYW4g cmVzdG9yZSBpdCB3aGVuIHdlIHJldHVybg0NCjsJdG8gMTYtYml0IHJlYWwg bW9kZS4NDQo7DQ0KLjM4NlANDQoJU0lEVAlGV09SRCBQVFIgT0xEX0lEVAk7 IFNhdmUgb2xkIGludGVycnVwdCBkZXNjcmlwdG9yDQ0KCUxJRFQJRldPUkQg UFRSIE5FV19JRFQJOyBMb2FkIG5ldyBpbnRlcnJ1cHQgZGVzY3JpcHRvcg0N CglMR0RUCUZXT1JEIFBUUiBHRFRfNDg2CTsgTG9hZCB0aGUgR0RUDQ0KCVNI T1cJJ0UnCQkJOyBTaG93IHRoZSB3b3JsZCB3ZSBnb3QgaGVyZQ0NCjsNDQo7 CU5vdyAgZW5hYmxlIEEyMC4gVGhlIGtleWJvYXJkIGNoaXAgaXMgYWN0dWFs bHkgYSBtaWNyb3Byb2Nlc3Nvcg0NCjsJdGhhdCBpcyBzb21ldGltZXMgJ3N0 aWNreScgc28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGJpdCBkb2VzDQ0K OwlnZXQgY29ubmVjdGVkLg0NCjsNDQoJWE9SCUNYLENYDQ0KSUJFMDoJSU4J QUwsNjRIDQ0KCVRFU1QJQUwsMDJIDQ0KCUxPT1BOWglJQkUwDQ0KCU1PVglB TCwwRDFIDQ0KCU9VVAk2NEgsQUwNDQoJWE9SCUNYLENYDQ0KSUJFMToJSU4J QUwsNjRIDQ0KCVRFU1QJQUwsMDJIDQ0KCUxPT1BOWglJQkUxDQ0KCU1PVglB TCwwREZICQkJOyBFbmFibGUgYml0IDIwDQ0KCU9VVAk2MEgsQUwNDQoJWE9S CUNYLENYDQ0KSUJFMjoJSU4JQUwsNjRIDQ0KCVRFU1QJQUwsMDJIDQ0KCUxP T1BOWglJQkUyDQ0KCVNIT1cJJ0YnDQ0KOw0NCjsJTm93IGdvIGludG8gcHJv dGVjdGVkIG1vZGUuIEludGVsIHNheXMgdGhhdCAnTE1TVycgaXMgb2Jzb2xl dGUgc28NDQo7CXdlIHVzZSB0aGUgbG9uZ3dvcmQgbW92ZSBpbnN0cnVjdGlv bi4NDQo7DQ0KCU1PVglFQVgsQ1IwCQkJOyBHZXQgbWFjaGluZSBzdGF0dXMg d29yZA0NCglPUglFQVgsMUgJCQk7IFNldCBQRSBiaXQNDQoJTU9WCUNSMCxF QVgJCQk7IFRoaXMgcHV0cyB1cyBpbnRvIHByb3RlY3RlZCBtb2RlDQ0KCUZM VVNIDQ0KOw0NCglNT1YJRUFYLEFQUExECQk7IEFwcGxpY2F0aW9uIGRhdGEg ZGVzY3JpcHRvcg0NCglNT1YJRFMsRUFYCQkJOyBTZXQgc2VnbWVudHMgYmVm b3JlIHRyYW5zZmVyDQ0KCU1PVglFUyxFQVgNDQoJTU9WCUZTLEVBWA0NCglN T1YJR1MsRUFYDQ0KCU1PVglFQVgsQVBQTFMJCTsgQXBwbGljYXRpb24gc3Rh Y2sgZGVzY3JpcHRvcg0NCglNT1YJU1MsRUFYDQ0KCU1PVglFU1AsT0ZGU0VU IFBTRUc6TVNUQUNLCTsgU2V0IGFwcGxpY2F0aW9uIHN0YWNrDQ0KOw0NCjsJ VGhpcyB3aWxsIG1ha2UgYSBGQVIganVtcCB0aHJvdWdoIHRoZSBkZXNjcmlw dG9yIHRvIHRoZSBhcHBsaWNhdGlvbg0NCjsJY29kZS4gU2luY2Ugd2UgZG9u J3QgdXNlIGEgQ0FMTCBnYXRlLCB0aGUgb2Zmc2V0IGlzIGlnbm9yZWQuDQ0K OwlFeGVjdXRpb24gd2lsbCBiZWdpbiBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rp b24gaW4gdGhlIHJlbG9jYXRlZA0NCjsJMzItYml0IHNlZ21lbnQuDQ0KOw0N CglQUkVGSVgJCQkJOyBJbnN0cnVjdGlvbiBvdmVycmlkZQ0NCglEQgkwRUFI CQkJOyBKdW1wIGltbWVkaWF0ZQ0NCglERAkwCQkJOyBPZmZzZXQgKGlnbm9y ZWQgYW55d2F5KQ0NCglEVwlBUFBMQwkJCTsgQXBwbGljYXRpb24gY29kZSBz ZWdtZW50DQ0KCUhMVA0NCjsNDQo7CVRoZXNlIGFyZSB0aGUgZmlyc3QgaW5z dHJ1Y3Rpb25zIHdoZW4gd2UgYXJlIGNhbGxlZCBmcm9tIHRoZQ0NCjsJYXBw bGljYXRpb24gY29kZS4gVGhlICdjYWxsJyBtdXN0IGJlIHRvIGEgNjRrIHNl Z21lbnQsIGxvY2F0ZWQNDQo7CWluIHRoZSBjb3JyZWN0IHBsYWNlLCB3aXRo IHRoZSBjb3JyZWN0IGF0dHJpYnV0ZXMsIHNob3duIGluDQ0KOwlwLnAuIDIy LTQgZm9yIHRoaXMgdG8gd29yay4NDQo7DQ0KRFJPUDoJTU9WCUFYLERPUwkJ CTsgU2VnbWVudCBkaXNjcmlwdG9yIGRlZmluZWQgcHAgMjItNA0NCglNT1YJ RFMsQVgJCQk7IFNldCBhbGwgc2VnbWVudCByZWdpc3RlcnMuDQ0KCU1PVglF UyxBWA0NCglNT1YJRlMsQVgNDQoJTU9WCUdTLEFYDQ0KCU1PVglTUyxBWA0N CjsNDQoJTU9WCUVBWCxDUjAJCQk7IEdldCBtYWNoaW5lIHN0YXR1cyB3b3Jk DQ0KCUFORAlBWCwwRkZGRUgJCTsgUmVzZXQgUEUgYml0DQ0KCU1PVglDUjAs RUFYCQkJOyBUaGlzIHNob3VsZCByZXR1cm4gdXMgdG8gcmVhbCBtb2RlDQ0K CURCCTBFQUgJCQk7IEp1bXAgaW1tZWRpYXRlDQ0KCURXCU9GRlNFVCBXSEVS RQkJOyBPZmZzZXQNDQpEUk9QQ1MJRFcJMAkJCTsgU2VnbWVudA0NCglITFQN DQo7DQ0KOwlUaGVzZSBhcmUgdGhlIGZpcnN0IGluc3RydWN0aW9ucyBvbmNl IChpZikgd2UgZ2V0IGJhY2sgdG8gcmVhbA0NCjsJbW9kZS4NDQo7DQ0KV0hF UkU6CU1PVglBWCxDUwkJCTsgT3VyIDE2LWJpdCBkYXRhIHNlZ21lbnQNDQoJ TU9WCURTLEFYCQkJOyBTZXQgcmVhbC1tb2RlIHNlZ21lbnRzDQ0KCU1PVglF UyxBWA0NCglNT1YJU1MsQVgNDQoJTU9WCVNQLE9GRlNFVCBMQ0xfU1RLCTsg UmVzdG9yZSBsb2NhbCBzdGFjaw0NCglMSURUCUZXT1JEIFBUUiBPTERfSURU CTsgTG9hZCBvbGQgaW50ZXJydXB0IGRlc2NyaXB0b3INDQouMzg2DQ0KOw0N CjsJTm93ICBkaXNhYmxlIEEyMC4gV2UgY291bGQgbGVhdmUgaXQgb24gd2l0 aCBubyBwcm9ibGVtLCBidXQNDQo7CXdlIHdhbnQgdG8gcmV0dXJuIHRoZSBt YWNoaW5lIHRvIHRoZSBzdGF0ZSBhdCB3aGljaCB3ZSBzdGFydGVkLg0NCjsN DQoJWE9SCUNYLENYDQ0KSUJFMzoJSU4JQUwsNjRIDQ0KCVRFU1QJQUwsMDJI DQ0KCUxPT1BOWglJQkUzDQ0KCU1PVglBTCwwRDFIDQ0KCU9VVAk2NEgsQUwN DQoJWE9SCUNYLENYDQ0KSUJFNDoJSU4JQUwsNjRIDQ0KCVRFU1QJQUwsMDJI DQ0KCUxPT1BOWglJQkU0DQ0KCU1PVglBTCwwRERICQkJOyBEaXNhYmxlIGJp dCAyMA0NCglPVVQJNjBILEFMDQ0KCVhPUglDWCxDWA0NCklCRTU6CUlOCUFM LDY0SA0NCglURVNUCUFMLDAySA0NCglMT09QTloJSUJFNQ0NCjsNDQoJTU9W CUFMLEJZVEUgUFRSIElOVENfSElHCTsgR2V0IG9sZCBIaWdoIGludGVycnVw dCBtYXNrDQ0KCU9VVAkwQTFILEFMCQkJOyBTZXQgb2xkIGludGVycnVwdCBt YXNrDQ0KCU1PVglBTCxCWVRFIFBUUiBJTlRDX0xPVwk7IEdldCBvbGQgTG93 IGludGVycnVwdCBtYXNrDQ0KCU9VVAkyMUgsQUwJCQk7IFNldCBvbGQgaW50 ZXJydXB0IG1hc20NDQo7DQ0KCVhPUglBTCxBTAkJCTsgT2Zmc2V0IHplcm8N DQoJT1VUCTcwSCxBTAkJCTsgRW5hYmxlIE5NSQ0NCglTVEkJCQkJOyBBbGxv dyBpbnRlcnJ1cHRzDQ0KOw0NCjsJTm93IHdyaXRlIHRoZSByZXN1bHRzIG9m IHRoZSAzMi1iaXQgb3BlcmF0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQNDQo7 CXVzaW5nIE1TLURPUy4NDQo7DQ0KSUZOREVGCURFQlVHDQ0KCUFTU1VNRQlE UzpQU0VHDQ0KCVBVU0gJRFMJCQk7IFNhdmUgc2VnbWVudA0NCglNT1YJQVgs UkVMT0MJCTsgU2VnbWVudCBvZiB0aGUgZGF0YQ0NCglNT1YJRFMsQVgJCQk7 IFNldCB0aGUgc2VnbWVudA0NCglNT1YJRUJYLE9GRlNFVCBQU0VHOkJQVFIJ OyBPZmZzZXQgb2YgRFdPUkQgcG9pbnRlcg0NCglNT1YJQ1gsV09SRCBQVFIg W0JYXQk7IEdldCBsb3cgd29yZCBvZiBwb2ludGVyDQ0KCU1PVglFRFgsT0ZG U0VUIFBTRUc6QlVGRkVSCTsgR2V0IHN0YXJ0IG9mIHRoZSBidWZmZXINDQoJ U1VCCUNYLERYCQkJOyBTdWJ0cmFjdCBzdGFydCwgQ1ggPSBsZW5ndGgNDQoJ TU9WCUFYLDQwMDBICQk7IERPUyB3cml0ZSBmdW5jdGlvbg0NCglNT1YJQlgs MQkJCTsgU3RhbmRhcmQgb3V0DQ0KCUlOVAkyMUgJCQk7IENhbGwgRE9TDQ0K CVBPUAlEUw0NCglBU1NVTUUJRFM6TUFJTg0NCkVORElGDQ0KOw0NCjsJRXhp dCB0byBNUy1ET1MuIE5vdyB3YXNuJ3QgdGhhdCBlYXN5Pw0NCjsNDQoJTU9W CUFYLDRDMDBICQk7IE1TLURPUyB0ZXJtaW5hdGUNDQoJSU5UCTIxSA0NCglI TFQNDQpTVEFSVFVQCUVORFANDQo7LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS0NDQo7DQ0KOwlPdXQgYSBieXRlIGluIEFMIG91dCB0aGUgZmly c3QgUlMtMjMyQyBwb3J0LiBVc2VkIGZvciBkZWJ1Z2dpbmcuDQ0KOw0NCklG REVGCURFQlVHDQ0KUE9VVAlQUk9DCU5FQVINDQoJTU9WCUFILEFMDQ0KCU1P VglEWCxQT1JUMStMU1INDQpQT1VUMDoJSU4JQUwsRFgNDQoJQU5ECUFMLDAw MTAwMDAwQg0NCglKWglQT1VUMA0NCglNT1YJRFgsUE9SVDENDQoJTU9WCUFM LEFIDQ0KCU9VVAlEWCxBTA0NCglSRVQNDQpQT1VUCUVORFANDQo7DQ0KOy09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOwlJbnRpYWxpemUg dGhlIGZpcnN0IDgyNTAgaWYgaXQgZXhpc3RzLg0NCjsNDQpJTkk4MjUwCVBS T0MJTkVBUg0NCglNT1YJRFgsUE9SVDErTENSCQkJOyBPZmZzZXQgdG8gbGlu ZSBjb250cm9sDQ0KCU1PVglBTCwxMDAwMDAwMEIJCQk7IERpdmlzb3IgbGF0 Y2ggYWNjZXNzIGJpdA0NCglPVVQJRFgsQUwJCQkJOyBTZXQgRExBQg0NCglN T1YJRFgsUE9SVDEJCQk7IEJhc2UgcG9ydA0NCglNT1YJQVgsMTIJCQkJOyA5 NjAwIGJhdWQtcmF0ZQ0NCglPVVQJRFgsQVgJCQkJOyBTZXQgdGhlIGJhdWQg LSByYXRlDQ0KCU1PVglDWCwxMjAwCQkJCTsgTmVlZCB0byB3YWl0DQ0KCUxP T1AJJAkJCQk7IFNwaW4gYSBiaXQNDQoJTU9WCURYLFBPUlQxK0xDUgkJCTsg T2Zmc2V0IHRvIGxpbmUgY29udHJvbA0NCglNT1YJQUwsMDAwMDAwMTFCCQkJ OyA4IGJpdHMsIDEgc3RvcCwgbm8gcGFyaXR5DQ0KCU9VVAlEWCxBTAkJCQk7 IFNldCBiYXVkLXJhdGUNDQoJUkVUDQ0KSU5JODI1MAlFTkRQDQ0KRU5ESUYN DQo7LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQpJTlRDX0hJ RwlEQgk/CTsgU2F2ZSBvbGQgaW50ZXJydXB0IG1hc2sNDQpJTlRDX0xPVwlE Qgk/CTsgU2F2ZSBvbGQgaW50ZXJydXB0IG1hc2sNDQoJCURXCTQwMEggRFVQ KD8pDQ0KTENMX1NUSwlMQUJFTAlXT1JEDQ0KQk9UVE9NCQlEVwk/DQ0KU0FW RV9TVFVGRglMQUJFTAlCWVRFDQ0KTUFJTglFTkRTDQ0KOw0NCjstPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0NCjsNDQo7CVRoaXMgaXMgYSAz Mi1iaXQgc2VnbWVudCB1c2luZyAzMi1iaXQgY29kZSBhbmQgZGF0YS4gTm90 ZSB0aGUNDQo7CSdVU0UzMicgd2hpY2ggdGVsbHMgdGhlIGFzc2VtYmxlciB0 byB1c2UgdGhlIDMyLWJpdCBmb3JtLg0NCjsNDQouMzg2cA0NClBTRUcJU0VH TUVOVCBVU0UzMiBQVUJMSUMJJ0VWRVJZVEhJTkcnDQ0KCUFTU1VNRQlEUzpQ U0VHLCBFUzpQU0VHLCBTUzpQU0VHLCBDUzpQU0VHDQ0KCU9SRwkwDQ0KSE9N RToJSk1QCUJZUEFTU19EQVRBDQ0KOw0NCjsJQWRkIG5ldyBwcm9jZWR1cmVz IHRvIHRoaXMgc3RydWN0dXJlLiBUZXJtaW5hdGUgd2l0aCBhIDAuDQ0KOw0N CjsgICAgICAgICAgICAgICBNZXNzYWdlcyAgIFByb2NlZHVyZQ0NCjsJCS0t LS0tLS0tICAgLS0tLS0tLS0tDQ0KVEhJTkdTCVRPRE8JPFBSUDAsICBDQUxD X09WRVJIRUFEPg0NCglUT0RPCTxQUlAxLCAgU0lNUExFX0NIS1NVTT4NDQoJ VE9ETwk8UFJQMiwgIFNJTVBMRV9OT0xPRFNXPg0NCglUT0RPCTxQUlAzLCAg VU5ST0xMX0xPT1BTPg0NCglUT0RPCTxQUlA0LCAgVU5ST0xMX0xPT1BTTT4N DQoJVE9ETwk8UFJQNSwgIFVOUk9MTF9MT09QU04+DQ0KCVRPRE8JPFBSUDYs ICBTSU1QTEVfVU5ST0xMPg0NCglUT0RPCTxQUlA3LCAgRk9MREJBQ0tfQ0hL U1VNPg0NCglUT0RPCTxQUlA4LCAgTk9DT1VOVF9DSEtTVU0+DQ0KCVRPRE8J PFBSUDksICBVTlJPTExfTE9PUFNPPg0NCglUT0RPCTxQUlAxMCwgU0lNUExF X1NQVUQ+DQ0KCVRPRE8JPFBSUDExLCBMSU5VWD4NDQoJVE9ETwk8MCwgICAg IDA+DQ0KOw0NCkFMSUdOCTQNDQpDVElNX0xPV19MVwlERAk/CQkJOyBDeWNs ZSB0aW1lIExPVyBsb25nd29yZA0NCkNUSU1fSElHX0xXCURECT8JCQk7IEN5 Y2xlIHRpbWUgSElHSCBsb25nd29yZA0NCkNIS1NVTQkJRFcJPwkJCTsgUmV0 dXJuZWQgY2hlY2tzdW0NDQpFVkVOCQkJCQkJOyBTdGFydCBvbiBhIFdPUkQg Ym91bmRhcnkNDQo7CQlEQgkwCQkJOyBUbyB1c2UgYW4gT0REIGJvdW5kYXJ5 DQ0KSVBfUEFDS0VUCURCCTEyOCBEVVAoJ0lQIFBhY2tldC4uLi4uLiAnKQ0N CjsNDQo7ICBGb3IgdGVzdGluZyB0aGF0IGNoZWNrc3VtcyBhcmUgY29ycmVj dC4uLg0NCjtJUF9QQUNLRVQJREIJMjA0NyBkdXAoMEZGSCkNDQo7CQlEQgkx DQ0KOw0NClBBQ0tFVF9MRU4JRVFVCSQgLSBJUF9QQUNLRVQNDQpTSUdOT04J TEFCRUwJQllURQ0NCkFTQ0lJCTw+DQ0KQVNDSUkJPFdlbGNvbWUgdG8gMzIt Yml0IHByb3RlY3RlZCBtb2RlLj4NDQpBU0NJSQk8VGhpcyBwcm9ncmFtIG1l YXN1cmVzIHRoZSBDUFUgY3ljbGVzIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHZh cmlvdXM+DQ0KQVNDSUkJPFRDUC9JUCBDaGVja3N1bSByb3V0aW5lcy4gIEl0 IGlzIG1hZGUgc28geW91IGNhbiByZWFkaWx5IGFkZCB5b3VyPg0NCkFTQ0lJ CTxvd24gcm91dGluZXMgdG8gc2VlIGhvdyB0aGV5IGNvbXBhcmUuPg0NCkFT Q0lJCTw+DQ0KRU9MDQ0KOw0NCjsJVGV4dCB0byBiZSBwcmludGVkIG9uIHRo ZSBzY3JlZW4gYWZ0ZXIgbW9kaWZpY2F0aW9uLg0NCjsNDQpQUlAJREIJJ0Z1 bmN0aW9uIDB4Jw0NCkZOCURCCScwMCwgJw0NCglEQgknQ2hlY2tzdW0gMHgn DQ0KQ0hLCURCCScwMDAwLCAnDQ0KCURCCSdQcm9jZXNzb3IgY3ljbGVzIDB4 Jw0NCkgxCURCCScwMDAwJw0NCkgwCURCCScwMDAwJw0NCkwxCURCCScwMDAw Jw0NCkwwCURCCScwMDAwJywgMERILDBBSCwwREgsMEFILDANDQpGVU4JREIJ MQ0NCjsNDQpFVkVODQ0KUE9SVFMJRFcJM0Y4SAkJCQk7IFBvc3NpYmxlIFVB UlQgYmFzZSBhZGRyZXNzZXMNDQoJRFcJMkY4SA0NCglEVwkzRThIDQ0KCURX CTJFOEgNDQo7DQ0KQUxJR04JNA0NCkJZUEFTU19EQVRBOg0NCglNT1YJRVNQ LE9GRlNFVCBNU1RBQ0sJCTsgU2V0IGxvY2FsIHN0YWNrDQ0KSUZERUYJREVC VUcNDQoJQ0FMTAlJTklUX1VBUlRTCQkJOyBTZXQgdXAgQ09NIHBvcnRzDQ0K RU5ESUYNDQo7DQ0KOwlTZXQgdXAgb3V0cHV0IGJ1ZmZlciBhbmQgd3JpdGUg c2lnbm9uIG1lc3NhZ2UuDQ0KOw0NCglNT1YJRUJYLE9GRlNFVCBCVUZGRVIJ CTsgVGhpcyB3YXMgbm90IHJlbG9jYXRlZA0NCglNT1YJRFdPUkQgUFRSIFtC UFRSXSxFQlgJCTsgU2V0IHVwIHRoZSBidWZmZXIgcG9pbnRlcg0NCglNT1YJ RVNJLE9GRlNFVCBTSUdOT04JCTsgUG9pbnQgdG8gc2lnbm9uIG1lc3NhZ2UN DQoJQ0FMTAlQVVRTDQ0KOw0NCjsJRXhlY3V0ZSB0aGUgbGlzdCBvZiBwcm9j ZWR1cmVzLg0NCjsNDQoJTU9WCUVCWCxPRkZTRVQgVEhJTkdTCQk7IFRhYmxl IG9mIHRoaW5ncyB0byBkbw0NClJVTjoJUFVTSAlFQlgJCQkJOyBTYXZlLCBk ZXN0cm95ZWQgZXZlcnl3aGVyZQ0NCglNT1YJRVNJLERXT1JEIFBUUiBbRUJY LlRPRE8uRElTUF0JOyBHZXQgc3RyaW5nIHRvIHByaW50DQ0KCUNBTEwJUFVU Uw0NCglDQUxMCVNUQVJUX1RJTUVSCQkJOyBTdGFydCBjeWNsZSB0aW1lcg0N CglQT1AJRUJYDQ0KCVBVU0gJRUJYDQ0KCUNBTEwJRFdPUkQgUFRSIFtFQlgu VE9ETy5FWEVDXQk7IEV4ZWN1dGUgdGhlIGZ1bmN0aW9uDQ0KCU1PVglXT1JE IFBUUiBDSEtTVU0sQVgJCTsgU2F2ZSByZXN1bHQNDQoJQ0FMTAlTVE9QX1RJ TUVSCQkJOyBTdG9wIHRoZSBjeWNsZSB0aW1lcg0NCglNT1YJQUwsQllURSBQ VFIgW0ZVTl0JCTsgR2V0IGZ1bmN0aW9uIG51bWJlcg0NCglJTkMJQllURSBQ VFIgW0ZVTl0JCQk7IFJlYWR5IG5leHQgZnVuY3Rpb24NDQoJQ0FMTAlESVNQ TAkJCQk7IERpc3BsYXkgdGhlIHJlc3VsdHMNDQoJUE9QCUVCWAkJCQk7IFJl c3RvcmUgcG9pbnRlcg0NCjsNDQoJQURECUVCWCwgVFlQRShUT0RPKQkJCTsg VFlQRSBpcyBsaWtlIHNpemVvZigpDQ0KCUNNUAlXT1JEIFBUUiBbRUJYLlRP RE8uRElTUF0sMAk7IENoZWNrIGZvciBlbmQgb2YgbGlzdA0NCglKTloJUlVO CQkJCTsgTm90IGRvbmUgeWV0DQ0KOw0NCjsJUmV0dXJuIHZpYSAxNi1iaXQg ZGVzY3JpcHRvci4NDQo7DQ0KCURCCTBFQUgJCQkJOyBKdW1wIGltbWVkaWF0 ZQ0NCglERAkwCQkJCTsgT2Zmc2V0IChpZ25vcmVkIGFueXdheSkNDQoJRFcJ QkFDSwkJCQk7IFN0YXJ0dXAgc2VnbWVudA0NCglITFQNDQo7DQ0KOw0NCjst PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0NCjsNDQpQUlAwCUxB QkVMCUJZVEUNDQpBU0NJSQk8VGhpcyBqdXN0IGdldHMgdGhlIG92ZXJoZWFk IGluIG1ha2luZyB0aGUgZnVuY3Rpb24gY2FsbHMuPg0NCkFTQ0lJCTxZb3Ug Y2FuIHN1YnRyYWN0IHRoZSByZXR1cm5lZCBjeWNsZXMgZnJvbSB0aGUgb3Ro ZXIgY2FsbHMgaWY+DQ0KQVNDSUkJPHlvdSB3YW50IHRvIGJlIHBlZGFudGlj LiBUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgdW5kZWZpbmVkLj4NDQpFT0wN DQo7DQ0KQ0FMQ19PVkVSSEVBRDoNDQoJUkVUDQ0KOw0NCjstPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LQ0NCjsNDQpQUlAxCUxBQkVMCUJZVEUN DQpBU0NJSSA8VGhpcyByZXR1cm5zIGEgd29yZCBpbiBFQVggcmVwcmVzZW50 aW5nIHRoZSBUQ1AvSVAgQ2hlY2tzdW0uPg0NCkFTQ0lJIDxJdCB1c2VzIExP RFNXIGFuZCBpcyBkZXNpZ25lZCBvbmx5IHRvIGJlIHNpbXBsZS4+DQ0KRU9M DQ0KOw0NClNJTVBMRV9DSEtTVU06DQ0KCU1PVglFQ1gsIChQQUNLRVRfTEVO IFNIUiAxKQk7IEdldCBwYWNrZXQgbGVuZ3RoDQ0KCU1PVglFU0ksIE9GRlNF VCBJUF9QQUNLRVQJOyBQb2ludCB0byBwYWNrZXQNDQoJWE9SCUVEWCwgRURY CQk7IENsZWFyIENZLCB6ZXJvDQ0KCU1PVglFQVgsIEVEWAkJOyBNYWtlIHN1 cmUgaGlnaCB3b3JkIGlzIHplcm8NDQoJQ0xEDQ0KOw0NCkNIS0VNOglMT0RT VwkJCQk7IERvaXQNDQoJQURDCURYLEFYCQkJOyBTdW0gd29yZHMgb25seSB3 aXRoIHByZXZpb3VzIENZDQ0KCUxPT1AJQ0hLRU0JCQk7IERvaXQyaXQNDQoJ QURDCURYLDAJCQk7IFBvc3NpYmxlIGxhc3QgQ1kNDQoJTU9WCUVBWCxFRFgJ CQk7IFJldHVybiBpbiBFQVggdG8gYmUgZmFpcg0NCglSRVQNDQo7LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQpQUlAyCUxBQkVMCUJZVEUN DQpBU0NJSQk8VGhpcyBwZXJmb3JtcyB0aGUgc2FtZSBjaGVja3N1bSwgYnV0 IGRvZXMgbm90IHVzZSBidWlsdC1pbiBtYWNyb3M+DQ0KQVNDSUkJPHN1Y2gg YXMgTE9PUCBhbmQgTE9EU1cuPg0NCkVPTA0NCjsNDQpTSU1QTEVfTk9MT0RT VzoNDQoJTU9WCUVDWCwgKFBBQ0tFVF9MRU4gU0hSIDEpCTsgR2V0IHBhY2tl dCBsZW5ndGgNDQoJTU9WCUVCWCwgT0ZGU0VUIElQX1BBQ0tFVAk7IFBvaW50 IHRvIHBhY2tldA0NCglYT1IJRURYLCBFRFgJCTsgQ2xlYXIgQ1ksIHplcm8N DQoJTU9WCUVBWCwgRURYCQk7IE1ha2Ugc3VyZSBoaWdoIHdvcmQgaXMgemVy bw0NCjsNDQpTVU1JVDoJTU9WCUFYLCBXT1JEIFBUUiBbRUJYXQk7IEdldCB0 aGUgd29yZA0NCglBREQJRFgsQVgJCQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0K CUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KCUFERAlFQlgsIDIJCQk7 IFJlYWR5IG5leHQgd29yZA0NCglERUMJRUNYCQkJOyBCdW1wIHRoZSBwYWNr ZXQgbGVuZ3RoDQ0KCUpOWglTVU1JVAkJCTsgQ29udGludWUNDQoJTU9WCUVB WCxFRFgJCQk7IFJldHVybiBpbiBFQVggdG8gYmUgZmFpcg0NCglSRVQNDQo7 DQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KUFJQMwlM QUJFTAlCWVRFDQ0KQVNDSUkgPFRoaXMgdHJpZXMgdG8gYmUgY3V0ZSBhbmQg dW5yb2xsIGxvb3BzLiBOb3RlIHRoYXQgdGhlIHVucm9sbGluZz4NDQpBU0NJ SSA8d29ya3Mgb2theSwgaG93ZXZlciB0aGVyZSBpcyBhIGxvdCBvZiBsb2dp YyBuZWNlc3Nhcnkgd2hpY2ggY291bGQ+DQ0KQVNDSUkgPHVuZHVlIGp1c3Qg YWJvdXQgZXZlcnl0aGluZyB3ZSBhcmUgYXR0ZW1wdGluZyB0byBhY2NvbXBs aXNoLj4NDQpFT0wNDQo7DQ0KVU5ST0xMX0xPT1BTOg0NCglNT1YJRUNYLCAo UEFDS0VUX0xFTiBTSFIgMSkJOyBHZXQgcGFja2V0IGxlbmd0aA0NCglNT1YJ RUJYLCBPRkZTRVQgSVBfUEFDS0VUCTsgUG9pbnQgdG8gcGFja2V0DQ0KCVhP UglFRFgsIEVEWAkJOyBDbGVhciBDWSwgemVybw0NCglNT1YJRUFYLCBFRFgJ CTsgTWFrZSBzdXJlIGhpZ2ggd29yZCBpcyB6ZXJvDQ0KOw0NClRSSUFMOglD TVAJRUNYLDgJCQk7IEF0IGxlYXN0IDggd29yZHM/DQ0KCUpBRQlETzgJCQk7 IFllcywgZG8gOCB3b3JkcywgdW5yb2xsZWQNDQoJQ01QCUVDWCw0CQkJOyBB dCBsZWFzdCA0IHdvcmRzPw0NCglKQUUJRE80CQkJOyBZZXMsIGRvIDQgd29y ZHMgdW5yb2xsZWQNDQoJSk1QCURPSVQJCQk7IE5vbmUgb2YgYWJvdmUNDQoN DQpETzg6CU1PVglBWCwgV09SRCBQVFIgW0VCWF0JOyBHZXQgdGhlIHdvcmQN DQoJQURECURYLEFYCQkJOyBTdW0gd2l0aCBwcmV2aW91cw0NCglBREMJRFgs MAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJTU9WCUFYLCBXT1JEIFBUUiBb RUJYKzJdCTsgR2V0IHRoZSB3b3JkDQ0KCUFERAlEWCxBWAkJCTsgU3VtIHdp dGggcHJldmlvdXMNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7 DQ0KCU1PVglBWCwgV09SRCBQVFIgW0VCWCs0XQk7IEdldCB0aGUgd29yZA0N CglBREQJRFgsQVgJCQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlEWCww CQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglNT1YJQVgsIFdPUkQgUFRSIFtF QlgrNl0JOyBHZXQgdGhlIHdvcmQNDQoJQURECURYLEFYCQkJOyBTdW0gd2l0 aCBwcmV2aW91cw0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsN DQoJTU9WCUFYLCBXT1JEIFBUUiBbRUJYKzhdCTsgR2V0IHRoZSB3b3JkDQ0K CUFERAlEWCxBWAkJCTsgU3VtIHdpdGggcHJldmlvdXMNDQoJQURDCURYLDAJ CQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCU1PVglBWCwgV09SRCBQVFIgW0VC WCsxMF0JOyBHZXQgdGhlIHdvcmQNDQoJQURECURYLEFYCQkJOyBTdW0gd2l0 aCBwcmV2aW91cw0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsN DQoJTU9WCUFYLCBXT1JEIFBUUiBbRUJYKzEyXQk7IEdldCB0aGUgd29yZA0N CglBREQJRFgsQVgJCQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlEWCww CQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglNT1YJQVgsIFdPUkQgUFRSIFtF QlgrMTRdCTsgR2V0IHRoZSB3b3JkDQ0KCUFERAlEWCxBWAkJCTsgU3VtIHdp dGggcHJldmlvdXMNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7 DQ0KCUFERAlFQlgsMTYJCQk7IEFkanVzdCBwb2ludGVyDQ0KCVNVQglFQ1gs OAkJCTsgQWRqdXN0IGNvdW50DQ0KCUpaCURPTkUJCQk7IEFsbCBkb25lDQ0K CUpNUAlUUklBTAkJCTsgRG8gbW9yZQ0NCg0NCkRPNDoJTU9WCUFYLCBXT1JE IFBUUiBbRUJYXQk7IEdldCB0aGUgd29yZA0NCglBREQJRFgsQVgJCQk7IFN1 bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5 DQ0KOw0NCglNT1YJQVgsIFdPUkQgUFRSIFtFQlgrMl0JOyBHZXQgdGhlIHdv cmQNDQoJQURECURYLEFYCQkJOyBTdW0gd2l0aCBwcmV2aW91cw0NCglBREMJ RFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJTU9WCUFYLCBXT1JEIFBU UiBbRUJYKzRdCTsgR2V0IHRoZSB3b3JkDQ0KCUFERAlEWCxBWAkJCTsgU3Vt IHdpdGggcHJldmlvdXMNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkN DQo7DQ0KCU1PVglBWCwgV09SRCBQVFIgW0VCWCs2XQk7IEdldCB0aGUgd29y ZA0NCglBREQJRFgsQVgJCQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlE WCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRUJYLDgJCQk7IEFk anVzdCBwb2ludGVyDQ0KCVNVQglFQ1gsNAkJCTsgQWRqdXN0IGxlbmd0aA0N CglKWglET05FCQkJOyBXZSBhcmUgZG9uZQ0NCglKTVAJVFJJQUwJCQk7IFRy eSBtb3JlDQ0KDQ0KRE8yOglNT1YJQVgsIFdPUkQgUFRSIFtFQlhdCTsgR2V0 IHRoZSB3b3JkDQ0KCUFERAlEWCxBWAkJCTsgU3VtIHdpdGggcHJldmlvdXMN DQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCU1PVglBWCwg V09SRCBQVFIgW0VCWCsyXQk7IEdldCB0aGUgd29yZA0NCglBREQJRFgsQVgJ CQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVw IGNhcnJ5DQ0KOw0NCglBREQJRUJYLDQJCQk7IEFkanVzdCBwb2ludGVyDQ0K CVNVQglFQ1gsMgkJCTsgQWRqdXN0IGxlbmd0aA0NCglKWglET05FCQkJOyBX ZSBhcmUgZG9uZQ0NCglKTVAJVFJJQUwJCQk7IFRyeSBtb3JlDQ0KDQ0KRE9J VDoJTU9WCUFYLCBXT1JEIFBUUiBbRUJYXQk7IEdldCB0aGUgd29yZA0NCglB REQJRFgsQVgJCQk7IFN1bSB3aXRoIHByZXZpb3VzDQ0KCUFEQwlEWCwwCQkJ OyBQaWNrIHVwIGNhcnJ5DQ0KCUFERAlFQlgsIDIJCQk7IFJlYWR5IG5leHQg d29yZA0NCglERUMJRUNYCQkJOyBCdW1wIHRoZSBwYWNrZXQgbGVuZ3RoDQ0K CUpOWglET0lUCQkJOyBDb250aW51ZQ0NCjsNDQpET05FOglNT1YJRUFYLEVE WAkJCTsgUmV0dXJuIGluIEVBWCB0byBiZSBmYWlyDQ0KCVJFVA0NCjsNDQo7 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQpQUlA0CUxBQkVM CUJZVEUNDQpBU0NJSSA8VGhpcyB0cmllcyB0byBiZSBjdXRlIGFuZCB1bnJv bGwgbG9vcHMgYnV0IHN1bXMgZnJvbSBtZW1vcnk+DQ0KQVNDSUkgPHdpdGhv dXQgYW4gaW50ZXJtZWRpYXRlIHJlZ2lzdGVyIG9wZXJhbmQuPg0NCkVPTA0N CjsNDQpVTlJPTExfTE9PUFNNOg0NCglNT1YJRUNYLCAoUEFDS0VUX0xFTiBT SFIgMSkJOyBHZXQgcGFja2V0IGxlbmd0aA0NCglNT1YJRUJYLCBPRkZTRVQg SVBfUEFDS0VUCTsgUG9pbnQgdG8gdGhlIHBhY2tldA0NCglYT1IJRURYLCBF RFgJCTsgQ2xlYXIgQ1ksIHplcm8NDQoJTU9WCUVBWCwgRURYCQk7IE1ha2Ug c3VyZSBoaWdoIHdvcmQgaXMgemVybw0NCjsNDQpNVFJJQUw6CUNNUAlFQ1gs OAkJCTsgQXQgbGVhc3QgOCB3b3Jkcz8NDQoJSkFFCU1ETzgJCQk7IFllcywg ZG8gOCB3b3JkcywgdW5yb2xsZWQNDQoJQ01QCUVDWCw0CQkJOyBBdCBsZWFz dCA0IHdvcmRzPw0NCglKQUUJTURPNAkJCTsgWWVzLCBkbyA0IHdvcmRzLCB1 bnJvbGxlZA0NCglKTVAJTURPSVQJCQk7IE5vbmUgb2YgYWJvdmUNDQoNDQpN RE84OglBREQJRFgsIFdPUkQgUFRSIFtFQlhdCTsgU3VtIHRoZSB3b3JkDQ0K CUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdP UkQgUFRSIFtFQlgrMl0JOyBTdW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7 IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFERAlEWCwgV09SRCBQVFIgW0VCWCs0 XQk7IFN1bSB0aGUgd29yZA0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJy eQ0NCjsNDQoJQURECURYLCBXT1JEIFBUUiBbRUJYKzZdCTsgU3VtIHRoZSB3 b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJ RFgsIFdPUkQgUFRSIFtFQlgrOF0JOyBTdW0gdGhlIHdvcmQNDQoJQURDCURY LDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFERAlEWCwgV09SRCBQVFIg W0VCWCsxMF0JOyBTdW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7IFBpY2sg dXAgY2FycnkNDQo7DQ0KCUFERAlEWCwgV09SRCBQVFIgW0VCWCsxMl0JOyBT dW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7 DQ0KCUFERAlEWCwgV09SRCBQVFIgW0VCWCsxNF0JOyBTdW0gdGhlIHdvcmQN DQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFERAlFQlgs MTYJCQk7IEFkanVzdCBwb2ludGVyDQ0KCVNVQglFQ1gsOAkJCTsgQWRqdXN0 IGNvdW50DQ0KCUpaCU1ET05FCQkJOyBXZSBhcmUgZG9uZQ0NCglKTVAJTVRS SUFMCQkJOyBUcnkgbW9yZQ0NCg0NCk1ETzQ6CUFERAlEWCwgV09SRCBQVFIg W0VCWF0JOyBTdW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAg Y2FycnkNDQo7DQ0KCUFERAlEWCwgV09SRCBQVFIgW0VCWCsyXQk7IFN1bSB0 aGUgd29yZA0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJ QURECURYLCBXT1JEIFBUUiBbRUJYKzRdCTsgU3VtIHRoZSB3b3JkDQ0KCUFE QwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQg UFRSIFtFQlgrNl0JOyBTdW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7IFBp Y2sgdXAgY2FycnkNDQo7DQ0KCUFERAlFQlgsOAkJCTsgQWRqdXN0IHBvaW50 ZXINDQoJU1VCCUVDWCw0CQkJOyBBZGp1c3QgY291bnQNDQoJSloJTURPTkUJ CQk7IFdlIGFyZSBkb25lDQ0KCUpNUAlNVFJJQUwJCQk7IFRyeSBtb3JlDQ0K DQ0KTURPMjoJQURECURYLCBXT1JEIFBUUiBbRUJYXQk7IFN1bSB0aGUgd29y ZA0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJQURECURY LCBXT1JEIFBUUiBbRUJYKzJdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCww CQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRUJYLDQJCQk7IEFkanVz dCBwb2ludGVyDQ0KCVNVQglFQ1gsMgkJCTsgQWRqdXN0IGNvdW50DQ0KCUpa CU1ET05FCQkJOyBXZSBhcmUgZG9uZQ0NCglKTVAJTVRSSUFMCQkJOyBUcnkg bW9yZQ0NCg0NCk1ET0lUOglBREQJRFgsIFdPUkQgUFRSIFtFQlhdCTsgU3Vt IHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KCUFE RAlFQlgsIDIJCQk7IFJlYWR5IG5leHQgd29yZA0NCglERUMJRUNYCQkJOyBC dW1wIHRoZSBwYWNrZXQgbGVuZ3RoDQ0KCUpOWglNRE9JVAkJCTsgQ29udGlu dWUNDQo7DQ0KTURPTkU6CU1PVglFQVgsRURYCQkJOyBSZXR1cm4gaW4gRUFY IHRvIGJlIGZhaXINDQoJUkVUDQ0KOw0NCjstPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LQ0NClBSUDUJTEFCRUwJQllURQ0NCkFTQ0lJIDxUaGlz IHRyaWVzIHRvIGJlIGN1dGUgYW5kIHVucm9sbCBsb29wcyBidXQgc3VtcyBm cm9tIG1lbW9yeT4NDQpBU0NJSSA8d2l0aG91dCBhbiBpbnRlcm1lZGlhdGUg cmVnaXN0ZXIgb3BlcmFuZC4gSXQgYWxzbyBnb2VzIG92ZXJib2FyZD4NDQpB U0NJSSA8b24gdGhlIGxvb3AtdW5yb2xsaW5nLj4NDQpFT0wNDQo7DQ0KVU5S T0xMX0xPT1BTTjoNDQoJTU9WCUVDWCwgKFBBQ0tFVF9MRU4gU0hSIDEpCTsg R2V0IHBhY2tldCBsZW5ndGgNDQoJTU9WCUVCWCwgT0ZGU0VUIElQX1BBQ0tF VAk7IFBvaW50IHRvIHRoZSBwYWNrZXQNDQoJWE9SCUVEWCwgRURYCQk7IENs ZWFyIENZLCB6ZXJvDQ0KCU1PVglFQVgsIEVEWAkJOyBNYWtlIHN1cmUgaGln aCB3b3JkIGlzIHplcm8NDQoNDQpOVFJJQUw6CUNNUAlFQ1gsMTYJCQk7IEF0 IGxlYXN0IDE2IHdvcmRzPw0NCglKQUUJTkRPMTYJCQk7IFllcywgZG8gMTYg d29yZHMgdW5yb2xsZWQNDQoJQ01QCUVDWCw4CQkJOyBBdCBsZWFzdCA4IHdv cmRzPw0NCglKQUUJTkRPOAkJCTsgWWVzLCBkbyA4IHdvcmRzIHVucm9sbGVk DQ0KCUNNUAlFQ1gsNAkJCTsgQXQgbGVhc3QgNCB3b3Jkcz8NDQoJSkFFCU5E TzQJCQk7IFllcywgZG8gNCB3b3JkcyB1bnJvbGxlZA0NCglKTVAJTkRPSVQJ CQk7IE5vbmUgb2YgYWJvdmUNDQoNDQpORE8xNjoJQURECURYLCBXT1JEIFBU UiBbRUJYXQk7IFN1bSB0aGUgd29yZA0NCglBREMJRFgsMAkJCTsgUGljayB1 cCBjYXJyeQ0NCjsNDQoJQURECURYLCBXT1JEIFBUUiBbRUJYKzJdCTsgU3Vt IHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0N CglBREQJRFgsIFdPUkQgUFRSIFtFQlgrNF0JOyBTdW0gdGhlIHdvcmQNDQoJ QURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFERAlEWCwgV09S RCBQVFIgW0VCWCs2XQk7IFN1bSB0aGUgd29yZA0NCglBREMJRFgsMAkJCTsg UGljayB1cCBjYXJyeQ0NCjsNDQoJQURECURYLCBXT1JEIFBUUiBbRUJYKzhd CTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5 DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMTBdCTsgU3VtIHRoZSB3 b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJ RFgsIFdPUkQgUFRSIFtFQlgrMTJdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlE WCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRS IFtFQlgrMTRdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNr IHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMTZdCTsg U3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0K Ow0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMThdCTsgU3VtIHRoZSB3b3Jk DQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgs IFdPUkQgUFRSIFtFQlgrMjBdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCww CQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtF QlgrMjJdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVw IGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMjRdCTsgU3Vt IHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0N CglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMjZdCTsgU3VtIHRoZSB3b3JkDQ0K CUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdP UkQgUFRSIFtFQlgrMjhdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJ OyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgr MzBdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNh cnJ5DQ0KOw0NCglBREQJRUJYLDMyCQkJOyBBZGp1c3QgcG9pbnRlcg0NCglT VUIJRUNYLDE2CQkJOyBBZGp1c3QgY291bnQNDQoJSloJTkRPTkUJCQk7IFdl IGFyZSBkb25lDQ0KCUpNUAlOVFJJQUwJCQk7IFRyeSBtb3JlDQ0KDQ0KTkRP ODoJQURECURYLCBXT1JEIFBUUiBbRUJYXQk7IFN1bSB0aGUgd29yZA0NCglB REMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJQURECURYLCBXT1JE IFBUUiBbRUJYKzJdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQ aWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrNF0J OyBTdW0gdGhlIHdvcmQNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkN DQo7DQ0KCUFERAlEWCwgV09SRCBQVFIgW0VCWCs2XQk7IFN1bSB0aGUgd29y ZA0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJQURECURY LCBXT1JEIFBUUiBbRUJYKzhdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCww CQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtF QlgrMTBdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVw IGNhcnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMTJdCTsgU3Vt IHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0N CglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMTRdCTsgU3VtIHRoZSB3b3JkDQ0K CUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNhcnJ5DQ0KOw0NCglBREQJRUJYLDE2 CQkJOyBBZGp1c3QgcG9pbnRlcg0NCglTVUIJRUNYLDgJCQk7IEFkanVzdCBj b3VudA0NCglKWglORE9ORQkJCTsgV2UgYXJlIGRvbmUNDQoJSk1QCU5UUklB TAkJCTsgVHJ5IG1vcmUNDQoNDQpORE80OglBREQJRFgsIFdPUkQgUFRSIFtF QlhdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNrIHVwIGNh cnJ5DQ0KOw0NCglBREQJRFgsIFdPUkQgUFRSIFtFQlgrMl0JOyBTdW0gdGhl IHdvcmQNDQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFE RAlEWCwgV09SRCBQVFIgW0VCWCs0XQk7IFN1bSB0aGUgd29yZA0NCglBREMJ RFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJQURECURYLCBXT1JEIFBU UiBbRUJYKzZdCTsgU3VtIHRoZSB3b3JkDQ0KCUFEQwlEWCwwCQkJOyBQaWNr IHVwIGNhcnJ5DQ0KOw0NCglBREQJRUJYLDgJCQk7IEFkanVzdCBwb2ludGVy DQ0KCVNVQglFQ1gsNAkJCTsgQWRqdXN0IGNvdW50DQ0KCUpaCU5ET05FCQkJ OyBXZSBhcmUgZG9uZQ0NCglKTVAJTlRSSUFMCQkJOyBUcnkgbW9yZQ0NCg0N Ck5ETzI6CUFERAlEWCwgV09SRCBQVFIgW0VCWF0JOyBTdW0gdGhlIHdvcmQN DQoJQURDCURYLDAJCQk7IFBpY2sgdXAgY2FycnkNDQo7DQ0KCUFERAlEWCwg V09SRCBQVFIgW0VCWCsyXQk7IFN1bSB0aGUgd29yZA0NCglBREMJRFgsMAkJ CTsgUGljayB1cCBjYXJyeQ0NCjsNDQoJQURECUVCWCw0CQkJOyBBZGp1c3Qg cG9pbnRlcg0NCglTVUIJRUNYLDIJCQk7IEFkanVzdCBjb3VudA0NCglKWglO RE9ORQkJCTsgV2UgYXJlIGRvbmUNDQoJSk1QCU5UUklBTAkJCTsgVHJ5IG1v cmUNDQoNDQpORE9JVDoJQURECURYLCBXT1JEIFBUUiBbRUJYXQk7IFN1bSB0 aGUgd29yZA0NCglBREMJRFgsMAkJCTsgUGljayB1cCBjYXJyeQ0NCglBREQJ RUJYLCAyCQkJOyBSZWFkeSBuZXh0IHdvcmQNDQoJREVDCUVDWAkJCTsgQnVt cCB0aGUgcGFja2V0IGxlbmd0aA0NCglKTloJTkRPSVQJCQk7IENvbnRpbnVl DQ0KOw0NCk5ET05FOglNT1YJRUFYLEVEWAkJCTsgUmV0dXJuIGluIEVBWCB0 byBiZSBmYWlyDQ0KCVJFVA0NCjsNDQo7LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS0NDQo7DQ0KUFJQNglMQUJFTAlCWVRFDQ0KQVNDSUkgPFRo aXMgdHJpZXMgdG8gYmUgY3V0ZSB3aXRoIHRoZSBMT0RTVyBhbmQgdW5yb2xs cyBzb21lIGxvb3BzLj4NDQpBU0NJSSA8SXQgaXMgYW4gZXhhbXBsZSBvZiBl eHRyZW1lIGNvbXBsaWNhdGlvbiBkb2luZyB2ZXJ5IGxpdHRsZS4+DQ0KRU9M DQ0KOw0NClNJTVBMRV9VTlJPTEw6DQ0KCU1PVglFQ1gsIChQQUNLRVRfTEVO IFNIUiAxKQ0NCglNT1YJRVNJLCBPRkZTRVQgSVBfUEFDS0VUDQ0KCVhPUglF RFgsIEVEWAkJOyBDbGVhciBDWSwgemVybw0NCglNT1YJRUJYLCBFRFgJCTsg WmVybyB0aGlzIHRvbw0NCglNT1YJRUFYLCBFRFgJCTsgTWFrZSBzdXJlIGhp Z2ggd29yZCBpcyB6ZXJvDQ0KCUNMRA0NCg0NClRSWUVNOglDTVAJRUNYLDE2 CQkJOyBBdCBsZWFzdCAxNiB3b3Jkcz8NDQoJSkFFCVMxNgkJCTsgWWVzLCBk byAxNiB3b3JkcyB1bnJvbGxlZA0NCglDTVAJRUNYLDgJCQk7IEF0IGxlYXN0 IDggd29yZHM/DQ0KCUpBRQlTOAkJCTsgWWVzLCBkbyA4IHdvcmRzIHVucm9s bGVkDQ0KCUNNUAlFQ1gsNAkJCTsgQXQgbGVhc3QgNCB3b3Jkcz8NDQoJSkFF CVM0CQkJOyBZZXMsIGRvIDQgd29yZHMgdW5yb2xsZWQNDQoJSk1QCVBST1AJ CQk7IE5vbmUgb2YgYWJvdmUNDQo7DQ0KUzE2OglTSFIJQlgsMQkJCTsgUHJv cGFnYXRlIGxhc3QgQ1kNDQoJTE9EU1cNDQoJQURDCURYLEFYDQ0KCUxPRFNX DQ0KCUFEQwlEWCxBWA0NCglMT0RTVw0NCglBREMJRFgsQVgNDQoJTE9EU1cN DQoJQURDCURYLEFYDQ0KCUxPRFNXDQ0KCUFEQwlEWCxBWA0NCglMT0RTVw0N CglBREMJRFgsQVgNDQoJTE9EU1cNDQoJQURDCURYLEFYDQ0KCUxPRFNXDQ0K CUFEQwlEWCxBWA0NCglMT0RTVw0NCglBREMJRFgsQVgNDQoJTE9EU1cNDQoJ QURDCURYLEFYDQ0KCUxPRFNXDQ0KCUFEQwlEWCxBWA0NCglMT0RTVw0NCglB REMJRFgsQVgNDQoJTE9EU1cNDQoJQURDCURYLEFYDQ0KCUxPRFNXDQ0KCUFE QwlEWCxBWA0NCglMT0RTVw0NCglBREMJRFgsQVgNDQoJTE9EU1cNDQoJQURD CURYLEFYDQ0KOw0NCglBREMJQlgsMAkJCTsgUHJvcGFnYXRlIGxhc3QgQ1kN DQoJU1VCCUVDWCwxNgkJCTsgQWRqdXN0IGNvdW50DQ0KCUpaCVNET05FCQkJ OyBXZSBhcmUgZG9uZQ0NCglKTVAJVFJZRU0JCQk7IFRyeSBtb3JlDQ0KOw0N ClM4OglTSFIJQlgsMQkJCTsgUHJvcGFnYXRlIGxhc3QgQ1kNDQoJTE9EU1cN DQoJQURDCURYLEFYDQ0KCUxPRFNXDQ0KCUFEQwlEWCxBWA0NCglMT0RTVw0N CglBREMJRFgsQVgNDQoJTE9EU1cNDQoJQURDCURYLEFYDQ0KCUxPRFNXDQ0K CUFEQwlEWCxBWA0NCglMT0RTVw0NCglBREMJRFgsQVgNDQoJTE9EU1cNDQoJ QURDCURYLEFYDQ0KCUxPRFNXDQ0KCUFEQwlEWCxBWA0NCjsNDQoJQURDCUJY LDAJCQk7IFByb3BhZ2F0ZSBwb3NzaWJsZSBjYXJyeQ0NCglTVUIJRUNYLDgJ CQk7IEFkanVzdCBjb3VudA0NCglKWglTRE9ORQkJCTsgV2UgYXJlIGRvbmUN DQoJSk1QCVRSWUVNCQkJOyBUcnkgbW9yZQ0NCjsNDQpTNDoJU0hSCUJYLDEJ CQk7IFByb3BhZ2F0ZSBsYXN0IGNhcnJ5DQ0KCUxPRFNXDQ0KCUFEQwlEWCxB WA0NCglMT0RTVw0NCglBREMJRFgsQVgNDQoJTE9EU1cNDQoJQURDCURYLEFY DQ0KCUxPRFNXDQ0KCUFEQwlEWCxBWA0NCglBREMJQlgsMAkJCTsgU2F2ZSBw b3NzaWJsZSBjYXJyeQ0NCjsNDQoJU1VCCUVDWCw0CQkJOyBBZGp1c3QgY291 bnQNDQoJSloJU0RPTkUJCQk7IFdlIGFyZSBkb25lDQ0KCUpNUAlUUllFTQkJ CTsgVHJ5IG1vcmUNDQo7DQ0KUFJPUDoJU0hSCUJYLDEJCQk7IFByb3BhZ2F0 ZSBsYXN0IENZDQ0KU0lNUExFOglMT0RTVwkJCQk7IERvaXQNDQoJQURDCURY LEFYCQkJOyBTdW0gd29yZHMgb25seSB3aXRoIHByZXZpb3VzIENZDQ0KCUxP T1AJU0lNUExFCQkJOyBEb2l0Mml0DQ0KCUFEQwlCWCwwCQkJOyBQb3NzaWJs ZSBsYXN0IENZDQ0KU0RPTkU6CVNIUglCWCwxDQ0KCUFEQwlEWCwwCQkJOyBQ cm9wYWdhdGUgbGFzdCBDWQ0NCglNT1YJRUFYLEVEWAkJCTsgUmV0dXJuIGlu IEVBWCB0byBiZSBmYWlyDQ0KCVJFVA0NCjsNDQo7LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS0NDQo7DQ0KUFJQNwlMQUJFTAlCWVRFDQ0KQVND SUkgPFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHRoZSBzaW1wbGUgY2hlY2tzdW0u IEl0IHVzZXMgTE9EU1cuIEhvd2V2ZXI+DQ0KQVNDSUkgPGl0IGZvbGRzIGJh Y2sgYWxsIHRoZSBjYXJyaWVzIG11Y2ggbGlrZSB0aGUgc3RhbmRhcmQgQyBj b2RlLj4NDQpFT0wNDQo7DQ0KRk9MREJBQ0tfQ0hLU1VNOg0NCglNT1YJRUNY LCAoUEFDS0VUX0xFTiBTSFIgMSkJOyBHZXQgcGFja2V0IGxlbmd0aA0NCglN T1YJRVNJLCBPRkZTRVQgSVBfUEFDS0VUCTsgUG9pbnQgdG8gcGFja2V0DQ0K CVhPUglFRFgsIEVEWAkJOyBDbGVhciBDWSwgemVybw0NCglNT1YJRUFYLCBF RFgJCTsgTWFrZSBzdXJlIGhpZ2ggd29yZCBpcyB6ZXJvDQ0KCUNMRA0NCjsN DQpDSEtFTVc6CUxPRFNXCQkJCTsgRG9pdA0NCglBREQJRURYLEVBWAkJCTsg U3VtIGxvbmd3b3JkcyBvbmx5DQ0KCUxPT1AJQ0hLRU1XCQkJOyBEb2l0Mml0 DQ0KCU1PVglFQVgsRURYDQ0KCVNIUglFQVgsMTYJCQk7IEV4cG9zZSB0aGUg Y2Fycmllcw0NCglBREQJRFgsQVgJCQk7IFN1bSBhbGwgdGhlIGNhcnJpZXMg aW50byBMT1cgd29yZA0NCglBREMJRFgsMAkJCTsgVGhlIGxhc3Qgc3VtIGNv dWxkIGhhdmUgY2FycmllZA0NCglBTkQJRURYLDBGRkZGSAkJOyBTYXZlIG9u bHkgdGhlIGxvdyB3b3JkDQ0KCU1PVglFQVgsRURYCQkJOyBSZXR1cm4gaW4g RUFYIHRvIGJlIGZhaXINDQoJUkVUDQ0KOw0NCjstPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LQ0NCjsNDQpQUlA4CUxBQkVMCUJZVEUNDQpBU0NJ SSA8VGhpcyBpcyBhIHZlcnNpb24gb2YgdGhlIHNpbXBsZSBjaGVja3N1bS4g SXQgdXNlcyBMT0RTVy4gSG93ZXZlcj4NDQpBU0NJSSA8aXQgZG9lcyBub3Qg dXNlIGEgbG9vcCBjb3VudGVyLiBJdCB1c2VzIGZvbGQtYmFjayBmb3IgY2Fy cmllcy4+DQ0KRU9MDQ0KOw0NCk5PQ09VTlRfQ0hLU1VNOg0NCglNT1YJRUNY LCBQQUNLRVRfTEVOCQk7IEdldCBwYWNrZXQgbGVuZ3RoIChieXRlcykNDQoJ TU9WCUVTSSwgT0ZGU0VUIElQX1BBQ0tFVAk7IFBvaW50IHRvIHBhY2tldA0N CglBREQJRUNYLCBFU0kJCTsgRUNYIHBvaW50cyB0byBsYXN0IHBhY2tldA0N CglYT1IJRURYLCBFRFgJCTsgQ2xlYXIgQ1ksIHplcm8NDQoJTU9WCUVBWCwg RURYCQk7IE1ha2Ugc3VyZSBoaWdoIHdvcmQgaXMgemVybw0NCglDTEQNDQo7 DQ0KQ0hLRU1YOglMT0RTVwkJCQk7IERvaXQNDQoJQURECUVEWCxFQVgJCQk7 IFN1bSBsb25nd29yZHMgb25seQ0NCglDTVAJRVNJLEVDWAkJCTsgRW5kIG9m IHRoZSBsaXN0Pw0NCglKQglDSEtFTVgJCQk7IERvaXQyaXQNDQoJTU9WCUVB WCxFRFgNDQoJU0hSCUVBWCwxNgkJCTsgRXhwb3NlIHRoZSBjYXJyaWVzDQ0K CUFERAlEWCxBWAkJCTsgU3VtIGFsbCB0aGUgY2FycmllcyBpbnRvIExPVyB3 b3JkDQ0KCUFEQwlEWCwwCQkJOyBUaGUgbGFzdCBzdW0gY291bGQgaGF2ZSBj YXJyaWVkDQ0KCUFORAlFRFgsMEZGRkZICQk7IFNhdmUgb25seSB0aGUgbG93 IHdvcmQNDQoJTU9WCUVBWCxFRFgJCQk7IFJldHVybiBpbiBFQVggdG8gYmUg ZmFpcg0NCglSRVQNDQo7DQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tDQ0KUFJQOQlMQUJFTAlCWVRFDQ0KQVNDSUkgPFRoaXMgdHJpZXMg dG8gYmUgY3V0ZSBhbmQgdW5yb2xsIGxvb3BzIGJ1dCBzdW1zIGZyb20gbWVt b3J5Pg0NCkFTQ0lJIDx3aXRob3V0IGFuIGludGVybWVkaWF0ZSByZWdpc3Rl ciBvcGVyYW5kLiBJdCBhbHNvIGdvZXMgb3ZlcmJvYXJkPg0NCkFTQ0lJIDxv biB0aGUgbG9vcC11bnJvbGxpbmcgYW5kIHRyaWVzIHRvIG1haW50YWluIGEg cGlwZWxpbmUuPg0NCkVPTA0NCjstPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LQ0NCjsNDQo7CVRoaXMgbWFjcm8gcmVkdWNlcyB0aGUgYW1vdW50 IG9mIHR5cGluZyBhbmQgc3ludGF4IGNoZWNraW5nIHRoYXQNDQo7CUkgaGF2 ZSB0byBkby4NDQo7DQ0KUVVBRAlNQUNSTyBMSU1JVA0NCglOID0gMA0NCiBS RVBUICBMSU1JVA0NCiAgSUZFIE4gLSBMSU1JVA0NCiAgIEVYSVRNDQ0KICBF TFNFDQ0KICAgIElGIChOIE5FIDApDQ0KCU1PVglFRFgsIFtFQlgrJk4mXQkJ OyBJZiB0aGVyZSBpcyBhbiBvZmZzZXQNDQogICAgRUxTRQ0NCglNT1YJRURY LCBbRUJYXQkJOyBJZiB0aGVyZSBpc24ndCBhbiBvZmZzZXQNDQogICAgRU5E SUYNDQoJQURDCUVBWCwgRURYCQk7IERvIHRoaXMgd2hpbGUgdGhlIHBpcGVs aW5lIGZpbGxzDQ0KICAgIElGRSAoKE4gTU9EIDEyOCkpDQ0KCU1PVglFRFgs RURYCQkJOyBQcmV2ZW50IHBpcGVsaW5lIHN0YWxsDQ0KICAgIEVORElGDQ0K ICBOID0gTiArIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVh ZHkgZm9yIG5leHQgbG9uZ3dvcmQNDQogRU5ETQ0NCkVORE0NDQo7LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQpVTlJPTExfTE9PUFNPOg0N CglNT1YJRUNYLCBQQUNLRVRfTEVOCQk7IEdldCBwYWNrZXQgbGVuZ3RoDQ0K CU1PVglFQlgsIE9GRlNFVCBJUF9QQUNLRVQJOyBQb2ludCB0byB0aGUgcGFj a2V0DQ0KCVhPUglFRFgsIEVEWAkJOyBDbGVhciBDWSwgemVybw0NCglNT1YJ RUFYLCBFRFgJCTsgTWFrZSBzdXJlIGhpZ2ggd29yZCBpcyB6ZXJvDQ0KOw0N CjsJVGhpcyBtYXkgZ2V0IHVzIHRvIGEgY2FjaGUgbGluZS4NDQo7DQ0KQUxJ R04JMjBIDQ0KRklYVVA6CU1PVglEWCxXT1JEIFBUUiBbRUJYXQ0NCglURVNU CUVCWCwxRkgNDQoJSloJT1RSSUFMDQ0KCUFERAlFQVgsRURYDQ0KCVNCQglF RFgsRURYCQkJOyBQcm9wYWdhdGUgY2FycnkNDQoJTEVBCUVCWCxbRUJYKzJd CQk7IEFkanVzdCBwb2ludGVyDQ0KCVNVQglFQ1gsMgkJCTsgQWRqdXN0IGNv dW50DQ0KCUpaCU9ET05FCQkJOyBXZSBhcmUgZG9uZS4NDQoJSk1QCVNIT1JU IEZJWFVQDQ0KOw0NCk9UUklBTDoJVEVTVAlFQ1gsKE5PVCAoMTI4LTEpKQk7 IEF0IGxlYXN0IDEyOCBieXRlcz8NDQoJSk5aCU9EMTI4CQkJOyBZZXMsIGRv IDEyOCBieXRlcw0NCglURVNUCUVDWCwoTk9UICg2NC0xKSkJOyBBdCBsZWFz dCA2NCBieXRlcz8NDQoJSk5aCU9ETzY0CQkJOyBZZXMsIGRvIDY0IGJ5dGVz IHVucm9sbGVkDQ0KCVRFU1QJRUNYLChOT1QgKDMyLTEpKQk7IEF0IGxlYXN0 IDMyIGJ5dGVzPw0NCglKTloJT0RPMzIJCQk7IFllcywgZG8gMzIgYnl0ZXMg dW5yb2xsZWQNDQoJVEVTVAlFQ1gsKE5PVCAoMTYtMSkpCTsgQXQgbGVhc3Qg MTYgYnl0ZXM/DQ0KCUpOWglPRE8xNgkJCTsgWWVzLCBkbyA4IHdvcmRzIHVu cm9sbGVkDQ0KCVRFU1QJRUNYLChOT1QgKDgtMSkpCQk7IEF0IGxlYXN0IDgg Ynl0ZXM/DQ0KCUpOWglPRE84CQkJOyBZZXMsIGRvIDggYnl0ZXMgdW5yb2xs ZWQNDQoJSk1QCU9QUk9QCQkJOyBOb25lIG9mIGFib3ZlDQ0KOw0NCkFMSUdO CTIwSA0NCk9EMTI4OglBREQJRURYLEVEWAkJCTsgUHJvcGFnYXRlIENZDQ0K CVFVQUQJMTI4CQkJOyBNQUNSTyBkZWZpbmVkIGFib3ZlDQ0KCVNCQglFRFgs RURYCQkJOyBQcm9wYWdhdGUgbGFzdCBjYXJyeQ0NCglMRUEJRUJYLFtFQlgr MTI4XQkJOyBBZGp1c3QgcG9pbnRlcg0NCglTVUIJRUNYLDEyOAkJCTsgQWRq dXN0IGNvdW50DQ0KCUpaCU9ET05FCQkJOyBXZSBhcmUgZG9uZQ0NCglKTVAJ T1RSSUFMCQkJOyBUcnkgbW9yZQ0NCjsNDQpBTElHTgkyMEgNDQpPRE82NDoJ QURECUVEWCxFRFgJCQk7IFByb3BhZ2F0ZSBDWQ0NCglRVUFECTY0CQkJOyBN QUNSTyBkZWZpbmVkIGFib3ZlDQ0KCVNCQglFRFgsRURYCQkJOyBQcm9wYWdh dGUgbGFzdCBjYXJyeQ0NCglMRUEJRUJYLFtFQlgrNjRdCQk7IEFkanVzdCBw b2ludGVyDQ0KCVNVQglFQ1gsNjQJCQk7IEFkanVzdCBjb3VudA0NCglKWglP RE9ORQkJCTsgV2UgYXJlIGRvbmUNDQoJSk1QCU9UUklBTAkJCTsgVHJ5IG1v cmUNDQo7DQ0KQUxJR04JMjBIDQ0KT0RPMzI6CUFERAlFRFgsRURYCQkJOyBQ cm9wYWdhdGUgQ1kNDQoJUVVBRAkzMgkJCTsgTUFDUk8gZGVmaW5lZCBhYm92 ZQ0NCglTQkIJRURYLEVEWAkJCTsgUHJvcGFnYXRlIGxhc3QgY2FycnkNDQoJ TEVBCUVCWCxbRUJYKzMyXQkJOyBBZGp1c3QgcG9pbnRlcg0NCglTVUIJRUNY LDMyCQkJOyBBZGp1c3QgY291bnQNDQoJSloJT0RPTkUJCQk7IFdlIGFyZSBk b25lDQ0KCUpNUAlPVFJJQUwJCQk7IFRyeSBtb3JlDQ0KOw0NCkFMSUdOCTIw SA0NCk9ETzE2OglBREQJRURYLEVEWAkJCTsgUHJvcGFnYXRlIGxhc3QgY2Fy cnkNDQoJUVVBRAkxNgkJCTsgTUFDUk8gZGVmaW5lZCBhYm92ZQ0NCglTQkIJ RURYLEVEWAkJCTsgUHJvcGFnYXRlIGNhcnJ5DQ0KCUxFQQlFQlgsW0VCWCsx Nl0JCTsgQWRqdXN0IHBvaW50ZXINDQoJU1VCCUVDWCwxNgkJCTsgQWRqdXN0 IGNvdW50DQ0KCUpaCU5ET05FCQkJOyBXZSBhcmUgZG9uZQ0NCglKTVAJT1RS SUFMCQkJOyBUcnkgbW9yZQ0NCjsNDQpBTElHTgkyMEgNDQpPRE84OglBREQJ RURYLEVEWA0NCglRVUFECTgJCQk7IE1BQ1JPIGRlZmluZWQgYWJvdmUNDQoJ U0JCCUVEWCxFRFgJCQk7IFByb3BhZ2F0ZSBjYXJyeQ0NCglMRUEJRUJYLFtF QlgrOF0JCTsgQWRqdXN0IHBvaW50ZXINDQoJU1VCCUVDWCw4CQkJOyBBZGp1 c3QgY291bnQNDQoJSloJT0RPTkUJCQk7IFdlIGFyZSBkb25lDQ0KCUpNUAlP VFJJQUwJCQk7IFRyeSBtb3JlDQ0KOw0NCkFMSUdOCTEwSA0NCk9QUk9QOglB REQJRURYLEVEWA0NCk9ET0JZOglBREMJQVgsIFdPUkQgUFRSIFtFQlhdCTsg U3VtIHdvcmRzDQ0KCUxFQQlFQlgsW0VCWCsyXQkJOyBSZWFkeSBuZXh0IHdv cmQNDQoJREVDCUVDWAkJCTsgU2VlIGlmIE9ERA0NCglKWglXQVNPREQJCQk7 IE5vdCBnb29kLCBPREQgYnl0ZSBjb3VudA0NCglERUMJRUNYCQkJOyBOZXh0 IHdvcmQNDQoJSk5aCU9ET0JZCQkJOyBDb250aW51ZQ0NCglBREMJRUFYLDAJ CQk7IFBpY2sgdXAgcG9zc2libGUgbGFzdCBjYXJyeQ0NCglNT1YJRURYLEVB WAkJCTsgR2V0IGN1cnJlbnQNDQoJU0hSCUVEWCwxNgkJCTsgSGlnaCBiaXRz IGludG8gbG93DQ0KCUFERAlBWCxEWAkJCTsgU3VtIGNhcnJpZXMNDQoJQURD CUVBWCwwDQ0KCVJFVA0NCjsNDQpBTElHTgkxMEgJCQkJOyBPZGQgYnl0ZS1j b3VudCwgd2UgaGF2ZSBhIHByb2JsZW0NDQpXQVNPREQ6CURFQwlFQlgJCQk7 IExhc3QgYnl0ZSBpbiBidWZmZXINDQoJTU9WCUVEWCwwCQkJOyBFeHBlbnNp dmUgemVybw0NCglNT1YJREwsQllURSBQVFIgW0VCWF0JOyBHZXQgbGFzdCBi eXRlDQ0KCUFEQwlFQVgsRURYCQkJOyBTdW0gYXMgdXN1YWwNDQoJU0hSCUVE WCwxNgkJCTsgSGlnaCBiaXRzIGludG8gbG93DQ0KCUFERAlBWCxEWAkJCTsg U3VtIGNhcnJpZXMNDQoJQURDCUVBWCwwDQ0KCVJFVA0NCjsNDQpBTElHTgkx MEgNDQpPRE9ORToJQURECUVEWCxFRFgJCQk7IFByb3BhZ2F0ZSBjYXJyeQ0N CglBREMJRUFYLDAJCQk7IFBvc3NpYmxlIGNhcnJ5DQ0KCU1PVglFRFgsRUFY CQkJOyBHZXQgY3VycmVudA0NCglTSFIJRURYLDE2CQkJOyBIaWdoIGJpdHMg aW50byBsb3cNDQoJQURECUFYLERYCQkJOyBTdW0gY2Fycmllcw0NCglBREMJ RUFYLDANDQoJUkVUDQ0KOw0NCjstPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LQ0NClBSUDEwCUxBQkVMCUJZVEUNDQpBU0NJSQk8VGhpcyBwZXJm b3JtcyB0aGUgc2FtZSBjaGVja3N1bSwgYnV0IGRvZXMgbm90IHVzZSBidWls dC1pbiBtYWNyb3MuPg0NCkFTQ0lJCTxJdCB1c2VzIExFQSBpbiBhIHN0cmFu Z2Ugd2F5IChQYWdlIEctMTAgb2YgdGhlIEludGVsIHJhZykuPg0NCkFTQ0lJ CTxOb3JtYWxseSBMRUEgbWVhbnMgT0ZGU0VUIGluIGxpbmVhciBtb2RlLCBi dXQgaXQgd2lsbCBjaGFuZ2U+DQ0KQVNDSUkJPHRoZSBwb2ludGVyIGJ5IGEg Y29uc3RhbnQgc2NhbGluZyBmYWN0b3IgaW4gb25seSBvbmUgY2xvY2suPg0N CkVPTA0NCjsNDQpTSU1QTEVfU1BVRDoNDQoJTU9WCUVDWCwgKFBBQ0tFVF9M RU4gU0hSIDEpCTsgR2V0IHBhY2tldCBsZW5ndGgNDQoJTU9WCUVCWCwgT0ZG U0VUIElQX1BBQ0tFVAk7IFBvaW50IHRvIHBhY2tldA0NCglYT1IJRURYLCBF RFgJCTsgQ2xlYXIgQ1ksIHplcm8NDQoJTU9WCUVBWCwgRURYCQk7IE1ha2Ug c3VyZSBoaWdoIHdvcmQgaXMgemVybw0NCjsNDQpTUFVEOglBREMJRFgsIFdP UkQgUFRSIFtFQlhdCTsgR2V0IHRoZSB3b3JkDQ0KCUxFQQlFQlgsIFtFQlgr Ml0JCTsgQ3V0ZSB0cmljaw0NCglERUMJRUNYCQkJOyBCdW1wIHRoZSBwYWNr ZXQgbGVuZ3RoDQ0KCUpOWglTUFVECQkJOyBDb250aW51ZQ0NCglBREMJRFgs MAkJCTsgUG9zc2libGUgbGFzdCBjYXJyeQ0NCglNT1YJRUFYLEVEWAkJCTsg UmV0dXJuIGluIEVBWCB0byBiZSBmYWlyDQ0KCVJFVA0NCjsNDQo7LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0NDQpQUlAxMQlMQUJFTAlCWVRF DQ0KQVNDSUkJPFRoaXMgaXMgdGhlIGxpbnV4IGNoZWNrc3VtLiBUaGUgb3Jp Z2luYWwgY29kZSBpcyBsZWZ0IHdpdGhpbj4NDQpBU0NJSQk8dGhlIGNvbnZl cnRlZCBzb3VyY2Ugc28gdGhhdCB5b3UgY2FuIGNoZWNrIHRoYXQgaXQgd2Fz IGNvcnJlY3RseT4NDQpBU0NJSQk8Y29udmVydGVkLiBJdCcncyB1Z2x5LCBi dXQgdGhlIG51bWJlcnMgc3BlYWsgZm9yIHRoZW1zZWx2ZXMuPg0NCkVPTA0N CkxJTlVYOglNT1YJRUNYLCBQQUNLRVRfTEVOCQk7IEdldCBwYWNrZXQgbGVu Z3RoDQ0KCU1PVglFU0ksIE9GRlNFVCBJUF9QQUNLRVQJOyBQb2ludCB0byBw YWNrZXQNDQoJWE9SCUVEWCwgRURYCQk7IENsZWFyIENZLCB6ZXJvDQ0KCU1P VglFQVgsIEVEWAkJOyBNYWtlIHN1cmUgaGlnaCB3b3JkIGlzIHplcm8NDQoN DQo7CV9fYXNtX18oIg0NCjsJICAgIHRlc3RsICQyLCAlJWVzaQkJIyBDaGVj ayBhbGlnbm1lbnQuDQ0KCVRFU1QJRVNJLDINDQo7CSAgICBqeiAyZgkJCSMg SnVtcCBpZiBhbGlnbm1lbnQgaXMgb2suDQ0KCUpaCUYyDQ0KOwkgICAgc3Vi bCAkMiwgJSVlY3gJCSMgQWxpZ25tZW50IHVzZXMgdXAgdHdvIGJ5dGVzLg0N CglTVUIJRUNYLDINDQo7CSAgICBqYWUgMWYJCQkjIEp1bXAgaWYgd2UgaGFk IGF0IGxlYXN0IHR3byBieXRlcy4NDQoJSkFFCUYxDQ0KOwkgICAgYWRkbCAk MiwgJSVlY3gJCSMgZWN4IHdhcyA8IDIuICBEZWFsIHdpdGggaXQuDQ0KCUFE RAlFQ1gsMg0NCjsJICAgIGptcCA0Zg0NCglKTVAJRjQNDQo7MToJbW92dyAo JSVlc2kpLCAlJWJ4DQ0KRjE6CU1PVglCWCwgV09SRCBQVFIgW0VTSV0NDQo7 CSAgICBhZGRsICQyLCAlJWVzaQ0NCglBREQJRVNJLDINDQo7CSAgICBhZGR3 ICUlYngsICUlYXgNDQoJQURECUFYLEJYDQ0KOwkgICAgYWRjbCAkMCwgJSVl YXgNDQoJQURDCUVBWCwwDQ0KOzI6DQ0KRjI6DQ0KOwkgICAgbW92bCAlJWVj eCwgJSVlZHgNDQoJTU9WCUVEWCxFQ1gNDQo7CSAgICBzaHJsICQ1LCAlJWVj eA0NCglTSFIJRUNYLDUNDQo7CSAgICBqeiAyZg0NCglKWglGMjINDQo7CSAg ICB0ZXN0bCAlJWVzaSwgJSVlc2kNDQoJVEVTVAlFU0ksRVNJDQ0KOzE6CSAg ICBtb3ZsICglJWVzaSksICUlZWJ4DQ0KRjExOglNT1YJRUJYLCBEV09SRCBQ VFIgW0VTSV0NDQo7CSAgICBhZGNsICUlZWJ4LCAlJWVheA0NCglBREMJRUFY LEVCWA0NCjsJICAgIG1vdmwgNCglJWVzaSksICUlZWJ4DQ0KCU1PVglFQlgs IERXT1JEIFBUUiBbRVNJKzRdDQ0KOwkgICAgYWRjbCAlJWVieCwgJSVlYXgN DQoJQURDCUVBWCxFQlgNDQo7CSAgICBtb3ZsIDgoJSVlc2kpLCAlJWVieA0N CglNT1YJRUJYLCBEV09SRCBQVFIgW0VTSSs4XQ0NCjsJICAgIGFkY2wgJSVl YngsICUlZWF4DQ0KCUFEQwlFQVgsRUJYDQ0KOwkgICAgbW92bCAxMiglJWVz aSksICUlZWJ4DQ0KCU1PVglFQlgsIERXT1JEIFBUUiBbRVNJKzEyXQ0NCjsJ ICAgIGFkY2wgJSVlYngsICUlZWF4DQ0KCUFEQwlFQVgsRUJYDQ0KOwkgICAg bW92bCAxNiglJWVzaSksICUlZWJ4DQ0KCU1PVglFQlgsIERXT1JEIFBUUiBb RVNJKzE2XQ0NCjsJICAgIGFkY2wgJSVlYngsICUlZWF4DQ0KCUFEQwlFQVgs RUJYDQ0KOwkgICAgbW92bCAyMCglJWVzaSksICUlZWJ4DQ0KCU1PVglFQlgs IERXT1JEIFBUUiBbRVNJKzIwXQ0NCjsJICAgIGFkY2wgJSVlYngsICUlZWF4 DQ0KCUFEQwlFQVgsRUJYDQ0KOwkgICAgbW92bCAyNCglJWVzaSksICUlZWJ4 DQ0KCU1PVglFQlgsIERXT1JEIFBUUiBbRVNJKzI0XQ0NCjsJICAgIGFkY2wg JSVlYngsICUlZWF4DQ0KCUFEQwlFQVgsRUJYDQ0KOwkgICAgbW92bCAyOCgl JWVzaSksICUlZWJ4DQ0KCU1PVglFQlgsIERXT1JEIFBUUiBbRVNJKzI4XQ0N CjsJICAgIGFkY2wgJSVlYngsICUlZWF4DQ0KCUFEQwlFQVgsRUJYDQ0KOwkg ICAgbGVhIDMyKCUlZXNpKSwgJSVlc2kNDQoJTEVBCUVTSSwgW0VTSSszMl0N DQo7CSAgICBkZWMgJSVlY3gNDQoJREVDCUVDWA0NCjsJICAgIGpuZSAxYg0N CglKTkUJRjExDQ0KOwkgICAgYWRjbCAkMCwgJSVlYXgNDQoJQURDCUVBWCww DQ0KOzI6CSAgICBtb3ZsICUlZWR4LCAlJWVjeA0NCkYyMjoJTU9WCUVDWCxF RFgNDQo7CSAgICBhbmRsICQweDFjLCAlJWVkeA0NCglBTkQJRURYLCAxQ0gN DQo7CSAgICBqZSA0Zg0NCglKRQlGNA0NCjsJICAgIHNocmwgJDIsICUlZWR4 DQ0KCVNIUglFRFgsMg0NCjsJICAgIHRlc3RsICUlZXNpLCAlJWVzaQ0NCglU RVNUCUVTSSxFU0kNDQo7MzoJICAgIGFkY2wgKCUlZXNpKSwgJSVlYXgNDQpG MzoJQURDCUVBWCwgRFdPUkQgUFRSIFtFU0ldDQ0KOwkgICAgbGVhIDQoJSVl c2kpLCAlJWVzaQ0NCglMRUEJRVNJLCBbRVNJKzRdDQ0KOwkgICAgZGVjICUl ZWR4DQ0KCURFQwlFRFgNDQo7CSAgICBqbmUgM2INDQoJSk5FCUYzDQ0KOwkg ICAgYWRjbCAkMCwgJSVlYXgNDQoJQURDCUVBWCwwDQ0KOzQ6CSAgICBhbmRs ICQzLCAlJWVjeA0NCkY0OglBTkQJRUNYLDMNDQo7CSAgICBqeiA3Zg0NCglK WglGNw0NCjsJICAgIGNtcGwgJDIsICUlZWN4DQ0KCUNNUAlFQ1gsMg0NCjsJ ICAgIGpiIDVmDQ0KCUpCCUY1DQ0KOwkgICAgbW92dyAoJSVlc2kpLCUlY3gN DQoJTU9WCUNYLCBXT1JEIFBUUiBbRVNJXQ0NCjsJICAgIGxlYWwgMiglJWVz aSksJSVlc2kNDQoJTEVBCUVTSSwgW0VTSSsyXQ0NCjsJICAgIGplIDZmDQ0K CUpFCUY2DQ0KOwkgICAgc2hsbCAkMTYsJSVlY3gNDQoJU0hMCUVDWCwxNg0N Cjs1OgkgICAgbW92YiAoJSVlc2kpLCUlY2wNDQpGNToJTU9WCUNMLEJZVEUg UFRSIFtFU0ldDQ0KOzY6CSAgICBhZGRsICUlZWN4LCUlZWF4DQ0KRjY6CUFE RAlFQVgsRUNYDQ0KOwkgICAgYWRjbCAkMCwgJSVlYXgNDQoJQURDCUVBWCww DQ0KOzc6CSAgICAiDQ0KRjc6DQ0KOw0NCjsJTmVlZCB0byBmb2xkIGJhY2sg YW5kIGNvbnZlcnQgdG8gYSBXT1JEIGFzIHVzZWQgaW4gVENQL0lQLg0NCjsN DQoJTU9WCUVEWCxFQVgNDQoJU0hSCUVEWCwxNg0NCglBREQJQVgsRFgNDQoJ QURDCUVBWCwwDQ0KCVJFVA0NCjsJOiAiPWEiKHN1bSkNDQo7CTogIjAiKHN1 bSksICJjIihsZW4pLCAiUyIoYnVmZikNDQo7CTogImJ4IiwgImN4IiwgImR4 IiwgInNpIik7DQ0KOwlyZXR1cm4oc3VtKTsNDQo7DQ0KOy09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOwlUaGlzICBnZXRzIHRoZSBjdXJy ZW50IGludGVybmFsIGN5Y2xlIHRpbWVyIHZhbHVlLg0NCjsNDQpTVEFSVF9U SU1FUjoNDQoJWE9SCUVBWCxFQVgJCQk7IE1ha2Ugc3VyZSB3aG9sZSByZWdp c3RlciBpcyBjbGVhcg0NCglNT1YJRURYLEVBWA0NCglEQgkwRkgNDQoJREIJ MzFIDQ0KCU1PVglEV09SRCBQVFIgQ1RJTV9MT1dfTFcsIEVBWA0NCglNT1YJ RFdPUkQgUFRSIENUSU1fSElHX0xXLCBFRFgNDQoJUkVUDQ0KOy09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOwlUaGlzIGdldHMgdGhlIGN1 cnJlbnQgaW50ZXJuYWwgY3ljbGUgdGltZXIgdmFsdSBhbmQgY2FsY3VsYXRl cw0NCjsJdGhlIENQVSBjeWNsZXMgdXNlZCBzaW5jZSB0aGUgcHJldmlvdXMg Y2FsbCB0byBTVEFSVF9USU1FUi4NDQo7DQ0KU1RPUF9USU1FUjoNDQoJWE9S CUVBWCxFQVgJCQk7IE1ha2Ugc3VyZSB3aG9sZSByZWdpc3RlciBpcyBjbGVh cg0NCglNT1YJRURYLEVBWA0NCglEQgkwRkgNDQoJREIJMzFIDQ0KCVNVQglF QVgsIERXT1JEIFBUUiBDVElNX0xPV19MVw0NCglTQkIJRURYLCBEV09SRCBQ VFIgQ1RJTV9ISUdfTFcNDQoJTU9WCURXT1JEIFBUUiBDVElNX0xPV19MVywg RUFYDQ0KCU1PVglEV09SRCBQVFIgQ1RJTV9ISUdfTFcsIEVEWA0NCglSRVQN DQo7DQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQ0KOw0N CjsJV3JpdGUgYSBoZXgtQVNDSUkgV09SRCBpbiBBWCB0byBtZW1vcnkgYWRk cmVzc2VkIGJ5IEVTOkRJLg0NCjsNDQpIRVhXOglQVVNICUVBWAkJCTsgU2F2 ZSBoZXggV09SRA0NCglNT1YJQUwsQUgJCQk7IEhpZ2ggQllURSBmaXJzdA0N CglDQUxMCUhFWEIJCQk7IENvbnZlcnQgYnl0ZQ0NCglQT1AJRUFYCQkJOyBH ZXQgb3JpZ2luYWwsIGZhbGwgdGhyb3VnaA0NCjstPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LQ0NCjsNDQo7CVdyaXRlIGEgaGV4LUFTQ0lJIEJZ VEUgaW4gQUwgdG8gbWVtb3J5IGFkZHJlc3NlZCBieSBFUzpESS4NDQo7DQ0K SEVYQjoJTU9WCUFILEFMCQkJOyBTYXZlIGJ5dGUNDQoJU0hSCUFMLDQJCQk7 IElzb2xhdGUgdG9wIG5pYmJsZQ0NCglDQUxMCUhFWE4JCQk7IENvbnZlcnQg aGliYmxlDQ0KCU1PVglBTCxBSAkJCTsgR2V0IGhleCBieXRlDQ0KCUFORAlB TCwwMDAwMTExMUIJCTsgTWFzayBoaWdoLCBmYWxsIHRocm91Z2gNDQpIRVhO OglBREQJQUwsOTBICQkJOyBBZGQgYmlhcw0NCglEQUEJCQkJOyBPbGQgSW50 ZWwgdHJpY2sNDQoJQURDCUFMLDQwSAkJCTsgUGljayB1cCBDWSBpbnRvIGhp Z2ggbmliYmxlDQ0KCURBQQkJCQk7IFJlYWRqdXN0DQ0KCVNUT1NCCQkJCTsg UHV0IGludG8gbWVtb3J5DQ0KCVJFVA0NCjstPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LQ0NCjsNDQo7CVRoaXMgZGlzcGxheXMgdGhlIHJlc3Vs dHMuIFRoZSBmdW5jdGlvbiBudW1iZXIgaXMgaW4gQUwgd2hlbg0NCjsJdGhp cyBpcyBjYWxsZWQuDQ0KOw0NCkRJU1BMOglNT1YJRURJLE9GRlNFVCBGTg0N CglDQUxMCUhFWEINDQoJTU9WCUVESSxPRkZTRVQgQ0hLDQ0KCU1PVglBWCxX T1JEIFBUUiBDSEtTVU0NDQoJQ0FMTAlIRVhXDQ0KCU1PVglBWCxXT1JEIFBU UiBDVElNX0hJR19MVysyDQ0KCU1PVglFREksT0ZGU0VUIEgxDQ0KCUNBTEwJ SEVYVw0NCglNT1YJQVgsV09SRCBQVFIgQ1RJTV9ISUdfTFcNDQoJTU9WCUVE SSxPRkZTRVQgSDANDQoJQ0FMTAlIRVhXDQ0KCU1PVglBWCxXT1JEIFBUUiBD VElNX0xPV19MVysyDQ0KCU1PVglFREksT0ZGU0VUIEwxDQ0KCUNBTEwJSEVY Vw0NCglNT1YJQVgsV09SRCBQVFIgQ1RJTV9MT1dfTFcNDQoJTU9WCUVESSxP RkZTRVQgTDANDQoJQ0FMTAlIRVhXDQ0KCU1PVglFU0ksT0ZGU0VUIFBSUA0N CglDQUxMCVBVVFMNDQoJUkVUDQ0KOw0NCklGREVGCURFQlVHDQ0KOy09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0NDQo7DQ0KOwlUaGlzIHByb2Nl ZHVyZSBwcmludHMgYSBzdHJpbmcgb3V0IGV2ZXJ5IENPTSBwb3J0IGluIHRo ZSBtYWNoaW5lLg0NCjsJVGhlIHN0cmluZyBpcyBwb2ludGVkIHRvIGJ5IEVT SS4NDQo7DQ0KUFVUUzoJTE9EU0IJCQkJCTsgR2V0IGJ1ZmZlciBieXRlDQ0K CU9SCUFMLEFMCQkJCTsgRW5kIG9mIHN0cmluZz8NDQoJSloJUFVUUzAJCQkJ OyBBbGwgZG9uZQ0NCglDQUxMCUNPTU9VVAkJCQk7IFByaW50IGl0IGZpcnN0 DQ0KCUpNUAlTSE9SVCBQVVRTCQkJOyBDb250aW51ZQ0NClBVVFMwOglSRVQN DQo7LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPQ0NCjsNDQo7CVRy eSB0byBmaW5kIGFsbCB0aGUgY29tIHBvcnRzLCBwb3NzaWJseSA0IG9mIHRo ZW0uIFNldCB0aGVtIHRvDQ0KOwk5NjAwIGJhdWQuIElmIGEgcG9ydCBkb2Vz bid0IGV4aXN0LCBzZXQgaXQncyBCQVNFIHBvcnQgbnVtYmVyIHRvDQ0KOwkw Lg0NCjsNDQpJTklUX1VBUlRTOg0NCglNT1YJRVNJLE9GRlNFVCBQT1JUUwkJ OyBQb2ludCB0byB0YWJsZSBvZiBwb3J0cw0NCglNT1YJRUNYLDQJCQkJOyBQ b3J0cyB0byBDaGVjaw0NCkZJTkQwOglMT0RTVwkJCQkJOyBHZXQgcG9ydCBh ZGRyZXNzDQ0KCU1PVglCWCxBWAkJCQk7IFNhdmUgYmFzZSBwb3J0DQ0KCU1P VglEWCxBWAkJCQk7IFNldCBiYXNlDQ0KCUFERAlEWCxJSVIJCQkJOyBJbnRl cnJ1cHQgaWRlbnQgcmVnaXN0ZXINDQoJSU4JQUwsRFgJCQkJOyBHZXQgd2hh dGV2ZXINDQoJQU5ECUFMLDExMTExMDAwQgkJCTsgTWFzayB0cmFzaA0NCglK WglGSU5EMQkJCQk7IFBvcnQgd2FzIGZvdW5kDQ0KCU1PVglXT1JEIFBUUiBb RVNJLTJdLDAJCTsgQ2xlYXIgdGhlIHBvcnQgbnVtYmVyDQ0KCUpNUAlTSE9S VCBNT1JFCQkJOyBJdCdzIG5vdCBhbiA4MjUwIG9yIGNsb25lDQ0KOw0NCkZJ TkQxOglNT1YJRFgsQlgJCQkJOyBHZXQgYmFzZSBwb3J0DQ0KCUFERAlEWCxM Q1IJCQkJOyBPZmZzZXQgdG8gbGluZSBjb250cm9sDQ0KCU1PVglBTCwxMDAw MDAwMEIJCQk7IERpdmlzb3IgbGF0Y2ggYWNjZXNzIGJpdA0NCglPVVQJRFgs QUwJCQkJOyBTZXQgRExBQg0NCglNT1YJRFgsQlgJCQkJOyBCYXNlIHBvcnQN DQoJTU9WCUFYLDEyCQkJCTsgOTYwMCBiYXVkLXJhdGUNDQoJT1VUCURYLEFY CQkJCTsgU2V0IHRoZSBiYXVkIC0gcmF0ZQ0NCglQVVNICUVDWAkJCQk7IFNh dmUgY291bnQNDQoJTU9WCUNYLDEyMDAJCQkJOyBOZWVkIHRvIHdhaXQNDQoJ TE9PUAkkCQkJCTsgU3BpbiBhIGJpdA0NCglQT1AJRUNYCQkJCTsgUmVzdG9y ZSBjb3VudA0NCglNT1YJRFgsQlgJCQkJOyBHZXQgYmFzZSBwb3J0DQ0KCUFE RAlEWCxMQ1IJCQkJOyBPZmZzZXQgdG8gbGluZSBjb250cm9sDQ0KCU1PVglB TCwwMDAwMDAxMUIJCQk7IDggYml0cywgMSBzdG9wLCBubyBwYXJpdHkNDQoJ T1VUCURYLEFMCQkJCTsgU2V0IGJhdWQtcmF0ZQ0NCk1PUkU6CUxPT1AJRklO RDANDQoJUkVUCQkJCQk7IEFsbCBkb25lDQ0KOy09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0NDQo7DQ0KOwlUaGlzIG91dHB1dHMgb25lIGNoYXJh Y3RlciBhdCBhIHRpbWUgdG8gZWFjaCBvZiB0aGUgQ09NIHBvcnRzDQ0KOw0N CkNPTU9VVDoJUFVTSAlFQVgJCQkJOyBTYXZlIHRoZSBieXRlDQ0KCVBVU0gJ RVNJCQkJCTsgU2F2ZSBpbmRleA0NCglNT1YJRVNJLE9GRlNFVCBQT1JUUwkJ OyBQb2ludCB0byB0aGUgbGlzdA0NCglNT1YJRUNYLDQJCQkJOyBNYXggcG9y dHMgdG8gdXNlDQ0KCU1PVglFQlgsRUFYCQkJCTsgQnl0ZSB0byBzZW5kDQ0K Q09NMDoJTE9EU1cJCQkJCTsgR2V0IHBvcnQgYWRkcmVzcw0NCglPUglFQVgs RUFYCQkJCTsgQ2hlY2sgZm9yIGRlYWQgcG9ydA0NCglKWglDT00yCQkJCTsg UG9ydCBpcyBkZWFkDQ0KCU1PVglFRFgsRUFYCQkJCTsgUG9ydCBhZGRyZXNz DQ0KCUFERAlFRFgsTFNSCQkJCTsgT2Zmc2V0IHRvIGxpbmUgc3RhdHVzDQ0K Q09NMToJSU4JQUwsRFgJCQkJOyBHZXQgbGluZSBzdGF0dXMNDQoJQU5ECUFM LDAwMTAwMDAwQgkJCTsgVFggaG9sZGluZyByZWdpc3RlciBlbXB0eQ0NCglK WglDT00xCQkJCTsgV2FpdCB1bnRpbCByZWFkeQ0NCglTVUIJRURYLExTUgkJ CQk7IEJhY2sgdG8gZGF0YSByZWdpc3Rlcg0NCglNT1YJQUwsQkwJCQkJOyBH ZXQgYnl0ZQ0NCglPVVQJRFgsQUwJCQkJOyBCeXRlIGlzIHNlbnQNDQpDT00y OglMT09QCUNPTTANDQoJUE9QCUVTSQ0NCglQT1AJRUFYDQ0KCVJFVA0NCjsN DQpFTFNFDQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0NDQo7 DQ0KOwlUaGlzIHByb2NlZHVyZSBjb3BpZXMgYSBzdHJpbmcgdG8gdGhlIG91 dHB1dCBidWZmZXIuIFRoZSBzdHJpbmcNDQo7CXdpbGwgYmUgd3JpdHRlbiB0 byBzdGFuZGFyZCBvdXRwdXQgb25jZSB3ZSBhcmUgYmFjayBpbiByZWFsIG1v ZGUuDQ0KOw0NClBVVFM6CVBVU0gJRURJCQkJCTsgU2F2ZSByZWdpc3RlciB1 c2VkDQ0KCU1PVglFQ1gsMEZGRkZGRkZGSAkJCTsgLTENDQoJTU9WCUVESSxF U0kJCQkJOyBOZWVkIGluIEVESSB0byBzY2FuDQ0KCVhPUglBTCxBTAkJCQk7 IExvb2sgZm9yIHRoZSBudWxsDQ0KCVJFUE5aCVNDQVNCCQkJCTsgVW50aWwg aXQncyBmb3VuZA0NCglOT1QJRUNYCQkJCTsgV2Ugc3RhcnRlZCB3aXRoIC0x DQ0KCURFQwlFQ1gJCQkJOyBDb3JyZWN0IGZvciB6ZXJvDQ0KCU1PVglFREks RFdPUkQgUFRSIFtCUFRSXQkJOyBXaGVyZSB0byB3cml0ZSB0aGUgc3RyaW5n DQ0KCVJFUAlNT1ZTQgkJCQk7IENvcHkgdGhlIHN0cmluZw0NCglNT1YJRFdP UkQgUFRSIFtCUFRSXSxFREkJCTsgUmVhZHkgZm9yIG5leHQgdGltZQ0NCglQ T1AJRURJCQkJCTsgUmVzdG9yZSByZWdpc3RlciB1c2VkDQ0KCVJFVA0NCkVO RElGDQ0KOy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0NDQoNDQpU T1AJRVFVCSQNDQoJREQJMjAwSCBEVVAoPykNDQpNU1RBQ0sJTEFCRUwJRFdP UkQJCQkJOyBTUCBidW1wZWQgYmVmb3JlIHVzZQ0NCkJQVFIJREQJPwkJCQk7 IFBvaW50ZXIgc3RhcnRzIGF0IEJVRkZFUg0NCkJVRkZFUglMQUJFTAlCWVRF CQkJCTsgT3V0cHV0IGJ1ZmZlcg0NClBTRUcJRU5EUw0NCglFTkQJU1RBUlRV UA0NCg0NCho= ---1295196120-1051634761-849738159=:110--