From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id E5A18893A3 for ; Wed, 10 Apr 2019 10:32:21 +0000 (UTC) Date: Wed, 10 Apr 2019 13:32:18 +0300 From: Petri Latvala Message-ID: <20190410103218.GG22949@platvala-desk.ger.corp.intel.com> References: <20190408122646.12948-1-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190408122646.12948-1-arkadiusz.hiler@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Arkadiusz Hiler Cc: igt-dev@lists.freedesktop.org List-ID: T24gTW9uLCBBcHIgMDgsIDIwMTkgYXQgMDM6MjY6NDZQTSArMDMwMCwgQXJrYWRpdXN6IEhpbGVy IHdyb3RlOgo+IENvbXBpbGF0aW9uIHN1cHBvcnQgd2FzIGRyb3BwZWQgaW4gSmFudWFyeSAyMDE5 LCBzaW5jZSB0aGVuIGl0J3MganVzdCBhCj4gZGVhZCBjb2RlIGluIHRoZSByZXBvIGFuZCBubyBv bmUgc2VlbXMgdG8gYmUgbWlzc2luZyBpdC4KPiAKPiBBbnl3YXksIGl0IGNhbiBhbHdheXMgYmUg cmVpbnRyb2R1Y2VkIGZyb20gdGhlIGNoYXNtcyBvZiBnaXQgaGlzdG9yeS4KPiAKPiBDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzogUGV0cmkgTGF0dmFsYSA8 cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQXJrYWRpdXN6IEhpbGVy IDxhcmthZGl1c3ouaGlsZXJAaW50ZWwuY29tPgoKQWNrZWQtYnk6IFBldHJpIExhdHZhbGEgPHBl dHJpLmxhdHZhbGFAaW50ZWwuY29tPgoKSWYgdGhpcyBwYXNzZXMgZ2l0bGFiIENJICh0aGVyZSBj b3VsZCBiZSBzb21lIGhpbGFyaW91cyBob29rIGluIHRoZQphdXRvdG9vbHMgY29kZSB0aGF0IHdh c24ndCBzcG90dGVkLCB0aGUgdXN1YWwgc3RvcnkpLCBnbyBhaGVhZCBhbmQKbWVyZ2UgdGhpcy4K Cgo+IC0tLQo+ICBSRUFETUUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEw IC0KPiAgZGVidWdnZXIvLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAtCj4g IGRlYnVnZ2VyL2RlYnVnX3JkYXRhLmMgICAgICAgICAgICAgICAgICAgfCAxNDIgLS0tLS0tCj4g IGRlYnVnZ2VyL2V1ZGIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2MDIgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiAgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZSAgICAg ICB8ICAxMCAtCj4gIGRlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL2V2aWN0aW9uX21hY3JvLmMgfCAg NDggLS0KPiAgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvcHJlX2NwcC5weSAgICAgICB8IDEyNiAt LS0tLQo+ICBkZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9zci5nNGEgICAgICAgICAgIHwgMjc3IC0t LS0tLS0tLS0tCj4gIGRlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3Rlc3QuZzRhICAgICAgICAgfCAg NjQgLS0tCj4gIDkgZmlsZXMgY2hhbmdlZCwgMTI4MSBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1v ZGUgMTAwNjQ0IGRlYnVnZ2VyLy5naXRpZ25vcmUKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRlYnVn Z2VyL2RlYnVnX3JkYXRhLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRlYnVnZ2VyL2V1ZGIuYwo+ ICBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZQo+ ICBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvZXZpY3Rpb25fbWFj cm8uYwo+ICBkZWxldGUgbW9kZSAxMDA3NTUgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvcHJlX2Nw cC5weQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvc3IuZzRh Cj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS90ZXN0Lmc0YQo+ IAo+IGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKPiBpbmRleCAyZDU4MzA5NS4u OWJlODQwYzggMTAwNjQ0Cj4gLS0tIGEvUkVBRE1FLm1kCj4gKysrIGIvUkVBRE1FLm1kCj4gQEAg LTEwNywxNiArMTA3LDYgQEAgcGVvcGxlIGRlYnVnZ2luZyB0aGUgZHJpdmVyLgo+ICBUaGVzZSB0 b29scyBnZW5lcmFsbHkgbXVzdCBiZSBydW4gYXMgcm9vdCwgZXhjZXB0IGZvciB0aGUgb25lcyB0 aGF0IGp1c3QKPiAgZGVjb2RlIGR1bXBzLgo+ICAKPiAtKipkZWJ1Z2dlci8qKgo+IC0KPiAtVGhp cyB0b29sIGlzIHRvIGJlIHVzZWQgdG8gZG8gc2hhZGVyIGRlYnVnZ2luZy4gSXQgYWN0cyBsaWtl IGEKPiAtZGVidWcgc2VydmVyIGFjY2VwdGluZyBjb25uZWN0aW9ucyBmcm9tIGRlYnVnIGNsaWVu dHMgc3VjaCBhcwo+IC1tZXNhLiBUaGUgY29ubmVjdGlvbnMgaXMgbWFkZSB3aXRoIHVuaXggZG9t YWluIHNvY2tldHMsIGFuZCBhdCBzb21lCj4gLXBvaW50IGl0IHdvdWxkIGJlIG5pY2UgaWYgdGhp cyBkaXJlY3RvcnkgY29udGFpbmVkIGEgbGlicmFyeSBmb3IKPiAtaW5pdGlhdGluZyBjb25uZWN0 aW9ucyB3aXRoIGRlYnVnIGNsaWVudHMuLgo+IC0KPiAtVGhlIGRlYnVnZ2VyIG11c3QgYmUgcnVu IGFzIHJvb3Q6ICJzdWRvIGRlYnVnZ2VyL2V1ZGIiCj4gLQo+ICAqKmRvY3MvKioKPiAgCj4gIENv bnRhaW5zIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpZ3QtZ3B1LXRvb2xzIGxpYnJhcmll cwo+IGRpZmYgLS1naXQgYS9kZWJ1Z2dlci8uZ2l0aWdub3JlIGIvZGVidWdnZXIvLmdpdGlnbm9y ZQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDg3M2NkMjczLi4wMDAwMDAwMAo+ IC0tLSBhL2RlYnVnZ2VyLy5naXRpZ25vcmUKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMiArMCww IEBACj4gLWRlYnVnX3JkYXRhCj4gLWV1ZGIKPiBkaWZmIC0tZ2l0IGEvZGVidWdnZXIvZGVidWdf cmRhdGEuYyBiL2RlYnVnZ2VyL2RlYnVnX3JkYXRhLmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCA2MWQ4MmQ5ZS4uMDAwMDAwMDAKPiAtLS0gYS9kZWJ1Z2dlci9kZWJ1Z19yZGF0 YS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDE0MiArMCwwIEBACj4gLS8qCj4gLSAqIENvcHly aWdodCDCqSAyMDExIEludGVsIENvcnBvcmF0aW9uCj4gLSAqCj4gLSAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAtICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+IC0gKgo+ IC0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAtICogU29mdHdh cmUuCj4gLSAqCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiAtICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAtICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiAtICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+IC0gKiBJTiBUSEUgU09GVFdBUkUu Cj4gLSAqCj4gLSAqIEF1dGhvcnM6Cj4gLSAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KPiAtICoKPiAtICovCj4gLQo+IC0jaW5jbHVkZSA8c3RkaW50Lmg+Cj4gLSNpbmNsdWRl IDxzdGRpby5oPgo+IC0jaW5jbHVkZSA8c3RkbGliLmg+Cj4gLSNpbmNsdWRlICJpbnRlbF9pby5o Igo+IC0jaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+IC0KPiAtc3RydWN0IGV1X3JkYXRhIHsK PiAtCXVuaW9uIHsKPiAtCQlzdHJ1Y3Qgewo+IC0JCQl1aW50OF90IHNlbmRjX2RlcCA6IDE7Cj4g LQkJCXVpbnQ4X3Qgc3doX2RlcCA6IDE7Cj4gLQkJCXVpbnQ4X3QgcHdjX2RlcCA6IDE7Cj4gLQkJ CXVpbnQ4X3QgbjJfZGVwIDogMTsKPiAtCQkJdWludDhfdCBuMV9kZXAgOiAxOwo+IC0JCQl1aW50 OF90IG4wX2RlcCA6IDE7Cj4gLQkJCXVpbnQ4X3QgZmxhZzFfZGVwIDogMTsKPiAtCQkJdWludDhf dCBmbGFnMF9kZXAgOiAxOwo+IC0JCQl1aW50OF90IGluZHhfZGVwIDogMTsKPiAtCQkJdWludDhf dCBtcmZfZGVwIDogMTsKPiAtCQkJdWludDhfdCBkc3RfZGVwIDogMTsKPiAtCQkJdWludDhfdCBz cmMyX2RlcCA6IDE7Cj4gLQkJCXVpbnQ4X3Qgc3JjMV9kZXAgOiAxOwo+IC0JCQl1aW50OF90IHNy YzBfZGVwIDogMTsKPiAtCQkJdWludDhfdCBtcF9kZXBfcGluIDogMTsKPiAtCQkJdWludDhfdCBz cF9kZXBfcGluIDogMTsKPiAtCQkJdWludDhfdCBmZnRpZCA6IDg7Cj4gLQkJCXVpbnQ4X3QgZmZp ZCA6IDQ7Cj4gLQkJCXVpbnQ4X3QgaW5zdHJ1Y3Rpb25fdmFsaWQgOiAxOwo+IC0JCQl1aW50OF90 IHRocmVhZF9zdGF0dXMgOiAzOwo+IC0JCX07Cj4gLQkJdWludDMyX3QgZHdvcmQ7Cj4gLQl9IHVk MDsKPiAtCj4gLQl1bmlvbiB7Cj4gLQkJc3RydWN0IHsKPiAtCQkJdWludDhfdCBtcmZfYWRkciA6 IDQ7Cj4gLQkJCXVpbnQ4X3QgZHN0X2FkZHIgOiA3Owo+IC0JCQl1aW50OF90IHNyYzJfYWRkciA6 IDc7Cj4gLQkJCXVpbnQ4X3Qgc3JjMV9hZGRyIDogNzsKPiAtCQkJdWludDhfdCBzcmMwX2FkZHIg OiA3Owo+IC0JCX07Cj4gLQkJdWludDMyX3QgZHdvcmQ7Cj4gLQl9IHVkMTsKPiAtCj4gLQl1bmlv biB7Cj4gLQkJc3RydWN0IHsKPiAtCQkJdWludDE2X3QgZXhpcCA6IDEyOwo+IC0JCQl1aW50OF90 IG9wY29kZSA6IDc7Cj4gLQkJCXVpbnQ4X3QgcHdjIDogODsKPiAtCQkJdWludDhfdCBpbnN0cnVj dGlvbl92YWxpZCA6IDE7Cj4gLQkJCXVpbnQ4X3QgbWJ6IDogNDsKPiAtCQl9Owo+IC0JCXVpbnQz Ml90IGR3b3JkOwo+IC0JfSB1ZDI7Cj4gLX07Cj4gLQo+IC1jb25zdCBjaGFyICp0aHJlYWRfc3Rh dHVzW10gPSAKPiAtCXsiSU5WQUxJRCIsICJpbnZhbGlkL25vIHRocmVhZCIsICJzdGFuZGJ5IChk ZXBlbmRlbmN5KSIsICJJTlZBTElEIiwgIkV4ZWN1dGluZyIsCj4gLQkgIklOVkFMSUQiICwgIklO VkFMSUQiICwgIklOVkFMSUQifTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZXVfcmRhdGEKPiAtY29s bGVjdF9yZGF0YShpbnQgZXUsIGludCB0aWQpIHsKPiAtCXN0cnVjdCBldV9yZGF0YSByZGF0YTsK PiAtCj4gLQlpbnRlbF9yZWdpc3Rlcl93cml0ZSgweDc4MDAsIGV1IDw8IDE2IHwgKDMgKiB0aWQp IDw8IDgpOwo+IC0JcmRhdGEudWQwLmR3b3JkID0gaW50ZWxfcmVnaXN0ZXJfcmVhZCgweDc4NDAp Owo+IC0KPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAoMyAqIHRp ZCArIDEpIDw8IDgpOwo+IC0JcmRhdGEudWQxLmR3b3JkID0gaW50ZWxfcmVnaXN0ZXJfcmVhZCgw eDc4NDApOwo+IC0KPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAo MyAqIHRpZCArIDIpIDw8IDgpOwo+IC0JcmRhdGEudWQyLmR3b3JkID0gaW50ZWxfcmVnaXN0ZXJf cmVhZCgweDc4NDApOwo+IC0KPiAtCXJldHVybiByZGF0YTsKPiAtfQo+IC1zdGF0aWMgdm9pZAo+ IC1wcmludF9yZGF0YShzdHJ1Y3QgZXVfcmRhdGEgcmRhdGEpIHsKPiAtCXByaW50ZigiXHQlc1xu IiwgdGhyZWFkX3N0YXR1c1tyZGF0YS51ZDAudGhyZWFkX3N0YXR1c10pOwo+IC0JcHJpbnRmKCJc dG4xX2RlcDogJWRcbiIsIHJkYXRhLnVkMC5uMV9kZXApOwo+IC0JcHJpbnRmKCJcdHB3Y19kZXA6 ICVkXG4iLCByZGF0YS51ZDAucHdjX2RlcCk7Cj4gLQlwcmludGYoIlx0c3doX2RlcDogJWRcbiIs IHJkYXRhLnVkMC5zd2hfZGVwKTsKPiAtCXByaW50ZigiXHRzb3VyY2UgMCAleFxuIiwgcmRhdGEu dWQxLnNyYzBfYWRkcik7Cj4gLQlwcmludGYoIlx0c291cmNlIDEgJXhcbiIsIHJkYXRhLnVkMS5z cmMxX2FkZHIpOwo+IC0JcHJpbnRmKCJcdHNvdXJjZSAyICV4XG4iLCByZGF0YS51ZDEuc3JjMl9h ZGRyKTsKPiAtCXByaW50ZigiXHRkZXN0ICAleFxuIiwgcmRhdGEudWQxLmRzdF9hZGRyKTsKPiAt CXByaW50ZigiXHRtcmYgICV4XG4iLCByZGF0YS51ZDEubXJmX2FkZHIpOwo+IC0JcHJpbnRmKCJc dElQOiAleFxuIiwgcmRhdGEudWQyLmV4aXApOwo+IC0JcHJpbnRmKCJcdG9wY29kZTogJXhcbiIs IHJkYXRhLnVkMi5vcGNvZGUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1maW5kX3N0dWNr X3RocmVhZHModm9pZCkKPiAtewo+IC0JaW50IGksIGo7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgMTU7 IGkrKykKPiAtCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Cj4gLQkJCXN0cnVjdCBldV9yZGF0 YSByZGF0YTsKPiAtCQkJcmRhdGEgPSBjb2xsZWN0X3JkYXRhKGksIGopOwo+IC0JCQlpZiAocmRh dGEudWQwLnRocmVhZF9zdGF0dXMgPT0gMiB8fAo+IC0JCQkgICAgcmRhdGEudWQwLnRocmVhZF9z dGF0dXMgPT0gNCkgewo+IC0JCQkJcHJpbnRmKCIlZCAlZDpcbiIsIGksIGopOwo+IC0JCQkJcHJp bnRfcmRhdGEocmRhdGEpOwo+IC0JCQl9Cj4gLQl9Cj4gLX0KPiAtCj4gLWludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pIHsKPiAtCXN0cnVjdCBwY2lfZGV2aWNlICpwY2lfZGV2Owo+IC0J cGNpX2RldiA9IGludGVsX2dldF9wY2lfZGV2aWNlKCk7Cj4gLQo+IC0JaW50ZWxfcmVnaXN0ZXJf YWNjZXNzX2luaXQocGNpX2RldiwgMSk7Cj4gLQlmaW5kX3N0dWNrX3RocmVhZHMoKTsKPiAtLy8J Y29sbGVjdF9yZGF0YShhdG9pKGFyZ3ZbMV0pLCBhdG9pKGFyZ3ZbMl0pKTsKPiAtCXJldHVybiAw Owo+IC19Cj4gZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL2V1ZGIuYyBiL2RlYnVnZ2VyL2V1ZGIuYwo+ IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDg2NmQ0YjUyLi4wMDAwMDAwMAo+IC0t LSBhL2RlYnVnZ2VyL2V1ZGIuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw2MDIgKzAsMCBAQAo+ IC0vKgo+IC0gKiBDb3B5cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKgo+IC0g KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+IC0gKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAtICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiAtICoKPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+IC0gKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCj4gLSAqIFNvZnR3YXJlLgo+IC0gKgo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+IC0gKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gLSAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4gLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAtICog SU4gVEhFIFNPRlRXQVJFLgo+IC0gKgo+IC0gKiBBdXRob3JzOgo+IC0gKiAgICBCZW4gV2lkYXdz a3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gLSAqCj4gLSAqIE5vdGVzOgo+IC0gKgo+IC0gKi8KPiAt Cj4gLSNpbmNsdWRlIDxzaWduYWwuaD4KPiAtI2luY2x1ZGUgPHN0ZGxpYi5oPgo+IC0jaW5jbHVk ZSA8ZmNudGwuaD4KPiAtI2luY2x1ZGUgPHVuaXN0ZC5oPgo+IC0jaW5jbHVkZSA8c3RyaW5nLmg+ Cj4gLSNpbmNsdWRlIDxzdHJpbmdzLmg+Cj4gLSNpbmNsdWRlIDxhc3NlcnQuaD4KPiAtI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgo+IC0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiAtI2luY2x1ZGUgPHN5 cy9tbWFuLmg+Cj4gLSNpbmNsdWRlIDxzeXMvdW4uaD4KPiAtI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KPiAtI2luY2x1ZGUgImRybS5oIgo+IC0jaW5jbHVkZSAiaTkxNV9kcm0uaCIKPiAtI2luY2x1 ZGUgImRybXRlc3QuaCIKPiAtI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiAtI2luY2x1ZGUg ImludGVsX2J1Zm1nci5oIgo+IC0jaW5jbHVkZSAiaW50ZWxfaW8uaCIKPiAtI2luY2x1ZGUgImlu dGVsX2JhdGNoYnVmZmVyLmgiCj4gLSNpbmNsdWRlICJpbnRlbF9kZWJ1Zy5oIgo+IC0jaW5jbHVk ZSAiZGVidWcuaCIKPiAtCj4gLSNkZWZpbmUgRVVfQVRUCQkweDc4MTAKPiAtI2RlZmluZSBFVV9B VFRfQ0xSCTB4NzgzMAo+IC0KPiAtI2RlZmluZSBSU1ZEX0VVIC0xCj4gLSNkZWZpbmUgUlNWRF9U SFJFQUQgLTEKPiAtI2RlZmluZSBSU1ZEX0lEIEVVSUQoLTEsIC0xLCAtMSkKPiAtCj4gLWVudW0g ewo+IC0JRUJBRF9TSE1FTSwKPiAtCUVCQURfUFJPVE9DT0wsCj4gLQlFQkFEX01BR0lDLAo+IC0J RUJBRF9XUklURQo+IC19Owo+IC0KPiAtc3RydWN0IGRlYnVnZ2VlIHsKPiAtCWludCBldWlkOwo+ IC0JaW50IHRpZDsKPiAtCWludCBmZDsKPiAtCWludCBjbHI7Cj4gLQl1aW50MzJfdCByZWc7Cj4g LX07Cj4gLQo+IC1zdHJ1Y3QgZGVidWdnZXIgewo+IC0Jc3RydWN0IGRlYnVnZ2VlICpkZWJ1Z2dl ZXM7Cj4gLQlpbnQgbnVtX3RocmVhZHM7Cj4gLQlpbnQgcmVhbF9udW1fdGhyZWFkczsKPiAtCWlu dCB0aHJlYWRzX3Blcl9ldTsKPiAtfSAqZXVfaW5mbzsKPiAtCj4gLWRybV9pbnRlbF9idWZtZ3Ig KmJ1Zm1ncjsKPiAtc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKPiAtZHJtX2ludGVs X2JvICpzY3JhdGNoX2JvOwo+IC0KPiAtaW50IGhhbmRsZTsKPiAtaW50IGRybV9mZDsKPiAtaW50 IGRlYnVnX2ZkID0gMDsKPiAtY29uc3QgY2hhciAqZGVidWdfZmlsZSA9ICJkdW1wX2RlYnVnLmJp biI7Cj4gLWludCBkZWJ1ZzsKPiAtaW50IGNsZWFyX3dhaXRzOwo+IC1pbnQgc2h1dHRpbmdfZG93 biA9IDA7Cj4gLXN0cnVjdCBpbnRlbF9kZWJ1Z19oYW5kc2hha2UgZGg7Cj4gLWludCBmb3JjZV9j bGVhciA9IDA7Cj4gLXVpbnQzMl90IG9sZF90ZF9jdGw7Cj4gLQo+IC0vKgo+IC0gKiBUaGUgZG9j cyBhcmUgd3JvbmcgYWJvdXQgdGhlIGF0dGVudGlvbiBjbGVhciBiaXRzLiBUaGUgY2xlYXIgYml0 cyBhcmUKPiAtICogcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgc3RydWN0dXJlIGluIGNhc2UgdGhl eSBjaGFuZ2UgaW4gZnV0dXJlIGdlbmVyYXRpb25zLgo+IC0gKi8KPiAtI2RlZmluZSBFVUlEKGV1 LCB0ZCwgY2xlYXIpIFwKPiAtCXsgLmV1aWQgPSBldSwgLnRpZCA9IHRkLCAucmVnID0gRVVfQVRU LCAuZmQgPSAtMSwgLmNsciA9IGNsZWFyIH0KPiAtI2RlZmluZSBFVUlEMihldSwgdGQsIGNsZWFy KSBcCj4gLQl7IC5ldWlkID0gZXUsIC50aWQgPSB0ZCwgLnJlZyA9IEVVX0FUVCArIDQsIC5mZCA9 IC0xLCAuY2xyID0gY2xlYXIgfQo+IC1zdHJ1Y3QgZGVidWdnZWUgZ3QxX2RlYnVnX2lkc1tdID0g ewo+IC0JUlNWRF9JRCwgUlNWRF9JRCwKPiAtCVJTVkRfSUQsIEVVSUQoNiwgMywgMjgpLCBFVUlE KDYsIDIsIDI3KSwgRVVJRCg2LCAxLCAyNiksIEVVSUQoNiwgMCwgMjUpLAo+IC0JUlNWRF9JRCwg RVVJRCg1LCAzLCAyMyksIEVVSUQoNSwgMiwgMjIpLCBFVUlEKDUsIDEsIDIxKSwgRVVJRCg1LCAw LCAyMCksCj4gLQlSU1ZEX0lELCBFVUlEKDQsIDMsIDE4KSwgRVVJRCg0LCAyLCAxNyksIEVVSUQo NCwgMSwgMTYpLCBFVUlEKDQsIDAsIDE1KSwKPiAtCVJTVkRfSUQsIEVVSUQoMiwgMywgMTMpLCBF VUlEKDIsIDIsIDEyKSwgRVVJRCgyLCAxLCAxMSksIEVVSUQoMiwgMCwgMTApLAo+IC0JUlNWRF9J RCwgRVVJRCgxLCAzLCA4KSwgRVVJRCgxLCAyLCA3KSwgRVVJRCgxLCAxLCA2KSwgRVVJRCgxLCAw LCA1KSwKPiAtCVJTVkRfSUQsIEVVSUQoMCwgMywgMyksIEVVSUQoMCwgMiwgMiksIEVVSUQoMCwg MSwgMSksIEVVSUQoMCwgMCwgMCkKPiAtfTsKPiAtCj4gLXN0cnVjdCBkZWJ1Z2dlZSBndDJfZGVi dWdfaWRzW10gPSB7Cj4gLQlFVUlEKDgsIDEsIDMxKSwgRVVJRCg4LCAwLCAzMCksCj4gLQlFVUlE KDYsIDQsIDI5KSwgRVVJRCg2LCAzLCAyOCksIEVVSUQoNiwgMiwgMjcpLCBFVUlEKDYsIDEsIDI2 KSwgRVVJRCg2LCAwLCAyNSksCj4gLQlFVUlEKDUsIDQsIDI0KSwgRVVJRCg1LCAzLCAyMyksIEVV SUQoNSwgMiwgMjIpLCBFVUlEKDUsIDEsIDIxKSwgRVVJRCg1LCAwLCAyMCksCj4gLQlFVUlEKDQs IDQsIDE5KSwgRVVJRCg0LCAzLCAxOCksIEVVSUQoNCwgMiwgMTcpLCBFVUlEKDQsIDEsIDE2KSwg RVVJRCg0LCAwLCAxNSksCj4gLQlFVUlEKDIsIDQsIDE0KSwgRVVJRCgyLCAzLCAxMyksIEVVSUQo MiwgMiwgMTIpLCBFVUlEKDIsIDEsIDExKSwgRVVJRCgyLCAwLCAxMCksCj4gLQlFVUlEKDEsIDQs IDkpLCBFVUlEKDEsIDMsIDgpLCBFVUlEKDEsIDIsIDcpLCBFVUlEKDEsIDEsIDYpLCBFVUlEKDEs IDAsIDUpLAo+IC0JRVVJRCgwLCA0LCA0KSwgRVVJRCgwLCAzLCAzKSwgRVVJRCgwLCAyLCAyKSwg RVVJRCgwLCAxLCAxKSwgRVVJRCgwLCAwLCAwKSwKPiAtCVJTVkRfSUQsIFJTVkRfSUQsIFJTVkRf SUQsIFJTVkRfSUQsCj4gLQlFVUlEMigxNCwgNCwgMjcpLCBFVUlEMigxNCwgMywgMjYpLCBFVUlE MigxNCwgMiwgMjUpLCBFVUlEMigxNCwgMSwgMjQpLCBFVUlEMigxNCwgMCwgMjMpLAo+IC0JRVVJ RDIoMTMsIDQsIDIyKSwgRVVJRDIoMTMsIDMsIDIxKSwgRVVJRDIoMTMsIDIsIDIwKSwgRVVJRDIo MTMsIDEsIDE5KSwgRVVJRDIoMTMsIDAsIDE4KSwKPiAtCUVVSUQyKDEyLCA0LCAxNyksIEVVSUQy KDEyLCAzLCAxNiksIEVVSUQyKDEyLCAyLCAxNSksIEVVSUQyKDEyLCAxLCAxNCksIEVVSUQyKDEy LCAwLCAxMyksCj4gLQlFVUlEMigxMCwgNCwgMTIpLCBFVUlEMigxMCwgMywgMTEpLCBFVUlEMigx MCwgMiwgMTApLCBFVUlEMigxMCwgMSwgOSksIEVVSUQyKDEwLCAwLCA4KSwKPiAtCUVVSUQyKDks IDQsIDcpLCBFVUlEMig5LCAzLCA2KSwgRVVJRDIoOSwgMiwgNSksIEVVSUQyKDksIDEsIDQpLCBF VUlEMig5LCAwLCAzKSwKPiAtCUVVSUQyKDgsIDQsIDIpLCBFVUlEMig4LCAzLCAxKSwgRVVJRDIo OCwgMiwgMCkKPiAtfTsKPiAtCj4gLXN0cnVjdCBkZWJ1Z2dlciBndDEgPSB7Cj4gLQkuZGVidWdn ZWVzID0gZ3QxX2RlYnVnX2lkcywKPiAtCS5udW1fdGhyZWFkcyA9IDMyLAo+IC0JLnJlYWxfbnVt X3RocmVhZHMgPSAyNCwKPiAtCS50aHJlYWRzX3Blcl9ldSA9IDQKPiAtfTsKPiAtCj4gLXN0cnVj dCBkZWJ1Z2dlciBndDIgPSB7Cj4gLQkuZGVidWdnZWVzID0gZ3QyX2RlYnVnX2lkcywKPiAtCS5u dW1fdGhyZWFkcyA9IDY0LAo+IC0JLnJlYWxfbnVtX3RocmVhZHMgPSA2MCwKPiAtCS50aHJlYWRz X3Blcl9ldSA9IDUKPiAtfTsKPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWR1bXBfZGVidWcodm9pZCAq YnVmLCBzaXplX3QgY291bnQpIHsKPiAtCWlmICghZGVidWdfZmQpCj4gLQkJZGVidWdfZmQgPSBv cGVuKGRlYnVnX2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIFNfSVJXWE8pOwo+ IC0KPiAtCWlmICh3cml0ZShkZWJ1Z19mZCwgYnVmLCBjb3VudCkgPT0gLTEpCj4gLQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIHRvIGRlYnVnIGZpbGU6ICVzXG4iLAo+IC0JCQlzdHJl cnJvcihlcnJubykpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9sYXRpbGUgdm9pZCAqCj4gLW1hcF9k ZWJ1Z19idWZmZXIodm9pZCkgewo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSBkcm1faW50ZWxf Ym9fbWFwKHNjcmF0Y2hfYm8sIDApOwo+IC0JYXNzZXJ0KHJldCA9PSAwKTsKPiAtCXJldHVybiBz Y3JhdGNoX2JvLT52aXJ0dWFsOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC11bm1hcF9kZWJ1 Z19idWZmZXIodm9pZCkgewo+IC0JZHJtX2ludGVsX2JvX3VubWFwKHNjcmF0Y2hfYm8pOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLXdhaXRfZm9yX2F0dG4oaW50IHRpbWVvdXQsIGludCAqb3V0 X2JpdHMpIHsKPiAtCWludCBzdGVwID0gMTsKPiAtCWludCBldXNfd2FpdGluZyA9IDA7Cj4gLQlp bnQgaSxqOwo+IC0KPiAtCWlmICh0aW1lb3V0IDw9IDApIHsKPiAtCQl0aW1lb3V0ID0gMTsKPiAt CQlzdGVwID0gMDsKPiAtCX0KPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSArPSBz dGVwKSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IDg7IGogKz0gNCkgewo+IC0JCQl1aW50MzJfdCBh dHRuID0gaW50ZWxfcmVnaXN0ZXJfcmVhZChFVV9BVFQgKyBqKTsKPiAtCQkJaWYgKGF0dG4pIHsK PiAtCQkJCWludCBiaXQgPSAwOwo+IC0JCQkJd2hpbGUoIChiaXQgPSBmZnMoYXR0bikpICE9IDAp IHsKPiAtCQkJCQliaXQtLTsgLy8gZmZzIGlzIDEgYmFzZWQKPiAtCQkJCQlhc3NlcnQoYml0ID49 IDApOwo+IC0JCQkJCW91dF9iaXRzW2V1c193YWl0aW5nXSA9IGJpdCArIChqICogOCk7Cj4gLQkJ CQkJYXR0biAmPSB+KDEgPDwgYml0KTsKPiAtCQkJCQlldXNfd2FpdGluZysrOwo+IC0JCQkJfQo+ IC0JCQl9Cj4gLQkJfQo+IC0KPiAtCQlpZiAoaW50ZWxfcmVnaXN0ZXJfcmVhZChFVV9BVFQgKyA4 KSB8fAo+IC0JCSAgICBpbnRlbF9yZWdpc3Rlcl9yZWFkKEVVX0FUVCArIDB4YykpIHsKPiAtCQkJ ZnByaW50ZihzdGRlcnIsICJVbmtub3duIGF0dGVudGlvbiBiaXRzXG4iKTsKPiAtCQl9Cj4gLQo+ IC0JCWlmIChldXNfd2FpdGluZyB8fCBzaHV0dGluZ19kb3duKQo+IC0JCQlicmVhazsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gZXVzX3dhaXRpbmc7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgZXVfZmQoYml0 KSBldV9pbmZvLT5kZWJ1Z2dlZXNbYml0XS5mZAo+IC0jZGVmaW5lIGV1X2lkKGJpdCkgZXVfaW5m by0+ZGVidWdnZWVzW2JpdF0uZXVpZAo+IC0jZGVmaW5lIGV1X3RpZChiaXQpIGV1X2luZm8tPmRl YnVnZ2Vlc1tiaXRdLnRpZAo+IC1zdGF0aWMgc3RydWN0IGV1X3N0YXRlICoKPiAtZmluZF9ldV9z aG1lbShpbnQgYml0LCB2b2xhdGlsZSB1aW50OF90ICpidWYpIHsKPiAtCXN0cnVjdCBldV9zdGF0 ZSAqZXU7Cj4gLQlpbnQgbWVtX3RpZCwgbWVtX2V1aWQsIGk7Cj4gLQo+IC0JZm9yKGkgPSAwOyBp IDwgZXVfaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+IC0JCWV1ID0gKHN0cnVjdCBldV9zdGF0 ZSAqKShidWYgKyBpICogZGgucGVyX3RocmVhZF9zY3JhdGNoKTsKPiAtCQltZW1fdGlkID0gZXUt PnNyMCAmIDB4NzsKPiAtCQltZW1fZXVpZCA9IChldS0+c3IwID4+IDgpICYgMHhmOwo+IC0JCWlm IChtZW1fdGlkID09IGV1X3RpZChiaXQpICYmIG1lbV9ldWlkID09IGV1X2lkKGJpdCkpCj4gLQkJ CWJyZWFrOwo+IC0JCWV1ID0gTlVMTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gZXU7Cj4gLX0KPiAt Cj4gLSNkZWZpbmUgR1JGX0NNUChhLCBiKSBtZW1jbXAoYSwgYiwgc2l6ZW9mKGdyZikpCj4gLSNk ZWZpbmUgR1JGX0NQWShhLCBiKSBtZW1jcHkoYSwgYiwgc2l6ZW9mKGdyZikpCj4gLXN0YXRpYyBp bnQKPiAtdmVyaWZ5KHN0cnVjdCBldV9zdGF0ZSAqZXUpIHsKPiAtCWlmIChHUkZfQ01QKGV1LT52 ZXJzaW9uLCBwcm90b2NvbF92ZXJzaW9uKSkgewo+IC0JCWlmIChkZWJ1Zykgewo+IC0JCQlwcmlu dGYoIkJhZCBFVSBwcm90b2NvbCB2ZXJzaW9uICV4ICV4XG4iLAo+IC0JCQkJKCh1aW50MzJfdCAq KSZldS0+dmVyc2lvbilbMF0sCj4gLQkJCQlERUJVR19QUk9UT0NPTF9WRVJTSU9OKTsKPiAtCQkJ ZHVtcF9kZWJ1Zygodm9pZCAqKWV1LCBzaXplb2YoKmV1KSk7Cj4gLQkJfQo+IC0JCXJldHVybiAt RUJBRF9QUk9UT0NPTDsKPiAtCX0KPiAtCj4gLQlpZiAoR1JGX0NNUChldS0+c3RhdGVfbWFnaWMs IGV1X21zZykpIHsKPiAtCQlpZiAoZGVidWcpIHsKPiAtCQkJcHJpbnRmKCJCYWQgRVUgc3RhdGUg bWFnaWMgJXggJXhcbiIsCj4gLQkJCQkoKHVpbnQzMl90ICopJmV1LT5zdGF0ZV9tYWdpYylbMF0s Cj4gLQkJCQkoKHVpbnQzMl90ICopJmV1LT5zdGF0ZV9tYWdpYylbMV0pOwo+IC0JCQlkdW1wX2Rl YnVnKCh2b2lkICopZXUsIHNpemVvZigqZXUpKTsKPiAtCQl9Cj4gLQkJcmV0dXJuIC1FQkFEX01B R0lDOwo+IC0JfSBlbHNlIHsKPiAtCQlHUkZfQ1BZKGV1LT5zdGF0ZV9tYWdpYywgY3B1X2Fjayk7 Cj4gLQl9Cj4gLQo+IC0JZXUtPnNyMCA9IFJTVkRfRVUgPDwgOCB8IFJTVkRfVEhSRUFEOwo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQKPiAtY29sbGVjdF9kYXRhKGludCBiaXQs IHZvbGF0aWxlIHVpbnQ4X3QgKmJ1Zikgewo+IC0Jc3RydWN0IGV1X3N0YXRlICpldTsKPiAtCXNz aXplX3QgbnVtOwo+IC0JaW50IHJldDsKPiAtCj4gLQlhc3NlcnQoZXVfaWQoYml0KSAhPSBSU1ZE X0VVKTsKPiAtCj4gLQlpZiAoZXVfZmQoYml0KSA9PSAtMSkgewo+IC0JCWNoYXIgbmFtZVsxMjhd Owo+IC0JCXNwcmludGYobmFtZSwgImR1bXBfZXVfJTAyZF8lZC5iaW4iLCBldV9pZChiaXQpLCBl dV90aWQoYml0KSk7Cj4gLQkJZXVfZmQoYml0KSA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fV1JP TkxZIHwgT19UUlVOQywgU19JUldYTyk7Cj4gLQkJaWYgKGV1X2ZkKGJpdCkgPT0gLTEpCj4gLQkJ CXJldHVybiAtMTsKPiAtCX0KPiAtCj4gLQlldSA9IGZpbmRfZXVfc2htZW0oYml0LCBidWYpOwo+ IC0KPiAtCWlmIChldSA9PSBOVUxMKSB7Cj4gLQkJaWYgKGRlYnVnKQo+IC0JCQlwcmludGYoIkJh ZCBvZmZzZXQgJWQgJWRcbiIsIGV1X2lkKGJpdCksIGV1X3RpZChiaXQpKTsKPiAtCQlyZXR1cm4g LUVCQURfU0hNRU07Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gdmVyaWZ5KGV1KTsKPiAtCWlmIChyZXQp Cj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQludW0gPSB3cml0ZShldV9mZChiaXQpLCAodm9pZCAq KWV1LCBzaXplb2YoKmV1KSk7Cj4gLQlpZiAobnVtICE9IHNpemVvZigqZXUpKSB7Cj4gLQkJcGVy cm9yKCJ1bmhhbmRsZWQgd3JpdGUgZmFpbHVyZSIpOwo+IC0JCXJldHVybiBFQkFEX1dSSVRFOwo+ IC0JfQo+IC0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtY2xl YXJfYXR0bihpbnQgYml0KSB7Cj4gLSNpZiAwCj4gLS8qCj4gLSAqIFRoaXMgd29ya3MgYnV0IGRv ZXNuJ3QgYWxsb3cgZm9yIGVhc2lseSBjaGFuZ2VkIGNsZWFyaW5nIGJpdHMKPiAtICovCj4gLXN0 YXRpYyB2b2lkCj4gLWNsZWFyX2F0dG5fb2xkKGludCBiaXQpIHsKPiAtCWludCBiaXRfdG9fY2xl YXIgPSBiaXQgJSAzMjsKPiAtCWJpdF90b19jbGVhciA9IDMxIC0gYml0X3RvX2NsZWFyOwo+IC0J aW50ZWxfcmVnaXN0ZXJfd3JpdGUoMHg3ODMwICsgKGJpdC8zMikgKiA0LCAwKTsKPiAtCWludGVs X3JlZ2lzdGVyX3dyaXRlKDB4NzgzMCArIChiaXQvMzIpICogNCwgMSA8PCBiaXRfdG9fY2xlYXIp Owo+IC19Cj4gLSNlbHNlCj4gLQlpZiAoIWZvcmNlX2NsZWFyKSB7Cj4gLQkJaW50IGJpdF90b19j bGVhcjsKPiAtCQliaXRfdG9fY2xlYXIgPSBldV9pbmZvLT5kZWJ1Z2dlZXNbYml0XS5jbHI7Cj4g LQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIChiaXQvMzIpICogNCwgMCk7Cj4g LQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIChiaXQvMzIpICogNCwgMSA8PCBi aXRfdG9fY2xlYXIpOwo+IC0JfSBlbHNlIHsKPiAtCQlpbnRlbF9yZWdpc3Rlcl93cml0ZShFVV9B VFRfQ0xSICsgMCwgMCk7Cj4gLQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIDQs IDApOwo+IC0JCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIgKyAwLCAweGZmZmZmZmZm KTsKPiAtCQlpbnRlbF9yZWdpc3Rlcl93cml0ZShFVV9BVFRfQ0xSICsgNCwgMHhmZmZmZmZmZik7 Cj4gLQl9Cj4gLSNlbmRpZgo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1kYl9zaHV0ZG93bihp bnQgc2lnKSB7Cj4gLQlzaHV0dGluZ19kb3duID0gMTsKPiAtCXByaW50ZigiU2h1dHRpbmcgZG93 bi4uLlxuIik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJu KSkKPiAtZGllKGludCByZWFzb24pIHsKPiAtCWludCBpID0gMDsKPiAtCj4gLQlpbnRlbF9yZWdp c3Rlcl93cml0ZShFVV9BVFRfQ0xSLCAwKTsKPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FU VF9DTFIgKyA0LCAwKTsKPiAtCj4gLQlpZiAoZGVidWdfZmQpCj4gLQkJY2xvc2UoZGVidWdfZmQp Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBldV9pbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4g LQkJaWYgKGV1X2luZm8tPmRlYnVnZ2Vlc1tpXS5mZCAhPSAtMSkKPiAtCQkJY2xvc2UoZXVfaW5m by0+ZGVidWdnZWVzW2ldLmZkKTsKPiAtCX0KPiAtCj4gLQl1bm1hcF9kZWJ1Z19idWZmZXIoKTsK PiAtCj4gLQlpZiAob2xkX3RkX2N0bCkKPiAtCQlpbnRlbF9yZWdpc3Rlcl93cml0ZShURF9DVEws IG9sZF90ZF9jdGwpOwo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsKPiAtCWV4aXQo cmVhc29uKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1pZGVudGlmeV9kZXZpY2UoaW50IGRl dmlkKSB7Cj4gLQlpZiAoIUlTX1NBTkRZQlJJREdFKGRldmlkKSkKPiAtCQlyZXR1cm4gLUVOT0RF VjsKPiAtCj4gLQlzd2l0Y2ggKGludGVsX2d0KGRldmlkKSkgewo+IC0JY2FzZSAwOgo+IC0JCWV1 X2luZm8gPSAmZ3QxOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAxOgo+IC0JCWV1X2luZm8gPSAmZ3Qy Owo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtCj4gLQly ZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtcGFyc2VfZGF0YShjb25zdCBjaGFy ICpmaWxlX25hbWUpIHsKPiAtCXN0cnVjdCBldV9zdGF0ZSAqZXVfc3RhdGUgPSBOVUxMOwo+IC0J c3RydWN0IHN0YXQgc3Q7Cj4gLQlpbnQgZmQgPSAtMTsKPiAtCWludCByZXQsIGksIGVsZW1lbnRz Owo+IC0KPiAtCWZkID0gb3BlbihmaWxlX25hbWUsIE9fUkRPTkxZKTsKPiAtCWlmIChmZCA9PSAt MSkgewo+IC0JCXBlcnJvcigib3BlbiIpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCXJl dCA9IGZzdGF0KGZkLCAmc3QpOwo+IC0JaWYgKHJldCA9PSAtMSkgewo+IC0JCXBlcnJvcigiZnN0 YXQiKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQllbGVtZW50cyA9IHN0LnN0X3NpemUg LyBzaXplb2Yoc3RydWN0IGV1X3N0YXRlKTsKPiAtCWlmIChlbGVtZW50cyA9PSAwKSB7Cj4gLQkJ ZnByaW50ZihzdGRlcnIsICJGaWxlIG5vdCBiaWcgZW5vdWdoIGZvciAxIGVudHJ5XG4iKTsKPiAt CQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQlldV9zdGF0ZSA9IG1tYXAoMCwgc3Quc3Rfc2l6ZSwg UFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMCk7Cj4gLQlpZiAoZXVfc3RhdGUgPT0gTUFQX0ZB SUxFRCkgewo+IC0JCXBlcnJvcigibW1hcCIpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAt CWZvcihpID0gMDsgaSA8IGVsZW1lbnRzOyBpKyspIHsKPiAtCQlwcmludGYoIkFJUDogIik7Cj4g LQkJCXByaW50ZigiJXhcbiIsICgodWludDMyX3QgKilldV9zdGF0ZVtpXS5jcjApWzJdKTsKPiAt CX0KPiAtb3V0Ogo+IC0JaWYgKGV1X3N0YXRlKQo+IC0JCW11bm1hcChldV9zdGF0ZSwgc3Quc3Rf c2l6ZSk7Cj4gLQlpZiAoZmQgIT0gLTEpCj4gLQkJY2xvc2UoZmQpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50Cj4gLXdhaXRfZm9yX3NjcmF0Y2hfYm8odm9pZCkgewo+IC0Jc3RydWN0IHNvY2thZGRy X3VuIGFkZHI7Cj4gLQl1aW50MzJfdCB2ZXJzaW9uOwo+IC0JaW50IGZkLCByZXQsIGRoX2hhbmRs ZSA9IC0xOwo+IC0KPiAtCWFzc2VydChzaXplb2YodmVyc2lvbikgPT0gc2l6ZW9mKGRoLnZlcnNp b24pKTsKPiAtCj4gLQlmZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7Cj4gLQlp ZiAoZmQgPT0gLTEpCj4gLQkJcmV0dXJuIC0xOwo+IC0KPiAtCS8qIENsZWFuIHVwIHByZXZpb3Vz IHJ1bnMgKi8KPiAtCXJlbW92ZShTSEFERVJfREVCVUdfU09DS0VUKTsKPiAtCj4gLQltZW1zZXQo JmFkZHIsIDAsIHNpemVvZihhZGRyKSk7Cj4gLQlhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwo+ IC0Jc3RybmNweShhZGRyLnN1bl9wYXRoLCBTSEFERVJfREVCVUdfU09DS0VULCBzaXplb2YoYWRk ci5zdW5fcGF0aCkgLSAxKTsKPiAtCj4gLQlyZXQgPSBiaW5kKGZkLCAoY29uc3Qgc3RydWN0IHNv Y2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7Cj4gLQlpZiAocmV0ID09IC0xKSB7Cj4gLQkJ cGVycm9yKCJsaXN0ZW4iKTsKPiAtCQlyZXR1cm4gLTE7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gbGlz dGVuKGZkLCAxKTsKPiAtCWlmIChyZXQgPT0gLTEpIHsKPiAtCQlwZXJyb3IoImxpc3RlbiIpOwo+ IC0JCWdvdG8gZG9uZTsKPiAtCX0KPiAtCj4gLQl3aGlsZSgxKSB7Cj4gLQkJaW50IGNsaWVudF9m ZDsKPiAtCQlzaXplX3QgY291bnQ7Cj4gLQkJY2hhciBhY2tbXSA9IERFQlVHX0hBTkRTSEFLRV9B Q0s7Cj4gLQo+IC0JCWNsaWVudF9mZCA9IGFjY2VwdChmZCwgTlVMTCwgTlVMTCk7Cj4gLQkJaWYg KGNsaWVudF9mZCA9PSAtMSkgewo+IC0JCQlwZXJyb3IoImFjY2VwdCIpOwo+IC0JCQlnb3RvIGRv bmU7Cj4gLQkJfQo+IC0KPiAtCQljb3VudCA9IHJlYWQoY2xpZW50X2ZkLCAmdmVyc2lvbiwgc2l6 ZW9mKHZlcnNpb24pKTsKPiAtCQlpZiAoY291bnQgIT0gc2l6ZW9mKHZlcnNpb24pKSB7Cj4gLQkJ CXBlcnJvcigicmVhZCB2ZXJzaW9uIik7Cj4gLQkJCWdvdG8gbG9vcF9vdXQ7Cj4gLQkJfQo+IC0K PiAtCQlpZiAodmVyc2lvbiAhPSBERUJVR19IQU5EU0hBS0VfVkVSU0lPTikgewo+IC0JCQlmcHJp bnRmKHN0ZGVyciwgIkJhZCBkZWJ1ZyBoYW5kc2hha2VcbiIpOwo+IC0JCQlnb3RvIGxvb3Bfb3V0 Owo+IC0JCX0KPiAtCj4gLQkJY291bnQgPSByZWFkKGNsaWVudF9mZCwgKChjaGFyICopJmRoKSAr IDEsIHNpemVvZihkaCkgLSAxKTsKPiAtCQlpZiAoY291bnQgIT0gc2l6ZW9mKGRoKSAtIDEpIHsK PiAtCQkJcGVycm9yKCJyZWFkIGhhbmRzaGFrZSIpOwo+IC0JCQlnb3RvIGxvb3Bfb3V0Owo+IC0J CX0KPiAtCj4gLQkJY291bnQgPSB3cml0ZShjbGllbnRfZmQsIGFjaywgc2l6ZW9mKGFjaykpOwo+ IC0JCWlmIChjb3VudCAhPSBzaXplb2YoYWNrKSkgewo+IC0JCQlwZXJyb3IoIndyaXRlIGFjayIp Owo+IC0JCQlnb3RvIGxvb3Bfb3V0Owo+IC0JCX0KPiAtCQlkaF9oYW5kbGUgPSBkaC5mbGlua19o YW5kbGU7Cj4gLQkJaWYgKGRlYnVnID4gMCkgewo+IC0JCQlwcmludGYoIkhhbmRzaGFrZSBjb21w bGV0ZWQgc3VjY2Vzc2Z1bGx5XG4iCj4gLQkJCQkiXHRwcm90b2NvbCB2ZXJzaW9uID0gJWRcbiIK PiAtCQkJCSJcdGZsaW5rIGhhbmRsZSA9ICVkXG4iCj4gLQkJCQkiXHRwZXIgdGhyZWFkIHNjcmF0 Y2ggPSAleFxuIiwgdmVyc2lvbiwKPiAtCQkJCWRoLmZsaW5rX2hhbmRsZSwgZGgucGVyX3RocmVh ZF9zY3JhdGNoKTsKPiAtCQl9Cj4gLQo+IC0JbG9vcF9vdXQ6Cj4gLQkJY2xvc2UoY2xpZW50X2Zk KTsKPiAtCQlicmVhazsKPiAtCX0KPiAtCj4gLWRvbmU6Cj4gLQljbG9zZShmZCk7Cj4gLQlyZXR1 cm4gZGhfaGFuZGxlOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1zZXR1cF9od19iaXRzKHZv aWQpCj4gLXsKPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKElOU1RfUE0sIEdFTjZfR0xPQkFMX0RF QlVHX0VOQUJMRSB8Cj4gLQkJCQkgICAgICBHRU42X0dMT0JBTF9ERUJVR19FTkFCTEUgPDwgMTYp Owo+IC0Jb2xkX3RkX2N0bCA9IGludGVsX3JlZ2lzdGVyX3JlYWQoR0VONl9URF9DVEwpOwo+IC0J aW50ZWxfcmVnaXN0ZXJfd3JpdGUoR0VONl9URF9DVEwsIEdFTjZfVERfQ1RMX0ZPUkNFX1REX0JL UFQpOwo+IC19Cj4gLQo+IC1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7Cj4gLQlz dHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldjsKPiAtCXZvbGF0aWxlIHVpbnQ4X3QgKnNjcmF0Y2gg PSBOVUxMOwo+IC0JaW50IGJpdHNbNjRdOwo+IC0JaW50IGRldmlkID0gLTEsIG9wdDsKPiAtCj4g LQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiY2RyOnBmP2giKSkgIT0gLTEpIHsK PiAtCQlzd2l0Y2ggKG9wdCkgewo+IC0JCWNhc2UgJ2MnOgo+IC0JCQljbGVhcl93YWl0cyA9IDE7 Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJ2QnOgo+IC0JCQlkZWJ1ZyA9IDE7Cj4gLQkJCWJyZWFr Owo+IC0JCWNhc2UgJ3InOgo+IC0JCQlwYXJzZV9kYXRhKG9wdGFyZyk7Cj4gLQkJCWV4aXQoMCk7 Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJ3AnOgo+IC0JCQlkZXZpZCA9IGF0b2kob3B0YXJnKTsK PiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAnZic6Cj4gLQkJCWZvcmNlX2NsZWFyICA9IDE7Cj4gLQkJ CWJyZWFrOwo+IC0JCWNhc2UgJz8nOgo+IC0JCWNhc2UgJ2gnOgo+IC0JCWRlZmF1bHQ6Cj4gLQkJ CWV4aXQoMCk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXBjaV9kZXYgPSBpbnRlbF9nZXRfcGNpX2Rl dmljZSgpOwo+IC0JaWYgKGRldmlkID09IC0xKQo+IC0JCWRldmlkID0gcGNpX2Rldi0+ZGV2aWNl X2lkOwo+IC0JaWYgKGlkZW50aWZ5X2RldmljZShkZXZpZCkpIHsKPiAtCQlhYm9ydCgpOwo+IC0J fQo+IC0KPiAtCWFzc2VydChpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChwY2lfZGV2LCAxKSA9 PSAwKTsKPiAtCj4gLQltZW1zZXQoYml0cywgLTEsIHNpemVvZihiaXRzKSk7Cj4gLQkvKgo+IC0J ICogVGhlc2UgZXZlbnRzIGhhdmUgdG8gb2NjdXIgYmVmb3JlIHRoZSBTUiBydW5zLCBvciB3ZSBu ZWVkCj4gLQkgKiBub24tYmxvY2tpbmcgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucy4KPiAtCSAq Lwo+IC0JaWYgKCFjbGVhcl93YWl0cykgewo+IC0JCWludCBkaF9oYW5kbGU7Cj4gLQkJZHJtX2Zk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gLQkJYnVmbWdyID0gZHJtX2ludGVs X2J1Zm1ncl9nZW1faW5pdChkcm1fZmQsIDQwOTYpOwo+IC0KPiAtCQlzZXR1cF9od19iaXRzKCk7 Cj4gLQo+IC0JCS8qIFdlIGFyZSBwcm9iYWJseSByb290LCBtYWtlIGZpbGVzIHdvcmxkIGZyaWVu ZGx5ICovCj4gLQkJdW1hc2soMCk7Cj4gLQkJZGhfaGFuZGxlID0gd2FpdF9mb3Jfc2NyYXRjaF9i bygpOwo+IC0JCWlmIChkaF9oYW5kbGUgPT0gLTEpIHsKPiAtCQkJcHJpbnRmKCJObyBoYW5kbGUg ZnJvbSBtZXNhLCBwbGVhc2UgZW50ZXIgbWFudWFsbHk6ICIpOwo+IC0JCQlpZiAoZnNjYW5mKHN0 ZGluLCAiJTFkIiwgJmRoX2hhbmRsZSkgPT0gMCkKPiAtCQkJCWV4aXQoMSk7Cj4gLQkJfQo+IC0J CXNjcmF0Y2hfYm8gPSBpbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fbmFtZShidWZtZ3IsICJzY3Jh dGNoIiwgZGhfaGFuZGxlKTsKPiAtCQlpZiAoc2NyYXRjaF9ibyA9PSBOVUxMKSB7Cj4gLQkJCWZw cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZmxpbmsgYnVmZmVyXG4iKTsKPiAtCQkJYWJvcnQoKTsK PiAtCQl9Cj4gLQkJc2lnbmFsKFNJR0lOVCwgZGJfc2h1dGRvd24pOwo+IC0JCXByaW50ZigiUHJl c3MgQ3RybC1DIHRvIHN0b3BcbiIpOwo+IC0JfSBlbHNlIHsKPiAtCQlpbnQgdGltZSA9IGZvcmNl X2NsZWFyID8gMCA6IDIwMDAwOwo+IC0JCXdoaWxlICh3YWl0X2Zvcl9hdHRuKHRpbWUsIGJpdHMp KSB7Cj4gLQkJCWNsZWFyX2F0dG4oYml0c1swXSk7Cj4gLQkJCW1lbXNldChiaXRzLCAtMSwgc2l6 ZW9mKGJpdHMpKTsKPiAtCQl9Cj4gLQkJZGllKDApOwo+IC0JfQo+IC0KPiAtCXNjcmF0Y2ggPSBt YXBfZGVidWdfYnVmZmVyKCk7Cj4gLQl3aGlsZSAoc2h1dHRpbmdfZG93biA9PSAwKSB7Cj4gLQkJ aW50IG51bV9ldmVudHMsIGk7Cj4gLQo+IC0JCW1lbXNldChiaXRzLCAtMSwgc2l6ZW9mKGJpdHMp KTsKPiAtCQludW1fZXZlbnRzID0gd2FpdF9mb3JfYXR0bigtMSwgYml0cyk7Cj4gLQkJaWYgKG51 bV9ldmVudHMgPT0gMCkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWZvciAoaSA9IDA7IGkgPCBudW1f ZXZlbnRzOyBpKyspIHsKPiAtCQkJYXNzZXJ0KGJpdHNbaV0gPCA2NCAmJiBiaXRzW2ldID49IDAp Owo+IC0JCQlpZiAoY29sbGVjdF9kYXRhKGJpdHNbaV0sIHNjcmF0Y2gpKSB7Cj4gLQkJCQliaXRz W2ldID0gLTE7Cj4gLQkJCQljb250aW51ZTsKPiAtCQkJfQo+IC0JCQljbGVhcl9hdHRuKGJpdHNb aV0pOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlkaWUoMCk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IGRp ZmYgLS1naXQgYS9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS8uZ2l0aWdub3JlIGIvZGVidWdnZXIv c3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IGQxOTUwMGNmLi4wMDAwMDAwMAo+IC0tLSBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lLy5n aXRpZ25vcmUKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTAgKzAsMCBAQAo+IC1ldmljdC5oCj4g LWV2aWN0aW9uX21hY3JvCj4gLXNyCj4gLXNyLmFzbQo+IC1zci5jCj4gLXNyLmNwcAo+IC10aW55 Cj4gLXRpbnkuYXNtCj4gLXRpbnkuYwo+IC10aW55LmNwcAo+IGRpZmYgLS1naXQgYS9kZWJ1Z2dl ci9zeXN0ZW1fcm91dGluZS9ldmljdGlvbl9tYWNyby5jIGIvZGVidWdnZXIvc3lzdGVtX3JvdXRp bmUvZXZpY3Rpb25fbWFjcm8uYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDFk YTIyMzMyLi4wMDAwMDAwMAo+IC0tLSBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL2V2aWN0aW9u X21hY3JvLmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsNDggKzAsMCBAQAo+IC0vKgo+IC0gKiBD b3B5cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gLSAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAtICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAt ICoKPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gLSAqIFNv ZnR3YXJlLgo+IC0gKgo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+IC0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gLSAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAtICogSU4gVEhFIFNPRlRX QVJFLgo+IC0gKgo+IC0gKiBBdXRob3JzOgo+IC0gKiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lk YXdzay5uZXQ+Cj4gLSAqCj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gLQo+IC0j ZGVmaW5lIFNUQVJUIDB4MTAwCj4gLSNkZWZpbmUgRU5EICgoMTI4IDw8IDEwKSAvIDQpCj4gLQo+ IC1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Cj4gLQlpbnQgaTsKPiAtCXByaW50 ZigiI2lmZGVmIFNBTkRZQlJJREdFXG4iKTsKPiAtCXByaW50ZigiI2RlZmluZSBFVklDVF9DQUNI RSBcXFxuIik7Cj4gLQlwcmludGYoIlx0bW92ICgxKSBtMC41OnVkIGcwLjU6dWQgRkxBR1M7IFxc XG4iKTsKPiAtCWZvciAoaSA9IFNUQVJUOyBpIDwgRU5EIC0gODsgaSs9MHg4KSB7Cj4gLQkJcHJp bnRmKCJcdG1vdiAoMSkgbTAuMjp1ZCAweCUwNHg6dWQgRkxBR1M7IFxcXG4iLCBpKTsKPiAtCQlw cmludGYoIlx0V1JJVEVfU0NSQVRDSDQobTApOyBcXFxuIik7Cj4gLQl9Cj4gLQo+IC0JcHJpbnRm KCJcdG1vdiAoMSkgbTAuMjp1ZCAweCUwNHg6dWQgRkxBR1M7IFxcXG4iLCBpKTsKPiAtCXByaW50 ZigiXHRXUklURV9TQ1JBVENINChtMClcbiIpOwo+IC0JcHJpbnRmKCIjZWxzZVxuIik7Cj4gLQlw cmludGYoIiNkZWZpbmUgRVZJQ1RfQ0FDSEVcbiIpOwo+IC0JcHJpbnRmKCIjZW5kaWZcbiIpOwo+ IC19Cj4gZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3ByZV9jcHAucHkgYi9k ZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5Cj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NzU1Cj4gaW5kZXggNTg0ZDJhZjAuLjAwMDAwMDAwCj4gLS0tIGEvZGVidWdnZXIvc3lzdGVtX3Jv dXRpbmUvcHJlX2NwcC5weQo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxMjYgKzAsMCBAQAo+IC0j IS91c3IvYmluL2VudiBweXRob24zCj4gLQo+IC0jIENvcHlyaWdodCDCqSAyMDExIEludGVsIENv cnBvcmF0aW9uCj4gLSMKPiAtIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4gLSMgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwKPiAtIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCj4gLSMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAo+ IC0jIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZSBTb2Z0d2FyZSBpcwo+IC0jIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSMKPiAtIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gLSMgcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+IC0jIFNvZnR3YXJlLgo+IC0jCj4gLSMgVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK PiAtIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiAtIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4gLSMgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+IC0jIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gLSMgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU SEUKPiAtIyBTT0ZUV0FSRS4KPiAtIwo+IC0jIEF1dGhvcnM6Cj4gLSMgICAgQmVuIFdpZGF3c2t5 IDxiZW5AYndpZGF3c2submV0Pgo+IC0KPiAtI3ZlcnkgbGltaXRlZCBDLWxpa2UgcHJlcHJvY2Vz c29yCj4gLQo+IC0jbGltaXRhdGlvbnM6Cj4gLSMgbm8gbWFjcm8gc3Vic3RpdHV0aW9ucwo+IC0j IG5vIG11bHRpbGluZSBkZWZpbml0aW9ucwo+IC0jIGRpdmlkZSBvcGVyYXRvciBpcyAvLwo+IC0K PiAtaW1wb3J0IHN5cyxyZQo+IC0KPiAtIyBtYWtlIHN1cmUgYm90aCBpbnB1dCBmaWxlIGFuZCBz dGRvdXQgYXJlIGhhbmRsZWQgYXMgdXRmLTggdGV4dCwgcmVnYXJkbGVzcwo+IC0jIG9mIGN1cnJl bnQgbG9jYWxlIChlZy4gTEFORz1DIHdoaWNoIHRlbGxzIHB5dGhvbiB0byB1c2UgYXNjaWkgZW5j b2RpbmcpCj4gLXN5cy5zdGRvdXQgPSBvcGVuKHN5cy5fX3N0ZG91dF9fLmZpbGVubygpLCAiYSIs IGVuY29kaW5nPSJ1dGYtOCIpCj4gLWZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAiciIsIGVuY29k aW5nPSJ1dGYtOCIpCj4gLQo+IC1saW5lcyA9IGZpbGUucmVhZGxpbmVzKCkKPiAtbGVuKGxpbmVz KQo+IC1vdXQgPSBkaWN0KCkKPiAtZGVmaW5lcyA9IGRpY3QoKQo+IC0KPiAtY291bnQgPSAwCj4g LSNjcmVhdGUgYSBkaWN0IGZvciBvdXIgb3V0cHV0Cj4gLWZvciBsaW5lIGluIGxpbmVzOgo+IC0g ICAgb3V0W2NvdW50XSA9IGxpbmUKPiAtICAgIGNvdW50ID0gY291bnQgKyAxCj4gLQo+IC0jZG9u ZSBpcyBjb25zaWRlcmVkICNkZWZpbmUgPG5hbWU+IDxudW1iZXI+Cj4gLWRlZiBpc19kb25lKHN0 cmluZyk6Cj4gLSAgICBtID0gcmUubWF0Y2goIiNkZWZpbmVccysoXHcrPylccysoW2EtZkEtRjAt OVwtXSs/KVxzKiQiLCBzdHJpbmcpCj4gLSAgICByZXR1cm4gbQo+IC0KPiAtI3NraXAgbWFjcm9z LCB0aGUgcmVhbCBjcHAgd2lsbCBoYW5kbGUgaXQKPiAtZGVmIHNraXAoc3RyaW5nKToKPiAtICAg ICNtYWNybwo+IC0gICAgbSA9IHJlLm1hdGNoKCIjZGVmaW5lXHMrXHcrXCguKyIsIHN0cmluZykK PiAtICAgIHJldHVybiBtICE9IE5vbmUKPiAtCj4gLSNwdXQgY29udGFudHMgd2hpY2ggYXJlIGRv bmUgYmVpbmcgZXZhbHVhdGVkIGludG8gdGhlIGRpY3Rpb25hcnkKPiAtZGVmIGVhc3lfY29uc3Rh bnRzKCk6Cj4gLSAgICByZXQgPSAwCj4gLSAgICBmb3IgbGluZW5vLCBzdHJpbmcgaW4gb3V0Lml0 ZW1zKCk6Cj4gLSAgICAgICAgaWYgc2tpcChzdHJpbmcpOgo+IC0gICAgICAgICAgICBjb250aW51 ZQo+IC0gICAgICAgIG0gPSBpc19kb25lKHN0cmluZykKPiAtICAgICAgICBpZiBtICE9IE5vbmU6 Cj4gLSAgICAgICAgICAgIGtleSA9IG0uZ3JvdXAoMSkKPiAtICAgICAgICAgICAgdmFsdWUgPSBt Lmdyb3VwKDIpCj4gLSAgICAgICAgICAgIGlmIG5vdCBrZXkgaW4gZGVmaW5lczoKPiAtICAgICAg ICAgICAgICAgICAgICBkZWZpbmVzW2tleV0gPSBpbnQoZXZhbCh2YWx1ZSkpCj4gLSAgICAgICAg ICAgICAgICAgICAgcmV0ID0gMQo+IC0gICAgcmV0dXJuIHJldAo+IC0KPiAtI3JlcGxhY2UgbmFt ZXMgd2l0aCBkaWN0aW9uYXJ5IHZhbHVlcwo+IC1kZWYgc2ltcGxlX3JlcGxhY2UoKToKPiAtICAg IHJldCA9IDAKPiAtICAgIGZvciBsaW5lbm8sIHN0cmluZyBpbiBvdXQuaXRlbXMoKToKPiAtICAg ICAgICBpZiBza2lwKHN0cmluZyk6Cj4gLSAgICAgICAgICAgIGNvbnRpbnVlCj4gLSAgICAgICAg Zm9yIGtleSwgdmFsdWUgaW4gZGVmaW5lcy5pdGVtcygpOgo+IC0gICAgICAgICAgICBpZiBpc19k b25lKHN0cmluZyk6Cj4gLSAgICAgICAgICAgICAgICBjb250aW51ZQo+IC0gICAgICAgICAgICBz ID0gcmUuc3VibihrZXksIHJlcHIodmFsdWUpLCBzdHJpbmcpCj4gLSAgICAgICAgICAgIGlmIHNb MV0gPiAwOgo+IC0gICAgICAgICAgICAgICAgb3V0W2xpbmVub10gPSBzWzBdCj4gLSAgICAgICAg ICAgICAgICByZXQgPSBzWzFdCj4gLSAgICByZXR1cm4gcmV0Cj4gLQo+IC0jZXZhbHVhdGUgZXhw cmVzc2lvbnMgdG8gdHJ5IHRvIHNpbXBsaWZ5IHRoZW0KPiAtZGVmIGNvbGxhcHNlX2NvbnN0YW50 cygpOgo+IC0gICAgcmV0ID0gMAo+IC0gICAgZm9yIGxpbmVubywgc3RyaW5nIGluIG91dC5pdGVt cygpOgo+IC0gICAgICAgIGlmIHNraXAoc3RyaW5nKToKPiAtICAgICAgICAgICAgY29udGludWUK PiAtICAgICAgICBpZiBpc19kb25lKHN0cmluZyk6Cj4gLSAgICAgICAgICAgIGNvbnRpbnVlCj4g LSAgICAgICAgbSA9IHJlLm1hdGNoKCIjZGVmaW5lXHMrKC4rPylccysoLispJCIsIHN0cmluZykK PiAtICAgICAgICBpZiBtICE9IE5vbmU6Cj4gLSAgICAgICAgICAgIHRyeToKPiAtICAgICAgICAg ICAgICAgIG91dFtsaW5lbm9dID0gIiNkZWZpbmUgIiArIG0uZ3JvdXAoMSkgKyAiICIgKyByZXBy KGV2YWwobS5ncm91cCgyKSkpCj4gLSAgICAgICAgICAgICAgICByZXQgPSAxCj4gLSAgICAgICAg ICAgIGV4Y2VwdCBOYW1lRXJyb3IgYXMgbmU6Cj4gLSAgICAgICAgICAgICAgICAjdGhpcyBoYXBw ZW5zIGJlZm9yZSBhIHZhcmlhYmxlIGlzIHJlc29sdmVkIGluIHNpbXBsZV9yZXBsYWNlCj4gLSAg ICAgICAgICAgICAgICBjb250aW51ZQo+IC0gICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6 Cj4gLSAgICAgICAgICAgICAgICAjdGhpcyBoYXBwZW5zIHdpdGggc29tZXRoaW5nIGxpa2UgI2Rl ZmluZSBmb28gYmFyLCB3aGljaCB0aGUKPiAtICAgICAgICAgICAgICAgICNyZWd1bGFyIGNwcCBj YW4gaGFuZGxlCj4gLSAgICAgICAgICAgICAgICBjb250aW51ZQo+IC0gICAgICAgICAgICBleGNl cHQ6Cj4gLSAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAo+IC0gICAgcmV0 dXJuIHJldDsKPiAtCj4gLXdoaWxlIFRydWU6Cj4gLSAgICByZXQgPSAwCj4gLSAgICByZXQgKz0g ZWFzeV9jb25zdGFudHMoKQo+IC0gICAgcmV0ICs9IHNpbXBsZV9yZXBsYWNlKCkKPiAtICAgIHJl dCArPSBjb2xsYXBzZV9jb25zdGFudHMoKQo+IC0gICAgaWYgcmV0ID09IDA6Cj4gLSAgICAgICAg YnJlYWs7Cj4gLQo+IC1mb3IgbGluZW5vLCBzdHJpbmcgaW4gb3V0Lml0ZW1zKCk6Cj4gLSAgICBw cmludChzdHJpbmcucnN0cmlwKCkpCj4gZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0 aW5lL3NyLmc0YSBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YQo+IGRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IGE3MGU3NzEyLi4wMDAwMDAwMAo+IC0tLSBhL2RlYnVnZ2Vy L3N5c3RlbV9yb3V0aW5lL3NyLmc0YQo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwyNzcgKzAsMCBA QAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKgo+ IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+IC0gKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAtICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiAtICoKPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+IC0gKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCj4gLSAqIFNvZnR3YXJlLgo+IC0gKgo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+IC0g KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gLSAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAt ICogSU4gVEhFIFNPRlRXQVJFLgo+IC0gKgo+IC0gKiBBdXRob3JzOgo+IC0gKiAgICBCZW4gV2lk YXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gLSAqCj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgImRl YnVnLmgiCj4gLSNpbmNsdWRlICJldmljdC5oIgo+IC0KPiAtI2RlZmluZSBDUjBfMF9NRV9TVEFU RV9DVFJMICgxIDw8IDMxKQo+IC0jZGVmaW5lIENSMF8wX0JQX1NVUFBSRVNTICgxIDw8IDE1KQo+ IC0jZGVmaW5lIENSMF8wX1NQRl9FTiAoMSA8PCAyKQo+IC0jZGVmaW5lIENSMF8wX0FDQ19ESVMg KDEgPDwgMSkKPiAtI2RlZmluZSBDUjBfMV9CRVNfQ1RSTCAoMSA8PCAzMSkKPiAtI2RlZmluZSBD UjBfMV9IQUxUX0NUUkwgKDEgPDwgMzApCj4gLSNkZWZpbmUgQ1IwXzFfU09GVF9FWENFUFRJT05f Q1RSTCAoMSA8PCAyOSkKPiAtI2RlZmluZSBDUjBfMV9JTExHTF9PUF9TVFMgKDEgPDwgMjgpCj4g LSNkZWZpbmUgQ1IwXzFfU1RBQ0tfT1ZSRkxXX1NUUyAoMSA8PCAyNykKPiAtCj4gLSNkZWZpbmUg Q1IwXzBfRU5UUllfVU5NQVNLIChDUjBfMF9TUEZfRU4gfCBDUjBfMF9BQ0NfRElTKQo+IC0vLyBU T0RPOiBOZWVkIHRvIGZpeCB0aGlzIGZvciBub24gYnJlYWtwb2ludCBjYXNlCj4gLSNkZWZpbmUg Q1IwXzFfRU5UUllfVU5NQVNLIH4oQ1IwXzFfQkVTX0NUUkwpCj4gLSNkZWZpbmUgQ1IwXzBfUkVU VVJOX01BU0sgfihDUjBfMF9NRV9TVEFURV9DVFJMIHwgQ1IwXzBfU1BGX0VOIHwgQ1IwXzBfQUND X0RJUykKPiAtCj4gLS8vIFRPRE86IG5vdCBzdXJlIGhvdyB0byBtYWtlIHRoaXMgbm90IGhhcmRj b2RlZAo+IC0jZGVmaW5lIFBFUl9USFJFQURfU0NSQVRDSF9TSVpFICgxIDw8IDIwKQo+IC0jZGVm aW5lIFBFUl9USFJFQURfUVdPUkRTIChQRVJfVEhSRUFEX1NDUkFUQ0hfU0laRSA+PiA0KQo+IC0K PiAtLyogU2hvdWxkIGdldCB0aGlzIGZyb20gYnJ3X2RlZmluZXMuaCAqLwo+IC0jZGVmaW5lIEJS V19EQVRBUE9SVF9PV09SRF9CTE9DS18yX09XT1JEUyAgICAgCQkyCj4gLSNkZWZpbmUgQlJXX0RB VEFQT1JUX09XT1JEX0JMT0NLXzRfT1dPUkRTICAgICAJCTMKPiAtI2RlZmluZSBCUldfREFUQVBP UlRfT1dPUkRfQkxPQ0tfOF9PV09SRFMgICAgIAkJNAo+IC0jZGVmaW5lIEdFTjZfREFUQVBPUlRf V1JJVEVfTUVTU0FHRV9PV09SRF9CTE9DS19XUklURQk4Cj4gLSNkZWZpbmUgQlJXX0RBVEFQT1JU X1JFQURfTUVTU0FHRV9PV09SRF9CTE9DS19SRUFECTAKPiAtCj4gLS8qIGRlc2MgZmllbGQsIGll LiBkd29yZDMgNi4zLjY2LjIgYW5kIDIuMTEuMi4xLjQgKi8KPiAtI2RlZmluZSBTRU5EX01MRU5f NQkJKDU8PDI1KQo+IC0jZGVmaW5lIFNFTkRfTUxFTl8zCQkoMzw8MjUpCj4gLSNkZWZpbmUgU0VO RF9NTEVOXzIJCSgyPDwyNSkKPiAtI2RlZmluZSBTRU5EX01MRU5fMQkJKDE8PDI1KQo+IC0jZGVm aW5lIFNFTkRfUkxFTl8xCQkoMTw8MjApCj4gLSNkZWZpbmUgU0VORF9STEVOXzAJCSgwPDwyMCkK PiAtI2RlZmluZSBTRU5EX0hFQURFUl9QUkVTRU5UCSgxPDwxOSkKPiAtI2RlZmluZSBTRU5EX1dS SVRFX0NPTU1JVAkoMTw8MTcpCj4gLSNkZWZpbmUgU0VORF9UWVBFX1dSSVRFCShHRU42X0RBVEFQ T1JUX1dSSVRFX01FU1NBR0VfT1dPUkRfQkxPQ0tfV1JJVEU8PDEzKQo+IC0jZGVmaW5lIFNFTkRf VFlQRV9SRUFECShCUldfREFUQVBPUlRfUkVBRF9NRVNTQUdFX09XT1JEX0JMT0NLX1JFQUQ8PDEz KQo+IC0jZGVmaW5lIFNFTkRfQkxPQ0tfU0laRTEJKEJSV19EQVRBUE9SVF9PV09SRF9CTE9DS18y X09XT1JEUzw8OCkKPiAtI2RlZmluZSBTRU5EX0JMT0NLX1NJWkUyCShCUldfREFUQVBPUlRfT1dP UkRfQkxPQ0tfNF9PV09SRFM8PDgpCj4gLSNkZWZpbmUgU0VORF9CTE9DS19TSVpFNAkoQlJXX0RB VEFQT1JUX09XT1JEX0JMT0NLXzhfT1dPUkRTPDw4KQo+IC0jZGVmaW5lIFNFTkRfQklORElOR19U QUJMRQkoMjU1PDwwKQo+IC0vLyBObyB3cml0ZSBjb21taXQKPiAtI2RlZmluZSBXUklURV9ERVND MV9YWFggU0VORF9CSU5ESU5HX1RBQkxFIHwgU0VORF9CTE9DS19TSVpFMSB8IFNFTkRfVFlQRV9X UklURSB8IFNFTkRfSEVBREVSX1BSRVNFTlQgfCBTRU5EX01MRU5fMgo+IC0jZGVmaW5lIFdSSVRF X0RFU0MxX1dDIFNFTkRfQklORElOR19UQUJMRSB8IFNFTkRfQkxPQ0tfU0laRTEgfCBTRU5EX1RZ UEVfV1JJVEUgfCBTRU5EX0hFQURFUl9QUkVTRU5UIHwgU0VORF9NTEVOXzIgfCBTRU5EX1dSSVRF X0NPTU1JVAo+IC0jZGVmaW5lIFdSSVRFX0RFU0MyIFNFTkRfQklORElOR19UQUJMRSB8IFNFTkRf QkxPQ0tfU0laRTIgfCBTRU5EX1RZUEVfV1JJVEUgfCBTRU5EX0hFQURFUl9QUkVTRU5UIHwgU0VO RF9NTEVOXzMKPiAtI2RlZmluZSBXUklURV9ERVNDNCBTRU5EX0JJTkRJTkdfVEFCTEUgfCBTRU5E X0JMT0NLX1NJWkU0IHwgU0VORF9UWVBFX1dSSVRFIHwgU0VORF9IRUFERVJfUFJFU0VOVCB8IFNF TkRfTUxFTl81Cj4gLSNkZWZpbmUgUkVDVl9ERVNDMSBTRU5EX0JJTkRJTkdfVEFCTEUgfCBTRU5E X0JMT0NLX1NJWkUxIHwgU0VORF9UWVBFX1JFQUQgfCBTRU5EX0hFQURFUl9QUkVTRU5UIHwgU0VO RF9NTEVOXzEgfCBTRU5EX1JMRU5fMQo+IC0vLyNkZWZpbmUgU0VORF9ERVNDMSAweDQwOTAyRkYK PiAtI2RlZmluZSBTRU5EX0RFU0MxX1dDIDB4NDBiMDJGRgo+IC0KPiAtLyogZXhfZGVzYyBmaWVs ZCA2LjMuNjYuMiAqLwo+IC0jZGVmaW5lIFNFTkRfRFBfUkVOREVSX0NBQ0hFCSg1PDwwKQo+IC0j ZGVmaW5lIFNFTkRfRU9UCQkoMTw8NSkKPiAtI2RlZmluZSBTRU5EX0VYX0RFU0MgU0VORF9EUF9S RU5ERVJfQ0FDSEUKPiAtCj4gLS8qKgo+IC0gKiBXUklURV9TQ1JBVENIMSAtIFdyaXRlIDIgb3dv cmRzLgo+IC0gKiBjZHN0LjIgLSBvZmZzZXQKPiAtICogY2RzdC41IC0gcGVyIHRocmVhZCBzY3Jh dGNoIGJhc2UsIHJlbGF0aXZlIHRvIGdzYmE/Pwo+IC0gKiBjZHN0KzEgLSBkYXRhIHRvIGJlIHdy aXR0ZW4uCj4gLSAqLwo+IC0jZGVmaW5lIFdSSVRFX1NDUkFUQ0gxKGNkc3QpIFwKPiAtCXNlbmQg KDE2KSBudWxsIGNkc3QgU0VORF9FWF9ERVNDIFdSSVRFX0RFU0MxX1hYWCBGTEFHUwo+IC0jZGVm aW5lIFdSSVRFX1NDUkFUQ0gxX1dDKGNkc3QpIFwKPiAtCXNlbmQgKDE2KSBnMSBjZHN0IFNFTkRf RVhfREVTQyBXUklURV9ERVNDMV9XQyBGTEFHUwo+IC0jZGVmaW5lIFdSSVRFX1NDUkFUQ0gyKGNk c3QpIFwKPiAtCXNlbmQgKDE2KSBudWxsIGNkc3QgU0VORF9FWF9ERVNDIFdSSVRFX0RFU0MyIEZM QUdTCj4gLSNkZWZpbmUgV1JJVEVfU0NSQVRDSDQoY2RzdCkgXAo+IC0Jc2VuZCAoMTYpIG51bGwg Y2RzdCBTRU5EX0VYX0RFU0MgV1JJVEVfREVTQzQgRkxBR1MKPiAtCj4gLS8qKgo+IC0gKiBSRUFE X1NDUkFUQ0gxIC0gUmVhZCAyIG93b3Jkcy4KPiAtICogY2RzdC4yIC0gb2Zmc2V0Cj4gLSAqIGNk c3QuNSAtIHBlciB0aHJlYWQgc2NyYXRjaCBiYXNlLCByZWxhdGl2ZSB0byBnc2JhPz8KPiAtICog Z3JmIC0gcmVnaXN0ZXIgd2hlcmUgcmVhZCBkYXRhIGlzIHBvcHVsYXRlZC4KPiAtICovCj4gLSNk ZWZpbmUgUkVBRF9TQ1JBVENIMShncmYsIGNkc3QpIFwKPiAtCXNlbmQgKDE2KSBncmY6dWQgY2Rz dCBTRU5EX0VYX0RFU0MgUkVDVl9ERVNDMSBGTEFHUwo+IC0KPiAtLyoqCj4gLSAqIFNFVF9PRkZT RVQgLSBzZXR1cCBtcmYgZm9yIHRoZSBnaXZlbiBvZmZzZXQgcHJpb3IgdG8gYSBzZW5kIGluc3Ry dWN0aW9uLgo+IC0gKiBtcmYgLSBtZXNzYWdlIHJlZ2lzdGVyIHRvIGJlIHVzZWQgYXMgdGhlIGhl YWRlci4KPiAtICogb2Zmc2V0IC0gb2Zmc2V0Lgo+IC0gKgo+IC0gKiBJZiBhIFdSSVRFX1NDUkFU Q0ggZm9sbG93cywgbXJmKzEgLT4gbXJmKzErbiBzaG91bGQgY29udGFpbiB0aGUgZGF0YSB0byBi ZQo+IC0gKiB3cml0dGVuLgo+IC0gKi8KPiAtI2RlZmluZSBTRVRfT0ZGU0VUKG1yZiwgb2Zmc2V0 KSBcCj4gLQltb3YgKDEpIG1yZi41OnVkIGcwLjU6dWQgRkxBR1M7IFwKPiAtCW1vdiAoMSkgbXJm LjI6dWQgb2Zmc2V0OnVkIEZMQUdTCj4gLQo+IC0vKioKPiAtICogU0FWRV9DUkYgLSBzYXZlIHRo ZSBjb250cm9sIHJlZ2lzdGVyCj4gLSAqIGNsb2JiZXJzOiBtMC4yLCBtMC41Cj4gLSAqLwo+IC0j ZGVmaW5lIENSX09GRlNFVCAweDQwCj4gLSNkZWZpbmUgU0FWRV9DUkYgXAo+IC0JU0VUX09GRlNF VChtMCwgQ1JfT0ZGU0VUKTsgXAo+IC0JbW92ICg4KSBtMTp1ZCAweGRlYWRiZWVmOnVkIEZMQUdT OyBcCj4gLQltb3YgKDEpIG0xLjA6dWQgY3IwLjAgRkxBR1M7IFwKPiAtCW1vdiAoMSkgbTEuMTp1 ZCBjcjAuMSBGTEFHUzsgXAo+IC0JbW92ICgxKSBtMS4yOnVkIGNyMC4yIEZMQUdTOyBcCj4gLQlt b3YgKDEpIG0xLjM6dWQgc3IwOnVkIEZMQUdTOyBcCj4gLQlXUklURV9TQ1JBVENIMShtMCkKPiAt Cj4gLS8qCj4gLSAqIGNsb2JiZXJzOiBtMC4yLCBtMC41Cj4gLSAqLwo+IC0jZGVmaW5lIFNUT1JF X0dSRihncmYsIG9mZnNldCkgXAo+IC0JU0VUX09GRlNFVChtMCwgb2Zmc2V0KTsgXAo+IC0JbW92 ICg4KSBtMTp1ZCBncmY6dWQgRkxBR1M7IFwKPiAtCVdSSVRFX1NDUkFUQ0gxKG0wKQo+IC0KPiAt LyoKPiAtICogY2xvYmJlcnM6IG0wLjIsIG0wLjUKPiAtICovCj4gLSNkZWZpbmUgTE9BRF9HUkYo Z3JmLCBvZmZzZXQpIFwKPiAtCVNFVF9PRkZTRVQobTAsIG9mZnNldCk7IFwKPiAtCVJFQURfU0NS QVRDSDEoZ3JmLCBtMCkKPiAtCj4gLS8qCj4gLSAqIGNsb2JiZXJzOiBtcmYuMiBtcmYuNQo+IC0g Ki8KPiAtI2RlZmluZSBTVE9SRV9NUkYobXJmLCBvZmZzZXQpIFwKPiAtCVNFVF9PRkZTRVQobXJm LCBvZmZzZXQpOyBcCj4gLQlXUklURV9TQ1JBVENIMShtcmYpCj4gLQo+IC0vKgo+IC0gKiBub24t cXVpcmt5IHNlbWFudGljcywgdW5saWtlIFNUT1JFX01SRgo+IC0gKiBjbG9iYmVyczogZzEKPiAt ICovCj4gLSNkZWZpbmUgTE9BRF9NUkYobXJmLCBvZmZzZXQpIFwKPiAtCUxPQURfR1JGKGcxLCBv ZmZzZXQpOyBcCj4gLQltb3YgKDgpIG1yZjp1ZCBnMTp1ZCBGTEFHUwo+IC0KPiAtI2RlZmluZSBT QVZFX0FMTF9NUkYgXAo+IC0JLyogbTEgaXMgc2F2ZWQgYWxyZWFkeSAqLyBcCj4gLQlTVE9SRV9N UkYobTEsIDB4Mik7IFwKPiAtCVNUT1JFX01SRihtMiwgMHg0KTsgXAo+IC0JU1RPUkVfTVJGKG0z LCAweDYpOyBcCj4gLQlTVE9SRV9NUkYobTQsIDB4OCk7IFwKPiAtCVNUT1JFX01SRihtNSwgMHhh KTsgXAo+IC0JU1RPUkVfTVJGKG02LCAweGMpOyBcCj4gLQlTVE9SRV9NUkYobTcsIDB4ZSk7IFwK PiAtCVNUT1JFX01SRihtOCwgMHgxMCk7IFwKPiAtCVNUT1JFX01SRihtOSwgMHgxMik7IFwKPiAt CVNUT1JFX01SRihtMTAsIDB4MTQpOyBcCj4gLQlTVE9SRV9NUkYobTExLCAweDE2KTsgXAo+IC0J U1RPUkVfTVJGKG0xMiwgMHgxOCk7IFwKPiAtCVNUT1JFX01SRihtMTMsIDB4MWEpOyBcCj4gLQlT VE9SRV9NUkYobTE0LCAweDFjKQo+IC0KPiAtI2RlZmluZSBSRVNUT1JFX0FMTF9NUkYgXAo+IC0J TE9BRF9NUkYobTE1LCAweDFjKTsgXAo+IC0JTE9BRF9NUkYobTE0LCAweDFhKTsgXAo+IC0JTE9B RF9NUkYobTEzLCAweDE4KTsgXAo+IC0JTE9BRF9NUkYobTEyLCAweDE2KTsgXAo+IC0JTE9BRF9N UkYobTExLCAweDE0KTsgXAo+IC0JTE9BRF9NUkYobTEwLCAweDEyKTsgXAo+IC0JTE9BRF9NUkYo bTksIDB4MTApOyBcCj4gLQlMT0FEX01SRihtOCwgMHhlKTsgXAo+IC0JTE9BRF9NUkYobTcsIDB4 Yyk7IFwKPiAtCUxPQURfTVJGKG02LCAweGEpOyBcCj4gLQlMT0FEX01SRihtNSwgMHg4KTsgXAo+ IC0JTE9BRF9NUkYobTQsIDB4Nik7IFwKPiAtCUxPQURfTVJGKG0zLCAweDQpOyBcCj4gLQlMT0FE X01SRihtMiwgMHgyKTsgXAo+IC0JTE9BRF9NUkYobTEsIDB4MCkKPiAtCj4gLSNpZm5kZWYgU0FO RFlCUklER0UKPiAtCSNlcnJvciBPbmx5IFNhbmR5QnJpZGdlIGlzIHN1cHBvcnRlZAo+IC0jZW5k aWYKPiAtCj4gLS8qIERlZmF1bHQgZmxhZ3MgZm9yIGFuIGluc3RydWN0aW9uICovCj4gLSNkZWZp bmUgRkxBR1MgeyBBTElHTjEsIFNXSVRDSCwgTUFTS19ESVNBQkxFLCBBQ0NXUkNUUkx9Cj4gLQo+ IC0vKgo+IC0gKiBXZSBjYW4gY2xvYmJlciBtMCwgYW5kIGcwLjQsIGV2ZXJ5dGhpbmcgZWxzZSBt dXN0IGJlIHNhdmVkLgo+IC0gKi8KPiAtRW50ZXI6Cj4gLQlub3A7Cj4gLQo+IC0Jb3IgKDEpIGNy MC4wIGNyMC4wIENSMF8wX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKPiAtCj4gLQkvKgo+IC0JICog ZzAuNSBoYXMgdGhlIHBlciB0aHJlYWQgc2NyYXRjaCBzcGFjZSB3aGVuIHJ1bm5pbmcgaW4gRlMg b3IgVlMuCj4gLQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgZzAuNSwgd2UgY2FuIGNhbGN1 bGF0ZSBhIHBlciB0aHJlYWQgc2NyYXRjaCBvZmZzZXQKPiAtCSAqIHVzaW5nIHRoZSBzeXN0ZW0g cmVnaXN0ZXJzLiBUaGUgcHJvYmxlbSBpcyB3ZSBkbyBub3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGtu b3cKPiAtCSAqIHRoZSBvZmZzZXQgZnJvbSBHU0JBLiBUaGUgc3lzdGVtIHJvdXRpbmUgd2lsbCBo YXZlIHRvIGJlIGhhcmRjb2RlZCBvcgo+IC0JICogZHluYW1pY2FsbHkgcGF0Y2hlZCB3aXRoIHRo ZSBjb3JyZWN0IG9mZnNldC4KPiAtCSAqIFRJRCBpcyBpbiBzcjAuMFsyOjBdCj4gLQkgKiBFVUlE IGlzIGluIHNyMC4wWzExOjhdCj4gLQkgKi8KPiAtCj4gLSNpZmRlZiBHUEdQVQo+IC0JbW92ICgx KSBnMC40OnVkIDA6dWQJCQkJRkxBR1M7Cj4gLSNpZiAwCj4gLQkvKiBUaGlzIHNob3VsZCB3b3Jr IGFjY29yZGluZyB0byB0aGUgZG9jcywgdGhlIGFkZCBibG93cyB1cCAqLwo+IC0Jc2hyICgxKSBn MC44OnV3IHNyMC4wOnV3IDUJCQlGTEFHUzsKPiAtCWFkZCAoMSkgZzAuMTY6dWIgZ3IwLjE2OnVi IHNyMC4wOnViCQlGTEFHUzsKPiAtI2Vsc2UKPiAtCXNociAoMSkgZzAuODp1dyBzcjAuMDp1dyA1 CQkJRkxBR1M7Cj4gLQltb3YgKDEpIGcwLjk6dXcgc3IwLjA6dXcJCQlGTEFHUzsKPiAtCWFuZCAo MSkgZzAuOTp1dyBnMC45OnV3IDB4Nzp1dwkJCUZMQUdTOwo+IC0JYWRkICgxKSBnMC44OnV3IGcw Ljg6dXcgZzAuOTp1dwkJCUZMQUdTOwo+IC0JbW92ICgxKSBnMC45OnV3IDA6dXcJCQkJRkxBR1M7 Cj4gLQltdWwgKDEpIGcwLjQ6dWQgZzAuNDp1ZCBQRVJfVEhSRUFEX1FXT1JEUwlGTEFHUzsKPiAt I2VuZGlmCj4gLSNlbmRpZgo+IC0KPiAtCW1vdiAoOCkgbTA6dWQgMDp1ZCBGTEFHUzsKPiAtCj4g LQkvKiBTYXZlcyBtdXN0IG9jY3VyIGluIG9yZGVyIHNvIGFzIG5vdCB0byBjbG9iYmVyIHRoZSBu ZXh0IHJlZ2lzdGVyICovCj4gLQlTVE9SRV9NUkYobTAsIDApOwo+IC0JU1RPUkVfR1JGKGcwLCAw eDIwKTsKPiAtCVNUT1JFX0dSRihnMSwgMHgyMik7Cj4gLQlTQVZFX0FMTF9NUkY7Cj4gLQo+IC0J bW92ICg4KSBnMTp1ZCBTVEFURV9FVV9NU0c6dWQgRkxBR1M7Cj4gLQlTVE9SRV9HUkYoZzEsIFNU QVRFX1FXT1JEKTsKPiAtCj4gLQltb3YgKDgpIGcxOnVkIERFQlVHX1BST1RPQ09MX1ZFUlNJT046 dWQgRkxBR1M7Cj4gLQlTVE9SRV9HUkYoZzEsIENPTU1VTklDQVRJT05fUVdPUkQpOwo+IC0KPiAt CVNBVkVfQ1JGOwo+IC0KPiAtCUVWSUNUX0NBQ0hFOwo+IC0Jd2FpdCBuMTp1ZDsKPiAtCUVWSUNU X0NBQ0hFOwo+IC0KPiAtCS8qIFVzaW5nIHRoaXMgdG8gdHJ5IHRvIGtlZXAgY29oZXJlbmN5ICov Cj4gLQlMT0FEX0dSRihnMSwgQ1JfT0ZGU0VUKTsKPiAtCUxPQURfR1JGKGcxLCBDT01NVU5JQ0FU SU9OX1FXT1JEKTsKPiAtCUxPQURfR1JGKGcxLCBTVEFURV9RV09SRCk7Cj4gLQo+IC0JUkVTVE9S RV9BTExfTVJGOwo+IC0JTE9BRF9HUkYoZzEsIDB4MjIpOwo+IC0JTE9BRF9HUkYoZzAsIDB4MjAp Owo+IC0KPiAtCS8qIENsZWFyIGJyZWFrcG9pbnQgc3RhdHVzICovCj4gLQlhbmQgKDEpIGNyMC4x IGNyMC4xIENSMF8xX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKPiAtCj4gLQkvKiBzZXQgYnJlYWtw b2ludCBzdXBwcmVzcyB0aGlzIHNob3VsZCBiZSBjb25kaXRpb25hbCBvbiBiZXMgKi8KPiAtCW9y ICAoMSkgY3IwLjAgY3IwLjAgQ1IwXzBfQlBfU1VQUFJFU1M6dWQgRkxBR1M7Cj4gLQo+IC0JYW5k ICgxKSBjcjAuMCBjcjAuMCBDUjBfMF9SRVRVUk5fTUFTSzp1ZCBGTEFHUzsKPiAtCW5vcDsKPiBk aWZmIC0tZ2l0IGEvZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvdGVzdC5nNGEgYi9kZWJ1Z2dlci9z eXN0ZW1fcm91dGluZS90ZXN0Lmc0YQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IGU0Mjk2ZTAxLi4wMDAwMDAwMAo+IC0tLSBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3Rlc3Qu ZzRhCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDY0ICswLDAgQEAKPiAtLyoKPiAtICogQ29weXJp Z2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KPiAtICoKPiAtICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+IC0gKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiAtICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSAqCj4g LSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+IC0gKiBTb2Z0d2Fy ZS4KPiAtICoKPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAtICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+IC0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+IC0gKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+IC0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gLSAqIElOIFRIRSBTT0ZUV0FSRS4K PiAtICoKPiAtICogQXV0aG9yczoKPiAtICogICAgQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2su bmV0Pgo+IC0gKgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJkZWJ1Zy5oIgo+IC0KPiAtI2RlZmlu ZSBDUjBfMF9NRV9TVEFURV9DVFJMICgxIDw8IDMxKQo+IC0jZGVmaW5lIENSMF8wX0JQX1NVUFBS RVNTICgxIDw8IDE1KQo+IC0jZGVmaW5lIENSMF8wX1NQRl9FTiAoMSA8PCAyKQo+IC0jZGVmaW5l IENSMF8wX0FDQ19ESVMgKDEgPDwgMSkKPiAtI2RlZmluZSBDUjBfMV9CRVNfQ1RSTCAoMSA8PCAz MSkKPiAtI2RlZmluZSBDUjBfMV9IQUxUX0NUUkwgKDEgPDwgMzApCj4gLSNkZWZpbmUgQ1IwXzFf U09GVF9FWENFUFRJT05fQ1RSTCAoMSA8PCAyOSkKPiAtI2RlZmluZSBDUjBfMV9JTExHTF9PUF9T VFMgKDEgPDwgMjgpCj4gLSNkZWZpbmUgQ1IwXzFfU1RBQ0tfT1ZSRkxXX1NUUyAoMSA8PCAyNykK PiAtCj4gLSNkZWZpbmUgQ1IwXzBfRU5UUllfVU5NQVNLIChDUjBfMF9TUEZfRU4gfCBDUjBfMF9B Q0NfRElTKQo+IC0vLyBUT0RPOiBOZWVkIHRvIGZpeCB0aGlzIGZvciBub24gYnJlYWtwb2ludCBj YXNlCj4gLSNkZWZpbmUgQ1IwXzFfRU5UUllfVU5NQVNLIH4oQ1IwXzFfQkVTX0NUUkwpCj4gLSNk ZWZpbmUgQ1IwXzBfUkVUVVJOX01BU0sgfihDUjBfMF9NRV9TVEFURV9DVFJMIHwgQ1IwXzBfU1BG X0VOIHwgQ1IwXzBfQUNDX0RJUykKPiAtCj4gLSNpZm5kZWYgU0FORFlCUklER0UKPiAtCSNlcnJv ciBPbmx5IFNhbmR5QnJpZGdlIGlzIHN1cHBvcnRlZAo+IC0jZW5kaWYKPiAtCj4gLS8qIERlZmF1 bHQgZmxhZ3MgZm9yIGFuIGluc3RydWN0aW9uICovCj4gLSNkZWZpbmUgRkxBR1MgeyBBTElHTjEs IFNXSVRDSCwgTUFTS19ESVNBQkxFLCBBQ0NXUkNUUkx9Cj4gLQo+IC1FbnRlcjoKPiAtCW5vcDsK PiAtCj4gLQlvciAoMSkgY3IwLjAgY3IwLjAgQ1IwXzBfRU5UUllfVU5NQVNLOnVkIEZMQUdTOwo+ IC0KPiAtCS8qIENsZWFyIGJyZWFrcG9pbnQgc3RhdHVzICovCj4gLQlhbmQgKDEpIGNyMC4xIGNy MC4xIENSMF8xX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKPiAtCj4gLQkvKiBzZXQgYnJlYWtwb2lu dCBzdXBwcmVzcyB0aGlzIHNob3VsZCBiZSBjb25kaXRpb25hbCBvbiBiZXMgKi8KPiAtCW9yICAo MSkgY3IwLjAgY3IwLjAgQ1IwXzBfQlBfU1VQUFJFU1M6dWQgRkxBR1M7Cj4gLQo+IC0JYW5kICgx KSBjcjAuMCBjcjAuMCBDUjBfMF9SRVRVUk5fTUFTSzp1ZCBGTEFHUzsKPiAtCW5vcDsKPiAtLSAK PiAyLjIwLjEKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2