SGkgVGFrYXNoaSwKClRoYW5rcyBhIGxvdCBmb3IgeW91ciByZXZpZXchCgo+IE9uIE1vbiwgMjkg TWFyIDIwMjEgMDU6MzY6NDcgKzAyMDAsCj4gcm9vdCB3cm90ZToKPiA+Cj4gPiBbMS4xLjEgIDx0 ZXh0L3BsYWluOyBVVEYtOCAoYmFzZTY0KT5dCj4gPgo+ID4gRnJvbTogSmlhIFpob3UgPHpob3Uu amlhMkB6dGUuY29tLmNuPgo+ID4KPiA+IG1vZGlmaWNhdGlvbiBpbiBjb21taXQgMmEzZjcyMjFh Y2RkICgiQUxTQTogY29yZTogRml4IGNhcmQgcmFjZXMgYmV0d2Vlbgo+ID4gcmVnaXN0ZXIgYW5k IGRpc2Nvbm5lY3QiKSByZXN1bHRpbmcgaW4gdGhpcyBwcm9ibGVtLgo+ID4KPiA+IFNpZ25lZC1v ZmYtYnk6IEppYSBaaG91IDx6aG91LmppYTJAenRlLmNvbS5jbj4KPiA+IFNpZ25lZC1vZmYtYnk6 IFlpIFdhbmcgPHdhbmcueWk1OUB6dGUuY29tLmNuPgo+Cj4gVGhlIGNvZGUgY2hhbmdlIGxvb2tz IGdvb2QsIGJ1dCB0aGUgcGF0Y2ggaXNuJ3QgY2xlYW5seSBhcHBsaWNhYmxlIHZpYQo+IGdpdC1h bS4gIENvdWxkIHlvdSBmaXggeW91ciBNVUEgc2V0dXAsIG9yIHRyeSB0byBzdWJtaXQgdmlhCj4g Z2l0LXNlbmQtZW1haWw/CgpBcG9sb2dpc2UgdG8gdGhlIGluY29udmVuaWVudCBvZiB0aGUgZm9y bWF0LiBUaGlzIGlzIGEgYnVnIGluIHRoZSBtYWlsIHN5c3RlbSBvZiBvdXIKY29tcGFueSdzIElU IGRlcGFydG1lbnQsIHdoaWNoIGNvbmZ1ZWQgdXMgZm9yIGEgbG9uZyB0aW1lIGFuZCB3aWxsIGJl IHJlc29sdmVkIGluCm5leHQgbW9udGggOigKCldvdWxkIHlvdSBwbGVhc2UgZG8gbWUgYSBmYXZv ciB0byBhY2NlcHQgdGhpcyBwYXRjaCBtYW51YWxseT8gTWFueSB0aGFua3MuCgo+Cj4KPiB0aGFu a3MsCj4KPiBUYWthc2hpCj4KPiA+IC0tLQo+ID4gIHNvdW5kL2NvcmUvaW5pdC5jIHwgMiAtLQo+ ID4gIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9z b3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCj4gPiBpbmRleCAwMThjZTRlZjEu LjlmNTI3MGM5MCAxMDA2NDQKPiA+IC0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCj4gPiArKysgYi9z b3VuZC9jb3JlL2luaXQuYwo+ID4gQEAgLTM5MCwxMCArMzkwLDggQEAgaW50IHNuZF9jYXJkX2Rp c2Nvbm5lY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkKQo+ID4gICAgICAgICAgcmV0dXJuIDA7Cj4g PiAgICAgIH0KPiA+ICAgICAgY2FyZC0+c2h1dGRvd24gPSAxOwo+ID4gLSAgICBzcGluX3VubG9j aygmY2FyZC0+ZmlsZXNfbG9jayk7Cj4gPgo+ID4gICAgICAvKiByZXBsYWNlIGZpbGUtPmZfb3Ag d2l0aCBzcGVjaWFsIGR1bW15IG9wZXJhdGlvbnMgKi8KPiA+IC0gICAgc3Bpbl9sb2NrKCZjYXJk LT5maWxlc19sb2NrKTsKPiA+ICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQt PmZpbGVzX2xpc3QsIGxpc3QpIHsKPiA+ICAgICAgICAgIC8qIGl0J3MgY3JpdGljYWwgcGFydCwg dXNlIGVuZGxlc3MgbG9vcCAqLwo+ID4gICAgICAgICAgLyogd2UgaGF2ZSBubyByb29tIHRvIGZh aWwgKi8KPiA+IC0tCj4gPiAyLjE4LjQKPiA+CgoKCi0tLQpCZXN0IHdpc2hlcwpZaSBXYW5n