From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-1.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1VkwP9-00084q-Fy for ltp-list@lists.sourceforge.net; Mon, 25 Nov 2013 13:40:47 +0000 Received: from userp1040.oracle.com ([156.151.31.81]) by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.76) id 1VkwOt-0007dT-4u for ltp-list@lists.sourceforge.net; Mon, 25 Nov 2013 13:40:47 +0000 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id rAPDeNf1031939 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 25 Nov 2013 13:40:24 GMT Received: from aserz7022.oracle.com (aserz7022.oracle.com [141.146.126.231]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id rAPDeNWr008458 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 25 Nov 2013 13:40:23 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id rAPDeMmL028210 for ; Mon, 25 Nov 2013 13:40:22 GMT Message-ID: <52935340.2070106@oracle.com> Date: Mon, 25 Nov 2013 21:40:16 +0800 From: Simon Xu MIME-Version: 1.0 References: <1384931579-1063-1-git-send-email-xu.simon@oracle.com> In-Reply-To: <1384931579-1063-1-git-send-email-xu.simon@oracle.com> Subject: Re: [LTP] [PATCH] Update sctp testsuite List-Id: Linux Test Project General Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ltp-list-bounces@lists.sourceforge.net To: ltp-list@lists.sourceforge.net Q291bGQgYW55b25lIGhlbHAgdG8gcmV2aWV3PwoKVGhhbmtzClNpbW9uCgpPbiAyMDEzLzExLzIw IDE1OjEyLCBTaW1vbiBYdSB3cm90ZToKPiBUaGUgc2N0cCBsaWJyYXJ5IGFuZCB0ZXN0c3VpdGUg aW4gTFRQIGFyZSB0b28gb2xkIGFuZCBkbyBub3Qgd29yayB3aXRoCj4gcmVjZW50IGtlcm5lbHMu ICBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlbSB0byBsYXRlc3QgdXBzdHJlYW0KPiAoaHR0cHM6Ly9n aXRodWIuY29tL2JvcmttYW5uL2xrc2N0cC10b29scy9jb21taXQvNjMwY2U4ZTFiMjFjOGZiYzBk ZDE5MWUxMzAyODhlZDIzMzA1OTUwNykuCj4KPiBUZXN0ZWQgd2l0aCAyLjYuMzkga2VybmVsLgo+ Cj4gU2lnbmVkLW9mZi1ieTogU2ltb24gWHUgPHh1LnNpbW9uQG9yYWNsZS5jb20+Cj4gLS0tCj4g ICAuLi4vc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX2FjY2VwdF9jbG9zZS5jICAgICB8IDE2 MiArKy0tLQo+ICAgLi4uL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX2FkZHJz LmMgICAgfCAxOTkgKysrLS0tCj4gICAuLi4vbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8x X3RvXzFfY29ubmVjdC5jICB8IDE2NCArKy0tLQo+ICAgLi4uL25ldHdvcmsvc2N0cC9mdW5jX3Rl c3RzL3Rlc3RfMV90b18xX2Nvbm5lY3R4LmMgfCAxNDggKysrLS0KPiAgIC4uLi9uZXR3b3JrL3Nj dHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9ldmVudHMuYyAgIHwgIDgyICstLQo+ICAgLi4uL3Nj dHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9pbml0bXNnX2Nvbm5lY3QuYyAgfCAgNDcgKy0KPiAg IC4uLi9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9ub25ibG9jay5jIHwgMTU5 ICsrKy0tCj4gICAuLi4vbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcmVjdmZy b20uYyB8ICA5NSArLS0KPiAgIC4uLi9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9f MV9yZWN2bXNnLmMgIHwgMTE0ICsrLS0KPiAgIC4uLi9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90 ZXN0XzFfdG9fMV9ydG9pbmZvLmMgIHwgIDU3ICstCj4gICAuLi4vbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF8xX3RvXzFfc2VuZC5jICAgICB8IDEzNiArKy0tCj4gICAuLi4vbmV0d29yay9z Y3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc2VuZG1zZy5jICB8IDI3MSArKysrLS0tLQo+ICAg Li4uL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3NlbmR0by5jICAgfCAxMTEg KystLQo+ICAgLi4uL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3NodXRkb3du LmMgfCAgODQgKy0tCj4gICAuLi4vZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zb2NrZXRfYmluZF9s aXN0ZW4uYyAgICB8IDE4NiArKystLS0KPiAgIC4uLi9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90 ZXN0XzFfdG9fMV9zb2Nrb3B0LmMgIHwgMjQxICsrKy0tLS0KPiAgIC4uLi9uZXR3b3JrL3NjdHAv ZnVuY190ZXN0cy90ZXN0XzFfdG9fMV90aHJlYWRzLmMgIHwgMTU5ICsrKy0tCj4gICAuLi4vbmV0 d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9hc3NvY19hYm9ydC5jICAgICB8ICA2NSArLQo+ICAg Li4uL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfYXNzb2Nfc2h1dGRvd24uYyAgfCAgNjMg Ky0KPiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2F1dG9jbG9zZS5j IHwgIDQ2ICstCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9iYXNp Yy5jICAgICB8IDI0MiArKystLS0tCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVz dHMvdGVzdF9jb25uZWN0LmMgICB8ICA2MSArLQo+ICAgdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9m dW5jX3Rlc3RzL3Rlc3RfY29ubmVjdHguYyAgfCAgOTMgKy0tCj4gICB0ZXN0Y2FzZXMvbmV0d29y ay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9mcmFnbWVudHMuYyB8IDIwMCArKystLS0KPiAgIHRlc3Rj YXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2dldG5hbWUuYyAgIHwgIDk4ICstLQo+ ICAgLi4uL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfaW5hZGRyX2FueS5jICAgICAgfCAx OTkgKysrLS0tCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9wZWVs b2ZmLmMgICB8IDEwNCArLS0KPiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90 ZXN0X3JlY3Ztc2cuYyAgIHwgIDQ4ICstCj4gICAuLi4vc2N0cC9mdW5jX3Rlc3RzL3Rlc3Rfc2N0 cF9zZW5kcmVjdm1zZy5jICAgICAgICB8IDEzNCArKy0tCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9z Y3RwL2Z1bmNfdGVzdHMvdGVzdF9zb2Nrb3B0LmMgICB8IDcwNyArKysrKysrKysrKysrKy0tLS0t LS0KPiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3RjcF9zdHlsZS5j IHwgMTEzICsrLS0KPiAgIC4uLi9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3RpbWV0b2xp dmUuYyAgICAgIHwgMjE3ICsrKy0tLS0KPiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvaW5jbHVk ZS9uZXRpbmV0L3NjdHAuaCAgICAgIHwgMzU3ICsrKysrKysrLS0tCj4gICB0ZXN0Y2FzZXMvbmV0 d29yay9zY3RwL2xpYi9hZGRycy5jICAgICAgICAgICAgICAgICB8IDE0OSArKy0tLQo+ICAgdGVz dGNhc2VzL25ldHdvcmsvc2N0cC9saWIvYmluZHguYyAgICAgICAgICAgICAgICAgfCAgMTUgKy0K PiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL2Nvbm5lY3R4LmMgICAgICAgICAgICAgIHwg MTQ2ICsrKystCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9vcHRfaW5mby5jICAgICAg ICAgICAgICB8ICAyMCArLQo+ICAgdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9saWIvcGVlbG9mZi5j ICAgICAgICAgICAgICAgfCAgMjcgKy0KPiAgIHRlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL3Jl Y3Ztc2cuYyAgICAgICAgICAgICAgIHwgIDI2ICstCj4gICB0ZXN0Y2FzZXMvbmV0d29yay9zY3Rw L2xpYi9zZW5kbXNnLmMgICAgICAgICAgICAgICB8ICAxNCArLQo+ICAgdGVzdGNhc2VzL25ldHdv cmsvc2N0cC90ZXN0bGliL3NjdHB1dGlsLmMgICAgICAgICAgfCAxNjggKystLS0KPiAgIHRlc3Rj YXNlcy9uZXR3b3JrL3NjdHAvdGVzdGxpYi9zY3RwdXRpbC5oICAgICAgICAgIHwgIDcwICstCj4g ICA0MiBmaWxlcyBjaGFuZ2VkLCAzMjAwIGluc2VydGlvbnMoKyksIDI1OTcgZGVsZXRpb25zKC0p Cj4KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3Rf MV90b18xX2FjY2VwdF9jbG9zZS5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3Rz L3Rlc3RfMV90b18xX2FjY2VwdF9jbG9zZS5jCj4gaW5kZXggZTlhMTNlNy4uZWExYzU3YSAxMDA2 NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFf YWNjZXB0X2Nsb3NlLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMv dGVzdF8xX3RvXzFfYWNjZXB0X2Nsb3NlLmMKPiBAQCAtMSw4ICsxLDggQEAKPiAtLyogU0NUUCBr ZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVu dGF0aW9uCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkIERldmVsb3Bt ZW50IENvbXBhbnksIEwuUAo+ICAgICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNAo+ICAg ICoKPiAtICogVGhpcyBmaWxlIGhhcyB0ZXN0IGNhc2VzIHRvIHRlc3QgdGhlIGFjY2VwdCAoKSBh bmQgY2xvc2UgKCkgY2FsbCBmb3IKPiArICogVGhpcyBmaWxlIGhhcyB0ZXN0IGNhc2VzIHRvIHRl c3QgdGhlIGFjY2VwdCAoKSBhbmQgY2xvc2UgKCkgY2FsbCBmb3IKPiAgICAqIDEtMSBzdHlsZSBz b2NrZXRzCj4gICAgKgo+ICAgICogYWNjZXB0ICgpIFRlc3RzOgo+IEBAIC0yMCwxNCArMjAsMTQg QEAKPiAgICAqIFRFU1Q4OiBCYWQgc29ja2V0IGRlc2NyaXB0b3IKPiAgICAqIFRFU1Q5OiB2YWxp ZCBzb2NrZXQgZGVzY3JpcHRvcgo+ICAgICogVEVTVDEwOiBDbG9zZWQgc29ja2V0IGRlc2NyaXB0 b3IKPiAtICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUg c29mdHdhcmU7Cj4gKyAqCj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29m dHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICogYW55IGxhdGVyIHZlcnNpb24u Cj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAgKiB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKPiAgICAq ICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKPiAgICAqIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K PiBAQCAtNTcsNyArNTcsNyBAQAo+ICAgI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAgI2luY2x1ZGUg PHN5cy90eXBlcy5oPgo+ICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KPiAtI2luY2x1ZGUgPG5l dGluZXQvaW4uaD4JCS8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICsjaW5jbHVkZSA8bmV0aW5ldC9p bi5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICAgI2luY2x1ZGUgPGFycGEvaW5l dC5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+ Cj4gQEAgLTcwLDE2MiArNzAsMTY0IEBAIGludCBUU1RfQ05UID0gMDsKPiAgIAo+ICAgI2RlZmlu ZSBTS19NQVggIDEwCj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAr aW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAtCXNvY2tsZW5fdCBs ZW47Cj4gKyAgICAgICAgc29ja2xlbl90IGxlbjsKPiAgIAlpbnQgaTsKPiAtCWludCBzaywgbHN0 bl9zaywgY2xudF9za1tTS19NQVhdLCBhY3B0X3NrLCBwZl9jbGFzczsKPiAtCWludCBuZXdfc2tb U0tfTUFYXSwgY2xudDJfc2tbU0tfTUFYXTsKPiArCWludCBzayxsc3RuX3NrLGNsbnRfc2tbU0tf TUFYXSxhY3B0X3NrLHBmX2NsYXNzOwo+ICsJaW50IG5ld19za1tTS19NQVhdLGNsbnQyX3NrW1NL X01BWF07Cj4gICAJaW50IGVycm9yOwo+ICAgCj4gLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gY29ubl9h ZGRyLCBsc3RuX2FkZHIsIGFjcHRfYWRkcjsKPiArICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g Y29ubl9hZGRyLGxzdG5fYWRkcixhY3B0X2FkZHI7Cj4gICAKPiAgIAkvKiBSYXRoZXIgdGhhbiBm Zmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1 ZmZlcmVkLgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAt CXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgICAqIGJlIHVuYnVm ZmVyZWQuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9J T05CRiwgMCk7Cj4gKyAgICAgICAgc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgMCk7Cj4g ICAKPiAtCXBmX2NsYXNzID0gUEZfSU5FVDsKPiArICAgICAgICBwZl9jbGFzcyA9IFBGX0lORVQ7 Cj4gICAKPiAtCXNrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RP X1NDVFApOwo+ICsgICAgICAgIHNrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFN LCBJUFBST1RPX1NDVFApOwo+ICAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYOyBpKyspCj4g Kwlmb3IgKGk9MCA7IGkgPCBTS19NQVggOyBpKyspCj4gICAJCW5ld19za1tpXSA9IHRlc3Rfc29j a2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCS8qIENy ZWF0aW5nIGEgcmVndWxhciBzb2NrZXQgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBTS19NQVg7IGkr KykKPiArCWZvciAoaSA9IDAgOyBpIDwgU0tfTUFYIDsgaSsrKQo+ICAgCQljbG50X3NrW2ldID0g dGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4g LQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYOyBpKyspCj4gKwlmb3IgKGkgPSAwIDsgaSA8IFNLX01B WCA7IGkrKykKPiAgIAkJY2xudDJfc2tbaV0gPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19T VFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAgIAkvKiBDcmVhdGluZyBhIGxpc3RlbiBzb2Nr ZXQgKi8KPiAtCWxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQ UFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBT T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCWNvbm5fYWRkci5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsKPiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BC QUNLOwo+IC0JY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAr ICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAr ICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICAg Cj4gICAJbHN0bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JbHN0bl9hZGRyLnNpbl9h ZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsc3RuX2FkZHIuc2luX3BvcnQgPSBo dG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fYWRkci5zX2Fk ZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fcG9ydCA9IGh0 b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAgIAkvKiBCaW5kaW5nIHRoZSBsaXN0ZW4gc29j a2V0ICovCj4gLQl0ZXN0X2JpbmQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3RuX2Fk ZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiArCXRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNv Y2thZGRyICopICZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+ICAgCS8qIExp c3RlbmluZyBtYW55IHNvY2tldHMgYXMgd2UgYXJlIGNhbGxpbmcgdG9vIG1hbnkgY29ubmVjdCBo ZXJlICovCj4gLQl0ZXN0X2xpc3Rlbihsc3RuX3NrLCBTS19NQVgpOwo+ICsJdGVzdF9saXN0ZW4o bHN0bl9zaywgU0tfTUFYICk7Cj4gICAKPiAgIAkvKiBjb25uZWN0KCkgaXMgY2FsbGVkIGp1c3Qg dG8gbWFrZSBzdXJlIGFjY2VwdCgpIGRvZXNuJ3QgYmxvY2sgdGhlCj4gICAJICogcHJvZ3JhbQo+ ICAgCSAqLwo+ICAgCWkgPSAwOwo+ICAgCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p Owo+IC0JdGVzdF9jb25uZWN0KGNsbnRfc2tbaSsrXSwgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25u X2FkZHIsIGxlbik7Cj4gKwl0ZXN0X2Nvbm5lY3QoY2xudF9za1tpKytdLCAoc3RydWN0IHNvY2th ZGRyICopICZjb25uX2FkZHIsIGxlbik7Cj4gICAKPiAgIAkvKiBhY2NlcHQoKSBURVNUMTogQmFk IHNvY2tldCBkZXNjcmlwdG9yIEVCQURGLCBFeHBlY3RlZCBlcnJvciAqLwo+IC0JZXJyb3IgPSBh Y2NlcHQoLTEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNwdF9hZGRyLCAmbGVuKTsKPiAtCWlmIChl cnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQkFERikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg ImFjY2VwdCB3aXRoIGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIgo+IC0JCQkgImVycm9yOiVkLCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKyAgICAgICAgZXJyb3IgPSBhY2NlcHQoLTEsIChz dHJ1Y3Qgc29ja2FkZHIgKikgJmFjcHRfYWRkciwgJmxlbik7Cj4gKyAgICAgICAgaWYgKGVycm9y ICE9IC0xIHx8IGVycm5vICE9IEVCQURGKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwg ImFjY2VwdCB3aXRoIGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0 c3RfcmVzbShUUEFTUywgImFjY2VwdCgpIHdpdGggYSBiYWQgc29ja2V0IGRlc2NyaXB0b3IgLSBF QkFERiIpOwo+ICAgCj4gLQkvKmFjY2VwdCgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCBFTk9UU09D SywgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gYWNjZXB0KDAsIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmYWNwdF9hZGRyLCAmbGVuKTsKPiAtCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBF Tk9UU09DSykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImFjY2VwdCB3aXRoIGludmFsaWQg c29ja2V0Igo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKyAg ICAgICAgLyphY2NlcHQoKSBURVNUMjogSW52YWxpZCBzb2NrZXQgRU5PVFNPQ0ssIEV4cGVjdGVk IGVycm9yKi8KPiArICAgICAgICBlcnJvciA9IGFjY2VwdCgwLCAoc3RydWN0IHNvY2thZGRyICop ICZhY3B0X2FkZHIsICZsZW4pOwo+ICsgICAgICAgIGlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAh PSBFTk9UU09DSykKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJhY2NlcHQgd2l0aCBp bnZhbGlkIHNvY2tldCIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJy bm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJhY2NlcHQo KSB3aXRoIGludmFsaWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAgIAo+IC0JLyphY2NlcHQoKSBU RVNUMzogSW52YWxpZCBhZGRyZXNzIEVGQVVMVCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9y ID0gYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKiktMSwgJmxlbik7Cj4gLQlpZiAo ZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUZBVUxUKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAiYWNjZXB0IHdpdGggaW52YWxpZCBhZGRyZXNzIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzol ZCIsIGVycm9yLCBlcnJubyk7Cj4gKyAgICAgICAgLyphY2NlcHQoKSBURVNUMzogSW52YWxpZCBh ZGRyZXNzIEVGQVVMVCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAgICAgIGVycm9yID0gYWNjZXB0 KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgLTEsICZsZW4pOwo+ICsgICAgICAgIGlmIChl cnJvciAhPSAtMSB8fCBlcnJubyAhPSBFRkFVTFQpCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9l eGl0LCAiYWNjZXB0IHdpdGggaW52YWxpZCBhZGRyZXNzIgo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3Rf cmVzbShUUEFTUywgImFjY2VwdCgpIHdpdGggaW52YWxpZCBhZGRyZXNzIC0gRUZBVUxUIik7Cj4g ICAKPiAtCXRlc3RfY29ubmVjdChjbG50X3NrW2krK10sIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29u bl9hZGRyLCBsZW4pOwo+ICsJdGVzdF9jb25uZWN0KGNsbnRfc2tbaSsrXSwgKHN0cnVjdCBzb2Nr YWRkciAqKSAmY29ubl9hZGRyLCBsZW4pOwo+ICAgCj4gLQkvKmFjY2VwdCgpIFRFU1Q0OiBvbiBh IG5vbi1saXN0ZW5pbmcgc29ja2V0IEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9y ID0gYWNjZXB0KHNrLCAoc3RydWN0IHNvY2thZGRyICopJmFjcHRfYWRkciwgJmxlbik7Cj4gLQlp ZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUlOVkFMKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAiYWNjZXB0IG9uIGEgbm9uLWxpc3RlbmluZyBzb2NrZXQiCj4gLQkJCSAiZXJyb3I6JWQs IGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArICAgICAgICAvKmFjY2VwdCgpIFRFU1Q0OiBv biBhIG5vbi1saXN0ZW5pbmcgc29ja2V0IEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAg ICAgIGVycm9yID0gYWNjZXB0KHNrLCAoc3RydWN0IHNvY2thZGRyICopICZhY3B0X2FkZHIsICZs ZW4pOwo+ICsgICAgICAgIGlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFSU5WQUwpCj4gKwkJ dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiYWNjZXB0IG9uIGEgbm9uLWxpc3RlbmluZyBzb2Nr ZXQiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYWNjZXB0KCkgb24gYSBub24t bGlzdGVuaW5nIHNvY2tldCAtIEVJTlZBTCIpOwo+ICsJCj4gKwl0ZXN0X2Nvbm5lY3QoY2xudF9z a1tpKytdLCAoc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIGxlbik7Cj4gICAKPiAtCXRl c3RfY29ubmVjdChjbG50X3NrW2krK10sIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBs ZW4pOwo+ICsJLypDYWxsaW5nIGFjY2VwdCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24qLwo+ ICsJYWNwdF9zayA9IHRlc3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFj cHRfYWRkciwgJmxlbik7Cj4gICAKPiAtCS8qQ2FsbGluZyBhY2NlcHQgdG8gZXN0YWJsaXNoIHRo ZSBjb25uZWN0aW9uICovCj4gLQlhY3B0X3NrID0gdGVzdF9hY2NlcHQobHN0bl9zaywgKHN0cnVj dCBzb2NrYWRkciAqKSZhY3B0X2FkZHIsICZsZW4pOwo+IC0KPiAtCS8qYWNjZXB0KCkgVEVTVDU6 IE9uIGEgZXN0YWJsaXNoZWQgc29ja2V0IEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVy cm9yID0gYWNjZXB0KGFjcHRfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNwdF9hZGRyLCAmbGVu KTsKPiArCS8qYWNjZXB0KCkgVEVTVDU6IE9uIGEgZXN0YWJsaXNoZWQgc29ja2V0IEVJTlZBTCwg RXhwZWN0ZWQgZXJyb3IqLwo+ICsJZXJyb3IgPSBhY2NlcHQoYWNwdF9zaywgKHN0cnVjdCBzb2Nr YWRkciAqKSAmYWNwdF9hZGRyLCAmbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8g IT0gRUlOVkFMKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiYWNjZXB0IG9uIGFuIGVzdGFi bGlzaGVkIHNvY2tldCIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8p Owo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImFjY2VwdCBvbiBhbiBlc3RhYmxpc2hl ZCBzb2NrZXQiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVk IiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYWNjZXB0KCkgb24g YW4gZXN0YWJsaXNoZWQgc29ja2V0IC0gRUlOVkFMIik7Cj4gICAKPiAtCS8qQ2xvc2luZyB0aGUg cHJldmlvdXNseSBlc3RhYmxpc2hlZCBhc3NvY2lhdGlvbiAqLwo+ICsJLypDbG9zaW5nIHRoZSBw cmV2aW91c2x5IGVzdGFibGlzaGVkIGFzc29jaWF0aW9uKi8KPiAgIAljbG9zZShhY3B0X3NrKTsK PiAgIAo+IC0JdGVzdF9jb25uZWN0KGNsbnRfc2tbaV0sIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29u bl9hZGRyLCBsZW4pOwo+ICsJdGVzdF9jb25uZWN0KGNsbnRfc2tbaV0sIChzdHJ1Y3Qgc29ja2Fk ZHIgKikgJmNvbm5fYWRkciwgbGVuKTsKPiAgIAo+IC0JLyphY2NlcHQoKSBURVNUNjogT24gdGhl IENMT1NFRCBhc3NvY2lhdGlvbiBzaG91bGQgc3VjY2VlZCAqLwo+IC0JYWNwdF9zayA9IGFjY2Vw dChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmFjcHRfYWRkciwgJmxlbik7Cj4gLQlpZiAo YWNwdF9zayA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJhY2NlcHQgYSBjbG9zZWQg YXNzb2NpYXRpb24iCj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsK PiArCS8qYWNjZXB0KCkgVEVTVDY6IE9uIHRoZSBDTE9TRUQgYXNzb2NpYXRpb24gc2hvdWxkIHN1 Y2NlZWQqLwo+ICsJYWNwdF9zayA9IGFjY2VwdChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICop ICZhY3B0X2FkZHIsICZsZW4pOwo+ICsgICAgICAgIGlmIChhY3B0X3NrIDwgMCkKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJhY2NlcHQgYSBjbG9zZWQgYXNzb2NpYXRpb24iCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5v KTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYWNjZXB0KCkgYSBjbG9zZWQgYXNzb2NpYXRp b24gLSBTVUNDRVNTIik7Cj4gICAKPiAgIAljbG9zZShhY3B0X3NrKTsKPiAgIAo+ICAgCS8qYWNj ZXB0KCkgVEVTVDc6IEV4dHJhY3RpbmcgdGhlIGFzc29jaWF0aW9uIG9uIHRoZSBsaXN0ZW5pbmcg c29ja2V0Cj4gLQkgICBhcyBuZXcgc29ja2V0LCBuZXcgc29ja2V0IHNvY2tldCBkZXNjcmlwdG9y IHNob3VsZCByZXR1cm4gKi8KPiAtCWZvciAoaSA9IDA7IGkgPCAoU0tfTUFYIC0gMSk7IGkrKykK PiAtCQl0ZXN0X2Nvbm5lY3QoY2xudDJfc2tbaV0sIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9h ZGRyLCBsZW4pOwo+ICsJYXMgbmV3IHNvY2tldCwgbmV3IHNvY2tldCBzb2NrZXQgZGVzY3JpcHRv ciBzaG91bGQgcmV0dXJuKi8KPiArCWZvciAoaSA9IDAgOyBpIDwgKFNLX01BWCAtIDEpOyBpKysp Cj4gKwkJdGVzdF9jb25uZWN0KGNsbnQyX3NrW2ldLCAoc3RydWN0IHNvY2thZGRyICopICZjb25u X2FkZHIsIGxlbik7Cj4gICAKPiAtCWZvciAoaSA9IDA7IGkgPCAoU0tfTUFYIC0gMSk7IGkrKykK PiArCWZvciAoaSA9IDAgOyBpIDwgKFNLX01BWCAtIDEpOyBpKyspCj4gICAJCW5ld19za1tpXSA9 IHRlc3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNwdF9hZGRyLAo+ICAg CQkJCQkmbGVuKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYWNjZXB0KCkgb24gYSBsaXN0 ZW5pbmcgc29ja2V0IC0gU1VDQ0VTUyIpOwo+ICAgCj4gLQkvKmNsb3NlKCkgVEVTVDg6IEJhZCBz b2NrZXQgZGVzY3JpcHRvciwgRUJBREYgRXhwZWN0ZWQgZXJyb3IgKi8KPiArCQo+ICsgICAgICAg IC8qY2xvc2UoKSBURVNUODogQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBl cnJvciovCj4gICAJZXJyb3IgPSBjbG9zZSgtMSk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVy cm5vICE9IEVCQURGKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiY2xvc2Ugd2l0aCBhIGJh ZCBzb2NrZXQgZGVzY3JpcHRvciAiCj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3Is IGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJjbG9zZSB3aXRoIGEgYmFk IHNvY2tldCBkZXNjcmlwdG9yICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjol ZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJj bG9zZSgpIHdpdGggYSBiYWQgc29ja2V0IGRlc2NyaXB0b3IgLSBFQkFERiIpOwo+ICAgCj4gLQkv KmNsb3NlKCkgVEVTVDk6IHZhbGlkIHNvY2tldCBkZXNjcmlwdG9yIHNob3VsZCBzdWNjZWVkICov Cj4gKwkvKmNsb3NlKCkgVEVTVDk6IHZhbGlkIHNvY2tldCBkZXNjcmlwdG9yIHNob3VsZCBzdWNj ZWVkKi8KPiAgIAllcnJvciA9IGNsb3NlKHNrKTsKPiAgIAlpZiAoZXJyb3IgPCAwKQo+IC0JCXRz dF9icmttKFRCUk9LLCBOVUxMLCAiY2xvc2Ugd2l0aCBhIHZhbGlkIHNvY2tldCBkZXNjcmlwdG9y Igo+IC0JCQkgIiBlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImNsb3NlIHdpdGggYSB2YWxpZCBzb2NrZXQgZGVzY3JpcHRv ciIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICIgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiY2xvc2UoKSB3aXRoIGEgdmFs aWQgc29ja2V0IGRlc2NyaXB0b3IgLSBTVUNDRVNTIik7Cj4gICAKPiAtCS8qY2xvc2UoKSBURVNU MTA6IGNsb3NlZCBzb2NrZXQgZGVzY3JpcHRvciwgRUJBREYgRXhwZWN0ZWQgZXJyb3IgKi8KPiAt CWVycm9yID0gY2xvc2Uoc2spOwo+IC0JaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVCQURG KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiY2xvc2Ugd2l0aCBhIGNsb3NlZCBzb2NrZXQg Igo+ICsJLypjbG9zZSgpIFRFU1QxMDogY2xvc2VkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBF eHBlY3RlZCBlcnJvciovCj4gKyAgICAgICAgZXJyb3IgPSBjbG9zZShzayk7Cj4gKyAgICAgICAg aWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVCQURGKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0 c3RfZXhpdCwgImNsb3NlIHdpdGggYSBjbG9zZWQgc29ja2V0ICIKPiAgIAkJCSAiZGVzY3JpcHRv ciBlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20o VFBBU1MsICJjbG9zZSgpIHdpdGggYSBjbG9zZWQgc29ja2V0IGRlc2NyaXB0b3IgLSBFQkFERiIp Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBTS19NQVg7IGkrKykgewo+ICsJCj4gKwlmb3IgKGkg PSAwIDsgaSA8IFNLX01BWCA7IGkrKykgewo+ICAgCQljbG9zZShjbG50X3NrW2ldKTsKPiAgIAkJ Y2xvc2UobmV3X3NrW2ldKTsKPiAgIAkJY2xvc2UoY2xudDJfc2tbaV0pOwo+ICAgCX0KPiAgIAo+ IC0JdHN0X2V4aXQoKTsKPiArCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0Y2Fz ZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfYWRkcnMuYyBiL3Rlc3RjYXNl cy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9hZGRycy5jCj4gaW5kZXggN2Iz Yjg2Zi4uNDBlZWQ3ZiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF8xX3RvXzFfYWRkcnMuYwo+ICsrKyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAv ZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9hZGRycy5jCj4gQEAgLTEsNCArMSw0IEBACj4gLS8qIFND VFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBs ZW1lbnRhdGlvbgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAzIEhld2xldHQtUGFja2FyZCBEZXZl bG9wbWVudCBDb21wYW55LCBMLlAKPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDQK PiAgICAqCj4gQEAgLTI3LDEzICsyNywxMyBAQAo+ICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gICAgKiBURVNUMTA6IEZyZWVpbmcgdGhlIHBlZXIncyBhZGRyZXNzCj4gICAgKgo+IC0g KiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAr ICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4g ICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg eW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBT Q1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoq KioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC02Myw3ICs2Myw3IEBA Cj4gICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gICAj aW5jbHVkZSA8c3lzL3NvY2tldC5oPgo+IC0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogZm9y IHNvY2thZGRyX2luICovCj4gKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAgICAgLyogZm9y IHNvY2thZGRyX2luICovCj4gICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Cj4gICAjaW5jbHVkZSA8 ZXJybm8uaD4KPiAgICNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KPiBAQCAtNzQsMjAzICs3NCwx OTYgQEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDEwOwo+ICAg aW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Cj4gK2ludAo+ICttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICB7Cj4gLQlpbnQgZXJy b3I7Cj4gKyAgICAgICAgaW50IGVycm9yOwo+ICAgCXNvY2tsZW5fdCBsZW47Cj4gLQlpbnQgc2ss IGxzdG5fc2ssIGNsbnRfc2ssIGFjcHRfc2ssIHBmX2NsYXNzLCBzazE7Cj4gKwlpbnQgbHN0bl9z ayxjbG50X3NrLGFjcHRfc2sscGZfY2xhc3Msc2sxOwo+ICAgCXN0cnVjdCBtc2doZHIgb3V0bWVz c2FnZTsKPiAtCXN0cnVjdCBtc2doZHIgaW5tZXNzYWdlOwo+IC0JY2hhciAqbWVzc2FnZSA9ICJo ZWxsbywgd29ybGQhXG4iOwo+IC0Jc3RydWN0IGlvdmVjIGlvdjsKPiAtCXN0cnVjdCBpb3ZlYyBp b3ZfcmN2Owo+IC0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2luZm87Cj4gLQlpbnQgbXNnX2Nv dW50Owo+IC0JY2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJj dmluZm8pKV07Cj4gLQlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKPiAtCXN0cnVjdCBpb3ZlYyBvdXRf aW92Owo+IC0JY2hhciAqYnVmZmVyX3NuZDsKPiAtCWNoYXIgKmJ1ZmZlcl9yY3Y7Cj4gKyAgICAg ICAgc3RydWN0IG1zZ2hkciBpbm1lc3NhZ2U7Cj4gKyAgICAgICAgY2hhciAqbWVzc2FnZSA9ICJo ZWxsbywgd29ybGQhXG4iOwo+ICsgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZfcmN2Owo+ICsgICAg ICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvOwo+ICsgICAgICAgIGludCBtc2dfY291 bnQ7Cj4gKyAgICAgICAgY2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3Rw X3NuZHJjdmluZm8pKV07Cj4gKyAgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2c7Cj4gKyAgICAg ICAgc3RydWN0IGlvdmVjIG91dF9pb3Y7Cj4gKyAgICAgICAgY2hhciAqIGJ1ZmZlcl9yY3Y7Cj4g ICAJY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yoc2N0cF9jbXNnX2RhdGFfdCkpXTsKPiAg IAlzdHJ1Y3Qgc29ja2FkZHIgKmxhZGRycywgKnBhZGRyczsKPiAgIAo+IC0Jc3RydWN0IHNvY2th ZGRyX2luIGNvbm5fYWRkciwgbHN0bl9hZGRyLCBhY3B0X2FkZHI7Cj4gKyAgICAgICAgc3RydWN0 IHNvY2thZGRyX2luIGNvbm5fYWRkcixsc3RuX2FkZHIsYWNwdF9hZGRyOwo+ICAgCXN0cnVjdCBz b2NrYWRkcl9pbiAqYWRkcjsKPiAgIAo+ICAgCS8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91 Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVyZWQuCj4gLQkg Ki8KPiAtCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+IC0Jc2V0dmJ1ZihzdGRl cnIsIE5VTEwsIF9JT05CRiwgMCk7Cj4gKyAgICAgICAgICogYmUgdW5idWZmZXJlZC4KPiArICAg ICAgICAgKi8KPiArICAgICAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAr ICAgICAgICBzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JcGZfY2xh c3MgPSBQRl9JTkVUOwo+ICsgICAgICAgIHBmX2NsYXNzID0gUEZfSU5FVDsKPiAgIAo+IC0Jc2sg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gLQo+ IC0JLypDcmVhdGluZyBhIHJlZ3VsYXIgc29ja2V0ICovCj4gKwkvKkNyZWF0aW5nIGEgcmVndWxh ciBzb2NrZXQqLwo+ICAgCWNsbnRfc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJF QU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAtCS8qQ3JlYXRpbmcgYSBsaXN0ZW4gc29ja2V0ICov Cj4gLQlsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RP X1NDVFApOwo+ICsJLypDcmVhdGluZyBhIGxpc3RlbiBzb2NrZXQqLwo+ICsgICAgICAgIGxzdG5f c2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4g ICAKPiAgIAljb25uX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQljb25uX2FkZHIuc2lu X2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNvbm5fYWRkci5zaW5fcG9ydCA9 IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9hZGRyLnNf YWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9wb3J0ID0g aHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+ICAgCWxzdG5fYWRkci5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKPiAtCWxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNL Owo+IC0JbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiArICAg ICAgICBsc3RuX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiArICAg ICAgICBsc3RuX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICAgCj4g LQkvKkJpbmRpbmcgdGhlIGxpc3RlbiBzb2NrZXQgKi8KPiAtCXRlc3RfYmluZChsc3RuX3NrLCAo c3RydWN0IHNvY2thZGRyICopJmxzdG5fYWRkciwgc2l6ZW9mKGxzdG5fYWRkcikpOwo+ICsJLypC aW5kaW5nIHRoZSBsaXN0ZW4gc29ja2V0Ki8KPiArCXRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0 IHNvY2thZGRyICopICZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+IC0JLypM aXN0ZW5pbmcgbWFueSBzb2NrZXRzIGFzIHdlIGFyZSBjYWxsaW5nIHRvbyBtYW55IGNvbm5lY3Qg aGVyZSAqLwo+ICsJLypMaXN0ZW5pbmcgbWFueSBzb2NrZXRzIGFzIHdlIGFyZSBjYWxsaW5nIHRv byBtYW55IGNvbm5lY3QgaGVyZSovCj4gICAJdGVzdF9saXN0ZW4obHN0bl9zaywgMSk7Cj4gICAK PiAgIAlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKPiArCQo+ICsJdGVzdF9jb25u ZWN0KGNsbnRfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm5fYWRkciwgbGVuKTsKPiAgIAo+ IC0JdGVzdF9jb25uZWN0KGNsbnRfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBs ZW4pOwo+IC0KPiAtCWFjcHRfc2sgPSB0ZXN0X2FjY2VwdChsc3RuX3NrLCAoc3RydWN0IHNvY2th ZGRyICopJmFjcHRfYWRkciwgJmxlbik7Cj4gKwlhY3B0X3NrID0gdGVzdF9hY2NlcHQobHN0bl9z aywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWNwdF9hZGRyLCAmbGVuKTsKPiAgIAo+ICAgCW1lbXNl dCgmaW5tZXNzYWdlLCAwLCBzaXplb2YoaW5tZXNzYWdlKSk7Cj4gLQlidWZmZXJfcmN2ID0gbWFs bG9jKFJFQUxMWV9CSUcpOwo+ICsgICAgICAgIGJ1ZmZlcl9yY3YgPSBtYWxsb2MoUkVBTExZX0JJ Ryk7Cj4gICAKPiAtCWlvdl9yY3YuaW92X2Jhc2UgPSBidWZmZXJfcmN2Owo+IC0JaW92X3Jjdi5p b3ZfbGVuID0gUkVBTExZX0JJRzsKPiAtCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdl9yY3Y7Cj4g LQlpbm1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2wgPSBp bmNtc2c7Cj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAr ICAgICAgICBpb3ZfcmN2Lmlvdl9iYXNlID0gYnVmZmVyX3JjdjsKPiArICAgICAgICBpb3ZfcmN2 Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfaW92ID0gJmlv dl9yY3Y7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsgICAgICAgIGlu bWVzc2FnZS5tc2dfY29udHJvbCA9IGluY21zZzsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2Nv bnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAo+IC0JbXNnX2NvdW50ID0gc3RybGVuKG1l c3NhZ2UpICsgMTsKPiArICAgICAgICBtc2dfY291bnQgPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+ ICAgCj4gICAJbWVtc2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkpOwo+IC0J YnVmZmVyX3NuZCA9IG1hbGxvYyhSRUFMTFlfQklHKTsKPiAtCj4gLQlvdXRtZXNzYWdlLm1zZ19u YW1lID0gJmxzdG5fYWRkcjsKPiAtCW91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YobHN0 bl9hZGRyKTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdiA9ICZvdXRfaW92Owo+IC0Jb3V0bWVzc2Fn ZS5tc2dfaW92bGVuID0gMTsKPiAtCW91dG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBvdXRjbXNnOwo+ IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihvdXRjbXNnKTsKPiAtCW91dG1l c3NhZ2UubXNnX2ZsYWdzID0gMDsKPiAtCj4gLQljbXNnID0gQ01TR19GSVJTVEhEUigmb3V0bWVz c2FnZSk7Cj4gLQljbXNnLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwo+IC0JY21zZy0+Y21z Z190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gLQljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVv ZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVu ID0gY21zZy0+Y21zZ19sZW47Cj4gLQlzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICop Q01TR19EQVRBKGNtc2cpOwo+IC0JbWVtc2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IHNj dHBfc25kcmN2aW5mbykpOwo+IC0KPiAtCWlvdi5pb3ZfYmFzZSA9IGJ1ZmZlcl9zbmQ7Cj4gLQlp b3YuaW92X2xlbiA9IFJFQUxMWV9CSUc7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNl ID0gbWVzc2FnZTsKPiAtCj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBtc2dfY291 bnQ7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZsc3RuX2FkZHI7Cj4gKyAgICAg ICAgb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihsc3RuX2FkZHIpOwo+ICsgICAgICAg IG91dG1lc3NhZ2UubXNnX2lvdiA9ICZvdXRfaW92Owo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNn X2lvdmxlbiA9IDE7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbCA9IG91dGNtc2c7 Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihvdXRjbXNnKTsK PiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gKwo+ICsgICAgICAgIGNtc2cg PSBDTVNHX0ZJUlNUSERSKCZvdXRtZXNzYWdlKTsKPiArICAgICAgICBjbXNnLT5jbXNnX2xldmVs ID0gSVBQUk9UT19TQ1RQOwo+ICsgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNW Owo+ICsgICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3Rw X3NuZHJjdmluZm8pKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21z Zy0+Y21zZ19sZW47Cj4gKyAgICAgICAgc2luZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAq KUNNU0dfREFUQShjbXNnKTsKPiArICAgICAgICBtZW1zZXQoc2luZm8sIDB4MDAsIHNpemVvZihz dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Cj4gKwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lv di0+aW92X2Jhc2UgPSBtZXNzYWdlOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdi0+aW92 X2xlbiA9IG1zZ19jb3VudDsKPiArCj4gICAJdGVzdF9zZW5kbXNnKGNsbnRfc2ssICZvdXRtZXNz YWdlLCBNU0dfTk9TSUdOQUwsIG1zZ19jb3VudCk7Cj4gICAKPiAgIAl0ZXN0X3JlY3Ztc2coYWNw dF9zaywgJmlubWVzc2FnZSwgTVNHX05PU0lHTkFMKTsKPiAgIAo+IC0JLypzY3RwX2dldGxhZGRy cygpIFRFU1QxOiBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIEV4cGVjdGVkIGVycm9yICov Cj4gKwkvKnNjdHBfZ2V0bGFkZHJzKCkgVEVTVDE6IEJhZCBzb2NrZXQgZGVzY3JpcHRvciwgRUJB REYgRXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWVycm9yID0gc2N0cF9nZXRsYWRkcnMoLTEsIDAsICZs YWRkcnMpOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQkFERikKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgInNjdHBfZ2V0bGFkZHJzIHdpdGggYSBiYWQgc29ja2V0ICIKPiAr CQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2dldGxhZGRycyB3aXRoIGEgYmFkIHNv Y2tldCAiCj4gICAJCQkgImRlc2NyaXB0b3IgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVy cm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9nZXRsYWRkcnMoKSB3aXRoIGEg YmFkIHNvY2tldCBkZXNjcmlwdG9yIC0gIgo+ICAgCQkgIkVCQURGIik7Cj4gICAKPiAtCS8qc2N0 cF9nZXRsYWRkcnMoKSBURVNUMjogSW52YWxpZCBzb2NrZXQsIEVOT1RTT0NLIEV4cGVjdGVkIGVy cm9yICovCj4gKwkvKnNjdHBfZ2V0bGFkZHJzKCkgVEVTVDI6IEludmFsaWQgc29ja2V0LCBFTk9U U09DSyBFeHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3IgPSBzY3RwX2dldGxhZGRycygwLCAwLCAm bGFkZHJzKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX2dldGxhZGRycyB3aXRoIGludmFsaWQgc29ja2V0 ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2dldGxhZGRycyB3aXRoIGlu dmFsaWQgc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5v KTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9nZXRsYWRkcnMoKSB3aXRoIGludmFs aWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAgIAo+ICAgCS8qc2N0cF9nZXRsYWRkcnMoKSBURVNU Mzogc29ja2V0IG9mIGRpZmZlcmVudCBwcm90b2NvbAo+IC0JICAgRU9QTk9UU1VQUCBFeHBlY3Rl ZCBlcnJvciAqLwo+IC0Jc2sxID0gc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9U T19JUCk7Cj4gKwlFT1BOT1RTVVBQIEV4cGVjdGVkIGVycm9yKi8KPiArICAgICAgICBzazEgPSBz b2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKPiAgIAllcnJvciA9IHNj dHBfZ2V0bGFkZHJzKHNrMSwgMCwgJmxhZGRycyk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVy cm5vICE9IEVPUE5PVFNVUFApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX2dldGxh ZGRycyB3aXRoIHNvY2tldCBvZiAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0 cF9nZXRsYWRkcnMgd2l0aCBzb2NrZXQgb2YgIgo+ICAgCQkJICJkaWZmZXJlbnQgcHJvdG9jb2wg ZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQ QVNTLCAic2N0cF9nZXRsYWRkcnMoKSB3aXRoIHNvY2tldCBvZiBkaWZmZXJlbnQgcHJvdG9jb2wg LSAiCj4gICAJCSAiRU9QTk9UU1VQUCIpOwo+ICAgCj4gLQkvKnNjdHBfZ2V0bGFkZHJzKCkgVEVT VDQ6IEdldHRpbmcgdGhlIGxvY2FsIGFkZHJlc3NlcyAqLwo+ICsJLypzY3RwX2dldGxhZGRycygp IFRFU1Q0OiBHZXR0aW5nIHRoZSBsb2NhbCBhZGRyZXNzZXMqLwo+ICAgCWVycm9yID0gc2N0cF9n ZXRsYWRkcnMobHN0bl9zaywgMCwgJmxhZGRycyk7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfZ2V0bGFkZHJzIHdpdGggdmFsaWQgc29ja2V0ICIK PiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2dldGxhZGRycyB3aXRoIHZhbGlk IHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4g ICAKPiAgIAlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWxhZGRyczsKPiAtCWlmIChhZGRy LT5zaW5fcG9ydCAhPSBsc3RuX2FkZHIuc2luX3BvcnQgfHwKPiAtCSAgICBhZGRyLT5zaW5fZmFt aWx5ICE9IGxzdG5fYWRkci5zaW5fZmFtaWx5IHx8Cj4gKwlpZiAoYWRkci0+c2luX3BvcnQgIT0g bHN0bl9hZGRyLnNpbl9wb3J0IHx8Cj4gKwkgICAgYWRkci0+c2luX2ZhbWlseSAhPSBsc3RuX2Fk ZHIuc2luX2ZhbWlseSB8fAo+ICAgCSAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgIT0gbHN0bl9h ZGRyLnNpbl9hZGRyLnNfYWRkcikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfZ2V0 bGFkZHJzIGNvbXBhcmlzaW9uIGZhaWxlZCIpOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgInNjdHBfZ2V0bGFkZHJzIGNvbXBhcmlzaW9uIGZhaWxlZCIpOwo+ICAgCj4gICAJdHN0X3Jl c20oVFBBU1MsICJzY3RwX2dldGxhZGRycygpIC0gU1VDQ0VTUyIpOwo+ICAgCj4gLQkvKnNjdHBf ZnJlZWFsZGRycygpIFRFU1Q1OiBmcmVlaW5nIHRoZSBsb2NhbCBhZGRyZXNzICovCj4gKwkvKnNj dHBfZnJlZWFsZGRycygpIFRFU1Q1OiBmcmVlaW5nIHRoZSBsb2NhbCBhZGRyZXNzKi8KPiAgIAlp ZiAoKHNjdHBfZnJlZWxhZGRycyhsYWRkcnMpKSA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5V TEwsICJzY3RwX2ZyZWVsYWRkcnMgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNj dHBfZnJlZWxhZGRycyAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJu byk7Cj4gLQo+ICsJCQo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9mcmVlbGFkZHJzKCkgLSBT VUNDRVNTIik7Cj4gICAKPiAtCS8qc2N0cF9nZXRwYWRkcnMoKSBURVNUNjogQmFkIHNvY2tldCBk ZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypzY3RwX2dldHBhZGRycygp IFRFU1Q2OiBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIEV4cGVjdGVkIGVycm9yKi8KPiAg IAllcnJvciA9IHNjdHBfZ2V0cGFkZHJzKC0xLCAwLCAmcGFkZHJzKTsKPiAgIAlpZiAoZXJyb3Ig IT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3Rw X2dldHBhZGRycyB3aXRoIGEgYmFkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9l eGl0LCAic2N0cF9nZXRwYWRkcnMgd2l0aCBhIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJkZXNjcmlw dG9yIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVz bShUUEFTUywgInNjdHBfZ2V0cGFkZHJzKCkgd2l0aCBhIGJhZCBzb2NrZXQgZGVzY3JpcHRvciAt ICIKPiAgIAkJICJFQkFERiIpOwo+ICAgCj4gLQkvKnNjdHBfZ2V0cGFkZHJzKCkgVEVTVDc6IElu dmFsaWQgc29ja2V0LCBFTk9UU09DSyBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypzY3RwX2dldHBh ZGRycygpIFRFU1Q3OiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0ZWQgZXJyb3IqLwo+ ICAgCWVycm9yID0gc2N0cF9nZXRwYWRkcnMoMCwgMCwgJnBhZGRycyk7Cj4gICAJaWYgKGVycm9y ICE9IC0xIHx8IGVycm5vICE9IEVOT1RTT0NLKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAi c2N0cF9nZXRwYWRkcnMgd2l0aCBpbnZhbGlkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAic2N0cF9nZXRwYWRkcnMgd2l0aCBpbnZhbGlkIHNvY2tldCAiCj4gICAJCQkg ImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShU UEFTUywgInNjdHBfZ2V0cGFkZHJzKCkgd2l0aCBpbnZhbGlkIHNvY2tldCAtIEVOT1RTT0NLIik7 Cj4gLQo+ICsJCj4gICAJLypzY3RwX2dldHBhZGRycygpIFRFU1Q4OiBzb2NrZXQgb2YgZGlmZmVy ZW50IHByb3RvY29sCj4gLQkgICBFT1BOT1RTVVBQIEV4cGVjdGVkIGVycm9yICovCj4gKwlFT1BO T1RTVVBQIEV4cGVjdGVkIGVycm9yKi8KPiAgIAllcnJvciA9IHNjdHBfZ2V0cGFkZHJzKHNrMSwg MCwgJmxhZGRycyk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFAp Cj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX2dldHBhZGRycyB3aXRoIHNvY2tldCBv ZiAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0cF9nZXRwYWRkcnMgd2l0aCBz b2NrZXQgb2YgIgo+ICAgCQkJICJkaWZmZXJlbnQgcHJvdG9jb2wgZXJyb3I6JWQsIGVycm5vOiVk IiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9nZXRwYWRk cnMoKSB3aXRoIHNvY2tldCBvZiBkaWZmZXJlbnQgcHJvdG9jb2wgLSAiCj4gICAJCSAiRU9QTk9U U1VQUCIpOwo+IC0KPiAtCS8qc2N0cF9nZXRwYWRkcnMoKSBURVNUOTogR2V0dGluZyB0aGUgcGVl ciBhZGRyZXNzZXMgKi8KPiArCQo+ICsJLypzY3RwX2dldHBhZGRycygpIFRFU1Q5OiBHZXR0aW5n IHRoZSBwZWVyIGFkZHJlc3NlcyovCj4gICAJZXJyb3IgPSBzY3RwX2dldHBhZGRycyhhY3B0X3Nr LCAwLCAmcGFkZHJzKTsKPiAgIAlpZiAoZXJyb3IgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAic2N0cF9nZXRwYWRkcnMgd2l0aCB2YWxpZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgInNjdHBfZ2V0cGFkZHJzIHdpdGggdmFsaWQgc29ja2V0ICIKPiAgIAkJ CSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAtCj4gKwkKPiAgIAlhZGRy ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXBhZGRyczsKPiAgIAlpZiAoYWRkci0+c2luX3BvcnQg IT0gYWNwdF9hZGRyLnNpbl9wb3J0IHx8Cj4gLQkgICAgYWRkci0+c2luX2ZhbWlseSAhPSBhY3B0 X2FkZHIuc2luX2ZhbWlseSB8fAo+IC0JICAgIGFkZHItPnNpbl9hZGRyLnNfYWRkciAhPSBhY3B0 X2FkZHIuc2luX2FkZHIuc19hZGRyKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2N0cF9n ZXRwYWRkcnMgY29tcGFyaXNpb24gZmFpbGVkIik7Cj4gKyAgICAgICAgICAgIGFkZHItPnNpbl9m YW1pbHkgIT0gYWNwdF9hZGRyLnNpbl9mYW1pbHkgfHwKPiArICAgICAgICAgICAgYWRkci0+c2lu X2FkZHIuc19hZGRyICE9IGFjcHRfYWRkci5zaW5fYWRkci5zX2FkZHIpCj4gKwkJdHN0X2Jya20o VEJST0ssIHRzdF9leGl0LCAic2N0cF9nZXRwYWRkcnMgY29tcGFyaXNpb24gZmFpbGVkIik7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfZ2V0cGFkZHJzKCkgLSBTVUNDRVNTIik7Cj4g ICAKPiAtCS8qc2N0cF9mcmVlYXBkZHJzKCkgVEVTVDEwOiBmcmVlaW5nIHRoZSBwZWVyIGFkZHJl c3MgKi8KPiArCS8qc2N0cF9mcmVlYXBkZHJzKCkgVEVTVDEwOiBmcmVlaW5nIHRoZSBwZWVyIGFk ZHJlc3MqLwo+ICAgCWlmICgoc2N0cF9mcmVlcGFkZHJzKHBhZGRycykpIDwgMCkKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgInNjdHBfZnJlZXBhZGRycyAiCj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAic2N0cF9mcmVlcGFkZHJzICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVk IiwgZXJyb3IsIGVycm5vKTsKPiAtCj4gKwkJCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzY3RwX2Zy ZWVwYWRkcnMoKSAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCWNsb3NlKGNsbnRfc2spOwo+ICAgCj4g LQl0c3RfZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNl cy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9jb25uZWN0LmMgYi90ZXN0Y2Fz ZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfY29ubmVjdC5jCj4gaW5kZXgg OTNmMmNhYS4uYjQ3MjFhZiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1 bmNfdGVzdHMvdGVzdF8xX3RvXzFfY29ubmVjdC5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsv c2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX2Nvbm5lY3QuYwo+IEBAIC0xLDQgKzEsNCBAQAo+ IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJu ZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMyBIZXdsZXR0LVBhY2th cmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3Jw LiAyMDA0Cj4gICAgKgo+IEBAIC0xMywxNSArMTMsMTUgQEAKPiAgICAqIFRFU1Q3OiBDb25uZWN0 IHdoZW4gYWNjZXB0IHF1ZXVlIGlzIGZ1bGwKPiAgICAqIFRFU1Q4OiBPbiBhIGxpc3RlbmluZyBz b2NrZXQKPiAgICAqIFRFU1Q5OiBPbiBlc3RhYmxpc2hlZCBzb2NrZXQKPiAtICogVEVTVDEwOiBD b25uZWN0IHRvIHJlLWVzdGFibGlzaCBhIGNsb3NlZCBhc3NvY2lhdGlvbi4KPiArICogVEVTVDEw OiBDb25uZWN0IHRvIHJlLWVzdGFibGlzaCBhIGNsb3NlZCBhc3NvY2lhdGlvbi4KPiAgICAqCj4g LSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YK PiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAg ICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChh dCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhl IFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAg KioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTUyLDcgKzUyLDcg QEAKPiAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Cj4gLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ CQkvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiArI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gICAgICAg ICAvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiAgICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KPiAgICNp bmNsdWRlIDxlcnJuby5oPgo+ICAgI2luY2x1ZGUgPHN5cy91aW8uaD4KPiBAQCAtNjUsMTUwICs2 NSwxNTIgQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gICAjZGVmaW5lIFNLX01BWCAxMAo+ICAg Cj4gLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2ludAo+ICttYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4gICB7Cj4gLQlpbnQgZXJyb3IsIGk7Cj4gKyAgICAgICAgaW50 IGVycm9yLGk7Cj4gICAJc29ja2xlbl90IGxlbjsKPiAtCWludCBzaywgbHN0bl9zaywgY2xudF9z a1tTS19NQVhdLCBhY3B0X3NrW1NLX01BWF0sIHBmX2NsYXNzOwo+IC0JaW50IHNrMSwgY2xudDJf c2s7Cj4gKwlpbnQgc2ssbHN0bl9zayxjbG50X3NrW1NLX01BWF0sYWNwdF9za1tTS19NQVhdLHBm X2NsYXNzOwo+ICsJaW50IHNrMSxjbG50Ml9zazsKPiAgIAo+IC0Jc3RydWN0IHNvY2thZGRyX2lu IGNvbm5fYWRkciwgbHN0bl9hZGRyLCBhY3B0X2FkZHI7Cj4gKyAgICAgICAgc3RydWN0IHNvY2th ZGRyX2luIGNvbm5fYWRkcixsc3RuX2FkZHIsYWNwdF9hZGRyOwo+ICAgCj4gICAJLyogUmF0aGVy IHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IC0JICog YmUgdW5idWZmZXJlZC4KPiAtCSAqLwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwg MCk7Cj4gLQlzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAgKiBi ZSB1bmJ1ZmZlcmVkLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHNldHZidWYoc3Rkb3V0LCBO VUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgIHNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYs IDApOwo+ICAgCj4gLQlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gKyAgICAgICAgcGZfY2xhc3MgPSBQ Rl9JTkVUOwo+ICAgCj4gLQlzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwg SVBQUk9UT19TQ1RQKTsKPiAtCXNrMSA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVB TSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBT T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBzazEgPSB0ZXN0X3NvY2tldChw Zl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAtCS8qQ3JlYXRpbmcg YSBsaXN0ZW4gc29ja2V0ICovCj4gLQlsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNP Q0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICsJLypDcmVhdGluZyBhIGxpc3RlbiBzb2NrZXQq Lwo+ICsgICAgICAgIGxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0s IElQUFJPVE9fU0NUUCk7Cj4gICAKPiAtCS8qQ3JlYXRpbmcgYSByZWd1bGFyIHNvY2tldCAqLwo+ IC0JZm9yIChpID0gMDsgaSA8IFNLX01BWDsgaSsrKQo+ICsJLypDcmVhdGluZyBhIHJlZ3VsYXIg c29ja2V0Ki8KPiArCWZvciAoaSA9IDAgOyBpIDwgU0tfTUFYIDsgaSsrKQo+ICAgCQljbG50X3Nr W2ldID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ ICAgCj4gICAJY2xudDJfc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQ UFJPVE9fU0NUUCk7Cj4gICAKPiAgIAljb25uX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4g LQljb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNvbm5f YWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgY29ubl9h ZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgY29ubl9h ZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+ICAgCWxzdG5fYWRk ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBT Q1RQX0lQX0xPT1BCQUNLOwo+IC0JbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNU UE9SVF8xKTsKPiArICAgICAgICBsc3RuX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9M T09QQkFDSzsKPiArICAgICAgICBsc3RuX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQ T1JUXzEpOwo+ICsKPiArCS8qQmluZGluZyB0aGUgbGlzdGVuIHNvY2tldCovCj4gKwl0ZXN0X2Jp bmQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9h ZGRyKSk7Cj4gICAKPiAtCS8qQmluZGluZyB0aGUgbGlzdGVuIHNvY2tldCAqLwo+IC0JdGVzdF9i aW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9h ZGRyKSk7Cj4gKwkvKkxpc3RlbmluZyB0aGUgc29ja2V0Ki8KPiArCXRlc3RfbGlzdGVuKGxzdG5f c2ssIFNLX01BWC0xKTsKPiAgIAo+IC0JLypMaXN0ZW5pbmcgdGhlIHNvY2tldCAqLwo+IC0JdGVz dF9saXN0ZW4obHN0bl9zaywgU0tfTUFYIC0gMSk7Cj4gICAKPiAtCS8qY29ubmVjdCAoKSBURVNU MTogQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypj b25uZWN0ICgpIFRFU1QxOiBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIEV4cGVjdGVkIGVy cm9yKi8KPiAgIAlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKPiAtCWVycm9yID0g Y29ubmVjdCgtMSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4g KwllcnJvciA9IGNvbm5lY3QoLTEsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm5fYWRk ciwgbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJdHN0 X2Jya20oVEJST0ssIE5VTEwsICJjb25uZWN0IHdpdGggYmFkIHNvY2tldCAiCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAiY29ubmVjdCB3aXRoIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJk ZXNjcmlwdG9yIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0 c3RfcmVzbShUUEFTUywgImNvbm5lY3QoKSB3aXRoIGJhZCBzb2NrZXQgZGVzY3JpcHRvciAtIEVC QURGIik7Cj4gLQo+IC0JLypjb25uZWN0ICgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNP Q0sgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gY29ubmVjdCgwLCAoY29uc3Qgc3RydWN0 IHNvY2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsKPiArCQo+ICsJLypjb25uZWN0ICgpIFRFU1Qy OiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0ZWQgZXJyb3IqLwo+ICsJZXJyb3IgPSBj b25uZWN0KDAsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm5fYWRkciwgbGVuKTsKPiAg IAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4gLQkJdHN0X2Jya20oVEJS T0ssIE5VTEwsICJjb25uZWN0IHdpdGggaW52YWxpZCBzb2NrZXQgIgo+IC0JCQkgImVycm9yOiVk LCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0 LCAiY29ubmVjdCB3aXRoIGludmFsaWQgc29ja2V0ICIKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jl c20oVFBBU1MsICJjb25uZWN0KCkgd2l0aCBpbnZhbGlkIHNvY2tldCAtIEVOT1RTT0NLIik7Cj4g ICAKPiAtCS8qY29ubmVjdCAoKSBURVNUMzogSW52YWxpZCBhZGRyZXNzLCBFRkFVTFQgRXhwZWN0 ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gY29ubmVjdChzaywgKGNvbnN0IHN0cnVjdCBzb2NrYWRk ciAqKS0xLCBsZW4pOwo+ICsJLypjb25uZWN0ICgpIFRFU1QzOiBJbnZhbGlkIGFkZHJlc3MsIEVG QVVMVCBFeHBlY3RlZCBlcnJvciovCj4gKwllcnJvciA9IGNvbm5lY3Qoc2ssIChjb25zdCBzdHJ1 Y3Qgc29ja2FkZHIgKikgLTEsIGxlbik7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9 IEVGQVVMVCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3Qgd2l0aCBpbnZhbGlk IGFkZHJlc3MgIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiY29ubmVjdCB3aXRoIGludmFsaWQgYWRkcmVz cyAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiY29ubmVjdCgpIHdpdGggaW52 YWxpZCBhZGRyZXNzIC0gRUZBVUxUIik7Cj4gICAKPiAtCS8qY29ubmVjdCAoKSBURVNUNDogSW52 YWxpZCBhZGRyZXNzIGxlbmd0aCwgRUlOVkFMIEV4cGVjdGVkIGVycm9yICovCj4gLQllcnJvciA9 IGNvbm5lY3Qoc2ssIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCAobGVuIC0g MykpOwo+ICsJLypjb25uZWN0ICgpIFRFU1Q0OiBJbnZhbGlkIGFkZHJlc3MgbGVuZ3RoLCBFSU5W QUwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsJZXJyb3IgPSBjb25uZWN0KHNrLCAoY29uc3Qgc3RydWN0 IHNvY2thZGRyICopICZjb25uX2FkZHIsIChsZW4gLSAzKSk7Cj4gICAJaWYgKGVycm9yICE9IC0x IHx8IGVycm5vICE9IEVJTlZBTCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3Qg d2l0aCBpbnZhbGlkIGFkZHJlc3MgbGVuZ3RoICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQi LCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImNvbm5lY3Qg d2l0aCBpbnZhbGlkIGFkZHJlc3MgbGVuZ3RoICIKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20o VFBBU1MsICJjb25uZWN0KCkgd2l0aCBpbnZhbGlkIGFkZHJlc3MgbGVuZ3RoIC0gRUlOVkFMIik7 Cj4gICAKPiAtCS8qY29ubmVjdCAoKSBURVNUNTogSW52YWxpZCBhZGRyZXNzIGZhbWlseSwgRUlO VkFMIEV4cGVjdCBlcnJvciAqLwo+IC0JY29ubl9hZGRyLnNpbl9mYW1pbHkgPSA5MDkwOwkvKkFz c2lnbmluZyBpbnZhbGlkIGFkZHJlc3MgZmFtaWx5ICovCj4gLQllcnJvciA9IGNvbm5lY3Qoc2ss IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+IC0JaWYgKGVycm9y ICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNv bm5lY3Qgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZmFtaWx5ICIKPiAtCQkJICJlcnJvcjolZCwgZXJy bm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJLypjb25uZWN0ICgpIFRFU1Q1OiBJbnZhbGlkIGFk ZHJlc3MgZmFtaWx5LCBFSU5WQUwgRXhwZWN0IGVycm9yKi8KPiArCWNvbm5fYWRkci5zaW5fZmFt aWx5ID0gOTA5MDsgLypBc3NpZ25pbmcgaW52YWxpZCBhZGRyZXNzIGZhbWlseSovCj4gKyAgICAg ICAgZXJyb3IgPSBjb25uZWN0KHNrLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopICZjb25uX2Fk ZHIsIGxlbik7Cj4gKyAgICAgICAgaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkK PiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJjb25uZWN0IHdpdGggaW52YWxpZCBhZGRy ZXNzIGZhbWlseSAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5v OiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiY29ubmVjdCgp IHdpdGggaW52YWxpZCBhZGRyZXNzIGZhbWlseSAtIEVJTlZBTCIpOwo+ICAgCj4gICAJY29ubl9h ZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAgCj4gLQkvKmNvbm5lY3QgKCkgVEVTVDY6IEJs b2NraW5nIGNvbm5lY3QsIHNob3VsZCBwYXNzICovCj4gLQkvKkFsbCB0aGUgYmUgYmVsb3cgYmxv Y2tpbmcgY29ubmVjdCBzaG91bGQgcGFzcyBhcyBzb2NrZXQgd2lsbCBiZQo+IC0JICAgbGlzdGVu aW5nIFNLX01BWCBjbGllbnRzICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYOyBpKyspIHsK PiArCS8qY29ubmVjdCAoKSBURVNUNjogQmxvY2tpbmcgY29ubmVjdCwgc2hvdWxkIHBhc3MqLwo+ ICsJLypBbGwgdGhlIGJlIGJlbG93IGJsb2NraW5nIGNvbm5lY3Qgc2hvdWxkIHBhc3MgYXMgc29j a2V0IHdpbGwgYmUKPiArCWxpc3RlbmluZyBTS19NQVggY2xpZW50cyovCj4gKwlmb3IgKGkgPSAw IDsgaSA8IFNLX01BWCA7IGkrKykgewo+ICAgCQllcnJvciA9IGNvbm5lY3QoY2xudF9za1tpXSwg KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsCj4gLQkJCQlsZW4pOwo+ICsJCQkg ICAgICBsZW4pOwo+ICAgCQlpZiAoZXJyb3IgPCAwKQo+IC0JCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgInZhbGlkIGJsb2NraW5nIGNvbm5lY3QgIgo+ICsJCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJ2YWxpZCBibG9ja2luZyBjb25uZWN0ICIKPiAgIAkJCQkgImVycm9yOiVkLCBlcnJubzol ZCIsIGVycm9yLCBlcnJubyk7Cj4gICAJfQo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJ2YWxp ZCBibG9ja2luZyBjb25uZWN0KCkgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAkvKmNvbm5lY3QgKCkg VEVTVDc6IGNvbm5lY3Qgd2hlbiBhY2NlcHQgcXVldWUgaXMgZnVsbCwgRUNPTk5SRUZVU0VECj4g LQkgICBFeHBlY3QgZXJyb3IgKi8KPiAtCS8qTm93IHRoYXQgYWNjZXB0IHF1ZXVlIGlzIGZ1bGws IHRoZSBiZWxvdyBjb25uZWN0IHNob3VsZCBmYWlsICovCj4gLQllcnJvciA9IGNvbm5lY3QoY2xu dDJfc2ssIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+ICsJRXhw ZWN0IGVycm9yKi8KPiArCS8qTm93IHRoYXQgYWNjZXB0IHF1ZXVlIGlzIGZ1bGwsIHRoZSBiZWxv dyBjb25uZWN0IHNob3VsZCBmYWlsKi8KPiArCWVycm9yID0gY29ubmVjdChjbG50Ml9zaywgKGNv bnN0IHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBsZW4pOwo+ICAgCWlmIChlcnJvciAh PSAtMSB8fCBlcnJubyAhPSBFQ09OTlJFRlVTRUQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJjb25uZWN0IHdoZW4gYWNjZXB0IHF1ZXVlIGlzIGZ1bGwgIgo+IC0JCQkgImVycm9yOiVkLCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAi Y29ubmVjdCB3aGVuIGFjY2VwdCBxdWV1ZSBpcyBmdWxsICIKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0 X3Jlc20oVFBBU1MsICJjb25uZWN0KCkgd2hlbiBhY2NlcHQgcXVldWUgaXMgZnVsbCAtIEVDT05O UkVGVVNFRCIpOwo+IC0KPiAtCS8qQ2FsbGluZyBhIGFjY2VwdCBmaXJzdCB0byBlc3RibGlzaCB0 aGUgcGVuZGluZyBjb25uZWN0aW9ucyAqLwo+IC0JZm9yIChpID0gMDsgaSA8IFNLX01BWDsgaSsr KQo+ICsJCj4gKwkvKkNhbGxpbmcgYSBhY2NlcHQgZmlyc3QgdG8gZXN0Ymxpc2ggdGhlIHBlbmRp bmcgY29ubmVjdGlvbnMqLwo+ICsJZm9yIChpPTAgOyBpIDwgU0tfTUFYIDsgaSsrKQo+ICAgCQlh Y3B0X3NrW2ldID0gdGVzdF9hY2NlcHQobHN0bl9zaywKPiAtCQkJCQkgKHN0cnVjdCBzb2NrYWRk ciAqKSZhY3B0X2FkZHIsICZsZW4pOwo+ICsJCQkJCSAoc3RydWN0IHNvY2thZGRyICopICZhY3B0 X2FkZHIsICZsZW4pOwo+ICAgCj4gLQkvKmNvbm5lY3QgKCkgVEVTVDg6IGZyb20gYSBsaXN0ZW5p bmcgc29ja2V0LCBFSVNDT05OIEV4cGVjdCBlcnJvciAqLwo+IC0JZXJyb3IgPSBjb25uZWN0KGxz dG5fc2ssIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmbHN0bl9hZGRyLCBsZW4pOwo+ICsJLypj b25uZWN0ICgpIFRFU1Q4OiBmcm9tIGEgbGlzdGVuaW5nIHNvY2tldCwgRUlTQ09OTiBFeHBlY3Qg ZXJyb3IqLwo+ICsJZXJyb3IgPSBjb25uZWN0KGxzdG5fc2ssIChjb25zdCBzdHJ1Y3Qgc29ja2Fk ZHIgKikgJmxzdG5fYWRkciwgbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0g RUlTQ09OTikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3Qgb24gYSBsaXN0ZW5p bmcgc29ja2V0ICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImNvbm5lY3Qgb24gYSBsaXN0ZW5pbmcgc29j a2V0ICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBl cnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJjb25uZWN0KCkgb24gYSBs aXN0ZW5pbmcgc29ja2V0IC0gRUlTQ09OTiIpOwo+ICAgCj4gLQkvKmNvbm5lY3QoKSBURVNUOTog T24gZXN0YWJsaXNoZWQgc29ja2V0LCBFSVNDT05OIEV4cGVjdCBlcnJvciAqLwo+IC0JaSA9IDA7 Cj4gLQllcnJvciA9IGNvbm5lY3QoYWNwdF9za1tpXSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAq KSZsc3RuX2FkZHIsIGxlbik7Cj4gLQlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUlTQ09O TikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3Qgb24gYW4gZXN0YWJsaXNoZWQg c29ja2V0ICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJ Lypjb25uZWN0KCkgVEVTVDk6IE9uIGVzdGFibGlzaGVkIHNvY2tldCwgRUlTQ09OTiBFeHBlY3Qg ZXJyb3IqLwo+ICsJaT0wOwo+ICsJZXJyb3IgPSBjb25uZWN0KGFjcHRfc2tbaV0sIChjb25zdCBz dHJ1Y3Qgc29ja2FkZHIgKikgJmxzdG5fYWRkciwgbGVuKTsKPiArICAgICAgICBpZiAoZXJyb3Ig IT0gLTEgfHwgZXJybm8gIT0gRUlTQ09OTikKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJjb25uZWN0IG9uIGFuIGVzdGFibGlzaGVkIHNvY2tldCAiCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRz dF9yZXNtKFRQQVNTLCAiY29ubmVjdCgpIG9uIGFuIGVzdGFibGlzaGVkIHNvY2tldCAtIEVJU0NP Tk4iKTsKPiAgIAo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICsJZm9yIChpID0gMCA7 IGkgPCA0IDsgaSsrKSB7Cj4gICAJCWNsb3NlKGNsbnRfc2tbaV0pOwo+ICAgCQljbG9zZShhY3B0 X3NrW2ldKTsKPiAtCX0KPiArCX0KPiAgIAo+ICAgCS8qIGNvbm5lY3QoKSBURVNUMTA6IFJlLWVz dGFibGlzaCBhbiBhc3NvY2lhdGlvbiB0aGF0IGlzIGNsb3NlZC4KPiAgIAkgKiBzaG91bGQgc3Vj Y2VlZC4KPiAgIAkgKi8KPiAgIAllcnJvciA9IGNvbm5lY3Qoc2sxLCAoY29uc3Qgc3RydWN0IHNv Y2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsKPiAgIAlpZiAoZXJyb3IgPCAwKQo+IC0JCXRzdF9i cmttKFRCUk9LLCBOVUxMLCAiUmUtZXN0YWJsaXNoIGFuIGFzc29jaWF0aW9uIHRoYXQgIgo+IC0J CQkgImlzIGNsb3NlZCBlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgIlJlLWVzdGFibGlzaCBhbiBhc3NvY2lhdGlvbiB0aGF0 ICIKPiArCQkJCSAiaXMgY2xvc2VkIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7 Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImNvbm5lY3QoKSB0byByZS1lc3RhYmxpc2ggYSBj bG9zZWQgYXNzb2NpYXRpb24gLSAiCj4gICAJCSAiU1VDQ0VTUyIpOwo+IEBAIC0yMTcsNSArMjE5 LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAljbG9zZShzazEpOwo+ ICAgCWNsb3NlKGxzdG5fc2spOwo+ICAgCj4gLQl0c3RfZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4g ICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0 XzFfdG9fMV9jb25uZWN0eC5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rl c3RfMV90b18xX2Nvbm5lY3R4LmMKPiBpbmRleCA1NTFkNDliLi4zY2IxOGIzIDEwMDY0NAo+IC0t LSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9jb25uZWN0 eC5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18x X2Nvbm5lY3R4LmMKPiBAQCAtMSw0ICsxLDQgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNl IEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiBD b3B5cmlnaHQgKGMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwu UAo+ICAgICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNAo+ICAgICoKPiBAQCAtMTMsMTUg KzEzLDE1IEBACj4gICAgKiBURVNUNzogQ29ubmVjdCB3aGVuIGFjY2VwdCBxdWV1ZSBpcyBmdWxs Cj4gICAgKiBURVNUODogT24gYSBsaXN0ZW5pbmcgc29ja2V0Cj4gICAgKiBURVNUOTogT24gZXN0 YWJsaXNoZWQgc29ja2V0Cj4gLSAqIFRFU1QxMDogQ29ubmVjdCB0byByZS1lc3RhYmxpc2ggYSBj bG9zZWQgYXNzb2NpYXRpb24uCj4gKyAqIFRFU1QxMDogQ29ubmVjdCB0byByZS1lc3RhYmxpc2gg YSBjbG9zZWQgYXNzb2NpYXRpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1w bGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRp b24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkg bGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRh dGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGlt cGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLgo+IEBAIC01Miw3ICs1Miw3IEBACj4gICAjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+Cj4gICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NvY2tl dC5oPgo+IC0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogZm9yIHNvY2thZGRyX2luICovCj4g KyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAgICAgLyogZm9yIHNvY2thZGRyX2luICovCj4g ICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Cj4gICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAgICNpbmNs dWRlIDxzeXMvdWlvLmg+Cj4gQEAgLTY1LDE0ICs2NSwxNSBAQCBpbnQgVFNUX0NOVCA9IDA7Cj4g ICAKPiAgICNkZWZpbmUgU0tfTUFYIDEwCj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKPiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAt CWludCBlcnJvciwgaTsKPiArCWludCBlcnJvcixpOwo+ICAgCXNvY2tsZW5fdCBsZW47Cj4gLQlp bnQgc2ssIGxzdG5fc2ssIGNsbnRfc2tbU0tfTUFYXSwgYWNwdF9za1tTS19NQVhdLCBwZl9jbGFz czsKPiAtCWludCBzazEsIGNsbnQyX3NrOwo+ICsJaW50IHNrLGxzdG5fc2ssY2xudF9za1tTS19N QVhdLGFjcHRfc2tbU0tfTUFYXSxwZl9jbGFzczsKPiArCWludCBzazEsY2xudDJfc2s7Cj4gICAK PiAtCXN0cnVjdCBzb2NrYWRkcl9pbiBjb25uX2FkZHIsIGxzdG5fYWRkciwgYWNwdF9hZGRyOwo+ ICsJc3RydWN0IHNvY2thZGRyX2luIGNvbm5fYWRkcixsc3RuX2FkZHIsYWNwdF9hZGRyOwo+ICAg CXN0cnVjdCBzb2NrYWRkciAqdG1wX2FkZHI7Cj4gICAKPiAgIAkvKiBSYXRoZXIgdGhhbiBmZmx1 c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gQEAgLTg2LDExICs4Nywx MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCXNrID0gdGVzdF9zb2Nr ZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCXNrMSA9IHRlc3Rf c29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+IC0JLypD cmVhdGluZyBhIGxpc3RlbiBzb2NrZXQgKi8KPiArCS8qQ3JlYXRpbmcgYSBsaXN0ZW4gc29ja2V0 Ki8KPiAgIAlsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBS T1RPX1NDVFApOwo+ICAgCj4gLQkvKkNyZWF0aW5nIGEgcmVndWxhciBzb2NrZXQgKi8KPiAtCWZv ciAoaSA9IDA7IGkgPCBTS19NQVg7IGkrKykKPiArCS8qQ3JlYXRpbmcgYSByZWd1bGFyIHNvY2tl dCovCj4gKwlmb3IgKGkgPSAwIDsgaSA8IFNLX01BWCA7IGkrKykKPiAgIAkJY2xudF9za1tpXSA9 IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ ICAgCWNsbnQyX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RP X1NDVFApOwo+IEBAIC0xMDMsMTI2ICsxMDQsMTIzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJbHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJB Q0s7Cj4gICAJbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAg IAo+IC0JLypCaW5kaW5nIHRoZSBsaXN0ZW4gc29ja2V0ICovCj4gLQl0ZXN0X2JpbmQobHN0bl9z aywgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAr CS8qQmluZGluZyB0aGUgbGlzdGVuIHNvY2tldCovCj4gKwl0ZXN0X2JpbmQobHN0bl9zaywgKHN0 cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gICAKPiAt CS8qTGlzdGVuaW5nIHRoZSBzb2NrZXQgKi8KPiAtCXRlc3RfbGlzdGVuKGxzdG5fc2ssIFNLX01B WCAtIDEpOwo+ICsJLypMaXN0ZW5pbmcgdGhlIHNvY2tldCovCj4gKwl0ZXN0X2xpc3Rlbihsc3Ru X3NrLCBTS19NQVgtMSk7Cj4gICAKPiAtCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUMTogQmFkIHNv Y2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsKPiArCS8qc2N0cF9j b25uZWN0eCAoKSBURVNUMTogQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBl cnJvciovCj4gICAJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cj4gLQllcnJvciA9 IHNjdHBfY29ubmVjdHgoLTEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCAxKTsKPiAr CWVycm9yID0gc2N0cF9jb25uZWN0eCgtMSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRy LCAxLCBOVUxMKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX2Nvbm5lY3R4IHdpdGggYmFkIHNvY2tldCAiCj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0cF9jb25uZWN0eCB3aXRoIGJhZCBzb2Nr ZXQgIgo+ICAgCQkJICJkZXNjcmlwdG9yIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJu byk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfY29ubmVjdHgoKSB3aXRoIGJhZCBz b2NrZXQgZGVzY3JpcHRvciAtIEVCQURGIik7Cj4gLQo+IC0JLypzY3RwX2Nvbm5lY3R4ICgpIFRF U1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9y ID0gc2N0cF9jb25uZWN0eCgwLCAoc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgMSk7Cj4g KwkKPiArCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUMjogSW52YWxpZCBzb2NrZXQsIEVOT1RTT0NL IEV4cGVjdGVkIGVycm9yKi8KPiArCWVycm9yID0gc2N0cF9jb25uZWN0eCgwLCAoc3RydWN0IHNv Y2thZGRyICopICZjb25uX2FkZHIsIDEsIE5VTEwpOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBl cnJubyAhPSBFTk9UU09DSykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfY29ubmVj dHggd2l0aCBpbnZhbGlkIHNvY2tldCAiCj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2Nvbm5lY3R4 IHdpdGggaW52YWxpZCBzb2NrZXQgIgo+ICsJICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVy cm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9j b25uZWN0eCgpIHdpdGggaW52YWxpZCBzb2NrZXQgLSBFTk9UU09DSyIpOwo+ICAgCj4gLQkvKnNj dHBfY29ubmVjdHggKCkgVEVTVDM6IEludmFsaWQgYWRkcmVzcywgRUlOVkFMIEV4cGVjdGVkIGVy cm9yICovCj4gLQl0bXBfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKiltYWxsb2Moc2l6ZW9mKHN0 cnVjdCBzb2NrYWRkcikgLSAxKTsKPiArCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUMzogSW52YWxp ZCBhZGRyZXNzLCBFSU5WQUwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsJdG1wX2FkZHIgPSAoc3RydWN0 IHNvY2thZGRyICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAtIDEpOwo+ICAgCXRt cF9hZGRyLT5zYV9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JZXJyb3IgPSBzY3RwX2Nvbm5lY3R4KHNr LCB0bXBfYWRkciwgMSk7Cj4gKwllcnJvciA9IHNjdHBfY29ubmVjdHgoc2ssIHRtcF9hZGRyLCAx LCBOVUxMKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUlOVkFMKQo+IC0JCXRz dF9icmttKFRCUk9LLCBOVUxMLCAic2N0cF9jb25uZWN0eCB3aXRoIGludmFsaWQgYWRkcmVzcyAi Cj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2Nvbm5lY3R4IHdpdGggaW52YWxpZCBhZGRyZXNzICIK PiArCSAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7 Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfY29ubmVjdHgoKSB3aXRoIGludmFsaWQg YWRkcmVzcyAtIEVJTlZBTCIpOwo+ICAgCj4gLQkvKnNjdHBfY29ubmVjdHggKCkgVEVTVDQ6IElu dmFsaWQgYWRkcmVzcyBsZW5ndGgsIEVJTlZBTCBFeHBlY3RlZCBlcnJvciAqLwo+IC0JZXJyb3Ig PSBzY3RwX2Nvbm5lY3R4KHNrLCAoc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgMCk7Cj4g KwkvKnNjdHBfY29ubmVjdHggKCkgVEVTVDQ6IEludmFsaWQgYWRkcmVzcyBsZW5ndGgsIEVJTlZB TCBFeHBlY3RlZCBlcnJvciovCj4gKwllcnJvciA9IHNjdHBfY29ubmVjdHgoc2ssIChzdHJ1Y3Qg c29ja2FkZHIgKikgJmNvbm5fYWRkciwgMCwgTlVMTCk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8 IGVycm5vICE9IEVJTlZBTCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwKPiAtCQkJICJzY3Rw X2Nvbm5lY3R4IHdpdGggaW52YWxpZCBhZGRyZXNzIGxlbmd0aCAiCj4gLQkJCSAiZXJyb3I6JWQs IGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJzY3RwX2Nvbm5lY3R4IHdpdGggaW52YWxpZCBhZGRyZXNzIGxlbmd0aCAiCj4gKwkgICAgICAg ICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJ dHN0X3Jlc20oVFBBU1MsICJzY3RwX2Nvbm5lY3R4KCkgd2l0aCBpbnZhbGlkIGFkZHJlc3MgbGVu Z3RoIC0gRUlOVkFMIik7Cj4gICAKPiAtCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUNTogSW52YWxp ZCBhZGRyZXNzIGZhbWlseSwgRUlOVkFMIEV4cGVjdCBlcnJvciAqLwo+IC0JY29ubl9hZGRyLnNp bl9mYW1pbHkgPSA5MDkwOwkvKkFzc2lnbmluZyBpbnZhbGlkIGFkZHJlc3MgZmFtaWx5ICovCj4g LQllcnJvciA9IHNjdHBfY29ubmVjdHgoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRy LCAxKTsKPiArCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUNTogSW52YWxpZCBhZGRyZXNzIGZhbWls eSwgRUlOVkFMIEV4cGVjdCBlcnJvciovCj4gKwljb25uX2FkZHIuc2luX2ZhbWlseSA9IDkwOTA7 IC8qQXNzaWduaW5nIGludmFsaWQgYWRkcmVzcyBmYW1pbHkqLwo+ICsJZXJyb3IgPSBzY3RwX2Nv bm5lY3R4KHNrLCAoc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIDEsIE5VTEwpOwo+ICAg CWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFSU5WQUwpCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsCj4gLQkJCSAic2N0cF9jb25uZWN0eCB3aXRoIGludmFsaWQgYWRkcmVzcyBmYW1pbHkg Igo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAic2N0cF9jb25uZWN0eCB3aXRoIGludmFsaWQgYWRkcmVzcyBm YW1pbHkgIgo+ICsJICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3Is IGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9jb25uZWN0eCgpIHdpdGgg aW52YWxpZCBhZGRyZXNzIGZhbWlseSAtIEVJTlZBTCIpOwo+ICAgCj4gICAJY29ubl9hZGRyLnNp bl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAgCj4gLQkvKnNjdHBfY29ubmVjdHggKCkgVEVTVDY6IEJs b2NraW5nIHNjdHBfY29ubmVjdHgsIHNob3VsZCBwYXNzICovCj4gLQkvKkFsbCB0aGUgYmUgYmVs b3cgYmxvY2tpbmcgc2N0cF9jb25uZWN0eCBzaG91bGQgcGFzcyBhcyBzb2NrZXQgd2lsbCBiZQo+ IC0JICAgbGlzdGVuaW5nIFNLX01BWCBjbGllbnRzICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0tf TUFYOyBpKyspIHsKPiArCS8qc2N0cF9jb25uZWN0eCAoKSBURVNUNjogQmxvY2tpbmcgc2N0cF9j b25uZWN0eCwgc2hvdWxkIHBhc3MqLwo+ICsJLypBbGwgdGhlIGJlIGJlbG93IGJsb2NraW5nIHNj dHBfY29ubmVjdHggc2hvdWxkIHBhc3MgYXMgc29ja2V0IHdpbGwgYmUKPiArCWxpc3RlbmluZyBT S19NQVggY2xpZW50cyovCj4gKwlmb3IgKGkgPSAwIDsgaSA8IFNLX01BWCA7IGkrKykgewo+ICAg CQllcnJvciA9IHNjdHBfY29ubmVjdHgoY2xudF9za1tpXSwgKHN0cnVjdCBzb2NrYWRkciAqKSZj b25uX2FkZHIsCj4gLQkJCQkgICAgICAxKTsKPiArCQkJICAgICAgMSwgTlVMTCk7Cj4gICAJCWlm IChlcnJvciA8IDApCj4gLQkJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAidmFsaWQgYmxvY2tpbmcg c2N0cF9jb25uZWN0eCAiCj4gKwkJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInZhbGlkIGJs b2NraW5nIHNjdHBfY29ubmVjdHggIgo+ICAgCQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiAgIAl9Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInZhbGlkIGJsb2Nr aW5nIHNjdHBfY29ubmVjdHgoKSAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCS8qc2N0cF9jb25uZWN0 eCAoKSBURVNUNzogc2N0cF9jb25uZWN0eCB3aGVuIGFjY2VwdCBxdWV1ZSBpcyBmdWxsLCBFQ09O TlJFRlVTRUQKPiAtCSAgIEV4cGVjdCBlcnJvciAqLwo+IC0JLypOb3cgdGhhdCBhY2NlcHQgcXVl dWUgaXMgZnVsbCwgdGhlIGJlbG93IHNjdHBfY29ubmVjdHggc2hvdWxkIGZhaWwgKi8KPiAtCWVy cm9yID0gc2N0cF9jb25uZWN0eChjbG50Ml9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2Fk ZHIsIDEpOwo+ICsJRXhwZWN0IGVycm9yKi8KPiArCS8qTm93IHRoYXQgYWNjZXB0IHF1ZXVlIGlz IGZ1bGwsIHRoZSBiZWxvdyBzY3RwX2Nvbm5lY3R4IHNob3VsZCBmYWlsKi8KPiArCWVycm9yID0g c2N0cF9jb25uZWN0eChjbG50Ml9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCAx LCBOVUxMKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUNPTk5SRUZVU0VEKQo+ IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2N0cF9jb25uZWN0eCB3aGVuIGFjY2VwdCBxdWV1 ZSBpcyBmdWxsICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNjdHBfY29ubmVjdHggd2hlbiBhY2NlcHQg cXVldWUgaXMgZnVsbCAiCj4gKwkgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQi LCBlcnJvciwgZXJybm8pOwo+ICAgCj4gLQl0c3RfcmVzbShUUEFTUywKPiAtCQkgInNjdHBfY29u bmVjdHgoKSB3aGVuIGFjY2VwdCBxdWV1ZSBpcyBmdWxsIC0gRUNPTk5SRUZVU0VEIik7Cj4gLQo+ IC0JLypDYWxsaW5nIGEgYWNjZXB0IGZpcnN0IHRvIGVzdGJsaXNoIHRoZSBwZW5kaW5nIHNjdHBf Y29ubmVjdHhpb25zICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYOyBpKyspCj4gKwl0c3Rf cmVzbShUUEFTUywgInNjdHBfY29ubmVjdHgoKSB3aGVuIGFjY2VwdCBxdWV1ZSBpcyBmdWxsIC0g RUNPTk5SRUZVU0VEIik7Cj4gKwkKPiArCS8qQ2FsbGluZyBhIGFjY2VwdCBmaXJzdCB0byBlc3Ri bGlzaCB0aGUgcGVuZGluZyBzY3RwX2Nvbm5lY3R4aW9ucyovCj4gKwlmb3IgKGk9MCA7IGkgPCBT S19NQVggOyBpKyspCj4gICAJCWFjcHRfc2tbaV0gPSB0ZXN0X2FjY2VwdChsc3RuX3NrLAo+IC0J CQkJCSAoc3RydWN0IHNvY2thZGRyICopJmFjcHRfYWRkciwgJmxlbik7Cj4gKwkJCQkJIChzdHJ1 Y3Qgc29ja2FkZHIgKikgJmFjcHRfYWRkciwgJmxlbik7Cj4gICAKPiAtCS8qc2N0cF9jb25uZWN0 eCAoKSBURVNUODogZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQsIEVJU0NPTk4gRXhwZWN0IGVycm9y ICovCj4gLQllcnJvciA9IHNjdHBfY29ubmVjdHgobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAq KSZsc3RuX2FkZHIsIDEpOwo+ICsJLypzY3RwX2Nvbm5lY3R4ICgpIFRFU1Q4OiBmcm9tIGEgbGlz dGVuaW5nIHNvY2tldCwgRUlTQ09OTiBFeHBlY3QgZXJyb3IqLwo+ICsJZXJyb3IgPSBzY3RwX2Nv bm5lY3R4KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxzdG5fYWRkciwgMSwgTlVMTCk7 Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVJU0NPTk4pCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJzY3RwX2Nvbm5lY3R4IG9uIGEgbGlzdGVuaW5nIHNvY2tldCAiCj4gLQkJ CSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJzY3RwX2Nvbm5lY3R4IG9uIGEgbGlzdGVuaW5nIHNvY2tldCAiCj4gKwkg ICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAg Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJzY3RwX2Nvbm5lY3R4KCkgb24gYSBsaXN0ZW5pbmcgc29j a2V0IC0gRUlTQ09OTiIpOwo+ICAgCj4gLQkvKnNjdHBfY29ubmVjdHgoKSBURVNUOTogT24gZXN0 YWJsaXNoZWQgc29ja2V0LCBFSVNDT05OIEV4cGVjdCBlcnJvciAqLwo+IC0JaSA9IDA7Cj4gLQll cnJvciA9IHNjdHBfY29ubmVjdHgoYWNwdF9za1tpXSwgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3Ru X2FkZHIsIDEpOwo+ICsJLypzY3RwX2Nvbm5lY3R4KCkgVEVTVDk6IE9uIGVzdGFibGlzaGVkIHNv Y2tldCwgRUlTQ09OTiBFeHBlY3QgZXJyb3IqLwo+ICsJaT0wOwo+ICsJZXJyb3IgPSBzY3RwX2Nv bm5lY3R4KGFjcHRfc2tbaV0sIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxzdG5fYWRkciwgMSwgTlVM TCk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVJU0NPTk4pCj4gLQkJdHN0X2Jy a20oVEJST0ssIE5VTEwsICJzY3RwX2Nvbm5lY3R4IG9uIGFuIGVzdGFibGlzaGVkIHNvY2tldCAi Cj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2Nvbm5lY3R4IG9uIGFuIGVzdGFibGlzaGVkIHNvY2tl dCAiCj4gKwkgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJy bm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzY3RwX2Nvbm5lY3R4KCkgb24gYW4gZXN0 YWJsaXNoZWQgc29ja2V0IC0gRUlTQ09OTiIpOwo+ICAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKSB7Cj4gKwlmb3IgKGkgPSAwIDsgaSA8IDQgOyBpKyspIHsKPiAgIAkJY2xvc2UoY2xudF9z a1tpXSk7Cj4gICAJCWNsb3NlKGFjcHRfc2tbaV0pOwo+IC0JfQo+ICsJfQo+ICAgCj4gICAJLyog c2N0cF9jb25uZWN0eCgpIFRFU1QxMDogUmUtZXN0YWJsaXNoIGFuIGFzc29jaWF0aW9uIHRoYXQg aXMgY2xvc2VkLgo+ICAgCSAqIHNob3VsZCBzdWNjZWVkLgo+ICAgCSAqLwo+IC0JZXJyb3IgPSBz Y3RwX2Nvbm5lY3R4KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIDEpOwo+ICsJ ZXJyb3IgPSBzY3RwX2Nvbm5lY3R4KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIs IDEsIE5VTEwpOwo+ICAgCWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJSZS1lc3RhYmxpc2ggYW4gYXNzb2NpYXRpb24gdGhhdCAiCj4gLQkJCSAiaXMgY2xvc2VkIGVy cm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRz dF9leGl0LCAiUmUtZXN0YWJsaXNoIGFuIGFzc29jaWF0aW9uIHRoYXQgIgo+ICsJCQkJICJpcyBj bG9zZWQgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+IC0JdHN0X3Jl c20oVFBBU1MsCj4gLQkJICJzY3RwX2Nvbm5lY3R4KCkgdG8gcmUtZXN0YWJsaXNoIGEgY2xvc2Vk IGFzc29jaWF0aW9uIC0gIgo+ICsJdHN0X3Jlc20oVFBBU1MsICJzY3RwX2Nvbm5lY3R4KCkgdG8g cmUtZXN0YWJsaXNoIGEgY2xvc2VkIGFzc29jaWF0aW9uIC0gIgo+ICAgCQkgIlNVQ0NFU1MiKTsK PiAgIAo+ICAgCWNsb3NlKHNrKTsKPiAgIAljbG9zZShzazEpOwo+ICAgCWNsb3NlKGxzdG5fc2sp Owo+ICAgCj4gLQl0c3RfZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBh L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9ldmVudHMuYyBi L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9ldmVudHMuYwo+ IGluZGV4IDUxNGIyNWIuLjM1MjUzNDYgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNhc2VzL25ldHdvcmsv c2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX2V2ZW50cy5jCj4gKysrIGIvdGVzdGNhc2VzL25l dHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX2V2ZW50cy5jCj4gQEAgLTEsMTYgKzEs MTYgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFND VFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSGV3bGV0 dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUAo+ICAgICogKEMpIENvcHlyaWdodCBJ Qk0gQ29ycC4gMjAwNAo+ICAgICoKPiAgICAqIFRoaXMgdGVzdCB0ZXN0cyB0aGUgZXZlbnRzIGZv ciAxLTEgc3R5bGUgc29ja2V0cy4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBs ZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlv biBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBs YXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0 aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1w bGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4g ICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuCj4gQEAgLTM3LDkgKzM3LDkgQEAKPiAgICNpbmNsdWRlIDx1bmlzdGQuaD4K PiAgICNpbmNsdWRlIDxzdGRsaWIuaD4KPiAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiAtI2lu Y2x1ZGUgPHN5cy9zb2NrZXQuaD4JCS8qIG5lZWRlZCBieSBsaW51eC9zY3RwLmggKi8KPiArI2lu Y2x1ZGUgPHN5cy9zb2NrZXQuaD4gICAgICAgICAvKiBuZWVkZWQgYnkgbGludXgvc2N0cC5oICov Cj4gICAjaW5jbHVkZSA8c3lzL3Vpby5oPgo+IC0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyog Zm9yIHNvY2thZGRyX2luICovCj4gKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAgICAgLyog Zm9yIHNvY2thZGRyX2luICovCj4gICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAgICNpbmNsdWRlIDxu ZXRpbmV0L3NjdHAuaD4KPiAgICNpbmNsdWRlIDxzY3RwdXRpbC5oPgo+IEBAIC00OSwxMCArNDks MTEgQEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDQ7Cj4gICBp bnQgVFNUX0NOVCA9IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAtCWludCBzdnJf c2ssIGNsdF9zaywgYWNwdF9zazsKPiAtCXN0cnVjdCBzb2NrYWRkcl9pbiBzdnJfbG9vcCwgY2x0 X2xvb3AsIGFjcHRfbG9vcDsKPiArCWludCBzdnJfc2ssIGNsdF9zayxhY3B0X3NrOwo+ICsJc3Ry dWN0IHNvY2thZGRyX2luIHN2cl9sb29wLCBjbHRfbG9vcCxhY3B0X2xvb3A7Cj4gICAJc3RydWN0 IGlvdmVjIGlvdiwgb3V0X2lvdjsKPiAgIAlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZSwgb3V0bWVz c2FnZTsKPiAgIAljaGFyIGluY21zZ1tDTVNHX1NQQUNFKHNpemVvZihzY3RwX2Ntc2dfZGF0YV90 KSldOwo+IEBAIC02NywxMiArNjgsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKPiAgIAl1aW50MzJfdCBwcGlkOwo+ICAgCXVpbnQzMl90IHN0cmVhbTsKPiAgIAo+IC0JLyog UmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ IC0JICogYmUgdW5idWZmZXJlZC4KPiAtCSAqLwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9J T05CRiwgMCk7Cj4gKyAgICAgICAgLyogUmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0 aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ICsJICogYmUgdW5idWZmZXJlZC4KPiArCSAqLwo+ICsJ c2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4gICAKPiAtCS8qIEluaXRpYWxpemUg dGhlIHNlcnZlciBhbmQgY2xpZW50IGFkZHJlc3Nlcy4gKi8KPiArCS8qIEluaXRpYWxpemUgdGhl IHNlcnZlciBhbmQgY2xpZW50IGFkZHJlc3Nlcy4gKi8KPiAgIAlzdnJfbG9vcC5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsKPiAgIAlzdnJfbG9vcC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BC QUNLOwo+ICAgCXN2cl9sb29wLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiBA QCAtODIsOCArODMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWNs dF9sb29wLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+ICAgCS8qIENy ZWF0ZSBhbmQgYmluZCB0aGUgc2VydmVyIHNvY2tldC4gICovCj4gLQlzdnJfc2sgPSB0ZXN0X3Nv Y2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAtCXRlc3RfYmluZChz dnJfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2xvb3AsIHNpemVvZihzdnJfbG9vcCkpOwo+ ICsgICAgICAgIHN2cl9zayA9IHRlc3Rfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBS T1RPX1NDVFApOwo+ICsJdGVzdF9iaW5kKHN2cl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc3Zy X2xvb3AsIHNpemVvZihzdnJfbG9vcCkpOwo+ICAgCj4gICAJLyogTWFyayBzZXJ2ZXIgc29ja2V0 IGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuICAqLwo+ICAgCXRlc3Rf bGlzdGVuKHN2cl9zaywgMyk7Cj4gQEAgLTk5LDEyICsxMDAsMTIgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAl0ZXN0X3NldHNvY2tvcHQoY2x0X3NrLCBTQ1RQX0VWRU5U UywgJmV2ZW50LCBsZW4pOwo+ICAgCj4gICAJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p bik7Cj4gLQl0ZXN0X2Nvbm5lY3QoY2x0X3NrLCAoc3RydWN0IHNvY2thZGRyICopJmNsdF9sb29w LCBsZW4pOwo+IC0KPiAtCWFjcHRfc2sgPSB0ZXN0X2FjY2VwdChzdnJfc2ssIChzdHJ1Y3Qgc29j a2FkZHIgKikmYWNwdF9sb29wLCAmbGVuKTsKPiArCXRlc3RfY29ubmVjdChjbHRfc2ssIChzdHJ1 Y3Qgc29ja2FkZHIgKikgJmNsdF9sb29wLCBsZW4pOwo+ICsJCj4gKwlhY3B0X3NrID0gdGVzdF9h Y2NlcHQoc3ZyX3NrLCAoc3RydWN0IHNvY2thZGRyICopICZhY3B0X2xvb3AsICZsZW4pOwo+ICAg Cj4gICAJLyogQnVpbGQgdXAgYSBtc2doZHIgc3RydWN0dXJlIHdlIGNhbiB1c2UgZm9yIGFsbCBz ZW5kaW5nLiAgKi8KPiAtCW1lbXNldCgmb3V0bWVzc2FnZSwgMCwgc2l6ZW9mKG91dG1lc3NhZ2Up KTsKPiArCW1lbXNldCgmb3V0bWVzc2FnZSwgMCwgc2l6ZW9mKG91dG1lc3NhZ2UpKTsJCj4gICAJ b3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZzdnJfbG9vcDsKPiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1l bGVuID0gc2l6ZW9mKHN2cl9sb29wKTsKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lv djsKPiBAQCAtMTIwLDcgKzEyMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Cj4gICAJb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwo+ICAgCXNp bmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21zZyk7Cj4gICAJbWVt c2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0JcHBp ZCA9IHJhbmQoKTsJCS8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFsdWUuICovCj4gKwlwcGlkID0g cmFuZCgpOyAvKiBDaG9vc2UgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqLwo+ICAgCXN0cmVhbSA9IDE7 Cj4gICAKPiAgIAlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7Cj4gQEAgLTEyOSwxNSArMTMwLDEz IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJb3V0bWVzc2FnZS5tc2df aW92LT5pb3ZfYmFzZSA9IG1lc3NhZ2U7Cj4gICAJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVu ID0gKHN0cmxlbihtZXNzYWdlKSArIDEpOwo+ICAgCj4gLQkvKiBTZW5kIC4gVGhpcyB3aWxsIGNy ZWF0ZSB0aGUgYXNzb2NpYXRpb24gKi8KPiAtCXRlc3Rfc2VuZG1zZyhjbHRfc2ssICZvdXRtZXNz YWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArCS8qIFNlbmQgLiBUaGlzIHdpbGwgY3Jl YXRlIHRoZSBhc3NvY2lhdGlvbiovCj4gKwl0ZXN0X3NlbmRtc2coY2x0X3NrLCAmb3V0bWVzc2Fn ZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICAgCj4gLQltZW1zZXQoJmlubWVzc2FnZSwgMCwg c2l6ZW9mKGlubWVzc2FnZSkpOwo+ICsgICAgICAgIG1lbXNldCgmaW5tZXNzYWdlLCAwLCBzaXpl b2YoaW5tZXNzYWdlKSk7Cj4gICAJLyogTk9XIGluaXRpYWxpemUgaW5tZXNzYWdlIHdpdGggZW5v dWdoIHNwYWNlIGZvciBEQVRBLi4uICovCj4gICAJYmlnX2J1ZmZlciA9IG1hbGxvYyhSRUFMTFlf QklHKTsKPiAtCWlmICghYmlnX2J1ZmZlcikgewo+IC0JCURVTVBfQ09SRTsKPiAtCX0KPiArCWlm ICghYmlnX2J1ZmZlcikgeyBEVU1QX0NPUkU7IH0KPiAgIAo+ICAgCS8qIExldCdzIGRvIGEgdGVz dCB0byBkbyBhIHJlY3Ztc2cgd2hlbiB3ZSBhcmUgbm90IGxpc3RlbmluZyBhbmQKPiAgIAkgKiB3 aGVuIHdlIGhhdmUgbm8gYXNzb2NpYXRpb25zLgo+IEBAIC0xNTEsMzggKzE1MCw0MSBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCj4gICAJZXJyb3IgPSB0ZXN0X3JlY3Zt c2coY2x0X3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2df bm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsCj4gLQkJCQkgICAgZXJyb3IsCj4gLQkJCQkgICAgc2l6 ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NPQ19DSEFO R0UsIFNDVFBfQ09NTV9VUCk7Cj4gLQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlcnJvciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNDVFBfQVNTT0NfQ0hBTkdFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTQ1RQX0NPTU1fVVApOwo+ICsJCj4gICAJdHN0X3Jlc20oVFBBU1MsICJDT01N X1VQIG5vdGlmaWNhdGlvbiBvbiBjbGllbnQgc29ja2V0IC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJ ZXJyb3IgPSB0ZXN0X3JlY3Ztc2coYWNwdF9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLAo+IC0JCQkJICAgIGVy cm9yLAo+IC0JCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJ ICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+IC0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FTU09DX0NIQU5HRSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9DT01NX1VQKTsKPiArCQo+ICAgCXRz dF9yZXNtKFRQQVNTLCAiQ09NTV9VUCBub3RpZmljYXRpb24gb24gc2VydmVyIHNvY2tldCAtIFNV Q0NFU1MiKTsKPiAgIAo+ICAgCWlubWVzc2FnZS5tc2dfY29udHJvbCA9IGluY21zZzsKPiAgIAlp bm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAllcnJvciA9IHRl c3RfcmVjdm1zZyhhY3B0X3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gLQl0ZXN0X2No ZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obWVzc2FnZSkgKyAxLAo+IC0J CQkgICAgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiArICAgICAgICB0ZXN0X2NoZWNrX21zZ19k YXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obWVzc2FnZSkgKyAxLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAgIAo+ICAgCXRzdF9y ZXNtKFRQQVNTLCAiRGF0YSBtZXNzYWdlIG9uIHNlcnZlciBzb2NrZXQgLSBTVUNDRVNTIik7Cj4g ICAKPiAgIAljbG9zZShjbHRfc2spOwo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKGFjcHRfc2ss ICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRp b24oJmlubWVzc2FnZSwKPiAtCQkJCSAgICBlcnJvciwKPiAtCQkJCSAgICBzaXplb2Yoc3RydWN0 IHNjdHBfc2h1dGRvd25fZXZlbnQpLAo+IC0JCQkJICAgIFNDVFBfU0hVVERPV05fRVZFTlQsIDAp Owo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3du X2V2ZW50KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TSFVU RE9XTl9FVkVOVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgIlNIVVRET1dOIG5vdGlmaWNhdGlvbiBvbiBhY2NlcHRl ZCBzb2NrZXQgLSBTVUNDRVNTIik7Cj4gICAJY2xvc2Uoc3ZyX3NrKTsKPiAgIAljbG9zZShhY3B0 X3NrKTsKPiAgIAo+IC0JdHN0X2V4aXQoKTsKPiArCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1n aXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfaW5pdG1z Z19jb25uZWN0LmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3Rv XzFfaW5pdG1zZ19jb25uZWN0LmMKPiBpbmRleCAxMWI2MjlhLi44ZWZiNGY1IDEwMDY0NAo+IC0t LSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9pbml0bXNn X2Nvbm5lY3QuYwo+ICsrKyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0 XzFfdG9fMV9pbml0bXNnX2Nvbm5lY3QuYwo+IEBAIC0xLDE3ICsxLDE3IEBACj4gLS8qIFNDVFAg a2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1l bnRhdGlvbgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAzIEhld2xldHQtUGFja2FyZCBEZXZlbG9w bWVudCBDb21wYW55LCBMLlAKPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDQKPiAg ICAqCj4gICAgKiBXaGVuIGluaXQgdGltZW91dCBpcyBzZXQgdG8gemVybywgYSBjb25uZWN0ICgp IGNyYXNoZWQgdGhlIHN5c3RlbS4gVGhpcyBjYXNlCj4gICAgKiB0ZXN0cyB0aGUgZml4IGZvciB0 aGUgc2FtZS4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBp cyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNv ZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9u Lgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAg KiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu Cj4gQEAgLTQxLDI0ICs0MSwyNSBAQAo+ICAgI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAgI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgo+ICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KPiAtI2luY2x1ZGUg PG5ldGluZXQvaW4uaD4JCS8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICsjaW5jbHVkZSA8bmV0aW5l dC9pbi5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICAgI2luY2x1ZGUgPGFycGEv aW5ldC5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw Lmg+Cj4gICAjaW5jbHVkZSA8c3lzL3Vpby5oPgo+IC0jaW5jbHVkZSA8c2N0cHV0aWwuaD4KPiAr I2luY2x1ZGUgPHNjdHB1dGlsLmg+Cj4gICAKPiAgIGNoYXIgKlRDSUQgPSBfX0ZJTEVfXzsKPiAg IGludCBUU1RfVE9UQUwgPSAxOwo+ICAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gLWludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKPiAraW50Cj4gK21haW4gKGludCBhcmdjLCBjaGFyICoq YXJndikKPiAgIHsKPiAgIAlpbnQgc2sxLCBzazIsIHNrMywgcGZfY2xhc3M7Cj4gICAJc29ja2xl bl90IGxlbjsKPiAgIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gbHN0bl9hZGRyLCBhY3B0X2FkZHI7Cj4g ICAJc3RydWN0IHNvY2thZGRyX2luIGNvbm5fYWRkcjsKPiAtCWNoYXIgKmJ1ZmZlcl9yY3Y7Cj4g KwljaGFyICogYnVmZmVyX3JjdjsKPiAgIAlzdHJ1Y3Qgc2N0cF9pbml0bXNnIHNpbm1zZzsKPiAg IAljaGFyICptZXNzYWdlID0gIkhlbGxvIFdvcmxkIVxuIjsKPiAgIAo+IEBAIC02OCwyMiArNjks MjIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICAgCXNldHZidWYoc3Rkb3V0 LCBOVUxMLCBfSU9OQkYsIDApOwo+ICAgCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDAp Owo+ICAgCj4gLQkvKiBPcGVuaW5nIHRoZSBzb2NrZXQgKi8KPiAtCj4gKwkvKiBPcGVuaW5nIHRo ZSBzb2NrZXQqLwo+ICsJCj4gICAJcGZfY2xhc3MgPSBQRl9JTkVUOwo+ICAgCj4gICAJc2sxID0g dGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCXNr MyA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAg IAo+IC0JY29ubl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JY29ubl9hZGRyLnNpbl9h ZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQljb25uX2FkZHIuc2luX3BvcnQgPSBo dG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGNvbm5fYWRkci5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKPiArICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9M T09QQkFDSzsKPiArICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQ T1JUXzEpOwo+ICAgCj4gLQlsc3RuX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQlsc3Ru X2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWxzdG5fYWRkci5z aW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgbHN0bl9hZGRyLnNp bl9mYW1pbHkgPSBBRl9JTkVUOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIg PSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fcG9ydCA9IGh0b25z KFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCXRlc3RfYmluZChzazMsIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gKwl0ZXN0X2JpbmQoc2szLCAo c3RydWN0IHNvY2thZGRyICopICZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+ ICAgCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKTsKPiAgIAlzaW5tc2cuc2luaXRf bnVtX29zdHJlYW1zID0gNjU1MzU7Cj4gQEAgLTk4LDkgKzk5LDkgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQo+ICAgCXRlc3RfbGlzdGVuKHNrMywgMSk7Cj4gICAKPiAgIAlsZW4g PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKPiAtCXRlc3RfY29ubmVjdChzazEsIChzdHJ1 Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+ICsJdGVzdF9jb25uZWN0KHNrMSwgKHN0 cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBsZW4pOwo+ICAgCj4gLQlzazIgPSB0ZXN0X2Fj Y2VwdChzazMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNwdF9hZGRyLCAmbGVuKTsKPiArCXNrMiA9 IHRlc3RfYWNjZXB0KHNrMywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWNwdF9hZGRyLCAmbGVuKTsK PiAgIAo+ICAgCXRlc3Rfc2N0cF9zZW5kbXNnKHNrMSwgbWVzc2FnZSwgc3RybGVuKG1lc3NhZ2Up ICsgMSwKPiAgIAkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbiwKPiBAQCAt MTExLDkgKzExMiw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAgIAo+ICAg CXRzdF9yZXNtKFRQQVNTLCAiY29ubmVjdCgpIHdpdGggaW5pdCB0aW1lb3V0IHNldCB0byAwIC0g U1VDQ0VTUyIpOwo+ICAgCj4gLQljbG9zZShzazEpOwo+IC0JY2xvc2Uoc2syKTsKPiAtCWNsb3Nl KHNrMyk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gKwljbG9zZSAoc2sxKTsKPiArCWNsb3NlIChzazIp Owo+ICsJY2xvc2UgKHNrMyk7Cj4gKwkKPiArICAgICAgICByZXR1cm4gMDsKPiAgIH0KPiBkaWZm IC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX25v bmJsb2NrLmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFf bm9uYmxvY2suYwo+IGluZGV4IDdiNjZiMjAuLjExNzlmYjEgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNh c2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX25vbmJsb2NrLmMKPiArKysg Yi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfbm9uYmxvY2su Ywo+IEBAIC0xLDI0ICsxLDI0IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1l bnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAgICogQ29weXJpZ2h0 IChjKSAyMDAzIEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAKPiAgICAq IChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDQKPiAgICAqCj4gICAgKiBUaGlzIGZpbGUgaGFz IHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUgTm9uLUJsb2NraW5nIG1vZGUgb2YgY29ubmVjdCgpLAo+ ICAgICogYWNjZXB0KCkgYW5kIHJlY3Ztc2coKSBjYWxscy4KPiAgICAqCj4gLSAqIFRFU1QxOiBO b24gYmxvY2tpbmcgYWNjZXB0IHJldHVybiBFQUdBSU4gaWYgY29ubmVjdCBpcyBub3QgY2FsbGVk Cj4gKyAqIFRFU1QxOiBOb24gYmxvY2tpbmcgYWNjZXB0IHJldHVybiBFQUdBSU4gaWYgY29ubmVj dCBpcyBub3QgY2FsbGVkCj4gICAgKiBURVNUMjogTm9uIGJsb2NraW5nIGNvbm5lY3Qgc2hvdWxk IHJldHVybiBFSU5QUk9HUkVTUwo+ICAgICogVEVTVDM6IGFjY2VwdCgpIHBhc3NlcyB3aGVuIGNv bm5lY3QgY2FsbGVkIGluIE5vbi1ibG9ja2luZyBtb2RlCj4gICAgKiBURVNUNDogTm9uIGJsb2Nr aW5nIHJlY3Ztc2cgc2hvdWxkIHJldHVybiBFQUdBSU4KPiAgICAqIFRFU1Q1OiByZWN2bXNnKCkg c2hvdWxkIHN1Y2NlZWQgaWYgZGF0YSBwcmVzZW50IHRvIHJlY2VpdmUgaW4gbm9uIGJsb2NraW5n Cj4gICAgKgkgIG1vZGUKPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRh dGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBm cmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2 ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50 YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk Cj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCj4gQEAgLTQ4LDcgKzQ4LDcgQEAKPiAgICNpbmNsdWRlIDxzdHJpbmcuaD4KPiAgICNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KPiAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cj4gLSNpbmNs dWRlIDxuZXRpbmV0L2luLmg+CQkvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiArI2luY2x1ZGUgPG5l dGluZXQvaW4uaD4gICAgICAgICAvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiAgICNpbmNsdWRlIDxh cnBhL2luZXQuaD4KPiAgICNpbmNsdWRlIDxlcnJuby5oPgo+ICAgI2luY2x1ZGUgPG5ldGluZXQv c2N0cC5oPgo+IEBAIC02MCwxNTcgKzYwLDE1MCBAQCBjaGFyICpUQ0lEID0gX19GSUxFX187Cj4g ICBpbnQgVFNUX1RPVEFMID0gNTsKPiAgIGludCBUU1RfQ05UID0gMDsKPiAgIAo+IC1pbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICtpbnQKPiArbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+ICAgewo+IC0JaW50IGVycm9yLCBtc2dfY291bnQ7Cj4gKyAgICAgICAgaW50IGVy cm9yLG1zZ19jb3VudDsKPiAgIAlzb2NrbGVuX3QgbGVuOwo+IC0JaW50IHNrLCBwZl9jbGFzcywg bHN0bl9zaywgYWNwdF9zaywgZmxhZywgY2ZsYWcsIHNmbGFnOwo+ICsJaW50IHNrLHBmX2NsYXNz LGxzdG5fc2ssYWNwdF9zayxmbGFnLGNmbGFnLHNmbGFnOwo+ICAgCXN0cnVjdCBtc2doZHIgb3V0 bWVzc2FnZTsKPiAgIAlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiAtCWNoYXIgKm1lc3NhZ2Ug PSAiaGVsbG8sIHdvcmxkIVxuIjsKPiAtCXN0cnVjdCBpb3ZlYyBpb3Y7Cj4gLQlzdHJ1Y3QgaW92 ZWMgaW92X3JjdjsKPiArICAgICAgICBjaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7 Cj4gKyAgICAgICAgc3RydWN0IGlvdmVjIGlvdl9yY3Y7Cj4gICAJc3RydWN0IHNjdHBfc25kcmN2 aW5mbyAqc2luZm87Cj4gLQlpbnQgY291bnQ7Cj4gICAJY2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uo c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKV07Cj4gICAJc3RydWN0IGNtc2doZHIgKmNt c2c7Cj4gLQlzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAtCWNoYXIgKmJ1ZmZlcl9zbmQ7Cj4gLQlj aGFyICpidWZmZXJfcmN2Owo+ICsgICAgICAgIHN0cnVjdCBpb3ZlYyBvdXRfaW92Owo+ICsJY2hh ciAqIGJ1ZmZlcl9yY3Y7Cj4gICAJY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yoc2N0cF9j bXNnX2RhdGFfdCkpXTsKPiAtCj4gLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gY29ubl9hZGRyLCBsc3Ru X2FkZHIsIHN2cl9hZGRyOwo+ICsJCj4gKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGNvbm5f YWRkcixsc3RuX2FkZHIsc3ZyX2FkZHI7Cj4gICAKPiAgIAkvKiBSYXRoZXIgdGhhbiBmZmx1c2go KSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZlcmQK PiAtCSAqLwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4gLQlzZXR2YnVm KHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAgKiBiZSB1bmJ1ZmZlcmQKPiAr ICAgICAgICAgKi8KPiArICAgICAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsK PiArICAgICAgICBzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JcGZf Y2xhc3MgPSBQRl9JTkVUOwo+ICsgICAgICAgIHBmX2NsYXNzID0gUEZfSU5FVDsKPiAgIAo+IC0J c2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4g KyAgICAgICAgc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9f U0NUUCk7Cj4gICAKPiAtCWxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJF QU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2Ns YXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCWNvbm5fYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQ X0xPT1BCQUNLOwo+IC0JY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8x KTsKPiArICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFD SzsKPiArICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEp Owo+ICAgCj4gICAJbHN0bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JbHN0bl9hZGRy LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsc3RuX2FkZHIuc2luX3Bv cnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fYWRk ci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxzdG5fYWRkci5zaW5fcG9y dCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCS8qQmluZGluZyB0aGUgbGlzdGVu IHNvY2tldCAqLwo+IC0JdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbHN0 bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gKwkvKkJpbmRpbmcgdGhlIGxpc3RlbiBzb2Nr ZXQqLwo+ICsgICAgICAgIHRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopICZs c3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+IC0JLypMaXN0ZW5pbmcgdGhlIHNv Y2tldCAqLwo+IC0JdGVzdF9saXN0ZW4obHN0bl9zaywgMTApOwo+ICsgICAgICAgIC8qTGlzdGVu aW5nIHRoZSBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3RfbGlzdGVuKGxzdG5fc2ssIDEwKTsKPiAg IAo+ICAgCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwo+ICAgCWZsYWcgPSBNU0df Tk9TSUdOQUw7Cj4gLQo+IC0JLypTZXR0aW5nIHNlcnZlciBzb2NrZXQgbm9uLWJsb2NraW5nICov Cj4gKwkKPiArCS8qU2V0dGluZyBzZXJ2ZXIgc29ja2V0IG5vbi1ibG9ja2luZyovCj4gICAJc2Zs YWcgPSBmY250bChsc3RuX3NrLCBGX0dFVEZMLCAwKTsKPiAgIAlpZiAoc2ZsYWcgPCAwKQo+IC0J CXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZmNudCBGX0dFVEZMIGZhaWxlZCAiCj4gLQkJCSAic2Zs YWc6JWQsIGVycm5vOiVkIiwgc2ZsYWcsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJmY250IEZfR0VURkwgZmFpbGVkICIKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICJzZmxhZzolZCwgZXJybm86JWQiLCBzZmxhZywgZXJybm8pOwo+ICAgCj4gICAJZXJyb3IgPSBm Y250bChsc3RuX3NrLCBGX1NFVEZMLCBzZmxhZyB8IE9fTk9OQkxPQ0spOwo+ICAgCWlmIChlcnJv ciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJmY250IEZfU0VURkwgZmFpbGVkICIK PiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgImZjbnQgRl9TRVRGTCBmYWlsZWQgIgo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAg IAkvKiBURVNUMTogYWNjZXB0IHNob3VsZCByZXR1cm4gRUFHQUlOIGluc3RlYWQgYmxvY2tpbmcu ICovCj4gICAJZXJyb3IgPSBhY2NlcHQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzdnJf YWRkciwgJmxlbik7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVBR0FJTikKPiAt CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIm5vbi1ibG9ja2luZyBhY2NlcHQgIgo+IC0JCQkgImVy cm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRz dF9leGl0LCAibm9uLWJsb2NraW5nIGFjY2VwdCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNt KFRQQVNTLCAibm9uLWJsb2NraW5nIGFjY2VwdCgpIC0gRUFHQUlOIik7Cj4gICAKPiAgIAkvKiBU RVNUMjogTm9uIEJsb2NrIGNvbm5lY3Qgc2hvdWxkIHJldHVybiBFSU5QUk9HUkVTUyAqLwo+IC0J LypTZXQgY2xpZW50IHNvY2tldCBhcyBub24tYmxvY2tpbmcgKi8KPiArCS8qU2V0IGNsaWVudCBz b2NrZXQgYXMgbm9uLWJsb2NraW5nKi8KPiAgIAljZmxhZyA9IGZjbnRsKHNrLCBGX0dFVEZMLCAw KTsKPiAgIAlpZiAoY2ZsYWcgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZmNudCBG X0dFVEZMIGZhaWxlZCAiCj4gLQkJCSAiY2ZsYWc6JWQsIGVycm5vOiVkIiwgY2ZsYWcsIGVycm5v KTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJmY250IEZfR0VURkwgZmFpbGVkICIK PiArICAgICAgICAgICAgICAgICAgICAgICAgICJjZmxhZzolZCwgZXJybm86JWQiLCBjZmxhZywg ZXJybm8pOwo+ICAgCj4gICAJZXJyb3IgPSBmY250bChzaywgRl9TRVRGTCwgc2ZsYWcgfCBPX05P TkJMT0NLKTsKPiAgIAlpZiAoZXJyb3IgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAi ZmNudCBGX1NFVEZMIGZhaWxlZCAiCj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3Is IGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJmY250IEZfU0VURkwgZmFp bGVkICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBl cnJvciwgZXJybm8pOwo+ICAgCj4gLQllcnJvciA9IGNvbm5lY3Qoc2ssIChjb25zdCBzdHJ1Y3Qg c29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+ICsJZXJyb3IgPSBjb25uZWN0KHNrLCAoY29u c3Qgc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIGxlbik7Cj4gICAJaWYgKGVycm9yICE9 IC0xIHx8IGVycm5vICE9IEVJTlBST0dSRVNTKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAi bm9uLWJsb2NraW5nIGNvbm5lY3QgIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9y LCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAibm9uLWJsb2NraW5nIGNv bm5lY3QgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIs IGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgIm5vbi1ibG9ja2luZyBj b25uZWN0KCkgLSBFSU5QUk9HUkVTUyIpOwo+ICAgCj4gICAJLyogVEVTVDM6IE5vdyB0aGF0IGNv bm5lY3QoKSBjYWxsZWQsIGFjY2VwdCB3aWxsIHN1Y2NlZWQgKi8KPiAgIAlhY3B0X3NrID0gYWNj ZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ICAgCWlm IChhY3B0X3NrIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImFjY2VwdCBhZnRlciBh IG5vbi1ibG9ja2luZyBjb25uZWN0ICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJv ciwgZXJybm8pOwo+IC0KPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJhY2NlcHQgYWZ0 ZXIgYSBub24tYmxvY2tpbmcgY29ubmVjdCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAi ZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQo+ICAgCXRzdF9yZXNtKFRQ QVNTLCAiYWNjZXB0KCkgYWZ0ZXIgYSBub24tYmxvY2tpbmcgY29ubmVjdCAtIFNVQ0NFU1MiKTsK PiAgIAo+ICAgCW1lbXNldCgmb3V0bWVzc2FnZSwgMCwgc2l6ZW9mKG91dG1lc3NhZ2UpKTsKPiAt CWJ1ZmZlcl9zbmQgPSBtYWxsb2MoUkVBTExZX0JJRyk7Cj4gLQo+IC0Jb3V0bWVzc2FnZS5tc2df bmFtZSA9ICZzdnJfYWRkcjsKPiAtCW91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2Yoc3Zy X2FkZHIpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gLQlvdXRtZXNzYWdl Lm1zZ19pb3ZsZW4gPSAxOwo+IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbCA9IG91dGNtc2c7Cj4g LQlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKG91dGNtc2cpOwo+IC0Jb3V0bWVz c2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWUgPSAmc3Zy X2FkZHI7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihzdnJfYWRk cik7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gKyAgICAgICAg b3V0bWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250 cm9sID0gb3V0Y21zZzsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6 ZW9mKG91dGNtc2cpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKPiAgIAo+ ICAgCWNtc2cgPSBDTVNHX0ZJUlNUSERSKCZvdXRtZXNzYWdlKTsKPiAtCWNtc2ctPmNtc2dfbGV2 ZWwgPSBJUFBST1RPX1NDVFA7Cj4gLQljbXNnLT5jbXNnX3R5cGUgPSBTQ1RQX1NORFJDVjsKPiAt CWNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8p KTsKPiAtCW91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsKPiArICAg ICAgICBjbXNnLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwo+ICsgICAgICAgIGNtc2ctPmNt c2dfdHlwZSA9IFNDVFBfU05EUkNWOwo+ICsgICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01TR19M RU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiArICAgICAgICBvdXRtZXNzYWdl Lm1zZ19jb250cm9sbGVuID0gY21zZy0+Y21zZ19sZW47Cj4gICAJc2luZm8gPSAoc3RydWN0IHNj dHBfc25kcmN2aW5mbyAqKUNNU0dfREFUQShjbXNnKTsKPiAtCW1lbXNldChzaW5mbywgMHgwMCwg c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiAtCj4gLQlpb3YuaW92X2Jhc2UgPSBi dWZmZXJfc25kOwo+IC0JaW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+IC0Jb3V0bWVzc2FnZS5t c2dfaW92LT5pb3ZfYmFzZSA9IG1lc3NhZ2U7Cj4gKyAgICAgICAgbWVtc2V0KHNpbmZvLCAweDAw LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ICAgCj4gLQlvdXRtZXNzYWdlLm1z Z19pb3YtPmlvdl9sZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+ICsgICAgICAgIG91dG1lc3Nh Z2UubXNnX2lvdi0+aW92X2Jhc2UgPSBtZXNzYWdlOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNn X2lvdi0+aW92X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gICAKPiAgIAltZW1zZXQoJmlu bWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+IC0JYnVmZmVyX3JjdiA9IG1hbGxvYyhS RUFMTFlfQklHKTsKPiArICAgICAgICBidWZmZXJfcmN2ID0gbWFsbG9jKFJFQUxMWV9CSUcpOwo+ ICAgCj4gLQlpb3ZfcmN2Lmlvdl9iYXNlID0gYnVmZmVyX3JjdjsKPiAtCWlvdl9yY3YuaW92X2xl biA9IFJFQUxMWV9CSUc7Cj4gLQlpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3ZfcmN2Owo+IC0JaW5t ZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNn Owo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAg ICAgaW92X3Jjdi5pb3ZfYmFzZSA9IGJ1ZmZlcl9yY3Y7Cj4gKyAgICAgICAgaW92X3Jjdi5pb3Zf bGVuID0gUkVBTExZX0JJRzsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3ZfcmN2 Owo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBpbm1lc3Nh Z2UubXNnX2NvbnRyb2wgPSBpbmNtc2c7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9s bGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAKPiAgIAltc2dfY291bnQgPSBzdHJsZW4obWVzc2Fn ZSkgKyAxOwo+ICAgCj4gICAJLyogVEVTVDQ6IHJlY3Ztc2coKSBzaG91bGQgcmV0dXJuIEVBR0FJ TiBpbnN0ZWFkIGJsb2NraW5nICovCj4gICAJZXJyb3IgPSByZWN2bXNnKHNrLCAmaW5tZXNzYWdl LCBNU0dfV0FJVEFMTCk7Cj4gLQlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUFHQUlOKQo+ IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAibm9uLWJsb2NraW5nIHJlY3Ztc2cgIgo+IC0JCQkg ImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwlpZiAoIGVycm9yICE9IC0x IHx8IGVycm5vICE9IEVBR0FJTikKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJub24t YmxvY2tpbmcgcmVjdm1zZyAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQs IGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAibm9u LWJsb2NraW5nIHJlY3Ztc2coKSAtIEVBR0FJTiIpOwo+ICAgCj4gLQljb3VudCA9IHRlc3Rfc2Vu ZG1zZyhhY3B0X3NrLCAmb3V0bWVzc2FnZSwgZmxhZywgbXNnX2NvdW50KTsKPiArCXRlc3Rfc2Vu ZG1zZyhhY3B0X3NrLCAmb3V0bWVzc2FnZSwgZmxhZywgbXNnX2NvdW50KTsKPiAgIAo+ICAgCS8q IFRFU1Q1OiByZWN2bXNnKCkgc2hvdWxkIHN1Y2NlZWQgbm93IGFzIGRhdGEgaXMgYXZhaWxhYmxl LiAqLwo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrLCAmaW5tZXNzYWdlLCBmbGFnKTsKPiAt CXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIG1zZ19jb3VudCwgTVNHX0VP UiwgMCwgMCk7Cj4gKyAgICAgICAgdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJv ciwgbXNnX2NvdW50LCBNU0dfRU9SLCAwLCAwKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi bm9uLWJsb2NraW5nIHJlY3Ztc2coKSB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIC0gIgo+ICAgCQkg IlNVQ0NFU1MiKTsKPiAgIAo+ICAgCWNsb3NlKGxzdG5fc2spOwo+ICAgCWNsb3NlKGFjcHRfc2sp Owo+IC0JdHN0X2V4aXQoKTsKPiArCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcmVjdmZyb20uYyBiL3Rl c3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9yZWN2ZnJvbS5jCj4g aW5kZXggNjU4NjkyYi4uYTRiZGY2YSAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9z Y3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcmVjdmZyb20uYwo+ICsrKyBiL3Rlc3RjYXNlcy9u ZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9yZWN2ZnJvbS5jCj4gQEAgLTEsNCAr MSw0IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBT Q1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAzIEhld2xl dHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAKPiAgICAqIChDKSBDb3B5cmlnaHQg SUJNIENvcnAuIDIwMDQKPiAgICAqCj4gQEAgLTEyLDEzICsxMiwxMyBAQAo+ICAgICogVEVTVDY6 IFJlYWRpbmcgdGhlIHBlbmRpbmcgbWVzc2FnZSBvbiBzb2NrZXQgdGhhdCByZWNlaXZlZCBTSFVU RE9XTgo+ICAgICogVEVTVDc6IE5vIG1vcmUgbWVzc2FnZSBhbmQgYXNzb2NpYXRpb24gaXMgc2h1 dGRvd24KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBm cmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3 YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAg ICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4g QEAgLTQ4LDcgKzQ4LDcgQEAKPiAgICNpbmNsdWRlIDxzdHJpbmcuaD4KPiAgICNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KPiAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cj4gLSNpbmNsdWRlIDxuZXRp bmV0L2luLmg+CQkvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiArI2luY2x1ZGUgPG5ldGluZXQvaW4u aD4gICAgICAgICAvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiAgICNpbmNsdWRlIDxhcnBhL2luZXQu aD4KPiAgICNpbmNsdWRlIDxlcnJuby5oPgo+ICAgI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgo+ IEBAIC02MCwxMTMgKzYwLDExNCBAQCBjaGFyICpUQ0lEID0gX19GSUxFX187Cj4gICBpbnQgVFNU X1RPVEFMID0gNzsKPiAgIGludCBUU1RfQ05UID0gMDsKPiAgIAo+IC1pbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQo+ICtpbnQKPiArbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ ICAgewo+IC0JaW50IHJldCwgbXNnX2NvdW50Owo+ICsgICAgICAgIGludCBtc2dfY291bnQ7Cj4g ICAJc29ja2xlbl90IGxlbjsKPiAtCWludCBzaywgcGZfY2xhc3MsIGxzdG5fc2ssIGFjcHRfc2ss IGZsYWc7Cj4gLQljaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4gKwlpbnQgc2ss cGZfY2xhc3MsbHN0bl9zayxhY3B0X3NrLCBmbGFnOwo+ICsgICAgICAgIGNoYXIgKm1lc3NhZ2Ug PSAiaGVsbG8sIHdvcmxkIVxuIjsKPiAgIAljaGFyICptZXNzYWdlX3JjdjsKPiAtCWludCBjb3Vu dDsKPiArICAgICAgICBpbnQgY291bnQ7Cj4gICAKPiAtCXN0cnVjdCBzb2NrYWRkcl9pbiBjb25u X2FkZHIsIGxzdG5fYWRkciwgc3ZyX2FkZHI7Cj4gKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2lu IGNvbm5fYWRkcixsc3RuX2FkZHIsc3ZyX2FkZHI7Cj4gICAKPiAgIAkvKiBSYXRoZXIgdGhhbiBm Zmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1 ZmZlcmVkLgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAt CXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgICAqIGJlIHVuYnVm ZmVyZWQuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9J T05CRiwgMCk7Cj4gKyAgICAgICAgc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgMCk7Cj4g ICAKPiAgIAltZXNzYWdlX3JjdiA9IG1hbGxvYyg1MTIpOwo+ICAgCj4gLQlwZl9jbGFzcyA9IFBG X0lORVQ7Cj4gKyAgICAgICAgcGZfY2xhc3MgPSBQRl9JTkVUOwo+ICAgCj4gLQlzayA9IHRlc3Rf c29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBz ayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAg IAo+IC0JbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9U T19TQ1RQKTsKPiArICAgICAgICBsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tf U1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJY29ubl9hZGRyLnNpbl9mYW1pbHkgPSBB Rl9JTkVUOwo+IC0JY29ubl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7 Cj4gLQljb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAg ICAgIGNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAg ICAgIGNvbm5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAg IAlsc3RuX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQlsc3RuX2FkZHIuc2luX2FkZHIu c19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWxzdG5fYWRkci5zaW5fcG9ydCA9IGh0b25z KFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgbHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9 IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMo U0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JLypCaW5kaW5nIHRoZSBsaXN0ZW4gc29ja2V0ICov Cj4gLQl0ZXN0X2JpbmQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3RuX2FkZHIsIHNp emVvZihsc3RuX2FkZHIpKTsKPiArCS8qQmluZGluZyB0aGUgbGlzdGVuIHNvY2tldCovCj4gKyAg ICAgICAgdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxzdG5fYWRkciwg c2l6ZW9mKGxzdG5fYWRkcikpOwo+ICAgCj4gLQkvKkxpc3RlbmluZyB0aGUgc29ja2V0ICovCj4g LQl0ZXN0X2xpc3Rlbihsc3RuX3NrLCAxMCk7Cj4gKyAgICAgICAgLypMaXN0ZW5pbmcgdGhlIHNv Y2tldCovCj4gKyAgICAgICAgdGVzdF9saXN0ZW4obHN0bl9zaywgMTApOwo+ICAgCj4gICAJbGVu ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cj4gLQo+IC0JdGVzdF9jb25uZWN0KHNrLCAo c3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsKPiArCQo+ICsJdGVzdF9jb25uZWN0 KHNrLCAoc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIGxlbik7Cj4gICAKPiAgIAlhY3B0 X3NrID0gdGVzdF9hY2NlcHQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzdnJfYWRkciwg Jmxlbik7Cj4gLQo+ICsJCj4gICAJbXNnX2NvdW50ID0gKHN0cmxlbihtZXNzYWdlKSArIDEpOwo+ ICAgCj4gICAJZmxhZyA9IE1TR19OT1NJR05BTDsKPiAtCS8qU2VuZGluZyB0aGUgbWVzc2FnZSAq Lwo+ICsJLypTZW5kaW5nIHRoZSBtZXNzYWdlKi8KPiAgIAljb3VudCA9IHRlc3Rfc2VuZChzaywg bWVzc2FnZSwgbXNnX2NvdW50LCBmbGFnKTsKPiAgIAo+IC0JLypyZWN2ZnJvbSAoKSBURVNUMTog QmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypyZWN2 ZnJvbSAoKSBURVNUMTogQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJv ciovCj4gICAJY291bnQgPSByZWN2ZnJvbSgtMSwgbWVzc2FnZV9yY3YsIG1zZ19jb3VudCwgZmxh ZywKPiAgIAkJCSAoc3RydWN0IHNvY2thZGRyICopJnN2cl9hZGRyLCAmbGVuKTsKPiAgIAlpZiAo Y291bnQgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJyZWN2ZnJvbSB3aXRoIGEgYmFkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9l eGl0LCAicmVjdmZyb20gd2l0aCBhIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJkZXNjcmlwdG9yIGNv dW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFT UywgInJlY3Zmcm9tKCkgd2l0aCBhIGJhZCBzb2NrZXQgZGVzY3JpcHRvciAtIEVCQURGIik7Cj4g ICAKPiAtCS8qcmVjdmZyb20gKCkgVEVTVDI6IEludmFsaWQgc29ja2V0ICwgRU5PVFNPQ0sgRXhw ZWN0ZWQgZXJyb3IgKi8KPiArCS8qcmVjdmZyb20gKCkgVEVTVDI6IEludmFsaWQgc29ja2V0ICwg RU5PVFNPQ0sgRXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWNvdW50ID0gcmVjdmZyb20oMCwgbWVzc2Fn ZV9yY3YsIG1zZ19jb3VudCwgZmxhZywKPiAgIAkJCSAoc3RydWN0IHNvY2thZGRyICopJnN2cl9h ZGRyLCAmbGVuKTsKPiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4g LQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2ZnJvbSB3aXRoIGludmFsaWQgc29ja2V0ICIK PiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2ZnJvbSB3aXRoIGludmFsaWQgc29j a2V0ICIKPiAgIAkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ ICAgCXRzdF9yZXNtKFRQQVNTLCAicmVjdmZyb20oKSB3aXRoIGludmFsaWQgc29ja2V0IC0gRU5P VFNPQ0siKTsKPiAgIAo+IC0JLypyZWN2ZnJvbSAoKSBURVNUMzogSW52YWxpZCBtZXNzYWdlIHBv aW50ZXIgRUZBVUxULCBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypyZWN2ZnJvbSAoKSBURVNUMzog SW52YWxpZCBtZXNzYWdlIHBvaW50ZXIgRUZBVUxULCBFeHBlY3RlZCBlcnJvciovCj4gICAJY291 bnQgPSByZWN2ZnJvbShhY3B0X3NrLCAoY2hhciAqKS0xLCBtc2dfY291bnQsIGZsYWcsCj4gICAJ CQkgKHN0cnVjdCBzb2NrYWRkciAqKSZzdnJfYWRkciwgJmxlbik7Cj4gICAJaWYgKGNvdW50ICE9 IC0xIHx8IGVycm5vICE9IEVGQVVMVCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Zm cm9tIHdpdGggaW52YWxpZCBtZXNzYWdlICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJyZWN2ZnJvbSB3aXRoIGludmFsaWQgbWVzc2FnZSAiCj4gICAJCQkgInBvaW50ZXIgY291bnQ6 JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi cmVjdmZyb20oKSB3aXRoIGludmFsaWQgbWVzc2FnZSBwdHIgLSBFRkFVTFQiKTsKPiAgIAo+IC0J LypURVNUNDogcmVjdmZyb20gb24gbGlzdGVuaW5nIHNvY2tldCxFTk9UQ09OTiBFeHBlY3RlZCBl cnJvciAqLwo+ICsJLypURVNUNDogcmVjdmZyb20gb24gbGlzdGVuaW5nIHNvY2tldCxFTk9UQ09O TiBFeHBlY3RlZCBlcnJvciovCj4gICAJY291bnQgPSByZWN2ZnJvbShsc3RuX3NrLCBtZXNzYWdl X3JjdiwgbXNnX2NvdW50LCBmbGFnLAo+ICAgCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2Fk ZHIsICZsZW4pOwo+ICAgCWlmIChjb3VudCAhPSAtMSB8fCBlcnJubyAhPSBFTk9UQ09OTikKPiAt CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Zmcm9tIG9uIGxpc3RlbmluZyBzb2NrZXQgIgo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInJlY3Zmcm9tIG9uIGxpc3RlbmluZyBzb2Nr ZXQgIgo+ICAgCQkJICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4g ICAJdHN0X3Jlc20oVFBBU1MsICJyZWN2ZnJvbSgpIG9uIGxpc3RlbmluZyBzb2NrZXQgLSBFTk9U Q09OTiIpOwo+ICAgCj4gICAJY291bnQgPSB0ZXN0X3NlbmQoYWNwdF9zaywgbWVzc2FnZSwgbXNn X2NvdW50LCBmbGFnKTsKPiAgIAo+IC0JcmV0ID0gdGVzdF9zaHV0ZG93bihzaywgU0hVVF9XUik7 Cj4gKwl0ZXN0X3NodXRkb3duKHNrLCBTSFVUX1dSKTsKPiAgIAo+IC0JLypyZWN2ZnJvbSAoKSBU RVNUNTpyZWFkaW5nIG9uIGEgc29ja2V0IHRoYXQgcmVjZWl2ZWQgU0hVVERPV04gKi8KPiArCS8q cmVjdmZyb20gKCkgVEVTVDU6cmVhZGluZyBvbiBhIHNvY2tldCB0aGF0IHJlY2VpdmVkIFNIVVRE T1dOKi8KPiAgIAljb3VudCA9IHJlY3Zmcm9tKGFjcHRfc2ssIG1lc3NhZ2VfcmN2LCBtc2dfY291 bnQsIGZsYWcsCj4gICAJCQkgKHN0cnVjdCBzb2NrYWRkciAqKSZzdnJfYWRkciwgJmxlbik7Cj4g ICAJaWYgKGNvdW50IDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Zmcm9tIG9u IGEgc29ja2V0IHRoYXQgaGFzICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2 ZnJvbSBvbiBhIHNvY2tldCB0aGF0IGhhcyAiCj4gICAJCQkgInJlY2VpdmVkIHNodXRkb3duIGNv dW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFT UywgInJlY3Zmcm9tKCkgb24gYSBzb2NrZXQgdGhhdCBoYXMgcmVjZWl2ZWQgc2h1dGRvd24gLSAi Cj4gICAJCSAiRU9GIik7Cj4gICAKPiAtCS8qcmVjdmZyb20gKCkgVEVTVDY6cmVhZGluZyB0aGUg cGVuZGluZyBtZXNzYWdlIG9uIHNvY2tldCB0aGF0IHNlbnQKPiAtCSAgIFNIVVRET1dOICovCj4g KwkvKnJlY3Zmcm9tICgpIFRFU1Q2OnJlYWRpbmcgdGhlIHBlbmRpbmcgbWVzc2FnZSBvbiBzb2Nr ZXQgdGhhdCBzZW50Cj4gKwlTSFVURE9XTiovCj4gICAJY291bnQgPSByZWN2ZnJvbShzaywgbWVz c2FnZV9yY3YsIG1zZ19jb3VudCwgZmxhZywKPiAgIAkJCSAoc3RydWN0IHNvY2thZGRyICopJnN2 cl9hZGRyLCAmbGVuKTsKPiAgIAlpZiAoY291bnQgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAicmVjdmZyb20gb24gYSBzb2NrZXQgd2l0aCBwZW5kaW5nICIKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJyZWN2ZnJvbSBvbiBhIHNvY2tldCB3aXRoIHBlbmRpbmcgIgo+ICAg CQkJICJtZXNzYWdlIHRoYXQgaGFzIHNlbnQgc2h1dGRvd24gY291bnQ6JWQsIGVycm5vOiVkIiwK PiAgIAkJCSBjb3VudCwgZXJybm8pOwo+ICAgCj4gQEAgLTE3NCwxMSArMTc1LDExIEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJCSAic2VudCBzaHV0ZG93biAtIFNVQ0NF U1MiKTsKPiAgIAo+ICAgCS8qcmVjdmZyb20gKCkgVEVTVDc6IE5vIG1vcmUgbWVzc2FnZSBhbmQg YXNzb2NpYXRpb24gaXMgc2h1dGRvd24sCj4gLQkgICBFTk9UQ09OTiBFeHBlY3RlZCBlcnJvciAq Lwo+ICsJRU5PVENPTk4gRXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWNvdW50ID0gcmVjdmZyb20oc2ss IG1lc3NhZ2VfcmN2LCBtc2dfY291bnQsIGZsYWcsCj4gICAJCQkgKHN0cnVjdCBzb2NrYWRkciAq KSZzdnJfYWRkciwgJmxlbik7Cj4gICAJaWYgKGNvdW50ICE9IC0xIHx8IGVycm5vICE9IEVOT1RD T05OKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAicmVjdmZyb20gb24gYSBzb2NrZXQgd2l0 aCBubyAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdmZyb20gb24gYSBzb2Nr ZXQgd2l0aCBubyAiCj4gICAJCQkgInBlbmRpbmcgbWVzc2FnZXMgYW5kIGhhcyBzZW50IHNodXRk b3duIGNvdW50OiVkLCAiCj4gICAJCQkgImVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ IEBAIC0xODgsNiArMTg5LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAg IAljbG9zZShzayk7Cj4gICAJY2xvc2UobHN0bl9zayk7Cj4gICAJY2xvc2UoYWNwdF9zayk7Cj4g LQl0c3RfZXhpdCgpOwo+IC0KPiArCXJldHVybiAwOwo+ICsJCj4gICB9Cj4gZGlmZiAtLWdpdCBh L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9yZWN2bXNnLmMg Yi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcmVjdm1zZy5j Cj4gaW5kZXggYTQwYjE2ZC4uY2VjY2MzMSAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29y ay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcmVjdm1zZy5jCj4gKysrIGIvdGVzdGNhc2Vz L25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3JlY3Ztc2cuYwo+IEBAIC0xLDQg KzEsNCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyog U0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMyBIZXds ZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAgKiAoQykgQ29weXJpZ2h0 IElCTSBDb3JwLiAyMDA0Cj4gICAgKgo+IEBAIC0xMywxMyArMTMsMTMgQEAKPiAgICAqIFRFU1Q3 OiBSZWFkaW5nIHRoZSBwZW5kaW5nIG1lc3NhZ2Ugc29ja2V0IHRoYXQgcmVjZWl2ZWQgU0hVVERP V04KPiAgICAqIFRFU1Q4OiBObyBtb3JlIG1lc3NhZ2UgYW5kIGFzc29jaWF0aW9uIGlzIHNodXRk b3duCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJl ZSBzb2Z0d2FyZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2Fy ZTsKPiAgICAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAg ICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAg ICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBA IC00OSw3ICs0OSw3IEBACj4gICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8c3lz L3R5cGVzLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgo+IC0jaW5jbHVkZSA8bmV0aW5l dC9pbi5oPgkJLyogZm9yIHNvY2thZGRyX2luICovCj4gKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ ICAgICAgICAgLyogZm9yIHNvY2thZGRyX2luICovCj4gICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ Cj4gICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAgICNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KPiBA QCAtNjEsMTI2ICs2MSwxMjYgQEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9U T1RBTCA9IDg7Cj4gICBpbnQgVFNUX0NOVCA9IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKPiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAg IHsKPiAtCXNvY2tsZW5fdCBsZW47Cj4gLQlpbnQgcmV0Owo+IC0JaW50IHNrLCBwZl9jbGFzcywg bHN0bl9zaywgYWNwdF9zazsKPiArICAgICAgICBzb2NrbGVuX3QgbGVuOwo+ICsJaW50IHNrLHBm X2NsYXNzLGxzdG5fc2ssYWNwdF9zazsKPiAgIAlpbnQgZmxhZyA9IDA7Cj4gICAJc3RydWN0IG1z Z2hkciBpbm1lc3NhZ2U7Cj4gLQljaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4g KyAgICAgICAgY2hhciAqbWVzc2FnZSA9ICJoZWxsbywgd29ybGQhXG4iOwo+ICAgCXN0cnVjdCBp b3ZlYyBpb3ZfcmN2Owo+IC0JaW50IGNvdW50Owo+IC0JY2hhciAqYnVmZmVyX3JjdjsKPiAtCWNo YXIgaW5jbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHNjdHBfY21zZ19kYXRhX3QpKV07Cj4gKyAgICAg ICAgaW50IGNvdW50Owo+ICsJY2hhciAqIGJ1ZmZlcl9yY3Y7Cj4gKyAgICAgICAgY2hhciBpbmNt c2dbQ01TR19TUEFDRShzaXplb2Yoc2N0cF9jbXNnX2RhdGFfdCkpXTsKPiAgIAljaGFyICptZXNz YWdlMSA9ICJoZWxsbywgd29ybGQhXG4iOwo+ICAgCj4gLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gY29u bl9hZGRyLCBsc3RuX2FkZHIsIHN2cl9hZGRyOwo+ICsgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9p biBjb25uX2FkZHIsbHN0bl9hZGRyLHN2cl9hZGRyOwo+ICAgCj4gICAJLyogUmF0aGVyIHRoYW4g ZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IC0JICogYmUgdW5i dWZmZXJlZC4KPiAtCSAqLwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4g LQlzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAgKiBiZSB1bmJ1 ZmZlcmVkLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBf SU9OQkYsIDApOwo+ICsgICAgICAgIHNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ ICAgCj4gLQlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gKyAgICAgICAgcGZfY2xhc3MgPSBQRl9JTkVU Owo+ICAgCj4gLQlzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9U T19TQ1RQKTsKPiArICAgICAgICBzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVB TSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+IC0JbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNz LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBsc3RuX3NrID0gdGVzdF9z b2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJY29u bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JY29ubl9hZGRyLnNpbl9hZGRyLnNfYWRk ciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQljb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQ X1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQ X0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGNvbm5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBf VEVTVFBPUlRfMSk7Cj4gICAKPiAgIAlsc3RuX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4g LQlsc3RuX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWxzdG5f YWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgbHN0bl9h ZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgbHN0bl9h ZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JLypCaW5kaW5n IHRoZSBsaXN0ZW4gc29ja2V0ICovCj4gLQl0ZXN0X2JpbmQobHN0bl9zaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiArCS8qQmluZGluZyB0aGUg bGlzdGVuIHNvY2tldCovCj4gKyAgICAgICAgdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29j a2FkZHIgKikgJmxzdG5fYWRkciwgc2l6ZW9mKGxzdG5fYWRkcikpOwo+ICAgCj4gLQkvKkxpc3Rl bmluZyB0aGUgc29ja2V0ICovCj4gLQl0ZXN0X2xpc3Rlbihsc3RuX3NrLCAxMCk7Cj4gKyAgICAg ICAgLypMaXN0ZW5pbmcgdGhlIHNvY2tldCovCj4gKyAgICAgICAgdGVzdF9saXN0ZW4obHN0bl9z aywgMTApOwo+ICAgCj4gICAJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cj4gLQo+ IC0JdGVzdF9jb25uZWN0KHNrLCAoc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsK PiArCQo+ICsJdGVzdF9jb25uZWN0KHNrLCAoc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIs IGxlbik7Cj4gICAKPiAgIAlhY3B0X3NrID0gdGVzdF9hY2NlcHQobHN0bl9zaywgKHN0cnVjdCBz b2NrYWRkciAqKSZzdnJfYWRkciwgJmxlbik7Cj4gICAKPiAgIAltZW1zZXQoJmlubWVzc2FnZSwg MCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+IC0JYnVmZmVyX3JjdiA9IG1hbGxvYyhSRUFMTFlfQklH KTsKPiArICAgICAgICBidWZmZXJfcmN2ID0gbWFsbG9jKFJFQUxMWV9CSUcpOwo+ICAgCj4gLQlp b3ZfcmN2Lmlvdl9iYXNlID0gYnVmZmVyX3JjdjsKPiAtCWlvdl9yY3YuaW92X2xlbiA9IFJFQUxM WV9CSUc7Cj4gLQlpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3ZfcmN2Owo+IC0JaW5tZXNzYWdlLm1z Z19pb3ZsZW4gPSAxOwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+IC0JaW5t ZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgaW92X3Jj di5pb3ZfYmFzZSA9IGJ1ZmZlcl9yY3Y7Cj4gKyAgICAgICAgaW92X3Jjdi5pb3ZfbGVuID0gUkVB TExZX0JJRzsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3ZfcmN2Owo+ICsgICAg ICAgIGlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2Nv bnRyb2wgPSBpbmNtc2c7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6 ZW9mKGluY21zZyk7Cj4gICAKPiAtCS8qcmVjdm1zZyAoKSBURVNUMTogQmFkIHNvY2tldCBkZXNj cmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypyZWN2bXNnICgpIFRFU1QxOiBC YWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIEV4cGVjdGVkIGVycm9yKi8KPiAgIAljb3VudCA9 IHJlY3Ztc2coLTEsICZpbm1lc3NhZ2UsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAhPSAtMSB8fCBl cnJubyAhPSBFQkFERikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ztc2cgd2l0aCBh IGJhZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInJlY3Ztc2cgd2l0 aCBhIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJkZXNjcmlwdG9yIGNvdW50OiVkLCBlcnJubzolZCIs IGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInJlY3Ztc2coKSB3aXRo IGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIC0gRUJBREYiKTsKPiAgIAo+IC0JLypyZWN2bXNnICgp IFRFU1QyOiBJbnZhbGlkIHNvY2tldCAsIEVOT1RTT0NLIEV4cGVjdGVkIGVycm9yICovCj4gKwkv KnJlY3Ztc2cgKCkgVEVTVDI6IEludmFsaWQgc29ja2V0ICwgRU5PVFNPQ0sgRXhwZWN0ZWQgZXJy b3IqLwo+ICAgCWNvdW50ID0gcmVjdm1zZygwLCAmaW5tZXNzYWdlLCBmbGFnKTsKPiAgIAlpZiAo Y291bnQgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4gLQkJdHN0X2Jya20oVEJST0ssIE5V TEwsICJyZWN2bXNnIHdpdGggaW52YWxpZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0 c3RfZXhpdCwgInJlY3Ztc2cgd2l0aCBpbnZhbGlkIHNvY2tldCAiCj4gICAJCQkgImNvdW50OiVk LCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInJl Y3Ztc2coKSB3aXRoIGludmFsaWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAgIAo+IC0JLypyZWN2 bXNnICgpIFRFU1QzOiBJbnZhbGlkIGlvdmVjIHBvaW50ZXIgRUZBVUxULCBFeHBlY3RlZCBlcnJv ciAqLwo+ICsJLypyZWN2bXNnICgpIFRFU1QzOiBJbnZhbGlkIGlvdmVjIHBvaW50ZXIgRUZBVUxU LCBFeHBlY3RlZCBlcnJvciovCj4gICAJaW5tZXNzYWdlLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVj ICopLTE7Cj4gICAJY291bnQgPSByZWN2bXNnKGFjcHRfc2ssICZpbm1lc3NhZ2UsIGZsYWcpOwo+ ICAgCWlmIChjb3VudCAhPSAtMSB8fCBlcnJubyAhPSBFRkFVTFQpCj4gLQkJdHN0X2Jya20oVEJS T0ssIE5VTEwsICJyZWN2bXNnIHdpdGggaW52YWxpZCBpb3ZlYyAiCj4gKwkJdHN0X2Jya20oVEJS T0ssIHRzdF9leGl0LCAicmVjdm1zZyB3aXRoIGludmFsaWQgaW92ZWMgIgo+ICAgCQkJICJwb2lu dGVyIGNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVz bShUUEFTUywgInJlY3Ztc2coKSB3aXRoIGludmFsaWQgaW92ZWMgcHRyIC0gRUZBVUxUIik7Cj4g LQo+ICsJCj4gICAJaW5tZXNzYWdlLm1zZ19pb3YgPSAmaW92X3JjdjsKPiAgIAo+IC0JLypyZWN2 bXNnICgpIFRFU1Q0OiBJbnZhbGlkIG1zZ2hkciBwb2ludGVyIEVGQVVMVCwgRXhwZWN0ZWQgZXJy b3IgKi8KPiArCS8qcmVjdm1zZyAoKSBURVNUNDogSW52YWxpZCBtc2doZHIgcG9pbnRlciBFRkFV TFQsIEV4cGVjdGVkIGVycm9yKi8KPiAgIAljb3VudCA9IHJlY3Ztc2coYWNwdF9zaywgKHN0cnVj dCBtc2doZHIgKiktMSwgZmxhZyk7Cj4gICAJaWYgKGNvdW50ICE9IC0xIHx8IGVycm5vICE9IEVG QVVMVCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ztc2cgd2l0aCBpbnZhbGlkIG1z Z2hkciAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdm1zZyB3aXRoIGludmFs aWQgbXNnaGRyICIKPiAgIAkJCSAicG9pbnRlciBjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwg ZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJyZWN2bXNnKCkgd2l0aCBpbnZhbGlk IG1zZ2hkciBwdHIgLSBFRkFVTFQiKTsKPiAgIAo+IC0JLypyZWN2bXNnICgpIFRFU1Q1OnJlY3Zt c2cgb24gbGlzdGVuaW5nIHNvY2tldCxFTk9UQ09OTiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypy ZWN2bXNnICgpIFRFU1Q1OnJlY3Ztc2cgb24gbGlzdGVuaW5nIHNvY2tldCxFTk9UQ09OTiBFeHBl Y3RlZCBlcnJvciovCj4gICAJY291bnQgPSByZWN2bXNnKGxzdG5fc2ssICZpbm1lc3NhZ2UsIGZs YWcpOwo+ICAgCWlmIChjb3VudCAhPSAtMSB8fCBlcnJubyAhPSBFTk9UQ09OTikKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgInJlY3Ztc2cgb24gbGlzdGVuaW5nIHNvY2tldCAiCj4gKwkJdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdm1zZyBvbiBsaXN0ZW5pbmcgc29ja2V0ICIKPiAg IAkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9y ZXNtKFRQQVNTLCAicmVjdm1zZygpIG9uIGxpc3RlbmluZyBzb2NrZXQgLSBFTk9UQ09OTiIpOwo+ ICAgCj4gICAJY291bnQgPSB0ZXN0X3NlbmQoYWNwdF9zaywgbWVzc2FnZTEsIHN0cmxlbihtZXNz YWdlKSwgMCk7Cj4gICAKPiAtCXJldCA9IHRlc3Rfc2h1dGRvd24oc2ssIFNIVVRfV1IpOwo+ICsJ dGVzdF9zaHV0ZG93bihzaywgU0hVVF9XUik7Cj4gICAKPiAgIAlmbGFnID0gTVNHX05PU0lHTkFM Owo+IC0JLypyZWN2bXNnICgpIFRFU1Q2OnJlYWRpbmcgb24gYSBzb2NrZXQgdGhhdCByZWNlaXZl ZCBTSFVURE9XTiAqLwo+ICsJLypyZWN2bXNnICgpIFRFU1Q2OnJlYWRpbmcgb24gYSBzb2NrZXQg dGhhdCByZWNlaXZlZCBTSFVURE9XTiovCj4gICAJY291bnQgPSByZWN2bXNnKGFjcHRfc2ssICZp bm1lc3NhZ2UsIGZsYWcpOwo+ICAgCWlmIChjb3VudCA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJyZWN2bXNnIG9uIGEgc29ja2V0IHRoYXQgaGFzICIKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJyZWN2bXNnIG9uIGEgc29ja2V0IHRoYXQgaGFzICIKPiAgIAkJCSAicmVj ZWl2ZWQgc2h1dGRvd24gY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ ICAgCXRzdF9yZXNtKFRQQVNTLCAicmVjdm1zZygpIG9uIGEgc29ja2V0IHRoYXQgaGFzIHJlY2Vp dmVkIHNodXRkb3duIC0gIgo+ICAgCQkgIkVPRiIpOwo+ICAgCj4gLQkvKnJlY3Ztc2cgKCkgVEVT VDc6cmVhZGluZyB0aGUgcGVuZGluZyBtZXNzYWdlIHNvY2tldCB0aGF0IHNlbnQKPiAtCSAgIFNI VVRET1dOICovCj4gKwkvKnJlY3Ztc2cgKCkgVEVTVDc6cmVhZGluZyB0aGUgcGVuZGluZyBtZXNz YWdlIHNvY2tldCB0aGF0IHNlbnQKPiArCVNIVVRET1dOKi8KPiAgIAljb3VudCA9IHJlY3Ztc2co c2ssICZpbm1lc3NhZ2UsIGZsYWcpOwo+ICAgCWlmIChjb3VudCA8IDApCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJyZWN2bXNnIG9uIGEgc29ja2V0IHdpdGggcGVuZGluZyAiCj4gKwkJdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdm1zZyBvbiBhIHNvY2tldCB3aXRoIHBlbmRpbmcg Igo+ICAgCQkJICJtZXNzYWdlIHRoYXQgaGFzIHNlbnQgc2h1dGRvd24gY291bnQ6JWQsIGVycm5v OiVkIiwKPiAgIAkJCSBjb3VudCwgZXJybm8pOwo+ICAgCj4gQEAgLTE4OCwxMCArMTg4LDEwIEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJCSAic2VudCBzaHV0ZG93biAt IFNVQ0NFU1MiKTsKPiAgIAo+ICAgCS8qcmVjdm1zZyAoKSBURVNUODogTm8gbW9yZSBtZXNzYWdl IGFuZCBhc3NvY2lhdGlvbiBpcyBzaHV0ZG93biwKPiAtCSAgIEVOT1RDT05OIEV4cGVjdGVkIGVy cm9yICovCj4gKwlFTk9UQ09OTiBFeHBlY3RlZCBlcnJvciovCj4gICAJY291bnQgPSByZWN2bXNn KHNrLCAmaW5tZXNzYWdlLCBmbGFnKTsKPiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0g RU5PVENPTk4pCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2bXNnIG9uIGEgc29ja2V0 IHdpdGggbm8gIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInJlY3Ztc2cgb24gYSBz b2NrZXQgd2l0aCBubyAiCj4gICAJCQkgInBlbmRpbmcgbWVzc2FnZXMgYW5kIGhhcyBzZW50IHNo dXRkb3duIGNvdW50OiVkLCAiCj4gICAJCQkgImVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAg IAo+IEBAIC0yMDEsNSArMjAxLDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAgIAljbG9zZShzayk7Cj4gICAJY2xvc2UobHN0bl9zayk7Cj4gICAJY2xvc2UoYWNwdF9zayk7 Cj4gLQl0c3RfZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3Rj YXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9ydG9pbmZvLmMgYi90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcnRvaW5mby5jCj4gaW5k ZXggYzMxYmRkOS4uMDJkZDQ3NyAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3Rw L2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfcnRvaW5mby5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdv cmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3J0b2luZm8uYwo+IEBAIC0xLDQgKzEsNCBA QAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBr ZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMyBIZXdsZXR0LVBh Y2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBD b3JwLiAyMDA0Cj4gICAgKgo+IEBAIC05LDEzICs5LDEzIEBACj4gICAgKiB0aGUgdmFsdWUgdXNp bmcgc2V0c29ja29wdCgpIGFuZCBnZXRzIHRoZSBzZXQgdmFsdWUgdXNpbmcgZ2V0c29ja29wdCgp Lgo+ICAgICogQSBjb21wYXJpc29uIGJldHdlZW4gc2V0IHZhbHVlcyBhbmQgZ2V0IHZhbHVlcyBh cmUgcGVyZm9ybWVkLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0 aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGZy ZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICogYW55IGxhdGVyIHZl cnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRh dGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAgKiB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQK PiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKPiAgICAqIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4KPiBAQCAtNDYsOCArNDYsOCBAQAo+ICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICAg I2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KPiAt I2luY2x1ZGUgPGxpbnV4L2luLmg+CQkvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiAtI2luY2x1ZGUg PGxpbnV4L2luNi5oPgkJLyogZm9yIHNvY2thZGRyX2luNiAqLwo+ICsjaW5jbHVkZSA8bGludXgv aW4uaD4gICAgICAgICAvKiBmb3Igc29ja2FkZHJfaW4gKi8KPiArI2luY2x1ZGUgPGxpbnV4L2lu Ni5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRkcl9pbjYgKi8KPiAgICNpbmNsdWRlIDxlcnJuby5o Pgo+ICAgI2luY2x1ZGUgPHN5cy91aW8uaD4KPiAgICNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4K PiBAQCAtNTcsNTEgKzU3LDUyIEBAIGNoYXIgKlRDSUQgPSBfX0ZJTEVfXzsKPiAgIGludCBUU1Rf VE9UQUwgPSAzOwo+ICAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gLWludCBtYWluKHZvaWQpCj4g K2ludAo+ICttYWluKHZvaWQpCj4gICB7Cj4gLQo+ICsJCj4gICAJaW50IHNkLCByZXQ7Cj4gICAJ c29ja2xlbl90IGxlbjsKPiAtCXN0cnVjdCBzY3RwX3J0b2luZm8gc3J0b2luZm87CS8qc2V0dGlu ZyB0aGUgdmFyaWFibGVzICovCj4gLQlzdHJ1Y3Qgc2N0cF9ydG9pbmZvIGdydG9pbmZvOwkvKkdl dHRpbmcgdGhlIHZhcmlhYmxlcyAqLwo+ICsJc3RydWN0IHNjdHBfcnRvaW5mbyBzcnRvaW5mbzsg LypzZXR0aW5nIHRoZSB2YXJpYWJsZXMqLwo+ICsJc3RydWN0IHNjdHBfcnRvaW5mbyBncnRvaW5m bzsgLypHZXR0aW5nIHRoZSB2YXJpYWJsZXMqLwo+ICAgCj4gLQlzZCA9IHRlc3Rfc29ja2V0KFBG X0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICsJc2QgPSB0ZXN0X3NvY2tldCAo UEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAgIAlsZW4gPSBzaXpl b2Yoc3RydWN0IHNjdHBfcnRvaW5mbyk7Cj4gLQo+IC0JLypURVNUMSBHZXR0aW5nIHRoZSBkZWZh dWx0IHZhbHVlcyB1c2luZyBnZXRzb2Nrb3B0KCkgKi8KPiArCQo+ICsJLypURVNUMSBHZXR0aW5n IHRoZSBkZWZhdWx0IHZhbHVlcyB1c2luZyBnZXRzb2Nrb3B0KCkqLwo+ICAgCXJldCA9IGdldHNv Y2tvcHQoc2QsIElQUFJPVE9fU0NUUCwgU0NUUF9SVE9JTkZPLCAmZ3J0b2luZm8sICZsZW4pOwo+ ICAgCWlmIChyZXQgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdCBT Q1RQX1JUT0lORk8gIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQg U0NUUF9SVE9JTkZPICIKPiAgIAkJCSAicmV0OiVkLCBlcnJubzolZCIsIHJldCwgZXJybm8pOwo+ ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KCkgU0NUUF9SVE9JTkZPIC0gU1VD Q0VTUyIpOwo+ICAgCj4gLQkvKkFzc2lnbmluZyB0aGUgdmFsdWVzIHRvIFJUTyBpbml0aWFsIGFu ZCBtYXggYW5kIG1pbiBib3VuZHMgKi8KPiAtCXNydG9pbmZvLnNydG9faW5pdGlhbCA9IDYwOwo+ IC0Jc3J0b2luZm8uc3J0b19tYXggPSAxMDA7Cj4gLQlzcnRvaW5mby5zcnRvX21pbiA9IDQwOwo+ ICsJLypBc3NpZ25pbmcgdGhlIHZhbHVlcyB0byBSVE8gaW5pdGlhbCBhbmQgbWF4IGFuZCBtaW4g Ym91bmRzKi8KPiArCXNydG9pbmZvLnNydG9faW5pdGlhbD02MDsKPiArCXNydG9pbmZvLnNydG9f bWF4PTEwMDsKPiArCXNydG9pbmZvLnNydG9fbWluPTQwOwo+ICAgCj4gLQkvKlRFU1QyIFNldHRp bmcgdGhlIHZhbHVlcyB1c2luZyBzZXRzb2Nrb3B0KCkgKi8KPiAtCXJldCA9IHNldHNvY2tvcHQo c2QsIElQUFJPVE9fU0NUUCwgU0NUUF9SVE9JTkZPLCAmc3J0b2luZm8sCj4gLQkJCSBzaXplb2Yo c3RydWN0IHNjdHBfcnRvaW5mbykpOwo+ICsJLypURVNUMiBTZXR0aW5nIHRoZSB2YWx1ZXMgdXNp bmcgc2V0c29ja29wdCgpKi8KPiArCXJldCA9IHNldHNvY2tvcHQoc2QsIElQUFJPVE9fU0NUUCwg U0NUUF9SVE9JTkZPLCAmc3J0b2luZm8sCj4gKwkJc2l6ZW9mKHN0cnVjdCBzY3RwX3J0b2luZm8p KTsKPiAgIAlpZiAocmV0IDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNldHNvY2tv cHQgU0NUUF9SVE9JTkZPICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nr b3B0IFNDVFBfUlRPSU5GTyAiCj4gICAJCQkgInJldDolZCwgZXJybm86JWQiLCByZXQsIGVycm5v KTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2V0c29ja29wdCgpIFNDVFBfUlRPSU5GTyAt IFNVQ0NFU1MiKTsKPiAgIAo+IC0JLypHZXR0aW5nIHRoZSB2YWx1ZXMgd2hpY2ggYXJlIHNldCB1 c2luZyBzZXRzb2Nrb3B0KCkgKi8KPiArCS8qR2V0dGluZyB0aGUgdmFsdWVzIHdoaWNoIGFyZSBz ZXQgdXNpbmcgc2V0c29ja29wdCgpKi8KPiAgIAlyZXQgPSBnZXRzb2Nrb3B0KHNkLCBJUFBST1RP X1NDVFAsIFNDVFBfUlRPSU5GTywgJmdydG9pbmZvLCAmbGVuKTsKPiAgIAlpZiAocmV0IDwgMCkK PiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQgU0NUUF9SVE9JTkZPICIKPiAr CQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0IFNDVFBfUlRPSU5GTyAiCj4g ICAJCQkgInJldDolZCwgZXJybm86JWQiLCByZXQsIGVycm5vKTsKPiAgIAo+IC0JLyogVEVTVDMg Q29tcGFyZSB0aGUgZ2V0IHZhbHVlcyB3aXRoIHRoZSBzZXQgdmFsdWVzLiAqLwo+ICsJLyogVEVT VDMgQ29tcGFyZSB0aGUgZ2V0IHZhbHVlcyB3aXRoIHRoZSBzZXQgdmFsdWVzLiAqLwo+ICAgCWlm IChzcnRvaW5mby5zcnRvX2luaXRpYWwgIT0gZ3J0b2luZm8uc3J0b19pbml0aWFsICYmCj4gLQkg ICAgc3J0b2luZm8uc3J0b19tYXggIT0gZ3J0b2luZm8uc3J0b19tYXggJiYKPiAtCSAgICBzcnRv aW5mby5zcnRvX21pbiAhPSBncnRvaW5mby5zcnRvX21pbikKPiAtCQl0c3RfYnJrbShUQlJPSywg TlVMTCwgInNldHNvY2tvcHQvZ2V0c29ja29wdCBTQ1RQX1JUT0lORk8gIgo+ICsgICAgICAgICAg ICBzcnRvaW5mby5zcnRvX21heCAhPSBncnRvaW5mby5zcnRvX21heCAmJgo+ICsgICAgICAgICAg ICBzcnRvaW5mby5zcnRvX21pbiAhPSBncnRvaW5mby5zcnRvX21pbikKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0L2dldHNvY2tvcHQgU0NUUF9SVE9JTkZPICIKPiAg IAkJCSAiY29tcGFyZSBmYWlsZWQiKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2V0c29j a29wdCgpL2dldHNvY2tvcHQgU0NUUF9SVE9JTkZPIGNvbXBhcmUgLSAiCj4gQEAgLTEwOSw1ICsx MTAsNSBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCj4gICAJY2xvc2Uoc2QpOwo+ICAgCj4gLQl0c3Rf ZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3 b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zZW5kLmMgYi90ZXN0Y2FzZXMvbmV0d29y ay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc2VuZC5jCj4gaW5kZXggYThkYzhmNS4uNDk2 NjAyMCAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVz dF8xX3RvXzFfc2VuZC5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3Rz L3Rlc3RfMV90b18xX3NlbmQuYwo+IEBAIC0xLDQgKzEsNCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCBy ZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24K PiAgICAqIENvcHlyaWdodCAoYykgMjAwMyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29t cGFueSwgTC5QCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0Cj4gICAgKgo+IEBA IC05LDE3ICs5LDE3IEBACj4gICAgKiBURVNUMzogT24gYSBsaXN0ZW5pbmcgc29ja2V0Cj4gICAg KiBURVNUNDogT24gYSBjbG9zZWQgYXNzb2NpYXRpb24KPiAgICAqIFRFU1Q1OiBJbnZhbGlkIG1l c3NhZ2UgYWRkcmVzcwo+IC0gKiBURVNUNjogc2VuZCBmcm9tIGNsaWVudCB0byBzZXJ2ZXIKPiAt ICogVEVTVDc6IHNlbmQgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50Cj4gKyAqIFRFU1Q2OiBzZW5kIGZy b20gY2xpZW50IHRvIHNlcnZlcgo+ICsgKiBURVNUNzogc2VuZCBmcm9tIHNlcnZlciB0byBjbGll bnQKPiAgICAqIFRFU1Q4OiBzZW5kaW5nIHBhcnRpYWwgZGF0YSBmcm9tIGEgYnVmZmVyCj4gICAg Kgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2Fy ZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAq IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBv ciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAq IFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAg ICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC00OSw3ICs0 OSw3IEBACj4gICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ Cj4gICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgo+IC0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJ LyogZm9yIHNvY2thZGRyX2luICovCj4gKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAgICAg LyogZm9yIHNvY2thZGRyX2luICovCj4gICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Cj4gICAjaW5j bHVkZSA8ZXJybm8uaD4KPiAgICNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KPiBAQCAtNjEsMTYy ICs2MSwxNjQgQEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDg7 Cj4gICBpbnQgVFNUX0NOVCA9IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKPiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAtCXNv Y2tsZW5fdCBsZW4sIGxlbl9zbmQ7Cj4gKyAgICAgICAgc29ja2xlbl90IGxlbixsZW5fc25kOwo+ ICAgCWludCBtc2dfY291bnQ7Cj4gLQlpbnQgc2ssIHNrMSwgcGZfY2xhc3MsIGxzdG5fc2ssIGFj cHRfc2ssIGFjcHQxX3NrLCBmbGFnLCBjb3VudDsKPiAtCWNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8s IHdvcmxkIVxuIjsKPiAtCWNoYXIgKm1lc3NhZ2VfcmN2Owo+ICsJaW50IHNrLHNrMSxwZl9jbGFz cyxsc3RuX3NrLGFjcHRfc2ssYWNwdDFfc2ssIGZsYWcsIGNvdW50Owo+ICsgICAgICAgIGNoYXIg Km1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAgICBjaGFyICptZXNzYWdlX3Jj djsKPiAgIAo+IC0Jc3RydWN0IHNvY2thZGRyX2luIGNvbm5fYWRkciwgbHN0bl9hZGRyLCBzdnJf YWRkcjsKPiArICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY29ubl9hZGRyLGxzdG5fYWRkcixz dnJfYWRkcjsKPiAgIAo+ICAgCS8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhl IGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVyZWQuCj4gLQkgKi8KPiAtCXNl dHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+IC0Jc2V0dmJ1ZihzdGRlcnIsIE5VTEws IF9JT05CRiwgMCk7Cj4gKyAgICAgICAgICogYmUgdW5idWZmZXJlZC4KPiArICAgICAgICAgKi8K PiArICAgICAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICBz ZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JcGZfY2xhc3MgPSBQRl9J TkVUOwo+ICsgICAgICAgIHBmX2NsYXNzID0gUEZfSU5FVDsKPiAgIAo+IC0Jc2sgPSB0ZXN0X3Nv Y2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgc2sg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAK PiAtCXNrMSA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQ KTsKPiArICAgICAgICBzazEgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQ UFJPVE9fU0NUUCk7Cj4gICAKPiAtCWxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09D S19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgbHN0bl9zayA9IHRlc3Rfc29ja2V0 KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCWNvbm5fYWRk ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBT Q1RQX0lQX0xPT1BCQUNLOwo+IC0JY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNU UE9SVF8xKTsKPiArICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9M T09QQkFDSzsKPiArICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQ T1JUXzEpOwo+ICAgCj4gICAJbHN0bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JbHN0 bl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsc3RuX2FkZHIu c2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGxzdG5fYWRkci5z aW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxzdG5fYWRkci5z aW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCS8qQmluZGluZyB0aGUg bGlzdGVuIHNvY2tldCAqLwo+IC0JdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIg KikmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gKwkvKkJpbmRpbmcgdGhlIGxpc3Rl biBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRy ICopICZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+IC0JLypMaXN0ZW5pbmcg dGhlIHNvY2tldCAqLwo+IC0JdGVzdF9saXN0ZW4obHN0bl9zaywgMTApOwo+ICsgICAgICAgIC8q TGlzdGVuaW5nIHRoZSBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3RfbGlzdGVuKGxzdG5fc2ssIDEw KTsKPiAgIAo+ICAgCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwo+IC0KPiAtCXRl c3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4gKwkK PiArCXRlc3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBsZW4p Owo+ICAgCj4gICAJYWNwdF9zayA9IHRlc3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ICAgCj4gICAJbGVuX3NuZCA9IChzdHJsZW4obWVzc2Fn ZSkgKyAxKTsKPiAgIAo+ICAgCWZsYWcgPSBNU0dfTk9TSUdOQUw7Cj4gLQkvKnNlbmQgKCkgVEVT VDE6IEJhZCBzb2NrZXQgZGVzY3JpcHRvciwgRUJBREYgRXhwZWN0ZWQgZXJyb3IgKi8KPiArCS8q c2VuZCAoKSBURVNUMTogQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJv ciovCj4gICAJY291bnQgPSBzZW5kKC0xLCBtZXNzYWdlLCBsZW5fc25kLCBmbGFnKTsKPiAgIAlp ZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5V TEwsICJzZW5kIHdpdGggYSBiYWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzZW5kIHdpdGggYSBiYWQgc29ja2V0ICIKPiAgIAkJCSAiZGVzY3JpcHRvciBjb3VudDol ZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJz ZW5kKCkgd2l0aCBhIGJhZCBzb2NrZXQgZGVzY3JpcHRvciAtIEVCQURGIik7Cj4gLQo+IC0JLypz ZW5kICgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0ZWQgZXJyb3IgKi8K PiArCQo+ICsJLypzZW5kICgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0 ZWQgZXJyb3IqLwo+ICAgCWNvdW50ID0gc2VuZCgwLCBtZXNzYWdlLCBsZW5fc25kLCBmbGFnKTsK PiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJzZW5kIHdpdGggaW52YWxpZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgInNlbmQgd2l0aCBpbnZhbGlkIHNvY2tldCAiCj4gICAJCQkgImNvdW50 OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywg InNlbmQoKSB3aXRoIGludmFsaWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAgIAo+IC0JLypzZW5k ICgpIFRFU1QzOiBzZW5kIG9uIGxpc3RlbmluZyBzb2NrZXQsIEVQSVBFIEV4cGVjdGVkIGVycm9y ICovCj4gKwkvKnNlbmQgKCkgVEVTVDM6IHNlbmQgb24gbGlzdGVuaW5nIHNvY2tldCwgRVBJUEUg RXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWNvdW50ID0gc2VuZChsc3RuX3NrLCBtZXNzYWdlLCBsZW5f c25kLCBmbGFnKTsKPiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRVBJUEUpCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kIG9uIGEgbGlzdGVuaW5nIHNvY2tldCAiCj4gKwkJ dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2VuZCBvbiBhIGxpc3RlbmluZyBzb2NrZXQgIgo+ ICAgCQkJICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJdHN0 X3Jlc20oVFBBU1MsICJzZW5kKCkgb24gYSBsaXN0ZW5pbmcgc29ja2V0IC0gRVBJUEUiKTsKPiAg ICNpZiAwCj4gLQkvKnNlbmQgKCkgVEVTVDQ6IEludmFsaWQgbWVzc2FnZSBhZGRyZXNzLCBFRkFV TFQgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCS8qIEZJWE1FIHRoaXMgdGVzdCBzaG91bGQgcGFzcy4g RG9uJ3QgY2F0Y2ggd2h5Li4uICAqLwo+ICsJLypzZW5kICgpIFRFU1Q0OiBJbnZhbGlkIG1lc3Nh Z2UgYWRkcmVzcywgRUZBVUxUIEV4cGVjdGVkIGVycm9yKi8KPiArICAgICAgIC8qIEZJWE1FIHRo aXMgdGVzdCBzaG91bGQgcGFzcy4gRG9uJ3QgY2F0Y2ggd2h5Li4uICAqLwo+ICAgCWNvdW50ID0g c2VuZChzaywgKGNoYXIgKikweDEsIGxlbl9zbmQsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAhPSAt MSB8fCBlcnJubyAhPSBFRkFVTFQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kIHdp dGggaW52YWxpZCBtZXNzYWdlICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5k IHdpdGggaW52YWxpZCBtZXNzYWdlICIKPiAgIAkJCSAicG9pbnRlciBjb3VudDolZCwgZXJybm86 JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kKCkgd2l0 aCBpbnZhbGlkIG1lc3NhZ2UgcHRyIC0gRUZBVUxUIik7Cj4gICAjZW5kaWYKPiAgIAo+IC0JdGVz dF9jb25uZWN0KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3RuX2FkZHIsIGxlbik7Cj4gLQo+ ICsJdGVzdF9jb25uZWN0KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBsZW4p Owo+ICsJCQo+ICAgCWNvdW50ID0gdGVzdF9zZW5kKHNrMSwgbWVzc2FnZSwgbGVuX3NuZCwgZmxh Zyk7Cj4gICAKPiAgIAljbG9zZShzazEpOwo+ICAgCj4gICAJYWNwdDFfc2sgPSB0ZXN0X2FjY2Vw dChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgJmxlbik7Cj4gICAKPiAt CS8qc2VuZCAoKSBURVNUNTogc2VuZCBvbiBjbG9zZWQgYXNzb2NpYXRpb24sIEVQSVBFIEV4cGVj dGVkIGVycm9yICovCj4gKwkvKnNlbmQgKCkgVEVTVDU6IHNlbmQgb24gY2xvc2VkIGFzc29jaWF0 aW9uLCBFUElQRSBFeHBlY3RlZCBlcnJvciovCj4gICAJY291bnQgPSBzZW5kKGFjcHQxX3NrLCBt ZXNzYWdlLCBsZW5fc25kLCBmbGFnKTsKPiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0g RVBJUEUpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kIG9uIGEgY2xvc2VkIGFzc29j aWF0aW9uICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kIG9uIGEgY2xvc2Vk IGFzc29jaWF0aW9uICIKPiAgIAkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5v KTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZCgpIG9uIGEgY2xvc2VkIGFzc29jaWF0 aW9uIC0gRVBJUEUiKTsKPiAgIAo+ICsJY2xvc2UoYWNwdDFfc2spOwo+ICAgCWNsb3NlKHNrKTsK PiAgIAljbG9zZShsc3RuX3NrKTsKPiAgIAljbG9zZShhY3B0X3NrKTsKPiAgIAo+IC0Jc2sgPSB0 ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAg ICAgc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7 Cj4gICAKPiAtCWxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQ UFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBT T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCW1lc3NhZ2VfcmN2ID0gbWFsbG9j KDUxMik7Cj4gICAKPiAtCS8qQmluZGluZyB0aGUgbGlzdGVuIHNvY2tldCAqLwo+IC0JdGVzdF9i aW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9h ZGRyKSk7Cj4gKwkvKkJpbmRpbmcgdGhlIGxpc3RlbiBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3Rf YmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopICZsc3RuX2FkZHIsIHNpemVvZihsc3Ru X2FkZHIpKTsKPiAgIAo+IC0JLypMaXN0ZW5pbmcgdGhlIHNvY2tldCAqLwo+IC0JdGVzdF9saXN0 ZW4obHN0bl9zaywgMTApOwo+ICsgICAgICAgIC8qTGlzdGVuaW5nIHRoZSBzb2NrZXQqLwo+ICsg ICAgICAgIHRlc3RfbGlzdGVuKGxzdG5fc2ssIDEwKTsKPiAgIAo+ICAgCWNvbm5fYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQ X0xPT1BCQUNLOwo+IC0JY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8x KTsKPiArICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFD SzsKPiArICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEp Owo+ICAgCj4gICAJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cj4gICAKPiAtCXRl c3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4gKwl0 ZXN0X2Nvbm5lY3Qoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm5fYWRkciwgbGVuKTsKPiAg IAo+ICAgCWFjcHRfc2sgPSB0ZXN0X2FjY2VwdChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICop JnN2cl9hZGRyLCAmbGVuKTsKPiAtCj4gKwkKPiAgIAltc2dfY291bnQgPSBzdHJsZW4obWVzc2Fn ZSkgKyAxOwo+ICAgCj4gLQkvKnNlbmQoKSBURVNUNjogU2VuZGluZyBkYXRhIGZyb20gY2xpZW50 IHNvY2tldCB0byBzZXJ2ZXIgc29ja2V0ICovCj4gKwkvKnNlbmQoKSBURVNUNjogU2VuZGluZyBk YXRhIGZyb20gY2xpZW50IHNvY2tldCB0byBzZXJ2ZXIgc29ja2V0Ki8KPiAgIAljb3VudCA9IHNl bmQoc2ssIG1lc3NhZ2UsIG1zZ19jb3VudCwgZmxhZyk7Cj4gICAJaWYgKGNvdW50ICE9IG1zZ19j b3VudCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmQgZnJvbSBjbGllbnQgdG8gc2Vy dmVyICIKPiAtCQkJICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmQgZnJvbSBjbGllbnQgdG8gc2VydmVyICIKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJy bm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kKCkgZnJvbSBjbGllbnQgdG8gc2Vy dmVyIC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJdGVzdF9yZWN2KGFjcHRfc2ssIG1lc3NhZ2VfcmN2 LCBtc2dfY291bnQsIGZsYWcpOwo+ICAgCj4gLQlzdHJuY3B5KG1lc3NhZ2VfcmN2LCAiXDAiLCA1 MTIpOwo+ICsJc3RybmNweShtZXNzYWdlX3JjdiwiXDAiLDUxMik7Cj4gICAKPiAtCS8qc2VuZCgp IFRFU1Q3OiBTZW5kaW5nIGRhdGEgZnJvbSBhY2NlcHQgc29ja2V0IHRvIGNsaWVudCBzb2NrZXQg Ki8KPiArCS8qc2VuZCgpIFRFU1Q3OiBTZW5kaW5nIGRhdGEgZnJvbSBhY2NlcHQgc29ja2V0IHRv IGNsaWVudCBzb2NrZXQqLwo+ICAgCWNvdW50ID0gc2VuZChhY3B0X3NrLCBtZXNzYWdlLCBtc2df Y291bnQsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAhPSBtc2dfY291bnQpCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJzZW5kIGZyb20gYWNjZXB0IHNvY2tldCB0byBjbGllbnQgIgo+IC0JCQkg ImNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAic2VuZCBmcm9tIGFjY2VwdCBzb2NrZXQgdG8gY2xpZW50ICIKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kKCkgZnJvbSBhY2NlcHQgc29ja2V0IHRvIGNs aWVudCAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCXRlc3RfcmVjdihzaywgbWVzc2FnZV9yY3YsIG1z Z19jb3VudCwgZmxhZyk7Cj4gICAKPiAtCS8qc2VuZCgpIFRFU1Q4OiBTZW5kaW5nIGxlc3MgbnVt YmVyIG9mIGRhdGEgZnJvbSB0aGUgYnVmZmVyICovCj4gLQkvKlNlbmRpbmcgb25seSA1IGJ5dGVz IHNvIHRoYXQgb25seSBoZWxsbyBpcyByZWNlaXZlZCAqLwo+IC0JdGVzdF9zZW5kKHNrLCBtZXNz YWdlLCA1LCBmbGFnKTsKPiArCS8qc2VuZCgpIFRFU1Q4OiBTZW5kaW5nIGxlc3MgbnVtYmVyIG9m IGRhdGEgZnJvbSB0aGUgYnVmZmVyKi8KPiArCS8qU2VuZGluZyBvbmx5IDUgYnl0ZXMgc28gdGhh dCBvbmx5IGhlbGxvIGlzIHJlY2VpdmVkKi8KPiArCXRlc3Rfc2VuZChzaywgbWVzc2FnZSwgNSAs IGZsYWcpOwo+ICAgCXRlc3RfcmVjdihhY3B0X3NrLCBtZXNzYWdlX3JjdiwgNSwgZmxhZyk7Cj4g LQo+ICsJCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kKCkgcGFydGlhbCBkYXRhIGZyb20gYSBi dWZmZXIgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAkvKiBURVNUOTogc2N0cF9zZW5kIHdpdGggbm8g c2luZm8gKi8KPiAtCXRlc3Rfc2N0cF9zZW5kKHNrLCBtZXNzYWdlLCBzdHJsZW4obWVzc2FnZSkg KyAxLCBOVUxMLCBmbGFnKTsKPiArCXRlc3Rfc2N0cF9zZW5kKHNrLCBtZXNzYWdlLCBzdHJsZW4o bWVzc2FnZSkgKyAxICwgTlVMTCwgZmxhZyk7Cj4gICAJdGVzdF9yZWN2KGFjcHRfc2ssIG1lc3Nh Z2VfcmN2LCBzdHJsZW4obWVzc2FnZSkgKyAxLCBmbGFnKTsKPiAgIAl0c3RfcmVzbShUUEFTUywg InNjdHBfc2VuZCgpIHdpdGggbm8gc2luZm8gLSBTVUNDRVNTIik7Cj4gICAKPiBAQCAtMjI0LDUg KzIyNiw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJY2xvc2UobHN0 bl9zayk7Cj4gICAJY2xvc2UoYWNwdF9zayk7Cj4gICAKPiAtCXRzdF9leGl0KCk7Cj4gKwlyZXR1 cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rl c3RzL3Rlc3RfMV90b18xX3NlbmRtc2cuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190 ZXN0cy90ZXN0XzFfdG9fMV9zZW5kbXNnLmMKPiBpbmRleCBkZmZkZGU1Li43YWMwYjU0IDEwMDY0 NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9z ZW5kbXNnLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8x X3RvXzFfc2VuZG1zZy5jCj4gQEAgLTEsNCArMSw0IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVy ZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAg ICogQ29weXJpZ2h0IChjKSAyMDAzIEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55 LCBMLlAKPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDQKPiAgICAqCj4gQEAgLTE3 LDE2ICsxNywxNiBAQAo+ICAgICoKPiAgICAqIFRFU1QxMTogU2VuZGluZyBkYXRhIGZyb20gc2Vy dmVyIHNvY2tldCB0byBjbGllbnQgc29ja2V0Cj4gICAgKiBURVNUMTI6IFNlbmRpbmcgZGF0YSBm cm9tIGNsaWVudCBzb2NrZXQgdG8gc2VydmVyIHNvY2tldAo+IC0gKiBURVNUMTM6IFNlbmRpbmcg ZGF0YSBmcm9tIHVuY29ubmVjdGVkIGNsaWVudCB0byBzZXJ2ZXIKPiArICogVEVTVDEzOiBTZW5k aW5nIGRhdGEgZnJvbSB1bmNvbm5lY3RlZCBjbGllbnQgdG8gc2VydmVyCj4gICAgKiBURVNUMTQ6 IFNlbmRpbmcgYSBtZXNzYWdlIG9uIFNIVVRfUkQgc29ja2V0Cj4gICAgKgo+IC0gKiBUaGUgU0NU UCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiArICogVGhlIFND VFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4gICAgKiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRp b24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVy ZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4g KyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoqKioqKioqKioq KioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC01Niw3ICs1Niw3IEBACj4gICAjaW5j bHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gICAjaW5jbHVkZSA8 c3lzL3NvY2tldC5oPgo+IC0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogZm9yIHNvY2thZGRy X2luICovCj4gKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAgICAgLyogZm9yIHNvY2thZGRy X2luICovCj4gICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Cj4gICAjaW5jbHVkZSA8ZXJybm8uaD4K PiAgICNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KPiBAQCAtNjgsMjg2ICs2OCwyNzUgQEAgY2hh ciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDE0Owo+ICAgaW50IFRTVF9D TlQgPSAwOwo+ICAgCj4gLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2ludAo+ ICttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICB7Cj4gLQlzb2NrbGVuX3QgbGVuOwo+ ICsgICAgICAgIHNvY2tsZW5fdCBsZW47Cj4gICAJaW50IG1zZ19jb3VudDsKPiAtCWludCBzaywg c2sxLCBwZl9jbGFzcywgbHN0bl9zaywgYWNwdF9zaywgYWNwdDFfc2ssIGZsYWc7Cj4gKwlpbnQg c2ssc2sxLHBmX2NsYXNzLGxzdG5fc2ssYWNwdF9zayxhY3B0MV9zaywgZmxhZzsKPiAgIAlzdHJ1 Y3QgbXNnaGRyIG91dG1lc3NhZ2U7Cj4gLQljaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFc biI7Cj4gLQlzdHJ1Y3QgaW92ZWMgaW92Owo+ICsgICAgICAgIGNoYXIgKm1lc3NhZ2UgPSAiaGVs bG8sIHdvcmxkIVxuIjsKPiAgIAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKPiAtCWlu dCBjb3VudDsKPiArICAgICAgICBpbnQgY291bnQ7Cj4gICAJY2hhciBvdXRjbXNnW0NNU0dfU1BB Q0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKV07Cj4gICAJc3RydWN0IGNtc2doZHIg KmNtc2c7Cj4gLQlzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAtCWNoYXIgKmJ1ZmZlcjsKPiArICAg ICAgICBzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAgIAlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsK PiAtCWNoYXIgKmJ1ZmZlcl9zbmQ7Cj4gLQljaGFyICpidWZmZXJfcmN2Owo+IC0Jc3RydWN0IHNv Y2thZGRyX2luIGNvbm5fYWRkciwgbHN0bl9hZGRyLCBzdnJfYWRkcjsKPiAtCXN0cnVjdCBpb3Zl YyBpb3ZfcmN2Owo+ICsJY2hhciAqIGJ1ZmZlcl9yY3Y7Cj4gKyAgICAgICAgc3RydWN0IHNvY2th ZGRyX2luIGNvbm5fYWRkcixsc3RuX2FkZHIsc3ZyX2FkZHI7Cj4gKyAgICAgICAgc3RydWN0IGlv dmVjIGlvdl9yY3Y7Cj4gICAJY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yoc2N0cF9jbXNn X2RhdGFfdCkpXTsKPiAgIAo+ICAgCS8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQg dGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVyZWQuCj4gLQkgKi8KPiAt CXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+IC0Jc2V0dmJ1ZihzdGRlcnIsIE5V TEwsIF9JT05CRiwgMCk7Cj4gKyAgICAgICAgICogYmUgdW5idWZmZXJlZC4KPiArICAgICAgICAg Ki8KPiArICAgICAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAg ICBzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JcGZfY2xhc3MgPSBQ Rl9JTkVUOwo+ICsgICAgICAgIHBmX2NsYXNzID0gUEZfSU5FVDsKPiAgIAo+IC0Jc2sgPSB0ZXN0 X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAg c2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4g ICAKPiAtCXNrMSA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19T Q1RQKTsKPiArICAgICAgICBzazEgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0s IElQUFJPVE9fU0NUUCk7Cj4gICAKPiAtCWxzdG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywg U09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgbHN0bl9zayA9IHRlc3Rfc29j a2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCWNvbm5f YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIg PSBTQ1RQX0lQX0xPT1BCQUNLOwo+IC0JY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9U RVNUUE9SVF8xKTsKPiArICAgICAgICBjb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9J UF9MT09QQkFDSzsKPiArICAgICAgICBjb25uX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RF U1RQT1JUXzEpOwo+ICAgCj4gICAJbHN0bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0J bHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsc3RuX2Fk ZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAgIGxzdG5fYWRk ci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxzdG5fYWRk ci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCS8qQmluZGluZyB0 aGUgbGlzdGVuIHNvY2tldCAqLwo+IC0JdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gKwkvKkJpbmRpbmcgdGhlIGxp c3RlbiBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2th ZGRyICopICZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAgIAo+IC0JLypMaXN0ZW5p bmcgdGhlIHNvY2tldCAqLwo+IC0JdGVzdF9saXN0ZW4obHN0bl9zaywgMTApOwo+ICsgICAgICAg IC8qTGlzdGVuaW5nIHRoZSBzb2NrZXQqLwo+ICsgICAgICAgIHRlc3RfbGlzdGVuKGxzdG5fc2ss IDEwKTsKPiAgIAo+ICAgCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwo+IC0KPiAt CXRlc3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4g KwkKPiArCXRlc3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBs ZW4pOwo+ICAgCj4gICAJYWNwdF9zayA9IHRlc3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29j a2FkZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ICAgCj4gICAJbWVtc2V0KCZvdXRtZXNzYWdlLCAw LCBzaXplb2Yob3V0bWVzc2FnZSkpOwo+IC0JYnVmZmVyID0gbWFsbG9jKFJFQUxMWV9CSUcpOwo+ IC0KPiAtCW91dG1lc3NhZ2UubXNnX25hbWUgPSAmY29ubl9hZGRyOwo+IC0Jb3V0bWVzc2FnZS5t c2dfbmFtZWxlbiA9IHNpemVvZihjb25uX2FkZHIpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92ID0g Jm91dF9pb3Y7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0Jb3V0bWVzc2FnZS5t c2dfY29udHJvbCA9IG91dGNtc2c7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6 ZW9mKG91dGNtc2cpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICsgICAgICAgIG91 dG1lc3NhZ2UubXNnX25hbWUgPSAmY29ubl9hZGRyOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNn X25hbWVsZW4gPSBzaXplb2YoY29ubl9hZGRyKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19p b3YgPSAmb3V0X2lvdjsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsg ICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBvdXRjbXNnOwo+ICsgICAgICAgIG91dG1l c3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gKyAgICAgICAgb3V0bWVz c2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICAgCj4gICAJY21zZyA9IENNU0dfRklSU1RIRFIoJm91dG1l c3NhZ2UpOwo+IC0JY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fU0NUUDsKPiAtCWNtc2ctPmNt c2dfdHlwZSA9IFNDVFBfU05EUkNWOwo+IC0JY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXpl b2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbGxl biA9IGNtc2ctPmNtc2dfbGVuOwo+ICsgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBST1RP X1NDVFA7Cj4gKyAgICAgICAgY21zZy0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gKyAgICAg ICAgY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5m bykpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xl bjsKPiAgIAlzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopQ01TR19EQVRBKGNtc2cp Owo+IC0JbWVtc2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykp Owo+ICsgICAgICAgIG1lbXNldChzaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJj dmluZm8pKTsKPiAgIAo+IC0JaW92Lmlvdl9iYXNlID0gYnVmZmVyOwo+IC0JaW92Lmlvdl9sZW4g PSBSRUFMTFlfQklHOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFzZSA9IG1lc3NhZ2U7 Cj4gLQo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gc3RybGVuKG1lc3NhZ2UpICsg MTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiAr ICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAx Owo+ICAgCj4gICAJZmxhZyA9IE1TR19OT1NJR05BTDsKPiAtCS8qc2VuZG1zZyAoKSBURVNUMTog QmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypzZW5k bXNnICgpIFRFU1QxOiBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIEV4cGVjdGVkIGVycm9y Ki8KPiAgIAljb3VudCA9IHNlbmRtc2coLTEsICZvdXRtZXNzYWdlLCBmbGFnKTsKPiAgIAlpZiAo Y291bnQgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJzZW5kbXNnIHdpdGggYSBiYWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzZW5kbXNnIHdpdGggYSBiYWQgc29ja2V0ICIKPiAgIAkJCSAiZGVzY3JpcHRvciBjb3Vu dDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1Ms ICJzZW5kbXNnKCkgd2l0aCBhIGJhZCBzb2NrZXQgZGVzY3JpcHRvciAtIEVCQURGIik7Cj4gLQo+ IC0JLypzZW5kbXNnICgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgRXhwZWN0ZWQg ZXJyb3IgKi8KPiArCQo+ICsJLypzZW5kbXNnICgpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5P VFNPQ0sgRXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWNvdW50ID0gc2VuZG1zZygwLCAmb3V0bWVzc2Fn ZSwgZmxhZyk7Cj4gICAJaWYgKGNvdW50ICE9IC0xIHx8IGVycm5vICE9IEVOT1RTT0NLKQo+IC0J CXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2VuZG1zZyB3aXRoIGludmFsaWQgc29ja2V0ICIKPiAr CQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNnIHdpdGggaW52YWxpZCBzb2NrZXQg Igo+ICAgCQkJICJjb3VudDolZCwgZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJ dHN0X3Jlc20oVFBBU1MsICJzZW5kbXNnKCkgd2l0aCBpbnZhbGlkIHNvY2tldCAtIEVOT1RTT0NL Iik7Cj4gICAKPiAtCS8qc2VuZG1zZyAoKSBURVNUMzogc2VuZG1zZyBvbiBsaXN0ZW5pbmcgc29j a2V0LCBFUElQRSBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypzZW5kbXNnICgpIFRFU1QzOiBzZW5k bXNnIG9uIGxpc3RlbmluZyBzb2NrZXQsIEVQSVBFIEV4cGVjdGVkIGVycm9yKi8KPiAgIAljb3Vu dCA9IHNlbmRtc2cobHN0bl9zaywgJm91dG1lc3NhZ2UsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAh PSAtMSB8fCBlcnJubyAhPSBFUElQRSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmRt c2cgb24gYSBsaXN0ZW5pbmcgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJzZW5kbXNnIG9uIGEgbGlzdGVuaW5nIHNvY2tldCAiCj4gICAJCQkgImNvdW50OiVkLCBlcnJu bzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2co KSBvbiBhIGxpc3RlbmluZyBzb2NrZXQgLSBFUElQRSIpOwo+ICAgCj4gLQkvKnNlbmRtc2cgKCkg VEVTVDQ6IEludmFsaWQgaW92ZWMgcG9pbnRlciBFRkFVTFQsIEV4cGVjdGVkIGVycm9yICovCj4g KwkvKnNlbmRtc2cgKCkgVEVTVDQ6IEludmFsaWQgaW92ZWMgcG9pbnRlciBFRkFVTFQsIEV4cGVj dGVkIGVycm9yKi8KPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopLTE7 Cj4gICAJY291bnQgPSBzZW5kbXNnKHNrLCAmb3V0bWVzc2FnZSwgZmxhZyk7Cj4gICAJaWYgKGNv dW50ICE9IC0xIHx8IGVycm5vICE9IEVGQVVMVCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg InNlbmRtc2cgd2l0aCBpbnZhbGlkIGlvdmVjICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzZW5kbXNnIHdpdGggaW52YWxpZCBpb3ZlYyAiCj4gICAJCQkgInBvaW50ZXIgY291bnQ6 JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi c2VuZG1zZygpIHdpdGggaW52YWxpZCBpb3ZlYyBwdHIgLSBFRkFVTFQiKTsKPiAtCj4gKwkKPiAg IAlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiAgIAo+IC0JLypzZW5kbXNnICgpIFRF U1Q1OiBJbnZhbGlkIGlvdmVjIGNvdW50IEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCW91 dG1lc3NhZ2UubXNnX2lvdmxlbiA9IDA7Cj4gKwkvKnNlbmRtc2cgKCkgVEVTVDU6IEludmFsaWQg aW92ZWMgY291bnQgRUlOVkFMLCBFeHBlY3RlZCBlcnJvciovCj4gKyAgICAgICAgb3V0bWVzc2Fn ZS5tc2dfaW92bGVuID0gMDsKPiAgIAljb3VudCA9IHNlbmRtc2coc2ssICZvdXRtZXNzYWdlLCBm bGFnKTsKPiAgIAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRUlOVkFMKQo+IC0JCXRzdF9i cmttKFRCUk9LLCBOVUxMLCAic2VuZG1zZyB3aXRoIGludmFsaWQgaW92ZWMgIgo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmRtc2cgd2l0aCBpbnZhbGlkIGlvdmVjICIKPiAgIAkJ CSAibGVuZ3RoIGNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0 c3RfcmVzbShUUEFTUywgInNlbmRtc2coKSB3aXRoIGludmFsaWQgaW92ZWMgbGVuZ3RoIC0gRUlO VkFMIik7Cj4gICAKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0KPiAtCS8qc2Vu ZG1zZyAoKSBURVNUNjogSW52YWxpZCBtc2doZHIgcG9pbnRlciBFRkFVTFQsIEV4cGVjdGVkIGVy cm9yICovCj4gKwkKPiArCS8qc2VuZG1zZyAoKSBURVNUNjogSW52YWxpZCBtc2doZHIgcG9pbnRl ciBFRkFVTFQsIEV4cGVjdGVkIGVycm9yKi8KPiAgIAljb3VudCA9IHNlbmRtc2coc2ssIChzdHJ1 Y3QgbXNnaGRyICopLTEsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAhPSAtMSB8fCBlcnJubyAhPSBF RkFVTFQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kbXNnIHdpdGggaW52YWxpZCBt c2doZHIgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmRtc2cgd2l0aCBpbnZh bGlkIG1zZ2hkciAiCj4gICAJCQkgInBvaW50ZXIgY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQs IGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZG1zZygpIHdpdGggaW52YWxp ZCBtc2doZHIgcHRyIC0gRUZBVUxUIik7Cj4gICAKPiAtCS8qc2VuZG1zZyAoKSBURVNUNzogSW52 YWxpZCBzaW5mbyBmbGFnIEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiArCS8qc2VuZG1zZyAo KSBURVNUNzogSW52YWxpZCBzaW5mbyBmbGFnIEVJTlZBTCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICAg CXNpbmZvLT5zaW5mb19mbGFncyA9IDk5OTsKPiAgIAljb3VudCA9IHNlbmRtc2coc2ssICZvdXRt ZXNzYWdlLCAtMSk7Cj4gICAJaWYgKGNvdW50ICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkKPiAt CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmRtc2cgd2l0aCBpbnZhbGlkIHNpbmZvICIKPiAr CQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNnIHdpdGggaW52YWxpZCBzaW5mbyAi Cj4gICAJCQkgImZsYWdzIGNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2coKSB3aXRoIGludmFsaWQgc2luZm8gZmxhZ3Mg LSBFSU5WQUwiKTsKPiAgIAo+IC0JLypzZW5kbXNnICgpIFRFU1Q4OiBTQ1RQX0VPRiBmbGFnIEVJ TlZBTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiArCS8qc2VuZG1zZyAoKSBURVNUODogU0NUUF9FT0Yg ZmxhZyBFSU5WQUwsIEV4cGVjdGVkIGVycm9yKi8KPiAgIAlzaW5mby0+c2luZm9fZmxhZ3MgPSBT Q1RQX0VPRjsKPiAgIAljb3VudCA9IHNlbmRtc2coc2ssICZvdXRtZXNzYWdlLCBmbGFnKTsKPiAg IAlpZiAoY291bnQgIT0gLTEgfHwgZXJybm8gIT0gRUlOVkFMKQo+IC0JCXRzdF9icmttKFRCUk9L LCBOVUxMLCAic2VuZG1zZyB3aXRoIFNDVFBfRU9GIGZsYWcgIgo+ICsJCXRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgInNlbmRtc2cgd2l0aCBTQ1RQX0VPRiBmbGFnICIKPiAgIAkJCSAiY291bnQ6 JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi c2VuZG1zZygpIHdpdGggU0NUUF9FT0YgZmxhZyAtIEVJTlZBTCIpOwo+ICAgCj4gLQkvKnNlbmRt c2cgKCkgVEVTVDk6IFNDVFBfQUJPUlQgZmxhZyBFSU5WQUwsIEV4cGVjdGVkIGVycm9yICovCj4g KwkvKnNlbmRtc2cgKCkgVEVTVDk6IFNDVFBfQUJPUlQgZmxhZyBFSU5WQUwsIEV4cGVjdGVkIGVy cm9yKi8KPiAgIAlzaW5mby0+c2luZm9fZmxhZ3MgPSBTQ1RQX0FCT1JUOwo+ICAgCWNvdW50ID0g c2VuZG1zZyhzaywgJm91dG1lc3NhZ2UsIGZsYWcpOwo+ICAgCWlmIChjb3VudCAhPSAtMSB8fCBl cnJubyAhPSBFSU5WQUwpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kbXNnIHdpdGgg U0NUUF9BQk9SVCBmbGFnICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNn IHdpdGggU0NUUF9BQk9SVCBmbGFnICIKPiAgIAkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291 bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZG1zZygpIHdpdGggU0NU UF9BQk9SVCBmbGFnIC0gRUlOVkFMIik7Cj4gICAKPiAtCXNpbmZvLT5zaW5mb19mbGFncyA9IDA7 Cj4gLQo+IC0JdGVzdF9jb25uZWN0KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSZsc3RuX2FkZHIs IGxlbik7Cj4gLQo+IC0JdGVzdF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2UsIGZsYWcsIHN0cmxl bihtZXNzYWdlKSArIDEpOwo+ICsJc2luZm8tPnNpbmZvX2ZsYWdzID0gMDsKPiArCQo+ICsJdGVz dF9jb25uZWN0KHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBsZW4pOwo+ICsJ CQo+ICsJdGVzdF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2UsIGZsYWcsIHN0cmxlbihtZXNzYWdl KSsxKTsKPiAgIAo+ICAgCWNsb3NlKHNrMSk7Cj4gICAJYWNwdDFfc2sgPSB0ZXN0X2FjY2VwdChs c3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgJmxlbik7Cj4gICAKPiAtCS8q c2VuZG1zZyAoKSBURVNUMTA6c2VuZG1zZyBvbiBjbG9zZWQgYXNzb2NpYXRpb24sIEVQSVBFIEV4 cGVjdGVkIGVycm9yICovCj4gKwkvKnNlbmRtc2cgKCkgVEVTVDEwOnNlbmRtc2cgb24gY2xvc2Vk IGFzc29jaWF0aW9uLCBFUElQRSBFeHBlY3RlZCBlcnJvciovCj4gICAJY291bnQgPSBzZW5kbXNn KGFjcHQxX3NrLCAmb3V0bWVzc2FnZSwgZmxhZyk7Cj4gICAJaWYgKGNvdW50ICE9IC0xIHx8IGVy cm5vICE9IEVQSVBFKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2VuZG1zZyBvbiBhIGNs b3NlZCBhc3NvY2lhdGlvbiAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2VuZG1z ZyBvbiBhIGNsb3NlZCBhc3NvY2lhdGlvbiAiCj4gICAJCQkgImNvdW50OiVkLCBlcnJubzolZCIs IGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2coKSBvbiBh IGNsb3NlZCBhc3NvY2lhdGlvbiAtIEVQSVBFIik7Cj4gICAKPiArCWNsb3NlKGFjcHQxX3NrKTsK PiAgIAljbG9zZShzayk7Cj4gICAJY2xvc2UobHN0bl9zayk7Cj4gICAJY2xvc2UoYWNwdF9zayk7 Cj4gICAKPiAtCXNrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RP X1NDVFApOwo+ICsgICAgICAgIHNrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFN LCBJUFBST1RPX1NDVFApOwo+ICAgCj4gLQlsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3Ms IFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIGxzdG5fc2sgPSB0ZXN0X3Nv Y2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAgIAljb25u X2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQljb25uX2FkZHIuc2luX2FkZHIuc19hZGRy ID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNvbm5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBf VEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBf SVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9U RVNUUE9SVF8xKTsKPiAgIAo+ICAgCWxzdG5fYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAt CWxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+IC0JbHN0bl9h ZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiArICAgICAgICBsc3RuX2Fk ZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiArICAgICAgICBsc3RuX2Fk ZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICAgCj4gLQkvKkJpbmRpbmcg dGhlIGxpc3RlbiBzb2NrZXQgKi8KPiAtCXRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2th ZGRyICopJmxzdG5fYWRkciwgc2l6ZW9mKGxzdG5fYWRkcikpOwo+ICsJLypCaW5kaW5nIHRoZSBs aXN0ZW4gc29ja2V0Ki8KPiArICAgICAgICB0ZXN0X2JpbmQobHN0bl9zaywgKHN0cnVjdCBzb2Nr YWRkciAqKSAmbHN0bl9hZGRyLCBzaXplb2YobHN0bl9hZGRyKSk7Cj4gICAKPiAtCS8qTGlzdGVu aW5nIHRoZSBzb2NrZXQgKi8KPiAtCXRlc3RfbGlzdGVuKGxzdG5fc2ssIDEwKTsKPiArICAgICAg ICAvKkxpc3RlbmluZyB0aGUgc29ja2V0Ki8KPiArICAgICAgICB0ZXN0X2xpc3Rlbihsc3RuX3Nr LCAxMCk7Cj4gICAKPiAgIAlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKPiAgIAlm bGFnID0gTVNHX05PU0lHTkFMOwo+IC0KPiAtCXRlc3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4gKwkKPiArCXRlc3RfY29ubmVjdChzaywgKHN0cnVj dCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBsZW4pOwo+ICAgCj4gICAJYWNwdF9zayA9IHRlc3Rf YWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ICAg Cj4gICAJbWVtc2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkpOwo+IC0JYnVm ZmVyX3NuZCA9IG1hbGxvYyhSRUFMTFlfQklHKTsKPiAtCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1l ID0gJnN2cl9hZGRyOwo+IC0Jb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihzdnJfYWRk cik7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiAtCW91dG1lc3NhZ2UubXNn X2lvdmxlbiA9IDE7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0Y21zZzsKPiAtCW91 dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gLQlvdXRtZXNzYWdl Lm1zZ19mbGFncyA9IDA7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZzdnJfYWRk cjsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN2cl9hZGRyKTsK PiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiArICAgICAgICBvdXRt ZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2wg PSBvdXRjbXNnOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yo b3V0Y21zZyk7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICAgCj4gICAJ Y21zZyA9IENNU0dfRklSU1RIRFIoJm91dG1lc3NhZ2UpOwo+IC0JY21zZy0+Y21zZ19sZXZlbCA9 IElQUFJPVE9fU0NUUDsKPiAtCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNWOwo+IC0JY21z Zy0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwo+ICsgICAgICAg IGNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7Cj4gKyAgICAgICAgY21zZy0+Y21zZ190 eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gKyAgICAgICAgY21zZy0+Y21zZ19sZW4gPSBDTVNHX0xFTihz aXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNn X2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsKPiAgIAlzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9z bmRyY3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOwo+IC0JbWVtc2V0KHNpbmZvLCAweDAwLCBzaXpl b2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0KPiAtCWlvdi5pb3ZfYmFzZSA9IGJ1ZmZl cl9zbmQ7Cj4gLQlpb3YuaW92X2xlbiA9IFJFQUxMWV9CSUc7Cj4gLQlvdXRtZXNzYWdlLm1zZ19p b3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiArICAgICAgICBtZW1zZXQoc2luZm8sIDB4MDAsIHNp emVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Cj4gICAKPiAtCW91dG1lc3NhZ2UubXNnX2lv di0+aW92X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5t c2dfaW92LT5pb3ZfYmFzZSA9IG1lc3NhZ2U7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92 LT5pb3ZfbGVuID0gc3RybGVuKG1lc3NhZ2UpICsgMTsKPiAgIAo+ICAgCW1lbXNldCgmaW5tZXNz YWdlLCAwLCBzaXplb2YoaW5tZXNzYWdlKSk7Cj4gLQlidWZmZXJfcmN2ID0gbWFsbG9jKFJFQUxM WV9CSUcpOwo+ICsgICAgICAgIGJ1ZmZlcl9yY3YgPSBtYWxsb2MoUkVBTExZX0JJRyk7Cj4gICAK PiAtCWlvdl9yY3YuaW92X2Jhc2UgPSBidWZmZXJfcmN2Owo+IC0JaW92X3Jjdi5pb3ZfbGVuID0g UkVBTExZX0JJRzsKPiAtCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdl9yY3Y7Cj4gLQlpbm1lc3Nh Z2UubXNnX2lvdmxlbiA9IDE7Cj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2wgPSBpbmNtc2c7Cj4g LQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiArICAgICAgICBp b3ZfcmN2Lmlvdl9iYXNlID0gYnVmZmVyX3JjdjsKPiArICAgICAgICBpb3ZfcmN2Lmlvdl9sZW4g PSBSRUFMTFlfQklHOwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfaW92ID0gJmlvdl9yY3Y7Cj4g KyAgICAgICAgaW5tZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsgICAgICAgIGlubWVzc2FnZS5t c2dfY29udHJvbCA9IGluY21zZzsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4g PSBzaXplb2YoaW5jbXNnKTsKPiAgIAo+ICAgCW1zZ19jb3VudCA9IHN0cmxlbihtZXNzYWdlKSAr IDE7Cj4gICAKPiAtCS8qc2VuZG1zZygpIFRFU1QxMTogU2VuZGluZyBkYXRhIGZyb20gc2VydmVy IHNvY2tldCB0byBjbGllbnQgc29ja2V0ICovCj4gKwkvKnNlbmRtc2coKSBURVNUMTE6IFNlbmRp bmcgZGF0YSBmcm9tIHNlcnZlciBzb2NrZXQgdG8gY2xpZW50IHNvY2tldCovCj4gICAJY291bnQg PSBzZW5kbXNnKGFjcHRfc2ssICZvdXRtZXNzYWdlLCBmbGFnKTsKPiAgIAlpZiAoY291bnQgIT0g bXNnX2NvdW50KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2VuZG1zZyBmcm9tIGFjY2Vw dCBzb2NrZXQgdG8gIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmRtc2cgZnJv bSBhY2NlcHQgc29ja2V0IHRvICIKPiAgIAkJCSAiY2xpZW50IGNvdW50OiVkLCBlcnJubzolZCIs IGNvdW50LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2coKSBmcm9t IGFjY2VwdCBzb2NrZXQgdG8gY2xpZW50IC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJY291bnQgPSB0 ZXN0X3JlY3Ztc2coc2ssICZpbm1lc3NhZ2UsIGZsYWcpOwo+IC0JdGVzdF9jaGVja19tc2dfZGF0 YSgmaW5tZXNzYWdlLCBjb3VudCwgbXNnX2NvdW50LCBNU0dfRU9SLCAwLCAwKTsKPiArICAgICAg ICB0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGNvdW50LCBtc2dfY291bnQsIE1TR19F T1IsIDAsIDApOwo+ICAgCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmNvbm5fYWRkcjsKPiAt CW91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YoY29ubl9hZGRyKTsKPiAtCS8qc2VuZG1z ZygpIFRFU1QxMjogU2VuZGluZyBkYXRhIGZyb20gY2xpZW50IHNvY2tldCB0byBzZXJ2ZXIgc29j a2V0ICovCj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZjb25uX2FkZHI7Cj4gKyAg ICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihjb25uX2FkZHIpOwo+ICsJLypz ZW5kbXNnKCkgVEVTVDEyOiBTZW5kaW5nIGRhdGEgZnJvbSBjbGllbnQgc29ja2V0IHRvIHNlcnZl ciBzb2NrZXQqLwo+ICAgCWNvdW50ID0gc2VuZG1zZyhzaywgJm91dG1lc3NhZ2UsIGZsYWcpOwo+ ICAgCWlmIChjb3VudCAhPSBtc2dfY291bnQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz ZW5kbXNnIGZyb20gY2xpZW50IHRvIHNlcnZlciAiCj4gLQkJCSAiY291bnQ6JWQsIGVycm5vOiVk IiwgY291bnQsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNn IGZyb20gY2xpZW50IHRvIHNlcnZlciAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291 bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNT LCAic2VuZG1zZygpIGZyb20gY2xpZW50IHRvIHNlcnZlciAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAg CWNvdW50ID0gdGVzdF9yZWN2bXNnKGFjcHRfc2ssICZpbm1lc3NhZ2UsIGZsYWcpOwo+IC0JdGVz dF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBjb3VudCwgbXNnX2NvdW50LCBNU0dfRU9SLCAw LCAwKTsKPiArICAgICAgICB0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGNvdW50LCBt c2dfY291bnQsIE1TR19FT1IsIDAsIDApOwo+ICAgCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0g JmNvbm5fYWRkcjsKPiAtCW91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YoY29ubl9hZGRy KTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmNvbm5fYWRkcjsKPiArICAgICAg ICBvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGNvbm5fYWRkcik7Cj4gICAJY2xvc2Uo c2spOwo+ICAgCWNsb3NlKGFjcHRfc2spOwo+ICAgCXNrMSA9IHRlc3Rfc29ja2V0KHBmX2NsYXNz LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+IC0JLypzZW5kbXNnKCkgVEVTVDEz OiBTZW5kaW5nIGRhdGEgZnJvbSB1bmNvbm5lY3RlZCBjbGllbnQgc29ja2V0IHRvCj4gLQkgICBz ZXJ2ZXIgc29ja2V0ICovCj4gKwkvKnNlbmRtc2coKSBURVNUMTM6IFNlbmRpbmcgZGF0YSBmcm9t IHVuY29ubmVjdGVkIGNsaWVudCBzb2NrZXQgdG8KPiArCXNlcnZlciBzb2NrZXQqLwo+ICAgCWNv dW50ID0gc2VuZG1zZyhzazEsICZvdXRtZXNzYWdlLCBmbGFnKTsKPiAgIAlpZiAoY291bnQgIT0g bXNnX2NvdW50KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2VuZG1zZyBmcm9tIHVuY29u bmVjdGVkIGNsaWVudCB0byAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2VuZG1z ZyBmcm9tIHVuY29ubmVjdGVkIGNsaWVudCB0byAiCj4gICAJCQkgInNlcnZlciBjb3VudDolZCwg ZXJybm86JWQiLCBjb3VudCwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5k bXNnKCkgZnJvbSB1bmNvbm5lY3RlZCBjbHQgdG8gc2VydmVyIC0gU1VDQ0VTUyIpOwo+IEBAIC0z NTUsMjMgKzM0NCwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWFj cHRfc2sgPSB0ZXN0X2FjY2VwdChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJnN2cl9hZGRy LCAmbGVuKTsKPiAgIAo+ICAgCWNvdW50ID0gdGVzdF9yZWN2bXNnKGFjcHRfc2ssICZpbm1lc3Nh Z2UsIGZsYWcpOwo+IC0JdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBjb3VudCwgbXNn X2NvdW50LCBNU0dfRU9SLCAwLCAwKTsKPiArICAgICAgICB0ZXN0X2NoZWNrX21zZ19kYXRhKCZp bm1lc3NhZ2UsIGNvdW50LCBtc2dfY291bnQsIE1TR19FT1IsIDAsIDApOwo+ICAgCj4gICAJdGVz dF9zaHV0ZG93bihzazEsIFNIVVRfUkQpOwo+ICAgCj4gLQkvKnNlbmRtc2coKSBURVNUMTQ6IFNl bmRpbmcgYSBtZXNzYWdlIG9uIFNIVVRfUkQgc29ja2V0ICovCj4gKwkvKnNlbmRtc2coKSBURVNU MTQ6IFNlbmRpbmcgYSBtZXNzYWdlIG9uIFNIVVRfUkQgc29ja2V0Ki8KPiAgIAljb3VudCA9IHNl bmRtc2coc2sxLCAmb3V0bWVzc2FnZSwgZmxhZyk7Cj4gICAJaWYgKGNvdW50ICE9IG1zZ19jb3Vu dCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmRtc2cgb24gYSBTSFVUX1JEIHNvY2tl dCAiCj4gLQkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNnIG9uIGEgU0hVVF9SRCBzb2NrZXQgIgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgImNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJu byk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2coKSBvbiBhIFNIVVRfUkQgc29j a2V0IC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJY291bnQgPSB0ZXN0X3JlY3Ztc2coYWNwdF9zaywg JmlubWVzc2FnZSwgZmxhZyk7Cj4gLQl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGNv dW50LCBtc2dfY291bnQsIE1TR19FT1IsIDAsIDApOwo+ICsgICAgICAgIHRlc3RfY2hlY2tfbXNn X2RhdGEoJmlubWVzc2FnZSwgY291bnQsIG1zZ19jb3VudCwgTVNHX0VPUiwgMCwgMCk7Cj4gICAK PiAgIAljbG9zZShzazEpOwo+ICAgCWNsb3NlKGxzdG5fc2spOwo+ICAgCWNsb3NlKGFjcHRfc2sp Owo+IC0JdHN0X2V4aXQoKTsKPiArCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc2VuZHRvLmMgYi90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc2VuZHRvLmMKPiBpbmRl eCBkNTc2ZDc3Li44ZjU4MDRjIDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAv ZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zZW5kdG8uYwo+ICsrKyBiL3Rlc3RjYXNlcy9uZXR3b3Jr L3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zZW5kdG8uYwo+IEBAIC0xLDggKzEsOCBAQAo+ IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJu ZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMyBIZXdsZXR0LVBhY2th cmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3Jw LiAyMDA0Cj4gICAgKgo+IC0gKiBUaGlzIGZpbGUgaGFzIHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUg c2VuZHRvICgpIGNhbGwKPiArICogVGhpcyBmaWxlIGhhcyB0ZXN0IGNhc2VzIHRvIHRlc3QgdGhl IHNlbmR0byAoKSBjYWxsCj4gICAgKiBmb3IgMS0xIHN0eWxlIHNvY2tldHMKPiAgICAqCj4gICAg KiBURVNUMTogU2VuZGluZyBkYXRhIGZyb20gY2xpZW50IHNvY2tldCB0byBzZXJ2ZXIgc29ja2V0 Cj4gQEAgLTEwLDEzICsxMCwxMyBAQAo+ICAgICogVEVTVDM6IFNlbmRpbmcgZGF0YSBmcm9tIHVu Y29ubmVjdGVkIGNsaWVudCBzb2NrZXQgdG8gc2VydmVyCj4gICAgKiBURVNUNDogc2VuZGluZyBw YXJ0aWFsIGRhdGEgZnJvbSBhIGJ1ZmZlcgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNl IGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVu dGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICog YW55IGxhdGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVt ZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NU UCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAg KiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioq KioKPiAgICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAtNDUsNyArNDUsNyBAQAo+ICAgI2luY2x1ZGUgPHN0cmlu Zy5oPgo+ICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KPiAtI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4JCS8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICsj aW5jbHVkZSA8bmV0aW5ldC9pbi5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICAg I2luY2x1ZGUgPGFycGEvaW5ldC5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVk ZSA8bmV0aW5ldC9zY3RwLmg+Cj4gQEAgLTU3LDEwNyArNTcsMTA4IEBAIGNoYXIgKlRDSUQgPSBf X0ZJTEVfXzsKPiAgIGludCBUU1RfVE9UQUwgPSA0Owo+ICAgaW50IFRTVF9DTlQgPSAwOwo+ICAg Cj4gLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2ludAo+ICttYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4gICB7Cj4gLQlpbnQgbXNnX2NvdW50Owo+ICsgICAgICAgIGlu dCBtc2dfY291bnQ7Cj4gICAJc29ja2xlbl90IGxlbjsKPiAtCWludCBzaywgc2sxLCBwZl9jbGFz cywgbHN0bl9zaywgYWNwdF9zaywgZmxhZzsKPiAtCWNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdv cmxkIVxuIjsKPiAtCWNoYXIgKm1lc3NhZ2VfcmN2Owo+IC0JaW50IGNvdW50Owo+IC0KPiAtCXN0 cnVjdCBzb2NrYWRkcl9pbiBjb25uX2FkZHIsIGxzdG5fYWRkciwgc3ZyX2FkZHI7Cj4gKwlpbnQg c2ssc2sxLHBmX2NsYXNzLGxzdG5fc2ssYWNwdF9zayxmbGFnOwo+ICsgICAgICAgIGNoYXIgKm1l c3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAgICBjaGFyICptZXNzYWdlX3JjdjsK PiArICAgICAgICBpbnQgY291bnQ7Cj4gKwkKPiArICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g Y29ubl9hZGRyLGxzdG5fYWRkcixzdnJfYWRkcjsKPiAgIAo+ICAgCS8qIFJhdGhlciB0aGFuIGZm bHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVm ZmVyZAo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAtCXNl dHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgICAqIGJlIHVuYnVmZmVy ZAo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYs IDApOwo+ICsgICAgICAgIHNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICAgCj4g LQlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gKyAgICAgICAgcGZfY2xhc3MgPSBQRl9JTkVUOwo+ICAg Cj4gLQlzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQ KTsKPiArICAgICAgICBzayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQ Uk9UT19TQ1RQKTsKPiAgIAo+IC0JbHN0bl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NL X1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBsc3RuX3NrID0gdGVzdF9zb2NrZXQo cGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJbWVzc2FnZV9y Y3YgPSBtYWxsb2MoNTEyKTsKPiAgIAljb25uX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4g LQljb25uX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNvbm5f YWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgY29ubl9h ZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgY29ubl9h ZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+ICAgCWxzdG5fYWRk ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBT Q1RQX0lQX0xPT1BCQUNLOwo+IC0JbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNU UE9SVF8xKTsKPiArICAgICAgICBsc3RuX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9M T09QQkFDSzsKPiArICAgICAgICBsc3RuX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQ T1JUXzEpOwo+ICAgCj4gLQkvKkJpbmRpbmcgdGhlIGxpc3RlbiBzb2NrZXQgKi8KPiAtCXRlc3Rf YmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmxzdG5fYWRkciwgc2l6ZW9mKGxzdG5f YWRkcikpOwo+ICsJLypCaW5kaW5nIHRoZSBsaXN0ZW4gc29ja2V0Ki8KPiArICAgICAgICB0ZXN0 X2JpbmQobHN0bl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBzaXplb2YobHN0 bl9hZGRyKSk7Cj4gICAKPiAtCS8qTGlzdGVuaW5nIHRoZSBzb2NrZXQgKi8KPiAtCXRlc3RfbGlz dGVuKGxzdG5fc2ssIDEwKTsKPiArICAgICAgICAvKkxpc3RlbmluZyB0aGUgc29ja2V0Ki8KPiAr ICAgICAgICB0ZXN0X2xpc3Rlbihsc3RuX3NrLCAxMCk7Cj4gICAKPiAgIAlsZW4gPSBzaXplb2Yo c3RydWN0IHNvY2thZGRyX2luKTsKPiAgIAlmbGFnID0gTVNHX05PU0lHTkFMOwo+IC0KPiAtCXRl c3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZjb25uX2FkZHIsIGxlbik7Cj4gKwkK PiArCXRlc3RfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmY29ubl9hZGRyLCBsZW4p Owo+ICAgCj4gICAJYWNwdF9zayA9IHRlc3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ICAgCj4gICAJbXNnX2NvdW50ID0gc3RybGVuKG1lc3Nh Z2UpICsgMTsKPiAgIAo+IC0JLypzZW5kdG8oKSBURVNUMTogU2VuZGluZyBkYXRhIGZyb20gY2xp ZW50IHNvY2tldCB0byBzZXJ2ZXIgc29ja2V0ICovCj4gKwkvKnNlbmR0bygpIFRFU1QxOiBTZW5k aW5nIGRhdGEgZnJvbSBjbGllbnQgc29ja2V0IHRvIHNlcnZlciBzb2NrZXQqLwo+ICAgCWNvdW50 ID0gc2VuZHRvKHNrLCBtZXNzYWdlLCBtc2dfY291bnQsIGZsYWcsCj4gLQkJICAgICAgIChjb25z dCBzdHJ1Y3Qgc29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+ICsJCSAgICAgICAoY29uc3Qg c3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIGxlbik7Cj4gICAJaWYgKGNvdW50ICE9IG1z Z19jb3VudCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmR0byBmcm9tIGNsaWVudCB0 byBzZXJ2ZXIgIgo+IC0JCQkgImNvdW50OiVkLCBlcnJubzolZCIsIGNvdW50LCBlcnJubyk7Cj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2VuZHRvIGZyb20gY2xpZW50IHRvIHNlcnZl ciAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291 bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZHRvKCkgZnJvbSBjbGll bnQgdG8gc2VydmVyIC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJdGVzdF9yZWN2KGFjcHRfc2ssIG1l c3NhZ2VfcmN2LCBtc2dfY291bnQsIGZsYWcpOwo+ICAgCj4gLQlzdHJuY3B5KG1lc3NhZ2VfcmN2 LCAiXDAiLCA1MTIpOwo+ICsJc3RybmNweShtZXNzYWdlX3JjdiwiXDAiLDUxMik7Cj4gICAKPiAt CS8qc2VuZHRvKCkgVEVTVDI6IFNlbmRpbmcgZGF0YSBmcm9tIGFjY2VwdCBzb2NrZXQgdG8gY2xp ZW50IHNvY2tldCAqLwo+ICsJLypzZW5kdG8oKSBURVNUMjogU2VuZGluZyBkYXRhIGZyb20gYWNj ZXB0IHNvY2tldCB0byBjbGllbnQgc29ja2V0Ki8KPiAgIAljb3VudCA9IHNlbmR0byhhY3B0X3Nr LCBtZXNzYWdlLCBtc2dfY291bnQsIGZsYWcsCj4gLQkJICAgICAgIChjb25zdCBzdHJ1Y3Qgc29j a2FkZHIgKikmc3ZyX2FkZHIsIGxlbik7Cj4gKwkJICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2Fk ZHIgKikgJnN2cl9hZGRyLCBsZW4pOwo+ICAgCWlmIChjb3VudCAhPSBtc2dfY291bnQpCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kdG8gZnJvbSBhY2NlcHQgc29ja2V0IHRvIGNsaWVu dCAiCj4gLQkJCSAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kdG8gZnJvbSBhY2NlcHQgc29ja2V0IHRvIGNsaWVu dCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bnQ6JWQsIGVycm5vOiVkIiwgY291 bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZHRvKCkgZnJvbSBhY2Nl cHQgc29ja2V0IHRvIGNsaWVudCAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCXRlc3RfcmVjdihzaywg bWVzc2FnZV9yY3YsIG1zZ19jb3VudCwgZmxhZyk7Cj4gICAKPiAtCWNsb3NlKHNrKTsKPiAtCWNs b3NlKGFjcHRfc2spOwo+ICsgICAgICAgIGNsb3NlKHNrKTsKPiArICAgICAgICBjbG9zZShhY3B0 X3NrKTsKPiAgIAo+IC0Jc2sxID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJ UFBST1RPX1NDVFApOwo+ICsgICAgICAgIHNrMSA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NL X1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCS8qc2VuZHRvKCkgVEVTVDM6IFNlbmRp bmcgZGF0YSBmcm9tIHVuY29ubmVjdGVkIGNsaWVudCBzb2NrZXQgdG8KPiAtCSAgIHNlcnZlciBz b2NrZXQgKi8KPiAtCWNvdW50ID0gc2VuZHRvKHNrMSwgbWVzc2FnZSwgbXNnX2NvdW50LCBmbGFn LAo+IC0JCSAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsK PiAtCWlmIChjb3VudCAhPSBtc2dfY291bnQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz ZW5kdG8gZnJvbSB1bmNvbm5lY3RlZCBjbGllbnQgdG8gIgo+ICsgICAgICAgIHNlcnZlciBzb2Nr ZXQqLwo+ICsgICAgICAgIGNvdW50ID0gc2VuZHRvKHNrMSwgbWVzc2FnZSwgbXNnX2NvdW50LCBm bGFnLAo+ICsJCSAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopICZjb25uX2FkZHIsIGxl bik7Cj4gKyAgICAgICAgaWYgKGNvdW50ICE9IG1zZ19jb3VudCkKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJzZW5kdG8gZnJvbSB1bmNvbm5lY3RlZCBjbGllbnQgdG8gIgo+ICAgCQkJ ICJzZXJ2ZXIgY291bnQ6JWQsIGVycm5vOiVkIiwgY291bnQsIGVycm5vKTsKPiAgIAo+ICAgCXRz dF9yZXNtKFRQQVNTLCAic2VuZHRvKCkgZnJvbSB1bmNvbm5lY3RlZCBjbGllbnQgdG8gc2VydmVy IC0gU1VDQ0VTUyIpOwo+ICAgCj4gLQlhY3B0X3NrID0gdGVzdF9hY2NlcHQobHN0bl9zaywgKHN0 cnVjdCBzb2NrYWRkciAqKSZzdnJfYWRkciwgJmxlbik7Cj4gKyAgICAgICAgYWNwdF9zayA9IHRl c3RfYWNjZXB0KGxzdG5fc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2FkZHIsICZsZW4pOwo+ ICAgCj4gLQl0ZXN0X3JlY3YoYWNwdF9zaywgbWVzc2FnZV9yY3YsIG1zZ19jb3VudCwgZmxhZyk7 Cj4gKyAgICAgICAgdGVzdF9yZWN2KGFjcHRfc2ssIG1lc3NhZ2VfcmN2LCBtc2dfY291bnQsIGZs YWcpOwo+ICAgCj4gLQkvKnNlbmQoKSBURVNUNDogU2VuZGluZyBsZXNzIG51bWJlciBvZiBkYXRh IGZyb20gdGhlIGJ1ZmZlciAqLwo+IC0JLypTZW5kaW5nIG9ubHkgNSBieXRlcyBzbyB0aGF0IG9u bHkgaGVsbG8gaXMgcmVjZWl2ZWQgKi8KPiAtCXRlc3Rfc2VuZHRvKHNrLCBtZXNzYWdlLCA1LCBm bGFnLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkciwKPiArCS8qc2VuZCgpIFRF U1Q0OiBTZW5kaW5nIGxlc3MgbnVtYmVyIG9mIGRhdGEgZnJvbSB0aGUgYnVmZmVyKi8KPiArCS8q U2VuZGluZyBvbmx5IDUgYnl0ZXMgc28gdGhhdCBvbmx5IGhlbGxvIGlzIHJlY2VpdmVkKi8KPiAr CXRlc3Rfc2VuZHRvKHNrLCBtZXNzYWdlLCA1ICwgZmxhZywgKGNvbnN0IHN0cnVjdCBzb2NrYWRk ciAqKSZjb25uX2FkZHIsCj4gICAJCSAgICBsZW4pOwo+ICAgCXRlc3RfcmVjdihhY3B0X3NrLCBt ZXNzYWdlX3JjdiwgNSwgZmxhZyk7Cj4gLQo+ICsJCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5k dG8oKSBwYXJ0aWFsIGRhdGEgZnJvbSBhIGJ1ZmZlciAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCWNs b3NlKHNrMSk7Cj4gICAJY2xvc2UobHN0bl9zayk7Cj4gICAJY2xvc2UoYWNwdF9zayk7Cj4gLQl0 c3RfZXhpdCgpOwo+IC0KPiArCXJldHVybiAwOwo+ICsJCj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rl c3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zaHV0ZG93bi5jIGIv dGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3NodXRkb3duLmMK PiBpbmRleCAwMmM4YmY4Li4zNTE5NDM0IDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3Jr L3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zaHV0ZG93bi5jCj4gKysrIGIvdGVzdGNhc2Vz L25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3NodXRkb3duLmMKPiBAQCAtMSw0 ICsxLDQgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8q IFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSGV3 bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUAo+ICAgICogKEMpIENvcHlyaWdo dCBJQk0gQ29ycC4gMjAwNAo+ICAgICoKPiBAQCAtMTEsMTMgKzExLDEzIEBACj4gICAgKiBURVNU NTogc2h1dGRvd24gd2l0aCBTSFVUX1JEV1IgZmxhZyB0byBkaXNhYmxlIG5ldyByZWNlaXZlL3Nl bmQKPiAgICAqIFRFU1Q2OiBVbmNvbm5lY3RlZCBzb2NrZXQKPiAgICAqCj4gLSAqIFRoZSBTQ1RQ IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NU UCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlv bikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJl bmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiAr ICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioq KioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTU5LDM0ICs1OSwzNSBAQCBpbnQgVFNU X0NOVCA9IDA7Cj4gICAKPiAgICNkZWZpbmUgTUFYX0NMSUVOVFMgMTAKPiAgIAo+IC1pbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICtpbnQKPiArbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+ICAgewo+IC0JaW50IGNsbnRfc2tbTUFYX0NMSUVOVFNdLCBhY3B0X3NrW01BWF9D TElFTlRTXSwgc2s7Cj4gKwlpbnQgY2xudF9za1tNQVhfQ0xJRU5UU10sIGFjcHRfc2tbTUFYX0NM SUVOVFNdLHNrOwo+ICAgCWludCBsc3RuX3NrOwo+ICAgCXN0cnVjdCBzb2NrYWRkcl9pbiBsc3Ru X2FkZHIsIGFjcHRfYWRkcjsKPiAgIAlzb2NrbGVuX3QgYWRkcmxlbjsKPiAgIAlpbnQgZXJyb3Is IGk7Cj4gLQljaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4gKyAgICAgICAgY2hh ciAqbWVzc2FnZSA9ICJoZWxsbywgd29ybGQhXG4iOwo+ICAgCWNoYXIgbXNnYnVmWzEwMF07Cj4g ICAJaW50IHBmX2NsYXNzOwo+ICAgCj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdo b3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZlcmVkLgo+IC0JICov Cj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAtCXNldHZidWYoc3RkZXJy LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgIC8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRo cm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiArCSAqIGJlIHVuYnVmZmVyZWQuCj4g KwkgKi8KPiArCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsJc2V0dmJ1Zihz dGRlcnIsIE5VTEwsIF9JT05CRiwgMCk7Cj4gICAKPiAtCS8qIEluaXRpYWxpemUgdGhlIHNlcnZl ciBhbmQgY2xpZW50IGFkZHJlc3Nlcy4gKi8KPiArCS8qIEluaXRpYWxpemUgdGhlIHNlcnZlciBh bmQgY2xpZW50IGFkZHJlc3Nlcy4gKi8KPiAgIAlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gICAKPiAg IAlsc3RuX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAJbHN0bl9hZGRyLnNpbl9hZGRy LnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gICAJbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRv bnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0Jc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywg U09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gLQlsc3RuX3NrID0gdGVzdF9zb2NrZXQocGZf Y2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIHNrID0gdGVzdF9z b2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIGxz dG5fc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7 Cj4gICAKPiAtCXRlc3RfYmluZChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmxzdG5fYWRk ciwgc2l6ZW9mKGxzdG5fYWRkcikpOwo+ICsJdGVzdF9iaW5kKGxzdG5fc2ssIChzdHJ1Y3Qgc29j a2FkZHIgKikgJmxzdG5fYWRkciwgc2l6ZW9mKGxzdG5fYWRkcikpOwo+ICAgCj4gICAJdGVzdF9s aXN0ZW4obHN0bl9zaywgTUFYX0NMSUVOVFMpOwo+ICAgCj4gQEAgLTk5LDcwICsxMDAsNzAgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFY X0NMSUVOVFM7IGkrKykgewo+ICAgCQlhZGRybGVuID0gc2l6ZW9mKGFjcHRfYWRkcik7Cj4gICAJ CWFjcHRfc2tbaV0gPSB0ZXN0X2FjY2VwdChsc3RuX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmFj cHRfYWRkciwKPiAtCQkJCQkgJmFkZHJsZW4pOwo+ICsJCQkJCSAmYWRkcmxlbik7Cj4gICAJfQo+ ICAgCj4gLQkvKnNodXRkb3duKCkgVEVTVDE6IEJhZCBzb2NrZXQgZGVzY3JpcHRvciwgRUJBREYg RXhwZWN0ZWQgZXJyb3IgKi8KPiArCS8qc2h1dGRvd24oKSBURVNUMTogQmFkIHNvY2tldCBkZXNj cmlwdG9yLCBFQkFERiBFeHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3IgPSBzaHV0ZG93bigtMSwg U0hVVF9XUik7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVCQURGKQo+IC0JCXRz dF9icmttKFRCUk9LLCBOVUxMLCAic2h1dGRvd24gd2l0aCBhIGJhZCBzb2NrZXQgIgo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNodXRkb3duIHdpdGggYSBiYWQgc29ja2V0ICIKPiAg IAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9y ZXNtKFRQQVNTLCAic2h1dGRvd24oKSB3aXRoIGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIC0gRUJB REYiKTsKPiAgIAo+IC0JLypzaHV0ZG93bigpIFRFU1QyOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNP Q0sgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gc2h1dGRvd24oMCwgU0hVVF9XUik7Cj4g KwkvKnNodXRkb3duKCkgVEVTVDI6IEludmFsaWQgc29ja2V0LCBFTk9UU09DSyBFeHBlY3RlZCBl cnJvciovCj4gKyAgICAgICAgZXJyb3IgPSBzaHV0ZG93bigwLCBTSFVUX1dSKTsKPiAgIAlpZiAo ZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRU5PVFNPQ0spCj4gLQkJdHN0X2Jya20oVEJST0ssIE5V TEwsICJzaHV0ZG93biB3aXRoIGFuIGludmFsaWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJzaHV0ZG93biB3aXRoIGFuIGludmFsaWQgc29ja2V0ICIKPiAgIAkJCSAi ZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQ QVNTLCAic2h1dGRvd24oKSB3aXRoIGFuIGludmFsaWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAg IAo+ICAgCWVycm5vID0gMDsKPiAtCS8qRG8gYSBzZW5kIGZpcnN0IGJlZm9yZSBkb2luZyBzaHV0 ZG93biAqLwo+ICsJLypEbyBhIHNlbmQgZmlyc3QgYmVmb3JlIGRvaW5nIHNodXRkb3duKi8KPiAg IAl0ZXN0X3NlbmQoYWNwdF9za1swXSwgbWVzc2FnZSwgc3RybGVuKG1lc3NhZ2UpLCAwKTsKPiAg IAo+IC0JLypzaHV0ZG93bigpIFRFU1QzOiBzaHV0ZG93biB3aXRoIFNIVVRfV1IgZmxhZyB0byBk aXNhYmxlIG5ldyBzZW5kICovCj4gKwkvKnNodXRkb3duKCkgVEVTVDM6IHNodXRkb3duIHdpdGgg U0hVVF9XUiBmbGFnIHRvIGRpc2FibGUgbmV3IHNlbmQqLwo+ICAgCWVycm9yID0gc2h1dGRvd24o Y2xudF9za1swXSwgU0hVVF9XUik7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShU QlJPSywgTlVMTCwgInNodXRkb3duIHdpdGggU0hVVF9XUiBmbGFnICIKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJzaHV0ZG93biB3aXRoIFNIVVRfV1IgZmxhZyAiCj4gICAJCQkgImVy cm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAtCS8qIFJlYWRpbmcgb24g YSBzb2NrZXQgdGhhdCBoYXMgcmVjZWl2ZWQgU0hVVERPV04gc2hvdWxkIHJldHVybiAwCj4gKwkv KiBSZWFkaW5nIG9uIGEgc29ja2V0IHRoYXQgaGFzIHJlY2VpdmVkIFNIVVRET1dOIHNob3VsZCBy ZXR1cm4gMAo+ICAgCSAqIGluZGljYXRpbmcgRU9GLgo+ICAgCSAqLwo+ICAgCWVycm9yID0gcmVj dihhY3B0X3NrWzBdLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKChlcnJvciAhPSAwKSB8fCAo ZXJybm8gIT0gMCkpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2IG9uIGEgU0hVVERP V04gcmVjZWl2ZWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2 IG9uIGEgU0hVVERPV04gcmVjZWl2ZWQgc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5v OiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCS8qIFJlYWQgdGhlIHBlbmRpbmcgbWVzc2Fn ZSBvbiBjbG50X3NrWzBdIHRoYXQgd2FzIHJlY2VpdmVkIGJlZm9yZQo+ICAgCSAqIFNIVVRET1dO IGNhbGwuCj4gLQkgKi8KPiArCSAqLwo+ICAgCXRlc3RfcmVjdihjbG50X3NrWzBdLCBtc2didWYs IDEwMCwgMCk7Cj4gICAKPiAgIAkvKiBObyBtb3JlIG1lc3NhZ2VzIGFuZCB0aGUgYXNzb2NpYXRp b24gaXMgU0hVVERPV04sIHNob3VsZCBmYWlsLiAqLwo+ICAgCWVycm9yID0gcmVjdihjbG50X3Nr WzBdLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKChlcnJvciAhPSAtMSkgfHwgKGVycm5vICE9 IEVOT1RDT05OKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ygb24gYSBTSFVUX1dS IHNvY2tldCB3aXRoIG5vICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2IG9u IGEgU0hVVF9XUiBzb2NrZXQgd2l0aCBubyAiCj4gICAJCQkgIm1lc3NhZ2VzIGVycm9yOiVkLCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNodXRk b3duKCkgd2l0aCBTSFVUX1dSIGZsYWcgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAllcnJubyA9IDA7 Cj4gICAKPiAtCS8qc2h1dGRvd24oKSBURVNUNDogc2h1dGRvd24gd2l0aCBTSFVUX1JEIGZsYWcg dG8gZGlzYWJsZSBuZXcgcmVjZWl2ZSAqLwo+ICsJLypzaHV0ZG93bigpIFRFU1Q0OiBzaHV0ZG93 biB3aXRoIFNIVVRfUkQgZmxhZyB0byBkaXNhYmxlIG5ldyByZWNlaXZlKi8KPiAgIAl0ZXN0X3No dXRkb3duKGNsbnRfc2tbMV0sIFNIVVRfUkQpOwo+ICAgCj4gICAJZXJyb3IgPSByZWN2KGNsbnRf c2tbMV0sIG1zZ2J1ZiwgMTAwLCAwKTsKPiAgIAlpZiAoKGVycm9yICE9IDApIHx8IChlcnJubyAh PSAwKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ygb24gYSBTSFVUX1JEIHNvY2tl dCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdiBvbiBhIFNIVVRfUkQgc29j a2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ ICAgCS8qIFNlbmRpbmcgYSBtZXNzYWdlIG9uIFNIVVRfUkQgc29ja2V0LiAqLwo+ICAgCWVycm9y ID0gdGVzdF9zZW5kKGNsbnRfc2tbMV0sIG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSwgMCk7Cj4g ICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmQgb24gYSBT SFVUX1JEIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2VuZCBvbiBh IFNIVVRfUkQgc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVy cm5vKTsKPiAgIAo+ICAgCS8qIFJlY2VpdmUgdGhlIG1lc3NhZ2Ugc2VudCBvbiBTSFVUX1JEIHNv Y2tldC4gKi8KPiBAQCAtMTcxLDM0ICsxNzIsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKPiAgIAkvKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgU0hVVF9SRCBzb2NrZXQuICov Cj4gICAJdGVzdF9zZW5kKGFjcHRfc2tbMV0sIG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSwgMCk7 Cj4gICAKPiAtCS8qIFdlIHNob3VsZCBub3QgcmVjZWl2ZSB0aGUgbWVzc2FnZSBhcyB0aGUgc29j a2V0IGlzIFNIVVRfUkQgKi8KPiArCS8qIFdlIHNob3VsZCBub3QgcmVjZWl2ZSB0aGUgbWVzc2Fn ZSBhcyB0aGUgc29ja2V0IGlzIFNIVVRfUkQgKi8KPiAgIAllcnJvciA9IHJlY3YoY2xudF9za1sx XSwgbXNnYnVmLCAxMDAsIDApOwo+ICAgCWlmICgoZXJyb3IgIT0gMCkgfHwgKGVycm5vICE9IDAp KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAicmVjdiBvbiBhIFNIVVRfUkQgc29ja2V0ICIK PiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2IG9uIGEgU0hVVF9SRCBzb2NrZXQg Igo+ICAgCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJ dHN0X3Jlc20oVFBBU1MsICJzaHV0ZG93bigpIHdpdGggU0hVVF9SRCBmbGFnIC0gU1VDQ0VTUyIp Owo+ICAgCj4gLQkvKnNodXRkb3duKCkgVEVTVDU6IHNodXRkb3duIHdpdGggU0hVVF9SRFdSIGZs YWcgdG8gZGlzYWJsZSBuZXcKPiAtCSAgIHJlY2VpdmUvc2VuZCAqLwo+IC0JdGVzdF9zaHV0ZG93 bihjbG50X3NrWzJdLCBTSFVUX1JEV1IpOwo+ICsJLypzaHV0ZG93bigpIFRFU1Q1OiBzaHV0ZG93 biB3aXRoIFNIVVRfUkRXUiBmbGFnIHRvIGRpc2FibGUgbmV3Cj4gKwlyZWNlaXZlL3NlbmQqLwo+ ICsgICAgICAgIHRlc3Rfc2h1dGRvd24oY2xudF9za1syXSwgU0hVVF9SRFdSKTsKPiAgIAo+ICAg CWVycm9yID0gcmVjdihhY3B0X3NrWzJdLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKChlcnJv ciAhPSAwKSB8fCAoZXJybm8gIT0gMCkpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2 IG9uIGEgU0hVVERPV04gcmVjZWl2ZWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJyZWN2IG9uIGEgU0hVVERPV04gcmVjZWl2ZWQgc29ja2V0ICIKPiAgIAkJCSAiZXJy b3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCWVycm9yID0gcmVjdihj bG50X3NrWzJdLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKChlcnJvciAhPSAwKSB8fCAoZXJy bm8gIT0gMCkpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2IG9uIGEgU0hVVF9SRFdS IHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdiBvbiBhIFNIVVRf UkRXUiBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8p Owo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzaHV0ZG93bigpIHdpdGggU0hVVF9SRFdSIGZs YWcgLSBTVUNDRVNTIik7Cj4gICAKPiAtCS8qc2h1dGRvd24oKSBURVNUNjogVW5jb25uZWN0ZWQg c29ja2V0LCBFTk9UQ09OTiBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypzaHV0ZG93bigpIFRFU1Q2 OiBVbmNvbm5lY3RlZCBzb2NrZXQsIEVOT1RDT05OIEV4cGVjdGVkIGVycm9yKi8KPiAgIAllcnJv ciA9IHNodXRkb3duKHNrLCBTSFVUX1JEKTsKPiAgIAlpZiAoKGVycm9yICE9IC0xKSB8fCAoZXJy bm8gIT0gRU5PVENPTk4pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2h1dGRvd24gb24g YW4gdW5jb25uZWN0ZWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJz aHV0ZG93biBvbiBhbiB1bmNvbm5lY3RlZCBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCwgZXJy bm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzaHV0ZG93 bigpIG9uIGFuIHVuY29ubmVjdGVkIHNvY2tldCAtIFNVQ0NFU1MiKTsKPiBAQCAtMjA4LDggKzIw OSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJZm9yIChpID0gMDsg aSA8IE1BWF9DTElFTlRTOyBpKyspCj4gICAJCWNsb3NlKGFjcHRfc2tbaV0pOwo+ICAgCj4gKwo+ ICAgCWNsb3NlKGxzdG5fc2spOwo+ICAgCWNsb3NlKHNrKTsKPiAgIAo+IC0JdHN0X2V4aXQoKTsK PiArCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3Rw L2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc29ja2V0X2JpbmRfbGlzdGVuLmMgYi90ZXN0Y2FzZXMv bmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc29ja2V0X2JpbmRfbGlzdGVuLmMK PiBpbmRleCAwODZjZTBiLi42YmE5Yzk4IDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3Jr L3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zb2NrZXRfYmluZF9saXN0ZW4uYwo+ICsrKyBi L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV9zb2NrZXRfYmlu ZF9saXN0ZW4uYwo+IEBAIC0xLDQgKzEsNCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2Ug SW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENv cHlyaWdodCAoYykgMjAwMyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5Q Cj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0Cj4gICAgKgo+IEBAIC0yMiwyMCAr MjIsMjAgQEAKPiAgICAqIFRFU1QxMDogSU5BRERSX0FOWSBhZGRyZXNzIGFuZCBub24temVybyBw b3J0Cj4gICAgKiBURVNUMTE6IElOQUREUl9BTlkgYWRkcmVzcyBhbmQgemVybyBwb3J0Cj4gICAg KiBURVNUMTI6IExvY2FsIGFkZHJlc3MgYW5kIHplcm8gcG9ydAo+IC0gKgo+ICsgKgo+ICAgICog bGlzdGVuICgpIFRlc3RzOgo+ICAgICogLS0tLS0tLS0tLS0tLS0tCj4gICAgKiBURVNUMTM6IEJh ZCBzb2NrZXQgZGVzY3JpcHRvcgo+ICAgICogVEVTVDE0OiBJbnZhbGlkIHNvY2tldAo+ICAgICog VEVTVDE1OiBMaXN0ZW5pbmcgYSBib3VuZCBzb2NrZXQKPiAtICoKPiAtICogVGhlIFNDVFAgcmVm ZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqCj4gKyAqIFRoZSBT Q1RQIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0 aW9uKQo+ICAgICogYW55IGxhdGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZl cmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0Cj4gICAgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioq KioqKioqKioqKioqKioKPiAgICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAtNjUsNyArNjUsNyBAQAo+ICAgI2lu Y2x1ZGUgPHN0cmluZy5oPgo+ICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICAgI2luY2x1ZGUg PHN5cy9zb2NrZXQuaD4KPiAtI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4JCS8qIGZvciBzb2NrYWRk cl9pbiAqLwo+ICsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRk cl9pbiAqLwo+ICAgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+ Cj4gICAjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Cj4gQEAgLTc5LDkzICs3OSw5NCBAQCBjaGFy ICpUQ0lEID0gX19GSUxFX187Cj4gICBpbnQgVFNUX1RPVEFMID0gMTU7Cj4gICBpbnQgVFNUX0NO VCA9IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAraW50Cj4g K21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAtCWludCBzaywgcGZfY2xhc3M7 Cj4gKyAgICAgICAgaW50IHNrLHBmX2NsYXNzOwo+ICAgCWludCBlcnJvciA9IDA7Cj4gICAJaW50 IHVpZDsKPiAgIAo+IC0Jc3RydWN0IHNvY2thZGRyX2luIGJpbmRfYWRkcjsKPiArICAgICAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gYmluZF9hZGRyOwo+ICAgCj4gICAJLyogUmF0aGVyIHRoYW4gZmZs dXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IC0JICogYmUgdW5idWZm ZXJlZC4KPiAtCSAqLwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4gLQlz ZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAgKiBiZSB1bmJ1ZmZl cmVkLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9O QkYsIDApOwo+ICsgICAgICAgIHNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICAg Cj4gLQlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gKyAgICAgICAgcGZfY2xhc3MgPSBQRl9JTkVUOwo+ ICAgCj4gLQkvKiBzb2NrZXQoKSBURVNUMTogSW52YWxpZCBkb21haW4sIEVBRk5PU1VQUE9SVCBF eHBlY3RlZCBlcnJvciAqLwo+IC0Jc2sgPSBzb2NrZXQoLTEsIFNPQ0tfU1RSRUFNLCBJUFBST1RP X1NDVFApOwo+IC0JaWYgKHNrICE9IC0xIHx8IGVycm5vICE9IEVBRk5PU1VQUE9SVCkKPiAtCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgInNvY2tldCgpIHdpdGggaW52YWxpZCBkb21haW4gIgo+IC0J CQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKyAgICAgICAgLyogc29j a2V0KCkgVEVTVDE6IEludmFsaWQgZG9tYWluLCBFQUZOT1NVUFBPUlQgRXhwZWN0ZWQgZXJyb3Ig Ki8KPiArICAgICAgICBzayA9IHNvY2tldCgtMSwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7 Cj4gKyAgICAgICAgaWYgKHNrICE9IC0xIHx8IGVycm5vICE9IEVBRk5PU1VQUE9SVCkKPiArCQl0 c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzb2NrZXQoKSB3aXRoIGludmFsaWQgZG9tYWluICIK PiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwg ZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzb2NrZXQoKSB3aXRoIGludmFsaWQg ZG9tYWluIC0gRUFGTk9TVVBQT1JUIik7Cj4gICAKPiAtCS8qc29ja2V0KCkgVEVTVDIgOiBJbnZh bGlkIHR5cGUsIEVJTlZBTCBFeHBlY3RlZCBlcnJvciAqLwo+IC0Jc2sgPSBzb2NrZXQocGZfY2xh c3MsIC0xLCBJUFBST1RPX1NDVFApOwo+IC0JaWYgKHNrICE9IC0xIHx8IGVycm5vICE9IEVJTlZB TCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNvY2tldCgpIHdpdGggaW52YWxpZCB0eXBl ICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJLypzb2Nr ZXQoKSBURVNUMiA6IEludmFsaWQgdHlwZSwgRUlOVkFMIEV4cGVjdGVkIGVycm9yKi8KPiArICAg ICAgICBzayA9IHNvY2tldChwZl9jbGFzcywgLTEsIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAg aWYgKHNrICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJzb2NrZXQoKSB3aXRoIGludmFsaWQgdHlwZSAiCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRz dF9yZXNtKFRQQVNTLCAic29ja2V0KCkgd2l0aCBpbnZhbGlkIHR5cGUgLSBFSU5WQUwiKTsKPiAg IAo+IC0JLypzb2NrZXQoKSBURVNUMzogb3BlbmluZyBhIHNvY2tldCAqLwo+IC0Jc2sgPSBzb2Nr ZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+IC0JaWYgKHNrIDwgMCkK PiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInZhbGlkIHNvY2tldCgpIGNhbGwgIgo+IC0JCQkg ImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkvKnNvY2tldCgpIFRFU1Qz OiBvcGVuaW5nIGEgc29ja2V0Ki8KPiArICAgICAgICBzayA9IHNvY2tldChwZl9jbGFzcywgU09D S19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgaWYgKHNrIDwgMCkKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJ2YWxpZCBzb2NrZXQoKSBjYWxsICIKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAg Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJzb2NrZXQoKSAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCS8q YmluZCgpIFRFU1Q0OiBJbnZhbGlkIHN0cnVjdHVyZSwgRUZBVUxUIEV4cGVjdGVkIGVycm9yICov Cj4gLQllcnJvciA9IGJpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKiktMSwgc2l6ZW9mKHN0cnVj dCBzb2NrYWRkcl9pbikpOwo+IC0JaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVGQVVMVCkK PiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImJpbmQoKSB3aXRoIGludmFsaWQgYWRkcmVzcyBw dHIgIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKyAgICAg ICAgZXJyb3IgPSBiaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyICopLTEsIHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfaW4pKTsKPiArICAgICAgICBpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUZB VUxUKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImJpbmQoKSB3aXRoIGludmFsaWQg YWRkcmVzcyBwdHIgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJu bzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImJpbmQoKSB3 aXRoIGludmFsaWQgYWRkcmVzcyBwdHIgLSBFRkFVTFQiKTsKPiAgIAo+IC0JLypiaW5kKCkgVEVT VDU6IEludmFsaWQgYWRkcmVzcyBsZW5ndGgsIEVJTlZBTCBFeHBlY3QgZXJyb3IgKi8KPiArCS8q YmluZCgpIFRFU1Q1OiBJbnZhbGlkIGFkZHJlc3MgbGVuZ3RoLCBFSU5WQUwgRXhwZWN0IGVycm9y Ki8KPiAgIAliaW5kX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQliaW5kX2FkZHIuc2lu X2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWJpbmRfYWRkci5zaW5fcG9ydCA9 IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgYmluZF9hZGRyLnNpbl9hZGRyLnNf YWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgYmluZF9hZGRyLnNpbl9wb3J0ID0g aHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JZXJyb3IgPSBiaW5kKHNrLCAoc3RydWN0 IHNvY2thZGRyICopJmJpbmRfYWRkciwgc2l6ZW9mKGJpbmRfYWRkcikgLSAyKTsKPiAtCWlmIChl cnJvciAhPSAtMSB8fCBlcnJubyAhPSBFSU5WQUwpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJiaW5kKCkgd2l0aCBpbnZhbGlkIGFkZHJlc3MgbGVuZ3RoICIKPiAtCQkJICJlcnJvcjolZCwg ZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJZXJyb3IgPSBiaW5kKHNrLCAoc3RydWN0IHNv Y2thZGRyICopICZiaW5kX2FkZHIsIHNpemVvZihiaW5kX2FkZHIpLTIpOwo+ICsgICAgICAgIGlm IChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFSU5WQUwpCj4gKwkJdHN0X2Jya20oVEJST0ssIHRz dF9leGl0LCAiYmluZCgpIHdpdGggaW52YWxpZCBhZGRyZXNzIGxlbmd0aCAiCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYmluZCgpIHdpdGggaW52YWxpZCBhZGRyZXNzIGxlbmd0 aCAtIEVJTlZBTCIpOwo+ICAgCj4gLQkvKmJpbmQoKSBURVNUNjogSW52YWxpZCBzb2NrZXQgZGVz Y3JpcHRvciwgRU5PVFNPQ0sgRXhwZWN0IEVycm9yICovCj4gLQllcnJvciA9IGJpbmQoMCwgKHN0 cnVjdCBzb2NrYWRkciAqKSZiaW5kX2FkZHIsIHNpemVvZihiaW5kX2FkZHIpKTsKPiArCS8qYmlu ZCgpIFRFU1Q2OiBJbnZhbGlkIHNvY2tldCBkZXNjcmlwdG9yLCBFTk9UU09DSyBFeHBlY3QgRXJy b3IqLwo+ICsJZXJyb3IgPSBiaW5kKDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmJpbmRfYWRkciwg c2l6ZW9mKGJpbmRfYWRkcikpOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFTk9U U09DSykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImJpbmQoKSB3aXRoIGludmFsaWQgc29j a2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJiaW5kKCkgd2l0aCBpbnZhbGlk IHNvY2tldCAiCj4gICAJCQkgImRlc2NyaXB0b3IgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3Is IGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYmluZCgpIHdpdGggaW52YWxpZCBz b2NrZXQgZGVzY3JpcHRvciAtIEVOT1RTT0NLIik7Cj4gICAKPiAtCS8qYmluZCgpIFRFU1Q3OiBJ bnZhbGlkIGhvc3QgbmFtZSwgRUFERFJOT1RBVkFJTCBFeHBlY3QgRXJyb3IgKi8KPiAtCS8qQXNz aWduaW5nIGludmFsaWQgaG9zdCBuYW1lICovCj4gKwkvKmJpbmQoKSBURVNUNzogSW52YWxpZCBo b3N0IG5hbWUsIEVBRERSTk9UQVZBSUwgRXhwZWN0IEVycm9yKi8KPiArCS8qQXNzaWduaW5nIGlu dmFsaWQgaG9zdCBuYW1lKi8KPiAgIAliaW5kX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9h ZGRyKFNDVFBfSU5WX0xPT1BCQUNLKTsKPiAtCWVycm9yID0gYmluZChzaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZiaW5kX2FkZHIsIHNpemVvZihiaW5kX2FkZHIpKTsKPiAtCWlmIChlcnJvciAhPSAt MSB8fCBlcnJubyAhPSBFQUREUk5PVEFWQUlMKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAi YmluZCgpIHdpdGggaW52YWxpZCBsb2NhbCAiCj4gKwllcnJvciA9IGJpbmQoc2ssIChzdHJ1Y3Qg c29ja2FkZHIgKikgJmJpbmRfYWRkciwgc2l6ZW9mKGJpbmRfYWRkcikpOwo+ICsgICAgICAgIGlm IChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQUREUk5PVEFWQUlMKQo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgImJpbmQoKSB3aXRoIGludmFsaWQgbG9jYWwgIgo+ICAgCQkJICJhZGRy ZXNzIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVz bShUUEFTUywgImJpbmQoKSB3aXRoIGludmFsaWQgbG9jYWwgYWRkcmVzcyAtIEVBRERSTk9UQVZB SUwiKTsKPiAgIAo+ICAgCS8qYmluZCgpIFRFU1Q4OiBCaW5kIG9uIGEgc29ja2V0IHRoYXQgaGFz IGFscmVhZHkgY2FsbGVkIGJpbmQKPiAtCSAgIEVJTkFWTCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAr CUVJTkFWTCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWJpbmRfYWRkci5zaW5fYWRkci5zX2FkZHIg PSBTQ1RQX0lQX0xPT1BCQUNLOwo+IC0JLypDYWxsaW5nIGJpbmQgZmlyc3QgdGltZSwgaXQgc2hv dWxkIHBhc3MgKi8KPiAtCXRlc3RfYmluZChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZiaW5kX2Fk ZHIsIHNpemVvZihiaW5kX2FkZHIpKTsKPiArCS8qQ2FsbGluZyBiaW5kIGZpcnN0IHRpbWUsIGl0 IHNob3VsZCBwYXNzKi8KPiArCXRlc3RfYmluZChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYmlu ZF9hZGRyLCBzaXplb2YoYmluZF9hZGRyKSk7Cj4gICAKPiAtCWVycm9yID0gYmluZChzaywgKHN0 cnVjdCBzb2NrYWRkciAqKSZiaW5kX2FkZHIsIHNpemVvZihiaW5kX2FkZHIpKTsKPiArCWVycm9y ID0gYmluZChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYmluZF9hZGRyLCBzaXplb2YoYmluZF9h ZGRyKSk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgImJpbmQoKSBvbiBhbiBhbHJlYWR5IGJvdW5kIHNvY2tldCAiCj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiYmluZCgpIG9uIGFuIGFscmVhZHkgYm91bmQg c29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYmluZCgpIG9uIGFuIGFscmVhZHkgYm91bmQgc29ja2V0 IC0gRUlOVkFMIik7Cj4gQEAgLTE3Myw0NyArMTc0LDQ3IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCj4gICAJLypDbG9zaW5nIHRoZSBzb2NrZXQgd2hpY2ggc3VjY2VlZCBpbiBi aW5kKCkgKi8KPiAgIAljbG9zZShzayk7Cj4gICAKPiAtCS8qT3BlbmluZyB0aGUgc29ja2V0IGFn YWluIGZvciBmdXJ0aGVyIHRlc3QgKi8KPiArCS8qT3BlbmluZyB0aGUgc29ja2V0IGFnYWluIGZv ciBmdXJ0aGVyIHRlc3QqLwo+ICAgCXNrID0gc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwg SVBQUk9UT19TQ1RQKTsKPiAgIAo+IC0JLypiaW5kKCkgVEVTVDk6IEJpbmQgb24gcmVzZXJ2ZWQg cG9ydHMgRUFDQ0VTLCBFeHBlY3RlZCBlcnJvciAqLwo+IC0JLypBc3NpZ25pbmcgYSByZXNlcnZl ZCBwb3J0ICovCj4gKwkvKmJpbmQoKSBURVNUOTogQmluZCBvbiByZXNlcnZlZCBwb3J0cyBFQUND RVMsIEV4cGVjdGVkIGVycm9yKi8KPiArCS8qQXNzaWduaW5nIGEgcmVzZXJ2ZWQgcG9ydCovCj4g ICAJdWlkID0gZ2V0dWlkKCk7Cj4gICAJaWYgKHVpZCAhPSAwKSB7Cj4gLQkJYmluZF9hZGRyLnNp bl9wb3J0ID0gaHRvbnMoU0NUUF9SRVNFUlZFRF9QT1JUKTsKPiAtCQllcnJvciA9IGJpbmQoc2ss IChzdHJ1Y3Qgc29ja2FkZHIgKikmYmluZF9hZGRyLAo+ICsJCWJpbmRfYWRkci5zaW5fcG9ydCA9 IGh0b25zKFNDVFBfUkVTRVJWRURfUE9SVCk7CQo+ICsJCWVycm9yID0gYmluZChzaywgKHN0cnVj dCBzb2NrYWRkciAqKSAmYmluZF9hZGRyLAo+ICAgCQkJICAgICBzaXplb2YoYmluZF9hZGRyKSk7 Cj4gICAJCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQUNDRVMpCj4gLQkJCXRzdF9icmtt KFRCUk9LLCBOVUxMLCAiYmluZCgpIG9uIHJlc2VydmVyZCBwb3J0ICIKPiAtCQkJCSAiZXJyb3I6 JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQkJdHN0X2Jya20oVEJST0ssIHRzdF9l eGl0LCAiYmluZCgpIG9uIHJlc2VydmVyZCBwb3J0ICIKPiArCQkJICJlcnJvcjolZCwgZXJybm86 JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJCXRzdF9yZXNtKFRQQVNTLCAiYmluZCgpIG9u IHJlc2VydmVkIHBvcnQgLSBFQUNDRVNTIik7Cj4gICAJfQo+ICAgCj4gLQkvKmJpbmQoKSBURVNU MTA6IElOQUREUl9BTlkgYWRkcmVzcyBhbmQgbm9uLXplcm8gcG9ydCwgYmluZCgpIHNob3VsZAo+ IC0JICAgc3VjY2VlZCAqLwo+ICsJLypiaW5kKCkgVEVTVDEwOiBJTkFERFJfQU5ZIGFkZHJlc3Mg YW5kIG5vbi16ZXJvIHBvcnQsIGJpbmQoKSBzaG91bGQKPiArCXN1Y2NlZWQqLwo+ICAgCWJpbmRf YWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwo+IC0JYmluZF9hZGRyLnNpbl9wb3J0 ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAtCWVycm9yID0gYmluZChzaywgKHN0cnVjdCBz b2NrYWRkciAqKSZiaW5kX2FkZHIsIHNpemVvZihiaW5kX2FkZHIpKTsKPiAtCWlmIChlcnJvciA8 IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJiaW5kKCkgd2l0aCBJTkFERFJfQU5ZIGFk ZHJlc3MgYW5kICIKPiArICAgICAgICBiaW5kX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RF U1RQT1JUXzEpOwo+ICsJZXJyb3IgPSBiaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyICopICZiaW5k X2FkZHIsc2l6ZW9mKGJpbmRfYWRkcikpOwo+ICsJaWYgKCBlcnJvciA8IDAgKQo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImJpbmQoKSB3aXRoIElOQUREUl9BTlkgYWRkcmVzcyBhbmQg Igo+ICAgCQkJICJub24temVybyBwb3J0IGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJu byk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImJpbmQoKSB3aXRoIElOQUREUl9BTlkgYWRk cmVzcyBhbmQgbm9uLXplcm8gcG9ydCAtICIKPiAgIAkJICJTVUNDRVNTIik7Cj4gLQo+ICsJCj4g ICAJLypDbG9zaW5nIHRoZSBzb2NrZXQgd2hpY2ggc3VjY2VlZCBpbiBiaW5kKCkgKi8KPiAgIAlj bG9zZShzayk7Cj4gICAKPiAtCS8qT3BlbmluZyB0aGUgc29ja2V0IGFnYWluIGZvciBmdXJ0aGVy IHRlc3QgKi8KPiArCS8qT3BlbmluZyB0aGUgc29ja2V0IGFnYWluIGZvciBmdXJ0aGVyIHRlc3Qq Lwo+ICAgCXNrID0gc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsK PiAgIAo+IC0JLypiaW5kKCkgVEVTVDExOiBJTkFERFJfQU5ZIGFkZHJlc3MgYW5kIHplcm8gcG9y dCwgYmluZCgpIHNob3VsZAo+IC0JICAgc3VjY2VlZCAqLwo+IC0JYmluZF9hZGRyLnNpbl9wb3J0 ID0gMDsKPiAtCWVycm9yID0gYmluZChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZiaW5kX2FkZHIs IHNpemVvZihiaW5kX2FkZHIpKTsKPiAtCWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJS T0ssIE5VTEwsICJiaW5kKCkgd2l0aCBJTkFERFJfQU5ZIGFkZHJlc3MgYW5kICIKPiArCS8qYmlu ZCgpIFRFU1QxMTogSU5BRERSX0FOWSBhZGRyZXNzIGFuZCB6ZXJvIHBvcnQsIGJpbmQoKSBzaG91 bGQKPiArCXN1Y2NlZWQqLwo+ICsgICAgICAgIGJpbmRfYWRkci5zaW5fcG9ydCA9IDA7Cj4gKwll cnJvciA9IGJpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmJpbmRfYWRkcixzaXplb2YoYmlu ZF9hZGRyKSk7Cj4gKwlpZiAoIGVycm9yIDwgMCApCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9l eGl0LCAiYmluZCgpIHdpdGggSU5BRERSX0FOWSBhZGRyZXNzIGFuZCAiCj4gICAJCQkgInplcm8g cG9ydCBlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jl c20oVFBBU1MsICJiaW5kKCkgd2l0aCBJTkFERFJfQU5ZIGFkZHJlc3MgYW5kIHplcm8gcG9ydCAt ICIKPiBAQCAtMjIyLDQ1ICsyMjMsNDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKPiAgIAkvKkNsb3NpbmcgdGhlIHNvY2tldCB3aGljaCBzdWNjZWVkIGluIGJpbmQoKSAqLwo+ ICAgCWNsb3NlKHNrKTsKPiAgIAo+IC0JLypPcGVuaW5nIHRoZSBzb2NrZXQgYWdhaW4gZm9yIGZ1 cnRoZXIgdGVzdCAqLwo+ICsJLypPcGVuaW5nIHRoZSBzb2NrZXQgYWdhaW4gZm9yIGZ1cnRoZXIg dGVzdCovCj4gICAJc2sgPSBzb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1ND VFApOwo+ICAgCj4gLQkvKmJpbmQoKSBURVNUMTI6IGxvY2FsIGFkZHJlc3MgYW5kIHplcm8gcG9y dCwgYmluZCgpIHNob3VsZAo+IC0JICAgc3VjY2VlZCAqLwo+IC0JYmluZF9hZGRyLnNpbl9hZGRy LnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQliaW5kX2FkZHIuc2luX3BvcnQgPSAwOwo+ IC0JZXJyb3IgPSBiaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyICopJmJpbmRfYWRkciwgc2l6ZW9m KGJpbmRfYWRkcikpOwo+IC0JaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgImJpbmQoKSB3aXRoIGxvY2FsIGFkZHJlc3MgYW5kICIKPiArCS8qYmluZCgpIFRFU1QxMjog bG9jYWwgYWRkcmVzcyBhbmQgemVybyBwb3J0LCBiaW5kKCkgc2hvdWxkCj4gKwlzdWNjZWVkKi8K PiArICAgICAgICBiaW5kX2FkZHIuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsK PiArICAgICAgICBiaW5kX2FkZHIuc2luX3BvcnQgPSAwOwo+ICsJZXJyb3IgPSBiaW5kKHNrLCAo c3RydWN0IHNvY2thZGRyICopICZiaW5kX2FkZHIsc2l6ZW9mKGJpbmRfYWRkcikpOwo+ICsJaWYg KCBlcnJvciA8IDAgKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImJpbmQoKSB3aXRo IGxvY2FsIGFkZHJlc3MgYW5kICIKPiAgIAkJCSAiemVybyBwb3J0IGVycm9yOiVkLCBlcnJubzol ZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAtCXRzdF9yZXNtKFRQQVNTLCAiYmluZCgpIHdpdGgg bG9jYWwgYWRkcmVzcyBhbmQgemVybyBwb3J0IC0gIiAiU1VDQ0VTUyIpOwo+ICsJdHN0X3Jlc20o VFBBU1MsICJiaW5kKCkgd2l0aCBsb2NhbCBhZGRyZXNzIGFuZCB6ZXJvIHBvcnQgLSAiCj4gKwkJ ICJTVUNDRVNTIik7Cj4gICAKPiAtCS8qbGlzdGVuKCkgVEVTVDEzOiBCYWQgc29ja2V0IGRlc2Ny aXB0b3IgRUJBREYsIEV4cGVjdGVkIGVycm9yICovCj4gKwkvKmxpc3RlbigpIFRFU1QxMzogQmFk IHNvY2tldCBkZXNjcmlwdG9yIEVCQURGLCBFeHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3IgPSBs aXN0ZW4oLTEsIDMpOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQkFERikKPiAt CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImxpc3RlbigpIHdpdGggYmFkIHNvY2tldCBkZXNjcmlw dG9yICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJsaXN0ZW4oKSB3aXRoIGJhZCBz b2NrZXQgZGVzY3JpcHRvciAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBl cnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImxpc3RlbigpIHdpdGggYmFkIHNvY2tl dCBkZXNjcmlwdG9yIC0gRUJBREYiKTsKPiAgIAo+IC0JLypsaXN0ZW4oKSBURVNUMTQ6IEludmFs aWQgc29ja2V0IEVOT1RTT0NLLCBFeHBlY3RlZCBlcnJvciAqLwo+ICsJLypsaXN0ZW4oKSBURVNU MTQ6IEludmFsaWQgc29ja2V0IEVOT1RTT0NLLCBFeHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3Ig PSBsaXN0ZW4oMCwgMyk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVOT1RTT0NL KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAibGlzdGVuKCkgd2l0aCBpbnZhbGlkIHNvY2tl dCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAibGlzdGVuKCkgd2l0aCBpbnZhbGlk IHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImxpc3RlbigpIHdpdGggaW52YWxpZCBzb2NrZXQgLSBF Tk9UU09DSyIpOwo+ICAgCj4gLQkvKmxpc3RlbigpIFRFU1QxNTpsaXN0ZW4gb24gYSBib3VuZCBz b2NrZXQsIHNob3VsZCBzdWNjZWVkICovCj4gKwkvKmxpc3RlbigpIFRFU1QxNTpsaXN0ZW4gb24g YSBib3VuZCBzb2NrZXQsIHNob3VsZCBzdWNjZWVkKi8KPiAgIAllcnJvciA9IGxpc3Rlbihzaywg Myk7Cj4gLQlpZiAoZXJyb3IgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAibGlzdGVu KCkgb24gYSBib3VuZCBzb2NrZXQgIgo+ICsJaWYgKCBlcnJvciA8IDAgKQo+ICsJCXRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgImxpc3RlbigpIG9uIGEgYm91bmQgc29ja2V0ICIKPiAgIAkJCSAi ZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQ QVNTLCAibGlzdGVuKCkgb24gYSBib3VuZCBzb2NrZXQgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAlj bG9zZShzayk7Cj4gLQo+IC0JdHN0X2V4aXQoKTsKPiArCQo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4g ZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9f MV9zb2Nrb3B0LmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3Rv XzFfc29ja29wdC5jCj4gaW5kZXggYzM2ZjUwMi4uZTIyMjk5MSAxMDA2NDQKPiAtLS0gYS90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3RvXzFfc29ja29wdC5jCj4gKysr IGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3NvY2tvcHQu Ywo+IEBAIC0xLDQgKzEsNCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50 YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdodCAo YykgMjAwMyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAgKiAo QykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0Cj4gICAgKgo+IEBAIC0zMSwxMyArMzEsMTMgQEAK PiAgICAqIFRFU1QyMTogZ2V0c29ja29wdDogU0NUUF9BU1NPQ0lORk8KPiAgICAqIFRFU1QyMjog c2V0c29ja29wdDogU0NUUF9BU1NPQ0lORk8KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5j ZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1l bnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAq IGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxl bWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFND VFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAg ICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioq KioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTU0LDExICs1NCwxMSBAQAo+ICAgICoKPiAgICAqIE9y IHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHdlYnNpdGU6Cj4gICAg KiAgICBodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9sa3NjdHAKPiAtICoKPiArICoKPiAgICAq IEFueSBidWdzIHJlcG9ydGVkIGdpdmVuIHRvIHVzIHdlIHdpbGwgdHJ5IHRvIGZpeC4uLiBhbnkg Zml4ZXMgc2hhcmVkIHdpbGwKPiAgICAqIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBuZXh0IFND VFAgcmVsZWFzZS4KPiAgICAqCj4gLSAqLwo+ICsgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPHN0ZGlv Lmg+Cj4gICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gQEAgLTc3LDEyMiArNzcsMTIyIEBAIGNoYXIg KlRDSUQgPSBfX0ZJTEVfXzsKPiAgIGludCBUU1RfVE9UQUwgPSAyMjsKPiAgIGludCBUU1RfQ05U ID0gMDsKPiAgIAo+IC1pbnQgbWFpbih2b2lkKQo+ICtpbnQKPiArbWFpbih2b2lkKQo+ICAgewo+ ICAgCWludCBlcnJvcjsKPiAgIAlzb2NrbGVuX3QgbGVuOwo+ICAgCWludCBzaywgc2sxLCBzazIs IGFjcHRfc2ssIHBmX2NsYXNzOwo+ICAgCXN0cnVjdCBzY3RwX3J0b2luZm8gZ3J0aW5mbzsKPiAg IAlzdHJ1Y3Qgc29ja2FkZHJfaW4gbHN0bl9hZGRyLCBjb25uX2FkZHI7Cj4gLQlzdHJ1Y3Qgc2N0 cF9pbml0bXNnIGdpbm1zZzsJLypnZXQgdGhlIHZhbHVlIGZvciBTQ1RQX0lOSVRNU0cgKi8KPiAt CXN0cnVjdCBzY3RwX2luaXRtc2cgc2lubXNnOwkvKnNldCB0aGUgdmFsdWUgZm9yIFNDVFBfSU5J VE1TRyAqLwo+IC0Jc3RydWN0IGxpbmdlciBzbGluZ2VyOwkvKlNPX0xJTkdFUiBzdHJ1Y3R1cmUg Ki8KPiAtCXN0cnVjdCBsaW5nZXIgZ2xpbmdlcjsJLypTT19MSU5HRVIgc3RydWN0dXJlICovCj4g KwlzdHJ1Y3Qgc2N0cF9pbml0bXNnIGdpbm1zZzsgLypnZXQgdGhlIHZhbHVlIGZvciBTQ1RQX0lO SVRNU0cqLwo+ICsJc3RydWN0IHNjdHBfaW5pdG1zZyBzaW5tc2c7IC8qc2V0IHRoZSB2YWx1ZSBm b3IgU0NUUF9JTklUTVNHKi8KPiArCXN0cnVjdCBsaW5nZXIgc2xpbmdlcjsgLypTT19MSU5HRVIg c3RydWN0dXJlKi8KPiArCXN0cnVjdCBsaW5nZXIgZ2xpbmdlcjsgLypTT19MSU5HRVIgc3RydWN0 dXJlKi8KPiAgIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKPiAgIAlzdHJ1Y3Qgc29ja2FkZHJf aW4gKmdhZGRyOwo+IC0Jc3RydWN0IHNjdHBfc3RhdHVzIGdzdGF0dXM7CS8qU0NUUF9TVEFUVVMg b3B0aW9uICovCj4gLQlpbnQgcmN2YnVmX3ZhbF9nZXQsIHJjdmJ1Zl92YWxfc2V0OwkvKmdldCBh bmQgc2V0IHZhciBmb3IgU09fUkNWQlVGICovCj4gLQlpbnQgc25kYnVmX3ZhbF9nZXQsIHNuZGJ1 Zl92YWxfc2V0OwkvKmdldCBhbmQgc2V0IHZhciBmb3IgU09fU05EQlVGICovCj4gLQlzdHJ1Y3Qg c2N0cF9wcmltIGdwcmltYWRkcjsJLypTQ1RQX1BSSU1BUllfQUREUiBnZXQgKi8KPiAtCXN0cnVj dCBzY3RwX3ByaW0gc3ByaW1hZGRyOwkvKlNDVFBfUFJJTUFSWV9BRERSIHNldCAqLwo+IC0Jc3Ry dWN0IHNjdHBfYXNzb2NwYXJhbXMgc2Fzc29jcGFyYW1zOwkvKiBTQ1RQX0FTU09DUEFSQU1TIHNl dCAqLwo+IC0Jc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgZ2Fzc29jcGFyYW1zOwkvKiBTQ1RQX0FT U09DUEFSQU1TIGdldCAqLwo+ICsJc3RydWN0IHNjdHBfc3RhdHVzIGdzdGF0dXM7IC8qU0NUUF9T VEFUVVMgb3B0aW9uKi8KPiArCWludCByY3ZidWZfdmFsX2dldCwgcmN2YnVmX3ZhbF9zZXQ7IC8q Z2V0IGFuZCBzZXQgdmFyIGZvciBTT19SQ1ZCVUYqLwo+ICsJaW50IHNuZGJ1Zl92YWxfZ2V0LCBz bmRidWZfdmFsX3NldDsvKmdldCBhbmQgc2V0IHZhciBmb3IgU09fU05EQlVGKi8KPiArCXN0cnVj dCBzY3RwX3ByaW0gZ3ByaW1hZGRyOy8qU0NUUF9QUklNQVJZX0FERFIgZ2V0Ki8KPiArCXN0cnVj dCBzY3RwX3ByaW0gc3ByaW1hZGRyOy8qU0NUUF9QUklNQVJZX0FERFIgc2V0Ki8KPiArCXN0cnVj dCBzY3RwX2Fzc29jcGFyYW1zIHNhc3NvY3BhcmFtczsgIC8qIFNDVFBfQVNTT0NQQVJBTVMgc2V0 ICovCj4gKwlzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyBnYXNzb2NwYXJhbXM7ICAvKiBTQ1RQX0FT U09DUEFSQU1TIGdldCAqLwo+ICAgCj4gICAJLyogUmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3Vn aG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IC0JICogYmUgdW5idWZmZXJlZC4KPiAtCSAq Lwo+IC0Jc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4gLQlzZXR2YnVmKHN0ZGVy ciwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAgKiBiZSB1bmJ1ZmZlcmVkLgo+ICsgICAg ICAgICAqLwo+ICsgICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsg ICAgICAgIHNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9OQkYsIDApOwo+ICAgCj4gICAJcGZfY2xh c3MgPSBQRl9JTkVUOwo+ICAgCj4gICAJc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19T VFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAKPiAtCS8qc2V0c29ja29wdCgpIFRFU1QxOiBCYWQg c29ja2V0IGRlc2NyaXB0b3IgRUJBREYsIEV4cGVjdGVkIGVycm9yICovCj4gLQllcnJvciA9IHNl dHNvY2tvcHQoLTEsIElQUFJPVE9fU0NUUCwgMCwgMCwgMCk7Cj4gKwkvKnNldHNvY2tvcHQoKSBU RVNUMTogQmFkIHNvY2tldCBkZXNjcmlwdG9yIEVCQURGLCBFeHBlY3RlZCBlcnJvciovCj4gKyAg ICAgICAgZXJyb3IgPSBzZXRzb2Nrb3B0KC0xLCBJUFBST1RPX1NDVFAsIDAsIDAsIDApOwo+ICAg CWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFQkFERikKPiAtCQl0c3RfYnJrbShUQlJPSywg TlVMTCwgInNldHNvY2tvcHQgd2l0aCBhIGJhZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgInNldHNvY2tvcHQgd2l0aCBhIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJkZXNj cmlwdG9yIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3Rf cmVzbShUUEFTUywgInNldHNvY2tvcHQoKSB3aXRoIGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIC0g RUJBREYiKTsKPiAgIAo+IC0JLypzZXRzb2Nrb3B0KCkgVEVTVDI6IEludmFsaWQgc29ja2V0IEVO T1RTT0NLLCBFeHBlY3RlZCBlcnJvciAqLwo+IC0JZXJyb3IgPSBzZXRzb2Nrb3B0KDAsIElQUFJP VE9fU0NUUCwgMCwgMCwgMCk7Cj4gKwkvKnNldHNvY2tvcHQoKSBURVNUMjogSW52YWxpZCBzb2Nr ZXQgRU5PVFNPQ0ssIEV4cGVjdGVkIGVycm9yKi8KPiArICAgICAgICBlcnJvciA9IHNldHNvY2tv cHQoMCwgSVBQUk9UT19TQ1RQLCAwLCAwLCAwKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJy bm8gIT0gRU5PVFNPQ0spCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZXRzb2Nrb3B0IHdp dGggYW4gaW52YWxpZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNl dHNvY2tvcHQgd2l0aCBhbiBpbnZhbGlkIHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJu bzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tv cHQoKSB3aXRoIGFuIGludmFsaWQgc29ja2V0IC0gRU5PVFNPQ0siKTsKPiAgIAo+IC0JLypzZXRz b2Nrb3B0KCkgVEVTVDM6IEludmFsaWQgbGV2ZWwgRU5PUFJPVE9PUFQsIEV4cGVjdGVkIGVycm9y ICovCj4gLQllcnJvciA9IHNldHNvY2tvcHQoc2ssIC0xLCBTQ1RQX1JUT0lORk8sIDAsIDApOwo+ ICsJLypzZXRzb2Nrb3B0KCkgVEVTVDM6IEludmFsaWQgbGV2ZWwgRU5PUFJPVE9PUFQsIEV4cGVj dGVkIGVycm9yKi8KPiArICAgICAgICBlcnJvciA9IHNldHNvY2tvcHQoc2ssIC0xLCBTQ1RQX1JU T0lORk8sIDAsIDApOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFTk9QUk9UT09Q VCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNldHNvY2tvcHQgd2l0aCBpbnZhbGlkIGxl dmVsICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0IHdpdGggaW52 YWxpZCBsZXZlbCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7 Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoKSB3aXRoIGFuIGludmFsaWQg bGV2ZWwgLSBFTk9QUk9UT09QVCIpOwo+ICAgCj4gLQkvKnNldHNvY2tvcHQoKSBURVNUNDogSW52 YWxpZCBvcHRpb24gYnVmZmVyIEVGQVVMVCwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0g c2V0c29ja29wdChzaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JUT0lORk8sCj4gLQkJCSAgIChjb25z dCBzdHJ1Y3Qgc2N0cF9ydG9pbmZvICopLTEsCj4gLQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9y dG9pbmZvKSk7Cj4gKwkvKnNldHNvY2tvcHQoKSBURVNUNDogSW52YWxpZCBvcHRpb24gYnVmZmVy IEVGQVVMVCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAgICAgIGVycm9yID0gc2V0c29ja29wdChz aywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JUT0lORk8sCj4gKwkJKGNvbnN0IHN0cnVjdCBzY3RwX3J0 b2luZm8gKiktMSwgc2l6ZW9mKHN0cnVjdCBzY3RwX3J0b2luZm8pKTsKPiAgIAlpZiAoZXJyb3Ig IT0gLTEgfHwgZXJybm8gIT0gRUZBVUxUKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2V0 c29ja29wdCB3aXRoIGludmFsaWQgb3B0aW9uICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzZXRzb2Nrb3B0IHdpdGggaW52YWxpZCBvcHRpb24gIgo+ICAgCQkJICJidWZmZXIgZXJy b3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNT LCAic2V0c29ja29wdCgpIHdpdGggaW52YWxpZCBvcHRpb24gYnVmZmVyIC0gRUZBVUxUIik7Cj4g ICAKPiAtCS8qc2V0c29ja29wdCgpIFRFU1Q1OiBJbnZhbGlkIG9wdGlvbiBOYW1lIEVPUE5PVFNV UFAsIEV4cGVjdGVkIGVycm9yICovCj4gLQllcnJvciA9IHNldHNvY2tvcHQoc2ssIElQUFJPVE9f U0NUUCwgU0NUUF9BVVRPQ0xPU0UsIDAsIDApOwo+ICsJLypzZXRzb2Nrb3B0KCkgVEVTVDU6IElu dmFsaWQgb3B0aW9uIE5hbWUgRU9QTk9UU1VQUCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAgICAg IGVycm9yID0gc2V0c29ja29wdChzaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0FVVE9DTE9TRSwgMCwg MCk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVPUE5PVFNVUFApCj4gLQkJdHN0 X2Jya20oVEJST0ssIE5VTEwsICJzZXRzb2Nrb3B0IHdpdGggaW52YWxpZCBvcHRpb24gIgo+ICsJ CXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNldHNvY2tvcHQgd2l0aCBpbnZhbGlkIG9wdGlv biAiCj4gICAJCQkgIm5hbWUgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2V0c29ja29wdCgpIHdpdGggaW52YWxpZCBvcHRpb24g bmFtZSAtIEVPUE5PVFNVUFAiKTsKPiAgIAo+IC0JLypnZXRzb2Nrb3B0KCkgVEVTVDY6IEJhZCBz b2NrZXQgZGVzY3JpcHRvciBFQkFERiwgRXhwZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gZ2V0 c29ja29wdCgtMSwgSVBQUk9UT19TQ1RQLCAwLCAwLCAwKTsKPiArCS8qZ2V0c29ja29wdCgpIFRF U1Q2OiBCYWQgc29ja2V0IGRlc2NyaXB0b3IgRUJBREYsIEV4cGVjdGVkIGVycm9yKi8KPiArICAg ICAgICBlcnJvciA9IGdldHNvY2tvcHQoLTEsIElQUFJPVE9fU0NUUCwgMCwgMCwgMCk7Cj4gICAJ aWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVCQURGKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAiZ2V0c29ja29wdCB3aXRoIGEgYmFkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAiZ2V0c29ja29wdCB3aXRoIGEgYmFkIHNvY2tldCAiCj4gICAJCQkgImRlc2Ny aXB0b3IgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9y ZXNtKFRQQVNTLCAiZ2V0c29ja29wdCgpIHdpdGggYSBiYWQgc29ja2V0IGRlc2NyaXB0b3IgLSBF QkFERiIpOwo+ICAgCj4gLQkvKmdldHNvY2tvcHQoKSBURVNUNzogSW52YWxpZCBzb2NrZXQgRU5P VFNPQ0ssIEV4cGVjdGVkIGVycm9yICovCj4gLQllcnJvciA9IGdldHNvY2tvcHQoMCwgSVBQUk9U T19TQ1RQLCAwLCAwLCAwKTsKPiArCS8qZ2V0c29ja29wdCgpIFRFU1Q3OiBJbnZhbGlkIHNvY2tl dCBFTk9UU09DSywgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAgICAgIGVycm9yID0gZ2V0c29ja29w dCgwLCBJUFBST1RPX1NDVFAsIDAsIDAsIDApOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJu byAhPSBFTk9UU09DSykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQgd2l0 aCBhbiBpbnZhbGlkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0 c29ja29wdCB3aXRoIGFuIGludmFsaWQgc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5v OiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29w dCgpIHdpdGggYW4gaW52YWxpZCBzb2NrZXQgLSBFTk9UU09DSyIpOwo+ICAgI2lmIDAKPiAtCS8q Z2V0c29ja29wdCgpIFRFU1QzOiBJbnZhbGlkIGxldmVsIEVOT1BST1RPT1BULCBFeHBlY3RlZCBl cnJvciAqLwo+ICsJLypnZXRzb2Nrb3B0KCkgVEVTVDM6IEludmFsaWQgbGV2ZWwgRU5PUFJPVE9P UFQsIEV4cGVjdGVkIGVycm9yKi8KPiAgIAkvKkkgaGF2ZSBjb21tZW50ZWQgdGhpcyB0ZXN0IGNh c2UgYmVjYXVzZSBpdCBpcyByZXR1cm5pbmcgRU9QTk9UU1VQUC4KPiAtCSAgIFdoZW4gSSBjaGVj a2VkIHRoZSBjb2RlIHRoZXJlIGFsc28gaXQgaXMgcmV0dXJuaW5nIEVPUE5PVFNVUFAuIEFzIHRo aXMKPiAtCSAgIGlzIG5vdCBzcGVjaWZpYyB0byBUQ1Agc3R5bGUsIEkgZG8gbm90IHdhbnQgdG8g ZG8gdGhlIGNvZGUgY2hhbmdlICovCj4gLQo+IC0JZXJyb3IgPSBnZXRzb2Nrb3B0KHNrLCAtMSwg U0NUUF9SVE9JTkZPLCAwLCAwKTsKPiArCVdoZW4gSSBjaGVja2VkIHRoZSBjb2RlIHRoZXJlIGFs c28gaXQgaXMgcmV0dXJuaW5nIEVPUE5PVFNVUFAuIEFzIHRoaXMKPiArCWlzIG5vdCBzcGVjaWZp YyB0byBUQ1Agc3R5bGUsIEkgZG8gbm90IHdhbnQgdG8gZG8gdGhlIGNvZGUgY2hhbmdlKi8KPiAr CQo+ICsgICAgICAgIGVycm9yID0gZ2V0c29ja29wdChzaywgLTEsIFNDVFBfUlRPSU5GTywgMCwg MCk7Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVOT1BST1RPT1BUKQo+IC0JCXRz dF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdCB3aXRoIGludmFsaWQgbGV2ZWwgIgo+ICsJ CXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQgd2l0aCBpbnZhbGlkIGxldmVs ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAg CXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29wdCgpIHdpdGggYW4gaW52YWxpZCBsZXZlbCAtIEVO T1BST1RPT1BUIik7Cj4gICAjZW5kaWYKPiAgIAlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcnRv aW5mbyk7Cj4gICAKPiAtCS8qZ2V0c29ja29wdCgpIFRFU1Q4OiBJbnZhbGlkIG9wdGlvbiBidWZm ZXIgRUZBVUxULCBFeHBlY3RlZCBlcnJvciAqLwo+IC0JZXJyb3IgPSBnZXRzb2Nrb3B0KHNrLCBJ UFBST1RPX1NDVFAsIFNDVFBfUlRPSU5GTywKPiArCS8qZ2V0c29ja29wdCgpIFRFU1Q4OiBJbnZh bGlkIG9wdGlvbiBidWZmZXIgRUZBVUxULCBFeHBlY3RlZCBlcnJvciovCj4gKyAgICAgICAgZXJy b3IgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1NDVFAsIFNDVFBfUlRPSU5GTywKPiAgIAkJCSAg IChzdHJ1Y3Qgc2N0cF9ydG9pbmZvICopLTEsICZsZW4pOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8 fCBlcnJubyAhPSBFRkFVTFQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0 IHdpdGggaW52YWxpZCBvcHRpb24gIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdl dHNvY2tvcHQgd2l0aCBpbnZhbGlkIG9wdGlvbiAiCj4gICAJCQkgImJ1ZmZlciBlcnJvcjolZCwg ZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRz b2Nrb3B0KCkgd2l0aCBpbnZhbGlkIG9wdGlvbiBidWZmZXIgLSBFRkFVTFQiKTsKPiAgIAo+IC0J LypnZXRzb2Nrb3B0KCkgVEVTVDk6IEludmFsaWQgb3B0aW9uIE5hbWUgRU9QTk9UU1VQUCwgRXhw ZWN0ZWQgZXJyb3IgKi8KPiAtCWVycm9yID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19TQ1RQLCBT Q1RQX0FVVE9DTE9TRSwgJmdydGluZm8sICZsZW4pOwo+ICsJLypnZXRzb2Nrb3B0KCkgVEVTVDk6 IEludmFsaWQgb3B0aW9uIE5hbWUgRU9QTk9UU1VQUCwgRXhwZWN0ZWQgZXJyb3IqLwo+ICsgICAg ICAgIGVycm9yID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0FVVE9DTE9TRSwg JmdydGluZm8sICZsZW4pOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFT1BOT1RT VVBQKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdCB3aXRoIGludmFsaWQg b3B0aW9uICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0IHdpdGgg aW52YWxpZCBvcHRpb24gIgo+ICAgCQkJICJuYW1lIGVycm9yOiVkLCBlcnJubzolZCIsIGVycm9y LCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoKSB3aXRoIGlu dmFsaWQgb3B0aW9uIG5hbWUgLSBFT1BOT1RTVVBQIik7Cj4gQEAgLTIwMywxNCArMjAzLDE0IEBA IGludCBtYWluKHZvaWQpCj4gICAJc2syID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RS RUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJbHN0bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9J TkVUOwo+IC0JbHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4g LQlsc3RuX2FkZHIuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICsgICAgICAg IGxzdG5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAg IGxzdG5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAgIAlj b25uX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQljb25uX2FkZHIuc2luX2FkZHIuc19h ZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNvbm5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFND VFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IFND VFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgY29ubl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NU UF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cp Owo+ICsgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKTsKPiAgIAo+ICAg CS8qIFRFU1QxMDogVGVzdCBjYXNlcyBmb3IgZ2V0c29ja29wdCBTQ1RQX0lOSVRNU0cgKi8KPiAg IAl0ZXN0X2dldHNvY2tvcHQoc2sxLCBTQ1RQX0lOSVRNU0csICZnaW5tc2csICZsZW4pOwo+IEBA IC0yMTgsOSArMjE4LDkgQEAgaW50IG1haW4odm9pZCkKPiAgIAl0c3RfcmVzbShUUEFTUywgImdl dHNvY2tvcHQoKSBTQ1RQX0lOSVRNU0cgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAlzaW5tc2cuc2lu aXRfbnVtX29zdHJlYW1zID0gNTsKPiAtCXNpbm1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gNTsK PiAtCXNpbm1zZy5zaW5pdF9tYXhfYXR0ZW1wdHMgPSAzOwo+IC0Jc2lubXNnLnNpbml0X21heF9p bml0X3RpbWVvID0gMzA7Cj4gKyAgICAgICAgc2lubXNnLnNpbml0X21heF9pbnN0cmVhbXMgPSA1 Owo+ICsgICAgICAgIHNpbm1zZy5zaW5pdF9tYXhfYXR0ZW1wdHMgPSAzOwo+ICsgICAgICAgIHNp bm1zZy5zaW5pdF9tYXhfaW5pdF90aW1lbyA9IDMwOwo+ICAgCS8qIFRFU1QxMTogVGVzdCBjYXNl IGZvciBzZXRzb2Nrb3B0IFNDVFBfSU5JVE1TRyAqLwo+ICAgCXRlc3Rfc2V0c29ja29wdChzazEs IFNDVFBfSU5JVE1TRywgJnNpbm1zZywgc2l6ZW9mKHNpbm1zZykpOwo+ICAgCj4gQEAgLTIzMCw2 MiArMjMwLDYyIEBAIGludCBtYWluKHZvaWQpCj4gICAJICAgIHNpbm1zZy5zaW5pdF9tYXhfaW5z dHJlYW1zICE9IGdpbm1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zICYmCj4gICAJICAgIHNpbm1zZy5z aW5pdF9tYXhfYXR0ZW1wdHMgIT0gZ2lubXNnLnNpbml0X21heF9hdHRlbXB0cyAmJgo+ICAgCSAg ICBzaW5tc2cuc2luaXRfbWF4X2luaXRfdGltZW8gIT0gZ2lubXNnLnNpbml0X21heF9pbml0X3Rp bWVvKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2V0c29ja29wdC9nZXRzb2Nrb3B0IFND VFBfSU5JVE1TRyAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2V0c29ja29wdC9n ZXRzb2Nrb3B0IFNDVFBfSU5JVE1TRyAiCj4gICAJCQkgImNvbXBhcmUgZmFpbGVkIik7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoKSBTQ1RQX0lOSVRNU0cgLSBTVUNDRVNT Iik7Cj4gICAKPiAtCS8qTm93IGdldCB0aGUgdmFsdWVzIG9uIGRpZmZlcmVudCBlbmRwb2ludCAq Lwo+ICsJLypOb3cgZ2V0IHRoZSB2YWx1ZXMgb24gZGlmZmVyZW50IGVuZHBvaW50Ki8KPiAgIAl0 ZXN0X2dldHNvY2tvcHQoc2syLCBTQ1RQX0lOSVRNU0csICZnaW5tc2csICZsZW4pOwo+ICAgCj4g LQkvKkNvbXBhcmlzb24gc2hvdWxkIG5vdCBzdWNjZWVkIGhlcmUgKi8KPiArCS8qQ29tcGFyaXNv biBzaG91bGQgbm90IHN1Y2NlZWQgaGVyZSovCj4gICAJaWYgKHNpbm1zZy5zaW5pdF9udW1fb3N0 cmVhbXMgPT0gZ2lubXNnLnNpbml0X251bV9vc3RyZWFtcyAmJgo+ICAgCSAgICBzaW5tc2cuc2lu aXRfbWF4X2luc3RyZWFtcyA9PSBnaW5tc2cuc2luaXRfbWF4X2luc3RyZWFtcyAmJgo+ICAgCSAg ICBzaW5tc2cuc2luaXRfbWF4X2F0dGVtcHRzID09IGdpbm1zZy5zaW5pdF9tYXhfYXR0ZW1wdHMg JiYKPiAgIAkgICAgc2lubXNnLnNpbml0X21heF9pbml0X3RpbWVvID09IGdpbm1zZy5zaW5pdF9t YXhfaW5pdF90aW1lbykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNldHNvY2tvcHQvZ2V0 c29ja29wdCBTQ1RQX0lOSVRNU0cgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNl dHNvY2tvcHQvZ2V0c29ja29wdCBTQ1RQX0lOSVRNU0cgIgo+ICAgCQkJICJ1bmV4cGVjdGVkIGNv bXBhcmUgc3VjY2VzcyIpOwo+ICAgCj4gICAJLyogU09fTElOR0VSIFRlc3Qgd2l0aCBsX29uZmYg PSAwIGFuZCBsX2xpbmdlciA9IDAgKi8KPiAgIAlzbGluZ2VyLmxfb25vZmYgPSAwOwo+ICAgCXNs aW5nZXIubF9saW5nZXIgPSAwOwo+IC0JdGVzdF9iaW5kKHNrMSwgKHN0cnVjdCBzb2NrYWRkciAq KSZsc3RuX2FkZHIsIHNpemVvZihsc3RuX2FkZHIpKTsKPiAtCXRlc3RfbGlzdGVuKHNrMSwgMTAp Owo+ICsJdGVzdF9iaW5kKHNrMSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbHN0bl9hZGRyLCBzaXpl b2YobHN0bl9hZGRyKSk7Cj4gKwl0ZXN0X2xpc3RlbihzazEsIDEwICk7Cj4gICAJbGVuID0gc2l6 ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cj4gLQl0ZXN0X2Nvbm5lY3Qoc2syLCAoc3RydWN0IHNv Y2thZGRyICopJmNvbm5fYWRkciwgbGVuKTsKPiArCXRlc3RfY29ubmVjdChzazIsIChzdHJ1Y3Qg c29ja2FkZHIgKikgJmNvbm5fYWRkciwgbGVuKTsKPiAgIAo+ICAgCWFjcHRfc2sgPSB0ZXN0X2Fj Y2VwdChzazEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJmxlbik7Cj4gICAKPiAtCWxlbiA9 IHNpemVvZihzdHJ1Y3QgbGluZ2VyKTsKPiArICAgICAgICBsZW4gPSBzaXplb2Yoc3RydWN0IGxp bmdlcik7Cj4gICAJLyogVEVTVDEyOiBUZXN0IGNhc2UgZm9yIHNldHNvY2tvcHQgU09fTElOR0VS ICovCj4gICAJZXJyb3IgPSBzZXRzb2Nrb3B0KHNrMiwgU09MX1NPQ0tFVCwgU09fTElOR0VSLCAm c2xpbmdlciwgbGVuKTsKPiAgIAlpZiAoZXJyb3IgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAic2V0c29ja29wdCBTT19MSU5HRVIgIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIs IGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2V0c29ja29w dCBTT19MSU5HRVIgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJu bzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tv cHQoKSBTT19MSU5HRVIgLSBTVUNDRVNTIik7Cj4gICAKPiAgIAkvKiBURVNUMTM6IFRlc3QgY2Fz ZSBmb3IgZ2V0c29ja29wdCBTT19MSU5HRVIgKi8KPiAgIAllcnJvciA9IGdldHNvY2tvcHQoc2sy LCBTT0xfU09DS0VULCBTT19MSU5HRVIsICZnbGluZ2VyLCAmbGVuKTsKPiAgIAlpZiAoZXJyb3Ig PCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdCBTT19MSU5HRVIgIgo+ IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20o VEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdCBTT19MSU5HRVIgIgo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAg IAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoKSBTT19MSU5HRVIgLSBTVUNDRVNTIik7Cj4g ICAKPiAtCWlmIChzbGluZ2VyLmxfb25vZmYgIT0gZ2xpbmdlci5sX29ub2ZmIHx8Cj4gKwlpZiAo c2xpbmdlci5sX29ub2ZmICE9IGdsaW5nZXIubF9vbm9mZiB8fAo+ICAgCSAgICBzbGluZ2VyLmxf bGluZ2VyICE9IGdsaW5nZXIubF9saW5nZXIpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz ZXRzb2Nrb3B0L2dldHNvY2tvcHQgU09fTElOR0VSICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJzZXRzb2Nrb3B0L2dldHNvY2tvcHQgU09fTElOR0VSICIKPiAgIAkJCSAiY29tcGFy ZSBmYWlsZWQiKTsKPiAtCj4gKwkKPiAgIAkvKkZpcnN0IGdldHMgdGhlIGRlZmF1bHQgU09fUkNW QlVGIHZhbHVlIGFuZCBjb21hcHJlcyB3aXRoIHRoZQo+IC0JICAgdmFsdWUgb2J0YWluZWQgZnJv bSBTQ1RQX1NUQVRVUyAqLwo+ICsJdmFsdWUgb2J0YWluZWQgZnJvbSBTQ1RQX1NUQVRVUyovCj4g ICAJbGVuID0gc2l6ZW9mKGludCk7Cj4gICAJLyogVEVTVDE0OiBUZXN0IGNhc2UgZm9yIGdldHNv Y2tvcHQgU09fUkNWQlVGICovCj4gICAJZXJyb3IgPSBnZXRzb2Nrb3B0KHNrMiwgU09MX1NPQ0tF VCwgU09fUkNWQlVGLCAmcmN2YnVmX3ZhbF9nZXQsICZsZW4pOwo+ICAgCWlmIChlcnJvciA8IDAp Cj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0IFNPX1JDVkJVRiAiCj4gLQkJ CSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0IFNPX1JDVkJVRiAiCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRz dF9yZXNtKFRQQVNTLCAiZ2V0c29ja29wdCgpIFNPX1JDVkJVRiAtIFNVQ0NFU1MiKTsKPiAgIAo+ IEBAIC0yOTMsOTIgKzI5Myw5MyBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCS8qIFRFU1QxNTogVGVz dCBjYXNlIGZvciBnZXRzb2Nrb3B0IFNDVFBfU1RBVFVTICovCj4gICAJZXJyb3IgPSBnZXRzb2Nr b3B0KHNrMiwgSVBQUk9UT19TQ1RQLCBTQ1RQX1NUQVRVUywgJmdzdGF0dXMsICZsZW4pOwo+ICAg CWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0IFND VFBfU1RBVFVTICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQgU0NUUF9TVEFUVVMgIgo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBl cnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoKSBTQ1RQX1NUQVRV UyAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCS8qIFJlZHVjaW5nIHRoZSBTT19SQ1ZCVUYgdmFsdWUg dXNpbmcgc2V0c29ja29wdCgpICovCj4gKwkvKiBVcHN0cmVhbSBoYXMgY2hhbmdlZCB0aGUgTUlO X1JDVkJVRiAoMjA0OCArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpICovCj4gICAJbGVuID0gc2l6 ZW9mKGludCk7Cj4gLQkvKiAocmN2YnVmIGxlbikqMiBzaG91bGQgYmUgbm8gbGVzcyB0aGFuIFNP Q0tfTUlOX1JDVkJVRiBpbiBrZXJuZWwgKi8KPiAtCXJjdmJ1Zl92YWxfc2V0ID0gMTUwMDsKPiAr CXJjdmJ1Zl92YWxfc2V0ID0gMjA0ODsKPiAgIAkvKiBURVNUMTY6IFRlc3QgY2FzZSBmb3Igc2V0 c29ja29wdCBTT19SQ1ZCVUYgKi8KPiAgIAllcnJvciA9IHNldHNvY2tvcHQoc2syLCBTT0xfU09D S0VULCBTT19SQ1ZCVUYsICZyY3ZidWZfdmFsX3NldCwgbGVuKTsKPiAgIAlpZiAoZXJyb3IgPCAw KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2V0c29ja29wdCBTT19SQ1ZCVUYgIgo+IC0J CQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJS T0ssIHRzdF9leGl0LCAic2V0c29ja29wdCBTT19SQ1ZCVUYgIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0 c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoKSBTT19SQ1ZCVUYgLSBTVUNDRVNTIik7Cj4gICAK PiAgIAllcnJvciA9IGdldHNvY2tvcHQoc2syLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZyY3Zi dWZfdmFsX2dldCwgJmxlbik7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJP SywgTlVMTCwgImdldHNvY2tvcHQgU09fUkNWQlVGICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86 JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNv Y2tvcHQgU09fUkNWQlVGICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjolZCwg ZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJaWYgKCgyICogcmN2YnVmX3ZhbF9z ZXQpICE9IHJjdmJ1Zl92YWxfZ2V0KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiQ29tcGFy aXNvbiBmYWlsZWQ6U2V0IHZhbHVlIGFuZCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0 LCAiQ29tcGFyaXNvbiBmYWlsZWQ6U2V0IHZhbHVlIGFuZCAiCj4gICAJCQkgImdvdCB2YWx1ZSBk aWZmZXJzIFNldCBWYWx1ZT0lZCBHZXQgVmFsdWU9JWQiLAo+IC0JCQkgKDIgKiByY3ZidWZfdmFs X3NldCksIHJjdmJ1Zl92YWxfZ2V0KTsKPiArCQkJICgyKnJjdmJ1Zl92YWxfc2V0KSwgcmN2YnVm X3ZhbF9nZXQpOwo+ICAgCj4gLQlzbmRidWZfdmFsX3NldCA9IDEwMjQ7Cj4gKwlzbmRidWZfdmFs X3NldCA9IDIwNDg7Cj4gICAJLyogVEVTVDE3OiBUZXN0IGNhc2UgZm9yIHNldHNvY2tvcHQgU09f U05EQlVGICovCj4gICAJZXJyb3IgPSBzZXRzb2Nrb3B0KHNrMiwgU09MX1NPQ0tFVCwgU09fU05E QlVGLCAmc25kYnVmX3ZhbF9zZXQsIGxlbik7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgInNldHNvY2tvcHQgU09fU05EQlVGICIKPiAtCQkJICJlcnJvcjol ZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgInNldHNvY2tvcHQgU09fU05EQlVGICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICJl cnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBB U1MsICJzZXRzb2Nrb3B0KCkgU09fU05EQlVGIC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJLyogVEVT VDE4OiBUZXN0IGNhc2UgZm9yIGdldHNvY2tvcHQgU09fU05EQlVGICovCj4gICAJZXJyb3IgPSBn ZXRzb2Nrb3B0KHNrMiwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc25kYnVmX3ZhbF9nZXQsICZs ZW4pOwo+ICAgCWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRz b2Nrb3B0IFNPX1NOREJVRiAiCj4gLQkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVy cm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0IFNPX1NOREJV RiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJy b3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29wdCgpIFNPX1NO REJVRiAtIFNVQ0NFU1MiKTsKPiAgIAo+ICAgCWlmICgoMiAqIHNuZGJ1Zl92YWxfc2V0KSAhPSBz bmRidWZfdmFsX2dldCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIkNvbXBhcmlzb24gZmFp bGVkOlNldCB2YWx1ZSBhbmQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgIkNvbXBh cmlzb24gZmFpbGVkOlNldCB2YWx1ZSBhbmQgIgo+ICAgCQkJICJnb3QgdmFsdWUgZGlmZmVycyBT ZXQgVmFsdWU9JWQgR2V0IFZhbHVlPSVkXG4iLAo+IC0JCQkgKDIgKiBzbmRidWZfdmFsX3NldCks IHNuZGJ1Zl92YWxfZ2V0KTsKPiArCQkJICgyKnNuZGJ1Zl92YWxfc2V0KSwgc25kYnVmX3ZhbF9n ZXQpOwo+ICAgCj4gKwo+ICAgCS8qIEdldHRpbmcgdGhlIHByaW1hcnkgYWRkcmVzcyB1c2luZyBT Q1RQX1BSSU1BUllfQUREUiAqLwo+IC0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3ByaW0pOwo+ ICsgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcmltKTsKPiAgIAkvKiBURVNUMTk6 IFRlc3QgY2FzZSBmb3IgZ2V0c29ja29wdCBTQ1RQX1BSSU1BUllfQUREUiAqLwo+IC0JZXJyb3Ig PSBnZXRzb2Nrb3B0KHNrMiwgSVBQUk9UT19TQ1RQLCBTQ1RQX1BSSU1BUllfQUREUiwgJmdwcmlt YWRkciwKPiArCWVycm9yID0gZ2V0c29ja29wdChzazIsSVBQUk9UT19TQ1RQLCBTQ1RQX1BSSU1B UllfQUREUiwgJmdwcmltYWRkciwKPiAgIAkJCSAgICZsZW4pOwo+ICAgCWlmIChlcnJvciA8IDAp Cj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0IFNDVFBfUFJJTUFSWV9BRERS ICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQgU0NUUF9QUklNQVJZX0FERFIgIgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJu byk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoKSBTQ1RQX1BSSU1BUllf QUREUiAtIFNVQ0NFU1MiKTsKPiAgIAo+IC0JZ2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICop JmdwcmltYWRkci5zc3BfYWRkcjsKPiAtCWlmIChodG9ucyhnYWRkci0+c2luX3BvcnQpICE9IGxz dG5fYWRkci5zaW5fcG9ydCAmJgo+IC0JICAgIGdhZGRyLT5zaW5fZmFtaWx5ICE9IGxzdG5fYWRk ci5zaW5fZmFtaWx5ICYmCj4gLQkgICAgZ2FkZHItPnNpbl9hZGRyLnNfYWRkciAhPSBsc3RuX2Fk ZHIuc2luX2FkZHIuc19hZGRyKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29w dCBTQ1RQX1BSSU1BUllfQUREUiB2YWx1ZSAiCj4gKwlnYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJf aW4gKikgJmdwcmltYWRkci5zc3BfYWRkcjsKPiArCWlmKGh0b25zKGdhZGRyLT5zaW5fcG9ydCkg IT0gbHN0bl9hZGRyLnNpbl9wb3J0ICYmCj4gKwkgICBnYWRkci0+c2luX2ZhbWlseSAhPSBsc3Ru X2FkZHIuc2luX2ZhbWlseSAmJgo+ICsJICAgZ2FkZHItPnNpbl9hZGRyLnNfYWRkciAhPSBsc3Ru X2FkZHIuc2luX2FkZHIuc19hZGRyKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdl dHNvY2tvcHQgU0NUUF9QUklNQVJZX0FERFIgdmFsdWUgIgo+ICAgCQkJICJtaXNtYXRjaCIpOwo+ ICAgCj4gICAJbWVtY3B5KCZzcHJpbWFkZHIsICZncHJpbWFkZHIsIHNpemVvZihzdHJ1Y3Qgc2N0 cF9wcmltKSk7Cj4gICAKPiAgIAkvKiBURVNUMjA6IFRlc3QgY2FzZSBmb3Igc2V0c29ja29wdCBT Q1RQX1BSSU1BUllfQUREUiAqLwo+IC0JZXJyb3IgPSBzZXRzb2Nrb3B0KHNrMiwgSVBQUk9UT19T Q1RQLCBTQ1RQX1BSSU1BUllfQUREUiwgJnNwcmltYWRkciwKPiArCWVycm9yID0gc2V0c29ja29w dChzazIsSVBQUk9UT19TQ1RQLCBTQ1RQX1BSSU1BUllfQUREUiwgJnNwcmltYWRkciwKPiAgIAkJ CSAgIGxlbik7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg InNldHNvY2tvcHQgU0NUUF9QUklNQVJZX0FERFIgIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzol ZCIsIGVycm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2V0c29j a29wdCBTQ1RQX1BSSU1BUllfQUREUiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJy b3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNT LCAic2V0c29ja29wdCgpIFNDVFBfUFJJTUFSWV9BRERSIC0gU1VDQ0VTUyIpOwo+ICAgCj4gICAJ LyogVEVTVDIxOiBUZXN0IGNhc2UgZm9yIGdldHNvY2tvcHQgU0NUUF9QUklNQVJZX0FERFIgKi8K PiAgIAkvKiBHZXR0aW5nIHRoZSBhc3NvY2lhdGlvbiBpbmZvIHVzaW5nIFNDVFBfQVNTT0NJTkZP ICovCj4gLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMpOwo+ICsgICAgICAg IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyk7Cj4gICAJZXJyb3IgPSBnZXRz b2Nrb3B0KHNrMiwgSVBQUk9UT19TQ1RQLCBTQ1RQX0FTU09DSU5GTywgJmdhc3NvY3BhcmFtcywK PiAgIAkJCSAgICZsZW4pOwo+ICAgCWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJnZXRzb2Nrb3B0IFNDVFBfQVNTT0NJTkZPICIKPiAtCQkJICJlcnJvcjolZCwgZXJy bm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdl dHNvY2tvcHQgU0NUUF9BU1NPQ0lORk8gIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVy cm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFT UywgImdldHNvY2tvcHQoKSBTQ1RQX0FTU09DSU5GTyAtIFNVQ0NFU1MiKTsKPiAgIAo+IEBAIC0z OTAsMTggKzM5MSwxOCBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCWVycm9yID0gc2V0c29ja29wdChz azIsIElQUFJPVE9fU0NUUCwgU0NUUF9BU1NPQ0lORk8sICZzYXNzb2NwYXJhbXMsCj4gICAJCQkg ICBsZW4pOwo+ICAgCWlmIChlcnJvciA8IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz ZXRzb2Nrb3B0IFNDVFBfQVNTT0NJTkZPICIKPiAtCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBl cnJvciwgZXJybm8pOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNldHNvY2tvcHQg U0NUUF9BU1NPQ0lORk8gIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiVkLCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAllcnJvciA9IGdldHNvY2tvcHQoc2sy LCBJUFBST1RPX1NDVFAsIFNDVFBfQVNTT0NJTkZPLCAmZ2Fzc29jcGFyYW1zLAo+ICAgCQkJICAg Jmxlbik7Cj4gICAJaWYgKGVycm9yIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdl dHNvY2tvcHQgU0NUUF9BU1NPQ0lORk8gIgo+IC0JCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVy cm9yLCBlcnJubyk7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdCBT Q1RQX0FTU09DSU5GTyAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6JWQsIGVy cm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCWlmIChzYXNzb2NwYXJhbXMuc2Fzb2Nf YXNvY21heHJ4dCAhPSBnYXNzb2NwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCB8fAo+ICAgCSAgICBz YXNzb2NwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgIT0gZ2Fzc29jcGFyYW1zLnNhc29jX2Nvb2tp ZV9saWZlKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdCBTQ1RQX0FTU09D SU5GTyB2YWx1ZSAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdCBT Q1RQX0FTU09DSU5GTyB2YWx1ZSAiCj4gICAJCQkgIm1pc21hdGNoIik7Cj4gICAJdHN0X3Jlc20o VFBBU1MsICJzZXRzb2Nrb3B0KCkgU0NUUF9BU1NPQ0lORk8gLSBTVUNDRVNTIik7Cj4gICAKPiBA QCAtNDA5LDUgKzQxMCw1IEBAIGludCBtYWluKHZvaWQpCj4gICAJY2xvc2Uoc2sxKTsKPiAgIAlj bG9zZShhY3B0X3NrKTsKPiAgIAo+IC0JdHN0X2V4aXQoKTsKPiArCXJldHVybiAwOwo+ICAgfQo+ IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF8xX3Rv XzFfdGhyZWFkcy5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90 b18xX3RocmVhZHMuYwo+IGluZGV4IGQwOWVjMDkuLmUyYTdlZWUgMTAwNjQ0Cj4gLS0tIGEvdGVz dGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfMV90b18xX3RocmVhZHMuYwo+ICsr KyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0XzFfdG9fMV90aHJlYWRz LmMKPiBAQCAtMSwxOCArMSwxOCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVt ZW50YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIENvcHlyaWdo dCAoYykgMjAwMyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QCj4gICAg KiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0Cj4gICAgKgo+ICAgICogVGhpcyBmaWxlIGRv ZXMgc2VuZCBhbmQgcmVjZWl2ZSBmb3IgNTAwIHRocmVhZHMgb24gYSB1bmlxdWUgYXNzb2NpYXRp b24gZm9yCj4gLSAqIFRIUkVBRF9TTkRfUkNWX0xPT1BTID0gMTAgbWFueSB0aW1lcy4gVG8gY2hh bmdlIHRoZSBudW1iZXIgb2YgdGhyZWFkcwo+ICsgKiBUSFJFQURfU05EX1JDVl9MT09QUyA9IDEw IG1hbnkgdGltZXMuIFRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIHRocmVhZHMKPiAgICAqIGNoYW5n ZSB0aGUgVEhSRUFEUyB2YWx1ZW4gYW5kIGxvb3AgY2hhbmdlIHRoZSBUSFJFQURfU05EX1JDVl9M T09QUy4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBm cmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3 YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAg ICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4g QEAgLTQyLDE2ICs0MiwxNSBAQAo+ICAgI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAgI2luY2x1ZGUg PHN5cy90eXBlcy5oPgo+ICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KPiAtI2luY2x1ZGUgPG5l dGluZXQvaW4uaD4JCS8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICsjaW5jbHVkZSA8bmV0aW5ldC9p bi5oPiAgICAgICAgIC8qIGZvciBzb2NrYWRkcl9pbiAqLwo+ICAgI2luY2x1ZGUgPGFycGEvaW5l dC5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+ Cj4gICAjaW5jbHVkZSA8c3lzL3Vpby5oPgo+IC0jaW5jbHVkZSA8c3RkaW50Lmg+Cj4gICAjaW5j bHVkZSA8bGludXgvc29ja2V0Lmg+Cj4gICAjaW5jbHVkZSA8c2N0cHV0aWwuaD4KPiAgIAo+IC0j ZGVmaW5lIFRIUkVBRFMgMTAJCS8qIEZJWE1FIHNob3VsZCBiZSA1MDAgaW5zdGVhZCBvZiAxMCAq Lwo+ICsjZGVmaW5lIFRIUkVBRFMgMTAgICAgLyogRklYTUUgc2hvdWxkIGJlIDUwMCBpbnN0ZWFk IG9mIDEwICovCj4gICAjZGVmaW5lIFRIUkVBRF9TTkRfUkNWX0xPT1BTIDEwCj4gICAKPiAgIGNo YXIgKlRDSUQgPSBfX0ZJTEVfXzsKPiBAQCAtNjEsODkgKzYwLDg3IEBAIGludCBUU1RfQ05UID0g MDsKPiAgIGludCBjbGllbnRfc2s7Cj4gICBpbnQgc2VydmVyX3NrOwo+ICAgaW50IGFjcHRfc2s7 Cj4gLXN0cnVjdCBzb2NrYWRkcl9pbiBjb25uX2FkZHI7Cj4gK3N0cnVjdCBzb2NrYWRkcl9pbiAg Y29ubl9hZGRyOwo+ICAgY2hhciAqbWVzc2FnZSA9ICJoZWxsbywgd29ybGQhXG4iOwo+ICAgCj4g LXZvaWQgdF9yZWN2KGludCBpZCkKPiAtewo+ICt2b2lkCj4gK3RfcmVjdih2b2lkKSB7Cj4gICAJ aW50IGNudDsKPiAgIAlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiAgIAlzdHJ1Y3QgaW92ZWMg aW92Owo+IC0JY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2 aW5mbykpXTsKPiAtCWNoYXIgKmJ1ZmZlcjsKPiArICAgICAgICBjaGFyIGluY21zZ1tDTVNHX1NQ QUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSldOwo+ICsgICAgICAgIGNoYXIgKiBi dWZmZXI7Cj4gICAKPiAgIAltZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkp Owo+IC0JYnVmZmVyID0gbWFsbG9jKDEwMCk7Cj4gKyAgICAgICAgYnVmZmVyID0gbWFsbG9jKDEw MCk7Cj4gICAKPiAtCWlvdi5pb3ZfYmFzZSA9IGJ1ZmZlcjsKPiAtCWlvdi5pb3ZfbGVuID0gMTAw Owo+IC0JaW5tZXNzYWdlLm1zZ19pb3YgPSAmaW92Owo+IC0JaW5tZXNzYWdlLm1zZ19pb3ZsZW4g PSAxOwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+IC0JaW5tZXNzYWdlLm1z Z19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgaW92Lmlvdl9iYXNlID0g YnVmZmVyOwo+ICsgICAgICAgIGlvdi5pb3ZfbGVuID0gMTAwOwo+ICsgICAgICAgIGlubWVzc2Fn ZS5tc2dfaW92ID0gJmlvdjsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4g KyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+ICsgICAgICAgIGlubWVz c2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICAgCj4gLQljbnQgPSB0ZXN0 X3JlY3Ztc2coYWNwdF9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JdGVzdF9jaGVj a19tc2dfZGF0YSgmaW5tZXNzYWdlLCBjbnQsIHN0cmxlbihtZXNzYWdlKSArIDEsIE1TR19FT1Is Cj4gKwljbnQgPSB0ZXN0X3JlY3Ztc2coYWNwdF9zaywmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7 Cj4gKyAgICAgICAgdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBjbnQsIHN0cmxlbiht ZXNzYWdlKSArIDEsIE1TR19FT1IsCj4gICAJCQkgICAgMCwgMCk7Cj4gICB9Cj4gICAKPiAtdm9p ZCB0X3NlbmQoaW50IGlkKQo+IC17Cj4gLQlzdHJ1Y3QgbXNnaGRyIG91dG1lc3NhZ2U7Cj4gLQlz dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKPiAtCWNoYXIgKmJ1ZmZlcl9zbmQ7Cj4gLQlz dHJ1Y3QgY21zZ2hkciAqY21zZzsKPiAtCXN0cnVjdCBpb3ZlYyBvdXRfaW92Owo+IC0JY2hhciBv dXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHNjdHBfY21zZ19kYXRhX3QpKV07Cj4gLQo+IC0JbWVt c2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkpOwo+IC0JYnVmZmVyX3NuZCA9 IG1hbGxvYygxMDApOwo+IC0KPiAtCW91dG1lc3NhZ2UubXNnX25hbWUgPSAmY29ubl9hZGRyOwo+ IC0Jb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihjb25uX2FkZHIpOwo+IC0Jb3V0bWVz c2FnZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbCA9IG91dGNtc2c7Cj4gLQlvdXRtZXNzYWdlLm1zZ19j b250cm9sbGVuID0gc2l6ZW9mKG91dGNtc2cpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAw Owo+IC0KPiAtCWNtc2cgPSBDTVNHX0ZJUlNUSERSKCZvdXRtZXNzYWdlKTsKPiArdm9pZAo+ICt0 X3NlbmQodm9pZCkgewo+ICsgICAgICAgIHN0cnVjdCBtc2doZHIgb3V0bWVzc2FnZTsKPiArICAg ICAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKPiArICAgICAgICBzdHJ1Y3QgY21z Z2hkciAqY21zZzsKPiArICAgICAgICBzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiArICAgICAgICBj aGFyIG91dGNtc2dbQ01TR19TUEFDRShzaXplb2Yoc2N0cF9jbXNnX2RhdGFfdCkpXTsKPiArCj4g KyAgICAgICAgbWVtc2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkpOwo+ICsg ICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWUgPSAmY29ubl9hZGRyOwo+ICsgICAgICAgIG91dG1l c3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YoY29ubl9hZGRyKTsKPiArICAgICAgICBvdXRtZXNz YWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3ZsZW4g PSAxOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2wgPSBvdXRjbXNnOwo+ICsgICAg ICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gKyAgICAg ICAgb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICsKPiArICAgICAgICBjbXNnID0gQ01TR19G SVJTVEhEUigmb3V0bWVzc2FnZSk7Cj4gICAJY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fU0NU UDsKPiAtCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNWOwo+IC0JY21zZy0+Y21zZ19sZW4g PSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0Jb3V0bWVzc2Fn ZS5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwo+ICsgICAgICAgIGNtc2ctPmNtc2df dHlwZSA9IFNDVFBfU05EUkNWOwo+ICsgICAgICAgIGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4o c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1z Z19jb250cm9sbGVuID0gY21zZy0+Y21zZ19sZW47Cj4gICAKPiAtCXNpbmZvID0gKHN0cnVjdCBz Y3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21zZyk7Cj4gLQltZW1zZXQoc2luZm8sIDB4MDAs IHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3Yt Pmlvdl9iYXNlID0gbWVzc2FnZTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IChz dHJsZW4obWVzc2FnZSkgKyAxKTsKPiArICAgICAgICBzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRy Y3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOwo+ICsgICAgICAgIG1lbXNldChzaW5mbywgMHgwMCwg c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1z Z19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3Yt Pmlvdl9sZW4gPSAoc3RybGVuKG1lc3NhZ2UpICsgMSk7Cj4gICAKPiAtCXRlc3Rfc2VuZG1zZyhj bGllbnRfc2ssICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArICAgICAg ICB0ZXN0X3NlbmRtc2coY2xpZW50X3NrLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2Up KzEpOwo+ICAgfQo+ICAgCj4gLXZvaWQgKnJlbGF5KHZvaWQgKmlkXykKPiArdm9pZCAqcmVsYXko dm9pZCAqYXJnKQo+ICAgewo+IC0JaW50IGlkID0gKHVpbnRwdHJfdCkgaWRfOwo+ICsJaW50IGlk ID0gKihpbnQgKikgYXJnOwo+ICsKPiAgIAlpZiAoaWQgPT0gMCkgewo+IC0JCXRfc2VuZChpZCk7 Cj4gLQl9IGVsc2UgaWYgKGlkID09IFRIUkVBRFMgLSAxKSB7Cj4gLQkJdF9zZW5kKGlkKTsKPiAr CQl0X3NlbmQoKTsKPiAgIAl9IGVsc2Ugewo+IC0JCXRfcmVjdihpZCk7Cj4gLQkJdF9zZW5kKGlk KTsKPiArCQl0X3JlY3YoKTsKPiArCQl0X3NlbmQoKTsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiAw Owo+ICsJcHRocmVhZF9leGl0KE5VTEwpOwo+ICAgfQo+ICAgCj4gLWludCBtYWluKHZvaWQpCj4g K2ludAo+ICttYWluKHZvaWQpCj4gICB7Cj4gICAKPiAtCWludCBjbnQsIGk7Cj4gLQlwdGhyZWFk X3QgdGhyZWFkW1RIUkVBRFNdOwo+IC0JaW50IHN0YXR1czsKPiAtCWludCBleGl0X3N0YXR1czsK PiAtCXZvaWQgKnJlc3VsdDsKPiArCWludCAgICAgIGNudCxpOwo+ICsJaW50ICAgICAgcHRoW1RI UkVBRFNdOwo+ICsJcHRocmVhZF90ICAgICAgIHRocmVhZFtUSFJFQURTXTsKPiArCWludCAgc3Rh dHVzOwo+ICsJaW50ICBleGl0X3N0YXR1czsKPiArCXZvaWQgKiAgICAgIHJlc3VsdDsKPiAgIAlw dGhyZWFkX2F0dHJfdCBhdHRyOwo+ICAgCXN0cnVjdCBzb2NrYWRkcl9pbiBsc3RuX2FkZHI7Cj4g ICAJc29ja2xlbl90IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwo+IEBAIC0xNTEs NDMgKzE0OCw0MyBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCj4gICAJcHRocmVhZF9hdHRyX2luaXQo JmF0dHIpOwo+ICAgCXB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYXR0ciwgUFRIUkVBRF9D UkVBVEVfSk9JTkFCTEUpOwo+IC0KPiArCQo+ICAgCXNlcnZlcl9zayA9IHRlc3Rfc29ja2V0KFBG X0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCWNsaWVudF9zayA9IHRlc3Rf c29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJbHN0 bl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JbHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRk ciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgbHN0bl9hZGRyLnNpbl9hZGRyLnNfYWRk ciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gICAJbHN0bl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoU0NU UF9URVNUUE9SVF8xKTsKPiAgIAo+ICAgCWNvbm5fYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK PiAtCWNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAg ICAgIGNvbm5fYWRkci5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICAgCWNv bm5fYWRkci5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAgIAl0ZXN0 X2JpbmQoc2VydmVyX3NrLCAoc3RydWN0IHNvY2thZGRyICopJmxzdG5fYWRkciwKPiAtCQkgIHNp emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKPiArCQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p bikpOwo+ICAgCj4gLQl0ZXN0X2xpc3RlbihzZXJ2ZXJfc2ssIDEwKTsKPiArCXRlc3RfbGlzdGVu KHNlcnZlcl9zaywxMCk7Cj4gICAKPiAtCXRlc3RfY29ubmVjdChjbGllbnRfc2ssIChzdHJ1Y3Qg c29ja2FkZHIgKikmY29ubl9hZGRyLCBsZW4pOwo+ICsJdGVzdF9jb25uZWN0KGNsaWVudF9zaywo c3RydWN0IHNvY2thZGRyICopJmNvbm5fYWRkcixsZW4pOwo+ICAgCj4gICAJYWNwdF9zayA9IHRl c3RfYWNjZXB0KHNlcnZlcl9zaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzdnJfYWRkciwgJmxlbik7 Cj4gICAKPiAtCWZvciAoaSA9IDA7IGkgPCBUSFJFQURfU05EX1JDVl9MT09QUzsgaSsrKSB7Cj4g LQkJZm9yIChjbnQgPSAxOyBjbnQgPCBUSFJFQURTOyBjbnQrKykgewo+IC0JCQlzdGF0dXMgPSBw dGhyZWFkX2NyZWF0ZSgmdGhyZWFkW2NudF0sICZhdHRyLAo+IC0JCQkJCQlyZWxheSwgKHZvaWQg KikodWludHB0cl90KSBjbnQpOwo+ICsJZm9yICggaSA9IDA7IGkgPCBUSFJFQURfU05EX1JDVl9M T09QUzsgaSsrICkgewo+ICsJCWZvciAoY250ID0gMDsgY250IDwgVEhSRUFEUzsgY250KyspIHsK PiArCQkJcHRoW2NudF0gPSBjbnQ7Cj4gKwkJCXN0YXR1cyA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJl YWRbY250XSwgJmF0dHIsIHJlbGF5LCAmcHRoW2NudF0pOwo+ICAgCQkJaWYgKHN0YXR1cykKPiAt CQkJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAicHRocmVhZF9jcmVhdGUgIgo+IC0JCQkJCSAiZmFp bGVkIHN0YXR1czolZCwgZXJybm86JWQiLCBzdGF0dXMsCj4gKwkJCQl0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJwdGhyZWFkX2NyZWF0ZSAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAJ CSAiZmFpbGVkIHN0YXR1czolZCwgZXJybm86JWQiLCBzdGF0dXMsCj4gICAJCQkJCSBlcnJubyk7 Cj4gICAJCX0KPiAgIAo+ICAgCQlwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7Cj4gLQkJZm9y IChjbnQgPSAxOyBjbnQgPCBUSFJFQURTOyBjbnQrKykgewo+IC0JCQlleGl0X3N0YXR1cyA9IHB0 aHJlYWRfam9pbih0aHJlYWRbY250XSwgJnJlc3VsdCk7Cj4gKwkJZm9yIChjbnQgPSAwOyBjbnQg PCBUSFJFQURTIDsgY250KyspIHsKPiArCQkJZXhpdF9zdGF0dXMgPSBwdGhyZWFkX2pvaW4gKHRo cmVhZFtjbnRdLCAmcmVzdWx0KTsKPiAgIAkJCWlmIChleGl0X3N0YXR1cyA9PSAtMSkKPiAtCQkJ CXRzdF9icmttKFRCUk9LLCBOVUxMLCAicHRocmVhZF9qb2luICIKPiAtCQkJCQkgIlRocmVhZCAj JWQgZXhpdGVkIHdpdGggc3RhdHVzOiVkIiwKPiArCQkJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgInB0aHJlYWRfam9pbiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAJCSAiVGhyZWFk ICMlZCBleGl0ZWQgd2l0aCBzdGF0dXM6JWQiLAo+ICAgCQkJCQkgY250LCBleGl0X3N0YXR1cyk7 Cj4gICAJCX0KPiAgIAl9Cj4gQEAgLTE5NSw1ICsxOTIsNSBAQCBpbnQgbWFpbih2b2lkKQo+ICAg CXRzdF9yZXNtKFRQQVNTLCAic2VuZCBhbmQgcmVjZWl2ZSBkYXRhIGFjcm9zcyBtdWx0aXBsZSB0 aHJlYWRzIC0gIgo+ICAgCQkgIlNVQ0NFU1MiKTsKPiAgIAo+IC0JcHRocmVhZF9leGl0KE5VTEwp Owo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3Nj dHAvZnVuY190ZXN0cy90ZXN0X2Fzc29jX2Fib3J0LmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3Rw L2Z1bmNfdGVzdHMvdGVzdF9hc3NvY19hYm9ydC5jCj4gaW5kZXggNTJkNWViZC4uZjgwMTljNyAx MDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9hc3Nv Y19hYm9ydC5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3Rf YXNzb2NfYWJvcnQuYwo+IEBAIC0xLDE3ICsxLDE3IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVy ZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAg ICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwMwo+ICAgICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1v dG9yb2xhLCBJbmMuCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KPiAgICAq IENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVm ZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGlt cGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ ICAgICogYW55IGxhdGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2Ug aW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBU aGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 Cj4gICAgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioq KioqKioqKioKPiAgICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAtNTksNyArNTksOCBAQCBpbnQgVFNUX0NOVCA9 IDA7Cj4gICAKPiAgICNkZWZpbmUgTUFYX0NMSUVOVFMgMTAKPiAgIAo+IC1pbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+ICtpbnQKPiArbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQo+ICAgewo+ICAgCWludCBzdnJfc2ssIGNsdF9za1tNQVhfQ0xJRU5UU107Cj4gICAJc29ja2Fk ZHJfc3RvcmFnZV90IHN2cl9sb29wLCBjbHRfbG9vcFtNQVhfQ0xJRU5UU107Cj4gQEAgLTcxLDI0 ICs3MiwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWNoYXIgb3V0 Y21zZ1tDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSldOwo+ICAgCXN0 cnVjdCBjbXNnaGRyICpjbXNnOwo+ICAgCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvOwo+ IC0Jc3RydWN0IGlvdmVjIG91dF9pb3Y7Cj4gLQlpbnQgZXJyb3I7Cj4gKyAgICAgICAgc3RydWN0 IGlvdmVjIG91dF9pb3Y7Cj4gKyAgICAgICAgaW50IGVycm9yOwo+ICAgCXVpbnQzMl90IHBwaWQ7 Cj4gICAJdWludDMyX3Qgc3RyZWFtOwo+ICAgCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2Fj Owo+ICAgCWNoYXIgKmJpZ19idWZmZXI7Cj4gICAJaW50IGk7Cj4gLQljaGFyICptZXNzYWdlID0g ImhlbGxvLCB3b3JsZCFcbiI7Cj4gKyAgICAgICAgY2hhciAqbWVzc2FnZSA9ICJoZWxsbywgd29y bGQhXG4iOwo+ICAgCXN0cnVjdCBzY3RwX3N0YXR1cyBzdGF0dXM7Cj4gICAJc29ja2xlbl90IHN0 YXR1c19sZW47Cj4gICAKPiAtCS8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhl IGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVyZWQuCj4gLQkgKi8KPiAtCXNl dHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsgICAgICAgIC8qIFJhdGhlciB0aGFu IGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiArCSAqIGJlIHVu YnVmZmVyZWQuCj4gKwkgKi8KPiArCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ ICAgCj4gICAJLyogQ3JlYXRlIGFuZCBiaW5kIHRoZSBzZXJ2ZXIgc29ja2V0LiAgKi8KPiAtCXN2 cl9zayA9IHRlc3Rfc29ja2V0KEFGX0lORVQsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAp Owo+ICsgICAgICAgIHN2cl9zayA9IHRlc3Rfc29ja2V0KEFGX0lORVQsIFNPQ0tfU0VRUEFDS0VU LCBJUFBST1RPX1NDVFApOwo+ICAgCXN2cl9sb29wLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ ICAgCXN2cl9sb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gICAJ c3ZyX2xvb3AudjQuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+IEBAIC0xMjcs MjIgKzEyOCwyMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCW91dG1l c3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsKPiAgIAlzaW5mbyA9IChzdHJ1 Y3Qgc2N0cF9zbmRyY3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOwo+ICAgCW1lbXNldChzaW5mbywg MHgwMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiAtCXBwaWQgPSByYW5kKCk7 CQkvKiBDaG9vc2UgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqLwo+IC0Jc3RyZWFtID0gMTsKPiArCXBw aWQgPSByYW5kKCk7IC8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFsdWUuICovCj4gKwlzdHJlYW0g PSAxOwo+ICAgCXNpbmZvLT5zaW5mb19wcGlkID0gcHBpZDsKPiAgIAlzaW5mby0+c2luZm9fc3Ry ZWFtID0gc3RyZWFtOwo+ICAgCW91dF9pb3YuaW92X2Jhc2UgPSBtZXNzYWdlOwo+ICAgCW91dF9p b3YuaW92X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gLQo+IC0JLyogU2VuZCB0aGUgZmly c3QgbWVzc2FnZSBmcm9tIGFsbCB0aGUgY2xpZW50cyB0byB0aGUgc2VydmVyLiAgVGhpcwo+IC0J ICogd2lsbCBjcmVhdGUgdGhlIGFzc29jaWF0aW9ucy4KPiArCQo+ICsgICAgICAgIC8qIFNlbmQg dGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBhbGwgdGhlIGNsaWVudHMgdG8gdGhlIHNlcnZlci4gIFRo aXMKPiArCSAqIHdpbGwgY3JlYXRlIHRoZSBhc3NvY2lhdGlvbnMuCj4gICAJICovCj4gICAJZm9y IChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKyspCj4gICAJCXRlc3Rfc2VuZG1zZyhjbHRfc2tb aV0sICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiAtCj4gKwo+ICAgCS8q IEluaXRpYWxpemUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2ZXMuICovCj4gICAJYmlnX2J1ZmZl ciA9IHRlc3RfbWFsbG9jKFJFQUxMWV9CSUcpOwo+IC0JbWVtc2V0KCZpbm1lc3NhZ2UsIDAsIHNp emVvZihpbm1lc3NhZ2UpKTsKPiArICAgICAgICBtZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9m KGlubWVzc2FnZSkpOwkKPiAgIAlpb3YuaW92X2Jhc2UgPSBiaWdfYnVmZmVyOwo+ICAgCWlvdi5p b3ZfbGVuID0gUkVBTExZX0JJRzsKPiAgIAlpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7Cj4gQEAg LTE1NSwyMiArMTU2LDIyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJ CWVycm9yID0gdGVzdF9yZWN2bXNnKGNsdF9za1tpXSwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwp Owo+ICAgCQl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4g ICAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSwKPiAtCQkJCQkgICAg U0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkJICAgIFNDVFBfQVNTT0Nf Q0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAl9Cj4gICAKPiAgIAkvKiBHZXQgdGhlIGNvbW11 bmljYXRpb24gdXAgbWVzc2FnZSBhbmQgdGhlIGRhdGEgbWVzc2FnZSBvbiB0aGUKPiAtCSAqIHNl cnZlciBzb2NrZXRzIGZvciBhbGwgdGhlIGNsaWVudHMuCj4gKwkgKiBzZXJ2ZXIgc29ja2V0cyBm b3IgYWxsIHRoZSBjbGllbnRzLgo+ICAgCSAqLwo+ICAgCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0xJ RU5UUzsgaSsrKSB7Cj4gICAJCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNt c2cpOwo+ICAgCQllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19X QUlUQUxMKTsKPiAgIAkJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVy cm9yLAo+ICAgCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJ CQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJCSAgICBTQ1RQ X0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsJCj4gICAKPiAgIAkJaW5tZXNzYWdlLm1zZ19j b250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9yZWN2bXNnKHN2 cl9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JCXRlc3RfY2hlY2tfbXNnX2RhdGEo JmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSArIDEsCj4gKwkJdGVzdF9jaGVja19t c2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwgc3RybGVuKG1lc3NhZ2UpICsgMSwKPiAgIAkJCQkg ICAgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAgIAkJc2FjID0gKHN0cnVjdCBzY3RwX2Fzc29j X2NoYW5nZSAqKWlvdi5pb3ZfYmFzZTsKPiAgIAkJc3ZyX2Fzc29jaWRbaV0gPSBzYWMtPnNhY19h c3NvY19pZDsKPiBAQCAtMjAzLDcgKzIwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCj4gICAJCWVycm9yID0gZ2V0c29ja29wdChzdnJfc2ssIFNPTF9TQ1RQLCBTQ1RQX1NU QVRVUywKPiAgIAkJCQkgICAmc3RhdHVzLCAmc3RhdHVzX2xlbik7Cj4gICAJCWlmIChlcnJvcikK PiAtCQkJdHN0X2Jya20oVEJST0ssIE5VTEwsCj4gKwkJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwKPiAgIAkJCQkgImdldHNvY2tvcHQoU0NUUF9TVEFUVVMpOiAlcyIsCj4gICAJCQkJIHN0cmVy cm9yKGVycm5vKSk7Cj4gICAKPiBAQCAtMjE0LDI5ICsyMTUsMjkgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3Qg c2N0cF9zdGF0dXMpKTsKPiAgIAkJc3RhdHVzLnNzdGF0X2Fzc29jX2lkID0gc2luZm8tPnNpbmZv X2Fzc29jX2lkOwo+ICAgCQlzdGF0dXNfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7 Cj4gLQkJZXJyb3IgPSBnZXRzb2Nrb3B0KHN2cl9zaywgU09MX1NDVFAsIFNDVFBfU1RBVFVTLAo+ ICsJCWVycm9yID0gZ2V0c29ja29wdChzdnJfc2ssIFNPTF9TQ1RQLCBTQ1RQX1NUQVRVUywKPiAg IAkJCQkgICAmc3RhdHVzLCAmc3RhdHVzX2xlbik7Cj4gICAJCWlmICgoZXJyb3IgIT0gLTEpICYm IChlcnJubyAhPSBFSU5WQUwpKQo+IC0JCQl0c3RfYnJrbShUQlJPSywgTlVMTCwKPiArCQkJdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LAo+ICAgCQkJCSAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUykg Igo+ICAgCQkJCSAiZXJyb3I6JWQgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCX0KPiAg IAo+ICAgCWNsb3NlKHN2cl9zayk7Cj4gICAKPiAtCS8qIEdldCB0aGUgQ09NTV9MT1NUIG5vdGlm aWNhdGlvbi4gKi8KPiArICAgICAgICAvKiBHZXQgdGhlIENPTU1fTE9TVCBub3RpZmljYXRpb24u ICovCj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKyspIHsKPiAgIAkJaW5tZXNz YWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9y ZWN2bXNnKGNsdF9za1tpXSwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCQl0ZXN0X2No ZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gLQkJCQkJICAgIHNpemVv ZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5H RSwgU0NUUF9DT01NX0xPU1QpOwo+ICsJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf Y2hhbmdlKSs0LAo+ICsJCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX0xPU1Qp OwkKPiAgIAo+ICAgCQljbG9zZShjbHRfc2tbaV0pOwo+ICAgCX0KPiAgIAo+IC0JdHN0X3Jlc20o VFBBU1MsICJBQk9SVCBhbiBhc3NvY2lhdGlvbiB1c2luZyBTQ1RQX0FCT1JUIik7Cj4gKwl0c3Rf cmVzbShUUEFTUywgIkFCT1JUIGFuIGFzc29jaWF0aW9uIHVzaW5nIFNDVFBfQUJPUlQiKTsKPiAg IAo+IC0JLyogSW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiAtCXRzdF9leGl0 KCk7Cj4gKyAgICAgICAgLyogSW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiAr ICAgICAgICByZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsv c2N0cC9mdW5jX3Rlc3RzL3Rlc3RfYXNzb2Nfc2h1dGRvd24uYyBiL3Rlc3RjYXNlcy9uZXR3b3Jr L3NjdHAvZnVuY190ZXN0cy90ZXN0X2Fzc29jX3NodXRkb3duLmMKPiBpbmRleCBhNzhlOTU1Li5h MDA3MTE3IDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90 ZXN0X2Fzc29jX3NodXRkb3duLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF9hc3NvY19zaHV0ZG93bi5jCj4gQEAgLTEsMTcgKzEsMTcgQEAKPiAtLyogU0NU UCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAga2VybmVsIEltcGxl bWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDAzCj4gICAg KiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgo+ICAgICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMSBJbnRl bCBDb3JwLgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIE5va2lhLCBJbmMuCj4gICAgKgo+IC0g KiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAr ICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4g ICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg eW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBT Q1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoq KioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC01OCw3ICs1OCw4IEBA IGludCBUU1RfQ05UID0gMDsKPiAgIAo+ICAgI2RlZmluZSBNQVhfQ0xJRU5UUyAxMAo+ICAgCj4g LWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2ludAo+ICttYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCj4gICB7Cj4gICAJaW50IHN2cl9zaywgY2x0X3NrW01BWF9DTElFTlRT XTsKPiAgIAlzY3RwX2Fzc29jX3Qgc3ZyX2Fzc29jaWRbTUFYX0NMSUVOVFNdOwo+IEBAIC03MCwy NCArNzEsMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAljaGFyIG91 dGNtc2dbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpXTsKPiAgIAlz dHJ1Y3QgY21zZ2hkciAqY21zZzsKPiAgIAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsK PiAtCXN0cnVjdCBpb3ZlYyBvdXRfaW92Owo+IC0JaW50IGVycm9yOwo+ICsgICAgICAgIHN0cnVj dCBpb3ZlYyBvdXRfaW92Owo+ICsgICAgICAgIGludCBlcnJvcjsKPiAgIAl1aW50MzJfdCBwcGlk Owo+ICAgCXVpbnQzMl90IHN0cmVhbTsKPiAgIAlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNh YzsKPiAgIAljaGFyICpiaWdfYnVmZmVyOwo+ICAgCWludCBpOwo+IC0JY2hhciAqbWVzc2FnZSA9 ICJoZWxsbywgd29ybGQhXG4iOwo+ICsgICAgICAgIGNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdv cmxkIVxuIjsKPiAgIAlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVzOwo+ICAgCXNvY2tsZW5fdCBz dGF0dXNfbGVuOwo+ICAgCj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRo ZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZlcmVkLgo+IC0JICovCj4gLQlz ZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAvKiBSYXRoZXIgdGhh biBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gKwkgKiBiZSB1 bmJ1ZmZlcmVkLgo+ICsJICovCj4gKwlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsK PiAgIAo+ICAgCS8qIENyZWF0ZSBhbmQgYmluZCB0aGUgc2VydmVyIHNvY2tldC4gICovCj4gLQlz dnJfc2sgPSB0ZXN0X3NvY2tldChBRl9JTkVULCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQ KTsKPiArICAgICAgICBzdnJfc2sgPSB0ZXN0X3NvY2tldChBRl9JTkVULCBTT0NLX1NFUVBBQ0tF VCwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCXN2cl9sb29wLnY0LnNpbl9mYW1pbHkgPSBBRl9J TkVUOwo+ICAgCXN2cl9sb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7 Cj4gQEAgLTEyNywyMiArMTI4LDIyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Cj4gICAJb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwo+ICAgCXNp bmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21zZyk7Cj4gICAJbWVt c2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0JcHBp ZCA9IHJhbmQoKTsJCS8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFsdWUuICovCj4gLQlzdHJlYW0g PSAxOwo+ICsJcHBpZCA9IHJhbmQoKTsgLyogQ2hvb3NlIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8K PiArCXN0cmVhbSA9IDE7Cj4gICAJc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlkOwo+ICAgCXNpbmZv LT5zaW5mb19zdHJlYW0gPSBzdHJlYW07Cj4gICAJb3V0X2lvdi5pb3ZfYmFzZSA9IG1lc3NhZ2U7 Cj4gICAJb3V0X2lvdi5pb3ZfbGVuID0gc3RybGVuKG1lc3NhZ2UpICsgMTsKPiAtCj4gLQkvKiBT ZW5kIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gYWxsIHRoZSBjbGllbnRzIHRvIHRoZSBzZXJ2ZXIu ICBUaGlzCj4gLQkgKiB3aWxsIGNyZWF0ZSB0aGUgYXNzb2NpYXRpb25zLgo+ICsJCj4gKyAgICAg ICAgLyogU2VuZCB0aGUgZmlyc3QgbWVzc2FnZSBmcm9tIGFsbCB0aGUgY2xpZW50cyB0byB0aGUg c2VydmVyLiAgVGhpcwo+ICsJICogd2lsbCBjcmVhdGUgdGhlIGFzc29jaWF0aW9ucy4KPiAgIAkg Ki8KPiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NMSUVOVFM7IGkrKykKPiAtCQl0ZXN0X3NlbmRt c2coY2x0X3NrW2ldLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpICsgMSk7Cj4gLQo+ ICsJCXRlc3Rfc2VuZG1zZyhjbHRfc2tbaV0sICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2Fn ZSkrMSk7Cj4gKwo+ICAgCS8qIEluaXRpYWxpemUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2ZXMu ICovCj4gICAJYmlnX2J1ZmZlciA9IHRlc3RfbWFsbG9jKFJFQUxMWV9CSUcpOwo+IC0JbWVtc2V0 KCZpbm1lc3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsKPiArICAgICAgICBtZW1zZXQoJmlu bWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwkKPiAgIAlpb3YuaW92X2Jhc2UgPSBiaWdf YnVmZmVyOwo+ICAgCWlvdi5pb3ZfbGVuID0gUkVBTExZX0JJRzsKPiAgIAlpbm1lc3NhZ2UubXNn X2lvdiA9ICZpb3Y7Cj4gQEAgLTE1NSwyMiArMTU2LDIyIEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCj4gICAJCWVycm9yID0gdGVzdF9yZWN2bXNnKGNsdF9za1tpXSwgJmlubWVz c2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCQl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlu bWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hh bmdlKSwKPiAtCQkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJ CQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAl9Cj4gICAKPiAg IAkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBhbmQgdGhlIGRhdGEgbWVzc2Fn ZSBvbiB0aGUKPiAtCSAqIHNlcnZlciBzb2NrZXRzIGZvciBhbGwgdGhlIGNsaWVudHMuCj4gKwkg KiBzZXJ2ZXIgc29ja2V0cyBmb3IgYWxsIHRoZSBjbGllbnRzLgo+ICAgCSAqLwo+ICAgCWZvciAo aSA9IDA7IGkgPCBNQVhfQ0xJRU5UUzsgaSsrKSB7Cj4gICAJCWlubWVzc2FnZS5tc2dfY29udHJv bGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICAgCQllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ss ICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAkJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0 aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz c29jX2NoYW5nZSksCj4gLQkJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVAp Owo+ICsJCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsJCQo+ICAgCj4g ICAJCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICAgCQllcnJv ciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAtCQl0 ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obWVzc2FnZSkgKyAx LAo+ICsJCXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNz YWdlKSsxLAo+ICAgCQkJCSAgICBNU0dfRU9SLCBzdHJlYW0sIHBwaWQpOwo+ICAgCQlzYWMgPSAo c3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCQlzdnJfYXNzb2Np ZFtpXSA9IHNhYy0+c2FjX2Fzc29jX2lkOwo+IEBAIC0yMDQsNyArMjA1LDcgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJZXJyb3IgPSBnZXRzb2Nrb3B0KHN2cl9zaywg U09MX1NDVFAsIFNDVFBfU1RBVFVTLAo+ICAgCQkJCSAgICZzdGF0dXMsICZzdGF0dXNfbGVuKTsK PiAgIAkJaWYgKGVycm9yKQo+IC0JCQl0c3RfYnJrbShUQlJPSywgTlVMTCwKPiArCQkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LAo+ICAgCQkJCSAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUyk6ICVz IiwKPiAgIAkJCQkgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+IEBAIC0yMTUsMTcgKzIxNiwxNyBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCQltZW1zZXQoJnN0YXR1cywg MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cykpOwo+ICAgCQlzdGF0dXMuc3N0YXRfYXNzb2Nf aWQgPSBzaW5mby0+c2luZm9fYXNzb2NfaWQ7Cj4gICAJCXN0YXR1c19sZW4gPSBzaXplb2Yoc3Ry dWN0IHNjdHBfc3RhdHVzKTsKPiAtCQllcnJvciA9IGdldHNvY2tvcHQoc3ZyX3NrLCBTT0xfU0NU UCwgU0NUUF9TVEFUVVMsCj4gKwkJZXJyb3IgPSBnZXRzb2Nrb3B0KHN2cl9zaywgU09MX1NDVFAs IFNDVFBfU1RBVFVTLAo+ICAgCQkJCSAgICZzdGF0dXMsICZzdGF0dXNfbGVuKTsKPiAgIAkJaWYg KChlcnJvciAhPSAtMSkgJiYgKGVycm5vICE9IEVJTlZBTCkpCj4gLQkJCXRzdF9icmttKFRCUk9L LCBOVUxMLAo+ICsJCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsCj4gICAJCQkJICJnZXRzb2Nr b3B0KFNDVFBfU1RBVFVTKSAiCj4gICAJCQkJICJlcnJvcjolZCBlcnJubzolZCIsIGVycm9yLCBl cnJubyk7Cj4gICAJfQo+ICAgCj4gICAJY2xvc2Uoc3ZyX3NrKTsKPiAgIAo+IC0JLyogR2V0IHRo ZSBzaHV0ZG93biBjb21wbGV0ZSBub3RpZmljYXRpb24uICovCj4gKyAgICAgICAgLyogR2V0IHRo ZSBzaHV0ZG93biBjb21wbGV0ZSBub3RpZmljYXRpb24uICovCj4gICAJZm9yIChpID0gMDsgaSA8 IE1BWF9DTElFTlRTOyBpKyspIHsKPiAgIAkJaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6 ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9yZWN2bXNnKGNsdF9za1tpXSwgJmlubWVz c2FnZSwgTVNHX1dBSVRBTEwpOwo+IEBAIC0yMzcsOCArMjM4LDggQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJY2xvc2UoY2x0X3NrW2ldKTsKPiAgIAl9Cj4gICAKPiAt CXRzdF9yZXNtKFRQQVNTLCAiR3JhY2VmdWwgc2h1dGRvd24gb2YgYXNzb2NpYXRpb25zIHVzaW5n IFNDVFBfRU9GIik7Cj4gKwl0c3RfcmVzbShUUEFTUywgIkdyYWNlZnVsIHNodXRkb3duIG9mIGFz c29jaWF0aW9ucyB1c2luZyBTQ1RQX0VPRiIpOwo+ICAgCj4gLQkvKiBJbmRpY2F0ZSBzdWNjZXNz ZnVsIGNvbXBsZXRpb24uICAqLwo+IC0JdHN0X2V4aXQoKTsKPiArICAgICAgICAvKiBJbmRpY2F0 ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+ICsgICAgICAgIHJldHVybiAwOwo+ICAgfQo+ IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9hdXRv Y2xvc2UuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2F1dG9jbG9z ZS5jCj4gaW5kZXggZWY0MmZkYy4uZTY1ZmFjMCAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0 d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9hdXRvY2xvc2UuYwo+ICsrKyBiL3Rlc3RjYXNlcy9u ZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2F1dG9jbG9zZS5jCj4gQEAgLTEsMTcgKzEsMTcg QEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAg a2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAx LCAyMDAzCj4gICAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgo+ICAgICog Q29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAqIENvcHlyaWdodCAo YykgMjAwMSBJbnRlbCBDb3JwLgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIE5va2lhLCBJbmMu Cj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBz b2Z0d2FyZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsK PiAgICAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyLCBvciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAq Cj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAg ICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC0z OCw3ICszOCw3IEBACj4gICAKPiAgIC8qIFRoaXMgaXMgYSBGdW5jdGlvbmFsIFRlc3QgdG8gdmVy aWZ5IGF1dG9jbG9zZSBmdW5jdGlvbmFsaXR5IGFuZCB0aGUKPiAgICAqIHNvY2tldCBvcHRpb24g U0NUUF9BVVRPQ0xPU0UgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBkdXJhdGlvbiBp bgo+IC0gKiB3aGljaCBhbiBpZGxlIGFzc29jaWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2Vk Lgo+ICsgKiB3aGljaCBhbiBpZGxlIGFzc29jaWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2Vk Lgo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxzdGRpby5oPgo+IEBAIC01NywyMSArNTcsMjIg QEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDE7Cj4gICBpbnQg VFNUX0NOVCA9IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAr aW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAgIAlpbnQgc2sxLCBz azI7Cj4gICAJc29ja2FkZHJfc3RvcmFnZV90IGxvb3AxLCBsb29wMjsKPiAgIAlzdHJ1Y3QgbXNn aGRyIGlubWVzc2FnZSwgb3V0bWVzc2FnZTsKPiAgIAlzdHJ1Y3QgaW92ZWMgaW92LCBvdXRfaW92 Owo+IC0JaW50IGVycm9yLCBieXRlc19zZW50Owo+ICsJaW50IGVycm9yOwo+ICAgCWNoYXIgKmJp Z19idWZmZXI7Cj4gICAJY2hhciAqbWVzc2FnZSA9ICJoZWxsbywgd29ybGQhXG4iOwo+ICAgCXVp bnQzMl90IGF1dG9jbG9zZTsKPiAgIAo+IC0JLyogUmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3Vn aG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IC0JICogYmUgdW5idWZmZXJlZC4KPiArCS8q IFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8K PiArCSAqIGJlIHVuYnVmZmVyZWQuCj4gICAJICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwg X0lPTkJGLCAwKTsKPiArCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICAgCj4g ICAJbG9vcDEudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAJbG9vcDEudjQuc2luX2FkZHIu c19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiBAQCAtOTYsMjYgKzk3LDI3IEBAIGludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogTWFyayBzazIgYXMgYmVpbmcgYWJsZSB0 byBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucy4gICovCj4gICAJdGVzdF9saXN0ZW4oc2syLCAxKTsK PiAgIAo+IC0JLyogU2V0IHRoZSBhdXRvY2xvc2UgZHVyYXRpb24gZm9yIHRoZSBhc3NvY2lhdGlv bnMgY3JlYXRlZCBvbiBzazEKPiAtCSAqIGFuZCBzazIgdG8gYmUgNSBzZWNvbmRzLgo+IC0JICov Cj4gKwkvKiBTZXQgdGhlIGF1dG9jbG9zZSBkdXJhdGlvbiBmb3IgdGhlIGFzc29jaWF0aW9ucyBj cmVhdGVkIG9uIHNrMQo+ICsJICogYW5kIHNrMiB0byBiZSA1IHNlY29uZHMuCj4gKwkgKi8KPiAg IAlhdXRvY2xvc2UgPSA1Owo+ICAgCXRlc3Rfc2V0c29ja29wdChzazEsIFNDVFBfQVVUT0NMT1NF LCAmYXV0b2Nsb3NlLCBzaXplb2YoYXV0b2Nsb3NlKSk7Cj4gICAJdGVzdF9zZXRzb2Nrb3B0KHNr MiwgU0NUUF9BVVRPQ0xPU0UsICZhdXRvY2xvc2UsIHNpemVvZihhdXRvY2xvc2UpKTsKPiAgIAo+ ICAgCS8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBhc3Nv Y2lhdGlvbi4gICovCj4gLQltZW1zZXQoJm91dG1lc3NhZ2UsIDAsIHNpemVvZihvdXRtZXNzYWdl KSk7Cj4gKwltZW1zZXQoJm91dG1lc3NhZ2UsIDAsIHNpemVvZihvdXRtZXNzYWdlKSk7CQo+ICAg CW91dG1lc3NhZ2UubXNnX25hbWUgPSAmbG9vcDI7Cj4gICAJb3V0bWVzc2FnZS5tc2dfbmFtZWxl biA9IHNpemVvZihsb29wMik7Cj4gICAJb3V0bWVzc2FnZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4g ICAJb3V0bWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YtPmlv dl9iYXNlID0gbWVzc2FnZTsKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzdHJs ZW4obWVzc2FnZSkgKyAxOwo+IC0JYnl0ZXNfc2VudCA9IHRlc3Rfc2VuZG1zZyhzazEsICZvdXRt ZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArCj4gKwl0ZXN0X3NlbmRtc2coc2sx LCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICAgCj4gICAJLyogSW5pdGlh bGl6ZSBpbm1lc3NhZ2UgZm9yIGFsbCByZWNlaXZlcy4gKi8KPiAgIAliaWdfYnVmZmVyID0gdGVz dF9tYWxsb2MoUkVBTExZX0JJRyk7Cj4gLQltZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9mKGlu bWVzc2FnZSkpOwo+ICsgICAgICAgIG1lbXNldCgmaW5tZXNzYWdlLCAwLCBzaXplb2YoaW5tZXNz YWdlKSk7CQo+ICAgCWlvdi5pb3ZfYmFzZSA9IGJpZ19idWZmZXI7Cj4gICAJaW92Lmlvdl9sZW4g PSBSRUFMTFlfQklHOwo+ICAgCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKPiBAQCAtMTI2LDE4 ICsxMjgsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAllcnJvciA9 IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2No ZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVv ZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdF LCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1f VVApOwkKPiAgIAo+ICAgCS8qIEdldCB0aGUgY29tbXVuaWNhdGlvbiB1cCBtZXNzYWdlIG9uIHNr MS4gICovCj4gICAJZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2sxLCAmaW5tZXNzYWdlLCBNU0dfV0FJ VEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9y LAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSwKPiAtCQkJCSAg ICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsKPiArCQkJCSAgICBTQ1RQX0FTU09D X0NIQU5HRSwgU0NUUF9DT01NX1VQKTsJCj4gICAKPiAgIAkvKiBHZXQgdGhlIGZpcnN0IG1lc3Nh Z2Ugd2hpY2ggd2FzIHNlbnQuICAqLwo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlu bWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2Fn ZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSArIDEsCj4gLQkJCSAgICBNU0dfRU9SIHwgTVNHX0NU UlVOQywgMCwgMCk7Cj4gKwkJCSAgICBNU0dfRU9SfE1TR19DVFJVTkMsIDAsIDApOwo+ICAgCj4g ICAJdHN0X3Jlc20oVElORk8sICJXYWl0aW5nIGZvciB0aGUgYXNzb2NpYXRpb25zIHRvIGNsb3Nl IGF1dG9tYXRpY2FsbHkgIgo+ICAgCQkgImluIDUgc2VjcyIpOwo+IEBAIC0xNDYsMTMgKzE0OCwx MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWVycm9yID0gdGVzdF9y ZWN2bXNnKHNrMSwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNn X25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVj dCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBf U0hVVERPV05fQ09NUCk7Cj4gLQo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX1NI VVRET1dOX0NPTVApOwkKPiArCQkJCQo+ICAgCS8qIEdldCB0aGUgc2h1dGRvd24gY29tcGxldGUg bm90aWZpY2F0aW9uIGZyb20gc2syLiAqLwo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwg JmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlv bigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29j X2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfU0hVVERPV05fQ09N UCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfU0hVVERPV05fQ09NUCk7CQo+ ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJBdXRvY2xvc2Ugb2YgYXNzb2NpYXRpb25zIik7Cj4g ICAKPiBAQCAtMTYxLDUgKzE2Myw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Cj4gICAJY2xvc2Uoc2syKTsKPiAgIAo+ICAgCS8qIEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxl dGlvbi4gICovCj4gLQl0c3RfZXhpdCgpOwo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdp dCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2Jhc2ljLmMgYi90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9iYXNpYy5jCj4gaW5kZXggYTVmNjBl Mi4uOTIyODhiMiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVz dHMvdGVzdF9iYXNpYy5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3Rz L3Rlc3RfYmFzaWMuYwo+IEBAIC0xLDE3ICsxLDE3IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVy ZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAg ICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwMwo+ICAgICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1v dG9yb2xhLCBJbmMuCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KPiAgICAq IENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVm ZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGlt cGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ ICAgICogYW55IGxhdGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2Ug aW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBU aGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 Cj4gICAgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioq KioqKioqKioKPiAgICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAtNDAsOSArNDAsOSBAQAo+ICAgICogICAgU3Jp ZGhhciBTYW11ZHJhbGEgPHNhbXVkcmFsYUB1cy5pYm0uY29tPgo+ICAgICovCj4gICAKPiAtLyog VGhpcyBpcyBhIGJhc2ljIGZ1bmN0aW9uYWwgdGVzdCBmb3IgdGhlIFNDVFAga2VybmVsIHJlZmVy ZW5jZQo+ICsvKiBUaGlzIGlzIGEgYmFzaWMgZnVuY3Rpb25hbCB0ZXN0IGZvciB0aGUgU0NUUCBr ZXJuZWwKPiAgICAqIGltcGxlbWVudGF0aW9uIHN0YXRlIG1hY2hpbmUuCj4gLSAqLwo+ICsgKi8K PiAgIAo+ICAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gQEAg LTYyLDIyICs2MiwyMiBAQCBpbnQgVFNUX0NOVCA9IDA7Cj4gICAKPiAgIGludCBtYWluKHZvaWQp Cj4gICB7Cj4gLQlpbnQgc2sxLCBzazI7Cj4gLQlzb2NrYWRkcl9zdG9yYWdlX3QgbG9vcDE7Cj4g LQlzb2NrYWRkcl9zdG9yYWdlX3QgbG9vcDI7Cj4gKyAgICAgICAgaW50IHNrMSwgc2syOwo+ICsg ICAgICAgIHNvY2thZGRyX3N0b3JhZ2VfdCBsb29wMTsKPiArICAgICAgICBzb2NrYWRkcl9zdG9y YWdlX3QgbG9vcDI7Cj4gICAJc29ja2FkZHJfc3RvcmFnZV90IG1zZ25hbWU7Cj4gLQlzdHJ1Y3Qg aW92ZWMgaW92Owo+IC0Jc3RydWN0IG1zZ2hkciBpbm1lc3NhZ2U7Cj4gKyAgICAgICAgc3RydWN0 IGlvdmVjIGlvdjsKPiArICAgICAgICBzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiAgIAlzdHJ1 Y3QgbXNnaGRyIG91dG1lc3NhZ2U7Cj4gICAJY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yo c2N0cF9jbXNnX2RhdGFfdCkpXTsKPiAgIAljaGFyIG91dGNtc2dbQ01TR19TUEFDRShzaXplb2Yo c3RydWN0IHNjdHBfc25kcmN2aW5mbykpXTsKPiAgIAlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKPiAg IAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKPiAtCXN0cnVjdCBpb3ZlYyBvdXRfaW92 Owo+IC0JY2hhciAqbWVzc2FnZSA9ICJoZWxsbywgd29ybGQhXG4iOwo+IC0JY2hhciAqdGVsZXBo b25lID0gIldhdHNvbiwgY29tZSBoZXJlISAgSSBuZWVkIHlvdSFcbiI7Cj4gLQljaGFyICp0ZWxl cGhvbmVfcmVzcCA9ICJJIGFscmVhZHkgYnJvdWdodCB5b3VyIGNvZmZlZS4uLlxuIjsKPiAtCWlu dCBlcnJvciwgYnl0ZXNfc2VudDsKPiArICAgICAgICBzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAr ICAgICAgICBjaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4gKyAgICAgICAgY2hh ciAqdGVsZXBob25lID0gIldhdHNvbiwgY29tZSBoZXJlISAgSSBuZWVkIHlvdSFcbiI7Cj4gKyAg ICAgICAgY2hhciAqdGVsZXBob25lX3Jlc3AgPSAiSSBhbHJlYWR5IGJyb3VnaHQgeW91ciBjb2Zm ZWUuLi5cbiI7Cj4gKyAgICAgICAgaW50IGVycm9yLCBieXRlc19zZW50Owo+ICAgCWludCBwZl9j bGFzczsKPiAgIAl1aW50MzJfdCBwcGlkOwo+ICAgCXVpbnQzMl90IHN0cmVhbTsKPiBAQCAtOTEs NDMgKzkxLDQzIEBAIGludCBtYWluKHZvaWQpCj4gICAJc3RydWN0IHNvY2thZGRyX2luNiAqaW42 X2FkZHI7Cj4gICAJdm9pZCAqYWRkcl9idWY7Cj4gICAKPiAtCS8qIFJhdGhlciB0aGFuIGZmbHVz aCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVy ZWQuCj4gKyAgICAgICAgLyogUmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29k ZSwgc2V0IHN0ZG91dCB0bwo+ICsJICogYmUgdW5idWZmZXJlZC4KPiAgIAkgKi8KPiAtCXNldHZi dWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsJc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9J T05CRiwgMCk7Cj4gICAKPiAgIAkvKiBTZXQgc29tZSBiYXNpYyB2YWx1ZXMgd2hpY2ggZGVwZW5k IG9uIHRoZSBhZGRyZXNzIGZhbWlseS4gKi8KPiAgICNpZiBURVNUX1Y2Cj4gICAJcGZfY2xhc3Mg PSBQRl9JTkVUNjsKPiAgIAo+IC0JbG9vcDEudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiAt CWxvb3AxLnY2LnNpbjZfYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIpU0NUUF9JTjZBRERSX0FOWV9J TklUOwo+IC0JbG9vcDEudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAr ICAgICAgICBsb29wMS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAgICAgIGxvb3Ax LnY2LnNpbjZfYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIpU0NUUF9JTjZBRERSX0FOWV9JTklUOwo+ ICsgICAgICAgIGxvb3AxLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4g ICAKPiAtCWxvb3AyLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gLQlsb29wMi52Ni5zaW42 X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOwo+IC0JbG9vcDIudjYuc2luNl9wb3J0ID0gaHRvbnMo U0NUUF9URVNUUE9SVF8yKTsKPiArICAgICAgICBsb29wMi52Ni5zaW42X2ZhbWlseSA9IEFGX0lO RVQ2Owo+ICsgICAgICAgIGxvb3AyLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4g KyAgICAgICAgbG9vcDIudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKTsKPiAg ICNlbHNlCj4gICAJcGZfY2xhc3MgPSBQRl9JTkVUOwo+ICAgCj4gLQlsb29wMS52NC5zaW5fZmFt aWx5ID0gQUZfSU5FVDsKPiAtCWxvb3AxLnY0LnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7 Cj4gLQlsb29wMS52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAg ICAgbG9vcDEudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gKyAgICAgICAgbG9vcDEudjQuc2lu X2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKPiArICAgICAgICBsb29wMS52NC5zaW5fcG9ydCA9 IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCWxvb3AyLnY0LnNpbl9mYW1pbHkgPSBB Rl9JTkVUOwo+IC0JbG9vcDIudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsK PiAtCWxvb3AyLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKTsKPiArICAgICAg ICBsb29wMi52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiArICAgICAgICBsb29wMi52NC5zaW5f YWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ICsgICAgICAgIGxvb3AyLnY0LnNpbl9w b3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKTsKPiAgICNlbmRpZiAvKiBURVNUX1Y2ICovCj4g ICAKPiAtCS8qIENyZWF0ZSB0aGUgdHdvIGVuZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFj aCBvdGhlci4gICovCj4gLQlzazEgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNL RVQsIElQUFJPVE9fU0NUUCk7Cj4gLQlzazIgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19T RVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgLyogQ3JlYXRlIHRoZSB0d28gZW5k cG9pbnRzIHdoaWNoIHdpbGwgdGFsayB0byBlYWNoIG90aGVyLiAgKi8KPiArICAgICAgICBzazEg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4g KyAgICAgICAgc2syID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBS T1RPX1NDVFApOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzb2NrZXQiKTsKPiAgIAo+IC0J LyogQmluZCB0aGVzZSBzb2NrZXRzIHRvIHRoZSB0ZXN0IHBvcnRzLiAgKi8KPiAtCXRlc3RfYmlu ZChzazEsICZsb29wMS5zYSwgc2l6ZW9mKGxvb3AxKSk7Cj4gLQl0ZXN0X2JpbmQoc2syLCAmbG9v cDIuc2EsIHNpemVvZihsb29wMikpOwo+ICsgICAgICAgIC8qIEJpbmQgdGhlc2Ugc29ja2V0cyB0 byB0aGUgdGVzdCBwb3J0cy4gICovCj4gKyAgICAgICAgdGVzdF9iaW5kKHNrMSwgJmxvb3AxLnNh LCBzaXplb2YobG9vcDEpKTsKPiArICAgICAgICB0ZXN0X2JpbmQoc2syLCAmbG9vcDIuc2EsIHNp emVvZihsb29wMikpOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJiaW5kIik7Cj4gICAKPiBA QCAtMTM1LDQxICsxMzUsNDEgQEAgaW50IG1haW4odm9pZCkKPiAgIAl0ZXN0X2VuYWJsZV9hc3Nv Y19jaGFuZ2Uoc2sxKTsKPiAgIAl0ZXN0X2VuYWJsZV9hc3NvY19jaGFuZ2Uoc2syKTsKPiAgIAo+ IC0JLyogSW5pdGlhbGl6ZSBpbm1lc3NhZ2UgZm9yIGFsbCByZWNlaXZlcy4gKi8KPiArICAgICAg ICAvKiBJbml0aWFsaXplIGlubWVzc2FnZSBmb3IgYWxsIHJlY2VpdmVzLiAqLwo+ICAgCWJpZ19i dWZmZXIgPSB0ZXN0X21hbGxvYyhSRUFMTFlfQklHKTsKPiAtCW1lbXNldCgmaW5tZXNzYWdlLCAw LCBzaXplb2YoaW5tZXNzYWdlKSk7Cj4gLQlpb3YuaW92X2Jhc2UgPSBiaWdfYnVmZmVyOwo+IC0J aW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+IC0JaW5tZXNzYWdlLm1zZ19pb3YgPSAmaW92Owo+ IC0JaW5tZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sID0g aW5jbXNnOwo+ICsJbWVtc2V0KCZpbm1lc3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsJCj4g KyAgICAgICAgaW92Lmlvdl9iYXNlID0gYmlnX2J1ZmZlcjsKPiArICAgICAgICBpb3YuaW92X2xl biA9IFJFQUxMWV9CSUc7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19pb3YgPSAmaW92Owo+ICsg ICAgICAgIGlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBpbm1lc3NhZ2UubXNn X2NvbnRyb2wgPSBpbmNtc2c7Cj4gICAJaW5tZXNzYWdlLm1zZ19uYW1lID0gJm1zZ25hbWU7Cj4g ICAKPiAtCS8qIFRyeSB0byByZWFkIG9uIHNvY2tldCAyLiAgVGhpcyBzaG91bGQgZmFpbCBzaW5j ZSB3ZSBhcmUKPiAtCSAqIG5laXRoZXIgbGlzdGVuaW5nLCBub3IgZXN0YWJsaXNoZWQuCj4gKyAg ICAgICAgLyogVHJ5IHRvIHJlYWQgb24gc29ja2V0IDIuICBUaGlzIHNob3VsZCBmYWlsIHNpbmNl IHdlIGFyZQo+ICsJICogbmVpdGhlciBsaXN0ZW5pbmcsIG5vciBlc3RhYmxpc2hlZC4KPiAgIAkg Ki8KPiAtCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+IC0JZXJy b3IgPSByZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JaWYgKGVycm9y ID4gMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ztc2cgb24gYSBzb2NrZXQgbmVp dGhlciIKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNn KTsKPiArICAgICAgICBlcnJvciA9IHJlY3Ztc2coc2syLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFM TCk7Cj4gKyAgICAgICAgaWYgKGVycm9yID4gMCkKPiArICAgICAgICAgICAgICAgIHRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgInJlY3Ztc2cgb24gYSBzb2NrZXQgbmVpdGhlciIKPiAgIAkJCSAi bGlzdGVuaW5nIG5vciBlc3RhYmxpc2hlZCBlcnJvcjogJWQiLCBlcnJvcik7Cj4gICAKPiAgIAl0 c3RfcmVzbShUUEFTUywgInJlY3Ztc2cgb24gYSBzb2NrZXQgbmVpdGhlciBsaXN0ZW5pbmcgbm9y ICIKPiAgIAkJICJlc3RhYmxpc2hlZCIpOwo+ICAgCj4gLQkvKiBNYXJrIHNrMiBhcyBiZWluZyBh YmxlIHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLiAgKi8KPiArICAgICAgIC8qIE1hcmsgc2sy IGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuICAqLwo+ICAgCWVycm9y ID0gdGVzdF9saXN0ZW4oc2syLCAxKTsKPiAtCj4gKwo+ICAgCXRzdF9yZXNtKFRQQVNTLCAibGlz dGVuIik7Cj4gICAKPiAtCS8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3Jl YXRlIHRoZSBhc3NvY2lhdGlvbi4gICovCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmxvb3Ay Owo+IC0Jb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihsb29wMik7Cj4gLQlvdXRtZXNz YWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4g LQlvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0Y21zZzsKPiAtCW91dG1lc3NhZ2UubXNnX2Nv bnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7 Cj4gKyAgICAgICAgLyogU2VuZCB0aGUgZmlyc3QgbWVzc2FnZS4gIFRoaXMgd2lsbCBjcmVhdGUg dGhlIGFzc29jaWF0aW9uLiAgKi8KPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmxv b3AyOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YobG9vcDIpOwo+ ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdiA9ICZvdXRfaW92Owo+ICsgICAgICAgIG91dG1l c3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbCA9 IG91dGNtc2c7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihv dXRjbXNnKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gICAJY21zZyA9 IENNU0dfRklSU1RIRFIoJm91dG1lc3NhZ2UpOwo+ICAgCWNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBS T1RPX1NDVFA7Cj4gICAJY21zZy0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gQEAgLTE3Nywy MyArMTc3LDIzIEBAIGludCBtYWluKHZvaWQpCj4gICAJb3V0bWVzc2FnZS5tc2dfY29udHJvbGxl biA9IGNtc2ctPmNtc2dfbGVuOwo+ICAgCXNpbmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8g KilDTVNHX0RBVEEoY21zZyk7Cj4gICAJbWVtc2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0 IHNjdHBfc25kcmN2aW5mbykpOwo+IC0JcHBpZCA9IHJhbmQoKTsJCS8qIENob29zZSBhbiBhcmJp dHJhcnkgdmFsdWUuICovCj4gLQlzdHJlYW0gPSAxOwo+ICsJcHBpZCA9IHJhbmQoKTsgLyogQ2hv b3NlIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8KPiArCXN0cmVhbSA9IDE7Cj4gICAJc2luZm8tPnNp bmZvX3BwaWQgPSBwcGlkOwo+ICAgCXNpbmZvLT5zaW5mb19zdHJlYW0gPSBzdHJlYW07Cj4gLQlv dXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiAtCW91dG1lc3NhZ2UubXNn X2lvdi0+aW92X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gLQl0ZXN0X3NlbmRtc2coc2sx LCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpICsgMSk7Cj4gLQo+ICsgICAgICAgIG91 dG1lc3NhZ2UubXNnX2lvdi0+aW92X2Jhc2UgPSBtZXNzYWdlOwo+ICsgICAgICAgIG91dG1lc3Nh Z2UubXNnX2lvdi0+aW92X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gKyAgICAgICAgdGVz dF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2UsIDAsIHN0cmxlbihtZXNzYWdlKSsxKTsKPiArCj4g ICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kbXNnIHdpdGggYSB2YWxpZCBtc2dfbmFtZSIpOwo+ICAg Cj4gLQkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazIuICAqLwo+IC0J aW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgLyog R2V0IHRoZSBjb21tdW5pY2F0aW9uIHVwIG1lc3NhZ2Ugb24gc2syLiAgKi8KPiArICAgICAgICBp bm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAlpbm1lc3NhZ2Uu bXNnX25hbWVsZW4gPSBzaXplb2YobXNnbmFtZSk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhz azIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiArICAgICAgICBlcnJvciA9IHRlc3RfcmVj dm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19u b3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qg c2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NP TU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAg ICNpZiBURVNUX1Y2Cj4gICAKPiAgIAlpZiAoaW5tZXNzYWdlLm1zZ19uYW1lbGVuICE9IHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewo+IEBAIC0yMDcsMTEgKzIwNywxMSBAQCBpbnQgbWFp bih2b2lkKQo+ICAgCQlEVU1QX0NPUkU7Cj4gICAJfQo+ICAgCj4gLQlpZiAobWVtY21wKCZtc2du YW1lLnY2LnNpbjZfYWRkciwgJmluNmFkZHJfbG9vcGJhY2ssCj4gKwlpZiAobWVtY21wKCZtc2du YW1lLnY2LnNpbjZfYWRkciwgJmluNmFkZHJfbG9vcGJhY2ssCj4gICAJCSAgIHNpemVvZihtc2du YW1lLnY2LnNpbjZfYWRkcikpKSB7Cj4gICAJCURVTVBfQ09SRTsKPiAgIAl9Cj4gLSNlbHNlCj4g KyNlbHNlCj4gICAJaWYgKGlubWVzc2FnZS5tc2dfbmFtZWxlbiAhPSBzaXplb2Yoc3RydWN0IHNv Y2thZGRyX2luKSkgewo+ICAgCQlEVU1QX0NPUkU7Cj4gICAJfQo+IEBAIC0yMjksMjYgKzIyOSwy NiBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCXNhYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ug Kilpb3YuaW92X2Jhc2U7Cj4gICAJYXNzb2NpZDIgPSBzYWMtPnNhY19hc3NvY19pZDsKPiAgIAo+ IC0JLyogR2V0IHRoZSBjb21tdW5pY2F0aW9uIHVwIG1lc3NhZ2Ugb24gc2sxLiAgKi8KPiArICAg ICAgICAvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazEuICAqLwo+ICAg CWlvdi5pb3ZfYmFzZSA9IGJpZ19idWZmZXI7Cj4gLQlpb3YuaW92X2xlbiA9IFJFQUxMWV9CSUc7 Cj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2wgPSBpbmNtc2c7Cj4gLQlpbm1lc3NhZ2UubXNnX2Nv bnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMSwg JmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9u KCZpbm1lc3NhZ2UsIGVycm9yLAo+ICsgICAgICAgIGlvdi5pb3ZfbGVuID0gUkVBTExZX0JJRzsK PiArICAgICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2wgPSBpbmNtc2c7Cj4gKyAgICAgICAgaW5t ZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgZXJyb3Ig PSB0ZXN0X3JlY3Ztc2coc2sxLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gKwl0ZXN0X2No ZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVv ZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdF LCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1f VVApOwkKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNl Owo+ICAgCWFzc29jaWQxID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gICAKPiAgIAl0c3RfcmVzbShU UEFTUywgInJlY3Ztc2cgQ09NTV9VUCBub3RpZmljYXRpb25zIik7Cj4gICAKPiAtCS8qIEdldCB0 aGUgZmlyc3QgbWVzc2FnZSB3aGljaCB3YXMgc2VudC4gICovCj4gLQlpbm1lc3NhZ2UubXNnX2Nv bnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiArICAgICAgICAvKiBHZXQgdGhlIGZpcnN0IG1l c3NhZ2Ugd2hpY2ggd2FzIHNlbnQuICAqLwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJv bGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICAgCWlubWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVv Zihtc2duYW1lKTsKPiAgIAltZW1zZXQoJm1zZ25hbWUsIDAsIHNpemVvZihtc2duYW1lKSk7Cj4g LQllcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAt CXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSAr IDEsCj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAmaW5tZXNzYWdlLCBNU0df V0FJVEFMTCk7Cj4gKyAgICAgICAgdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJv ciwgc3RybGVuKG1lc3NhZ2UpICsgMSwKPiAgIAkJCSAgICBNU0dfRU9SLCBzdHJlYW0sIHBwaWQp Owo+ICAgI2lmIFRFU1RfVjYKPiAgIAo+IEBAIC0yNjMsMTEgKzI2MywxMSBAQCBpbnQgbWFpbih2 b2lkKQo+ICAgCQlEVU1QX0NPUkU7Cj4gICAJfQo+ICAgCj4gLQlpZiAobWVtY21wKCZtc2duYW1l LnY2LnNpbjZfYWRkciwgJmluNmFkZHJfbG9vcGJhY2ssCj4gKwlpZiAobWVtY21wKCZtc2duYW1l LnY2LnNpbjZfYWRkciwgJmluNmFkZHJfbG9vcGJhY2ssCj4gICAJCSAgIHNpemVvZihtc2duYW1l LnY2LnNpbjZfYWRkcikpKSB7Cj4gICAJCURVTVBfQ09SRTsKPiAgIAl9Cj4gLSNlbHNlCj4gKyNl bHNlCj4gICAJaWYgKGlubWVzc2FnZS5tc2dfbmFtZWxlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th ZGRyX2luKSkgewo+ICAgCQlEVU1QX0NPUkU7Cj4gICAJfQo+IEBAIC0yODMsOCArMjgzLDggQEAg aW50IG1haW4odm9pZCkKPiAgICNlbmRpZgo+ICAgCj4gICAJLyogVHJ5IHRvIHNlbmQgYSBtZXNz YWdlIHdpdGggTlVMTCBtc2dfbmFtZSBhbmQgYXNzb2NpZCwgc2hvdWxkIGZhaWwgKi8KPiAtCW91 dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gLQlvdXRtZXNzYWdl Lm1zZ19mbGFncyA9IDA7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNp emVvZihvdXRjbXNnKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gICAJ Y21zZyA9IENNU0dfRklSU1RIRFIoJm91dG1lc3NhZ2UpOwo+ICAgCWNtc2ctPmNtc2dfbGV2ZWwg PSBJUFBST1RPX1NDVFA7Cj4gICAJY21zZy0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gQEAg LTI5NywxMiArMjk3LDEyIEBAIGludCBtYWluKHZvaWQpCj4gICAJc2luZm8tPnNpbmZvX3BwaWQg PSBwcGlkOwo+ICAgCXNpbmZvLT5zaW5mb19zdHJlYW0gPSBzdHJlYW07Cj4gICAJb3V0bWVzc2Fn ZS5tc2dfaW92LT5pb3ZfYmFzZSA9IHRlbGVwaG9uZTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+ aW92X2xlbiA9IHN0cmxlbih0ZWxlcGhvbmUpICsgMTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1z Z19pb3YtPmlvdl9sZW4gPSBzdHJsZW4odGVsZXBob25lKSArIDE7Cj4gICAJb3V0bWVzc2FnZS5t c2dfbmFtZSA9IE5VTEw7Cj4gICAJb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IDA7Cj4gICAJYnl0 ZXNfc2VudCA9IHNlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwgTVNHX05PU0lHTkFMKTsKPiAgIAlp ZiAoKGJ5dGVzX3NlbnQgPiAwKSB8fCAoRVBJUEUgIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRC Uk9LLCBOVUxMLCAic2VuZG1zZyB3aXRoIE5VTEwgYXNzb2NpZCBhbmQgIgo+ICsJCXRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgInNlbmRtc2cgd2l0aCBOVUxMIGFzc29jaWQgYW5kICIKPiAgIAkJ CSAiTlVMTCBtc2dfbmFtZSBlcnJvcjolZCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2cgd2l0aCBOVUxMIGFzc29jaWQgYW5kIE5VTEwg bXNnX25hbWUiKTsKPiBAQCAtMzExLDQwICszMTEsNDEgQEAgaW50IG1haW4odm9pZCkKPiAgIAlz aW5mby0+c2luZm9fYXNzb2NfaWQgPSBhc3NvY2lkMjsKPiAgIAlieXRlc19zZW50ID0gc2VuZG1z ZyhzazEsICZvdXRtZXNzYWdlLCBNU0dfTk9TSUdOQUwpOwo+ICAgCWlmICgoYnl0ZXNfc2VudCA+ IDApIHx8IChFUElQRSAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5k bXNnIHdpdGggaW5jb3JyZWN0IGFzc29jaWQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgInNlbmRtc2cgd2l0aCBpbmNvcnJlY3QgYXNzb2NpZCAiCj4gICAJCQkgImVycm9yOiVkIGVy cm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZG1z ZyB3aXRoIGluY29ycmVjdCBhc3NvY2lkIik7Cj4gICAKPiAgIAkvKiBGaWxsIGluIGEgY29ycmVj dCBhc3NvY19pZCBhbmQgZ2V0IGJhY2sgdG8gdGhlIG5vcm1hbCB0ZXN0aW5nLiAqLwo+ICAgCXNp bmZvLT5zaW5mb19hc3NvY19pZCA9IGFzc29jaWQxOwo+IC0JLyogU2VuZCB0d28gbW9yZSBtZXNz YWdlcywgdG8gY2F1c2UgYSBzZWNvbmQgU0FDSy4gICovCj4gLQl0ZXN0X3NlbmRtc2coc2sxLCAm b3V0bWVzc2FnZSwgMCwgc3RybGVuKHRlbGVwaG9uZSkgKyAxKTsKPiArICAgICAgICAvKiBTZW5k IHR3byBtb3JlIG1lc3NhZ2VzLCB0byBjYXVzZSBhIHNlY29uZCBTQUNLLiAgKi8KPiArCXRlc3Rf c2VuZG1zZyhzazEsICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4odGVsZXBob25lKSsxKTsKPiAgIAo+ ICAgCW91dG1lc3NhZ2UubXNnX25hbWUgPSAmbG9vcDI7Cj4gICAJb3V0bWVzc2FnZS5tc2dfbmFt ZWxlbiA9IHNpemVvZihsb29wMik7Cj4gICAJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFzZSA9 IHRlbGVwaG9uZV9yZXNwOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gc3RybGVu KHRlbGVwaG9uZV9yZXNwKSArIDE7Cj4gLQl0ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwg MCwgc3RybGVuKHRlbGVwaG9uZV9yZXNwKSArIDEpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNn X2lvdi0+aW92X2xlbiA9IHN0cmxlbih0ZWxlcGhvbmVfcmVzcCkgKyAxOwo+ICsJdGVzdF9zZW5k bXNnKHNrMSwgJm91dG1lc3NhZ2UsIDAsIHN0cmxlbih0ZWxlcGhvbmVfcmVzcCkrMSk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2cgd2l0aCB2YWxpZCBhc3NvY2lkIik7Cj4gICAK PiAtCS8qIEdldCB0aG9zZSB0d28gbWVzc2FnZXMuICAqLwo+ICsgICAgICAgIC8qIEdldCB0aG9z ZSB0d28gbWVzc2FnZXMuICAqLwo+ICAgCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVv ZihpbmNtc2cpOwo+IC0JZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAmaW5tZXNzYWdlLCBNU0df V0FJVEFMTCk7Cj4gLQl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJs ZW4odGVsZXBob25lKSArIDEsCj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAm aW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gKyAgICAgICAgdGVzdF9jaGVja19tc2dfZGF0YSgm aW5tZXNzYWdlLCBlcnJvciwgc3RybGVuKHRlbGVwaG9uZSkgKyAxLAo+ICAgCQkJICAgIE1TR19F T1IsIHN0cmVhbSwgcHBpZCk7Cj4gICAKPiAgIAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBz aXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwg TVNHX1dBSVRBTEwpOwo+IC0JdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwg c3RybGVuKHRlbGVwaG9uZV9yZXNwKSArIDEsCj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Zt c2coc2syLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gKyAgICAgICAgdGVzdF9jaGVja19t c2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwgc3RybGVuKHRlbGVwaG9uZV9yZXNwKSArIDEsCj4g ICAJCQkgICAgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAtCj4gKwo+ICAgCXRzdF9yZXNtKFRQ QVNTLCAicmVjdm1zZyIpOwo+ICAgCj4gLQluX2xhZGRycyA9IHNjdHBfZ2V0bGFkZHJzKHNrMSwg YXNzb2NpZDEsICZsYWRkcnMpOwo+ICsJbl9sYWRkcnMgPSBzY3RwX2dldGxhZGRycyhzazEsIGFz c29jaWQxLCAmbGFkZHJzKTsKPiAgIAlpZiAobl9sYWRkcnMgPD0gMCkKPiAtCQl0c3RfYnJrbShU QlJPSywgTlVMTCwgInNjdHBfZ2V0bGFkZHJzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKyAg ICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2dldGxhZGRyczog JXMiLAo+ICsJCQkgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi c2N0cF9nZXRsYWRkcnMiKTsKPiAgIAo+IEBAIC0zNjAsOSArMzYxLDkgQEAgaW50IG1haW4odm9p ZCkKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWluNl9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg KilzYV9hZGRyOwo+ICAgCQkJdHN0X3Jlc20oVElORk8sCj4gLQkJCQkgIkxPQ0FMIEFERFIgJTA0 eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4IFBPUlQgJWQiLAo+IC0JCQkJIE5J UDYoaW42X2FkZHItPnNpbjZfYWRkciksCj4gLQkJCQkgbnRvaHMoaW42X2FkZHItPnNpbjZfcG9y dCkpOwo+ICsJCSAiTE9DQUwgQUREUiAlMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4 OiUwNHggUE9SVCAlZCIsCj4gKwkJCSAgICAgICBOSVA2KGluNl9hZGRyLT5zaW42X2FkZHIpLAo+ ICsJCQkgICAgICAgbnRvaHMoaW42X2FkZHItPnNpbjZfcG9ydCkpOwo+ICAgCQkJYWRkcl9idWYg Kz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwo+ICAgCQl9Cj4gICAJfQo+IEBAIC0zNzEs OSArMzcyLDEwIEBAIGludCBtYWluKHZvaWQpCj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNj dHBfZnJlZWxhZGRycyIpOwo+ICAgCj4gLQluX3BhZGRycyA9IHNjdHBfZ2V0cGFkZHJzKHNrMSwg YXNzb2NpZDEsICZwYWRkcnMpOwo+ICsJbl9wYWRkcnMgPSBzY3RwX2dldHBhZGRycyhzazEsIGFz c29jaWQxLCAmcGFkZHJzKTsKPiAgIAlpZiAobl9wYWRkcnMgPD0gMCkKPiAtCQl0c3RfYnJrbShU QlJPSywgTlVMTCwgInNjdHBfZ2V0cGFkZHJzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKyAg ICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX2dldHBhZGRyczog JXMiLAo+ICsJCQkgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi c2N0cF9nZXRwYWRkcnMiKTsKPiAgIAo+IEBAIC0zODksOSArMzkxLDkgQEAgaW50IG1haW4odm9p ZCkKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWluNl9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg KilzYV9hZGRyOwo+ICAgCQkJdHN0X3Jlc20oVElORk8sCj4gLQkJCQkgIlBFRVIgQUREUiAlMDR4 OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHggUE9SVCAlZCIsCj4gLQkJCQkgTklQ NihpbjZfYWRkci0+c2luNl9hZGRyKSwKPiAtCQkJCSBudG9ocyhpbjZfYWRkci0+c2luNl9wb3J0 KSk7Cj4gKwkJICJQRUVSIEFERFIgJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDol MDR4IFBPUlQgJWQiLAo+ICsJCQkgICAgICAgTklQNihpbjZfYWRkci0+c2luNl9hZGRyKSwKPiAr CQkJICAgICAgIG50b2hzKGluNl9hZGRyLT5zaW42X3BvcnQpKTsKPiAgIAkJCWFkZHJfYnVmICs9 IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKPiAgIAkJfQo+ICAgCX0KPiBAQCAtNDAwLDE3 ICs0MDIsMTcgQEAgaW50IG1haW4odm9pZCkKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2N0 cF9mcmVlcGFkZHJzIik7Cj4gICAKPiAtCS8qIFNodXQgZG93biB0aGUgbGluay4gICovCj4gLQlj bG9zZShzazEpOwo+ICsgICAgICAgIC8qIFNodXQgZG93biB0aGUgbGluay4gICovCj4gKyAgICAg ICAgY2xvc2Uoc2sxKTsKPiAgIAo+IC0JLyogR2V0IHRoZSBzaHV0ZG93biBjb21wbGV0ZSBub3Rp ZmljYXRpb24uICovCj4gKyAgICAgICAgLyogR2V0IHRoZSBzaHV0ZG93biBjb21wbGV0ZSBub3Rp ZmljYXRpb24uICovCj4gICAJaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21z Zyk7Cj4gICAJaW5tZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG1zZ25hbWUpOwo+ICAgCW1l bXNldCgmbXNnbmFtZSwgMCwgc2l6ZW9mKG1zZ25hbWUpKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2 bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIGVycm9yID0gdGVz dF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tf bXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0 cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFND VFBfU0hVVERPV05fQ09NUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfU0hV VERPV05fQ09NUCk7CQo+ICAgI2lmIFRFU1RfVjYKPiAgIAo+ICAgCWlmIChpbm1lc3NhZ2UubXNn X25hbWVsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Cj4gQEAgLTQyNCwxMSAr NDI2LDExIEBAIGludCBtYWluKHZvaWQpCj4gICAJCURVTVBfQ09SRTsKPiAgIAl9Cj4gICAKPiAt CWlmIChtZW1jbXAoJm1zZ25hbWUudjYuc2luNl9hZGRyLCAmaW42YWRkcl9sb29wYmFjaywKPiAr CWlmIChtZW1jbXAoJm1zZ25hbWUudjYuc2luNl9hZGRyLCAmaW42YWRkcl9sb29wYmFjaywKPiAg IAkJICAgc2l6ZW9mKG1zZ25hbWUudjYuc2luNl9hZGRyKSkpIHsKPiAgIAkJRFVNUF9DT1JFOwo+ ICAgCX0KPiAtI2Vsc2UKPiArI2Vsc2UKPiAgIAlpZiAoaW5tZXNzYWdlLm1zZ19uYW1lbGVuICE9 IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Cj4gICAJCURVTVBfQ09SRTsKPiAgIAl9Cj4g QEAgLTQ0MywxMSArNDQ1LDExIEBAIGludCBtYWluKHZvaWQpCj4gICAJCURVTVBfQ09SRTsKPiAg IAl9Cj4gICAjZW5kaWYKPiAtCj4gKwkJCQkKPiAgIAl0c3RfcmVzbShUUEFTUywgInJlY3Ztc2cg U0hVVERPV05fQ09NUCBub3RpZmljYXRpb24iKTsKPiAgIAo+IC0JY2xvc2Uoc2syKTsKPiArICAg ICAgICBjbG9zZShzazIpOwo+ICAgCj4gLQkvKiBJbmRpY2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRp b24uICAqLwo+IC0JdHN0X2V4aXQoKTsKPiArICAgICAgICAvKiBJbmRpY2F0ZSBzdWNjZXNzZnVs IGNvbXBsZXRpb24uICAqLwo+ICsgICAgICAgCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQg YS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9jb25uZWN0LmMgYi90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9jb25uZWN0LmMKPiBpbmRleCA2ZmM3 ODhhLi4zMzNjMjgzIDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190 ZXN0cy90ZXN0X2Nvbm5lY3QuYwo+ICsrKyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190 ZXN0cy90ZXN0X2Nvbm5lY3QuYwo+IEBAIC0xLDE0ICsxLDE0IEBACj4gLS8qIFNDVFAga2VybmVs IHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlv bgo+ICAgICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMiwgMjAwMwo+ICAgICogQ29weXJp Z2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJl ZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBp bXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikK PiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNl IGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICog VGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioq KioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTU0LDI0ICs1NCwyNSBAQCBjaGFyICpUQ0lE ID0gX19GSUxFX187Cj4gICBpbnQgVFNUX1RPVEFMID0gNTsKPiAgIGludCBUU1RfQ05UID0gMDsK PiAgIAo+IC1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICtpbnQKPiArbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgewo+ICAgCWludCBzdnJfc2ssIGNsdF9zazEsIGNs dF9zazIsIHBlZWxvZmZfc2s7Cj4gLQlzY3RwX2Fzc29jX3Qgc3ZyX2Fzc29jaWQxLCBzdnJfYXNz b2NpZDIsIGNsdF9hc3NvY2lkMSwgY2x0X2Fzc29jaWQyOwo+ICsJc2N0cF9hc3NvY190IHN2cl9h c3NvY2lkMTsKPiAgIAlzb2NrYWRkcl9zdG9yYWdlX3Qgc3ZyX2xvb3AsIGNsdF9sb29wMSwgY2x0 X2xvb3AyLCBjbHRfbG9vcDM7Cj4gKwlzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNhYzsKPiAg IAlzdHJ1Y3QgaW92ZWMgaW92Owo+ICAgCXN0cnVjdCBtc2doZHIgaW5tZXNzYWdlOwo+ICAgCWlu dCBlcnJvcjsKPiAtCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjOwo+ICAgCWNoYXIgKmJp Z19idWZmZXI7Cj4gICAJaW50IGZsYWdzOwo+ICAgCj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1c2go KSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZlcmVk Lgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAg ICAvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0 IHRvCj4gKwkgKiBiZSB1bmJ1ZmZlcmVkLgo+ICsJICovCj4gKwlzZXR2YnVmKHN0ZG91dCwgTlVM TCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBjbGll bnQgYWRkcmVzc2VzLiAqLwo+ICsJLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBjbGllbnQg YWRkcmVzc2VzLiAqLwo+ICAgCXN2cl9sb29wLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAg CXN2cl9sb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gICAJc3Zy X2xvb3AudjQuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+IEBAIC04MCwxMyAr ODEsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAljbHRfbG9vcDEu djQuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzIpOwo+ICAgCWNsdF9sb29wMi52NC5z aW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAgIAljbHRfbG9vcDIudjQuc2luX2FkZHIuc19hZGRyID0g U0NUUF9JUF9MT09QQkFDSzsKPiAtCWNsdF9sb29wMi52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBf VEVTVFBPUlRfMiArIDEpOwo+ICsJY2x0X2xvb3AyLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9U RVNUUE9SVF8yKzEpOwo+ICAgCWNsdF9sb29wMy52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAg IAljbHRfbG9vcDMudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWNs dF9sb29wMy52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMiArIDIpOwo+ICsJY2x0 X2xvb3AzLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKzIpOwo+ICAgCj4gICAJ LyogQ3JlYXRlIGFuZCBiaW5kIHRoZSBzZXJ2ZXIgc29ja2V0LiAgKi8KPiAtCXN2cl9zayA9IHRl c3Rfc29ja2V0KEFGX0lORVQsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICsgICAg ICAgIHN2cl9zayA9IHRlc3Rfc29ja2V0KEFGX0lORVQsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RP X1NDVFApOwo+ICAgCXRlc3RfYmluZChzdnJfc2ssICZzdnJfbG9vcC5zYSwgc2l6ZW9mKHN2cl9s b29wKSk7Cj4gICAKPiAgIAkvKiBNYXJrIHNlcnZlciBzb2NrZXQgYXMgYmVpbmcgYWJsZSB0byBh Y2NlcHQgbmV3IGFzc29jaWF0aW9ucy4gICovCj4gQEAgLTEwNiwxNSArMTA3LDE1IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogU2V0IGNsdF9zazEgYXMgbm9uLWJs b2NraW5nLiAqLwo+ICAgCWZsYWdzID0gZmNudGwoY2x0X3NrMSwgRl9HRVRGTCwgMCk7Cj4gICAJ aWYgKGZsYWdzIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImZjbnRsIEZfR0VURkw6 ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJm Y250bCBGX0dFVEZMOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gICAJaWYgKGZjbnRsKGNsdF9z azEsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9L LCBOVUxMLCAiZmNudGwgRl9TRVRGTDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImZjbnRsIEZfU0VURkw6ICVzIiwgc3RyZXJyb3IoZXJybm8p KTsKPiAgIAo+IC0JLyogRG8gYSBub24tYmxvY2tpbmcgY29ubmVjdCBmcm9tIGNsdF9zazEgdG8g c3ZyX3NrICovCj4gKwkvKiBEbyBhIG5vbi1ibG9ja2luZyBjb25uZWN0IGZyb20gY2x0X3NrMSB0 byBzdnJfc2sgKi8KPiAgIAllcnJvciA9IGNvbm5lY3QoY2x0X3NrMSwgJnN2cl9sb29wLnNhLCBz aXplb2Yoc3ZyX2xvb3ApKTsKPiAgIAkvKiBOb24tYmxvY2tpbmcgY29ubmVjdCBzaG91bGQgcmV0 dXJuIGltbWVkaWF0ZWx5IHdpdGggRUlOUFJPR1JFU1MuICovCj4gICAJaWYgKChlcnJvciAhPSAt MSkgfHwgKEVJTlBST0dSRVNTICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg Im5vbi1ibG9ja2luZyBjb25uZWN0IGVycm9yOiAlZCIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJub24tYmxvY2tpbmcgY29ubmVjdCBlcnJvcjogJWQiCj4gICAJCQkgImVycm5vOiVk IiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAibm9uLWJsb2NraW5n IGNvbm5lY3QiKTsKPiBAQCAtMTI0LDcgKzEyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJICovCj4gICAJZXJyb3IgPSBjb25uZWN0KGNsdF9zazEsICZzdnJfbG9v cC5zYSwgc2l6ZW9mKHN2cl9sb29wKSk7Cj4gICAJaWYgKChlcnJvciAhPSAtMSkgfHwgKEVJU0NP Tk4gIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiY29ubmVjdCBvbiBhIHNv Y2tldCB0byBjcmVhdGUgYW4gIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImNvbm5l Y3Qgb24gYSBzb2NrZXQgdG8gY3JlYXRlIGFuICIKPiAgIAkJCSAiYXNzb2MgdGhhdCBpcyBhbHJl YWR5IGVzdGFibGlzaGVkIGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8p Owo+ICAgCj4gQEAgLTEzMiw3ICsxMzMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQo+ICAgCQkgImFscmVhZHkgZXN0YWJsaXNoZWQiKTsKPiAgIAo+ICAgCS8qIEluaXRpYWxp emUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2ZXMuICovCj4gLQltZW1zZXQoJmlubWVzc2FnZSwg MCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+ICsgICAgICAgIG1lbXNldCgmaW5tZXNzYWdlLCAwLCBz aXplb2YoaW5tZXNzYWdlKSk7Cj4gICAJYmlnX2J1ZmZlciA9IHRlc3RfbWFsbG9jKFJFQUxMWV9C SUcpOwo+ICAgCWlvdi5pb3ZfYmFzZSA9IGJpZ19idWZmZXI7Cj4gICAJaW92Lmlvdl9sZW4gPSBS RUFMTFlfQklHOwo+IEBAIC0xNDUsOCArMTQ2LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVy cm9yLAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSwKPiAgIAkJ CQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKyNpZiAwCj4gICAJc2Fj ID0gKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqKWlvdi5pb3ZfYmFzZTsKPiAgIAljbHRfYXNz b2NpZDEgPSBzYWMtPnNhY19hc3NvY19pZDsKPiArI2VuZGlmCj4gICAKPiAgIAkvKiBHZXQgQ09N TV9VUCBvbiBzdnJfc2sgKi8KPiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1l c3NhZ2UsIE1TR19XQUlUQUxMKTsKPiBAQCAtMTU2LDcgKzE1OSw3IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4gICAJc2FjID0gKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAq KWlvdi5pb3ZfYmFzZTsKPiAgIAlzdnJfYXNzb2NpZDEgPSBzYWMtPnNhY19hc3NvY19pZDsKPiAg IAo+IC0JLyogRG8gYSBibG9ja2luZyBjb25uZWN0IGZyb20gY2x0X3NrMiB0byBzdnJfc2suCj4g KwkvKiBEbyBhIGJsb2NraW5nIGNvbm5lY3QgZnJvbSBjbHRfc2syIHRvIHN2cl9zay4KPiAgIAkg KiBCbG9ja2luZyBjb25uZWN0IHNob3VsZCBibG9jayB1bnRpbCB0aGUgYXNzb2NpYXRpb24gaXMg ZXN0YWJsaXNoZWQKPiAgIAkgKiBhbmQgcmV0dXJuIHN1Y2Nlc3MuCj4gICAJICovCj4gQEAgLTE2 NywzNSArMTcwLDM5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJdGVz dF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCSAgICBz aXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSwKPiAgIAkJCQkgICAgU0NUUF9BU1NPQ19D SEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKyNpZiAwCj4gICAJc2FjID0gKHN0cnVjdCBzY3RwX2Fz c29jX2NoYW5nZSAqKWlvdi5pb3ZfYmFzZTsKPiAgIAljbHRfYXNzb2NpZDIgPSBzYWMtPnNhY19h c3NvY19pZDsKPiArI2VuZGlmCj4gICAKPiAgIAkvKiBHZXQgQ09NTV9VUCBvbiBzdnJfc2sgKi8K PiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxM KTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4g ICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+ICAgCQkJCSAgICBT Q1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsKPiArI2lmIDAKPiAgIAlzYWMgPSAoc3Ry dWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCXN2cl9hc3NvY2lkMiA9 IHNhYy0+c2FjX2Fzc29jX2lkOwo+ICsjZW5kaWYKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi YmxvY2tpbmcgY29ubmVjdCIpOwo+ICAgCj4gLQlwZWVsb2ZmX3NrID0gdGVzdF9zY3RwX3BlZWxv ZmYoc3ZyX3NrLCBzdnJfYXNzb2NpZDEpOwo+ICsJcGVlbG9mZl9zayA9IHRlc3Rfc2N0cF9wZWVs b2ZmKHN2cl9zaywgc3ZyX2Fzc29jaWQxKTsKPiAgIAo+ICAgCS8qIERvaW5nIGEgY29ubmVjdCBv biBhIHBlZWxlZCBvZmYgc29ja2V0IHNob3VsZCBmYWlsLiAqLwo+ICAgCWVycm9yID0gY29ubmVj dChwZWVsb2ZmX3NrLCAmY2x0X2xvb3AzLnNhLCBzaXplb2YoY2x0X2xvb3AzKSk7Cj4gICAJaWYg KChlcnJvciAhPSAtMSkgfHwgKEVJU0NPTk4gIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9L LCBOVUxMLCAiY29ubmVjdCBvbiBhIHBlZWxlZCBvZmYgc29ja2V0ICIKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJjb25uZWN0IG9uIGEgcGVlbGVkIG9mZiBzb2NrZXQgIgo+ICAgCQkJ ICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20o VFBBU1MsICJjb25uZWN0IG9uIGEgcGVlbGVkIG9mZiBzb2NrZXQiKTsKPiAgIAo+IC0JLyogVHJ5 aW5nIHRvIGNyZWF0ZSBhbiBhc3NvY2lhdGlvbiBvbiBhIHNvY2tldCB0aGF0IG1hdGNoZXMgYW4K PiArCS8qIFRyeWluZyB0byBjcmVhdGUgYW4gYXNzb2NpYXRpb24gb24gYSBzb2NrZXQgdGhhdCBt YXRjaGVzIGFuCj4gICAJICogZXhpc3RpbmcgcGVlbGVkLW9mZiBhc3NvY2lhdGlvbiBzaG91bGQg ZmFpbC4KPiAgIAkgKi8KPiAgIAllcnJvciA9IGNvbm5lY3Qoc3ZyX3NrLCAmY2x0X2xvb3AxLnNh LCBzaXplb2YoY2x0X2xvb3AxKSk7Cj4gICAJaWYgKChlcnJvciAhPSAtMSkgfHwgKEVBRERSTk9U QVZBSUwgIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiY29ubmVjdCB0byBj cmVhdGUgYW4gYXNzb2MgdGhhdCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiY29u bmVjdCB0byBjcmVhdGUgYW4gYXNzb2MgdGhhdCAiCj4gICAJCQkgIm1hdGNoZXMgYSBwZWVsZWQg b2ZmIGFzc29jIGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8pOwo+ICAg Cj4gQEAgLTIwNyw2ICsyMTQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ ICAgCWNsb3NlKGNsdF9zazIpOwo+ICAgCWNsb3NlKHBlZWxvZmZfc2spOwo+ICAgCj4gLQkvKiBJ bmRpY2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+IC0JdHN0X2V4aXQoKTsKPiArICAg ICAgICAvKiBJbmRpY2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+ICsgICAgICAgCXJl dHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF9jb25uZWN0eC5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3Rz L3Rlc3RfY29ubmVjdHguYwo+IGluZGV4IDhmMDgwMjUuLjI0NzcyNDEgMTAwNjQ0Cj4gLS0tIGEv dGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfY29ubmVjdHguYwo+ICsrKyBi L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2Nvbm5lY3R4LmMKPiBAQCAt MSwxNCArMSwxNCBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24K PiArLyogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqIChDKSBDb3B5cmlnaHQgSUJN IENvcnAuIDIwMDIsIDIwMDMKPiAgICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xh LCBJbmMuCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMg ZnJlZSBzb2Z0d2FyZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0 d2FyZTsKPiAgICAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4K PiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICog ICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+ IEBAIC02MywxMCArNjMsMTEgQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCSgodW5zaWduZWQgY2hh ciAqKSZhZGRyKVsyXSwgXAo+ICAgCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVszXQo+ICAgCj4g LWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2ludAo+ICttYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCj4gICB7Cj4gICAJaW50IHN2cl9zaywgY2x0X3NrMSwgY2x0X3NrMiwg cGVlbG9mZl9zazsKPiAtCXNjdHBfYXNzb2NfdCBzdnJfYXNzb2NpZDEsIHN2cl9hc3NvY2lkMiwg Y2x0X2Fzc29jaWQxLCBjbHRfYXNzb2NpZDI7Cj4gKwlzY3RwX2Fzc29jX3QgYXNzb2NpZCwgc3Zy X2Fzc29jaWQxLCBzdnJfYXNzb2NpZDIsIGNsdF9hc3NvY2lkMSwgY2x0X2Fzc29jaWQyOwo+ICAg CXN0cnVjdCBpb3ZlYyBpb3Y7Cj4gICAJc3RydWN0IG1zZ2hkciBpbm1lc3NhZ2U7Cj4gICAJaW50 IGVycm9yLCBpOwo+IEBAIC03OCwxNiArNzksMTUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKPiAgIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gY2x0X2xvb3AxW05VTUFERFJdOwo+ICAg CXN0cnVjdCBzb2NrYWRkcl9pbiBjbHRfbG9vcDJbTlVNQUREUl07Cj4gICAJc3RydWN0IHNvY2th ZGRyX2luIGNsdF9sb29wM1tOVU1BRERSXTsKPiAtCXNvY2thZGRyX3N0b3JhZ2VfdCBzdnJfdGVz dFtOVU1BRERSXSwgY2x0X3Rlc3QxW05VTUFERFJdLAo+IC0JICAgIGNsdF90ZXN0MltOVU1BRERS XTsKPiArCXNvY2thZGRyX3N0b3JhZ2VfdCBzdnJfdGVzdFtOVU1BRERSXSwgY2x0X3Rlc3QxW05V TUFERFJdLCBjbHRfdGVzdDJbTlVNQUREUl07Cj4gICAKPiAtCS8qIFJhdGhlciB0aGFuIGZmbHVz aCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVy ZWQuCj4gLQkgKi8KPiAtCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsJLyog UmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ ICsJICogYmUgdW5idWZmZXJlZC4KPiArCSAqLwo+ICsJc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9J T05CRiwgMCk7Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgTlVNQUREUjsgaSsrKSB7Cj4gLQkJ LyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBjbGllbnQgYWRkcmVzc2VzLiAqLwo+ICsJCS8q IEluaXRpYWxpemUgdGhlIHNlcnZlciBhbmQgY2xpZW50IGFkZHJlc3Nlcy4gKi8KPiAgIAkJc3Zy X2xvb3BbaV0uc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAJCXN2cl9sb29wW2ldLnNpbl9hZGRy LnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0tfSShpKTsKPiAgIAkJc3ZyX2xvb3BbaV0uc2luX3Bv cnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+IEBAIC05NSwxMiArOTUsMTEgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJc3ZyX3Rlc3RbaV0udjQuc2luX2FkZHIu c19hZGRyID0gU0NUUF9JUF9MT09QQkFDS19JKGkpOwo+ICAgCQlzdnJfdGVzdFtpXS52NC5zaW5f cG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAJCXN2cl90cnlbaV0uc2luX2ZhbWls eSA9IEFGX0lORVQ7Cj4gLQkJaWYgKGkgPCAoTlVNQUREUiAtIDEpKSB7Cj4gKwkJaWYgKGkgPCAo TlVNQUREUi0xKSkgewo+ICAgCQkJc3ZyX3RyeVtpXS5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQ X0xPT1BCQUNLX0koaSk7Cj4gICAJCX0gZWxzZSB7Cj4gICAJCQkvKiBNYWtlIGxhc3QgYWRkcmVz cyBpbnZhbGlkLiAqLwo+IC0JCQlzdnJfdHJ5W2ldLnNpbl9hZGRyLnNfYWRkciA9Cj4gLQkJCSAg ICBTQ1RQX0lQX0xPT1BCQUNLX0koaSArIDB4NDAwKTsKPiArCQkJc3ZyX3RyeVtpXS5zaW5fYWRk ci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLX0koaSArIDB4NDAwKTsKPiAgIAkJfQo+ICAgCQlz dnJfdHJ5W2ldLnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAkJY2x0X2xv b3AxW2ldLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IEBAIC0xMTEsMTkgKzExMCwxOSBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCQljbHRfdGVzdDFbaV0udjQuc2luX3Bv cnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzIpOwo+ICAgCQljbHRfbG9vcDJbaV0uc2luX2ZhbWls eSA9IEFGX0lORVQ7Cj4gICAJCWNsdF9sb29wMltpXS5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQ X0xPT1BCQUNLX0koaSArIDB4MjAwKTsKPiAtCQljbHRfbG9vcDJbaV0uc2luX3BvcnQgPSBodG9u cyhTQ1RQX1RFU1RQT1JUXzIgKyAxKTsKPiArCQljbHRfbG9vcDJbaV0uc2luX3BvcnQgPSBodG9u cyhTQ1RQX1RFU1RQT1JUXzIrMSk7Cj4gICAJCWNsdF90ZXN0MltpXS52NC5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKPiAgIAkJY2x0X3Rlc3QyW2ldLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBf TE9PUEJBQ0tfSShpICsgMHgyMDApOwo+IC0JCWNsdF90ZXN0MltpXS52NC5zaW5fcG9ydCA9IGh0 b25zKFNDVFBfVEVTVFBPUlRfMiArIDEpOwo+ICsJCWNsdF90ZXN0MltpXS52NC5zaW5fcG9ydCA9 IGh0b25zKFNDVFBfVEVTVFBPUlRfMisxKTsKPiAgIAkJY2x0X2xvb3AzW2ldLnNpbl9mYW1pbHkg PSBBRl9JTkVUOwo+ICAgCQljbHRfbG9vcDNbaV0uc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9M T09QQkFDS19JKGkgKyAweDMwMCk7Cj4gLQkJY2x0X2xvb3AzW2ldLnNpbl9wb3J0ID0gaHRvbnMo U0NUUF9URVNUUE9SVF8yICsgMik7Cj4gKwkJY2x0X2xvb3AzW2ldLnNpbl9wb3J0ID0gaHRvbnMo U0NUUF9URVNUUE9SVF8yKzIpOwo+ICAgCX0KPiAgIAo+ICAgCS8qIENyZWF0ZSBhbmQgYmluZCB0 aGUgc2VydmVyIHNvY2tldC4gICovCj4gICAJc3ZyX3NrID0gdGVzdF9zb2NrZXQoQUZfSU5FVCwg U09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gICAJdGVzdF9iaW5kKHN2cl9zaywgKHN0 cnVjdCBzb2NrYWRkciAqKSZzdnJfbG9vcFswXSwgc2l6ZW9mKHN2cl9sb29wWzBdKSk7Cj4gLQl0 ZXN0X2JpbmR4X2FkZChzdnJfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2xvb3BbMV0sIE5V TUFERFIgLSAxKTsKPiArCXRlc3RfYmluZHhfYWRkKHN2cl9zaywgKHN0cnVjdCBzb2NrYWRkciAq KSZzdnJfbG9vcFsxXSwgTlVNQUREUi0xKTsKPiAgIAo+ICAgCS8qIE1hcmsgc2VydmVyIHNvY2tl dCBhcyBiZWluZyBhYmxlIHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLiAgKi8KPiAgIAl0ZXN0 X2xpc3RlbihzdnJfc2ssIDEpOwo+IEBAIC0xMzEsMTAgKzEzMCwxMCBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+ICAgCS8qIENyZWF0ZSBhbmQgYmluZCB0aGUgY2xpZW50IHNv Y2tldHMuICAqLwo+ICAgCWNsdF9zazEgPSB0ZXN0X3NvY2tldChBRl9JTkVULCBTT0NLX1NFUVBB Q0tFVCwgSVBQUk9UT19TQ1RQKTsKPiAgIAl0ZXN0X2JpbmQoY2x0X3NrMSwgKHN0cnVjdCBzb2Nr YWRkciAqKSZjbHRfbG9vcDFbMF0sIHNpemVvZihjbHRfbG9vcDEpKTsKPiAtCXRlc3RfYmluZHhf YWRkKGNsdF9zazEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2x0X2xvb3AxWzFdLCBOVU1BRERSIC0g MSk7Cj4gKwl0ZXN0X2JpbmR4X2FkZChjbHRfc2sxLCAoc3RydWN0IHNvY2thZGRyICopJmNsdF9s b29wMVsxXSwgTlVNQUREUi0xKTsKPiAgIAljbHRfc2syID0gdGVzdF9zb2NrZXQoQUZfSU5FVCwg U09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gICAJdGVzdF9iaW5kKGNsdF9zazIsIChz dHJ1Y3Qgc29ja2FkZHIgKikmY2x0X2xvb3AyWzBdLCBzaXplb2YoY2x0X2xvb3AyKSk7Cj4gLQl0 ZXN0X2JpbmR4X2FkZChjbHRfc2syLCAoc3RydWN0IHNvY2thZGRyICopJmNsdF9sb29wMlsxXSwg TlVNQUREUiAtIDEpOwo+ICsJdGVzdF9iaW5keF9hZGQoY2x0X3NrMiwgKHN0cnVjdCBzb2NrYWRk ciAqKSZjbHRfbG9vcDJbMV0sIE5VTUFERFItMSk7Cj4gICAKPiAgIAkvKiBFbmFibGUgQVNTT0Nf Q0hBTkdFIGFuZCBTTkRSQ1ZJTkZPIG5vdGlmaWNhdGlvbnMuICovCj4gICAJdGVzdF9lbmFibGVf YXNzb2NfY2hhbmdlKHN2cl9zayk7Cj4gQEAgLTE0NCwxNSArMTQzLDE2IEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogU2V0IGNsdF9zazEgYXMgbm9uLWJsb2NraW5n LiAqLwo+ICAgCWZsYWdzID0gZmNudGwoY2x0X3NrMSwgRl9HRVRGTCwgMCk7Cj4gICAJaWYgKGZs YWdzIDwgMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImZjbnRsIEZfR0VURkw6ICVzIiwg c3RyZXJyb3IoZXJybm8pKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJmY250bCBG X0dFVEZMOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gICAJaWYgKGZjbnRsKGNsdF9zazEsIEZf U0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPCAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAiZmNudGwgRl9TRVRGTDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgImZjbnRsIEZfU0VURkw6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiAg IAo+IC0JLyogRG8gYSBub24tYmxvY2tpbmcgY29ubmVjdHggZnJvbSBjbHRfc2sxIHRvIHN2cl9z ayAqLwo+IC0JZXJyb3IgPSBzY3RwX2Nvbm5lY3R4KGNsdF9zazEsIChzdHJ1Y3Qgc29ja2FkZHIg KilzdnJfdHJ5LCBOVU1BRERSKTsKPiArCS8qIERvIGEgbm9uLWJsb2NraW5nIGNvbm5lY3R4IGZy b20gY2x0X3NrMSB0byBzdnJfc2sgKi8KPiArCWVycm9yID0gc2N0cF9jb25uZWN0eChjbHRfc2sx LCAoc3RydWN0IHNvY2thZGRyICopc3ZyX3RyeSwgTlVNQUREUiwKPiArCQkJICAgICAgJmFzc29j aWQpOwo+ICAgCS8qIE5vbi1ibG9ja2luZyBjb25uZWN0eCBzaG91bGQgcmV0dXJuIGltbWVkaWF0 ZWx5IHdpdGggRUlOUFJPR1JFU1MuICovCj4gICAJaWYgKChlcnJvciAhPSAtMSkgfHwgKEVJTlBS T0dSRVNTICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIm5vbi1ibG9ja2lu ZyBjb25uZWN0eCBlcnJvcjogJWQiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAibm9u LWJsb2NraW5nIGNvbm5lY3R4IGVycm9yOiAlZCIKPiAgIAkJCSAiZXJybm86JWQiLCBlcnJvciwg ZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJub24tYmxvY2tpbmcgY29ubmVjdHgi KTsKPiBAQCAtMTYwLDkgKzE2MCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQo+ICAgCS8qIERvaW5nIGEgY29ubmVjdHggb24gYSBzb2NrZXQgdG8gY3JlYXRlIGFuIGFzc29j aWF0aW9uIHRoYXQgaXMKPiAgIAkgKiBpcyBhbHJlYWR5IGVzdGFibGlzaGVkIHNob3VsZCByZXR1 cm4gRUlTQ09OTi4KPiAgIAkgKi8KPiAtCWVycm9yID0gc2N0cF9jb25uZWN0eChjbHRfc2sxLCAo c3RydWN0IHNvY2thZGRyICopc3ZyX3RyeSwgTlVNQUREUik7Cj4gKwllcnJvciA9IHNjdHBfY29u bmVjdHgoY2x0X3NrMSwgKHN0cnVjdCBzb2NrYWRkciAqKXN2cl90cnksIE5VTUFERFIsCj4gKwkJ CSAgICAgIE5VTEwpOwo+ICAgCWlmICgoZXJyb3IgIT0gLTEpIHx8IChFSVNDT05OICE9IGVycm5v KSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3R4IG9uIGEgc29ja2V0IHRvIGNy ZWF0ZSBhbiAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiY29ubmVjdHggb24gYSBz b2NrZXQgdG8gY3JlYXRlIGFuICIKPiAgIAkJCSAiYXNzb2MgdGhhdCBpcyBhbHJlYWR5IGVzdGFi bGlzaGVkIGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8pOwo+ICAgCj4g QEAgLTE4MiwxOSArMTgzLDI4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJZXJyb3IgPSB0ZXN0X3JlY3Ztc2coY2x0X3NrMSwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwp Owo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAg IAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NU UF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFO R0UsIFNDVFBfQ09NTV9VUCk7CQo+ICAgCXNhYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ug Kilpb3YuaW92X2Jhc2U7Cj4gICAJY2x0X2Fzc29jaWQxID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4g ICAKPiArCWlmIChhc3NvY2lkKSB7Cj4gKwkJaWYgKGFzc29jaWQgIT0gY2x0X2Fzc29jaWQxKQo+ ICsJCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJBc3NvY2lhdGlvbiBpZCBtaXNtYXRjaDog Igo+ICsJCQkgImNvbm5lY3R4IHJldHVybmVkICVkLCBub3RpZmljYXRpb24gcmV0dXJuZWQ6JWQi LAo+ICsJCQkgYXNzb2NpZCwgY2x0X2Fzc29jaWQxKTsKPiArCQl0c3RfcmVzbShUUEFTUywgIkFz c29jaWF0aW9uIGlkIG1hdGNoIGJldHdlZW4gc2N0cF9jb25uZWN0eCgpIgo+ICsJCQkJIiBhbmQg bm90aWZpY2F0aW9uLiIpOwo+ICsJfQo+ICsKPiAgIAkvKiBHZXQgQ09NTV9VUCBvbiBzdnJfc2sg Ki8KPiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlU QUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3Is Cj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAg IFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0Nf Q0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hh bmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCXN2cl9hc3NvY2lkMSA9IHNhYy0+c2FjX2Fzc29jX2lk Owo+ICAgCj4gLQkvKiBEbyBhIGJsb2NraW5nIGNvbm5lY3R4IGZyb20gY2x0X3NrMiB0byBzdnJf c2suCj4gKwkvKiBEbyBhIGJsb2NraW5nIGNvbm5lY3R4IGZyb20gY2x0X3NrMiB0byBzdnJfc2su Cj4gICAJICogQmxvY2tpbmcgY29ubmVjdHggc2hvdWxkIGJsb2NrIHVudGlsIHRoZSBhc3NvY2lh dGlvbiBpcyBlc3RhYmxpc2hlZAo+ICAgCSAqIGFuZCByZXR1cm4gc3VjY2Vzcy4KPiAgIAkgKi8K PiBAQCAtMjA0LDcgKzIxNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJZXJyb3IgPSB0ZXN0X3JlY3Ztc2coY2x0X3NrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwp Owo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAg IAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NU UF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFO R0UsIFNDVFBfQ09NTV9VUCk7CQo+ICAgCXNhYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ug Kilpb3YuaW92X2Jhc2U7Cj4gICAJY2x0X2Fzc29jaWQyID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4g ICAKPiBAQCAtMjEyLDI5ICsyMjIsMzAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKPiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlU QUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3Is Cj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAg IFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0Nf Q0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hh bmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCXN2cl9hc3NvY2lkMiA9IHNhYy0+c2FjX2Fzc29jX2lk Owo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJibG9ja2luZyBjb25uZWN0eCIpOwo+ICAgCj4g LQlwZWVsb2ZmX3NrID0gdGVzdF9zY3RwX3BlZWxvZmYoc3ZyX3NrLCBzdnJfYXNzb2NpZDEpOwo+ ICsJcGVlbG9mZl9zayA9IHRlc3Rfc2N0cF9wZWVsb2ZmKHN2cl9zaywgc3ZyX2Fzc29jaWQxKTsK PiAgIAo+ICAgCS8qIERvaW5nIGEgY29ubmVjdHggb24gYSBwZWVsZWQgb2ZmIHNvY2tldCBzaG91 bGQgZmFpbC4gKi8KPiAtCWVycm9yID0KPiAtCSAgICBzY3RwX2Nvbm5lY3R4KHBlZWxvZmZfc2ss IChzdHJ1Y3Qgc29ja2FkZHIgKiljbHRfbG9vcDMsIE5VTUFERFIpOwo+ICsJZXJyb3IgPSBzY3Rw X2Nvbm5lY3R4KHBlZWxvZmZfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKiljbHRfbG9vcDMsIE5VTUFE RFIsCj4gKwkJCSAgICAgIE5VTEwpOwo+ICAgCWlmICgoZXJyb3IgIT0gLTEpIHx8IChFSVNDT05O ICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3R4IG9uIGEgcGVl bGVkIG9mZiBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImNvbm5lY3R4 IG9uIGEgcGVlbGVkIG9mZiBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBl cnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJjb25uZWN0eCBvbiBhIHBl ZWxlZCBvZmYgc29ja2V0Iik7Cj4gICAKPiAtCS8qIFRyeWluZyB0byBjcmVhdGUgYW4gYXNzb2Np YXRpb24gb24gYSBzb2NrZXQgdGhhdCBtYXRjaGVzIGFuCj4gKwkvKiBUcnlpbmcgdG8gY3JlYXRl IGFuIGFzc29jaWF0aW9uIG9uIGEgc29ja2V0IHRoYXQgbWF0Y2hlcyBhbgo+ICAgCSAqIGV4aXN0 aW5nIHBlZWxlZC1vZmYgYXNzb2NpYXRpb24gc2hvdWxkIGZhaWwuCj4gICAJICovCj4gLQllcnJv ciA9IHNjdHBfY29ubmVjdHgoc3ZyX3NrLCAoc3RydWN0IHNvY2thZGRyICopY2x0X2xvb3AxLCBO VU1BRERSKTsKPiArCWVycm9yID0gc2N0cF9jb25uZWN0eChzdnJfc2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKiljbHRfbG9vcDEsIE5VTUFERFIsCj4gKwkJCSAgICAgIE5VTEwpOwo+ICAgCWlmICgoZXJy b3IgIT0gLTEpIHx8IChFQUREUk5PVEFWQUlMICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJP SywgTlVMTCwgImNvbm5lY3R4IHRvIGNyZWF0ZSBhbiBhc3NvYyB0aGF0ICIKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJjb25uZWN0eCB0byBjcmVhdGUgYW4gYXNzb2MgdGhhdCAiCj4g ICAJCQkgIm1hdGNoZXMgYSBwZWVsZWQgb2ZmIGFzc29jIGVycm9yOiVkIGVycm5vOiVkIiwKPiAg IAkJCSBlcnJvciwgZXJybm8pOwo+ICAgCj4gQEAgLTI1NSw1ICsyNjYsNSBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWNsb3NlKHBlZWxvZmZfc2spOwo+ICAgCj4gICAJ LyogSW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiAtCXRzdF9leGl0KCk7Cj4g KwlyZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9m dW5jX3Rlc3RzL3Rlc3RfZnJhZ21lbnRzLmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF9mcmFnbWVudHMuYwo+IGluZGV4IDRlOTJhYzMuLjdmZWIyYjIgMTAwNjQ0Cj4g LS0tIGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfZnJhZ21lbnRzLmMK PiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9mcmFnbWVudHMu Ywo+IEBAIC0xLDE3ICsxLDE3IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1l bnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAgICogKEMpIENvcHly aWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwMwo+ICAgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAg Q2lzY28sIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIE1vdG9yb2xhLCBJbmMu Cj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29ycC4KPiAgICAqIENvcHlyaWdodCAo YykgMjAwMSBOb2tpYSwgSW5jLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxl bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9u IGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICogYW55IGxh dGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRp b24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NUUCBpbXBs ZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAgKiB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKPiAg ICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4KPiBAQCAtNDAsMTYgKzQwLDE2IEBACj4gICAgKiAgICBTcmlkaGFyIFNhbXVk cmFsYSA8c3JpQHVzLmlibS5jb20+Cj4gICAgKi8KPiAgIAo+IC0vKiBUaGlzIGlzIGEgZnVuY3Rp b25hbCB0ZXN0IHRvIHZlcmlmeSB0aGUgZGF0YSBmcmFnbWVudGF0aW9uLCByZWFzc2VtYmx5Cj4g LSAqIHN1cHBvcnQgYW5kIFNDVFBfRElTQUJMRV9GUkFHTUVOVFMgc29ja2V0IG9wdGlvbi4KPiAr LyogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgdGVzdCB0byB2ZXJpZnkgdGhlIGRhdGEgZnJhZ21lbnRh dGlvbiwgcmVhc3NlbWJseQo+ICsgKiBzdXBwb3J0IGFuZCBTQ1RQX0RJU0FCTEVfRlJBR01FTlRT IHNvY2tldCBvcHRpb24uCj4gICAgKiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBkb25lIGluIHNl cXVlbmNlLgo+ICAgICogLSBWZXJpZnkgU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUyBzb2NrZXQgb3B0 aW9uIGJ5IGRvaW5nIGEgc2V0c29ja29wdCgpCj4gICAgKiAgIGZvbGxvd2VkIGJ5IGEgZ2V0c29j a29wdCgpLgo+ICAgICogLSBWZXJpZnkgdGhhdCBhIG1lc3NhZ2Ugc2l6ZSBleGNlZWRpbmcgdGhl IGFzc29jaWF0aW9uIGZyYWdtZW50YXRpb24KPiAgICAqICAgcG9pbnQgY2Fubm90IGJlIHNlbnQg d2hlbiBmcmFnbWVudGF0aW9uIGlzIGRpc2FibGVkLgo+IC0gKiAtIFNlbmQgYW5kIHJlY2VpdmUg YSBzZXQgb2YgbWVzc2FnZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4gdGhlIHBhdGggbXR1Lgo+IC0g KiAgIFRoZSBkaWZmZXJlbnQgbWVzc2FnZSBzaXplcyB0byBiZSB0ZXN0ZWQgYXJlIHNwZWNpZmll ZCBpbiB0aGUgYXJyYXkKPiAtICogICBtc2dfc2l6ZXNbXS4KPiArICogLSBTZW5kIGFuZCByZWNl aXZlIGEgc2V0IG9mIG1lc3NhZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIHRoZSBwYXRoIG10dS4K PiArICogICBUaGUgZGlmZmVyZW50IG1lc3NhZ2Ugc2l6ZXMgdG8gYmUgdGVzdGVkIGFyZSBzcGVj aWZpZWQgaW4gdGhlIGFycmF5Cj4gKyAqICAgbXNnX3NpemVzW10uCj4gICAgKi8KPiAgIAo+ICAg I2luY2x1ZGUgPHN0ZGlvLmg+Cj4gQEAgLTY4LDg2ICs2OCw4MyBAQCBjaGFyICpUQ0lEID0gX19G SUxFX187Cj4gICBpbnQgVFNUX1RPVEFMID0gNDsKPiAgIGludCBUU1RfQ05UID0gMDsKPiAgIAo+ IC1pbnQgbXNnX3NpemVzW10gPSB7IDEzNTMsIDIwMDAsIDUwMDAsIDEwMDAwLCAyMDAwMCwgMzI3 NjggfTsKPiAraW50IG1zZ19zaXplc1tdID0gezEzNTMsIDIwMDAsIDUwMDAsIDEwMDAwLCAyMDAw MCwgMzI3Njh9Owo+ICAgCj4gLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK2lu dAo+ICttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICB7Cj4gLQlpbnQgc2sxLCBzazI7 Cj4gLQlzb2NrYWRkcl9zdG9yYWdlX3QgbG9vcDE7Cj4gLQlzb2NrYWRkcl9zdG9yYWdlX3QgbG9v cDI7Cj4gLQlzdHJ1Y3QgaW92ZWMgaW92Owo+IC0Jc3RydWN0IG1zZ2hkciBpbm1lc3NhZ2U7Cj4g KyAgICAgICAgaW50IHNrMSwgc2syOwo+ICsgICAgICAgIHNvY2thZGRyX3N0b3JhZ2VfdCBsb29w MTsKPiArICAgICAgICBzb2NrYWRkcl9zdG9yYWdlX3QgbG9vcDI7Cj4gKyAgICAgICAgc3RydWN0 IGlvdmVjIGlvdjsKPiArICAgICAgICBzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiAgIAlzdHJ1 Y3QgbXNnaGRyIG91dG1lc3NhZ2U7Cj4gICAJY2hhciBpbmNtc2dbQ01TR19TUEFDRShzaXplb2Yo c2N0cF9jbXNnX2RhdGFfdCkpXTsKPiAgIAljaGFyIG91dGNtc2dbQ01TR19TUEFDRShzaXplb2Yo c3RydWN0IHNjdHBfc25kcmN2aW5mbykpXTsKPiAgIAlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKPiAg IAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKPiAtCXN0cnVjdCBpb3ZlYyBvdXRfaW92 Owo+IC0JaW50IGVycm9yLCBieXRlc19zZW50Owo+IC0JaW50IHBmX2NsYXNzLCBhZl9mYW1pbHk7 Cj4gKyAgICAgICAgc3RydWN0IGlvdmVjIG91dF9pb3Y7Cj4gKyAgICAgICAgaW50IGVycm9yLCBi eXRlc19zZW50Owo+ICsJaW50IHBmX2NsYXNzOwo+ICAgCXVpbnQzMl90IHBwaWQ7Cj4gICAJdWlu dDMyX3Qgc3RyZWFtOwo+IC0Jc2N0cF9hc3NvY190IGFzc29jaWQxLCBhc3NvY2lkMjsKPiAtCXN0 cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjOwo+ICAgCWNoYXIgKmJpZ19idWZmZXI7Cj4gICAJ aW50IG1zZ19sZW4sIG1zZ19jbnQsIGk7Cj4gICAJdm9pZCAqbXNnX2J1ZjsKPiAgIAlpbnQgZGlz YWJsZV9mcmFnOwo+ICAgCXNvY2tsZW5fdCBvcHRsZW47Cj4gICAKPiAtCS8qIFJhdGhlciB0aGFu IGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJlIHVu YnVmZmVyZWQuCj4gKyAgICAgICAgLyogUmF0aGVyIHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0 aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ICsJICogYmUgdW5idWZmZXJlZC4KPiAgIAkgKi8KPiAt CXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsJc2V0dmJ1ZihzdGRvdXQsIE5V TEwsIF9JT05CRiwgMCk7Cj4gICAKPiAgIAkvKiBTZXQgc29tZSBiYXNpYyB2YWx1ZXMgd2hpY2gg ZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseS4gKi8KPiAgICNpZiBURVNUX1Y2Cj4gICAJcGZf Y2xhc3MgPSBQRl9JTkVUNjsKPiAtCWFmX2ZhbWlseSA9IEFGX0lORVQ2Owo+ICAgCj4gLQlsb29w MS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+IC0JbG9vcDEudjYuc2luNl9hZGRyID0gaW42 YWRkcl9sb29wYmFjazsKPiAtCWxvb3AxLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBP UlRfMSk7Cj4gKyAgICAgICAgbG9vcDEudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiArICAg ICAgICBsb29wMS52Ni5zaW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOwo+ICsgICAgICAgIGxv b3AxLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAtCWxvb3Ay LnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gLQlsb29wMi52Ni5zaW42X2FkZHIgPSBpbjZh ZGRyX2xvb3BiYWNrOwo+IC0JbG9vcDIudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9S VF8yKTsKPiArICAgICAgICBsb29wMi52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAg ICAgIGxvb3AyLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAgbG9v cDIudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKTsKPiAgICNlbHNlCj4gICAJ cGZfY2xhc3MgPSBQRl9JTkVUOwo+IC0JYWZfZmFtaWx5ID0gQUZfSU5FVDsKPiAgIAo+IC0JbG9v cDEudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQlsb29wMS52NC5zaW5fYWRkci5zX2FkZHIg PSBTQ1RQX0lQX0xPT1BCQUNLOwo+IC0JbG9vcDEudjQuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RF U1RQT1JUXzEpOwo+ICsgICAgICAgIGxvb3AxLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ICsg ICAgICAgIGxvb3AxLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAg ICAgICAgbG9vcDEudjQuc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICAgCj4g LQlsb29wMi52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWxvb3AyLnY0LnNpbl9hZGRyLnNf YWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsb29wMi52NC5zaW5fcG9ydCA9IGh0b25zKFND VFBfVEVTVFBPUlRfMik7Cj4gKyAgICAgICAgbG9vcDIudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7 Cj4gKyAgICAgICAgbG9vcDIudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsK PiArICAgICAgICBsb29wMi52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMik7Cj4g ICAjZW5kaWYgLyogVEVTVF9WNiAqLwo+ICAgCj4gLQkvKiBDcmVhdGUgdGhlIHR3byBlbmRwb2lu dHMgd2hpY2ggd2lsbCB0YWxrIHRvIGVhY2ggb3RoZXIuICAqLwo+IC0Jc2sxID0gdGVzdF9zb2Nr ZXQocGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+IC0Jc2syID0gdGVz dF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICsgICAg ICAgIC8qIENyZWF0ZSB0aGUgdHdvIGVuZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFjaCBv dGhlci4gICovCj4gKyAgICAgICAgc2sxID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU0VR UEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIHNrMiA9IHRlc3Rfc29ja2V0KHBmX2Ns YXNzLCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCS8qIEVuYWJsZSBB U1NPQ19DSEFOR0UgYW5kIFNORFJDVklORk8gbm90aWZpY2F0aW9ucy4gKi8KPiAgIAl0ZXN0X2Vu YWJsZV9hc3NvY19jaGFuZ2Uoc2sxKTsKPiAgIAl0ZXN0X2VuYWJsZV9hc3NvY19jaGFuZ2Uoc2sy KTsKPiAgIAo+IC0JLyogQmluZCB0aGVzZSBzb2NrZXRzIHRvIHRoZSB0ZXN0IHBvcnRzLiAgKi8K PiAtCXRlc3RfYmluZChzazEsICZsb29wMS5zYSwgc2l6ZW9mKGxvb3AxKSk7Cj4gLQl0ZXN0X2Jp bmQoc2syLCAmbG9vcDIuc2EsIHNpemVvZihsb29wMikpOwo+ICsgICAgICAgIC8qIEJpbmQgdGhl c2Ugc29ja2V0cyB0byB0aGUgdGVzdCBwb3J0cy4gICovCj4gKyAgICAgICAgdGVzdF9iaW5kKHNr MSwgJmxvb3AxLnNhLCBzaXplb2YobG9vcDEpKTsKPiArICAgICAgICB0ZXN0X2JpbmQoc2syLCAm bG9vcDIuc2EsIHNpemVvZihsb29wMikpOwo+ICAgCj4gLQkvKiBNYXJrIHNrMiBhcyBiZWluZyBh YmxlIHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLiAgKi8KPiArICAgICAgIC8qIE1hcmsgc2sy IGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuICAqLwo+ICAgCXRlc3Rf bGlzdGVuKHNrMiwgMSk7Cj4gICAKPiAtCS8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlz IHdpbGwgY3JlYXRlIHRoZSBhc3NvY2lhdGlvbi4gICovCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1l ID0gJmxvb3AyOwo+IC0Jb3V0bWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihsb29wMik7Cj4g LQlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdmxl biA9IDE7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0Y21zZzsKPiAtCW91dG1lc3Nh Z2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19m bGFncyA9IDA7Cj4gKyAgICAgICAgLyogU2VuZCB0aGUgZmlyc3QgbWVzc2FnZS4gIFRoaXMgd2ls bCBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLiAgKi8KPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19u YW1lID0gJmxvb3AyOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2Yo bG9vcDIpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdiA9ICZvdXRfaW92Owo+ICsgICAg ICAgIG91dG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2df Y29udHJvbCA9IG91dGNtc2c7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9 IHNpemVvZihvdXRjbXNnKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4g ICAJY21zZyA9IENNU0dfRklSU1RIRFIoJm91dG1lc3NhZ2UpOwo+ICAgCWNtc2ctPmNtc2dfbGV2 ZWwgPSBJUFBST1RPX1NDVFA7Cj4gICAJY21zZy0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4g QEAgLTE1NSw0NyArMTUyLDUwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwo+ICAgCXNpbmZv ID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21zZyk7Cj4gICAJbWVtc2V0 KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+IC0JcHBpZCA9 IHJhbmQoKTsJCS8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFsdWUuICovCj4gLQlzdHJlYW0gPSAx Owo+ICsJcHBpZCA9IHJhbmQoKTsgLyogQ2hvb3NlIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8KPiAr CXN0cmVhbSA9IDE7Cj4gICAJc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlkOwo+ICAgCXNpbmZvLT5z aW5mb19zdHJlYW0gPSBzdHJlYW07Cj4gLQltc2dfbGVuID0gMTA7Cj4gKwltc2dfbGVuID0gMTA7 CQo+ICAgCW1zZ19idWYgPSB0ZXN0X2J1aWxkX21zZygxMCk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19p b3YtPmlvdl9iYXNlID0gbXNnX2J1ZjsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9 IG1zZ19sZW47Cj4gLQl0ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwgMCwgbXNnX2xlbik7 Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFzZSA9IG1zZ19idWY7Cj4gKyAg ICAgICAgb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gbXNnX2xlbjsKPiArICAgICAgICB0 ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwgMCwgbXNnX2xlbik7Cj4gKwo+ICAgCj4gICAJ LyogSW5pdGlhbGl6ZSBpbm1lc3NhZ2UgZm9yIGFsbCByZWNlaXZlcy4gKi8KPiAgIAliaWdfYnVm ZmVyID0gdGVzdF9tYWxsb2MoUkVBTExZX0JJRyk7Cj4gLQltZW1zZXQoJmlubWVzc2FnZSwgMCwg c2l6ZW9mKGlubWVzc2FnZSkpOwo+IC0JaW92Lmlvdl9iYXNlID0gYmlnX2J1ZmZlcjsKPiAtCWlv di5pb3ZfbGVuID0gUkVBTExZX0JJRzsKPiAtCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKPiAt CWlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiAtCWlubWVzc2FnZS5tc2dfY29udHJvbCA9IGlu Y21zZzsKPiAtCj4gLQkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazIu ICAqLwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gLQll cnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiArICAg ICAgICBtZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwkKPiArICAgICAg ICBpb3YuaW92X2Jhc2UgPSBiaWdfYnVmZmVyOwo+ICsgICAgICAgIGlvdi5pb3ZfbGVuID0gUkVB TExZX0JJRzsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lvdiA9ICZpb3Y7Cj4gKyAgICAgICAg aW5tZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJv bCA9IGluY21zZzsKPiArCj4gKyAgICAgICAgLyogR2V0IHRoZSBjb21tdW5pY2F0aW9uIHVwIG1l c3NhZ2Ugb24gc2syLiAgKi8KPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBz aXplb2YoaW5jbXNnKTsKPiArICAgICAgICBlcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1l c3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlu bWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFu Z2UpLAo+ICAgCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsKPiArI2lm IDAKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNlOwo+ ICAgCWFzc29jaWQyID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gLQo+IC0JLyogR2V0IHRoZSBjb21t dW5pY2F0aW9uIHVwIG1lc3NhZ2Ugb24gc2sxLiAgKi8KPiAtCWlubWVzc2FnZS5tc2dfY29udHJv bGxlbiA9IHNpemVvZihpbmNtc2cpOwo+IC0JZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2sxLCAmaW5t ZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gKyNlbmRpZgo+ICsgICAgICAgIC8qIEdldCB0aGUgY29t bXVuaWNhdGlvbiB1cCBtZXNzYWdlIG9uIHNrMS4gICovCj4gKyAgICAgICAgaW5tZXNzYWdlLm1z Z19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3Jl Y3Ztc2coc2sxLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2df bm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0 IHNjdHBfYXNzb2NfY2hhbmdlKSwKPiAtCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9D T01NX1VQKTsKPiArCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsJCj4g KyNpZiAwCj4gICAJc2FjID0gKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqKWlvdi5pb3ZfYmFz ZTsKPiAgIAlhc3NvY2lkMSA9IHNhYy0+c2FjX2Fzc29jX2lkOwo+IC0KPiAtCS8qIEdldCB0aGUg Zmlyc3QgbWVzc2FnZSB3aGljaCB3YXMgc2VudC4gICovCj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRy b2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlu bWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdl LCBlcnJvciwgbXNnX2xlbiwgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiArI2VuZGlmCj4gKyAg ICAgICAgLyogR2V0IHRoZSBmaXJzdCBtZXNzYWdlIHdoaWNoIHdhcyBzZW50LiAgKi8KPiArICAg ICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiArICAgICAg ICBlcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAr ICAgICAgICB0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBtc2dfbGVuLCBN U0dfRU9SLCBzdHJlYW0sIHBwaWQpOwo+ICAgCj4gICAJZnJlZShtc2dfYnVmKTsKPiAgIAo+IEBA IC0yMDYsMTMgKzIwNiwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAg Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nrb3B0KFNDVFBfRElTQUJMRV9GUkFHTUVOVFMp Iik7Cj4gICAKPiAtCS8qIERvIGEgZ2V0c29ja29wdCgpIGFuZCB2ZXJpZnkgdGhhdCBmcmFnbWVu dGF0aW9uIGlzIGRpc2FibGVkLiAqLwo+ICsJLyogRG8gYSBnZXRzb2Nrb3B0KCkgYW5kIHZlcmlm eSB0aGF0IGZyYWdtZW50YXRpb24gaXMgZGlzYWJsZWQuICovCj4gICAJZGlzYWJsZV9mcmFnID0g MDsKPiAgIAlvcHRsZW4gPSBzaXplb2YoZGlzYWJsZV9mcmFnKTsKPiAgIAllcnJvciA9IHRlc3Rf Z2V0c29ja29wdChzazEsIFNDVFBfRElTQUJMRV9GUkFHTUVOVFMsICZkaXNhYmxlX2ZyYWcsCj4g ICAJCQkJJm9wdGxlbik7Cj4gICAJaWYgKChlcnJvciAhPSAwKSAmJiAoZGlzYWJsZV9mcmFnICE9 IDEpKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdChTQ1RQX0RJU0FCTEVf RlJBR01FTlRTKSAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChT Q1RQX0RJU0FCTEVfRlJBR01FTlRTKSAiCj4gICAJCQkgImVycm9yOiVkIGVycm5vOiVkIGRpc2Fi bGVfZnJhZzolZCIsCj4gICAJCQkgZXJyb3IsIGVycm5vLCBkaXNhYmxlX2ZyYWcpOwo+ICAgCj4g QEAgLTIyMSwxMyArMjIxLDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJLyogVHJ5IHRvIHNlbmQgYSBtZXNzc2FnZSB0aGF0IGV4Y2VlZHMgYXNzb2NpYXRpb24gZnJh Z21lbnRhdGlvbiBwb2ludAo+ICAgCSAqIGFuZCB2ZXJpZnkgdGhhdCBpdCBmYWlscy4KPiAgIAkg Ki8KPiAtCW1zZ19sZW4gPSAzMDAwMDsKPiArCW1zZ19sZW4gPSAxMDAwMDA7Cj4gICAJbXNnX2J1 ZiA9IHRlc3RfYnVpbGRfbXNnKG1zZ19sZW4pOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92 X2Jhc2UgPSBtc2dfYnVmOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IG1zZ19s ZW47Cj4gICAJZXJyb3IgPSBzZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2UsIDApOwo+ICAgCWlmICgo ZXJyb3IgIT0gLTEpIHx8IChlcnJubyAhPSBFTVNHU0laRSkpCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJTZW5kIGEgbWVzc2FnZSB0aGF0IGV4Y2VlZHMgIgo+ICsgICAgICAgCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJTZW5kIGEgbWVzc2FnZSB0aGF0IGV4Y2VlZHMgIgo+ICAgCQkJ ICJhc3NvYyBmcmFnIHBvaW50IGVycm9yOiVkIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiU2VuZCBhIG1lc3NhZ2UgdGhhdCBleGNlZWRzIGFzc29j IGZyYWcgcG9pbnQiKTsKPiBAQCAtMjQ2LDMwICsyNDYsMzAgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKPiAgIAo+ICAgCQltc2dfbGVuID0gbXNnX3NpemVzW2ldOwo+ICAgCQlt c2dfYnVmID0gdGVzdF9idWlsZF9tc2cobXNnX2xlbik7Cj4gLQkJb3V0bWVzc2FnZS5tc2dfaW92 LT5pb3ZfYmFzZSA9IG1zZ19idWY7Cj4gLQkJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0g bXNnX2xlbjsKPiAtCQlieXRlc19zZW50ID0gdGVzdF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2Us IDAsIG1zZ19sZW4pOwo+IC0KPiArICAgICAgICAJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFz ZSA9IG1zZ19idWY7Cj4gKyAgICAgICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IG1z Z19sZW47Cj4gKyAgICAgICAgCWJ5dGVzX3NlbnQgPSB0ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVz c2FnZSwgMCwgbXNnX2xlbik7Cj4gKwkJCj4gICAJCXRzdF9yZXNtKFRJTkZPLCAiU2VudCAlZCBi eXRlIG1lc3NhZ2UiLCBieXRlc19zZW50KTsKPiAgIAo+IC0JCWlubWVzc2FnZS5tc2dfY29udHJv bGxlbiA9IHNpemVvZihpbmNtc2cpOwo+IC0JCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlu bWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+IC0JCS8qIEhhbmRsZSBQYXJ0aWFsIFJlYWRzLiAqLwo+ ICsgICAgICAgIAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAr ICAgICAgICAJZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFM TCk7Cj4gKwkJLyogSGFuZGxlIFBhcnRpYWwgUmVhZHMuICovCj4gICAJCWlmIChpbm1lc3NhZ2Uu bXNnX2ZsYWdzICYgTVNHX0VPUikgewo+IC0JCQl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3Nh Z2UsIGVycm9yLCBieXRlc19zZW50LAo+ICsJICAgICAgICAJdGVzdF9jaGVja19tc2dfZGF0YSgm aW5tZXNzYWdlLCBlcnJvciwgYnl0ZXNfc2VudCwKPiAgIAkJCQkJICAgIE1TR19FT1IsIHN0cmVh bSwgcHBpZCk7Cj4gICAJCQl0c3RfcmVzbShUSU5GTywgIlJlY2VpdmVkICVkIGJ5dGUgbWVzc2Fn ZSIsIGVycm9yKTsKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWludCByZW1haW47Cj4gICAKPiAtCQkJ dGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwgZXJyb3IsIDAsCj4gKwkgICAg ICAgIAl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBlcnJvciwgMCwKPiAg IAkJCQkJICAgIHN0cmVhbSwgcHBpZCk7Cj4gICAJCQl0c3RfcmVzbShUSU5GTywgIlJlY2VpdmVk ICVkIGJ5dGUgbWVzc2FnZSIsIGVycm9yKTsKPiAgIAo+ICAgCQkJLyogUmVhZCB0aGUgcmVtYWlu aW5nIG1lc3NhZ2UuICovCj4gICAJCQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yo aW5jbXNnKTsKPiAgIAkJCXJlbWFpbiA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1T R19XQUlUQUxMKTsKPiAtCQkJdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCByZW1haW4s Cj4gKwkgICAgICAgIAl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIHJlbWFpbiwKPiAg IAkJCQkJICAgIGJ5dGVzX3NlbnQgLSBlcnJvciwKPiAgIAkJCQkJICAgIE1TR19FT1IsIHN0cmVh bSwgcHBpZCk7Cj4gICAJCQl0c3RfcmVzbShUSU5GTywgIlJlY2VpdmVkICVkIGJ5dGUgbWVzc2Fn ZSIsIGVycm9yKTsKPiBAQCAtMjgwLDE4ICsyODAsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiU2VuZC9SZWNlaXZlIGZyYWdt ZW50ZWQgbWVzc2FnZXMiKTsKPiAgIAo+IC0JLyogU2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiAt CWNsb3NlKHNrMSk7Cj4gKyAgICAgICAgLyogU2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiArICAg ICAgICBjbG9zZShzazEpOwo+ICAgCj4gLQkvKiBHZXQgdGhlIHNodXRkb3duIGNvbXBsZXRlIG5v dGlmaWNhdGlvbi4gKi8KPiArICAgICAgICAvKiBHZXQgdGhlIHNodXRkb3duIGNvbXBsZXRlIG5v dGlmaWNhdGlvbi4gKi8KPiAgIAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5j bXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRB TEwpOwo+ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNH X1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBl cnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gICAJ CQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX1NIVVRET1dOX0NPTVApOwo+ICsJCQkJCj4g KyAgICAgICAgY2xvc2Uoc2syKTsKPiAgIAo+IC0JY2xvc2Uoc2syKTsKPiAtCj4gLQkvKiBJbmRp Y2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+IC0JdHN0X2V4aXQoKTsKPiArICAgICAg ICAvKiBJbmRpY2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+ICsgICAgICAgCXJldHVy biAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVz dHMvdGVzdF9nZXRuYW1lLmMgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVz dF9nZXRuYW1lLmMKPiBpbmRleCBmMzAwMzY4Li4yMzQwZGU2IDEwMDY0NAo+IC0tLSBhL3Rlc3Rj YXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2dldG5hbWUuYwo+ICsrKyBiL3Rlc3Rj YXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X2dldG5hbWUuYwo+IEBAIC0xLDE0ICsx LDE0IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBT Q1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbgo+ICAgICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4g MjAwNAo+ICAgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAq Cj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJl Owo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK PiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9y IChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICog VGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAg ICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTU2LDcgKzU2 LDggQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gICAjZGVmaW5lIE1BWF9DTElFTlRTIDEwCj4g ICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAraW50Cj4gK21haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAgIAlpbnQgY2x0X3NrLCBzdnJfc2ssIGFjY2Vw dF9zazsKPiAgIAlzb2NrYWRkcl9zdG9yYWdlX3Qgc3ZyX2xvb3AsIGFjY2VwdF9sb29wOwo+IEBA IC02NiwxNyArNjcsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAlp bnQgZXJyb3I7Cj4gICAJaW50IHBmX2NsYXNzOwo+ICAgCj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1 c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZl cmVkLgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAg ICAgICAvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rk b3V0IHRvCj4gKwkgKiBiZSB1bmJ1ZmZlcmVkLgo+ICsJICovCj4gKwlzZXR2YnVmKHN0ZG91dCwg TlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBj bGllbnQgYWRkcmVzc2VzLiAqLwo+ICsJLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBjbGll bnQgYWRkcmVzc2VzLiAqLwo+ICAgI2lmIFRFU1RfVjYKPiAgIAlwZl9jbGFzcyA9IFBGX0lORVQ2 Owo+IC0Jc3ZyX2xvb3AudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiAtCXN2cl9sb29wLnY2 LnNpbjZfYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIpU0NUUF9JTjZBRERSX0FOWV9JTklUOwo+IC0J c3ZyX2xvb3AudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiArICAgICAg ICBzdnJfbG9vcC52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAgICAgIHN2cl9sb29w LnY2LnNpbjZfYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIpU0NUUF9JTjZBRERSX0FOWV9JTklUOwo+ ICsgICAgICAgIHN2cl9sb29wLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7 Cj4gICAjZWxzZQo+ICAgCXBmX2NsYXNzID0gUEZfSU5FVDsKPiAgIAlzdnJfbG9vcC52NC5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKPiBAQCAtODUsNyArODYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQo+ICAgI2VuZGlmCj4gICAKPiAgIAkvKiBDcmVhdGUgYW5kIGJpbmQgdGhl IGxpc3RlbmluZyBzZXJ2ZXIgc29ja2V0LiAgKi8KPiAtCXN2cl9zayA9IHRlc3Rfc29ja2V0KHBm X2NsYXNzLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBzdnJfc2sgPSB0 ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gICAJdGVz dF9iaW5kKHN2cl9zaywgJnN2cl9sb29wLnNhLCBzaXplb2Yoc3ZyX2xvb3ApKTsKPiAgIAo+ICAg CW1lbXNldCgmc3ZyX2xvY2FsX2FkZHIsIDB4MDAsIHNpemVvZihzdnJfbG9jYWxfYWRkcikpOwo+ IEBAIC05Myw3ICs5NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJ LyogVmVyaWZ5IHRoYXQgZ2V0c29ja25hbWUoKSBvbiBhbiB1bmNvbm5lY3RlZCBzb2NrZXQgd29y a3MgZmluZS4gKi8KPiAgIAllcnJvciA9IGdldHNvY2tuYW1lKHN2cl9zaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZzdnJfbG9jYWxfYWRkciwgJmxlbik7Cj4gICAJaWYgKDAgIT0gZXJyb3IpCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2NrbmFtZTogJXMiLCBzdHJlcnJvcihlcnJubykp Owo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tuYW1lOiAlcyIsIHN0cmVy cm9yKGVycm5vKSk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tuYW1lIG9uIGFu IHVuY29ubmVjdGVkIHNvY2tldCIpOwo+ICAgCj4gQEAgLTEwMiw3ICsxMDMsNyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCS8qIFZlcmlmeSB0aGF0IGdldHBlZXJuYW1l KCkgb24gYW4gdW5jb25uZWN0ZWQgc29ja2V0IGZhaWxzLiAqLwo+ICAgCWVycm9yID0gZ2V0cGVl cm5hbWUoc3ZyX3NrLCAoc3RydWN0IHNvY2thZGRyICopJnN2cl9wZWVyX2FkZHIsICZsZW4pOwo+ ICAgCWlmICgoLTEgIT0gZXJyb3IpIHx8IChFTk9UQ09OTiAhPSBlcnJubykpCj4gLQkJdHN0X2Jy a20oVEJST0ssIE5VTEwsICJnZXRwZWVybmFtZSBvbiBhbiB1bmNvbm5lY3RlZCAiCj4gKwkJdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0cGVlcm5hbWUgb24gYW4gdW5jb25uZWN0ZWQgIgo+ ICAgCQkJICJzb2NrZXQgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0cGVlcm5hbWUgb24gYW4gdW5jb25uZWN0ZWQgc29ja2V0 Iik7Cj4gQEAgLTExMiw4ICsxMTMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQo+ICAgCj4gICAJLyogQ3JlYXRlIHRoZSBjbGllbnQgc29ja2V0LiAgKi8KPiAgIAljbHRfc2sg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7Cj4gLQo+ IC0JLyogRG8gYSBibG9ja2luZyBjb25uZWN0IGZyb20gY2x0X3NrIHRvIHN2cl9zayAqLwo+ICsJ Cj4gKwkvKiBEbyBhIGJsb2NraW5nIGNvbm5lY3QgZnJvbSBjbHRfc2sgdG8gc3ZyX3NrICovCj4g ICAjaWYgVEVTVF9WNgo+ICAgCXN2cl9sb29wLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJh Y2s7Cj4gICAjZWxzZQo+IEBAIC0xMjYsNyArMTI3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKPiAgIAkvKiBHZXQgdGhlIGNsaWVudCdzIGxvY2FsIGFkZHJlc3MuICovCj4g ICAJZXJyb3IgPSBnZXRzb2NrbmFtZShjbHRfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2x0X2xv Y2FsX2FkZHIsICZsZW4pOwo+ICAgCWlmICgwICE9IGVycm9yKQo+IC0JCXRzdF9icmttKFRCUk9L LCBOVUxMLCAiZ2V0c29ja25hbWUgb24gYSBjb25uZWN0ZWQgY2xpZW50ICIKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2NrbmFtZSBvbiBhIGNvbm5lY3RlZCBjbGllbnQgIgo+ ICAgCQkJICJzb2NrZXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+ICAgCXRzdF9yZXNt KFRQQVNTLCAiZ2V0c29ja25hbWUgb24gYSBjb25uZWN0ZWQgY2xpZW50IHNvY2tldCIpOwo+IEBA IC0xMzYsMjIgKzEzNywyMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAg CS8qIEdldCB0aGUgY2xpZW50J3MgcGVlciBhZGRyZXNzLiAqLwo+ICAgCWVycm9yID0gZ2V0cGVl cm5hbWUoY2x0X3NrLCAoc3RydWN0IHNvY2thZGRyICopJmNsdF9wZWVyX2FkZHIsICZsZW4pOwo+ ICAgCWlmICgwICE9IGVycm9yKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0cGVlcm5h bWUgb24gYSBjb25uZWN0ZWQgY2xpZW50ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJnZXRwZWVybmFtZSBvbiBhIGNvbm5lY3RlZCBjbGllbnQgIgo+ICAgCQkJICJzb2NrZXQ6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0cGVlcm5h bWUgb24gYSBjb25uZWN0ZWQgY2xpZW50IHNvY2tldCIpOwo+ICAgCj4gICAJLyogRXh0cmFjdCB0 aGUgYXNzb2NpYXRpb24gb24gdGhlIGxpc3RlbmluZyBzb2NrZXQgYXMgYSBuZXcgc29ja2V0LiAq Lwo+ICAgCWxlbiA9IHNpemVvZihhY2NlcHRfbG9vcCk7Cj4gLQlhY2NlcHRfc2sgPSB0ZXN0X2Fj Y2VwdChzdnJfc2ssICZhY2NlcHRfbG9vcC5zYSwgJmxlbik7Cj4gKwlhY2NlcHRfc2sgPSB0ZXN0 X2FjY2VwdChzdnJfc2ssICZhY2NlcHRfbG9vcC5zYSwgJmxlbik7Cj4gICAKPiAgIAltZW1zZXQo JnN2cl9sb2NhbF9hZGRyLCAweDAwLCBzaXplb2Yoc3ZyX2xvY2FsX2FkZHIpKTsKPiAgIAlsZW4g PSBzaXplb2Yoc3ZyX2xvY2FsX2FkZHIpOwo+ICAgCS8qIEdldCB0aGUgc2VydmVyJ3MgbG9jYWwg YWRkcmVzcy4gKi8KPiAgIAllcnJvciA9IGdldHNvY2tuYW1lKGFjY2VwdF9zaywgKHN0cnVjdCBz b2NrYWRkciAqKSZzdnJfbG9jYWxfYWRkciwKPiAtCQkJICAgICZsZW4pOwo+ICsJCQkJJmxlbik7 Cj4gICAJaWYgKDAgIT0gZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nr bmFtZSBvbiBhIGNvbm5lY3RlZCBzZXJ2ZXIgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgImdldHNvY2tuYW1lIG9uIGEgY29ubmVjdGVkIHNlcnZlciAiCj4gICAJCQkgInNvY2tldDog JXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nr bmFtZSBvbiBhIGNvbm5lY3RlZCBzZXJ2ZXIgc29ja2V0Iik7Cj4gQEAgLTE1OSw5OCArMTYwLDk5 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJbWVtc2V0KCZzdnJfcGVl cl9hZGRyLCAweDAwLCBzaXplb2Yoc3ZyX3BlZXJfYWRkcikpOwo+ICAgCWxlbiA9IHNpemVvZihz dnJfcGVlcl9hZGRyKTsKPiAgIAkvKiBHZXQgdGhlIHNlcnZlcidzIHBlZXIgYWRkcmVzcy4gKi8K PiAtCWVycm9yID0gZ2V0cGVlcm5hbWUoYWNjZXB0X3NrLCAoc3RydWN0IHNvY2thZGRyICopJnN2 cl9wZWVyX2FkZHIsICZsZW4pOwo+ICsJZXJyb3IgPSBnZXRwZWVybmFtZShhY2NlcHRfc2ssIChz dHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX3BlZXJfYWRkciwKPiArCQkJCSZsZW4pOwo+ICAgCWlmICgw ICE9IGVycm9yKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0cGVlcm5hbWUgb24gYSBj b25uZWN0ZWQgc2VydmVyICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRwZWVy bmFtZSBvbiBhIGNvbm5lY3RlZCBzZXJ2ZXIgIgo+ICAgCQkJICJzb2NrZXQ6ICVzIiwgc3RyZXJy b3IoZXJybm8pKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0cGVlcm5hbWUgb24gYSBj b25uZWN0ZWQgc2VydmVyIHNvY2tldCIpOwo+ICAgCj4gICAJaWYgKHN2cl9sb2NhbF9hZGRyLnY0 LnNpbl9wb3J0ICE9IGNsdF9wZWVyX2FkZHIudjQuc2luX3BvcnQpCj4gLQkJdHN0X2Jya20oVEJS T0ssIE5VTEwsICJTZXJ2ZXIncyBsb2NhbCBwb3J0KCVkKSBkb2Vzbid0ICIKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJTZXJ2ZXIncyBsb2NhbCBwb3J0KCVkKSBkb2Vzbid0ICIKPiAg IAkJCSAibWF0Y2ggQ2xpZW50J3MgcGVlciBwb3J0KCVkKVxuIiwKPiAgIAkJCSBzdnJfbG9jYWxf YWRkci52NC5zaW5fcG9ydCwgY2x0X3BlZXJfYWRkci52NC5zaW5fcG9ydCk7Cj4gICAKPiAgIAlp ZiAoc3ZyX3BlZXJfYWRkci52NC5zaW5fcG9ydCAhPSBjbHRfbG9jYWxfYWRkci52NC5zaW5fcG9y dCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIlNlcnZlcidzIHBlZXIgcG9ydCglZCkgZG9l c24ndCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiU2VydmVyJ3MgcGVlciBwb3J0 KCVkKSBkb2Vzbid0ICIKPiAgIAkJCSAibWF0Y2ggQ2xpZW50J3MgbG9jYWwgcG9ydCglZClcbiIs Cj4gICAJCQkgc3ZyX3BlZXJfYWRkci52NC5zaW5fcG9ydCwgY2x0X2xvY2FsX2FkZHIudjQuc2lu X3BvcnQpOwo+ICAgI2lmIFRFU1RfVjYKPiAgIAlpZiAobWVtY21wKCZzdnJfbG9jYWxfYWRkciwg JmNsdF9wZWVyX2FkZHIsIGxlbikgIT0gMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIlNl cnZlcidzIGxvY2FsIGFkZHJlc3MgYW5kIGNsaWVudCdzICIKPiArCQl0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJTZXJ2ZXIncyBsb2NhbCBhZGRyZXNzIGFuZCBjbGllbnQncyAiCj4gICAJCQkg InBlZXIgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaFxuIik7Cj4gICAKPiAgIAlpZiAobWVtY21wKCZz dnJfcGVlcl9hZGRyLCAmY2x0X2xvY2FsX2FkZHIsIGxlbikgIT0gMCkKPiAtCQl0c3RfYnJrbShU QlJPSywgTlVMTCwgIlNlcnZlcidzIHBlZXIgYWRkcmVzcyBhbmQgY2xpZW50J3MgIgo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgIlNlcnZlcidzIHBlZXIgYWRkcmVzcyBhbmQgY2xpZW50 J3MgIgo+ICAgCQkJICJsb2NhbCBhZGRyZXNzZXMgZG8gbm90IG1hdGNoXG4iKTsKPiAgICNlbHNl Cj4gICAJaWYgKHN2cl9sb2NhbF9hZGRyLnY0LnNpbl9hZGRyLnNfYWRkciAhPQo+IC0JICAgIGNs dF9wZWVyX2FkZHIudjQuc2luX2FkZHIuc19hZGRyKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAiU2VydmVyJ3MgbG9jYWwgYWRkcmVzcyBhbmQgY2xpZW50J3MgIgo+ICsJCSAJCWNsdF9wZWVy X2FkZHIudjQuc2luX2FkZHIuc19hZGRyKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwg IlNlcnZlcidzIGxvY2FsIGFkZHJlc3MgYW5kIGNsaWVudCdzICIKPiAgIAkJCSAicGVlciBhZGRy ZXNzZXMgZG8gbm90IG1hdGNoXG4iKTsKPiAgIAlpZiAoc3ZyX3BlZXJfYWRkci52NC5zaW5fYWRk ci5zX2FkZHIgIT0KPiAtCSAgICBjbHRfbG9jYWxfYWRkci52NC5zaW5fYWRkci5zX2FkZHIpCj4g LQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJTZXJ2ZXIncyBwZWVyIGFkZHJlc3MgYW5kIGNsaWVu dCdzICIKPiArCQkgCQljbHRfbG9jYWxfYWRkci52NC5zaW5fYWRkci5zX2FkZHIpCj4gKwkJdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LCAiU2VydmVyJ3MgcGVlciBhZGRyZXNzIGFuZCBjbGllbnQn cyAiCj4gICAJCQkgImxvY2FsIGFkZHJlc3NlcyBkbyBub3QgbWF0Y2hcbiIpOwo+ICAgI2VuZGlm Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2NrbmFtZS9nZXRwZWVybmFtZSBzZXJ2ZXIvY2xp ZW50IG1hdGNoIik7Cj4gICAKPiAgIAltZW1zZXQoJmNsdF9sb2NhbF9hZGRyLCAweDAwLCBzaXpl b2YoY2x0X2xvY2FsX2FkZHIpKTsKPiAgIAlsZW4gPSBzaXplb2YoY2x0X2xvY2FsX2FkZHIpOwo+ IC0JLypnZXRzb2NrbmFtZSgpOiAgQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBFQkFERiBleHBlY3Rl ZCBlcnJvciAqLwo+ICsJLypnZXRzb2NrbmFtZSgpOiAgQmFkIHNvY2tldCBkZXNjcmlwdG9yLCBF QkFERiBleHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3IgPSBnZXRzb2NrbmFtZSgtMSwgKHN0cnVj dCBzb2NrYWRkciAqKSZjbHRfbG9jYWxfYWRkciwgJmxlbik7Cj4gICAJaWYgKGVycm9yICE9IC0x IHx8IGVycm5vICE9IEVCQURGKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja25h bWUgb24gYSBiYWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRz b2NrbmFtZSBvbiBhIGJhZCBzb2NrZXQgIgo+ICAgCQkJICJkZXNjcmlwdG9yLiBlcnJvcjolZCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNv Y2tuYW1lIG9uIGEgYmFkIHNvY2tldCBkZXNjcmlwdG9yIC0gRUJBREYiKTsKPiAgIAo+IC0JLypn ZXRzb2NrbmFtZSgpOiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgZXhwZWN0ZWQgZXJyb3IgKi8K PiArCS8qZ2V0c29ja25hbWUoKTogSW52YWxpZCBzb2NrZXQsIEVOT1RTT0NLIGV4cGVjdGVkIGVy cm9yKi8KPiAgIAllcnJvciA9IGdldHNvY2tuYW1lKDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2x0 X2xvY2FsX2FkZHIsICZsZW4pOwo+ICAgCWlmIChlcnJvciAhPSAtMSB8fCBlcnJubyAhPSBFTk9U U09DSykKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tuYW1lIG9uIGFuIGludmFs aWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2NrbmFtZSBv biBhbiBpbnZhbGlkIHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkIGVycm5vOiVkIiwgZXJyb3Is IGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja25hbWUgb24gYW4gaW52 YWxpZCBzb2NrZXQgLSBFTk9UU09DSyIpOwo+ICAgCj4gLQkvKmdldHNvY2tuYW1lKCk6IEludmFs aWQgc3RydWN0dXJlLCBFRkFVTFQgZXhwZWN0ZWQgZXJyb3IgKi8KPiArCS8qZ2V0c29ja25hbWUo KTogSW52YWxpZCBzdHJ1Y3R1cmUsIEVGQVVMVCBleHBlY3RlZCBlcnJvciovCj4gICAJZXJyb3Ig PSBnZXRzb2NrbmFtZShjbHRfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKiktMSwgJmxlbik7Cj4gICAJ aWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVGQVVMVCkKPiAtCQl0c3RfYnJrbShUQlJPSywg TlVMTCwgImdldHNvY2tuYW1lIHdpdGggaW52YWxpZCBidWZmZXIgIgo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgImdldHNvY2tuYW1lIHdpdGggaW52YWxpZCBidWZmZXIgIgo+ICAgCQkJ ICJlcnJvcjolZCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShU UEFTUywgImdldHNvY2tuYW1lIHdpdGggaW52YWxpZCBidWZmZXIgLSBFRkFVTFQiKTsKPiAtCj4g Kwo+ICAgCW1lbXNldCgmY2x0X3BlZXJfYWRkciwgMHgwMCwgc2l6ZW9mKGNsdF9wZWVyX2FkZHIp KTsKPiAgIAlsZW4gPSBzaXplb2YoY2x0X3BlZXJfYWRkcik7Cj4gLQkvKmdldHBlZXJuYW1lKCk6 ICBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIGV4cGVjdGVkIGVycm9yICovCj4gKwkvKmdl dHBlZXJuYW1lKCk6ICBCYWQgc29ja2V0IGRlc2NyaXB0b3IsIEVCQURGIGV4cGVjdGVkIGVycm9y Ki8KPiAgIAllcnJvciA9IGdldHBlZXJuYW1lKC0xLCAoc3RydWN0IHNvY2thZGRyICopJmNsdF9s b2NhbF9hZGRyLCAmbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYp Cj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRwZWVybmFtZSBvbiBhIGJhZCBzb2NrZXQg Igo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHBlZXJuYW1lIG9uIGEgYmFkIHNv Y2tldCAiCj4gICAJCQkgImRlc2NyaXB0b3IuIGVycm9yOiVkIGVycm5vOiVkIiwgZXJyb3IsIGVy cm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0cGVlcm5hbWUgb24gYSBiYWQgc29j a2V0IGRlc2NyaXB0b3IgLSBFQkFERiIpOwo+ICAgCj4gLQkvKmdldHBlZXJuYW1lKCk6IEludmFs aWQgc29ja2V0LCBFTk9UU09DSyBleHBlY3RlZCBlcnJvciAqLwo+ICsJLypnZXRwZWVybmFtZSgp OiBJbnZhbGlkIHNvY2tldCwgRU5PVFNPQ0sgZXhwZWN0ZWQgZXJyb3IqLwo+ICAgCWVycm9yID0g Z2V0cGVlcm5hbWUoMCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjbHRfbG9jYWxfYWRkciwgJmxlbik7 Cj4gICAJaWYgKGVycm9yICE9IC0xIHx8IGVycm5vICE9IEVOT1RTT0NLKQo+IC0JCXRzdF9icmtt KFRCUk9LLCBOVUxMLCAiZ2V0cGVlcm5hbWUgb24gYW4gaW52YWxpZCBzb2NrZXQgIgo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHBlZXJuYW1lIG9uIGFuIGludmFsaWQgc29ja2V0 ICIKPiAgIAkJCSAiZXJyb3I6JWQgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJ dHN0X3Jlc20oVFBBU1MsICJnZXRwZWVybmFtZSBvbiBhbiBpbnZhbGlkIHNvY2tldCAtIEVOT1RT T0NLIik7Cj4gICAKPiAtCS8qZ2V0cGVlcm5hbWUoKTogSW52YWxpZCBzdHJ1Y3R1cmUsIEVGQVVM VCBleHBlY3RlZCBlcnJvciAqLwo+ICsJLypnZXRwZWVybmFtZSgpOiBJbnZhbGlkIHN0cnVjdHVy ZSwgRUZBVUxUIGV4cGVjdGVkIGVycm9yKi8KPiAgIAllcnJvciA9IGdldHBlZXJuYW1lKGNsdF9z aywgKHN0cnVjdCBzb2NrYWRkciAqKS0xLCAmbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gLTEgfHwg ZXJybm8gIT0gRUZBVUxUKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0cGVlcm5hbWUg d2l0aCBpbnZhbGlkIGJ1ZmZlciAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0 cGVlcm5hbWUgd2l0aCBpbnZhbGlkIGJ1ZmZlciAiCj4gICAJCQkgImVycm9yOiVkIGVycm5vOiVk IiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0cGVlcm5hbWUg d2l0aCBpbnZhbGlkIGJ1ZmZlciAtIEVGQVVMVCIpOwo+IC0KPiArCj4gICAJY2xvc2UoY2x0X3Nr KTsKPiAgIAljbG9zZShzdnJfc2spOwo+ICAgCWNsb3NlKGFjY2VwdF9zayk7Cj4gICAKPiAtCS8q IEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4gICovCj4gLQl0c3RfZXhpdCgpOwo+ICsg ICAgICAgIC8qIEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4gICovCj4gKwlyZXR1cm4g MDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3Rz L3Rlc3RfaW5hZGRyX2FueS5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rl c3RfaW5hZGRyX2FueS5jCj4gaW5kZXggYWM4YTYzOC4uNzIyYTcwMiAxMDA2NDQKPiAtLS0gYS90 ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9pbmFkZHJfYW55LmMKPiArKysg Yi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9pbmFkZHJfYW55LmMKPiBA QCAtMSw0ICsxLDQgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9u Cj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElC TSBDb3JwLiAyMDAyLCAyMDAzCj4gICAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywg SW5jLgo+ICAgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiBAQCAt NiwxMyArNiwxMyBAQAo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIE5va2lhLCBJbmMuCj4gICAg KiBDb3B5cmlnaHQgKGMpIDIwMDEgTGEgTW9udGUgSC5QLiBZYXJyb2xsCj4gICAgKgo+IC0gKiBU aGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiArICog VGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4gICAg KiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAgKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91 ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQ IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoqKioq KioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC00Myw3ICs0Myw3IEBACj4g ICAKPiAgIC8qIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHRlc3QgdG8gdmVyaWZ5IGJpbmRpbmcgYSBz b2NrZXQgd2l0aCBJTkFERFJZX0FOWQo+ICAgICogYWRkcmVzcyBhbmQgc2VuZCBtZXNzYWdlcy4K PiAtICovCj4gKyAqLwo+ICAgCj4gICAjaW5jbHVkZSA8c3RkaW8uaD4KPiAgICNpbmNsdWRlIDx1 bmlzdGQuaD4KPiBAQCAtNjEsMTAwICs2MSw5OSBAQCBjaGFyICpUQ0lEID0gX19GSUxFX187Cj4g ICBpbnQgVFNUX1RPVEFMID0gMjsKPiAgIGludCBUU1RfQ05UID0gMDsKPiAgIAo+IC1pbnQgbWFp bih2b2lkKQo+ICtpbnQKPiArbWFpbih2b2lkKQo+ICAgewo+IC0JaW50IHNrMSwgc2syOwo+IC0J c29ja2FkZHJfc3RvcmFnZV90IGxvb3A7Cj4gLQlzb2NrYWRkcl9zdG9yYWdlX3QgYW55YWRkcjsK PiAtCXN0cnVjdCBtc2doZHIgb3V0bWVzc2FnZTsKPiArICAgICAgICBpbnQgc2sxLCBzazI7Cj4g KyAgICAgICAgc29ja2FkZHJfc3RvcmFnZV90IGxvb3A7Cj4gKyAgICAgICAgc29ja2FkZHJfc3Rv cmFnZV90IGFueWFkZHI7Cj4gKyAgICAgICAgc3RydWN0IG1zZ2hkciBvdXRtZXNzYWdlOwo+ICAg CWNoYXIgaW5jbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHNjdHBfY21zZ19kYXRhX3QpKV07Cj4gICAJ Y2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKV07 Cj4gICAJc3RydWN0IGNtc2doZHIgKmNtc2c7Cj4gICAJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAq c2luZm87Cj4gLQlzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAtCXN0cnVjdCBpb3ZlYyBpb3Y7Cj4g LQlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiAtCWNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdv cmxkIVxuIjsKPiAtCWNoYXIgKnRlbGVwaG9uZSA9ICJXYXRzb24sIGNvbWUgaGVyZSEgIEkgbmVl ZCB5b3UhXG4iOwo+IC0JY2hhciAqdGVsZXBob25lX3Jlc3AgPSAiSSBhbHJlYWR5IGJyb3VnaHQg eW91ciBjb2ZmZWUuLi5cbiI7Cj4gLQlpbnQgZXJyb3I7Cj4gLQlpbnQgcGZfY2xhc3MsIGFmX2Zh bWlseTsKPiArICAgICAgICBzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiArICAgICAgICBzdHJ1Y3Qg aW92ZWMgaW92Owo+ICsgICAgICAgIHN0cnVjdCBtc2doZHIgaW5tZXNzYWdlOwo+ICsgICAgICAg IGNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAgICBjaGFyICp0ZWxl cGhvbmUgPSAiV2F0c29uLCBjb21lIGhlcmUhICBJIG5lZWQgeW91IVxuIjsKPiArICAgICAgICBj aGFyICp0ZWxlcGhvbmVfcmVzcCA9ICJJIGFscmVhZHkgYnJvdWdodCB5b3VyIGNvZmZlZS4uLlxu IjsKPiArICAgICAgICBpbnQgZXJyb3I7Cj4gKwlpbnQgcGZfY2xhc3M7Cj4gICAJdWludDMyX3Qg cHBpZDsKPiAgIAl1aW50MzJfdCBzdHJlYW07Cj4gICAJc29ja2xlbl90IG5hbWVsZW47Cj4gICAK PiAtCS8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRv dXQgdG8KPiAtCSAqIGJlIHVuYnVmZmVyZWQuCj4gKyAgICAgICAgLyogUmF0aGVyIHRoYW4gZmZs dXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ICsJICogYmUgdW5idWZm ZXJlZC4KPiAgIAkgKi8KPiAtCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICsJ c2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7Cj4gICAKPiAgIAkvKiBTZXQgc29tZSBi YXNpYyB2YWx1ZXMgd2hpY2ggZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseS4gKi8KPiAgICNp ZiBURVNUX1Y2Cj4gICAJcGZfY2xhc3MgPSBQRl9JTkVUNjsKPiAtCWFmX2ZhbWlseSA9IEFGX0lO RVQ2Owo+ICAgCj4gLQlsb29wLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gLQlsb29wLnY2 LnNpbjZfYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIpU0NUUF9JTjZBRERSX0xPT1BCQUNLX0lOSVQ7 Cj4gLQlsb29wLnY2LnNpbjZfcG9ydCA9IDA7Cj4gKyAgICAgICAgbG9vcC52Ni5zaW42X2ZhbWls eSA9IEFGX0lORVQ2Owo+ICsgICAgICAgIGxvb3AudjYuc2luNl9hZGRyID0gKHN0cnVjdCBpbjZf YWRkcilTQ1RQX0lONkFERFJfTE9PUEJBQ0tfSU5JVDsKPiArICAgICAgICBsb29wLnY2LnNpbjZf cG9ydCA9IDA7Cj4gICAKPiAtCWFueWFkZHIudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiAt CWFueWFkZHIudjYuc2luNl9hZGRyID0gKHN0cnVjdCBpbjZfYWRkcilTQ1RQX0lONkFERFJfQU5Z X0lOSVQ7Cj4gLQlhbnlhZGRyLnY2LnNpbjZfcG9ydCA9IDA7Cj4gKyAgICAgICAgYW55YWRkci52 Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAgICAgIGFueWFkZHIudjYuc2luNl9hZGRy ID0gKHN0cnVjdCBpbjZfYWRkcilTQ1RQX0lONkFERFJfQU5ZX0lOSVQ7Cj4gKyAgICAgICAgYW55 YWRkci52Ni5zaW42X3BvcnQgPSAwOwo+ICAgI2Vsc2UKPiAgIAlwZl9jbGFzcyA9IFBGX0lORVQ7 Cj4gLQlhZl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAgCj4gLQlsb29wLnY0LnNpbl9mYW1pbHkgPSBB Rl9JTkVUOwo+IC0JbG9vcC52NC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ IC0JbG9vcC52NC5zaW5fcG9ydCA9IDA7Cj4gKyAgICAgICAgbG9vcC52NC5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKPiArICAgICAgICBsb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9P UEJBQ0s7Cj4gKyAgICAgICAgbG9vcC52NC5zaW5fcG9ydCA9IDA7Cj4gICAKPiAtCWFueWFkZHIu djQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gLQlhbnlhZGRyLnY0LnNpbl9hZGRyLnNfYWRkciA9 IElOQUREUl9BTlk7Cj4gLQlhbnlhZGRyLnY0LnNpbl9wb3J0ID0gMDsKPiArICAgICAgICBhbnlh ZGRyLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ICsgICAgICAgIGFueWFkZHIudjQuc2luX2Fk ZHIuc19hZGRyID0gSU5BRERSX0FOWTsKPiArICAgICAgICBhbnlhZGRyLnY0LnNpbl9wb3J0ID0g MDsKPiAgICNlbmRpZiAvKiBURVNUX1Y2ICovCj4gICAKPiAtCS8qIENyZWF0ZSB0aGUgdHdvIGVu ZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFjaCBvdGhlci4gICovCj4gLQlzazEgPSB0ZXN0 X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gLQlzazIg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4g KyAgICAgICAgLyogQ3JlYXRlIHRoZSB0d28gZW5kcG9pbnRzIHdoaWNoIHdpbGwgdGFsayB0byBl YWNoIG90aGVyLiAgKi8KPiArICAgICAgICBzazEgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09D S19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgc2syID0gdGVzdF9zb2NrZXQo cGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJLyogRW5h YmxlIEFTU09DX0NIQU5HRSBhbmQgU05EUkNWSU5GTyBub3RpZmljYXRpb25zLiAqLwo+ICAgCXRl c3RfZW5hYmxlX2Fzc29jX2NoYW5nZShzazEpOwo+ICAgCXRlc3RfZW5hYmxlX2Fzc29jX2NoYW5n ZShzazIpOwo+ICAgCj4gLQkvKiBCaW5kIHRoZXNlIHNvY2tldHMgdG8gdGhlIHRlc3QgcG9ydHMu ICAqLwo+IC0JdGVzdF9iaW5kKHNrMSwgJmxvb3Auc2EsIHNpemVvZihsb29wKSk7Cj4gLQl0ZXN0 X2JpbmQoc2syLCAmYW55YWRkci5zYSwgc2l6ZW9mKGFueWFkZHIpKTsKPiArICAgICAgICAvKiBC aW5kIHRoZXNlIHNvY2tldHMgdG8gdGhlIHRlc3QgcG9ydHMuICAqLwo+ICsgICAgICAgIHRlc3Rf YmluZChzazEsICZsb29wLnNhLCBzaXplb2YobG9vcCkpOwo+ICsgICAgICAgIHRlc3RfYmluZChz azIsICZhbnlhZGRyLnNhLCBzaXplb2YoYW55YWRkcikpOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBB U1MsICJiaW5kIElOQUREUl9BTlkgYWRkcmVzcyIpOwo+ICAgCj4gLQkvKiBNYXJrIHNrMiBhcyBi ZWluZyBhYmxlIHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zICovCj4gKyAJLyogTWFyayBzazIg YXMgYmVpbmcgYWJsZSB0byBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucyAqLwo+ICAgCXRlc3RfbGlz dGVuKHNrMiwgMSk7Cj4gICAKPiAgIAkvKiBOb3cgdXNlIGdldHNvY2thbmFtZSgpIHRvIHJldHJp ZXZlIHRoZSBlcGhtZXJhbCBwb3J0cy4gKi8KPiAgIAluYW1lbGVuID0gc2l6ZW9mKGxvb3ApOwo+ ICAgCWVycm9yID0gZ2V0c29ja25hbWUoc2sxLCAmbG9vcC5zYSwgJm5hbWVsZW4pOwo+ICAgCWlm IChlcnJvciAhPSAwKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja25hbWU6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRz b2NrbmFtZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAgCj4gICAJbmFtZWxlbiA9IHNpemVv ZihhbnlhZGRyKTsKPiAgIAllcnJvciA9IGdldHNvY2tuYW1lKHNrMiwgJmFueWFkZHIuc2EsICZu YW1lbGVuKTsKPiAgIAlpZiAoZXJyb3IgIT0gMCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg ImdldHNvY2tuYW1lOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gLQo+ICsJCXRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgImdldHNvY2tuYW1lOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwo+ ICAgI2lmIFRFU1RfVjYKPiAgIAlsb29wLnY2LnNpbjZfcG9ydCA9IGFueWFkZHIudjYuc2luNl9w b3J0Owo+ICAgI2Vsc2UKPiAtCWxvb3AudjQuc2luX3BvcnQgPSBhbnlhZGRyLnY0LnNpbl9wb3J0 Owo+ICsgICAgICAgIGxvb3AudjQuc2luX3BvcnQgPSBhbnlhZGRyLnY0LnNpbl9wb3J0Owo+ICAg I2VuZGlmCj4gICAKPiAtCS8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3Jl YXRlIHRoZSBhc3NvY2lhdGlvbi4gICovCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmxvb3A7 Cj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGxvb3ApOwo+IC0Jb3V0bWVzc2Fn ZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0J b3V0bWVzc2FnZS5tc2dfY29udHJvbCA9IG91dGNtc2c7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250 cm9sbGVuID0gc2l6ZW9mKG91dGNtc2cpOwo+IC0Jb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ ICsgICAgICAgIC8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3JlYXRlIHRo ZSBhc3NvY2lhdGlvbi4gICovCj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZsb29w Owo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YobG9vcCk7Cj4gKyAg ICAgICAgb3V0bWVzc2FnZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gKyAgICAgICAgb3V0bWVzc2Fn ZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0 Y21zZzsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKG91dGNt c2cpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKPiAgIAljbXNnID0gQ01T R19GSVJTVEhEUigmb3V0bWVzc2FnZSk7Cj4gICAJY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9f U0NUUDsKPiAgIAljbXNnLT5jbXNnX3R5cGUgPSBTQ1RQX1NORFJDVjsKPiBAQCAtMTYyLDQ3ICsx NjEsNDcgQEAgaW50IG1haW4odm9pZCkKPiAgIAlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0g Y21zZy0+Y21zZ19sZW47Cj4gICAJc2luZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKUNN U0dfREFUQShjbXNnKTsKPiAgIAltZW1zZXQoc2luZm8sIDB4MDAsIHNpemVvZihzdHJ1Y3Qgc2N0 cF9zbmRyY3ZpbmZvKSk7Cj4gLQlwcGlkID0gcmFuZCgpOwkJLyogQ2hvb3NlIGFuIGFyYml0cmFy eSB2YWx1ZS4gKi8KPiAtCXN0cmVhbSA9IDE7Cj4gKwlwcGlkID0gcmFuZCgpOyAvKiBDaG9vc2Ug YW4gYXJiaXRyYXJ5IHZhbHVlLiAqLwo+ICsJc3RyZWFtID0gMTsKPiAgIAlzaW5mby0+c2luZm9f cHBpZCA9IHBwaWQ7Cj4gICAJc2luZm8tPnNpbmZvX3N0cmVhbSA9IHN0cmVhbTsKPiAtCW91dG1l c3NhZ2UubXNnX2lvdi0+aW92X2Jhc2UgPSBtZXNzYWdlOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92 LT5pb3ZfbGVuID0gc3RybGVuKG1lc3NhZ2UpICsgMTsKPiAtCXRlc3Rfc2VuZG1zZyhzazEsICZv dXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArICAgICAgICBvdXRtZXNzYWdl Lm1zZ19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19p b3YtPmlvdl9sZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+ICsgICAgICAgIHRlc3Rfc2VuZG1z ZyhzazEsICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkrMSk7Cj4gICAKPiAgIAkvKiBJ bml0aWFsaXplIGlubWVzc2FnZSBmb3IgYWxsIHJlY2VpdmVzLiAqLwo+IC0JbWVtc2V0KCZpbm1l c3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsKPiAtCWlvdi5pb3ZfYmFzZSA9IHRlc3RfbWFs bG9jKFJFQUxMWV9CSUcpOwo+IC0JaW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+IC0JaW5tZXNz YWdlLm1zZ19pb3YgPSAmaW92Owo+IC0JaW5tZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+IC0JaW5t ZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+IC0KPiAtCS8qIEdldCB0aGUgY29tbXVuaWNh dGlvbiB1cCBtZXNzYWdlIG9uIHNrMi4gICovCj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4g PSBzaXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2Fn ZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIG1lbXNldCgmaW5tZXNzYWdlLCAwLCBzaXplb2Yo aW5tZXNzYWdlKSk7Cj4gKyAgICAgICAgaW92Lmlvdl9iYXNlID0gdGVzdF9tYWxsb2MoUkVBTExZ X0JJRyk7Cj4gKyAgICAgICAgaW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+ICsgICAgICAgIGlu bWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lvdmxlbiA9 IDE7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+ICsKPiArICAg ICAgICAvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazIuICAqLwo+ICsg ICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICsgICAg ICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJ CQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9B U1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0Us IFNDVFBfQ09NTV9VUCk7CQo+ICAgCj4gLQkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVz c2FnZSBvbiBzazEuICAqLwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGlu Y21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhzazEsICZpbm1lc3NhZ2UsIE1TR19XQUlU QUxMKTsKPiArICAgICAgICAvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBz azEuICAqLwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNt c2cpOwo+ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHNrMSwgJmlubWVzc2FnZSwgTVNH X1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBl cnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJ CQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9B U1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7CQo+ICAgCj4gLQkvKiBHZXQgdGhlIGZpcnN0IG1l c3NhZ2Ugd2hpY2ggd2FzIHNlbnQuICAqLwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0g c2l6ZW9mKGluY21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2Us IE1TR19XQUlUQUxMKTsKPiAtCXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3Is IHN0cmxlbihtZXNzYWdlKSArIDEsCj4gKyAgICAgICAgLyogR2V0IHRoZSBmaXJzdCBtZXNzYWdl IHdoaWNoIHdhcyBzZW50LiAgKi8KPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4g PSBzaXplb2YoaW5jbXNnKTsKPiArICAgICAgICBlcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZp bm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiArICAgICAgICB0ZXN0X2NoZWNrX21zZ19kYXRhKCZp bm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obWVzc2FnZSkgKyAxLAo+ICAgCQkJICAgIE1TR19FT1Is IHN0cmVhbSwgcHBpZCk7Cj4gICAKPiAtCS8qIFNlbmQgMiBtZXNzYWdlcy4gICovCj4gLQlvdXRt ZXNzYWdlLm1zZ19uYW1lID0gJmxvb3A7Cj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6 ZW9mKGxvb3ApOwo+IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihvdXRjbXNn KTsKPiAtCW91dG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKPiArICAgICAgIC8qIFNlbmQgMiBtZXNz YWdlcy4gICovCj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfbmFtZSA9ICZsb29wOwo+ICsgICAg ICAgIG91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YobG9vcCk7Cj4gKyAgICAgICAgb3V0 bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihvdXRjbXNnKTsKPiArICAgICAgICBvdXRt ZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gICAJY21zZyA9IENNU0dfRklSU1RIRFIoJm91dG1lc3Nh Z2UpOwo+ICAgCWNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7Cj4gICAJY21zZy0+Y21z Z190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gQEAgLTIxNSwzOCArMjE0LDM4IEBAIGludCBtYWluKHZv aWQpCj4gICAJc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlkOwo+ICAgCXNpbmZvLT5zaW5mb19zdHJl YW0gPSBzdHJlYW07Cj4gICAJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFzZSA9IHRlbGVwaG9u ZTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IHN0cmxlbih0ZWxlcGhvbmUpICsg MTsKPiAtCXRlc3Rfc2VuZG1zZyhzazEsICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4odGVsZXBob25l KSArIDEpOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IHN0cmxlbih0 ZWxlcGhvbmUpICsgMTsKPiArCXRlc3Rfc2VuZG1zZyhzazEsICZvdXRtZXNzYWdlLCAwLCBzdHJs ZW4odGVsZXBob25lKSsxKTsKPiAgIAo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2Jhc2Ug PSB0ZWxlcGhvbmVfcmVzcDsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IHN0cmxl bih0ZWxlcGhvbmVfcmVzcCkgKyAxOwo+IC0JdGVzdF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2Us IDAsIHN0cmxlbih0ZWxlcGhvbmVfcmVzcCkgKyAxKTsKPiAtCj4gLQkvKiBHZXQgdGhvc2UgdHdv IG1lc3NhZ2VzLiAgKi8KPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBz dHJsZW4odGVsZXBob25lX3Jlc3ApICsgMTsKPiArCXRlc3Rfc2VuZG1zZyhzazEsICZvdXRtZXNz YWdlLCAwLCBzdHJsZW4odGVsZXBob25lX3Jlc3ApKzEpOwo+ICsKPiArICAgICAgICAvKiBHZXQg dGhvc2UgdHdvIG1lc3NhZ2VzLiAgKi8KPiAgIAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBz aXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwg TVNHX1dBSVRBTEwpOwo+IC0JdGVzdF9jaGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwg c3RybGVuKHRlbGVwaG9uZSkgKyAxLAo+ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHNr MiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIHRlc3RfY2hlY2tfbXNnX2Rh dGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbih0ZWxlcGhvbmUpICsgMSwKPiAgIAkJCSAgICBN U0dfRU9SLCBzdHJlYW0sIHBwaWQpOwo+ICAgCj4gICAJaW5tZXNzYWdlLm1zZ19jb250cm9sbGVu ID0gc2l6ZW9mKGluY21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3Nh Z2UsIE1TR19XQUlUQUxMKTsKPiAtCXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJy b3IsIHN0cmxlbih0ZWxlcGhvbmVfcmVzcCkgKyAxLAo+ICsgICAgICAgIGVycm9yID0gdGVzdF9y ZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIHRlc3RfY2hl Y2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbih0ZWxlcGhvbmVfcmVzcCkgKyAx LAo+ICAgCQkJICAgIE1TR19FT1IsIHN0cmVhbSwgcHBpZCk7Cj4gKwo+ICsgICAgICAgIC8qIFNo dXQgZG93biB0aGUgbGluay4gICovCj4gKyAgICAgICAgY2xvc2Uoc2sxKTsKPiAgIAo+IC0JLyog U2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiAtCWNsb3NlKHNrMSk7Cj4gLQo+IC0JLyogR2V0IHRo ZSBzaHV0ZG93biBjb21wbGV0ZSBub3RpZmljYXRpb24uICovCj4gKyAgICAgICAgLyogR2V0IHRo ZSBzaHV0ZG93biBjb21wbGV0ZSBub3RpZmljYXRpb24uICovCj4gICAJaW5tZXNzYWdlLm1zZ19j b250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhzazIs ICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiArICAgICAgICBlcnJvciA9IHRlc3RfcmVjdm1z ZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3Rp ZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0 cF9hc3NvY19jaGFuZ2UpLAo+ICAgCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9TSFVU RE9XTl9DT01QKTsKPiAgIAo+IC0JY2xvc2Uoc2syKTsKPiArICAgICAgICBjbG9zZShzazIpOwo+ ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kIG1zZ3MgZnJvbSBhIHNvY2tldCB3aXRoIElO QUREUl9BTlkgYmluZCBhZGRyZXNzIik7Cj4gICAKPiAtCS8qIEluZGljYXRlIHN1Y2Nlc3NmdWwg Y29tcGxldGlvbi4gICovCj4gLQl0c3RfZXhpdCgpOwo+ICsgICAgICAgIC8qIEluZGljYXRlIHN1 Y2Nlc3NmdWwgY29tcGxldGlvbi4gICovCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gICB9Cj4gZGlm ZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3BlZWxvZmYu YyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3BlZWxvZmYuYwo+IGlu ZGV4IDA4ZGIxMjUuLjhmYjdhMDAgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0 cC9mdW5jX3Rlc3RzL3Rlc3RfcGVlbG9mZi5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0 cC9mdW5jX3Rlc3RzL3Rlc3RfcGVlbG9mZi5jCj4gQEAgLTEsMTcgKzEsMTcgQEAKPiAtLyogU0NU UCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAga2VybmVsIEltcGxl bWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDAzCj4gICAg KiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgo+ICAgICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMSBJbnRl bCBDb3JwLgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIE5va2lhLCBJbmMuCj4gICAgKgo+IC0g KiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAr ICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4g ICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg eW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBT Q1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoq KioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC0zNiw4ICszNiw4IEBA Cj4gICAgKiAgICBTcmlkaGFyIFNhbXVkcmFsYSA8c3JpQHVzLmlibS5jb20+Cj4gICAgKi8KPiAg IAo+IC0vKiBUaGlzIGlzIGEgRnVuY3Rpb25hbCB0ZXN0IHRvIHZlcmlmeSB0aGUgbmV3IFNDVFAg aW50ZXJmYWNlIHNjdHBfcGVlbG9mZigpCj4gLSAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnJhbmNo IG9mZiBhbiBhc3NvY2lhdGlvbiBpbnRvIGEgc2VwYXJhdGUgc29ja2V0Lgo+ICsvKiBUaGlzIGlz IGEgRnVuY3Rpb25hbCB0ZXN0IHRvIHZlcmlmeSB0aGUgbmV3IFNDVFAgaW50ZXJmYWNlIHNjdHBf cGVlbG9mZigpCj4gKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnJhbmNoIG9mZiBhbiBhc3NvY2lh dGlvbiBpbnRvIGEgc2VwYXJhdGUgc29ja2V0Lgo+ICAgICovCj4gICAKPiAgICNpbmNsdWRlIDxz dGRpby5oPgo+IEBAIC01OCwxMCArNTgsMTEgQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gICAj ZGVmaW5lIE1BWF9DTElFTlRTIDEwCj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKPiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAgIAlp bnQgc3ZyX3NrLCBjbHRfc2tbTUFYX0NMSUVOVFNdLCBwZWVsb2ZmX3NrW01BWF9DTElFTlRTXTsK PiAtCXNjdHBfYXNzb2NfdCBzdnJfYXNzb2NpZFtNQVhfQ0xJRU5UU10sIGNsdF9hc3NvY2lkW01B WF9DTElFTlRTXTsKPiArCXNjdHBfYXNzb2NfdCBzdnJfYXNzb2NpZFtNQVhfQ0xJRU5UU107Cj4g ICAJc29ja2FkZHJfc3RvcmFnZV90IHN2cl9sb29wLCBjbHRfbG9vcFtNQVhfQ0xJRU5UU107Cj4g ICAJc3RydWN0IGlvdmVjIGlvdjsKPiAgIAlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiBAQCAt NzcsMTkgKzc4LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJc3Ry dWN0IHNjdHBfYXNzb2NfY2hhbmdlICpzYWM7Cj4gICAJY2hhciAqYmlnX2J1ZmZlcjsKPiAgIAlp bnQgaTsKPiAtCWNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAgICBj aGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4gICAJaW50IHBmX2NsYXNzOwo+ICAg Cj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rk b3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZlcmVkLgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwg TlVMTCwgX0lPTkJGLCAwKTsKPiArICAgICAgICAvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJv dWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gKwkgKiBiZSB1bmJ1ZmZlcmVkLgo+ICsJ ICovCj4gKwlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+ICAgI2lmIFRF U1RfVjYKPiAgIAlwZl9jbGFzcyA9IFBGX0lORVQ2Owo+IC0Jc3ZyX2xvb3AudjYuc2luNl9mYW1p bHkgPSBBRl9JTkVUNjsKPiAtCXN2cl9sb29wLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJh Y2s7Cj4gLQlzdnJfbG9vcC52Ni5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ ICsgICAgICAgIHN2cl9sb29wLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAgICAg c3ZyX2xvb3AudjYuc2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKPiArICAgICAgICBzdnJf bG9vcC52Ni5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+ICAgI2Vsc2UKPiAg IAlwZl9jbGFzcyA9IFBGX0lORVQ7Cj4gICAJc3ZyX2xvb3AudjQuc2luX2ZhbWlseSA9IEFGX0lO RVQ7Cj4gQEAgLTk4LDcgKzk5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAgICNlbmRpZgo+ICAgCj4gICAJLyogQ3JlYXRlIGFuZCBiaW5kIHRoZSBzZXJ2ZXIgc29ja2V0 LiAgKi8KPiAtCXN2cl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NFUVBBQ0tFVCwg SVBQUk9UT19TQ1RQKTsKPiArICAgICAgICBzdnJfc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywg U09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gICAJdGVzdF9iaW5kKHN2cl9zaywgJnN2 cl9sb29wLnNhLCBzaXplb2Yoc3ZyX2xvb3ApKTsKPiAgIAo+ICAgCS8qIEVuYWJsZSBBU1NPQ19D SEFOR0UgYW5kIFNORFJDVklORk8gbm90aWZpY2F0aW9ucy4gKi8KPiBAQCAtMTExLDkgKzExMiw5 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJZm9yIChpID0gMDsgaSA8 IE1BWF9DTElFTlRTOyBpKyspIHsKPiAgIAkJY2x0X3NrW2ldID0gdGVzdF9zb2NrZXQocGZfY2xh c3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICAgI2lmIFRFU1RfVjYKPiAtCQlj bHRfbG9vcFtpXS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+IC0JCWNsdF9sb29wW2ldLnY2 LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gLQkJY2x0X2xvb3BbaV0udjYuc2luNl9w b3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yICsgaSk7Cj4gKyAgICAgICAgCWNsdF9sb29wW2ld LnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAgICAgCWNsdF9sb29wW2ldLnY2LnNp bjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAgCWNsdF9sb29wW2ldLnY2LnNp bjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMiArIGkpOwo+ICAgI2Vsc2UKPiAgIAkJY2x0 X2xvb3BbaV0udjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAJCWNsdF9sb29wW2ldLnY0LnNp bl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gQEAgLTEyNCw4ICsxMjUsOCBAQCBp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCQl0ZXN0X2VuYWJsZV9hc3NvY19j aGFuZ2UoY2x0X3NrW2ldKTsKPiAgIAl9Cj4gICAKPiAtCS8qIFNlbmQgdGhlIGZpcnN0IG1lc3Nh Z2UgZnJvbSBhbGwgdGhlIGNsaWVudHMgdG8gdGhlIHNlcnZlci4gIFRoaXMKPiAtCSAqIHdpbGwg Y3JlYXRlIHRoZSBhc3NvY2lhdGlvbnMuCj4gKyAgICAgICAgLyogU2VuZCB0aGUgZmlyc3QgbWVz c2FnZSBmcm9tIGFsbCB0aGUgY2xpZW50cyB0byB0aGUgc2VydmVyLiAgVGhpcwo+ICsJICogd2ls bCBjcmVhdGUgdGhlIGFzc29jaWF0aW9ucy4KPiAgIAkgKi8KPiAgIAlvdXRtZXNzYWdlLm1zZ19u YW1lID0gJnN2cl9sb29wOwo+ICAgCW91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2Yoc3Zy X2xvb3ApOwo+IEBAIC0xNDEsMTggKzE0MiwxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+ICAgCW91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsK PiAgIAlzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOwo+ ICAgCW1lbXNldChzaW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsK PiAtCXBwaWQgPSByYW5kKCk7CQkvKiBDaG9vc2UgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqLwo+IC0J c3RyZWFtID0gMTsKPiArCXBwaWQgPSByYW5kKCk7IC8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFs dWUuICovCj4gKwlzdHJlYW0gPSAxOwo+ICAgCXNpbmZvLT5zaW5mb19wcGlkID0gcHBpZDsKPiAg IAlzaW5mby0+c2luZm9fc3RyZWFtID0gc3RyZWFtOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+ aW92X2Jhc2UgPSBtZXNzYWdlOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IHN0 cmxlbihtZXNzYWdlKSArIDE7Cj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKysp Cj4gLQkJdGVzdF9zZW5kbXNnKGNsdF9za1tpXSwgJm91dG1lc3NhZ2UsIDAsIHN0cmxlbihtZXNz YWdlKSArIDEpOwo+IC0KPiAtCS8qIEluaXRpYWxpemUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2 ZXMuICovCj4gKwkJdGVzdF9zZW5kbXNnKGNsdF9za1tpXSwgJm91dG1lc3NhZ2UsIDAsCj4gKwkJ CQkJICBzdHJsZW4obWVzc2FnZSkrMSk7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBpbm1lc3NhZ2Ug Zm9yIGFsbCByZWNlaXZlcy4gKi8KPiAgIAliaWdfYnVmZmVyID0gdGVzdF9tYWxsb2MoUkVBTExZ X0JJRyk7Cj4gLQltZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+ICsJ bWVtc2V0KCZpbm1lc3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsJCj4gICAJaW92Lmlvdl9i YXNlID0gYmlnX2J1ZmZlcjsKPiAgIAlpb3YuaW92X2xlbiA9IFJFQUxMWV9CSUc7Cj4gICAJaW5t ZXNzYWdlLm1zZ19pb3YgPSAmaW92Owo+IEBAIC0xNjYsMTkgKzE2OCwyMSBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCQl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24o JmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf Y2hhbmdlKSwKPiAgIAkJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ ICsjaWYgMAo+ICAgCQlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9i YXNlOwo+ICAgCQljbHRfYXNzb2NpZFtpXSA9IHNhYy0+c2FjX2Fzc29jX2lkOwo+ICsjZW5kaWYK PiAgIAl9Cj4gICAKPiAgIAkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBhbmQg dGhlIGRhdGEgbWVzc2FnZSBvbiB0aGUKPiAtCSAqIHNlcnZlciBzb2NrZXRzIGZvciBhbGwgdGhl IGNsaWVudHMuCj4gKwkgKiBzZXJ2ZXIgc29ja2V0cyBmb3IgYWxsIHRoZSBjbGllbnRzLgo+ICAg CSAqLwo+ICAgCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0xJRU5UUzsgaSsrKSB7Cj4gICAJCWlubWVz c2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICAgCQllcnJvciA9IHRlc3Rf cmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAkJdGVzdF9jaGVj a19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCQkgICAgc2l6ZW9m KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdF LCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01N X1VQKTsJCj4gICAJCXNhYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKilpb3YuaW92X2Jh c2U7Cj4gICAJCXN2cl9hc3NvY2lkW2ldID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gICAKPiBAQCAt MTkwLDkgKzE5NCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAKPiAg IAkvKiBCcmFuY2ggb2ZmIGFsbCB0aGUgYXNzb2NpYXRpb25zIG9uIHRoZSBzZXJ2ZXIgc29ja2V0 IHRvIHNlcGFyYXRlCj4gICAJICogaW5kaXZpZHVhbCBzb2NrZXRzLgo+IC0JICovCj4gKwkgKi8K PiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NMSUVOVFM7IGkrKykKPiAtCQlwZWVsb2ZmX3NrW2ld ID0gdGVzdF9zY3RwX3BlZWxvZmYoc3ZyX3NrLCBzdnJfYXNzb2NpZFtpXSk7Cj4gKwkJcGVlbG9m Zl9za1tpXSA9IHRlc3Rfc2N0cF9wZWVsb2ZmKHN2cl9zaywgc3ZyX2Fzc29jaWRbaV0pOwo+ICAg Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJzY3RwX3BlZWxvZmYiKTsKPiAgIAo+IEBAIC0yMDAsOCAr MjA0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkvKiBWZXJpZnkg dGhhdCBhIHBlZWxlZCBvZmYgc29ja2V0IGlzIG5vdCBhbGxvd2VkIHRvIGRvIGEgbGlzdGVuKCku ICAqLwo+ICAgCWVycm9yID0gbGlzdGVuKHBlZWxvZmZfc2tbMF0sIDEpOwo+ICAgCWlmIChlcnJv ciAhPSAtMSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImxpc3RlbiBvbiBhIHBlZWxlZCBv ZmYgc29ja2V0ICIKPiAtCQkJICJlcnJvcjogJWQsIGVycm5vOiAlZCIsIGVycm9yLCBlcnJubyk7 Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAibGlzdGVuIG9uIGEgcGVlbGVkIG9mZiBz b2NrZXQgIgo+ICsJCQkgImVycm9yOiAlZCwgZXJybm86ICVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAibGlzdGVuIG9uIGEgcGVlbGVkIG9mZiBzb2NrZXQiKTsK PiAgIAo+IEBAIC0yMTEsMTYgKzIxNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQo+ICAgCSAqLwo+ICAgCWlmICgoLTEgIT0gc2N0cF9wZWVsb2ZmKHBlZWxvZmZfc2tbMF0s IHN2cl9hc3NvY2lkWzBdKSkgfHwKPiAgIAkgICAgKEVJTlZBTCAhPSBlcnJubykpCj4gLQkJdHN0 X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX3BlZWxvZmYgb24gYSBwZWVsZWQgb2ZmICIKPiAtCQkJ ICJzb2NrZXQgZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzY3RwX3BlZWxvZmYgb24gYSBwZWVsZWQgb2ZmICIKPiArCQkJ ICJzb2NrZXQgZXJyb3I6JWQsIGVycm5vOiVkIiwKPiArCQkJIGVycm9yLCBlcnJubyk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfcGVlbG9mZiBvbiBhIHBlZWxlZCBvZmYgc29ja2V0 Iik7Cj4gICAKPiAgIAkvKiBTZW5kIGEgbWVzc2FnZSBmcm9tIGFsbCB0aGUgY2xpZW50IHNvY2tl dHMgdG8gdGhlIHNlcnZlciBzb2NrZXQuICovCj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElF TlRTOyBpKyspCj4gLQkJdGVzdF9zZW5kbXNnKGNsdF9za1tpXSwgJm91dG1lc3NhZ2UsIDAsIHN0 cmxlbihtZXNzYWdlKSArIDEpOwo+ICsJCXRlc3Rfc2VuZG1zZyhjbHRfc2tbaV0sICZvdXRtZXNz YWdlLCAwLCBzdHJsZW4obWVzc2FnZSkrMSk7Cj4gICAKPiAtCS8qIFJlY2VpdmUgdGhlIHNlbnQg bWVzc2FnZXMgb24gdGhlIHBlZWxlZCBvZmYgc2VydmVyIHNvY2tldHMuICAqLwo+ICsJLyogUmVj ZWl2ZSB0aGUgc2VudCBtZXNzYWdlcyBvbiB0aGUgcGVlbGVkIG9mZiBzZXJ2ZXIgc29ja2V0cy4g ICovCj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKyspIHsKPiAgIAkJaW5tZXNz YWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9y ZWN2bXNnKHBlZWxvZmZfc2tbaV0sICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiBAQCAtMjMw LDE3ICsyMzUsMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAo+ICAg CXRzdF9yZXNtKFRQQVNTLCAiUmVjZWl2ZSBtc2dzIG9uIHBlZWxlZCBvZmYgc29ja2V0cyIpOwo+ ICAgCj4gLQkvKiBTZW5kIGEgbWVzc2FnZSBmcm9tIGFsbCB0aGUgcGVlbGVkIG9mZiBzZXJ2ZXIg c29ja2V0cyB0byB0aGUgY2xpZW50Cj4gLQkgKiBzb2NrZXRzLgo+ICsJLyogU2VuZCBhIG1lc3Nh Z2UgZnJvbSBhbGwgdGhlIHBlZWxlZCBvZmYgc2VydmVyIHNvY2tldHMgdG8gdGhlIGNsaWVudAo+ ICsJICogc29ja2V0cy4KPiAgIAkgKi8KPiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NMSUVOVFM7 IGkrKykgewo+ICAgCQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmNsdF9sb29wW2ldOwo+ICAgCQlv dXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGNsdF9sb29wW2ldKTsKPiAtCQl0ZXN0X3Nl bmRtc2cocGVlbG9mZl9za1tpXSwgJm91dG1lc3NhZ2UsIDAsCj4gLQkJCSAgICAgc3RybGVuKG1l c3NhZ2UpICsgMSk7Cj4gKwkJdGVzdF9zZW5kbXNnKHBlZWxvZmZfc2tbaV0sICZvdXRtZXNzYWdl LCAwLCBzdHJsZW4obWVzc2FnZSkrMSk7Cj4gICAJfQo+ICAgCj4gLQkvKiBSZWNlaXZlIHRoZSBt ZXNzYWdlcyBzZW50IGZyb20gdGhlIHBlZWxlZCBvZiBzZXJ2ZXIgc29ja2V0cyBvbgo+ICsJLyog UmVjZWl2ZSB0aGUgbWVzc2FnZXMgc2VudCBmcm9tIHRoZSBwZWVsZWQgb2Ygc2VydmVyIHNvY2tl dHMgb24KPiAgIAkgKiB0aGUgY2xpZW50IHNvY2tldHMuCj4gICAJICovCj4gICAJZm9yIChpID0g MDsgaSA8IE1BWF9DTElFTlRTOyBpKyspIHsKPiBAQCAtMjUzLDE1ICsyNTcsMTUgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAl0c3RfcmVzbShUUEFTUywgIlNlbmQgbXNn cyBvbiBwZWVsZWQgb2ZmIHNvY2tldHMiKTsKPiAgIAo+ICAgCWVycm5vID0gMDsKPiAtCS8qIFZl cmlmeSB0aGF0IGEgcGVlbGVkLW9mZiBzb2NrZXQgY2Fubm90IGluaXRpYWxpemUgYSBuZXcKPiAr CS8qIFZlcmlmeSB0aGF0IGEgcGVlbGVkLW9mZiBzb2NrZXQgY2Fubm90IGluaXRpYWxpemUgYSBu ZXcKPiAgIAkgKiBhc3NvY2lhdGlvbiBieSB0cnlpbmcgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gYSBj bGllbnQgdGhhdCBpcyBub3QKPiAgIAkgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHBlZWxlZC1vZmYg c29ja2V0Lgo+ICAgCSAqIFRoZSBtZXNzYWdlIGlzIHNlbnQgdG8gdGhlIGNsaWVudCB0aGF0IGlz IGFzc29jaWF0ZWQgd2l0aCB0aGUKPiAgIAkgKiBzb2NrZXQuCj4gLQkgKi8KPiArCSAqLwo+ICAg CW91dG1lc3NhZ2UubXNnX25hbWUgPSAmY2x0X2xvb3BbMV07Cj4gICAJb3V0bWVzc2FnZS5tc2df bmFtZWxlbiA9IHNpemVvZihjbHRfbG9vcFsxXSk7Cj4gLQl0ZXN0X3NlbmRtc2cocGVlbG9mZl9z a1swXSwgJm91dG1lc3NhZ2UsIDAsIHN0cmxlbihtZXNzYWdlKSArIDEpOwo+ICsJdGVzdF9zZW5k bXNnKHBlZWxvZmZfc2tbMF0sICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkrMSk7Cj4g ICAKPiAgIAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAll cnJvciA9IHRlc3RfcmVjdm1zZyhjbHRfc2tbMF0sICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsK PiBAQCAtMjc2LDggKzI4MCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKyspCj4gICAJCWNsb3NlKHBlZWxvZmZf c2tbaV0pOwo+ICAgCj4gLQkvKiBHZXQgdGhlIHNodXRkb3duIGNvbXBsZXRlIG5vdGlmaWNhdGlv biBmcm9tIGFsbCB0aGUgY2xpZW50Cj4gLQkgKiBzb2NrZXRzLgo+ICsJLyogR2V0IHRoZSBzaHV0 ZG93biBjb21wbGV0ZSBub3RpZmljYXRpb24gZnJvbSBhbGwgdGhlIGNsaWVudAo+ICsJICogc29j a2V0cy4KPiAgIAkgKi8KPiAgIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NMSUVOVFM7IGkrKykgewo+ ICAgCQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiBAQCAtMjg1 LDExICsyODksMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJdGVz dF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCQkgICAg c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gICAJCQkJCSAgICBTQ1RQX0FTU09D X0NIQU5HRSwKPiAtCQkJCQkgICAgU0NUUF9TSFVURE9XTl9DT01QKTsKPiArCQkJCQkgICAgU0NU UF9TSFVURE9XTl9DT01QKTsJCj4gICAKPiAgIAkJY2xvc2UoY2x0X3NrW2ldKTsKPiAgIAl9Cj4g ICAKPiAtCS8qIEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4gICovCj4gLQl0c3RfZXhp dCgpOwo+ICsgICAgICAgIC8qIEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4gICovCj4g KyAgICAgICAJcmV0dXJuIDA7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3Jr L3NjdHAvZnVuY190ZXN0cy90ZXN0X3JlY3Ztc2cuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAv ZnVuY190ZXN0cy90ZXN0X3JlY3Ztc2cuYwo+IGluZGV4IGI2MzE0ZDguLmIxNmNjZWIgMTAwNjQ0 Cj4gLS0tIGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfcmVjdm1zZy5j Cj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfcmVjdm1zZy5j Cj4gQEAgLTEsMTYgKzEsMTYgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVu dGF0aW9uCj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJp Z2h0IElCTSBDb3JwLiAyMDAyLCAyMDAzCj4gICAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBN b3Rvcm9sYSwgSW5jLgo+ICAgICoKPiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNDVFAg a2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJl ZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBp bXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikK PiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNl IGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICog VGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioq KioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTM3LDggKzM3LDggQEAKPiAgIAo+ICAgLyog VGhpcyBpcyBhIGtlcm5lbCB0ZXN0IHRvIHZlcmlmeQo+ICAgICogMS4gTVNHX0VPUiBmbGFnIGlz IHNldCBjb3JyZWN0bHkgd2hlbiBhIHNpbmdsZSBtZXNzYWdlIGlzIHJlYWQgdXNpbmcgbXVsdGlw bGUKPiAtICogICAgcmVjdm1zZygpIGNhbGxzLgo+IC0gKiAyLiBNU0dfUEVFSyBzdXBwb3J0Lgo+ ICsgKiAgICByZWN2bXNnKCkgY2FsbHMuCj4gKyAqIDIuIE1TR19QRUVLIHN1cHBvcnQuCj4gICAg Ki8KPiAgIAo+ICAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gQEAgLTU4LDcgKzU4LDggQEAgY2hhciAq VENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDI7Cj4gICBpbnQgVFNUX0NOVCA9 IDA7Cj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAraW50Cj4gK21h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAgIAlpbnQgc3ZyX3NrLCBjbHRfc2s7 Cj4gICAJc3RydWN0IHNvY2thZGRyX2luIHN2cl9sb29wLCBjbHRfbG9vcDsKPiBAQCAtNjksMTIg KzcwLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJY2hhciAqYmln X2J1ZmZlcjsKPiAgIAl2b2lkICptc2dfYnVmOwo+ICAgCj4gLQkvKiBSYXRoZXIgdGhhbiBmZmx1 c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0IHRvCj4gLQkgKiBiZSB1bmJ1ZmZl cmVkLgo+IC0JICovCj4gLQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKPiArICAg ICAgICAvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rk b3V0IHRvCj4gKwkgKiBiZSB1bmJ1ZmZlcmVkLgo+ICsJICovCj4gKwlzZXR2YnVmKHN0ZG91dCwg TlVMTCwgX0lPTkJGLCAwKTsKPiAgIAo+IC0JLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBj bGllbnQgYWRkcmVzc2VzLiAqLwo+ICsJLyogSW5pdGlhbGl6ZSB0aGUgc2VydmVyIGFuZCBjbGll bnQgYWRkcmVzc2VzLiAqLwo+ICAgCXN2cl9sb29wLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAg CXN2cl9sb29wLnNpbl9hZGRyLnNfYWRkciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gICAJc3ZyX2xv b3Auc2luX3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEpOwo+IEBAIC04Myw3ICs4NCw3IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJY2x0X2xvb3Auc2luX3BvcnQg PSBodG9ucyhTQ1RQX1RFU1RQT1JUXzIpOwo+ICAgCj4gICAJLyogQ3JlYXRlIGFuZCBiaW5kIHRo ZSBzZXJ2ZXIgc29ja2V0LiAgKi8KPiAtCXN2cl9zayA9IHRlc3Rfc29ja2V0KEFGX0lORVQsIFNP Q0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIHN2cl9zayA9IHRlc3Rfc29j a2V0KEFGX0lORVQsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICAgCXRlc3RfYmlu ZChzdnJfc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3ZyX2xvb3AsIHNpemVvZihzdnJfbG9vcCkp Owo+ICAgCj4gICAJLyogTWFyayBzZXJ2ZXIgc29ja2V0IGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0 IG5ldyBhc3NvY2lhdGlvbnMuICAqLwo+IEBAIC05OCw3ICs5OSw3IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4gICAJdGVzdF9lbmFibGVfYXNzb2NfY2hhbmdlKGNsdF9zayk7 Cj4gICAKPiAgIAkvKiBTZW5kIGEgbWVzc2FnZS4gVGhpcyB3aWxsIGNyZWF0ZSB0aGUgYXNzb2Np YXRpb24uICAqLwo+IC0JbWVtc2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkp Owo+ICsJbWVtc2V0KCZvdXRtZXNzYWdlLCAwLCBzaXplb2Yob3V0bWVzc2FnZSkpOwkKPiAgIAlv dXRtZXNzYWdlLm1zZ19uYW1lID0gJnN2cl9sb29wOwo+ICAgCW91dG1lc3NhZ2UubXNnX25hbWVs ZW4gPSBzaXplb2Yoc3ZyX2xvb3ApOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdiA9ICZvdXRfaW92 Owo+IEBAIC0xMTAsNyArMTExLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAgIAo+ICAgCS8qIEluaXRpYWxpemUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2ZXMuICovCj4g ICAJYmlnX2J1ZmZlciA9IHRlc3RfbWFsbG9jKFJFQUxMWV9CSUcpOwo+IC0JbWVtc2V0KCZpbm1l c3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsKPiArICAgICAgICBtZW1zZXQoJmlubWVzc2Fn ZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+ICAgCWlvdi5pb3ZfYmFzZSA9IGJpZ19idWZmZXI7 Cj4gICAJaW92Lmlvdl9sZW4gPSAyMDAwOwo+ICAgCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsK PiBAQCAtMTIyLDI5ICsxMjMsMzAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyhjbHRfc2ssICZpbm1lc3NhZ2UsIDApOwo+ICAgCXRl c3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkgICAg c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NPQ19D SEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBf Q09NTV9VUCk7CQo+ICAgCj4gICAJLyogUmVjZWl2ZSBDT01NX1VQIG9uIHN2cl9zay4gKi8KPiAg IAlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAllcnJvciA9 IHRlc3RfcmVjdm1zZyhzdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0 X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNp emVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hB TkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NP TU1fVVApOwkKPiAgIAo+ICAgCS8qIFJlYWQgdGhlIDMwMDAwIGJ5dGUgbWVzc2FnZSB1c2luZyBt dWx0aXBsZSByZWN2bXNnKCkgY2FsbHMgaW4gYQo+IC0JICogbG9vcCB3aXRoIDIwMDAgYnl0ZXMg cGVyIHJlYWQuCj4gKwkgKiBsb29wIHdpdGggMjAwMCBieXRlcyBwZXIgcmVhZC4KPiAgIAkgKi8K PiAtCWZvciAoaSA9IDAsIG1zZ2xlbiA9IDMwMDAwOyBpIDwgMTU7IGkrKywgbXNnbGVuIC09IDIw MDApIHsKPiArCWZvciAoaSA9IDAsIG1zZ2xlbiA9IDMwMDAwOyBpIDwgMTU7IGkrKywgbXNnbGVu LT0yMDAwKSB7Cj4gICAJCWlvdi5pb3ZfbGVuID0gUkVBTExZX0JJRzsKPiAgIAkJaW5tZXNzYWdl Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9yZWN2 bXNnKHN2cl9zaywgJmlubWVzc2FnZSwgTVNHX1BFRUspOwo+IC0JCXRlc3RfY2hlY2tfbXNnX2Rh dGEoJmlubWVzc2FnZSwgZXJyb3IsIG1zZ2xlbiwgTVNHX0VPUiwgMCwgMCk7Cj4gKwkJdGVzdF9j aGVja19tc2dfZGF0YSgmaW5tZXNzYWdlLCBlcnJvciwgbXNnbGVuLAo+ICsJCQkJICAgIE1TR19F T1IsIDAsIDApOwo+ICAgCj4gICAJCWlvdi5pb3ZfbGVuID0gMjAwMDsKPiAgIAkJaW5tZXNzYWdl Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gICAJCWVycm9yID0gdGVzdF9yZWN2 bXNnKHN2cl9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAgCQl0ZXN0X2NoZWNrX21z Z19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCAyMDAwLAo+IC0JCQkJICAgICgoaSA9PSAxNCkgPyBN U0dfRU9SIDogMCksIDAsIDApOwo+ICsJCQkJICAgICgoaT09MTQpP01TR19FT1I6MCksIDAsIDAp Owo+ICAgCX0KPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAicmVjdm1zZyB3aXRoIE1TR19QRUVL IGZsYWciKTsKPiBAQCAtMTUzLDYgKzE1NSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCj4gICAJY2xvc2Uoc3ZyX3NrKTsKPiAgIAljbG9zZShjbHRfc2spOwo+ICAgCj4gLQkv KiBJbmRpY2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+IC0JcmV0dXJuIDA7Cj4gKyAg ICAgICAgLyogSW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiArICAgICAgICBy ZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9mdW5j X3Rlc3RzL3Rlc3Rfc2N0cF9zZW5kcmVjdm1zZy5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9m dW5jX3Rlc3RzL3Rlc3Rfc2N0cF9zZW5kcmVjdm1zZy5jCj4gaW5kZXggZWQ0MTgyOS4uNmVjMDhl ZiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF9z Y3RwX3NlbmRyZWN2bXNnLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVz dHMvdGVzdF9zY3RwX3NlbmRyZWN2bXNnLmMKPiBAQCAtMSwxNCArMSwxNCBAQAo+IC0vKiBTQ1RQ IGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVt ZW50YXRpb24KPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMKPiAgICAqIENvcHly aWdodCAoYykgMjAwMyBJbnRlbCBDb3JwLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNl IGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVu dGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICog YW55IGxhdGVyIHZlcnNpb24uCj4gICAgKgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVt ZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NU UCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAg KiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQKPiAgICAqICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioq KioKPiAgICAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAtMzksNyArMzksNyBAQAo+ICAgCj4gICAvKiBUaGlzIGlz IGEgYmFzaWMgZnVuY3Rpb25hbCB0ZXN0IGZvciB0aGUgU0NUUCBuZXcgbGlicmFyeSBBUElzCj4g ICAgKiBzY3RwX3NlbmRtc2coKSBhbmQgc2N0cF9yZWN2bXNnKCkuIHRlc3RfdGltZXRvbGl2ZS5j IGlzIHJld3JpdHRlbiB1c2luZwo+IC0gKiB0aGVzZSBuZXcgQVBJcy4KPiArICogdGhlc2UgbmV3 IEFQSXMuCj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gQEAgLTY2LDggKzY2 LDcgQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgc3RhdGljIGNoYXIgKmZpbGxtc2cgPSBOVUxMOwo+ ICAgc3RhdGljIGNoYXIgKnR0bG1zZyA9ICJUaGlzIHNob3VsZCB0aW1lIG91dCFcbiI7Cj4gICBz dGF0aWMgY2hhciAqbm90dGxtc2cgPSAiVGhpcyBzaG91bGQgTk9UIHRpbWUgb3V0IVxuIjsKPiAt c3RhdGljIGNoYXIgdHRsZnJhZ1tTTUFMTF9NQVhTRUcgKiAzXSA9IHsgMCB9Owo+IC0KPiArc3Rh dGljIGNoYXIgdHRsZnJhZ1tTTUFMTF9NQVhTRUcqM10gPSB7MH07Cj4gICBzdGF0aWMgY2hhciAq bWVzc2FnZSA9ICJIZWxsbyB3b3JsZFxuIjsKPiAgIAo+ICAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKPiBAQCAtNzcsMTkgKzc2LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJc29ja2FkZHJfc3RvcmFnZV90IGxvb3AyOwo+ICAgCXNvY2thZGRyX3N0 b3JhZ2VfdCBtc2duYW1lOwo+ICAgCWludCBlcnJvcjsKPiAtCWludCBwZl9jbGFzcywgYWZfZmFt aWx5Owo+ICsJaW50IHBmX2NsYXNzOwo+ICAgCXVpbnQzMl90IHBwaWQ7Cj4gICAJdWludDMyX3Qg c3RyZWFtOwo+ICAgCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBzdWJzY3JpYmU7Cj4gICAJ Y2hhciAqYmlnX2J1ZmZlcjsKPiAgIAlpbnQgb2Zmc2V0LCBtc2dfZmxhZ3M7Cj4gLQlzb2NrbGVu X3QgbXNnbmFtZV9sZW4sIGxlbjsKPiArCXNvY2tsZW5fdCBtc2duYW1lX2xlbjsKPiAgIAlzaXpl X3QgYnVmbGVuOwo+ICAgCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkICpzc2Y7Cj4gICAJc3RydWN0 IHNjdHBfc25kcmN2aW5mbyBzaW5mbzsKPiAgIAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNuZF9z aW5mbzsKPiAtCXNjdHBfYXNzb2NfdCBhc3NvY2lkMSwgYXNzb2NpZDI7Cj4gLQlpbnQgb2xkbGVu Owo+ICsJc2N0cF9hc3NvY190IGFzc29jaWQxOwo+ICsJc29ja2xlbl90IGxlbiwgb2xkbGVuOwo+ ICAgCXN0cnVjdCBzY3RwX3N0YXR1cyBnc3RhdHVzOwo+ICAgCj4gICAJLyogUmF0aGVyIHRoYW4g ZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+IEBAIC0xMDAsNyAr OTksNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCS8qIFNldCBzb21l IGJhc2ljIHZhbHVlcyB3aGljaCBkZXBlbmQgb24gdGhlIGFkZHJlc3MgZmFtaWx5LiAqLwo+ICAg I2lmIFRFU1RfVjYKPiAgIAlwZl9jbGFzcyA9IFBGX0lORVQ2Owo+IC0JYWZfZmFtaWx5ID0gQUZf SU5FVDY7Cj4gICAKPiAgIAlsb29wMS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICAgCWxv b3AxLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gQEAgLTExMSw3ICsxMDksNiBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCWxvb3AyLnY2LnNpbjZfcG9y dCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMik7Cj4gICAjZWxzZQo+ICAgCXBmX2NsYXNzID0gUEZf SU5FVDsKPiAtCWFmX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAKPiAgIAlsb29wMS52NC5zaW5fZmFt aWx5ID0gQUZfSU5FVDsKPiAgIAlsb29wMS52NC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xP T1BCQUNLOwo+IEBAIC0xMjQsNyArMTIxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKPiAgIAo+ICAgCS8qIENyZWF0ZSB0aGUgdHdvIGVuZHBvaW50cyB3aGljaCB3aWxsIHRh bGsgdG8gZWFjaCBvdGhlci4gICovCj4gICAJc2sxID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNP Q0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+IC0Jc2syID0gdGVzdF9zb2NrZXQocGZfY2xh c3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICsgICAgICAgIHNrMiA9IHRlc3Rf c29ja2V0KHBmX2NsYXNzLCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAg CS8qIFNldCB0aGUgTUFYU0VHIHRvIHNvbWV0aGluZyBzbWFsbGlzaC4gKi8KPiAgIAl7Cj4gQEAg LTEzOSw5ICsxMzYsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCXRl c3Rfc2V0c29ja29wdChzazEsIFNDVFBfRVZFTlRTLCAmc3Vic2NyaWJlLCBzaXplb2Yoc3Vic2Ny aWJlKSk7Cj4gICAJdGVzdF9zZXRzb2Nrb3B0KHNrMiwgU0NUUF9FVkVOVFMsICZzdWJzY3JpYmUs IHNpemVvZihzdWJzY3JpYmUpKTsKPiAgIAo+IC0JLyogQmluZCB0aGVzZSBzb2NrZXRzIHRvIHRo ZSB0ZXN0IHBvcnRzLiAgKi8KPiAtCXRlc3RfYmluZChzazEsICZsb29wMS5zYSwgc2l6ZW9mKGxv b3AxKSk7Cj4gLQl0ZXN0X2JpbmQoc2syLCAmbG9vcDIuc2EsIHNpemVvZihsb29wMikpOwo+ICsg ICAgICAgIC8qIEJpbmQgdGhlc2Ugc29ja2V0cyB0byB0aGUgdGVzdCBwb3J0cy4gICovCj4gKyAg ICAgICAgdGVzdF9iaW5kKHNrMSwgJmxvb3AxLnNhLCBzaXplb2YobG9vcDEpKTsKPiArICAgICAg ICB0ZXN0X2JpbmQoc2syLCAmbG9vcDIuc2EsIHNpemVvZihsb29wMikpOwo+ICAgCj4gICAJLyoK PiAgIAkgKiBTZXQgdGhlIFJXTkQgc21hbGwgc28gd2UgY2FuIGZpbGwgaXQgdXAgZWFzaWx5Lgo+ IEBAIC0xNDksMTkgKzE0NiwxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ ICAgCSAqLwo+ICAgCWxlbiA9IHNpemVvZihpbnQpOwo+ICAgCWVycm9yID0gZ2V0c29ja29wdChz azIsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9sZGxlbiwgJmxlbik7Cj4gLQo+ICsKPiAgIAlp ZiAoZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJjYW4ndCBnZXQgcmN2YnVmIHNp emU6ICVzIiwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJjYW4ndCBnZXQgcmN2YnVm IHNpemU6ICVzIiwKPiAgIAkJCSBzdHJlcnJvcihlcnJubykpOwo+ICAgCj4gLQlsZW4gPSBTTUFM TF9SQ1ZCVUY7CS8qIFJlYWxseSBiZWNvbWVzIDJ4bGVuIHdoZW4gc2V0LiAqLwo+ICsJbGVuID0g U01BTExfUkNWQlVGOyAvKiBSZWFsbHkgYmVjb21lcyAyeGxlbiB3aGVuIHNldC4gKi8KPiAgIAo+ ICAgCWVycm9yID0gc2V0c29ja29wdChzazIsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmxlbiwg c2l6ZW9mKGxlbikpOwo+ICAgCWlmIChlcnJvcikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg InNldHNvY2tvcHQoU09fUkNWQlVGKTogJXMiLAo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhp dCwgInNldHNvY2tvcHQoU09fUkNWQlVGKTogJXMiLAo+ICAgCQkJIHN0cmVycm9yKGVycm5vKSk7 Cj4gICAKPiAtCS8qIE1hcmsgc2syIGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0IG5ldyBhc3NvY2lh dGlvbnMuICAqLwo+ICsgICAgICAgLyogTWFyayBzazIgYXMgYmVpbmcgYWJsZSB0byBhY2NlcHQg bmV3IGFzc29jaWF0aW9ucy4gICovCj4gICAJdGVzdF9saXN0ZW4oc2syLCAxKTsKPiAgIAo+ICAg CS8qIFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBhc3NvY2lh dGlvbi4gICovCj4gQEAgLTE3NywyNyArMTc0LDMzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJYnVmbGVuID0gUkVBTExZX0JJRzsKPiAgIAliaWdfYnVmZmVyID0gdGVz dF9tYWxsb2MoYnVmbGVuKTsKPiAgIAltc2duYW1lX2xlbiA9IHNpemVvZihtc2duYW1lKTsKPiAr CW1zZ19mbGFncyA9IDA7Cj4gICAJZXJyb3IgPSB0ZXN0X3NjdHBfcmVjdm1zZyhzazIsIGJpZ19i dWZmZXIsIGJ1ZmxlbiwKPiAgIAkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXNnbmFtZSwgJm1z Z25hbWVfbGVuLAo+ICAgCQkJCSAgJnNpbmZvLCAmbXNnX2ZsYWdzKTsKPiArI2lmIDAKPiAgIAlh c3NvY2lkMiA9ICgoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopYmlnX2J1ZmZlciktPnNhY19h c3NvY19pZDsKPiArI2VuZGlmCj4gICAJdGVzdF9jaGVja19idWZfbm90aWZpY2F0aW9uKGJpZ19i dWZmZXIsIGVycm9yLCBtc2dfZmxhZ3MsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9h c3NvY19jaGFuZ2UpLAo+ICAgCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQ KTsKPiAgIAo+ICsKPiAgIAkvKiByZXN0b3JlIHRoZSByY3ZidWZmZXIgc2l6ZSBmb3IgdGhlIHJl Y2VpdmluZyBzb2NrZXQgKi8KPiAtCWVycm9yID0gc2V0c29ja29wdChzazIsIFNPTF9TT0NLRVQs IFNPX1JDVkJVRiwgJm9sZGxlbiwgc2l6ZW9mKG9sZGxlbikpOwo+ICsJZXJyb3IgPSBzZXRzb2Nr b3B0KHNrMiwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmb2xkbGVuLAo+ICsJCQkgICBzaXplb2Yo b2xkbGVuKSk7Cj4gICAKPiAgIAlpZiAoZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEws ICJzZXRzb2Nrb3B0KFNPX1JDVkJVRik6ICVzIiwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzZXRzb2Nrb3B0KFNPX1JDVkJVRik6ICVzIiwKPiAgIAkJCSBzdHJlcnJvcihlcnJubykp Owo+ICAgCj4gICAJLyogR2V0IHRoZSBjb21tdW5pY2F0aW9uIHVwIG1lc3NhZ2Ugb24gc2sxLiAg Ki8KPiAgIAlidWZsZW4gPSBSRUFMTFlfQklHOwo+ICAgCW1zZ25hbWVfbGVuID0gc2l6ZW9mKG1z Z25hbWUpOwo+ICsJbXNnX2ZsYWdzID0gMDsKPiAgIAllcnJvciA9IHRlc3Rfc2N0cF9yZWN2bXNn KHNrMSwgYmlnX2J1ZmZlciwgYnVmbGVuLAo+ICAgCQkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZt c2duYW1lLCAmbXNnbmFtZV9sZW4sCj4gLQkJCQkgICZzaW5mbywgJm1zZ19mbGFncyk7Cj4gKwkJ CQkgICZzaW5mbywgJm1zZ19mbGFncyk7Cj4gICAJYXNzb2NpZDEgPSAoKHN0cnVjdCBzY3RwX2Fz c29jX2NoYW5nZSAqKWJpZ19idWZmZXIpLT5zYWNfYXNzb2NfaWQ7Cj4gICAJdGVzdF9jaGVja19i dWZfbm90aWZpY2F0aW9uKGJpZ19idWZmZXIsIGVycm9yLCBtc2dfZmxhZ3MsCj4gICAJCQkJICAg IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IEBAIC0yMDgsMzMgKzIxMSwzNCBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCS8qIEdldCB0aGUgZmlyc3Qg bWVzc2FnZSB3aGljaCB3YXMgc2VudC4gICovCj4gICAJYnVmbGVuID0gUkVBTExZX0JJRzsKPiAg IAltc2duYW1lX2xlbiA9IHNpemVvZihtc2duYW1lKTsKPiArCW1zZ19mbGFncyA9IDA7Cj4gICAJ ZXJyb3IgPSB0ZXN0X3NjdHBfcmVjdm1zZyhzazIsIGJpZ19idWZmZXIsIGJ1ZmxlbiwKPiAgIAkJ CQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXNnbmFtZSwgJm1zZ25hbWVfbGVuLAo+IC0JCQkJICAm c2luZm8sICZtc2dfZmxhZ3MpOwo+ICsJCQkJICAmc2luZm8sICZtc2dfZmxhZ3MpOwo+ICAgCXRl c3RfY2hlY2tfYnVmX2RhdGEoYmlnX2J1ZmZlciwgZXJyb3IsIG1zZ19mbGFncywgJnNpbmZvLAo+ IC0JCQkgICAgc3RybGVuKG1lc3NhZ2UpICsgMSwgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAr CQkJICAgIHN0cmxlbihtZXNzYWdlKSArIDEsIE1TR19FT1IsIHN0cmVhbSwgcHBpZCk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfcmVjdm1zZyBkYXRhIik7Cj4gICAKPiAgIAkvKiBG aWd1cmUgb3V0IGhvdyBiaWcgdG8gbWFrZSBvdXIgZmlsbG1zZyAqLwo+ICAgCWxlbiA9IHNpemVv ZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOwo+IC0JbWVtc2V0KCZnc3RhdHVzLCAwLCBzaXplb2Yoc3Ry dWN0IHNjdHBfc3RhdHVzKSk7Cj4gKwltZW1zZXQoJmdzdGF0dXMsMCxzaXplb2Yoc3RydWN0IHNj dHBfc3RhdHVzKSk7Cj4gICAJZ3N0YXR1cy5zc3RhdF9hc3NvY19pZCA9IGFzc29jaWQxOwo+ICAg CWVycm9yID0gZ2V0c29ja29wdChzazEsIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZnc3Rh dHVzLCAmbGVuKTsKPiAgIAo+ICAgCWlmIChlcnJvcikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgImNhbid0IGdldCByd25kIHNpemU6ICVzIiwKPiAtCQkJIHN0cmVycm9yKGVycm5vKSk7Cj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiY2FuJ3QgZ2V0IHJ3bmQgc2l6ZTogJXMiLAo+ ICsJCQlzdHJlcnJvcihlcnJubykpOwo+ICAgCXRzdF9yZXNtKFRJTkZPLCAiY3JlYXRpbmcgYSBm aWxsbXNnIG9mIHNpemUgJWQiLAo+IC0JCSBnc3RhdHVzLnNzdGF0X3J3bmQgKyBSV05EX1NMT1Ap Owo+IC0JZmlsbG1zZyA9IG1hbGxvYyhnc3RhdHVzLnNzdGF0X3J3bmQgKyBSV05EX1NMT1ApOwo+ ICsJCWdzdGF0dXMuc3N0YXRfcnduZCtSV05EX1NMT1ApOwo+ICsgICAgICAgIGZpbGxtc2cgPSBt YWxsb2MoZ3N0YXR1cy5zc3RhdF9yd25kK1JXTkRfU0xPUCk7Cj4gICAKPiAgIAkvKiBTZW5kIGEg ZmlsbG1zZyAqLwo+IC0JbWVtc2V0KGZpbGxtc2csICdYJywgZ3N0YXR1cy5zc3RhdF9yd25kICsg UldORF9TTE9QKTsKPiAtCWZpbGxtc2dbZ3N0YXR1cy5zc3RhdF9yd25kICsgUldORF9TTE9QIC0g MV0gPSAnXDAnOwo+ICsJbWVtc2V0KGZpbGxtc2csICdYJywgZ3N0YXR1cy5zc3RhdF9yd25kK1JX TkRfU0xPUCk7Cj4gKwlmaWxsbXNnW2dzdGF0dXMuc3N0YXRfcnduZCtSV05EX1NMT1AtMV0gPSAn XDAnOwo+ICAgCXBwaWQrKzsKPiAgIAlzdHJlYW0rKzsKPiAtCXRlc3Rfc2N0cF9zZW5kbXNnKHNr MSwgZmlsbG1zZywgZ3N0YXR1cy5zc3RhdF9yd25kICsgUldORF9TTE9QLAo+ICsJdGVzdF9zY3Rw X3NlbmRtc2coc2sxLCBmaWxsbXNnLCBnc3RhdHVzLnNzdGF0X3J3bmQrUldORF9TTE9QLAo+ICAg CQkJICAoc3RydWN0IHNvY2thZGRyICopJmxvb3AyLCBzaXplb2YobG9vcDIpLAo+ICAgCQkJICBw cGlkLCAwLCBzdHJlYW0sIDAsIDApOwo+ICAgCj4gQEAgLTI1NCw3ICsyNTgsNyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCj4gICAJLyogQW5kIGZpbmFsbHkgYSBmcmFn bWVudGVkIG1lc3NhZ2UgdGhhdCB3aWxsIHRpbWUgb3V0LiAqLwo+ICAgCW1lbXNldCh0dGxmcmFn LCAnMCcsIHNpemVvZih0dGxmcmFnKSk7Cj4gLQl0dGxmcmFnW3NpemVvZih0dGxmcmFnKSAtIDFd ID0gJ1wwJzsKPiArCXR0bGZyYWdbc2l6ZW9mKHR0bGZyYWcpLTFdID0gJ1wwJzsKPiAgIAl0ZXN0 X3NjdHBfc2VuZG1zZyhzazEsIHR0bGZyYWcsIHNpemVvZih0dGxmcmFnKSwKPiAgIAkJCSAgKHN0 cnVjdCBzb2NrYWRkciAqKSZsb29wMiwgc2l6ZW9mKGxvb3AyKSwKPiAgIAkJCSAgcHBpZCwgMCwg c3RyZWFtLCAyMDAwLCAwKTsKPiBAQCAtMjY5LDIxICsyNzMsMjMgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAlkbyB7Cj4gICAJCWJ1ZmxlbiA9IFJFQUxMWV9CSUc7Cj4g ICAJCW1zZ25hbWVfbGVuID0gc2l6ZW9mKG1zZ25hbWUpOwo+ICsJCW1zZ19mbGFncyA9IDA7Cj4g ICAJCXRlc3Rfc2N0cF9yZWN2bXNnKHNrMiwgYmlnX2J1ZmZlciwgYnVmbGVuLAo+IC0JCQkJICAo c3RydWN0IHNvY2thZGRyICopJm1zZ25hbWUsICZtc2duYW1lX2xlbiwKPiAtCQkJCSAgJnNpbmZv LCAmbXNnX2ZsYWdzKTsKPiArCQkJICAoc3RydWN0IHNvY2thZGRyICopJm1zZ25hbWUsICZtc2du YW1lX2xlbiwKPiArCQkJICAmc2luZm8sICZtc2dfZmxhZ3MpOwo+ICAgCX0gd2hpbGUgKCEobXNn X2ZsYWdzICYgTVNHX0VPUikpOwo+ICAgCj4gICAJLyogR2V0IHRoZSBtZXNzYWdlIHRoYXQgZGlk IE5PVCB0aW1lIG91dC4gKi8KPiAgIAlidWZsZW4gPSBSRUFMTFlfQklHOwo+ICAgCW1zZ25hbWVf bGVuID0gc2l6ZW9mKG1zZ25hbWUpOwo+ICsJbXNnX2ZsYWdzID0gMDsKPiAgIAllcnJvciA9IHRl c3Rfc2N0cF9yZWN2bXNnKHNrMiwgYmlnX2J1ZmZlciwgYnVmbGVuLAo+IC0JCQkJICAoc3RydWN0 IHNvY2thZGRyICopJm1zZ25hbWUsICZtc2duYW1lX2xlbiwKPiAtCQkJCSAgJnNpbmZvLCAmbXNn X2ZsYWdzKTsKPiArCQkJICAoc3RydWN0IHNvY2thZGRyICopJm1zZ25hbWUsICZtc2duYW1lX2xl biwKPiArCQkJICAmc2luZm8sICZtc2dfZmxhZ3MpOwo+ICAgCXRlc3RfY2hlY2tfYnVmX2RhdGEo YmlnX2J1ZmZlciwgZXJyb3IsIG1zZ19mbGFncywgJnNpbmZvLAo+IC0JCQkgICAgc3RybGVuKG5v dHRsbXNnKSArIDEsIE1TR19FT1IsIHN0cmVhbSwgcHBpZCk7Cj4gKwkJCSAgICBzdHJsZW4obm90 dGxtc2cpICsgMSwgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAgIAlpZiAoMCAhPSBzdHJuY21w KGJpZ19idWZmZXIsIG5vdHRsbXNnLCBzdHJsZW4obm90dGxtc2cpKSkKPiAtCQl0c3RfYnJrbShU QlJPSywgTlVMTCwgInNjdHBfcmVjdm1zZzogV3JvbmcgTWVzc2FnZSAhISEiKTsKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX3JlY3Ztc2c6IFdyb25nIE1lc3NhZ2UgISEhIik7 Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNjdHBfcmVjdm1zZyBtc2cgd2l0aCB6ZXJvIHR0 bCIpOwo+ICAgCj4gQEAgLTI5Miw1OCArMjk4LDYzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCj4gICAJICovCj4gICAJYnVmbGVuID0gUkVBTExZX0JJRzsKPiAgIAltc2duYW1l X2xlbiA9IHNpemVvZihtc2duYW1lKTsKPiArCW1zZ19mbGFncyA9IDA7Cj4gICAJZXJyb3IgPSB0 ZXN0X3NjdHBfcmVjdm1zZyhzazEsIGJpZ19idWZmZXIsIGJ1ZmxlbiwKPiAtCQkJCSAgKHN0cnVj dCBzb2NrYWRkciAqKSZtc2duYW1lLCAmbXNnbmFtZV9sZW4sCj4gLQkJCQkgICZzaW5mbywgJm1z Z19mbGFncyk7Cj4gKwkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZtc2duYW1lLCAmbXNnbmFtZV9s ZW4sCj4gKwkJCSAgJnNpbmZvLCAmbXNnX2ZsYWdzKTsKPiAgIAl0ZXN0X2NoZWNrX2J1Zl9ub3Rp ZmljYXRpb24oYmlnX2J1ZmZlciwgZXJyb3IsIG1zZ19mbGFncywKPiAgIAkJCQkgICAgc2l6ZW9m KHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKSArCj4gLQkJCQkgICAgc3RybGVuKHR0bG1zZykgKyAx LCBTQ1RQX1NFTkRfRkFJTEVELCAwKTsKPiArCQkJCQkJCXN0cmxlbih0dGxtc2cpICsgMSwKPiAr CQkJCSAgICBTQ1RQX1NFTkRfRkFJTEVELCAwKTsKPiAgIAlzc2YgPSAoc3RydWN0IHNjdHBfc2Vu ZF9mYWlsZWQgKiliaWdfYnVmZmVyOwo+ICAgCWlmICgwICE9IHN0cm5jbXAodHRsbXNnLCAoY2hh ciAqKXNzZi0+c3NmX2RhdGEsIHN0cmxlbih0dGxtc2cpICsgMSkpCj4gLQkJdHN0X2Jya20oVEJS T0ssIE5VTEwsICJTRU5EX0ZBSUxFRCBkYXRhIG1pc21hdGNoIik7Cj4gKwkJdHN0X2Jya20oVEJS T0ssIHRzdF9leGl0LCAiU0VORF9GQUlMRUQgZGF0YSBtaXNtYXRjaCIpOwo+ICAgCj4gICAJdHN0 X3Jlc20oVFBBU1MsICJzY3RwX3JlY3Ztc2cgU0VORF9GQUlMRUQgZm9yIG1lc3NhZ2Ugd2l0aCB0 dGwiKTsKPiAgIAo+ICAgCW9mZnNldCA9IDA7Cj4gICAKPiAtCS8qIEdldCB0aGUgU0VORF9GQUlM RUQgbm90aWZpY2F0aW9ucyBmb3IgdGhlIGZyYWdtZW50ZWQgbWVzc2FnZSB0aGF0Cj4gKwkvKiBH ZXQgdGhlIFNFTkRfRkFJTEVEIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBmcmFnbWVudGVkIG1lc3Nh Z2UgdGhhdAo+ICAgCSAqIHRpbWVkIG91dC4KPiAgIAkgKi8KPiAgIAlkbyB7Cj4gICAJCWJ1Zmxl biA9IFJFQUxMWV9CSUc7Cj4gICAJCW1zZ25hbWVfbGVuID0gc2l6ZW9mKG1zZ25hbWUpOwo+ICsJ CW1zZ19mbGFncyA9IDA7Cj4gICAJCWVycm9yID0gdGVzdF9zY3RwX3JlY3Ztc2coc2sxLCBiaWdf YnVmZmVyLCBidWZsZW4sCj4gLQkJCQkJICAoc3RydWN0IHNvY2thZGRyICopJm1zZ25hbWUsCj4g LQkJCQkJICAmbXNnbmFtZV9sZW4sICZzaW5mbywgJm1zZ19mbGFncyk7Cj4gKwkJCSAgKHN0cnVj dCBzb2NrYWRkciAqKSZtc2duYW1lLCAmbXNnbmFtZV9sZW4sCj4gKwkJCSAgJnNpbmZvLCAmbXNn X2ZsYWdzKTsKPiAgIAkJdGVzdF9jaGVja19idWZfbm90aWZpY2F0aW9uKGJpZ19idWZmZXIsIGVy cm9yLCBtc2dfZmxhZ3MsCj4gICAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWls ZWQpICsKPiAtCQkJCQkgICAgU01BTExfTUFYU0VHLCBTQ1RQX1NFTkRfRkFJTEVELCAwKTsKPiAr CQkJCQkJCSAgICAgICAgICBTTUFMTF9NQVhTRUcsCj4gKwkJCQkJICAgIFNDVFBfU0VORF9GQUlM RUQsIDApOwo+ICAgCQlzc2YgPSAoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKiliaWdfYnVmZmVy Owo+ICAgCQlpZiAoMCAhPSBzdHJuY21wKCZ0dGxmcmFnW29mZnNldF0sIChjaGFyICopc3NmLT5z c2ZfZGF0YSwKPiAgIAkJCQkgU01BTExfTUFYU0VHKSkKPiAtCQkJdHN0X2Jya20oVEJST0ssIE5V TEwsICJTRU5EX0ZBSUxFRCBkYXRhIG1pc21hdGNoIik7Cj4gKwkJCXRzdF9icmttKFRCUk9LLCB0 c3RfZXhpdCwgIlNFTkRfRkFJTEVEIGRhdGEgbWlzbWF0Y2giKTsKPiAgIAkJb2Zmc2V0ICs9IFNN QUxMX01BWFNFRzsKPiAtCX0gd2hpbGUgKCEoc3NmLT5zc2ZfaW5mby5zaW5mb19mbGFncyAmIDB4 MDEpKTsJLyogTEFTVCBGUkFHICovCj4gKwl9IHdoaWxlICghKHNzZi0+c3NmX2luZm8uc2luZm9f ZmxhZ3MgJiAweDAxKSk7IC8qIExBU1QgRlJBRyAqLwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1Ms ICJzY3RwX3JlY3Ztc2cgU0VORF9GQUlMRUQgZm9yIGZyYWdtZW50ZWQgbWVzc2FnZSB3aXRoICIK PiAgIAkJICJ0dGwiKTsKPiAgIAo+ICAgCXNuZF9zaW5mby5zaW5mb19wcGlkID0gcmFuZCgpOwo+ IC0Jc25kX3NpbmZvLnNpbmZvX2ZsYWdzID0gMDsKPiAtCXNuZF9zaW5mby5zaW5mb19zdHJlYW0g PSAyOwo+IC0Jc25kX3NpbmZvLnNpbmZvX3RpbWV0b2xpdmUgPSAwOwo+IC0Jc25kX3NpbmZvLnNp bmZvX2Fzc29jX2lkID0gYXNzb2NpZDE7Cj4gKwlzbmRfc2luZm8uc2luZm9fZmxhZ3MgPSAwOwo+ ICsJc25kX3NpbmZvLnNpbmZvX3N0cmVhbSA9IDI7Cj4gKwlzbmRfc2luZm8uc2luZm9fdGltZXRv bGl2ZSA9IDA7Cj4gKwlzbmRfc2luZm8uc2luZm9fYXNzb2NfaWQgPSBhc3NvY2lkMTsKPiAgIAl0 ZXN0X3NjdHBfc2VuZChzazEsIG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSArIDEsICZzbmRfc2lu Zm8sCj4gICAJCSAgICAgICBNU0dfTk9TSUdOQUwpOwo+ICAgCj4gICAJYnVmbGVuID0gUkVBTExZ X0JJRzsKPiAgIAltc2duYW1lX2xlbiA9IHNpemVvZihtc2duYW1lKTsKPiArCW1zZ19mbGFncyA9 IDA7Cj4gICAJZXJyb3IgPSB0ZXN0X3NjdHBfcmVjdm1zZyhzazIsIGJpZ19idWZmZXIsIGJ1Zmxl biwKPiAgIAkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXNnbmFtZSwgJm1zZ25hbWVfbGVuLAo+ IC0JCQkJICAmc2luZm8sICZtc2dfZmxhZ3MpOwo+ICsJCQkJICAmc2luZm8sICZtc2dfZmxhZ3Mp Owo+ICAgCXRlc3RfY2hlY2tfYnVmX2RhdGEoYmlnX2J1ZmZlciwgZXJyb3IsIG1zZ19mbGFncywg JnNpbmZvLAo+IC0JCQkgICAgc3RybGVuKG1lc3NhZ2UpICsgMSwgTVNHX0VPUiwKPiAtCQkJICAg IHNuZF9zaW5mby5zaW5mb19zdHJlYW0sIHNuZF9zaW5mby5zaW5mb19wcGlkKTsKPiArCQkJICAg IHN0cmxlbihtZXNzYWdlKSArIDEsIE1TR19FT1IsIHNuZF9zaW5mby5zaW5mb19zdHJlYW0sCj4g KwkJCSAgICBzbmRfc2luZm8uc2luZm9fcHBpZCk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywg InNjdHBfc2VuZCIpOwo+ICAgCj4gQEAgLTM1Myw5ICszNjQsMTAgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkvKiBHZXQgdGhlIHNodXRkb3duIGNvbXBsZXRlIG5vdGlm aWNhdGlvbi4gKi8KPiAgIAlidWZsZW4gPSBSRUFMTFlfQklHOwo+ICAgCW1zZ25hbWVfbGVuID0g c2l6ZW9mKG1zZ25hbWUpOwo+ICsJbXNnX2ZsYWdzID0gMDsKPiAgIAllcnJvciA9IHRlc3Rfc2N0 cF9yZWN2bXNnKHNrMiwgYmlnX2J1ZmZlciwgYnVmbGVuLAo+IC0JCQkJICAoc3RydWN0IHNvY2th ZGRyICopJm1zZ25hbWUsICZtc2duYW1lX2xlbiwKPiAtCQkJCSAgJnNpbmZvLCAmbXNnX2ZsYWdz KTsKPiArCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXNnbmFtZSwgJm1zZ25hbWVfbGVuLAo+ICsJ CSAgJnNpbmZvLCAmbXNnX2ZsYWdzKTsKPiAgIAl0ZXN0X2NoZWNrX2J1Zl9ub3RpZmljYXRpb24o YmlnX2J1ZmZlciwgZXJyb3IsIG1zZ19mbGFncywKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBz Y3RwX2Fzc29jX2NoYW5nZSksCj4gICAJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX1NI VVRET1dOX0NPTVApOwo+IEBAIC0zNjMsNSArMzc1LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKPiAgIAljbG9zZShzazIpOwo+ICAgCj4gICAJLyogSW5kaWNhdGUgc3VjY2Vz c2Z1bCBjb21wbGV0aW9uLiAgKi8KPiAtCXRzdF9leGl0KCk7Cj4gKwlyZXR1cm4gMDsJCj4gICB9 Cj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3Nv Y2tvcHQuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3NvY2tvcHQu Ywo+IGluZGV4IDBkYzMzMjQuLjJiZDEwOTcgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNhc2VzL25ldHdv cmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3Rfc29ja29wdC5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdv cmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3Rfc29ja29wdC5jCj4gQEAgLTEsMTcgKzEsMTcgQEAKPiAt LyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFNDVFAga2VybmVs IEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA0 Cj4gICAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBDaXNjbywgSW5jLgo+ICAgICogQ29weXJp Z2h0IChjKSAxOTk5LTIwMDEgTW90b3JvbGEsIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMjAw MSBJbnRlbCBDb3JwLgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIE5va2lhLCBJbmMuCj4gICAg Kgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2Fy ZTsKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAq IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mCj4gICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Cj4gICAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBv ciAoYXQgeW91ciBvcHRpb24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAq IFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0Cj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAg ICAgICoqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC02MSwyMyAr NjEsMjQgQEAgY2hhciAqVENJRCA9IF9fRklMRV9fOwo+ICAgaW50IFRTVF9UT1RBTCA9IDI5Owo+ ICAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gLWludCBtYWluKHZvaWQpCj4gK2ludAo+ICttYWlu KHZvaWQpCj4gICB7Cj4gICAJaW50IHVkcF9zdnJfc2ssIHVkcF9jbHRfc2ssIHRjcF9zdnJfc2ss IHRjcF9jbHRfc2s7Cj4gICAJaW50IGFjY2VwdF9zaywgcGVlbG9mZl9zazsKPiAtCXNvY2thZGRy X3N0b3JhZ2VfdCB1ZHBfc3ZyX2xvb3AsIHVkcF9jbHRfbG9vcDsKPiAtCXNvY2thZGRyX3N0b3Jh Z2VfdCB0Y3Bfc3ZyX2xvb3AsIHRjcF9jbHRfbG9vcDsKPiAtCXN0cnVjdCBpb3ZlYyBpb3Y7Cj4g LQlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiArICAgICAgICBzb2NrYWRkcl9zdG9yYWdlX3Qg dWRwX3N2cl9sb29wLCB1ZHBfY2x0X2xvb3A7Cj4gKyAgICAgICAgc29ja2FkZHJfc3RvcmFnZV90 IHRjcF9zdnJfbG9vcCwgdGNwX2NsdF9sb29wOwo+ICsgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3Y7 Cj4gKyAgICAgICAgc3RydWN0IG1zZ2hkciBpbm1lc3NhZ2U7Cj4gICAJc3RydWN0IG1zZ2hkciBv dXRtZXNzYWdlOwo+ICAgCWNoYXIgaW5jbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHNjdHBfY21zZ19k YXRhX3QpKV07Cj4gICAJY2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3Rw X3NuZHJjdmluZm8pKV07Cj4gICAJc3RydWN0IGNtc2doZHIgKmNtc2c7Cj4gICAJc3RydWN0IHNj dHBfc25kcmN2aW5mbyAqc2luZm87Cj4gLQlzdHJ1Y3QgaW92ZWMgb3V0X2lvdjsKPiAtCWNoYXIg Km1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiAtCWludCBlcnJvcjsKPiAtCWludCBwZl9j bGFzcywgYWZfZmFtaWx5Owo+ICsgICAgICAgIHN0cnVjdCBpb3ZlYyBvdXRfaW92Owo+ICsgICAg ICAgIGNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAgICBpbnQgZXJy b3I7Cj4gKwlpbnQgcGZfY2xhc3M7Cj4gICAJdWludDMyX3QgcHBpZDsKPiAgIAl1aW50MzJfdCBz dHJlYW07Cj4gICAJc2N0cF9hc3NvY190IHVkcF9zdnJfYXNzb2NpZCwgdWRwX2NsdF9hc3NvY2lk Owo+IEBAIC04NSwxOSArODYsMjIgQEAgaW50IG1haW4odm9pZCkKPiAgIAljaGFyICpiaWdfYnVm ZmVyOwo+ICAgCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBzdWJzY3JpYmU7Cj4gICAJc3Ry dWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOwo+IC0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzZXRf dWRwX3NrX2RmbHRfcGFyYW0sIGdldF91ZHBfc2tfZGZsdF9wYXJhbTsKPiAtCXN0cnVjdCBzY3Rw X3NuZHJjdmluZm8gc2V0X3RjcF9za19kZmx0X3BhcmFtLCBnZXRfdGNwX3NrX2RmbHRfcGFyYW07 Cj4gKwlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYWRkcnBhcmFtczsKPiArCXN0cnVjdCBzY3Rw X3NuZHJjdmluZm8gc2V0X3VkcF9za19kZmx0X3BhcmFtLCBnZXRfdWRwX3NrX2RmbHRfcGFyYW07 Cj4gKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNldF90Y3Bfc2tfZGZsdF9wYXJhbSwgZ2V0X3Rj cF9za19kZmx0X3BhcmFtOwo+ICAgCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc2V0X3VkcF9hc3Nv Y19kZmx0X3BhcmFtOwo+IC0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBnZXRfdWRwX2Fzc29jX2Rm bHRfcGFyYW07Cj4gKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIGdldF91ZHBfYXNzb2NfZGZsdF9w YXJhbTsKPiAgIAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNldF90Y3BfYXNzb2NfZGZsdF9wYXJh bTsKPiAtCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gZ2V0X3RjcF9hc3NvY19kZmx0X3BhcmFtOwo+ IC0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBnZXRfcGVlbG9mZl9hc3NvY19kZmx0X3BhcmFtOwo+ IC0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBnZXRfYWNjZXB0X2Fzc29jX2RmbHRfcGFyYW07Cj4g KwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIGdldF90Y3BfYXNzb2NfZGZsdF9wYXJhbTsKPiArCXN0 cnVjdCBzY3RwX3NuZHJjdmluZm8gZ2V0X3BlZWxvZmZfYXNzb2NfZGZsdF9wYXJhbTsKPiArCXN0 cnVjdCBzY3RwX3NuZHJjdmluZm8gZ2V0X2FjY2VwdF9hc3NvY19kZmx0X3BhcmFtOwo+ICAgCXN0 cnVjdCBzY3RwX3BhZGRyaW5mbyBwaW5mbzsKPiArCWludCBkZmx0X3BhdGhtYXhyeHQ7Cj4gICAJ c29ja2xlbl90IG9wdGxlbiwgYWRkcmxlbjsKPiAgIAlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVz Owo+ICsJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgdmFsdWU7Cj4gICAKPiAtCS8qIFJhdGhlciB0 aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiArICAgICAg ICAvKiBSYXRoZXIgdGhhbiBmZmx1c2goKSB0aHJvdWdob3V0IHRoZSBjb2RlLCBzZXQgc3Rkb3V0 IHRvCj4gICAJICogYmUgdW5idWZmZXJlZC4KPiAgIAkgKi8KPiAgIAlzZXR2YnVmKHN0ZG91dCwg TlVMTCwgX0lPTkJGLCAwKTsKPiBAQCAtMTA1LDU3ICsxMDksNTUgQEAgaW50IG1haW4odm9pZCkK PiAgIAkvKiBTZXQgc29tZSBiYXNpYyB2YWx1ZXMgd2hpY2ggZGVwZW5kIG9uIHRoZSBhZGRyZXNz IGZhbWlseS4gKi8KPiAgICNpZiBURVNUX1Y2Cj4gICAJcGZfY2xhc3MgPSBQRl9JTkVUNjsKPiAt CWFmX2ZhbWlseSA9IEFGX0lORVQ2Owo+ICAgCj4gLQl1ZHBfc3ZyX2xvb3AudjYuc2luNl9mYW1p bHkgPSBBRl9JTkVUNjsKPiAtCXVkcF9zdnJfbG9vcC52Ni5zaW42X2FkZHIgPSBpbjZhZGRyX2xv b3BiYWNrOwo+IC0JdWRwX3N2cl9sb29wLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBP UlRfMSk7Cj4gKyAgICAgICAgdWRwX3N2cl9sb29wLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7 Cj4gKyAgICAgICAgdWRwX3N2cl9sb29wLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7 Cj4gKyAgICAgICAgdWRwX3N2cl9sb29wLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBP UlRfMSk7Cj4gICAKPiAtCXVkcF9jbHRfbG9vcC52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ IC0JdWRwX2NsdF9sb29wLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gLQl1ZHBf Y2x0X2xvb3AudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xICsgMSk7Cj4gKyAg ICAgICAgdWRwX2NsdF9sb29wLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAgICAg dWRwX2NsdF9sb29wLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAg dWRwX2NsdF9sb29wLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSsxKTsKPiAg IAo+IC0JdGNwX3N2cl9sb29wLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gLQl0Y3Bfc3Zy X2xvb3AudjYuc2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKPiAtCXRjcF9zdnJfbG9vcC52 Ni5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzEgKyAyKTsKPiArICAgICAgICB0Y3Bf c3ZyX2xvb3AudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiArICAgICAgICB0Y3Bfc3ZyX2xv b3AudjYuc2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKPiArICAgICAgICB0Y3Bfc3ZyX2xv b3AudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKzIpOwo+ICAgCj4gLQl0Y3Bf Y2x0X2xvb3AudjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiAtCXRjcF9jbHRfbG9vcC52Ni5z aW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOwo+IC0JdGNwX2NsdF9sb29wLnY2LnNpbjZfcG9y dCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSArIDMpOwo+ICsgICAgICAgIHRjcF9jbHRfbG9vcC52 Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAgICAgIHRjcF9jbHRfbG9vcC52Ni5zaW42 X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOwo+ICsgICAgICAgIHRjcF9jbHRfbG9vcC52Ni5zaW42 X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzErMyk7Cj4gICAjZWxzZQo+ICAgCXBmX2NsYXNz ID0gUEZfSU5FVDsKPiAtCWFmX2ZhbWlseSA9IEFGX0lORVQ7Cj4gICAKPiAtCXVkcF9zdnJfbG9v cC52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCXVkcF9zdnJfbG9vcC52NC5zaW5fYWRkci5z X2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+IC0JdWRwX3N2cl9sb29wLnY0LnNpbl9wb3J0ID0g aHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiArICAgICAgICB1ZHBfc3ZyX2xvb3AudjQuc2luX2Zh bWlseSA9IEFGX0lORVQ7Cj4gKyAgICAgICAgdWRwX3N2cl9sb29wLnY0LnNpbl9hZGRyLnNfYWRk ciA9IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgdWRwX3N2cl9sb29wLnY0LnNpbl9wb3J0 ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JdWRwX2NsdF9sb29wLnY0LnNpbl9m YW1pbHkgPSBBRl9JTkVUOwo+IC0JdWRwX2NsdF9sb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFND VFBfSVBfTE9PUEJBQ0s7Cj4gLQl1ZHBfY2x0X2xvb3AudjQuc2luX3BvcnQgPSBodG9ucyhTQ1RQ X1RFU1RQT1JUXzEgKyAxKTsKPiArICAgICAgICB1ZHBfY2x0X2xvb3AudjQuc2luX2ZhbWlseSA9 IEFGX0lORVQ7Cj4gKyAgICAgICAgdWRwX2NsdF9sb29wLnY0LnNpbl9hZGRyLnNfYWRkciA9IFND VFBfSVBfTE9PUEJBQ0s7Cj4gKyAgICAgICAgdWRwX2NsdF9sb29wLnY0LnNpbl9wb3J0ID0gaHRv bnMoU0NUUF9URVNUUE9SVF8xKzEpOwo+ICAgCj4gLQl0Y3Bfc3ZyX2xvb3AudjQuc2luX2ZhbWls eSA9IEFGX0lORVQ7Cj4gLQl0Y3Bfc3ZyX2xvb3AudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9J UF9MT09QQkFDSzsKPiAtCXRjcF9zdnJfbG9vcC52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVT VFBPUlRfMSArIDIpOwo+ICsgICAgICAgIHRjcF9zdnJfbG9vcC52NC5zaW5fZmFtaWx5ID0gQUZf SU5FVDsKPiArICAgICAgICB0Y3Bfc3ZyX2xvb3AudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9J UF9MT09QQkFDSzsKPiArICAgICAgICB0Y3Bfc3ZyX2xvb3AudjQuc2luX3BvcnQgPSBodG9ucyhT Q1RQX1RFU1RQT1JUXzErMik7Cj4gICAKPiAtCXRjcF9jbHRfbG9vcC52NC5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKPiAtCXRjcF9jbHRfbG9vcC52NC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xP T1BCQUNLOwo+IC0JdGNwX2NsdF9sb29wLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9S VF8yICsgMyk7Cj4gKyAgICAgICAgdGNwX2NsdF9sb29wLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVU Owo+ICsgICAgICAgIHRjcF9jbHRfbG9vcC52NC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xP T1BCQUNLOwo+ICsgICAgICAgIHRjcF9jbHRfbG9vcC52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBf VEVTVFBPUlRfMiszKTsKPiAgICNlbmRpZiAvKiBURVNUX1Y2ICovCj4gICAKPiAtCS8qIENyZWF0 ZSB0aGUgdHdvIGVuZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFjaCBvdGhlci4gICovCj4g LQl1ZHBfc3ZyX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBS T1RPX1NDVFApOwo+IC0JdWRwX2NsdF9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NF UVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsKPiArICAgICAgICAvKiBDcmVhdGUgdGhlIHR3byBlbmRw b2ludHMgd2hpY2ggd2lsbCB0YWxrIHRvIGVhY2ggb3RoZXIuICAqLwo+ICsgICAgICAgIHVkcF9z dnJfc2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NU UCk7Cj4gKyAgICAgICAgdWRwX2NsdF9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NF UVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsKPiAgIAo+ICAgCS8qIEVuYWJsZSBBU1NPQ19DSEFOR0Ug YW5kIFNORFJDVklORk8gbm90aWZpY2F0aW9ucy4gKi8KPiAgIAl0ZXN0X2VuYWJsZV9hc3NvY19j aGFuZ2UodWRwX3N2cl9zayk7Cj4gICAJdGVzdF9lbmFibGVfYXNzb2NfY2hhbmdlKHVkcF9jbHRf c2spOwo+ICAgCj4gLQkvKiBCaW5kIHRoZXNlIHNvY2tldHMgdG8gdGhlIHRlc3QgcG9ydHMuICAq Lwo+IC0JdGVzdF9iaW5kKHVkcF9zdnJfc2ssICZ1ZHBfc3ZyX2xvb3Auc2EsIHNpemVvZih1ZHBf c3ZyX2xvb3ApKTsKPiAtCXRlc3RfYmluZCh1ZHBfY2x0X3NrLCAmdWRwX2NsdF9sb29wLnNhLCBz aXplb2YodWRwX2NsdF9sb29wKSk7Cj4gKyAgICAgICAgLyogQmluZCB0aGVzZSBzb2NrZXRzIHRv IHRoZSB0ZXN0IHBvcnRzLiAgKi8KPiArICAgICAgICB0ZXN0X2JpbmQodWRwX3N2cl9zaywgJnVk cF9zdnJfbG9vcC5zYSwgc2l6ZW9mKHVkcF9zdnJfbG9vcCkpOwo+ICsgICAgICAgIHRlc3RfYmlu ZCh1ZHBfY2x0X3NrLCAmdWRwX2NsdF9sb29wLnNhLCBzaXplb2YodWRwX2NsdF9sb29wKSk7Cj4g ICAKPiAtCS8qIE1hcmsgdWRwX3N2cl9zayBhcyBiZWluZyBhYmxlIHRvIGFjY2VwdCBuZXcgYXNz b2NpYXRpb25zLiAgKi8KPiArICAgICAgIC8qIE1hcmsgdWRwX3N2cl9zayBhcyBiZWluZyBhYmxl IHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRpb25zLiAgKi8KPiAgIAl0ZXN0X2xpc3Rlbih1ZHBfc3Zy X3NrLCAxKTsKPiAgIAo+ICAgCS8qIFRFU1QgIzE6IFNDVFBfU1RBVFVTIHNvY2tldCBvcHRpb24u ICovCj4gQEAgLTE2NCwyMiArMTY2LDIzIEBAIGludCBtYWluKHZvaWQpCj4gICAJICovCj4gICAJ b3B0bGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7Cj4gICAJbWVtc2V0KCZzdGF0dXMs IDAsIG9wdGxlbik7Cj4gLQllcnJvciA9IGdldHNvY2tvcHQodWRwX3N2cl9zaywgU09MX1NDVFAs IFNDVFBfU1RBVFVTLCAmc3RhdHVzLCAmb3B0bGVuKTsKPiArCWVycm9yID0gZ2V0c29ja29wdCh1 ZHBfc3ZyX3NrLCBTT0xfU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsCj4gKwkJCSAgICZvcHRs ZW4pOwo+ICAgCWlmICgoZXJyb3IgIT0gLTEpICYmIChlcnJubyAhPSBFSU5WQUwpKQo+IC0JCXRz dF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUykgb24gYSAiCj4gKwkJ dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUykgb24gYSAi Cj4gICAJCQkgInNvY2tldCB3aXRoIG5vIGFzc29jIGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJ CSBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFND VFBfU1RBVFVTKSBvbiBhIHNvY2tldCB3aXRoIG5vIGFzc29jIik7Cj4gICAKPiAtCS8qIFNlbmQg dGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBhc3NvY2lhdGlvbi4gICov Cj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJnVkcF9zdnJfbG9vcDsKPiAtCW91dG1lc3NhZ2Uu bXNnX25hbWVsZW4gPSBzaXplb2YodWRwX3N2cl9sb29wKTsKPiAtCW91dG1lc3NhZ2UubXNnX2lv diA9ICZvdXRfaW92Owo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiAtCW91dG1lc3Nh Z2UubXNnX2NvbnRyb2wgPSBvdXRjbXNnOwo+IC0Jb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9 IHNpemVvZihvdXRjbXNnKTsKPiAtCW91dG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKPiArICAgICAg ICAvKiBTZW5kIHRoZSBmaXJzdCBtZXNzYWdlLiAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgYXNzb2Np YXRpb24uICAqLwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWUgPSAmdWRwX3N2cl9sb29w Owo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YodWRwX3N2cl9sb29w KTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiArICAgICAgICBv dXRtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRy b2wgPSBvdXRjbXNnOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXpl b2Yob3V0Y21zZyk7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICAgCWNt c2cgPSBDTVNHX0ZJUlNUSERSKCZvdXRtZXNzYWdlKTsKPiAgIAljbXNnLT5jbXNnX2xldmVsID0g SVBQUk9UT19TQ1RQOwo+ICAgCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNWOwo+IEBAIC0x ODcsNDUgKzE5MCw0NSBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCW91dG1lc3NhZ2UubXNnX2NvbnRy b2xsZW4gPSBjbXNnLT5jbXNnX2xlbjsKPiAgIAlzaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3Zp bmZvICopQ01TR19EQVRBKGNtc2cpOwo+ICAgCW1lbXNldChzaW5mbywgMHgwMCwgc2l6ZW9mKHN0 cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiAtCXBwaWQgPSByYW5kKCk7CQkvKiBDaG9vc2UgYW4g YXJiaXRyYXJ5IHZhbHVlLiAqLwo+ICsJcHBpZCA9IHJhbmQoKTsgLyogQ2hvb3NlIGFuIGFyYml0 cmFyeSB2YWx1ZS4gKi8KPiAgIAlzdHJlYW0gPSAxOwo+ICAgCXNpbmZvLT5zaW5mb19wcGlkID0g cHBpZDsKPiAgIAlzaW5mby0+c2luZm9fc3RyZWFtID0gc3RyZWFtOwo+IC0Jb3V0bWVzc2FnZS5t c2dfaW92LT5pb3ZfYmFzZSA9IG1lc3NhZ2U7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9s ZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+IC0JdGVzdF9zZW5kbXNnKHVkcF9jbHRfc2ssICZv dXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArICAgICAgICBvdXRtZXNzYWdl Lm1zZ19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19p b3YtPmlvdl9sZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+ICsgICAgICAgIHRlc3Rfc2VuZG1z Zyh1ZHBfY2x0X3NrLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICAgCj4g ICAJLyogSW5pdGlhbGl6ZSBpbm1lc3NhZ2UgZm9yIGFsbCByZWNlaXZlcy4gKi8KPiAgIAliaWdf YnVmZmVyID0gdGVzdF9tYWxsb2MoUkVBTExZX0JJRyk7Cj4gLQltZW1zZXQoJmlubWVzc2FnZSwg MCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+IC0JaW92Lmlvdl9iYXNlID0gYmlnX2J1ZmZlcjsKPiAt CWlvdi5pb3ZfbGVuID0gUkVBTExZX0JJRzsKPiAtCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsK PiAtCWlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiAtCWlubWVzc2FnZS5tc2dfY29udHJvbCA9 IGluY21zZzsKPiAtCj4gLQkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiB1 ZHBfc3ZyX3NrLiAgKi8KPiAtCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNt c2cpOwo+IC0JZXJyb3IgPSB0ZXN0X3JlY3Ztc2codWRwX3N2cl9zaywgJmlubWVzc2FnZSwgTVNH X1dBSVRBTEwpOwo+ICsgICAgICAgIG1lbXNldCgmaW5tZXNzYWdlLCAwLCBzaXplb2YoaW5tZXNz YWdlKSk7Cj4gKyAgICAgICAgaW92Lmlvdl9iYXNlID0gYmlnX2J1ZmZlcjsKPiArICAgICAgICBp b3YuaW92X2xlbiA9IFJFQUxMWV9CSUc7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19pb3YgPSAm aW92Owo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfaW92bGVuID0gMTsKPiArICAgICAgICBpbm1l c3NhZ2UubXNnX2NvbnRyb2wgPSBpbmNtc2c7Cj4gKwo+ICsgICAgICAgIC8qIEdldCB0aGUgY29t bXVuaWNhdGlvbiB1cCBtZXNzYWdlIG9uIHVkcF9zdnJfc2suICAqLwo+ICsgICAgICAgIGlubWVz c2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICsgICAgICAgIGVycm9yID0g dGVzdF9yZWN2bXNnKHVkcF9zdnJfc2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0 ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAg IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0Nf Q0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQ X0NPTU1fVVApOwkKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlv dl9iYXNlOwo+ICAgCXVkcF9zdnJfYXNzb2NpZCA9IHNhYy0+c2FjX2Fzc29jX2lkOwo+ICAgCj4g LQkvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiB1ZHBfY2x0X3NrLiAgKi8K PiAtCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+IC0JZXJyb3Ig PSB0ZXN0X3JlY3Ztc2codWRwX2NsdF9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsg ICAgICAgIC8qIEdldCB0aGUgY29tbXVuaWNhdGlvbiB1cCBtZXNzYWdlIG9uIHVkcF9jbHRfc2su ICAqLwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cp Owo+ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHVkcF9jbHRfc2ssICZpbm1lc3NhZ2Us IE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlubWVzc2Fn ZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpLAo+ IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsJCQkJICAgIFND VFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAlzYWMgPSAoc3RydWN0IHNjdHBf YXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCXVkcF9jbHRfYXNzb2NpZCA9IHNhYy0+ c2FjX2Fzc29jX2lkOwo+ICAgCj4gLQkvKiBHZXQgdGhlIGZpcnN0IG1lc3NhZ2Ugd2hpY2ggd2Fz IHNlbnQuICAqLwo+IC0JaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7 Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyh1ZHBfc3ZyX3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJ VEFMTCk7Cj4gLQl0ZXN0X2NoZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4o bWVzc2FnZSkgKyAxLAo+ICsgICAgICAgIC8qIEdldCB0aGUgZmlyc3QgbWVzc2FnZSB3aGljaCB3 YXMgc2VudC4gICovCj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9m KGluY21zZyk7Cj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Ztc2codWRwX3N2cl9zaywgJmlu bWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIHRlc3RfY2hlY2tfbXNnX2RhdGEoJmlu bWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSArIDEsCj4gICAJCQkgICAgTVNHX0VPUiwg c3RyZWFtLCBwcGlkKTsKPiAgIAo+ICAgCS8qIEdldCBTQ1RQX1NUQVRVUyBmb3IgdWRwX2NsdF9z aydzIGdpdmVuIGFzc29jaWF0aW9uLiAqLwo+IEBAIC0yNDAsOSArMjQzLDEwIEBAIGludCBtYWlu KHZvaWQpCj4gICAJb3B0bGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7Cj4gICAJbWVt c2V0KCZzdGF0dXMsIDAsIG9wdGxlbik7Cj4gICAJc3RhdHVzLnNzdGF0X2Fzc29jX2lkID0gdWRw X3N2cl9hc3NvY2lkOwo+IC0JZXJyb3IgPSBnZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQ LCBTQ1RQX1NUQVRVUywgJnN0YXR1cywgJm9wdGxlbik7Cj4gKwllcnJvciA9IGdldHNvY2tvcHQo dWRwX2NsdF9zaywgU09MX1NDVFAsIFNDVFBfU1RBVFVTLCAmc3RhdHVzLAo+ICsJCQkgICAmb3B0 bGVuKTsKPiAgIAlpZiAoKGVycm9yICE9IC0xKSAmJiAoZXJybm8gIT0gRUlOVkFMKSkKPiAtCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQoU0NUUF9TVEFUVVMpIHdpdGggIgo+ICsg ICAgICAgIAl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0KFNDVFBfU1RBVFVT KSB3aXRoICIKPiAgIAkJCSAiYXNzb2NpZCBlcnJvcjogJWQgZXJybm86JWQiLCBlcnJvciwgZXJy bm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFNDVFBfU1RBVFVTKSB3 aXRoIGludmFsaWQgYXNzb2NpZCIpOwo+IEBAIC0yNTEsMzAgKzI1NSwzMSBAQCBpbnQgbWFpbih2 b2lkKQo+ICAgCW9wdGxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOwo+ICAgCW1lbXNl dCgmc3RhdHVzLCAwLCBvcHRsZW4pOwo+ICAgCXN0YXR1cy5zc3RhdF9hc3NvY19pZCA9IDA7Cj4g LQllcnJvciA9IGdldHNvY2tvcHQodWRwX3N2cl9zaywgU09MX1NDVFAsIFNDVFBfU1RBVFVTLCAm c3RhdHVzLCAmb3B0bGVuKTsKPiArCWVycm9yID0gZ2V0c29ja29wdCh1ZHBfc3ZyX3NrLCBTT0xf U0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsCj4gKwkJCSAgICZvcHRsZW4pOwo+ICAgCWlmICgo ZXJyb3IgIT0gLTEpICYmIChlcnJubyAhPSBFSU5WQUwpKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUykgd2l0aCAiCj4gKyAgICAgICAgCXRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9TVEFUVVMpIHdpdGggIgo+ICAgCQkJ ICJOVUxMIGFzc29jaWQgZXJyb3I6ICVkIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29wdChTQ1RQX1NUQVRVUykgd2l0aCBOVUxMIGFz c29jaWQiKTsKPiAgIAo+IC0JLyogU2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiAtCWNsb3NlKHVk cF9jbHRfc2spOwo+ICsgICAgICAgIC8qIFNodXQgZG93biB0aGUgbGluay4gICovCj4gKyAgICAg ICAgY2xvc2UodWRwX2NsdF9zayk7Cj4gICAKPiAtCS8qIEdldCB0aGUgc2h1dGRvd24gY29tcGxl dGUgbm90aWZpY2F0aW9uLiAqLwo+ICsgICAgICAgIC8qIEdldCB0aGUgc2h1dGRvd24gY29tcGxl dGUgbm90aWZpY2F0aW9uLiAqLwo+ICAgCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVv ZihpbmNtc2cpOwo+IC0JZXJyb3IgPSB0ZXN0X3JlY3Ztc2codWRwX3N2cl9zaywgJmlubWVzc2Fn ZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHVkcF9zdnJf c2ssICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmlj YXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9h c3NvY19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX1NIVVRET1dO X0NPTVApOwo+IC0KPiArCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9TSFVURE9XTl9D T01QKTsJCj4gKwkJCQkKPiAgIAllcnJvciA9IDA7Cj4gLQljbG9zZSh1ZHBfc3ZyX3NrKTsKPiAr ICAgICAgICBjbG9zZSh1ZHBfc3ZyX3NrKTsKPiAgIAo+ICAgCS8qIFRFU1QgIzI6IFNDVFBfRVZF TlRTIHNvY2tldCBvcHRpb24gYW5kIFNDVFBfU0hVVERPV05fRVZFTlQKPiAgIAkgKiBub3RpZmlj YXRpb24uCj4gICAJICovCj4gLQkvKiBDcmVhdGUgdGhlIHR3byBlbmRwb2ludHMgd2hpY2ggd2ls bCB0YWxrIHRvIGVhY2ggb3RoZXIuICAqLwo+ICsgICAgICAgIC8qIENyZWF0ZSB0aGUgdHdvIGVu ZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFjaCBvdGhlci4gICovCj4gICAJdWRwX3N2cl9z ayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsK PiAgIAl1ZHBfY2x0X3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJ UFBST1RPX1NDVFApOwo+ICAgCj4gQEAgLTMwMSw4ICszMDYsMTAgQEAgaW50IG1haW4odm9pZCkK PiAgIAo+ICAgCS8qIERpc2FibGUgYWxsIHRoZSBldmVudHMgb24gdWRwX3N2cl9zayBhbmQgdWRw X2NsdF9zay4gKi8KPiAgIAltZW1zZXQoJnN1YnNjcmliZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3Rw X2V2ZW50X3N1YnNjcmliZSkpOwo+IC0JdGVzdF9zZXRzb2Nrb3B0KHVkcF9zdnJfc2ssIFNDVFBf RVZFTlRTLCAmc3Vic2NyaWJlLCBzaXplb2Yoc3Vic2NyaWJlKSk7Cj4gLQl0ZXN0X3NldHNvY2tv cHQodWRwX2NsdF9zaywgU0NUUF9FVkVOVFMsICZzdWJzY3JpYmUsIHNpemVvZihzdWJzY3JpYmUp KTsKPiArCXRlc3Rfc2V0c29ja29wdCh1ZHBfc3ZyX3NrLCBTQ1RQX0VWRU5UUywgJnN1YnNjcmli ZSwKPiArCQkJc2l6ZW9mKHN1YnNjcmliZSkpOwo+ICsJdGVzdF9zZXRzb2Nrb3B0KHVkcF9jbHRf c2ssIFNDVFBfRVZFTlRTLCAmc3Vic2NyaWJlLAo+ICsJCQlzaXplb2Yoc3Vic2NyaWJlKSk7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoU0NUUF9FVkVOVFMpIik7Cj4gICAK PiBAQCAtMzE3LDM5ICszMjQsNDEgQEAgaW50IG1haW4odm9pZCkKPiAgIAkvKiBTZW5kIGEgbWVz c2FnZS4gIFRoaXMgd2lsbCBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLiAgKi8KPiAgIAlvdXRtZXNz YWdlLm1zZ19pb3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3Yt Pmlvdl9sZW4gPSBzdHJsZW4obWVzc2FnZSkgKyAxOwo+IC0JdGVzdF9zZW5kbXNnKHVkcF9jbHRf c2ssICZvdXRtZXNzYWdlLCAwLCBzdHJsZW4obWVzc2FnZSkgKyAxKTsKPiArCXRlc3Rfc2VuZG1z Zyh1ZHBfY2x0X3NrLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICAgCj4g ICAJLyogR2V0IHRoZSBtZXNzYWdlIHdoaWNoIHdhcyBzZW50LiAgKi8KPiAgIAlpbm1lc3NhZ2Uu bXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsKPiAgIAllcnJvciA9IHRlc3RfcmVjdm1z Zyh1ZHBfc3ZyX3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gLQl0ZXN0X2NoZWNrX21z Z19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obWVzc2FnZSkgKyAxLAo+ICsgICAgICAg IHRlc3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSAr IDEsCj4gICAJCQkgICAgTVNHX0VPUiwgMCwgMCk7Cj4gICAJLyogVmVyaWZ5IHRoYXQgd2UgcmVj ZWl2ZWQgdGhlIG1zZyB3aXRob3V0IGFueSBhbmNpbGxhcnkgZGF0YS4gKi8KPiAgIAlpZiAoaW5t ZXNzYWdlLm1zZ19jb250cm9sbGVuICE9IDApCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJS ZWNlaXZlIHVuZXhwZWN0ZWQgYW5jaWxsYXJ5IiAiZGF0YSIpOwo+ICsJCXRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgIlJlY2VpdmUgdW5leHBlY3RlZCBhbmNpbGxhcnkiCj4gKwkJCSAiZGF0YSIp Owo+ICAgCj4gICAJLyogRW5hYmxlIFNDVFBfU0hVVERPV05fRVZFTlRzIG9uIHVkcF9zdnJfc2su ICovCj4gICAJbWVtc2V0KCZzdWJzY3JpYmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudF9z dWJzY3JpYmUpKTsKPiAgIAlzdWJzY3JpYmUuc2N0cF9zaHV0ZG93bl9ldmVudCA9IDE7Cj4gLQl0 ZXN0X3NldHNvY2tvcHQodWRwX3N2cl9zaywgU0NUUF9FVkVOVFMsICZzdWJzY3JpYmUsIHNpemVv ZihzdWJzY3JpYmUpKTsKPiArCXRlc3Rfc2V0c29ja29wdCh1ZHBfc3ZyX3NrLCBTQ1RQX0VWRU5U UywgJnN1YnNjcmliZSwKPiArCQkJc2l6ZW9mKHN1YnNjcmliZSkpOwo+ICAgCj4gICAJZXJyb3Ig PSAwOwo+IC0JLyogU2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiAtCWNsb3NlKHVkcF9jbHRfc2sp Owo+ICsgICAgICAgIC8qIFNodXQgZG93biB0aGUgbGluay4gICovCj4gKyAgICAgICAgY2xvc2Uo dWRwX2NsdF9zayk7Cj4gICAKPiAgIAkvKiBHZXQgdGhlIFNIVVRET1dOX0VWRU5UIG5vdGlmaWNh dGlvbiBvbiB1ZHBfc3ZyX3NrLiAqLwo+ICAgCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNp emVvZihpbmNtc2cpOwo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHVkcF9zdnJfc2ssICZpbm1l c3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oJmlu bWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9l dmVudCksCj4gLQkJCQkgICAgU0NUUF9TSFVURE9XTl9FVkVOVCwgMCk7Cj4gKwkJCQkgICAgU0NU UF9TSFVURE9XTl9FVkVOVCwgMCk7CQo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nr b3B0KFNDVFBfRVZFTlRTKSAtIFNDVFBfU0hVVERPV05fRVZFTlQiKTsKPiAtCj4gLQljbG9zZSh1 ZHBfc3ZyX3NrKTsKPiArCj4gKyAgICAgICAgY2xvc2UodWRwX3N2cl9zayk7Cj4gICAKPiAgIAkv KiBURVNUICMzOiB3aGV0aGVyIHNjdHBfb3B0X2luZm8gZXF1YWxzICovCj4gLQkvKiBDcmVhdGUg dGhlIHR3byBlbmRwb2ludHMgd2hpY2ggd2lsbCB0YWxrIHRvIGVhY2ggb3RoZXIuICAqLwo+ICsg ICAgICAgIC8qIENyZWF0ZSB0aGUgdHdvIGVuZHBvaW50cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFj aCBvdGhlci4gICovCj4gICAJdWRwX3N2cl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NL X1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQKTsKPiAgIAl1ZHBfY2x0X3NrID0gdGVzdF9zb2NrZXQo cGZfY2xhc3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICAgCj4gQEAgLTM2NCwx NCArMzczLDE0IEBAIGludCBtYWluKHZvaWQpCj4gICAJLyogTWFyayB1ZHBfc3ZyX3NrIGFzIGJl aW5nIGFibGUgdG8gYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuICAqLwo+ICAgCXRlc3RfbGlzdGVu KHVkcF9zdnJfc2ssIDEpOwo+ICAgCj4gLQkvKiBTZW5kIHRoZSBmaXJzdCBtZXNzYWdlLiAgVGhp cyB3aWxsIGNyZWF0ZSB0aGUgYXNzb2NpYXRpb24uICAqLwo+IC0Jb3V0bWVzc2FnZS5tc2dfbmFt ZSA9ICZ1ZHBfc3ZyX2xvb3A7Cj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHVk cF9zdnJfbG9vcCk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0X2lvdjsKPiAtCW91dG1l c3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0Y21z ZzsKPiAtCW91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gLQlv dXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gKyAgICAgICAgLyogU2VuZCB0aGUgZmlyc3QgbWVz c2FnZS4gIFRoaXMgd2lsbCBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLiAgKi8KPiArICAgICAgICBv dXRtZXNzYWdlLm1zZ19uYW1lID0gJnVkcF9zdnJfbG9vcDsKPiArICAgICAgICBvdXRtZXNzYWdl Lm1zZ19uYW1lbGVuID0gc2l6ZW9mKHVkcF9zdnJfbG9vcCk7Cj4gKyAgICAgICAgb3V0bWVzc2Fn ZS5tc2dfaW92ID0gJm91dF9pb3Y7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92bGVuID0g MTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19jb250cm9sID0gb3V0Y21zZzsKPiArICAgICAg ICBvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKG91dGNtc2cpOwo+ICsgICAgICAg IG91dG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKPiAgIAljbXNnID0gQ01TR19GSVJTVEhEUigmb3V0 bWVzc2FnZSk7Cj4gICAJY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fU0NUUDsKPiAgIAljbXNn LT5jbXNnX3R5cGUgPSBTQ1RQX1NORFJDVjsKPiBAQCAtMzc5LDI0ICszODgsMjQgQEAgaW50IG1h aW4odm9pZCkKPiAgIAlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+Y21zZ19sZW47 Cj4gICAJc2luZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKUNNU0dfREFUQShjbXNnKTsK PiAgIAltZW1zZXQoc2luZm8sIDB4MDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7 Cj4gLQlwcGlkID0gcmFuZCgpOwkJLyogQ2hvb3NlIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8KPiAr CXBwaWQgPSByYW5kKCk7IC8qIENob29zZSBhbiBhcmJpdHJhcnkgdmFsdWUuICovCj4gICAJc3Ry ZWFtID0gMTsKPiAgIAlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7Cj4gICAJc2luZm8tPnNpbmZv X3N0cmVhbSA9IHN0cmVhbTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2Jhc2UgPSBtZXNz YWdlOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gc3RybGVuKG1lc3NhZ2UpICsg MTsKPiAtCXRlc3Rfc2VuZG1zZyh1ZHBfY2x0X3NrLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1l c3NhZ2UpICsgMSk7Cj4gLQo+IC0JLyogR2V0IHRoZSBjb21tdW5pY2F0aW9uIHVwIG1lc3NhZ2Ug b24gdWRwX2NsdF9zay4gICovCj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yo aW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHVkcF9jbHRfc2ssICZpbm1lc3NhZ2Us IE1TR19XQUlUQUxMKTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNlID0g bWVzc2FnZTsKPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzdHJsZW4o bWVzc2FnZSkgKyAxOwo+ICsgICAgICAgIHRlc3Rfc2VuZG1zZyh1ZHBfY2x0X3NrLCAmb3V0bWVz c2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICsJCj4gKyAgICAgICAgLyogR2V0IHRoZSBj b21tdW5pY2F0aW9uIHVwIG1lc3NhZ2Ugb24gdWRwX2NsdF9zay4gICovCj4gKyAgICAgICAgaW5t ZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgZXJyb3Ig PSB0ZXN0X3JlY3Ztc2codWRwX2NsdF9zaywgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICAg CXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkg ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gLQkJCQkgICAgU0NUUF9BU1NP Q19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFND VFBfQ09NTV9VUCk7CQo+ICAgCXNhYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKilpb3Yu aW92X2Jhc2U7Cj4gICAJdWRwX2NsdF9hc3NvY2lkID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gICAK PiAtCS8qIENvbXBhcmUgdGhlIFNDVFBfU1RBVFVTIHJlc3VsdCBiZXR3ZWVuIHNjdHBfb3B0X2lu Zm8gYW5kCj4gKwkvKiBDb21wYXJlIHRoZSBTQ1RQX1NUQVRVUyByZXN1bHQgYmV0d2VlbiBzY3Rw X29wdF9pbmZvIGFuZAo+ICAgCSAqIGdldHNvY2tvcHQKPiAgIAkgKi8KPiAgIAl7Cj4gQEAgLTQw NiwzNCArNDE1LDM0IEBAIGludCBtYWluKHZvaWQpCj4gICAJCW1lbXNldCgmc3RhdHVzMiwgMCwg c2l6ZW9mKHN0YXR1czIpKTsKPiAgIAkJb3B0bGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1 cyk7Cj4gICAKPiAtCQkvKiBUZXN0IFNDVFBfU1RBVFVTIGZvciB1ZHBfY2x0X3NrJ3MgZ2l2ZW4g YXNzb2NpYXRpb24uICovCj4gLQkJZXJyb3IgPSBzY3RwX29wdF9pbmZvKHVkcF9jbHRfc2ssIHVk cF9jbHRfYXNzb2NpZCwgU0NUUF9TVEFUVVMsCj4gLQkJCQkgICAgICAoY2hhciAqKSZzdGF0dXMx LCAmb3B0bGVuKTsKPiArCQkvKiBUZXN0IFNDVFBfU1RBVFVTIGZvciB1ZHBfY2x0X3NrJ3MgZ2l2 ZW4gYXNzb2NpYXRpb24uICovCQo+ICsJCWVycm9yID0gc2N0cF9vcHRfaW5mbyh1ZHBfY2x0X3Nr LHVkcF9jbHRfYXNzb2NpZCxTQ1RQX1NUQVRVUywKPiArCQkJCShjaGFyICopJnN0YXR1czEsICZv cHRsZW4pOwo+ICAgCQlpZiAoZXJyb3IgIT0gMCkKPiAtCQkJdHN0X2Jya20oVEJST0ssIE5VTEws Cj4gLQkJCQkgInNjdHBfb3B0X2luZm8oU0NUUF9TVEFUVVMpOiAlcyIsCj4gKwkgICAgICAgICAg ICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LAo+ICsJCQkJICJzY3RwX29wdF9pbmZvKFND VFBfU1RBVFVTKTogJXMiLAo+ICAgCQkJCSBzdHJlcnJvcihlcnJubykpOwo+ICAgCj4gICAJCXN0 YXR1czIuc3N0YXRfYXNzb2NfaWQgPSB1ZHBfY2x0X2Fzc29jaWQ7Cj4gICAJCWVycm9yID0gZ2V0 c29ja29wdCh1ZHBfY2x0X3NrLCBJUFBST1RPX1NDVFAsIFNDVFBfU1RBVFVTLAo+IC0JCQkJICAg KGNoYXIgKikmc3RhdHVzMiwgJm9wdGxlbik7Cj4gKyAgICAgICAgICAgICAgICAJCShjaGFyICop JnN0YXR1czIsICZvcHRsZW4pOwo+ICAgCQlpZiAoZXJyb3IgIT0gMCkKPiAtCQkJdHN0X2Jya20o VEJST0ssIE5VTEwsCj4gLQkJCQkgImdldHNvY2tvcHQoU0NUUF9TVEFUVVMpOiAlcyIsCj4gKwkg ICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LAo+ICsJCQkJICJnZXRzb2Nr b3B0KFNDVFBfU1RBVFVTKTogJXMiLAo+ICAgCQkJCSBzdHJlcnJvcihlcnJubykpOwo+ICAgCQlp ZiAoc3RybmNtcCgoY2hhciAqKSZzdGF0dXMxLCAoY2hhciAqKSZzdGF0dXMyLCBvcHRsZW4pKQo+ IC0JCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfb3B0X2luZm8oU0NUUF9TVEFVUykiCj4g LQkJCQkgImRvZXNuJ3QgbWF0Y2ggZ2V0c29ja29wdChTQ1RQX1NUQVRVUykiKTsKPiArCSAgICAg ICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3RwX29wdF9pbmZvKFNDVFBf U1RBVVMpIgo+ICsJCQkgICAgICAgImRvZXNuJ3QgbWF0Y2ggZ2V0c29ja29wdChTQ1RQX1NUQVRV UykiKTsKPiAgIAo+IC0JCXRzdF9yZXNtKFRQQVNTLCAic2N0cF9vcHRfaW5mbyhTQ1RQX1NUQVRV UykiKTsKPiArICAgICAgICAgICAgICAgIHRzdF9yZXNtKFRQQVNTLCAic2N0cF9vcHRfaW5mbyhT Q1RQX1NUQVRVUykiKTsKPiAgIAl9Cj4gICAJZXJyb3IgPSAwOwo+IC0JLyogU2h1dCBkb3duIHRo ZSBsaW5rLiAgKi8KPiAtCWNsb3NlKHVkcF9zdnJfc2spOwo+IC0JY2xvc2UodWRwX2NsdF9zayk7 Cj4gKyAgICAgICAgLyogU2h1dCBkb3duIHRoZSBsaW5rLiAgKi8KPiArICAgICAgICBjbG9zZSh1 ZHBfc3ZyX3NrKTsKPiArICAgICAgICBjbG9zZSh1ZHBfY2x0X3NrKTsKPiAgIAo+ICAgCS8qIFRF U1QgIzQ6IFNDVFBfSU5JVE1TRyBzb2NrZXQgb3B0aW9uLiAqLwo+IC0JLyogQ3JlYXRlIGEgc29j a2V0LiAgKi8KPiArICAgICAgICAvKiBDcmVhdGUgYSBzb2NrZXQuICAqLwo+ICAgCXVkcF9zdnJf c2sgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7 Cj4gICAKPiAgIAkvKiBCaW5kIHRoaXMgc29ja2V0IHRvIHRoZSB0ZXN0IHBvcnQuICAqLwo+IEBA IC00NjAsMTAgKzQ2OSwyNzMgQEAgaW50IG1haW4odm9pZCkKPiAgIAkvKiBHZXQgdGhlIHVwZGF0 ZWQgcGFyYW1ldGVycyBmb3IgYXNzb2NpYXRpb24gaW5pdGlhbGl6YXRpb24uICovCj4gICAJb3B0 bGVuID0gc2l6ZW9mKGluaXRtc2cpOwo+ICAgCXRlc3RfZ2V0c29ja29wdCh1ZHBfc3ZyX3NrLCBT Q1RQX0lOSVRNU0csICZpbml0bXNnLCAmb3B0bGVuKTsKPiArCQo+ICsJY2xvc2UodWRwX3N2cl9z ayk7Cj4gKwo+ICsJLyogVEVTVCAjNTogU0NUUF9QRUVSX0FERFJfUEFSQU1TIHNvY2tldCBvcHRp b24uICovCj4gKyAgICAgICAgLyogQ3JlYXRlIGEgc29ja2V0LiAgKi8KPiArCXVkcF9zdnJfc2sg PSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4g Kwo+ICsJLyogR2V0IHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoaXMgZW5kcG9pbnQgKi8K PiArCW9wdGxlbiA9IHNpemVvZihwYWRkcnBhcmFtcyk7Cj4gKwltZW1zZXQoJnBhZGRycGFyYW1z LCAwLCBzaXplb2YocGFkZHJwYXJhbXMpKTsKPiArCXBhZGRycGFyYW1zLnNwcF9hZGRyZXNzLnNz X2ZhbWlseSA9IEFGX0lORVQ7Cj4gKwl0ZXN0X2dldHNvY2tvcHQodWRwX3N2cl9zaywgU0NUUF9Q RUVSX0FERFJfUEFSQU1TLCAmcGFkZHJwYXJhbXMsCj4gKwkJCQkJCQkJJm9wdGxlbik7Cj4gKwo+ ICsJZGZsdF9wYXRobWF4cnh0ID0gcGFkZHJwYXJhbXMuc3BwX3BhdGhtYXhyeHQ7Cj4gKwl0c3Rf cmVzbShUUEFTUywgImdldHNvY2tvcHQoU0NUUF9QRUVSX0FERFJfUEFSQU1TKSIpOwo+ICsKPiAr CS8qIENoYW5nZSB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0aGlzIGVuZHBvaW50IChzb2Nr ZXQpICovCj4gKwlwYWRkcnBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IDEwMDA7Cj4gKwlwYWRkcnBh cmFtcy5zcHBfcGF0aG1heHJ4dCA9IGRmbHRfcGF0aG1heHJ4dCsxOwo+ICsJcGFkZHJwYXJhbXMu c3BwX3NhY2tkZWxheSA9IDEwMDsKPiArCXRlc3Rfc2V0c29ja29wdCh1ZHBfc3ZyX3NrLCBTQ1RQ X1BFRVJfQUREUl9QQVJBTVMsICZwYWRkcnBhcmFtcywKPiArCQkJCQkJCXNpemVvZihwYWRkcnBh cmFtcykpOwo+ICsKPiArCXBhZGRycGFyYW1zLnNwcF9wYXRobWF4cnh0ID0gMDsKPiArCj4gKwkv KiBHZXQgdGhlIHVwZGF0ZWQgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0aGlzIGVuZHBvaW50LiAq Lwo+ICsJb3B0bGVuID0gc2l6ZW9mKHBhZGRycGFyYW1zKTsKPiArCXRlc3RfZ2V0c29ja29wdCh1 ZHBfc3ZyX3NrLCBTQ1RQX1BFRVJfQUREUl9QQVJBTVMsICZwYWRkcnBhcmFtcywKPiArCQkJCQkJ CQkmb3B0bGVuKTsKPiArCWlmIChwYWRkcnBhcmFtcy5zcHBfcGF0aG1heHJ4dCAhPSBkZmx0X3Bh dGhtYXhyeHQrMSkKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFND VFBfUEVFUl9BRERSX1BBUkFNUykgIgo+ICsJCQkgIm1pc21hdGNoIik7Cj4gKwo+ICsJdmFsdWUu YXNzb2NfaWQgPSAwOwo+ICsJb3B0bGVuID0gc2l6ZW9mKHZhbHVlKTsKPiArCXRlc3RfZ2V0c29j a29wdCh1ZHBfc3ZyX3NrLCBTQ1RQX0RFTEFZRURfQUNLX1RJTUUsICZ2YWx1ZSwKPiArCQkJCQkJ CQkmb3B0bGVuKTsKPiArCWlmICh2YWx1ZS5hc3NvY192YWx1ZSAhPSAxMDApCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0RFTEFZRURfQUNLX1RJTUUpICIK PiArCQkJICJtaXNtYXRjaCIpOwo+ICsKPiArCXZhbHVlLmFzc29jX2lkICAgID0gMDsKPiArCXZh bHVlLmFzc29jX3ZhbHVlID0gMjUwOwo+ICsJdGVzdF9zZXRzb2Nrb3B0KHVkcF9zdnJfc2ssIFND VFBfREVMQVlFRF9BQ0tfVElNRSwgJnZhbHVlLAo+ICsJCQkJCQkJc2l6ZW9mKHZhbHVlKSk7Cj4g KwlvcHRsZW4gPSBzaXplb2YocGFkZHJwYXJhbXMpOwo+ICsJdGVzdF9nZXRzb2Nrb3B0KHVkcF9z dnJfc2ssIFNDVFBfUEVFUl9BRERSX1BBUkFNUywgJnBhZGRycGFyYW1zLAo+ICsJCQkJCQkJCSZv cHRsZW4pOwo+ICsJaWYgKHBhZGRycGFyYW1zLnNwcF9zYWNrZGVsYXkgIT0gMjUwKQo+ICsJCXRz dF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNldHNvY2tvcHQoU0NUUF9ERUxBWUVEX0FDS19USU1F KSAiCj4gKwkJCSAibWlzbWF0Y2giKTsKPiArCj4gKwl0c3RfcmVzbShUUEFTUywgInNldHNvY2tv cHQoU0NUUF9ERUxBWUVEX0FDS19USU1FKSIpOwo+ICsKPiArCj4gKwkvKiBFbnN1cmUgdGhhdCBw cmlvciBkZWZhdWx0cyBhcmUgcHJlc2VydmVkIGZvciBhIG5ldyBlbmRwb2ludCAqLwo+ICsJdWRw X2NsdF9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19T Q1RQKTsKPiArCW9wdGxlbiA9IHNpemVvZihwYWRkcnBhcmFtcyk7Cj4gKwltZW1zZXQoJnBhZGRy cGFyYW1zLCAwLCBzaXplb2YocGFkZHJwYXJhbXMpKTsKPiArCXBhZGRycGFyYW1zLnNwcF9hZGRy ZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ7Cj4gKwl0ZXN0X2dldHNvY2tvcHQodWRwX2NsdF9zaywg U0NUUF9QRUVSX0FERFJfUEFSQU1TLCAmcGFkZHJwYXJhbXMsCj4gKwkJCQkJCQkJJm9wdGxlbik7 Cj4gKwlpZiAocGFkZHJwYXJhbXMuc3BwX3BhdGhtYXhyeHQgIT0gZGZsdF9wYXRobWF4cnh0KQo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9QRUVSX0FERFJf UEFSQU1TKSAiCj4gKwkJCSAibWlzbWF0Y2giKTsKPiArCj4gKwkKPiArCXRzdF9yZXNtKFRQQVNT LCAic2V0c29ja29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpIik7Cj4gKwo+ICsgICAgICAgCS8q IEludmFsaWQgYXNzb2MgaWQgKi8KPiArCXBhZGRycGFyYW1zLnNwcF9hc3NvY19pZCA9IDEyMzQ7 Cj4gKyAgICAgICAgZXJyb3IgPSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQ X1BFRVJfQUREUl9QQVJBTVMsCj4gKwkJCSAgICZwYWRkcnBhcmFtcywKPiArCQkJICAgc2l6ZW9m KHBhZGRycGFyYW1zKSk7Cj4gKwlpZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5v KSkKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNDVFBfUEVFUl9B RERSX1BBUkFNUykgIgo+ICsJCQkgImludmFsaWQgYXNzb2NpZCBlcnJvcjolZCwgZXJybm86JWRc biIsCj4gKwkJCSBlcnJvciwgZXJybm8pOwo+ICsKPiArCXRzdF9yZXNtKFRQQVNTLCAic2V0c29j a29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpICIKPiArCQkgIi0gb25lLXRvLW1hbnkgc3R5bGUg aW52YWxpZCBhc3NvY2lkIik7Cj4gKwo+ICsJdGVzdF9iaW5kKHVkcF9zdnJfc2ssICZ1ZHBfc3Zy X2xvb3Auc2EsIHNpemVvZih1ZHBfc3ZyX2xvb3ApKTsKPiArCXRlc3RfYmluZCh1ZHBfY2x0X3Nr LCAmdWRwX2NsdF9sb29wLnNhLCBzaXplb2YodWRwX2NsdF9sb29wKSk7Cj4gKwo+ICsJdGVzdF9s aXN0ZW4odWRwX3N2cl9zaywgNSk7Cj4gKwo+ICsJdGVzdF9lbmFibGVfYXNzb2NfY2hhbmdlKHVk cF9zdnJfc2spOwo+ICsJdGVzdF9lbmFibGVfYXNzb2NfY2hhbmdlKHVkcF9jbHRfc2spOwo+ICsK PiArCS8qIERvIGEgY29ubmVjdCBvbiBhIFVEUC1zdHlsZSBzb2NrZXQgYW5kIGVzdGFibGlzaCBh biBhc3NvY2lhdGlvbi4gKi8KPiArCXRlc3RfY29ubmVjdCh1ZHBfY2x0X3NrLCAmdWRwX3N2cl9s b29wLnNhLCBzaXplb2YodWRwX3N2cl9sb29wKSk7Cj4gKwo+ICsJLyogUmVjZWl2ZSB0aGUgQ09N TV9VUCBub3RpZmljYXRpb25zIGFuZCBnZXQgdGhlIGFzc29jaWQncyAqLwo+ICsJaW5tZXNzYWdl Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gKwllcnJvciA9IHRlc3RfcmVjdm1z Zyh1ZHBfc3ZyX3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gKwl0ZXN0X2NoZWNrX21z Z19ub3RpZmljYXRpb24oJmlubWVzc2FnZSwgZXJyb3IsCj4gKwkJCQkgICAgc2l6ZW9mKHN0cnVj dCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gKwkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBf Q09NTV9VUCk7CQo+ICsJc2FjID0gKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqKWlvdi5pb3Zf YmFzZTsKPiArCj4gKwlwYWRkcnBhcmFtcy5zcHBfYXNzb2NfaWQgPSBzYWMtPnNhY19hc3NvY19p ZDsKPiArCW1lbWNweSgmcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3MsICZ1ZHBfY2x0X2xvb3AsIHNp emVvZih1ZHBfY2x0X2xvb3ApKTsKPiArCXBhZGRycGFyYW1zLnNwcF9oYmludGVydmFsID0gMTAw MDsKPiArCXBhZGRycGFyYW1zLnNwcF9wYXRobWF4cnh0ID0gZGZsdF9wYXRobWF4cnh0KzE7Cj4g Kwl0ZXN0X3NldHNvY2tvcHQodWRwX3N2cl9zaywgU0NUUF9QRUVSX0FERFJfUEFSQU1TLCAmcGFk ZHJwYXJhbXMsCj4gKwkJCQkJCQlzaXplb2YocGFkZHJwYXJhbXMpKTsKPiArCXRzdF9yZXNtKFRQ QVNTLCAic2V0c29ja29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpIC0gIgo+ICsJCSAib25lLXRv LW1hbnkgc3R5bGUgdmFsaWQgYXNzb2NpZCB2YWxpZCBhZGRyZXNzIik7Cj4gKwo+ICsJcGFkZHJw YXJhbXMuc3BwX2Fzc29jX2lkID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gKwltZW1jcHkoJnBhZGRy cGFyYW1zLnNwcF9hZGRyZXNzLCAmdWRwX3N2cl9sb29wLCBzaXplb2YodWRwX3N2cl9sb29wKSk7 Cj4gKwlwYWRkcnBhcmFtcy5zcHBfaGJpbnRlcnZhbCA9IDEwMDA7Cj4gKwlwYWRkcnBhcmFtcy5z cHBfcGF0aG1heHJ4dCA9IGRmbHRfcGF0aG1heHJ4dCsxOwo+ICsJCj4gKyAgICAgICAgZXJyb3Ig PSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQX1BFRVJfQUREUl9QQVJBTVMs Cj4gKwkJCSAgICZwYWRkcnBhcmFtcywKPiArCQkJICAgc2l6ZW9mKHBhZGRycGFyYW1zKSk7Cj4g KwlpZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5vKSkKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNDVFBfUEVFUl9BRERSX1BBUkFNUykgIgo+ICsJ CQkgImludmFsaWQgdHJhbnNwb3J0IGVycm9yOiVkLCBlcnJubzolZFxuIiwKPiArCQkJIGVycm9y LCBlcnJubyk7Cj4gKwo+ICsJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nrb3B0KFNDVFBfUEVFUl9B RERSX1BBUkFNUykgIgo+ICsJCSAiLSBvbmUtdG8tbWFueSBzdHlsZSBpbnZhbGlkIHRyYW5zcG9y dCIpOwo+ICsKPiArCXBhZGRycGFyYW1zLnNwcF9hc3NvY19pZCA9IHNhYy0+c2FjX2Fzc29jX2lk Owo+ICsJbWVtY3B5KCZwYWRkcnBhcmFtcy5zcHBfYWRkcmVzcywgJnVkcF9jbHRfbG9vcCwgc2l6 ZW9mKHVkcF9jbHRfbG9vcCkpOwo+ICsJcGFkZHJwYXJhbXMuc3BwX2hiaW50ZXJ2YWwgPSAxMDAw Owo+ICsJcGFkZHJwYXJhbXMuc3BwX3BhdGhtYXhyeHQgPSBkZmx0X3BhdGhtYXhyeHQrMTsKPiAr Cj4gKyAgICAgICAgZXJyb3IgPSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQ X1BFRVJfQUREUl9QQVJBTVMsCj4gKwkJCSAgICZwYWRkcnBhcmFtcywKPiArCQkJICAgc2l6ZW9m KHBhZGRycGFyYW1zKSAtIDEpOwo+ICsJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAhPSBl cnJubykpCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2V0c29ja29wdChTQ1RQX1BF RVJfQUREUl9QQVJBTVMpICIKPiArCQkJICJpbnZhbGlkIHBhcmFtZXRlciBsZW5ndGggZXJyb3I6 JWQsIGVycm5vOiVkXG4iLAo+ICsJCQkgZXJyb3IsIGVycm5vKTsKPiArCj4gKwl0c3RfcmVzbShU UEFTUywgInNldHNvY2tvcHQoU0NUUF9QRUVSX0FERFJfUEFSQU1TKSAiCj4gKwkJICItIG9uZS10 by1tYW55IHN0eWxlIGludmFsaWQgcGFyYW1ldGVyIGxlbmd0aCIpOwo+ICsKPiArICAgICAgICBl cnJvciA9IHNldHNvY2tvcHQodWRwX2NsdF9zaywgU09MX1NDVFAsIFNDVFBfREVMQVlFRF9BQ0tf VElNRSwKPiArCQkJICAgJnZhbHVlLAo+ICsJCQkgICBzaXplb2YodmFsdWUpIC0gMSk7Cj4gKwlp ZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5vKSkKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNDVFBfREVMQVlFRF9BQ0tfVElNRSkgIgo+ICsJCQkg ImludmFsaWQgcGFyYW1ldGVyIGxlbmd0aCBlcnJvcjolZCwgZXJybm86JWRcbiIsCj4gKwkJCSBl cnJvciwgZXJybm8pOwo+ICsKPiArCXRzdF9yZXNtKFRQQVNTLCAic2V0c29ja29wdChTQ1RQX0RF TEFZRURfQUNLX1RJTUUpICIKPiArCQkgIi0gb25lLXRvLW1hbnkgc3R5bGUgaW52YWxpZCBwYXJh bWV0ZXIgbGVuZ3RoIik7Cj4gKwo+ICsJbWVtc2V0KCZwYWRkcnBhcmFtcywgMCwgc2l6ZW9mKHBh ZGRycGFyYW1zKSk7Cj4gKwlwYWRkcnBhcmFtcy5zcHBfYXNzb2NfaWQgPSBzYWMtPnNhY19hc3Nv Y19pZDsKPiArCW1lbWNweSgmcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3MsICZ1ZHBfY2x0X2xvb3As IHNpemVvZih1ZHBfY2x0X2xvb3ApKTsKPiArCXBhZGRycGFyYW1zLnNwcF9zYWNrZGVsYXkgPSA1 MDE7Cj4gKwo+ICsgICAgICAgIGVycm9yID0gc2V0c29ja29wdCh1ZHBfY2x0X3NrLCBTT0xfU0NU UCwgU0NUUF9QRUVSX0FERFJfUEFSQU1TLAo+ICsJCQkgICAmcGFkZHJwYXJhbXMsCj4gKwkJCSAg IHNpemVvZihwYWRkcnBhcmFtcykpOwo+ICsJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAh PSBlcnJubykpCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2V0c29ja29wdChTQ1RQ X1BFRVJfQUREUl9QQVJBTVMpICIKPiArCQkJICJpbnZhbGlkIHNhY2sgZGVsYXkgZXJyb3I6JWQs IGVycm5vOiVkXG4iLAo+ICsJCQkgZXJyb3IsIGVycm5vKTsKPiArCj4gKwl0c3RfcmVzbShUUEFT UywgInNldHNvY2tvcHQoU0NUUF9QRUVSX0FERFJfUEFSQU1TKSAiCj4gKwkJICItIG9uZS10by1t YW55IHN0eWxlIGludmFsaWQgc2FjayBkZWxheSIpOwo+ICsKPiArCXZhbHVlLmFzc29jX2lkICAg ID0gc2FjLT5zYWNfYXNzb2NfaWQ7Cj4gKwl2YWx1ZS5hc3NvY192YWx1ZSA9IDUwMTsKPiArCj4g KyAgICAgICAgZXJyb3IgPSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQX0RF TEFZRURfQUNLX1RJTUUsCj4gKwkJCSAgICZ2YWx1ZSwKPiArCQkJICAgc2l6ZW9mKHZhbHVlKSk7 Cj4gKwlpZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5vKSkKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNDVFBfREVMQVlFRF9BQ0tfVElNRSkgIgo+ ICsJCQkgImludmFsaWQgc2FjayBkZWxheSBlcnJvcjolZCwgZXJybm86JWRcbiIsCj4gKwkJCSBl cnJvciwgZXJybm8pOwo+ICsKPiArCXRzdF9yZXNtKFRQQVNTLCAic2V0c29ja29wdChTQ1RQX0RF TEFZRURfQUNLX1RJTUUpICIKPiArCQkgIi0gb25lLXRvLW1hbnkgc3R5bGUgaW52YWxpZCBzYWNr IGRlbGF5Iik7Cj4gKwo+ICsJbWVtc2V0KCZwYWRkcnBhcmFtcywgMCwgc2l6ZW9mKHBhZGRycGFy YW1zKSk7Cj4gKwlwYWRkcnBhcmFtcy5zcHBfYXNzb2NfaWQgPSBzYWMtPnNhY19hc3NvY19pZDsK PiArCW1lbWNweSgmcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3MsICZ1ZHBfY2x0X2xvb3AsIHNpemVv Zih1ZHBfY2x0X2xvb3ApKTsKPiArCXBhZGRycGFyYW1zLnNwcF9wYXRobXR1ID0gNTExOwo+ICsK PiArICAgICAgICBlcnJvciA9IHNldHNvY2tvcHQodWRwX2NsdF9zaywgU09MX1NDVFAsIFNDVFBf UEVFUl9BRERSX1BBUkFNUywKPiArCQkJICAgJnBhZGRycGFyYW1zLAo+ICsJCQkgICBzaXplb2Yo cGFkZHJwYXJhbXMpKTsKPiArCWlmICgoLTEgIT0gZXJyb3IpIHx8IChFSU5WQUwgIT0gZXJybm8p KQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNldHNvY2tvcHQoU0NUUF9QRUVSX0FE RFJfUEFSQU1TKSAiCj4gKwkJCSAiaW52YWxpZCBwYXRoIE1UVSBlcnJvcjolZCwgZXJybm86JWRc biIsCj4gKwkJCSBlcnJvciwgZXJybm8pOwo+ICsKPiArCXRzdF9yZXNtKFRQQVNTLCAic2V0c29j a29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpICIKPiArCQkgIi0gb25lLXRvLW1hbnkgc3R5bGUg aW52YWxpZCBwYXRoIE1UVSIpOwo+ICsKPiArCW1lbXNldCgmcGFkZHJwYXJhbXMsIDAsIHNpemVv ZihwYWRkcnBhcmFtcykpOwo+ICsJcGFkZHJwYXJhbXMuc3BwX2Fzc29jX2lkID0gc2FjLT5zYWNf YXNzb2NfaWQ7Cj4gKwltZW1jcHkoJnBhZGRycGFyYW1zLnNwcF9hZGRyZXNzLCAmdWRwX2NsdF9s b29wLCBzaXplb2YodWRwX2NsdF9sb29wKSk7Cj4gKwlwYWRkcnBhcmFtcy5zcHBfZmxhZ3MgPSBT UFBfSEJfRU5BQkxFIHwgU1BQX0hCX0RJU0FCTEU7Cj4gKwo+ICsgICAgICAgIGVycm9yID0gc2V0 c29ja29wdCh1ZHBfY2x0X3NrLCBTT0xfU0NUUCwgU0NUUF9QRUVSX0FERFJfUEFSQU1TLAo+ICsJ CQkgICAmcGFkZHJwYXJhbXMsCj4gKwkJCSAgIHNpemVvZihwYWRkcnBhcmFtcykpOwo+ICsJaWYg KCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAhPSBlcnJubykpCj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAic2V0c29ja29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpICIKPiArCQkJICJp bnZhbGlkIGhiIGVuYWJsZSBmbGFncyBlcnJvcjolZCwgZXJybm86JWRcbiIsCj4gKwkJCSBlcnJv ciwgZXJybm8pOwo+ICsKPiArCXRzdF9yZXNtKFRQQVNTLCAic2V0c29ja29wdChTQ1RQX1BFRVJf QUREUl9QQVJBTVMpICIKPiArCQkgIi0gb25lLXRvLW1hbnkgc3R5bGUgaW52YWxpZCBoYiBlbmFi bGUgZmxhZ3MiKTsKPiArCj4gKwltZW1zZXQoJnBhZGRycGFyYW1zLCAwLCBzaXplb2YocGFkZHJw YXJhbXMpKTsKPiArCXBhZGRycGFyYW1zLnNwcF9hc3NvY19pZCA9IHNhYy0+c2FjX2Fzc29jX2lk Owo+ICsJbWVtY3B5KCZwYWRkcnBhcmFtcy5zcHBfYWRkcmVzcywgJnVkcF9jbHRfbG9vcCwgc2l6 ZW9mKHVkcF9jbHRfbG9vcCkpOwo+ICsJcGFkZHJwYXJhbXMuc3BwX2ZsYWdzID0gU1BQX1BNVFVE X0VOQUJMRSB8IFNQUF9QTVRVRF9ESVNBQkxFOwo+ICsKPiArICAgICAgICBlcnJvciA9IHNldHNv Y2tvcHQodWRwX2NsdF9zaywgU09MX1NDVFAsIFNDVFBfUEVFUl9BRERSX1BBUkFNUywKPiArCQkJ ICAgJnBhZGRycGFyYW1zLAo+ICsJCQkgICBzaXplb2YocGFkZHJwYXJhbXMpKTsKPiArCWlmICgo LTEgIT0gZXJyb3IpIHx8IChFSU5WQUwgIT0gZXJybm8pKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0 c3RfZXhpdCwgInNldHNvY2tvcHQoU0NUUF9QRUVSX0FERFJfUEFSQU1TKSAiCj4gKwkJCSAiaW52 YWxpZCBQTVRVIGRpc2NvdmVyeSBlbmFibGUgZmxhZ3MgZXJyb3I6JWQsIGVycm5vOiVkXG4iLAo+ ICsJCQkgZXJyb3IsIGVycm5vKTsKPiArCj4gKwl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQo U0NUUF9QRUVSX0FERFJfUEFSQU1TKSAiCj4gKwkJICItIG9uZS10by1tYW55IHN0eWxlIGludmFs aWQgUE1UVSBkaXNjb3ZlcnkgZW5hYmxlIGZsYWdzIik7Cj4gKwo+ICsJbWVtc2V0KCZwYWRkcnBh cmFtcywgMCwgc2l6ZW9mKHBhZGRycGFyYW1zKSk7Cj4gKwlwYWRkcnBhcmFtcy5zcHBfYXNzb2Nf aWQgPSBzYWMtPnNhY19hc3NvY19pZDsKPiArCW1lbWNweSgmcGFkZHJwYXJhbXMuc3BwX2FkZHJl c3MsICZ1ZHBfY2x0X2xvb3AsIHNpemVvZih1ZHBfY2x0X2xvb3ApKTsKPiArCXBhZGRycGFyYW1z LnNwcF9mbGFncyA9IFNQUF9TQUNLREVMQVlfRU5BQkxFIHwgU1BQX1NBQ0tERUxBWV9ESVNBQkxF Owo+ICsKPiArICAgICAgICBlcnJvciA9IHNldHNvY2tvcHQodWRwX2NsdF9zaywgU09MX1NDVFAs IFNDVFBfUEVFUl9BRERSX1BBUkFNUywKPiArCQkJICAgJnBhZGRycGFyYW1zLAo+ICsJCQkgICBz aXplb2YocGFkZHJwYXJhbXMpKTsKPiArCWlmICgoLTEgIT0gZXJyb3IpIHx8IChFSU5WQUwgIT0g ZXJybm8pKQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNldHNvY2tvcHQoU0NUUF9Q RUVSX0FERFJfUEFSQU1TKSAiCj4gKwkJCSAiaW52YWxpZCBzYWNrIGRlbGF5IGVuYWJsZSBmbGFn cyBlcnJvcjolZCwgZXJybm86JWRcbiIsCj4gKwkJCSBlcnJvciwgZXJybm8pOwo+ICsKPiArCXRz dF9yZXNtKFRQQVNTLCAic2V0c29ja29wdChTQ1RQX1BFRVJfQUREUl9QQVJBTVMpICIKPiArCQkg Ii0gb25lLXRvLW1hbnkgc3R5bGUgaW52YWxpZCBzYWNrIGRlbGF5IGVuYWJsZSBmbGFncyIpOwo+ ICsKPiArCW1lbXNldCgmcGFkZHJwYXJhbXMsIDAsIHNpemVvZihwYWRkcnBhcmFtcykpOwo+ICsJ cGFkZHJwYXJhbXMuc3BwX2ZsYWdzID0gU1BQX0hCX0RFTUFORDsKPiArCj4gKyAgICAgICAgZXJy b3IgPSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQX1BFRVJfQUREUl9QQVJB TVMsCj4gKwkJCSAgICZwYWRkcnBhcmFtcywKPiArCQkJICAgc2l6ZW9mKHBhZGRycGFyYW1zKSk7 Cj4gKwlpZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5vKSkKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNDVFBfUEVFUl9BRERSX1BBUkFNUykgIgo+ ICsJCQkgImludmFsaWQgaGIgZGVtYW5kIGVycm9yOiVkLCBlcnJubzolZFxuIiwKPiArCQkJIGVy cm9yLCBlcnJubyk7Cj4gKwo+ICsJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nrb3B0KFNDVFBfUEVF Ul9BRERSX1BBUkFNUykgIgo+ICsJCSAiLSBvbmUtdG8tbWFueSBzdHlsZSBpbnZhbGlkIGhiIGRl bWFuZCIpOwo+ICAgCj4gICAJY2xvc2UodWRwX3N2cl9zayk7Cj4gKwljbG9zZSh1ZHBfY2x0X3Nr KTsKPiAgIAo+IC0JLyogVEVTVCAjNTogU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0gc29ja2V0IG9w dGlvbi4gKi8KPiArCj4gKwkvKiBURVNUICM2OiBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSBzb2Nr ZXQgb3B0aW9uLiAqLwo+ICAgCS8qIENyZWF0ZSBhbmQgYmluZCAyIFVEUC1zdHlsZSBzb2NrZXRz KHVkcF9zdnJfc2ssIHVkcF9jbHRfc2spIGFuZAo+ICAgCSAqIDIgVENQLXN0eWxlIHNvY2tldHMu ICh0Y3Bfc3ZyX3NrLCB0Y3BfY2x0X3NrKQo+ICAgCSAqLwo+IEBAIC01MTAsMjAgKzc4MiwyMCBA QCBpbnQgbWFpbih2b2lkKQo+ICAgCj4gICAJLyogVmVyaWZ5IHRoYXQgdGhlIGdldCBwYXJhbSBt YXRjaGVzIHNldCBwYXJhbS4gKi8KPiAgIAlpZiAoc2V0X3VkcF9za19kZmx0X3BhcmFtLnNpbmZv X3BwaWQgIT0KPiAtCSAgICBnZXRfdWRwX3NrX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkKPiAtCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0p ICIKPiArCQkJZ2V0X3VkcF9za19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4gKwkJdHN0X2Jya20o VEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ ICAgCQkJICJtaXNtYXRjaC4iKTsKPiAgIAo+ICAgCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1l dGVycyBvbiB0aGUgdW5jb25uZWN0ZWQgVURQLXN0eWxlIHNvY2tldC4gKi8KPiAgIAltZW1zZXQo JmdldF91ZHBfc2tfZGZsdF9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8p KTsKPiAgIAlvcHRsZW4gPSBzaXplb2YoZ2V0X3VkcF9za19kZmx0X3BhcmFtKTsKPiAgIAl0ZXN0 X2dldHNvY2tvcHQodWRwX2NsdF9zaywgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0sCj4gLQkJCSZn ZXRfdWRwX3NrX2RmbHRfcGFyYW0sICZvcHRsZW4pOwo+ICsJCSAgICAgICAmZ2V0X3VkcF9za19k Zmx0X3BhcmFtLCAmb3B0bGVuKTsKPiAgIAo+ICAgCS8qIFZlcmlmeSB0aGF0IHRoZSBnZXQgcGFy YW0gbWF0Y2hlcyBzZXQgcGFyYW0uICovCj4gICAJaWYgKHNldF91ZHBfc2tfZGZsdF9wYXJhbS5z aW5mb19wcGlkICE9Cj4gLQkgICAgZ2V0X3VkcF9za19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4g LQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BB UkFNKSAiCj4gKwkJCWdldF91ZHBfc2tfZGZsdF9wYXJhbS5zaW5mb19wcGlkKQo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0p ICIKPiAgIAkJCSAibWlzbWF0Y2guIik7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNv Y2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pIC0gIgo+IEBAIC01MzQsMTQgKzgwNiwxNSBA QCBpbnQgbWFpbih2b2lkKQo+ICAgCSAqLwo+ICAgCW1lbXNldCgmc2V0X3VkcF9za19kZmx0X3Bh cmFtLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ICAgCXNldF91ZHBfc2tf ZGZsdF9wYXJhbS5zaW5mb19wcGlkID0gMTAwMDsKPiAtCS8qIEludmFsaWQgYXNzb2MgaWQgKi8K PiArICAgICAgIAkvKiBJbnZhbGlkIGFzc29jIGlkICovCj4gICAJc2V0X3VkcF9za19kZmx0X3Bh cmFtLnNpbmZvX2Fzc29jX2lkID0gMTIzNDsKPiAtCWVycm9yID0gc2V0c29ja29wdCh1ZHBfY2x0 X3NrLCBTT0xfU0NUUCwgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0sCj4gKyAgICAgICAgZXJyb3Ig PSBzZXRzb2Nrb3B0KHVkcF9jbHRfc2ssIFNPTF9TQ1RQLCBTQ1RQX0RFRkFVTFRfU0VORF9QQVJB TSwKPiAgIAkJCSAgICZzZXRfdWRwX3NrX2RmbHRfcGFyYW0sCj4gICAJCQkgICBzaXplb2Yoc2V0 X3VkcF9za19kZmx0X3BhcmFtKSk7Cj4gICAJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAh PSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZXRzb2Nrb3B0KFNDVFBfREVG QVVMVF9TRU5EX1BBUkFNKSAiCj4gLQkJCSAiaW52YWxpZCBhc3NvY2lkIGVycm9yOiVkLCBlcnJu bzolZFxuIiwgZXJyb3IsIGVycm5vKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJz ZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gKwkJCSAiaW52YWxpZCBhc3Nv Y2lkIGVycm9yOiVkLCBlcnJubzolZFxuIiwKPiArCQkJIGVycm9yLCBlcnJubyk7Cj4gICAKPiAg IAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pICIK PiAgIAkJICItIG9uZS10by1tYW55IHN0eWxlIGludmFsaWQgYXNzb2NpZCIpOwo+IEBAIC01NTQs NyArODI3LDcgQEAgaW50IG1haW4odm9pZCkKPiAgIAllcnJvciA9IHRlc3RfcmVjdm1zZyh1ZHBf c3ZyX3NrLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2dfbm90 aWZpY2F0aW9uKCZpbm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0IHNj dHBfYXNzb2NfY2hhbmdlKSwKPiAtCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01N X1VQKTsKPiArCQkJCSAgICBTQ1RQX0FTU09DX0NIQU5HRSwgU0NUUF9DT01NX1VQKTsJCj4gICAJ c2FjID0gKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqKWlvdi5pb3ZfYmFzZTsKPiAgIAl1ZHBf c3ZyX2Fzc29jaWQgPSBzYWMtPnNhY19hc3NvY19pZDsKPiAgIAo+IEBAIC01NjIsMTEgKzgzNSwx MSBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHVkcF9jbHRfc2ss ICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRp b24oJmlubWVzc2FnZSwgZXJyb3IsCj4gICAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3Nv Y19jaGFuZ2UpLAo+IC0JCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ ICsJCQkJICAgIFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwkKPiAgIAlzYWMgPSAo c3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICopaW92Lmlvdl9iYXNlOwo+ICAgCXVkcF9jbHRfYXNz b2NpZCA9IHNhYy0+c2FjX2Fzc29jX2lkOwo+ICAgCj4gLQkvKiBWZXJpZnkgdGhhdCB0cnlpbmcg dG8gc2V0IHNlbmQgcGFyYW1zIHdpdGggYW4gYXNzb2MgaWQgbm90Cj4gKwkvKiBWZXJpZnkgdGhh dCB0cnlpbmcgdG8gc2V0IHNlbmQgcGFyYW1zIHdpdGggYW4gYXNzb2MgaWQgbm90Cj4gICAJICog YmVsb25naW5nIHRvIHRoZSBzb2NrZXQgb24gYW4gVURQLXN0eWxlIHNvY2tldCBmYWlscy4KPiAg IAkgKi8KPiAgIAltZW1zZXQoJnNldF91ZHBfYXNzb2NfZGZsdF9wYXJhbSwgMCwgc2l6ZW9mKHN0 cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiBAQCAtNTc2LDE2ICs4NDksMTYgQEAgaW50IG1haW4o dm9pZCkKPiAgIAkJCSAgICZzZXRfdWRwX2Fzc29jX2RmbHRfcGFyYW0sCj4gICAJCQkgICBzaXpl b2Yoc2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtKSk7Cj4gICAJaWYgKCgtMSAhPSBlcnJvcikgfHwg KEVJTlZBTCAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZXRzb2Nrb3B0 KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0 LCAic2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ICAgCQkJICJhc3NvY2lk IGJlbG9uZ2luZyB0byBhbm90aGVyIHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzol ZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQo U0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pIC0gIgo+ICAgCQkgIm9uZS10by1tYW55IHN0eWxlIGFz c29jaWQgYmVsb25naW5nIHRvIGFub3RoZXIgc29ja2V0Iik7Cj4gICAKPiAtCS8qIFNldCBkZWZh dWx0IHNlbmQgcGFyYW1ldGVycyBvZiBhbiBhc3NvY2lhdGlvbiBvbiB0aGUgbGlzdGVuaW5nCj4g KwkvKiBTZXQgZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgb2YgYW4gYXNzb2NpYXRpb24gb24gdGhl IGxpc3RlbmluZwo+ICAgCSAqIFVEUC1zdHlsZSBzb2NrZXQgd2l0aCBhIHZhbGlkIGFzc29jaWQu Cj4gLQkgKi8KPiArCSAqLwo+ICAgCW1lbXNldCgmc2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtLCAw LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ICAgCXNldF91ZHBfYXNzb2NfZGZs dF9wYXJhbS5zaW5mb19wcGlkID0gMzAwMDsKPiAgIAlzZXRfdWRwX2Fzc29jX2RmbHRfcGFyYW0u c2luZm9fYXNzb2NfaWQgPSB1ZHBfc3ZyX2Fzc29jaWQ7Cj4gQEAgLTU5Niw2MCArODY5LDYwIEBA IGludCBtYWluKHZvaWQpCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nrb3B0KFNDVFBfREVG QVVMVF9TRU5EX1BBUkFNKSAtICIKPiAgIAkJICJvbmUtdG8tbWFueSBzdHlsZSB2YWxpZCBhc3Nv Y2lkIik7Cj4gICAKPiAtCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvZiBhbiBhc3Nv Y2lhdGlvbiBvbiB0aGUgbGlzdGVuaW5nCj4gKwkvKiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFtZXRl cnMgb2YgYW4gYXNzb2NpYXRpb24gb24gdGhlIGxpc3RlbmluZwo+ICAgCSAqIFVEUC1zdHlsZSBz b2NrZXQgd2l0aCBhIHZhbGlkIGFzc29jaWQuCj4gLQkgKi8KPiArCSAqLwo+ICAgCW1lbXNldCgm Z2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5m bykpOwo+IC0JZ2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0gdWRwX3N2 cl9hc3NvY2lkOwo+ICsJZ2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0g dWRwX3N2cl9hc3NvY2lkIDsKPiAgIAlvcHRsZW4gPSBzaXplb2YoZ2V0X3VkcF9hc3NvY19kZmx0 X3BhcmFtKTsKPiAgIAl0ZXN0X2dldHNvY2tvcHQodWRwX3N2cl9zaywgU0NUUF9ERUZBVUxUX1NF TkRfUEFSQU0sCj4gICAJCQkmZ2V0X3VkcF9hc3NvY19kZmx0X3BhcmFtLCAmb3B0bGVuKTsKPiAg IAo+ICAgCS8qIFZlcmlmeSB0aGF0IHRoZSBnZXQgcGFyYW0gbWF0Y2hlcyB0aGUgc2V0IHBhcmFt LiAqLwo+ICAgCWlmIChnZXRfdWRwX2Fzc29jX2RmbHRfcGFyYW0uc2luZm9fcHBpZCAhPQo+IC0J ICAgIHNldF91ZHBfYXNzb2NfZGZsdF9wYXJhbS5zaW5mb19wcGlkKQo+IC0JCXRzdF9icmttKFRC Uk9LLCBOVUxMLCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ICsJCQlz ZXRfdWRwX2Fzc29jX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkKPiArCQl0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJnZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gICAJCQkg Im1pc21hdGNoLiIpOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFNDVFBf REVGQVVMVF9TRU5EX1BBUkFNKSAtICIKPiAgIAkJICJvbmUtdG8tbWFueSBzdHlsZSB2YWxpZCBh c3NvY2lkIik7Cj4gICAKPiAtCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvZiBhbiBh c3NvY2lhdGlvbiBvbiB0aGUgY29ubmVjdGVkCj4gKwkvKiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFt ZXRlcnMgb2YgYW4gYXNzb2NpYXRpb24gb24gdGhlIGNvbm5lY3RlZAo+ICAgCSAqIFVEUC1zdHls ZSBzb2NrZXQgd2l0aCB6ZXJvIGFzc29jaWQuIFRoaXMgc2hvdWxkIHJldHVybiB0aGUKPiAgIAkg KiBzb2NrZXQgd2lkZSBkZWZhdWx0IHBhcmFtZXRlcnMuCj4gLQkgKi8KPiArCSAqLwo+ICAgCW1l bXNldCgmZ2V0X3VkcF9za19kZmx0X3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2 aW5mbykpOwo+IC0JZ2V0X3VkcF9za19kZmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0gMDsKPiAr CWdldF91ZHBfc2tfZGZsdF9wYXJhbS5zaW5mb19hc3NvY19pZCA9IDAgOwo+ICAgCW9wdGxlbiA9 IHNpemVvZihnZXRfdWRwX3NrX2RmbHRfcGFyYW0pOwo+ICAgCXRlc3RfZ2V0c29ja29wdCh1ZHBf Y2x0X3NrLCBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSwKPiAgIAkJCSZnZXRfdWRwX3NrX2RmbHRf cGFyYW0sICZvcHRsZW4pOwo+ICAgCj4gICAJLyogVmVyaWZ5IHRoYXQgdGhlIGdldCBwYXJhbSBt YXRjaGVzIHRoZSBzb2NrZXQtd2lkZSBzZXQgcGFyYW0uICovCj4gICAJaWYgKGdldF91ZHBfc2tf ZGZsdF9wYXJhbS5zaW5mb19wcGlkICE9Cj4gLQkgICAgc2V0X3VkcF9za19kZmx0X3BhcmFtLnNp bmZvX3BwaWQpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0KFNDVFBfREVG QVVMVF9TRU5EX1BBUkFNKSAiCj4gKwkJCXNldF91ZHBfc2tfZGZsdF9wYXJhbS5zaW5mb19wcGlk KQo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxU X1NFTkRfUEFSQU0pICIKPiAgIAkJCSAibWlzbWF0Y2guIik7Cj4gICAKPiAgIAl0c3RfcmVzbShU UEFTUywgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pIC0gIgo+ICAgCQkgIm9u ZS10by1tYW55IHN0eWxlIHplcm8gYXNzb2NpZCIpOwo+ICAgCj4gLQlwZWVsb2ZmX3NrID0gdGVz dF9zY3RwX3BlZWxvZmYodWRwX3N2cl9zaywgdWRwX3N2cl9hc3NvY2lkKTsKPiArCXBlZWxvZmZf c2sgPSB0ZXN0X3NjdHBfcGVlbG9mZih1ZHBfc3ZyX3NrLCB1ZHBfc3ZyX2Fzc29jaWQpOwo+ICAg Cj4gLQkvKiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgb2YgYW4gYXNzb2NpYXRpb24gb24g dGhlIHBlZWxlZCBvZmYKPiArCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvZiBhbiBh c3NvY2lhdGlvbiBvbiB0aGUgcGVlbGVkIG9mZgo+ICAgCSAqIFVEUC1zdHlsZSBzb2NrZXQuIFRo aXMgc2hvdWxkIHJldHVybiB0aGUgYXNzb2NpYXRpb24ncyBkZWZhdWx0Cj4gICAJICogcGFyYW1l dGVycy4KPiAtCSAqLwo+ICsJICovCj4gICAJbWVtc2V0KCZnZXRfcGVlbG9mZl9hc3NvY19kZmx0 X3BhcmFtLCAwLAo+ICAgCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ IC0JZ2V0X3BlZWxvZmZfYXNzb2NfZGZsdF9wYXJhbS5zaW5mb19hc3NvY19pZCA9IDA7Cj4gKwln ZXRfcGVlbG9mZl9hc3NvY19kZmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0gMCA7Cj4gICAJb3B0 bGVuID0gc2l6ZW9mKGdldF9wZWVsb2ZmX2Fzc29jX2RmbHRfcGFyYW0pOwo+ICAgCXRlc3RfZ2V0 c29ja29wdChwZWVsb2ZmX3NrLCBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSwKPiAgIAkJCSZnZXRf cGVlbG9mZl9hc3NvY19kZmx0X3BhcmFtLCAmb3B0bGVuKTsKPiAgIAo+ICAgCS8qIFZlcmlmeSB0 aGF0IHRoZSBnZXQgcGFyYW0gbWF0Y2hlcyB0aGUgYXNzb2NpYXRpb24ncyBzZXQgcGFyYW0uICov Cj4gICAJaWYgKGdldF9wZWVsb2ZmX2Fzc29jX2RmbHRfcGFyYW0uc2luZm9fcHBpZCAhPQo+IC0J ICAgIHNldF91ZHBfYXNzb2NfZGZsdF9wYXJhbS5zaW5mb19wcGlkKQo+IC0JCXRzdF9icmttKFRC Uk9LLCBOVUxMLCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ICsJCQlz ZXRfdWRwX2Fzc29jX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkKPiArCQl0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJnZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gICAJCQkg Im1pc21hdGNoLiIpOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFNDVFBf REVGQVVMVF9TRU5EX1BBUkFNKSAtICIKPiBAQCAtNjYxLDcgKzkzNCw4IEBAIGludCBtYWluKHZv aWQpCj4gICAJLyogSW52YWxpZCBhc3NvYyBpZCwgaWdub3JlZCBvbiBhIFRDUC1zdHlsZSBzb2Nr ZXQuICovCj4gICAJc2V0X3RjcF9za19kZmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0gMTIzNDsK PiAgIAl0ZXN0X3NldHNvY2tvcHQodGNwX3N2cl9zaywgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0s Cj4gLQkJCSZzZXRfdGNwX3NrX2RmbHRfcGFyYW0sIHNpemVvZihzZXRfdGNwX3NrX2RmbHRfcGFy YW0pKTsKPiArCQkJJnNldF90Y3Bfc2tfZGZsdF9wYXJhbSwKPiArCQkJc2l6ZW9mKHNldF90Y3Bf c2tfZGZsdF9wYXJhbSkpOwo+ICAgCj4gICAJLyogU2V0IGRlZmF1bHQgc2VuZCBwYXJhbWV0ZXJz IG9uIHRoZSB1bmNvbm5lY3RlZCBUQ1Atc3R5bGUgc29ja2V0cy4gKi8KPiAgIAltZW1zZXQoJnNl dF90Y3Bfc2tfZGZsdF9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsK PiBAQCAtNjY5LDcgKzk0Myw4IEBAIGludCBtYWluKHZvaWQpCj4gICAJLyogSW52YWxpZCBhc3Nv YyBpZCwgaWdub3JlZCBvbiBhIFRDUC1zdHlsZSBzb2NrZXQuICovCj4gICAJc2V0X3RjcF9za19k Zmx0X3BhcmFtLnNpbmZvX2Fzc29jX2lkID0gMTIzNDsKPiAgIAl0ZXN0X3NldHNvY2tvcHQodGNw X2NsdF9zaywgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0sCj4gLQkJCSZzZXRfdGNwX3NrX2RmbHRf cGFyYW0sIHNpemVvZihzZXRfdGNwX3NrX2RmbHRfcGFyYW0pKTsKPiArCQkJJnNldF90Y3Bfc2tf ZGZsdF9wYXJhbSwKPiArCQkJc2l6ZW9mKHNldF90Y3Bfc2tfZGZsdF9wYXJhbSkpOwo+ICAgCj4g ICAJdHN0X3Jlc20oVFBBU1MsICJzZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAt ICIKPiAgIAkJICJvbmUtdG8tb25lIHN0eWxlIHNvY2tldCIpOwo+IEBAIC02ODIsOCArOTU3LDgg QEAgaW50IG1haW4odm9pZCkKPiAgIAo+ICAgCS8qIFZlcmlmeSB0aGF0IHRoZSBnZXQgcGFyYW0g bWF0Y2hlcyBzZXQgcGFyYW0uICovCj4gICAJaWYgKHNldF90Y3Bfc2tfZGZsdF9wYXJhbS5zaW5m b19wcGlkICE9Cj4gLQkgICAgZ2V0X3RjcF9za19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4gLQkJ dHN0X2Jya20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFN KSAiCj4gKwkJCWdldF90Y3Bfc2tfZGZsdF9wYXJhbS5zaW5mb19wcGlkKQo+ICsJCXRzdF9icmtt KFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pICIK PiAgIAkJCSAibWlzbWF0Y2guIik7Cj4gICAKPiAgIAkvKiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFt ZXRlcnMgb24gdGhlIHVuY29ubmVjdGVkIFRDUC1zdHlsZSBzb2NrZXQuICovCj4gQEAgLTY5NCw4 ICs5NjksOCBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCj4gICAJLyogVmVyaWZ5IHRoYXQgdGhlIGdl dCBwYXJhbSBtYXRjaGVzIHNldCBwYXJhbS4gKi8KPiAgIAlpZiAoc2V0X3RjcF9za19kZmx0X3Bh cmFtLnNpbmZvX3BwaWQgIT0KPiAtCSAgICBnZXRfdGNwX3NrX2RmbHRfcGFyYW0uc2luZm9fcHBp ZCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NF TkRfUEFSQU0pICIKPiArCQkJZ2V0X3RjcF9za19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4gKwkJ dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9Q QVJBTSkgIgo+ICAgCQkJICJtaXNtYXRjaC4iKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAi Z2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgLSAiCj4gQEAgLTcwNCw5ICs5Nzks OSBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCS8qIERvIGEgY29ubmVjdCBvbiBhIFRDUC1zdHlsZSBz b2NrZXQgYW5kIGVzdGFibGlzaCBhbiBhc3NvY2lhdGlvbi4gKi8KPiAgIAl0ZXN0X2Nvbm5lY3Qo dGNwX2NsdF9zaywgJnRjcF9zdnJfbG9vcC5zYSwgc2l6ZW9mKHRjcF9zdnJfbG9vcCkpOwo+ICAg Cj4gLQkvKiBTZXQgZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgb2YgYW4gYXNzb2NpYXRpb24gb24g dGhlIGNvbm5lY3RlZAo+ICsJLyogU2V0IGRlZmF1bHQgc2VuZCBwYXJhbWV0ZXJzIG9mIGFuIGFz c29jaWF0aW9uIG9uIHRoZSBjb25uZWN0ZWQKPiAgIAkgKiBUQ1Atc3R5bGUgc29ja2V0Lgo+IC0J ICovCj4gKwkgKi8KPiAgIAltZW1zZXQoJnNldF90Y3BfYXNzb2NfZGZsdF9wYXJhbSwgMCwgc2l6 ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiAgIAlzZXRfdGNwX2Fzc29jX2RmbHRfcGFy YW0uc2luZm9fcHBpZCA9IDQwMDA7Cj4gICAJc2V0X3RjcF9hc3NvY19kZmx0X3BhcmFtLnNpbmZv X2Fzc29jX2lkID0gMDsKPiBAQCAtNzE3LDIwICs5OTIsMjAgQEAgaW50IG1haW4odm9pZCkKPiAg IAl0c3RfcmVzbShUUEFTUywgInNldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pIC0g Igo+ICAgCQkgIm9uZS10by1vbmUgc3R5bGUgYXNzb2MiKTsKPiAgIAo+IC0JLyogR2V0IGRlZmF1 bHQgc2VuZCBwYXJhbWV0ZXJzIG9mIGFuIGFzc29jaWF0aW9uIG9uIHRoZSBjb25uZWN0ZWQKPiAr CS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvZiBhbiBhc3NvY2lhdGlvbiBvbiB0aGUg Y29ubmVjdGVkCj4gICAJICogVENQLXN0eWxlIHNvY2tldC4KPiAtCSAqLwo+ICsJICovCj4gICAJ bWVtc2V0KCZnZXRfdGNwX2Fzc29jX2RmbHRfcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9z bmRyY3ZpbmZvKSk7Cj4gICAJb3B0bGVuID0gc2l6ZW9mKGdldF90Y3BfYXNzb2NfZGZsdF9wYXJh bSk7Cj4gICAJdGVzdF9nZXRzb2Nrb3B0KHRjcF9jbHRfc2ssIFNDVFBfREVGQVVMVF9TRU5EX1BB UkFNLAo+ICAgCQkJJmdldF90Y3BfYXNzb2NfZGZsdF9wYXJhbSwgJm9wdGxlbik7Cj4gICAKPiAg IAlpZiAoc2V0X3RjcF9hc3NvY19kZmx0X3BhcmFtLnNpbmZvX3BwaWQgIT0KPiAtCSAgICBnZXRf dGNwX2Fzc29jX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0pICIKPiArCQkJZ2V0X3RjcF9h c3NvY19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0 LCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ICAgCQkJICJtaXNtYXRj aC4iKTsKPiAgIAo+IC0JLyogR2V0IGRlZmF1bHQgc2VuZCBwYXJhbWV0ZXJzIG9uIHRoZSBjb25u ZWN0ZWQgVENQLXN0eWxlIHNvY2tldC4gICovCj4gKwkvKiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFt ZXRlcnMgb24gdGhlIGNvbm5lY3RlZCBUQ1Atc3R5bGUgc29ja2V0LiAgKi8KPiAgIAltZW1zZXQo JmdldF90Y3Bfc2tfZGZsdF9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8p KTsKPiAgIAlvcHRsZW4gPSBzaXplb2YoZ2V0X3RjcF9za19kZmx0X3BhcmFtKTsKPiAgIAl0ZXN0 X2dldHNvY2tvcHQodGNwX2NsdF9zaywgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0sCj4gQEAgLTcz OCwzNiArMTAxMywzNiBAQCBpbnQgbWFpbih2b2lkKQo+ICAgCj4gICAJLyogVmVyaWZ5IHRoYXQg dGhlIGdldCBwYXJhbWV0ZXJzIHJldHVybmVkIG1hdGNoZXMgdGhlIHNldCBwYXJhbQo+ICAgCSAq IHNldCBmb3IgdGhlIGFzc29jaWF0aW9uLCBub3QgdGhlIHNvY2tldC13aWRlIHBhcmFtLgo+IC0J ICovCj4gKwkgKi8KPiAgIAlpZiAoKGdldF90Y3Bfc2tfZGZsdF9wYXJhbS5zaW5mb19wcGlkID09 Cj4gLQkgICAgIHNldF90Y3Bfc2tfZGZsdF9wYXJhbS5zaW5mb19wcGlkKSB8fAo+ICsJCQlzZXRf dGNwX3NrX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkgfHwKPiAgIAkgICAgKGdldF90Y3Bfc2tfZGZs dF9wYXJhbS5zaW5mb19wcGlkICE9Cj4gLQkgICAgIHNldF90Y3BfYXNzb2NfZGZsdF9wYXJhbS5z aW5mb19wcGlkKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQoU0NUUF9E RUZBVUxUX1NFTkRfUEFSQU0pICIKPiArCSAgICAJCXNldF90Y3BfYXNzb2NfZGZsdF9wYXJhbS5z aW5mb19wcGlkKSkKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0KFND VFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gICAJCQkgIm1pc21hdGNoLiIpOwo+ICAgCj4gLQkv KiBHZXQgZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgb24gdGhlIGxpc3RlbmluZyBUQ1Atc3R5bGUg c29ja2V0LiAgKi8KPiArCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvbiB0aGUgbGlz dGVuaW5nIFRDUC1zdHlsZSBzb2NrZXQuICAqLwo+ICAgCW1lbXNldCgmZ2V0X3RjcF9za19kZmx0 X3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwo+ICAgCW9wdGxlbiA9 IHNpemVvZihnZXRfdGNwX3NrX2RmbHRfcGFyYW0pOwo+ICAgCXRlc3RfZ2V0c29ja29wdCh0Y3Bf c3ZyX3NrLCBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSwKPiAgIAkJCSZnZXRfdGNwX3NrX2RmbHRf cGFyYW0sICZvcHRsZW4pOwo+ICAgCj4gLQkvKiBWZXJpZnkgdGhhdCB0aGUgZ2V0IHBhcmFtZXRl cnMgcmV0dXJuZWQgbWF0Y2hlcyB0aGUgc29ja2V0LXdpZGUKPiArCS8qIFZlcmlmeSB0aGF0IHRo ZSBnZXQgcGFyYW1ldGVycyByZXR1cm5lZCBtYXRjaGVzIHRoZSBzb2NrZXQtd2lkZQo+ICAgCSAq IHNldCBwYXJhbS4KPiAgIAkgKi8KPiAgIAlpZiAoZ2V0X3RjcF9za19kZmx0X3BhcmFtLnNpbmZv X3BwaWQgIT0KPiAtCSAgICBzZXRfdGNwX3NrX2RmbHRfcGFyYW0uc2luZm9fcHBpZCkKPiAtCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgImdldHNvY2tvcHQoU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0p ICIKPiArCQkJc2V0X3RjcF9za19kZmx0X3BhcmFtLnNpbmZvX3BwaWQpCj4gKwkJdHN0X2Jya20o VEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ ICAgCQkJICJtaXNtYXRjaC4iKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29w dChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgLSAiCj4gICAJCSAib25lLXRvLW9uZSBzdHlsZSBh c3NvYyIpOwo+ICAgCj4gLQlhY2NlcHRfc2sgPSB0ZXN0X2FjY2VwdCh0Y3Bfc3ZyX3NrLCBOVUxM LCAmYWRkcmxlbik7Cj4gKwlhY2NlcHRfc2sgPSB0ZXN0X2FjY2VwdCh0Y3Bfc3ZyX3NrLCBOVUxM LCAmYWRkcmxlbik7Cj4gICAKPiAtCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFyYW1ldGVycyBvZiBh biBhc3NvY2lhdGlvbiBvbiB0aGUgYWNjZXB0ZWQKPiArCS8qIEdldCBkZWZhdWx0IHNlbmQgcGFy YW1ldGVycyBvZiBhbiBhc3NvY2lhdGlvbiBvbiB0aGUgYWNjZXB0ZWQKPiAgIAkgKiBUQ1Atc3R5 bGUgc29ja2V0Lgo+IC0JICovCj4gKwkgKi8KPiAgIAltZW1zZXQoJmdldF9hY2NlcHRfYXNzb2Nf ZGZsdF9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKPiAgIAlvcHRs ZW4gPSBzaXplb2YoZ2V0X2FjY2VwdF9hc3NvY19kZmx0X3BhcmFtKTsKPiAgIAl0ZXN0X2dldHNv Y2tvcHQoYWNjZXB0X3NrLCBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSwKPiBAQCAtNzc1LDI3ICsx MDUwLDI3IEBAIGludCBtYWluKHZvaWQpCj4gICAKPiAgIAllcnJvciA9IDA7Cj4gICAKPiAtCS8q IFZlcmlmeSB0aGF0IHRoZSBnZXQgcGFyYW1ldGVycyByZXR1cm5lZCBtYXRjaGVzIHRoZSBzb2Nr ZXQtd2lkZQo+ICsJLyogVmVyaWZ5IHRoYXQgdGhlIGdldCBwYXJhbWV0ZXJzIHJldHVybmVkIG1h dGNoZXMgdGhlIHNvY2tldC13aWRlCj4gICAJICogc2V0IHBhcmFtLgo+ICAgCSAqLwo+ICAgCWlm IChnZXRfdGNwX3NrX2RmbHRfcGFyYW0uc2luZm9fcHBpZCAhPQo+IC0JICAgIHNldF90Y3Bfc2tf ZGZsdF9wYXJhbS5zaW5mb19wcGlkKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiZ2V0c29j a29wdChTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSkgIgo+ICsJCQlzZXRfdGNwX3NrX2RmbHRfcGFy YW0uc2luZm9fcHBpZCkKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJnZXRzb2Nrb3B0 KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAiCj4gICAJCQkgIm1pc21hdGNoLiIpOwo+ICAgCj4g ICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKSAt ICIKPiAgIAkJICJvbmUtdG8tb25lIHN0eWxlIGFjY2VwdGVkIHNvY2tldCIpOwo+ICAgCj4gLQkv KiBURVNUICM2OiBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTyBzb2NrZXQgb3B0aW9uLiAqLwo+ICsJ LyogVEVTVCAjNzogU0NUUF9HRVRfUEVFUl9BRERSX0lORk8gc29ja2V0IG9wdGlvbi4gKi8KPiAg IAkvKiBUcnkgMCBhc3NvY2lkIGFuZCAwIGFkZHIgKi8KPiAgIAltZW1zZXQoJnBpbmZvLCAwLCBz aXplb2YocGluZm8pKTsKPiAgIAlvcHRsZW4gPSBzaXplb2YocGluZm8pOwo+ICAgCWVycm9yID0g Z2V0c29ja29wdCh1ZHBfY2x0X3NrLCBTT0xfU0NUUCwgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8s Cj4gLQkJCSAgICZwaW5mbywgJm9wdGxlbik7Cj4gKwkJCSAgICZwaW5mbywgJm9wdGxlbik7CQkJ Cj4gICAJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAhPSBlcnJubykpCj4gLQkJdHN0X2Jy a20oVEJST0ssIE5VTEwsICJnZXRzb2Nrb3B0KFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPKSAiCj4g KwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0dFVF9QRUVSX0FE RFJfSU5GTykgIgo+ICAgCQkJICJudWxsIGFzc29jaWQsIG51bGwgYWRkciBlcnJvcjolZCwgZXJy bm86JWRcbiIsCj4gLQkJCSBlcnJvciwgZXJybm8pOwo+ICsJCQllcnJvciwgZXJybm8pOwo+ICAg Cj4gICAJdHN0X3Jlc20oVFBBU1MsICJnZXRzb2Nrb3B0KFNDVFBfR0VUX1BFRVJfQUREUl9JTkZP KSAtICIKPiAgIAkJICJudWxsIGFzc29jaWQgYW5kIG51bGwgYWRkciIpOwo+IEBAIC04MDUsMTEg KzEwODAsMTEgQEAgaW50IG1haW4odm9pZCkKPiAgIAlvcHRsZW4gPSBzaXplb2YocGluZm8pOwo+ ICAgCXBpbmZvLnNwaW5mb19hc3NvY19pZCA9IHVkcF9jbHRfYXNzb2NpZDsKPiAgIAllcnJvciA9 IGdldHNvY2tvcHQodWRwX2NsdF9zaywgU09MX1NDVFAsIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZP LAo+IC0JCQkgICAmcGluZm8sICZvcHRsZW4pOwo+ICsJCQkgICAmcGluZm8sICZvcHRsZW4pOwkJ CQo+ICAgCWlmICgoLTEgIT0gZXJyb3IpIHx8IChFSU5WQUwgIT0gZXJybm8pKQo+IC0JCXRzdF9i cmttKFRCUk9LLCBOVUxMLCAiZ2V0c29ja29wdChTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTykgIgo+ ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImdldHNvY2tvcHQoU0NUUF9HRVRfUEVFUl9B RERSX0lORk8pICIKPiAgIAkJCSAidmFsaWQgYXNzb2NpZCwgbnVsbCBhZGRyIGVycm9yOiVkLCBl cnJubzolZFxuIiwKPiAtCQkJIGVycm9yLCBlcnJubyk7Cj4gKwkJCWVycm9yLCBlcnJubyk7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoU0NUUF9HRVRfUEVFUl9BRERSX0lO Rk8pIC0gIgo+ICAgCQkgInZhbGlkIGFzc29jaWQgYW5kIG51bGwgYWRkciIpOwo+IEBAIC04MjAs MTEgKzEwOTUsMTEgQEAgaW50IG1haW4odm9pZCkKPiAgIAlwaW5mby5zcGluZm9fYXNzb2NfaWQg PSB1ZHBfY2x0X2Fzc29jaWQ7Cj4gICAJbWVtY3B5KCZwaW5mby5zcGluZm9fYWRkcmVzcywgJnVk cF9jbHRfbG9vcCwgc2l6ZW9mKHVkcF9jbHRfbG9vcCkpOwo+ICAgCWVycm9yID0gZ2V0c29ja29w dCh1ZHBfY2x0X3NrLCBTT0xfU0NUUCwgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8sCj4gLQkJCSAg ICZwaW5mbywgJm9wdGxlbik7Cj4gKwkJCSAgICZwaW5mbywgJm9wdGxlbik7CQkJCj4gICAJaWYg KCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJnZXRzb2Nrb3B0KFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPKSAiCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAiZ2V0c29ja29wdChTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTykg Igo+ICAgCQkJICJ2YWxpZCBhc3NvY2lkLCBpbnZhbGlkIGFkZHIgZXJyb3I6JWQsIGVycm5vOiVk XG4iLAo+IC0JCQkgZXJyb3IsIGVycm5vKTsKPiArCQkJZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAg CXRzdF9yZXNtKFRQQVNTLCAiZ2V0c29ja29wdChTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTykgLSAi Cj4gICAJCSAidmFsaWQgYXNzb2NpZCBhbmQgaW52YWxpZCBhZGRyIik7Cj4gQEAgLTgzNCw3ICsx MTA5LDcgQEAgaW50IG1haW4odm9pZCkKPiAgIAlvcHRsZW4gPSBzaXplb2YocGluZm8pOwo+ICAg CXBpbmZvLnNwaW5mb19hc3NvY19pZCA9IHVkcF9jbHRfYXNzb2NpZDsKPiAgIAltZW1jcHkoJnBp bmZvLnNwaW5mb19hZGRyZXNzLCAmdWRwX3N2cl9sb29wLCBzaXplb2YodWRwX3N2cl9sb29wKSk7 Cj4gLQl0ZXN0X2dldHNvY2tvcHQodWRwX2NsdF9zaywgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8s ICZwaW5mbywgJm9wdGxlbik7Cj4gKwl0ZXN0X2dldHNvY2tvcHQodWRwX2NsdF9zaywgU0NUUF9H RVRfUEVFUl9BRERSX0lORk8sICZwaW5mbywgJm9wdGxlbik7CQkJCj4gICAKPiAgIAl0c3RfcmVz bShUUEFTUywgImdldHNvY2tvcHQoU0NUUF9HRVRfUEVFUl9BRERSX0lORk8pIC0gIgo+ICAgCQkg InZhbGlkIGFzc29jaWQgYW5kIHZhbGlkIGFkZHIiKTsKPiBAQCAtODQ0LDcgKzExMTksNyBAQCBp bnQgbWFpbih2b2lkKQo+ICAgCW9wdGxlbiA9IHNpemVvZihwaW5mbyk7Cj4gICAJcGluZm8uc3Bp bmZvX2Fzc29jX2lkID0gMDsKPiAgIAltZW1jcHkoJnBpbmZvLnNwaW5mb19hZGRyZXNzLCAmdWRw X2NsdF9sb29wLCBzaXplb2YodWRwX2NsdF9sb29wKSk7Cj4gLQl0ZXN0X2dldHNvY2tvcHQocGVl bG9mZl9zaywgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8sICZwaW5mbywgJm9wdGxlbik7Cj4gKwl0 ZXN0X2dldHNvY2tvcHQocGVlbG9mZl9zaywgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8sICZwaW5m bywgJm9wdGxlbik7CQkJCj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoU0NU UF9HRVRfUEVFUl9BRERSX0lORk8pIC0gIgo+ICAgCQkgInZhbGlkIGFzc29jaWQgYW5kIHZhbGlk IGFkZHIgcGVlbGVkIG9mZiBzb2NrZXQiKTsKPiBAQCAtODU1LDcgKzExMzAsNyBAQCBpbnQgbWFp bih2b2lkKQo+ICAgCXBpbmZvLnNwaW5mb19hc3NvY19pZCA9IDA7Cj4gICAJbWVtY3B5KCZwaW5m by5zcGluZm9fYWRkcmVzcywgJnRjcF9jbHRfbG9vcCwgc2l6ZW9mKHRjcF9jbHRfbG9vcCkpOwo+ ICAgCWVycm9yID0gdGVzdF9nZXRzb2Nrb3B0KGFjY2VwdF9zaywgU0NUUF9HRVRfUEVFUl9BRERS X0lORk8sICZwaW5mbywKPiAtCQkJCSZvcHRsZW4pOwo+ICsJCQkJJm9wdGxlbik7CQkJCj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgImdldHNvY2tvcHQoU0NUUF9HRVRfUEVFUl9BRERSX0lORk8p IC0gIgo+ICAgCQkgInZhbGlkIGFzc29jaWQgYW5kIHZhbGlkIGFkZHIgYWNjZXB0ZWQgc29ja2V0 Iik7Cj4gQEAgLTg2Nyw2ICsxMTQyLDYgQEAgaW50IG1haW4odm9pZCkKPiAgIAljbG9zZShhY2Nl cHRfc2spOwo+ICAgCWNsb3NlKHBlZWxvZmZfc2spOwo+ICAgCj4gLQkvKiBJbmRpY2F0ZSBzdWNj ZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+IC0JdHN0X2V4aXQoKTsKPiArICAgICAgICAvKiBJbmRp Y2F0ZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uICAqLwo+ICsgICAgICAgIHJldHVybiAwOwo+ICAg fQo+IGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF90 Y3Bfc3R5bGUuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3RjcF9z dHlsZS5jCj4gaW5kZXggZGEwYTVjNi4uZjRmODM1YSAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMv bmV0d29yay9zY3RwL2Z1bmNfdGVzdHMvdGVzdF90Y3Bfc3R5bGUuYwo+ICsrKyBiL3Rlc3RjYXNl cy9uZXR3b3JrL3NjdHAvZnVuY190ZXN0cy90ZXN0X3RjcF9zdHlsZS5jCj4gQEAgLTEsMTYgKzEs MTYgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4gKy8qIFND VFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAy MDAzCj4gICAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBNb3Rvcm9sYSwgSW5jLgo+ICAgICoK PiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBs ZW1lbnRhdGlvbgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgU0NUUCBrZXJuZWwgSW1w bGVtZW50YXRpb24KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlv biBpcyBmcmVlIHNvZnR3YXJlOwo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVl IHNvZnR3YXJlOwo+ICAgICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YKPiAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJz aW9uLgo+ICAgICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRp b24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4g ICAgKiAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJy YW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuCj4gQEAgLTU3LDcgKzU3LDggQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgCj4gICAjZGVmaW5l IE1BWF9DTElFTlRTIDEwCj4gICAKPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAraW50Cj4gK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAgIAlpbnQgY2x0 X3NrW01BWF9DTElFTlRTXSwgYWNjZXB0X3NrW01BWF9DTElFTlRTXTsKPiAgIAlpbnQgbGlzdGVu X3NrLCBjbHQyX3NrLCBhY2NlcHQyX3NrOwo+IEBAIC02NSw3ICs2Niw3IEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJc29ja2FkZHJfc3RvcmFnZV90IHN2cl9sb29wLCBh Y2NlcHRfbG9vcCwgY2x0Ml9sb29wOwo+ICAgCXNvY2tsZW5fdCBhZGRybGVuOwo+ICAgCWludCBl cnJvciwgaTsKPiAtCWNoYXIgKm1lc3NhZ2UgPSAiaGVsbG8sIHdvcmxkIVxuIjsKPiArICAgICAg ICBjaGFyICptZXNzYWdlID0gImhlbGxvLCB3b3JsZCFcbiI7Cj4gICAJY2hhciBtc2didWZbMTAw XTsKPiAgIAlpbnQgcGZfY2xhc3M7Cj4gICAJc3RydWN0IHBvbGxmZCBwb2xsX2ZkOwo+IEBAIC04 MCwyNSArODEsMjUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAljaGFy ICpiaWdfYnVmZmVyOwo+ICAgCXN0cnVjdCBpb3ZlYyBpb3Y7Cj4gICAKPiAtCS8qIFJhdGhlciB0 aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRvdXQgdG8KPiAtCSAqIGJl IHVuYnVmZmVyZWQuCj4gLQkgKi8KPiAtCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDAp Owo+ICsgICAgICAgIC8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUs IHNldCBzdGRvdXQgdG8KPiArCSAqIGJlIHVuYnVmZmVyZWQuCj4gKwkgKi8KPiArCXNldHZidWYo c3Rkb3V0LCBOVUxMLCBfSU9OQkYsIDApOwo+ICAgCj4gLQkvKiBJbml0aWFsaXplIHRoZSBzZXJ2 ZXIgYW5kIGNsaWVudCBhZGRyZXNzZXMuICovCj4gKwkvKiBJbml0aWFsaXplIHRoZSBzZXJ2ZXIg YW5kIGNsaWVudCBhZGRyZXNzZXMuICovCj4gICAjaWYgVEVTVF9WNgo+ICAgCXBmX2NsYXNzID0g UEZfSU5FVDY7Cj4gLQlzdnJfbG9vcC52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+IC0Jc3Zy X2xvb3AudjYuc2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKPiAtCXN2cl9sb29wLnY2LnNp bjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gKyAgICAgICAgc3ZyX2xvb3AudjYu c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiArICAgICAgICBzdnJfbG9vcC52Ni5zaW42X2FkZHIg PSBpbjZhZGRyX2xvb3BiYWNrOwo+ICsgICAgICAgIHN2cl9sb29wLnY2LnNpbjZfcG9ydCA9IGh0 b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBp KyspIHsKPiAtCQljbHRfbG9vcFtpXS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+IC0JCWNs dF9sb29wW2ldLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gLQkJY2x0X2xvb3Bb aV0udjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yICsgaSk7Cj4gKyAgICAgICAg CWNsdF9sb29wW2ldLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAgICAgCWNsdF9s b29wW2ldLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAgCWNsdF9s b29wW2ldLnY2LnNpbjZfcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMiArIGkpOwo+ICAgCX0K PiAtCWNsdDJfbG9vcC52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+IC0JY2x0Ml9sb29wLnY2 LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gLQljbHQyX2xvb3AudjYuc2luNl9wb3J0 ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yICsgaSk7Cj4gKyAgICAgICAgY2x0Ml9sb29wLnY2LnNp bjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAgICAgY2x0Ml9sb29wLnY2LnNpbjZfYWRkciA9 IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAgY2x0Ml9sb29wLnY2LnNpbjZfcG9ydCA9IGh0 b25zKFNDVFBfVEVTVFBPUlRfMiArIGkpOwo+ICAgI2Vsc2UKPiAgIAlwZl9jbGFzcyA9IFBGX0lO RVQ7Cj4gICAJc3ZyX2xvb3AudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gQEAgLTExNSwxMSAr MTE2LDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAjZW5kaWYKPiAg IAo+ICAgCS8qIENyZWF0ZSBhbmQgYmluZCB0aGUgbGlzdGVuaW5nIHNlcnZlciBzb2NrZXQuICAq Lwo+IC0JbGlzdGVuX3NrID0gdGVzdF9zb2NrZXQocGZfY2xhc3MsIFNPQ0tfU1RSRUFNLCBJUFBS T1RPX1NDVFApOwo+ICsgICAgICAgIGxpc3Rlbl9zayA9IHRlc3Rfc29ja2V0KHBmX2NsYXNzLCBT T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKPiAgIAl0ZXN0X2JpbmQobGlzdGVuX3NrLCAmc3Zy X2xvb3Auc2EsIHNpemVvZihzdnJfbG9vcCkpOwo+ICAgCj4gICAJLyogTWFyayBsaXN0ZW5fc2sg YXMgYmVpbmcgYWJsZSB0byBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucy4gICovCj4gLQl0ZXN0X2xp c3RlbihsaXN0ZW5fc2ssIE1BWF9DTElFTlRTIC0gMSk7Cj4gKwl0ZXN0X2xpc3RlbihsaXN0ZW5f c2ssIE1BWF9DTElFTlRTLTEpOwo+ICAgCj4gICAJLyogQ3JlYXRlIGFuZCBiaW5kIHRoZSBjbGll bnQgc29ja2V0cy4gICovCj4gICAJZm9yIChpID0gMDsgaSA8IE1BWF9DTElFTlRTOyBpKyspIHsK PiBAQCAtMTMzLDcgKzEzNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g ICAJLyogVHJ5IHRvIGRvIGFjY2VwdCBvbiBhIG5vbi1saXN0ZW5pbmcgc29ja2V0LiBJdCBzaG91 bGQgZmFpbC4gKi8KPiAgIAllcnJvciA9IGFjY2VwdChjbHRfc2tbMF0sICZhY2NlcHRfbG9vcC5z YSwgJmFkZHJsZW4pOwo+ICAgCWlmICgoLTEgIT0gZXJyb3IpICYmIChFSU5WQUwgIT0gZXJybm8p KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiYWNjZXB0IG9uIG5vbi1saXN0ZW5pbmcgc29j a2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJhY2NlcHQgb24gbm9uLWxpc3Rl bmluZyBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8p Owo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJhY2NlcHQgb24gbm9uLWxpc3RlbmluZyBzb2Nr ZXQiKTsKPiBAQCAtMTQyLDEyICsxNDMsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKPiAgIAllcnJvciA9IGNvbm5lY3QobGlzdGVuX3NrLCAoc3RydWN0IHNvY2thZGRyICop JmNsdF9sb29wWzBdLAo+ICAgCQkJc2l6ZW9mKGNsdF9sb29wWzBdKSk7Cj4gICAJaWYgKCgtMSAh PSBlcnJvcikgJiYgKEVJU0NPTk4gIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAiY29ubmVjdCB0byBub24tbGlzdGVuaW5nIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAiY29ubmVjdCB0byBub24tbGlzdGVuaW5nIHNvY2tldCAiCj4gICAJCQkgImVy cm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFT UywgImNvbm5lY3QgdG8gbm9uLWxpc3RlbmluZyBzb2NrZXQiKTsKPiAgIAo+IC0JLyogRG8gYSBi bG9ja2luZyBjb25uZWN0IGZyb20gY2x0X3NrJ3MgdG8gbGlzdGVuX3NrICovCj4gKwkvKiBEbyBh IGJsb2NraW5nIGNvbm5lY3QgZnJvbSBjbHRfc2sncyB0byBsaXN0ZW5fc2sgKi8KPiAgIAlmb3Ig KGkgPSAwOyBpIDwgTUFYX0NMSUVOVFM7IGkrKykKPiAgIAkJdGVzdF9jb25uZWN0KGNsdF9za1tp XSwgJnN2cl9sb29wLnNhLCBzaXplb2Yoc3ZyX2xvb3ApKTsKPiAgIAo+IEBAIC0xNTgsNyArMTU5 LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkgKi8KPiAgIAllcnJv ciA9IGNvbm5lY3QoY2x0Ml9zaywgJnN2cl9sb29wLnNhLCBzaXplb2Yoc3ZyX2xvb3ApKTsKPiAg IAlpZiAoKC0xICE9IGVycm9yKSAmJiAoRUNPTk5SRUZVU0VEICE9IGVycm5vKSkKPiAtCQl0c3Rf YnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3QgYWZ0ZXIgbWF4IGJhY2tsb2cgIgo+ICsJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgImNvbm5lY3QgYWZ0ZXIgbWF4IGJhY2tsb2cgIgo+ICAgCQkJ ICJlcnJvcjolZCwgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20o VFBBU1MsICJjb25uZWN0IGFmdGVyIG1heCBiYWNrbG9nIik7Cj4gQEAgLTE3MCwxMyArMTcxLDEz IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJCXBvbGxfZmQucmV2ZW50 cyA9IDA7Cj4gICAJCWVycm9yID0gcG9sbCgmcG9sbF9mZCwgMSwgLTEpOwo+ICAgCQlpZiAoKDEg IT0gZXJyb3IpICYmICgxICE9IHBvbGxfZmQucmV2ZW50cykpCj4gLQkJCXRzdF9icmttKFRCUk9L LCBOVUxMLCAiVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgIgo+ICsJCQl0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSAiCj4gICAJCQkJICJ3aXRoIHBvbGws IGVycm9yOiVkIGVycm5vOiVkLCByZXZlbnRzOiVkIiwKPiAgIAkJCQkgZXJyb3IsIGVycm5vLCBw b2xsX2ZkLnJldmVudHMpOwo+ICAgCj4gICAJCWFkZHJsZW4gPSBzaXplb2YoYWNjZXB0X2xvb3Ap Owo+ICAgCQlhY2NlcHRfc2tbaV0gPSB0ZXN0X2FjY2VwdChsaXN0ZW5fc2ssICZhY2NlcHRfbG9v cC5zYSwKPiAtCQkJCQkgICAmYWRkcmxlbik7Cj4gKwkJCQkJICAgJmFkZHJsZW4pOwo+ICAgCX0K PiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAiYWNjZXB0IGZyb20gbGlzdGVuaW5nIHNvY2tldCIp Owo+IEBAIC0xODQsNyArMTg1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK PiAgIAkvKiBUcnkgdG8gZG8gYSBjb25uZWN0IG9uIGFuIGVzdGFibGlzaGVkIHNvY2tldC4gSXQg c2hvdWxkIGZhaWwuICovCj4gICAJZXJyb3IgPSBjb25uZWN0KGFjY2VwdF9za1swXSwgJmNsdF9s b29wWzBdLnNhLCBzaXplb2YoY2x0X2xvb3BbMF0pKTsKPiAgIAlpZiAoKC0xICE9IGVycm9yKSB8 fCAoRUlTQ09OTiAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJjb25uZWN0 IG9uIGFuIGVzdGFibGlzaGVkIHNvY2tldCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0 LCAiY29ubmVjdCBvbiBhbiBlc3RhYmxpc2hlZCBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCBl cnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgImNvbm5l Y3Qgb24gYW4gZXN0YWJsaXNoZWQgc29ja2V0Iik7Cj4gQEAgLTE5MiwxMiArMTkzLDEyIEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogVHJ5IHRvIGRvIGFjY2VwdCBv biBhbiBlc3RhYmxpc2hlZCBzb2NrZXQuIEl0IHNob3VsZCBmYWlsLiAqLwo+ICAgCWVycm9yID0g YWNjZXB0KGFjY2VwdF9za1swXSwgJmFjY2VwdF9sb29wLnNhLCAmYWRkcmxlbik7Cj4gICAJaWYg KCgtMSAhPSBlcnJvcikgJiYgKEVJTlZBTCAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJhY2NlcHQgb24gYW4gZXN0YWJsaXNoZWQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShU QlJPSywgdHN0X2V4aXQsICJhY2NlcHQgb24gYW4gZXN0YWJsaXNoZWQgc29ja2V0ICIKPiAgIAkJ CSAiZXJyb3I6JWQgZXJybm86JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJZXJyb3IgPSBh Y2NlcHQoY2x0X3NrWzBdLCAmYWNjZXB0X2xvb3Auc2EsICZhZGRybGVuKTsKPiAgIAlpZiAoKC0x ICE9IGVycm9yKSAmJiAoRUlOVkFMICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgImFjY2VwdCBvbiBhbiBlc3RhYmxpc2hlZCBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgImFjY2VwdCBvbiBhbiBlc3RhYmxpc2hlZCBzb2NrZXQgIgo+ICAgCQkJICJm YWlsdXJlOiBlcnJvcjolZCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3Rf cmVzbShUUEFTUywgImFjY2VwdCBvbiBhbiBlc3RhYmxpc2hlZCBzb2NrZXQiKTsKPiBAQCAtMjI1 LDcgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogU2Vu ZGluZyBhIG1lc3NhZ2Ugb24gYSBsaXN0ZW5pbmcgc29ja2V0IHNob3VsZCBmYWlsLiAqLwo+ICAg CWVycm9yID0gc2VuZChsaXN0ZW5fc2ssIG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSwgTVNHX05P U0lHTkFMKTsKPiAgIAlpZiAoKC0xICE9IGVycm9yKSB8fCAoRVBJUEUgIT0gZXJybm8pKQo+IC0J CXRzdF9icmttKFRCUk9LLCBOVUxMLCAic2VuZCBvbiBhIGxpc3RlbmluZyBzb2NrZXQgIgo+ICsJ CXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmQgb24gYSBsaXN0ZW5pbmcgc29ja2V0ICIK PiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRz dF9yZXNtKFRQQVNTLCAic2VuZCBvbiBhIGxpc3RlbmluZyBzb2NrZXQiKTsKPiBAQCAtMjMzLDcg KzIzNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogVHJ5aW5n IHRvIHJlY2VpdmUgYSBtZXNzYWdlIG9uIGEgbGlzdGVuaW5nIHNvY2tldCBzaG91bGQgZmFpbC4g Ki8KPiAgIAllcnJvciA9IHJlY3YobGlzdGVuX3NrLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYg KCgtMSAhPSBlcnJvcikgfHwgKEVOT1RDT05OICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJP SywgTlVMTCwgInJlY3Ygb24gYSBsaXN0ZW5pbmcgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJP SywgdHN0X2V4aXQsICJyZWN2IG9uIGEgbGlzdGVuaW5nIHNvY2tldCAiCj4gICAJCQkgImVycm9y OiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywg InJlY3Ygb24gYSBsaXN0ZW5pbmcgc29ja2V0Iik7Cj4gQEAgLTI0OCwyNCArMjQ5LDI0IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJLyogRG8gYSBTSFVUX1dSIG9uIGNs dF9za1swXSB0byBkaXNhYmxlIGFueSBuZXcgc2VuZHMuICovCj4gICAJdGVzdF9zaHV0ZG93bihj bHRfc2tbMF0sIFNIVVRfV1IpOwo+ICAgCj4gLQkvKiBSZWFkaW5nIG9uIGEgc29ja2V0IHRoYXQg aGFzIHJlY2VpdmVkIFNIVVRET1dOIHNob3VsZCByZXR1cm4gMAo+ICsJLyogUmVhZGluZyBvbiBh IHNvY2tldCB0aGF0IGhhcyByZWNlaXZlZCBTSFVURE9XTiBzaG91bGQgcmV0dXJuIDAKPiAgIAkg KiBpbmRpY2F0aW5nIEVPRi4KPiAgIAkgKi8KPiAgIAllcnJvciA9IHJlY3YoYWNjZXB0X3NrWzBd LCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKCgwICE9IGVycm9yKSB8fCAoMCAhPSBlcnJubykp Cj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2IG9uIGEgU0hVVERPV04gcmVjZWl2ZWQg c29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2IG9uIGEgU0hVVERP V04gcmVjZWl2ZWQgc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQgZXJybm86JWQiLCBlcnJvciwg ZXJybm8pOwo+ICAgCj4gICAJdHN0X3Jlc20oVFBBU1MsICJyZWN2IG9uIGEgU0hVVERPV04gcmVj ZWl2ZWQgc29ja2V0Iik7Cj4gICAKPiAgIAkvKiBSZWFkIHRoZSBwZW5kaW5nIG1lc3NhZ2Ugb24g Y2x0X3NrWzBdIHRoYXQgd2FzIHJlY2VpdmVkIGJlZm9yZQo+ICAgCSAqIFNIVVRET1dOIGNhbGwu Cj4gLQkgKi8KPiArCSAqLwo+ICAgCXRlc3RfcmVjdihjbHRfc2tbMF0sIG1zZ2J1ZiwgMTAwLCAw KTsKPiAgIAo+ICAgCS8qIEluaXRpYWxpemUgaW5tZXNzYWdlIGZvciBhbGwgcmVjZWl2ZXMuICov Cj4gICAJYmlnX2J1ZmZlciA9IHRlc3RfbWFsbG9jKFJFQUxMWV9CSUcpOwo+IC0JbWVtc2V0KCZp bm1lc3NhZ2UsIDAsIHNpemVvZihpbm1lc3NhZ2UpKTsKPiArCW1lbXNldCgmaW5tZXNzYWdlLCAw LCBzaXplb2YoaW5tZXNzYWdlKSk7CQo+ICAgCWlvdi5pb3ZfYmFzZSA9IGJpZ19idWZmZXI7Cj4g ICAJaW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+ICAgCWlubWVzc2FnZS5tc2dfaW92ID0gJmlv djsKPiBAQCAtMjg0LDcgKzI4NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Cj4gICAJLyogTm8gbW9yZSBtZXNzYWdlcyBhbmQgdGhlIGFzc29jaWF0aW9uIGlzIFNIVVRET1dO LCBzaG91bGQgZmFpbC4gKi8KPiAgIAllcnJvciA9IHJlY3YoY2x0X3NrWzBdLCBtc2didWYsIDEw MCwgMCk7Cj4gICAJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVOT1RDT05OICE9IGVycm5vKSkKPiAt CQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ygb24gYSBTSFVURE9XTiBzZW50IHNvY2tldCAi Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdiBvbiBhIFNIVVRET1dOIHNlbnQg c29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAg IAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAicmVjdiBvbiBhIFNIVVRET1dOIHNlbnQgc29ja2V0Iik7 Cj4gQEAgLTI5Niw3ICsyOTcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ ICAgCj4gICAJZXJyb3IgPSByZWN2KGNsdF9za1sxXSwgbXNnYnVmLCAxMDAsIDApOwo+ICAgCWlm ICgoMCAhPSBlcnJvcikgfHwgKDAgIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAicmVjdiBvbiBhIFNIVVRfUkQgc29ja2V0ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJyZWN2IG9uIGEgU0hVVF9SRCBzb2NrZXQgIgo+ICAgCQkJICJlcnJvcjolZCwgZXJybm86 JWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gICAJLyogU2VuZGluZyBhIG1lc3NhZ2Ugb24gU0hV VF9SRCBzb2NrZXQuICovCj4gQEAgLTMwOCwxMCArMzA5LDEwIEBAIGludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCj4gICAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFNIVVRfUkQgc29j a2V0LiAqLwo+ICAgCXRlc3Rfc2VuZChhY2NlcHRfc2tbMV0sIG1lc3NhZ2UsIHN0cmxlbihtZXNz YWdlKSwgMCk7Cj4gICAKPiAtCS8qIFdlIHNob3VsZCBub3QgcmVjZWl2ZSB0aGUgbWVzc2FnZSBh cyB0aGUgc29ja2V0IGlzIFNIVVRfUkQgKi8KPiArCS8qIFdlIHNob3VsZCBub3QgcmVjZWl2ZSB0 aGUgbWVzc2FnZSBhcyB0aGUgc29ja2V0IGlzIFNIVVRfUkQgKi8KPiAgIAllcnJvciA9IHJlY3Yo Y2x0X3NrWzFdLCBtc2didWYsIDEwMCwgMCk7Cj4gICAJaWYgKCgwICE9IGVycm9yKSB8fCAoMCAh PSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJyZWN2IG9uIGEgU0hVVF9SRCBz b2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInJlY3Ygb24gYSBTSFVUX1JE IHNvY2tldCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4g ICAKPiAgIAl0c3RfcmVzbShUUEFTUywgInJlY3Ygb24gYSBTSFVUX1JEIHNvY2tldCIpOwo+IEBA IC0zMjEsMTIgKzMyMiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAg Cj4gICAJZXJyb3IgPSByZWN2KGFjY2VwdF9za1syXSwgbXNnYnVmLCAxMDAsIDApOwo+ICAgCWlm ICgoMCAhPSBlcnJvcikgfHwgKDAgIT0gZXJybm8pKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxM LCAicmVjdiBvbiBhIFNIVVRfUkRXUiBzb2NrZXQgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3Rf ZXhpdCwgInJlY3Ygb24gYSBTSFVUX1JEV1Igc29ja2V0ICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVy cm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCWVycm9yID0gcmVjdihjbHRfc2tbMl0s IG1zZ2J1ZiwgMTAwLCAwKTsKPiAgIAlpZiAoKDAgIT0gZXJyb3IpIHx8ICgwICE9IGVycm5vKSkK PiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInJlY3Ygb24gYSBTSFVUX1JEV1Igc29ja2V0ICIK PiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJyZWN2IG9uIGEgU0hVVF9SRFdSIHNvY2tl dCAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAg IAl0c3RfcmVzbShUUEFTUywgInJlY3Ygb24gYSBTSFVUX1JEV1Igc29ja2V0Iik7Cj4gQEAgLTM1 MywxMyArMzU0LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAKPiAg IAllcnJvciA9IHNlbGVjdChsaXN0ZW5fc2sgKyAxLCAmc2V0LCBOVUxMLCBOVUxMLCBOVUxMKTsK PiAgIAlpZiAoMSAhPSBlcnJvcikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbGVjdCBl cnJvcjolZCwgIgo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbGVjdCBlcnJvcjol ZCwgIgo+ICAgCQkJICJlcnJubzogJWQiLCBlcnJvciwgZXJybm8pOwo+ICAgCj4gLQkvKiBOb3cg YWNjZXB0IHRoZSBDTE9TRUQgYXNzb2NpYXRpb24gd2FpdGluZyBvbiB0aGUgbGlzdGVuaW5nCj4g KwkvKiBOb3cgYWNjZXB0IHRoZSBDTE9TRUQgYXNzb2NpYXRpb24gd2FpdGluZyBvbiB0aGUgbGlz dGVuaW5nCj4gICAJICogc29ja2V0Lgo+IC0JICovCj4gLQlhY2NlcHQyX3NrID0gdGVzdF9hY2Nl cHQobGlzdGVuX3NrLCAmYWNjZXB0X2xvb3Auc2EsICZhZGRybGVuKTsKPiArCSAqLwo+ICsJYWNj ZXB0Ml9zayA9IHRlc3RfYWNjZXB0KGxpc3Rlbl9zaywgJmFjY2VwdF9sb29wLnNhLCAmYWRkcmxl bik7Cj4gICAKPiAgIAkvKiBSZWNlaXZlIHRoZSBtZXNzYWdlIHNlbnQgYmVmb3JlIGRvaW5nIGEg Y2xvc2UuICovCj4gICAJdGVzdF9yZWN2KGFjY2VwdDJfc2ssIG1zZ2J1ZiwgMTAwLCAwKTsKPiBA QCAtMzY5LDcgKzM3MCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJ ICovCj4gICAJZXJyb3IgPSByZWN2KGFjY2VwdDJfc2ssIG1zZ2J1ZiwgMTAwLCAwKTsKPiAgIAlp ZiAoKDAgIT0gZXJyb3IpIHx8ICgwICE9IGVycm5vKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVM TCwgIlVuZXhwZWN0ZWQgZXJyb3IgcmV0dXJuIG9uICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0 X2V4aXQsICJVbmV4cGVjdGVkIGVycm9yIHJldHVybiBvbiAiCj4gICAJCQkgInJlY3YoZXJyb3I6 JWQsIGVycm5vOiVkKSIsIGVycm9yLCBlcnJubyk7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywg ImFjY2VwdCBvZiBhIENMT1NFRCBhc3NvY2lhdGlvbiIpOwo+IEBAIC0zNzksNyArMzgwLDcgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkgKi8KPiAgIAllcnJvciA9IHNl bmQoYWNjZXB0Ml9zaywgbWVzc2FnZSwgc3RybGVuKG1lc3NhZ2UpLCBNU0dfTk9TSUdOQUwpOwo+ ICAgCWlmICgoLTEgIT0gZXJyb3IpIHx8IChFUElQRSAhPSBlcnJubykpCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJzZW5kIHRvIGEgQ0xPU0VEIGFzc29jaWF0aW9uICIKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJzZW5kIHRvIGEgQ0xPU0VEIGFzc29jaWF0aW9uICIKPiAgIAkJ CSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVycm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNt KFRQQVNTLCAic2VuZCB0byBhIENMT1NFRCBhc3NvY2lhdGlvbiIpOwo+IEBAIC0zOTcsNyArMzk4 LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAl0ZXN0X3NlbmR0byhj bHQyX3NrLCBtZXNzYWdlLCBzdHJsZW4obWVzc2FnZSksIDAsICZzdnJfbG9vcC5zYSwKPiAgIAkJ ICAgIHNpemVvZihzdnJfbG9vcCkpOwo+ICAgCj4gLQlhY2NlcHQyX3NrID0gdGVzdF9hY2NlcHQo bGlzdGVuX3NrLCAmYWNjZXB0X2xvb3Auc2EsICZhZGRybGVuKTsKPiArCWFjY2VwdDJfc2sgPSB0 ZXN0X2FjY2VwdChsaXN0ZW5fc2ssICZhY2NlcHRfbG9vcC5zYSwgJmFkZHJsZW4pOwo+ICAgCj4g ICAJdGVzdF9yZWN2KGFjY2VwdDJfc2ssIG1zZ2J1ZiwgMTAwLCAwKTsKPiAgIAo+IEBAIC00MjUs NyArNDI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAlzaW5mby0+ c2luZm9fZmxhZ3MgfD0gU0NUUF9FT0Y7Cj4gICAJZXJyb3IgPSBzZW5kbXNnKGNsdDJfc2ssICZv dXRtZXNzYWdlLCAwKTsKPiAgIAlpZiAoKC0xICE9IGVycm9yKSB8fCAoRUlOVkFMICE9IGVycm5v KSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmRtc2cgd2l0aCBTQ1RQX0VPRiBmbGFn ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNnIHdpdGggU0NUUF9FT0Yg ZmxhZyAiCj4gICAJCQkgImVycm9yOiVkLCBlcnJubzolZCIsIGVycm9yLCBlcnJubyk7Cj4gICAK PiAgIAl0c3RfcmVzbShUUEFTUywgInNlbmRtc2cgd2l0aCBTQ1RQX0VPRiBmbGFnIik7Cj4gQEAg LTQzNiw3ICs0MzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCXNp bmZvLT5zaW5mb19mbGFncyB8PSBTQ1RQX0FCT1JUOwo+ICAgCWVycm9yID0gc2VuZG1zZyhjbHQy X3NrLCAmb3V0bWVzc2FnZSwgMCk7Cj4gICAJaWYgKCgtMSAhPSBlcnJvcikgfHwgKEVJTlZBTCAh PSBlcnJubykpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kbXNnIHdpdGggU0NUUF9B Qk9SVCBmbGFnICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kbXNnIHdpdGgg U0NUUF9BQk9SVCBmbGFnICIKPiAgIAkJCSAiZXJyb3I6JWQsIGVycm5vOiVkIiwgZXJyb3IsIGVy cm5vKTsKPiAgIAo+ICAgCXRzdF9yZXNtKFRQQVNTLCAic2VuZG1zZyB3aXRoIFNDVFBfQUJPUlQg ZmxhZyIpOwo+IEBAIC00NDcsMTYgKzQ0OCwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+ICAgCW91dF9pb3YuaW92X2Jhc2UgPSBtZXNzYWdlOwo+ICAgCW91dF9pb3YuaW92 X2xlbiA9IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gICAJc2luZm8tPnNpbmZvX2ZsYWdzID0gMDsK PiAtCXRlc3Rfc2VuZG1zZyhjbHQyX3NrLCAmb3V0bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2Up ICsgMSk7Cj4gKwl0ZXN0X3NlbmRtc2coY2x0Ml9zaywgJm91dG1lc3NhZ2UsIDAsIHN0cmxlbiht ZXNzYWdlKSsxKTsKPiAgIAo+ICAgCXRlc3RfcmVjdihhY2NlcHQyX3NrLCBtc2didWYsIDEwMCwg MCk7Cj4gLQo+ICsJCj4gICAJdHN0X3Jlc20oVFBBU1MsICJzZW5kbXNnIHdpdGggbm8gZmxhZ3Mi KTsKPiAgIAo+ICAgCWNsb3NlKGNsdDJfc2spOwo+ICAgCWNsb3NlKGFjY2VwdDJfc2spOwo+ICAg CWNsb3NlKGxpc3Rlbl9zayk7Cj4gICAKPiAtCS8qIEluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxl dGlvbi4gICovCj4gLQl0c3RfZXhpdCgpOwo+ICsgICAgICAgIC8qIEluZGljYXRlIHN1Y2Nlc3Nm dWwgY29tcGxldGlvbi4gICovCj4gKwlyZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVz dGNhc2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfdGltZXRvbGl2ZS5jIGIvdGVzdGNh c2VzL25ldHdvcmsvc2N0cC9mdW5jX3Rlc3RzL3Rlc3RfdGltZXRvbGl2ZS5jCj4gaW5kZXggMDVm NWJiNi4uNGE1N2I0MiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1bmNf dGVzdHMvdGVzdF90aW1ldG9saXZlLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2Z1 bmNfdGVzdHMvdGVzdF90aW1ldG9saXZlLmMKPiBAQCAtMSwxNyArMSwxNyBAQAo+IC0vKiBTQ1RQ IGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVt ZW50YXRpb24KPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDMKPiAgICAq IENvcHlyaWdodCAoYykgMTk5OS0yMDAwIENpc2NvLCBJbmMuCj4gICAgKiBDb3B5cmlnaHQgKGMp IDE5OTktMjAwMSBNb3Rvcm9sYSwgSW5jLgo+ICAgICogQ29weXJpZ2h0IChjKSAyMDAxIEludGVs IENvcnAuCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgTm9raWEsIEluYy4KPiAgICAqCj4gLSAq IFRoZSBTQ1RQIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICsg KiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOwo+ICAgICogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKPiAg ICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAgICAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5 b3VyIG9wdGlvbikKPiAgICAqIGFueSBsYXRlciB2ZXJzaW9uLgo+ICAgICoKPiAtICogVGhlIFND VFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQKPiArICogVGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdAo+ICAgICogd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCj4gICAgKiAgICAgICAgICAgICAgICAgKioq KioqKioqKioqKioqKioqKioqKioqCj4gICAgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCj4gQEAgLTM4LDcgKzM4LDcgQEAK PiAgICAqLwo+ICAgCj4gICAvKgo+IC0gKiBUaGlzIGlzIGEgYmFzaWMgZnVuY3Rpb25hbCB0ZXN0 IGZvciB0aGUgU0NUUCBrZXJuZWwgcmVmZXJlbmNlCj4gKyAqIFRoaXMgaXMgYSBiYXNpYyBmdW5j dGlvbmFsIHRlc3QgZm9yIHRoZSBTQ1RQIGtlcm5lbAo+ICAgICogaW1wbGVtZW50YXRpb24gb2Yg c25kcmN2aW5mby5zaW5mb190aW1ldG9saXZlLgo+ICAgICoKPiAgICAqIDEpIENyZWF0ZSB0d28g c29ja2V0cywgdGhlIGxpc3RlbmluZyBzb2NrZXQgc2V0cyBpdHMgUkVDVkJVRiBzbWFsbAo+IEBA IC04MywzOCArODMsMzcgQEAgaW50IFRTVF9DTlQgPSAwOwo+ICAgc3RhdGljIGNoYXIgKmZpbGxt c2cgPSBOVUxMOwo+ICAgc3RhdGljIGNoYXIgKnR0bG1zZyA9ICJUaGlzIHNob3VsZCB0aW1lIG91 dCFcbiI7Cj4gICBzdGF0aWMgY2hhciAqbm90dGxtc2cgPSAiVGhpcyBzaG91bGQgTk9UIHRpbWUg b3V0IVxuIjsKPiAtc3RhdGljIGNoYXIgdHRsZnJhZ1tTTUFMTF9NQVhTRUcgKiAzXSA9IHsgMCB9 Owo+IC0KPiArc3RhdGljIGNoYXIgdHRsZnJhZ1tTTUFMTF9NQVhTRUcqM10gPSB7MH07Cj4gICBz dGF0aWMgY2hhciAqbWVzc2FnZSA9ICJIZWxsbyB3b3JsZFxuIjsKPiAgIAo+ICAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIHsKPiAtCWludCBzazEsIHNrMjsKPiAtCXNvY2th ZGRyX3N0b3JhZ2VfdCBsb29wMTsKPiAtCXNvY2thZGRyX3N0b3JhZ2VfdCBsb29wMjsKPiAtCXN0 cnVjdCBpb3ZlYyBpb3Y7Cj4gLQlzdHJ1Y3QgbXNnaGRyIGlubWVzc2FnZTsKPiArICAgICAgICBp bnQgc2sxLCBzazI7Cj4gKyAgICAgICAgc29ja2FkZHJfc3RvcmFnZV90IGxvb3AxOwo+ICsgICAg ICAgIHNvY2thZGRyX3N0b3JhZ2VfdCBsb29wMjsKPiArICAgICAgICBzdHJ1Y3QgaW92ZWMgaW92 Owo+ICsgICAgICAgIHN0cnVjdCBtc2doZHIgaW5tZXNzYWdlOwo+ICAgCXN0cnVjdCBtc2doZHIg b3V0bWVzc2FnZTsKPiAgIAljaGFyIGluY21zZ1tDTVNHX1NQQUNFKHNpemVvZihzY3RwX2Ntc2df ZGF0YV90KSldOwo+ICAgCWNoYXIgb3V0Y21zZ1tDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0 cF9zbmRyY3ZpbmZvKSldOwo+ICAgCXN0cnVjdCBjbXNnaGRyICpjbXNnOwo+ICAgCXN0cnVjdCBz Y3RwX3NuZHJjdmluZm8gKnNpbmZvOwo+IC0Jc3RydWN0IGlvdmVjIG91dF9pb3Y7Cj4gLQlpbnQg ZXJyb3I7Cj4gLQlpbnQgcGZfY2xhc3MsIGFmX2ZhbWlseTsKPiArICAgICAgICBzdHJ1Y3QgaW92 ZWMgb3V0X2lvdjsKPiArICAgICAgICBpbnQgZXJyb3I7Cj4gKwlpbnQgcGZfY2xhc3M7Cj4gICAJ dWludDMyX3QgcHBpZDsKPiAgIAl1aW50MzJfdCBzdHJlYW07Cj4gLQlzY3RwX2Fzc29jX3QgYXNz b2NpZDEsIGFzc29jaWQyOwo+ICsJc2N0cF9hc3NvY190IGFzc29jaWQxOwo+ICAgCXN0cnVjdCBz Y3RwX2Fzc29jX2NoYW5nZSAqc2FjOwo+ICAgCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBz dWJzY3JpYmU7Cj4gICAJY2hhciAqYmlnX2J1ZmZlcjsKPiAgIAlpbnQgb2Zmc2V0Owo+ICAgCXN0 cnVjdCBzY3RwX3NlbmRfZmFpbGVkICpzc2Y7Cj4gLQlzb2NrbGVuX3QgbGVuOwkJLyogUmVhbGx5 IGJlY29tZXMgMnhsZW4gd2hlbiBzZXQuICovCj4gLQlpbnQgb3JpZ19sZW47Cj4gKwlzb2NrbGVu X3QgbGVuOyAvKiBSZWFsbHkgYmVjb21lcyAyeGxlbiB3aGVuIHNldC4gKi8KPiArCWludCBvcmln X2xlbjsKPiAgIAlzdHJ1Y3Qgc2N0cF9zdGF0dXMgZ3N0YXR1czsKPiAgIAo+IC0JLyogUmF0aGVy IHRoYW4gZmZsdXNoKCkgdGhyb3VnaG91dCB0aGUgY29kZSwgc2V0IHN0ZG91dCB0bwo+ICsgICAg ICAgIC8qIFJhdGhlciB0aGFuIGZmbHVzaCgpIHRocm91Z2hvdXQgdGhlIGNvZGUsIHNldCBzdGRv dXQgdG8KPiAgIAkgKiBiZSB1bmJ1ZmZlcmVkLgo+ICAgCSAqLwo+ICAgCXNldHZidWYoc3Rkb3V0 LCBOVUxMLCBfSU9OQkYsIDApOwo+IEBAIC0xMjIsMzcgKzEyMSwzNiBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+ICAgCS8qIFNldCBzb21lIGJhc2ljIHZhbHVlcyB3aGljaCBk ZXBlbmQgb24gdGhlIGFkZHJlc3MgZmFtaWx5LiAqLwo+ICAgI2lmIFRFU1RfVjYKPiAgIAlwZl9j bGFzcyA9IFBGX0lORVQ2Owo+IC0JYWZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gICAKPiAtCWxvb3Ax LnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gLQlsb29wMS52Ni5zaW42X2FkZHIgPSBpbjZh ZGRyX2xvb3BiYWNrOwo+IC0JbG9vcDEudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9S VF8xKTsKPiArICAgICAgICBsb29wMS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owo+ICsgICAg ICAgIGxvb3AxLnY2LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Cj4gKyAgICAgICAgbG9v cDEudjYuc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8xKTsKPiAgIAo+IC0JbG9vcDIu djYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKPiAtCWxvb3AyLnY2LnNpbjZfYWRkciA9IGluNmFk ZHJfbG9vcGJhY2s7Cj4gLQlsb29wMi52Ni5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JU XzIpOwo+ICsgICAgICAgIGxvb3AyLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Cj4gKyAgICAg ICAgbG9vcDIudjYuc2luNl9hZGRyID0gaW42YWRkcl9sb29wYmFjazsKPiArICAgICAgICBsb29w Mi52Ni5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX1RFU1RQT1JUXzIpOwo+ICAgI2Vsc2UKPiAgIAlw Zl9jbGFzcyA9IFBGX0lORVQ7Cj4gLQlhZl9mYW1pbHkgPSBBRl9JTkVUOwo+ICAgCj4gLQlsb29w MS52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKPiAtCWxvb3AxLnY0LnNpbl9hZGRyLnNfYWRkciA9 IFNDVFBfSVBfTE9PUEJBQ0s7Cj4gLQlsb29wMS52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVT VFBPUlRfMSk7Cj4gKyAgICAgICAgbG9vcDEudjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Cj4gKyAg ICAgICAgbG9vcDEudjQuc2luX2FkZHIuc19hZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiArICAg ICAgICBsb29wMS52NC5zaW5fcG9ydCA9IGh0b25zKFNDVFBfVEVTVFBPUlRfMSk7Cj4gICAKPiAt CWxvb3AyLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwo+IC0JbG9vcDIudjQuc2luX2FkZHIuc19h ZGRyID0gU0NUUF9JUF9MT09QQkFDSzsKPiAtCWxvb3AyLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NU UF9URVNUUE9SVF8yKTsKPiArICAgICAgICBsb29wMi52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK PiArICAgICAgICBsb29wMi52NC5zaW5fYWRkci5zX2FkZHIgPSBTQ1RQX0lQX0xPT1BCQUNLOwo+ ICsgICAgICAgIGxvb3AyLnY0LnNpbl9wb3J0ID0gaHRvbnMoU0NUUF9URVNUUE9SVF8yKTsKPiAg ICNlbmRpZiAvKiBURVNUX1Y2ICovCj4gICAKPiAtCS8qIENyZWF0ZSB0aGUgdHdvIGVuZHBvaW50 cyB3aGljaCB3aWxsIHRhbGsgdG8gZWFjaCBvdGhlci4gICovCj4gLQlzazEgPSB0ZXN0X3NvY2tl dChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gLQlzazIgPSB0ZXN0 X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAg ICAgLyogQ3JlYXRlIHRoZSB0d28gZW5kcG9pbnRzIHdoaWNoIHdpbGwgdGFsayB0byBlYWNoIG90 aGVyLiAgKi8KPiArICAgICAgICBzazEgPSB0ZXN0X3NvY2tldChwZl9jbGFzcywgU09DS19TRVFQ QUNLRVQsIElQUFJPVE9fU0NUUCk7Cj4gKyAgICAgICAgc2syID0gdGVzdF9zb2NrZXQocGZfY2xh c3MsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFApOwo+ICAgCj4gICAJbGVuID0gc2l6ZW9m KGludCk7Cj4gLQllcnJvciA9IGdldHNvY2tvcHQoc2syLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYs ICZvcmlnX2xlbiwgJmxlbik7Cj4gKwllcnJvciA9IGdldHNvY2tvcHQoc2syLCBTT0xfU09DS0VU LCBTT19SQ1ZCVUYsICZvcmlnX2xlbiwKPiArCQkJICAgJmxlbik7Cj4gICAJaWYgKGVycm9yKQo+ IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiY2FuJ3QgZ2V0IHJjdmJ1ZiBzaXplOiAlcyIsCj4g LQkJCSBzdHJlcnJvcihlcnJubykpOwo+ICsJCXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgImNh bid0IGdldCByY3ZidWYgc2l6ZTogJXMiLAo+ICsJCQlzdHJlcnJvcihlcnJubykpOwo+ICAgCS8q IFNldCB0aGUgTUFYU0VHIHRvIHNvbWV0aGluZyBzbWFsbGlzaC4gKi8KPiAgIAl7Cj4gICAJCWlu dCB2YWwgPSBTTUFMTF9NQVhTRUc7Cj4gQEAgLTE2Niw5ICsxNjQsOSBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQo+ICAgCXRlc3Rfc2V0c29ja29wdChzazEsIFNDVFBfRVZFTlRT LCAmc3Vic2NyaWJlLCBzaXplb2Yoc3Vic2NyaWJlKSk7Cj4gICAJdGVzdF9zZXRzb2Nrb3B0KHNr MiwgU0NUUF9FVkVOVFMsICZzdWJzY3JpYmUsIHNpemVvZihzdWJzY3JpYmUpKTsKPiAgIAo+IC0J LyogQmluZCB0aGVzZSBzb2NrZXRzIHRvIHRoZSB0ZXN0IHBvcnRzLiAgKi8KPiAtCXRlc3RfYmlu ZChzazEsICZsb29wMS5zYSwgc2l6ZW9mKGxvb3AxKSk7Cj4gLQl0ZXN0X2JpbmQoc2syLCAmbG9v cDIuc2EsIHNpemVvZihsb29wMikpOwo+ICsgICAgICAgIC8qIEJpbmQgdGhlc2Ugc29ja2V0cyB0 byB0aGUgdGVzdCBwb3J0cy4gICovCj4gKyAgICAgICAgdGVzdF9iaW5kKHNrMSwgJmxvb3AxLnNh LCBzaXplb2YobG9vcDEpKTsKPiArICAgICAgICB0ZXN0X2JpbmQoc2syLCAmbG9vcDIuc2EsIHNp emVvZihsb29wMikpOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBUaGlzIGNvZGUgc2V0cyB0aGUgYXNz b2NpYXRpb25zIFJXTkQgdmVyeSBzbWFsbCBzbyB3ZSBjYW4KPiBAQCAtMTc2LDI2ICsxNzQsMjcg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkgKiAxKSBSZWR1Y2UgdGhl IHJjdmJ1ZiBzaXplIG9uIHRoZSBzb2NrZXQKPiAgIAkgKiAyKSBjcmVhdGUgYW4gYXNzb2NpYXRp b24gc28gdGhhdCB3ZSBhZHZlcnRpemUgcmN2YnVmLzIgYXMKPiAgIAkgKiAgICBvdXIgaW5pdGlh bCByd25kCj4gLQkgKiAzKSByYWlzZSB0aGUgcmN2YnVmIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3Qg ZHJvcCBkYXRhIHdpbGUKPiArCSAqIDMpIHJhaXNlIHRoZSByY3ZidWYgdmFsdWUgc28gdGhhdCB3 ZSBkb24ndCBkcm9wIGRhdGEgd2lsZQo+ICAgCSAqICAgIHJlY2VpdmluZyBsYXRlciBkYXRhCj4g ICAJICovCj4gICAJbGVuID0gU01BTExfUkNWQlVGOwo+IC0JZXJyb3IgPSBzZXRzb2Nrb3B0KHNr MiwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmbGVuLCBzaXplb2YobGVuKSk7Cj4gKwllcnJvciA9 IHNldHNvY2tvcHQoc2syLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZsZW4sCj4gKwkJCSAgIHNp emVvZihsZW4pKTsKPiAgIAlpZiAoZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz ZXRzb2Nrb3B0KFNPX1JDVkJVRik6ICVzIiwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQs ICJzZXRzb2Nrb3B0KFNPX1JDVkJVRik6ICVzIiwKPiAgIAkJCSBzdHJlcnJvcihlcnJubykpOwo+ ICAgCj4gLQkvKiBNYXJrIHNrMiBhcyBiZWluZyBhYmxlIHRvIGFjY2VwdCBuZXcgYXNzb2NpYXRp b25zLiAgKi8KPiArICAgICAgIC8qIE1hcmsgc2syIGFzIGJlaW5nIGFibGUgdG8gYWNjZXB0IG5l dyBhc3NvY2lhdGlvbnMuICAqLwo+ICAgCXRlc3RfbGlzdGVuKHNrMiwgMSk7Cj4gICAKPiAtCS8q IFNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBhc3NvY2lhdGlv bi4gICovCj4gLQlvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmxvb3AyOwo+IC0Jb3V0bWVzc2FnZS5t c2dfbmFtZWxlbiA9IHNpemVvZihsb29wMik7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YgPSAmb3V0 X2lvdjsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7Cj4gLQlvdXRtZXNzYWdlLm1zZ19j b250cm9sID0gb3V0Y21zZzsKPiAtCW91dG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBzaXplb2Yo b3V0Y21zZyk7Cj4gLQlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gKyAgICAgICAgLyogU2Vu ZCB0aGUgZmlyc3QgbWVzc2FnZS4gIFRoaXMgd2lsbCBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLiAg Ki8KPiArICAgICAgICBvdXRtZXNzYWdlLm1zZ19uYW1lID0gJmxvb3AyOwo+ICsgICAgICAgIG91 dG1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2YobG9vcDIpOwo+ICsgICAgICAgIG91dG1lc3Nh Z2UubXNnX2lvdiA9ICZvdXRfaW92Owo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdmxlbiA9 IDE7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbCA9IG91dGNtc2c7Cj4gKyAgICAg ICAgb3V0bWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihvdXRjbXNnKTsKPiArICAgICAg ICBvdXRtZXNzYWdlLm1zZ19mbGFncyA9IDA7Cj4gICAJY21zZyA9IENNU0dfRklSU1RIRFIoJm91 dG1lc3NhZ2UpOwo+ICAgCWNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7Cj4gICAJY21z Zy0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7Cj4gQEAgLTIwMywzNSArMjAyLDM3IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJb3V0bWVzc2FnZS5tc2dfY29udHJvbGxl biA9IGNtc2ctPmNtc2dfbGVuOwo+ICAgCXNpbmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8g KilDTVNHX0RBVEEoY21zZyk7Cj4gICAJbWVtc2V0KHNpbmZvLCAweDAwLCBzaXplb2Yoc3RydWN0 IHNjdHBfc25kcmN2aW5mbykpOwo+IC0JcHBpZCA9IHJhbmQoKTsJCS8qIENob29zZSBhbiBhcmJp dHJhcnkgdmFsdWUuICovCj4gKwlwcGlkID0gcmFuZCgpOyAvKiBDaG9vc2UgYW4gYXJiaXRyYXJ5 IHZhbHVlLiAqLwo+ICAgCXN0cmVhbSA9IDE7Cj4gICAJc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlk Owo+ICAgCXNpbmZvLT5zaW5mb19zdHJlYW0gPSBzdHJlYW07Cj4gLQlvdXRtZXNzYWdlLm1zZ19p b3YtPmlvdl9iYXNlID0gbWVzc2FnZTsKPiAtCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9 IHN0cmxlbihtZXNzYWdlKSArIDE7Cj4gLQl0ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwg MCwgc3RybGVuKG1lc3NhZ2UpICsgMSk7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92LT5p b3ZfYmFzZSA9IG1lc3NhZ2U7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVu ID0gc3RybGVuKG1lc3NhZ2UpICsgMTsKPiArICAgICAgICB0ZXN0X3NlbmRtc2coc2sxLCAmb3V0 bWVzc2FnZSwgMCwgc3RybGVuKG1lc3NhZ2UpKzEpOwo+ICAgCj4gICAJLyogSW5pdGlhbGl6ZSBp bm1lc3NhZ2UgZm9yIGFsbCByZWNlaXZlcy4gKi8KPiAgIAliaWdfYnVmZmVyID0gdGVzdF9tYWxs b2MoUkVBTExZX0JJRyk7Cj4gLQltZW1zZXQoJmlubWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2Fn ZSkpOwo+IC0JaW92Lmlvdl9iYXNlID0gYmlnX2J1ZmZlcjsKPiAtCWlvdi5pb3ZfbGVuID0gUkVB TExZX0JJRzsKPiAtCWlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKPiAtCWlubWVzc2FnZS5tc2df aW92bGVuID0gMTsKPiAtCWlubWVzc2FnZS5tc2dfY29udHJvbCA9IGluY21zZzsKPiAtCj4gLQkv KiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazIuICAqLwo+IC0JaW5tZXNz YWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVj dm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiArICAgICAgICBtZW1zZXQoJmlu bWVzc2FnZSwgMCwgc2l6ZW9mKGlubWVzc2FnZSkpOwo+ICsgICAgICAgIGlvdi5pb3ZfYmFzZSA9 IGJpZ19idWZmZXI7Cj4gKyAgICAgICAgaW92Lmlvdl9sZW4gPSBSRUFMTFlfQklHOwo+ICsgICAg ICAgIGlubWVzc2FnZS5tc2dfaW92ID0gJmlvdjsKPiArICAgICAgICBpbm1lc3NhZ2UubXNnX2lv dmxlbiA9IDE7Cj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sID0gaW5jbXNnOwo+ICsK PiArICAgICAgICAvKiBHZXQgdGhlIGNvbW11bmljYXRpb24gdXAgbWVzc2FnZSBvbiBzazIuICAq Lwo+ICsgICAgICAgIGlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ ICsgICAgICAgIGVycm9yID0gdGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRB TEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwK PiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCj4gICAJCQkJICAg IFNDVFBfQVNTT0NfQ0hBTkdFLCBTQ1RQX0NPTU1fVVApOwo+ICsjaWYgMAo+ICAgCXNhYyA9IChz dHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKilpb3YuaW92X2Jhc2U7Cj4gICAJYXNzb2NpZDIgPSBz YWMtPnNhY19hc3NvY19pZDsKPiArI2VuZGlmCj4gICAKPiAtCS8qIEdldCB0aGUgY29tbXVuaWNh dGlvbiB1cCBtZXNzYWdlIG9uIHNrMS4gICovCj4gLQlpbm1lc3NhZ2UubXNnX2NvbnRyb2xsZW4g PSBzaXplb2YoaW5jbXNnKTsKPiAtCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMSwgJmlubWVzc2Fn ZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIC8qIEdldCB0aGUgY29tbXVuaWNhdGlvbiB1cCBt ZXNzYWdlIG9uIHNrMS4gICovCj4gKyAgICAgICAgaW5tZXNzYWdlLm1zZ19jb250cm9sbGVuID0g c2l6ZW9mKGluY21zZyk7Cj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2sxLCAmaW5t ZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZp bm1lc3NhZ2UsIGVycm9yLAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hh bmdlKSwKPiAgIAkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfQ09NTV9VUCk7Cj4gQEAg LTI0MywzMSArMjQ0LDMxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gICAJ CQkgICBzaXplb2Yob3JpZ19sZW4pKTsKPiAgIAo+ICAgCWlmIChlcnJvcikKPiAtCQl0c3RfYnJr bShUQlJPSywgTlVMTCwgInNldHNvY2tvcHQoU09fUkNWQlVGKTogJXMiLAo+IC0JCQkgc3RyZXJy b3IoZXJybm8pKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZXRzb2Nrb3B0KFNP X1JDVkJVRik6ICVzIiwKPiArCQkJc3RyZXJyb3IoZXJybm8pKTsKPiAgIAo+IC0JLyogR2V0IHRo ZSBmaXJzdCBkYXRhIG1lc3NhZ2Ugd2hpY2ggd2FzIHNlbnQuICAqLwo+IC0JaW5tZXNzYWdlLm1z Z19jb250cm9sbGVuID0gc2l6ZW9mKGluY21zZyk7Cj4gLQllcnJvciA9IHRlc3RfcmVjdm1zZyhz azIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAtCXRlc3RfY2hlY2tfbXNnX2RhdGEoJmlu bWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSArIDEsCj4gKyAgICAgICAgLyogR2V0IHRo ZSBmaXJzdCBkYXRhIG1lc3NhZ2Ugd2hpY2ggd2FzIHNlbnQuICAqLwo+ICsgICAgICAgIGlubWVz c2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihpbmNtc2cpOwo+ICsgICAgICAgIGVycm9yID0g dGVzdF9yZWN2bXNnKHNrMiwgJmlubWVzc2FnZSwgTVNHX1dBSVRBTEwpOwo+ICsgICAgICAgIHRl c3RfY2hlY2tfbXNnX2RhdGEoJmlubWVzc2FnZSwgZXJyb3IsIHN0cmxlbihtZXNzYWdlKSArIDEs Cj4gICAJCQkgICAgTVNHX0VPUiwgc3RyZWFtLCBwcGlkKTsKPiAgIAo+ICAgCS8qIEZpZ3VyZSBv dXQgaG93IGJpZyB0byBtYWtlIG91ciBmaWxsbXNnICovCj4gICAJbGVuID0gc2l6ZW9mKHN0cnVj dCBzY3RwX3N0YXR1cyk7Cj4gLQltZW1zZXQoJmdzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0 cF9zdGF0dXMpKTsKPiArCW1lbXNldCgmZ3N0YXR1cywwLHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0 dXMpKTsKPiAgIAlnc3RhdHVzLnNzdGF0X2Fzc29jX2lkID0gYXNzb2NpZDE7Cj4gICAJZXJyb3Ig PSBnZXRzb2Nrb3B0KHNrMSwgSVBQUk9UT19TQ1RQLCBTQ1RQX1NUQVRVUywgJmdzdGF0dXMsICZs ZW4pOwo+IC0KPiArCQo+ICAgCWlmIChlcnJvcikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwg ImNhbid0IGdldCByd25kIHNpemU6ICVzIiwKPiAtCQkJIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJ dHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiY2FuJ3QgZ2V0IHJ3bmQgc2l6ZTogJXMiLAo+ICsJ CQlzdHJlcnJvcihlcnJubykpOwo+ICAgCXRzdF9yZXNtKFRJTkZPLCAiQ3JlYXRpbmcgZmlsbG1z ZyBvZiBzaXplICVkIiwKPiAtCQkgZ3N0YXR1cy5zc3RhdF9yd25kICsgUldORF9TTE9QKTsKPiAt CWZpbGxtc2cgPSBtYWxsb2MoZ3N0YXR1cy5zc3RhdF9yd25kICsgUldORF9TTE9QKTsKPiArCQkg Z3N0YXR1cy5zc3RhdF9yd25kK1JXTkRfU0xPUCk7Cj4gKwlmaWxsbXNnID0gbWFsbG9jKGdzdGF0 dXMuc3N0YXRfcnduZCtSV05EX1NMT1ApOwkKPiAgIAo+ICAgCS8qIFNlbmQgYSBmaWxsbXNnICov Cj4gLQlvdXRtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKG91dGNtc2cpOwo+IC0Jb3V0 bWVzc2FnZS5tc2dfZmxhZ3MgPSAwOwo+ICsgICAgICAgIG91dG1lc3NhZ2UubXNnX2NvbnRyb2xs ZW4gPSBzaXplb2Yob3V0Y21zZyk7Cj4gKyAgICAgICAgb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSAw Owo+ICAgCWNtc2cgPSBDTVNHX0ZJUlNUSERSKCZvdXRtZXNzYWdlKTsKPiAgIAljbXNnLT5jbXNn X2xldmVsID0gSVBQUk9UT19TQ1RQOwo+ICAgCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNW Owo+IEBAIC0yNzksMjIgKzI4MCwyMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQo+ICAgCXN0cmVhbSsrOwo+ICAgCXNpbmZvLT5zaW5mb19wcGlkID0gcHBpZDsKPiAgIAlzaW5m by0+c2luZm9fc3RyZWFtID0gc3RyZWFtOwo+IC0JbWVtc2V0KGZpbGxtc2csICdYJywgZ3N0YXR1 cy5zc3RhdF9yd25kICsgUldORF9TTE9QKTsKPiAtCWZpbGxtc2dbZ3N0YXR1cy5zc3RhdF9yd25k ICsgUldORF9TTE9QIC0gMV0gPSAnXDAnOwo+ICsJbWVtc2V0KGZpbGxtc2csICdYJywgZ3N0YXR1 cy5zc3RhdF9yd25kK1JXTkRfU0xPUCk7Cj4gKwlmaWxsbXNnW2dzdGF0dXMuc3N0YXRfcnduZCtS V05EX1NMT1AtMV0gPSAnXDAnOwo+ICAgCW91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2Jhc2UgPSBm aWxsbXNnOwo+IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gZ3N0YXR1cy5zc3RhdF9y d25kICsgUldORF9TTE9QOwo+ICsJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gZ3N0YXR1 cy5zc3RhdF9yd25kK1JXTkRfU0xPUDsKPiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1lID0gTlVMTDsK PiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0gMDsKPiAgIAlzaW5mby0+c2luZm9fYXNzb2Nf aWQgPSBhc3NvY2lkMTsKPiAgIAlzaW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IDA7Cj4gICAJdGVz dF9zZW5kbXNnKHNrMSwgJm91dG1lc3NhZ2UsIE1TR19OT1NJR05BTCwKPiAtCQkgICAgIGdzdGF0 dXMuc3N0YXRfcnduZCArIFJXTkRfU0xPUCk7Cj4gKwkJCSBnc3RhdHVzLnNzdGF0X3J3bmQrUldO RF9TTE9QKTsKPiAgIAo+ICAgCS8qIE5vdyBzZW5kIHRoZSBtZXNzYWdlIHdpdGggdGltZW91dC4g Ki8KPiAgIAlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7Cj4gICAJc2luZm8tPnNpbmZvX3N0cmVh bSA9IHN0cmVhbTsKPiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNlID0gdHRsbXNnOwo+ IC0Jb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gc3RybGVuKHR0bG1zZykgKyAxOwo+ICsg ICAgICAgIG91dG1lc3NhZ2UubXNnX2lvdi0+aW92X2xlbiA9IHN0cmxlbih0dGxtc2cpICsgMTsK PiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1lID0gTlVMTDsKPiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1l bGVuID0gMDsKPiAgIAlzaW5mby0+c2luZm9fYXNzb2NfaWQgPSBhc3NvY2lkMTsKPiBAQCAtMzA3 LDEyICszMDgsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAlzaW5m by0+c2luZm9fcHBpZCA9IHBwaWQ7Cj4gICAJc2luZm8tPnNpbmZvX3N0cmVhbSA9IHN0cmVhbTsK PiAgIAlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9iYXNlID0gbm90dGxtc2c7Cj4gLQlvdXRtZXNz YWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzdHJsZW4obm90dGxtc2cpICsgMTsKPiArICAgICAgICBv dXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzdHJsZW4obm90dGxtc2cpICsgMTsKPiAgIAlv dXRtZXNzYWdlLm1zZ19uYW1lID0gTlVMTDsKPiAgIAlvdXRtZXNzYWdlLm1zZ19uYW1lbGVuID0g MDsKPiAgIAlzaW5mby0+c2luZm9fYXNzb2NfaWQgPSBhc3NvY2lkMTsKPiAgIAlzaW5mby0+c2lu Zm9fdGltZXRvbGl2ZSA9IDA7Cj4gLQl0ZXN0X3NlbmRtc2coc2sxLCAmb3V0bWVzc2FnZSwgTVNH X05PU0lHTkFMLCBzdHJsZW4obm90dGxtc2cpICsgMSk7Cj4gKwl0ZXN0X3NlbmRtc2coc2sxLCAm b3V0bWVzc2FnZSwgTVNHX05PU0lHTkFMLCBzdHJsZW4obm90dGxtc2cpKzEpOwo+ICAgCj4gICAJ dHN0X3Jlc20oVFBBU1MsICJTZW5kIGEgbWVzc2FnZSB3aXRoIG5vIHRpbWVvdXQiKTsKPiAgIAo+ IEBAIC0zMjAsOSArMzIxLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAg IAlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7Cj4gICAJc2luZm8tPnNpbmZvX3N0cmVhbSA9IHN0 cmVhbTsKPiAgIAltZW1zZXQodHRsZnJhZywgJzAnLCBzaXplb2YodHRsZnJhZykpOwo+IC0JdHRs ZnJhZ1tzaXplb2YodHRsZnJhZykgLSAxXSA9ICdcMCc7Cj4gKwl0dGxmcmFnW3NpemVvZih0dGxm cmFnKS0xXSA9ICdcMCc7Cj4gICAJb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfYmFzZSA9IHR0bGZy YWc7Cj4gLQlvdXRtZXNzYWdlLm1zZ19pb3YtPmlvdl9sZW4gPSBzaXplb2YodHRsZnJhZyk7Cj4g KyAgICAgICAgb3V0bWVzc2FnZS5tc2dfaW92LT5pb3ZfbGVuID0gc2l6ZW9mKHR0bGZyYWcpOwo+ ICAgCW91dG1lc3NhZ2UubXNnX25hbWUgPSBOVUxMOwo+ICAgCW91dG1lc3NhZ2UubXNnX25hbWVs ZW4gPSAwOwo+ICAgCXNpbmZvLT5zaW5mb19hc3NvY19pZCA9IGFzc29jaWQxOwo+IEBAIC0zNDYs OCArMzQ3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAllcnJvciA9 IHRlc3RfcmVjdm1zZyhzazIsICZpbm1lc3NhZ2UsIE1TR19XQUlUQUxMKTsKPiAgIAl0ZXN0X2No ZWNrX21zZ19kYXRhKCZpbm1lc3NhZ2UsIGVycm9yLCBzdHJsZW4obm90dGxtc2cpICsgMSwKPiAg IAkJCSAgICBNU0dfRU9SLCBzdHJlYW0sIHBwaWQpOwo+IC0JaWYgKDAgIT0gc3RybmNtcChpb3Yu aW92X2Jhc2UsIG5vdHRsbXNnLCBzdHJsZW4obm90dGxtc2cpICsgMSkpCj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJSZWNlaXZlZCBXcm9uZyBNZXNzYWdlICEhISIpOwo+ICsJaWYgKDAgIT0g c3RybmNtcChpb3YuaW92X2Jhc2UsIG5vdHRsbXNnLCBzdHJsZW4obm90dGxtc2cpKzEpKQo+ICsJ CXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgIlJlY2VpdmVkIFdyb25nIE1lc3NhZ2UgISEhIik7 Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgIlJlY2VpdmUgbWVzc2FnZSB3aXRoIG5vIHRpbWVv dXQiKTsKPiAgIAo+IEBAIC0zNTgsMTAgKzM1OSwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQo+ICAgCWVycm9yID0gdGVzdF9yZWN2bXNnKHNrMSwgJmlubWVzc2FnZSwgTVNH X1dBSVRBTEwpOwo+ICAgCXRlc3RfY2hlY2tfbXNnX25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBl cnJvciwKPiAgIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKSArCj4gLQkJ CQkgICAgc3RybGVuKHR0bG1zZykgKyAxLCBTQ1RQX1NFTkRfRkFJTEVELCAwKTsKPiArCQkJCQkJ CXN0cmxlbih0dGxtc2cpICsgMSwKPiArCQkJCSAgICBTQ1RQX1NFTkRfRkFJTEVELCAwKTsKPiAg IAlzc2YgPSAoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKilpb3YuaW92X2Jhc2U7Cj4gICAJaWYg KDAgIT0gc3RybmNtcCh0dGxtc2csIChjaGFyICopc3NmLT5zc2ZfZGF0YSwgc3RybGVuKHR0bG1z ZykgKyAxKSkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIlNFTkRfRkFJTEVEIGRhdGEgbWlz bWF0Y2giKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJTRU5EX0ZBSUxFRCBkYXRh IG1pc21hdGNoIik7Cj4gICAKPiAgIAl0c3RfcmVzbShUUEFTUywgIlJlY2VpdmUgU0VORF9GQUlM RUQgZm9yIG1lc3NhZ2Ugd2l0aCB0aW1lb3V0Iik7Cj4gICAKPiBAQCAtMzc0LDI5ICszNzYsMzAg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgIAkJZXJyb3IgPSB0ZXN0X3Jl Y3Ztc2coc2sxLCAmaW5tZXNzYWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJCXRlc3RfY2hlY2tfbXNn X25vdGlmaWNhdGlvbigmaW5tZXNzYWdlLCBlcnJvciwKPiAgIAkJCQkJICAgIHNpemVvZihzdHJ1 Y3Qgc2N0cF9zZW5kX2ZhaWxlZCkgKwo+IC0JCQkJCSAgICBTTUFMTF9NQVhTRUcsIFNDVFBfU0VO RF9GQUlMRUQsIDApOwo+ICsJCQkJCQkJCSAgU01BTExfTUFYU0VHLAo+ICsJCQkJCSAgICBTQ1RQ X1NFTkRfRkFJTEVELCAwKTsKPiAgIAkJc3NmID0gKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkICop aW92Lmlvdl9iYXNlOwo+ICAgCQlpZiAoMCAhPSBzdHJuY21wKCZ0dGxmcmFnW29mZnNldF0sIChj aGFyICopc3NmLT5zc2ZfZGF0YSwKPiAgIAkJCQkgU01BTExfTUFYU0VHKSkKPiAtCQkJdHN0X2Jy a20oVEJST0ssIE5VTEwsICJTRU5EX0ZBSUxFRCBkYXRhIG1pc21hdGNoIik7Cj4gKwkJCXRzdF9i cmttKFRCUk9LLCB0c3RfZXhpdCwgIlNFTkRfRkFJTEVEIGRhdGEgbWlzbWF0Y2giKTsKPiAgIAkJ b2Zmc2V0ICs9IFNNQUxMX01BWFNFRzsKPiAtCX0gd2hpbGUgKCEoc3NmLT5zc2ZfaW5mby5zaW5m b19mbGFncyAmIDB4MDEpKTsJLyogTEFTVF9GUkFHICovCj4gKwl9IHdoaWxlICghKHNzZi0+c3Nm X2luZm8uc2luZm9fZmxhZ3MgJiAweDAxKSk7IC8qIExBU1RfRlJBRyAqLwo+ICAgCj4gICAJdHN0 X3Jlc20oVFBBU1MsICJSZWNlaXZlIFNFTkRfRkFJTEVEIGZvciBmcmFnbWVudGVkIG1lc3NhZ2Ug d2l0aCAiCj4gICAJCSAidGltZW91dCIpOwo+ICAgCj4gLQkvKiBTaHV0IGRvd24gdGhlIGxpbmsu ICAqLwo+IC0JY2xvc2Uoc2sxKTsKPiArICAgICAgICAvKiBTaHV0IGRvd24gdGhlIGxpbmsuICAq Lwo+ICsgICAgICAgIGNsb3NlKHNrMSk7Cj4gICAKPiAtCS8qIEdldCB0aGUgc2h1dGRvd24gY29t cGxldGUgbm90aWZpY2F0aW9uLiAqLwo+ICsgICAgICAgIC8qIEdldCB0aGUgc2h1dGRvd24gY29t cGxldGUgbm90aWZpY2F0aW9uLiAqLwo+ICAgCWlubWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNp emVvZihpbmNtc2cpOwo+IC0JZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAmaW5tZXNzYWdlLCBN U0dfV0FJVEFMTCk7Cj4gKyAgICAgICAgZXJyb3IgPSB0ZXN0X3JlY3Ztc2coc2syLCAmaW5tZXNz YWdlLCBNU0dfV0FJVEFMTCk7Cj4gICAJdGVzdF9jaGVja19tc2dfbm90aWZpY2F0aW9uKCZpbm1l c3NhZ2UsIGVycm9yLAo+ICAgCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdl KSwKPiAgIAkJCQkgICAgU0NUUF9BU1NPQ19DSEFOR0UsIFNDVFBfU0hVVERPV05fQ09NUCk7Cj4g ICAKPiAtCWNsb3NlKHNrMik7Cj4gKyAgICAgICAgY2xvc2Uoc2syKTsKPiAgIAo+IC0JLyogSW5k aWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiAtCXRzdF9leGl0KCk7Cj4gKyAgICAg ICAgLyogSW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiAgKi8KPiArICAgICAgICByZXR1 cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9pbmNsdWRl L25ldGluZXQvc2N0cC5oIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9pbmNsdWRlL25ldGluZXQv c2N0cC5oCj4gaW5kZXggZTMwYmZkZi4uNTFmNWJmYiAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMv bmV0d29yay9zY3RwL2luY2x1ZGUvbmV0aW5ldC9zY3RwLmgKPiArKysgYi90ZXN0Y2FzZXMvbmV0 d29yay9zY3RwL2luY2x1ZGUvbmV0aW5ldC9zY3RwLmgKPiBAQCAtMSwxMiArMSwxMiBAQAo+IC0v KiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb246IFVzZXIgQVBJIGV4dGVuc2lv bnMuCj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBleHRlbnNpb25z Lgo+ICAgICoKPiAgICAqIHNjdHAuaAo+ICAgICoKPiAgICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgTEdQTCB2Mi4xIGFzIGRlc2NyaWJlZCBpbgo+IC0gKiAgICBodHRwOi8v d3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLnR4dAo+ICsgKiAgICBodHRwOi8vd3d3LmdudS5v cmcvY29weWxlZnQvbGVzc2VyLnR4dAo+ICAgICoKPiAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IHRoZSB1c2VyIGxpYnJhcnkgdGhhdCBvZmZlcnMgc3VwcG9ydCBmb3IgdGhlCj4gLSAqIFNDVFAg a2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbi4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlz Cj4gKyAqIExpbnV4IEtlcm5lbCBTQ1RQIEltcGxlbWVudGF0aW9uLiBUaGUgbWFpbiBwdXJwb3Nl IG9mIHRoaXMKPiAgICAqIGNvZGUgaXMgdG8gcHJvdmlkZSB0aGUgU0NUUCBTb2NrZXQgQVBJIG1h cHBpbmdzIGZvciB1c2VyCj4gICAgKiBhcHBsaWNhdGlvbiB0byBpbnRlcmZhY2Ugd2l0aCBTQ1RQ IGluIGtlcm5lbC4KPiAgICAqCj4gQEAgLTI3LDYgKzI3LDcgQEAKPiAgICAqICAgIERhaXN5IENo YW5nICAgICAgICAgICAgICA8ZGFpc3ljQHVzLmlibS5jb20+Cj4gICAgKiAgICBJbmFreSBQZXJl ei1Hb256YWxleiAgICAgPGluYWt5LmdvbnphbGV6QGludGVsLmNvbT4KPiAgICAqICAgIFNyaWRo YXIgU2FtdWRyYWxhICAgICAgICA8c3JpQHVzLmlibS5jb20+Cj4gKyAqICAgIFZsYWQgWWFzZXZp Y2gJCTx2bGFkaXNsYXYueWFzZXZpY2hAaHAuY29tPgo+ICAgICovCj4gICAKPiAgICNpZm5kZWYg X19saW51eF9zY3RwX2hfXwo+IEBAIC02MSw2NCArNjIsNTMgQEAgdHlwZWRlZiBfX3MzMiBzY3Rw X2Fzc29jX3Q7Cj4gICAvKiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgY29tZSBmcm9tIHRoZSBTb2Nr ZXRzIEFQSSBFeHRlbnNpb25zIGZvcgo+ICAgICogU0NUUCA8ZHJhZnQtaWV0Zi10c3Z3Zy1zY3Rw c29ja2V0LTA3LnR4dD4uCj4gICAgKi8KPiAtZW51bSBzY3RwX29wdG5hbWUgewo+IC0JU0NUUF9S VE9JTkZPLAo+IC0jZGVmaW5lIFNDVFBfUlRPSU5GTyBTQ1RQX1JUT0lORk8KPiAtCVNDVFBfQVNT T0NJTkZPLAo+IC0jZGVmaW5lIFNDVFBfQVNTT0NJTkZPIFNDVFBfQVNTT0NJTkZPCj4gLQlTQ1RQ X0lOSVRNU0csCj4gLSNkZWZpbmUgU0NUUF9JTklUTVNHIFNDVFBfSU5JVE1TRwo+IC0JU0NUUF9O T0RFTEFZLCAJLyogR2V0L3NldCBub2RlbGF5IG9wdGlvbi4gKi8KPiAtI2RlZmluZSBTQ1RQX05P REVMQVkJU0NUUF9OT0RFTEFZCj4gLQlTQ1RQX0FVVE9DTE9TRSwKPiAtI2RlZmluZSBTQ1RQX0FV VE9DTE9TRSBTQ1RQX0FVVE9DTE9TRQo+IC0JU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFIsCj4g LSNkZWZpbmUgU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFIgU0NUUF9TRVRfUEVFUl9QUklNQVJZ X0FERFIKPiAtCVNDVFBfUFJJTUFSWV9BRERSLAo+IC0jZGVmaW5lIFNDVFBfUFJJTUFSWV9BRERS IFNDVFBfUFJJTUFSWV9BRERSCj4gLQlTQ1RQX0FEQVBUSU9OX0xBWUVSLAo+IC0jZGVmaW5lIFND VFBfQURBUFRJT05fTEFZRVIgU0NUUF9BREFQVElPTl9MQVlFUgo+IC0JU0NUUF9ESVNBQkxFX0ZS QUdNRU5UUywKPiAtI2RlZmluZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTIFNDVFBfRElTQUJMRV9G UkFHTUVOVFMKPiAtCVNDVFBfUEVFUl9BRERSX1BBUkFNUywKPiAtI2RlZmluZSBTQ1RQX1BFRVJf QUREUl9QQVJBTVMgU0NUUF9QRUVSX0FERFJfUEFSQU1TCj4gLQlTQ1RQX0RFRkFVTFRfU0VORF9Q QVJBTSwKPiAtI2RlZmluZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTSBTQ1RQX0RFRkFVTFRfU0VO RF9QQVJBTQo+IC0JU0NUUF9FVkVOVFMsCj4gLSNkZWZpbmUgU0NUUF9FVkVOVFMgU0NUUF9FVkVO VFMKPiAtCVNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAgLyogVHVybiBvbi9vZmYgbWFwcGVk IHY0IGFkZHJlc3NlcyAgKi8KPiAtI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiBT Q1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUgo+IC0JU0NUUF9NQVhTRUcsIAkvKiBHZXQvc2V0IG1h eGltdW0gZnJhZ21lbnQuICovCj4gLSNkZWZpbmUgU0NUUF9NQVhTRUcgCVNDVFBfTUFYU0VHCj4g LQlTQ1RQX1NUQVRVUywKPiAtI2RlZmluZSBTQ1RQX1NUQVRVUyBTQ1RQX1NUQVRVUwo+IC0JU0NU UF9HRVRfUEVFUl9BRERSX0lORk8sCj4gLSNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8g U0NUUF9HRVRfUEVFUl9BRERSX0lORk8KPiAtCj4gLQkvKiBJbnRlcm5hbCBTb2NrZXQgT3B0aW9u cy4gU29tZSBvZiB0aGUgc2N0cCBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUKPiAtCSAqIGltcGxlbWVu dGVkIHVzaW5nIHRoZXNlIHNvY2tldCBvcHRpb25zLgo+IC0JICovCj4gLQlTQ1RQX1NPQ0tPUFRf QklORFhfQUREID0gMTAwLC8qIEJJTkRYIHJlcXVlc3RzIGZvciBhZGRpbmcgYWRkcmVzc2VzLiAq Lwo+IC0jZGVmaW5lIFNDVFBfU09DS09QVF9CSU5EWF9BREQJU0NUUF9TT0NLT1BUX0JJTkRYX0FE RAo+IC0JU0NUUF9TT0NLT1BUX0JJTkRYX1JFTSwgLyogQklORFggcmVxdWVzdHMgZm9yIHJlbW92 aW5nIGFkZHJlc3Nlcy4gKi8KPiAtI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQklORFhfUkVNCVNDVFBf U09DS09QVF9CSU5EWF9SRU0KPiAtCVNDVFBfU09DS09QVF9QRUVMT0ZGLCAJLyogcGVlbCBvZmYg YXNzb2NpYXRpb24uICovCj4gLSNkZWZpbmUgU0NUUF9TT0NLT1BUX1BFRUxPRkYJU0NUUF9TT0NL T1BUX1BFRUxPRkYKPiAtCVNDVFBfR0VUX1BFRVJfQUREUlNfTlVNX09MRCwgCS8qIEdldCBudW1i ZXIgb2YgcGVlciBhZGRyZXNzcy4gKi8KPiAtI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJTX05V TV9PTEQJU0NUUF9HRVRfUEVFUl9BRERSU19OVU1fT0xECj4gLQlTQ1RQX0dFVF9QRUVSX0FERFJT X09MRCwgCS8qIEdldCBhbGwgcGVlciBhZGRyZXNzcy4gKi8KPiAtI2RlZmluZSBTQ1RQX0dFVF9Q RUVSX0FERFJTX09MRAlTQ1RQX0dFVF9QRUVSX0FERFJTX09MRAo+IC0JU0NUUF9HRVRfTE9DQUxf QUREUlNfTlVNX09MRCwgCS8qIEdldCBudW1iZXIgb2YgbG9jYWwgYWRkcmVzc3MuICovCj4gLSNk ZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlNfTlVNX09MRAlTQ1RQX0dFVF9MT0NBTF9BRERSU19O VU1fT0xECj4gLQlTQ1RQX0dFVF9MT0NBTF9BRERSU19PTEQsIAkvKiBHZXQgYWxsIGxvY2FsIGFk ZHJlc3NzLiAqLwo+IC0jZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTX09MRAlTQ1RQX0dFVF9M T0NBTF9BRERSU19PTEQKPiAtCVNDVFBfU09DS09QVF9DT05ORUNUWCwgLyogQ09OTkVDVFggcmVx dWVzdHMuICovCj4gLSNkZWZpbmUgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYCVNDVFBfU09DS09QVF9D T05ORUNUWAo+IC0JU0NUUF9HRVRfUEVFUl9BRERSUywgICAgLyogR2V0IGFsbCBwZWVyIGFkZHJl c3NzLiAqLwo+IC0jZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUlMgICAgIFNDVFBfR0VUX1BFRVJf QUREUlMKPiAtCVNDVFBfR0VUX0xPQ0FMX0FERFJTLCAgIC8qIEdldCBhbGwgbG9jYWwgYWRkcmVz c3MuICovCj4gLSNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUlMgICAgU0NUUF9HRVRfTE9DQUxf QUREUlMKPiAtfTsKPiArI2RlZmluZSBTQ1RQX1JUT0lORk8JMAo+ICsjZGVmaW5lIFNDVFBfQVNT T0NJTkZPICAxCj4gKyNkZWZpbmUgU0NUUF9JTklUTVNHCTIKPiArI2RlZmluZSBTQ1RQX05PREVM QVkJMwkJLyogR2V0L3NldCBub2RlbGF5IG9wdGlvbi4gKi8KPiArI2RlZmluZSBTQ1RQX0FVVE9D TE9TRQk0Cj4gKyNkZWZpbmUgU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFIgNQo+ICsjZGVmaW5l IFNDVFBfUFJJTUFSWV9BRERSCTYKPiArI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fTEFZRVIJNwo+ ICsjZGVmaW5lIFNDVFBfRElTQUJMRV9GUkFHTUVOVFMJOAo+ICsjZGVmaW5lIFNDVFBfUEVFUl9B RERSX1BBUkFNUwk5Cj4gKyNkZWZpbmUgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0JMTAKPiArI2Rl ZmluZSBTQ1RQX0VWRU5UUwkxMQo+ICsjZGVmaW5lIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERS IDEyCS8qIFR1cm4gb24vb2ZmIG1hcHBlZCB2NCBhZGRyZXNzZXMgICovCj4gKyNkZWZpbmUgU0NU UF9NQVhTRUcJMTMJCS8qIEdldC9zZXQgbWF4aW11bSBmcmFnbWVudC4gKi8KPiArI2RlZmluZSBT Q1RQX1NUQVRVUwkxNAo+ICsjZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPCTE1Cj4gKyNk ZWZpbmUgU0NUUF9ERUxBWUVEX0FDS19USU1FCTE2Cj4gKyNkZWZpbmUgU0NUUF9ERUxBWUVEX0FD SyBTQ1RQX0RFTEFZRURfQUNLX1RJTUUKPiArI2RlZmluZSBTQ1RQX0RFTEFZRURfU0FDSyBTQ1RQ X0RFTEFZRURfQUNLX1RJTUUKPiArI2RlZmluZSBTQ1RQX0NPTlRFWFQJMTcKPiArI2RlZmluZSBT Q1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUJMTgKPiArI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZF UllfUE9JTlQJMTkgLyogU2V0L0dldCBwYXJ0aWFsIGRlbGl2ZXJ5IHBvaW50ICovCj4gKyNkZWZp bmUgU0NUUF9NQVhfQlVSU1QJMjAJCS8qIFNldC9HZXQgbWF4IGJ1cnN0ICovCj4gKyNkZWZpbmUg U0NUUF9BVVRIX0NIVU5LCTIxCS8qIFNldCBvbmx5OiBhZGQgYSBjaHVuayB0eXBlIHRvIGF1dGhl bnRpY2F0ZSAqLwo+ICsjZGVmaW5lIFNDVFBfSE1BQ19JREVOVAkyMgo+ICsjZGVmaW5lIFNDVFBf QVVUSF9LRVkJMjMKPiArI2RlZmluZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWQkyNAo+ICsjZGVmaW5l IFNDVFBfQVVUSF9ERUxFVEVfS0VZCTI1Cj4gKyNkZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktT CTI2CS8qIFJlYWQgb25seSAqLwo+ICsjZGVmaW5lIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MJMjcJ LyogUmVhZCBvbmx5ICovCj4gKyNkZWZpbmUgU0NUUF9HRVRfQVNTT0NfTlVNQkVSCTI4CS8qIFJl YWQgb25seSAqLwo+ICsKPiArLyogSW50ZXJuYWwgU29ja2V0IE9wdGlvbnMuIFNvbWUgb2YgdGhl IHNjdHAgbGlicmFyeSBmdW5jdGlvbnMgYXJlCj4gKyAqIGltcGxlbWVudGVkIHVzaW5nIHRoZXNl IHNvY2tldCBvcHRpb25zLgo+ICsgKi8KPiArI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQklORFhfQURE CTEwMAkvKiBCSU5EWCByZXF1ZXN0cyBmb3IgYWRkaW5nIGFkZHJzICovCj4gKyNkZWZpbmUgU0NU UF9TT0NLT1BUX0JJTkRYX1JFTQkxMDEJLyogQklORFggcmVxdWVzdHMgZm9yIHJlbW92aW5nIGFk ZHJzLiAqLwo+ICsjZGVmaW5lIFNDVFBfU09DS09QVF9QRUVMT0ZGCTEwMgkvKiBwZWVsIG9mZiBh c3NvY2lhdGlvbi4gKi8KPiArLyogT3B0aW9ucyAxMDQtMTA2IGFyZSBkZXByZWNhdGVkIGFuZCBy ZW1vdmVkLiBEbyBub3QgdXNlIHRoaXMgc3BhY2UgKi8KPiArI2RlZmluZSBTQ1RQX1NPQ0tPUFRf Q09OTkVDVFhfT0xECTEwNwkvKiBDT05ORUNUWCBvbGQgcmVxdWVzdHMuICovCj4gKyNkZWZpbmUg U0NUUF9HRVRfUEVFUl9BRERSUwkxMDgJCS8qIEdldCBhbGwgcGVlciBhZGRyZXNzcy4gKi8KPiAr I2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9BRERSUwkxMDkJCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVz c3MuICovCj4gKyNkZWZpbmUgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYCTExMAkJLyogQ09OTkVDVFgg cmVxdWVzdHMuICovCj4gKyNkZWZpbmUgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYMwkxMTEJLyogQ09O TkVDVFggcmVxdWVzdHMgKHVwZGF0ZWQpICovCj4gKwo+ICsvKiBTQ1RQIHNvY2tldCBvcHRpb24g dXNlZCB0byByZWFkIHBlciBlbmRwb2ludCBhc3NvY2lhdGlvbiBzdGF0aXN0aWNzLiAqLwo+ICsj ZGVmaW5lIFNDVFBfR0VUX0FTU09DX1NUQVRTICAgIDExMiAgICAgIC8qIFJlYWQgb25seSAqLwo+ ICAgCj4gICAvKgo+ICAgICogNS4yLjEgU0NUUCBJbml0aWF0aW9uIFN0cnVjdHVyZSAoU0NUUF9J TklUKQo+IEBAIC0xNzUsNiArMTY1LDcgQEAgZW51bSBzY3RwX3NpbmZvX2ZsYWdzIHsKPiAgIAlT Q1RQX1VOT1JERVJFRCA9IDEsICAvKiBTZW5kL3JlY2VpdmUgbWVzc2FnZSB1bm9yZGVyZWQuICov Cj4gICAJU0NUUF9BRERSX09WRVIgPSAyLCAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnkgZGVzdGlu YXRpb24uICovCj4gICAJU0NUUF9BQk9SVD00LCAgICAgICAgLyogU2VuZCBhbiBBQk9SVCBtZXNz YWdlIHRvIHRoZSBwZWVyLiAqLwo+ICsJU0NUUF9TQUNLX0lNTUVESUFURUxZID0gOCwgICAgICAv KiBTQUNLIHNob3VsZCBiZSBzZW50IHdpdGhvdXQgZGVsYXkgKi8KPiAgIAlTQ1RQX0VPRj1NU0df RklOLCAgICAvKiBJbml0aWF0ZSBncmFjZWZ1bCBzaHV0ZG93biBwcm9jZXNzLiAqLwo+ICAgfTsK PiAgIAo+IEBAIC0xODgsNyArMTc5LDkgQEAgdHlwZWRlZiB1bmlvbiB7Cj4gICAvKiBUaGVzZSBh cmUgY21zZ190eXBlcy4gICovCj4gICB0eXBlZGVmIGVudW0gc2N0cF9jbXNnX3R5cGUgewo+ICAg CVNDVFBfSU5JVCwgICAgICAgICAgICAgIC8qIDUuMi4xIFNDVFAgSW5pdGlhdGlvbiBTdHJ1Y3R1 cmUgKi8KPiArI2RlZmluZSBTQ1RQX0lOSVQgU0NUUF9JTklUCj4gICAJU0NUUF9TTkRSQ1YsICAg ICAgICAgICAgLyogNS4yLjIgU0NUUCBIZWFkZXIgSW5mb3JtYXRpb24gU3RydWN0dXJlICovCj4g KyNkZWZpbmUgU0NUUF9TTkRSQ1YgU0NUUF9TTkRSQ1YKPiAgIH0gc2N0cF9jbXNnX3Q7Cj4gICAK PiAgIAo+IEBAIC0yMTAsNiArMjAzLDcgQEAgc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlIHsKPiAg IAlfX3UxNiBzYWNfb3V0Ym91bmRfc3RyZWFtczsKPiAgIAlfX3UxNiBzYWNfaW5ib3VuZF9zdHJl YW1zOwo+ICAgCXNjdHBfYXNzb2NfdCBzYWNfYXNzb2NfaWQ7Cj4gKwlfX3U4IHNhY19pbmZvWzBd Owo+ICAgfTsKPiAgIAo+ICAgLyoKPiBAQCAtMjU4LDYgKzI1Miw3IEBAIGVudW0gc2N0cF9zcGNf c3RhdGUgewo+ICAgCVNDVFBfQUREUl9SRU1PVkVELAo+ICAgCVNDVFBfQUREUl9BRERFRCwKPiAg IAlTQ1RQX0FERFJfTUFERV9QUklNLAo+ICsJU0NUUF9BRERSX0NPTkZJUk1FRCwKPiAgIH07Cj4g ICAKPiAgIAo+IEBAIC0zMjgsMjUgKzMyMywyNSBAQCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVu dCB7Cj4gICB9Owo+ICAgCj4gICAvKgo+IC0gKiA1LjMuMS42IFNDVFBfQURBUFRJT05fSU5ESUNB VElPTgo+ICsgKiA1LjMuMS42IFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OCj4gICAgKgo+IC0g KiAgIFdoZW4gYSBwZWVyIHNlbmRzIGEgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdGlvbiBwYXJhbWV0 ZXIgLCBTQ1RQCj4gKyAqICAgV2hlbiBhIHBlZXIgc2VuZHMgYSBBZGFwdGF0aW9uIExheWVyIElu ZGljYXRpb24gcGFyYW1ldGVyICwgU0NUUAo+ICAgICogICBkZWxpdmVycyB0aGlzIG5vdGlmaWNh dGlvbiB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uCj4gLSAqICAgdGhhdCBvZiB0aGUgcGVlcnMg cmVxdWVzdGVkIGFkYXB0aW9uIGxheWVyLgo+ICsgKiAgIHRoYXQgb2YgdGhlIHBlZXJzIHJlcXVl c3RlZCBhZGFwdGF0aW9uIGxheWVyLgo+ICAgICovCj4gLXN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2 ZW50IHsKPiArc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCB7Cj4gICAJX191MTYgc2FpX3R5 cGU7Cj4gICAJX191MTYgc2FpX2ZsYWdzOwo+ICAgCV9fdTMyIHNhaV9sZW5ndGg7Cj4gLQlfX3Uz MiBzYWlfYWRhcHRpb25faW5kOwo+ICsJX191MzIgc2FpX2FkYXB0YXRpb25faW5kOwo+ICAgCXNj dHBfYXNzb2NfdCBzYWlfYXNzb2NfaWQ7Cj4gICB9Owo+ICAgCj4gICAvKgo+ICAgICogNS4zLjEu NyBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQKPiAgICAqCj4gLSAqICAgV2hlbiBhIHJlY2ll dmVyIGlzIGVuZ2FnZWQgaW4gYSBwYXJ0aWFsIGRlbGl2ZXJ5IG9mIGEKPiAtICogICBtZXNzYWdl IHRoaXMgbm90aWZpY2F0aW9uIHdpbGwgYmUgdXNlZCB0byBpbmlkaWNhdGUKPiArICogICBXaGVu IGEgcmVjZWl2ZXIgaXMgZW5nYWdlZCBpbiBhIHBhcnRpYWwgZGVsaXZlcnkgb2YgYQo+ICsgKiAg IG1lc3NhZ2UgdGhpcyBub3RpZmljYXRpb24gd2lsbCBiZSB1c2VkIHRvIGluZGljYXRlCj4gICAg KiAgIHZhcmlvdXMgZXZlbnRzLgo+ICAgICovCj4gICBzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCB7 Cj4gQEAgLTM2MCw2ICszNTUsMzIgQEAgc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgewo+ICAgZW51 bSB7IFNDVFBfUEFSVElBTF9ERUxJVkVSWV9BQk9SVEVEPTAsIH07Cj4gICAKPiAgIC8qCj4gKyog NS4zLjEuOC4gIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKPiArKgo+ICsqICBXaGVuIGEgcmVj ZWl2ZXIgaXMgdXNpbmcgYXV0aGVudGljYXRpb24gdGhpcyBtZXNzYWdlIHdpbGwgcHJvdmlkZQo+ ICsqICBub3RpZmljYXRpb25zIHJlZ2FyZGluZyBuZXcga2V5cyBiZWluZyBtYWRlIGFjdGl2ZSBh cyB3ZWxsIGFzIGVycm9ycy4KPiArKi8KPiArCj4gK3N0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQg ewo+ICsJX191MTYgYXV0aF90eXBlOwo+ICsJX191MTYgYXV0aF9mbGFnczsKPiArCV9fdTMyIGF1 dGhfbGVuZ3RoOwo+ICsJX191MTYgYXV0aF9rZXludW1iZXI7Cj4gKwlfX3UxNiBhdXRoX2FsdGtl eW51bWJlcjsKPiArCV9fdTMyIGF1dGhfaW5kaWNhdGlvbjsKPiArCXNjdHBfYXNzb2NfdCBhdXRo X2Fzc29jX2lkOwo+ICt9Owo+ICsKPiArZW51bSB7IFNDVFBfQVVUSF9ORVdLRVkgPSAwLCB9Owo+ ICsKPiArc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCB7Cj4gKyAgICAgICBfX3UxNiBzZW5k ZXJfZHJ5X3R5cGU7Cj4gKyAgICAgICBfX3UxNiBzZW5kZXJfZHJ5X2ZsYWdzOwo+ICsgICAgICAg X191MzIgc2VuZGVyX2RyeV9sZW5ndGg7Cj4gKyAgICAgICBzY3RwX2Fzc29jX3Qgc2VuZGVyX2Ry eV9hc3NvY19pZDsKPiArfTsKPiArCj4gKy8qCj4gICAgKiBEZXNjcmliZWQgaW4gU2VjdGlvbiA3 LjMKPiAgICAqICAgQW5jaWxsYXJ5IERhdGEgYW5kIE5vdGlmaWNhdGlvbiBJbnRlcmVzdCBPcHRp b25zCj4gICAgKi8KPiBAQCAtMzcxLDcgKzM5Miw5IEBAIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNj cmliZSB7Cj4gICAJX191OCBzY3RwX3BlZXJfZXJyb3JfZXZlbnQ7Cj4gICAJX191OCBzY3RwX3No dXRkb3duX2V2ZW50Owo+ICAgCV9fdTggc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50Owo+IC0J X191OCBzY3RwX2FkYXB0aW9uX2xheWVyX2V2ZW50Owo+ICsJX191OCBzY3RwX2FkYXB0YXRpb25f bGF5ZXJfZXZlbnQ7Cj4gKwlfX3U4IHNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQ7Cj4gKwlfX3U4 IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKPiAgIH07Cj4gICAKPiAgIC8qCj4gQEAgLTM5Miw4ICs0 MTUsMTAgQEAgdW5pb24gc2N0cF9ub3RpZmljYXRpb24gewo+ICAgCXN0cnVjdCBzY3RwX3JlbW90 ZV9lcnJvciBzbl9yZW1vdGVfZXJyb3I7Cj4gICAJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgc25f c2VuZF9mYWlsZWQ7Cj4gICAJc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgc25fc2h1dGRvd25f ZXZlbnQ7Cj4gLQlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCBzbl9hZGFwdGlvbl9ldmVudDsK PiArCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlvbl9ldmVudDsKPiAg IAlzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCBzbl9wZGFwaV9ldmVudDsKPiArCXN0cnVjdCBzY3Rw X2F1dGhrZXlfZXZlbnQgc25fYXV0aGtleV9ldmVudDsKPiArCXN0cnVjdCBzY3RwX3NlbmRlcl9k cnlfZXZlbnQgc25fc2VuZGVyX2RyeV9ldmVudDsKPiAgIH07Cj4gICAKPiAgIC8qIFNlY3Rpb24g NS4zLjEKPiBAQCAtNDA0LDEyICs0MjksMjMgQEAgdW5pb24gc2N0cF9ub3RpZmljYXRpb24gewo+ ICAgZW51bSBzY3RwX3NuX3R5cGUgewo+ICAgCVNDVFBfU05fVFlQRV9CQVNFICAgICA9ICgxPDwx NSksCj4gICAJU0NUUF9BU1NPQ19DSEFOR0UsCj4gKyNkZWZpbmUgU0NUUF9BU1NPQ19DSEFOR0Ug U0NUUF9BU1NPQ19DSEFOR0UKPiAgIAlTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCj4gKyNkZWZpbmUg U0NUUF9QRUVSX0FERFJfQ0hBTkdFIFNDVFBfUEVFUl9BRERSX0NIQU5HRQo+ICAgCVNDVFBfU0VO RF9GQUlMRUQsCj4gKyNkZWZpbmUgU0NUUF9TRU5EX0ZBSUxFRCBTQ1RQX1NFTkRfRkFJTEVECj4g ICAJU0NUUF9SRU1PVEVfRVJST1IsCj4gKyNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgU0NUUF9S RU1PVEVfRVJST1IKPiAgIAlTQ1RQX1NIVVRET1dOX0VWRU5ULAo+ICsjZGVmaW5lIFNDVFBfU0hV VERPV05fRVZFTlQgU0NUUF9TSFVURE9XTl9FVkVOVAo+ICAgCVNDVFBfUEFSVElBTF9ERUxJVkVS WV9FVkVOVCwKPiAtCVNDVFBfQURBUFRJT05fSU5ESUNBVElPTiwKPiArI2RlZmluZSBTQ1RQX1BB UlRJQUxfREVMSVZFUllfRVZFTlQgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UCj4gKwlTQ1RQ X0FEQVBUQVRJT05fSU5ESUNBVElPTiwKPiArI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNB VElPTiBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTgo+ICsJU0NUUF9BVVRIRU5USUNBVElPTl9J TkRJQ0FUSU9OLAo+ICsjZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT05fSU5ESUNBVElPTiBTQ1RQ X0FVVEhFTlRJQ0FUSU9OX0lORElDQVRJT04KPiArCVNDVFBfU0VOREVSX0RSWV9FVkVOVCwKPiAr I2RlZmluZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQgU0NUUF9TRU5ERVJfRFJZX0VWRU5UCj4gICB9 Owo+ICAgCj4gICAvKiBOb3RpZmljYXRpb24gZXJyb3IgY29kZXMgdXNlZCB0byBmaWxsIHVwIHRo ZSBlcnJvciBmaWVsZHMgaW4gc29tZQo+IEBAIC00MzQsNyArNDcwLDcgQEAgdHlwZWRlZiBlbnVt IHNjdHBfc25fZXJyb3Igewo+ICAgICoKPiAgICAqICAgVGhlIHByb3RvY29sIHBhcmFtZXRlcnMg dXNlZCB0byBpbml0aWFsaXplIGFuZCBib3VuZCByZXRyYW5zbWlzc2lvbgo+ICAgICogICB0aW1l b3V0IChSVE8pIGFyZSB0dW5hYmxlLiAgU2VlIFtTQ1RQXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBv biBob3cKPiAtICogICB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIFJUTyBjYWxjdWxhdGlv bi4KPiArICogICB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIFJUTyBjYWxjdWxhdGlvbi4K PiAgICAqLwo+ICAgc3RydWN0IHNjdHBfcnRvaW5mbyB7Cj4gICAJc2N0cF9hc3NvY190CXNydG9f YXNzb2NfaWQ7Cj4gQEAgLTQ3OSwxOSArNTE1LDIyIEBAIHN0cnVjdCBzY3RwX3NldHBlZXJwcmlt IHsKPiAgICAqICBhc3NvY2lhdGlvbiBwZWVyJ3MgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIHN0 cnVjdHVyZSBpcyB1c2VkIHRvCj4gICAgKiAgbWFrZSBhIHNldCBwZWVyIHByaW1hcnkgcmVxdWVz dDoKPiAgICAqLwo+IC1zdHJ1Y3Qgc2N0cF9wcmltIHsKPiArc3RydWN0IHNjdHBfc2V0cHJpbSB7 Cj4gICAJc2N0cF9hc3NvY190ICAgICAgICAgICAgc3NwX2Fzc29jX2lkOwo+ICAgCXN0cnVjdCBz b2NrYWRkcl9zdG9yYWdlIHNzcF9hZGRyOwo+ICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFs aWduZWQoNCkpKTsKPiAgIAo+ICsvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB1c2UsIGRl ZmluZSB0aGUgb2xkIG5hbWUgdG9vICovCj4gKyNkZWZpbmUgc2N0cF9wcmltIHNjdHBfc2V0cHJp bQo+ICsKPiAgIC8qCj4gLSAqIDcuMS4xMSBTZXQgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdG9yIChT Q1RQX0FEQVBUSU9OX0xBWUVSKQo+ICsgKiA3LjEuMTEgU2V0IEFkYXB0YXRpb24gTGF5ZXIgSW5k aWNhdG9yIChTQ1RQX0FEQVBUQVRJT05fTEFZRVIpCj4gICAgKgo+IC0gKiBSZXF1ZXN0cyB0aGF0 IHRoZSBsb2NhbCBlbmRwb2ludCBzZXQgdGhlIHNwZWNpZmllZCBBZGFwdGlvbiBMYXllcgo+ICsg KiBSZXF1ZXN0cyB0aGF0IHRoZSBsb2NhbCBlbmRwb2ludCBzZXQgdGhlIHNwZWNpZmllZCBBZGFw dGF0aW9uIExheWVyCj4gICAgKiBJbmRpY2F0aW9uIHBhcmFtZXRlciBmb3IgYWxsIGZ1dHVyZSBJ TklUIGFuZCBJTklULUFDSyBleGNoYW5nZXMuCj4gICAgKi8KPiAtc3RydWN0IHNjdHBfc2V0YWRh cHRpb24gewo+IC0JX191MzIJc3NiX2FkYXB0aW9uX2luZDsKPiArc3RydWN0IHNjdHBfc2V0YWRh cHRhdGlvbiB7Cj4gKwlfX3UzMglzc2JfYWRhcHRhdGlvbl9pbmQ7Cj4gICB9Owo+ICAgCj4gICAv Kgo+IEBAIC01MDQsMTQgKzU0MywxMTAgQEAgc3RydWN0IHNjdHBfc2V0YWRhcHRpb24gewo+ICAg ICogICB1bnJlYWNoYWJsZS4gVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBhY2Nl c3MgYW5kIG1vZGlmeSBhbgo+ICAgICogICBhZGRyZXNzJ3MgcGFyYW1ldGVyczoKPiAgICAqLwo+ ICtlbnVtICBzY3RwX3NwcF9mbGFncyB7Cj4gKwlTUFBfSEJfRU5BQkxFID0gMTw8MCwJCS8qRW5h YmxlIGhlYXJ0YmVhdHMqLwo+ICsJU1BQX0hCX0RJU0FCTEUgPSAxPDwxLAkJLypEaXNhYmxlIGhl YXJ0YmVhdHMqLwo+ICsJU1BQX0hCID0gU1BQX0hCX0VOQUJMRSB8IFNQUF9IQl9ESVNBQkxFLAo+ ICsJU1BQX0hCX0RFTUFORCA9IDE8PDIsCQkvKlNlbmQgaGVhcnRiZWF0IGltbWVkaWF0ZWx5Ki8K PiArCVNQUF9QTVRVRF9FTkFCTEUgPSAxPDwzLAkvKkVuYWJsZSBQTVRVIGRpc2NvdmVyeSovCj4g KwlTUFBfUE1UVURfRElTQUJMRSA9IDE8PDQsCS8qRGlzYWJsZSBQTVRVIGRpc2NvdmVyeSovCj4g KwlTUFBfUE1UVUQgPSBTUFBfUE1UVURfRU5BQkxFIHwgU1BQX1BNVFVEX0RJU0FCTEUsCj4gKwlT UFBfU0FDS0RFTEFZX0VOQUJMRSA9IDE8PDUsCS8qRW5hYmxlIFNBQ0sqLwo+ICsJU1BQX1NBQ0tE RUxBWV9ESVNBQkxFID0gMTw8NiwJLypEaXNhYmxlIFNBQ0sqLwo+ICsJU1BQX1NBQ0tERUxBWSA9 IFNQUF9TQUNLREVMQVlfRU5BQkxFIHwgU1BQX1NBQ0tERUxBWV9ESVNBQkxFLAo+ICsJU1BQX0hC X1RJTUVfSVNfWkVSTyA9IDE8PDcsCS8qIFNldCBIQiBkZWxheSB0byAwICovCj4gK307Cj4gKwo+ ICAgc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgewo+ICAgCXNjdHBfYXNzb2NfdAkJc3BwX2Fzc29j X2lkOwo+ICAgCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCXNwcF9hZGRyZXNzOwo+ICAgCV9fdTMy CQkJc3BwX2hiaW50ZXJ2YWw7Cj4gICAJX191MTYJCQlzcHBfcGF0aG1heHJ4dDsKPiArCV9fdTMy CQkJc3BwX3BhdGhtdHU7Cj4gKwlfX3UzMgkJCXNwcF9zYWNrZGVsYXk7Cj4gKwlfX3UzMgkJCXNw cF9mbGFnczsKPiAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7Cj4gICAK PiAgIC8qCj4gKyAqIDcuMS4xOC4gIEFkZCBhIGNodW5rIHRoYXQgbXVzdCBiZSBhdXRoZW50aWNh dGVkIChTQ1RQX0FVVEhfQ0hVTkspCj4gKyAqCj4gKyAqIFRoaXMgc2V0IG9wdGlvbiBhZGRzIGEg Y2h1bmsgdHlwZSB0aGF0IHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdG8gYmUKPiArICogcmVjZWl2 ZWQgb25seSBpbiBhbiBhdXRoZW50aWNhdGVkIHdheS4gIENoYW5nZXMgdG8gdGhlIGxpc3Qgb2Yg Y2h1bmtzCj4gKyAqIHdpbGwgb25seSBlZmZlY3QgZnV0dXJlIGFzc29jaWF0aW9ucyBvbiB0aGUg c29ja2V0Lgo+ICsgKi8KPiArc3RydWN0IHNjdHBfYXV0aGNodW5rIHsKPiArCV9fdTgJCXNhdXRo X2NodW5rOwo+ICt9Owo+ICsKPiArLyoKPiArICogNy4xLjE5LiAgR2V0IG9yIHNldCB0aGUgbGlz dCBvZiBzdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVycyAoU0NUUF9ITUFDX0lERU5UKQo+ICsgKgo+ ICsgKiBUaGlzIG9wdGlvbiBnZXRzIG9yIHNldHMgdGhlIGxpc3Qgb2YgSE1BQyBhbGdvcml0aG1z IHRoYXQgdGhlIGxvY2FsCj4gKyAqIGVuZHBvaW50IHJlcXVpcmVzIHRoZSBwZWVyIHRvIHVzZS4K PiArKi8KPiArCj4gK2VudW0gewo+ICsJU0NUUF9BVVRIX0hNQUNfSURfU0hBMSA9IDEsCj4gKwlT Q1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYgPSAzLAo+ICt9Owo+ICsKPiArc3RydWN0IHNjdHBfaG1h Y2FsZ28gewo+ICsJX191MzIJCXNobWFjX251bWJlcl9vZl9pZGVudHM7Cj4gKwlfX3UxNgkJc2ht YWNfaWRlbnRzW107Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiA3LjEuMjAuICBTZXQgYSBzaGFyZWQg a2V5IChTQ1RQX0FVVEhfS0VZKQo+ICsgKgo+ICsgKiBUaGlzIG9wdGlvbiB3aWxsIHNldCBhIHNo YXJlZCBzZWNyZXQga2V5IHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgYW4KPiArICogYXNzb2NpYXRp b24gc2hhcmVkIGtleS4KPiArICovCj4gK3N0cnVjdCBzY3RwX2F1dGhrZXkgewo+ICsJc2N0cF9h c3NvY190CXNjYV9hc3NvY19pZDsKPiArCV9fdTE2CQlzY2Ffa2V5bnVtYmVyOwo+ICsJX191MTYJ CXNjYV9rZXlsZW5ndGg7Cj4gKwlfX3U4CQlzY2Ffa2V5W107Cj4gK307Cj4gKwo+ICsvKgo+ICsg KiA3LjEuMjEuICBHZXQgb3Igc2V0IHRoZSBhY3RpdmUgc2hhcmVkIGtleSAoU0NUUF9BVVRIX0FD VElWRV9LRVkpCj4gKyAqCj4gKyAqIFRoaXMgb3B0aW9uIHdpbGwgZ2V0IG9yIHNldCB0aGUgYWN0 aXZlIHNoYXJlZCBrZXkgdG8gYmUgdXNlZCB0byBidWlsZAo+ICsgKiB0aGUgYXNzb2NpYXRpb24g c2hhcmVkIGtleS4KPiArICovCj4gKwo+ICtzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgewo+ICsJc2N0 cF9hc3NvY190CXNjYWN0X2Fzc29jX2lkOwo+ICsJX191MTYJCXNjYWN0X2tleW51bWJlcjsKPiAr fTsKPiArCj4gKwo+ICsvKgo+ICsgKiA3LjEuMjMuICBHZXQgb3Igc2V0IGRlbGF5ZWQgYWNrIHRp bWVyIChTQ1RQX0RFTEFZRURfU0FDSykKPiArICoKPiArICogVGhpcyBvcHRpb24gd2lsbCBlZmZl Y3QgdGhlIHdheSBkZWxheWVkIGFja3MgYXJlIHBlcmZvcm1lZC4gIFRoaXMKPiArICogb3B0aW9u IGFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgZGVsYXllZCBhY2sgdGltZSwgaW4KPiArICog bWlsbGlzZWNvbmRzLiAgSXQgYWxzbyBhbGxvd3MgY2hhbmdpbmcgdGhlIGRlbGF5ZWQgYWNrIGZy ZXF1ZW5jeS4KPiArICogQ2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSB0byAxIGRpc2FibGVzIHRoZSBk ZWxheWVkIHNhY2sgYWxnb3JpdGhtLiAgSWYKPiArICogdGhlIGFzc29jX2lkIGlzIDAsIHRoZW4g dGhpcyBzZXRzIG9yIGdldHMgdGhlIGVuZHBvaW50cyBkZWZhdWx0Cj4gKyAqIHZhbHVlcy4gIElm IHRoZSBhc3NvY19pZCBmaWVsZCBpcyBub24temVybywgdGhlbiB0aGUgc2V0IG9yIGdldAo+ICsg KiBlZmZlY3RzIHRoZSBzcGVjaWZpZWQgYXNzb2NpYXRpb24gZm9yIHRoZSBvbmUgdG8gbWFueSBt b2RlbCAodGhlCj4gKyAqIGFzc29jX2lkIGZpZWxkIGlzIGlnbm9yZWQgYnkgdGhlIG9uZSB0byBv bmUgbW9kZWwpLiAgTm90ZSB0aGF0IGlmCj4gKyAqIHNhY2tfZGVsYXkgb3Igc2Fja19mcmVxIGFy ZSAwIHdoZW4gc2V0dGluZyB0aGlzIG9wdGlvbiwgdGhlbiB0aGUKPiArICogY3VycmVudCB2YWx1 ZXMgd2lsbCByZW1haW4gdW5jaGFuZ2VkLgo+ICsgKi8KPiArc3RydWN0IHNjdHBfc2Fja19pbmZv IHsKPiArCXNjdHBfYXNzb2NfdAlzYWNrX2Fzc29jX2lkOwo+ICsJdWludDMyX3QJc2Fja19kZWxh eTsKPiArCXVpbnQzMl90CXNhY2tfZnJlcTsKPiArfTsKPiArCj4gK3N0cnVjdCBzY3RwX2Fzc29j X3ZhbHVlIHsKPiArICAgIHNjdHBfYXNzb2NfdCAgICAgICAgICAgIGFzc29jX2lkOwo+ICsgICAg dWludDMyX3QgICAgICAgICAgICAgICAgYXNzb2NfdmFsdWU7Cj4gK307Cj4gKwo+ICsvKgo+ICAg ICogNy4yLjIgUGVlciBBZGRyZXNzIEluZm9ybWF0aW9uCj4gICAgKgo+ICAgICogICBBcHBsaWNh dGlvbnMgY2FuIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgcGVlciBhZGRy ZXNzCj4gQEAgLTUzMSw5ICs2NjYsMjAgQEAgc3RydWN0IHNjdHBfcGFkZHJpbmZvIHsKPiAgIH0g X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7Cj4gICAKPiAgIC8qIFBlZXIgYWRk cmVzc2VzJ3Mgc3RhdGUuICovCj4gKy8qIFVOS05PV046IFBlZXIgYWRkcmVzcyBwYXNzZWQgYnkg dGhlIHVwcGVyIGxheWVyIGluIHNlbmRtc2cgb3IgY29ubmVjdFt4XQo+ICsgKiBjYWxscy4KPiAr ICogVU5DT05GSVJNRUQ6IFBlZXIgYWRkcmVzcyByZWNlaXZlZCBpbiBJTklUL0lOSVQtQUNLIGFk ZHJlc3MgcGFyYW1ldGVycy4KPiArICogICAgICAgICAgICAgIE5vdCB5ZXQgY29uZmlybWVkIGJ5 IGEgaGVhcnRiZWF0IGFuZCBub3QgYXZhaWxhYmxlIGZvciBkYXRhCj4gKyAqCQl0cmFuc2ZlcnMu Cj4gKyAqIEFDVElWRSA6IFBlZXIgYWRkcmVzcyBjb25maXJtZWQsIGFjdGl2ZSBhbmQgYXZhaWxh YmxlIGZvciBkYXRhIHRyYW5zZmVycy4KPiArICogSU5BQ1RJVkU6IFBlZXIgYWRkcmVzcyBpbmFj dGl2ZSBhbmQgbm90IGF2YWlsYWJsZSBmb3IgZGF0YSB0cmFuc2ZlcnMuCj4gKyAqLwo+ICAgZW51 bSBzY3RwX3NwaW5mb19zdGF0ZSB7Cj4gICAJU0NUUF9JTkFDVElWRSwKPiArCVNDVFBfUEYsCj4g ICAJU0NUUF9BQ1RJVkUsCj4gKwlTQ1RQX1VOQ09ORklSTUVELAo+ICsJU0NUUF9VTktOT1dOID0g MHhmZmZmCj4gICB9Owo+ICAgCj4gICAvKgo+IEBAIC01NTcsNiArNzAzLDIzIEBAIHN0cnVjdCBz Y3RwX3N0YXR1cyB7Cj4gICAJc3RydWN0IHNjdHBfcGFkZHJpbmZvCXNzdGF0X3ByaW1hcnk7Cj4g ICB9Owo+ICAgCj4gKy8qCj4gKyAqIDcuMi4zLiAgR2V0IHRoZSBsaXN0IG9mIGNodW5rcyB0aGUg cGVlciByZXF1aXJlcyB0byBiZSBhdXRoZW50aWNhdGVkCj4gKyAqICAgICAgICAgKFNDVFBfUEVF Ul9BVVRIX0NIVU5LUykKPiArICoKPiArICogVGhpcyBvcHRpb24gZ2V0cyBhIGxpc3Qgb2YgY2h1 bmtzIGZvciBhIHNwZWNpZmllZCBhc3NvY2lhdGlvbiB0aGF0Cj4gKyAqIHRoZSBwZWVyIHJlcXVp cmVzIHRvIGJlIHJlY2VpdmVkIGF1dGhlbnRpY2F0ZWQgb25seS4KPiArICovCj4gK3N0cnVjdCBz Y3RwX2F1dGhjaHVua3Mgewo+ICsJc2N0cF9hc3NvY190CWdhdXRoX2Fzc29jX2lkOwo+ICsJX191 MzIJCWdhdXRoX251bWJlcl9vZl9jaHVua3M7Cj4gKwl1aW50OF90CQlnYXV0aF9jaHVua3NbXTsK PiArfTsKPiArLyogVGhlIGJyb2tlbiBzcGVsbGluZyBoYXMgYmVlbiByZWxlYXNlZCBhbHJlYWR5 LAo+ICsgKiBzbyBkb24ndCBicmVhayBhbnlvbmUsIG5vdyB0aGF0IGl0J3MgZml4ZWQuCj4gKyAq Lwo+ICsjZGVmaW5lIGd1dGhfbnVtYmVyX29mX2NodW5rcyBnYXV0aF9udW1iZXJfb2ZfY2h1bmtz Cj4gKwo+ICAgLyogQXNzb2NpYXRpb24gc3RhdGVzLiAgKi8KPiAgIGVudW0gc2N0cF9zc3RhdF9z dGF0ZSB7Cj4gICAJU0NUUF9FTVBUWSAgICAgICAgICAgICAgICA9IDAsCj4gQEAgLTU3NCw3ICs3 MzcsNyBAQCBlbnVtIHNjdHBfc3N0YXRfc3RhdGUgewo+ICAgICogOC4zLCA4LjUgZ2V0IGFsbCBw ZWVyL2xvY2FsIGFkZHJlc3NlcyBpbiBhbiBhc3NvY2lhdGlvbi4KPiAgICAqIFRoaXMgcGFyYW1l dGVyIHN0cnVjdCBpcyB1c2VkIGJ5IFNDVFBfR0VUX1BFRVJfQUREUlMgYW5kCj4gICAgKiBTQ1RQ X0dFVF9MT0NBTF9BRERSUyBzb2NrZXQgb3B0aW9ucyB1c2VkIGludGVybmFsbHkgdG8gaW1wbGVt ZW50Cj4gLSAqIHNjdHBfZ2V0cGFkZHJzKCkgYW5kIHNjdHBfZ2V0bGFkZHJzKCkgQVBJLgo+ICsg KiBzY3RwX2dldHBhZGRycygpIGFuZCBzY3RwX2dldGxhZGRycygpIEFQSS4KPiAgICAqLwo+ICAg c3RydWN0IHNjdHBfZ2V0YWRkcnNfb2xkIHsKPiAgIAlzY3RwX2Fzc29jX3QgICAgICAgICAgICBh c3NvY19pZDsKPiBAQCAtNTgyLDkgKzc0NSwzNSBAQCBzdHJ1Y3Qgc2N0cF9nZXRhZGRyc19vbGQg ewo+ICAgCXN0cnVjdCBzb2NrYWRkcgkJKmFkZHJzOwo+ICAgfTsKPiAgIHN0cnVjdCBzY3RwX2dl dGFkZHJzIHsKPiAtCXNjdHBfYXNzb2NfdCAgICAgICAgICAgIGFzc29jX2lkOyAvKmlucHV0Ki8K PiAtCV9fdTMyICAgICAgICAgICAgICAgICAgIGFkZHJfbnVtOyAvKm91dHB1dCovCj4gLQlfX3U4 ICAgICAgICAgICAgICAgICAgICBhZGRyc1swXTsgLypvdXRwdXQsIHZhcmlhYmxlIHNpemUqLwo+ ICsJc2N0cF9hc3NvY190CQlhc3NvY19pZDsgLyppbnB1dCovCj4gKwlfX3UzMgkJCWFkZHJfbnVt OyAvKm91dHB1dCovCj4gKwlfX3U4CQkJYWRkcnNbMF07IC8qb3V0cHV0LCB2YXJpYWJsZSBzaXpl Ki8KPiArfTsKPiArCj4gKy8qIEEgc29ja2V0IHVzZXIgcmVxdWVzdCBvYnRhaW5lZCB2aWEgU0NU UF9HRVRfQVNTT0NfU1RBVFMgdGhhdCByZXRyaWV2ZXMKPiArICogYXNzb2NpYXRpb24gc3RhdHMu IEFsbCBzdGF0cyBhcmUgY291bnRzIGV4Y2VwdCBzYXNfbWF4cnRvIGFuZAo+ICsgKiBzYXNfb2Jz X3J0b19pcGFkZHIuIG1heHJ0byBpcyB0aGUgbWF4IG9ic2VydmVkIHJ0byArIHRyYW5zcG9ydCBz aW5jZQo+ICsgKiB0aGUgbGFzdCBjYWxsLiBXaWxsIHJldHVybiAwIHdoZW4gZGlkIG5vdCBjaGFu Z2Ugc2luY2UgbGFzdCBjYWxsCj4gKyAqLwo+ICtzdHJ1Y3Qgc2N0cF9hc3NvY19zdGF0cyB7Cj4g KwlzY3RwX2Fzc29jX3QJc2FzX2Fzc29jX2lkOyAgICAvKiBJbnB1dCAqLwo+ICsJCQkJCSAvKiBU cmFuc3BvcnQgb2YgdGhlIG9ic2VydmVkIG1heCBSVE8gc3Bpa2UgKi8KPiArCXN0cnVjdCBzb2Nr YWRkcl9zdG9yYWdlIHNhc19vYnNfcnRvX2lwYWRkcjsKPiArCV9fdTY0CQlzYXNfbWF4cnRvOyAg ICAgIC8qIE1heGltdW0gT2JzZXJ2ZWQgUlRPIGZvciBwZXJpb2QgKi8KPiArCV9fdTY0CQlzYXNf aXNhY2tzOwkgLyogU0FDS3MgcmVjZWl2ZWQgKi8KPiArCV9fdTY0CQlzYXNfb3NhY2tzOwkgLyog U0FDS3Mgc2VudCAqLwo+ICsJX191NjQJCXNhc19vcGFja2V0czsJIC8qIFBhY2tldHMgc2VudCAq Lwo+ICsJX191NjQJCXNhc19pcGFja2V0czsJIC8qIFBhY2tldHMgcmVjZWl2ZWQgKi8KPiArCV9f dTY0CQlzYXNfcnR4Y2h1bmtzOyAgIC8qIFJldHJhbnNtaXR0ZWQgQ2h1bmtzICovCj4gKwlfX3U2 NAkJc2FzX291dG9mc2VxdHNuczsvKiBUU04gcmVjZWl2ZWQgPiBuZXh0IGV4cGVjdGVkICovCj4g KwlfX3U2NAkJc2FzX2lkdXBjaHVua3M7ICAvKiBEdXBzIHJlY2VpdmVkIChvcmRlcmVkK3Vub3Jk ZXJlZCkgKi8KPiArCV9fdTY0CQlzYXNfZ2FwY250OyAgICAgIC8qIEdhcCBBY2tub3dsZWRnZW1l bnRzIFJlY2VpdmVkICovCj4gKwlfX3U2NAkJc2FzX291b2RjaHVua3M7ICAvKiBVbm9yZGVyZWQg ZGF0YSBjaHVua3Mgc2VudCAqLwo+ICsJX191NjQJCXNhc19pdW9kY2h1bmtzOyAgLyogVW5vcmRl cmVkIGRhdGEgY2h1bmtzIHJlY2VpdmVkICovCj4gKwlfX3U2NAkJc2FzX29vZGNodW5rczsJIC8q IE9yZGVyZWQgZGF0YSBjaHVua3Mgc2VudCAqLwo+ICsJX191NjQJCXNhc19pb2RjaHVua3M7CSAv KiBPcmRlcmVkIGRhdGEgY2h1bmtzIHJlY2VpdmVkICovCj4gKwlfX3U2NAkJc2FzX29jdHJsY2h1 bmtzOyAvKiBDb250cm9sIGNodW5rcyBzZW50ICovCj4gKwlfX3U2NAkJc2FzX2ljdHJsY2h1bmtz OyAvKiBDb250cm9sIGNodW5rcyByZWNlaXZlZCAqLwo+ICAgfTsKPiAgIAo+ICAgLyogVGhlc2Ug YXJlIGJpdCBmaWVsZHMgZm9yIG1zZ2hkci0+bXNnX2ZsYWdzLiAgU2VlIHNlY3Rpb24gNS4xLiAg Ki8KPiBAQCAtNjE0LDcgKzgwMyw4IEBAIHR5cGVkZWYgc3RydWN0IHsKPiAgIAo+ICAgaW50IHNj dHBfYmluZHgoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNudCwgaW50 IGZsYWdzKTsKPiAgIAo+IC1pbnQgc2N0cF9jb25uZWN0eChpbnQgc2QsIHN0cnVjdCBzb2NrYWRk ciAqYWRkcnMsIGludCBhZGRyY250KTsKPiAraW50IHNjdHBfY29ubmVjdHgoaW50IHNkLCBzdHJ1 Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNudCwKPiArCQkgIHNjdHBfYXNzb2NfdCAqaWQp Owo+ICAgCj4gICBpbnQgc2N0cF9wZWVsb2ZmKGludCBzZCwgc2N0cF9hc3NvY190IGFzc29jX2lk KTsKPiAgIAo+IEBAIC02NjksNiArODU5LDkgQEAgaW50IHNjdHBfcmVjdm1zZyhpbnQgcywgdm9p ZCAqbXNnLCBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCj4gICAJCSBzb2NrbGVu X3QgKmZyb21sZW4sIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvLAo+ICAgCQkgaW50ICpt c2dfZmxhZ3MpOwo+ICAgCj4gKy8qIFJldHVybiB0aGUgYWRkcmVzcyBsZW5ndGggZm9yIGFuIGFk ZHJlc3MgZmFtaWx5LiAqLwo+ICtpbnQgc2N0cF9nZXRhZGRybGVuKHNhX2ZhbWlseV90IGZhbWls eSk7Cj4gKwo+ICAgX19FTkRfREVDTFMKPiAgIAo+ICAgI2VuZGlmIC8qIF9fbGludXhfc2N0cF9o X18gKi8KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9saWIvYWRkcnMuYyBi L3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL2FkZHJzLmMKPiBpbmRleCAxODQzMzVjLi42NWY1 MjIyIDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL2FkZHJzLmMKPiAr KysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9hZGRycy5jCj4gQEAgLTEsMTIgKzEsMTIg QEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBl eHRlbnNpb25zLgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbjogVXNlciBBUEkgZXh0 ZW5zaW9ucy4KPiAgICAqCj4gICAgKiBhZGRycy5jCj4gICAgKgo+ICAgICogRGlzdHJpYnV0ZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIHYyLjEgYXMgZGVzY3JpYmVkIGluCj4gLSAqICAg IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gKyAqICAgIGh0dHA6Ly93 d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gICAgKgo+ICAgICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIHVzZXIgbGlicmFyeSB0aGF0IG9mZmVycyBzdXBwb3J0IGZvciB0aGUKPiAt ICogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uLiBUaGUgbWFpbiBwdXJwb3Nl IG9mIHRoaXMKPiArICogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24uIFRoZSBtYWluIHB1cnBv c2Ugb2YgdGhpcwo+ICAgICogY29kZSBpcyB0byBwcm92aWRlIHRoZSBTQ1RQIFNvY2tldCBBUEkg bWFwcGluZ3MgZm9yIHVzZXIKPiAgICAqIGFwcGxpY2F0aW9uIHRvIGludGVyZmFjZSB3aXRoIHRo ZSBTQ1RQIGluIGtlcm5lbC4KPiAgICAqCj4gQEAgLTE5LDE2MiArMTksMTM3IEBACj4gICAgKiBX cml0dGVuIG9yIG1vZGlmaWVkIGJ5Ogo+ICAgICogIEFyZGVsbGUgRmFuICAgICA8YXJkZWxsZS5m YW5AaW50ZWwuY29tPgo+ICAgICogIFNyaWRoYXIgU2FtdWRyYWxhIDxzcmlAdXMuaWJtLmNvbT4K PiArICogIEl2YW4gU2t5dHRlIErDuHJnZW5zZW4gPGlzai1zY3RwQGkxLmRrPgo+ICAgICovCj4g ICAKPiAtI2luY2x1ZGUgPHN0cmluZy5oPgo+IC0jaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNs dWRlIDxtYWxsb2MuaD4KPiAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cj4gICAjaW5jbHVkZSA8 bmV0aW5ldC9zY3RwLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiAgICNpbmNsdWRlIDxlcnJu by5oPgo+ICAgCj4gLS8qCj4gLSAqIEdldCBsb2NhbC9wZWVyIGFkZHJlc3NlcyB1c2luZyB0aGUg b2xkIEFQSQo+IC0gKiBPbGQga2VybmVscyAoMi42LjEzIGFuZCBlYXJsaWVyKSBvbmx5IHN1cHBv cnQgdGhpcyBBUEkgYnV0IGl0IGJyZWFrcyAzMi1iaXQKPiAtICogcHJvZ3JhbXMgb24gNjQtYml0 IGtlcm5lbHMuCj4gLSAqLwo+IC1zdGF0aWMgaW50Cj4gLXNjdHBfZ2V0YWRkcnNfb2xkKGludCBz ZCwgc2N0cF9hc3NvY190IGlkLCBpbnQgb3B0bmFtZV9udW0sIGludCBvcHRuYW1lX29sZCwKPiAt CQkgIHN0cnVjdCBzb2NrYWRkciAqKmFkZHJzKQo+IC17Cj4gLQlzb2NrbGVuX3QgbGVuID0gc2l6 ZW9mKHNjdHBfYXNzb2NfdCk7Cj4gLQlpbnQgY250LCBlcnI7Cj4gLQlzdHJ1Y3Qgc2N0cF9nZXRh ZGRyc19vbGQgZ2V0YWRkcnM7Cj4gLQo+IC0JY250ID0gZ2V0c29ja29wdChzZCwgU09MX1NDVFAs IG9wdG5hbWVfbnVtLCAmaWQsICZsZW4pOwo+IC0JaWYgKGNudCA8IDApCj4gLQkJcmV0dXJuIC0x Owo+IC0KPiAtCWlmICgwID09IGNudCkgewo+IC0JCSphZGRycyA9IE5VTEw7Cj4gLQkJcmV0dXJu IDA7Cj4gLQl9Cj4gLQo+IC0JbGVuID0gY250ICogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp Owo+IC0KPiAtCWdldGFkZHJzLmFzc29jX2lkID0gaWQ7Cj4gLQlnZXRhZGRycy5hZGRyX251bSA9 IGNudDsKPiAtCWdldGFkZHJzLmFkZHJzID0gKHN0cnVjdCBzb2NrYWRkciAqKW1hbGxvYyhsZW4p Owo+IC0JaWYgKE5VTEwgPT0gZ2V0YWRkcnMuYWRkcnMpCj4gLQkJcmV0dXJuIC0xOwo+IC0KPiAt CWxlbiA9IHNpemVvZihnZXRhZGRycyk7Cj4gLQllcnIgPSBnZXRzb2Nrb3B0KHNkLCBTT0xfU0NU UCwgb3B0bmFtZV9vbGQsICZnZXRhZGRycywgJmxlbik7Cj4gLQlpZiAoZXJyIDwgMCkgewo+IC0J CWZyZWUoZ2V0YWRkcnMuYWRkcnMpOwo+IC0JCXJldHVybiAtMTsKPiAtCX0KPiAtCj4gLQkqYWRk cnMgPSBnZXRhZGRycy5hZGRyczsKPiAtCj4gLQlyZXR1cm4gZ2V0YWRkcnMuYWRkcl9udW07Cj4g LQo+IC19CQkJCS8qIHNjdHBfZ2V0YWRkcnNfb2xkKCkgKi8KPiAtCj4gLS8qCj4gLSAqIENvbW1v biBnZXRzb2Nrb3B0KCkgbGF5ZXIKPiArLyoKPiArICogQ29tbW9uIGdldHNvY2tvcHQoKSBsYXll cgo+ICAgICogSWYgdGhlIE5FVyBnZXRzb2Nrb3B0KCkgQVBJIGZhaWxzIHRoaXMgZnVuY3Rpb24g d2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcKPiAgICAqIHRoZSBvbGQgQVBJCj4gICAgKi8KPiAgIHN0 YXRpYyBpbnQKPiAtc2N0cF9nZXRhZGRycyhpbnQgc2QsIHNjdHBfYXNzb2NfdCBpZCwKPiAtCSAg ICAgIGludCBvcHRuYW1lX25ldywgaW50IG9wdG5hbWVfbnVtX29sZCwgaW50IG9wdG5hbWVfb2xk LAo+ICtzY3RwX2dldGFkZHJzKGludCBzZCwgc2N0cF9hc3NvY190IGlkLCBpbnQgb3B0bmFtZV9u ZXcsCj4gICAJICAgICAgc3RydWN0IHNvY2thZGRyICoqYWRkcnMpCj4gICB7Cj4gICAJaW50IGNu dCwgZXJyOwo+ICAgCXNvY2tsZW5fdCBsZW47Cj4gLQlzaXplX3QgYnVmc2l6ZSA9IDQwOTY7CS8q ZW5vdWdoIGZvciBtb3N0IGNhc2VzICovCj4gKwlzaXplX3QgYnVmc2l6ZSA9IDQwOTY7IC8qZW5v dWdoIGZvciBtb3N0IGNhc2VzKi8KPiAgIAo+IC0Jc3RydWN0IHNjdHBfZ2V0YWRkcnMgKmdldGFk ZHJzID0KPiAtCSAgICAoc3RydWN0IHNjdHBfZ2V0YWRkcnMgKiltYWxsb2MoYnVmc2l6ZSk7Cj4g LQlpZiAoIWdldGFkZHJzKQo+ICsJc3RydWN0IHNjdHBfZ2V0YWRkcnMgKmdldGFkZHJzID0gKHN0 cnVjdCBzY3RwX2dldGFkZHJzKiltYWxsb2MoYnVmc2l6ZSk7Cj4gKwlpZighZ2V0YWRkcnMpCj4g ICAJCXJldHVybiAtMTsKPiAtCj4gLQlmb3IgKDs7KSB7Cj4gKwkKPiArCWZvcig7Oykgewo+ICAg CQljaGFyICpuZXdfYnVmOwo+ICAgCj4gICAJCWxlbiA9IGJ1ZnNpemU7Cj4gICAJCWdldGFkZHJz LT5hc3NvY19pZCA9IGlkOwo+ICAgCQllcnIgPSBnZXRzb2Nrb3B0KHNkLCBTT0xfU0NUUCwgb3B0 bmFtZV9uZXcsIGdldGFkZHJzLCAmbGVuKTsKPiAgIAkJaWYgKGVyciA9PSAwKSB7Cj4gLQkJCS8q Z290IGl0ICovCj4gKwkJCS8qZ290IGl0Ki8KPiAgIAkJCWJyZWFrOwo+ICAgCQl9Cj4gLQkJaWYg KGVycm5vID09IEVOT1BST1RPT1BUKSB7Cj4gLQkJCS8qS2VybmVsIGRvZXMgbm90IHN1cHBvcnQg bmV3IEFQSSAqLwo+ICsJCWlmIChlcnJubyAhPSBFTk9NRU0gKSB7Cj4gKwkJCS8qdW5rbm93biBl cnJvciovCj4gICAJCQlmcmVlKGdldGFkZHJzKTsKPiAtCQkJcmV0dXJuIHNjdHBfZ2V0YWRkcnNf b2xkKHNkLCBpZCwKPiAtCQkJCQkJIG9wdG5hbWVfbnVtX29sZCwgb3B0bmFtZV9vbGQsCj4gLQkJ CQkJCSBhZGRycyk7Cj4gLQkJfQo+IC0JCWlmIChlcnJubyAhPSBFTk9NRU0pIHsKPiAtCQkJLyp1 bmtub3duIGVycm9yICovCj4gICAJCQlyZXR1cm4gLTE7Cj4gICAJCX0KPiAtCQkvKmV4cGFuZCBi dWZmZXIgKi8KPiAtCQlpZiAoYnVmc2l6ZSA+IDEyOCAqIDEwMjQpIHsKPiAtCQkJLyp0aGlzIGlz IGdldHRpbmcgcmlkaWN1bG91cyAqLwo+ICsJCS8qZXhwYW5kIGJ1ZmZlciovCj4gKwkJaWYgKGJ1 ZnNpemUgPiAxMjgqMTAyNCkgewo+ICsJCQkvKnRoaXMgaXMgZ2V0dGluZyByaWRpY3Vsb3VzKi8K PiAgIAkJCWZyZWUoZ2V0YWRkcnMpOwo+ICAgCQkJZXJybm8gPSBFTk9CVUZTOwo+ICAgCQkJcmV0 dXJuIC0xOwo+ICAgCQl9Cj4gLQkJbmV3X2J1ZiA9IHJlYWxsb2MoZ2V0YWRkcnMsIGJ1ZnNpemUg KyA0MDk2KTsKPiArCQluZXdfYnVmID0gcmVhbGxvYyhnZXRhZGRycywgYnVmc2l6ZSs0MDk2KTsK PiAgIAkJaWYgKCFuZXdfYnVmKSB7Cj4gICAJCQlmcmVlKGdldGFkZHJzKTsKPiAgIAkJCXJldHVy biAtMTsKPiAgIAkJfQo+ICAgCQlidWZzaXplICs9IDQwOTY7Cj4gLQkJZ2V0YWRkcnMgPSAoc3Ry dWN0IHNjdHBfZ2V0YWRkcnMgKiluZXdfYnVmOwo+ICsJCWdldGFkZHJzID0gKHN0cnVjdCBzY3Rw X2dldGFkZHJzKiluZXdfYnVmOwo+ICAgCX0KPiAgIAo+ICAgCS8qIHdlIHNraXAgdHJhdmVyc2lu ZyB0aGUgbGlzdCwgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZXRjLiBhbmQgZW5qb3kKPiAgIAkg KiBhIHNpbXBsZSBoYWNrKi8KPiAgIAljbnQgPSBnZXRhZGRycy0+YWRkcl9udW07Cj4gLQltZW1t b3ZlKGdldGFkZHJzLCBnZXRhZGRycyArIDEsIGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRh ZGRycykpOwo+IC0JKmFkZHJzID0gKHN0cnVjdCBzb2NrYWRkciAqKWdldGFkZHJzOwo+ICsJbWVt bW92ZShnZXRhZGRycywgZ2V0YWRkcnMgKyAxLCBsZW4pOwo+ICsJKmFkZHJzID0gKHN0cnVjdCBz b2NrYWRkciopZ2V0YWRkcnM7Cj4gICAKPiAgIAlyZXR1cm4gY250Owo+IC19CQkJCS8qIHNjdHBf Z2V0YWRkcnMoKSAqLwo+ICt9IC8qIHNjdHBfZ2V0YWRkcnMoKSAqLwo+ICAgCj4gICAvKiBHZXQg YWxsIHBlZXIgYWRkcmVzcyBvbiBhIHNvY2tldC4gIFRoaXMgaXMgYSBuZXcgU0NUUCBBUEkKPiAg ICAqIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiA4LjMgb2YgdGhlIFNvY2tldHMgQVBJIEV4dGVu c2lvbnMgZm9yIFNDVFAuCj4gICAgKiBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBnZXRz b2Nrb3B0KCkgaW50ZXJmYWNlLgo+ICAgICovCj4gLWludCBzY3RwX2dldHBhZGRycyhpbnQgc2Qs IHNjdHBfYXNzb2NfdCBpZCwgc3RydWN0IHNvY2thZGRyICoqYWRkcnMpCj4gK2ludAo+ICtzY3Rw X2dldHBhZGRycyhpbnQgc2QsIHNjdHBfYXNzb2NfdCBpZCwgc3RydWN0IHNvY2thZGRyICoqYWRk cnMpCj4gICB7Cj4gICAJcmV0dXJuIHNjdHBfZ2V0YWRkcnMoc2QsIGlkLAo+ICAgCQkJICAgICBT Q1RQX0dFVF9QRUVSX0FERFJTLAo+IC0JCQkgICAgIFNDVFBfR0VUX1BFRVJfQUREUlNfTlVNX09M RCwKPiAtCQkJICAgICBTQ1RQX0dFVF9QRUVSX0FERFJTX09MRCwgYWRkcnMpOwo+IC19CQkJCS8q IHNjdHBfZ2V0cGFkZHJzKCkgKi8KPiArCQkJICAgICBhZGRycyk7Cj4gK30gLyogc2N0cF9nZXRw YWRkcnMoKSAqLwo+ICAgCj4gICAvKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBz Y3RwX2dldHBhZGRycygpLiAgVGhpcyBpcyBhIG5ldyBTQ1RQIEFQSQo+ICAgICogZGVzY3JpYmVk IGluIHRoZSBzZWN0aW9uIDguNCBvZiB0aGUgU29ja2V0cyBBUEkgRXh0ZW5zaW9ucyBmb3IgU0NU UC4KPiAgICAqLwo+IC1pbnQgc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMp Cj4gK2ludAo+ICtzY3RwX2ZyZWVwYWRkcnMoc3RydWN0IHNvY2thZGRyICphZGRycykKPiAgIHsK PiAgIAlmcmVlKGFkZHJzKTsKPiAgIAlyZXR1cm4gMDsKPiAgIAo+IC19CQkJCS8qIHNjdHBfZnJl ZXBhZGRycygpICovCj4gK30gLyogc2N0cF9mcmVlcGFkZHJzKCkgKi8KPiAgIAo+ICAgLyogR2V0 IGFsbCBsb2NhbGx5IGJvdW5kIGFkZHJlc3Mgb24gYSBzb2NrZXQuICBUaGlzIGlzIGEgbmV3IFND VFAgQVBJCj4gICAgKiBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gOC41IG9mIHRoZSBTb2NrZXRz IEFQSSBFeHRlbnNpb25zIGZvciBTQ1RQLgo+ICAgICogVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgZ2V0c29ja29wdCgpIGludGVyZmFjZS4KPiAgICAqLwo+IC1pbnQgc2N0cF9nZXRsYWRk cnMoaW50IHNkLCBzY3RwX2Fzc29jX3QgaWQsIHN0cnVjdCBzb2NrYWRkciAqKmFkZHJzKQo+ICtp bnQKPiArc2N0cF9nZXRsYWRkcnMoaW50IHNkLCBzY3RwX2Fzc29jX3QgaWQsIHN0cnVjdCBzb2Nr YWRkciAqKmFkZHJzKQo+ICAgewo+ICAgCXJldHVybiBzY3RwX2dldGFkZHJzKHNkLCBpZCwKPiAg IAkJCSAgICAgU0NUUF9HRVRfTE9DQUxfQUREUlMsCj4gLQkJCSAgICAgU0NUUF9HRVRfTE9DQUxf QUREUlNfTlVNX09MRCwKPiAtCQkJICAgICBTQ1RQX0dFVF9MT0NBTF9BRERSU19PTEQsIGFkZHJz KTsKPiAtfQkJCQkvKiBzY3RwX2dldGxhZGRycygpICovCj4gKwkJCSAgICAgYWRkcnMpOwo+ICt9 IC8qIHNjdHBfZ2V0bGFkZHJzKCkgKi8KPiAgIAo+ICAgLyogRnJlZXMgYWxsIHJlc291cmNlcyBh bGxvY2F0ZWQgYnkgc2N0cF9nZXRsYWRkcnMoKS4gIFRoaXMgaXMgYSBuZXcgU0NUUCBBUEkKPiAg ICAqIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiA4LjYgb2YgdGhlIFNvY2tldHMgQVBJIEV4dGVu c2lvbnMgZm9yIFNDVFAuCj4gICAgKi8KPiAtaW50IHNjdHBfZnJlZWxhZGRycyhzdHJ1Y3Qgc29j a2FkZHIgKmFkZHJzKQo+ICtpbnQKPiArc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAq YWRkcnMpCj4gICB7Cj4gICAJZnJlZShhZGRycyk7Cj4gICAJcmV0dXJuIDA7Cj4gICAKPiAtfQkJ CQkvKiBzY3RwX2ZyZWVsYWRkcnMoKSAqLwo+ICt9IC8qIHNjdHBfZnJlZWxhZGRycygpICovCj4g Kwo+ICtpbnQKPiArc2N0cF9nZXRhZGRybGVuKHNhX2ZhbWlseV90IGZhbWlseSkKPiArewo+ICsJ LyogV2UgY291bGQgY2FsbCBpbnRvIHRoZSBrZXJuZWwgdG8gc2VlIHdoYXQgaXQgdGhpbmtzIHRo ZSBzaXplIHNob3VsZAo+ICsJICogYmUsIGJ1dCBoYXJkY29kaW5nIHRoZSBhZGRyZXNzIGZhbWls aWVzIGhlcmUgaXM6IChhKSBmYXN0ZXIsCj4gKwkgKiAoYikgZWFzaWVyLCBhbmQgKGMpIHByb2Jh Ymx5IGdvb2QgZW5vdWdoIGZvciBmb3JzZWVhYmxlIGZ1dHVyZS4KPiArCSAqLwo+ICsJc3dpdGNo KGZhbWlseSkgewo+ICsJY2FzZSBBRl9JTkVUOgo+ICsJCXJldHVybiBzaXplb2Yoc3RydWN0IHNv Y2thZGRyX2luKTsKPiArCWNhc2UgQUZfSU5FVDY6Cj4gKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfaW42KTsKPiArCWRlZmF1bHQ6Cj4gKwkJLyogQ3VycmVudGx5IHRoZXJlIGlzIG5v IGRlZmluZWQgZXJyb3IgaGFuZGxpbmcgaW4KPiArCQkgKiBkcmFmdC1pZXRmLXRzdndnLXNjdHBz b2NrZXQtMTMudHh0Lgo+ICsJCSAqIC0xIG1pZ2h0IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBv dmVyd3JpdGUgYnVmZmVyCj4gKwkJICogb3IgbWlzaW50ZXJwcmV0IGRhdGEuIDAgaXMgbW9yZSBs aWtlbHkgdG8gY2F1c2UKPiArCQkgKiBhbiBlbmRsZXNzIGxvb3AuCj4gKwkJICovCj4gKwkJcmV0 dXJuIDA7Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9s aWIvYmluZHguYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL2JpbmR4LmMKPiBpbmRleCBi ODliMzFlLi44ZTBiNDY0IDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGli L2JpbmR4LmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9iaW5keC5jCj4gQEAg LTEsMTIgKzEsMTIgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9u OiBVc2VyIEFQSSBleHRlbnNpb25zLgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbjog VXNlciBBUEkgZXh0ZW5zaW9ucy4KPiAgICAqCj4gICAgKiBiaW5keC5jCj4gICAgKgo+ICAgICog RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIHYyLjEgYXMgZGVzY3JpYmVk IGluCj4gLSAqICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gKyAq ICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gICAgKgo+ICAgICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHVzZXIgbGlicmFyeSB0aGF0IG9mZmVycyBzdXBwb3J0 IGZvciB0aGUKPiAtICogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uLiBUaGUg bWFpbiBwdXJwb3NlIG9mIHRoaXMKPiArICogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24uIFRo ZSBtYWluIHB1cnBvc2Ugb2YgdGhpcwo+ICAgICogY29kZSBpcyB0byBwcm92aWRlIHRoZSBTQ1RQ IFNvY2tldCBBUEkgbWFwcGluZ3MgZm9yIHVzZXIKPiAgICAqIGFwcGxpY2F0aW9uIHRvIGludGVy ZmFjZSB3aXRoIHRoZSBTQ1RQIGluIGtlcm5lbC4KPiAgICAqCj4gQEAgLTIzLDkgKzIzLDkgQEAK PiAgICAqICAgU3JpZGhhciBTYW11ZHJhbGEgICAgIDxzcmlAdXMuaWJtLmNvbT4KPiAgICAqLwo+ ICAgCj4gLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CQkvKiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFn ZSwgc2V0c29ja29wdCgpICovCj4gKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ICAgLyogc3RydWN0 IHNvY2thZGRyX3N0b3JhZ2UsIHNldHNvY2tvcHQoKSAqLwo+ICAgI2luY2x1ZGUgPG5ldGluZXQv aW4uaD4KPiAtI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgkvKiBTQ1RQX1NPQ0tPUFRfQklORFhf KiAqLwo+ICsjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+IC8qIFNDVFBfU09DS09QVF9CSU5EWF8q ICovCj4gICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAgIAo+ICAgLyogU3VwcG9ydCB0aGUgc2N0cF9i aW5keCgpIGludGVyZmFjZS4KPiBAQCAtMzUsNyArMzUsOCBAQAo+ICAgICogSW5zdGVhZCBvZiBp bXBsZW1lbnRpbmcgdGhyb3VnaCBhIHNvY2tldCBjYWxsIGluIHN5c19zb2NrZXRjYWxsKCksCj4g ICAgKiB0dW5uZWwgdGhlIHJlcXVlc3QgdGhyb3VnaCBzZXRzb2Nrb3B0KCkuCj4gICAgKi8KPiAt aW50IHNjdHBfYmluZHgoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNu dCwgaW50IGZsYWdzKQo+ICtpbnQKPiArc2N0cF9iaW5keChpbnQgZmQsIHN0cnVjdCBzb2NrYWRk ciAqYWRkcnMsIGludCBhZGRyY250LCBpbnQgZmxhZ3MpCj4gICB7Cj4gICAJaW50IHNldHNvY2tf b3B0aW9uID0gMDsKPiAgIAl2b2lkICphZGRyYnVmOwo+IEBAIC03Miw2ICs3Myw2IEBAIGludCBz Y3RwX2JpbmR4KGludCBmZCwgc3RydWN0IHNvY2thZGRyICphZGRycywgaW50IGFkZHJjbnQsIGlu dCBmbGFncykKPiAgIAkJCXJldHVybiAtMTsKPiAgIAkJfQo+ICAgCX0KPiAtCj4gKwkJCQo+ICAg CXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfU0NUUCwgc2V0c29ja19vcHRpb24sIGFkZHJzLCBh ZGRyc19zaXplKTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9s aWIvY29ubmVjdHguYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL2Nvbm5lY3R4LmMKPiBp bmRleCA1YTU2NjIzLi41MGNmNGM4IDEwMDY0NAo+IC0tLSBhL3Rlc3RjYXNlcy9uZXR3b3JrL3Nj dHAvbGliL2Nvbm5lY3R4LmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9jb25u ZWN0eC5jCj4gQEAgLTEsNCArMSw0IEBACj4gLS8qIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBs ZW1lbnRhdGlvbjogVXNlciBBUEkgZXh0ZW5zaW9ucy4KPiArLyogU0NUUCBrZXJuZWwgSW1wbGVt ZW50YXRpb246IFVzZXIgQVBJIGV4dGVuc2lvbnMuCj4gICAgKgo+ICAgICogY29ubmVjdHguYwo+ ICAgICoKPiBAQCAtNiw3ICs2LDcgQEAKPiAgICAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVm dC9sZXNzZXIudHh0Lgo+ICAgICoKPiAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB1c2Vy IGxpYnJhcnkgdGhhdCBvZmZlcnMgc3VwcG9ydCBmb3IgdGhlCj4gLSAqIFNDVFAga2VybmVsIHJl ZmVyZW5jZSBJbXBsZW1lbnRhdGlvbi4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzCj4gKyAqIFND VFAga2VybmVsIEltcGxlbWVudGF0aW9uLiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMKPiAgICAq IGNvZGUgaXMgdG8gcHJvdmlkZSB0aGUgU0NUUCBTb2NrZXQgQVBJIG1hcHBpbmdzIGZvciB1c2Vy Cj4gICAgKiBhcHBsaWNhdGlvbiB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgU0NUUCBpbiBrZXJuZWwu Cj4gICAgKgo+IEBAIC0xOSwxMCArMTksMTMgQEAKPiAgICAqICAgRnJhbmsgRmlseiAgICAgPGZm aWx6QHVzLmlibS5jb20+Cj4gICAgKi8KPiAgIAo+IC0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgkJ Lyogc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIHNldHNvY2tvcHQoKSAqLwo+ICsjaW5jbHVkZSA8 c3lzL3NvY2tldC5oPiAgIC8qIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRzb2Nrb3B0KCkg Ki8KPiAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Cj4gLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHAu aD4JLyogU0NUUF9TT0NLT1BUX0NPTk5FQ1RYXyogKi8KPiArI2luY2x1ZGUgPG5ldGluZXQvc2N0 cC5oPiAvKiBTQ1RQX1NPQ0tPUFRfQ09OTkVDVFhfKiAqLwo+ICAgI2luY2x1ZGUgPGVycm5vLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVk ZSA8ZmNudGwuaD4KPiAgIAo+ICAgLyogU3VwcG9ydCB0aGUgc2N0cF9jb25uZWN0eCgpIGludGVy ZmFjZS4KPiAgICAqCj4gQEAgLTMxLDE2ICszNCwxNyBAQAo+ICAgICogSW5zdGVhZCBvZiBpbXBs ZW1lbnRpbmcgdGhyb3VnaCBhIHNvY2tldCBjYWxsIGluIHN5c19zb2NrZXRjYWxsKCksCj4gICAg KiB0dW5uZWwgdGhlIHJlcXVlc3QgdGhyb3VnaCBzZXRzb2Nrb3B0KCkuCj4gICAgKi8KPiAtaW50 IHNjdHBfY29ubmVjdHgoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNu dCkKPiArc3RhdGljIGludCBfX2Nvbm5lY3R4X2FkZHJzaXplKGNvbnN0IHN0cnVjdCBzb2NrYWRk ciAqYWRkcnMsCj4gKwkJCQljb25zdCBpbnQgYWRkcmNudCkKPiAgIHsKPiAtCXZvaWQgKmFkZHJi dWY7Cj4gLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhX2FkZHI7Cj4gLQlzb2NrbGVuX3QgYWRkcnNfc2l6 ZSA9IDA7Cj4gKwljb25zdCB2b2lkICphZGRyYnVmOwo+ICsJY29uc3Qgc3RydWN0IHNvY2thZGRy ICpzYV9hZGRyOwo+ICsJaW50IGFkZHJzX3NpemUgPSAwOwo+ICAgCWludCBpOwo+ICAgCj4gICAJ YWRkcmJ1ZiA9IGFkZHJzOwo+ICAgCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsKPiAt CQlzYV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJidWY7Cj4gKwkJc2FfYWRkciA9IChj b25zdCBzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyYnVmOwo+ICAgCQlzd2l0Y2ggKHNhX2FkZHItPnNh X2ZhbWlseSkgewo+ICAgCQljYXNlIEFGX0lORVQ6Cj4gICAJCQlhZGRyc19zaXplICs9IHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwo+IEBAIC01Niw2ICs2MCwxMjYgQEAgaW50IHNjdHBfY29u bmVjdHgoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNudCkKPiAgIAkJ fQo+ICAgCX0KPiAgIAo+IC0JcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9TQ1RQLCBTQ1RQX1NP Q0tPUFRfQ09OTkVDVFgsIGFkZHJzLAo+IC0JCQkgIGFkZHJzX3NpemUpOwo+ICsJcmV0dXJuIGFk ZHJzX3NpemU7Cj4gICB9Cj4gKwkJCQo+ICsKPiAraW50IF9fc2N0cF9jb25uZWN0eChpbnQgZmQs IHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsIGludCBhZGRyY250KQo+ICt7Cj4gKwlzb2NrbGVuX3Qg YWRkcnNfc2l6ZSA9IF9fY29ubmVjdHhfYWRkcnNpemUoYWRkcnMsIGFkZHJjbnQpOwo+ICsKPiAr CWlmIChhZGRyc19zaXplIDwgMCkKPiArCQlyZXR1cm4gYWRkcnNfc2l6ZTsKPiArCj4gKwlyZXR1 cm4gc2V0c29ja29wdChmZCwgU09MX1NDVFAsIFNDVFBfU09DS09QVF9DT05ORUNUWF9PTEQsIGFk ZHJzLAo+ICsJCQkgICAgYWRkcnNfc2l6ZSk7Cj4gK30KPiArCj4gK2V4dGVybiBpbnQgc2N0cF9j b25uZWN0eF9vcmlnIChpbnQpCj4gKwlfX2F0dHJpYnV0ZSAoKGFsaWFzICgiX19zY3RwX2Nvbm5l Y3R4IikpKTsKPiArCj4gKwo+ICtzdGF0aWMgaW50IF9fY29ubmVjdHgoaW50IGZkLCBzdHJ1Y3Qg c29ja2FkZHIgKmFkZHJzLCBzb2NrbGVuX3QgYWRkcnNfc2l6ZSwKPiArCQkJc2N0cF9hc3NvY190 ICppZCkKPiArewo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlpZiAoaWQpCj4gKwkJKmlkID0gMDsK PiArCj4gKwlzdGF0dXMgPSBzZXRzb2Nrb3B0KGZkLCBTT0xfU0NUUCwgU0NUUF9TT0NLT1BUX0NP Tk5FQ1RYLCBhZGRycywKPiArCQkJICAgIGFkZHJzX3NpemUpOwo+ICsKPiArCS8qIE5vcm1hbGl6 ZSBzdGF0dXMgYW5kIHNldCBhc3NvY2lhdGlvbiBpZCAqLwo+ICsJaWYgKHN0YXR1cyA+IDApIHsK PiArCQlpZiAoaWQpCj4gKwkJCSppZCA9IHN0YXR1czsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiAr Cj4gKwkvKiBUaGUgZXJyb3IgaXMgc29tZXRoaW5nIG90aGVyIHRoZW4gIk9wdGlvbiBub3Qgc3Vw cG9ydGVkIiAqLwo+ICsJaWYgKHN0YXR1cyA8IDAgJiYgZXJybm8gIT0gRU5PUFJPVE9PUFQpCj4g KwkJcmV0dXJuIHN0YXR1czsKPiArCj4gKwkvKiBBdCB0aGlzIHBvaW50LCBpZiB0aGUgYXBwbGlj YXRpb24gd2FudGVkIHRoZSBpZCwgd2UgY2FuJ3QKPiArCSAqIHJlYWxseSBwcm92aWRlIGl0LCBz byB3ZSBjYW4gcmV0dXJuIEVOT1BST1RPT1BULgo+ICsJICovCj4gKwlpZiAoaWQpIHsKPiArCQll cnJubyA9IEVOT1BST1RPT1BUOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwkvKiBGaW5h bGx5LCB0cnkgdGhlIG9sZCBBUEkgKi8KPiArCXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfU0NU UCwgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYX09MRCwKPiArCQkJICBhZGRycywgYWRkcnNfc2l6ZSk7 Cj4gK30KPiArCj4gK2ludCBzY3RwX2Nvbm5lY3R4MihpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAq YWRkcnMsIGludCBhZGRyY250LAo+ICsJCSAgICAgIHNjdHBfYXNzb2NfdCAqaWQpCj4gK3sKPiAr CXNvY2tsZW5fdCBhZGRyc19zaXplID0gX19jb25uZWN0eF9hZGRyc2l6ZShhZGRycywgYWRkcmNu dCk7Cj4gKwo+ICsJaWYgKGFkZHJzX3NpemUgPCAwKQo+ICsJCXJldHVybiBhZGRyc19zaXplOwo+ ICsKPiArCXJldHVybiBfX2Nvbm5lY3R4KGZkLCBhZGRycywgYWRkcnNfc2l6ZSwgaWQpOwo+ICt9 Cj4gKwo+ICtpbnQgc2N0cF9jb25uZWN0eDMoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJz LCBpbnQgYWRkcmNudCwKPiArCQkgICAgICBzY3RwX2Fzc29jX3QgKmlkKQo+ICt7Cj4gKwlzb2Nr bGVuX3QgYWRkcnNfc2l6ZSA9IF9fY29ubmVjdHhfYWRkcnNpemUoYWRkcnMsIGFkZHJjbnQpOwo+ ICsJaW50IHN0YXR1czsKPiArCXN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCBwYXJhbTsKPiArCXNv Y2tsZW5fdCBvcHRfbGVuID0gc2l6ZW9mKHBhcmFtKTsKPiArCj4gKwlpZiAoYWRkcnNfc2l6ZSA8 IDApCj4gKwkJcmV0dXJuIGFkZHJzX3NpemU7Cj4gKwo+ICsJLyogRmlyc3QgdHJ5IHRoZSBuZXcg c29ja2V0IGFwaQo+ICsJICogQmVjYXVzZSB0aGUgaWQgaXMgcmV0dXJuZWQgaW4gdGhlIG9wdGlv biBidWZmZXIgd2UgaGF2ZSBwcmVwZW5kCj4gKwkgKiAzMmJpdCB0byBpdCBmb3IgdGhlIHJldHVy bmVkIGFzc29jaWF0aW9uIGlkCj4gKwkgKi8KPiArCXBhcmFtLmFzc29jX2lkID0gMDsKPiArCXBh cmFtLmFkZHJfbnVtID0gYWRkcnNfc2l6ZTsKPiArCXBhcmFtLmFkZHJzID0gYWRkcnM7Cj4gKwlz dGF0dXMgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfU0NUUCwgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYMywK PiArCQkgICAgICAgICAgICAmcGFyYW0sICZvcHRfbGVuKTsKPiArCWlmIChzdGF0dXMgPT0gMCB8 fCBlcnJubyA9PSBFSU5QUk9HUkVTUykgewo+ICsJCS8qIFN1Y2NlZWRlZCBpbW1lZGlhdGVseSwg b3IgaW5pdGlhdGVkIG9uIG5vbi1ibG9ja2luZwo+ICsJCSAqIHNvY2tldC4KPiArCQkgKi8KPiAr CQlpZiAoaWQpCj4gKwkJCSppZCA9IHBhcmFtLmFzc29jX2lkOwo+ICsJfQo+ICsKPiArCWlmIChl cnJubyAhPSBFTk9QUk9UT09QVCkgewo+ICsJCS8qIE5vIHBvaW50IGluIHRyeWluZyB0aGUgZmFs bGJhY2tzKi8KPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsJfQo+ICsKPiArCS8qIFRoZSBmaXJzdCBp bmNhcm5hdGlvbiBvZiB1cGRhdGVkIGNvbm5lY3R4IGFwaSBkaWRuJ3Qgd29yayBmb3IKPiArCSAq IG5vbi1ibG9ja2luZyBzb2NrZXRzLiAgU28gaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRoZSBh c3NvY2lhdGlvbgo+ICsJICogaWQgYW5kIHRoZSBzb2NrZXQgaXMgbm9uLWJsb2NraW5nLCB3ZSBj YW4ndCByZWFsbHkgZG8gYW55dGhpbmcuCj4gKwkgKi8KPiArCWlmIChpZCkgewo+ICsJCS8qIFBy b2dyYW0gd2FudHMgdGhlIGFzc29jaWF0aW9uLWlkIHJldHVybmVkLiBXZSBjYW4gb25seSBkbwo+ ICsJCSAqIHRoYXQgaWYgdGhlIHNvY2tldCBpcyBibG9ja2luZyAqLwo+ICsJCXN0YXR1cyA9IGZj bnRsKGZkLCBGX0dFVEZMKTsKPiArCQlpZiAoc3RhdHVzIDwgMCkKPiArCQkJcmV0dXJuIHN0YXR1 czsKPiArCj4gKwkJaWYgKHN0YXR1cyAmIE9fTk9OQkxPQ0spIHsKPiArCQkJLyogU29ja2V0IGlz IG5vbi1ibG9ja2luZy4gRmFpbCAqLwo+ICsJCQllcnJubyA9IEVOT1BST1RPT1BUOwo+ICsJCQly ZXR1cm4gLTE7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBfX2Nvbm5lY3R4KGZkLCBhZGRy cywgYWRkcnNfc2l6ZSwgaWQpOwo+ICt9Cj4gKwo+ICtfX2FzbV9fKCIuc3ltdmVyIF9fc2N0cF9j b25uZWN0eCwgc2N0cF9jb25uZWN0eEAiKTsKPiArX19hc21fXygiLnN5bXZlciBzY3RwX2Nvbm5l Y3R4X29yaWcsIHNjdHBfY29ubmVjdHhAVkVSU18xIik7Cj4gK19fYXNtX18oIi5zeW12ZXIgc2N0 cF9jb25uZWN0eDIsIHNjdHBfY29ubmVjdHhAVkVSU18yIik7Cj4gK19fYXNtX18oIi5zeW12ZXIg c2N0cF9jb25uZWN0eDMsIHNjdHBfY29ubmVjdHhAQFZFUlNfMyIpOwo+IGRpZmYgLS1naXQgYS90 ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9vcHRfaW5mby5jIGIvdGVzdGNhc2VzL25ldHdvcmsv c2N0cC9saWIvb3B0X2luZm8uYwo+IGluZGV4IGJhNzY1Y2UuLjIxYzgzMDcgMTAwNjQ0Cj4gLS0t IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9saWIvb3B0X2luZm8uYwo+ICsrKyBiL3Rlc3RjYXNl cy9uZXR3b3JrL3NjdHAvbGliL29wdF9pbmZvLmMKPiBAQCAtMSwxMiArMSwxMiBAQAo+IC0vKiBT Q1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb246IFVzZXIgQVBJIGV4dGVuc2lvbnMu Cj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBleHRlbnNpb25zLgo+ ICAgICoKPiAgICAqIG9wdF9pbmZvLmMKPiAgICAqCj4gICAgKiBEaXN0cmlidXRlZCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIExHUEwgdjIuMSBhcyBkZXNjcmliZWQgaW4KPiAtICogICAgaHR0cDov L3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci50eHQKPiArICogICAgaHR0cDovL3d3dy5nbnUu b3JnL2NvcHlsZWZ0L2xlc3Nlci50eHQKPiAgICAqCj4gICAgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgdXNlciBsaWJyYXJ5IHRoYXQgb2ZmZXJzIHN1cHBvcnQgZm9yIHRoZQo+IC0gKiBTQ1RQ IGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb24uIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhp cwo+ICsgKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRhdGlvbi4gVGhlIG1haW4gcHVycG9zZSBvZiB0 aGlzCj4gICAgKiBjb2RlIGlmIHRvIHByb3ZpZGUgdGhlIFNDVFAgU29ja2V0IEFQSSBtYXBwaW5n cyBmb3IgdXNlcgo+ICAgICogYXBwbGljYXRpb24gdG8gaW50ZXJmYWNlIHdpdGggdGhlIFNDVFAg aW4ga2VybmVsLgo+ICAgICoKPiBAQCAtMjAsOCArMjAsOCBAQAo+ICAgICogICBBcmRlbGxlIEZh biA8YXJkZWxsZS5mYW5AaW50ZWwuY29tPgo+ICAgICovCj4gICAKPiAtI2luY2x1ZGUgPHN5cy9z b2NrZXQuaD4JCS8qIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRzb2Nrb3B0KCkgKi8KPiAt I2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgkvKiBTQ1RQX1NPQ0tPUFRfQklORFhfKiAqLwo+ICsj aW5jbHVkZSA8c3lzL3NvY2tldC5oPiAgIC8qIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRz b2Nrb3B0KCkgKi8KPiArI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPiAvKiBTQ1RQX1NPQ0tPUFRf QklORFhfKiAqLwo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAKPiAgIC8qIFN1cHBvcnQgdGhl IHNjdHBfb3B0X2luZm8oKSBpbnRlcmZhY2UuCj4gQEAgLTMyLDcgKzMyLDggQEAKPiAgICAqIFRo aXMgaXMgYSBuZXcgU0NUUCBBUEkgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIDcgb2YgdGhlIFNv Y2tldHMgQVBJCj4gICAgKiBFeHRlbnNpb25zIGZvciBTQ1RQLiBUaGlzIGlzIGltcGxlbWVudGVk IHVzaW5nIHRoZSBnZXRzb2Nrb3B0KCkgaW50ZXJmYWNlLgo+ICAgICovCj4gLWludCBzY3RwX29w dF9pbmZvKGludCBzZCwgc2N0cF9hc3NvY190IGlkLCBpbnQgb3B0LCB2b2lkICphcmcsIHNvY2ts ZW5fdCAqIHNpemUpCj4gK2ludAo+ICtzY3RwX29wdF9pbmZvKGludCBzZCwgc2N0cF9hc3NvY190 IGlkLCBpbnQgb3B0LCB2b2lkICphcmcsIHNvY2tsZW5fdCAqc2l6ZSkKPiAgIHsKPiAgIAlzd2l0 Y2ggKG9wdCkgewo+ICAgCWNhc2UgU0NUUF9SVE9JTkZPOgo+IEBAIC00OSwxMCArNTAsMTMgQEAg aW50IHNjdHBfb3B0X2luZm8oaW50IHNkLCBzY3RwX2Fzc29jX3QgaWQsIGludCBvcHQsIHZvaWQg KmFyZywgc29ja2xlbl90ICogc2l6ZSkKPiAgIAljYXNlIFNDVFBfTUFYU0VHOgo+ICAgCWNhc2Ug U0NUUF9TVEFUVVM6Cj4gICAJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTzoKPiAtCQkqKHNj dHBfYXNzb2NfdCAqKSBhcmcgPSBpZDsKPiArCWNhc2UgU0NUUF9BVVRIX0FDVElWRV9LRVk6Cj4g KwljYXNlIFNDVFBfUEVFUl9BVVRIX0NIVU5LUzoKPiArCWNhc2UgU0NUUF9MT0NBTF9BVVRIX0NI VU5LUzoKPiArCQkqKHNjdHBfYXNzb2NfdCAqKWFyZyA9IGlkOwo+ICAgCQlyZXR1cm4gZ2V0c29j a29wdChzZCwgSVBQUk9UT19TQ1RQLCBvcHQsIGFyZywgc2l6ZSk7Cj4gICAJZGVmYXVsdDoKPiAg IAkJcmV0dXJuIEVOT1RTVVA7Cj4gICAJfQo+ICAgCj4gLX0JCQkJLyogc2N0cF9vcHRfaW5mbygp ICovCj4gK30gLyogc2N0cF9vcHRfaW5mbygpICovCj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9u ZXR3b3JrL3NjdHAvbGliL3BlZWxvZmYuYyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvbGliL3Bl ZWxvZmYuYwo+IGluZGV4IDA0ZmU5YmMuLmE4NzAwNTAgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNhc2Vz L25ldHdvcmsvc2N0cC9saWIvcGVlbG9mZi5jCj4gKysrIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0 cC9saWIvcGVlbG9mZi5jCj4gQEAgLTEsMTIgKzEsMTIgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVm ZXJlbmNlIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBleHRlbnNpb25zLgo+ICsvKiBTQ1RQIGtl cm5lbCBJbXBsZW1lbnRhdGlvbjogVXNlciBBUEkgZXh0ZW5zaW9ucy4KPiAgICAqCj4gICAgKiBw ZWVsb2ZmLmMKPiAgICAqCj4gICAgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IExHUEwgdjIuMSBhcyBkZXNjcmliZWQgaW4KPiAtICogICAgaHR0cDovL3d3dy5nbnUub3JnL2Nv cHlsZWZ0L2xlc3Nlci50eHQKPiArICogICAgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xl c3Nlci50eHQKPiAgICAqCj4gICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdXNlciBsaWJy YXJ5IHRoYXQgb2ZmZXJzIHN1cHBvcnQgZm9yIHRoZQo+IC0gKiBTQ1RQIGtlcm5lbCByZWZlcmVu Y2UgSW1wbGVtZW50YXRpb24uIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcwo+ICsgKiBTQ1RQIGtl cm5lbCBJbXBsZW1lbnRhdGlvbi4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzCj4gICAgKiBjb2Rl IGlzIHRvIHByb3ZpZGUgdGhlIFNDVFAgU29ja2V0IEFQSSBtYXBwaW5ncyBmb3IgdXNlcgo+ICAg ICogYXBwbGljYXRpb24gdG8gaW50ZXJmYWNlIHdpdGggdGhlIFNDVFAgaW4ga2VybmVsLgo+ICAg ICoKPiBAQCAtMTQsMjAgKzE0LDIxIEBACj4gICAgKiBkZWZpbmVkIGluIDxkcmFmdC1pZXRmLXRz dndnLXNjdHBzb2NrZXQtMTAudHh0Lgo+ICAgICoKPiAgICAqIChDKSBDb3B5cmlnaHQgSUJNIENv cnAuIDIwMDEsIDIwMDMKPiAtICoKPiAtICogV3JpdHRlbiBvciBtb2RpZmllZCBieToKPiArICoK PiArICogV3JpdHRlbiBvciBtb2RpZmllZCBieToKPiAgICAqICBTcmlkaGFyIFNhbXVkcmFsYSAg ICAgPHNyaUB1cy5pYm0uY29tPgo+ICAgICovCj4gICAKPiAtI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4JCS8qIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRzb2Nrb3B0KCkgKi8KPiAtI2luY2x1 ZGUgPG5ldGluZXQvc2N0cC5oPgkvKiBTQ1RQX1NPQ0tPUFRfQklORFhfKiAqLwo+ICsjaW5jbHVk ZSA8c3lzL3NvY2tldC5oPiAgIC8qIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRzb2Nrb3B0 KCkgKi8KPiArI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPiAvKiBTQ1RQX1NPQ0tPUFRfQklORFhf KiAqLwo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAKPiAgIC8qIEJyYW5jaCBvZmYgYW4gYXNz b2NpYXRpb24gaW50byBhIHNlcGVyYXRlIHNvY2tldC4gIFRoaXMgaXMgYSBuZXcgU0NUUCBBUEkK PiAtICogZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIDguMiBvZiB0aGUgU29ja2V0cyBBUEkgRXh0 ZW5zaW9ucyBmb3IgU0NUUC4KPiArICogZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIDguMiBvZiB0 aGUgU29ja2V0cyBBUEkgRXh0ZW5zaW9ucyBmb3IgU0NUUC4KPiAgICAqIFRoaXMgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgdGhlIGdldHNvY2tvcHQoKSBpbnRlcmZhY2UuCj4gLSAqLwo+IC1pbnQgc2N0 cF9wZWVsb2ZmKGludCBmZCwgc2N0cF9hc3NvY190IGFzc29jaWQpCj4gKyAqLwo+ICtpbnQKPiAr c2N0cF9wZWVsb2ZmKGludCBmZCwgc2N0cF9hc3NvY190IGFzc29jaWQpCj4gICB7Cj4gICAJc2N0 cF9wZWVsb2ZmX2FyZ190IHBlZWxvZmY7Cj4gICAJc29ja2xlbl90IHBlZWxvZmZfc2l6ZSA9IHNp emVvZihwZWVsb2ZmKTsKPiBAQCAtMzUsMTIgKzM2LDEyIEBAIGludCBzY3RwX3BlZWxvZmYoaW50 IGZkLCBzY3RwX2Fzc29jX3QgYXNzb2NpZCkKPiAgIAo+ICAgCXBlZWxvZmYuYXNzb2NpZCA9IGFz c29jaWQ7Cj4gICAJcGVlbG9mZi5zZCA9IDA7Cj4gLQllcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xf U0NUUCwgU0NUUF9TT0NLT1BUX1BFRUxPRkYsICZwZWVsb2ZmLAo+IC0JCQkgJnBlZWxvZmZfc2l6 ZSk7Cj4gKwllcnIgPSBnZXRzb2Nrb3B0KGZkLCBTT0xfU0NUUCwgU0NUUF9TT0NLT1BUX1BFRUxP RkYsICZwZWVsb2ZmLAo+ICsJCQkgJnBlZWxvZmZfc2l6ZSk7Cj4gICAJaWYgKGVyciA8IDApIHsK PiAgIAkJcmV0dXJuIGVycjsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gcGVlbG9mZi5zZDsKPiAg IAo+IC19CQkJCS8qIHNjdHBfcGVlbG9mZigpICovCj4gK30gLyogc2N0cF9wZWVsb2ZmKCkgKi8K PiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9saWIvcmVjdm1zZy5jIGIvdGVz dGNhc2VzL25ldHdvcmsvc2N0cC9saWIvcmVjdm1zZy5jCj4gaW5kZXggNGVmZmZhZS4uNDU3NTc4 OCAxMDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9yZWN2bXNnLmMKPiAr KysgYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9yZWN2bXNnLmMKPiBAQCAtMSwxMiArMSwx MiBAQAo+IC0vKiBTQ1RQIGtlcm5lbCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb246IFVzZXIgQVBJ IGV4dGVuc2lvbnMuCj4gKy8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBl eHRlbnNpb25zLgo+ICAgICoKPiAgICAqIHNjdHBfcmVjdm1zZy5jCj4gICAgKgo+ICAgICogRGlz dHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIHYyLjEgYXMgZGVzY3JpYmVkIGlu Cj4gLSAqICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gKyAqICAg IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIudHh0Cj4gICAgKgo+ICAgICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHVzZXIgbGlicmFyeSB0aGF0IG9mZmVycyBzdXBwb3J0IGZv ciB0aGUKPiAtICogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uLiBUaGUgbWFp biBwdXJwb3NlIG9mIHRoaXMKPiArICogU0NUUCBrZXJuZWwgSW1wbGVtZW50YXRpb24uIFRoZSBt YWluIHB1cnBvc2Ugb2YgdGhpcwo+ICAgICogY29kZSBpcyB0byBwcm92aWRlIHRoZSBTQ1RQIFNv Y2tldCBBUEkgbWFwcGluZ3MgZm9yIHVzZXIKPiAgICAqIGFwcGxpY2F0aW9uIHRvIGludGVyZmFj ZSB3aXRoIHRoZSBTQ1RQIGluIGtlcm5lbC4KPiAgICAqCj4gQEAgLTIzLDkgKzIzLDkgQEAKPiAg ICAqIHRoYXQgaW4gb3JkZXIgZm9yIHRoZSBzY3RwX3NuZHJjdmluZm8gc3RydWN0dXJlIHRvIGJl IGZpbGxlZCBpbiBieQo+ICAgICogc2N0cF9yZWN2bXNnKCkgdGhlIGNhbGxlciBtdXN0IGVuYWJs ZSB0aGUgc2N0cF9kYXRhX2lvX2V2ZW50cyB3aXRoCj4gICAgKiB0aGUgU0NUUF9FVkVOVFMgb3B0 aW9uLgo+IC0gKgo+ICsgKgo+ICAgICogc2N0cF9yZWN2bXNnKCkuIEl0cyBzeW50YXggaXMsCj4g LSAqCj4gKyAqCj4gICAgKiBpbnQgc2N0cF9yZWN2bXNnKGludCBzLAo+ICAgICoJCSAgICB2b2lk ICptc2csCj4gICAgKgkJICAgIHNpemVfdCBsZW4sCj4gQEAgLTMzLDggKzMzLDggQEAKPiAgICAq CQkgICAgc29ja2xlbl90ICpmcm9tbGVuLAo+ICAgICoJCSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3Zp bmZvICpzaW5mbywKPiAgICAqCQkgICAgaW50ICptc2dfZmxhZ3MpCj4gLSAqCj4gLSAqCj4gKyAq Cj4gKyAqCj4gICAgKiBzICAgICAgICAgIC0gaXMgdGhlIHNvY2tldCBkZXNjcmlwdG9yCj4gICAg KiBtc2cgICAgICAgIC0gaXMgYSBtZXNzYWdlIGJ1ZmZlciB0byBiZSBmaWxsZWQuCj4gICAgKiBs ZW4gICAgICAgIC0gaXMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBidWZmZXIuCj4gQEAgLTQ5 LDExICs0OSwxMSBAQAo+ICAgCj4gICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8 ZXJybm8uaD4KPiAtI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4JCS8qIHN0cnVjdCBzb2NrYWRkcl9z dG9yYWdlLCBzZXRzb2Nrb3B0KCkgKi8KPiArI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4gICAvKiBz dHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwgc2V0c29ja29wdCgpICovCj4gICAjaW5jbHVkZSA8bmV0 aW5ldC9zY3RwLmg+Cj4gICAKPiAgIGludCBzY3RwX3JlY3Ztc2coaW50IHMsIHZvaWQgKm1zZywg c2l6ZV90IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLAo+IC0JCSBzb2NrbGVuX3QgKiBmcm9t bGVuLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKPiArCQkgc29ja2xlbl90ICpmcm9t bGVuLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKPiAgIAkJIGludCAqbXNnX2ZsYWdz KQo+ICAgewo+ICAgCWludCBlcnJvcjsKPiBAQCAtNjIsNyArNjIsNyBAQCBpbnQgc2N0cF9yZWN2 bXNnKGludCBzLCB2b2lkICptc2csIHNpemVfdCBsZW4sIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwK PiAgIAljaGFyIGluY21zZ1tDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv KSldOwo+ICAgCXN0cnVjdCBjbXNnaGRyICpjbXNnID0gTlVMTDsKPiAgIAo+IC0JbWVtc2V0KCZp bm1zZywgMCwgc2l6ZW9mKGlubXNnKSk7Cj4gKwltZW1zZXQoJmlubXNnLCAwLCBzaXplb2YgKGlu bXNnKSk7Cj4gICAKPiAgIAlpb3YuaW92X2Jhc2UgPSBtc2c7Cj4gICAJaW92Lmlvdl9sZW4gPSBs ZW47Cj4gQEAgLTc0LDcgKzc0LDcgQEAgaW50IHNjdHBfcmVjdm1zZyhpbnQgcywgdm9pZCAqbXNn LCBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCj4gICAJaW5tc2cubXNnX2NvbnRy b2wgPSBpbmNtc2c7Cj4gICAJaW5tc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoaW5jbXNnKTsK PiAgIAo+IC0JZXJyb3IgPSByZWN2bXNnKHMsICZpbm1zZywgMCk7Cj4gKwllcnJvciA9IHJlY3Zt c2cocywgJmlubXNnLCBtc2dfZmxhZ3MgPyAqbXNnX2ZsYWdzIDogMCk7Cj4gICAJaWYgKGVycm9y IDwgMCkKPiAgIAkJcmV0dXJuIGVycm9yOwo+ICAgCj4gQEAgLTg3LDEzICs4NywxMyBAQCBpbnQg c2N0cF9yZWN2bXNnKGludCBzLCB2b2lkICptc2csIHNpemVfdCBsZW4sIHN0cnVjdCBzb2NrYWRk ciAqZnJvbSwKPiAgIAkJcmV0dXJuIGVycm9yOwo+ICAgCj4gICAJZm9yIChjbXNnID0gQ01TR19G SVJTVEhEUigmaW5tc2cpOyBjbXNnICE9IE5VTEw7Cj4gLQkgICAgIGNtc2cgPSBDTVNHX05YVEhE UigmaW5tc2csIGNtc2cpKSB7Cj4gKwkJCQkgY21zZyA9IENNU0dfTlhUSERSKCZpbm1zZywgY21z Zykpewo+ICAgCQlpZiAoKElQUFJPVE9fU0NUUCA9PSBjbXNnLT5jbXNnX2xldmVsKSAmJgo+ICAg CQkgICAgKFNDVFBfU05EUkNWID09IGNtc2ctPmNtc2dfdHlwZSkpCj4gICAJCQlicmVhazsKPiAg IAl9Cj4gICAKPiAtCS8qIENvcHkgc2luZm8uICovCj4gKyAgICAgICAgLyogQ29weSBzaW5mby4g Ki8KPiAgIAlpZiAoY21zZykKPiAgIAkJbWVtY3B5KHNpbmZvLCBDTVNHX0RBVEEoY21zZyksIHNp emVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvdGVzdGNh c2VzL25ldHdvcmsvc2N0cC9saWIvc2VuZG1zZy5jIGIvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC9s aWIvc2VuZG1zZy5jCj4gaW5kZXggODJkOThmNS4uOTA0NjE3NCAxMDA2NDQKPiAtLS0gYS90ZXN0 Y2FzZXMvbmV0d29yay9zY3RwL2xpYi9zZW5kbXNnLmMKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29y ay9zY3RwL2xpYi9zZW5kbXNnLmMKPiBAQCAtMSwxMiArMSwxMiBAQAo+IC0vKiBTQ1RQIGtlcm5l bCByZWZlcmVuY2UgSW1wbGVtZW50YXRpb246IFVzZXIgQVBJIGV4dGVuc2lvbnMuCj4gKy8qIFND VFAga2VybmVsIEltcGxlbWVudGF0aW9uOiBVc2VyIEFQSSBleHRlbnNpb25zLgo+ICAgICoKPiAg ICAqIHNlbmRtc2cuYwo+ICAgICoKPiAgICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgTEdQTCB2Mi4xIGFzIGRlc2NyaWJlZCBpbgo+IC0gKiAgICBodHRwOi8vd3d3LmdudS5v cmcvY29weWxlZnQvbGVzc2VyLnR4dAo+ICsgKiAgICBodHRwOi8vd3d3LmdudS5vcmcvY29weWxl ZnQvbGVzc2VyLnR4dAo+ICAgICoKPiAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB1c2Vy IGxpYnJhcnkgdGhhdCBvZmZlcnMgc3VwcG9ydCBmb3IgdGhlCj4gLSAqIFNDVFAga2VybmVsIHJl ZmVyZW5jZSBJbXBsZW1lbnRhdGlvbi4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzCj4gKyAqIFND VFAga2VybmVsIEltcGxlbWVudGF0aW9uLiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMKPiAgICAq IGNvZGUgaXMgdG8gcHJvdmlkZSB0aGUgU0NUUCBTb2NrZXQgQVBJIG1hcHBpbmdzIGZvciB1c2Vy Cj4gICAgKiBhcHBsaWNhdGlvbiB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgU0NUUCBpbiBrZXJuZWwu Cj4gICAgKgo+IEBAIC0yMCw3ICsyMCw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPHN0 cmluZy5oPgo+IC0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgkJLyogc3RydWN0IHNvY2thZGRyX3N0 b3JhZ2UsIHNldHNvY2tvcHQoKSAqLwo+ICsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPiAgIC8qIHN0 cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzZXRzb2Nrb3B0KCkgKi8KPiAgICNpbmNsdWRlIDxuZXRp bmV0L3NjdHAuaD4KPiAgIAo+ICAgLyogVGhpcyBsaWJyYXJ5IGZ1bmN0aW9uIGFzc2lzdHMgdGhl IHVzZXIgd2l0aCB0aGUgYWR2YW5jZWQgZmVhdHVyZXMKPiBAQCAtNzIsMTAgKzcyLDExIEBAIHNj dHBfc2VuZG1zZyhpbnQgcywgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29j a2FkZHIgKnRvLAo+ICAgICovCj4gICBpbnQKPiAgIHNjdHBfc2VuZChpbnQgcywgY29uc3Qgdm9p ZCAqbXNnLCBzaXplX3QgbGVuLAo+IC0JICBjb25zdCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpz aW5mbywgaW50IGZsYWdzKQo+ICsgICAgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfc25kcmN2aW5m byAqc2luZm8sIGludCBmbGFncykKPiAgIHsKPiAgIAlzdHJ1Y3QgbXNnaGRyIG91dG1zZzsKPiAg IAlzdHJ1Y3QgaW92ZWMgaW92Owo+ICsJY2hhciBvdXRjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0 cnVjdCBzY3RwX3NuZHJjdmluZm8pKV07Cj4gICAKPiAgIAlvdXRtc2cubXNnX25hbWUgPSBOVUxM Owo+ICAgCW91dG1zZy5tc2dfbmFtZWxlbiA9IDA7Cj4gQEAgLTg1LDggKzg2LDcgQEAgc2N0cF9z ZW5kKGludCBzLCBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sCj4gICAJb3V0bXNnLm1zZ19p b3ZsZW4gPSAxOwo+ICAgCW91dG1zZy5tc2dfY29udHJvbGxlbiA9IDA7Cj4gICAKPiAtCWlmIChz aW5mbykgewo+IC0JCWNoYXIgb3V0Y21zZ1tDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9z bmRyY3ZpbmZvKSldOwo+ICsJaWYgKHNpbmZvKSB7CQo+ICAgCQlzdHJ1Y3QgY21zZ2hkciAqY21z ZzsKPiAgIAo+ICAgCQlvdXRtc2cubXNnX2NvbnRyb2wgPSBvdXRjbXNnOwo+IGRpZmYgLS1naXQg YS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL3Rlc3RsaWIvc2N0cHV0aWwuYyBiL3Rlc3RjYXNlcy9u ZXR3b3JrL3NjdHAvdGVzdGxpYi9zY3RwdXRpbC5jCj4gaW5kZXggMjZjOTIwMy4uYTFmYjc5NSAx MDA2NDQKPiAtLS0gYS90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL3Rlc3RsaWIvc2N0cHV0aWwuYwo+ ICsrKyBiL3Rlc3RjYXNlcy9uZXR3b3JrL3NjdHAvdGVzdGxpYi9zY3RwdXRpbC5jCj4gQEAgLTEs MTcgKzEsMTcgQEAKPiAtLyogU0NUUCBrZXJuZWwgcmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCj4g Ky8qIFNDVFAga2VybmVsIEltcGxlbWVudGF0aW9uCj4gICAgKiAoQykgQ29weXJpZ2h0IElCTSBD b3JwLiAyMDAxLCAyMDAzCj4gICAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQ2lzY28KPiAgICAqIENv cHlyaWdodCAoQykgMTk5OS0yMDAwIE1vdG9yb2xhCj4gICAgIyBDb3B5cmlnaHQgKEMpIDIwMDEg Tm9raWEKPiAgICAqIENvcHlyaWdodCAoQykgMjAwMSBMYSBNb250ZSBILlAuIFlhcnJvbGwKPiAt ICoKPiAtICogVGhlIFNDVFAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdh cmU7Cj4gKyAqCj4gKyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7 Cj4gICAgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZgo+ICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo+ICAgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICAgICogYW55IGxhdGVyIHZlcnNpb24uCj4gICAg Kgo+IC0gKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdAo+ICsgKiBUaGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4gICAgKiB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKPiAgICAqICAgICAg ICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKPiAgICAqIHdhcnJhbnR5IG9mIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KPiBAQCAt NDIsMjEgKzQyLDIyIEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gLSNp bmNsdWRlIDxlcnJuby5oPgo+ICAgI2luY2x1ZGUgPGN0eXBlLmg+Cj4gICAjaW5jbHVkZSA8c3Ry aW5nLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gICAjaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgo+ICAgI2luY2x1ZGUgPHN5cy91aW8uaD4KPiAtI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K PiAtI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgo+ICsjaW5j bHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPG1hbGxvYy5oPgo+ICAgI2luY2x1ZGUgIm5ldGlu ZXQvc2N0cC5oIgo+ICAgI2luY2x1ZGUgInNjdHB1dGlsLmgiCj4gICAKPiAgIC8qIFRoaXMgZnVu Y3Rpb24gcHJpbnRzIHRoZSBjbXNnIGRhdGEuICovCj4gLXZvaWQgdGVzdF9wcmludF9jbXNnKHNj dHBfY21zZ190IHR5cGUsIHNjdHBfY21zZ19kYXRhX3QgKiBkYXRhKQo+ICt2b2lkCj4gK3Rlc3Rf cHJpbnRfY21zZyhzY3RwX2Ntc2dfdCB0eXBlLCBzY3RwX2Ntc2dfZGF0YV90ICpkYXRhKQo+ICAg ewo+IC0Jc3dpdGNoICh0eXBlKSB7Cj4gKwlzd2l0Y2godHlwZSkgewo+ICAgCWNhc2UgU0NUUF9J TklUOgo+ICAgCQlwcmludGYoIklOSVRcbiIpOwo+ICAgCQlwcmludGYoIiAgIHNpbml0X251bV9v c3RyZWFtcyAlZFxuIiwKPiBAQCAtNjcsMjEgKzY4LDIxIEBAIHZvaWQgdGVzdF9wcmludF9jbXNn KHNjdHBfY21zZ190IHR5cGUsIHNjdHBfY21zZ19kYXRhX3QgKiBkYXRhKQo+ICAgCQkgICAgICAg ZGF0YS0+aW5pdC5zaW5pdF9tYXhfYXR0ZW1wdHMpOwo+ICAgCQlwcmludGYoIiAgIHNpbml0X21h eF9pbml0X3RpbWVvICVkXG4iLAo+ICAgCQkgICAgICAgZGF0YS0+aW5pdC5zaW5pdF9tYXhfaW5p dF90aW1lbyk7Cj4gLQo+ICsJCQo+ICAgCQlicmVhazsKPiAgIAljYXNlIFNDVFBfU05EUkNWOgo+ ICAgCQlwcmludGYoIlNORFJDVlxuIik7Cj4gLQkJcHJpbnRmKCIgICBzaW5mb19zdHJlYW0gJXVc biIsIGRhdGEtPnNuZHJjdi5zaW5mb19zdHJlYW0pOwo+IC0JCXByaW50ZigiICAgc2luZm9fc3Nu ICV1XG4iLCBkYXRhLT5zbmRyY3Yuc2luZm9fc3NuKTsKPiAtCQlwcmludGYoIiAgIHNpbmZvX2Zs YWdzIDB4JXhcbiIsIGRhdGEtPnNuZHJjdi5zaW5mb19mbGFncyk7Cj4gLQkJcHJpbnRmKCIgICBz aW5mb19wcGlkICV1XG4iLCBkYXRhLT5zbmRyY3Yuc2luZm9fcHBpZCk7Cj4gLQkJcHJpbnRmKCIg ICBzaW5mb19jb250ZXh0ICV4XG4iLCBkYXRhLT5zbmRyY3Yuc2luZm9fY29udGV4dCk7Cj4gLQkJ cHJpbnRmKCIgICBzaW5mb190c24gICAgICV1XG4iLCBkYXRhLT5zbmRyY3Yuc2luZm9fdHNuKTsK PiAtCQlwcmludGYoIiAgIHNpbmZvX2N1bXRzbiAgJXVcbiIsIGRhdGEtPnNuZHJjdi5zaW5mb19j dW10c24pOwo+ICsJCXByaW50ZigiICAgc2luZm9fc3RyZWFtICV1XG4iLAlkYXRhLT5zbmRyY3Yu c2luZm9fc3RyZWFtKTsKPiArCQlwcmludGYoIiAgIHNpbmZvX3NzbiAldVxuIiwJZGF0YS0+c25k cmN2LnNpbmZvX3Nzbik7Cj4gKwkJcHJpbnRmKCIgICBzaW5mb19mbGFncyAweCV4XG4iLAlkYXRh LT5zbmRyY3Yuc2luZm9fZmxhZ3MpOwo+ICsJCXByaW50ZigiICAgc2luZm9fcHBpZCAldVxuIiwJ ZGF0YS0+c25kcmN2LnNpbmZvX3BwaWQpOwo+ICsJCXByaW50ZigiICAgc2luZm9fY29udGV4dCAl eFxuIiwJZGF0YS0+c25kcmN2LnNpbmZvX2NvbnRleHQpOwo+ICsJCXByaW50ZigiICAgc2luZm9f dHNuICAgICAldVxuIiwgICAgZGF0YS0+c25kcmN2LnNpbmZvX3Rzbik7Cj4gKwkJcHJpbnRmKCIg ICBzaW5mb19jdW10c24gICV1XG4iLCAgICBkYXRhLT5zbmRyY3Yuc2luZm9fY3VtdHNuKTsKPiAg IAkJcHJpbnRmKCIgICBzaW5mb19hc3NvY19pZCAgJXVcbiIsIGRhdGEtPnNuZHJjdi5zaW5mb19h c3NvY19pZCk7Cj4gLQo+ICsJCQo+ICAgCQlicmVhazsKPiAtCj4gKwkJCj4gICAJZGVmYXVsdDoK PiAgIAkJcHJpbnRmKCJVTktOT1dOIENNU0c6ICVkXG4iLCB0eXBlKTsKPiAgIAkJYnJlYWs7Cj4g QEAgLTg5LDcgKzkwLDggQEAgdm9pZCB0ZXN0X3ByaW50X2Ntc2coc2N0cF9jbXNnX3QgdHlwZSwg c2N0cF9jbXNnX2RhdGFfdCAqIGRhdGEpCj4gICB9Cj4gICAKPiAgIC8qIFRoaXMgZnVuY3Rpb24g cHJpbnRzIHRoZSBtZXNzYWdlLiAqLwo+IC12b2lkIHRlc3RfcHJpbnRfbWVzc2FnZShpbnQgc2ss IHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pCj4gK3ZvaWQKPiArdGVzdF9wcmlu dF9tZXNzYWdlKGludCBzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbXNnX2xlbikKPiAg IHsKPiAgIAlzY3RwX2Ntc2dfZGF0YV90ICpkYXRhOwo+ICAgCXN0cnVjdCBjbXNnaGRyICpjbXNn Owo+IEBAIC05OSw5ICsxMDEsMTAgQEAgdm9pZCB0ZXN0X3ByaW50X21lc3NhZ2UoaW50IHNrLCBz dHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBtc2dfbGVuKQo+ICAgCXVuaW9uIHNjdHBfbm90aWZp Y2F0aW9uICpzbjsKPiAgIAo+ICAgCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsKPiAt CSAgICAgY21zZyAhPSBOVUxMOyBjbXNnID0gQ01TR19OWFRIRFIobXNnLCBjbXNnKSkgewo+IC0J CWRhdGEgPSAoc2N0cF9jbXNnX2RhdGFfdCAqKSBDTVNHX0RBVEEoY21zZyk7Cj4gLQkJdGVzdF9w cmludF9jbXNnKGNtc2ctPmNtc2dfdHlwZSwgZGF0YSk7Cj4gKwkgICAgIGNtc2cgIT0gTlVMTDsK PiArCSAgICAgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKPiArCQkgICAgIGRhdGEg PSAoc2N0cF9jbXNnX2RhdGFfdCAqKUNNU0dfREFUQShjbXNnKTsKPiArCQkgICAgIHRlc3RfcHJp bnRfY21zZyhjbXNnLT5jbXNnX3R5cGUsIGRhdGEpOwo+ICAgCX0KPiAgIAo+ICAgCWlmICghKE1T R19OT1RJRklDQVRJT04gJiBtc2ctPm1zZ19mbGFncykpIHsKPiBAQCAtMTA5LDM0ICsxMTIsMjkg QEAgdm9pZCB0ZXN0X3ByaW50X21lc3NhZ2UoaW50IHNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNp emVfdCBtc2dfbGVuKQo+ICAgCQkvKiBNYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHByaW50 YWJsZSBhbmQgdGhhdCB3ZQo+ICAgCQkgKiBhcmUgTlVMIHRlcm1pbmF0ZWQuLi4KPiAgIAkJICov Cj4gLQkJcHJpbnRmKCJEQVRBKCV6aSk6ICAiLCBtc2dfbGVuKTsKPiAtCQl3aGlsZSAobXNnX2xl biA+IDApIHsKPiArCQlwcmludGYoIkRBVEEoJWQpOiAgIiwgbXNnX2xlbik7Cj4gKwkJd2hpbGUg KCBtc2dfbGVuID4gMCApIHsKPiAgIAkJCWNoYXIgKnRleHQ7Cj4gICAJCQlpbnQgbGVuOwo+ICAg Cj4gICAJCQl0ZXh0ID0gbXNnLT5tc2dfaW92W2luZGV4XS5pb3ZfYmFzZTsKPiAgIAkJCWxlbiA9 IG1zZy0+bXNnX2lvdltpbmRleF0uaW92X2xlbjsKPiAgIAo+IC0JCQlzYXZlID0gdGV4dFttc2df bGVuIC0gMV07Cj4gLQkJCWlmIChsZW4gPiBtc2dfbGVuKSB7Cj4gLQkJCQl0ZXh0WyhsZW4gPSBt c2dfbGVuKSAtIDFdID0gJ1wwJzsKPiAtCQkJfQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBz YXZlID0gdGV4dFttc2dfbGVuLTFdOwo+ICsJCQlpZiAoIGxlbiA+IG1zZ19sZW4gKSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFsobGVuID0gbXNnX2xlbikgLSAxXSA9 ICdcMCc7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAgIAo+IC0JCQlpZiAoKG1zZ19s ZW4gLT0gbGVuKSA+IDApIHsKPiAtCQkJCWluZGV4Kys7Cj4gLQkJCX0KPiArCQkJaWYgKCAobXNn X2xlbiAtPSBsZW4pID4gMCApIHsgaW5kZXgrKzsgfQo+ICAgCj4gICAJCQlmb3IgKGkgPSAwOyBp IDwgbGVuIC0gMTsgKytpKSB7Cj4gLQkJCQlpZiAoIWlzcHJpbnQodGV4dFtpXSkpCj4gLQkJCQkJ dGV4dFtpXSA9ICcuJzsKPiAtCQkJfQo+IC0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIWlzcHJpbnQodGV4dFtpXSkpIHRleHRbaV0gPSAnLic7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KPiArCQkKPiAgIAkJCXByaW50ZigiJXMiLCB0ZXh0KTsKPiAtCQkJdGV4 dFttc2dfbGVuIC0gMV0gPSBzYXZlOwo+ICsJCQl0ZXh0W21zZ19sZW4tMV0gPSBzYXZlOwo+ICAg Cj4gLQkJCWlmICgoZG9uZSA9ICFzdHJjbXAodGV4dCwgImV4aXQiKSkpIHsKPiAtCQkJCWJyZWFr Owo+IC0JCQl9Cj4gKwkJCWlmICggKGRvbmUgPSAhc3RyY21wKHRleHQsICJleGl0IikpICkgeyBi cmVhazsgfQo+ICAgCQl9Cj4gICAJfSBlbHNlIHsKPiAgIAkJcHJpbnRmKCJOT1RJRklDQVRJT046 ICIpOwo+IEBAIC0xNzcsMzYgKzE3NSwzNyBAQCB2b2lkIHRlc3RfcHJpbnRfbWVzc2FnZShpbnQg c2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IG1zZ19sZW4pCj4gICAvKiBDaGVjayBpZiBh IGJ1Zi9tc2dfZmxhZ3MgbWF0Y2hlcyBhIG5vdGlmaWNhdGlvbiwgaXRzIHR5cGUsIGFuZCBwb3Nz aWJseSBhbgo+ICAgICogYWRkaXRpb25hbCBmaWVsZCBpbiB0aGUgY29ycmVzcG9uZGluZyBub3Rp ZmljYXRpb24gc3RydWN0dXJlLgo+ICAgICovCj4gLXZvaWQKPiArdm9pZAo+ICAgdGVzdF9jaGVj a19idWZfbm90aWZpY2F0aW9uKHZvaWQgKmJ1ZiwgaW50IGRhdGFsZW4sIGludCBtc2dfZmxhZ3Ms Cj4gICAJCQkgICAgaW50IGV4cGVjdGVkX2RhdGFsZW4sIHVpbnQxNl90IGV4cGVjdGVkX3NuX3R5 cGUsCj4gICAJCQkgICAgdWludDMyX3QgZXhwZWN0ZWRfYWRkaXRpb25hbCkKPiAgIHsKPiAgIAl1 bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqc247Cj4gLQo+ICsJCj4gICAJaWYgKCEobXNnX2ZsYWdz ICYgTVNHX05PVElGSUNBVElPTikpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJHb3QgYSBk YXRhbXNnLCBleHBlY3Rpbmcgbm90aWZpY2F0aW9uIik7Cj4gLQo+ICsJCXRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgIkdvdCBhIGRhdGFtc2csIGV4cGVjdGluZyAiCj4gKwkJCSAibm90aWZpY2F0 aW9uIik7Cj4gKwkKPiAgIAlpZiAoZXhwZWN0ZWRfZGF0YWxlbiA8PSAwKQo+ICAgCQlyZXR1cm47 Cj4gICAKPiAgIAlpZiAoZGF0YWxlbiAhPSBleHBlY3RlZF9kYXRhbGVuKQo+IC0JCXRzdF9icmtt KFRCUk9LLCBOVUxMLCAiR290IGEgbm90aWZpY2F0aW9uIG9mIHVuZXhwZWN0ZWQgIgo+IC0JCQkg Imxlbmd0aCAoJWQpOyBleHBlY3RlZCBsZW5ndGggd2FzICVkIiwgZGF0YWxlbiwKPiArCQl0c3Rf YnJrbShUQlJPSywgdHN0X2V4aXQsICJHb3QgYSBub3RpZmljYXRpb24gb2YgdW5leHBlY3RlZCAi Cj4gKwkJCSAibGVuZ3RoOiVkLCBleHBlY3RlZCBsZW5ndGg6JWQiLCBkYXRhbGVuLAo+ICAgCQkJ IGV4cGVjdGVkX2RhdGFsZW4pOwo+IC0KPiArCQkKPiAgIAlzbiA9ICh1bmlvbiBzY3RwX25vdGlm aWNhdGlvbiAqKWJ1ZjsKPiAgIAlpZiAoc24tPnNuX2hlYWRlci5zbl90eXBlICE9IGV4cGVjdGVk X3NuX3R5cGUpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJVbmV4cGVjdGVkIG5vdGlmaWNh dGlvbjolZCAiCj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiVW5leHBlY3RlZCBub3Rp ZmljYXRpb246JWQiCj4gICAJCQkgImV4cGVjdGVkOiVkIiwgc24tPnNuX2hlYWRlci5zbl90eXBl LAo+IC0JCQkgZXhwZWN0ZWRfc25fdHlwZSk7Cj4gLQo+IC0Jc3dpdGNoIChzbi0+c25faGVhZGVy LnNuX3R5cGUpIHsKPiArCQkJICBleHBlY3RlZF9zbl90eXBlKTsKPiArCQo+ICsJc3dpdGNoKHNu LT5zbl9oZWFkZXIuc25fdHlwZSl7Cj4gICAJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKPiAgIAkJ aWYgKHNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX3N0YXRlICE9IGV4cGVjdGVkX2FkZGl0aW9uYWwp Cj4gLQkJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiVW5leHBlY3RlZCBzYWNfc3RhdGU6JWQgIgo+ ICsJCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJVbmV4cGVjdGVkIHNhY19zdGF0ZTolZCAi Cj4gICAJCQkJICJleHBlY3RlZDolZCIsIHNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX3N0YXRlLAo+ IC0JCQkJIGV4cGVjdGVkX2FkZGl0aW9uYWwpOwo+ICsJCQkJICBleHBlY3RlZF9hZGRpdGlvbmFs KTsKPiAgIAkJYnJlYWs7Cj4gICAJZGVmYXVsdDoKPiAgIAkJYnJlYWs7Cj4gQEAgLTIxNiw3ICsy MTUsNyBAQCB0ZXN0X2NoZWNrX2J1Zl9ub3RpZmljYXRpb24odm9pZCAqYnVmLCBpbnQgZGF0YWxl biwgaW50IG1zZ19mbGFncywKPiAgIC8qIENoZWNrIGlmIGEgbWVzc2FnZSBtYXRjaGVzIGEgbm90 aWZpY2F0aW9uLCBpdHMgdHlwZSwgYW5kIHBvc3NpYmx5IGFuCj4gICAgKiBhZGRpdGlvbmFsIGZp ZWxkIGluIHRoZSBjb3JyZXNwb25kaW5nIG5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmUuCj4gICAgKi8K PiAtdm9pZAo+ICt2b2lkCj4gICB0ZXN0X2NoZWNrX21zZ19ub3RpZmljYXRpb24oc3RydWN0IG1z Z2hkciAqbXNnLCBpbnQgZGF0YWxlbiwKPiAgIAkJCSAgICBpbnQgZXhwZWN0ZWRfZGF0YWxlbiwg dWludDE2X3QgZXhwZWN0ZWRfc25fdHlwZSwKPiAgIAkJCSAgICB1aW50MzJfdCBleHBlY3RlZF9h ZGRpdGlvbmFsKQo+IEBAIC0yMzYsMzQgKzIzNSwzNCBAQCB0ZXN0X2NoZWNrX2J1Zl9kYXRhKHZv aWQgKmJ1ZiwgaW50IGRhdGFsZW4sIGludCBtc2dfZmxhZ3MsCj4gICAJCSAgICB1aW50MzJfdCBl eHBlY3RlZF9wcGlkKQo+ICAgewo+ICAgCWlmIChtc2dfZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9O KQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiR290IGEgbm90aWZpY2F0aW9uLCBleHBlY3Rp bmcgYSIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJHb3QgYSBub3RpZmljYXRpb24s IGV4cGVjdGluZyBhIgo+ICAgCQkJICJkYXRhbXNnIik7Cj4gICAKPiAgIAlpZiAoZXhwZWN0ZWRf ZGF0YWxlbiA8PSAwKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpZiAoZGF0YWxlbiAhPSBleHBl Y3RlZF9kYXRhbGVuKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAiR290IGEgZGF0YW1zZyBv ZiB1bmV4cGVjdGVkICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJHb3QgYSBkYXRh bXNnIG9mIHVuZXhwZWN0ZWQgIgo+ICAgCQkJICJsZW5ndGg6JWQsIGV4cGVjdGVkIGxlbmd0aDol ZCIsIGRhdGFsZW4sCj4gICAJCQkgZXhwZWN0ZWRfZGF0YWxlbik7Cj4gICAKPiAgIAlpZiAoKG1z Z19mbGFncyAmIH4weDgwMDAwMDAwKSAhPSBleHBlY3RlZF9tc2dfZmxhZ3MpCj4gLQkJdHN0X2Jy a20oVEJST0ssIE5VTEwsICJVbmV4cGVjdGVkIG1zZ19mbGFnczoweCV4ICIKPiArCQl0c3RfYnJr bShUQlJPSywgdHN0X2V4aXQsICJVbmV4cGVjdGVkIG1zZ19mbGFnczoweCV4ICIKPiAgIAkJCSAi ZXhwZWN0aW5nOjB4JXgiLCBtc2dfZmxhZ3MsIGV4cGVjdGVkX21zZ19mbGFncyk7Cj4gICAKPiAg IAlpZiAoKDAgPT0gZXhwZWN0ZWRfc3RyZWFtKSAmJiAoMCA9PSBleHBlY3RlZF9wcGlkKSkKPiAt CQlyZXR1cm47Cj4gKwkJcmV0dXJuOwo+ICAgCj4gICAJaWYgKCFzaW5mbykKPiAtCQl0c3RfYnJr bShUQlJPSywgTlVMTCwgIk51bGwgc2luZm8sIGJ1dCBleHBlY3RlZCAiCj4gKwkJdHN0X2Jya20o VEJST0ssIHRzdF9leGl0LCAiTnVsbCBzaW5mbywgYnV0IGV4cGVjdGVkICIKPiAgIAkJCSAic3Ry ZWFtOiVkIGV4cGVjdGVkIHBwaWQ6JWQiLCBleHBlY3RlZF9zdHJlYW0sCj4gICAJCQkgZXhwZWN0 ZWRfcHBpZCk7Cj4gICAKPiAgIAlpZiAoc2luZm8tPnNpbmZvX3N0cmVhbSAhPSBleHBlY3RlZF9z dHJlYW0pCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzdHJlYW0gbWlzbWF0Y2g6IGV4cGVj dGVkOiV4ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzdHJlYW0gbWlzbWF0Y2g6 IGV4cGVjdGVkOiV4ICIKPiAgIAkJCSAiZ290OiV4IiwgZXhwZWN0ZWRfc3RyZWFtLCBzaW5mby0+ c2luZm9fc3RyZWFtKTsKPiAgIAlpZiAoc2luZm8tPnNpbmZvX3BwaWQgIT0gZXhwZWN0ZWRfcHBp ZCkKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgInBwaWQgbWlzbWF0Y2g6IGV4cGVjdGVkOiV4 ICIKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJwcGlkIG1pc21hdGNoOiBleHBlY3Rl ZDoleCAiCj4gICAJCQkgImdvdDoleFxuIiwgZXhwZWN0ZWRfcHBpZCwgc2luZm8tPnNpbmZvX3Bw aWQpOwo+ICAgfQo+ICAgCj4gQEAgLTI4MCwxMSArMjc5LDExIEBAIHRlc3RfY2hlY2tfbXNnX2Rh dGEoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZGF0YWxlbiwgaW50IGV4cGVjdGVkX2RhdGFsZW4s Cj4gICAKPiAgIAkvKiBSZWNlaXZlIGF1eGlsaWFyeSBkYXRhIGluIG1zZ2guICovCj4gICAJZm9y IChjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOyBjbXNnICE9IE5VTEw7Cj4gLQkgICAgIGNtc2cg PSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7Cj4gKwkJCQkgY21zZyA9IENNU0dfTlhUSERSKG1z ZywgY21zZykpewo+ICAgCQlpZiAoSVBQUk9UT19TQ1RQID09IGNtc2ctPmNtc2dfbGV2ZWwgJiYK PiAgIAkJICAgIFNDVFBfU05EUkNWID09IGNtc2ctPmNtc2dfdHlwZSkKPiAgIAkJCWJyZWFrOwo+ IC0JfQkJCS8qIGZvciAoYWxsIGNtc2dzKSAqLwo+ICsJfSAvKiBmb3IoIGFsbCBjbXNncykgKi8K PiAgIAo+ICAgCWlmICgoIWNtc2cpIHx8Cj4gICAJICAgIChjbXNnLT5jbXNnX2xlbiA8IENNU0df TEVOKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSkpKQo+IEBAIC0yOTgsMzEgKzI5Nywz MyBAQCB0ZXN0X2NoZWNrX21zZ19kYXRhKHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGRhdGFsZW4s IGludCBleHBlY3RlZF9kYXRhbGVuLAo+ICAgCj4gICB9Cj4gICAKPiArCj4gICAvKiBBbGxvY2F0 ZSBhIGJ1ZmZlciBvZiByZXF1ZXN0ZWQgbGVuIGFuZCBmaWxsIGluIHdpdGggZGF0YS4gKi8KPiAt dm9pZCAqdGVzdF9idWlsZF9tc2coaW50IGxlbikKPiArdm9pZCAqCj4gK3Rlc3RfYnVpbGRfbXNn KGludCBsZW4pCj4gICB7Cj4gICAJaW50IGkgPSBsZW4gLSAxOwo+ICAgCWludCBuOwo+IC0JdW5z aWduZWQgY2hhciBtc2dbXSA9Cj4gLQkgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4 OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Cj4gKwl1bnNpZ25lZCBjaGFyIG1zZ1tdID0KPiArCQki MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKPiAg IAljaGFyICptc2dfYnVmLCAqcDsKPiAgIAo+ICAgCW1zZ19idWYgPSAoY2hhciAqKW1hbGxvYyhs ZW4pOwo+ICAgCWlmICghbXNnX2J1ZikKPiAtCQl0c3RfYnJrbShUQlJPSywgTlVMTCwgIm1hbGxv YyBmYWlsZWQiKTsKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJtYWxsb2MgZmFpbGVk Iik7Cj4gICAKPiAgIAlwID0gbXNnX2J1ZjsKPiAgIAo+ICAgCWRvIHsKPiAtCQluID0gKChpID4g NTApID8gNTAgOiBpKTsKPiAtCQltZW1jcHkocCwgbXNnLCAoKGkgPiA1MCkgPyA1MCA6IGkpKTsK PiArCQluID0gKChpID4gNTApPzUwOmkpOwo+ICsJCW1lbWNweShwLCBtc2csICgoaSA+IDUwKT81 MDppKSk7Cj4gICAJCXAgKz0gbjsKPiAgIAkJaSAtPSBuOwo+IC0JfSB3aGlsZSAoaSA+IDApOwo+ ICsJfSB3aGlsZSAoaSA+IDApOwo+ICAgCj4gLQltc2dfYnVmW2xlbiAtIDFdID0gJ1wwJzsKPiAr CW1zZ19idWZbbGVuLTFdID0gJ1wwJzsKPiAgIAo+IC0JcmV0dXJuIChtc2dfYnVmKTsKPiArCXJl dHVybihtc2dfYnVmKTsKPiAgIH0KPiAgIAo+ICAgLyogRW5hYmxlIEFTU09DX0NIQU5HRSBhbmQg U05EUkNWSU5GTyBub3RpZmljYXRpb25zLiAqLwo+IEBAIC0zMzMsMTAgKzMzNCwxMSBAQCB2b2lk IHRlc3RfZW5hYmxlX2Fzc29jX2NoYW5nZShpbnQgZmQpCj4gICAJbWVtc2V0KCZzdWJzY3JpYmUs IDAsIHNpemVvZihzdWJzY3JpYmUpKTsKPiAgIAlzdWJzY3JpYmUuc2N0cF9kYXRhX2lvX2V2ZW50 ID0gMTsKPiAgIAlzdWJzY3JpYmUuc2N0cF9hc3NvY2lhdGlvbl9ldmVudCA9IDE7Cj4gLQl0ZXN0 X3NldHNvY2tvcHQoZmQsIFNDVFBfRVZFTlRTLCAoY2hhciAqKSZzdWJzY3JpYmUsIHNpemVvZihz dWJzY3JpYmUpKTsKPiArCXRlc3Rfc2V0c29ja29wdChmZCwgU0NUUF9FVkVOVFMsIChjaGFyICop JnN1YnNjcmliZSwKPiArCQkgICAgICAgIHNpemVvZihzdWJzY3JpYmUpKTsKPiAgIH0KPiAgIAo+ IC1zdGF0aWMgaW50IGNtcF9hZGRyKHNvY2thZGRyX3N0b3JhZ2VfdCAqIGFkZHIxLCBzb2NrYWRk cl9zdG9yYWdlX3QgKiBhZGRyMikKPiArc3RhdGljIGludCBjbXBfYWRkcihzb2NrYWRkcl9zdG9y YWdlX3QgKmFkZHIxLCBzb2NrYWRkcl9zdG9yYWdlX3QgKmFkZHIyKQo+ICAgewo+ICAgCWlmIChh ZGRyMS0+c2Euc2FfZmFtaWx5ICE9IGFkZHIyLT5zYS5zYV9mYW1pbHkpCj4gICAJCXJldHVybiAw Owo+IEBAIC0zNTIsMzIgKzM1NCwzMSBAQCBzdGF0aWMgaW50IGNtcF9hZGRyKHNvY2thZGRyX3N0 b3JhZ2VfdCAqIGFkZHIxLCBzb2NrYWRkcl9zdG9yYWdlX3QgKiBhZGRyMikKPiAgIAkJcmV0dXJu IG1lbWNtcCgmYWRkcjEtPnY0LnNpbl9hZGRyLCAmYWRkcjItPnY0LnNpbl9hZGRyLAo+ICAgCQkJ ICAgICAgc2l6ZW9mKGFkZHIxLT52NC5zaW5fYWRkcikpOwo+ICAgCWRlZmF1bHQ6Cj4gLQkJdHN0 X2Jya20oVEJST0ssIE5VTEwsICJpbnZhbGlkIGFkZHJlc3MgdHlwZSAlZCIsCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAiaW52YWxpZCBhZGRyZXNzIHR5cGUgJWQiLAo+ICAgCQkJIGFk ZHIxLT5zYS5zYV9mYW1pbHkpOwo+ICAgCQlyZXR1cm4gLTE7Cj4gICAJfQo+ICAgfQo+ICAgCj4g ICAvKiBUZXN0IHBlZXIgYWRkcmVzc2VzIGZvciBhc3NvY2lhdGlvbi4gKi8KPiAtaW50IHRlc3Rf cGVlcl9hZGRyKGludCBzaywgc2N0cF9hc3NvY190IGFzb2MsIHNvY2thZGRyX3N0b3JhZ2VfdCAq IHBlZXJzLAo+IC0JCSAgIGludCBjb3VudCkKPiAraW50IHRlc3RfcGVlcl9hZGRyKGludCBzaywg c2N0cF9hc3NvY190IGFzb2MsIHNvY2thZGRyX3N0b3JhZ2VfdCAqcGVlcnMsIGludCBjb3VudCkK PiAgIHsKPiAgIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzOwo+ICAgCWludCBlcnJvciwgaSwgajsK PiAgIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhX2FkZHI7Cj4gICAJc29ja2xlbl90IGFkZHJzX3NpemUg PSAwOwo+ICAgCXZvaWQgKmFkZHJidWY7Cj4gLQljaGFyICpmb3VuZCA9IChjaGFyICopbWFsbG9j KGNvdW50KTsKPiArCWNoYXIgKmZvdW5kID0gKGNoYXIgKikgbWFsbG9jKGNvdW50KTsKPiAgIAlt ZW1zZXQoZm91bmQsIDAsIGNvdW50KTsKPiAgIAo+ICAgCWVycm9yID0gc2N0cF9nZXRwYWRkcnMo c2ssIGFzb2MsICZhZGRycyk7Cj4gICAJaWYgKC0xID09IGVycm9yKSB7Cj4gLQkJdHN0X2Jya20o VEJST0ssIE5VTEwsICJzY3RwX2dldHBhZGRyczogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsJ CXRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNjdHBfZ2V0cGFkZHJzOiAlcyIsIHN0cmVycm9y KGVycm5vKSk7Cj4gICAJCXJldHVybiBlcnJvcjsKPiAgIAl9Cj4gICAJaWYgKGVycm9yICE9IGNv dW50KSB7Cj4gICAJCXNjdHBfZnJlZXBhZGRycyhhZGRycyk7Cj4gLQkJdHN0X2Jya20oVEJST0ss IE5VTEwsICJwZWVyIGNvdW50ICVkIG1pc21hdGNoLCBleHBlY3RlZCAlZCIsCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAicGVlciBjb3VudCAlZCBtaXNtYXRjaCwgZXhwZWN0ZWQgJWQi LAo+ICAgCQkJIGVycm9yLCBjb3VudCk7Cj4gICAJfQo+ICAgCWFkZHJidWYgPSBhZGRyczsKPiBA QCAtMzk1LDEyICszOTYsMTEgQEAgaW50IHRlc3RfcGVlcl9hZGRyKGludCBzaywgc2N0cF9hc3Nv Y190IGFzb2MsIHNvY2thZGRyX3N0b3JhZ2VfdCAqIHBlZXJzLAo+ICAgCQlkZWZhdWx0Ogo+ICAg CQkJZXJybm8gPSBFSU5WQUw7Cj4gICAJCQlzY3RwX2ZyZWVwYWRkcnMoYWRkcnMpOwo+IC0JCQl0 c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfZ2V0cGFkZHJzOiAlcyIsCj4gLQkJCQkgc3RyZXJy b3IoZXJybm8pKTsKPiArCQkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0cF9nZXRwYWRk cnM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAkJCXJldHVybiAtMTsKPiAgIAkJfQo+ICAg CQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgewo+IC0JCQlpZiAoY21wX2FkZHIoKHNvY2th ZGRyX3N0b3JhZ2VfdCAqKSBzYV9hZGRyLAo+ICsJCQlpZiAoY21wX2FkZHIoKHNvY2thZGRyX3N0 b3JhZ2VfdCAqKXNhX2FkZHIsCj4gICAJCQkJICAgICAmcGVlcnNbal0pID09IDApIHsKPiAgIAkJ CQlmb3VuZFtqXSA9IDE7Cj4gICAJCQl9Cj4gQEAgLTQwOCw3ICs0MDgsNyBAQCBpbnQgdGVzdF9w ZWVyX2FkZHIoaW50IHNrLCBzY3RwX2Fzc29jX3QgYXNvYywgc29ja2FkZHJfc3RvcmFnZV90ICog cGVlcnMsCj4gICAJfQo+ICAgCWZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7Cj4gICAJCWlm IChmb3VuZFtqXSA9PSAwKSB7Cj4gLQkJCXRzdF9icmttKFRCUk9LLCBOVUxMLCAicGVlciBhZGRy ZXNzICVkIG5vdCBmb3VuZCIsIGopOwo+ICsJCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJw ZWVyIGFkZHJlc3MgJWQgbm90IGZvdW5kIiwgaik7Cj4gICAJCX0KPiAgIAl9Cj4gICAJc2N0cF9m cmVlcGFkZHJzKGFkZHJzKTsKPiBkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL25ldHdvcmsvc2N0cC90 ZXN0bGliL3NjdHB1dGlsLmggYi90ZXN0Y2FzZXMvbmV0d29yay9zY3RwL3Rlc3RsaWIvc2N0cHV0 aWwuaAo+IGluZGV4IDQxNzg1NTIuLjM0N2M5MWIgMTAwNjQ0Cj4gLS0tIGEvdGVzdGNhc2VzL25l dHdvcmsvc2N0cC90ZXN0bGliL3NjdHB1dGlsLmgKPiArKysgYi90ZXN0Y2FzZXMvbmV0d29yay9z Y3RwL3Rlc3RsaWIvc2N0cHV0aWwuaAo+IEBAIC0xLDE4ICsxLDE4IEBACj4gLS8qIFNDVFAga2Vy bmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgo+ICsvKiBTQ1RQIGtlcm5lbCBJbXBsZW1lbnRh dGlvbgo+ICAgICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwMwo+ICAgICogQ29w eXJpZ2h0IChjKSAxOTk5LTIwMDAgQ2lzY28sIEluYy4KPiAgICAqIENvcHlyaWdodCAoYykgMTk5 OS0yMDAxIE1vdG9yb2xhLCBJbmMuCj4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSW50ZWwgQ29y cC4KPiAgICAqIENvcHlyaWdodCAoYykgMjAwMSBOb2tpYSwgSW5jLgo+ICAgICogQ29weXJpZ2h0 IChjKSAyMDAxIExhIE1vbnRlIEguUC4gWWFycm9sbAo+IC0gKgo+IC0gKiBUaGUgU0NUUCByZWZl cmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiArICoKPiArICogVGhlIFND VFAgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKPiAgICAqIHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCj4gICAgKiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gICAgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRp b24pCj4gICAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAgICAqCj4gLSAqIFRoZSBTQ1RQIHJlZmVy ZW5jZSBpbXBsZW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cj4g KyAqIFRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQKPiAgICAqIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZAo+ICAgICogICAgICAgICAgICAgICAgICoqKioqKioqKioq KioqKioqKioqKioqKgo+ICAgICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgo+IEBAIC01Niw5ICs1Niw5IEBACj4gICAjaW5j bHVkZSA8c3RyaW5nLmg+Cj4gICAKPiAgIHR5cGVkZWYgdW5pb24gewo+IC0Jc3RydWN0IHNvY2th ZGRyX2luIHY0Owo+ICsJc3RydWN0IHNvY2thZGRyX2luIHY0OwkKPiAgIAlzdHJ1Y3Qgc29ja2Fk ZHJfaW42IHY2Owo+IC0Jc3RydWN0IHNvY2thZGRyIHNhOwo+ICsJc3RydWN0IHNvY2thZGRyIHNh OwkKPiAgIH0gc29ja2FkZHJfc3RvcmFnZV90Owo+ICAgCj4gICAKPiBAQCAtNjgsNyArNjgsNyBA QCB0eXBlZGVmIHVuaW9uIHsKPiAgICNpZmRlZiBQUk9UX1NPQ0sKPiAgICNkZWZpbmUgU0NUUF9U RVNUUE9SVF8xIFBST1RfU09DSwo+ICAgI2Vsc2UKPiAtI2RlZmluZSBTQ1RQX1RFU1RQT1JUXzEg MTAyNAo+ICsjZGVmaW5lIFNDVFBfVEVTVFBPUlRfMSAxMDI0Cj4gICAjZW5kaWYKPiAgICNkZWZp bmUgU0NUUF9URVNUUE9SVF8yIChTQ1RQX1RFU1RQT1JUXzErMSkKPiAgIAo+IEBAIC0xMzQsMTkg KzEzNCwxNSBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3NvY2tldChpbnQgZG9tYWluLCBpbnQg dHlwZSwgaW50IHByb3RvY29sKQo+ICAgewo+ICAgCWludCBzayA9IHNvY2tldChkb21haW4sIHR5 cGUsIHByb3RvY29sKTsKPiAgICAgICAgICAgaWYgKC0xID09IHNrKQo+IC0gICAgICAgICAgICAg ICAgdHN0X2Jya20oVEJST0ssIE5VTEwsICJzb2NrZXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsK PiArICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNvY2tldDogJXMi LCBzdHJlcnJvcihlcnJubykpOwo+ICAgCXJldHVybiBzazsKPiAgIH0KPiAgIAo+ICAgc3RhdGlj IGlubGluZSBpbnQgdGVzdF9iaW5kKGludCBzaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2Nr bGVuX3QgYWRkcmxlbikKPiAgIHsKPiAtCWludCBlcnJvcjsKPiAtCWludCB0cnVlX2NvbnN0PTE7 Cj4gLQo+IC0Jc2V0c29ja29wdChzaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmdHJ1ZV9j b25zdCwgc2l6ZW9mKGludCkpOwo+IC0JZXJyb3IgPSBiaW5kKHNrLCBhZGRyLCBhZGRybGVuKTsK PiArCWludCBlcnJvciA9IGJpbmQoc2ssIGFkZHIsIGFkZHJsZW4pOwo+ICAgICAgICAgICBpZiAo LTEgPT0gZXJyb3IpCj4gLSAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgImJp bmQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArICAgICAgICAgICAgICAgIHRzdF9icmttKFRC Uk9LLCB0c3RfZXhpdCwgImJpbmQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiAgIAlyZXR1cm4g ZXJyb3I7Cj4gICB9Cj4gICAKPiBAQCAtMTU0LDcgKzE1MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50 IHRlc3RfYmluZHhfYWRkKGludCBzaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgY291bnQp Cj4gICB7Cj4gICAJaW50IGVycm9yID0gc2N0cF9iaW5keChzaywgYWRkciwgY291bnQsIFNDVFBf QklORFhfQUREX0FERFIpOwo+ICAgICAgICAgICBpZiAoLTEgPT0gZXJyb3IpCj4gLSAgICAgICAg ICAgICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgImJpbmR4IChhZGQpOiAlcyIsIHN0cmVycm9y KGVycm5vKSk7Cj4gKyAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJi aW5keCAoYWRkKTogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAgCXJldHVybiBlcnJvcjsKPiAg IH0KPiAgIAo+IEBAIC0xNjIsNyArMTU4LDcgQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9saXN0 ZW4oaW50IHNrLCBpbnQgYmFja2xvZykKPiAgIHsKPiAgIAlpbnQgZXJyb3IgPSBsaXN0ZW4oc2ss IGJhY2tsb2cpOwo+ICAgICAgICAgICBpZiAoLTEgPT0gZXJyb3IpCj4gLSAgICAgICAgICAgICAg ICB0c3RfYnJrbShUQlJPSywgTlVMTCwgImxpc3RlbjogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ ICsgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAibGlzdGVuOiAlcyIs IHN0cmVycm9yKGVycm5vKSk7Cj4gICAJcmV0dXJuIGVycm9yOwo+ICAgfQo+ICAgCj4gQEAgLTE3 MCwxNSArMTY2LDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfY29ubmVjdChpbnQgc2ssIHN0 cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJsZW4pCj4gICB7Cj4gICAJaW50IGVy cm9yID0gY29ubmVjdChzaywgYWRkciwgYWRkcmxlbik7Cj4gICAgICAgICAgIGlmICgtMSA9PSBl cnJvcikKPiAtICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCBOVUxMLCAiY29ubmVjdDog JXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ss IHRzdF9leGl0LCAiY29ubmVjdDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAgCXJldHVybiBl cnJvcjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9jb25uZWN0eChpbnQg c2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGNvdW50KQo+ICAgewo+IC0JaW50IGVycm9y ID0gc2N0cF9jb25uZWN0eChzaywgYWRkciwgY291bnQpOwo+ICsJaW50IGVycm9yID0gc2N0cF9j b25uZWN0eChzaywgYWRkciwgY291bnQsIE5VTEwpOwo+ICAgICAgICAgICBpZiAoLTEgPT0gZXJy b3IpCj4gLSAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgImNvbm5lY3R4OiAl cyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKyAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywg dHN0X2V4aXQsICJjb25uZWN0eDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAgCXJldHVybiBl cnJvcjsKPiAgIH0KPiAgIAo+IEBAIC0xODYsNyArMTgyLDcgQEAgc3RhdGljIGlubGluZSBpbnQg dGVzdF9hY2NlcHQoaW50IHNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCAqYWRk cmxlbikKPiAgIHsKPiAgIAlpbnQgZXJyb3IgPSBhY2NlcHQoc2ssIGFkZHIsIGFkZHJsZW4pOwo+ ICAgICAgICAgICBpZiAoLTEgPT0gZXJyb3IpCj4gLSAgICAgICAgICAgICAgICB0c3RfYnJrbShU QlJPSywgTlVMTCwgImFjY2VwdDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAgICAg ICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAiYWNjZXB0OiAlcyIsIHN0cmVycm9yKGVy cm5vKSk7Cj4gICAJcmV0dXJuIGVycm9yOwo+ICAgfQo+ICAgCj4gQEAgLTE5NCw3ICsxOTAsNyBA QCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3NlbmQoaW50IHNrLCBjb25zdCB2b2lkICptc2csIHNp emVfdCBsZW4sIGludCBmbGFncykKPiAgIHsKPiAgIAlpbnQgZXJyb3IgPSBzZW5kKHNrLCBtc2cs IGxlbiwgZmxhZ3MpOwo+ICAgICAgICAgICBpZiAobGVuICE9IGVycm9yKQo+IC0gICAgICAgICAg ICAgICAgdHN0X2Jya20oVEJST0ssIE5VTEwsICJzZW5kOiBlcnJvcjolZCBlcnJubzolZCIsCj4g KyAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzZW5kOiBlcnJvcjol ZCBlcnJubzolZCIsCj4gICAJCQkgZXJyb3IsIGVycm5vKTsKPiAgIAlyZXR1cm4gZXJyb3I7Cj4g ICB9Cj4gQEAgLTIwNCw3ICsyMDAsNyBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3NlbmR0byhp bnQgc2ssIGNvbnN0IHZvaWQgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzLAo+ICAgewo+ICAg CWludCBlcnJvciA9IHNlbmR0byhzaywgbXNnLCBsZW4sIGZsYWdzLCB0bywgdG9sZW4pOwo+ICAg ICAgICAgICBpZiAobGVuICE9IGVycm9yKQo+IC0gICAgICAgICAgICAgICAgdHN0X2Jya20oVEJS T0ssIE5VTEwsICJzZW5kdG86IGVycm9yOiVkIGVycm5vOiVkIiwKPiArICAgICAgICAgICAgICAg IHRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgInNlbmR0bzogZXJyb3I6JWQgZXJybm86JWQiLAo+ ICAgCQkJIGVycm9yLCBlcnJubyk7Cj4gICAJcmV0dXJuIGVycm9yOwo+ICAgfQo+IEBAIC0yMTQs NyArMjEwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9zZW5kbXNnKGludCBzaywgY29uc3Qg c3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MsCj4gICB7Cj4gICAJaW50IGVycm9yID0gc2Vu ZG1zZyhzaywgbXNnLCBmbGFncyk7Cj4gICAgICAgICAgIGlmIChtc2dsZW4gIT0gZXJyb3IpCj4g LSAgICAgICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgInNlbmRtc2c6IGVycm9yOiVk IGVycm5vOiVkIiwKPiArICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwg InNlbmRtc2c6IGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8pOwo+ICAg CXJldHVybiBlcnJvcjsKPiAgIH0KPiBAQCAtMjIzLDcgKzIxOSw3IEBAIHN0YXRpYyBpbmxpbmUg aW50IHRlc3RfcmVjdihpbnQgc2ssIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQo+ ICAgewo+ICAgCWludCBlcnJvciA9IHJlY3Yoc2ssIGJ1ZiwgbGVuLCBmbGFncyk7Cj4gICAgICAg ICAgIGlmICgtMSA9PSBlcnJvcikKPiAtICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCBO VUxMLCAicmVjdjogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAgICAgICAgICAgdHN0 X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdjogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICAg CXJldHVybiBlcnJvcjsKPiAgIH0KPiAgIAo+IEBAIC0yMzEsNyArMjI3LDcgQEAgc3RhdGljIGlu bGluZSBpbnQgdGVzdF9yZWN2bXNnKGludCBzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxh Z3MpCj4gICB7Cj4gICAJaW50IGVycm9yID0gcmVjdm1zZyhzaywgbXNnLCBmbGFncyk7Cj4gICAg ICAgICAgIGlmICgtMSA9PSBlcnJvcikKPiAtICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9L LCBOVUxMLCAicmVjdm1zZzogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAgICAgICAg ICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAicmVjdm1zZzogJXMiLCBzdHJlcnJvcihlcnJu bykpOwo+ICAgCXJldHVybiBlcnJvcjsKPiAgIH0KPiAgIAo+IEBAIC0yMzksNyArMjM1LDcgQEAg c3RhdGljIGlubGluZSBpbnQgdGVzdF9zaHV0ZG93bihpbnQgc2ssIGludCBob3cpCj4gICB7Cj4g ICAJaW50IGVycm9yID0gc2h1dGRvd24oc2ssIGhvdyk7Cj4gICAgICAgICAgIGlmICgtMSA9PSBl cnJvcikKPiAtICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCBOVUxMLCAic2h1dGRvd246 ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArICAgICAgICAgICAgICAgIHRzdF9icmttKFRCUk9L LCB0c3RfZXhpdCwgInNodXRkb3duOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gICAJcmV0dXJu IGVycm9yOwo+ICAgfQo+ICAgCj4gQEAgLTI0OCw3ICsyNDQsNyBAQCBzdGF0aWMgaW5saW5lIGlu dCB0ZXN0X2dldHNvY2tvcHQoaW50IHNrLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLAo+ICAg ewo+ICAgCWludCBlcnJvciA9IGdldHNvY2tvcHQoc2ssIFNPTF9TQ1RQLCBvcHRuYW1lLCBvcHR2 YWwsIG9wdGxlbik7Cj4gICAJaWYgKGVycm9yKQo+IC0JCXRzdF9icmttKFRCUk9LLCBOVUxMLCAi Z2V0c29ja29wdCglZCk6ICVzIiwgb3B0bmFtZSwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJnZXRzb2Nrb3B0KCVkKTogJXMiLCBvcHRuYW1lLAo+ICAgCQkJIHN0cmVycm9yKGVycm5v KSk7Cj4gICAJcmV0dXJuIGVycm9yOwo+ICAgfQo+IEBAIC0yNTgsNyArMjU0LDcgQEAgc3RhdGlj IGlubGluZSBpbnQgdGVzdF9zZXRzb2Nrb3B0KGludCBzaywgaW50IG9wdG5hbWUsIGNvbnN0IHZv aWQgKm9wdHZhbCwKPiAgIHsKPiAgIAlpbnQgZXJyb3IgPSBzZXRzb2Nrb3B0KHNrLCBTT0xfU0NU UCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwo+ICAgCWlmIChlcnJvcikKPiAtCQl0c3RfYnJr bShUQlJPSywgTlVMTCwgInNldHNvY2tvcHQoJWQpOiAlcyIsIG9wdG5hbWUsCj4gKwkJdHN0X2Jy a20oVEJST0ssIHRzdF9leGl0LCAic2V0c29ja29wdCglZCk6ICVzIiwgb3B0bmFtZSwKPiAgIAkJ CSBzdHJlcnJvcihlcnJubykpOwo+ICAgCXJldHVybiBlcnJvcjsKPiAgIH0KPiBAQCAtMjY3LDcg KzI2Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3Rfc2N0cF9wZWVsb2ZmKGludCBzaywgc2N0 cF9hc3NvY190IGFzc29jX2lkKQo+ICAgewo+ICAgCWludCBlcnJvciA9IHNjdHBfcGVlbG9mZihz aywgYXNzb2NfaWQpOwo+ICAgICAgICAgICBpZiAoLTEgPT0gZXJyb3IpCj4gLSAgICAgICAgICAg ICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgInNjdHBfcGVlbG9mZjogJXMiLCBzdHJlcnJvcihl cnJubykpOwo+ICsgICAgICAgICAgICAgICAgdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0 cF9wZWVsb2ZmOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gICAJcmV0dXJuIGVycm9yOwo+ICAg fQo+ICAgCj4gQEAgLTI4MCwyMCArMjc2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3Rfc2N0 cF9zZW5kbXNnKGludCBzLCBjb25zdCB2b2lkICptc2csIHNpemVfdCBsZW4sCj4gICAJaW50IGVy cm9yID0gc2N0cF9zZW5kbXNnKHMsIG1zZywgbGVuLCB0bywgdG9sZW4sIHBwaWQsIGZsYWdzLCBz dHJlYW1fbm8sCj4gICAJICAJCSAgICAgICAgIHRpbWV0b2xpdmUsIGNvbnRleHQpOwo+ICAgCWlm IChsZW4gIT0gZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJzY3RwX3NlbmRtc2c6 IGVycm9yOiVkIGVycm5vOiVkIiwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4aXQsICJzY3Rw X3NlbmRtc2c6IGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8pOwo+IC0J cmV0dXJuIGVycm9yOwo+ICsJcmV0dXJuIGVycm9yOwkJCQo+ICAgfQo+ICAgCj4gICBzdGF0aWMg aW5saW5lIGludCB0ZXN0X3NjdHBfc2VuZChpbnQgcywgY29uc3Qgdm9pZCAqbXNnLCBzaXplX3Qg bGVuLAo+IC0JCQkJIGNvbnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvLAo+ICsJCQkJ IGNvbnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvLAo+ICAgCQkJCSBpbnQgZmxhZ3Mp Cj4gICB7Cj4gICAJaW50IGVycm9yID0gc2N0cF9zZW5kKHMsIG1zZywgbGVuLCBzaW5mbywgZmxh Z3MpOwo+ICAgCWlmIChsZW4gIT0gZXJyb3IpCj4gLQkJdHN0X2Jya20oVEJST0ssIE5VTEwsICJz Y3RwX3NlbmQ6IGVycm9yOiVkIGVycm5vOiVkIiwKPiArCQl0c3RfYnJrbShUQlJPSywgdHN0X2V4 aXQsICJzY3RwX3NlbmQ6IGVycm9yOiVkIGVycm5vOiVkIiwKPiAgIAkJCSBlcnJvciwgZXJybm8p Owo+IC0JcmV0dXJuIGVycm9yOwo+ICsJcmV0dXJuIGVycm9yOwkJCQo+ICAgfQo+ICAgCj4gICBz dGF0aWMgaW5saW5lIGludCB0ZXN0X3NjdHBfcmVjdm1zZyhpbnQgc2ssIHZvaWQgKm1zZywgc2l6 ZV90IGxlbiwKPiBAQCAtMzAzLDE1ICsyOTksMTUgQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9z Y3RwX3JlY3Ztc2coaW50IHNrLCB2b2lkICptc2csIHNpemVfdCBsZW4sCj4gICB7Cj4gICAJaW50 IGVycm9yID0gc2N0cF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZnJvbSwgZnJvbWxlbiwgc2luZm8s IG1zZ19mbGFncyk7Cj4gICAJaWYgKC0xID09IGVycm9yKQo+IC0JCXRzdF9icmttKFRCUk9LLCBO VUxMLCAic2N0cF9yZWN2bXNnOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cj4gLQlyZXR1cm4gZXJy b3I7Cj4gKwkJdHN0X2Jya20oVEJST0ssIHRzdF9leGl0LCAic2N0cF9yZWN2bXNnOiAlcyIsIHN0 cmVycm9yKGVycm5vKSk7Cj4gKwlyZXR1cm4gZXJyb3I7CQkJCj4gICB9Cj4gICAKPiAgIHN0YXRp YyBpbmxpbmUgdm9pZCAqdGVzdF9tYWxsb2Moc2l6ZV90IHNpemUpCj4gICB7Cj4gICAJdm9pZCAq YnVmID0gbWFsbG9jKHNpemUpOwo+ICAgICAgICAgICBpZiAoTlVMTCA9PSBidWYpCj4gLSAgICAg ICAgICAgICAgICB0c3RfYnJrbShUQlJPSywgTlVMTCwgIm1hbGxvYyBmYWlsZWQiKTsKPiArICAg ICAgICAgICAgICAgIHRzdF9icmttKFRCUk9LLCB0c3RfZXhpdCwgIm1hbGxvYyBmYWlsZWQiKTsK PiAgIAlyZXR1cm4gYnVmOwo+ICAgfQo+ICAgCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNoYXBl IHRoZSBNb2JpbGUgRXhwZXJpZW5jZTogRnJlZSBTdWJzY3JpcHRpb24KU29mdHdhcmUgZXhwZXJ0 cyBhbmQgZGV2ZWxvcGVyczogQmUgYXQgdGhlIGZvcmVmcm9udCBvZiB0ZWNoIGlubm92YXRpb24u CkludGVsKFIpIFNvZnR3YXJlIEFkcmVuYWxpbmUgZGVsaXZlcnMgc3RyYXRlZ2ljIGluc2lnaHQg YW5kIGdhbWUtY2hhbmdpbmcgCmNvbnZlcnNhdGlvbnMgdGhhdCBzaGFwZSB0aGUgcmFwaWRseSBl dm9sdmluZyBtb2JpbGUgbGFuZHNjYXBlLiBTaWduIHVwIG5vdy4gCmh0dHA6Ly9wdWJhZHMuZy5k b3VibGVjbGljay5uZXQvZ2FtcGFkL2Nsaz9pZD02MzQzMTMxMSZpdT0vNDE0MC9vc3RnLmNsa3Ry awpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMdHAtbGlz dCBtYWlsaW5nIGxpc3QKTHRwLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlz dHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2x0cC1saXN0Cg==