From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH v4 3/4] libelf: rewrite symtab/strtab loading Date: Fri, 26 Feb 2016 06:15:02 -0700 Message-ID: <56D05DE602000078000D6B74@prv-mh.provo.novell.com> References: <1455644269-40358-1-git-send-email-roger.pau@citrix.com> <1455644269-40358-4-git-send-email-roger.pau@citrix.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 1aZIEf-0005hz-V4 for xen-devel@lists.xenproject.org; Fri, 26 Feb 2016 13:15:10 +0000 In-Reply-To: <1455644269-40358-4-git-send-email-roger.pau@citrix.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Roger Pau Monne Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDE2LjAyLjE2IGF0IDE4OjM3LCA8cm9nZXIucGF1QGNpdHJpeC5jb20+IHdyb3RlOgo+ IC0tLSBhL3hlbi9jb21tb24vbGliZWxmL2xpYmVsZi1sb2FkZXIuYwo+ICsrKyBiL3hlbi9jb21t b24vbGliZWxmL2xpYmVsZi1sb2FkZXIuYwo+IEBAIC0xNjQsMjAgKzE2NCwzMyBAQCB2b2lkIGVs Zl9wYXJzZV9ic2RzeW1zKHN0cnVjdCBlbGZfYmluYXJ5ICplbGYsIHVpbnQ2NF90IHBzdGFydCkK PiAgICAgIHN6ID0gc2l6ZW9mKHVpbnQzMl90KTsKPiAgCj4gICAgICAvKiBTcGFjZSBmb3IgdGhl IGVsZiBhbmQgZWxmIHNlY3Rpb24gaGVhZGVycyAqLwo+IC0gICAgc3ogKz0gKGVsZl91dmFsKGVs ZiwgZWxmLT5laGRyLCBlX2Voc2l6ZSkgKwo+IC0gICAgICAgICAgIGVsZl9zaGRyX2NvdW50KGVs ZikgKiBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUpKTsKPiArICAgIHN6ICs9 IGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX2Voc2l6ZSkgKwo+ICsgICAgICAgICAgMyAqIGVs Zl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3NoZW50c2l6ZSk7CgpJIHRoaW5rIGEgbGl0ZXJhbCAz IGxpa2UgdGhpcyBlaXRoZXIgbmVlZHMgYSAjZGVmaW5lIChhdCBvbmNlIHNlcnZpbmcKYXMgZG9j dW1lbnRhdGlvbikgb3IgYSBjb21tZW50LiBQZXJoYXBzIHJhdGhlciB0aGUgZm9ybWVyLApjb25z aWRlcmluZyB0aGF0IHRoZSAoc2FtZT8pIDMgYXBwZWFycyBhZ2FpbiBmdXJ0aGVyIGRvd24uIFBs dXMgLQp3aGF0IGd1YXJhbnRlZXMgdGhlcmUgYXJlIDMgc2VjdGlvbiBoZWFkZXJzIGluIHRoZSBp bWFnZT8KCj4gICAgICBzeiA9IGVsZl9yb3VuZF91cChlbGYsIHN6KTsKPiAgCj4gLSAgICAvKiBT cGFjZSBmb3IgdGhlIHN5bWJvbCBhbmQgc3RyaW5nIHRhYmxlcy4gKi8KPiArICAgIC8qIFNwYWNl IGZvciB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFibGUuICovCj4gICAgICBmb3IgKCBpID0gMDsg aSA8IGVsZl9zaGRyX2NvdW50KGVsZik7IGkrKyApCj4gICAgICB7Cj4gICAgICAgICAgc2hkciA9 IGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgaSk7Cj4gICAgICAgICAgaWYgKCAhZWxmX2FjY2Vzc19v ayhlbGYsIEVMRl9IQU5ETEVfUFRSVkFMKHNoZHIpLCAxKSApCj4gICAgICAgICAgICAgIC8qIGlu cHV0IGhhcyBhbiBpbnNhbmUgc2VjdGlvbiBoZWFkZXIgY291bnQgZmllbGQgKi8KPiAgICAgICAg ICAgICAgYnJlYWs7Cj4gLSAgICAgICAgdHlwZSA9IGVsZl91dmFsKGVsZiwgc2hkciwgc2hfdHlw ZSk7Cj4gLSAgICAgICAgaWYgKCAodHlwZSA9PSBTSFRfU1RSVEFCKSB8fCAodHlwZSA9PSBTSFRf U1lNVEFCKSApCj4gLSAgICAgICAgICAgIHN6ID0gZWxmX3JvdW5kX3VwKGVsZiwgc3ogKyBlbGZf dXZhbChlbGYsIHNoZHIsIHNoX3NpemUpKTsKPiArCj4gKyAgICAgICAgaWYgKCBlbGZfdXZhbChl bGYsIHNoZHIsIHNoX3R5cGUpICE9IFNIVF9TWU1UQUIgKQo+ICsgICAgICAgICAgICBjb250aW51 ZTsKPiArCj4gKyAgICAgICAgc3ogPSBlbGZfcm91bmRfdXAoZWxmLCBzeiArIGVsZl91dmFsKGVs Ziwgc2hkciwgc2hfc2l6ZSkpOwo+ICsgICAgICAgIHNoZHIgPSBlbGZfc2hkcl9ieV9pbmRleChl bGYsIGVsZl91dmFsKGVsZiwgc2hkciwgc2hfbGluaykpOwo+ICsKPiArICAgICAgICBpZiAoICFl bGZfYWNjZXNzX29rKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksIDEpICkKPiArICAgICAg ICAgICAgLyogaW5wdXQgaGFzIGFuIGluc2FuZSBzZWN0aW9uIGhlYWRlciBjb3VudCBmaWVsZCAq Lwo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgaWYgKCBlbGZfdXZhbChlbGYs IHNoZHIsIHNoX3R5cGUpICE9IFNIVF9TVFJUQUIgKQo+ICsgICAgICAgICAgICAvKiBJbnZhbGlk IHN5bXRhYiAtPiBzdHJ0YWIgbGluayAqLwo+ICsgICAgICAgICAgICBicmVhazsKClRoaXMgaXMg bm90IHN1ZmZpY2llbnQgLSB3aGF0IGlmIHNoX2xpbmsgaXMgb3V0IG9mIGJvdW5kcywgYnV0IHRo ZQpib2d1c2x5IGFjY2Vzc2VkIGZpZWxkIGhhcHBlbnMgdG8gaG9sZCBTSFRfU1RSVEFCPyAoT2Rk bHkKZW5vdWdoIHlvdSBoYXZlIGF0IGxlYXN0IGFuIFNITl9VTkRFRiBjaGVjayBpbiB0aGUgc2Vj b25kCmxvb3AgYmVsb3cuKQoKQWxzbyBldmVuIGlmIChJIGFzc3VtZSkgZWxmX2xvYWRfaW1hZ2Uo KSB3b3VsZCByZWZ1c2UgdG8gcmVhZApvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGltYWdlLCB3 b3VsZG4ndCB5b3UgYmV0dGVyIGNoZWNrIGhlcmUKdGhhdCBib3RoIHN5bXRhYiBhbmQgc3RydGFi IGFyZSB3aXRoaW4gaW1hZ2UgYm91bmRzPyBUaGUgbW9yZQp0aGF0IHlvdSBpZ25vcmUgZXJyb3Jz IGZyb20gZWxmX2xvYWRfaW1hZ2UoKSAoYW5kCmVsZl9tZW17Y3B5LHNldH1fc2FmZSgpIGRvbid0 IGV2ZW4gcmV0dXJuIGFueSk/Cgo+IEBAIC0xODYsNzkgKzE5OSwxNjkgQEAgdm9pZCBlbGZfcGFy c2VfYnNkc3ltcyhzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCAKPiB1aW50NjRfdCBwc3RhcnQpCj4g IAo+ICBzdGF0aWMgdm9pZCBlbGZfbG9hZF9ic2RzeW1zKHN0cnVjdCBlbGZfYmluYXJ5ICplbGYp Cj4gIHsKPiAtICAgIEVMRl9IQU5ETEVfREVDTChlbGZfZWhkcikgc3ltX2VoZHI7Cj4gLSAgICB1 bnNpZ25lZCBsb25nIHN6Owo+IC0gICAgZWxmX3B0cnZhbCBtYXh2YTsKPiAtICAgIGVsZl9wdHJ2 YWwgc3ltYmFzZTsKPiAtICAgIGVsZl9wdHJ2YWwgc3ltdGFiX2FkZHI7Cj4gLSAgICBFTEZfSEFO RExFX0RFQ0woZWxmX3NoZHIpIHNoZHI7Cj4gLSAgICB1bnNpZ25lZCBpLCB0eXBlOwo+ICsgICAg LyoKPiArICAgICAqIEhlYWRlciB0aGF0IGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJu ZWwgYW5kIGFsbG93cwo+ICsgICAgICogdGhlIE9TIHRvIGZpbmQgd2hlcmUgdGhlIHN5bXRhYiBh bmQgc3RydGFiIGhhdmUgYmVlbiBsb2FkZWQuCj4gKyAgICAgKiBJdCBtaW1pY3MgYSB2YWxpZCBF TEYgZmlsZSBoZWFkZXIsIGFsdGhvdWdoIGl0IG9ubHkgY29udGFpbnMKPiArICAgICAqIGEgc3lt dGFiIGFuZCBhIHN0cnRhYiBzZWN0aW9uLgo+ICsgICAgICoKPiArICAgICAqIE5COiBhY2NvcmRp bmcgdG8gdGhlIEVMRiBzcGVjIHRoZXJlJ3Mgb25seSBPTkUgc3ltdGFiIHBlciBFTEYKPiArICAg ICAqIGZpbGUsIGFuZCBhY2NvcmRpbmdseSB3ZSB3aWxsIG9ubHkgbG9hZCB0aGUgY29ycmVzcG9u ZGluZwo+ICsgICAgICogc3RydGFiLCBzbyB3ZSBvbmx5IG5lZWQgdGhyZWUgc2VjdGlvbiBoZWFk ZXJzIGluIG91ciBmYWtlIEVMRgo+ICsgICAgICogaGVhZGVyIChmaXJzdCBzZWN0aW9uIGhlYWRl ciBpcyBhbHdheXMgYSBkdW1teSkuCj4gKyAgICAgKi8KPiArICAgIHN0cnVjdCB7Cj4gKyAgICAg ICAgdWludDMyX3Qgc2l6ZTsKPiArICAgICAgICBzdHJ1Y3Qgewo+ICsgICAgICAgICAgICBlbGZf ZWhkciBoZWFkZXI7Cj4gKyAgICAgICAgICAgIGVsZl9zaGRyIHNlY3Rpb25bM107Cj4gKyAgICAg ICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlbGZfaGVhZGVyOwo+ICsgICAgfSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKSBoZWFkZXI7CgpJZiB0aGlzIGlzIHBsYWNlZCBhdCB0aGUgZW5kLCBo b3cgY2FuIHRoZSBPUyByZWFzb25hYmx5IHVzZSBpdAp3aXRob3V0IGtub3dpbmcgdGhhdCB0aGVy ZSBhcmUgZXhhY3RseSAzIHNlY3Rpb24gaGVhZGVyCmVudHJpZXM/IEkuZS4gaG93IHdvdWxkIGl0 IGZpbmQgdGhlIGJhc2Ugb2YgdGhpcyBzdHJ1Y3R1cmU/Cgo+ICsgICAgRUxGX0hBTkRMRV9ERUNM KGVsZl9laGRyKSBoZWFkZXJfaGFuZGxlOwo+ICsgICAgdW5zaWduZWQgbG9uZyBzaGRyX3NpemU7 Cj4gKyAgICBFTEZfSEFORExFX0RFQ0woZWxmX3NoZHIpIHNlY3Rpb25faGFuZGxlOwo+ICsgICAg RUxGX0hBTkRMRV9ERUNMKGVsZl9zaGRyKSBpbWFnZV9oYW5kbGU7Cj4gKyAgICB1bnNpZ25lZCBp bnQgaSwgbGluazsKPiArICAgIGVsZl9wdHJ2YWwgaGVhZGVyX2Jhc2U7Cj4gKyAgICBlbGZfcHRy dmFsIGVsZl9oZWFkZXJfYmFzZTsKPiArICAgIGVsZl9wdHJ2YWwgc3ltdGFiX2Jhc2U7Cj4gKyAg ICBlbGZfcHRydmFsIHN0cnRhYl9iYXNlOwo+ICAKPiAgICAgIGlmICggIWVsZi0+YnNkX3N5bXRh Yl9wc3RhcnQgKQo+ICAgICAgICAgIHJldHVybjsKPiAgCj4gLSNkZWZpbmUgZWxmX2hkcl9lbG0o X2VsZiwgX2hkciwgX2VsbSwgX3ZhbCkgICAgIFwKPiAtZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgaWYgKCBlbGZfNjRiaXQoX2VsZikgKSAg ICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgZWxmX3N0b3JlX2ZpZWxkKF9lbGYsIF9o ZHIsIGU2NC5fZWxtLCBfdmFsKTsgIFwKPiAtICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIGVsZl9zdG9yZV9maWVsZChfZWxmLCBfaGRy LCBlMzIuX2VsbSwgX3ZhbCk7ICBcCj4gKyNkZWZpbmUgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3Mo X2VsZiwgX2hkciwgX2VsbSwgX3ZhbCkgICAgICAgICAgICAgXAo+ICtkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAr ICAgIGlmICggZWxmXzY0Yml0KF9lbGYpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgZWxmX3N0b3JlX2ZpZWxkKF9lbGYsIF9oZHIsIGU2NC5f ZWxtLCBfdmFsKTsgICAgICAgICAgICAgICAgXAo+ICsgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICBl bGZfc3RvcmVfZmllbGQoX2VsZiwgX2hkciwgZTMyLl9lbG0sIF92YWwpOyAgICAgICAgICAgICAg ICBcCj4gIH0gd2hpbGUgKCAwICkKPiAgCj4gLSAgICBzeW1iYXNlID0gZWxmX2dldF9wdHIoZWxm LCBlbGYtPmJzZF9zeW10YWJfcHN0YXJ0KTsKPiAtICAgIHN5bXRhYl9hZGRyID0gbWF4dmEgPSBz eW1iYXNlICsgc2l6ZW9mKHVpbnQzMl90KTsKPiAtCj4gLSAgICAvKiBTZXQgdXAgRWxmIGhlYWRl ci4gKi8KPiAtICAgIHN5bV9laGRyID0gRUxGX01BS0VfSEFORExFKGVsZl9laGRyLCBzeW10YWJf YWRkcik7Cj4gLSAgICBzeiA9IGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX2Voc2l6ZSk7Cj4g LSAgICBlbGZfbWVtY3B5X3NhZmUoZWxmLCBFTEZfSEFORExFX1BUUlZBTChzeW1fZWhkciksIEVM Rl9IQU5ETEVfUFRSVkFMKGVsZi0+ZWhkciksIHN6KTsKPiAtICAgIG1heHZhICs9IHN6OyAvKiBu byByb3VuZCB1cCAqLwo+ICsjZGVmaW5lIFNZTVRBQl9JTkRFWCAgICAxCj4gKyNkZWZpbmUgU1RS VEFCX0lOREVYICAgIDIKPiAgCj4gLSAgICBlbGZfaGRyX2VsbShlbGYsIHN5bV9laGRyLCBlX3Bo b2ZmLCAwKTsKPiAtICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfc2hvZmYsIGVsZl91 dmFsKGVsZiwgZWxmLT5laGRyLCBlX2Voc2l6ZSkpOwo+IC0gICAgZWxmX2hkcl9lbG0oZWxmLCBz eW1fZWhkciwgZV9waGVudHNpemUsIDApOwo+IC0gICAgZWxmX2hkcl9lbG0oZWxmLCBzeW1fZWhk ciwgZV9waG51bSwgMCk7Cj4gKyAgICAvKiBBbGxvdyBlbGZfbWVtY3B5X3NhZmUgdG8gd3JpdGUg dG8gc3ltYm9sX2hlYWRlci4gKi8KPiArICAgIGVsZi0+Y2FsbGVyX3hkZXN0X2Jhc2UgPSAmaGVh ZGVyOwo+ICsgICAgZWxmLT5jYWxsZXJfeGRlc3Rfc2l6ZSA9IHNpemVvZihoZWFkZXIpOwo+ICAK PiAtICAgIC8qIENvcHkgRWxmIHNlY3Rpb24gaGVhZGVycy4gKi8KPiAtICAgIHNoZHIgPSBFTEZf TUFLRV9IQU5ETEUoZWxmX3NoZHIsIG1heHZhKTsKPiAtICAgIHN6ID0gZWxmX3NoZHJfY291bnQo ZWxmKSAqIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3NoZW50c2l6ZSk7Cj4gLSAgICBlbGZf bWVtY3B5X3NhZmUoZWxmLCBFTEZfSEFORExFX1BUUlZBTChzaGRyKSwKPiAtICAgICAgICAgICAg ICAgICAgICBFTEZfSU1BR0VfQkFTRShlbGYpICsgZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVf c2hvZmYpLAo+IC0gICAgICAgICAgICAgICAgICAgIHN6KTsKPiAtICAgIG1heHZhID0gZWxmX3Jv dW5kX3VwKGVsZiwgKHVuc2lnbmVkIGxvbmcpbWF4dmEgKyBzeik7Cj4gKyAgICAvKgo+ICsgICAg ICogQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmFyaW91cyBlbGVtZW50cyBpbiBHVUVT VCBNRU1PUlkgU1BBQ0UuCj4gKyAgICAgKiBUaGlzIGFkZHJlc3NlcyBNVVNUIG9ubHkgYmUgdXNl ZCB3aXRoIGVsZl9sb2FkX2ltYWdlLgo+ICsgICAgICoKPiArICAgICAqIE5COiBzdHJ0YWJfYmFz ZSBjYW5ub3QgYmUgY2FsY3VsYXRlZCBhdCB0aGlzIHBvaW50IGJlY2F1c2Ugd2UgZG9uJ3QKPiAr ICAgICAqIGtub3cgdGhlIHNpemUgb2YgdGhlIHN5bXRhYiB5ZXQsIGFuZCB0aGUgc3RydGFiIHdp bGwgYmUgcGxhY2VkIGFmdGVyIGl0Lgo+ICsgICAgICovCj4gKyAgICBoZWFkZXJfYmFzZSA9IGVs Zl9nZXRfcHRyKGVsZiwgZWxmLT5ic2Rfc3ltdGFiX3BzdGFydCk7Cj4gKyAgICBlbGZfaGVhZGVy X2Jhc2UgPSBlbGZfZ2V0X3B0cihlbGYsIGVsZi0+YnNkX3N5bXRhYl9wc3RhcnQpICsKPiArICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCk7Cj4gKyAgICBzeW10YWJfYmFzZSA9 IGVsZl9yb3VuZF91cChlbGYsIGhlYWRlcl9iYXNlICsgc2l6ZW9mKGhlYWRlcikpOwo+ICsKPiAr ICAgIC8qIEZpbGwgdGhlIEVMRiBoZWFkZXIsIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYg aGVhZGVyLiAqLwo+ICsgICAgaGVhZGVyX2hhbmRsZSA9IEVMRl9NQUtFX0hBTkRMRShlbGZfZWhk ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTEZfUkVBTFBUUjJQVFJWQUwo JmhlYWRlci5lbGZfaGVhZGVyLmhlYWRlcikpOwo+ICsgICAgZWxmX21lbWNweV9zYWZlKGVsZiwg RUxGX0hBTkRMRV9QVFJWQUwoaGVhZGVyX2hhbmRsZSksCj4gKyAgICAgICAgICAgICAgICAgICAg RUxGX0hBTkRMRV9QVFJWQUwoZWxmLT5laGRyKSwKPiArICAgICAgICAgICAgICAgICAgICBlbGZf dXZhbChlbGYsIGVsZi0+ZWhkciwgZV9laHNpemUpKTsKPiArCj4gKyAgICAvKiBTZXQgdGhlIG9m ZnNldCB0byB0aGUgc2hkciBhcnJheS4gKi8KPiArICAgIGVsZl9zdG9yZV9maWVsZF9iaXRuZXNz KGVsZiwgaGVhZGVyX2hhbmRsZSwgZV9zaG9mZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZnNldG9mKHR5cGVvZihoZWFkZXIuZWxmX2hlYWRlciksIHNlY3Rpb24pKTsKPiArCj4g KyAgICAvKiBTZXQgdGhlIHJpZ2h0IG51bWJlciBvZiBzZWN0aW9uIGhlYWRlcnMuICovCj4gKyAg ICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIGhlYWRlcl9oYW5kbGUsIGVfc2hudW0sIDMp Owo+ICsKPiArICAgIC8qIENsZWFyIGEgY291cGxlIG9mIGZpZWxkcyB3ZSBkb24ndCB1c2UuICov Cj4gKyAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIGhlYWRlcl9oYW5kbGUsIGVfcGhv ZmYsIDApOwo+ICsgICAgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3MoZWxmLCBoZWFkZXJfaGFuZGxl LCBlX3BoZW50c2l6ZSwgMCk7Cj4gKyAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIGhl YWRlcl9oYW5kbGUsIGVfcGhudW0sIDApOwoKUGVyaGFwcyBiZXR0ZXIganVzdCBnaXZlIHRoZSBz dHJ1Y3R1cmUgYWJvdmUgYW4gaW5pdGlhbGl6ZXI/Cgo+ICsgICAgLyogWmVybyB0aGUgZHVtbXkg c2VjdGlvbi4gKi8KCkR1bW15PyBBbmQgYW55d2F5IEkgdGhpbmsgeW91IG1lYW4gInNlY3Rpb24g aGVhZGVyIiBoZXJlLgoKPiArICAgIHNlY3Rpb25faGFuZGxlID0gRUxGX01BS0VfSEFORExFKGVs Zl9zaGRyLAo+ICsgICAgICAgICAgICAgICAgICAgICBFTEZfUkVBTFBUUjJQVFJWQUwoJmhlYWRl ci5lbGZfaGVhZGVyLnNlY3Rpb25bU0hOX1VOREVGXSkpOwo+ICsgICAgc2hkcl9zaXplID0gZWxm X3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKTsKPiArICAgIGVsZl9tZW1zZXRfc2Fm ZShlbGYsIEVMRl9IQU5ETEVfUFRSVkFMKHNlY3Rpb25faGFuZGxlKSwgMCwgc2hkcl9zaXplKTsK PiAgCj4gKyAgICAvKgo+ICsgICAgICogRmluZCB0aGUgYWN0dWFsIHN5bXRhYiBhbmQgc3RydGFi IGluIHRoZSBFTEYuCj4gKyAgICAgKgo+ICsgICAgICogVGhlIHN5bXRhYiBzZWN0aW9uIGhlYWRl ciBpcyBnb2luZyB0byByZXNpZGUgaW4gc2VjdGlvbltTWU1UQUJfSU5ERVhdLAo+ICsgICAgICog d2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgc3RydGFiIGlzIGdvaW5nIHRvIGJlIHBsYWNlZCBpbgo+ ICsgICAgICogc2VjdGlvbltTVFJUQUJfSU5ERVhdLiBzaF9vZmZzZXQgaXMgbWFuZ2xlZCBzbyBp dCBwb2ludHMgdG8gdGhlIG9mZnNldAo+ICsgICAgICogd2hlcmUgdGhlIHNlY3Rpb25zIGFyZSBh Y3R1YWxseSBsb2FkZWQgKHJlbGF0aXZlIHRvIHRoZSBFTEYgaGVhZGVyCj4gKyAgICAgKiBsb2Nh dGlvbikuCj4gKyAgICAgKi8KPiArICAgIHNlY3Rpb25faGFuZGxlID0gRUxGX01BS0VfSEFORExF KGVsZl9zaGRyLAo+ICsgICAgICAgICAgICAgICAgRUxGX1JFQUxQVFIyUFRSVkFMKCZoZWFkZXIu ZWxmX2hlYWRlci5zZWN0aW9uW1NZTVRBQl9JTkRFWF0pKTsKPiAgICAgIGZvciAoIGkgPSAwOyBp IDwgZWxmX3NoZHJfY291bnQoZWxmKTsgaSsrICkKPiAgICAgIHsKPiAtICAgICAgICBlbGZfcHRy dmFsIG9sZF9zaGRyX3A7Cj4gLSAgICAgICAgZWxmX3B0cnZhbCBuZXdfc2hkcl9wOwo+ICAKPiAt ICAgICAgICB0eXBlID0gZWxmX3V2YWwoZWxmLCBzaGRyLCBzaF90eXBlKTsKPiAtICAgICAgICBp ZiAoICh0eXBlID09IFNIVF9TVFJUQUIpIHx8ICh0eXBlID09IFNIVF9TWU1UQUIpICkKPiArICAg ICAgICBpbWFnZV9oYW5kbGUgPSBlbGZfc2hkcl9ieV9pbmRleChlbGYsIGkpOwo+ICsgICAgICAg IGlmICggZWxmX3V2YWwoZWxmLCBpbWFnZV9oYW5kbGUsIHNoX3R5cGUpICE9IFNIVF9TWU1UQUIg KQo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgZWxmX21lbWNweV9zYWZl KGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2VjdGlvbl9oYW5kbGUpLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBFTEZfSEFORExFX1BUUlZBTChpbWFnZV9oYW5kbGUpLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBzaGRyX3NpemUpOwo+ICsKPiArICAgICAgICBsaW5rID0gZWxmX3V2YWwo ZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfbGluayk7Cj4gKyAgICAgICAgaWYgKCBsaW5rID09IFNI Tl9VTkRFRiApCj4gICAgICAgICAgewo+IC0gICAgICAgICAgICAgZWxmX21zZyhlbGYsICIlczog c2hkciAlaSBhdCAweCUiRUxGX1BSUFRSVkFMIiAtPiAweCUiRUxGX1BSUFRSVkFMIlxuIiwgX19m dW5jX18sIGksCj4gLSAgICAgICAgICAgICAgICAgICAgIGVsZl9zZWN0aW9uX3N0YXJ0KGVsZiwg c2hkciksIG1heHZhKTsKPiAtICAgICAgICAgICAgIHN6ID0gZWxmX3V2YWwoZWxmLCBzaGRyLCBz aF9zaXplKTsKPiAtICAgICAgICAgICAgIGVsZl9tZW1jcHlfc2FmZShlbGYsIG1heHZhLCBlbGZf c2VjdGlvbl9zdGFydChlbGYsIHNoZHIpLCBzeik7Cj4gLSAgICAgICAgICAgICAvKiBNYW5nbGVk IHRvIGJlIGJhc2VkIG9uIEVMRiBoZWFkZXIgbG9jYXRpb24uICovCj4gLSAgICAgICAgICAgICBl bGZfaGRyX2VsbShlbGYsIHNoZHIsIHNoX29mZnNldCwgbWF4dmEgLSBzeW10YWJfYWRkcik7Cj4g LSAgICAgICAgICAgICBtYXh2YSA9IGVsZl9yb3VuZF91cChlbGYsICh1bnNpZ25lZCBsb25nKW1h eHZhICsgc3opOwo+ICsgICAgICAgICAgICBlbGZfbWFya19icm9rZW4oZWxmLCAiYmFkIGxpbmsg aW4gc3ltdGFiIik7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgIH0KPiAtICAgICAg ICBvbGRfc2hkcl9wID0gRUxGX0hBTkRMRV9QVFJWQUwoc2hkcik7Cj4gLSAgICAgICAgbmV3X3No ZHJfcCA9IG9sZF9zaGRyX3AgKyBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUp Owo+IC0gICAgICAgIGlmICggbmV3X3NoZHJfcCA8PSBvbGRfc2hkcl9wICkgLyogd3JhcHBlZCBv ciBzdHVjayAqLwo+ICsKPiArICAgICAgICAvKiBMb2FkIHN5bXRhYiBpbnRvIGd1ZXN0IG1lbW9y eS4gKi8KPiArICAgICAgICBlbGZfbG9hZF9pbWFnZShlbGYsIHN5bXRhYl9iYXNlLCBlbGZfc2Vj dGlvbl9zdGFydChlbGYsIHNlY3Rpb25faGFuZGxlKSwKPiArICAgICAgICAgICAgICAgICAgICAg ICBlbGZfdXZhbChlbGYsIHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSwKPiArICAgICAgICAgICAg ICAgICAgICAgICBlbGZfdXZhbChlbGYsIHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSk7Cj4gKyAg ICAgICAgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3MoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfb2Zm c2V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXRhYl9iYXNlIC0gZWxm X2hlYWRlcl9iYXNlKTsKPiArICAgICAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIHNl Y3Rpb25faGFuZGxlLCBzaF9saW5rLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNUUlRBQl9JTkRFWCk7Cj4gKwo+ICsgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgZ3Vlc3QgYWRk cmVzcyB3aGVyZSBzdHJ0YWIgaXMgbG9hZGVkLiAqLwo+ICsgICAgICAgIHN0cnRhYl9iYXNlID0g ZWxmX3JvdW5kX3VwKGVsZiwgc3ltdGFiX2Jhc2UgKwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVsZl91dmFsKGVsZiwgc2VjdGlvbl9oYW5kbGUsIHNoX3NpemUpKTsKPiAr Cj4gKyAgICAgICAgLyogTG9hZCBzdHJ0YWIgc2VjdGlvbiBoZWFkZXIuICovCj4gKyAgICAgICAg c2VjdGlvbl9oYW5kbGUgPSBFTEZfTUFLRV9IQU5ETEUoZWxmX3NoZHIsCj4gKyAgICAgICAgICAg ICAgICBFTEZfUkVBTFBUUjJQVFJWQUwoJmhlYWRlci5lbGZfaGVhZGVyLnNlY3Rpb25bU1RSVEFC X0lOREVYXSkpOwo+ICsgICAgICAgIGVsZl9tZW1jcHlfc2FmZShlbGYsIEVMRl9IQU5ETEVfUFRS VkFMKHNlY3Rpb25faGFuZGxlKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgRUxGX0hBTkRM RV9QVFJWQUwoZWxmX3NoZHJfYnlfaW5kZXgoZWxmLCBsaW5rKSksCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHNoZHJfc2l6ZSk7Cj4gKwo+ICsgICAgICAgIGlmICggZWxmX3V2YWwoZWxmLCBz ZWN0aW9uX2hhbmRsZSwgc2hfdHlwZSkgIT0gU0hUX1NUUlRBQiApCj4gICAgICAgICAgewo+IC0g ICAgICAgICAgICBlbGZfbWFya19icm9rZW4oZWxmLCAiYmFkIHNlY3Rpb24gaGVhZGVyIGxlbmd0 aCIpOwo+ICsgICAgICAgICAgICBlbGZfbWFya19icm9rZW4oZWxmLCAic3RydGFiIG5vdCBmb3Vu ZCIpOwo+ICAgICAgICAgICAgICBicmVhazsKPiAgICAgICAgICB9Cj4gLSAgICAgICAgaWYgKCAh ZWxmX2FjY2Vzc19vayhlbGYsIG5ld19zaGRyX3AsIDEpICkgLyogb3V0c2lkZSBpbWFnZSAqLwo+ IC0gICAgICAgICAgICBicmVhazsKPiAtICAgICAgICBzaGRyID0gRUxGX01BS0VfSEFORExFKGVs Zl9zaGRyLCBuZXdfc2hkcl9wKTsKPiArCj4gKyAgICAgICAgLyogTG9hZCBzdHJ0YWIgaW50byBn dWVzdCBtZW1vcnkuICovCj4gKyAgICAgICAgZWxmX2xvYWRfaW1hZ2UoZWxmLCBzdHJ0YWJfYmFz ZSwgZWxmX3NlY3Rpb25fc3RhcnQoZWxmLCBzZWN0aW9uX2hhbmRsZSksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZWxmX3V2YWwoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfc2l6ZSksCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZWxmX3V2YWwoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfc2l6 ZSkpOwo+ICsgICAgICAgIGVsZl9zdG9yZV9maWVsZF9iaXRuZXNzKGVsZiwgc2VjdGlvbl9oYW5k bGUsIHNoX29mZnNldCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ0YWJf YmFzZSAtIGVsZl9oZWFkZXJfYmFzZSk7Cj4gKwo+ICsgICAgICAgIC8qIFN0b3JlIHRoZSB3aG9s ZSBzaXplIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgbG9hZGVkIHNlY3Rpb25zKS4gKi8KPiArICAg ICAgICBoZWFkZXIuc2l6ZSA9IHN0cnRhYl9iYXNlICsgZWxmX3V2YWwoZWxmLCBzZWN0aW9uX2hh bmRsZSwgc2hfc2l6ZSkgCj4gLQo+ICsgICAgICAgICAgICAgICAgICAgICAgZWxmX2hlYWRlcl9i YXNlOwo+ICsgICAgICAgIGJyZWFrOwo+ICAgICAgfQoKU28geW91J3JlIHByb3Blcmx5IGJyZWFr aW5nIG91dCBvZiB0aGUgbG9vcCBoZXJlIC0gd2h5IGRvbid0IHlvdQphbHNvIGRvIHRoaXMgaW4g dGhlIHBhcnNpbmcgb25lPwoKSmFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=