From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Subject: Re: [PATCH v4 3/4] libelf: rewrite symtab/strtab loading Date: Mon, 29 Feb 2016 11:57:21 +0100 Message-ID: <56D42411.6090704@citrix.com> References: <1455644269-40358-1-git-send-email-roger.pau@citrix.com> <1455644269-40358-4-git-send-email-roger.pau@citrix.com> <56D05DE602000078000D6B74@prv-mh.provo.novell.com> <56D08517.8070801@citrix.com> <56D41DFE02000078000D7240@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1aaLW9-0003qx-BX for xen-devel@lists.xenproject.org; Mon, 29 Feb 2016 10:57:33 +0000 In-Reply-To: <56D41DFE02000078000D7240@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org RWwgMjkvMi8xNiBhIGxlcyAxMDozMSwgSmFuIEJldWxpY2ggaGEgZXNjcml0Ogo+Pj4+IE9uIDI2 LjAyLjE2IGF0IDE4OjAyLCA8cm9nZXIucGF1QGNpdHJpeC5jb20+IHdyb3RlOgo+PiBFbCAyNi8y LzE2IGEgbGVzIDE0OjE1LCBKYW4gQmV1bGljaCBoYSBlc2NyaXQ6Cj4+Pj4+PiBPbiAxNi4wMi4x NiBhdCAxODozNywgPHJvZ2VyLnBhdUBjaXRyaXguY29tPiB3cm90ZToKPj4+PiAtLS0gYS94ZW4v Y29tbW9uL2xpYmVsZi9saWJlbGYtbG9hZGVyLmMKPj4+PiArKysgYi94ZW4vY29tbW9uL2xpYmVs Zi9saWJlbGYtbG9hZGVyLmMKPj4+PiBAQCAtMTY0LDIwICsxNjQsMzMgQEAgdm9pZCBlbGZfcGFy c2VfYnNkc3ltcyhzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCB1aW50NjRfdCBwc3RhcnQpCj4+Pj4g ICAgICBzeiA9IHNpemVvZih1aW50MzJfdCk7Cj4+Pj4gIAo+Pj4+ICAgICAgLyogU3BhY2UgZm9y IHRoZSBlbGYgYW5kIGVsZiBzZWN0aW9uIGhlYWRlcnMgKi8KPj4+PiAtICAgIHN6ICs9IChlbGZf dXZhbChlbGYsIGVsZi0+ZWhkciwgZV9laHNpemUpICsKPj4+PiAtICAgICAgICAgICBlbGZfc2hk cl9jb3VudChlbGYpICogZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKSk7Cj4+ Pj4gKyAgICBzeiArPSBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9laHNpemUpICsKPj4+PiAr ICAgICAgICAgIDMgKiBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUpOwo+Pj4K Pj4+IEkgdGhpbmsgYSBsaXRlcmFsIDMgbGlrZSB0aGlzIGVpdGhlciBuZWVkcyBhICNkZWZpbmUg KGF0IG9uY2Ugc2VydmluZwo+Pj4gYXMgZG9jdW1lbnRhdGlvbikgb3IgYSBjb21tZW50LiBQZXJo YXBzIHJhdGhlciB0aGUgZm9ybWVyLAo+Pj4gY29uc2lkZXJpbmcgdGhhdCB0aGUgKHNhbWU/KSAz IGFwcGVhcnMgYWdhaW4gZnVydGhlciBkb3duLiBQbHVzIC0KPj4+IHdoYXQgZ3VhcmFudGVlcyB0 aGVyZSBhcmUgMyBzZWN0aW9uIGhlYWRlcnMgaW4gdGhlIGltYWdlPwo+Pgo+PiBUaGlzIGlzIG5v dCByZWxhdGVkIHRvIHRoZSBpbWFnZSBpdHNlbGYsIGJ1dCB0byB0aGUgbWV0YWRhdGEgdGhhdCBs aWJlbGYKPj4gcGxhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGxvYWRlZCBrZXJuZWwgaW4gb3JkZXIg dG8gc3Rhc2ggdGhlIHN5bXRhYiBhbmQKPj4gc3RydGFiIGZvciB0aGUgZ3Vlc3QgdG8gdXNlLgo+ IAo+IEkgdW5kZXJzdGFuZCB0aGlzLCB5ZXQgaW1vIHRoZSBsaXRlcmFsIDMgc3RpbGwgc2hvdWxk IGJlIHJlcGxhY2VkLgoKWWVzLCBJIGFncmVlLgoKPj4gVGhlIGxheW91dCBpcyBhcyBmb2xsb3dz IChJIHNob3VsZCBhZGQgdGhpcyB0byB0aGUgcGF0Y2ggaXRzZWxmIGFzIGEKPj4gY29tbWVudCwg c2luY2UgSSBndWVzcyB0aGlzIGlzIHN0aWxsIHF1aXRlIGNvbmZ1c2luZyk6Cj4+Cj4+ICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4+IHwgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+IHwg S0VSTkVMICAgICAgICAgICAgICAgICB8Cj4+IHwgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+ ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHBlbmQKPj4gfCBBTElHTk1FTlQgICAgICAgICAg ICAgIHwKPj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgYnNkX3N5bXRhYl9wc3RhcnQKPj4g fCAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4gfCBzaXplICAgICAgICAgICAgICAgICAgIHwg YnNkX3N5bXRhYl9wZW5kIC0gYnNkX3N5bXRhYl9wc3RhcnQKPj4gfCAgICAgICAgICAgICAgICAg ICAgICAgIHwKPj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4gfCAgICAgICAgICAgICAg ICAgICAgICAgIHwKPj4gfCBFTEYgaGVhZGVyICAgICAgICAgICAgIHwKPj4gfCAgICAgICAgICAg ICAgICAgICAgICAgIHwKPj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4gfCAgICAgICAg ICAgICAgICAgICAgICAgIHwKPj4gfCBFTEYgc2VjdGlvbiBoZWFkZXIgMCAgIHwgRHVtbXkgc2Vj dGlvbiBoZWFkZXIKPj4gfCAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4gKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKPj4gfCAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4gfCBFTEYgc2Vj dGlvbiBoZWFkZXIgMSAgIHwgU1lNVEFCIHNlY3Rpb24gaGVhZGVyCj4+IHwgICAgICAgICAgICAg ICAgICAgICAgICB8Cj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4+IHwgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4+IHwgRUxGIHNlY3Rpb24gaGVhZGVyIDIgICB8IFNUUlRBQiBzZWN0 aW9uIGhlYWRlcgo+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAo+PiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwo+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAo+PiB8IFNZTVRBQiAg ICAgICAgICAgICAgICAgfAo+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAo+PiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwo+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAo+PiB8IFNU UlRBQiAgICAgICAgICAgICAgICAgfAo+PiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAo+PiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyBic2Rfc3ltdGFiX3BlbmQKPj4KPj4gVGhlcmUgYXJl IGFsd2F5cyBvbmx5IHRyZWUgc2VjdGlvbnMgYmVjYXVzZSB0aGF0J3MgYWxsIHdlIG5lZWQsIHNl Y3Rpb24KPj4gMCBpcyBpZ25vcmVkLCBzZWN0aW9uIDEgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUg U1lNVEFCLCBhbmQgc2VjdGlvbiAyIGlzCj4+IHVzZWQgdG8gZGVzY3JpYmUgdGhlIFNUUlRBQi4K PiAKPiBBbGwgZmluZSwgYnV0IHRoaXMgc3RpbGwgZG9lc24ndCBjbGFyaWZ5IGhvdyB0aGUga2Vy bmVsIGxlYXJucyB3aGVyZQo+IGJzZF9zeW10YWJfcHN0YXJ0IGlzLgoKVGhlIEJTRHMgbGlua2Vy IHNjcmlwdHMgcGxhY2VzIGFuICJlbmQiIHN5bWJvbCBhZnRlciBhbGwgdGhlIGxvYWRlZApzZWN0 aW9uczoKCmh0dHBzOi8vc3Zud2ViLmZyZWVic2Qub3JnL2Jhc2UvaGVhZC9zeXMvY29uZi9sZHNj cmlwdC5hbWQ2ND9yZXZpc2lvbj0yODQ4NzAmdmlldz1jbwoKSWYgeW91IGV4ZWN1dGU6CgokIG5t IC1uIC9ib290L2tlcm5lbC9rZXJuZWwKCkFnYWluc3QgYSBGcmVlQlNEIGtlcm5lbCB0aGUgb3V0 cHV0IGlzIGFzIGZvbGxvd3M6CgpbLi4uXQpmZmZmZmZmZjgxZGM0NzYwIEIgY3B1X2luZm8KZmZm ZmZmZmY4MWRjNGI2MCBCIGRwY3B1CmZmZmZmZmZmODFkYzRiNjggQiBzbXBfdGxiX3BtYXAKZmZm ZmZmZmY4MWRjNGI3MCBCIGRycV9ybWFuCmZmZmZmZmZmODFkYzRiYjggQiBtZW1fcm1hbgpmZmZm ZmZmZjgxZGM0YzAwIEIgaXJxX3JtYW4KZmZmZmZmZmY4MWRjNGM0OCBCIHBvcnRfcm1hbgpmZmZm ZmZmZjgxZGM0YzkwIEIgdHNjX2lzX2ludmFyaWFudApmZmZmZmZmZjgxZGM0Yzk0IEIgdHNjX3Bl cmZfc3RhdApmZmZmZmZmZjgxZGM0Yzk4IEIgdHNjX2ZyZXEKZmZmZmZmZmY4MWRjNGNhMCBCIHNt cF90c2MKZmZmZmZmZmY4MWRjNGNhOCBCIEhZUEVSVklTT1Jfc2hhcmVkX2luZm8KZmZmZmZmZmY4 MWRjNGNiMCBCIHhlbl92ZWN0b3JfY2FsbGJhY2tfZW5hYmxlZApmZmZmZmZmZjgxZGM0Y2I4IEIg SFlQRVJWSVNPUl9zdGFydF9pbmZvCmZmZmZmZmZmODFkYzRjYzAgQSBfZW5kCmZmZmZmZmZmODFk YzRjYzAgQSBlbmQKCj4+IEFjY29yZGluZyB0byB0aGUgRUxGIHNwZWMgdGhlcmUgY2FuIG9ubHkg YmUKPj4gb25lIFNZTVRBQiwgc28gdGhhdCdzIGFsbCB3ZSBuZWVkLgo+IAo+IERpZCB5b3UgcGVy aGFwcyBvdmVybG9vayB0aGUgc3BlYyBzYXlpbmcgIi4uLiBidXQgdGhpcyByZXN0cmljdGlvbgo+ IG1heSBiZSByZWxheGVkIGluIHRoZSBmdXR1cmUiLCBwbHVzIHRoZSBmYWN0IHRoYXQgd2UncmUg dGFsa2luZwo+IGFib3V0IGFuIGV4ZWN1dGFibGUgZmlsZSBoZXJlICh3aGljaCBjb21tb25seSBo YXZlIHR3byBzeW1ib2wKPiB0YWJsZXMgLSAuZHluc3ltIGFuZCAuc3ltdGFiKSwgbm90IGFuIG9i amVjdCBvbmU/IChUaGlzIGlzbid0IHRvCj4gc2F5IHRoYXQgeW91IG5lZWQgdG8gbWFrZSB0aGUg Y29kZSBoYW5kbGUgbXVsdGlwbGUgb25lcywgaWYgeW91Cj4ga25vdyB0aGF0ICpCU0Qgd2lsbCBv bmx5IGV2ZXIgaGF2ZSBvbmUuKQoKRFlOU1lNIGlzIGp1c3QgYSBzdWJzZXQgb2YgU1lNVEFCLCBC U0RzIHByZWZlciAoaXQncyBub3QgYSBzdHJpY3QKcmVxdWlyZW1lbnQpIHRoZSBTWU1UQUIgYmVj YXVzZSBvZiB0aGUgaW4ta2VybmVsIGRlYnVnZ2VyLiBBbHNvIERZTlNZTQppcyBhbHJlYWR5IGxv YWRlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBjb3ZlcmVkIGJ5IHRoZSBwcm9ncmFtIGhlYWRl cnMuCgpJIGNhbiBhZGQgc3VwcG9ydCBmb3IgbG9hZGluZyBtdWx0aXBsZSBTWU1UQUJzL1NUUlRB QnMsIGJ1dCBzaG91bGRuJ3Qgd2UKd2FpdCB1bnRpbCB0aGUgc3BlYyBpcyB1cGRhdGVkPyBBcyBJ IHJlYWQgdGhlIHNwZWMgQVRNLCBhbiBFTEYgZmlsZSB3aXRoCm11bHRpcGxlIFNZTVRBQnMgaXMg aW52YWxpZC4gSSBhc3N1bWUgdGhhdCBpZiB0aGUgRUxGIGZvcm1hdCBldmVyIGFsbG93cwptb3Jl IHRoYW4gb25lIFNZTVRBQiwgdGhlIHZlcnNpb24gaXMgZ29pbmcgdG8gYmUgYnVtcGVkIGF0IGxl YXN0IChvcgpzb21lIG90aGVyIGZpZWxkIGlzIGdvaW5nIHRvIGJlIHVzZWQgdG8gc2lnbmFsIHRo aXMgY2hhbmdlKS4KCj4+Pj4gICAgICBzeiA9IGVsZl9yb3VuZF91cChlbGYsIHN6KTsKPj4+PiAg Cj4+Pj4gLSAgICAvKiBTcGFjZSBmb3IgdGhlIHN5bWJvbCBhbmQgc3RyaW5nIHRhYmxlcy4gKi8K Pj4+PiArICAgIC8qIFNwYWNlIGZvciB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFibGUuICovCj4+ Pj4gICAgICBmb3IgKCBpID0gMDsgaSA8IGVsZl9zaGRyX2NvdW50KGVsZik7IGkrKyApCj4+Pj4g ICAgICB7Cj4+Pj4gICAgICAgICAgc2hkciA9IGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgaSk7Cj4+ Pj4gICAgICAgICAgaWYgKCAhZWxmX2FjY2Vzc19vayhlbGYsIEVMRl9IQU5ETEVfUFRSVkFMKHNo ZHIpLCAxKSApCj4+Pj4gICAgICAgICAgICAgIC8qIGlucHV0IGhhcyBhbiBpbnNhbmUgc2VjdGlv biBoZWFkZXIgY291bnQgZmllbGQgKi8KPj4+PiAgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4gLSAg ICAgICAgdHlwZSA9IGVsZl91dmFsKGVsZiwgc2hkciwgc2hfdHlwZSk7Cj4+Pj4gLSAgICAgICAg aWYgKCAodHlwZSA9PSBTSFRfU1RSVEFCKSB8fCAodHlwZSA9PSBTSFRfU1lNVEFCKSApCj4+Pj4g LSAgICAgICAgICAgIHN6ID0gZWxmX3JvdW5kX3VwKGVsZiwgc3ogKyBlbGZfdXZhbChlbGYsIHNo ZHIsIHNoX3NpemUpKTsKPj4+PiArCj4+Pj4gKyAgICAgICAgaWYgKCBlbGZfdXZhbChlbGYsIHNo ZHIsIHNoX3R5cGUpICE9IFNIVF9TWU1UQUIgKQo+Pj4+ICsgICAgICAgICAgICBjb250aW51ZTsK Pj4+PiArCj4+Pj4gKyAgICAgICAgc3ogPSBlbGZfcm91bmRfdXAoZWxmLCBzeiArIGVsZl91dmFs KGVsZiwgc2hkciwgc2hfc2l6ZSkpOwo+Pj4+ICsgICAgICAgIHNoZHIgPSBlbGZfc2hkcl9ieV9p bmRleChlbGYsIGVsZl91dmFsKGVsZiwgc2hkciwgc2hfbGluaykpOwo+Pj4+ICsKPj4+PiArICAg ICAgICBpZiAoICFlbGZfYWNjZXNzX29rKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksIDEp ICkKPj4+PiArICAgICAgICAgICAgLyogaW5wdXQgaGFzIGFuIGluc2FuZSBzZWN0aW9uIGhlYWRl ciBjb3VudCBmaWVsZCAqLwo+Pj4+ICsgICAgICAgICAgICBicmVhazsKPj4+PiArCj4+Pj4gKyAg ICAgICAgaWYgKCBlbGZfdXZhbChlbGYsIHNoZHIsIHNoX3R5cGUpICE9IFNIVF9TVFJUQUIgKQo+ Pj4+ICsgICAgICAgICAgICAvKiBJbnZhbGlkIHN5bXRhYiAtPiBzdHJ0YWIgbGluayAqLwo+Pj4+ ICsgICAgICAgICAgICBicmVhazsKPj4+Cj4+PiBUaGlzIGlzIG5vdCBzdWZmaWNpZW50IC0gd2hh dCBpZiBzaF9saW5rIGlzIG91dCBvZiBib3VuZHMsIGJ1dCB0aGUKPj4+IGJvZ3VzbHkgYWNjZXNz ZWQgZmllbGQgaGFwcGVucyB0byBob2xkIFNIVF9TVFJUQUI/IChPZGRseQo+Pj4gZW5vdWdoIHlv dSBoYXZlIGF0IGxlYXN0IGFuIFNITl9VTkRFRiBjaGVjayBpbiB0aGUgc2Vjb25kCj4+PiBsb29w IGJlbG93LikKPj4KPj4gVGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGRldGVjdGVk IGJ5IGVsZl9hY2Nlc3Nfb2sgKGlmIGl0J3Mgb3V0Cj4+IG9mIHRoZSBzY29wZSBvZiB0aGUgRUxG IGZpbGUsIHdoaWNoIGlzIGFsbCB3ZSBjYXJlIGFib3V0KS4gSW4gZmFjdCB0aGUKPj4gZWxmX2Fj Y2Vzc19vayBhYm92ZSBjb3VsZCBiZSByZW1vdmVkIGJlY2F1c2UgZWxmX3V2YWwgYWxyZWFkeSBw ZXJmb3Jtcwo+PiBvdXQtb2YtYm91bmRzIGNoZWNrcy4gVGhlIHJlc3VsdCBpcyBkZWZpbml0ZWx5 IG5vIHdvcnNlIHRoYXQgd2hhdCB3ZSBhcmUKPj4gZG9pbmcgQVRNLgo+IAo+IE5vLCB0aGUgb3V0 IG9mIGJvdW5kcyBjaGVjayBzaG91bGQgYmUgbW9yZSBzdHJpY3QgdGhhbiBqdXN0Cj4gY29uc2lk ZXJpbmcgdGhlIHdob2xlIGltYWdlOiBUaGUgaW1hZ2UgaXMgYnJva2VuIGlmIHRoZSBsaW5rCj4g cG9pbnRzIHRvIGEgbm9uLWV4aXN0aW5nIHNlY3Rpb24uCgpBaCwgZG8geW91IG1lYW4gSSBzaG91 bGQgbWFyayB0aGUgaW1hZ2UgYXMgYnJva2VuIGlmIGVpdGhlciBvZiB0aGUKY2hlY2tzIGZhaWw/ CgpJbiB0aGlzIGNhc2UgdGhlIGltYWdlIGlzIGJyb2tlbiBpZiB0aGUgc2hfbGluayBmaWVsZCBw b2ludHMgdG8gYW55dGhpbmcKZGlmZmVyZW50IHRoYW4gYSBTVFJUQUIgc2VjdGlvbiwgc28gSSBz aG91bGQgYWRkIGEgZWxmX21hcmtfYnJva2VuCmJlZm9yZSB0aGUgYnJlYWsuIGVsZl9hY2Nlc3Nf b2sgYWxyZWFkeSBtYXJrcyB0aGUgaW1hZ2UgYXMgYnJva2VuIGlmIGFuCm91dC1vZi1ib3VuZHMg YWNjZXNzIGlzIGF0dGVtcHRlZC4KCj4+Pj4gQEAgLTE4Niw3OSArMTk5LDE2OSBAQCB2b2lkIGVs Zl9wYXJzZV9ic2RzeW1zKHN0cnVjdCBlbGZfYmluYXJ5ICplbGYsIAo+Pj4+IHVpbnQ2NF90IHBz dGFydCkKPj4+PiAgCj4+Pj4gIHN0YXRpYyB2b2lkIGVsZl9sb2FkX2JzZHN5bXMoc3RydWN0IGVs Zl9iaW5hcnkgKmVsZikKPj4+PiAgewo+Pj4+IC0gICAgRUxGX0hBTkRMRV9ERUNMKGVsZl9laGRy KSBzeW1fZWhkcjsKPj4+PiAtICAgIHVuc2lnbmVkIGxvbmcgc3o7Cj4+Pj4gLSAgICBlbGZfcHRy dmFsIG1heHZhOwo+Pj4+IC0gICAgZWxmX3B0cnZhbCBzeW1iYXNlOwo+Pj4+IC0gICAgZWxmX3B0 cnZhbCBzeW10YWJfYWRkcjsKPj4+PiAtICAgIEVMRl9IQU5ETEVfREVDTChlbGZfc2hkcikgc2hk cjsKPj4+PiAtICAgIHVuc2lnbmVkIGksIHR5cGU7Cj4+Pj4gKyAgICAvKgo+Pj4+ICsgICAgICog SGVhZGVyIHRoYXQgaXMgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGtlcm5lbCBhbmQgYWxsb3dz Cj4+Pj4gKyAgICAgKiB0aGUgT1MgdG8gZmluZCB3aGVyZSB0aGUgc3ltdGFiIGFuZCBzdHJ0YWIg aGF2ZSBiZWVuIGxvYWRlZC4KPj4+PiArICAgICAqIEl0IG1pbWljcyBhIHZhbGlkIEVMRiBmaWxl IGhlYWRlciwgYWx0aG91Z2ggaXQgb25seSBjb250YWlucwo+Pj4+ICsgICAgICogYSBzeW10YWIg YW5kIGEgc3RydGFiIHNlY3Rpb24uCj4+Pj4gKyAgICAgKgo+Pj4+ICsgICAgICogTkI6IGFjY29y ZGluZyB0byB0aGUgRUxGIHNwZWMgdGhlcmUncyBvbmx5IE9ORSBzeW10YWIgcGVyIEVMRgo+Pj4+ ICsgICAgICogZmlsZSwgYW5kIGFjY29yZGluZ2x5IHdlIHdpbGwgb25seSBsb2FkIHRoZSBjb3Jy ZXNwb25kaW5nCj4+Pj4gKyAgICAgKiBzdHJ0YWIsIHNvIHdlIG9ubHkgbmVlZCB0aHJlZSBzZWN0 aW9uIGhlYWRlcnMgaW4gb3VyIGZha2UgRUxGCj4+Pj4gKyAgICAgKiBoZWFkZXIgKGZpcnN0IHNl Y3Rpb24gaGVhZGVyIGlzIGFsd2F5cyBhIGR1bW15KS4KPj4+PiArICAgICAqLwo+Pj4+ICsgICAg c3RydWN0IHsKPj4+PiArICAgICAgICB1aW50MzJfdCBzaXplOwo+Pj4+ICsgICAgICAgIHN0cnVj dCB7Cj4+Pj4gKyAgICAgICAgICAgIGVsZl9laGRyIGhlYWRlcjsKPj4+PiArICAgICAgICAgICAg ZWxmX3NoZHIgc2VjdGlvblszXTsKPj4+PiArICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpIGVsZl9oZWFkZXI7Cj4+Pj4gKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGhlYWRl cjsKPj4+Cj4+PiBJZiB0aGlzIGlzIHBsYWNlZCBhdCB0aGUgZW5kLCBob3cgY2FuIHRoZSBPUyBy ZWFzb25hYmx5IHVzZSBpdAo+Pj4gd2l0aG91dCBrbm93aW5nIHRoYXQgdGhlcmUgYXJlIGV4YWN0 bHkgMyBzZWN0aW9uIGhlYWRlcgo+Pj4gZW50cmllcz8gSS5lLiBob3cgd291bGQgaXQgZmluZCB0 aGUgYmFzZSBvZiB0aGlzIHN0cnVjdHVyZT8KPj4KPj4gU2VlIHRoZSBjb21tZW5kIGJlbG93LCB0 aGUgYmFzZSBpcyBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJuZWwsIGFuZAo+PiB0aGVuIHRo ZSBFTEYgaGVhZGVyIGNvbnRhaW5zIHRoZSByaWdodCBwb2ludGVycyB0byB0aGUgc2VjdGlvbnMg aGVhZGVycwo+PiAoYnkgYXBwcm9wcmlhdGVseSBzZXR0aW5nIGVfc2hvZmYpLgo+IAo+IFRoaW5n IGlzIC0gSSBjYW4ndCBzZWUgd2hpY2ggImNvbW1lbnQgYmVsb3ciIHlvdSB0cnkgdG8gcmVmZXIg bWUgdG8uCgpJIHdhcyB0cnlpbmcgdG8gcG9pbnQgeW91IHRvIHRoZSBiaWcgZGlhZ3JhbS9sYXlv dXQgdGhhdCBJJ3ZlIHBvc3RlZCBhdAp0aGUgc3RhcnQgb2YgdGhlIGVtYWlsLgoKSXQgZG9lc24n dCBuZWVkIHRvIGtub3cgdGhlcmUgYXJlIGV4YWN0bHkgMyBzZWN0aW9ucywgdGhpcyBpcyBmZXRj aGVkCmZvcm0gdGhlIEVMRiBoZWFkZXIgZV9zaG51bSBmaWVsZC4gQW5kIHRoZSBFTEYgaGVhZGVy IGlzIGZldGNoZWQgdXNpbmcKdGhlICJlbmQiIHN5bWJvbCBhcyBhIHJlZmVyZW5jZSB0byBwZW5k LgoKPj4+PiArICAgIEVMRl9IQU5ETEVfREVDTChlbGZfZWhkcikgaGVhZGVyX2hhbmRsZTsKPj4+ PiArICAgIHVuc2lnbmVkIGxvbmcgc2hkcl9zaXplOwo+Pj4+ICsgICAgRUxGX0hBTkRMRV9ERUNM KGVsZl9zaGRyKSBzZWN0aW9uX2hhbmRsZTsKPj4+PiArICAgIEVMRl9IQU5ETEVfREVDTChlbGZf c2hkcikgaW1hZ2VfaGFuZGxlOwo+Pj4+ICsgICAgdW5zaWduZWQgaW50IGksIGxpbms7Cj4+Pj4g KyAgICBlbGZfcHRydmFsIGhlYWRlcl9iYXNlOwo+Pj4+ICsgICAgZWxmX3B0cnZhbCBlbGZfaGVh ZGVyX2Jhc2U7Cj4+Pj4gKyAgICBlbGZfcHRydmFsIHN5bXRhYl9iYXNlOwo+Pj4+ICsgICAgZWxm X3B0cnZhbCBzdHJ0YWJfYmFzZTsKPj4+PiAgCj4+Pj4gICAgICBpZiAoICFlbGYtPmJzZF9zeW10 YWJfcHN0YXJ0ICkKPj4+PiAgICAgICAgICByZXR1cm47Cj4+Pj4gIAo+Pj4+IC0jZGVmaW5lIGVs Zl9oZHJfZWxtKF9lbGYsIF9oZHIsIF9lbG0sIF92YWwpICAgICBcCj4+Pj4gLWRvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+PiAtICAgIGlmICggZWxm XzY0Yml0KF9lbGYpICkgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4+IC0gICAgICAgIGVsZl9z dG9yZV9maWVsZChfZWxmLCBfaGRyLCBlNjQuX2VsbSwgX3ZhbCk7ICBcCj4+Pj4gLSAgICBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+PiAtICAgICAgICBl bGZfc3RvcmVfZmllbGQoX2VsZiwgX2hkciwgZTMyLl9lbG0sIF92YWwpOyAgXAo+Pj4+ICsjZGVm aW5lIGVsZl9zdG9yZV9maWVsZF9iaXRuZXNzKF9lbGYsIF9oZHIsIF9lbG0sIF92YWwpICAgICAg ICAgICAgIFwKPj4+PiArZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+Pj4gKyAgICBpZiAoIGVsZl82NGJpdChfZWxm KSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4+ICsgICAg ICAgIGVsZl9zdG9yZV9maWVsZChfZWxmLCBfaGRyLCBlNjQuX2VsbSwgX3ZhbCk7ICAgICAgICAg ICAgICAgIFwKPj4+PiArICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+Pj4gKyAgICAgICAgZWxmX3N0b3JlX2ZpZWxk KF9lbGYsIF9oZHIsIGUzMi5fZWxtLCBfdmFsKTsgICAgICAgICAgICAgICAgXAo+Pj4+ICB9IHdo aWxlICggMCApCj4+Pj4gIAo+Pj4+IC0gICAgc3ltYmFzZSA9IGVsZl9nZXRfcHRyKGVsZiwgZWxm LT5ic2Rfc3ltdGFiX3BzdGFydCk7Cj4+Pj4gLSAgICBzeW10YWJfYWRkciA9IG1heHZhID0gc3lt YmFzZSArIHNpemVvZih1aW50MzJfdCk7Cj4+Pj4gLQo+Pj4+IC0gICAgLyogU2V0IHVwIEVsZiBo ZWFkZXIuICovCj4+Pj4gLSAgICBzeW1fZWhkciA9IEVMRl9NQUtFX0hBTkRMRShlbGZfZWhkciwg c3ltdGFiX2FkZHIpOwo+Pj4+IC0gICAgc3ogPSBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9l aHNpemUpOwo+Pj4+IC0gICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwo c3ltX2VoZHIpLCBFTEZfSEFORExFX1BUUlZBTChlbGYtPmVoZHIpLCBzeik7Cj4+Pj4gLSAgICBt YXh2YSArPSBzejsgLyogbm8gcm91bmQgdXAgKi8KPj4+PiArI2RlZmluZSBTWU1UQUJfSU5ERVgg ICAgMQo+Pj4+ICsjZGVmaW5lIFNUUlRBQl9JTkRFWCAgICAyCj4+Pj4gIAo+Pj4+IC0gICAgZWxm X2hkcl9lbG0oZWxmLCBzeW1fZWhkciwgZV9waG9mZiwgMCk7Cj4+Pj4gLSAgICBlbGZfaGRyX2Vs bShlbGYsIHN5bV9laGRyLCBlX3Nob2ZmLCBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9laHNp emUpKTsKPj4+PiAtICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfcGhlbnRzaXplLCAw KTsKPj4+PiAtICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfcGhudW0sIDApOwo+Pj4+ ICsgICAgLyogQWxsb3cgZWxmX21lbWNweV9zYWZlIHRvIHdyaXRlIHRvIHN5bWJvbF9oZWFkZXIu ICovCj4+Pj4gKyAgICBlbGYtPmNhbGxlcl94ZGVzdF9iYXNlID0gJmhlYWRlcjsKPj4+PiArICAg IGVsZi0+Y2FsbGVyX3hkZXN0X3NpemUgPSBzaXplb2YoaGVhZGVyKTsKPj4+PiAgCj4+Pj4gLSAg ICAvKiBDb3B5IEVsZiBzZWN0aW9uIGhlYWRlcnMuICovCj4+Pj4gLSAgICBzaGRyID0gRUxGX01B S0VfSEFORExFKGVsZl9zaGRyLCBtYXh2YSk7Cj4+Pj4gLSAgICBzeiA9IGVsZl9zaGRyX2NvdW50 KGVsZikgKiBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUpOwo+Pj4+IC0gICAg ZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksCj4+Pj4gLSAgICAg ICAgICAgICAgICAgICAgRUxGX0lNQUdFX0JBU0UoZWxmKSArIGVsZl91dmFsKGVsZiwgZWxmLT5l aGRyLCBlX3Nob2ZmKSwKPj4+PiAtICAgICAgICAgICAgICAgICAgICBzeik7Cj4+Pj4gLSAgICBt YXh2YSA9IGVsZl9yb3VuZF91cChlbGYsICh1bnNpZ25lZCBsb25nKW1heHZhICsgc3opOwo+Pj4+ ICsgICAgLyoKPj4+PiArICAgICAqIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHZhcmlv dXMgZWxlbWVudHMgaW4gR1VFU1QgTUVNT1JZIFNQQUNFLgo+Pj4+ICsgICAgICogVGhpcyBhZGRy ZXNzZXMgTVVTVCBvbmx5IGJlIHVzZWQgd2l0aCBlbGZfbG9hZF9pbWFnZS4KPj4+PiArICAgICAq Cj4+Pj4gKyAgICAgKiBOQjogc3RydGFiX2Jhc2UgY2Fubm90IGJlIGNhbGN1bGF0ZWQgYXQgdGhp cyBwb2ludCBiZWNhdXNlIHdlIGRvbid0Cj4+Pj4gKyAgICAgKiBrbm93IHRoZSBzaXplIG9mIHRo ZSBzeW10YWIgeWV0LCBhbmQgdGhlIHN0cnRhYiB3aWxsIGJlIHBsYWNlZCBhZnRlciBpdC4KPj4+ PiArICAgICAqLwo+Pj4+ICsgICAgaGVhZGVyX2Jhc2UgPSBlbGZfZ2V0X3B0cihlbGYsIGVsZi0+ YnNkX3N5bXRhYl9wc3RhcnQpOwo+Pj4+ICsgICAgZWxmX2hlYWRlcl9iYXNlID0gZWxmX2dldF9w dHIoZWxmLCBlbGYtPmJzZF9zeW10YWJfcHN0YXJ0KSArCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YodWludDMyX3QpOwo+Pj4+ICsgICAgc3ltdGFiX2Jhc2UgPSBlbGZfcm91bmRf dXAoZWxmLCBoZWFkZXJfYmFzZSArIHNpemVvZihoZWFkZXIpKTsKPj4+PiArCj4+Pj4gKyAgICAv KiBGaWxsIHRoZSBFTEYgaGVhZGVyLCBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgRUxGIGhlYWRl ci4gKi8KPj4+PiArICAgIGhlYWRlcl9oYW5kbGUgPSBFTEZfTUFLRV9IQU5ETEUoZWxmX2VoZHIs Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUxGX1JFQUxQVFIyUFRSVkFM KCZoZWFkZXIuZWxmX2hlYWRlci5oZWFkZXIpKTsKPj4+PiArICAgIGVsZl9tZW1jcHlfc2FmZShl bGYsIEVMRl9IQU5ETEVfUFRSVkFMKGhlYWRlcl9oYW5kbGUpLAo+Pj4+ICsgICAgICAgICAgICAg ICAgICAgIEVMRl9IQU5ETEVfUFRSVkFMKGVsZi0+ZWhkciksCj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfZWhzaXplKSk7Cj4+Pj4gKwo+Pj4+ICsg ICAgLyogU2V0IHRoZSBvZmZzZXQgdG8gdGhlIHNoZHIgYXJyYXkuICovCj4+Pj4gKyAgICBlbGZf c3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIGhlYWRlcl9oYW5kbGUsIGVfc2hvZmYsCj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZih0eXBlb2YoaGVhZGVyLmVsZl9oZWFk ZXIpLCBzZWN0aW9uKSk7Cj4+Pj4gKwo+Pj4+ICsgICAgLyogU2V0IHRoZSByaWdodCBudW1iZXIg b2Ygc2VjdGlvbiBoZWFkZXJzLiAqLwo+Pj4+ICsgICAgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3Mo ZWxmLCBoZWFkZXJfaGFuZGxlLCBlX3NobnVtLCAzKTsKPj4+PiArCj4+Pj4gKyAgICAvKiBDbGVh ciBhIGNvdXBsZSBvZiBmaWVsZHMgd2UgZG9uJ3QgdXNlLiAqLwo+Pj4+ICsgICAgZWxmX3N0b3Jl X2ZpZWxkX2JpdG5lc3MoZWxmLCBoZWFkZXJfaGFuZGxlLCBlX3Bob2ZmLCAwKTsKPj4+PiArICAg IGVsZl9zdG9yZV9maWVsZF9iaXRuZXNzKGVsZiwgaGVhZGVyX2hhbmRsZSwgZV9waGVudHNpemUs IDApOwo+Pj4+ICsgICAgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3MoZWxmLCBoZWFkZXJfaGFuZGxl LCBlX3BobnVtLCAwKTsKPj4+Cj4+PiBQZXJoYXBzIGJldHRlciBqdXN0IGdpdmUgdGhlIHN0cnVj dHVyZSBhYm92ZSBhbiBpbml0aWFsaXplcj8KPj4KPj4gTm90IHJlYWxseSwgdGhlIHByb2JsZW0g aXMgdGhhdCB3ZSBjb3B5IHRoZSBvcmlnaW5hbCBoZWFkZXIgZnJvbSB0aGUgRUxGCj4+IGJpbmFy eSwgYW5kIHRoZW4gd2UgbWFuZ2xlIGl0LiBUaGlzIGlzIGp1c3QgYSBmaXh1cCB0byBtYWtlIGl0 IGNsZWFyCj4+IHRoYXQgbm8gcHJvZ3JhbSBoZWFkZXJzIGFyZSBwcmVzZW50ICh3ZSBqdXN0IHVz ZSBzZWN0aW9uIGhlYWRlcnMgaW4KPj4gb3JkZXIgdG8gZGVzY3JpYmUgdGhlIFNZTVRBQiBhbmQg U1RSVEFCIHBvc2l0aW9ucykuCj4gCj4gQWgsIEkgc2VlIG5vdy4KPiAKPj4+PiArICAgIC8qIFpl cm8gdGhlIGR1bW15IHNlY3Rpb24uICovCj4+Pgo+Pj4gRHVtbXk/IEFuZCBhbnl3YXkgSSB0aGlu ayB5b3UgbWVhbiAic2VjdGlvbiBoZWFkZXIiIGhlcmUuCj4+Cj4+IFllcywgdGhlIHJpZ2h0IGNv bW1lbnQgd291bGQgYmU6IHplcm8gdGhlIGR1bW15IHNlY3Rpb24gaGVhZGVyLgo+IAo+IEJ1dCB0 aGVuIHN0aWxsIC0gd2h5ICJkdW1teSI/IFRoZSAwLXRoIHNlY3Rpb24gaGVhZGVyIGhhcyBhIHB1 cnBvc2UKPiBiZXlvbmQgYmVpbmcgYSBmaWxsZXIsIGV2ZW4gaWYgdGhhdCBwdXJwb3NlIGRvZXNu J3QgbWF0dGVyIGZvciB0aGUKPiBpbnRlbnRpb25zIHlvdSBoYXZlIGhlcmUuCgpPSywgd2hhdCBh Ym91dCBpZiBJIHJlcGxhY2UgdGhlIGNvbW1lbnQgd2l0aDoKCi8qIFplcm8gdGhlIHVuZGVmaW5l ZCBzZWN0aW9uIGhlYWRlci4gKi8KCkkgdGhpbmsgdGhhdCdzIG1vcmUgaW5saW5lIHdpdGggdGhl IHNwZWNpZmljYXRpb24uIEkgY291bGQgYWxzbyBmaWxsIGl0CndpdGggc3BlY2lmaWMgdmFsdWVz IGlmIHlvdSB0aGluayBpdCdzIGNsZWFyZXI6CgplbGZfc3RvcmVfZmllbGRfYml0bmVzcyguLi4s IHNoX25hbWUsIDApOwplbGZfc3RvcmVfZmllbGRfYml0bmVzcyguLi4sIHNoX3R5cGUsIFNIVF9O VUxMKTsKZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3MoLi4uLCBzaF9mbGFncywgMCk7ClsuLi5dCgpX aGljaCBpcyBlcXVpdmFsZW50IHRvIHplcm9pbmcgaXQuCgpUaGFua3MgZm9yIHRoZSByZXZpZXcs IFJvZ2VyLgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==