From mboxrd@z Thu Jan 1 00:00:00 1970 From: Todd Previte Subject: Re: [PATCH] igt/dp: Displayport Compliance Testing - Userspace Component Date: Fri, 17 Apr 2015 10:52:48 -0700 Message-ID: <55314870.8050809@gmail.com> References: <1428681259-21013-1-git-send-email-tprevite@gmail.com> <1428681259-21013-2-git-send-email-tprevite@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f43.google.com (mail-pa0-f43.google.com [209.85.220.43]) by gabe.freedesktop.org (Postfix) with ESMTP id C642B89BD5 for ; Fri, 17 Apr 2015 10:52:50 -0700 (PDT) Received: by pabtp1 with SMTP id tp1so132230169pab.2 for ; Fri, 17 Apr 2015 10:52:50 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Thomas Wood Cc: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org CgpPbiA0LzE3LzIwMTUgNjo0NCBBTSwgVGhvbWFzIFdvb2Qgd3JvdGU6Cj4gT24gMTAgQXByaWwg MjAxNSBhdCAxNjo1NCwgVG9kZCBQcmV2aXRlIDx0cHJldml0ZUBnbWFpbC5jb20+IHdyb3RlOgo+ PiBUaGlzIGlzIHRoZSB1c2Vyc3BhY2UgY29tcG9uZW50IG9mIHRoZSBEaXNwbGF5cG9ydCBjb21w bGlhbmNlIHRlc3RpbmcKPj4gc29mdHdhcmUgcmVxdXJpZWQgZm9yIGNvbXBsaWFuY2UgdGVzdGlu ZyBvZiB0aGUgaTkxNSBkcml2ZXIuIFRoZSBSRUFETUUKPj4gaW5jbHVkZWQgaW4gdGhlIGRwX2Nv bXBsaWFuY2UvIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbW9zdCB1cCB0byBkYXRlCj4+IGluZm9y bWF0aW9uIG9uIHRoZSB1c2UgYW5kIG9wZXJhdGlvbiBvZiB0aGUgdXNlciBhcHAuCj4gSnVzdCBh IGZldyBjb21tZW50cyBiZWxvdyBmcm9tIGEgY3Vyc29yeSBnbGFuY2UgdGhyb3VnaCB0aGUgY29k ZS4KPiBUaGVyZSBhcmUgc29tZSBwbGFjZXMgd2hlcmUgZ3JlYXRlciB1c2Ugb2YgdGhlIGktZy10 IGxpYnJhcnkgbWF5IGJyaW5nCj4gc29tZSBhZHZhbnRhZ2VzLgo+Cj4KPj4gU2lnbmVkLW9mZi1i eTogVG9kZCBQcmV2aXRlIDx0cHJldml0ZUBnbWFpbC5jb20+Cj4+IC0tLQo+PiAgIGRwX2NvbXBs aWFuY2UvUkVBRE1FICAgICAgICAgIHwgMTAyICsrKysrKwo+PiAgIGRwX2NvbXBsaWFuY2UvYnVp bGQuc2ggICAgICAgIHwgICA2ICsKPj4gICBkcF9jb21wbGlhbmNlL2RwX2NvbXBsaWFuY2UuYyB8 IDc4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICBkcF9j b21wbGlhbmNlL2lucHV0LmMgICAgICAgICB8ICA0OCArKysKPj4gICA0IGZpbGVzIGNoYW5nZWQs IDkzOCBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRwX2NvbXBsaWFuY2Uv UkVBRE1FCj4+ICAgY3JlYXRlIG1vZGUgMTAwNzU1IGRwX2NvbXBsaWFuY2UvYnVpbGQuc2gKPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHBfY29tcGxpYW5jZS9kcF9jb21wbGlhbmNlLmMKPj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgZHBfY29tcGxpYW5jZS9pbnB1dC5jCj4+Cj4+IGRpZmYgLS1naXQg YS9kcF9jb21wbGlhbmNlL1JFQURNRSBiL2RwX2NvbXBsaWFuY2UvUkVBRE1FCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjFlZjQ5MTMKPj4gLS0tIC9kZXYvbnVsbAo+ PiArKysgYi9kcF9jb21wbGlhbmNlL1JFQURNRQo+PiBAQCAtMCwwICsxLDEwMiBAQAo+PiArCj4+ ICtEaXNwbGF5cG9ydCBDb21wbGlhbmNlIFRlc3RpbmcKPj4gK1VzZXJzcGFjZSBBcHBsaWNhdGlv bgo+PiArCj4+ICtUaGlzIGlzIHRoZSB1c2Vyc3BhY2UgcG9ydGlvbiBvZiB0aGUgRGlzcGxheXBv cnQgQ29tcGxpYW5jZSB0ZXN0aW5nIHN1aXRlIGZvciB0aGUKPj4gK2k5MTUgZHJpdmVyLiBJdCBt dXN0IGJlIHJ1bm5pbmcgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIERpc3BsYXlw b3J0Cj4+ICtjb21wbGlhbmNlIHRlc3RpbmcuIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGF0ZXN0 IGF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhYm91dAo+PiArdGhlIHVzZXIgYXBwIGFuZCBpdHMgb3Bl cmF0aW9uLgo+PiArCj4+ICtUaGlzIGFwcCBhbmQgdGhlIGtlcm5lbCBjb2RlIHRoYXQgYWNjb21w YW5pZXMgaXQgaGFzIGJlZW4gd3JpdHRlbiB0byBzYXRpc2Z5IHRoZQo+PiArcmVxdWlyZW1lbnRz IG9mIHRoZSBEaXNwbGF5cG9ydCBMaW5rIENUUyBDb3JlIDEuMiByZXYxLjEgc3BlY2lmaWNhdGlv biBmcm9tIFZFU0EuCj4+ICsKPj4gK05vdGUgdGhhdCB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90 IHN1cHBvcnQgZURQIGNvbXBsaWFuY2UgdGVzdGluZy4KPj4gKwo+PiArQ29tcGxpYW5jZSB0ZXN0 aW5nIHJlcXVpcmVzIHNldmVyYWwgY29tcG9uZW50czoKPj4gKyAgICAgICAtIEEga2VybmVsIGJ1 aWxkIHRoYXQgY29udGFpbnMgdGhlIHBhdGNoIHNldCBmb3IgRFAgY29tcGxpYW5jZSBzdXBwb3J0 Cj4+ICsgICAgICAgLSBBIERpc3BsYXlwb3J0IGNvbXBsaWFuY2UgdGVzdGluZyBhcHBsaWFuY2Ug c3VjaCBhcyB0aGUgVW5pZ3JhZiBEUFItMTAwLAo+PiArICAgICAgICAgRFBSLTEyMCBvciBRdWFu dHVtIERhdGEgODgyRURQCj4+ICsgICAgICAgLSBUaGlzIHVzZXIgYXBwbGljYXRpb24KPj4gKyAg ICAgICAtIEEgV2luZG93cyBob3N0IG1hY2hpbmUgdG8gcnVuIHRoZSB0ZXN0IHNvZnR3YXJlCj4+ ICsgICAgICAgLSBSb290IGFjY2VzcyBvbiB0aGUgRFVUCj4+ICsKPj4gK1Rlc3Qgc2V0dXA6Cj4+ ICsgICAgICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgV2luZG93cyBob3N0 LCB0ZXN0IGFwcGxpYW5jZSBhbmQgRFVUIGJlIGZyZXNobHkKPj4gKyAgICAgICByZXN0YXJ0ZWQg YmVmb3JlIHRlc3RpbmcgYmVnaW5zLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcHJldmlvdXMgY29u ZmlndXJhdGlvbnMgYW5kCj4+ICsgICAgICAgc2V0dGluZ3Mgd2lsbCBub3QgaW50ZXJmZXJlIHdp dGggdGhlIHRlc3QgcHJvY2Vzcy4gUmVmZXIgdG8gdGhlIHRlc3QgYXBwbGlhbmNlCj4+ICsgICAg ICAgZG9jdW1lbnRhdGlvbiBmb3Igc2V0dXAsIHNvZnR3YXJlIGluc3RhbGxhdGlvbiBhbmQgb3Bl cmF0aW9uIHNwZWNpZmljIHRvIHRoYXQKPj4gKyAgICAgICBkZXZpY2UuCj4+ICsKPj4gKyAgICAg ICBUaGUgTGludXggRFVUIG11c3QgYmUgaW4gdGV4dCAoY29uc29sZSkgbW9kZSBhbmQgY2Fubm90 IGhhdmUgYW55IG90aGVyIGRpc3BsYXkKPj4gKyAgICAgICBtYW5hZ2VyIHJ1bm5pbmcuIFRoZSBl YXNpZXN0IHdheSB0byBhY2NvbXBsaXNoIHRoaXMgaXMgdG8gcGxhY2UgdGhlIHdvcmQg4oCcdGV4 dOKAnQo+PiArICAgICAgIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIGJvb3RpbmcgdGhlIGtlcm5l bC4gVGhlIHJlY29tbWVuZGVkIGJvb3QgcGFyYW1ldGVycyBmb3IKPj4gKyAgICAgICB0aGUga2Vy bmVsIGFyZSBhcyBmb2xsb3dzOgo+PiArICAgICAgICAgICAgICAg4oCcdGVzdCBkZWJ1ZyBkcm0u ZGVidWc9MHgwZeKAnQo+PiArICAgICAgIFRoaXMgZW5hYmxlcyBkZWJ1ZyBvdXRwdXQgaW4gdGhl IGxvZ3MgYW5kIHdpbGwgYm9vdCB0aGUgc3lzdGVtIHRvIGEgY29tbWFuZCBwcm9tcHQuCj4+ICsK Pj4gKyAgICAgICBZb3UgbXVzdCBiZSBsb2dnZWQgaW4gYXMgcm9vdCBpbiBvcmRlciB0byBydW4g dGhlIHVzZXIgYXBwLgo+PiArCj4+ICsgICAgICAgQ29ubmVjdGlvbnMgKHJlcXVpcmVkKToKPj4g KyAgICAgICAgICAgICAgIC0gVGVzdCBhcHBsaWFuY2UgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5h bCBEaXNwbGF5cG9ydCBjb25uZWN0b3Igb24gdGhlIERVVAo+PiArICAgICAgICAgICAgICAgLSBU ZXN0IGFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhlIFdpbmRvd3MgaG9zdCAodXN1YWxseSB2aWEg VVNCKQo+PiArCj4+ICsgICAgICAgQ29ubmVjdGlvbnMgKG9wdGlvbmFsKToKPj4gKyAgICAgICAg ICAgICAgIC0gU1NIL3RlbG5ldCBjb25uZWN0aW9uIHRvIHRoZSBEVVQgZnJvbSB0aGUgV2luZG93 cyBob3N0IG9yIG90aGVyIHN5c3RlbQo+PiArICAgICAgICAgICAgICAgLSBBIGRpc3BsYXkgYXR0 YWNoZWQgdG8gdGhlIERVVCBmb3IgbW9uaXRvcmluZyB0aGUgY29uc29sZSBvciBydW5uaW5nCj4+ ICsgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGFwcC4KPj4gKwo+PiArICAgICAgIFRoZSB1c2Vy IGFwcCBjYW4gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbnNvbGUgb24gdGhlIERVVCAoaWYg YSBub24tRGlzcGxheXBvcnQKPj4gKyAgICAgICBkaXNwbGF5IGlzIGF0dGFjaGVkKSBvciBmcm9t IGFuIFNTSC90ZWxuZXQgc2Vzc2lvbi4gR2VuZXJhbGx5IHNwZWFraW5nLCBpdOKAmXMgYmVzdAo+ PiArICAgICAgIHRvIHJ1biBmcm9tIGFuIFNTSCBzZXNzaW9uLCBidXQgdGVzdGluZyB3aWxsIG9w ZXJhdGUgaWRlbnRpY2FsbHkgcmVnYXJkbGVzcyBvZiBob3cKPj4gKyAgICAgICB0aGUgdXNlciBh cHAgaXMgbGF1bmNoZWQuCj4+ICsKPj4gKyAgICAgICBPbmNlIHRoZSB1c2VyIGFwcGxpY2F0aW9u IGlzIHVwIGFuZCBydW5uaW5nLCB3YWl0aW5nIGZvciBhIHRlc3QgcmVxdWVzdCwgdGhlIHNvZnR3 YXJlCj4+ICsgICAgICAgb24gdGhlIFdpbmRvd3MgaG9zdCBjYW4gbm93IGJlIHVzZWQgdG8gZXhl Y3V0ZSB0aGUgY29tcGxpYW5jZSB0ZXN0cy4KPj4gKwo+PiArICAgICAgIFRMO0RSIHZlcnNpb246 Cj4+ICsgICAgICAgICAgICAgICAtIEluc3RhbGwgdGVzdCBhcHBsaWFuY2Ugc29mdHdhcmUgb24g V2luZG93cyBob3N0Cj4+ICsgICAgICAgICAgICAgICAtIEFkanVzdCBjb21tYW5kIGxpbmUgb24g TGludXggRFVUIGFzIG5lY2Vzc2FyeSB0byBlbmFibGUgZGVidWcgYW5kIGJvb3QKPj4gKyAgICAg ICAgICAgICAgICAgdG8gdGhlIGNvbnNvbGUKPj4gKyAgICAgICAgICAgICAgIC0gQ29ubmVjdCB0 aGUgdGVzdCBhcHBsaWFuY2UgdmlhIFVTQiB0byB0aGUgV2luZG93cyBob3N0IGFuZCBhIERpc3Bs YXlwb3J0Cj4+ICsgICAgICAgICAgICAgICAgIGNhYmxlIHRvIHRoZSBEVVQKPj4gKyAgICAgICAg ICAgICAgIC0gUmVib290IGFsbCBzeXN0ZW1zLCBpbmNsdWRpbmcgdGhlIHRlc3QgYXBwbGlhbmNl Cj4+ICsgICAgICAgICAgICAgICAtIFNTSCBpbnRvIHRoZSBEVVQgb3IgbG9naW4gYXQgdGhlIGNv bW1hbmQgcHJvbXB0Cj4+ICsgICAgICAgICAgICAgICAtIEVuc3VyZSB0aGF0IHRoZSBib290ZWQg a2VybmVsIGNvbnRhaW5zIHRoZSBjb21wbGlhbmNlIHRlc3QgcGF0Y2ggc2V0Cj4+ICsgICAgICAg ICAgICAgICAgIGFuZCB0aGF0IGEgdmVyc2lvbiBvZiBJR1Qgd2l0aCB0aGlzIHVzZXIgYXBwIGlz IGFsc28gcHJlc2VudAo+PiArICAgICAgICAgICAgICAgLSBMYXVuY2ggdGhlIHVzZXIgYXBwLCBh cyByb290LiBGb2xsb3cgdGhlIG9uc2NyZWVuIGluc3RydWN0aW9ucyB1bnRpbAo+PiArICAgICAg ICAgICAgICAgICBpdCBzYXlzIGl04oCZcyB3YWl0aW5nIGZvciBhIHRlc3QgdG8gYmVnaW4KPj4g KyAgICAgICAgICAgICAgIC0gRXhlY3V0ZSB0aGUgdGVzdHMgdmlhIHRoZSBzb2Z0d2FyZSBvbiB0 aGUgV2luZG93cyBob3N0IHBlciB0aGUKPj4gKyAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlv biBmb3IgdGhlIHRlc3QgYXBwbGlhbmNlCj4+ICsKPj4gK0RlYnVnZnMgRmlsZXM6Cj4+ICsKPj4g K1RoZSBmaWxlIHJvb3QgZm9yIGFsbCB0aGUgZGVidWdmcyBmaWxlcyBpczoKPj4gKwo+PiArL3N5 cy9rZXJuZWwvZGVidWcvZHJpLzAvCj4+ICsKPj4gK1RoZSBzcGVjaWZpYyBmaWxlcyBhcmUgYXMg Zm9sbG93czoKPj4gKwo+PiAraTkxNV9kcF90ZXN0X2FjdGl2ZQo+PiArICAgICAgIEEgc2ltcGxl IGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgY29tcGxpYW5jZSB0ZXN0aW5nIGlz IGN1cnJlbnRseSBhY3RpdmUKPj4gKyAgICAgICBpbiB0aGUga2VybmVsLiBUaGlzIGZsYWcgaXMg cG9sbGVkIGJ5IHVzZXJzcGFjZSBhbmQgb25jZSBzZXQsIGludm9rZXMgdGhlIHRlc3QKPj4gKyAg ICAgICBoYW5kbGVyIGluIHRoZSB1c2VyIGFwcC4KPj4gKwo+PiAraTkxNV9kcF90ZXN0X2RhdGEK Pj4gKyAgICAgICBUZXN0IGRhdGEgaXMgdXNlZCBieSB0aGUga2VybmVsIHRvIHBhc3MgcGFyYW1l dGVycyB0byB0aGUgdXNlciBhcHAuIEN1cnJlbnRseSwgdGhlCj4+ICsgICAgICAgb25seSBwYXJh bWV0ZXIgdGhhdCBpcyBkZWxpdmVyZWQgaXMgdGhlIHZpZGVvIG1vZGUgdG8gc2V0IGZvciB0aGUg dGVzdC4gQXMgbW9yZSB0ZXN0cwo+PiArICAgICAgIGFyZSBpbXBsZW1lbnRlZCwgdGhpcyB2YWx1 ZSBtYXkgYmUgdXNlZCBmb3IgYWRkaXRpb25hbCB2YWx1ZXMgb3IgaW5mb3JtYXRpb24uCj4+ICsK Pj4gK2k5MTVfZHBfdGVzdF90eXBlCj4+ICsgICAgICAgVGhlIHRlc3QgdHlwZSB2YXJpYWJsZSBp bnN0cnVjdHMgdGhlIHVzZXIgYXBwIGFzIHRvIHdoYXQgdGhlIHJlcXVlc3RlZCB0ZXN0IHdhcwo+ PiArICAgICAgIGZyb20gdGhlIHNpbmsgZGV2aWNlLiBUaGVzZSB2YWx1ZXMgZGVmaW5lZCBhdCB0 aGUgdG9wIG9mIHRoZSBhcHBsaWNhdGlvbuKAmXMgbWFpbgo+PiArICAgICAgIGltcGxlbWVudGF0 aW9uIGZpbGUgYW5kIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVk IGluCj4+ICsgICAgICAgZHJtX2RwX2hlbHBlci5oLgo+PiArCj4+ICtUZXN0IG9wZXJhdGlvbnM6 Cj4+ICsKPj4gK05vdGVzOgo+PiArICAgICAgIElmIHRoZSB0ZXN0X2FjdGl2ZSBmbGFnIGlzIHN0 dWNrLCBpdCBjYW4gYmUgY2xlYXJlZCB3aXRoIHRoaXMgc2ltcGxlIGNvbW1hbmQ6Cj4+ICsgICAg ICAgICAgICAgICBlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvMC9pOTE1X2RwX3Rlc3Rf YWN0aXZlCj4+ICsgICAgICAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHRlc3QgYXBwbGlhbmNl IGlzIGNvbm5lY3RlZCBhbmQgYSB0ZXN0IGlzIHJ1biwgYnV0IHRoZQo+PiArICAgICAgIHVzZXIg YXBwIGlzbuKAmXQgcnVubmluZy4KPj4gKwo+PiBkaWZmIC0tZ2l0IGEvZHBfY29tcGxpYW5jZS9i dWlsZC5zaCBiL2RwX2NvbXBsaWFuY2UvYnVpbGQuc2gKPj4gbmV3IGZpbGUgbW9kZSAxMDA3NTUK Pj4gaW5kZXggMDAwMDAwMC4uMGIzMTdhOQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RwX2Nv bXBsaWFuY2UvYnVpbGQuc2gKPj4gQEAgLTAsMCArMSw2IEBACj4+ICsjIS9iaW4vc2gKPj4gKyMg U2ltcGxlIGJ1aWxkIHNjcmlwdCBmb3IgdGhlIGNvbXBsaWFuY2UgYXBwCj4+ICsjIEV2ZW50dWFs bHkgc2hvdWxkIGJlIGEgbWFrZWZpbGUgaW4gSUdUCj4gWWVzLCB0aGlzIHNob3VsZCBiZSBhIE1h a2VmaWxlIQo+Cj4gT25jZSBjb21tb24gaS1nLXQgZmxhZ3MgYXJlIGFkZGVkIHRoZXJlIGFyZSBh IGZldyBtaW5vciBjb21waWxlcgo+IHdhcm5pbmdzLCBtb3N0bHkgaW50cm9kdWNlZCBieSAkKENX QVJORkxBR1MpLgo+Cj4gWW91J2xsIGFsc28gbmVlZCB0byBkZWNpZGUgaWYgeW91IHdhbnQgdG8g aW5zdGFsbCB0aGUgcHJvZ3JhbSBieQo+IGRlZmF1bHQsIGFuZCBpZiBzbyB0aGVuIGluY2x1ZGlu ZyBhIG1hbiBwYWdlIHdvdWxkIGJlIHVzZWZ1bC4KRG8geW91IGhhdmUgYSBzdGFuZGFyZCB0ZW1w bGF0ZSBmb3IgdGhlIGktZy10IG1ha2VmaWxlIG9yIGlzIGl0IGp1c3QgYSAKbWF0dGVyIG9mIGNs b25pbmcgYW4gZXhpc3Rpbmcgb25lPwoKSXQgc2hvdWxkIHByb2JhYmx5IGJlIGFuIG9wdGlvbmFs IGNvbXBvbmVudCBvZiB0aGUgdGVzdCBzdWl0ZS4gCkRpc3BsYXlwb3J0IGNvbXBsaWFuY2UgdGVz dGluZyByZXF1aXJlcyBkZWRpY2F0ZWQgSFcgYW5kIFNXIHRoYXQgaXNuJ3QgCmdlbmVyYWxseSBh dmFpbGFibGUgdG8gaW5kaXZpZHVhbCBkZXZlbG9wZXJzIChtb3N0bHkgYmVjYXVzZSBpdCdzIHJh dGhlciAKZXhwZW5zaXZlIHRvIG9idGFpbikuIFNvIGhhdmluZyBpdCBhcyBwYXJ0IG9mIGEgZGVm YXVsdCBpbnN0YWxsYXRpb24gaXMgCnByb2JhYmx5IG5vdCB3b3J0aCBkb2luZy4KPgo+PiArCj4+ ICtnY2MgLWczIGRwX2NvbXBsaWFuY2UuYyBpbnB1dC5jIC1vIGRwX2NvbXBsaWFuY2VfYXBwIC1X YWxsIGBwa2ctY29uZmlnIC0tbGlicyAtLWNmbGFncyBsaWJkcm1gCj4+ICsKPj4gZGlmZiAtLWdp dCBhL2RwX2NvbXBsaWFuY2UvZHBfY29tcGxpYW5jZS5jIGIvZHBfY29tcGxpYW5jZS9kcF9jb21w bGlhbmNlLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uN2Q1ZmVi Ygo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RwX2NvbXBsaWFuY2UvZHBfY29tcGxpYW5jZS5j Cj4+IEBAIC0wLDAgKzEsNzgyIEBACj4+ICsvKgo+PiArICogRGlzcGxheXBvcnQgQ29tcGxpYW5j ZSBUZXN0aW5nIEFwcGxpY2F0aW9uCj4gQSBjb3VwbGUgb2YgY29tcGxhaW50cyBmcm9tIGdpdC1h bSBhYm91dCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFyb3VuZAo+IGhlcmUgYW5kIGVsc2V3aGVyZS4K VGhleSBhbHdheXMgc25lYWsgaW4gdGhlcmUuIEknbGwgc2NydWIgaXQgYWdhaW4gZm9yIHdoaXRl c3BhY2UgZXJyb3JzLgo+Cj4+ICsgKiBQZXJmb3JtcyBEaXNwbGF5cG9ydCBjb21wbGlhbmNlIHRl c3RpbmcgZm9yIHRoZSBJbnRlbCBpOTE1IGRyaXZlcgo+PiArICoKPj4gKyAqIENvcHlyaWdodCA/ IDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+IEkgZ3Vlc3MgJz8nIHNob3VsZCBiZSAnwqkn LgpNdXN0IGhhdmUgaGFwcGVuZWQgd2hlbiB0aGUgdGV4dCBlbmNvZGluZyBjaGFuZ2VkLiBJIHRo aW5rIGl0J3MgVVRGLTggCm5vdy4gRG8geW91IGhhdmUgYSBwcmVmZXJlbmNlIGZvciB0ZXh0IGZp bGUgZm9ybWF0cyB3aXRoaW4gaS1nLXQ/Cj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4gKyAq Cj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBT b2Z0d2FyZS4KPj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4g VEhFIFNPRlRXQVJFLgo+PiArICoKPj4gKyAqIEF1dGhvcnM6Cj4+ICsgKiAgICBUb2RkIFByZXZp dGUgPHRwcmV2aXRlQGdtYWlsLmNvbT4KPj4gKyAqCj4+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9k ZXNldCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCj4+ICsgKiBEUk0gbW9kZXNl dCBleGFtcGxlCj4+ICsgKgo+PiArKi8KPj4gKwo+PiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4+ICsj aW5jbHVkZSA8c3RkbGliLmg+Cj4+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICsjaW5jbHVkZSA8 c3RkYm9vbC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4+ICsjaW5jbHVkZSA8ZHJt Lmg+Cj4+ICsjaW5jbHVkZSA8eGY4NmRybS5oPgo+PiArI2luY2x1ZGUgPHhmODZkcm1Nb2RlLmg+ Cj4+ICsjaW5jbHVkZSA8aTkxNV9kcm0uaD4KPj4gKwo+PiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ PiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4+ICsjaW5j bHVkZSA8ZmNudGwuaD4KPj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+PiArI2luY2x1ZGUgPHBvbGwu aD4KPj4gKwo+PiArI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cj4+ICsjaW5jbHVkZSA8dGltZS5oPgo+ PiArCj4+ICsjZGVmaW5lIEk5MTVfRFJJVkVSX05PREUgICAgICAgICAgICAgICAiL2Rldi9kcmkv Y2FyZDAiCj4+ICsjZGVmaW5lIElOVEVMX0RQX0RFQlVHRlNfUk9PVCAgICAgICAgICAiL3N5cy9r ZXJuZWwvZGVidWcvZHJpLzAvIgo+PiArCj4+ICsjZGVmaW5lIElOVEVMX0RQX1RFU1RfVFlQRV9G SUxFICAgICAgICAgICAgICAgICJpOTE1X2RwX3Rlc3RfdHlwZSIKPj4gKyNkZWZpbmUgSU5URUxf RFBfVEVTVF9BQ1RJVkVfRklMRSAgICAgICJpOTE1X2RwX3Rlc3RfYWN0aXZlIgo+PiArI2RlZmlu ZSBJTlRFTF9EUF9URVNUX0RBVEFfRklMRSAgICAgICAgICAgICAgICAiaTkxNV9kcF90ZXN0X2Rh dGEiCj4+ICsKPj4gKy8qIERSTSBkZWZpbml0aW9ucyAtIG11c3QgYmUga2VwdCBpbiBzeW5jIHdp dGggdGhlIERSTSBoZWFkZXIgKi8KPj4gKyNkZWZpbmUgRFBfVEVTVF9MSU5LX1RSQUlOSU5HICAg ICAgICAgICgxIDw8IDApCj4+ICsjZGVmaW5lIERQX1RFU1RfTElOS19WSURFT19QQVRURVJOICAg ICAgICAgICAgICgxIDw8IDEpCj4+ICsjZGVmaW5lIERQX1RFU1RfTElOS19FRElEX1JFQUQgICAg ICAgICAoMSA8PCAyKQo+PiArI2RlZmluZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTiAg ICAgICAgICAoMSA8PCAzKSAvKiBEUENEID49IDEuMSAqLwo+PiArCj4+ICsjZGVmaW5lIERQX0NP TVBMSUFOQ0VfVEVTVF9UWVBFX01BU0sgICAgICAgICAgIChEUF9URVNUX0xJTktfVFJBSU5JTkcg ICAgICB8IFwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUF9U RVNUX0xJTktfVklERU9fUEFUVEVSTiB8IFwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEUF9URVNUX0xJTktfRURJRF9SRUFEICAgICB8IFwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFU VEVSTikKPj4gKwo+PiArLyogTk9URTogVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0 aGUgZGVmaW5pdGlvbnMgaW4gaW50ZWxfZHAuYyAqLwo+PiArI2RlZmluZSBJTlRFTF9EUF9FRElE X1NISUZUX01BU0sgICAgICAgMAo+PiArI2RlZmluZSBJTlRFTF9EUF9FRElEX09LICAgICAgICAg ICAgICAgKDAgPDwgSU5URUxfRFBfRURJRF9TSElGVF9NQVNLKQo+PiArI2RlZmluZSBJTlRFTF9E UF9FRElEX0NPUlJVUFQgICAgICAgICAgKDEgPDwgSU5URUxfRFBfRURJRF9TSElGVF9NQVNLKQo+ PiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0sgNAo+PiArI2RlZmluZSBJ TlRFTF9EUF9SRVNPTFVUSU9OX1BSRUZFUlJFRCAgKDEgPDwgSU5URUxfRFBfUkVTT0xVVElPTl9T SElGVF9NQVNLKQo+PiArI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJEICAgKDIg PDwgSU5URUxfRFBfUkVTT0xVVElPTl9TSElGVF9NQVNLKQo+PiArI2RlZmluZSBJTlRFTF9EUF9S RVNPTFVUSU9OX0ZBSUxTQUZFICAgKDMgPDwgSU5URUxfRFBfUkVTT0xVVElPTl9TSElGVF9NQVNL KQo+PiArI2RlZmluZSBEUF9DT01QTElBTkNFX1ZJREVPX01PREVfTUFTSyAgIChJTlRFTF9EUF9S RVNPTFVUSU9OX1BSRUZFUlJFRCB8IFwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJTlRFTF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJEICB8IFwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTF9EUF9SRVNPTFVUSU9OX0ZBSUxT QUZFKQo+PiArCj4+ICtlbnVtCj4+ICt7Cj4+ICsgICAgICAgSU5URUxfTU9ERV9JTlZBTElEID0g LTEsCj4+ICsgICAgICAgSU5URUxfTU9ERV9OT05FID0gMCwKPj4gKyAgICAgICBJTlRFTF9NT0RF X1BSRUZFUlJFRCwKPj4gKyAgICAgICBJTlRFTF9NT0RFX1NUQU5EQVJELAo+PiArICAgICAgIElO VEVMX01PREVfRkFJTFNBRkUKPj4gK30gaW50ZWxfZGlzcGxheV9tb2RlOwo+PiArCj4+ICtzdHJ1 Y3QgZHBfY29ubmVjdG9yIHsKPj4gKyAgICAgICBkcm1Nb2RlTW9kZUluZm8gbW9kZV9zdGFuZGFy ZCwgbW9kZV9wcmVmZXJyZWQsIG1vZGVfZmFpbHNhZmU7Cj4+ICsgICAgICAgLyogU3RhbmRhcmQg YW5kIHByZWZlcnJlZCBmcmFtZSBidWZmZXIqLwo+PiArICAgICAgIHVpbnQzMl90IGZiLCBmYl93 aWR0aCwgZmJfaGVpZ2h0LCBmYl9oYW5kbGUsIGZiX3N0cmlkZSwgZmJfc2l6ZTsKPj4gKyAgICAg ICB1aW50OF90ICpwaXhtYXA7Cj4+ICsgICAgICAgLyogRmFpbHNhZmUgZnJhbWVidWZmZXIgLSBu b3RlIHRoaXMgaXMgYSAxNi1iaXQgYnVmZmVyICovCj4+ICsgICAgICAgdWludDMyX3QgZmFpbHNh ZmVfZmIsIGZhaWxzYWZlX3dpZHRoLCBmYWlsc2FmZV9oZWlnaHQ7Cj4+ICsgICAgICAgdWludDMy X3QgZmFpbHNhZmVfaGFuZGxlLCBmYWlsc2FmZV9zdHJpZGUsIGZhaWxzYWZlX3NpemU7Cj4+ICsg ICAgICAgdWludDhfdCAqZmFpbHNhZmVfcGl4bWFwOwo+PiArCj4+ICsgICAgICAgdWludDMyX3Qg Y29ubjsKPj4gKyAgICAgICB1aW50MzJfdCBjcnRjOwo+PiArCj4+ICsgICAgICAgZHJtTW9kZUNy dGMgKnNhdmVkX2NydGM7Cj4+ICsgICAgICAgc3RydWN0IGRwX2Nvbm5lY3RvciAqbmV4dDsKPj4g K307Cj4+ICsKPj4gKy8qIElucHV0IGhhbmRsaW5nIGZyb20gaW5wdXQuYyAqLwo+PiArZXh0ZXJu IHZvaWQgcmVzZXRfdGVybWluYWxfbW9kZSh2b2lkKTsKPj4gK2V4dGVybiB2b2lkIHNldF9jb25p b190ZXJtaW5hbF9tb2RlKHZvaWQpOwo+PiArZXh0ZXJuIGludCBrYmhpdCh2b2lkKTsKPj4gK2V4 dGVybiBpbnQgZ2V0Y2godm9pZCk7Cj4+ICsKPj4gK3ZvaWQgc2V0dXBfZGVidWdmc19maWxlcyhp bnQgKnRlc3RfYWN0aXZlX2ZkLCBpbnQgKnRlc3RfdHlwZV9mZCwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqdGVzdF9kYXRhX2ZkKTsKPj4gKyBpbnQgc2V0dXBfY3J0Y19mb3JfY29u bmVjdG9yKGludCBmZCwgZHJtTW9kZVJlcyAqbXIsIGRybU1vZGVDb25uZWN0b3IgKmMsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4p Owo+PiArIGludCBzZXR1cF9mcmFtZWJ1ZmZlcnMoaW50IGRydl9mZCwgc3RydWN0IGRwX2Nvbm5l Y3RvciAqZHBfY29ubik7Cj4+ICsgaW50IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKGludCBk cnZfZmQsIHN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4pOwo+PiArIGludCBzZXR1cF9kcF9j b25uZWN0b3IoaW50IGRydl9mZCwgZHJtTW9kZVJlcyAqbXIsIGRybU1vZGVDb25uZWN0b3IgKmMs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm4p Owo+PiArIGludCBzZXR1cF9jb25uZWN0b3JzKGludCBkcnZfZmQsIGRybU1vZGVSZXNQdHIgcG1y KTsKPj4gKyBpbnQgc2V0dXBfZHJtKGludCAqZHJ2X2ZkLCBjb25zdCBjaGFyICpub2RlKTsKPiBT b21lIG9mIHRoZSBsaW5lcyBhcm91bmQgaGVyZSBhcHBlYXIgdG8gYmUgaW50ZW5kZWQgYnkgb25l IHNwYWNlLgpPaCB0aGF0IG1pZ2h0IGhhdmUgYmVlbiB0aGUgYXV0by1hbGlnbiAiZmVhdHVyZSIg aW4gbXkgZWRpdG9yLiBJJ2xsIGdvIApmaXggdGhlc2UuCj4+ICsKPj4gK3ZvaWQgc2h1dGRvd24o aW50IGRydl9mZCk7Cj4+ICt2b2lkIGNsZWFudXBfZGVidWdmcyh2b2lkKTsKPj4gKwo+PiArIGlu dCBzZXRfdmlkZW9fbW9kZShpbnQgZHJ2X2ZkLCBpbnQgbW9kZSwgc3RydWN0IGRwX2Nvbm5lY3Rv ciAqdGVzdF9jb25uZWN0b3IpOwo+PiArIGludCBjaGVja190ZXN0X2FjdGl2ZSh2b2lkKTsKPj4g K3ZvaWQgY2xlYXJfdGVzdF9hY3RpdmUodm9pZCk7Cj4+ICsgaW50IGdldF90ZXN0X2RhdGEodm9p ZCk7Cj4+ICsgaW50IGdldF90ZXN0X3R5cGUodm9pZCk7Cj4+ICsKPj4gKyBpbnQgcHJvY2Vzc190 ZXN0X3JlcXVlc3QoaW50IGRydl9mZCwgaW50IHRlc3RfdHlwZSwgaW50IHRlc3RfZGF0YSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHBfY29ubmVjdG9yICpjb25uZWN0b3Ip Owo+PiArCj4+ICsvKiBHbG9iYWwgY29ubmVjdG9yIGxpc3QgKi8KPj4gK3N0cnVjdCBkcF9jb25u ZWN0b3IgKmRwX2Nvbm5lY3Rvcl9saXN0Owo+PiArdW5zaWduZWQgc2hvcnQgZHBfY29ubmVjdG9y X2NvdW50Owo+PiArCj4+ICsvKiBHbG9iYWwgZmlsZSBkZXNjcmlwdG9ycyAqLwo+PiAraW50IHRl c3RfYWN0aXZlX2ZkLCB0ZXN0X2RhdGFfZmQsIHRlc3RfdHlwZV9mZDsKPj4gKwo+PiAraW50IGdl dF90ZXN0X2RhdGEodm9pZCkKPj4gK3sKPj4gKyAgICAgICBjaGFyIGRhdGFfaW5bOV07Cj4+ICsg ICAgICAgaW50IGJ5dGVzX3JlYWQ7Cj4+ICsgICAgICAgaW50IGRhdGE7Cj4+ICsKPj4gKyAgICAg ICBhc3NlcnQodGVzdF9kYXRhX2ZkID4gMCk7Cj4+ICsgICAgICAgbHNlZWsodGVzdF9kYXRhX2Zk LCAwLCBTRUVLX1NFVCk7Cj4+ICsKPj4gKyAgICAgICBieXRlc19yZWFkID0gcmVhZCh0ZXN0X2Rh dGFfZmQsIGRhdGFfaW4sIDgpOwo+PiArICAgICAgIGlmIChieXRlc19yZWFkIDw9IDApIHsKPj4g KyAgICAgICAgICAgICAgIHByaW50ZigiVGVzdCB0eXBlIHJlYWQgZmFpbGVkIC0gJWRcclxuIiwg Ynl0ZXNfcmVhZCk7Cj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gKyAgICAgICB9Cj4+ ICsgICAgICAgZGF0YV9pbls4XSA9ICdcMCc7Cj4+ICsgICAgICAgZGF0YSA9IHN0cnRvbChkYXRh X2luLCBOVUxMLCAxNik7Cj4+ICsgICAgICAgcHJpbnRmKCJUZXN0IGRhdGEgPSAlMDh4XHJcbiIs IGRhdGEpOwo+IE5vcm1hbGx5ICJcbiIgd291bGQgc3VmZmljZSwgYnV0ICJcclxuIiBpcyBuZWVk ZWQgc2luY2UgdGhlIHRlcm1pbmFsCj4gaXMgaW4gInJhdyIgbW9kZS4gSSBzdWdnZXN0IHBlcmhh cHMgbG9va2luZyBhdAo+IGlndF9kZWJ1Z193YWl0X2Zvcl9rZXlwcmVzcyBmb3IgYSB3YXkgdG8g d2FpdCBmb3Igc2luZ2xlIGtleSBlbnRyeQo+IHdpdGhvdXQgcHV0dGluZyB0aGUgdGVybWluYWwg cGVybWFuZW50bHkgaW50byAicmF3IiBtb2RlLgpBaGhoIEkga25ldyBpLWctdCBtdXN0IGhhdmUg c29tZXRoaW5nIGluIHRoZXJlIHRvIGhhbmRsZSB0aGlzLiBJJ2xsIGhhdmUgCmEgbG9vayBhdCBp dCBhbmQgc2VlIHdoYXQgaXQnbGwgdGFrZSB0byB1c2UgdGhhdCBpbnN0ZWFkLgo+Cj4+ICsgICAg ICAgcmV0dXJuIGRhdGE7Cj4+ICt9Cj4+ICsKPj4gK2ludCBnZXRfdGVzdF90eXBlKHZvaWQpCj4+ ICt7Cj4+ICsgICAgICAgY2hhciBkYXRhX2luWzVdOwo+PiArICAgICAgIGludCBieXRlc19yZWFk Owo+PiArICAgICAgIGludCBkYXRhOwo+PiArCj4+ICsgICAgICAgYXNzZXJ0KHRlc3RfdHlwZV9m ZCA+IDApOwo+PiArICAgICAgIGxzZWVrKHRlc3RfdHlwZV9mZCwgMCwgU0VFS19TRVQpOwo+PiAr Cj4+ICsgICAgICAgYnl0ZXNfcmVhZCA9IHJlYWQodGVzdF90eXBlX2ZkLCBkYXRhX2luLCA0KTsK Pj4gKyAgICAgICBpZiAoYnl0ZXNfcmVhZCA8PSAwKSB7Cj4+ICsgICAgICAgICAgICAgICBwcmlu dGYoIlRlc3QgdHlwZSByZWFkIGZhaWxlZCAtICVkXHJcbiIsIGJ5dGVzX3JlYWQpOwo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIDA7Cj4+ICsgICAgICAgfQo+PiArICAgICAgIGRhdGFfaW5bNF0g PSAnXDAnOwo+PiArICAgICAgIGRhdGEgPSBzdHJ0b2woZGF0YV9pbiwgTlVMTCwgMTYpOwo+PiAr ICAgICAgIHByaW50ZigiVGVzdCB0eXBlID0gJTA0eFxyXG4iLCBkYXRhKTsKPj4gKyAgICAgICBy ZXR1cm4gZGF0YTsKPj4gK30KPj4gKwo+PiAraW50IHByb2Nlc3NfdGVzdF9yZXF1ZXN0KGludCBk cnZfZmQsIGludCB0ZXN0X3R5cGUsIGludCB0ZXN0X2RhdGEsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHBfY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsgICAgICAg aW50IHN0YXR1cyA9IDA7Cj4+ICsgICAgICAgaW50IG1vZGU7Cj4+ICsKPj4gKyAgICAgICAvKiBE aXNhYmxlIHRoZSBtYWluIGxpbmsgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0ZXN0Cj4+ICsgICAgICAg ICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHNpZ25hbGVkIHRocm91Z2ggYSBk ZWJ1Z2ZzIGZpbGUKPj4gKyAgICAgICAgKiBmcm9tIHRoZSBrZXJuZWwgYXQgdGhlIHN0YXJ0IG9m IHRlc3RpbmcuCj4+ICsgICAgICAgICovCj4+ICsgICAgICAgc2V0X3ZpZGVvX21vZGUoZHJ2X2Zk LCBJTlRFTF9NT0RFX05PTkUsIGNvbm5lY3Rvcik7Cj4+ICsKPj4gKyAgICAgICBzd2l0Y2ggKHRl c3RfdHlwZSkgewo+PiArICAgICAgIGNhc2UgRFBfVEVTVF9MSU5LX1RSQUlOSU5HOgo+PiArICAg ICAgICAgICAgICAgLyogTGluayB0cmFpbmluZyA9IGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiAqLwo+ PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgY2FzZSBEUF9URVNUX0xJTktfVklE RU9fUEFUVEVSTjoKPj4gKyAgICAgICAgICAgICAgIC8qIFZpZGVvIHBhdHRlcm4gPSBmdXR1cmUg aW1wbGVtZW50YXRpb24gKi8KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgIGNh c2UgRFBfVEVTVF9MSU5LX0VESURfUkVBRDoKPj4gKyAgICAgICAgICAgICAgIG1vZGUgPSAodGVz dF9kYXRhICYgRFBfQ09NUExJQU5DRV9WSURFT19NT0RFX01BU0spID4+Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSzsKPj4gKyAgICAgICAg ICAgICAgIHByaW50ZigiRURJRCB0ZXN0IHJlY2VpdmVkLCBtb2RlICVkXHJcbiIsIG1vZGUpOwo+ PiArICAgICAgICAgICAgICAgc3RhdHVzID0gc2V0X3ZpZGVvX21vZGUoZHJ2X2ZkLCBtb2RlLCBj b25uZWN0b3IpOwo+PiArICAgICAgICAgICAgICAgY2xlYXJfdGVzdF9hY3RpdmUoKTsKPj4gKyAg ICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgIGNhc2UgRFBfVEVTVF9MSU5LX1BIWV9URVNU X1BBVFRFUk46Cj4+ICsgICAgICAgICAgICAgICAvKiBQSFkgVGVzdCBQYXR0ZXJuID0gZnV0dXJl IGltcGxlbWVudGF0aW9uICovCj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICBk ZWZhdWx0Ogo+PiArICAgICAgICAgICAgICAgLyogVW5rbm93biB0ZXN0IHR5cGUgKi8KPj4gKyAg ICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCB0ZXN0IHJlcXVlc3QuIElnbm9yZWQuXHJcbiIp Owo+PiArICAgICAgICAgICAgICAgY2xlYXJfdGVzdF9hY3RpdmUoKTsKPj4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIHJldHVybiBzdGF0dXM7Cj4+ ICt9Cj4+ICsKPj4gK3ZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHZvaWQpCj4+ICt7Cj4+ICsgICAgICAg Y2xvc2UodGVzdF9hY3RpdmVfZmQpOwo+PiArICAgICAgIGNsb3NlKHRlc3RfZGF0YV9mZCk7Cj4+ ICsgICAgICAgY2xvc2UodGVzdF90eXBlX2ZkKTsKPj4gK30KPj4gKwo+PiAraW50IGNoZWNrX3Rl c3RfYWN0aXZlKHZvaWQpCj4+ICt7Cj4+ICsgICAgICAgY2hhciBkYXRhX2luWzJdOwo+PiArICAg ICAgIGludCBieXRlc19yZWFkOwo+PiArCj4+ICsgICAgICAgYXNzZXJ0KHRlc3RfYWN0aXZlX2Zk ID4gMCk7Cj4+ICsgICAgICAgbHNlZWsodGVzdF9hY3RpdmVfZmQsIDAsIFNFRUtfU0VUKTsKPj4g Kwo+PiArICAgICAgIGJ5dGVzX3JlYWQgPSByZWFkKHRlc3RfYWN0aXZlX2ZkLCBkYXRhX2luLCAy KTsKPj4gKyAgICAgICBpZiAoYnl0ZXNfcmVhZCA8PSAwKQo+PiArICAgICAgICAgICAgICAgcmV0 dXJuIDA7Cj4+ICsKPj4gKyAgICAgICBpZiAoZGF0YV9pblswXSA9PSAnMScpCj4+ICsgICAgICAg ICAgICAgICByZXR1cm4gMTsKPj4gKwo+PiArICAgICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ ICt2b2lkIGNsZWFyX3Rlc3RfYWN0aXZlKHZvaWQpCj4+ICt7Cj4+ICsgICAgICAgaW50IGJ5dGVz X3dyaXR0ZW47Cj4+ICsgICAgICAgY2hhciBkYXRhX291dFsyXTsKPj4gKwo+PiArICAgICAgIGFz c2VydCh0ZXN0X2FjdGl2ZV9mZCA+IDApOwo+PiArICAgICAgIGxzZWVrKHRlc3RfYWN0aXZlX2Zk LCAwLCBTRUVLX1NFVCk7Cj4+ICsKPj4gKyAgICAgICBkYXRhX291dFswXSA9ICcwJzsKPj4gKyAg ICAgICBkYXRhX291dFsxXSA9ICdcMCc7Cj4+ICsKPj4gKyAgICAgICBieXRlc193cml0dGVuID0g d3JpdGUodGVzdF9hY3RpdmVfZmQsIGRhdGFfb3V0LCAxKTsKPj4gKyAgICAgICBpZiAoYnl0ZXNf d3JpdHRlbiA8PSAwKQo+PiArICAgICAgICAgICAgICAgcHJpbnRmKCJDb3VsZCBub3QgY2xlYXIg dGVzdCBhY3RpdmUgZmxhZy4gV3JpdGUgZmFpbGVkIVxyXG4iKTsKPj4gK30KPj4gKwo+PiArdm9p ZCBzZXR1cF9kZWJ1Z2ZzX2ZpbGVzKGludCAqdGVzdF9hY3RpdmVfZmQsIGludCAqdGVzdF90eXBl X2ZkLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0ZXN0X2RhdGFfZmQpCj4+ICt7 Cj4+ICsgICAgICAgY2hhciBkZWJ1Z2ZzX3BhdGhbMjU2XTsKPj4gKyAgICAgICBjaGFyICppbmRl eDsKPj4gKyAgICAgICBpbnQgb2Zmc2V0Owo+PiArCj4+ICsgICAgICAgb2Zmc2V0ID0gc3RybGVu KElOVEVMX0RQX0RFQlVHRlNfUk9PVCk7Cj4+ICsgICAgICAgaW5kZXggPSAmZGVidWdmc19wYXRo W29mZnNldF07Cj4+ICsKPj4gKyAgICAgICBtZW1zZXQoZGVidWdmc19wYXRoLCAwLCAyNTYpOwo+ PiArICAgICAgIHN0cmNweShkZWJ1Z2ZzX3BhdGgsIElOVEVMX0RQX0RFQlVHRlNfUk9PVCk7Cj4g aWd0X2RlYnVnZnNfb3BlbiB3b3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGFkdmFudGFnZXMgaGVy ZSwgc3VjaCBhcwo+IG1ha2luZyBzdXJlIGRlYnVnZnMgaXMgbW91bnRlZCBhbmQgZmluZGluZyB0 aGUgY29ycmVjdCBtaW5vciBudW1iZXIuCldvcmtzIGZvciBtZS4gSSdsbCBwdXQgdGhpcyBvbiB0 aGUgbGlzdC4KPj4gKwo+PiArICAgICAgIHN0cmNweShpbmRleCwgSU5URUxfRFBfVEVTVF9UWVBF X0ZJTEUpOwo+PiArICAgICAgICp0ZXN0X3R5cGVfZmQgPSBvcGVuKGRlYnVnZnNfcGF0aCwgT19S RE9OTFkpOwo+PiArICAgICAgIGFzc2VydCgqdGVzdF90eXBlX2ZkID4gMCk7Cj4+ICsgICAgICAg cHJpbnRmKCJUZXN0IHR5cGUgcGF0aCAgIDogJXNcclxuIiwgZGVidWdmc19wYXRoKTsKPj4gKwo+ PiArICAgICAgIHN0cmNweShpbmRleCwgSU5URUxfRFBfVEVTVF9EQVRBX0ZJTEUpOwo+PiArICAg ICAgICp0ZXN0X2RhdGFfZmQgPSBvcGVuKGRlYnVnZnNfcGF0aCwgT19SRE9OTFkpOwo+PiArICAg ICAgIGFzc2VydCgqdGVzdF9kYXRhX2ZkID4gMCk7Cj4+ICsgICAgICAgcHJpbnRmKCJUZXN0IGRh dGEgcGF0aCAgIDogJXNcclxuIiwgZGVidWdmc19wYXRoKTsKPj4gKwo+PiArICAgICAgIHN0cmNw eShpbmRleCwgSU5URUxfRFBfVEVTVF9BQ1RJVkVfRklMRSk7Cj4+ICsgICAgICAgKnRlc3RfYWN0 aXZlX2ZkID0gb3BlbihkZWJ1Z2ZzX3BhdGgsIE9fUkRXUik7Cj4+ICsgICAgICAgYXNzZXJ0KCp0 ZXN0X2FjdGl2ZV9mZCA+IDApOwo+PiArICAgICAgIHByaW50ZigiVGVzdCBhY3RpdmUgcGF0aCA6 ICVzXHJcbiIsIGRlYnVnZnNfcGF0aCk7Cj4+ICsKPj4gKyAgICAgICAvKiBSZXNldCB0aGUgYWN0 aXZlIGZsYWcgZm9yIHNhZmV0eSAqLwo+PiArICAgICAgIGNsZWFyX3Rlc3RfYWN0aXZlKCk7Cj4+ ICt9Cj4+ICsKPj4gK2ludCBzZXR1cF9kcm0oaW50ICpkcnZfZmQsIGNvbnN0IGNoYXIgKm5vZGUp Cj4+ICt7Cj4+ICsgICAgICAgaW50IGZkLCByZXQ7Cj4+ICsgICAgICAgdWludDY0X3QgdXNlX2R1 bWJfYnVmZmVyczsKPj4gKwo+PiArICAgICAgIGlmICghZHJtQXZhaWxhYmxlKCkpIHsKPj4gKyAg ICAgICAgICAgICAgIHByaW50ZigiRXJyb3I6IERSTSBub3QgYXZhaWxhYmxlXHJcbiIpOwo+PiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArICAgICAgIH0KPj4gKwo+PiAr ICAgICAgIGZkID0gZHJtT3BlbigiaTkxNSIsIE5VTEwpOwo+PiArCj4+ICsgICAgICAgaWYgKGZk IDwgMCkgewo+PiArICAgICAgICAgICAgICAgZmQgPSBvcGVuKG5vZGUsIE9fUkRXUiB8IE9fQ0xP RVhFQyk7Cj4+ICsgICAgICAgICAgICAgICBpZiAoZmQgPCAwKSB7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldCA9IC1lcnJubzsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJFcnJvcjogY291bGQgbm90IG9wZW4gJyVzJ1xyXG4iLCBub2RlKTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICB9 Cj4gZHJtX29wZW5fYW55IHdpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgaTkxNSBkZXZpY2UsIGFu ZAo+IGRybV9vcGVuX2FueV9tYXN0ZXIgd2lsbCBhbHNvIGVuc3VyZSBpdCBpcyBkcm0gbWFzdGVy LgpPayB0aGF0IHNlZW1zIGxpa2UgYSBiZXR0ZXIgc29sdXRpb24uIFdpdGggdGhlIGVhcmx5IHJl dmlzaW9ucyBvZiB0aGlzIAphcHAsIEkgcmVjYWxsIHNvbWUgaXNzdWVzIGluIHRyeWluZyB0byBv cGVuIERSTSBkZXZpY2VzLiBTbyBjaGFuZ2luZyAKdGhpcyBvdXQgZm9yIGtub3duLWdvb2QgY29k ZSBmcm9tIGktZy10IGlzIHRoZSB3YXkgdG8gZ28uCj4KPj4gKwo+PiArICAgICAgIGRybUdldENh cChmZCwgRFJNX0NBUF9EVU1CX0JVRkZFUiwgJnVzZV9kdW1iX2J1ZmZlcnMpOwo+PiArCj4+ICsg ICAgICAgaWYgKCF1c2VfZHVtYl9idWZmZXJzKSB7Cj4+ICsgICAgICAgICAgICAgICBwcmludGYo IiclcycgZG9lcyBub3Qgc3VwcG9ydCBkdW1iIGJ1ZmZlcnNcclxuIiwgbm9kZSk7Cj4+ICsgICAg ICAgICAgICAgICBjbG9zZShmZCk7Cj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNV UFA7Cj4+ICsgICAgICAgfQo+PiArICAgICAgICpkcnZfZmQgPSBmZDsKPj4gKwo+PiArICAgICAg IHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgc2V0dXBfY29ubmVjdG9ycyhpbnQgZHJ2X2Zk LCBkcm1Nb2RlUmVzUHRyIHBtcikKPj4gK3sKPj4gKyAgICAgICBpbnQgcmV0LCBpOwo+PiArICAg ICAgIGRybU1vZGVDb25uZWN0b3IgKmM7Cj4+ICsgICAgICAgc3RydWN0IGRwX2Nvbm5lY3RvciAq ZHBfY29ubjsKPj4gKwo+PiArICAgICAgIHBtciA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJ2X2Zk KTsKPj4gKyAgICAgICBpZiAoIXBtcikgewo+PiArICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJP UjogRmFpbGVkIHRvIHJldHJpZXZlIERSTSByZXNvdXJjZXNcclxuIik7Cj4+ICsgICAgICAgICAg ICAgICByZXR1cm4gLTE7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZm9yIChpID0gMDsg aSA8IHBtci0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Cj4+ICsKPj4gKyAgICAgICAgICAgICAg IGMgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRydl9mZCwgcG1yLT5jb25uZWN0b3JzW2ldKTsKPj4g KyAgICAgICAgICAgICAgIGlmICghYykgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkZhaWxlZCB0byByZXRyaWV2ZSBjb25uZWN0b3IgJXU6JXVcclxuIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwbXItPmNvbm5lY3RvcnNbaV0pOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgICAgICAgaWYoYy0+Y29u bmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQo+PiArICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICAgICAgICAgZHBfY29u biA9IG1hbGxvYyhzaXplb2YoKmRwX2Nvbm4pKTsKPj4gKyAgICAgICAgICAgICAgIG1lbXNldChk cF9jb25uLCAwLCBzaXplb2YoKmRwX2Nvbm4pKTsKPj4gKyAgICAgICAgICAgICAgIGRwX2Nvbm4t PmNvbm4gPSBjLT5jb25uZWN0b3JfaWQ7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIC8qIFNldHVw IHRoZSBEUCBjb25uZWN0b3IqLwo+PiArICAgICAgICAgICAgICAgcmV0ID0gc2V0dXBfZHBfY29u bmVjdG9yKGRydl9mZCwgcG1yLCBjLCBkcF9jb25uKTsKPj4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAtRU5PRU5UKSB7Cj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSAtcmV0Owo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIHNldHVwIERQIGNvbm5l Y3RvciAldToldVxyXG4iLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXItPmNvbm5l Y3RvcnNbaV0pOwo+PiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGZyZWUoZHBfY29ubik7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGRybU1v ZGVGcmVlQ29ubmVjdG9yKGMpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK Pj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgIGVsc2UKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgZHBfY29ubmVjdG9yX2NvdW50Kys7Cj4+ICsgICAgICAgICAgICAgICAv KiBmcmVlIGNvbm5lY3RvciBkYXRhIGFuZCBsaW5rIGRldmljZSBpbnRvIGdsb2JhbCBsaXN0ICov Cj4+ICsgICAgICAgICAgICAgICBkcm1Nb2RlRnJlZUNvbm5lY3RvcihjKTsKPj4gKyAgICAgICAg ICAgICAgIGRwX2Nvbm4tPm5leHQgPSBkcF9jb25uZWN0b3JfbGlzdDsKPj4gKyAgICAgICAgICAg ICAgIGRwX2Nvbm5lY3Rvcl9saXN0ID0gZHBfY29ubjsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IHNldHVwX2RwX2Nvbm5lY3RvcihpbnQg ZHJ2X2ZkLCBkcm1Nb2RlUmVzICptciwgZHJtTW9kZUNvbm5lY3RvciAqYywKPj4gKyAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uKQo+PiArewo+PiArICAg ICAgIGludCByZXQsIGk7Cj4+ICsgICAgICAgYm9vbCBmb3VuZF9zdGQgPSBmYWxzZSwgZm91bmRf ZnMgPSBmYWxzZTsKPj4gKwo+PiArICAgICAgIC8qIElnbm9yZSBhbnkgZGlzY29ubmVjdGVkIGRl dmljZXMgKi8KPj4gKyAgICAgICBpZiAoYy0+Y29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNU RUQpIHsKPj4gKyAgICAgICAgICAgICAgIHByaW50ZigiQ29ubmVjdG9yICV1IGRpc2Nvbm5lY3Rl ZFxyXG4iLCBjLT5jb25uZWN0b3JfaWQpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9F TlQ7Cj4+ICsgICAgICAgfQo+PiArICAgICAgIHByaW50ZigiQ29ubmVjdG9yIFNldHVwOlxyXG4i KTsKPj4gKyAgICAgICAvKiBTZXR1cCBwcmVmZXJyZWQgbW9kZSAtIHNob3VsZCBiZSBtb2RlWzBd IGluIHRoZSBsaXN0ICovCj4+ICsgICAgICAgZHBfY29ubi0+bW9kZV9wcmVmZXJyZWQgPSBjLT5t b2Rlc1swXTsKPj4gKyAgICAgICBkcF9jb25uLT5mYl93aWR0aCA9IGMtPm1vZGVzWzBdLmhkaXNw bGF5Owo+PiArICAgICAgIGRwX2Nvbm4tPmZiX2hlaWdodCA9IGMtPm1vZGVzWzBdLnZkaXNwbGF5 Owo+PiArICAgICAgIHByaW50ZigiXHRQcmVmZXJyZWQgbW9kZSAobW9kZSAwKSBmb3IgY29ubmVj dG9yICV1IGlzICV1eCV1XHJcbiIsCj4+ICsgICAgICAgICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwg Yy0+bW9kZXNbMF0uaGRpc3BsYXksIGMtPm1vZGVzWzBdLnZkaXNwbGF5KTsKPj4gKwo+PiArICAg ICAgIGZvciAoaSA9IDE7IGkgPCBjLT5jb3VudF9tb2RlczsgaSsrKSB7Cj4+ICsgICAgICAgICAg ICAgICAvKiBTdGFuZGFyZCBtb2RlIGlzIDgwMHg2MDBANjAgKi8KPj4gKyAgICAgICAgICAgICAg IGlmIChjLT5tb2Rlc1tpXS5oZGlzcGxheSA9PSA4MDAgJiYKPj4gKyAgICAgICAgICAgICAgICAg ICBjLT5tb2Rlc1tpXS52ZGlzcGxheSA9PSA2MDAgJiYKPj4gKyAgICAgICAgICAgICAgICAgICBj LT5tb2Rlc1tpXS52cmVmcmVzaCA9PSA2MCAmJgo+PiArICAgICAgICAgICAgICAgICAgIGZvdW5k X3N0ZCA9PSBmYWxzZSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5tb2Rl X3N0YW5kYXJkID0gYy0+bW9kZXNbaV07Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiXHRTdGFuZGFyZCBtb2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxyXG4iLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGMtPmNvbm5lY3Rvcl9pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGMtPm1vZGVzW2ldLmhkaXNwbGF5LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBm b3VuZF9zdGQgPSB0cnVlOwo+PiArICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAg LyogRmFpbHNhZmUgbW9kZSBpcyA2NDB4NDgwQDYwICovCj4+ICsgICAgICAgICAgICAgICBpZiAo Yy0+bW9kZXNbaV0uaGRpc3BsYXkgPT0gNjQwICYmCj4+ICsgICAgICAgICAgICAgICAgICAgYy0+ bW9kZXNbaV0udmRpc3BsYXkgPT0gNDgwICYmCj4+ICsgICAgICAgICAgICAgICAgICAgYy0+bW9k ZXNbaV0udnJlZnJlc2ggPT0gNjAgJiYKPj4gKyAgICAgICAgICAgICAgICAgICBmb3VuZF9mcyA9 PSBmYWxzZSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBkcF9jb25uLT5tb2RlX2ZhaWxz YWZlID0gYy0+bW9kZXNbaV07Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGRwX2Nvbm4tPmZh aWxzYWZlX3dpZHRoID0gYy0+bW9kZXNbaV0uaGRpc3BsYXk7Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAgIGRwX2Nvbm4tPmZhaWxzYWZlX2hlaWdodCA9IGMtPm1vZGVzW2ldLnZkaXNwbGF5Owo+ PiArICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0RmFpbHNhZmUgbW9kZSAoJWQpIGZv ciBjb25uZWN0b3IgJXUgaXMgJXV4JXVcclxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jb25uZWN0b3Jf aWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5tb2Rlc1tpXS5oZGlzcGxh eSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm1vZGVzW2ldLnZkaXNwbGF5 KTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICByZXQg PSBzZXR1cF9jcnRjX2Zvcl9jb25uZWN0b3IoZHJ2X2ZkLCBtciwgYywgZHBfY29ubik7Cj4+ICsg ICAgICAgaWYgKHJldCkgewo+PiArICAgICAgICAgICAgICAgcHJpbnRmKCJTZXQgQ1JUQyBmb3Ig Y29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXHJcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg Yy0+Y29ubmVjdG9yX2lkLCByZXQpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4g KyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICByZXQgPSBzZXR1cF9mcmFtZWJ1ZmZlcnMoZHJ2X2Zk LCBkcF9jb25uKTsKPj4gKyAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICBwcmlu dGYoIkNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3IgY29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXHJcbiIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgYy0+Y29ubmVjdG9yX2lkLCByZXQpOwo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICByZXQg PSBzZXR1cF9mYWlsc2FmZV9mcmFtZWJ1ZmZlcihkcnZfZmQsIGRwX2Nvbm4pOwo+PiArICAgICAg IGlmIChyZXQpIHsKPj4gKyAgICAgICAgICAgICAgIHByaW50ZigiQ3JlYXRlIGZhaWxzYWZlIGZy YW1lYnVmZmVyIGZvciBjb25uZWN0b3IgJXUgZmFpbGVkICglZClcclxuIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICBjLT5jb25uZWN0b3JfaWQsIHJldCk7Cj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIHJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK2ludCBzZXR1cF9jcnRjX2Zvcl9jb25uZWN0b3IoaW50IGZkLCBkcm1Nb2RlUmVz ICptciwgZHJtTW9kZUNvbm5lY3RvciAqYywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uKQo+PiArewo+PiArICAgICAgIGRybU1vZGVF bmNvZGVyICpkcm1fZW5jb2RlciA9IE5VTEw7Cj4+ICsgICAgICAgc3RydWN0IGRwX2Nvbm5lY3Rv ciAqZHBjOwo+PiArICAgICAgIGludCBpLCBqOwo+PiArICAgICAgIGludDMyX3QgY3J0YzsKPj4g Kwo+PiArICAgICAgIC8qIFVzZSBhdHRhY2hlZCBlbmNvZGVyIGlmIHBvc3NpYmxlICovCj4+ICsg ICAgICAgaWYgKGMtPmVuY29kZXJfaWQpCj4+ICsgICAgICAgICAgICAgICBkcm1fZW5jb2RlciA9 IGRybU1vZGVHZXRFbmNvZGVyKGZkLCBjLT5lbmNvZGVyX2lkKTsKPj4gKwo+PiArICAgICAgIGlm IChkcm1fZW5jb2Rlcikgewo+PiArICAgICAgICAgICAgICAgaWYgKGRybV9lbmNvZGVyLT5jcnRj X2lkKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNydGMgPSBkcm1fZW5jb2Rlci0+Y3J0 Y19pZDsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkcGMgPSBkcF9jb25uZWN0b3Jf bGlzdDsgZHBjOyBkcGMgPSBkcGMtPm5leHQpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZHBjLT5jcnRjID09IGNydGMpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNydGMgPSAtMTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgICAgICAg ICBpZiAoY3J0YyA+PSAwKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJt TW9kZUZyZWVFbmNvZGVyKGRybV9lbmNvZGVyKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcF9jb25uLT5jcnRjID0gY3J0YzsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gMDsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAg ICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgZHJtTW9kZUZyZWVFbmNvZGVyKGRybV9lbmNv ZGVyKTsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAvKiBDaGVjayBhbGwgZW5jb2Rlci9j cnRjIGNvbWJpbmF0aW9ucyAqLwo+PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLT5jb3VudF9l bmNvZGVyczsgKytpKSB7Cj4+ICsgICAgICAgICAgICAgICBkcm1fZW5jb2RlciA9IGRybU1vZGVH ZXRFbmNvZGVyKGZkLCBjLT5lbmNvZGVyc1tpXSk7Cj4+ICsgICAgICAgICAgICAgICBpZiAoIWRy bV9lbmNvZGVyKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAg ICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1yLT5jb3Vu dF9jcnRjczsgKytqKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGRybV9lbmNv ZGVyLT5wb3NzaWJsZV9jcnRjcyAmICgxIDw8IGopKSkKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY3J0YyA9IG1y LT5jcnRjc1tqXTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkcGMgPSBkcF9jb25u ZWN0b3JfbGlzdDsgZHBjOyBkcGMgPSBkcGMtPm5leHQpIHsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoZHBjLT5jcnRjID09IGNydGMpIHsKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNydGMgPSAtMTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY3J0YyA+PSAwKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJtTW9kZUZyZWVFbmNvZGVyKGRybV9lbmNvZGVyKTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkcF9jb25uLT5jcnRjID0gY3J0YzsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+PiAr ICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgZHJtTW9kZUZyZWVFbmNvZGVyKGRy bV9lbmNvZGVyKTsKPj4gKyAgICAgICB9Cj4+ICsgICAgICAgcHJpbnRmKCJObyBDUlRDIGF2YWls YWJsZSBmb3IgY29ubmVjdG9yICV1XHJcbiIsIGMtPmNvbm5lY3Rvcl9pZCk7Cj4+ICsgICAgICAg cmV0dXJuIC1FTk9FTlQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBzZXR1cF9mcmFtZWJ1ZmZlcnMoaW50 IGRydl9mZCwgc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubikKPj4gK3sKPj4gKyAgICAgICBz dHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgY3JlcTsKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX21v ZGVfZGVzdHJveV9kdW1iIGRyZXE7Cj4+ICsgICAgICAgc3RydWN0IGRybV9tb2RlX21hcF9kdW1i IG1yZXE7Cj4+ICsgICAgICAgaW50IHJldDsKPj4gKwo+PiArICAgICAgIG1lbXNldCgmY3JlcSwg MCwgc2l6ZW9mKGNyZXEpKTsKPj4gKyAgICAgICBtZW1zZXQoJm1yZXEsIDAsIHNpemVvZihtcmVx KSk7Cj4+ICsKPj4gKyAgICAgICBjcmVxLndpZHRoID0gZHBfY29ubi0+ZmJfd2lkdGg7Cj4+ICsg ICAgICAgY3JlcS5oZWlnaHQgPSBkcF9jb25uLT5mYl9oZWlnaHQ7Cj4+ICsgICAgICAgY3JlcS5i cHAgPSAzMjsKPj4gKyAgICAgICByZXQgPSBkcm1Jb2N0bChkcnZfZmQsIERSTV9JT0NUTF9NT0RF X0NSRUFURV9EVU1CLCAmY3JlcSk7Cj4+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPj4gKyAgICAg ICAgICAgICAgIHByaW50ZigiQ3JlYXRlIGR1bWIgYnVmZmVyIGZhaWxlZFxyXG4iKTsKPj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtZXJybm87Cj4+ICsgICAgICAgfQo+PiArICAgICAgIGRwX2Nv bm4tPmZiX3N0cmlkZSA9IGNyZXEucGl0Y2g7Cj4+ICsgICAgICAgZHBfY29ubi0+ZmJfc2l6ZSA9 IGNyZXEuc2l6ZTsKPj4gKyAgICAgICBkcF9jb25uLT5mYl9oYW5kbGUgPSBjcmVxLmhhbmRsZTsK Pj4gKwo+PiArICAgICAgIHJldCA9IGRybU1vZGVBZGRGQihkcnZfZmQsIGRwX2Nvbm4tPmZiX3dp ZHRoLCBkcF9jb25uLT5mYl9oZWlnaHQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIDI0 LCAzMiwgZHBfY29ubi0+ZmJfc3RyaWRlLCBkcF9jb25uLT5mYl9oYW5kbGUsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICZkcF9jb25uLT5mYik7Cj4+ICsgICAgICAgaWYgKHJldCkgewo+ PiArICAgICAgICAgICAgICAgcHJpbnRmKCJDcmVhdGUgZnJhbWVidWZmZXIgZmFpbGVkXHJcbiIp Owo+PiArICAgICAgICAgICAgICAgcmV0ID0gLWVycm5vOwo+PiArICAgICAgICAgICAgICAgZ290 byBjbGVhbnVwOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIG1yZXEuaGFuZGxlID0gZHBf Y29ubi0+ZmJfaGFuZGxlOwo+PiArICAgICAgIHJldCA9IGRybUlvY3RsKGRydl9mZCwgRFJNX0lP Q1RMX01PREVfTUFQX0RVTUIsICZtcmVxKTsKPj4gKyAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAg ICAgICAgICAgICBwcmludGYoIk1hcCBkdW1iIGJ1ZmZlciBmYWlsZWRcclxuIik7Cj4+ICsgICAg ICAgICAgICAgICByZXQgPSAtZXJybm87Cj4+ICsgICAgICAgICAgICAgICBnb3RvIGZiX2ZhaWw7 Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZHBfY29ubi0+cGl4bWFwID0gbW1hcCgwLCBk cF9jb25uLT5mYl9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwgZHJ2X2ZkLCBtcmVxLm9mZnNldCk7Cj4+ICsg ICAgICAgaWYgKGRwX2Nvbm4tPnBpeG1hcCA9PSBNQVBfRkFJTEVEKSB7Cj4+ICsgICAgICAgICAg ICAgICBwcmludGYoIk1tYXAgZmFpbGVkXHJcbiIpOwo+PiArICAgICAgICAgICAgICAgcmV0ID0g LWVycm5vOwo+PiArICAgICAgICAgICAgICAgZ290byBmYl9mYWlsOwo+PiArICAgICAgIH0KPj4g KyAgICAgICBtZW1zZXQoZHBfY29ubi0+cGl4bWFwLCAwLCBkcF9jb25uLT5mYl9zaXplKTsKPj4g KyAgICAgICByZXR1cm4gMDsKPj4gKwo+PiArZmJfZmFpbDoKPj4gKyAgICAgICBkcm1Nb2RlUm1G QihkcnZfZmQsIGRwX2Nvbm4tPmZiKTsKPj4gKwo+PiArY2xlYW51cDoKPj4gKyAgICAgICBtZW1z ZXQoJmRyZXEsIDAsIHNpemVvZihkcmVxKSk7Cj4+ICsgICAgICAgZHJlcS5oYW5kbGUgPSBkcF9j b25uLT5mYl9oYW5kbGU7Cj4+ICsgICAgICAgZHJtSW9jdGwoZHJ2X2ZkLCBEUk1fSU9DVExfTU9E RV9ERVNUUk9ZX0RVTUIsICZkcmVxKTsKPj4gKyAgICAgICByZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtpbnQgc2V0dXBfZmFpbHNhZmVfZnJhbWVidWZmZXIoaW50IGRydl9mZCwgc3RydWN0IGRw X2Nvbm5lY3RvciAqZHBfY29ubikKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3Jl YXRlX2R1bWIgY3JlcTsKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX21vZGVfZGVzdHJveV9kdW1iIGRy ZXE7Cj4+ICsgICAgICAgc3RydWN0IGRybV9tb2RlX21hcF9kdW1iIG1yZXE7Cj4+ICsgICAgICAg aW50IHJldDsKPj4gKwo+PiArICAgICAgIG1lbXNldCgmY3JlcSwgMCwgc2l6ZW9mKGNyZXEpKTsK Pj4gKyAgICAgICBjcmVxLndpZHRoID0gZHBfY29ubi0+ZmFpbHNhZmVfd2lkdGg7Cj4+ICsgICAg ICAgY3JlcS5oZWlnaHQgPSBkcF9jb25uLT5mYWlsc2FmZV9oZWlnaHQ7Cj4+ICsgICAgICAgY3Jl cS5icHAgPSAxNjsKPj4gKyAgICAgICByZXQgPSBkcm1Jb2N0bChkcnZfZmQsIERSTV9JT0NUTF9N T0RFX0NSRUFURV9EVU1CLCAmY3JlcSk7Cj4+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPj4gKyAg ICAgICAgICAgICAgIHByaW50ZigiQ3JlYXRlIGR1bWIgYnVmZmVyIGZhaWxlZFxyXG4iKTsKPj4g KyAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAg ICAgZHBfY29ubi0+ZmFpbHNhZmVfc3RyaWRlID0gY3JlcS5waXRjaDsKPj4gKyAgICAgICBkcF9j b25uLT5mYWlsc2FmZV9zaXplID0gY3JlcS5zaXplOwo+PiArICAgICAgIGRwX2Nvbm4tPmZhaWxz YWZlX2hhbmRsZSA9IGNyZXEuaGFuZGxlOwo+PiArCj4+ICsgICAgICAgcmV0ID0gZHJtTW9kZUFk ZEZCKGRydl9mZCwgZHBfY29ubi0+ZmFpbHNhZmVfd2lkdGgsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIGRwX2Nvbm4tPmZhaWxzYWZlX2hlaWdodCwgMTYsIDE2LAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICBkcF9jb25uLT5mYWlsc2FmZV9zdHJpZGUsIGRwX2Nvbm4tPmZhaWxz YWZlX2hhbmRsZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRwX2Nvbm4tPmZhaWxz YWZlX2ZiKTsKPj4gKyAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICBwcmludGYo IkNyZWF0ZSBmcmFtZWJ1ZmZlciBmYWlsZWRcclxuIik7Cj4+ICsgICAgICAgICAgICAgICByZXQg PSAtZXJybm87Cj4+ICsgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgICAgfQo+ PiArCj4+ICsgICAgICAgbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOwo+PiArICAgICAg IG1yZXEuaGFuZGxlID0gZHBfY29ubi0+ZmFpbHNhZmVfaGFuZGxlOwo+PiArICAgICAgIHJldCA9 IGRybUlvY3RsKGRydl9mZCwgRFJNX0lPQ1RMX01PREVfTUFQX0RVTUIsICZtcmVxKTsKPj4gKyAg ICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICBwcmludGYoIk1hcCBkdW1iIGJ1ZmZl ciBmYWlsZWRcclxuIik7Cj4+ICsgICAgICAgICAgICAgICByZXQgPSAtZXJybm87Cj4+ICsgICAg ICAgICAgICAgICBnb3RvIGZiX2ZhaWw7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZHBf Y29ubi0+ZmFpbHNhZmVfcGl4bWFwID0gbW1hcCgwLCBkcF9jb25uLT5mYWlsc2FmZV9zaXplLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJP VF9XUklURSwgTUFQX1NIQVJFRCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRydl9mZCwgbXJlcS5vZmZzZXQpOwo+PiArICAgICAgIGlmIChkcF9jb25uLT5mYWls c2FmZV9waXhtYXAgPT0gTUFQX0ZBSUxFRCkgewo+PiArICAgICAgICAgICAgICAgcHJpbnRmKCJj YW5ub3QgbW1hcCBkdW1iIGJ1ZmZlciAoJWQpOiAlbVxyXG4iLCBlcnJubyk7Cj4+ICsgICAgICAg ICAgICAgICByZXQgPSAtZXJybm87Cj4+ICsgICAgICAgICAgICAgICBnb3RvIGZiX2ZhaWw7Cj4+ ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgbWVtc2V0KGRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1h cCwgMCwgZHBfY29ubi0+ZmFpbHNhZmVfc2l6ZSk7Cj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICsK Pj4gK2ZiX2ZhaWw6Cj4+ICsgICAgICAgZHJtTW9kZVJtRkIoZHJ2X2ZkLCBkcF9jb25uLT5mYWls c2FmZV9mYik7Cj4+ICsKPj4gK2NsZWFudXA6Cj4+ICsgICAgICAgbWVtc2V0KCZkcmVxLCAwLCBz aXplb2YoZHJlcSkpOwo+PiArICAgICAgIGRyZXEuaGFuZGxlID0gZHBfY29ubi0+ZmFpbHNhZmVf aGFuZGxlOwo+PiArICAgICAgIGRybUlvY3RsKGRydl9mZCwgRFJNX0lPQ1RMX01PREVfREVTVFJP WV9EVU1CLCAmZHJlcSk7Cj4+ICsgICAgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAraW50 IHNldF92aWRlb19tb2RlKGludCBkcnZfZmQsIGludCBtb2RlLCBzdHJ1Y3QgZHBfY29ubmVjdG9y ICp0ZXN0X2Nvbm5lY3RvcikKPj4gK3sKPj4gKyAgICAgICBkcm1Nb2RlTW9kZUluZm8gKnJlcXVl c3RlZF9tb2RlOwo+PiArICAgICAgIHVpbnQzMl90IHJlcXVpcmVkX2ZiOwo+PiArICAgICAgIGlu dCByZXQgPSAwOwo+PiArCj4+ICsgICAgICAgcHJpbnRmKCJNb2RlIHJlcXVlc3RlZDogIik7Cj4+ ICsgICAgICAgc3dpdGNoIChtb2RlKSB7Cj4+ICsgICAgICAgY2FzZSBJTlRFTF9NT0RFX05PTkU6 Cj4+ICsgICAgICAgICAgICAgICBwcmludGYoIk5PTkVcclxuIik7Cj4+ICsgICAgICAgICAgICAg ICByZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkcnZfZmQsIHRlc3RfY29ubmVjdG9yLT5jcnRjLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIDAsIDAsIE5VTEwsIDAsIE5V TEwpOwo+PiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4+ICsgICAgICAgICAgICAgICBicmVh azsKPj4gKyAgICAgICBjYXNlIElOVEVMX01PREVfUFJFRkVSUkVEOgo+PiArICAgICAgICAgICAg ICAgIHByaW50ZigiUFJFRkVSUkVEXHJcbiIpOwo+PiArICAgICAgICAgICAgICAgIHJlcXVlc3Rl ZF9tb2RlID0gICZ0ZXN0X2Nvbm5lY3Rvci0+bW9kZV9wcmVmZXJyZWQ7Cj4+ICsgICAgICAgICAg ICAgICAgcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7Cj4+ICsgICAgICAgICAgICAg ICAgYnJlYWs7Cj4+ICsgICAgICAgIGNhc2UgSU5URUxfTU9ERV9TVEFOREFSRDoKPj4gKyAgICAg ICAgICAgICAgICBwcmludGYoIlNUQU5EQVJEXHJcbiIpOwo+PiArICAgICAgICAgICAgICAgIHJl cXVlc3RlZF9tb2RlID0gICZ0ZXN0X2Nvbm5lY3Rvci0+bW9kZV9zdGFuZGFyZDsKPj4gKyAgICAg ICAgICAgICAgICByZXF1aXJlZF9mYiA9IHRlc3RfY29ubmVjdG9yLT5mYjsKPj4gKyAgICAgICAg ICAgICAgICBicmVhazsKPj4gKyAgICAgICAgY2FzZSBJTlRFTF9NT0RFX0ZBSUxTQUZFOgo+PiAr ICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTFNBRkVcclxuIik7Cj4+ICsgICAgICAgICAgICAg ICAgcmVxdWVzdGVkX21vZGUgPSAgJnRlc3RfY29ubmVjdG9yLT5tb2RlX2ZhaWxzYWZlOwo+PiAr ICAgICAgICAgICAgICAgIHJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3ItPmZhaWxzYWZlX2Zi Owo+PiArICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBjYXNlIElOVEVMX01PREVf SU5WQUxJRDoKPj4gKyAgICAgICAgZGVmYXVsdDoKPj4gKyAgICAgICAgICAgICAgICBwcmludGYo IklOVkFMSUQhICglMDh4KSBNb2RlIHNldCBhYm9ydGVkIVxyXG4iLCBtb2RlKTsKPj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArICAgICAgIH0KPj4g KyAgICAgICB0ZXN0X2Nvbm5lY3Rvci0+c2F2ZWRfY3J0YyA9IGRybU1vZGVHZXRDcnRjKGRydl9m ZCwgdGVzdF9jb25uZWN0b3ItPmNydGMpOwo+PiArICAgICAgIHJldCA9IGRybU1vZGVTZXRDcnRj KGRydl9mZCwgdGVzdF9jb25uZWN0b3ItPmNydGMsIHJlcXVpcmVkX2ZiLCAwLCAwLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXN0X2Nvbm5lY3Rvci0+Y29ubiwgMSwgcmVxdWVz dGVkX21vZGUpOwo+PiArb3V0Ogo+PiArICAgICAgIGlmIChyZXQpIHsKPj4gKyAgICAgICAgICAg ICAgIHByaW50ZigiRmFpbGVkIHRvIHNldCBDUlRDIGZvciBjb25uZWN0b3IgJXVcclxuIiwKPj4g KyAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nvbm5lY3Rvci0+Y29ubik7Cj4+ICsgICAgICAg fQo+PiArICAgICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgc2h1dGRvd24oaW50 IGRydl9mZCkKPj4gK3sKPj4gKyAgICAgICBpbnQgaTsKPj4gKyAgICAgICBzdHJ1Y3QgZHBfY29u bmVjdG9yICppbmRleCA9IGRwX2Nvbm5lY3Rvcl9saXN0LCAqcHJldjsKPj4gKyAgICAgICBzdHJ1 Y3QgZHJtX21vZGVfZGVzdHJveV9kdW1iIGRyZXE7Cj4+ICsKPj4gKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgZHBfY29ubmVjdG9yX2NvdW50OyBpKyspIHsKPj4gKyAgICAgICAgICAgICAgIGlmIChp bmRleC0+c2F2ZWRfY3J0Yykgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBkcm1Nb2RlU2V0 Q3J0YyhkcnZfZmQsIGluZGV4LT5zYXZlZF9jcnRjLT5jcnRjX2lkLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0+c2F2ZWRfY3J0Yy0+YnVmZmVyX2lkLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0+c2F2ZWRfY3J0 Yy0+eCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtPnNh dmVkX2NydGMtPnksICZpbmRleC0+Y29ubiwgMSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmluZGV4LT5zYXZlZF9jcnRjLT5tb2RlKTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZHJtTW9kZUZyZWVDcnRjKGluZGV4LT5zYXZlZF9jcnRjKTsKPj4gKyAgICAg ICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgIGRybU1vZGVSbUZCKGRydl9mZCwgaW5kZXgt PmZiKTsKPj4gKyAgICAgICAgICAgICAgIC8qIENsZWFuIHVwIGR1bWIgYnVmZmVyICovCj4+ICsg ICAgICAgICAgICAgICBtZW1zZXQoJmRyZXEsIDAsIHNpemVvZihkcmVxKSk7Cj4+ICsgICAgICAg ICAgICAgICBkcmVxLmhhbmRsZSA9IGluZGV4LT5mYl9oYW5kbGU7Cj4+ICsgICAgICAgICAgICAg ICBkcm1Jb2N0bChkcnZfZmQsIERSTV9JT0NUTF9NT0RFX0RFU1RST1lfRFVNQiwgJmRyZXEpOwo+ PiArICAgICAgICAgICAgICAgcHJldiA9IGluZGV4Owo+PiArICAgICAgICAgICAgICAgaW5kZXgg PSBpbmRleC0+bmV4dDsKPj4gKyAgICAgICAgICAgICAgIGZyZWUocHJldik7Cj4+ICsgICAgICAg fQo+PiArfQo+PiArCj4+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+PiArewo+ PiArICAgICAgIGludCBzdGF0dXMgPSAwOwo+PiArICAgICAgIGludCBkcnZfZmQgPSAwOwo+PiAr ICAgICAgIGRybU1vZGVSZXNQdHIgbW9kZV9yZXNvdXJjZXMgPSBOVUxMOwo+PiArICAgICAgIGlu dCBkb25lID0gMDsKPj4gKyAgICAgICBjaGFyIGlucHV0Owo+PiArICAgICAgIHN0cnVjdCBkcF9j b25uZWN0b3IgKmFjdGl2ZV9jb25uZWN0b3I7Cj4+ICsgICAgICAgaW50IHRlc3RfZGF0YSwgdGVz dF90eXBlOwo+PiArCj4+ICsgICAgICAgLyogU2V0dXAgaW5wdXQgZm9yIGtleWJvYXJkIGhhbmRs aW5nIC0gZnJvbSBpbnB1dC5jICovCj4+ICsgICAgICAgc2V0X2NvbmlvX3Rlcm1pbmFsX21vZGUo KTsKPj4gKwo+PiArICAgICAgIHByaW50ZigiQVRURU5USU9OOlxyXG4iCj4+ICsgICAgICAgICAg ICAgICIgICBFbnN1cmUgdGhhdCBubyBkaXNwbGF5IG1hbmFnZXIgaXMgcnVubmluZ1xyXG4iCj4+ ICsgICAgICAgICAgICAgICIgICBBcHAgbXVzdCBiZSBydW4gYXMgcm9vdCBpbiBjb25zb2xlL3Rl eHQgbW9kZVxyXG4iCj4+ICsgICAgICAgICAgICAgICIgICBDb250aW51ZT8gKFkvTikiCj4+ICsg ICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgaW5wdXQgPSBnZXRjaGFyKCk7Cj4+ICsKPj4gKyAg ICAgICBpZiAoaW5wdXQgIT0gJ1knICYmIGlucHV0ICE9ICd5JykKPj4gKyAgICAgICAgICAgICAg IGdvdG8gZXhpdDsKPj4gKwo+PiArICAgICAgIC8qIEFsbC1pbi1vbmUgc2V0dXAgZnVuY3Rpb24g dG8gZ2V0IERSTSBvZmYgdGhlIGdyb3VuZCAqLwo+PiArICAgICAgIHNldHVwX2RybSgmZHJ2X2Zk LCBJOTE1X0RSSVZFUl9OT0RFKTsKPj4gKwo+PiArICAgICAgIC8qIEZyb20gbW9kZXJlcywgZ2V0 IHRoZSBjb25uZWN0b3JzLCBlbmNvZGVycywgQ1JUQ3MsIGV0YyAqLwo+PiArICAgICAgIHNldHVw X2Nvbm5lY3RvcnMoZHJ2X2ZkLCBtb2RlX3Jlc291cmNlcyk7Cj4+ICsKPj4gKyAgICAgICBhY3Rp dmVfY29ubmVjdG9yID0gJmRwX2Nvbm5lY3Rvcl9saXN0WzBdOwo+PiArCj4+ICsgICAgICAgc2V0 dXBfZGVidWdmc19maWxlcygmdGVzdF9hY3RpdmVfZmQsICZ0ZXN0X3R5cGVfZmQsICZ0ZXN0X2Rh dGFfZmQpOwo+PiArCj4+ICsgICAgICAgcHJpbnRmKCJcclxuXHJcbldhaXRpbmcgZm9yIHRlc3Qg cmVxdWVzdHMuICdYJyBvciAnUScgZXhpdHNcclxuIik7Cj4gV291bGQgdGhlIHN0YW5kYXJkIGN0 cmwtYyBhbmQgYSBzaWduYWwgaGFuZGxlciBzdWZmaWNlPyBUaGlzIHdvdWxkCj4gYXZvaWQgdXNp bmcgc3BlY2lhbCB0ZXJtaW5hbCBtb2Rlcy4gQWx0ZXJuYXRpdmVseSwgdGhlcmUgaXMgYWxzbyBh bgo+IGV4YW1wbGUgb2YgdXNpbmcgdGhlIEdMaWIgbWFpbmxvb3AgaW4gdGVzdGRpc3BsYXkgYW5k IG1vbml0b3JpbmcKPiBzdGRpbi4KSSByZWNlbnRseSB1cGRhdGVkIHRoaXMgb24gbXkgR2l0aHVi IHJlcG8gdmVyc2lvbi4gSXQgdXNlcyBjb2RlIGZyb20gCnRlc3RkaXNwbGF5LmMgYW5kIHNvbWUg dGhhdCBJIHdyb3RlLCB3aGljaCBzZWVtcyB0byB3b3JrIGp1c3QgZmluZS4gCkN0cmwtQyBhbmQg YSBzaWcgaGFuZGxlciB3b3VsZCBiZSBmaW5lIHRvbywgYnV0IEkgd2FudGVkIHRoZSBvcHRpb24g b2YgCmFjY2VwdGluZyBpbnB1dCBzaG91bGQgdGhhdCBiZWNvbWUgbmVjZXNzYXJ5IGxhdGVyIGRv d24gdGhlIHJvYWQgZm9yIAphZGRpdGlvbmFsIGNvbXBsaWFuY2UgdGVzdGluZy4KPj4gKwo+PiAr ICAgICAgIHdoaWxlICghZG9uZSkgewo+PiArICAgICAgICAgICAgICAgaWYgKGtiaGl0KCkpIHsK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBnZXRjaCgpOwo+PiArICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ3EnOgo+PiArICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdRJzoKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgJ1gnOgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSAxOwo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgICAg ICAgICAgICB9Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICAgICB1c2xlZXAo MTAwMCk7Cj4+ICsgICAgICAgICAgICAgICBpZiAoY2hlY2tfdGVzdF9hY3RpdmUoKSkgewo+PiAr ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEgPSBnZXRfdGVzdF9kYXRhKCk7Cj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlwZSA9IGdldF90ZXN0X3R5cGUoKTsKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc190ZXN0X3JlcXVlc3QoZHJ2X2ZkLCB0ZXN0X3R5 cGUsIHRlc3RfZGF0YSwgYWN0aXZlX2Nvbm5lY3Rvcik7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIHVzbGVlcCgxMDAwMCk7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgfQo+PiAr Cj4+ICtleGl0Ogo+IFlvdSBtaWdodCB3YW50IHRvIGxvb2sgYXQgaWd0X2luc3RhbGxfZXhpdF9o YW5kbGVyIGZvciB0aGlzLCBhcyBpdAo+IHJ1bnMgZXhpdCBoYW5kbGVycyBmcm9tIGF0ZXhpdCBh cyB3ZWxsIGFzIHdoZW4gYSBzaWduYWwgaXMgcmVjZWl2ZWQuCj4gVGhlIHRlcm1pbmFsIHJlc2V0 IGNvZGUgYWxzbyBvdWdodCB0byBydW4gd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZAo+IChlLmcu IGFmdGVyIGN0cmwtYykuCkkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgaW50byB0aGlzLiBUaGFuayB5 b3UgZm9yIHRoZSBzdWdnZXN0aW9uLgo+Cj4+ICsgICAgICAgY2xlYW51cF9kZWJ1Z2ZzKCk7Cj4+ ICsKPj4gKyAgICAgICBzaHV0ZG93bihkcnZfZmQpOwo+PiArCj4+ICsgICAgICAgaWYgKGRydl9m ZCA+IDApIHsKPj4gKyAgICAgICAgICAgICAgIHN0YXR1cyA9IGRybUNsb3NlKGRydl9mZCk7Cj4+ ICsgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIkVycm9yOiBGYWlsZWQgdG8gY2xvc2UgaTkxNSBkcml2ZXJcclxuIik7Cj4+ICsgICAg ICAgfQo+PiArCj4+ICsgICAgICAgcHJpbnRmKCJDb21wbGlhbmNlIHRlc3RpbmcgYXBwbGljYXRp b24gZXhpdGluZy5cclxuIgo+PiArICAgICAgICAgICAgICAiSWYgdGVzdGluZyBoYXMgYmVlbiBw ZXJmb3JtZWQsIHlvdSBtYXkgd2FudCB0byByZXN0YXJ0XHJcbiIKPj4gKyAgICAgICAgICAgICAg InRoZSBzeXN0ZW0gdG8gZW5zdXJlIGl0IHJldHVybnMgdG8gbm9ybWFsIG9wZXJhdGlvbi5cclxu Iik7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+IGRpZmYgLS1n aXQgYS9kcF9jb21wbGlhbmNlL2lucHV0LmMgYi9kcF9jb21wbGlhbmNlL2lucHV0LmMKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNzI4MWNlNgo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RwX2NvbXBsaWFuY2UvaW5wdXQuYwo+PiBAQCAtMCwwICsxLDQ4IEBACj4+ ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICsjaW5jbHVk ZSA8dW5pc3RkLmg+Cj4+ICsjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgo+PiArI2luY2x1ZGUgPHRl cm1pb3MuaD4KPj4gKwo+PiArLyogQ29kZSBzb3VyY2VkIGZyb20gc3RhY2tvdmVyZmxvdy5jb20g LQo+PiArICAgICAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ4OTQ0L2Mt bm9uLWJsb2NraW5nLWtleWJvYXJkLWlucHV0Cj4+ICsqLwo+IEknbSBub3Qgc3VyZSB3aGF0IHRo ZSBjb3B5cmlnaHQgc3RhdHVzIG9mIHRoaXMgY29kZSBpcy4KVGhpcyB3YXMgdGhlIG1haW4gbW90 aXZhdGlvbiBmb3IgcmVtb3ZpbmcgdGhlIG9yaWdpbmFsIGlucHV0IGhhbmRsZXIgCmNvZGUuIFNv IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHByb2JsZW0sIEkg cmVtb3ZlZCAKaXQgYW5kIGNoYW5nZWQgb3ZlciB0byB0aGUgY29kZSBmcm9tIHRlc3RkaXNwbGF5 IGFuZCBteSBzdHVmZiB0aGF0IEkgCm1lbnRpb25lZCBmdXJ0aGVyIHVwLgo+Cj4+ICsKPj4gK3N0 cnVjdCB0ZXJtaW9zIG9yaWdfdGVybWlvczsKPj4gKwo+PiArdm9pZCByZXNldF90ZXJtaW5hbF9t b2RlKCkKPj4gK3sKPj4gKyAgICB0Y3NldGF0dHIoMCwgVENTQU5PVywgJm9yaWdfdGVybWlvcyk7 Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgc2V0X2NvbmlvX3Rlcm1pbmFsX21vZGUoKQo+PiArewo+PiAr ICAgIHN0cnVjdCB0ZXJtaW9zIG5ld190ZXJtaW9zOwo+PiArCj4+ICsgICAgLyogdGFrZSB0d28g Y29waWVzIC0gb25lIGZvciBub3csIG9uZSBmb3IgbGF0ZXIgKi8KPj4gKyAgICB0Y2dldGF0dHIo MCwgJm9yaWdfdGVybWlvcyk7Cj4+ICsgICAgbWVtY3B5KCZuZXdfdGVybWlvcywgJm9yaWdfdGVy bWlvcywgc2l6ZW9mKG5ld190ZXJtaW9zKSk7Cj4+ICsKPj4gKyAgICAvKiByZWdpc3RlciBjbGVh bnVwIGhhbmRsZXIsIGFuZCBzZXQgdGhlIG5ldyB0ZXJtaW5hbCBtb2RlICovCj4+ICsgICAgYXRl eGl0KHJlc2V0X3Rlcm1pbmFsX21vZGUpOwo+PiArICAgIGNmbWFrZXJhdygmbmV3X3Rlcm1pb3Mp Owo+PiArICAgIHRjc2V0YXR0cigwLCBUQ1NBTk9XLCAmbmV3X3Rlcm1pb3MpOwo+PiArfQo+PiAr Cj4+ICtpbnQga2JoaXQoKQo+PiArewo+PiArICAgIHN0cnVjdCB0aW1ldmFsIHR2ID0geyAwTCwg MEwgfTsKPj4gKyAgICBmZF9zZXQgZmRzOwo+PiArICAgIEZEX1pFUk8oJmZkcyk7Cj4+ICsgICAg RkRfU0VUKDAsICZmZHMpOwo+PiArICAgIHJldHVybiBzZWxlY3QoMSwgJmZkcywgTlVMTCwgTlVM TCwgJnR2KTsKPj4gK30KPj4gKwo+PiAraW50IGdldGNoKCkKPj4gK3sKPj4gKyAgICBpbnQgcjsK Pj4gKyAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOwo+PiArICAgIGlmICgociA9IHJlYWQoMCwgJmMs IHNpemVvZihjKSkpIDwgMCkgewo+PiArICAgICAgICByZXR1cm4gcjsKPj4gKyAgICB9IGVsc2Ug cmV0dXJuIGM7Cj4+ICt9Cj4+IC0tCj4+IDEuOS4xCgpUaGFuayB5b3UgZm9yIHRoZSByZXZpZXcs IFRob21hcyEgSSB3aWxsIHBvc3QgdGhlIHVwZGF0ZWQgdmVyc2lvbiB0byB0aGUgCmxpc3QgYnV0 IGlmIHlvdSBjYW4gYWx3YXlzIGZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIG15IEdpdGh1YiBy ZXBvIGhlcmU6CgpodHRwczovL2dpdGh1Yi5jb20vdHByZXZpdGUvaW50ZWwtZ3B1LXRvb2xzL3Ry ZWUvZHBfY29tcGxpYW5jZQoKCk9kZGx5LCB0aGF0IGxpbmsgc2hvdWxkIGhhdmUgYmVlbiBpbiB0 aGUgY292ZXIgbGV0dGVyIGZvciB0aGlzIHBhdGNoIApzZXJpZXMgYnV0IGlzbid0IHRoZXJlLiBJ J2xsIGZpeCB0aGF0IGZvciB0aGUgbmV4dCBtYWpvciByZXZpc2lvbi4KCgoKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=