T24gTW9uLCAwNyBKYW4gMjAxMyAxNTo1MToxMSAtMDUwMAp2ZWVnZWUgPHZlZWdlZUB2ZWVnZWUu b3JnPiB3cm90ZToKCj4gSSBhbSB1c2luZyBjbGFuZyBhbmQgTExWTSBhdCB0aGUgbW9tZW50LiBJ IHJlYWxseSBsaWtlIHRoZSBjb25jZXB0Cj4gYmVoaW5kIExMVk0uIENsYW5nIHJlYWRzIHN0YW5k YXJkIEMgY29kZSwgdGhlbiBvdXRwdXRzIExMVk0gYnl0ZWNvZGUsCj4gd2hpY2ggaXMgdGhlbiBv cHRpbWl6ZWQuIExMVk0gaXMgZHluYW1pY2FsbHkgcmV0YXJnZXRhYmxlLCBzbyBpdCBpcwo+IHNp bXBsZSB0byBvdXRwdXQgbWlwczMycjIgYXNzZW1ibGVyIGNvZGUuCj4gCj4gVGhpcyBpcyB3aGVy ZSBHTlUgYmludXRpbHMgY29tZXMgaW4uIGBhc2AgY29tcGlsZXMgdGhlIG1pcHMzMnIyIGNvZGUK PiBpbnRvIG9iamVjdCBmaWxlcyB3aGljaCBhcmUgdGhlbiBsaW5rZWQgYnkgYGxkYC4KPiAKPiBU aGUgbGFzdCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHRvIHRyeSBhbmQgZ2V0IGBhc2Agb3IgYGxk YCB0byBwdXQKPiBzdGF0aWMgY29uZmlnIGRhdGEgYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzIGlu IHRoZSBsaW5rZXIgc2NyaXB0Lgo+IAo+IEknbSBzdXJlIGl0IGNhbiBiZSBkb25lLCBidXQgSSBq dXN0IGRvbid0IGtub3cgaG93LiBJIGRvbid0IGtub3cgd2hlcmUKPiBhbmQgaG93IHRvIHNwZWNp ZnkgdGhlIHN0YXRpYyBkYXRhIHNvIHRoYXQgaXQgY2FuIGJlIHBsYWNlZCBhdCB0aGUKPiBwcm9w ZXIgYWRkcmVzcyBpbiB0aGUgaGV4IGltYWdlLgoKV3JpdGUgYSBsaW5rZXIgc2NyaXB0cy4gSXTi gJlzIHNlcmlvdXNseSBub3QgdGhhdCBoYXJkLiBJIGNob3NlIHRvIHVzZQpvbmx5IHZhbmlsbGEg R0NDIGZvciBhbiBTVE0zMkY0LCBhbmQgd2FudGVkIHRvIHB1dCB0aGUgc3RhY2sgaW4gYQpzcGVj aWZpYyByZWdpb24gb2YgbWVtb3J5ICh0aGUgY29yZS1jb3VwbGVkIG1lbW9yeSwgd2hpY2ggaXMg ZmFzdGVyCnRoYW4gbm9ybWFsIFJBTSBidXQgbm90IERNQSBjYXBhYmxlKSwgYXMgd2VsbCBhcyB0 aGUgdmVjdG9yIHRhYmxlIGF0IGEKc3BlY2lmaWMgbG9jYXRpb24gaW4gRmxhc2guIFRoaXMgaXMg d2hhdCBteSBzdGFjayBsb29rcyBsaWtlIGluIG15IEMKc291cmNlIGZpbGU6CgpzdGF0aWMgY2hh ciBzdGFja1s2NTUzNl0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnN0YWNrIikpKTsKClRoaXMg aXMgbXkgdmVjdG9yIHRhYmxlOgoKdHlwZWRlZiB2b2lkICgqZnB0cikodm9pZCk7CnN0YXRpYyBj b25zdCBmcHRyIGV4Y2VwdGlvbl92ZWN0b3JzWzE2XSBfX2F0dHJpYnV0ZV9fKCh1c2VkLApzZWN0 aW9uKCIuZXhjZXB0aW9uX3ZlY3RvcnMiKSkpID0gewoJLy8gVmVjdG9yIDAgY29udGFpbnMgdGhl IHJlc2V0IHN0YWNrIHBvaW50ZXIKCVswXSA9IChmcHRyKSAoc3RhY2sgKyBzaXplb2Yoc3RhY2sp KSwKCS8vIFZlY3RvciAxIGNvbnRhaW5zIHRoZSByZXNldCB2ZWN0b3IKCVsxXSA9ICZzdG0zMl9t YWluLAoJLy8gVmVjdG9yIDIgY29udGFpbnMgdGhlIE5NSSB2ZWN0b3IKCVsyXSA9ICZubWlfdmVj dG9yLAovLyBhbmQgYSBidW5jaCBtb3JlIHN0dWZmCgpUaGlzIGlzIGF0IHRoZSB0b3Agb2YgbXkg ZW50cnkgcG9pbnQgZnVuY3Rpb24gYW5kIGRvZXMgdGhlIGpvYiBvZgppbml0aWFsaXppbmcgdGhl IGRhdGEgc2VjdGlvbnMgYW5kIHdpcGluZyB0aGUgQlNTIHNlY3Rpb246CgpleHRlcm4gdW5zaWdu ZWQgY2hhciBsaW5rZXJfZGF0YV92bWFfc3RhcnQ7CmV4dGVybiB1bnNpZ25lZCBjaGFyIGxpbmtl cl9kYXRhX3ZtYV9lbmQ7CmV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGxpbmtlcl9kYXRhX2xt YV9zdGFydDsKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgbGlua2VyX2Jzc192bWFfc3RhcnQ7CmV4dGVy biB1bnNpZ25lZCBjaGFyIGxpbmtlcl9ic3Nfdm1hX2VuZDsKCnN0YXRpYyB2b2lkIHN0bTMyX21h aW4odm9pZCkgewoJLy8gQ29weSBpbml0aWFsaXplZCBnbG9iYWxzIGFuZCBzdGF0aWNzIGZyb20g Uk9NIHRvIFJBTQoJbWVtY3B5KCZsaW5rZXJfZGF0YV92bWFfc3RhcnQsICZsaW5rZXJfZGF0YV9s bWFfc3RhcnQsCgkmbGlua2VyX2RhdGFfdm1hX2VuZCAtICZsaW5rZXJfZGF0YV92bWFfc3RhcnQp OwoJLy8gU2NydWIgdGhlIEJTUyBzZWN0aW9uIGluIFJBTQoJbWVtc2V0KCZsaW5rZXJfYnNzX3Zt YV9zdGFydCwgMCwgJmxpbmtlcl9ic3Nfdm1hX2VuZCAtCgkmbGlua2VyX2Jzc192bWFfc3RhcnQp OwoKVGhpcyBpcyB3aGF0IHRoZSB0b3AgcGFydCBvZiBteSBsaW5rZXIgc2NyaXB0IGxvb2tzIGxp a2UsIHdoaWNoCnBvc2l0aW9ucyB0aGUgaW50ZXJydXB0IHZlY3RvcnMgYXQgMHgwODAwMDAwMCAo dGhlIHZlcnkgYm90dG9tIG9mCkZsYXNoKSBhbmQgdGhlIHN0YWNrIGF0IGFkZHJlc3MgMHgxMDAw MDAwMCAodGhlIGNvcmUgY291cGxlZCBtZW1vcnkpLAp3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBnb2lu ZyBpbiBGbGFzaCAoaW4gdGhlIGNhc2Ugb2YgY29kZSBhbmQgcmVhZC1vbmx5CmRhdGHigJR0aGUg U1RNMzJGNCBtYXBzIGNvZGUgYW5kIGRhdGEgaW50byB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlKSwg UkFNCihpbiB0aGUgY2FzZSBvZiB6ZXJvLWZpbGxlZCBkYXRhIChCU1MpKSwgYW5kICpib3RoKiAo aW4gdGhlIGNhc2Ugb2YKbm9uLXplcm8taW5pdGlhbGl6ZWQgZGF0YSwgd2hpY2ggbmVlZHMgdG8g YmUgbG9jYXRlZCBpbiBSQU0gYnV0IGhhdmUKdGhlIGluaXRpYWxpemF0aW9uIGRhdGEgaW4gRmxh c2gpOgoKLyogRGVmaW5lIHRoZSB0aHJlZSBtZW1vcnkgYXJlYXMgaW1wbGVtZW50ZWQgYnkgdGhl IFNUTTMyRjQgc2VyaWVzICovCk1FTU9SWSB7CglmbGFzaF9yZWdpb24gKFJYQUkpIDogT1JJR0lO ID0gMHgwODAwMDAwMCwgTEVOR1RIID0gMU0KCXNyYW1fcmVnaW9uIChSV1hBKSA6IE9SSUdJTiA9 IDB4MjAwMDAwMDAsIExFTkdUSCA9IDEyOEsKCWNjbV9yZWdpb24gKFJXWEEpIDogT1JJR0lOID0g MHgxMDAwMDAwMCwgTEVOR1RIID0gNjRLCn0KCi8qIExheSBvdXQgdGhlIGRhdGEgZnJvbSB0aGUg aW5wdXQgb2JqZWN0IGZpbGVzIGluIG1lbW9yeSAqLwpTRUNUSU9OUyB7CgkvKiBUaGUgQ1BVIGFs d2F5cyBleHBlY3RzIHRoZSBleGNlcHRpb24gdmVjdG9ycyB0byBiZSBhdCB0aGUKCWJvdHRvbSBv ZiBtZW1vcnkgKi8KCS5leGNlcHRpb25fdmVjdG9ycyAweDA4MDAwMDAwIDogewoJCUtFRVAoKigu ZXhjZXB0aW9uX3ZlY3RvcnMpKQoJfSA+Zmxhc2hfcmVnaW9uCgoJLyogVGhlIENQVSBleHBlY3Rz IHRoZSBpbnRlcnJ1cHQgdmVjdG9ycyB0byBiZSBwb3NpdGlvbmVkCglkaXJlY3RseSBhZnRlciB0 aGUgZXhjZXB0aW9uIHZlY3RvcnMgKi8KCS5pbnRlcnJ1cHRfdmVjdG9ycyAweDA4MDAwMDQwIDog ewoJCUtFRVAoKiguaW50ZXJydXB0X3ZlY3RvcnMpKQoJfSA+Zmxhc2hfcmVnaW9uCgoJLyogQWRk IHByb2dyYW0gY29kZSB0byB0aGUgRmxhc2ggZm9sbG93aW5nIHRoZSB2ZWN0b3JzICovCgkudGV4 dCA6IHsKCQkqKC50ZXh0IC50ZXh0LiopCgl9ID5mbGFzaF9yZWdpb24KCgkvKiBSZWFkLW9ubHkg ZGF0YSBjYW4gYWxzbyBsaXZlIGVudGlyZWx5IGluIEZsYXNoICovCgkucm9kYXRhIDogewoJCSoo LnJvZGF0YSAucm9kYXRhLiopCgl9ID5mbGFzaF9yZWdpb24KCgkvKiBSZWFkLXdyaXRlIG5vbi16 ZXJvLWluaXRpYWxpemVkIGRhdGEgbXVzdCBsaXZlIGluIFJBTSBidXQgYQoJY29weSBiZSBzdG9y ZWQgaW4gRmxhc2ggZm9yIGluaXRpYWxpemF0aW9uICovCgkuZGF0YSA6IHsKCQkqKC5kYXRhIC5k YXRhLiopCgl9ID5zcmFtX3JlZ2lvbiBBVD5mbGFzaF9yZWdpb24KCgkvKiBaZXJvLWluaXRpYWxp emVkIGRhdGEgY2FuIGxpdmUgZW50aXJlbHkgaW4gU1JBTSBhbmQgYmUgd2lwZWQKCW9uIGJvb3Qg Ki8KCS5ic3MgOiB7CgkJKiguYnNzIC5ic3MuKikKCX0gPnNyYW1fcmVnaW9uIEFUPnNyYW1fcmVn aW9uCgoJLyogVGhlIHN0YWNrIGNhbiBnbyBpbiBjb3JlLWNvdXBsZWQgbWVtb3J5IGZvciBzcGVl ZCAqLwoJLnN0YWNrIChOT0xPQUQpIDogewoJCSooLnN0YWNrKQoJfSA+Y2NtX3JlZ2lvbiBBVD5j Y21fcmVnaW9uCn0KCi8qIFByb3ZpZGUgc3ltYm9scyB0aGF0IHRoZSBzdGFydHVwIGNvZGUgdXNl cyB0byBmaW5kIHRoZSB2YXJpb3VzCnNlY3Rpb25zIGluIG1lbW9yeSB0byBpbml0aWFsaXplIHRo ZSBkYXRhIGFuZCB3aXBlIHRoZSBic3MgKi8KbGlua2VyX2RhdGFfdm1hX3N0YXJ0ID0gQUREUigu ZGF0YSk7Cmxpbmtlcl9kYXRhX3ZtYV9lbmQgPSBBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSk7 Cmxpbmtlcl9kYXRhX2xtYV9zdGFydCA9IExPQURBRERSKC5kYXRhKTsKbGlua2VyX2Jzc192bWFf c3RhcnQgPSBBRERSKC5ic3MpOwpsaW5rZXJfYnNzX3ZtYV9lbmQgPSBBRERSKC5ic3MpICsgU0la RU9GKC5ic3MpOwotLSAKaHR0cDovL3d3dy5waWNsaXN0LmNvbSBQSUMvU1ggRkFRICYgbGlzdCBh cmNoaXZlClZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0Cmh0dHA6Ly9tYWls bWFuLm1pdC5lZHUvbWFpbG1hbi9saXN0aW5mby9waWNsaXN0Cg== .