From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH i-g-t v4] tools: Add intel_dp_compliance for DisplayPort 1.2 compliance automation Date: Tue, 24 Jan 2017 09:51:58 -0800 Message-ID: <20170124175158.GA17592@intel.com> References: <1485226133-16233-1-git-send-email-manasi.d.navare@intel.com> <20170124094948.okps5hqkexwaqr6d@platvala-desk.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 78DFA6E842 for ; Tue, 24 Jan 2017 17:53:11 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20170124094948.okps5hqkexwaqr6d@platvala-desk.ger.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Petri Latvala Cc: intel-gfx@lists.freedesktop.org, Dhinakaran Pandiyan , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKYW4gMjQsIDIwMTcgYXQgMTE6NDk6NDhBTSArMDIwMCwgUGV0cmkgTGF0dmFsYSB3 cm90ZToKPiAKPiBKdXN0IG9uZSBtb3JlIG5pdHBpY2sgKGluIHR3byBwYXJ0cykgYmVsb3cuIFdp dGggdGhhdCwgeW91IGNhbgo+IGNvbnNpZGVyIHRoaXMgbm93IHRvIGJlCj4gCj4gUmV2aWV3ZWQt Ynk6IFBldHJpIExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgo+IAo+IFRoaXMgcGF0 Y2ggY2FuIGJlIHB1c2hlZCB3aGVuIHRoZSBrZXJuZWwgY2hhbmdlcyB0aGF0IGNvbnRhaW4gIm11 c3QgYmUKPiBrZXB0IGluIHN5bmMiIG51bWJlcnMgaW4gaW50ZWxfZHBfY29tcGxpYW5jZS5jIGhh dmUgbGFuZGVkIChhbmQgaGF2ZQo+IGJlZW4gZG91YmxlLWNoZWNrZWQgdG8gbWF0Y2gpLgo+IAo+ IAo+IC0tCj4gUGV0cmkgTGF0dmFsYQo+IAo+CgpUaGFua3MgZm9yIHRoZSByZXZpZXcuClRoZSBj aGFuZ2VzIHRoYXQgY29udGFpbiAibXVzdCBiZSBrZXB0IGluIHN5bmMiIGhhdmUgYWxyZWFkeSBi ZWVuIGRvdWJsZSBjaGVja2VkCmFuZCB0ZXN0ZWQgd2l0aCB0aGlzIHRvb2wuIFRoZXNlIGNoYW5n ZXMgYXJlIGFscmVhZHkgcGFydCBvZiB0aGUgaTkxNSBrZXJuZWwKZGVmaW5lZCBpbiBkcm1fZHAt aGVscGVyLmguClNvIHdlIGFyZSBnb29kIHRvIGdvIQoKUmVnYXJkcwpNYW5hc2kKCiAKPiBPbiBN b24sIEphbiAyMywgMjAxNyBhdCAwNjo0ODo1M1BNIC0wODAwLCBNYW5hc2kgTmF2YXJlIHdyb3Rl Ogo+ID4gRnJvbTogIk5hdmFyZSwgTWFuYXNpIEQiIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29t Pgo+ID4gCj4gPiBUaGlzIGlzIHRoZSB1c2Vyc3BhY2UgY29tcG9uZW50IG9mIHRoZSBEaXNwbGF5 cG9ydCBDb21wbGlhbmNlCj4gPiB0ZXN0aW5nIHNvZnR3YXJlIHJlcXVpcmVkIGZvciBjb21wbGlh bmNlIHRlc3Rpbmcgb2YgdGhlIEk5MTUKPiA+IERpc3BsYXkgUG9ydCBkcml2ZXIuIFRoaXMgbXVz dCBiZSBydW5uaW5nIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseQo+ID4gY29tcGxldGUgRGlzcGxh eSBQb3J0IGNvbXBsaWFuY2UgdGVzdGluZy4gVGhpcyBhcHAgYW5kIHRoZSBrZXJuZWwKPiA+IGNv ZGUgdGhhdCBhY2NvbXBhbmllcyBpdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNhdGlmeSB0aGUgcmVx dWlyZW1lbnRzCj4gPiBvZiB0aGUgRGlzcGxheXBvcnQgTGluayBDVFMgMS4yIHJldjEuMSBzcGVj aWZpY2F0aW9uIGZyb20gVkVTQS4KPiA+IE5vdGUgdGhhdCB0aGlzIGFwcGxpY2F0aW9uIGRvZXMg bm90IHN1cHBvcnQgZURQIGNvbXBsaWFuY2UgdGVzdGluZy4KPiA+IFRoaXMgdXRpbGl0eSBoYXMg YW4gYXV0b21hdGlvbiBzdXBwb3J0IGZvciB0aGUgTGluayB0cmFpbmluZyB0ZXN0cwo+ID4gKDQu My4xLjEuIC0gNC4zLjIuMyksIEVESUQgdGVzdHMgKDQuMi4yLjMKPiA+IC0gNC4yLjIuNikgYW5k IFZpZGVvIFBhdHRlcm4gZ2VuZXJhdGlvbiB0ZXN0cyAoNC4zLjMuMSkgZnJvbSBDVFMKPiA+IHNw ZWNpZmljYXRpb24gMS4yIFJldiAxLjEuCj4gPiAKPiA+IFRoaXMgdG9vbCBoYXMgdGhlIHN1cHBv cnQgZm9yIHJlc3BvbmRpbmcgdG8gdGhlIGhvdHBsdWcgdWV2ZW50cwo+ID4gc2VudCBieSBjb21w bGlhbmNlIHRlc3R0aW5nIHVuaXQgYWZ0ZXIgZWFjaCB0ZXN0Lgo+ID4gCj4gPiBUaGUgTGludXgg RFVUIHJ1bm5pbmcgdGhpcyB1dGlsaXR5IG11c3QgYmUgaW4gdGV4dCAoY29uc29sZSkgbW9kZQo+ ID4gYW5kIGNhbm5vdCBoYXZlIGFueSBvdGhlciBkaXNwbGF5IG1hbmFnZXIgcnVubmluZy4gU2lu Y2UgdGhpcyB1c2VzCj4gPiBzeXNmcyBub2RlcyBmb3Iga2VybmVsIGludGVyYWN0aW9uLCB0aGlz IHV0aWxpdHkgc2hvdWxkIGJlIHJ1biBhcwo+ID4gUm9vdC4gT25jZSB0aGlzIHVzZXIgYXBwbGlj YXRpb24gaXMgdXAgYW5kIHJ1bm5pbmcsIHdhaXRpbmcgZm9yCj4gPiB0ZXN0IHJlcXVlc3RzLCB0 aGUgdGVzdCBhcHBsaWFuY2Ugc29mdHdhcmUgb24gdGhlIHdpbmRvd3MgaG9zdAo+ID4gY2FuIG5v dyBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGNvbXBsaWFuY2UgdGVzdHMuCj4gPiAKPiA+IFRoaXMg YXBwIGlzIGJhc2VkIG9uIHNvbWUgcHJpb3Igd29yayBkb25lIGluIEFwcmlsIDIwMTUgKGJ5Cj4g PiBUb2RkIFByZXZpdGUgPHRwcmV2aXRlQGdtYWlsLmNvbT4pCj4gPiAKPiA+IHYyOgo+ID4gKiBB ZGQgbW9kZSB1bnNldCBvbiBob3RwbHVnIHVldmVudCBvbiBkaXNjb25uZWN0IChNYW5hc2kgTmF2 YXJlKQo+ID4gCj4gPiB2MzoKPiA+IE1hZGUgY2FwaXRhbGl6YXRpb24gY29uc2lzdGVudAo+ID4g UmVkdWNlZCBsaW5lIGxlbmd0aHMKPiA+IEFkZGVkIHJldHVybiB2YWx1ZSBjaGVja3MKPiA+IENo YW5nZWQgaG93IEdMaWIgaXMgbGlua2VkCj4gPiBGaXhlZCBidWlsZCB3YXJuaW5ncwo+ID4gCj4g PiB2NDoKPiA+ICogQ29uZGl0aW9uYWxseSBidWlsZCB0aGlzIHRvb2wgaWYgVURFViBpcyBwcmVz ZW50IChQZXRyaSBMYXR2YWxhKQo+ID4gKiBpZ3Rfd2FybiBhbmQgaW5mbyBjbGVhbnVwIHRvIHJl bW92ZSBccgo+ID4gKiBBZGQgaW50ZWxfZHBfY29tcGxpYW5jZSB0byB0b29scy8uZ2l0aWdub3Jl Cj4gPiAqIENoYW5nZSB0aGUgeWVhciBpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyB0byBjdXJyZW50 IChQZXRyaSBMYXR2YWxhKQo+ID4gCj4gPiBDYzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFs YUBpbnRlbC5jb20+Cj4gPiBDYzogTWFyaXVzIFZsYWQgPG1hcml1cy5jLnZsYWRAaW50ZWwuY29t Pgo+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiBTaWdu ZWQtb2ZmLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4g U2lnbmVkLW9mZi1ieTogRGhpbmFrYXJhbiBQYW5kaXlhbiA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBp bnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwo+ID4gIHRvb2xzLy5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCj4gPiAgdG9vbHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgICA2ICstCj4g PiAgdG9vbHMvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICAgfCAgICA2ICsKPiA+ICB0b29s cy9pbnRlbF9kcF9jb21wbGlhbmNlLmMgICAgICAgICB8IDExMDQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiA+ICB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmggICAgICAg ICB8ICAgMzUgKysKPiA+ICB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNlX2hvdHBsdWcuYyB8ICAx MjQgKysrKwo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMTI3NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2Uu Ywo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmgKPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMK PiA+IAo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwo+ID4gaW5k ZXggNDExYmZhYi4uZDI2ODE0MCAxMDA2NDQKPiA+IC0tLSBhL2NvbmZpZ3VyZS5hYwo+ID4gKysr IGIvY29uZmlndXJlLmFjCj4gPiBAQCAtMTY0LDYgKzE2NCw3IEBAIFBLR19DSEVDS19NT0RVTEVT KFhSQU5EUiwgeHJhbmRyID49IDEuMywgQUNfREVGSU5FKEhBVkVfWFJBTkRSLCAxLCBbSGF2ZSBs aWJYcmFuCj4gPiAgIyBmb3IgdGVzdGRpc3BsYXkKPiA+ICBQS0dfQ0hFQ0tfTU9EVUxFUyhDQUlS TywgW2NhaXJvID49IDEuMTIuMF0pCj4gPiAgUEtHX0NIRUNLX01PRFVMRVMoTElCVURFViwgW2xp YnVkZXZdLCBbdWRldj15ZXNdLCBbdWRldj1ub10pCj4gPiArQU1fQ09ORElUSU9OQUwoSEFWRV9V REVWLCBbdGVzdCAieCR1ZGV2IiA9IHh5ZXNdKQo+ID4gIGlmIHRlc3QgeCIkdWRldiIgPSB4eWVz OyB0aGVuCj4gPiAgCUFDX0RFRklORShIQVZFX1VERVYsMSxbRW5hYmxlIHVkZXYtYmFzZWQgbW9u aXRvciBob3RwbHVnIGRldGVjdGlvbl0pCj4gPiAgZmkKPiA+IGRpZmYgLS1naXQgYS90b29scy8u Z2l0aWdub3JlIGIvdG9vbHMvLmdpdGlnbm9yZQo+ID4gaW5kZXggMTM4MjVhMy4uOWJiODg5ZiAx MDA2NDQKPiA+IC0tLSBhL3Rvb2xzLy5naXRpZ25vcmUKPiA+ICsrKyBiL3Rvb2xzLy5naXRpZ25v cmUKPiA+IEBAIC04LDYgKzgsNyBAQCBpbnRlbF9iaW9zX2R1bXBlcgo+ID4gIGludGVsX2Jpb3Nf cmVhZGVyCj4gPiAgaW50ZWxfZGlzcGxheV9jcmMKPiA+ICBpbnRlbF9kaXNwbGF5X3BvbGxlcgo+ ID4gK2ludGVsX2RwX2NvbXBsaWFuY2UKPiA+ICBpbnRlbF9kdW1wX2RlY29kZQo+ID4gIGludGVs X2Vycm9yX2RlY29kZQo+ID4gIGludGVsX2Zpcm13YXJlX2RlY29kZQo+ID4gZGlmZiAtLWdpdCBh L3Rvb2xzL01ha2VmaWxlLmFtIGIvdG9vbHMvTWFrZWZpbGUuYW0KPiA+IGluZGV4IDE4Zjg2ZjYu LjM2Mzk0NWQgMTAwNjQ0Cj4gPiAtLS0gYS90b29scy9NYWtlZmlsZS5hbQo+ID4gKysrIGIvdG9v bHMvTWFrZWZpbGUuYW0KPiA+IEBAIC03LDYgKzcsMTEgQEAgYmluX1BST0dSQU1TICs9ICQoTElC RFJNX0lOVEVMX0JJTikKPiA+ICBpbnRlbF9lcnJvcl9kZWNvZGVfTERGTEFHUyA9IC1sego+ID4g IGVuZGlmCj4gPiAgCj4gPiAraWYgSEFWRV9VREVWCj4gPiArYmluX1BST0dSQU1TICs9IGludGVs X2RwX2NvbXBsaWFuY2UKPiA+ICtpbnRlbF9kcF9jb21wbGlhbmNlX0xEQUREID0gJCh0b3BfYnVp bGRkaXIpL2xpYi9saWJpbnRlbF90b29scy5sYSAkKEdMSUJfTElCUykKPiA+ICtlbmRpZgo+ID4g Kwo+ID4gIFNVQkRJUlMgPSBudWxsX3N0YXRlX2dlbiByZWdpc3RlcnMKPiA+ICAKPiA+ICBBTV9D UFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvbGliCj4gPiBAQCAtMTYs NyArMjEsNiBAQCBBTV9DRkxBR1MgPSAkKERFQlVHX0NGTEFHUykgJChEUk1fQ0ZMQUdTKSAkKFBD SUFDQ0VTU19DRkxBR1MpICQoQ1dBUk5GTEFHUykgXAo+ID4gIExEQUREID0gJCh0b3BfYnVpbGRk aXIpL2xpYi9saWJpbnRlbF90b29scy5sYQo+ID4gIEFNX0xERkxBR1MgPSAtV2wsLS1hcy1uZWVk ZWQKPiA+ICAKPiA+IC0KPiA+ICAjIGF1YmR1bXBlcgo+ID4gIAo+ID4gIG1vZHVsZV9MVExJQlJB UklFUyA9IGludGVsX2F1YmR1bXAubGEKPiA+IGRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5z b3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ID4gaW5kZXggZTI0NTFlYS4uMzRjN2E3 NCAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiA+ICsrKyBiL3Rvb2xz L01ha2VmaWxlLnNvdXJjZXMKPiA+IEBAIC01NiwzICs1Niw5IEBAIGludGVsX2wzX3Bhcml0eV9T T1VSQ0VTID0JXAo+ID4gIAlpbnRlbF9sM19wYXJpdHkuaAlcCj4gPiAgCWludGVsX2wzX3VkZXZf bGlzdGVuZXIuYwo+ID4gIAo+ID4gK2ludGVsX2RwX2NvbXBsaWFuY2VfU09VUkNFUyA9IFwKPiA+ ICsgICAgICAgIGludGVsX2RwX2NvbXBsaWFuY2UuYyBcCj4gPiArICAgICAgICBpbnRlbF9kcF9j b21wbGlhbmNlLmggXAo+ID4gKyAgICAgICAgaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMg XAo+ID4gKyAgICAgICAgJChOVUxMKQo+ID4gKwo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVs X2RwX2NvbXBsaWFuY2UuYyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYwo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmIyNWZlODYKPiA+IC0tLSAvZGV2L251 bGwKPiA+ICsrKyBiL3Rvb2xzL2ludGVsX2RwX2NvbXBsaWFuY2UuYwo+ID4gQEAgLTAsMCArMSwx MTA0IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlv bgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gPiArICoKPiA+ICsgKiBEaXNwbGF5cG9ydCBDb21wbGlhbmNlIFRlc3Rpbmcg QXBwbGljYXRpb24KPiA+ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIHVzZXJzcGFjZSBjb21wb25l bnQgb2YgdGhlIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgdGVzdGluZwo+ID4gKyAqIHNvZnR3YXJl IHJlcXVpcmVkIGZvciBjb21wbGlhbmNlIHRlc3Rpbmcgb2YgdGhlIEk5MTUgRGlzcGxheSBQb3J0 IGRyaXZlci4KPiA+ICsgKiBUaGlzIG11c3QgYmUgcnVubmluZyBpbiBvcmRlciB0byBzdWNjZXNz ZnVsbHkgY29tcGxldGUgRGlzcGxheSBQb3J0Cj4gPiArICogY29tcGxpYW5jZSB0ZXN0aW5nLiBU aGlzIGFwcCBhbmQgdGhlIGtlcm5lbCBjb2RlIHRoYXQgYWNjb21wYW5pZXMgaXQgaGFzIGJlZW4K PiA+ICsgKiB3cml0dGVuIHRvIHNhdGlmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBEaXNwbGF5 cG9ydCBMaW5rIENUUyAxLjIgcmV2MS4xCj4gPiArICogc3BlY2lmaWNhdGlvbiBmcm9tIFZFU0Eu IE5vdGUgdGhhdCB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgZURQCj4gPiArICog Y29tcGxpYW5jZSB0ZXN0aW5nLgo+ID4gKyAqCj4gPiArICogQ29tcGxpYW5jZSBUZXN0aW5nIHJl cXVpcmVzIHNldmVyYWwgY29tcG9uZW50czoKPiA+ICsgKiAgIC0gQSBrZXJuZWwgYnVpbGQgdGhh dCBjb250YWlucyB0aGUgcGF0Y2ggc2V0IGZvciBEUCBjb21wbGlhbmNlIHN1cHBvcnQKPiA+ICsg KiAgIC0gQSBEaXNwbGF5cG9ydCBDb21wbGlhbmNlIFRlc3RpbmcgYXBwbGlhbmNlIHN1Y2ggYXMg VW5pZ3JhZi1EUFIxMjAKPiA+ICsgKiAgIC0gVGhpcyB1c2VyIGFwcGxpY2F0aW9uCj4gPiArICog ICAtIEEgd2luZG93cyBob3N0IG1hY2hpbmUgdG8gcnVuIHRoZSBEUFIgdGVzdCBzb2Z0d2FyZQo+ ID4gKyAqICAgLSBSb290IGFjY2VzcyBvbiB0aGUgRFVUIGR1ZSB0byB0aGUgdXNlIG9mIHN5c2Zz IHV0aWxpdHkKPiA+ICsgKgo+ID4gKyAqIFRlc3QgU2V0dXA6Cj4gPiArICogSXQgaXMgc3Ryb25n bHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgd2luZG93cyBob3N0LCB0ZXN0IGFwcGxpYW5jZSBhbmQg RFVUCj4gPiArICogYmUgZnJlc2hseSByZXN0YXJ0ZWQgYmVmb3JlIGFueSB0ZXN0aW5nIGJlZ2lu cyB0byBlbnN1cmUgdGhhdCBhbnkgcHJldmlvdXMKPiA+ICsgKiBjb25maWd1cmF0aW9ucyBhbmQg c2V0dGluZ3Mgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGVzdCBwcm9jZXNzLiBSZWZlciB0bwo+ ID4gKyAqIHRoZSB0ZXN0IGFwcGxpYW5jZSBkb2N1bWVudGF0aW9uIGZvciBzZXR1cCwgc29mdHdh cmUgaW5zdGFsbGF0aW9uIGFuZAo+ID4gKyAqIG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGF0IGRl dmljZS4KPiA+ICsgKgo+ID4gKyAqIFRoZSBMaW51eCBEVVQgbXVzdCBiZSBpbiB0ZXh0IChjb25z b2xlKSBtb2RlIGFuZCBjYW5ub3QgaGF2ZSBhbnkgb3RoZXIKPiA+ICsgKiBkaXNwbGF5IG1hbmFn ZXIgcnVubmluZy4gWW91IG11c3QgYmUgbG9nZ2VkIGluIGFzIHJvb3QgdG8gcnVuIHRoaXMgdXNl ciBhcHAuCj4gPiArICogT25jZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBpcyB1cCBhbmQgcnVubmlu Zywgd2FpdGluZyBmb3IgdGVzdCByZXF1ZXN0cywgdGhlCj4gPiArICogc29mdHdhcmUgb24gdGhl IHdpbmRvd3MgaG9zdCBjYW4gbm93IGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgY29tcGxpYW5jZSB0 ZXN0cy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHN1cHBvcnRz IGZvbGxvd2luZyB0ZXN0cyBmcm9tIHRoZSBEUCBDVFMgU3BlYwo+ID4gKyAqIFJldiAxLjE6Cj4g PiArICogICAtIExpbmsgVHJhaW5pbmcgVGVzdHM6IFN1cHBvcnRzIHRlc3RzIDQuMy4xLjEgdG8g NC4zLjIuMwo+ID4gKyAqICAgLSBFRElEIFRlc3RzOiBTdXBwb3J0cyBFRElEIHJlYWQgKDQuMi4y LjMpLEVESUQgUmVhZCBmYWlsdXJlIGFuZCBjb3JydXB0aW9uCj4gPiArICogICAgIGRldGVjdGlv biB0ZXN0cyAoNC4yLjIuNCwgNC4yLjIuNSwgNC4yLjIuNikKPiA+ICsgKiAgIC0gVmlkZW8gUGF0 dGVybiBnZW5lcmF0aW9uIHRlc3RzOiBUaGlzIHN1cHBvcnRzIG9ubHkgdGhlIDI0IGFuZCAxOGJw cCBjb2xvcgo+ID4gKyAqICAgICByYW1wIHRlc3QgcGF0dGVybiAoNC4zLjMuMSkuCj4gPiArICoK PiA+ICsgKiBDb25uZWN0aW9ucyAocmVxdWlyZWQpOgo+ID4gKyAqICAgLSBUZXN0IEFwcGxpYW5j ZSBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIERpc3BsYXlwb3J0IGNvbm5lY3RvciBvbiB0aGUg RFVUCj4gPiArICogICAtIFRlc3QgQXBwbGlhbmNlIE1vbml0b3IgT3V0IGNvbm5lY3RlZCB0byBE aXNwbGF5cG9ydCBjb25uZWN0b3Igb24gdGhlCj4gPiArICogbW9uaXRvcgo+ID4gKyAqICAgLSBU ZXN0IGFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhlIFdpbmRvd3MgSG9zdCB2aWEgVVNCCj4gPiAr ICoKPiA+ICsgKiBEZWJ1Z2ZzIEZpbGVzOgo+ID4gKyAqIFRoZSBmaWxlIHJvb3QgZm9yIGFsbCAg dGhlIGRlYnVnZnMgZmlsZToKPiA+ICsgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvMC8KPiA+ICsg Kgo+ID4gKyAqIFRoZSBzcGVjaWZpYyBmaWxlcyBhcmUgYXMgZm9sbG93czoKPiA+ICsgKgo+ID4g KyAqIGk5MTVfZHBfdGVzdF9hY3RpdmUKPiA+ICsgKiBBIHNpbXBsZSBmbGFnIHRoYXQgaW5kaWNh dGVzIHdoZXRoZXIgb3Igbm90IGNvbXBsaWFuY2UgdGVzdGluZyBpcyBjdXJyZW50bHkKPiA+ICsg KiBhY3RpdmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBmbGFnIGlzIHBvbGxlZCBieSB1c2Vyc3BhY2Ug YW5kIG9uY2Ugc2V0LCBpbnZva2VzCj4gPiArICogdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUgdXNl ciBhcHAuIFRoaXMgZmxhZyBpcyBzZXQgYnkgdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUKPiA+ICsg KiBrZXJuZWwgYWZ0ZXIgcmVhZGluZyB0aGUgcmVnaXN0ZXJzIHJlcXVlc3RlZCBieSB0aGUgdGVz dCBhcHBsaWFuY2UuCj4gPiArICoKPiA+ICsgKiBpOTE1X2RwX3Rlc3RfZGF0YQo+ID4gKyAqIFRl c3QgZGF0YSBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSB1 c2VyIGFwcC4gRWc6IEluCj4gPiArICogY2FzZSBvZiBFRElEIHRlc3RzLCB0aGUgZGF0YSB0aGF0 IGlzIGRlbGl2ZXJlZCB0byB0aGUgdXNlcnNwYWNlIGlzIHRoZSB2aWRlbwo+ID4gKyAqIG1vZGUg dG8gYmUgc2V0IGZvciB0aGUgdGVzdC4KPiA+ICsgKiBJbiBjYXNlIG9mIHZpZGVvIHBhdHRlcm4g dGVzdCwgdGhlIGRhdGEgdGhhdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHVzZXJzcGFjZSBpcwo+ID4g KyAqIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB0ZXN0IHBhdHRlcm4gYW5kIHRoZSBiaXRz IHBlciBjb2xvciB2YWx1ZS4KPiA+ICsgKgo+ID4gKyAqIGk5MTVfZHBfdGVzdF90eXBlCj4gPiAr ICogVGhlIHRlc3QgdHlwZSB2YXJpYWJsZSBpbnN0cnVjdHMgdGhlIHVzZXIgYXBwIGFzIHRvIHdo YXQgdGhlIHJlcXVlc3RlZCB0ZXN0Cj4gPiArICogd2FzIGZyb20gdGhlIHNpbmsgZGV2aWNlLiBU aGVzZSB2YWx1ZXMgZGVmaW5lZCBhdCB0aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbidzCj4gPiAr ICogbWFpbiBpbXBsZW1lbnRhdGlvbiBmaWxlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhl IHZhbHVlcyBkZWZpbmVkIGluIHRoZQo+ID4gKyAqIGtlcm5lbCdzIGRybV9kcF9oZWxwZXIuaCBm aWxlLgo+ID4gKyAqIFRoaXMgYXBwIGlzIGJhc2VkIG9uIHNvbWUgcHJpb3Igd29yayBzdWJtaXR0 ZWQgaW4gQXByaWwgMjAxNSBieSBUb2RkIFByZXZpdGUKPiA+ICsgKiAoPHRwcmV2aXRlQGdtYWls LmNvbT4pCj4gPiArICoKPiA+ICsgKgo+ID4gKyAqIFRoaXMgdG9vbCBjYW4gYmUgcnVuIGFzOgo+ ID4gKyAqIC4vaW50ZWxfZHBfY29tcGxpYW5jZSAgSXQgd2lsbCB3YWl0IHRpbGwgeW91IHN0YXJ0 IGNvbXBsaWFuY2Ugc3VpdGUgZnJvbQo+ID4gKyAqIERQUiAxMjAuCj4gPiArICogLi9pbnRlbF9k cF9jb21wbGlhbmNlIC1oICBUaGlzIHdpbGwgb3BlbiB0aGUgaGVscAo+ID4gKyAqIC4vaW50ZWxf ZHBfY29tcGxpYW5jZSAtaSAgVGhpcyB3aWxsIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY3Vy cmVudAo+ID4gKyAqIGNvbm5lY3RvcnMvQ1JUQ3MuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRlYnVn Z2luZyBwdXJwb3NlLgo+ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAgICBNYW5hc2kg TmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gKyAqCj4gPiArICogRWxlbWVu dHMgb2YgdGhlIG1vZGVzZXQgY29kZSBhZGFwdGVkIGZyb20gRGF2aWQgSGVycm1hbm4ncwo+ID4g KyAqIERSTSBtb2Rlc2V0IGV4YW1wbGUKPiA+ICsgKgo+ID4gKyAqLwo+ID4gKyNpbmNsdWRlICJp Z3QuaCIKPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiA+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4g PiArI2luY2x1ZGUgPG1hdGguaD4KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiArI2luY2x1 ZGUgPHN0ZGJvb2wuaD4KPiA+ICsjaW5jbHVkZSA8c3RyaW5ncy5oPgo+ID4gKyNpbmNsdWRlIDx1 bmlzdGQuaD4KPiA+ICsjaW5jbHVkZSA8dGVybWlvcy5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvcG9s bC5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KPiA+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ Cj4gPiArI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KPiA+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4g PiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ID4gKyNpbmNsdWRlIDxmY250bC5oPgo+ID4gKyNpbmNs dWRlIDx0aW1lLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImludGVsX2RwX2NvbXBsaWFuY2UuaCIK PiA+ICsKPiA+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gPiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ ID4gKwo+ID4gKy8qIFVzZXIgSW5wdXQgZGVmaW5pdGlvbnMgKi8KPiA+ICsjZGVmaW5lIEhFTFBf REVTQ1JJUFRJT04gMQo+ID4gKwo+ID4gKy8qIERlYnVnZnMgZmlsZSBkZWZpbml0aW9ucyAqLwo+ ID4gKyNkZWZpbmUgSU5URUxfRFBfVEVTVF9UWVBFX0ZJTEUJCSJpOTE1X2RwX3Rlc3RfdHlwZSIK PiA+ICsjZGVmaW5lIElOVEVMX0RQX1RFU1RfQUNUSVZFX0ZJTEUJImk5MTVfZHBfdGVzdF9hY3Rp dmUiCj4gPiArI2RlZmluZSBJTlRFTF9EUF9URVNUX0RBVEFfRklMRQkJImk5MTVfZHBfdGVzdF9k YXRhIgo+ID4gKwo+ID4gKy8qIERSTSBkZWZpbml0aW9ucyAtIG11c3QgYmUga2VwdCBpbiBzeW5j IHdpdGggdGhlIERSTSBoZWFkZXIgKi8KPiA+ICsjZGVmaW5lIERQX1RFU1RfTElOS19UUkFJTklO RwkJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIERQX1RFU1RfTElOS19WSURFT19QQVRURVJOCSgxIDw8 IDEpCj4gPiArI2RlZmluZSBEUF9URVNUX0xJTktfRURJRF9SRUFECQkoMSA8PCAyKQo+ID4gKyNk ZWZpbmUgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4JKDEgPDwgMykgLyogRFBDRCA+PSAx LjEgKi8KPiA+ICsKPiA+ICsjZGVmaW5lIERQX0NPTVBMSUFOQ0VfVEVTVF9UWVBFX01BU0sJKERQ X1RFU1RfTElOS19UUkFJTklORyAgICAgIHwJXAo+ID4gKwkJCQkJIERQX1RFU1RfTElOS19WSURF T19QQVRURVJOIHwJXAo+ID4gKwkJCQkJIERQX1RFU1RfTElOS19FRElEX1JFQUQgICAgIHwJXAo+ ID4gKwkJCQkJIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQo+ID4gKwo+ID4gKy8qIE5P VEU6IFRoZXNlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGlu dGVsX2RwLmMgKi8KPiA+ICsjZGVmaW5lIElOVEVMX0RQX0VESURfU0hJRlRfTUFTSwkwCj4gPiAr I2RlZmluZSBJTlRFTF9EUF9FRElEX09LCQkoMCA8PCBJTlRFTF9EUF9FRElEX1NISUZUX01BU0sp Cj4gPiArI2RlZmluZSBJTlRFTF9EUF9FRElEX0NPUlJVUFQJCSgxIDw8IElOVEVMX0RQX0VESURf U0hJRlRfTUFTSykKPiA+ICsjZGVmaW5lIElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSwkw Cj4gPiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1BSRUZFUlJFRAkoMSA8PCBJTlRFTF9E UF9SRVNPTFVUSU9OX1NISUZUX01BU0spCj4gPiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9O X1NUQU5EQVJECSgyIDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiA+ICsjZGVm aW5lIElOVEVMX0RQX1JFU09MVVRJT05fRkFJTFNBRkUJKDMgPDwgSU5URUxfRFBfUkVTT0xVVElP Tl9TSElGVF9NQVNLKQo+ID4gKyNkZWZpbmUgRFBfQ09NUExJQU5DRV9WSURFT19NT0RFX01BU0sJ KElOVEVMX0RQX1JFU09MVVRJT05fUFJFRkVSUkVECXxcCj4gPiArCQkJCQkgSU5URUxfRFBfUkVT T0xVVElPTl9TVEFOREFSRAl8XAo+ID4gKwkJCQkJIElOVEVMX0RQX1JFU09MVVRJT05fRkFJTFNB RkUpCj4gPiArCj4gPiArLyogR2xvYmFsIGZpbGUgcG9pbnRlcnMgZm9yIHRoZSBzeXNmcyBmaWxl cyAqLwo+ID4gK0ZJTEUgKnRlc3RfYWN0aXZlX2ZwLCAqdGVzdF9kYXRhX2ZwLCAqdGVzdF90eXBl X2ZwOwo+ID4gKwo+ID4gK2Jvb2wgdmlkZW9fcGF0dGVybl9mbGFnOwo+ID4gKwo+ID4gKy8qIFZp ZGVvIHBhdHRlcm4gdGVzdCBnbG9iYWxzICovCj4gPiArdWludDE2X3QgaGRpc3BsYXk7Cj4gPiAr dWludDE2X3QgdmRpc3BsYXk7Cj4gPiArdWludDhfdCBiaXRkZXB0aDsKPiA+ICsKPiA+ICtzdGF0 aWMgaW50IHRpb19mZDsKPiA+ICtzdHJ1Y3QgdGVybWlvcyBzYXZlZF90aW87Cj4gPiArCj4gPiAr ZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+ID4gK2ludCBkcm1fZmQsIG1vZGVzOwo+ID4gK3VpbnQ2 NF90IHRpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gPiArdWludDMyX3QgZGVw dGggPSAyNCwgc3RyaWRlLCBicHA7Cj4gPiAraW50IHNwZWNpZmllZF9tb2RlX251bSA9IC0xLCBz cGVjaWZpZWRfZGlzcF9pZCA9IC0xOwo+ID4gK2ludCB3aWR0aCwgaGVpZ2h0Owo+ID4gK3VpbnQz Ml90IHRlc3RfY3J0YzsKPiA+ICt1aW50MzJfdCB0ZXN0X2Nvbm5lY3Rvcl9pZDsKPiA+ICtlbnVt IHsKPiA+ICsJSU5URUxfTU9ERV9JTlZBTElEID0gLTEsCj4gPiArCUlOVEVMX01PREVfTk9ORSA9 IDAsCj4gPiArCUlOVEVMX01PREVfUFJFRkVSUkVELAo+ID4gKwlJTlRFTF9NT0RFX1NUQU5EQVJE LAo+ID4gKwlJTlRFTF9NT0RFX0ZBSUxTQUZFLAo+ID4gKwlJTlRFTF9NT0RFX1ZJREVPX1BBVFRF Uk5fVEVTVAo+ID4gK30gaW50ZWxfZGlzcGxheV9tb2RlOwo+ID4gKwo+ID4gK3N0cnVjdCB0ZXN0 X3ZpZGVvX3BhdHRlcm4gewo+ID4gKwl1aW50MTZfdCBoZGlzcGxheTsKPiA+ICsJdWludDE2X3Qg dmRpc3BsYXk7Cj4gPiArCXVpbnQ4X3QgYml0ZGVwdGg7Cj4gPiArCXVpbnQzMl90IGZiOwo+ID4g Kwl1aW50MzJfdCBzaXplOwo+ID4gKwlzdHJ1Y3QgaWd0X2ZiIGZiX3BhdHRlcm47Cj4gPiArCWRy bU1vZGVNb2RlSW5mbyBtb2RlOwo+ID4gKwl1aW50MzJfdCAqcGl4bWFwOwo+ID4gK307Cj4gPiAr Cj4gPiArc3RydWN0IGNvbm5lY3RvciB7Cj4gPiArCXVpbnQzMl90IGlkOwo+ID4gKwlpbnQgbW9k ZV92YWxpZDsKPiA+ICsJZHJtTW9kZU1vZGVJbmZvIG1vZGUsIG1vZGVfc3RhbmRhcmQsIG1vZGVf cHJlZmVycmVkLCBtb2RlX2ZhaWxzYWZlOwo+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gPiArCWludCBjcnRjOwo+ID4gKwkvKiBTdGFuZGFyZCBhbmQgcHJlZmVycmVkIGZyYW1l IGJ1ZmZlciovCj4gPiArCXVpbnQzMl90IGZiLCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBmYl9zaXpl Owo+ID4gKwl1aW50OF90ICpwaXhtYXA7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJfdmlkZW9fcGF0 dGVybjsKPiA+ICsJLyogRmFpbHNhZmUgZnJhbWVidWZmZXIgLSBub3RlIHRoaXMgaXMgYSAxNi1i aXQgYnVmZmVyICovCj4gPiArCXVpbnQzMl90IGZhaWxzYWZlX2ZiLCBmYWlsc2FmZV93aWR0aCwg ZmFpbHNhZmVfaGVpZ2h0Owo+ID4gKwl1aW50MzJfdCBmYWlsc2FmZV9zaXplOwo+ID4gKwl1aW50 OF90ICpmYWlsc2FmZV9waXhtYXA7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJfZmFpbHNhZmVfcGF0 dGVybjsKPiA+ICsJc3RydWN0IHRlc3RfdmlkZW9fcGF0dGVybiB0ZXN0X3BhdHRlcm47Cj4gPiAr fTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjbGVhcl90ZXN0X2FjdGl2ZSh2b2lkKQo+ID4gK3sK PiA+ICsJcmV3aW5kKHRlc3RfYWN0aXZlX2ZwKTsKPiA+ICsJZnByaW50Zih0ZXN0X2FjdGl2ZV9m cCwgIiVkIiwgMCk7Cj4gPiArCWZmbHVzaCh0ZXN0X2FjdGl2ZV9mcCk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHNldHVwX2RlYnVnZnNfZmlsZXModm9pZCkKPiA+ICt7Cj4gPiArCXRl c3RfdHlwZV9mcCA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKElOVEVMX0RQX1RFU1RfVFlQRV9GSUxFLCAi ciIpOwo+ID4gKwlpZ3RfcmVxdWlyZSh0ZXN0X3R5cGVfZnApOwo+ID4gKwo+ID4gKwl0ZXN0X2Rh dGFfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9URVNUX0RBVEFfRklMRSwgInIiKTsK PiA+ICsJaWd0X3JlcXVpcmUodGVzdF9kYXRhX2ZwKTsKPiA+ICsKPiA+ICsJdGVzdF9hY3RpdmVf ZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9URVNUX0FDVElWRV9GSUxFLCAidysiKTsK PiA+ICsJaWd0X3JlcXVpcmUodGVzdF9hY3RpdmVfZnApOwo+ID4gKwo+ID4gKwkvKiBSZXNldCB0 aGUgYWN0aXZlIGZsYWcgZm9yIHNhZmV0eSAqLwo+ID4gKwljbGVhcl90ZXN0X2FjdGl2ZSgpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdGVzdF90eXBlKHZvaWQp Cj4gPiArewo+ID4gKwl1bnNpZ25lZCBsb25nIHRlc3RfdHlwZTsKPiA+ICsJaW50IHJldDsKPiA+ ICsKPiA+ICsJaWYgKCF0ZXN0X3R5cGVfZnApCj4gPiArCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgdGVzdF90eXBlIGZpbGVcbiIpOwo+ID4gKwlyZXdpbmQodGVzdF90eXBlX2ZwKTsKPiA+ICsJ cmV0ID0gZnNjYW5mKHRlc3RfdHlwZV9mcCwgIiVseCIsICZ0ZXN0X3R5cGUpOwo+ID4gKwlpZiAo cmV0IDwgMSB8fCB0ZXN0X3R5cGUgPD0gMCkgewo+ID4gKwkJaWd0X3dhcm4oInRlc3RfdHlwZSBy ZWFkIGZhaWxlZCAtICVseFxuIiwgdGVzdF90eXBlKTsKPiA+ICsJCXJldHVybiAwOwo+ID4gKwl9 Cj4gPiArCj4gPiArCXJldHVybiB0ZXN0X3R5cGU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1 bnNpZ25lZCBsb25nIGdldF90ZXN0X2VkaWRfZGF0YSh2b2lkKQo+ID4gK3sKPiA+ICsJdW5zaWdu ZWQgbG9uZyB0ZXN0X2RhdGE7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWlmICghdGVzdF9k YXRhX2ZwKQo+ID4gKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRlc3RfZGF0YSBmaWxlXHJc biIpOwo+ID4gKwo+ID4gKwlyZXdpbmQodGVzdF9kYXRhX2ZwKTsKPiA+ICsJcmV0ID0gZnNjYW5m KHRlc3RfZGF0YV9mcCwgIiVseCIsICZ0ZXN0X2RhdGEpOwo+ID4gKwlpZiAocmV0IDwgMSB8fCB0 ZXN0X2RhdGEgPD0gMCkgewo+ID4gKwkJaWd0X3dhcm4oInRlc3RfZGF0YSByZWFkIGZhaWxlZCAt ICVseFxyXG4iLCB0ZXN0X2RhdGEpOwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJcmV0dXJuIHRlc3RfZGF0YTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZ2V0X3Rl c3RfdmlkZW9wYXR0ZXJuX2RhdGEodm9pZCkKPiA+ICt7Cj4gPiArCWludCBjb3VudCA9IDA7Cj4g PiArCXVpbnQxNl90IHZpZGVvX3BhdHRlcm5fdmFsdWVbM107Cj4gPiArCWNoYXIgdmlkZW9fcGF0 dGVybl9hdHRyaWJ1dGVbMTVdOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAoIXRlc3Rf ZGF0YV9mcCkKPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0ZXN0X2RhdGEgZmlsZVxu Iik7Cj4gPiArCj4gPiArCXJld2luZCh0ZXN0X2RhdGFfZnApOwo+ID4gKwl3aGlsZSAoIWZlb2Yo dGVzdF9kYXRhX2ZwKSAmJiBjb3VudCA8IDMpIHsKPiA+ICsJCXJldCA9IGZzY2FuZih0ZXN0X2Rh dGFfZnAsICIlcyAldVxuIiwgdmlkZW9fcGF0dGVybl9hdHRyaWJ1dGUsCj4gPiArCQkgICAgICAg KHVuc2lnbmVkIGludCAqKSZ2aWRlb19wYXR0ZXJuX3ZhbHVlW2NvdW50KytdKTsKPiA+ICsJCWlm IChyZXQgPCAyKSB7Cj4gPiArCQkJaWd0X3dhcm4oInRlc3RfZGF0YSByZWFkIGZhaWxlZFxuIik7 Cj4gPiArCQkJcmV0dXJuOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWhkaXNwbGF5ID0g dmlkZW9fcGF0dGVybl92YWx1ZVswXTsKPiA+ICsJdmRpc3BsYXkgPSB2aWRlb19wYXR0ZXJuX3Zh bHVlWzFdOwo+ID4gKwliaXRkZXB0aCA9IHZpZGVvX3BhdHRlcm5fdmFsdWVbMl07Cj4gPiArCWln dF9pbmZvKCJIZGlzcGxheSA9ICVkXG4iLCBoZGlzcGxheSk7Cj4gPiArCWlndF9pbmZvKCJWZGlz cGxheSA9ICVkXG4iLCB2ZGlzcGxheSk7Cj4gPiArCWlndF9pbmZvKCJCaXREZXB0aCA9ICV1XG4i LCBiaXRkZXB0aCk7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHJvY2Vzc190 ZXN0X3JlcXVlc3QoaW50IHRlc3RfdHlwZSkKPiA+ICt7Cj4gPiArCWludCBtb2RlOwo+ID4gKwl1 bnNpZ25lZCBsb25nIHRlc3RfZGF0YV9lZGlkOwo+ID4gKwlib29sIHZhbGlkID0gZmFsc2U7Cj4g PiArCXN3aXRjaCAodGVzdF90eXBlKSB7Cj4gPiArCWNhc2UgRFBfVEVTVF9MSU5LX1ZJREVPX1BB VFRFUk46Cj4gPiArCQl2aWRlb19wYXR0ZXJuX2ZsYWcgPSB0cnVlOwo+ID4gKwkJZ2V0X3Rlc3Rf dmlkZW9wYXR0ZXJuX2RhdGEoKTsKPiA+ICsJCW1vZGUgPSBJTlRFTF9NT0RFX1ZJREVPX1BBVFRF Uk5fVEVTVDsKPiA+ICsJCXZhbGlkID0gdHJ1ZTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIERQ X1RFU1RfTElOS19FRElEX1JFQUQ6Cj4gPiArCQl0ZXN0X2RhdGFfZWRpZCA9IGdldF90ZXN0X2Vk aWRfZGF0YSgpOwo+ID4gKwkJbW9kZSA9ICh0ZXN0X2RhdGFfZWRpZCAmIERQX0NPTVBMSUFOQ0Vf VklERU9fTU9ERV9NQVNLKSA+Pgo+ID4gKwkJCUlOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFT SzsKPiA+ICsJCXZhbGlkID0gdHJ1ZTsKPiA+ICsJCWJyZWFrOwo+ID4gKwlkZWZhdWx0Ogo+ID4g KwkJLyogVW5rbm93biB0ZXN0IHR5cGUgKi8KPiA+ICsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCB0ZXN0IHJlcXVlc3QsIGlnbm9yZWQuXG4iKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWlmICh2YWxpZCkKPiA+ICsJCXJldHVybiB1cGRhdGVfZGlzcGxheShtb2RlLCB0cnVl KTsKPiA+ICsKPiA+ICsJcmV0dXJuIC0xOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBk dW1wX2Nvbm5lY3RvcnNfZmQoaW50IGRybWZkKQo+ID4gK3sKPiA+ICsJaW50IGksIGo7Cj4gPiAr Cj4gPiArCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhk cm1mZCk7Cj4gPiArCj4gPiArCWlmICghbW9kZV9yZXNvdXJjZXMpIHsKPiA+ICsJCWlndF93YXJu KCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4g PiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X2luZm8oIkNvbm5lY3RvcnM6XG4i KTsKPiA+ICsJaWd0X2luZm8oImlkXHRlbmNvZGVyXHRzdGF0dXNcdFx0dHlwZVx0c2l6ZSAobW0p XHRtb2Rlc1xuIik7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRf Y29ubmVjdG9yczsgaSsrKSB7Cj4gPiArCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4g PiArCj4gPiArCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yQ3VycmVudChkcm1mZCwK PiA+ICsJCQkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOwo+ID4gKwkJ aWYgKCFjb25uZWN0b3IpIHsKPiA+ICsJCQlpZ3Rfd2FybigiQ291bGQgbm90IGdldCBjb25uZWN0 b3IgJWk6ICVzXG4iLAo+ID4gKwkJCQkgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0 cmVycm9yKGVycm5vKSk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlp Z3RfaW5mbygiJWRcdCVkXHQlc1x0JXNcdCVkeCVkXHRcdCVkXG4iLAo+ID4gKwkJCSBjb25uZWN0 b3ItPmNvbm5lY3Rvcl9pZCwKPiA+ICsJCQkgY29ubmVjdG9yLT5lbmNvZGVyX2lkLAo+ID4gKwkJ CSBrbXN0ZXN0X2Nvbm5lY3Rvcl9zdGF0dXNfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdGlvbiksCj4g PiArCQkJIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5 cGUpLAo+ID4gKwkJCSBjb25uZWN0b3ItPm1tV2lkdGgsCj4gPiArCQkJIGNvbm5lY3Rvci0+bW1I ZWlnaHQsCj4gPiArCQkJIGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpOwo+ID4gKwo+ID4gKwkJaWYg KCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJ aWd0X2luZm8oIiAgTW9kZXM6XG4iKTsKPiA+ICsJCWlndF9pbmZvKCIgIG5hbWUgcmVmcmVzaCAo SHopIGhkaXNwIGhzcyBoc2UgaHRvdCB2ZGlzcCAiInZzcyB2c2UgdnRvdCBmbGFncyB0eXBlIGNs b2NrXG4iKTsKPiA+ICsJCWZvciAoaiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBq KyspIHsKPiA+ICsJCQlpZ3RfaW5mbygiWyVkXSIsIGopOwo+ID4gKwkJCWttc3Rlc3RfZHVtcF9t b2RlKCZjb25uZWN0b3ItPm1vZGVzW2pdKTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRybU1vZGVG cmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4gPiArCX0KPiA+ICsJaWd0X2luZm8oIlxuIik7Cj4g PiArCj4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgZHVtcF9jcnRjc19mZChpbnQgZHJtZmQpCj4gPiArewo+ID4g KwlpbnQgaTsKPiA+ICsJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXM7Cj4gPiArCj4gPiArCW1v ZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1mZCk7Cj4gPiArCWlmICghbW9k ZV9yZXNvdXJjZXMpIHsKPiA+ICsJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxl ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsK PiA+ICsJaWd0X2luZm8oIkNSVENzOlxuIik7Cj4gPiArCWlndF9pbmZvKCJpZFx0ZmJcdHBvc1x0 c2l6ZVxuIik7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY3J0 Y3M7IGkrKykgewo+ID4gKwkJZHJtTW9kZUNydGMgKmNydGM7Cj4gPiArCj4gPiArCQljcnRjID0g ZHJtTW9kZUdldENydGMoZHJtZmQsIG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSk7Cj4gPiArCQlp ZiAoIWNydGMpIHsKPiA+ICsJCQlpZ3Rfd2FybigiQ291bGQgbm90IGdldCBjcnRjICVpOiAlc1xu IiwgbW9kZV9yZXNvdXJjZXMtPmNydGNzW2ldLCBzdHJlcnJvcihlcnJubykpOwo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwkJfQo+ID4gKwkJaWd0X2luZm8oIiVkXHQlZFx0KCVkLCVkKVx0KCVkeCVk KVxuIiwKPiA+ICsJCQkgY3J0Yy0+Y3J0Y19pZCwKPiA+ICsJCQkgY3J0Yy0+YnVmZmVyX2lkLAo+ ID4gKwkJCSBjcnRjLT54LAo+ID4gKwkJCSBjcnRjLT55LAo+ID4gKwkJCSBjcnRjLT53aWR0aCwK PiA+ICsJCQkgY3J0Yy0+aGVpZ2h0KTsKPiA+ICsKPiA+ICsJCWttc3Rlc3RfZHVtcF9tb2RlKCZj cnRjLT5tb2RlKTsKPiA+ICsKPiA+ICsJCWRybU1vZGVGcmVlQ3J0YyhjcnRjKTsKPiA+ICsJfQo+ ID4gKwlpZ3RfaW5mbygiXG4iKTsKPiA+ICsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9k ZV9yZXNvdXJjZXMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdW1wX2luZm8odm9p ZCkKPiA+ICt7Cj4gPiArCWR1bXBfY29ubmVjdG9yc19mZChkcm1fZmQpOwo+ID4gKwlkdW1wX2Ny dGNzX2ZkKGRybV9mZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc2V0dXBfZnJhbWVi dWZmZXJzKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4pCj4gPiArewo+ID4gKwo+ID4gKwlkcF9j b25uLT5mYiA9IGlndF9jcmVhdGVfZmIoZHJtX2ZkLAo+ID4gKwkJCQkgICAgZHBfY29ubi0+ZmJf d2lkdGgsIGRwX2Nvbm4tPmZiX2hlaWdodCwKPiA+ICsJCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4 ODgsCj4gPiArCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ID4gKwkJCQkgICAg JmRwX2Nvbm4tPmZiX3ZpZGVvX3BhdHRlcm4pOwo+ID4gKwlpZ3RfYXNzZXJ0KGRwX2Nvbm4tPmZi KTsKPiA+ICsKPiA+ICsJLyogTWFwIHRoZSBtYXBwaW5nIG9mIEdFTSBvYmplY3QgaW50byB0aGUg dmlydHVhbCBhZGRyZXNzIHNwYWNlICovCj4gPiArCWRwX2Nvbm4tPnBpeG1hcCA9IGdlbV9tbWFw X19ndHQoZHJtX2ZkLAo+ID4gKwkJCQkJZHBfY29ubi0+ZmJfdmlkZW9fcGF0dGVybi5nZW1faGFu ZGxlLAo+ID4gKwkJCQkJZHBfY29ubi0+ZmJfdmlkZW9fcGF0dGVybi5zaXplLAo+ID4gKwkJCQkJ UFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gPiArCWlmIChkcF9jb25uLT5waXhtYXAgPT0gTlVM TCkKPiA+ICsJCXJldHVybiAtMTsKPiA+ICsKPiA+ICsJZ2VtX3NldF9kb21haW4oZHJtX2ZkLCBk cF9jb25uLT5mYl92aWRlb19wYXR0ZXJuLmdlbV9oYW5kbGUsCj4gPiArCQkgICAgICAgSTkxNV9H RU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiArCWRwX2Nvbm4tPmZiX3Np emUgPSBkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuLnNpemU7Cj4gPiArCj4gPiArCS8qIEFmdGVy IGZpbGxpbmcgdGhlIGRldmljZSBtZW1vcnkgd2l0aCAwcyBpdCBuZWVkcyB0byBiZSB1bm1hcHBl ZCAqLwo+ID4gKwltZW1zZXQoZHBfY29ubi0+cGl4bWFwLCAwLCBkcF9jb25uLT5mYl9zaXplKTsK PiA+ICsJbXVubWFwKGRwX2Nvbm4tPnBpeG1hcCwgZHBfY29ubi0+ZmJfc2l6ZSk7Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldHVwX2ZhaWxzYWZl X2ZyYW1lYnVmZmVyKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4pCj4gPiArewo+ID4gKwo+ID4g KwlkcF9jb25uLT5mYWlsc2FmZV9mYiA9IGlndF9jcmVhdGVfZmIoZHJtX2ZkLAo+ID4gKwkJCQkJ ICAgICBkcF9jb25uLT5mYWlsc2FmZV93aWR0aCwKPiA+ICsJCQkJCSAgICAgZHBfY29ubi0+ZmFp bHNhZmVfaGVpZ2h0LAo+ID4gKwkJCQkJICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKwkJ CQkJICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ID4gKwkJCQkJICAgICAmZHBfY29u bi0+ZmJfZmFpbHNhZmVfcGF0dGVybik7Cj4gPiArCWlndF9hc3NlcnQoZHBfY29ubi0+ZmFpbHNh ZmVfZmIpOwo+ID4gKwo+ID4gKwkvKiBNYXAgdGhlIG1hcHBpbmcgb2YgR0VNIG9iamVjdCBpbnRv IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KPiA+ICsJZHBfY29ubi0+ZmFpbHNhZmVfcGl4 bWFwID0gZ2VtX21tYXBfX2d0dChkcm1fZmQsCj4gPiArCQkJCQkJIGRwX2Nvbm4tPmZiX2ZhaWxz YWZlX3BhdHRlcm4uZ2VtX2hhbmRsZSwKPiA+ICsJCQkJCQkgZHBfY29ubi0+ZmJfZmFpbHNhZmVf cGF0dGVybi5zaXplLAo+ID4gKwkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiA+ICsJ aWYgKGRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1hcCA9PSBOVUxMKQo+ID4gKwkJcmV0dXJuIC0xOwo+ ID4gKwo+ID4gKwlnZW1fc2V0X2RvbWFpbihkcm1fZmQsIGRwX2Nvbm4tPmZiX2ZhaWxzYWZlX3Bh dHRlcm4uZ2VtX2hhbmRsZSwKPiA+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKPiA+ICsJZHBfY29ubi0+ZmFpbHNhZmVfc2l6ZSA9IGRwX2Nvbm4t PmZiX2ZhaWxzYWZlX3BhdHRlcm4uc2l6ZTsKPiA+ICsKPiA+ICsJLyogQWZ0ZXIgZmlsbGluZyB0 aGUgZGV2aWNlIGZyYW1lYnVmZmVyIHRoZSBtYXBwZWQgbWVtb3J5IG5lZWRzIHRvIGJlIGZyZWVk ICovCj4gPiArCW1lbXNldChkcF9jb25uLT5mYWlsc2FmZV9waXhtYXAsIDAsIGRwX2Nvbm4tPmZh aWxzYWZlX3NpemUpOwo+ID4gKwltdW5tYXAoZHBfY29ubi0+ZmFpbHNhZmVfcGl4bWFwLCBkcF9j b25uLT5mYWlsc2FmZV9zaXplKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgc2V0dXBfdmlkZW9fcGF0dGVybl9mcmFtZWJ1ZmZlcihzdHJ1 Y3QgY29ubmVjdG9yICpkcF9jb25uKQo+ID4gK3sKPiA+ICsJdWludDMyX3QgIHZpZGVvX3dpZHRo LCB2aWRlb19oZWlnaHQ7Cj4gPiArCj4gPiArCXZpZGVvX3dpZHRoID0gZHBfY29ubi0+dGVzdF9w YXR0ZXJuLmhkaXNwbGF5Owo+ID4gKwl2aWRlb19oZWlnaHQgPSBkcF9jb25uLT50ZXN0X3BhdHRl cm4udmRpc3BsYXk7Cj4gPiArCWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYiA9IGlndF9jcmVhdGVf ZmIoZHJtX2ZkLAo+ID4gKwkJCQkJCSB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0LAo+ID4gKwkJ CQkJCSBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKwkJCQkJCSBMT0NBTF9EUk1fRk9STUFUX01P RF9OT05FLAo+ID4gKwkJCQkJCSAmZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4pOwo+ ID4gKwlpZ3RfYXNzZXJ0KGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYik7Cj4gPiArCj4gPiArCS8q IE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBz cGFjZSAqLwo+ID4gKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4bWFwID0gZ2VtX21tYXBfX2d0 dChkcm1fZmQsCj4gPiArCQkJCQkJICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVy bi5nZW1faGFuZGxlLAo+ID4gKwkJCQkJCSAgICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3Bh dHRlcm4uc2l6ZSwKPiA+ICsJCQkJCQkgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ID4g KwlpZiAoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCA9PSBOVUxMKQo+ID4gKwkJcmV0dXJu IC0xOwo+ID4gKwo+ID4gKwlnZW1fc2V0X2RvbWFpbihkcm1fZmQsIGRwX2Nvbm4tPnRlc3RfcGF0 dGVybi5mYl9wYXR0ZXJuLmdlbV9oYW5kbGUsCj4gPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlO X0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiArCj4gPiArCWRwX2Nvbm4tPnRlc3RfcGF0 dGVybi5zaXplID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uc2l6ZTsKPiA+ICsK PiA+ICsJbWVtc2V0KGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAsIDAsIGRwX2Nvbm4tPnRl c3RfcGF0dGVybi5zaXplKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZmlsbF9mcmFtZWJ1ZmZlcihzdHJ1Y3QgY29ubmVjdG9yICpkcF9jb25uKQo+ ID4gK3sKPiA+ICsJdWludDMyX3QgdGlsZV9oZWlnaHQsIHRpbGVfd2lkdGgsIHZpZGVvX3dpZHRo LCB2aWRlb19oZWlnaHQ7Cj4gPiArCXVpbnQzMl90ICpyZWRfcHRyLCAqZ3JlZW5fcHRyLCAqYmx1 ZV9wdHIsICp3aGl0ZV9wdHIsICpzcmNfcHRyLCAqZHN0X3B0cjsKPiA+ICsJaW50IHgsIHk7Cj4g PiArCWludDMyX3QgcGl4ZWxfdmFsOwo+ID4gKwo+ID4gKwl2aWRlb193aWR0aCA9IGRwX2Nvbm4t PnRlc3RfcGF0dGVybi5oZGlzcGxheTsKPiA+ICsJdmlkZW9faGVpZ2h0ID0gZHBfY29ubi0+dGVz dF9wYXR0ZXJuLnZkaXNwbGF5Owo+ID4gKwo+ID4gKwl0aWxlX2hlaWdodCA9IDY0Owo+ID4gKwl0 aWxlX3dpZHRoID0gMSA8PCAgKGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5iaXRkZXB0aCk7Cj4gPiAr Cj4gPiArCXJlZF9wdHIgPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4ucGl4bWFwOwo+ID4gKwlncmVl bl9wdHIgPSByZWRfcHRyICsgKHZpZGVvX3dpZHRoICogdGlsZV9oZWlnaHQpOwo+ID4gKwlibHVl X3B0ciA9IGdyZWVuX3B0ciArICh2aWRlb193aWR0aCAqIHRpbGVfaGVpZ2h0KTsKPiA+ICsJd2hp dGVfcHRyID0gYmx1ZV9wdHIgKyAodmlkZW9fd2lkdGggKiB0aWxlX2hlaWdodCk7Cj4gPiArCXgg PSAwOwo+ID4gKwo+ID4gKwkvKiBGaWxsIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB2aWRlbyBwYXR0 ZXJuIGZyb20gQ1RTIDMuMS41ICovCj4gPiArCXdoaWxlICh4IDwgdmlkZW9fd2lkdGgpIHsKPiA+ ICsJCWZvciAocGl4ZWxfdmFsID0gMDsgcGl4ZWxfdmFsIDwgMjU2Owo+ID4gKwkJICAgICBwaXhl bF92YWwgPSBwaXhlbF92YWwgKyAoMjU2IC8gdGlsZV93aWR0aCkpIHsKPiA+ICsJCQlyZWRfcHRy W3hdID0gcGl4ZWxfdmFsIDw8IDE2Owo+ID4gKwkJCWdyZWVuX3B0clt4XSA9IHBpeGVsX3ZhbCA8 PCA4Owo+ID4gKwkJCWJsdWVfcHRyW3hdID0gcGl4ZWxfdmFsIDw8IDA7Cj4gPiArCQkJd2hpdGVf cHRyW3hdID0gcmVkX3B0clt4XSB8IGdyZWVuX3B0clt4XSB8IGJsdWVfcHRyW3hdOwo+ID4gKwkJ CWlmICgrK3ggPj0gdmlkZW9fd2lkdGgpCj4gPiArCQkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCWZvciAoeSA9IDA7IHkgPCB2aWRlb19oZWlnaHQ7IHkrKykgewo+ID4gKwkJaWYgKHkg PT0gMCB8fCB5ID09IDY0IHx8IHkgPT0gMTI4IHx8IHkgPT0gMTkyKQo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwkJc3dpdGNoICgoeSAvIHRpbGVfaGVpZ2h0KSAlIDQpIHsKPiA+ICsJCWNhc2UgMDoK PiA+ICsJCQlzcmNfcHRyID0gcmVkX3B0cjsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgMToK PiA+ICsJCQlzcmNfcHRyID0gZ3JlZW5fcHRyOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSAy Ogo+ID4gKwkJCXNyY19wdHIgPSBibHVlX3B0cjsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2Ug MzoKPiA+ICsJCQlzcmNfcHRyID0gd2hpdGVfcHRyOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ ID4gKwkJZHN0X3B0ciA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAgKyAoeSAqIHZpZGVv X3dpZHRoKTsKPiA+ICsJCW1lbWNweShkc3RfcHRyLCBzcmNfcHRyLCAodmlkZW9fd2lkdGggKiA0 KSk7Cj4gPiArCX0KPiA+ICsJbXVubWFwKGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAsCj4g PiArCSAgICAgICBkcF9jb25uLT50ZXN0X3BhdHRlcm4uc2l6ZSk7Cj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldF90ZXN0X21vZGUoc3RydWN0IGNvbm5lY3Rv ciAqZHBfY29ubikKPiA+ICt7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwlpbnQgaTsKPiA+ICsJ Ym9vbCBmb3VuZF9zdGQgPSBmYWxzZSwgZm91bmRfZnMgPSBmYWxzZTsKPiA+ICsJZHJtTW9kZUNv bm5lY3RvciAqYyA9IGRwX2Nvbm4tPmNvbm5lY3RvcjsKPiA+ICsKPiA+ICsJLyogSWdub3JlIGFu eSBkaXNjb25uZWN0ZWQgZGV2aWNlcyAqLwo+ID4gKwlpZiAoYy0+Y29ubmVjdGlvbiAhPSBEUk1f TU9ERV9DT05ORUNURUQpIHsKPiA+ICsJCWlndF93YXJuKCJDb25uZWN0b3IgJXUgZGlzY29ubmVj dGVkXG4iLCBjLT5jb25uZWN0b3JfaWQpOwo+ID4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4gPiArCX0K PiA+ICsJaWd0X2luZm8oIkNvbm5lY3RvciBzZXR1cDpcbiIpOwo+ID4gKwkvKiBTZXR1cCBwcmVm ZXJyZWQgbW9kZSAtIHNob3VsZCBiZSBtb2RlWzBdIGluIHRoZSBsaXN0ICovCj4gPiArCWRwX2Nv bm4tPm1vZGVfcHJlZmVycmVkID0gYy0+bW9kZXNbMF07Cj4gPiArCWRwX2Nvbm4tPmZiX3dpZHRo ID0gYy0+bW9kZXNbMF0uaGRpc3BsYXk7Cj4gPiArCWRwX2Nvbm4tPmZiX2hlaWdodCA9IGMtPm1v ZGVzWzBdLnZkaXNwbGF5Owo+ID4gKwo+ID4gKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZSA9 IGMtPm1vZGVzWzBdOwo+ID4gKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZS5oZGlzcGxheSA9 IGMtPm1vZGVzWzBdLmhkaXNwbGF5Owo+ID4gKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4ubW9kZS52 ZGlzcGxheSA9IGMtPm1vZGVzWzBdLnZkaXNwbGF5Owo+ID4gKwo+ID4gKwlpZ3RfaW5mbygiUHJl ZmVycmVkIG1vZGUgKG1vZGUgMCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxuIiwKPiA+ICsJ CSBkcF9jb25uLT5pZCwgYy0+bW9kZXNbMF0uaGRpc3BsYXksIGMtPm1vZGVzWzBdLnZkaXNwbGF5 KTsKPiA+ICsJZmZsdXNoKHN0ZGluKTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMTsgaSA8IGMtPmNv dW50X21vZGVzOyBpKyspIHsKPiA+ICsJCS8qIFN0YW5kYXJkIG1vZGUgaXMgODAweDYwMEA2MCAq Lwo+ID4gKwkJaWYgKGMtPm1vZGVzW2ldLmhkaXNwbGF5ID09IDgwMCAmJgo+ID4gKwkJICAgIGMt Pm1vZGVzW2ldLnZkaXNwbGF5ID09IDYwMCAmJgo+ID4gKwkJICAgIGMtPm1vZGVzW2ldLnZyZWZy ZXNoID09IDYwICYmCj4gPiArCQkgICAgZm91bmRfc3RkID09IGZhbHNlKSB7Cj4gPiArCQkJZHBf Y29ubi0+bW9kZV9zdGFuZGFyZCA9IGMtPm1vZGVzW2ldOwo+ID4gKwkJCWlndF9pbmZvKCJTdGFu ZGFyZCBtb2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxuIiwKPiA+ICsJCQkJIGks Cj4gPiArCQkJCSBjLT5jb25uZWN0b3JfaWQsCj4gPiArCQkJCSBjLT5tb2Rlc1tpXS5oZGlzcGxh eSwKPiA+ICsJCQkJIGMtPm1vZGVzW2ldLnZkaXNwbGF5KTsKPiA+ICsJCQlmb3VuZF9zdGQgPSB0 cnVlOwo+ID4gKwkJfQo+ID4gKwkJLyogRmFpbHNhZmUgbW9kZSBpcyA2NDB4NDgwQDYwICovCj4g PiArCQlpZiAoYy0+bW9kZXNbaV0uaGRpc3BsYXkgPT0gNjQwICYmCj4gPiArCQkgICAgYy0+bW9k ZXNbaV0udmRpc3BsYXkgPT0gNDgwICYmCj4gPiArCQkgICAgYy0+bW9kZXNbaV0udnJlZnJlc2gg PT0gNjAgJiYKPiA+ICsJCSAgICBmb3VuZF9mcyA9PSBmYWxzZSkgewo+ID4gKwkJCWRwX2Nvbm4t Pm1vZGVfZmFpbHNhZmUgPSBjLT5tb2Rlc1tpXTsKPiA+ICsJCQlkcF9jb25uLT5mYWlsc2FmZV93 aWR0aCA9IGMtPm1vZGVzW2ldLmhkaXNwbGF5Owo+ID4gKwkJCWRwX2Nvbm4tPmZhaWxzYWZlX2hl aWdodCA9IGMtPm1vZGVzW2ldLnZkaXNwbGF5Owo+ID4gKwkJCWlndF9pbmZvKCJGYWlsc2FmZSBt b2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxuIiwKPiA+ICsJCQkJIGksCj4gPiAr CQkJCSBjLT5jb25uZWN0b3JfaWQsCj4gPiArCQkJCSBjLT5tb2Rlc1tpXS5oZGlzcGxheSwKPiA+ ICsJCQkJIGMtPm1vZGVzW2ldLnZkaXNwbGF5KTsKPiA+ICsJCQlmb3VuZF9mcyA9IHRydWU7Cj4g PiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gc2V0dXBfZnJhbWVidWZmZXJzKGRwX2Nv bm4pOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlpZ3Rfd2FybigiQ3JlYXRpbmcgZnJhbWVidWZm ZXIgZm9yIGNvbm5lY3RvciAldSBmYWlsZWQgKCVkKVxuIiwKPiA+ICsJCQkgYy0+Y29ubmVjdG9y X2lkLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoZm91 bmRfZnMpIHsKPiA+ICsJCXJldCA9IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKGRwX2Nvbm4p Owo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCWlndF93YXJuKCJDcmVhdGluZyBmYWlsc2FmZSBm cmFtZWJ1ZmZlciBmb3IgY29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXG4iLAo+ID4gKwkJCQkgYy0+ Y29ubmVjdG9yX2lkLCByZXQpOwo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCQl9Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKHZpZGVvX3BhdHRlcm5fZmxhZykgewo+ID4gKwkJZHBfY29ubi0+dGVz dF9wYXR0ZXJuLmhkaXNwbGF5ID0gaGRpc3BsYXk7Cj4gPiArCQlkcF9jb25uLT50ZXN0X3BhdHRl cm4udmRpc3BsYXkgPSB2ZGlzcGxheTsKPiA+ICsJCWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5iaXRk ZXB0aCA9IGJpdGRlcHRoOwo+ID4gKwo+ID4gKwkJcmV0ID0gc2V0dXBfdmlkZW9fcGF0dGVybl9m cmFtZWJ1ZmZlcihkcF9jb25uKTsKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlpZ3Rfd2Fybigi Q3JlYXRpbmcgZnJhbWVidWZmZXIgZm9yIGNvbm5lY3RvciAldSBmYWlsZWQgKCVkKVxuIiwKPiA+ ICsJCQkJIGMtPmNvbm5lY3Rvcl9pZCwgcmV0KTsKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwkJ fQo+ID4gKwo+ID4gKwkJcmV0ID0gZmlsbF9mcmFtZWJ1ZmZlcihkcF9jb25uKTsKPiA+ICsJCWlm IChyZXQpIHsKPiA+ICsJCQlpZ3Rfd2FybigiRmlsbGluZyBmcmFtZWJ1ZmZlciBmb3IgY29ubmVj dG9yICV1IGZhaWxlZCAoJWQpXG4iLAo+ID4gKwkJCQkgYy0+Y29ubmVjdG9yX2lkLCByZXQpOwo+ ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHJl dDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBzZXRfdmlkZW8oaW50IG1vZGUsIHN0cnVj dCBjb25uZWN0b3IgKnRlc3RfY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsJZHJtTW9kZU1vZGVJbmZv ICpyZXF1ZXN0ZWRfbW9kZTsKPiA+ICsJdWludDMyX3QgcmVxdWlyZWRfZmJfaWQ7Cj4gPiArCXN0 cnVjdCBpZ3RfZmIgcmVxdWlyZWRfZmI7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwlz d2l0Y2ggKG1vZGUpIHsKPiA+ICsJY2FzZSBJTlRFTF9NT0RFX05PTkU6Cj4gPiArCQlpZ3RfaW5m bygiTk9ORVxuIik7Cj4gPiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIHRlc3RfY29u bmVjdG9yLT5jcnRjLAo+ID4gKwkJCQkgICAgIC0xLCAwLCAwLCBOVUxMLCAwLCBOVUxMKTsKPiA+ ICsJCWdvdG8gb3V0Owo+ID4gKwljYXNlIElOVEVMX01PREVfUFJFRkVSUkVEOgo+ID4gKwkJaWd0 X2luZm8oIlBSRUZFUlJFRFxuIik7Cj4gPiArCQlyZXF1ZXN0ZWRfbW9kZSA9ICAmdGVzdF9jb25u ZWN0b3ItPm1vZGVfcHJlZmVycmVkOwo+ID4gKwkJcmVxdWlyZWRfZmJfaWQgPSB0ZXN0X2Nvbm5l Y3Rvci0+ZmI7Cj4gPiArCQlyZXF1aXJlZF9mYiA9IHRlc3RfY29ubmVjdG9yLT5mYl92aWRlb19w YXR0ZXJuOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgSU5URUxfTU9ERV9TVEFOREFSRDoKPiA+ ICsJCWlndF9pbmZvKCJTVEFOREFSRFxuIik7Cj4gPiArCQlyZXF1ZXN0ZWRfbW9kZSA9ICAmdGVz dF9jb25uZWN0b3ItPm1vZGVfc3RhbmRhcmQ7Cj4gPiArCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3Rf Y29ubmVjdG9yLT5mYjsKPiA+ICsJCXJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3ItPmZiX3Zp ZGVvX3BhdHRlcm47Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBJTlRFTF9NT0RFX0ZBSUxTQUZF Ogo+ID4gKwkJaWd0X2luZm8oIkZBSUxTQUZFXG4iKTsKPiA+ICsJCXJlcXVlc3RlZF9tb2RlID0g ICZ0ZXN0X2Nvbm5lY3Rvci0+bW9kZV9mYWlsc2FmZTsKPiA+ICsJCXJlcXVpcmVkX2ZiX2lkID0g dGVzdF9jb25uZWN0b3ItPmZhaWxzYWZlX2ZiOwo+ID4gKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nv bm5lY3Rvci0+ZmJfZmFpbHNhZmVfcGF0dGVybjsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIElO VEVMX01PREVfVklERU9fUEFUVEVSTl9URVNUOgo+ID4gKwkJaWd0X2luZm8oIlZJREVPIFBBVFRF Uk4gVEVTVFxuIik7Cj4gPiArCQlyZXF1ZXN0ZWRfbW9kZSA9ICZ0ZXN0X2Nvbm5lY3Rvci0+dGVz dF9wYXR0ZXJuLm1vZGU7Cj4gPiArCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3RfY29ubmVjdG9yLT50 ZXN0X3BhdHRlcm4uZmI7Cj4gPiArCQlyZXF1aXJlZF9mYiA9IHRlc3RfY29ubmVjdG9yLT50ZXN0 X3BhdHRlcm4uZmJfcGF0dGVybjsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIElOVEVMX01PREVf SU5WQUxJRDoKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWlndF93YXJuKCJJTlZBTElEISAoJTA4eCkg TW9kZSBzZXQgYWJvcnRlZCFcbiIsIG1vZGUpOwo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlndF9pbmZvKCJDUlRDKCV1KToiLCB0ZXN0X2Nvbm5lY3Rvci0+Y3J0Yyk7Cj4g PiArCWttc3Rlc3RfZHVtcF9tb2RlKHJlcXVlc3RlZF9tb2RlKTsKPiA+ICsJcmV0ID0gZHJtTW9k ZVNldENydGMoZHJtX2ZkLCB0ZXN0X2Nvbm5lY3Rvci0+Y3J0YywgcmVxdWlyZWRfZmJfaWQsIDAs IDAsCj4gPiArCQkJICAgICAmdGVzdF9jb25uZWN0b3ItPmlkLCAxLCByZXF1ZXN0ZWRfbW9kZSk7 Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gc2V0IG1vZGUgKCVk eCVkQCVkSHopOiAlc1xuIiwKPiA+ICsJCQkgcmVxdWVzdGVkX21vZGUtPmhkaXNwbGF5LCByZXF1 ZXN0ZWRfbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJIHJlcXVlc3RlZF9tb2RlLT52cmVmcmVzaCwg c3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmcmVxdWlyZWRf ZmIpOwo+ID4gKwo+ID4gKwl9Cj4gPiArCS8qIEtlZXAgdGhlIHBhdHRlcm4gb24gb3V0cHV0IGxp bmVzIGZvciAxIHNlYyBmb3IgRFBSLTEyMCB0byBkZXRlY3QgaXQgKi8KPiA+ICsJc2xlZXAoMSk7 Cj4gPiArCj4gPiArb3V0Ogo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlpZ3Rfd2FybigiRmFpbGVk IHRvIHNldCBDUlRDIGZvciBjb25uZWN0b3IgJXVcbiIsCj4gPiArCQkJIHRlc3RfY29ubmVjdG9y LT5pZCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludAo+ID4gK3NldF9kZWZhdWx0X21vZGUoc3RydWN0IGNvbm5lY3RvciAqYywgYm9v bCBzZXRfbW9kZSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBmYl9pZCA9IDA7Cj4gPiArCXN0 cnVjdCBpZ3RfZmIgZmJfaW5mbzsKPiA+ICsJaW50IHJldCA9IDA7Cj4gPiArCj4gPiArCWlmICgh c2V0X21vZGUpIHsKPiA+ICsJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0Yywg MCwgMCwgMCwKPiA+ICsJCQkJICAgICBOVUxMLCAwLCBOVUxMKTsKPiA+ICsJCWlmIChyZXQpCj4g PiArCQkJaWd0X3dhcm4oIkZhaWxlZCB0byB1bnNldCBtb2RlIik7Cj4gPiArCQlyZXR1cm4gcmV0 Owo+ID4gKwl9Cj4gPiArCj4gPiArCWMtPm1vZGUgPSBjLT5jb25uZWN0b3ItPm1vZGVzWzBdOwo+ ID4gKwo+ID4gKwl3aWR0aCA9IGMtPm1vZGUuaGRpc3BsYXk7Cj4gPiArCWhlaWdodCA9IGMtPm1v ZGUudmRpc3BsYXk7Cj4gPiArCj4gPiArCWZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRy bV9mZCwgd2lkdGgsIGhlaWdodCwKPiA+ICsJCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwK PiA+ICsJCQkJICAgICAgdGlsaW5nLCAmZmJfaW5mbyk7Cj4gPiArCj4gPiArCWlndF9pbmZvKCJD UlRDKCV1KTpbJWRdIiwgYy0+Y3J0YywgMCk7Cj4gPiArCWttc3Rlc3RfZHVtcF9tb2RlKCZjLT5t b2RlKTsKPiA+ICsJZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCAtMSwgMCwgMCwgTlVM TCwgMCwgTlVMTCk7Cj4gPiArCXJldCA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0Yywg ZmJfaWQsIDAsIDAsCj4gPiArCQkJICAgICAmYy0+aWQsIDEsICZjLT5tb2RlKTsKPiA+ICsJaWYg KHJldCkgewo+ID4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgbW9kZSAoJWR4JWRAJWRIeik6 ICVzXG4iLAo+ID4gKwkJCSB3aWR0aCwgaGVpZ2h0LCBjLT5tb2RlLnZyZWZyZXNoLCBzdHJlcnJv cihlcnJubykpOwo+ID4gKwkJaWd0X3JlbW92ZV9mYihkcm1fZmQsICZmYl9pbmZvKTsKPiA+ICsK PiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dWludDMyX3QgZmluZF9jcnRjX2Zvcl9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3RvciAqYykKPiA+ ICt7Cj4gPiArCWRybU1vZGVFbmNvZGVyICplOwo+ID4gKwl1aW50MzJfdCBwb3NzaWJsZV9jcnRj czsKPiA+ICsJaW50IGksIGo7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudF9l bmNvZGVyczsgaSsrKSB7Cj4gPiArCQllID0gZHJtTW9kZUdldEVuY29kZXIoZHJtX2ZkLCBjLT5l bmNvZGVyc1tpXSk7Cj4gPiArCQlwb3NzaWJsZV9jcnRjcyA9IGUtPnBvc3NpYmxlX2NydGNzOwo+ ID4gKwkJZHJtTW9kZUZyZWVFbmNvZGVyKGUpOwo+ID4gKwo+ID4gKwkJZm9yIChqID0gMDsgcG9z c2libGVfY3J0Y3MgPj4gajsgaisrKQo+ID4gKwkJCWlmIChwb3NzaWJsZV9jcnRjcyAmICgxIDw8 IGopKQo+ID4gKwkJCQlyZXR1cm4gcmVzb3VyY2VzLT5jcnRjc1tqXTsKPiA+ICsJfQo+ID4gKwly ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBSZS1wcm9iZSBjb25uZWN0b3Jz IGFuZCBkbyBhIG1vZGVzZXQgYmFzZWQgb24gdGVzdCByZXF1ZXN0IG9yCj4gPiArICogaW4gY2Fz ZSBvZiBhIGhvdHBsdWcgdWV2ZW50Lgo+ID4gKyAqCj4gPiArICogQG1vZGU6IFZpZGVvIG1vZGUg cmVxdWVzdGVkIGJ5IHRoZSB0ZXN0Cj4gPiArICogQGlzX2NvbXBsaWFuY2VfdGVzdDogMTogSWYg aXQgaXMgYSBjb21wbGlhbmNlIHRlc3QKPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAwOiBJ ZiBpdCBpcyBhIGhvdHBsdWcgZXZlbnQKPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICog MDogT24gU3VjY2Vzcwo+ID4gKyAqIC0xOiBPbiBmYWlsdXJlCj4gPiArICovCj4gPiAraW50IHVw ZGF0ZV9kaXNwbGF5KGludCBtb2RlLCBib29sIGlzX2NvbXBsaWFuY2VfdGVzdCkKPiA+ICt7Cj4g PiArCXN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvcnMsICpjb25uOwo+ID4gKwlpbnQgY250LCBy ZXQgPSAwOwo+ID4gKwlib29sIHNldF9tb2RlOwo+ID4gKwo+ID4gKwlyZXNvdXJjZXMgPSBkcm1N b2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7Cj4gPiArCWlmICghcmVzb3VyY2VzKSB7Cj4gPiArCQlp Z3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJu bykpOwo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArCj4gPiArCWNvbm5lY3RvcnMgPSBj YWxsb2MocmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzLAo+ID4gKwkJCSAgICBzaXplb2Yoc3Ry dWN0IGNvbm5lY3RvcikpOwo+ID4gKwlpZiAoIWNvbm5lY3RvcnMpCj4gPiArCQlyZXR1cm4gLTE7 Cj4gPiArCj4gPiArCS8qIEZpbmQgYW55IGNvbm5lY3RlZCBkaXNwbGF5cyAqLwo+ID4gKwlmb3Ig KGNudCA9IDA7IGNudCA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgY250KyspIHsKPiA+ ICsJCWRybU1vZGVDb25uZWN0b3IgKmM7Cj4gPiArCj4gPiArCQljb25uID0gJmNvbm5lY3RvcnNb Y250XTsKPiA+ICsJCWNvbm4tPmlkID0gcmVzb3VyY2VzLT5jb25uZWN0b3JzW2NudF07Cj4gPiAr CQljID0gZHJtTW9kZUdldENvbm5lY3Rvcihkcm1fZmQsIGNvbm4tPmlkKTsKPiA+ICsJCWlmIChj LT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQgJiYKPiA+ ICsJCSAgICBjLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgewo+ID4gKwkJCXRl c3RfY29ubmVjdG9yX2lkID0gYy0+Y29ubmVjdG9yX2lkOwo+ID4gKwkJCWNvbm4tPmNvbm5lY3Rv ciA9IGM7Cj4gPiArCQkJY29ubi0+Y3J0YyA9IGZpbmRfY3J0Y19mb3JfY29ubmVjdG9yKGMpOwo+ ID4gKwkJCXRlc3RfY3J0YyA9IGNvbm4tPmNydGM7Cj4gPiArCQkJc2V0X21vZGUgPSB0cnVlOwo+ ID4gKwkJCWJyZWFrOwo+ID4gKwkJfSBlbHNlIGlmIChjLT5jb25uZWN0b3JfaWQgPT0gdGVzdF9j b25uZWN0b3JfaWQgJiYKPiA+ICsJCQkgICBjLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0RJU0NP Tk5FQ1RFRCkgewo+ID4gKwkJCWNvbm4tPmNvbm5lY3RvciA9IGM7Cj4gPiArCQkJY29ubi0+Y3J0 YyA9IHRlc3RfY3J0YzsKPiA+ICsJCQlzZXRfbW9kZSA9IGZhbHNlOwo+ID4gKwkJCWJyZWFrOwo+ ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChjbnQgPT0gcmVzb3VyY2VzLT5jb3VudF9j b25uZWN0b3JzKSB7Cj4gPiArCQlyZXQgPSAtMTsKPiA+ICsJCWdvdG8gZXJyOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlmIChpc19jb21wbGlhbmNlX3Rlc3QpIHsKPiA+ICsJCXNldF90ZXN0X21vZGUo Y29ubik7Cj4gPiArCQlyZXQgPSBzZXRfdmlkZW8oSU5URUxfTU9ERV9OT05FLCBjb25uKTsKPiA+ ICsJCXJldCA9IHNldF92aWRlbyhtb2RlLCBjb25uKTsKPiA+ICsKPiA+ICsJfSBlbHNlCj4gPiAr CQlyZXQgPSBzZXRfZGVmYXVsdF9tb2RlKGNvbm4sIHNldF9tb2RlKTsKPiA+ICsKPiA+ICsgZXJy Ogo+ID4gKwlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uLT5jb25uZWN0b3IpOwo+ID4gKwkvKiBF cnJvciBjb25kaXRpb24gaWYgbm8gY29ubmVjdGVkIGRpc3BsYXlzICovCj4gPiArCWZyZWUoY29u bmVjdG9ycyk7Cj4gPiArCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlc291cmNlcyk7Cj4gPiArCXJl dHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBjaGFyIG9wdHN0cltdID0g ImhpIjsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHVz YWdlKGNoYXIgKm5hbWUsIGNoYXIgb3B0KQo+ID4gK3sKPiA+ICsJaWd0X2luZm8oInVzYWdlOiAl cyBbLWhpXVxuIiwgbmFtZSk7Cj4gPiArCWlndF9pbmZvKCJcdC1pXHRkdW1wIGluZm9cbiIpOwo+ ID4gKwlpZ3RfaW5mbygiXHREZWZhdWx0IGlzIHRvIHJlc3BvbmQgdG8gRFBSLTEyMCB0ZXN0c1xu Iik7Cj4gPiArCWV4aXQoKG9wdCAhPSAnaCcpID8gLTEgOiAwKTsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHZvaWQpCj4gPiArewo+ID4gKwlmY2xvc2UodGVz dF9hY3RpdmVfZnApOwo+ID4gKwlmY2xvc2UodGVzdF9kYXRhX2ZwKTsKPiA+ICsJZmNsb3NlKHRl c3RfdHlwZV9mcCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18o KG5vcmV0dXJuKSkgY2xlYW51cF9hbmRfZXhpdChpbnQgcmV0KQo+ID4gK3sKPiA+ICsJY2xlYW51 cF9kZWJ1Z2ZzKCk7Cj4gPiArCWNsb3NlKGRybV9mZCk7Cj4gPiArCWlndF9pbmZvKCJDb21wbGlh bmNlIHRlc3RpbmcgYXBwbGljYXRpb24gZXhpdGluZ1xuIik7Cj4gPiArCWV4aXQocmV0KTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgY2xlYW51cF90ZXN0KHZvaWQpCj4gPiArewo+ID4g Kwl2aWRlb19wYXR0ZXJuX2ZsYWcgPSBmYWxzZTsKPiA+ICsJaGRpc3BsYXkgPSAwOwo+ID4gKwl2 ZGlzcGxheSA9IDA7Cj4gPiArCWJpdGRlcHRoID0gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHZvaWQgcmVhZF90ZXN0X3JlcXVlc3Qodm9pZCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGxvbmcg dGVzdF90eXBlOwo+ID4gKwo+ID4gKwl0ZXN0X3R5cGUgPSBnZXRfdGVzdF90eXBlKCk7Cj4gPiAr CXByb2Nlc3NfdGVzdF9yZXF1ZXN0KHRlc3RfdHlwZSk7Cj4gPiArCWNsZWFudXBfdGVzdCgpOwo+ ID4gKwljbGVhcl90ZXN0X2FjdGl2ZSgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgZ2Jvb2xl YW4gdGVzdF9oYW5kbGVyKEdJT0NoYW5uZWwgKnNvdXJjZSwgR0lPQ29uZGl0aW9uIGNvbmRpdGlv biwKPiA+ICsJCQkgICAgIGdwb2ludGVyIGRhdGEpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBsb25n IHRlc3RfYWN0aXZlOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXdpbmQodGVzdF9hY3Rp dmVfZnApOwo+ID4gKwo+ID4gKwlyZXQgPSBmc2NhbmYodGVzdF9hY3RpdmVfZnAsICIlbHgiLCAm dGVzdF9hY3RpdmUpOwo+ID4gKwlpZiAocmV0IDwgMSkKPiA+ICsJCXJldHVybiBGQUxTRTsKPiA+ ICsKPiA+ICsJaWYgKHRlc3RfYWN0aXZlKQo+ID4gKwkJcmVhZF90ZXN0X3JlcXVlc3QoKTsKPiA+ ICsJcmV0dXJuIFRSVUU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBnYm9vbGVhbiBpbnB1dF9l dmVudChHSU9DaGFubmVsICpzb3VyY2UsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sCj4gPiArCQkJ CWdwb2ludGVyIGRhdGEpCj4gPiArewo+ID4gKwlnY2hhciBidWZbMl07Cj4gPiArCWdzaXplIGNv dW50Owo+ID4gKwo+ID4gKwljb3VudCA9IHJlYWQoZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKHNv dXJjZSksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+ID4gKwlpZiAoYnVmWzBdID09ICdxJyAmJiAoY291 bnQgPT0gMSB8fCBidWZbMV0gPT0gJ1xuJykpIHsKPiA+ICsJCWNsZWFudXBfYW5kX2V4aXQoMCk7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIFRSVUU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGVudGVyX2V4ZWNfcGF0aChjaGFyICoqYXJndikKPiA+ICt7Cj4gPiArCWNoYXIgKmV4 ZWNfcGF0aCA9IE5VTEw7Cj4gPiArCWNoYXIgKnBvcyA9IE5VTEw7Cj4gPiArCXNob3J0IGxlbl9w YXRoID0gMDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJbGVuX3BhdGggPSBzdHJsZW4oYXJn dlswXSk7Cj4gPiArCWV4ZWNfcGF0aCA9IChjaGFyICopIG1hbGxvYyhsZW5fcGF0aCk7Cj4gPiAr Cj4gPiArCW1lbWNweShleGVjX3BhdGgsIGFyZ3ZbMF0sIGxlbl9wYXRoKTsKPiA+ICsJcG9zID0g c3RycmNocihleGVjX3BhdGgsICcvJyk7Cj4gPiArCWlmIChwb3MgIT0gTlVMTCkKPiA+ICsJCSoo cG9zKzEpID0gJ1wwJzsKPiA+ICsKPiA+ICsJcmV0ID0gY2hkaXIoZXhlY19wYXRoKTsKPiA+ICsJ aWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4gKwlmcmVlKGV4ZWNfcGF0aCk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybWlvX21vZGUoaW50IHNpZykKPiA+ICt7Cj4g PiArCXRjc2V0YXR0cih0aW9fZmQsIFRDU0FOT1csICZzYXZlZF90aW8pOwo+ID4gKwljbG9zZSh0 aW9fZmQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzZXRfdGVybWlvX21vZGUodm9p ZCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB0ZXJtaW9zIHRpbzsKPiA+ICsKPiA+ICsJLyogZG9uJ3Qg YXR0ZW1wdCB0byBzZXQgdGVybWluYWwgYXR0cmlidXRlcyBpZiBub3QgaW4gdGhlIGZvcmVncm91 bmQKPiA+ICsJICogcHJvY2VzcyBncm91cAo+ID4gKwkgKi8KPiA+ICsJaWYgKGdldHBncnAoKSAh PSB0Y2dldHBncnAoU1RET1VUX0ZJTEVOTykpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCXRp b19mZCA9IGR1cChTVERJTl9GSUxFTk8pOwo+ID4gKwl0Y2dldGF0dHIodGlvX2ZkLCAmc2F2ZWRf dGlvKTsKPiA+ICsJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKHJlc3RvcmVfdGVybWlvX21vZGUp Owo+ID4gKwl0aW8gPSBzYXZlZF90aW87Cj4gPiArCXRpby5jX2xmbGFnICY9IH4oSUNBTk9OIHwg RUNITyk7Cj4gPiArCXRjc2V0YXR0cih0aW9fZmQsIFRDU0FOT1csICZ0aW8pOwo+ID4gK30KPiA+ ICsKPiA+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gPiArewo+ID4gKwlpbnQg YzsKPiA+ICsJaW50IHJldCA9IDA7Cj4gPiArCUdJT0NoYW5uZWwgKnN0ZGluY2hhbm5lbCwgKnRl c3RhY3RpdmVfY2hhbm5lbDsKPiA+ICsJR01haW5Mb29wICptYWlubG9vcDsKPiA+ICsJYm9vbCBv cHRfZHVtcF9pbmZvID0gZmFsc2U7Cj4gPiArCXN0cnVjdCBvcHRpb24gbG9uZ19vcHRzW10gPSB7 Cj4gPiArCQl7ImhlbHAtZGVzY3JpcHRpb24iLCAwLCAwLCBIRUxQX0RFU0NSSVBUSU9OfSwKPiA+ ICsJCXsiaGVscCIsIDAsIDAsICdoJ30sCj4gPiArCX07Cj4gPiArCj4gPiArCWlndF9za2lwX29u X3NpbXVsYXRpb24oKTsKPiA+ICsKPiA+ICsJZW50ZXJfZXhlY19wYXRoKGFyZ3YpOwo+ID4gKwo+ ID4gKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBvcHRzdHIsIGxvbmdfb3B0 cywgTlVMTCkpICE9IC0xKSB7Cj4gPiArCQlzd2l0Y2ggKGMpIHsKPiA+ICsJCWNhc2UgJ2knOgo+ ID4gKwkJCW9wdF9kdW1wX2luZm8gPSB0cnVlOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSBI RUxQX0RFU0NSSVBUSU9OOgo+ID4gKwkJCWlndF9pbmZvKCJEUCBDb21wbGlhbmNlIFRlc3QgU3Vp dGUgdXNpbmcgRFBSLTEyMFxuIik7Cj4gPiArCQkJaWd0X2luZm8oIkVESUQgdGVzdHNcbiIpOwo+ ID4gKwkJCWlndF9pbmZvKCJWaWRlbyBQYXR0ZXJuIEdlbmVyYXRpb24gdGVzdHNcbiIpOwo+ID4g KwkJCWV4aXQoMCk7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQlkZWZhdWx0Ogo+ID4gKwkJCS8qIGZh bGwgdGhyb3VnaCAqLwo+ID4gKwkJY2FzZSAnaCc6Cj4gPiArCQkJdXNhZ2UoYXJndlswXSwgYyk7 Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJc2V0X3Rlcm1pb19t b2RlKCk7Cj4gPiArCj4gPiArCWlndF9pbmZvKCIqKioqKioqKioqKioqRFAgQ29tcGxpYW5jZSBU ZXN0aW5nIHVzaW5nIERQUi0xMjAqKioqKioqKioqKioqXG4iKTsKPiA+ICsJaWd0X2luZm8oIldh aXRpbmcgZm9yIHRlc3QgcmVxdWVzdC4uLi4uLlxuIik7Cj4gCj4gCj4gVGhpcyBwcmludG91dCBj b3VsZCBiZSBtb3ZlZCBiZWxvdyBhbGwgdGhlIHJlcXVpcmVkIHNldHVwIHRoYXQgaGFwcGVucyBi ZWxvdy4uLgo+IAo+IAo+ID4gKwlkcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0FOWSk7 Cj4gPiArCj4gPiArCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiA+ICsJc2V0dXBf ZGVidWdmc19maWxlcygpOwo+ID4gKwljbGVhbnVwX3Rlc3QoKTsKPiA+ICsKPiA+ICsJaWYgKG9w dF9kdW1wX2luZm8pIHsKPiA+ICsJCWR1bXBfaW5mbygpOwo+ID4gKwkJZ290byBvdXRfY2xvc2U7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogR2V0IHRoZSBEUCBjb25uZWN0b3IgSUQgYW5kIENSVEMg Ki8KPiA+ICsJaWYgKHVwZGF0ZV9kaXNwbGF5KDAsIGZhbHNlKSkgewo+ID4gKwkJaWd0X3dhcm4o IkZhaWxlZCB0byBzZXQgZGVmYXVsdCBtb2RlXG4iKTsKPiA+ICsJCXJldCA9IC0xOwo+ID4gKwkJ Z290byBvdXRfY2xvc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbWFpbmxvb3AgPSBnX21haW5fbG9v cF9uZXcoTlVMTCwgRkFMU0UpOwo+ID4gKwlpZiAoIW1haW5sb29wKSB7Cj4gPiArCQlpZ3Rfd2Fy bigiRmFpbGVkIHRvIGNyZWF0ZSBHTWFpbkxvb3BcbiIpOwo+ID4gKwkJcmV0ID0gLTE7Cj4gPiAr CQlnb3RvIG91dF9jbG9zZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoIWludGVsX2RwX2NvbXBs aWFuY2Vfc2V0dXBfaG90cGx1ZygpKSB7Cj4gPiArCQlpZ3Rfd2FybigiRmFpbGVkIHRvIGluaXRp YWxpemUgaG90cGx1ZyBzdXBwb3J0XG4iKTsKPiA+ICsJCWdvdG8gb3V0X21haW5sb29wOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXRlc3RhY3RpdmVfY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25l dyhmaWxlbm8odGVzdF9hY3RpdmVfZnApKTsKPiA+ICsJaWYgKCF0ZXN0YWN0aXZlX2NoYW5uZWwp IHsKPiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHRlc3RfYWN0aXZlIEdJT0NoYW5u ZWxcbiIpOwo+ID4gKwkJZ290byBvdXRfY2xvc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0g Z19pb19hZGRfd2F0Y2godGVzdGFjdGl2ZV9jaGFubmVsLCBHX0lPX0lOIHwgR19JT19FUlIsCj4g PiArCQkJICAgICB0ZXN0X2hhbmRsZXIsIE5VTEwpOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4g KwkJaWd0X3dhcm4oIkZhaWxlZCB0byBhZGQgd2F0Y2ggb24gdWRldiBHSU9DaGFubmVsXG4iKTsK PiA+ICsJCWdvdG8gb3V0X2Nsb3NlOwo+ID4gKwl9Cj4gPiArCj4gPiArCXN0ZGluY2hhbm5lbCA9 IGdfaW9fY2hhbm5lbF91bml4X25ldygwKTsKPiA+ICsJaWYgKCFzdGRpbmNoYW5uZWwpIHsKPiA+ ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHN0ZGluIEdJT0NoYW5uZWxcbiIpOwo+ID4g KwkJZ290byBvdXRfaG90cGx1ZzsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBnX2lvX2FkZF93 YXRjaChzdGRpbmNoYW5uZWwsIEdfSU9fSU4gfCBHX0lPX0VSUiwgaW5wdXRfZXZlbnQsCj4gPiAr CQkJICAgICBOVUxMKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWlndF93YXJuKCJGYWls ZWQgdG8gYWRkIHdhdGNoIG9uIHN0ZGluIEdJT0NoYW5uZWxcbiIpOwo+ID4gKwkJZ290byBvdXRf c3RkaW87Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gMDsKPiAKPiAKPiAuLi4gdG8gaGVyZSBt YXliZS4KPiAKPiA+ICsKPiA+ICsJZ19tYWluX2xvb3BfcnVuKG1haW5sb29wKTsKPiA+ICsKPiA+ ICtvdXRfc3RkaW86Cj4gPiArCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihzdGRpbmNoYW5uZWwsIFRS VUUsIE5VTEwpOwo+ID4gK291dF9ob3RwbHVnOgo+ID4gKwlpbnRlbF9kcF9jb21wbGlhbmNlX2Ns ZWFudXBfaG90cGx1ZygpOwo+ID4gK291dF9tYWlubG9vcDoKPiA+ICsJZ19tYWluX2xvb3BfdW5y ZWYobWFpbmxvb3ApOwo+ID4gK291dF9jbG9zZToKPiA+ICsJY2xlYW51cF9kZWJ1Z2ZzKCk7Cj4g PiArCWNsb3NlKGRybV9mZCk7Cj4gPiArCj4gPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiA+ ICsKPiA+ICsJaWd0X2luZm8oIkNvbXBsaWFuY2UgdGVzdGluZyBhcHBsaWNhdGlvbiBleGl0aW5n XG4iKTsKPiA+ICsJaWd0X2V4aXQoKTsKPiA+ICt9Cj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50 ZWxfZHBfY29tcGxpYW5jZS5oIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZS5oCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uNTBhOTY2Mgo+ID4gLS0tIC9kZXYv bnVsbAo+ID4gKysrIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZS5oCj4gPiBAQCAtMCwwICsx LDM1IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+ ID4gKyAqIE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiArICoK PiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgo+ID4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKPiA+ICsgKiBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4g PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gPiArICog SU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiA+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gPiArI2lu Y2x1ZGUgPGdsaWIuaD4KPiA+ICsKPiA+ICtleHRlcm4gaW50IGRybV9mZDsKPiA+ICsKPiA+ICtn Ym9vbGVhbiBpbnRlbF9kcF9jb21wbGlhbmNlX3NldHVwX2hvdHBsdWcodm9pZCk7Cj4gPiArdm9p ZCBpbnRlbF9kcF9jb21wbGlhbmNlX2NsZWFudXBfaG90cGx1Zyh2b2lkKTsKPiA+ICsKPiA+ICsv KiBjYWxsZWQgYnkgdGhlIGhvdHBsdWcgY29kZSAqLwo+ID4gK2ludCB1cGRhdGVfZGlzcGxheShp bnQgbW9kZSwgYm9vbCBpc19jb21wbGlhbmNlX3Rlc3QpOwo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xz L2ludGVsX2RwX2NvbXBsaWFuY2VfaG90cGx1Zy5jIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5j ZV9ob3RwbHVnLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5i NTdmOGEyCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi90b29scy9pbnRlbF9kcF9jb21wbGlh bmNlX2hvdHBsdWcuYwo+ID4gQEAgLTAsMCArMSwxMjQgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHly aWdodCAyMDE3IEludGVsIENvcnBvcmF0aW9uCj4gPiArICogICBKZXNzZSBCYXJuZXMgPGplc3Nl LmJhcm5lc0BpbnRlbC5jb20+Cj4gPiArICogICBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZh cmVAaW50ZWwuY29tPgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4g PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiA+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4g PiArICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gPiArI2luY2x1ZGUg PHN0cmluZy5oPgo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaW50ZWxfZHBfY29tcGxpYW5jZS5oIgo+ ID4gKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+Cj4gPiArc3RhdGljIHN0cnVjdCB1ZGV2X21vbml0b3Ig KnVldmVudF9tb25pdG9yOwo+ID4gK3N0YXRpYyBzdHJ1Y3QgdWRldiAqdWRldjsKPiA+ICtzdGF0 aWMgR0lPQ2hhbm5lbCAqdWRldmNoYW5uZWw7Cj4gPiArCj4gPiArc3RhdGljIGdib29sZWFuIGhv dHBsdWdfZXZlbnQoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAo+ ID4gKwkJCSAgICAgIGdwb2ludGVyIGRhdGEpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdWRldl9kZXZp Y2UgKmRldjsKPiA+ICsJZGV2X3QgdWRldl9kZXZudW07Cj4gPiArCXN0cnVjdCBzdGF0IHM7Cj4g PiArCWNvbnN0IGNoYXIgKmhvdHBsdWc7Cj4gPiArCj4gPiArCWRldiA9IHVkZXZfbW9uaXRvcl9y ZWNlaXZlX2RldmljZSh1ZXZlbnRfbW9uaXRvcik7Cj4gPiArCWlmICghZGV2KQo+ID4gKwkJZ290 byBvdXQ7Cj4gPiArCj4gPiArCXVkZXZfZGV2bnVtID0gdWRldl9kZXZpY2VfZ2V0X2Rldm51bShk ZXYpOwo+ID4gKwlmc3RhdChkcm1fZmQsICZzKTsKPiA+ICsKPiA+ICsJaG90cGx1ZyA9IHVkZXZf ZGV2aWNlX2dldF9wcm9wZXJ0eV92YWx1ZShkZXYsICJIT1RQTFVHIik7Cj4gPiArCj4gPiArCWlm IChtZW1jbXAoJnMuc3RfcmRldiwgJnVkZXZfZGV2bnVtLCBzaXplb2YoZGV2X3QpKSA9PSAwICYm Cj4gPiArCSAgICBob3RwbHVnICYmIGF0b2koaG90cGx1ZykgPT0gMSkKPiA+ICsJCXVwZGF0ZV9k aXNwbGF5KDAsIGZhbHNlKTsKPiA+ICsKPiA+ICsJdWRldl9kZXZpY2VfdW5yZWYoZGV2KTsKPiA+ ICtvdXQ6Cj4gPiArCXJldHVybiBUUlVFOwo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICtnYm9vbGVh biBpbnRlbF9kcF9jb21wbGlhbmNlX3NldHVwX2hvdHBsdWcodm9pZCkKPiA+ICt7Cj4gPiArCWlu dCByZXQ7Cj4gPiArCj4gPiArCXVkZXYgPSB1ZGV2X25ldygpOwo+ID4gKwlpZiAoIXVkZXYpIHsK PiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHVkZXYgb2JqZWN0XG4iKTsKPiA+ICsJ CWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXVldmVudF9tb25pdG9yID0gdWRldl9tb25p dG9yX25ld19mcm9tX25ldGxpbmsodWRldiwgInVkZXYiKTsKPiA+ICsJaWYgKCF1ZXZlbnRfbW9u aXRvcikgewo+ID4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgdWRldiBldmVudCBtb25p dG9yXG4iKTsKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IHVkZXZf bW9uaXRvcl9maWx0ZXJfYWRkX21hdGNoX3N1YnN5c3RlbV9kZXZ0eXBlKHVldmVudF9tb25pdG9y LAo+ID4gKwkJCQkJCQkgICAgICAiZHJtIiwKPiA+ICsJCQkJCQkJICAgICAgImRybV9taW5vciIp Owo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBmaWx0ZXIg Zm9yIGRybSBldmVudHNcbiIpOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ cmV0ID0gdWRldl9tb25pdG9yX2VuYWJsZV9yZWNlaXZpbmcodWV2ZW50X21vbml0b3IpOwo+ID4g KwlpZiAocmV0IDwgMCkgewo+ID4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBlbmFibGUgdWRldiBl dmVudCByZWNlcHRpb25cbiIpOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ dWRldmNoYW5uZWwgPQo+ID4gKwkJZ19pb19jaGFubmVsX3VuaXhfbmV3KHVkZXZfbW9uaXRvcl9n ZXRfZmQodWV2ZW50X21vbml0b3IpKTsKPiA+ICsJaWYgKCF1ZGV2Y2hhbm5lbCkgewo+ID4gKwkJ aWd0X3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgdWRldiBHSU9DaGFubmVsXG4iKTsKPiA+ICsJCWdv dG8gb3V0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGdfaW9fYWRkX3dhdGNoKHVkZXZjaGFu bmVsLCBHX0lPX0lOIHwgR19JT19FUlIsIGhvdHBsdWdfZXZlbnQsCj4gPiArCQkJICAgICB1ZGV2 KTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gYWRkIHdh dGNoIG9uIHVkZXYgR0lPQ2hhbm5lbFxuIik7Cj4gPiArCQlnb3RvIG91dDsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXR1cm4gVFJVRTsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiArCWludGVsX2RwX2NvbXBs aWFuY2VfY2xlYW51cF9ob3RwbHVnKCk7Cj4gPiArCXJldHVybiBGQUxTRTsKPiA+ICt9Cj4gPiAr Cj4gPiArdm9pZCBpbnRlbF9kcF9jb21wbGlhbmNlX2NsZWFudXBfaG90cGx1Zyh2b2lkKQo+ID4g K3sKPiA+ICsJaWYgKHVkZXZjaGFubmVsKQo+ID4gKwkJZ19pb19jaGFubmVsX3NodXRkb3duKHVk ZXZjaGFubmVsLCBUUlVFLCBOVUxMKTsKPiA+ICsJaWYgKHVldmVudF9tb25pdG9yKQo+ID4gKwkJ dWRldl9tb25pdG9yX3VucmVmKHVldmVudF9tb25pdG9yKTsKPiA+ICsJaWYgKHVkZXYpCj4gPiAr CQl1ZGV2X3VucmVmKHVkZXYpOwo+ID4gK30KPiA+IC0tIAo+ID4gMS45LjEKPiA+IApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK