From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 2/3] drm: Add panic handling Date: Fri, 12 Aug 2016 10:31:04 +0200 Message-ID: <20160812083104.GO6232@phenom.ffwll.local> References: <1470764742-20323-1-git-send-email-noralf@tronnes.org> <1470764742-20323-3-git-send-email-noralf@tronnes.org> <20160810091529.GQ6232@phenom.ffwll.local> <712995fe-95b5-752f-9863-40c04d212574@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B1026EAC4 for ; Fri, 12 Aug 2016 08:31:09 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id o80so1570206wme.0 for ; Fri, 12 Aug 2016 01:31:09 -0700 (PDT) Content-Disposition: inline In-Reply-To: <712995fe-95b5-752f-9863-40c04d212574@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBBdWcgMTEsIDIwMTYgYXQgMTA6NDY6NTNQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAxMC4wOC4yMDE2IDExOjE1LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gVHVlLCBBdWcgMDksIDIwMTYgYXQgMDc6NDU6NDFQTSArMDIwMCwgTm9yYWxmIFRyw7hu bmVzIHdyb3RlOgo+ID4gPiBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igb3V0cHV0dGluZyBrZXJuZWwg bWVzc2FnZXMgb24gcGFuaWMoKS4KPiA+ID4gVGhlIGRyaXZlcnMgdGhhdCBzdXBwb3J0cyBpdCwg cHJvdmlkZXMgYSBmcmFtZWJ1ZmZlciB0aGF0IHRoZQo+ID4gPiBtZXNzYWdlcyBjYW4gYmUgcmVu ZGVyZWQgb24uCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5v cmFsZkB0cm9ubmVzLm9yZz4KPiA+IFRoaW5raW5nIGFib3V0IGhvdyB3ZSBzaG91bGQgaW1wbGVt ZW50IHRoaXMgaW4gYSBmdWxsLWJsb3duIGRyaXZlciwgSQo+ID4gdGhpbmsgd2Ugd2lsbCBuZWVk IGEgYml0IG1vcmUgdGhhbiB0aGlzLiBIZXJlJ3MgdGhlIGFkZGl0aW9uYWwKPiA+IHJlcXVpcmVt ZW50cyBJJ3ZlIGNvbWUgdXAgdGhhdCBhIGRyaXZlciBtb3JlIGNvbXBsZXggdGhhbiBzZHJtIHdv dWxkIG5lZWQKPiA+IGZvciByZWxpYWJsZSBwYW5pYyBoYW5kbGluZzoKPiA+IAo+ID4gLSBNdWx0 aXBsZSBvdXRwdXRzLCB3aXRoIG11bHRpcGxlIGZyYW1lYnVmZmVyIChvciBvbmUgZnJhbWVidWZm ZXIgYW5kCj4gPiAgICBtdWx0aXBsZSBvZmZzZXRzIHdpdGhpbikuIEFuZCBzaW5jZSBvbmUgZGlz cGxheSBtaWdodCBiZSBkZWFkIHdlIHNob3VsZAo+ID4gICAgdHJ5IHJlYWxseSBoYXJkIHRvIHNo b3cgdGhlIG9vcHMgb24gYWxsIG9mIHRoZW0uIENvbnNlcXVlbmNlOiBJIHRoaW5rIHdlCj4gPiAg ICBuZWVkIHRvIGFsc28gbG9vcCBvdmVyIGFsbCBkcm1fY3J0YyBpbiBhIGRybV9kZXZpY2UsIHRv IGJlIGFibGUgdG8KPiA+ICAgIHN1cHBvcnQgdGhlbSBhbGwuCj4gCj4gSG93IGFib3V0IHRoaXM6 Cj4gCj4gLyoKPiAgKiBUaGUgcGFuaWMoKSBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgb25seSBv bmUgQ1BVIGlzIGFsbG93ZWQgdG8gcnVuIGl0J3MKPiAgKiBjb2RlLiBTbyB0aGlzIGhhbmRsZXIg aXMgb25seSBjYWxsZWQgb25jZS4KPiAgKgo+ICAqIFByaW9yIHRvIGNhbGxpbmcgdGhlIHBhbmlj IGhhbmRsZXJzLCBwYW5pYygpIGNhbGxzIHNtcF9zZW5kX3N0b3AoKS4gSWYKPiAgKiB0aGF0IHdl bnQgd2VsbCwgdGhlcmUncyBvbmx5IG9uZSBDUFUgcnVubmluZywgYnV0IHRoaXMgaXMgbm8gZ3Vh cmFudGVlLgo+ICAqLwo+IHN0YXRpYyBpbnQgZHJtX3BhbmljX2hhbmRsZXIoc3RydWN0IG5vdGlm aWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2LAo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqcHRyKQo+IHsKPiA8ZGVjbGFyYXRpb25zPgo+IAo+ICAgICAgICAgZHJt X2Zvcl9lYWNoX2RldmljZShkcm0sIGlkKSB7Cj4gICAgICAgICAgICAgICAgIGlmICghZHJtLT5k cml2ZXIgfHwKPiAgICAgICAgICAgICAgICAgICAgICEoZHJtLT5kcml2ZXItPmRyaXZlcl9mZWF0 dXJlcyAmIERSSVZFUl9BVE9NSUMpKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+IAo+ICAgICAgICAgICAgICAgICBkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkcm0pIHsKPiAg ICAgICAgICAgICAgICAgICAgICAgICBjcnRjX2xvY2tlZCA9IHd3X211dGV4X3RyeWxvY2soJmNy dGMtPm11dGV4Lm11dGV4KTsKCklmIHlvdSBjYW50IGdldCB0aGUgbG9jayB5b3UgbXVzdCBza2lw LiBNb3N0IGxpa2VseSBzb21lb25lIGVsc2UgaXMKdGFtcGVyaW5nIHdpdGggdGhlIGNydGMgcmln aHQgbm93LgoKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNydGMtPmVuYWJsZWQg fHwgIWNydGMtPnByaW1hcnkpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGNydGNfdW5sb2NrOwo+IAo+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3J0Yy0+c3Rh dGUgfHwgIWNydGMtPnN0YXRlLT5hY3RpdmUgfHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIWNydGMtPnN0YXRlLT5zdGF0ZSkKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gY3J0Y191bmxvY2s7Cj4gCj4gICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBj cnRjLT5zdGF0ZS0+c3RhdGU7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPSBjcnRj LT5wcmltYXJ5Owo+ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lX2xvY2tlZCA9Cj4gd3df bXV0ZXhfdHJ5bG9jaygmcGxhbmUtPm11dGV4Lm11dGV4KTsKPiAKPiAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFuZV9zdGF0ZSA9CgpTYW1lIGhlcmUgd2l0aCB0aGUgcGxhbmVzLgoKPiBkcm1f YXRvbWljX2dldF9leGlzdGluZ19wbGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOwo+ICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghcGxhbmVfc3RhdGUgfHwgIXBsYW5lX3N0YXRlLT52aXNpYmxl KQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwbGFuZV91bmxvY2s7Cj4g Cj4gICAgICAgICAgICAgICAgICAgICAgICAgZmIgPSBwbGFuZS0+ZmI7Cj4gCj4gICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFmYiB8fCAhZmItPmZ1bmNzIHx8ICFmYi0+ZnVuY3MtPnBhbmlj X3ZtYXApCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBsYW5lX3VubG9j azsKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IDgtYml0IHdpZGUgZm9udHMg YXJlIHN1cHBvcnRlZCAqLwo+ICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBnZXRfZGVm YXVsdF9mb250KGZiLT53aWR0aCwgZmItPmhlaWdodCwKPiBCSVQoNyksIC0xKTsKPiAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIWZvbnQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHBsYW5lX3VubG9jazsKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICB2bWFw ID0gZmItPmZ1bmNzLT5wYW5pY192bWFwKGZiKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIXZtYXApCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBsYW5lX3Vu bG9jazsKPiAKPiAgICAgICAgICAgICAgICAgLyoKPiAgICAgICAgICAgICAgICAgICogSG93IGRv IEkgZmluZCB0aGUgYWN0dWFsIHdpZHRoL2hlaWdodCBmcm9tIHRoZSBwbGFuZQo+IHN0YXRlCj4g ICAgICAgICAgICAgICAgICAqIGFzIHlvdSBtZW50aW9uIGZ1cnRoZXIgZG93bj8KPiAgICAgICAg ICAgICAgICAgICovCj4gICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSA/Pwo+ICAgICAg ICAgICAgICAgICAgICAgICAgIGhlaWdodCA9ID8/CgpwbGFuZV9zdGF0ZS0+c3JjIGNvbnRhaW5z IHRoZSBjbGlwcGVkIHNvdXJjZSByZWN0YW5nbGUgaW4gMTYuMTYgZml4ZWQKcG9pbnQgKG9uIGxh dGVzdCBkcm0tbWlzYywgc29vbiBhbHNvIGluIGRybS1uZXh0KS4gRXZlcnl0aGluZyBvdXRzaWRl IG9mCnRoYXQgYXJlYSBpcyBub3QgdmlzaWJsZSAob24gdGhpcyBwbGFuZS9jcnRjIGNvbWJvKS4K Cj4gCj4gICAgICAgICAgICAgICAgICAgICAgICAgcGZiID0gJmRybV9wYW5pY19mYnNbZmJzKytd Owo+ICAgICAgICAgICAgICAgICAgICAgICAgIHBmYi0+ZmIgPSBmYjsKPiAgICAgICAgICAgICAg ICAgICAgICAgICBwZmItPnZtYXAgPSB2bWFwOwo+ICAgICAgICAgICAgICAgICAgICAgICAgIHBm Yi0+Zm9udCA9IGZvbnQ7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcGZiLT5jb2xzID0gd2lk dGggLyBmb250LT53aWR0aDsKPiAgICAgICAgICAgICAgICAgICAgICAgICBwZmItPnJvd3MgPSBo ZWlnaHQgLyBmb250LT5oZWlnaHQ7Cj4gCj4gICAgICAgICAgICAgICAgIC8qCj4gICAgICAgICAg ICAgICAgICAqIGhvdyB0byB1bmxvY2s/Cj4gICAgICAgICAgICAgICAgICAqIHd3X211dGV4X3Vu bG9jaygpIGRvYyBzYXlzOgo+ICAgICAgICAgICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qg bm90IGJlIHVzZWQgaW4gaW50ZXJydXB0IGNvbnRleHQKCkl0IC9zaG91bGQvIHdvcmssIHByb2Jh Ymx5IGEgY29weXBhc3RlIGVycm9yIGZyb20gd3dfbXV0ZXhfbG9jayAodGhhdCBvbmUKY2FuJ3Qg YmUgdXNlZCBmcm9tIGludGVycnVwdCBjb250ZXh0KS4gSnVzdCB0cnkgYW5kIHRoZW4gdGVzdCB0 aGlzIHdpdGgKZnVsbCBDT05GSUdfUFJPVkVfTE9DS0lORyBlbmFibGVkLCB0aGF0IHNob3VsZCBj YXRjaCBhbnkgaXNzdWUgKGlmIHRoZXJlCmlzIG9uZSkuCgo+ICAgICAgICAgICAgICAgICAgKi8K PiAgICAgICAgICAgICAgICAgcGxhbmVfdW5sb2NrOgo+ICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChwbGFuZV9sb2NrZWQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21l aG93X3VubG9jaygpOwo+ICAgICAgICAgICAgICAgICBjcnRjX3VubG9jazoKPiAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY3J0Y19sb2NrZWQpCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzb21laG93X3VubG9jaygpOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICB9 Cj4gCj4gICAgICAgICBkcm1fcGFuaWNfYWN0aXZlID0gdHJ1ZTsKPiB9Cj4gCj4gCj4gCj4gPiAt IFdpdGggZGVza3RvcCBncHVzIHlvdSBwcmV0dHkgbXVjaCBhbHdheXMgZW5kIHVwIHdpdGggYSB0 aWxlZAo+ID4gICAgZnJhbWVidWZmZXIuIEFuZCBmcm9tIGFuIG9vcHMgY29udGV4dCBpdCdzIGdv aW5nIHRvIGJlIGltcG9zc2libGUgdG8KPiA+ICAgIGRldGlsZSB0aGF0IHF1aWNrbHkuIEkgdGhp bmsgZm9yIHRoaXMgd2UgbmVlZCBhIGhlbHBlciB0byBkcmF3IHgveQo+ID4gICAgcGl4ZWxzIChp dCdzIGdvaW5nIHRvIGJlIGRlYWQgc2xvdywgYnV0IG1laCksIHdpdGggYSBkZWZhdWx0Cj4gPiAg ICBpbXBsZW1lbnRhdGlvbiB3aGljaCBhc3N1bWVzIGxpbmVhciBsYXlvdXQuIERyaXZlcnMgY291 bGQgdGhlbiBmcm9iIHgveQo+ID4gICAgY29vcmRpbmF0ZXMgZmlyc3QgaW4gdGhlaXIgb3duIGxv Z2ljIGFuZCBjYWxsIGludG8gdGhhdCBmdW5jdGlvbi4KPiA+IAo+ID4gLSBUaGVyZSdzIGEgZ29v ZCBjaGFuY2UgeW91J3JlIHNob3dpbmcgYSB2aWRlbyBvbiBhIHl1diBidWZmZXIKPiA+ICAgIGZ1 bGwtc2NyZWVuLiBJZiB3ZSBkb24ndCBib3RoZXIgdG9vIG11Y2ggd2l0aCB3aGF0IGl0IGxvb2tz IGxpa2UsIGJ1dAo+ID4gICAgb25seSBjYXJlIGFib3V0IGEgZm9yZWdyb3VuZC9iYWNrZ3JvdW5k IGNvbG9yIHRoZW4gaXQncyBhbHNvIGVhc3kgdG8KPiA+ICAgIGltcGxlbWVudCBhIGRyYXdfeHlf cGl4ZWwgZm9yIHRoZXNlIGZyYW1lYnVmZmVycy4gVGhhdCBtZWFucyB0aG91Z2ggdGhhdAo+ID4g ICAgeW91IGNhbid0IGNsZWFyIHRoaW5ncyB3aXRoIG1lbXNldCwgYnV0IHRoYXQgeW91IG5lZWQg dG8gY2FsbCB0aGUKPiA+ICAgIGludGVyZmFjZSBmdW5jIGZvciBlYWNoIHBpeGVsLiBZZXMgdGhp cyBpcyBnb2luZyB0byBiZSBkZWFkIHNsb3csIGJ1dAo+ID4gICAgd2hvIGNhcmVzIGFzIGxvbmcg YXMgdGhlIG9vcHMgZXZlbnR1YWxseSBzaG93cyB1cCA7LSkKPiAKPiBMZXQncyBnaXZlIGl0IGEg dHJ5LCB0aGUgeXV2IHBhcnQgaXMganVzdCBndWVzc3dvcms6CgpJIHRoaW5rIGZvciBub3cgd2Ug Y291bGQganVzdCBvbWl0IHRoZSB5dXYgc3R1ZmYuIFRoZSBpZGVhIGJlaGluZCBkcmF3X3h5Cndh cyBtb3JlIHRoYXQgaXQgd291bGQgbWFrZSBpdCBwb3NzaWJsZSwgbm90IHRoYXQgd2UgbmVlZCBp dCBmcm9tIGRheSAxLgoKPiAKPiB2b2lkIGRybV9wYW5pY19kcmF3X3h5KHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCB2b2lkICp2bWFwLAo+ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgs IGludCB5LCBib29sIGZvcmVncm91bmQpCj4gewo+ICAgICAgICAgdm9pZCAqZHN0Owo+IAo+ICAg ICAgICAgZHN0ID0gdm1hcCArIGZiLT5vZmZzZXRzWzBdICsgKHkgKiBmYi0+cGl0Y2hlc1swXSk7 Cj4gCj4gICAgICAgICBzd2l0Y2ggKGZiLT5waXhlbF9mb3JtYXQgJiB+RFJNX0ZPUk1BVF9CSUdf RU5ESUFOKSB7Cj4gCj4gICAgICAgICBjYXNlIERSTV9GT1JNQVRfQzg6Cj4gCj4gICAgICAgICBj YXNlIERSTV9GT1JNQVRfUkdCMzMyOgo+ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX0JHUjIzMzoK PiAKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+ICAgICAgICAgY2FzZSBEUk1fRk9S TUFUX05WMjE6Cj4gICAgICAgICBjYXNlIERSTV9GT1JNQVRfTlYxNjoKPiAgICAgICAgIGNhc2Ug RFJNX0ZPUk1BVF9OVjYxOgo+ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX05WMjQ6Cj4gICAgICAg ICBjYXNlIERSTV9GT1JNQVRfTlY0MjoKPiAKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9ZVVY0 MTA6Cj4gICAgICAgICBjYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+ICAgICAgICAgY2FzZSBEUk1f Rk9STUFUX1lVVjQxMToKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTE6Cj4gICAgICAg ICBjYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX1lWVTQy MDoKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6Cj4gICAgICAgICBjYXNlIERSTV9G T1JNQVRfWVZVNDIyOgo+ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX1lVVjQ0NDoKPiAgICAgICAg IGNhc2UgRFJNX0ZPUk1BVF9ZVlU0NDQ6Cj4gICAgICAgICAgICAgICAgIGRzdCArPSB4Owo+ICAg ICAgICAgICAgICAgICAqKHU4ICopZHN0ID0gZm9yZWdyb3VuZCA/IDB4ZmYgOiAweDAwOwo+ICAg ICAgICAgICAgICAgICBicmVhazsKPiAKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+ ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4gICAgICAgICAgICAgICAgIGRzdCArPSB4 ICogc2l6ZW9mKHUzMik7Cj4gICAgICAgICAgICAgICAgIHB1dF91bmFsaWduZWQoZm9yZWdyb3Vu ZCA/IDB4ZmYwMGZmMDAgOiAweDAwMDAwMDAwLCAodTMyCj4gKilkc3QpOwo+ICAgICAgICAgICAg ICAgICBicmVhazsKPiAKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICAgICAgICAg Y2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gICAgICAgICAgICAgICAgIGRzdCArPSB4ICogc2l6ZW9m KHUzMik7Cj4gICAgICAgICAgICAgICAgIHB1dF91bmFsaWduZWQoZm9yZWdyb3VuZCA/IDB4MDBm ZjAwZmYgOiAweDAwMDAwMDAwLCAodTMyCj4gKilkc3QpOwo+ICAgICAgICAgICAgICAgICBicmVh azsKPiAKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAgICAgICAgIGNhc2Ug RFJNX0ZPUk1BVF9BUkdCODg4ODoKPiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoK PiAgICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAgICAgICAgICAgICAgICAgZHN0 ICs9IHggKiBzaXplb2YodTMyKTsKPiAgICAgICAgICAgICAgICAgcHV0X3VuYWxpZ25lZChmb3Jl Z3JvdW5kID8gMHgwMGZmZmZmZiA6IDB4MDAwMDAwMDAsICh1MzIKPiAqKWRzdCk7Cj4gICAgICAg ICAgICAgICAgIGJyZWFrOwo+IAo+ICAgICAgICAgLyogYW5kIHRoZW4gdGhlIG90aGVyIHJnYiBm b3JtYXRzICovCj4gICAgICAgICB9Cj4gfQo+IAo+ID4gLSBUaGUgZnJhbWVidWZmZXIgc2l6ZSBk b2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlCj4gPiAgICBw YXJ0LiBQcm9iYWJseSBiZXN0IGlmIHdlIGRpZyB0aGlzIG91dCBmcm9tIHRoZSBwbGFuZV9zdGF0 ZSBkaXJlY3RseQo+ID4gICAgKGxlc3MgZnJhZ2lsZSBjb2RlIGluIGRyaXZlcnMpLiBSZWx5aW5n IG9uIGRybV9wbGFuZV9zdGF0ZSBtZWFucyB0aGlzCj4gPiAgICB3aWxsIG9ubHkgd29yayBvbiBh dG9taWMgZHJpdmVycyAoaW4gbGVnYWN5IGRyaXZlcnMgdGhpcyBpbmZvcm1hdGlvbiBpcwo+ID4g ICAgaGlkZGVuIGluIGRyaXZlci1wcml2YXRlIGNvcm5lcnMpLCBidXQgSSB0aGluayB0aGF0J3Mg dG90YWxseSBvay4KPiA+IAo+ID4gLSBXZSBuZWVkIGxvY2tpbmcuIE9uZSBvZiB0aGUgYmlnZ2Vz dCBwcm9ibGVtcyB3aXRoIHRoZSBvbGQgb29wcyBoYW5kbGluZwo+ID4gICAgd2FzIHRoYXQgaXQg d2FzIHZlcnkgZ29vZCBhdCB0cmFtcGxpbmcgb3ZlciBkcml2ZXIgc3RhdGUsIGNhdXNpbmcgbW9y ZQo+ID4gICAgKHVucmVsYXRlZCkgb29wc2VzIGluIGttcyBjb2RlIGFuZCBtYWtpbmcgc3VyZSB0 aGUgb3JpZ2luYWwgb29wcyB3YXMgbm8KPiA+ICAgIGxvbmdlciB2aXNpYmxlLiBJIHRoaW5rIHRo ZSBzaGFyZWQgY29kZSBtdXN0IHRha2UgY2FyZSBvZiBhbGwgdGhlCj4gPiAgICBsb2NraW5nIG5l ZWRzIHRvIGF2b2lkIGZyYWdpbGUgY29kZSBpbiBkcml2ZXJzLiB3d19tdXRleF90cnlsb2NrIG9u IHRoZQo+ID4gICAgZHJtX2NydGMgYW5kIGRybV9wbGFuZSBzaG91bGQgYmUgZW5vdWdoICh3ZSBu ZWVkIGJvdGggZm9yIGRyaXZlcnMgd2hlcmUKPiA+ICAgIHBsYW5lcyBjYW4gYmUgcmVhc3NpZ25l ZCBiZXR3ZWVuIGRyaXZlcnMpLgo+IAo+IElzIHRoaXMgZm9yIHRoZSBjYXNlIHdoZXJlIHBhbmlj KCkgZmFpbHMgdG8gc3RvcCB0aGUgb3RoZXIgY3B1cz8KPiBPciBjYW4gcHJlZW1wdGlvbiBoYXBw ZW4gZXZlbiB0aG91Z2ggcGFuaWMoKSBjYWxscyBsb2NhbF9pcnFfZGlzYWJsZSgpPwoKRXZlcnl0 aGluZyBzaG91bGQgYmUgc3RvcHBlZCwgYnV0IGlmIHlvdSBjYW4ndCBnZXQgbG9ja3MgdGhlbiBz b21lIG90aGVyCnRocmVhZCBtaWdodCBiZSBjaGFuZ2luZyBzdy9odyBzdGF0ZSBhbmQgbGVhdmUg YSBjb21wbGV0ZSBtZXNzIGJlaGluZC4KQmV0dGVyIHRvIG5vdCB0b3VjaCBhbnl0aGluZy4KClRo ZSBvdGhlciByZWFzb24gZm9yIHVubG9ja2luZyBpcyB0ZXN0aW5nICh0aGF0IG9uZSBJIHRvdGFs bHkgZm9yZ290KS4gSXQKd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQgdGVzdCBhbGwgdGhpcyBj b2RlIHRocm91Z2ggc29tZSBkZWJ1Z2ZzIGhhY2suCkJlc3QgY2FzZSB3b3VsZCBiZSBmaXJpbmcg dXAgYW4gbm1pIChkb24ndCBhc2sgbWUgaG93LCB3b3VsZCBuZWVkIHRvIGxvb2sKdG9vKSBvciBh dCBsZWFzdCBhIGhhcmRpcnEgYW5kIHRoZW4gY2FsbCB0aGUgZHJtIHBhbmljIGhhbmRsaW5nIGNv ZGUgZnJvbQp0aGF0LiBJIHRoaW5rIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgaW4gYWRkaXRpb24g dG8gbWFrZSB0aGlzIHdvcmsgaXMgYQpwYW5pY192dW5tYXAgY2FsbGJhY2sgdG8gcmVsZWFzZSB0 aGUgdm1hcCByZWdpb24gYWdhaW4gKGlmIG5lZWRlZCkuIENNQQp3b24ndCBuZWVkIHRoaXMsIHNv IHRoYXQgaG9vayBzaG91bGQgYmUgb3B0aW9uYWwuCgpCdXQgd2l0aCB0aGF0IHdlIGNhbiB0aGVu IGV4ZXJjaXNlIHRoZSBwYW5pYyBjb2RlIGluIGUuZy4gYSBDSQplbnZpcm9ubWVudCwgd2l0aG91 dCBraWxsaW5nIHRoZSBtYWNoaW5lICh1bmxpa2UgYSByZWFsIHBhbmljKS4gQW5kIHRoYXQKaG9w ZWZ1bGx5IG1ha2VzIHN1cmUgdGhlIGNvZGUga2VlcHMgd29ya2luZyBldmVuIGluIHRoZSBmdXR1 cmUuCgpPbmUgbW9yZTogSWYgaXQncyBub3QgcG9zc2libGUgdG8gZ2V0IGludG8gYSByZWFsIGhh cmRpcnEgY29udGV4dCB0aGUKc2ltcGxlc3Qgb3B0aW9uIHdvdWxkIGJlIHRvIGNhbGwgbG9jYWxf aXJxX2Rpc2FibGUoKS9sb2NhbF9pcnFfZW5hYmxlKCkKYXJvdW5kIHRoZSBjYWxsIHRvIHRoZSBk cm0gcGFuaWMgaGFuZGxlci4gVGhhdCB3aWxsIGF0IGxlYXN0IHRlbGwgbG9ja2RlcAphbmQgYWxs IHRoZSBidWlsdC1pbiBkZWJ1ZyBjaGVja3MgdGhlIHJpZ2h0IHRoaW5nLgoKT25lIG1vcmUgb24g dG9wIGFib3V0IGxvY2tpbmc6IElmIHdlIG1ha2UgdGhlIGRybSBwYW5pYyBoYW5kbGluZyB0ZXN0 YWJsZQpsaWtlIHRoaXMgd2UgbmVlZCB0byBob2xkIHRoZSBjcnRjL3BsYW5lIGxvY2tzIHVudGls IHBhbmljX3Z1bm1hcCBoYXMgYmVlbgpjYWxsZWQuCgo+ID4gLSBNdWx0aXBsZSBwbGFuZXMgd2hp Y2ggbWlnaHQgb2NjbHVkZSB0aGUgcHJpbWFyeSBwbGFuZTogSSB0aGluayB3ZSBzaG91bGQKPiA+ ICAgIGp1c3QgYm90aGVyIHdpdGggdGhlIHByaW1hcnkgcGxhbmUsIGFuZCBtYXliZSBnaXZlIGRy aXZlcnMgYQo+ID4gICAgcGFuaWNfY29tbWl0IGhvb2sgd2hlcmUgdGhleSBjb3VsZCB0cnkgdG8g ZGlzYWJsZSBhbnkgYWRkaXRpb25hbCBwbGFuZXMuCj4gPiAgICBCdXQgdGhhdCdzIG5vdCBzb21l dGhpbmcgd2UgbmVlZCBpbiB0aGUgZmlyc3QgdmVyc2lvbiBoZXJlIGF0IGFsbC4KPiA+IAo+ID4g LSBJIHRoaW5rIHNvbWUgaGVscGVycyBmb3IgY3JlYXRpbmcgdGhlIHZtYXAgd291bGQgYmUgbmlj ZS4gU2hvdWxkIGJlCj4gPiAgICBzaW1wbGUgZm9yIGNtYS1iYWNrZWQgZnJhbWVidWZmZXJzLCBh bmQgYWxzbyBzaW1wbGUgaWYgeW91IHVzZSBhIG5vcm1hbAo+ID4gICAgc2htZW0gYmFja2VkIGdl bSBidWZmZXIuIEZvciBjbWEgcHJvYmFibHkgYmVzdCBpZiBkcml2ZXJzIGRvbid0IGV2ZW4KPiA+ ICAgIG5lZWQgdG8gYm90aGVyIHdpdGggdGhpcy4KPiAKPiBJIGRvbid0IGtub3cgYWJvdXQgc2ht ZW0sIGJ1dCBjbWEgY291bGQgbG9vayBsaWtlIHRoaXM6Cj4gCj4gLyoqCj4gICogZHJtX2ZiX2Nt YV9wYW5pY192bWFwIC0gSGVscGVyIGZ1bmN0aW9uIGZvciB0aGUKPiAgKiAgICAgICAgICAgICAg ICAgICAgICAgICAmZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzLT5wYW5pY192bWFwIGNhbGxiYWNrCj4g ICogQGZiOiBEUk0gZnJhbWVidWZmZXIKPiAgKgo+ICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBp biBhIHBhbmljKCkgc2l0dWF0aW9uIHRvIGdldCB0byB0aGUgdmlydHVhbAo+IGFkZHJlc3MKPiAg KiBvZiB0aGUgYmFja2luZyBidWZmZXIgZm9yIHJlbmRlcmluZyBrZXJuZWwgbWVzc2FnZXMuCj4g ICogVGhlcmUncyBubyBuZWVkIHRvIHNldCB0aGUgJmRybV9mcmFtZWJ1ZmZlcl9mdW5jcy0+cGFu aWNfZHJhd194eQo+IGNhbGxiYWNrLAo+ICAqIHNpbmNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0 aW9uIHdpbGwgc3VmZmljZS4KPiAgKgo+ICAqIE5vdGU6IEEgUFJJTUUgaW1wb3J0ZWQgYnVmZmVy IHdpbGwgX25vdF8gaGF2ZSBpdCdzIHZhZGRyIHNldC4KPiAgKgo+ICAqIFJldHVybnM6Cj4gICog VGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYmFja2luZyBvYmplY3QsIG9yIE5VTEwuCj4gICov Cj4gdm9pZCAqZHJtX2ZiX2NtYV9wYW5pY192bWFwKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi KQo+IHsKPiAgICAgICAgIHN0cnVjdCBkcm1fZmJfY21hICpmYl9jbWEgPSB0b19mYl9jbWEoZmIp Owo+ICAgICAgICAgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iaiA9IGZiX2NtYS0+ b2JqWzBdOwo+IAo+ICAgICAgICAgcmV0dXJuIGNtYV9vYmogPyBjbWFfb2JqLT52YWRkciA6IE5V TEw7Cj4gfQo+IEVYUE9SVF9TWU1CT0woZHJtX2ZiX2NtYV9wYW5pY192bWFwKTsKPiAKPiAgc3Rh dGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgZHJtX2ZiX2NtYV9mdW5jcyA9IHsKPiAg ICAgICAgIC5kZXN0cm95ICAgICAgICA9IGRybV9mYl9jbWFfZGVzdHJveSwKPiAgICAgICAgIC5j cmVhdGVfaGFuZGxlICA9IGRybV9mYl9jbWFfY3JlYXRlX2hhbmRsZSwKPiArICAgICAgIC5wYW5p Y192bWFwICAgICA9IGRybV9mYl9jbWFfcGFuaWNfdm1hcCwKPiAgfTsKCll1cCwgdGhhdCBsb29r cyBnb29kLgoKPiA+IC0gRm9yIGRyaXZlciBjb252ZW5pZW5jZSBJIHRoaW5rIHdlIGNvdWxkIGNo ZWNrIGEgZmV3IHRoaW5ncyBhYm91dAo+ID4gICAgdmlzaWJpbGl0eSBvZiBlYWNoIHBsYW5lIChl LmcuIGNydGNfc3RhdGUtPmFjdGl2ZSksIGFuZCBza2lwIGlmIHRoZXJlJ3MKPiA+ICAgIG5vIGNo YW5jZSBpdCBjYW4gYmUgc2Vlbi4gRG9pbmcgbGVzcyBtZWFucyBsZXNzIGNoYW5jZXMgdG8gYmxv dyB1cCwgYW5kCj4gPiAgICBoaWdoZXIgY2hhbmNlcyB0aGF0IHRoZSBvbmUgc2NyZWVuIHdoaWNo IGlzIG9uIGFjdHVhbGx5IGVuZHMgdXAgd2l0aCB0aGUKPiA+ICAgIG9vcHMgb24gaXQuCj4gPiAK PiA+IC0gTWluaW1hbCBjbGVhbnVwLiBJIHRoaW5rIHdlIGNhbiBqdXN0IGxlYWsgdGhlIHZtYXBw aW5nLCBubyBoYXJtIGluIHRoYXQuCj4gPiAgICBCdXQgdGhlIGttcyBsb2NrcyBuZWVkIHRvIGJl IGRyb3BwZWQgYWdhaW4uIERyb3BwaW5nIHRoZW0gYWdhaW4gbWlnaHQKPiA+ICAgIGluY3JlYXNl IHRoZSBvZGRzIHRoYXQgdGhlIHN5c3RlbSBsaW1wcyBhbG9uZyBsb25nIGVub3VnaCBmb3IgbG9n cyB0bwo+ID4gICAgaGl0IHRoZSBkaXNrcy4KPiA+IAo+ID4gVGFraW5nIHRoaXMgYWxsIHRvZ2V0 aGVyLCBJIHRoaW5rIHRoZSBkcml2ZXIgaW50ZXJmYWNlIHNob3VsZCBiZQo+ID4gcmVzdHJ1Y3R1 cmVkIGEgYml0LCBhbmQgdGhhdCBtb3N0IG9mIHRoZSBoYW5kbGluZyBzaG91bGQgYmUgb24gdGhl Cj4gPiBkcm1fZnJhbWVidWZmZXIgZGlyZWN0bHk6Cj4gPiAKPiA+IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXJfZnVuY3Mgewo+ID4gCS8qIEZvciB2bWFwcGluZyB0aGUgc2VsZWN0ZWQgZnJhbWVidWZm ZXIgaW4gYSBwYW5pYyBjb250ZXh0LiBNdXN0Cj4gPiAJICogYmUgc3VwZXIgY2FyZWZ1bCBhYm91 dCBsb2NraW5nIChvbmx5IHRyeWxvY2tpbmcgYWxsb3dlZCksIGNhbgo+ID4gCSAqIHJldHVybiBO VUxMIGlmIGl0IGRpZG4ndCB3b3JrIG91dC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhbgo+ID4gCSAq IG9wYXF1ZSBjb29raWUgd2hpY2ggaXMgcGFzc2VkIHRvIEBwYW5pY19kcmF3X3h5LCBpdCBjYW4g YmUKPiA+IAkgKiBhbnl0aGluZzogdm1hcCBhcmVhLCBzdHJ1Y3R1cmUgd2l0aCBtb3JlIGRldGFp bHMsIGp1c3QgYSBmZXcKPiA+IAkgKiBmbGFncywgLi4uCj4gPiAJICovCj4gPiAJdm9pZCAqKHBh bmljX3ZtYXApKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKPiA+IAo+ID4gCS8qIEZvciBk cmF3aW5nIHBpeGVscyBvbnRvIGEgZnJhbWVidWZmZXIgbWFwcGluZyB3aXRoIEBwYW5pY192bWFw Lgo+ID4gCSAqIFRoaXMgaXMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFz c3VtZXMgdGhhdCB2bWFwCj4gPiAJICogcG9pbnRzIGF0IGEgbGluZWFyIG1hcHBpbmcgb2YgdGhl IGZyYW1lYnVmZmVyLgo+ID4gCSAqLwo+ID4gCXZvaWQgKHBhbmljX2RyYXdfeHkpKHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2bWFwLAo+ID4gCQkJICAgICBpbnQgeCwgaW50IHks IGJvb2wgZm9yZWdyb3VuZCk7Cj4gPiB9Owo+ID4gCj4gPiBPZmMgY29tbWVudHMgbmVlZCB0byBi ZSBmbGVzaGVkIG91dCBzb21lIG1vcmUsIGJ1dCB0aGUgaWRlYSBpcyB0aGF0IGFsbAo+ID4gdGhl IGZiIHNlbGVjdGlvbiBhbmQgbG9va3VwIGlzIGhhbmRsZWQgaW4gc2hhcmVkIGNvZGUgKGFuZCB3 aXRoIHByb3Blcgo+ID4gbG9ja2luZywgYnV0IG9ubHkgZm9yIGF0b21pYyBkcml2ZXJzKS4KPiA+ IAo+ID4gVGhvdWdodHM/Cj4gCj4gSSBsaWtlIHRoaXMsIGl0IGFwcGVhcnMgdG8gYmUgdmVyeSBm bGV4aWJsZS4KPiBXaWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgZmFzdC9zbG93IHRoaXMg aXMsIGluIHRoZSBsaW5lYXIgY2FzZSwKPiBjb21wYXJlZCB0byB3aGF0IEkgZGlkLgoKQXdlc29t ZSwgbG9va2luZyBmb3J3YXJkIHRvIHRoZSBwYXRjaGVzLgotRGFuaWVsCgo+IAo+IAo+IE5vcmFs Zi4KPiAKPiA+IC1EYW5pZWwKPiA+IAo+ID4gPiAtLS0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgICAgICAgfCAgIDIgKy0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5j ICAgICAgfCAgIDMgKwo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCB8ICAg NCArCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jICAgIHwgNjA2ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ICAgaW5jbHVkZS9kcm0vZHJt UC5oICAgICAgICAgICAgIHwgIDIyICsrCj4gPiA+ICAgNSBmaWxlcyBjaGFuZ2VkLCA2MzYgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ID4gaW5kZXgg ZWJhMzJhZC4uZmYwNGU0MSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gPiBAQCAtMTIsNyAr MTIsNyBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8g XAo+ID4gPiAgIAkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8g XAo+ID4gPiAgIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwubyBkcm1fcHJpbWUubyBc Cj4gPiA+ICAgCQlkcm1fcmVjdC5vIGRybV92bWFfbWFuYWdlci5vIGRybV9mbGlwX3dvcmsubyBc Cj4gPiA+IC0JCWRybV9tb2Rlc2V0X2xvY2subyBkcm1fYXRvbWljLm8gZHJtX2JyaWRnZS5vCj4g PiA+ICsJCWRybV9tb2Rlc2V0X2xvY2subyBkcm1fYXRvbWljLm8gZHJtX2JyaWRnZS5vIGRybV9w YW5pYy5vCj4gPiA+ICAgZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KPiA+ID4g ICBkcm0tJChDT05GSUdfRFJNX0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIu bwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHJ2LmMKPiA+ID4gaW5kZXggM2IxNDM2Ni4uNDU3ZWU5MSAxMDA2NDQKPiA+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2Rydi5jCj4gPiA+IEBAIC04NjEsNiArODYxLDggQEAgc3RhdGljIGludCBfX2lu aXQgZHJtX2NvcmVfaW5pdCh2b2lkKQo+ID4gPiAgIAkJZ290byBlcnJfcDM7Cj4gPiA+ICAgCX0K PiA+ID4gKwlkcm1fcGFuaWNfaW5pdCgpOwo+ID4gPiArCj4gPiA+ICAgCURSTV9JTkZPKCJJbml0 aWFsaXplZCAlcyAlZC4lZC4lZCAlc1xuIiwKPiA+ID4gICAJCSBDT1JFX05BTUUsIENPUkVfTUFK T1IsIENPUkVfTUlOT1IsIENPUkVfUEFUQ0hMRVZFTCwgQ09SRV9EQVRFKTsKPiA+ID4gICAJcmV0 dXJuIDA7Cj4gPiA+IEBAIC04NzYsNiArODc4LDcgQEAgZXJyX3AxOgo+ID4gPiAgIHN0YXRpYyB2 b2lkIF9fZXhpdCBkcm1fY29yZV9leGl0KHZvaWQpCj4gPiA+ICAgewo+ID4gPiArCWRybV9wYW5p Y19leGl0KCk7Cj4gPiA+ICAgCWRlYnVnZnNfcmVtb3ZlKGRybV9kZWJ1Z2ZzX3Jvb3QpOwo+ID4g PiAgIAlkcm1fc3lzZnNfZGVzdHJveSgpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9pbnRlcm5hbC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4gPiA+ IGluZGV4IGI4NmRjOWIuLjc0NjNkOWQgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1faW50ZXJuYWwuaAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFs LmgKPiA+ID4gQEAgLTkwLDYgKzkwLDEwIEBAIGludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+ID4gICB2b2lkIGRybV9nZW1fb3Blbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4g PiA+ICAgdm9pZCBkcm1fZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ID4gPiArLyogZHJtX3BhbmljLmMgKi8KPiA+ID4g K3ZvaWQgZHJtX3BhbmljX2luaXQodm9pZCk7Cj4gPiA+ICt2b2lkIGRybV9wYW5pY19leGl0KHZv aWQpOwo+ID4gPiArCj4gPiA+ICAgLyogZHJtX2RlYnVnZnMuYyAqLwo+ID4gPiAgICNpZiBkZWZp bmVkKENPTkZJR19ERUJVR19GUykKPiA+ID4gICBpbnQgZHJtX2RlYnVnZnNfaW5pdChzdHJ1Y3Qg ZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9wYW5pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jCj4gPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAwMDAuLmUxODVjOWQKPiA+ID4g LS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMKPiA+ ID4gQEAgLTAsMCArMSw2MDYgQEAKPiA+ID4gKy8qCj4gPiA+ICsgKiBDb3B5cmlnaHQgMjAxNiBO b3JhbGYgVHLDuG5uZXMKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ID4gPiArICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKPiA+ID4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gPiA+ICsgKiAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxh c20vdW5hbGlnbmVkLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gKyNpbmNs dWRlIDxsaW51eC9jb25zb2xlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ ID4gPiArI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+ID4gPiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Cj4gPiA+ICsK PiA+ID4gK3N0cnVjdCBkcm1fcGFuaWNfZmIgewo+ID4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiOwo+ID4gPiArCXZvaWQgKnZtZW07Cj4gPiA+ICsJY29uc3Qgc3RydWN0IGZvbnRfZGVz YyAqZm9udDsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgY29sczsKPiA+ID4gKwl1bnNpZ25lZCBpbnQg cm93czsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgeHBvczsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgeXBv czsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgRFJNX1BBTklDX01BWF9GQlMJNjQK PiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3BhbmljX2ZiIGRybV9wYW5pY19mYnNbRFJNX1BBTklD X01BWF9GQlNdOwo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIERSTV9QQU5JQ19NQVhfS01TR1MJU1pf NEsKPiA+ID4gK3N0YXRpYyBjaGFyICpkcm1fcGFuaWNfa21zZ3M7Cj4gPiA+ICtzdGF0aWMgc2l6 ZV90IGRybV9wYW5pY19rbXNnc19wb3M7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBib29sIGRybV9w YW5pY19hY3RpdmU7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19sb2coY29u c3QgY2hhciAqZm10LCAuLi4pOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJt X3BhbmljX2RyYXdfcGl4ZWwodTggKmRzdCwgdTMyIHBpeGVsX2Zvcm1hdCwgYm9vbCB2YWwpCj4g PiA+ICt7Cj4gPiA+ICsJc3dpdGNoIChwaXhlbF9mb3JtYXQgJiB+RFJNX0ZPUk1BVF9CSUdfRU5E SUFOKSB7Cj4gPiA+ICsKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfQzg6Cj4gPiA+ICsJY2FzZSBE Uk1fRk9STUFUX1JHQjMzMjoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSMjMzOgo+ID4gPiAr CQkqZHN0ID0gdmFsID8gMHhmZiA6IDB4MDA7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I0NDQ0Ogo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdC NDQ0NDoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6Cj4gPiA+ICsJY2FzZSBEUk1f Rk9STUFUX0FCR1I0NDQ0Ogo+ID4gPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4MGZmZiA6IDB4 MDAwMCwgKHUxNiAqKWRzdCk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJY2FzZSBE Uk1fRk9STUFUX1JHQlg0NDQ0Ogo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNDQ0NDoKPiA+ ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDQ0NDQ6Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JH UkE0NDQ0Ogo+ID4gPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4ZmZmMCA6IDB4MDAwMCwgKHUx NiAqKWRzdCk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJY2FzZSBEUk1fRk9STUFU X1hSR0IxNTU1Ogo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKPiA+ID4gKwljYXNl IERSTV9GT1JNQVRfWEJHUjE1NTU6Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1Ogo+ ID4gPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4N2ZmZiA6IDB4MDAwMCwgKHUxNiAqKWRzdCk7 Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUx Ogo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKPiA+ID4gKwljYXNlIERSTV9GT1JN QVRfQkdSWDU1NTE6Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUkE1NTUxOgo+ID4gPiArCQlw dXRfdW5hbGlnbmVkKHZhbCA/IDB4ZmZmZSA6IDB4MDAwMCwgKHUxNiAqKWRzdCk7Cj4gPiA+ICsJ CWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiA+ID4gKwlj YXNlIERSTV9GT1JNQVRfQkdSNTY1Ogo+ID4gPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4ZmZm ZiA6IDB4MDAwMCwgKHUxNiAqKWRzdCk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSODg4Ogo+ ID4gPiArCQlkc3RbMF0gPSB2YWwgPyAweGZmIDogMHgwMDsKPiA+ID4gKwkJZHN0WzFdID0gdmFs ID8gMHhmZiA6IDB4MDA7Cj4gPiA+ICsJCWRzdFsyXSA9IHZhbCA/IDB4ZmYgOiAweDAwOwo+ID4g PiArCQlicmVhazsKPiA+ID4gKwo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiA+ ID4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hC R1I4ODg4Ogo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiA+ID4gKwkJcHV0X3Vu YWxpZ25lZCh2YWwgPyAweDAwZmZmZmZmIDogMHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7Cj4gPiA+ ICsJCWJyZWFrOwo+ID4gPiArCj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4Ogo+ID4g PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdS WDg4ODg6Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ID4gPiArCQlwdXRfdW5h bGlnbmVkKHZhbCA/IDB4ZmZmZmZmMDAgOiAweDAwMDAwMDAwLCAodTMyICopZHN0KTsKPiA+ID4g KwkJYnJlYWs7Cj4gPiA+ICsKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Cj4g PiA+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgo+ID4gPiArCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMjEwMTAxMDoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Cj4gPiA+ ICsJCXB1dF91bmFsaWduZWQodmFsID8gMHgzZmZmZmZmZiA6IDB4MDAwMDAwMDAsICh1MzIgKilk c3QpOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKwo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JY MTAxMDEwMjoKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Cj4gPiA+ICsJY2Fz ZSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOgo+ID4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAx MDEwMjoKPiA+ID4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZmZmZmZmZjIDogMHgwMDAwMDAw MCwgKHUzMiAqKWRzdCk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCX0KPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX3JlbmRlcihzdHJ1Y3QgZHJtX3BhbmljX2Zi ICpwZmIsCj4gPiA+ICsJCQkgICAgIGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBsZW4p Cj4gPiA+ICt7Cj4gPiA+ICsJY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZm9udCA9IHBmYi0+Zm9u dDsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgcGl4X2RlcHRoLCBwaXhfYnBwLCBjcHA7Cj4gPiA+ICsJ dW5zaWduZWQgaW50IGNvbCA9IHBmYi0+eHBvczsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgcm93ID0g cGZiLT55cG9zOwo+ID4gPiArCXVuc2lnbmVkIGludCBpLCBoLCB3Owo+ID4gPiArCXZvaWQgKmRz dCwgKnBvczsKPiA+ID4gKwl1OCBmb250bGluZTsKPiA+ID4gKwo+ID4gPiArCWlmICgocm93ICsg MSkgKiBmb250LT5oZWlnaHQgPiBwZmItPmZiLT5oZWlnaHQpCj4gPiA+ICsJCXJldHVybjsKPiA+ ID4gKwo+ID4gPiArCWlmICgoY29sICsgbGVuKSAqIGZvbnQtPndpZHRoID4gcGZiLT5mYi0+d2lk dGgpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCWRybV9mYl9nZXRfYnBwX2RlcHRo KHBmYi0+ZmItPnBpeGVsX2Zvcm1hdCwgJnBpeF9kZXB0aCwgJnBpeF9icHApOwo+ID4gPiArCWNw cCA9IERJVl9ST1VORF9VUChwaXhfYnBwLCA4KTsKPiA+ID4gKwo+ID4gPiArCS8qIFRPRE86IHNo b3VsZCBmYi0+b2Zmc2V0c1swXSBiZSBhZGRlZCBoZXJlPyAqLwo+ID4gPiArCWRzdCA9IHBmYi0+ dm1lbSArIChyb3cgKiBmb250LT5oZWlnaHQgKiBwZmItPmZiLT5waXRjaGVzWzBdKSArCj4gPiA+ ICsJICAgICAgKGNvbCAqIGZvbnQtPndpZHRoICogY3BwKTsKPiA+ID4gKwo+ID4gPiArCWZvciAo aCA9IDA7IGggPCBmb250LT5oZWlnaHQ7IGgrKykgewo+ID4gPiArCQlwb3MgPSBkc3Q7Cj4gPiA+ ICsKPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gPiA+ICsJCQlmb250bGlu ZSA9ICoodTggKikoZm9udC0+ZGF0YSArIHRleHRbaV0gKiBmb250LT5oZWlnaHQgKyBoKTsKPiA+ ID4gKwo+ID4gPiArCQkJZm9yICh3ID0gMDsgdyA8IGZvbnQtPndpZHRoOyB3KyspIHsKPiA+ID4g KwkJCQlkcm1fcGFuaWNfZHJhd19waXhlbChwb3MsIHBmYi0+ZmItPnBpeGVsX2Zvcm1hdCwKPiA+ ID4gKwkJCQkJCSAgICAgZm9udGxpbmUgJiBCSVQoNyAtIHcpKTsKPiA+ID4gKwkJCQlwb3MgKz0g Y3BwOwo+ID4gPiArCQkJfQo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJZHN0ICs9IHBmYi0+ ZmItPnBpdGNoZXNbMF07Cj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg dm9pZCBkcm1fcGFuaWNfc2Nyb2xsX3VwKHN0cnVjdCBkcm1fcGFuaWNfZmIgKnBmYikKPiA+ID4g K3sKPiA+ID4gKwl2b2lkICpzcmMgPSBwZmItPnZtZW0gKyAocGZiLT5mb250LT5oZWlnaHQgKiBw ZmItPmZiLT5waXRjaGVzWzBdKTsKPiA+ID4gKwlzaXplX3QgbGVuID0gKHBmYi0+ZmItPmhlaWdo dCAtIHBmYi0+Zm9udC0+aGVpZ2h0KSAqCj4gPiA+ICsJCSAgICAgcGZiLT5mYi0+cGl0Y2hlc1sw XTsKPiA+ID4gKwo+ID4gPiArCWRybV9wYW5pY19sb2coIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gPiA+ ICsKPiA+ID4gKwltZW1tb3ZlKHBmYi0+dm1lbSwgc3JjLCBsZW4pOwo+ID4gPiArCW1lbXNldChw ZmItPnZtZW0gKyBsZW4sIDAsIHBmYi0+Zm9udC0+aGVpZ2h0ICogcGZiLT5mYi0+cGl0Y2hlc1sw XSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19jbGVhcl9z Y3JlZW4oc3RydWN0IGRybV9wYW5pY19mYiAqcGZiKQo+ID4gPiArewo+ID4gPiArCW1lbXNldChw ZmItPnZtZW0sIDAsIHBmYi0+ZmItPmhlaWdodCAqIHBmYi0+ZmItPnBpdGNoZXNbMF0pOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nX21zZyhjaGFyICpw cmUsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikKPiA+ID4gK3sKPiA+ID4gKwlj aGFyIGJ1Zls1MTJdOwo+ID4gPiArCj4gPiA+ICsJaWYgKGxlbiA+IDUxMCkKPiA+ID4gKwkJbGVu ID0gNTEwOwo+ID4gPiArCj4gPiA+ICsJbWVtY3B5KGJ1Ziwgc3RyLCBsZW4pOwo+ID4gPiArCWJ1 ZltsZW5dID0gJ1xuJzsKPiA+ID4gKwlidWZbbGVuICsgMV0gPSAnXDAnOwo+ID4gPiArCj4gPiA+ ICsJZHJtX3BhbmljX2xvZygiJXMlcyIsIHByZSwgYnVmKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArc3RhdGljIHZvaWQgZHJtX3BhbmljX3B1dGNzX25vX2xmKHN0cnVjdCBkcm1fcGFuaWNfZmIg KnBmYiwKPiA+ID4gKwkJCQkgIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikKPiA+ ID4gK3sKPiA+ID4gKwlkcm1fcGFuaWNfbG9nKCIlcyhsZW49JXUpIHg9JXUsIHk9JXVcbiIsIF9f ZnVuY19fLCBsZW4sCj4gPiA+ICsJCQlwZmItPnhwb3MsIHBmYi0+eXBvcyk7Cj4gPiA+ICsKPiA+ ID4gKwlpZiAobGVuIDw9IDApCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCWRybV9w YW5pY19sb2dfbXNnKCIiLCBzdHIsIGxlbik7Cj4gPiA+ICsKPiA+ID4gKwlkcm1fcGFuaWNfcmVu ZGVyKHBmYiwgc3RyLCBsZW4pOwo+ID4gPiArCj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyB2b2lkIGRybV9wYW5pY19wdXRjcyhzdHJ1Y3QgZHJtX3BhbmljX2ZiICpwZmIsCj4gPiA+ICsJ CQkgICAgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbnVtKQo+ID4gPiArewo+ID4gPiAr CXVuc2lnbmVkIGludCBzbGVuOwo+ID4gPiArCWludCBsZW4gPSBudW07Cj4gPiA+ICsJY2hhciAq bGY7Cj4gPiA+ICsKPiA+ID4gKwlkcm1fcGFuaWNfbG9nKCIlcyhudW09JXUpXG4iLCBfX2Z1bmNf XywgbnVtKTsKPiA+ID4gKwo+ID4gPiArCXdoaWxlIChsZW4gPiAwKSB7Cj4gPiA+ICsKPiA+ID4g KwkJaWYgKHBmYi0+eXBvcyA9PSBwZmItPnJvd3MpIHsKPiA+ID4gKwkJCXBmYi0+eXBvcy0tOwo+ ID4gPiArCQkJZHJtX3BhbmljX3Njcm9sbF91cChwZmIpOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ ID4gKwkJbGYgPSBzdHJwYnJrKHN0ciwgIlxuIik7Cj4gPiA+ICsJCWlmIChsZikKPiA+ID4gKwkJ CXNsZW4gPSBsZiAtIHN0cjsKPiA+ID4gKwkJZWxzZQo+ID4gPiArCQkJc2xlbiA9IGxlbjsKPiA+ ID4gKwo+ID4gPiArCQlpZiAocGZiLT54cG9zICsgc2xlbiA+IHBmYi0+Y29scykKPiA+ID4gKwkJ CXNsZW4gPSBwZmItPmNvbHMgLSBwZmItPnhwb3M7Cj4gPiA+ICsKPiA+ID4gKwkJZHJtX3Bhbmlj X3B1dGNzX25vX2xmKHBmYiwgc3RyLCBzbGVuKTsKPiA+ID4gKwo+ID4gPiArCQlsZW4gLT0gc2xl bjsKPiA+ID4gKwkJc3RyICs9IHNsZW47Cj4gPiA+ICsJCXBmYi0+eHBvcyArPSBzbGVuOwo+ID4g PiArCj4gPiA+ICsJCWlmIChsZikgewo+ID4gPiArCQkJc3RyKys7Cj4gPiA+ICsJCQlsZW4tLTsK PiA+ID4gKwkJCXBmYi0+eHBvcyA9IDA7Cj4gPiA+ICsJCQlwZmItPnlwb3MrKzsKPiA+ID4gKwkJ fQo+ID4gPiArCX0KPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZHJtX3Bhbmlj X3dyaXRlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IG51bSkKPiA+ID4gK3sKPiA+ID4g Kwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWlmICghbnVtKQo+ID4gPiArCQlyZXR1 cm47Cj4gPiA+ICsKPiA+ID4gKwlkcm1fcGFuaWNfbG9nKCIlcyhudW09JXUpXG4iLCBfX2Z1bmNf XywgbnVtKTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBEUk1fUEFOSUNfTUFYX0ZC UzsgaSsrKSB7Cj4gPiA+ICsJCWlmICghZHJtX3BhbmljX2Zic1tpXS5mYikKPiA+ID4gKwkJCWJy ZWFrOwo+ID4gPiArCQlkcm1fcGFuaWNfcHV0Y3MoJmRybV9wYW5pY19mYnNbaV0sIHN0ciwgbnVt KTsKPiA+ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qIHRoaXMgb25lIGlzIHNlcmlh bGl6ZWQgYnkgY29uc29sZV9sb2NrKCkgKi8KPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19j b25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sCj4gPiA+ICsJCQkJICAgIGNvbnN0IGNo YXIgKnN0ciwgdW5zaWduZWQgaW50IG51bSkKPiA+ID4gK3sKPiA+ID4gKwl1bnNpZ25lZCBpbnQg aTsKPiA+ID4gKwo+ID4gPiArCWRybV9wYW5pY19sb2dfbXNnKCItPiIsIHN0ciwgbnVtKTsKPiA+ ID4gKwo+ID4gPiArCS8qIEJ1ZmZlciB1cCBtZXNzYWdlcyB0byBiZSByZXBsYXllZCBvbiBwYW5p YyAqLwo+ID4gPiArCWlmICghZHJtX3BhbmljX2FjdGl2ZSkgewo+ID4gPiArCQlmb3IgKGkgPSAw OyBpIDwgbnVtOyBpKyspIHsKPiA+ID4gKwkJCWRybV9wYW5pY19rbXNnc1tkcm1fcGFuaWNfa21z Z3NfcG9zKytdID0gKnN0cisrOwo+ID4gPiArCQkJaWYgKGRybV9wYW5pY19rbXNnc19wb3MgPT0g RFJNX1BBTklDX01BWF9LTVNHUykKPiA+ID4gKwkJCQlkcm1fcGFuaWNfa21zZ3NfcG9zID0gMDsK PiA+ID4gKwkJfQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZHJt X3BhbmljX3dyaXRlKHN0ciwgbnVtKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0 cnVjdCBjb25zb2xlIGRybV9wYW5pY19jb25zb2xlID0gewo+ID4gPiArCS5uYW1lID0gICAgICAg ICAiZHJtcGFuaWMiLAo+ID4gPiArCS53cml0ZSA9ICAgICAgICBkcm1fcGFuaWNfY29uc29sZV93 cml0ZSwKPiA+ID4gKwkuZmxhZ3MgPSAgICAgICAgQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0VOQUJM RUQsCj4gPiA+ICsJLmluZGV4ID0gICAgICAgIDAsCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICsv Kgo+ID4gPiArICogVGhlIHBhbmljKCkgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IG9ubHkgb25l IENQVSBpcyBhbGxvd2VkIHRvIHJ1biBpdCdzCj4gPiA+ICsgKiBjb2RlLiBTbyB3aGVuIHRoaXMg aGFuZGxlciBpcyBjYWxsZWQsIHdlJ3JlIGFsb25lLiBObyByYWNpbmcgd2l0aAo+ID4gPiArICog Y29uc29sZS53cml0ZSgpIGlzIHBvc3NpYmxlLgo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMgaW50 IGRybV9wYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQg bG9uZyBldiwKPiA+ID4gKwkJCSAgICAgdm9pZCAqcHRyKQo+ID4gPiArewo+ID4gPiArCWNvbnN0 IHN0cnVjdCBmb250X2Rlc2MgKmZvbnQ7Cj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmI7Cj4gPiA+ICsJc3RydWN0IGRybV9wYW5pY19mYiAqcGZiOwo+ID4gPiArCXN0cnVjdCBkcm1f bWlub3IgKm1pbm9yOwo+ID4gPiArCXVuc2lnbmVkIGludCBmYnMgPSAwOwo+ID4gPiArCXZvaWQg KnZtZW07Cj4gPiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlkcm1fcGFuaWNfbG9nKCIlc1xu IiwgX19mdW5jX18pOwo+ID4gPiArCj4gPiA+ICsJZHJtX3BhbmljX2FjdGl2ZSA9IHRydWU7Cj4g PiA+ICsKPiA+ID4gKwlkcm1fbWlub3JfZm9yX2VhY2gobWlub3IsIERSTV9NSU5PUl9MRUdBQ1ks IGkpIHsKPiA+ID4gKwkJZHJtX3BhbmljX2xvZygiRm91bmQgbWlub3I9JWRcbiIsIG1pbm9yLT5p bmRleCk7Cj4gPiA+ICsJCWlmICghbWlub3ItPmRldiB8fCAhbWlub3ItPmRldi0+ZHJpdmVyIHx8 Cj4gPiA+ICsJCSAgICAhbWlub3ItPmRldi0+ZHJpdmVyLT5wYW5pYykgewo+ID4gPiArCQkJZHJt X3BhbmljX2xvZygiU2tpcHBpbmc6IE5vIHBhbmljIGhhbmRsZXJcbiIpOwo+ID4gPiArCQkJY29u dGludWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlmYiA9IG1pbm9yLT5kZXYtPmRyaXZl ci0+cGFuaWMobWlub3ItPmRldiwgJnZtZW0pOwo+ID4gPiArCQlpZiAoIWZiKSB7Cj4gPiA+ICsJ CQlkcm1fcGFuaWNfbG9nKCJTa2lwcGluZzogRHJpdmVyIHJldHVybmVkIE5VTExcbiIpOwo+ID4g PiArCQkJY29udGludWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlpZiAoIWZiIHx8ICF2 bWVtIHx8IGZiLT5kZXYgIT0gbWlub3ItPmRldiB8fCAhZmItPnBpdGNoZXNbMF0pIHsKPiA+ID4g KwkJCWRybV9wYW5pY19sb2coIlNraXBwaW5nOiBGYWlsZWQgY2hlY2tcbiIpOwo+ID4gPiArCQkJ Y29udGludWU7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQkvKiBvbmx5IDgtYml0IHdpZGUg Zm9udHMgYXJlIHN1cHBvcnRlZCAqLwo+ID4gPiArCQlmb250ID0gZ2V0X2RlZmF1bHRfZm9udChm Yi0+d2lkdGgsIGZiLT5oZWlnaHQsIEJJVCg3KSwgLTEpOwo+ID4gPiArCQlpZiAoIWZvbnQpIHsK PiA+ID4gKwkJCWRybV9wYW5pY19sb2coIlNraXBwaW5nOiBObyBmb250IGF2YWlsYWJsZVxuIik7 Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ICsJCXBmYiA9ICZk cm1fcGFuaWNfZmJzW2ZicysrXTsKPiA+ID4gKwo+ID4gPiArCQlwZmItPmZiID0gZmI7Cj4gPiA+ ICsJCXBmYi0+dm1lbSA9IHZtZW07Cj4gPiA+ICsJCXBmYi0+Zm9udCA9IGZvbnQ7Cj4gPiA+ICsJ CXBmYi0+Y29scyA9IGZiLT53aWR0aCAvIGZvbnQtPndpZHRoOwo+ID4gPiArCQlwZmItPnJvd3Mg PSBmYi0+aGVpZ2h0IC8gZm9udC0+aGVpZ2h0Owo+ID4gPiArCj4gPiA+ICsJCWRybV9wYW5pY19j bGVhcl9zY3JlZW4ocGZiKTsKPiA+ID4gKwo+ID4gPiArCQlkcm1fcGFuaWNfbG9nKCIgICAgJXV4 JXUgLT4gJXV4JXUsICVzLCAlc1xuIiwgZmItPndpZHRoLAo+ID4gPiArCQkJCWZiLT5oZWlnaHQs IHBmYi0+Y29scywgcGZiLT5yb3dzLCBmb250LT5uYW1lLAo+ID4gPiArCQkJCWRybV9nZXRfZm9y bWF0X25hbWUoZmItPnBpeGVsX2Zvcm1hdCkpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlm IChkcm1fcGFuaWNfa21zZ3NbMF0pIHsKPiA+ID4gKwkJLyogc2FmZWd1YXJkIGluIGNhc2Ugd2Ug aW50ZXJydXB0ZWQgZHJtX3BhbmljX2NvbnNvbGVfd3JpdGUgKi8KPiA+ID4gKwkJaWYgKGRybV9w YW5pY19rbXNnc19wb3MgPj0gRFJNX1BBTklDX01BWF9LTVNHUykKPiA+ID4gKwkJCWRybV9wYW5p Y19rbXNnc19wb3MgPSAwOwo+ID4gPiArCj4gPiA+ICsJCWRybV9wYW5pY193cml0ZSgmZHJtX3Bh bmljX2ttc2dzW2RybV9wYW5pY19rbXNnc19wb3NdLAo+ID4gPiArCQkJCURSTV9QQU5JQ19NQVhf S01TR1MgLSBkcm1fcGFuaWNfa21zZ3NfcG9zKTsKPiA+ID4gKwkJZHJtX3BhbmljX3dyaXRlKGRy bV9wYW5pY19rbXNncywgZHJtX3BhbmljX2ttc2dzX3Bvcyk7Cj4gPiA+ICsJfQo+ID4gPiArCj4g PiA+ICsJcmV0dXJuIE5PVElGWV9ET05FOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg c3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRybV9wYW5pY19ibG9jayA9IHsKPiA+ID4gKwkubm90aWZp ZXJfY2FsbCA9IGRybV9wYW5pY19oYW5kbGVyLAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArCj4g PiA+ICsKPiA+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ID4gKwo+ID4gPiArLyogT3V0 IG9mIGJhbmQgbG9nZ2luZyBpcyB1c2VmdWwgYXQgbGVhc3QgaW4gdGhlIGluaXRpYWwgZGV2ZWxv cG1lbnQgcGhhc2UgKi8KPiA+ID4gKyNkZWZpbmUgRFJNX1BBTklDX0xPR19TSVpFCVNaXzY0Swo+ ID4gPiArI2RlZmluZSBEUk1fUEFOSUNfTE9HX0xJTkUJMTI4Cj4gPiA+ICsjZGVmaW5lIERSTV9Q QU5JQ19MT0dfRU5UUklFUwkoRFJNX1BBTklDX0xPR19TSVpFIC8gRFJNX1BBTklDX0xPR19MSU5F KQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY2hhciAqbG9nX2J1ZjsKPiA+ID4gK3N0YXRpYyBzaXpl X3QgbG9nX3BvczsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkcm1fcGFuaWNfbG9nZnNf cm9vdDsKPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZyhjb25zdCBjaGFy ICpmbXQsIC4uLikKPiA+ID4gK3sKPiA+ID4gKwl2YV9saXN0IGFyZ3M7Cj4gPiA+ICsJdTMyIHJl bV9uc2VjOwo+ID4gPiArCWNoYXIgKnRleHQ7Cj4gPiA+ICsJc2l6ZV90IGxlbjsKPiA+ID4gKwl1 NjQgc2VjOwo+ID4gPiArCj4gPiA+ICsJaWYgKCFsb2dfYnVmIHx8IG9vcHNfaW5fcHJvZ3Jlc3Mp Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Cj4g PiA+ICsKPiA+ID4gKwlpZiAobG9nX3BvcyA+PSBEUk1fUEFOSUNfTE9HX0VOVFJJRVMpCj4gPiA+ ICsJCWxvZ19wb3MgPSAwOwo+ID4gPiArCj4gPiA+ICsJdGV4dCA9IGxvZ19idWYgKyAobG9nX3Bv cysrICogRFJNX1BBTklDX0xPR19MSU5FKTsKPiA+ID4gKwlpZiAobG9nX3BvcyA9PSBEUk1fUEFO SUNfTE9HX0VOVFJJRVMpCj4gPiA+ICsJCWxvZ19wb3MgPSAwOwo+ID4gPiArCj4gPiA+ICsJc2Vj ID0gZGl2X3U2NF9yZW0obG9jYWxfY2xvY2soKSwgMTAwMDAwMDAwMCwgJnJlbV9uc2VjKTsKPiA+ ID4gKwo+ID4gPiArCWxlbiA9IHNjbnByaW50Zih0ZXh0LCBEUk1fUEFOSUNfTE9HX0xJTkUsICJb JTVsbHUuJTA2dV0gIiwgc2VjLAo+ID4gPiArCQkJcmVtX25zZWMgLyAxMDAwKTsKPiA+ID4gKwo+ ID4gPiArCXZzY25wcmludGYodGV4dCArIGxlbiwgRFJNX1BBTklDX0xPR19MSU5FIC0gbGVuLCBm bXQsIGFyZ3MpOwo+ID4gPiArCj4gPiA+ICsJLyogTWFrZSBzdXJlIHRvIGFsd2F5cyBoYXZlIGEg bmV3bGluZSBpbiBjYXNlIG9mIG92ZXJmbG93ICovCj4gPiA+ICsJaWYgKHRleHRbRFJNX1BBTklD X0xPR19MSU5FIC0gMl0gIT0gJ1wwJykKPiA+ID4gKwkJdGV4dFtEUk1fUEFOSUNfTE9HX0xJTkUg LSAyXSA9ICdcbic7Cj4gPiA+ICsKPiA+ID4gKwl2YV9lbmQoYXJncyk7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3N0YXRpYyBpbnQgZHJtX3BhbmljX2xvZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqdikKPiA+ID4gK3sKPiA+ID4gKwlzaXplX3QgcG9zID0gbG9nX3BvczsKPiA+ID4g Kwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gKwljaGFyICp0ZXh0Owo+ID4gPiArCj4gPiA+ICsJZm9y IChpID0gMDsgaSA8IERSTV9QQU5JQ19MT0dfRU5UUklFUzsgaSsrKSB7Cj4gPiA+ICsJCXRleHQg PSBsb2dfYnVmICsgKHBvcysrICogRFJNX1BBTklDX0xPR19MSU5FKTsKPiA+ID4gKwkJaWYgKHBv cyA9PSBEUk1fUEFOSUNfTE9HX0VOVFJJRVMpCj4gPiA+ICsJCQlwb3MgPSAwOwo+ID4gPiArCQlp ZiAoKnRleHQgPT0gJ1wwJykKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCQlzZXFfcHV0cyht LCB0ZXh0KTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIGludCBkcm1fcGFuaWNfbG9nX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gPiA+ICt7Cj4gPiA+ICsJcmV0dXJuIHNpbmdsZV9v cGVuKGZpbGUsIGRybV9wYW5pY19sb2dfc2hvdywgTlVMTCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9wYW5pY19sb2dfb3Bz ID0gewo+ID4gPiArCS5vd25lciAgID0gVEhJU19NT0RVTEUsCj4gPiA+ICsJLm9wZW4gICAgPSBk cm1fcGFuaWNfbG9nX29wZW4sCj4gPiA+ICsJLnJlYWQgICAgPSBzZXFfcmVhZCwKPiA+ID4gKwku bGxzZWVrICA9IHNlcV9sc2VlaywKPiA+ID4gKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAo+ ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArLyoKPiA+ID4gKyAqIEZha2Uvc2ltdWxhdGUgcGFuaWMo KSBhdCBkaWZmZXJlbnQgbGV2ZWxzOgo+ID4gPiArICogMTogb25seSB0cmlnZ2VyIHBhbmljIGhh bmRsaW5nIGludGVybmFsbHkKPiA+ID4gKyAqIDI6IGFkZCBsb2NhbF9pcnFfZGlzYWJsZSgpCj4g PiA+ICsgKiAzOiBhZGQgYnVzdF9zcGlubG9ja3MoKTsKPiA+ID4gKyAqIDEwMDogZG9uJ3QgZmFr ZSBpdCwgZG8gY2FsbCBwYW5pYygpCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyBpbnQgZHJtX3Rl eHRfZmFrZV9wYW5pYyh1bnNpZ25lZCBpbnQgbGV2ZWwpCj4gPiA+ICt7Cj4gPiA+ICsjaWZuZGVm IE1PRFVMRQo+ID4gPiArCWludCBvbGRfbG9nbGV2ZWwgPSBjb25zb2xlX2xvZ2xldmVsOwo+ID4g PiArI2VuZGlmCj4gPiA+ICsKPiA+ID4gKwlpZiAoIWxldmVsICYmIGxldmVsICE9IDEwMCAmJiBs ZXZlbCA+IDMpCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJaWYgKGxl dmVsID09IDEwMCkKPiA+ID4gKwkJcGFuaWMoIlRFU1RJTkciKTsKPiA+ID4gKwo+ID4gPiArCWlm IChsZXZlbCA+IDEpCj4gPiA+ICsJCWxvY2FsX2lycV9kaXNhYmxlKCk7Cj4gPiA+ICsKPiA+ID4g KyNpZm5kZWYgTU9EVUxFCj4gPiA+ICsJY29uc29sZV92ZXJib3NlKCk7Cj4gPiA+ICsjZW5kaWYK PiA+ID4gKwlpZiAobGV2ZWwgPiAyKQo+ID4gPiArCQlidXN0X3NwaW5sb2NrcygxKTsKPiA+ID4g Kwo+ID4gPiArCXByX2VtZXJnKCJLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogRkFLSU5HPSV1 LCBvb3BzX2luX3Byb2dyZXNzPSVkXG4iLAo+ID4gPiArCQkgbGV2ZWwsIG9vcHNfaW5fcHJvZ3Jl c3MpOwo+ID4gPiArCj4gPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKPiA+ID4g KwlkdW1wX3N0YWNrKCk7Cj4gPiA+ICsjZW5kaWYKPiA+ID4gKwkvKiBzaW11bGF0ZSBjYWxsaW5n IHBhbmljX25vdGlmaWVyX2xpc3QgKi8KPiA+ID4gKwlkcm1fcGFuaWNfaGFuZGxlcihOVUxMLCAw LCBOVUxMKTsKPiA+ID4gKwo+ID4gPiArCWlmIChsZXZlbCA+IDIpCj4gPiA+ICsJCWJ1c3Rfc3Bp bmxvY2tzKDApOwo+ID4gPiArCj4gPiA+ICsjaWZuZGVmIE1PRFVMRQo+ID4gPiArCWNvbnNvbGVf Zmx1c2hfb25fcGFuaWMoKTsKPiA+ID4gKyNlbmRpZgo+ID4gPiArCXByX2VtZXJnKCItLS1bIGVu ZCBLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogRkFLSU5HXG4iKTsKPiA+ID4gKwo+ID4gPiAr CWlmIChsZXZlbCA+IDEpCj4gPiA+ICsJCWxvY2FsX2lycV9lbmFibGUoKTsKPiA+ID4gKwo+ID4g PiArI2lmbmRlZiBNT0RVTEUKPiA+ID4gKwljb25zb2xlX2xvZ2xldmVsID0gb2xkX2xvZ2xldmVs Owo+ID4gPiArI2VuZGlmCj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIHNzaXplX3QgZHJtX3RleHRfcGFuaWNfd3JpdGUoc3RydWN0IGZpbGUg KmZpbGUsCj4gPiA+ICsJCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKPiA+ID4g KwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4gPiA+ICt7Cj4gPiA+ICsJdW5z aWduZWQgbG9uZyBsb25nIHZhbDsKPiA+ID4gKwlzc2l6ZV90IHJldCA9IDA7Cj4gPiA+ICsJY2hh ciBidWZbMjRdOwo+ID4gPiArCXNpemVfdCBzaXplOwo+ID4gPiArCj4gPiA+ICsJc2l6ZSA9IG1p bihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKPiA+ID4gKwlpZiAoY29weV9mcm9tX3VzZXIoYnVm LCB1c2VyX2J1Ziwgc2l6ZSkpCj4gPiA+ICsJCXJldHVybiAtRUZBVUxUOwo+ID4gPiArCj4gPiA+ ICsJYnVmW3NpemVdID0gJ1wwJzsKPiA+ID4gKwlyZXQgPSBrc3RydG91bGwoYnVmLCAwLCAmdmFs KTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ICsJ cmV0ID0gZHJtX3RleHRfZmFrZV9wYW5pYyh2YWwpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJl dCA8IDAgPyByZXQgOiBjb3VudDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJtX3RleHRfcGFuaWNfb3BzID0gewo+ID4gPiArCS53 cml0ZSA9ICAgICAgICBkcm1fdGV4dF9wYW5pY193cml0ZSwKPiA+ID4gKwkub3BlbiA9ICAgICAg ICAgc2ltcGxlX29wZW4sCj4gPiA+ICsJLmxsc2VlayA9ICAgICAgIGRlZmF1bHRfbGxzZWVrLAo+ ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBkcm1fcGFuaWNfbG9nZnNfaW5pdCh2 b2lkKQo+ID4gPiArewo+ID4gPiArCWRybV9wYW5pY19sb2dmc19yb290ID0gZGVidWdmc19jcmVh dGVfZGlyKCJkcm0tcGFuaWMiLCBOVUxMKTsKPiA+ID4gKwlpZiAoIWRybV9wYW5pY19sb2dmc19y b290KQo+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gKwo+ID4gPiArCWlmICghZGVidWdm c19jcmVhdGVfZmlsZSgibG9nIiwgU19JUlVHTywgZHJtX3BhbmljX2xvZ2ZzX3Jvb3QsIE5VTEws Cj4gPiA+ICsJCQkgICAgJmRybV9wYW5pY19sb2dfb3BzKSkKPiA+ID4gKwkJZ290byBlcnJfcmVt b3ZlOwo+ID4gPiArCj4gPiA+ICsJbG9nX2J1ZiA9IGt6YWxsb2MoRFJNX1BBTklDX0xPR19TSVpF LCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIWxvZ19idWYpCj4gPiA+ICsJCWdvdG8gZXJyX3Jl bW92ZTsKPiA+ID4gKwo+ID4gPiArCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBhbmljIiwgU19JV1VT UiwgZHJtX3BhbmljX2xvZ2ZzX3Jvb3QsIE5VTEwsCj4gPiA+ICsJCQkgICAgJmRybV90ZXh0X3Bh bmljX29wcyk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArZXJyX3Jl bW92ZToKPiA+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZHJtX3BhbmljX2xvZ2ZzX3Jv b3QpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19sb2dmc19leGl0KHZvaWQpCj4gPiA+ICt7Cj4gPiA+ ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRybV9wYW5pY19sb2dmc19yb290KTsKPiA+ID4g KwlrZnJlZShsb2dfYnVmKTsKPiA+ID4gKwlsb2dfYnVmID0gTlVMTDsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArI2Vsc2UKPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBkcm1fcGFuaWNfbG9nZnNf aW5pdCh2b2lkKQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBk cm1fcGFuaWNfbG9nZnNfZXhpdCh2b2lkKQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQo+ID4gPiAr ewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsjZW5kaWYKPiA+ID4gKwo+ID4gPiArCj4gPiA+ICt2 b2lkIF9faW5pdCBkcm1fcGFuaWNfaW5pdCh2b2lkKQo+ID4gPiArewo+ID4gPiArCWRybV9wYW5p Y19rbXNncyA9IGt6YWxsb2MoRFJNX1BBTklDX01BWF9LTVNHUywgR0ZQX0tFUk5FTCk7Cj4gPiA+ ICsJaWYgKCFkcm1fcGFuaWNfa21zZ3MpIHsKPiA+ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g c2V0dXAgcGFuaWMgaGFuZGxlclxuIik7Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlkcm1fcGFuaWNfbG9nZnNfaW5pdCgpOwo+ID4gPiArZHJtX3BhbmljX2xvZygi JXNcbiIsIF9fZnVuY19fKTsKPiA+ID4gKwlyZWdpc3Rlcl9jb25zb2xlKCZkcm1fcGFuaWNfY29u c29sZSk7Cj4gPiA+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3Rp Zmllcl9saXN0LAo+ID4gPiArCQkJCSAgICAgICAmZHJtX3BhbmljX2Jsb2NrKTsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiArdm9pZCBfX2V4aXQgZHJtX3BhbmljX2V4aXQodm9pZCkKPiA+ID4gK3sK PiA+ID4gKwlpZiAoIWRybV9wYW5pY19rbXNncykKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCj4g PiA+ICsJZHJtX3BhbmljX2xvZ2ZzX2V4aXQoKTsKPiA+ID4gKwlhdG9taWNfbm90aWZpZXJfY2hh aW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiA+ID4gKwkJCQkJICZkcm1fcGFu aWNfYmxvY2spOwo+ID4gPiArCXVucmVnaXN0ZXJfY29uc29sZSgmZHJtX3BhbmljX2NvbnNvbGUp Owo+ID4gPiArCWtmcmVlKGRybV9wYW5pY19rbXNncyk7Cj4gPiA+ICt9Cj4gPiA+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKPiA+ID4gaW5kZXgg YmM3MDA2ZS4uNGU4NDY1NCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCj4g PiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybVAuaAo+ID4gPiBAQCAtNTUwLDYgKzU1MCwyOCBAQCBz dHJ1Y3QgZHJtX2RyaXZlciB7Cj4gPiA+ICAgCQkJICBib29sIGZyb21fb3Blbik7Cj4gPiA+ICAg CXZvaWQgKCptYXN0ZXJfZHJvcCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpOwo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEBwYW5pYzoKPiA+ID4gKwkg Kgo+ID4gPiArCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHBhbmljKCkgYXNraW5nIGZv ciBhIGZyYW1lYnVmZmVyIHRvCj4gPiA+ICsJICogZGlzcGxheSB0aGUgcGFuaWMgbWVzc2FnZXMg b24uIEl0IGFsc28gbmVlZHMgdGhlIHZpcnR1YWwgYWRkcmVzcwo+ID4gPiArCSAqIG9mIHRoZSBi YWNraW5nIGJ1ZmZlci4KPiA+ID4gKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLgo+ID4g PiArCSAqCj4gPiA+ICsJICogTk9URToKPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkIGluIGFuIGF0b21pYyBub3RpZmllciBjaGFpbiBhbmQgaXQgY2Fubm90Cj4g PiA+ICsJICogc2xlZXAuIENhcmUgbXVzdCBiZSB0YWtlbiBzbyB0aGUgbWFjaGluZSBpcyBub3Qg a2lsbGVkIGV2ZW4gaGFyZGVyLAo+ID4gPiArCSAqIHByZXZlbnRpbmcgb3V0cHV0IGZyb20gZ29p bmcgb3V0IG9uIHNlcmlhbC9uZXRjb25zb2xlLgo+ID4gPiArCSAqCj4gPiA+ICsJICogUkVUVVJO UzoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIEZyYW1lYnVmZmVyIHRoYXQgc2hvdWxkIGJlIHVzZWQg dG8gZGlzcGxheSB0aGUgcGFuaWMgbWVzc2FnZXMsCj4gPiA+ICsJICogYWxvbmdzaWRlIHRoZSB2 aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhY2tpbmcgYnVmZmVyLCBvciBOVUxMIGlmCj4gPiA+ICsJ ICogdGhlIGRyaXZlciBpcyB1bmFibGUgdG8gcHJvdmlkZSB0aGlzLgo+ID4gPiArCSAqLwo+ID4g PiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKigqcGFuaWMpKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKip2bWVtKTsKPiA+ID4gKwo+ID4gPiAgIAlpbnQgKCpkZWJ1Z2ZzX2luaXQpKHN0 cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiA+ID4gICAJdm9pZCAoKmRlYnVnZnNfY2xlYW51cCko c3RydWN0IGRybV9taW5vciAqbWlub3IpOwo+ID4gPiAtLSAKPiA+ID4gMi44LjIKPiA+ID4gCj4g PiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+ IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVs IENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=