From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [v2 1/3] x86: refactor psr implementation in hypervisor. Date: Fri, 30 Sep 2016 17:18:33 -0400 Message-ID: <20160930211833.GC5382@char.us.oracle.com> References: <1474510520-29525-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bq5Cd-0002dI-8y for xen-devel@lists.xenproject.org; Fri, 30 Sep 2016 21:18:43 +0000 Content-Disposition: inline In-Reply-To: <1474510520-29525-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Yi Sun Cc: wei.liu2@citrix.com, he.chen@linux.intel.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, jbeulich@suse.com, chao.p.peng@linux.intel.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBTZXAgMjIsIDIwMTYgYXQgMTA6MTU6MjBBTSArMDgwMCwgWWkgU3VuIHdyb3RlOgo+ IEN1cnJlbnQgcHNyLmMgaXMgZGVzaWduZWQgZm9yIHN1cHBvcnRpbmcgTDMgQ0FUL0NEUC4gSXQg aGFzIG1hbnkKPiBsaW1pdGF0aW9ucyB0byBhZGQgbmV3IGZlYXR1cmUuIENvbnNpZGVyaW5nIHRv IHN1cHBvcnQgbW9yZSBQU1IKPiBmZWF0dXJlcywgd2UgbmVlZCByZWZhY3RvciBQU1IgaW1wbGVt ZW50YXRpb24gdG8gbWFrZSBpdCBtb3JlCj4gZmxleGlibGUgYW5kIGZ1bGZpbGwgdGhlIHByaW5j aXBsZSwgb3BlbiBmb3IgZXh0ZW5zaW9uIGJ1dCBjbG9zZWQKPiBmb3IgbW9kaWZpY2F0aW9uLgo+ IAo+IFRoZSBjb3JlIG9mIHRoZSByZWZhY3RvcmluZyBpcyB0byBhYnN0cmFjdCB0aGUgY29tbW9u IGFjdGlvbnMgYW5kCj4gZW5jYXBzdWxhdGUgdGhlbSBpbnRvICJzdHJ1Y3QgZmVhdF9vcHMiLiBU aGUgZGV0YWlsZWQgc3RlcHMgdG8gYWRkCj4gYSBuZXcgZmVhdHVyZSBhcmUgZGVzY3JpYmVkIGF0 IHRoZSBoZWFkIG9mIHBzci5jLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5A bGludXguaW50ZWwuY29tPgo+IAo+IC0tLQo+IENoYW5nZWQgc2luY2UgdjE6Cj4gICogc3lzY3Rs LmMKPiAgICAgLSBJbnRlcmZhY2UgY2hhbmdlIGZvciBhYnN0cmFjdGlvbiByZXF1aXJlbWVudC4K PiAgKiBwc3IuYwo+ICAgICAtIEZ1bmN0aW9uIGFuZCB2YXJpYWJsZXMgbmFtZXMgYXJlIGNoYW5n ZWQgdG8gZXhwcmVzcyBhY2N1cmF0ZWx5Lgo+ICAgICAtIEZpeCBjb2RlIHN0eWxlIGlzc3Vlcy4K PiAgICAgLSBGaXggaW1wcmVjaXNlIGNvbW1lbnRzLgo+ICAgICAtIEFkZCBvbmUgY2FsbGJhY2sg ZnVuY3Rpb24sIGdldF9jb3NfbnVtKCksIHRvIGZ1bGZpbGwgdGhlCj4gICAgICAgYWJzdHJhY3Rp b24gcmVxdWlyZW1lbnQuCj4gICAgIC0gRGl2aWRlIGdldF9vbGRfc2V0X25ldygpIGNhbGxiYWNr IGZ1bmN0aW9ucyBpbnRvIHR3byBmdW5jdGlvbnM6Cj4gICAgICAgZ2V0X29sZF92YWwoKSBhbmQg c2V0X25ld192YWwoKSBtYWtlIGl0IG1vcmUgcHJpbWl0aXZlLgo+ICAgICAtIENoYW5nZSBmZWF0 X2luZm8gdHlwZSBmcm9tIGFuIGFycmF5IHRvIHVuaW9uLgo+ICAgICAtIEFkanVzdCBzb21lIGZ1 bmN0aW9ucyB0byByZXBsYWNlIGlmIHRvIHN3aXRjaCB0byBtYWtlIHRoZW0KPiAgICAgICBjbGVh cmVyLgo+ICAgICAtIFJlcGxhY2UgY3VzdG9tIGxpc3QgbWFuYWdlbWVudCB0byBzeXN0ZW0uCj4g ICAgIC0gVXNlICdjb25zdCcgdG8gbWFrZSBjb2RlcyBtb3JlIHNhZmUuCj4gICogcHNyLmgKPiAg ICAgLSBDaGFuZ2UgJ2VudW0gbWFza190eXBlJyB0byAnZW51bSBwc3JfdmFsX3R5cGUnIHRvIGV4 cHJlc3MKPiAgICAgICBtb3JlIGFjY3VyYXRlLgo+ICAgICAtIENoYW5nZSBwYXJhbWV0ZXJzIG9m IHBzcl9nZXRfaW5mbygpIHRvIGZ1bGZpbGwgYWJzdHJhY3Rpb24KPiAgICAgICByZXF1aXJlbWVu dC4KPiAtLS0KPiAgeGVuL2FyY2gveDg2L2RvbWN0bC5jICAgICB8ICAgMzYgKy0KPiAgeGVuL2Fy Y2gveDg2L3Bzci5jICAgICAgICB8IDExMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tCgpXaG9hLiAxSyBjaGFuZ2VzLiBUaGlzIGlzIGEgZGVuc2UgcGF0Y2gu Cgo+ICB4ZW4vYXJjaC94ODYvc3lzY3RsLmMgICAgIHwgICAxNCArLQo+ICB4ZW4vaW5jbHVkZS9h c20teDg2L3Bzci5oIHwgICAyMCArLQo+ICA0IGZpbGVzIGNoYW5nZWQsIDkwMyBpbnNlcnRpb25z KCspLCAyNzIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kb21j dGwuYyBiL3hlbi9hcmNoL3g4Ni9kb21jdGwuYwo+IGluZGV4IDJhMmZlMDQuLmM1M2Q4MTkgMTAw NjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L2RvbWN0bC5jCj4gKysrIGIveGVuL2FyY2gveDg2L2Rv bWN0bC5jCj4gQEAgLTEzODYsNDEgKzEzODYsNDEgQEAgbG9uZyBhcmNoX2RvX2RvbWN0bCgKPiAg ICAgICAgICBzd2l0Y2ggKCBkb21jdGwtPnUucHNyX2NhdF9vcC5jbWQgKQo+ICAgICAgICAgIHsK PiAgICAgICAgICBjYXNlIFhFTl9ET01DVExfUFNSX0NBVF9PUF9TRVRfTDNfQ0JNOgo+IC0gICAg ICAgICAgICByZXQgPSBwc3Jfc2V0X2wzX2NibShkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJn ZXQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWN0bC0+dS5wc3JfY2F0 X29wLmRhdGEsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQ RV9MMyk7Cj4gKyAgICAgICAgICAgIHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3Jf Y2F0X29wLnRhcmdldCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51 LnBzcl9jYXRfb3AuZGF0YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX01B U0tfVFlQRV9MM19DQk0pOwo+ICAgICAgICAgICAgICBicmVhazsKPiAgCj4gICAgICAgICAgY2Fz ZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfU0VUX0wzX0NPREU6Cj4gLSAgICAgICAgICAgIHJldCA9 IHBzcl9zZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzX0NPREUpOwo+ ICsgICAgICAgICAgICByZXQgPSBwc3Jfc2V0X3ZhbChkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50 YXJnZXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWN0bC0+dS5wc3JfY2F0 X29wLmRhdGEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVf TDNfQ09ERSk7Cj4gICAgICAgICAgICAgIGJyZWFrOwo+ICAKPiAgICAgICAgICBjYXNlIFhFTl9E T01DVExfUFNSX0NBVF9PUF9TRVRfTDNfREFUQToKPiAtICAgICAgICAgICAgcmV0ID0gcHNyX3Nl dF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfQ0JNX1RZUEVfTDNfREFUQSk7Cj4gKyAgICAg ICAgICAgIHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0 YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX01BU0tfVFlQRV9MM19EQVRB KTsKPiAgICAgICAgICAgICAgYnJlYWs7Cj4gIAo+ICAgICAgICAgIGNhc2UgWEVOX0RPTUNUTF9Q U1JfQ0FUX09QX0dFVF9MM19DQk06Cj4gLSAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfbDNfY2Jt KGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9MMyk7Cj4gKyAgICAgICAgICAgIHJldCA9 IHBzcl9nZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNKTsKPiAgICAgICAg ICAgICAgY29weWJhY2sgPSAxOwo+ICAgICAgICAgICAgICBicmVhazsKPiAgCj4gICAgICAgICAg Y2FzZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfR0VUX0wzX0NPREU6Cj4gLSAgICAgICAgICAgIHJl dCA9IHBzcl9nZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9MM19DT0RF KTsKPiArICAgICAgICAgICAgcmV0ID0gcHNyX2dldF92YWwoZCwgZG9tY3RsLT51LnBzcl9jYXRf b3AudGFyZ2V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9tY3RsLT51LnBz cl9jYXRfb3AuZGF0YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX01BU0tf VFlQRV9MM19DT0RFKTsKPiAgICAgICAgICAgICAgY29weWJhY2sgPSAxOwo+ICAgICAgICAgICAg ICBicmVhazsKPiAgCj4gICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfR0VUX0wz X0RBVEE6Cj4gLSAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5w c3JfY2F0X29wLnRhcmdldCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRv bWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBTUl9DQk1fVFlQRV9MM19EQVRBKTsKPiArICAgICAgICAgICAgcmV0ID0gcHNyX2dldF92 YWwoZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUFNSX01BU0tfVFlQRV9MM19EQVRBKTsKPiAgICAgICAgICAgICAgY29w eWJhY2sgPSAxOwo+ICAgICAgICAgICAgICBicmVhazsKPiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwo+IGluZGV4IDBiNTA3M2MuLjk5ZTRj NzggMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L3Bzci5jCj4gKysrIGIveGVuL2FyY2gveDg2 L3Bzci5jCj4gQEAgLTE3LDI4ICsxNywxNTkgQEAKPiAgI2luY2x1ZGUgPHhlbi9jcHUuaD4KPiAg I2luY2x1ZGUgPHhlbi9lcnIuaD4KPiAgI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgo+ICsjaW5jbHVk ZSA8eGVuL2xpc3QuaD4KPiAgI2luY2x1ZGUgPGFzbS9wc3IuaD4KPiAgCj4gICNkZWZpbmUgUFNS X0NNVCAgICAgICAgKDE8PDApCj4gICNkZWZpbmUgUFNSX0NBVCAgICAgICAgKDE8PDEpCj4gICNk ZWZpbmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCj4gIAo+IC1zdHJ1Y3QgcHNyX2NhdF9jYm0gewo+ ICsvKgo+ICsgKiBUbyBhZGQgYSBuZXcgUFNSIGZlYXR1cmUsIHBsZWFzZSBmb2xsb3cgYmVsb3cg c3RlcHM6Cj4gKyAqIDEuIEltcGxlbWVudCBmZWF0dXJlIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0 aW9ucyBsaXN0ZWQgaW4KPiArICogICAgInN0cnVjdCBmZWF0X29wcyI7Cj4gKyAqIDIuIEltcGxl bWVudCBhIGZlYXR1cmUgc3BlY2lmaWMgInN0cnVjdCBmZWF0X29wcyIgb2JqZWN0IGFuZCByZWdp c3Rlcgo+ICsgKiAgICBmZWF0dXJlIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbnRvIGl0 Owo+ICsgKiAzLiBEZWxjYXJlIGZlYXRfbGlzdCBvYmplY3QgZm9yIHRoZSBmZWF0dXJlIGFuZCBt YWxsb2MgbWVtb3J5IGZvciBpdAo+ICsgKiAgICBpbiBjcHVfcHJlcGFyZV93b3JrKCkuIENvcnJl c3BvbmRpbmdseSwgZnJlZSB0aGVtIGluCj4gKyAqICAgIGZyZWVfZmVhdHVyZSgpOwo+ICsgKiA0 LiBBZGQgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBjb2RlcyBpbiBjcHVfaW5pdF93b3JrKCkuCj4g KyAqLwo+ICsKPiArc3RydWN0IGZlYXRfbGlzdDsKPiArc3RydWN0IHBzcl9zb2NrZXRfaW5mbzsK PiArCj4gKy8qIEV2ZXJ5IGZlYXR1cmUgZW5hYmxlZCBzaG91bGQgaW1wbGVtZW50IHN1Y2ggb3Bz IGFuZCBjYWxsYmFjayBmdW5jdGlvbnMuICovCgpzaG91bGQgbWVhbnMgaXQgY2FuIGNob29zZSB0 byBpbXBsZW1lbnQgMCBvZiB0aGVtLiBQZXJoYXBzIE1VU1QgPyBPcgphdCBsZWFzdCBtZW50aW9u IHdoaWNoIG9uZXMgTVVTVCBiZSBpbXBsZW1lbnRlZD8KCj4gK3N0cnVjdCBmZWF0X29wcyB7Cj4g KyAgICAvKgo+ICsgICAgICogaW5pdF9mZWF0dXJlIGlzIHVzZWQgaW4gY3B1IGluaXRpYWxpemF0 aW9uIHByb2Nlc3MgdG8gZG8gZmVhdHVyZQo+ICsgICAgICogc3BlY2lmaWMgaW5pdGlhbGl6YXRp b24gd29ya3MuCj4gKyAgICAgKi8KPiArICAgIHZvaWQgKCppbml0X2ZlYXR1cmUpKHVuc2lnbmVk IGludCBlYXgsIHVuc2lnbmVkIGludCBlYngsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZWN4LCB1bnNpZ25lZCBpbnQgZWR4LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pOwo+ICsgICAgLyoKPiArICAgICAqIGdldF9j b3NfbnVtIGlzIHVzZWQgdG8gZ2V0IHRoZSBDT1MgcmVnaXN0ZXJzIG51bWJlciBvY2N1cGllZCBi eSB0aGUKClBlcmhhcHMgaW5zdGVhZCBvZiAnbnVtYmVyJyB1c2UgJ2Ftb3VudCcKPiArICAgICAq IGZlYXR1cmUgZm9yIG9uZSBzZXR0aW5nLCBsaWtlIENEUCBvY2N1cGllcyAyIENPU3MgYnV0IENB VCBvY2N1cGllcyAxLgoKb2NjdXBpZXM/IFBlcmhhcHMgdXNlcz8KCgo+ICsgICAgICovCj4gKyAg ICB1bnNpZ25lZCBpbnQgKCpnZXRfY29zX251bSkoY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVh dCk7Cj4gKyAgICAvKgo+ICsgICAgICogZ2V0X29sZF92YWwgYW5kIHNldF9uZXdfdmFsIGFyZSBh IHBhaXIgb2YgZnVuY3Rpb25zIGNhbGxlZCB0b2dldGhlci4KPiArICAgICAqIFRoZSBjYWxsZXIg d2lsbCB0cmF2ZXJzZSBhbGwgZmVhdHVyZXMgaW4gbGlzdCB0byBhbmQgY2FsbCBib3RoIGZ1bmN0 aW9ucwoKcy9pbiBsaXN0L2luIHRoZSBsaXN0Lwo+ICsgICAgICogZm9yIGV2ZXJ5IGZlYXR1cmUg ZG8gYmVsb3cgdHdvIHRoaW5nczoKcy9kby90byBkby8KPiArICAgICAqIDEuIGdldCBvbGRfY29z IHJlZ2lzdGVyIHZhbHVlIG9mIGFsbCBzdXBwb3J0ZWQgZmVhdHVyZXMgYW5kCj4gKyAgICAgKiAy LiBzZXQgdGhlIG5ldyB2YWx1ZSBmb3IgYXBwb2ludGVkIGZlYXR1cmUuCgpBcHBvaW50ZWQ/IEkg YW0gbm90IHN1cmUgd2hhdCB5b3UgbWVhbiBieSB0aGF0PwoKQW5kIHdoYXQgZG8geW91IG1lYW4g YnkgJ3NldF9uZXdfdmFsdWUnIEFzIGluIHdoYXQgdGhlIENPUyAKdmFsdWUgc2hvdWxkIGJlPwoK PiArICAgICAqCj4gKyAgICAgKiBBbGwgdGhlIHZhbHVlcyBhcmUgc2V0IGludG8gdmFsdWUgYXJy YXkgYWNjb3JkaW5nIHRoZSB0cmF2ZXJzYWwgb3JkZXIsCgpXaGF0IHZhbHVlIGFycmF5PyBUaGUg Q09TIGFycmF5PwoKPiArICAgICAqIG1lYW5pbmcgdGhlIHNhbWUgb3JkZXIgb2YgZmVhdHVyZSBs aXN0IG1lbWJlcnMuCj4gKyAgICAgKgo+ICsgICAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUg ZnVuY3Rpb24gbWVhbnMgdGhlIG51bWJlciBvZiB0aGUgdmFsdWUgYXJyYXkKCnMvbnVtYmVyL2Ft b3VudC8gcGVyaGFwcz8KCj4gKyAgICAgKiBtZW1iZXIgdG8gc2tpcCBvciBlcnJvci4KClBlcmhh cHM6CgpUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhbW91bnQgb2YgZW50cmllcyB0byBza2lwIGlu IHRoZSB2YWx1ZSBhcnJheT8KCj4gKyAgICAgKiAxIC0gb25lIGl0ZW0gaW4gdmFsdWUgYXJyYXku Cj4gKyAgICAgKiAyIC0gdHdvIGl0ZW1zIGluIHZhbHVlIGFycmF5LCBsaWtlIENEUCBvY2N1cGll cyB0d28gaXRlbXMuCgpzL2xpa2UvZS5nLi8KPiArICAgICAqIG5lZ2F0aXZlIC0gZXJyb3IuCj4g KyAgICAgKi8KPiArICAgIGludCAoKmdldF9vbGRfdmFsKSh1aW50NjRfdCB2YWxbXSwKPiArICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfY29zLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpOwo+ICsgICAgaW50ICgqc2V0X25ld192 YWwpKHVpbnQ2NF90IHZhbFtdLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBmZWF0X2xpc3QgKmZlYXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG9sZF9jb3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlw ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtKTsKPiArICAgIC8qCj4gKyAg ICAgKiBjb21wYXJlX3ZhbCBpcyB1c2VkIHRvIGluIHNldCB2YWx1ZSBwcm9jZXNzIHRvIGNvbXBh cmUgaWYgdGhlCgondG8gaW4gc2V0IHZhbHVlIHByb2Nlc3MgdG8nID8gSSBhbSBub3Qgc3VyZSB3 aGF0IHlvdSBtZWFuPwoKPiArICAgICAqIGlucHV0IHZhbHVlIGFycmF5IGNhbiBtYXRjaCBhbGwg dGhlIGZlYXR1cmVzJyBDT1MgcmVnaXN0ZXJzIHZhbHVlcwo+ICsgICAgICogYWNjb3JkaW5nIHRv IGlucHV0IGNvcyBpZC4KCj4gKyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlv biBtZWFucyB0aGUgbnVtYmVyIG9mIHRoZSB2YWx1ZSBhcnJheQo+ICsgICAgICogbWVtYmVyIHRv IHNraXAgb3IgZXJyb3IuCgpQZXJoYXBzOgoKVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYW1vdW50 IG9mIGVudHJpZXMgdG8gc2tpcCBpbiB0aGUgQ29TIGFycmF5PwoKPiArICAgICAqIDEgLSBvbmUg aXRlbSBpbiB2YWx1ZSBhcnJheS4KPiArICAgICAqIDIgLSB0d28gaXRlbXMgaW4gdmFsdWUgYXJy YXksIGxpa2UgQ0RQIG9jY3VwaWVzIHR3byBpdGVtcy4KCkRpdHRvCj4gKyAgICAgKiBuZWdhdGl2 ZSAtIGVycm9yLgo+ICsgICAgICovCj4gKyAgICBpbnQgKCpjb21wYXJlX3ZhbCkoY29uc3QgdWlu dDY0X3QgdmFsW10sIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3MsIGJvb2wgKmZvdW5kKTsKPiArICAgIC8qCj4g KyAgICAgKiBnZXRfY29zX21heF9mcm9tX3R5cGUgaXMgdXNlZCB0byBnZXQgdGhlIGNvc19tYXgg dmFsdWUgb2YgdGhlIGZlYXR1cmUKPiArICAgICAqIGFjY29yZGluZyB0byBpbnB1dCBwc3JfdmFs X3R5cGUuCj4gKyAgICAgKi8KPiArICAgIHVuc2lnbmVkIGludCAoKmdldF9jb3NfbWF4X2Zyb21f dHlwZSkoY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlwZSk7Cj4gKyAgICAv Kgo+ICsgICAgICogZXhjZWVkc19jb3NfbWF4IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGlucHV0 IGNvcyBpZCBleGNlZWRzIHRoZQo+ICsgICAgICogZmVhdHVyZSdzIGNvc19tYXggYW5kIGlmIHRo ZSBpbnB1dCB2YWx1ZSBpcyBub3QgdGhlIGRlZmF1bHQgb25lLgo+ICsgICAgICogRXZlbiBpZiB0 aGUgYXNzb2NpYXRlZCBjb3MgZXhjZWVkcyB0aGUgY29zX21heCwgSFcgY2FuIHdvcmsgYXMgZGVm YXVsdAoKcy9hcyBkZWZhdWx0IHZhbHVlL3dpdGggZGVmYXVsdCB2YWx1ZXMvCj4gKyAgICAgKiB2 YWx1ZS4gVGhhdCBpcyB0aGUgcmVhc29uIHdlIG5lZWQgY2hlY2sgaWYgaW5wdXQgdmFsdWUgaXMg ZGVmYXVsdCBvbmUuCgpBbmQgd2hhdCBpcyB0aGUgcmVhc29uPyBCYXNlZCBvbiB0aGUgZGVzaWdu IGRvY3VtZW50IEkgd291bGQgYXNzdW1lIHRoYXQgdGhlCmRlZmF1bHQgdmFsdWUgaXMgdG8gYWxs b3cgZnVsbCB1c2FnZS4gUGxlYXNlIG1lbnRpb24gdGhhdC4KCj4gKyAgICAgKiBJZiBib3RoIGNy aXRlcmlhIGFyZSBmdWxmaWxsZWQsIHRoYXQgbWVhbnMgdGhlIGlucHV0IGV4Y2VlZHMgdGhlCj4g KyAgICAgKiByYW5nZS4KPiArICAgICAqCj4gKyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRo ZSBmdW5jdGlvbiBtZWFucyB0aGUgbnVtYmVyIG9mIHRoZSB2YWx1ZSBhcnJheQo+ICsgICAgICog bWVtYmVyIHRvIHNraXAgb3IgZXJyb3IuCj4gKyAgICAgKiAxIC0gb25lIGl0ZW0gaW4gdmFsdWUg YXJyYXkuCj4gKyAgICAgKiAyIC0gdHdvIGl0ZW1zIGluIHZhbHVlIGFycmF5LCBsaWtlIENEUCBv Y2N1cGllcyB0d28gaXRlbXMuCj4gKyAgICAgKiAwIC0gZXJyb3IsIGV4Y2VlZCBjb3NfbWF4IGFu ZCB2YWx1ZSB0byBzZXQgaXMgbm90IGRlZmF1bHQuCgondG8gc2V0IGlzIG5vdCBkZWZhdWx0JyBJ IHRoaW5rIHlvdSBtZWFuIHRoYXQgInRoZSB2YWx1ZSBpcyBub3Qgc2V0LCBhbmQgCnRoZSBkZWZh dWx0IG9uZSBpcyB1c2VkLiAnID8KCj4gKyAgICAgKi8KPiArICAgIHVuc2lnbmVkIGludCAoKmV4 Y2VlZHNfY29zX21heCkoY29uc3QgdWludDY0X3QgdmFsW10sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3MpOwo+ICsgICAg Lyogd3JpdGVfbXNyIGlzIHVzZWQgdG8gd3JpdGUgZmVhdHVyZSBzcGVjaWZpYyBNU1IgcmVnaXN0 ZXJzLiAqLwoKcy93cml0ZS93cml0ZSBvdXQvCgo+ICsgICAgaW50ICgqd3JpdGVfbXNyKSh1bnNp Z25lZCBpbnQgY29zLCBjb25zdCB1aW50NjRfdCB2YWxbXSwKPiArICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCk7Cj4gKyAgICAvKiBnZXRfdmFsIGlzIHVzZWQgdG8g Z2V0IGZlYXR1cmUgc3BlY2lmaWMgQ09TIHJlZ2lzdGVyIHZhbHVlLiAqLwoKWW91IG1lbnRpb25l ZCBleGFtcGxlcyBwcmV2aW91c2x5LiBXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIGVudW1lcmF0ZQpp dCBoZXJlIHRvby4KCj4gKyAgICBpbnQgKCpnZXRfdmFsKShjb25zdCBzdHJ1Y3QgZmVhdF9saXN0 ICpmZWF0LCB1bnNpZ25lZCBpbnQgY29zLAo+ICsgICAgICAgICAgICAgICAgICAgZW51bSBwc3Jf dmFsX3R5cGUgdHlwZSwgdWludDY0X3QgKnZhbCk7Cj4gKyAgICAvKiBnZXRfZmVhdF9pbmZvIGlz IHVzZWQgdG8gZ2V0IGZlYXR1cmUgc3BlY2lmaWMgSFcgaW5mby4gKi8KClRoYXQgc291bmRzIG15 c3RlcmlvdXMuCgpJIHByZXN1bWUgdGhhdCAnZGF0JyBhbmQgJ2FycmF5X2xlbicgYXJlIHdoZXJl IHRoZSBzcGVjaWZpYyBIVyBpbmZvCmlzIHB1dC4KCkJ1dCBub3RoaW5nIGFib3V0IHRoZSByZXR1 cm4gY29kZT8KCj4gKyAgICBpbnQgKCpnZXRfZmVhdF9pbmZvKShjb25zdCBzdHJ1Y3QgZmVhdF9s aXN0ICpmZWF0LCBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZGF0W10sIHVpbnQzMl90IGFycmF5X2xlbik7Cj4gKyAgICAvKiBnZXRf bWF4X2Nvc19tYXggaXMgdXNlZCB0byBnZXQgZmVhdHVyZSdzIGNvc19tYXguICovCj4gKyAgICB1 bnNpZ25lZCBpbnQgKCpnZXRfbWF4X2Nvc19tYXgpKGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZl YXQpOwo+ICt9Owo+ICsKPiArLyogQ0FUL0NEUCBpbmZvIGRhdGEgc3RydWN0dXJlLiAqLwo+ICtz dHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbyB7Cj4gKyAgICB1bnNpZ25lZCBpbnQgY2JtX2xlbjsKPiAr ICAgIHVuc2lnbmVkIGludCBjb3NfbWF4Owo+ICt9Owo+ICsKPiArc3RydWN0IGZlYXRfaW5mbyB7 Cj4gICAgICB1bmlvbiB7Cj4gLSAgICAgICAgdWludDY0X3QgY2JtOwo+IC0gICAgICAgIHN0cnVj dCB7Cj4gLSAgICAgICAgICAgIHVpbnQ2NF90IGNvZGU7Cj4gLSAgICAgICAgICAgIHVpbnQ2NF90 IGRhdGE7Cj4gLSAgICAgICAgfTsKPiArICAgICAgICBzdHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbyBs M19pbmZvOwo+ICAgICAgfTsKPiArfTsKPiArCj4gKy8qCj4gKyAqIFBlciBzcGVjLCB0aGUgbWF4 aW11bSBDT1MgcmVnaXN0ZXIgbnVtYmVyIGlzIDEyOCBmb3IgYWxsIGN1cnJlbnQgUFNSCj4gKyAq IGZlYXR1cmVzLgo+ICsgKi8KPiArI2RlZmluZSBNQVhfQ09TX1JFR19OVU0gIDEyOAo+ICsKPiAr c3RydWN0IGZlYXRfbGlzdCB7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZmVhdHVyZTsKPiArICAgIHN0 cnVjdCBmZWF0X29wcyBvcHM7Cj4gKyAgICBzdHJ1Y3QgZmVhdF9pbmZvIGluZm87Cj4gKyAgICB1 aW50NjRfdCBjb3NfcmVnX3ZhbFtNQVhfQ09TX1JFR19OVU1dOwo+ICsgICAgc3RydWN0IGxpc3Rf aGVhZCBsaXN0Owo+ICt9Owo+ICsKPiArc3RydWN0IHBzcl9yZWYgewo+ICAgICAgdW5zaWduZWQg aW50IHJlZjsKPiAgfTsKPiAgCj4gLXN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvIHsKPiAtICAg IHVuc2lnbmVkIGludCBjYm1fbGVuOwo+IC0gICAgdW5zaWduZWQgaW50IGNvc19tYXg7Cj4gLSAg ICBzdHJ1Y3QgcHNyX2NhdF9jYm0gKmNvc190b19jYm07Cj4gLSAgICBzcGlubG9ja190IGNibV9s b2NrOwo+ICsjZGVmaW5lIFBTUl9TT0NLRVRfTDNfQ0FUIDAKPiArI2RlZmluZSBQU1JfU09DS0VU X0wzX0NEUCAxCj4gKwo+ICtzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvIHsKPiArICAgIC8qCj4gKyAg ICAgKiBiaXQgMX4wOiBbMDFdLT5MMyBDQVQtb25seSwgWzEwXS0+TDMgQ0RQCj4gKyAgICAgKi8K PiArICAgIHVuc2lnbmVkIGludCBmZWF0dXJlczsKCllvdSBjYW4gYWxzbyB1c2U6Cgl1bnNpZ25l ZCBpbnQgbDNfY2F0OjEKCQkgICAgIGwzX2NkcDoxCgphbmQgdGhlbiB5b3UgZG9uJ3QgaGF2ZSB0 byB1c2UgYSAjZGVmaW5lLiBCdXQgdGhhdCBpcyB1cCB0byB5b3UuCgo+ICsgICAgdW5zaWduZWQg aW50IG5yX2ZlYXQ7Cj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGZlYXRfbGlzdDsKPiArICAgIHN0 cnVjdCBwc3JfcmVmICpjb3NfcmVmOwo+ICsgICAgc3BpbmxvY2tfdCBtYXNrX2xvY2s7CgpDYW4g eW91IGdpdmUgYSBjb21tZW50IGFib3ZlIHRoaXMgc3BpbmxvY2sgYW5kIHNheSB3aGF0IGl0IHBy b3RlY3RzIGFnYWluc3Q/Cgo+ICB9Owo+ICAKPiAgc3RydWN0IHBzcl9hc3NvYyB7Cj4gQEAgLTQ4 LDkgKzE3OSw3IEBAIHN0cnVjdCBwc3JfYXNzb2Mgewo+ICAKPiAgc3RydWN0IHBzcl9jbXQgKl9f cmVhZF9tb3N0bHkgcHNyX2NtdDsKPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRf bW9zdGx5IGNhdF9zb2NrZXRfZW5hYmxlOwo+IC1zdGF0aWMgc3RydWN0IHBzcl9jYXRfc29ja2V0 X2luZm8gKl9fcmVhZF9tb3N0bHkgY2F0X3NvY2tldF9pbmZvOwo+IC1zdGF0aWMgdW5zaWduZWQg bG9uZyAqX19yZWFkX21vc3RseSBjZHBfc29ja2V0X2VuYWJsZTsKPiArc3RhdGljIHN0cnVjdCBw c3Jfc29ja2V0X2luZm8gKl9fcmVhZF9tb3N0bHkgc29ja2V0X2luZm87Cj4gIAo+ICBzdGF0aWMg dW5zaWduZWQgaW50IG9wdF9wc3I7Cj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBv cHRfcm1pZF9tYXggPSAyNTU7Cj4gQEAgLTU4LDggKzE4Nyw0MTAgQEAgc3RhdGljIHVuc2lnbmVk IGludCBfX3JlYWRfbW9zdGx5IG9wdF9jb3NfbWF4ID0gMjU1Owo+ICBzdGF0aWMgdWludDY0X3Qg cm1pZF9tYXNrOwo+ICBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBzcl9hc3NvYywgcHNy X2Fzc29jKTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgcHNyX2NhdF9jYm0gKnRlbXBfY29zX3RvX2Ni bTsKPiArc3RhdGljIHN0cnVjdCBwc3JfcmVmICp0ZW1wX2Nvc19yZWY7Cj4gKy8qIEV2ZXJ5IGZl YXR1cmUgaGFzIGl0cyBvd24gb2JqZWN0LiAqLwoKTm90IHN1cmUgSSB1bmRlcnN0YW5kIHRoYXQu IFdoYXQgb2JqZWN0PyBUaGUgZmVhdF9sMyA/Cgo+ICtzdGF0aWMgc3RydWN0IGZlYXRfbGlzdCAq ZmVhdF9sMzsKPiArCj4gKy8qIENvbW1vbiBmdW5jdGlvbnMgZm9yIHN1cHBvcnRpbmcgZmVhdHVy ZSBjYWxsYmFjayBmdW5jdGlvbnMuICovCj4gK3N0YXRpYyB2b2lkIGZyZWVfZmVhdHVyZShzdHJ1 Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpm ZWF0X3RtcDsKPiArCj4gKyAgICBpZiAoICFpbmZvICkKPiArICAgICAgICByZXR1cm47Cj4gKwo+ ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlz dCkKPiArICAgIHsKPiArICAgICAgICBjbGVhcl9iaXQoZmVhdF90bXAtPmZlYXR1cmUsICZpbmZv LT5mZWF0dXJlcyk7Cj4gKyAgICAgICAgbGlzdF9kZWwoJmZlYXRfdG1wLT5saXN0KTsKPiArICAg ICAgICB4ZnJlZShmZWF0X3RtcCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogRnJlZSBmZWF0dXJl IHdoaWNoIGFyZSBub3QgYWRkZWQgaW50byBmZWF0X2xpc3QuICovCj4gKyAgICBpZiAoIGZlYXRf bDMgKQo+ICsgICAgewo+ICsgICAgICAgIHhmcmVlKGZlYXRfbDMpOwo+ICsgICAgICAgIGZlYXRf bDMgPSBOVUxMOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBwc3JfY2hlY2tfY2Jt KHVuc2lnbmVkIGludCBjYm1fbGVuLCB1aW50NjRfdCBjYm0pCj4gK3sKPiArICAgIHVuc2lnbmVk IGludCBmaXJzdF9iaXQsIHplcm9fYml0Owo+ICsKPiArICAgIC8qIFNldCBiaXRzIHNob3VsZCBv bmx5IGluIHRoZSByYW5nZSBvZiBbMCwgY2JtX2xlbikuICovCj4gKyAgICBpZiAoIGNibSAmICh+ MHVsbCA8PCBjYm1fbGVuKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIC8q IEF0IGxlYXN0IG9uZSBiaXQgbmVlZCB0byBiZSBzZXQuICovCj4gKyAgICBpZiAoIGNibSA9PSAw ICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgZmlyc3RfYml0ID0gZmluZF9m aXJzdF9iaXQoJmNibSwgY2JtX2xlbik7Cj4gKyAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJv X2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9iaXQpOwo+ICsKPiArICAgIC8qIFNldCBiaXRzIHNo b3VsZCBiZSBjb250aWd1b3VzLiAqLwo+ICsgICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYK PiArICAgICAgICAgZmluZF9uZXh0X2JpdCgmY2JtLCBjYm1fbGVuLCB6ZXJvX2JpdCkgPCBjYm1f bGVuICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gKy8qCj4gKyAqIEZlYXR1cmVzIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4KPiAr ICovCj4gKwo+ICsvKiBMMyBDQVQvQ0RQIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlv bi4gKi8KPiArc3RhdGljIHZvaWQgbDNfY2F0X2luaXRfZmVhdHVyZSh1bnNpZ25lZCBpbnQgZWF4 LCB1bnNpZ25lZCBpbnQgZWJ4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBlY3gsIHVuc2lnbmVkIGludCBlZHgsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvKQo+ICt7Cj4gKyAgICBz dHJ1Y3QgcHNyX2NhdF9sdmxfaW5mbyBsM19jYXQ7Cj4gKyAgICB1bnNpZ25lZCBpbnQgc29ja2V0 Owo+ICsgICAgdWludDY0X3QgdmFsOwo+ICsKPiArICAgIC8qIE5vIHZhbGlkIHZhbHVlIHNvIGRv IG5vdCBlbmFibGUgZmVhdHVyZS4gKi8KPiArICAgIGlmICggMCA9PSBlYXggfHwgMCA9PSBlZHgg KQoKSSBhbSBjdXJpb3VzIC0gaG93IGNvbWUgeW91IHB1dCB0aGUgdmFsdWUgYmVmb3JlIHRoZSB2 YXJpYWJsZT8KW0kgaGF2ZSBiZWVuIGFsd2F5cyBwdXR0aW5nIHRoZSB2YWx1ZSBfYWZ0ZXJfIHRo ZSB2YXJpYWJsZV0KCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGwzX2NhdC5jYm1fbGVu ID0gKGVheCAmIDB4MWYpICsgMTsKPiArICAgIGwzX2NhdC5jb3NfbWF4ID0gbWluKG9wdF9jb3Nf bWF4LCBlZHggJiAweGZmZmYpOwo+ICsKPiArICAgIC8qIGNvcz0wIGlzIHJlc2VydmVkIGFzIGRl ZmF1bHQgY2JtKGFsbCBvbmVzKS4gKi8KPiArICAgIGZlYXQtPmNvc19yZWdfdmFsWzBdID0gKDF1 bGwgPDwgbDNfY2F0LmNibV9sZW4pIC0gMTsKPiArCj4gKyAgICBmZWF0LT5mZWF0dXJlID0gUFNS X1NPQ0tFVF9MM19DQVQ7Cj4gKwo+ICsgICAgaWYgKCAoZWN4ICYgUFNSX0NBVF9DRFBfQ0FQQUJJ TElUWSkgJiYgKG9wdF9wc3IgJiBQU1JfQ0RQKSAmJgo+ICsgICAgICAgICAhdGVzdF9iaXQoUFNS X1NPQ0tFVF9MM19DRFAsICZpbmZvLT5mZWF0dXJlcykgKQo+ICsgICAgewo+ICsgICAgICAgIC8q IERhdGEgKi8KPiArICAgICAgICBmZWF0LT5jb3NfcmVnX3ZhbFswXSA9ICgxdWxsIDw8IGwzX2Nh dC5jYm1fbGVuKSAtIDE7Cj4gKyAgICAgICAgLyogQ29kZSAqLwo+ICsgICAgICAgIGZlYXQtPmNv c19yZWdfdmFsWzFdID0gKDF1bGwgPDwgbDNfY2F0LmNibV9sZW4pIC0gMTsKPiArCj4gKyAgICAg ICAgLyogV2Ugb25seSB3cml0ZSBtYXNrMSBzaW5jZSBtYXNrMCBpcyBhbHdheXMgYWxsIG9uZXMg YnkgZGVmYXVsdC4gKi8KPiArICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0soMSks Cj4gKyAgICAgICAgICAgICAgICgxdWxsIDw8IGwzX2NhdC5jYm1fbGVuKSAtIDEpOwo+ICsgICAg ICAgIHJkbXNybChNU1JfSUEzMl9QU1JfTDNfUU9TX0NGRywgdmFsKTsKPiArICAgICAgICB3cm1z cmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VO QUJMRV9CSVQpKTsKPiArCj4gKyAgICAgICAgLyogQ3V0IGhhbGYgb2YgY29zX21heCB3aGVuIENE UCBpcyBlbmFibGVkLiAqLwo+ICsgICAgICAgIGwzX2NhdC5jb3NfbWF4ID4+PSAxOwo+ICsKPiAr ICAgICAgICBmZWF0LT5mZWF0dXJlID0gUFNSX1NPQ0tFVF9MM19DRFA7Cj4gKyAgICAgICAgX19z ZXRfYml0KFBTUl9TT0NLRVRfTDNfQ0RQLCAmaW5mby0+ZmVhdHVyZXMpOwo+ICsgICAgfQo+ICsg ICAgZWxzZQo+ICsgICAgICAgIF9fc2V0X2JpdChQU1JfU09DS0VUX0wzX0NBVCwgJmluZm8tPmZl YXR1cmVzKTsKPiArCj4gKyAgICBmZWF0LT5pbmZvLmwzX2luZm8gPSBsM19jYXQ7Cj4gKwo+ICsg ICAgaW5mby0+bnJfZmVhdCsrOwo+ICsKPiArICAgIC8qIEFkZCB0aGlzIGZlYXR1cmUgaW50byBs aXN0LiAqLwo+ICsgICAgbGlzdF9hZGRfdGFpbCgmZmVhdC0+bGlzdCwgJmluZm8tPmZlYXRfbGlz dCk7Cj4gKwo+ICsgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkp Owo+ICsgICAgcHJpbnRrKFhFTkxPR19JTkZPICJMMyBDQVQ6IGVuYWJsZWQgb24gc29ja2V0ICV1 LCBjb3NfbWF4OiV1LCBjYm1fbGVuOiV1LCBDRFA6JXNcbiIsCj4gKyAgICAgICAgICAgc29ja2V0 LCBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21heCwgZmVhdC0+aW5mby5sM19pbmZvLmNibV9sZW4s Cj4gKyAgICAgICAgICAgdGVzdF9iaXQoUFNSX1NPQ0tFVF9MM19DRFAsICZpbmZvLT5mZWF0dXJl cykgPyAib24iIDogIm9mZiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGwzX2NhdF9jb21wYXJl X3ZhbChjb25zdCB1aW50NjRfdCB2YWxbXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNvcywgYm9vbCAqZm91bmQpCj4gK3sKPiArICAgIHVpbnQ2 NF90IGwzX2RlZl9jYm07Cj4gKwo+ICsgICAgbDNfZGVmX2NibSA9ICgxdWxsIDw8IGZlYXQtPmlu Zm8ubDNfaW5mby5jYm1fbGVuKSAtIDE7Cj4gKwo+ICsgICAgLyogQ0RQICovCj4gKyAgICBpZiAo IGZlYXQtPmZlYXR1cmUgPT0gUFNSX1NPQ0tFVF9MM19DRFAgKQo+ICsgICAgewo+ICsgICAgICAg IGlmICggY29zID4gZmVhdC0+aW5mby5sM19pbmZvLmNvc19tYXggKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgaWYgKCB2YWxbMF0gIT0gbDNfZGVmX2NibSB8fAo+ICsgICAgICAgICAgICAg ICAgIHZhbFsxXSAhPSBsM19kZWZfY2JtICkKPiArICAgICAgICAgICAgewo+ICsgICAgICAgICAg ICAgICAgKmZvdW5kID0gZmFsc2U7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsK PiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAqZm91bmQgPSB0cnVlOwo+ICsgICAgICAg IH0KPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICpmb3VuZCA9ICh2YWxbMF0gPT0gZmVh dC0+Y29zX3JlZ192YWxbY29zICogMl0gJiYKPiArICAgICAgICAgICAgICAgICAgICAgIHZhbFsx XSA9PSBmZWF0LT5jb3NfcmVnX3ZhbFtjb3MgKiAyICsgMV0pOwo+ICsKPiArICAgICAgICAvKiBD RFAgb2NjdXBpZXMgdHdvIENPUywgb25lIGZvciBkYXRhLCBvbmUgZm9yIGNvZGUuICovCj4gKyAg ICAgICAgcmV0dXJuIDI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogQ0FUICovCj4gKyAgICBpZiAo IGNvcyA+IGZlYXQtPmluZm8ubDNfaW5mby5jb3NfbWF4ICkKPiArICAgIHsKPiArICAgICAgICBp ZiAoIHZhbFswXSAhPSBsM19kZWZfY2JtICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgICpm b3VuZCA9IGZhbHNlOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgKmZvdW5kID0gdHJ1ZTsKPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgICAg ICAqZm91bmQgPSAodmFsWzBdID09IGZlYXQtPmNvc19yZWdfdmFsW2Nvc10pOwo+ICsKPiArICAg IC8qIEwzIENBVCBvY2N1cGllcyBvbmUgQ09TLiAqLwo+ICsgICAgcmV0dXJuIDE7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2dldF9jb3NfbWF4X2Zyb21fdHlwZShjb25z dCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlwZSkKPiArewo+ICsgICAg aWYgKCB0eXBlICE9IFBTUl9NQVNLX1RZUEVfTDNfREFUQSAmJgo+ICsgICAgICAgICB0eXBlICE9 IFBTUl9NQVNLX1RZUEVfTDNfQ09ERSAmJgo+ICsgICAgICAgICB0eXBlICE9IFBTUl9NQVNLX1RZ UEVfTDNfQ0JNICkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICByZXR1cm4gZmVhdC0+ aW5mby5sM19pbmZvLmNvc19tYXg7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNf Y2F0X2V4Y2VlZHNfY29zX21heChjb25zdCB1aW50NjRfdCB2YWxbXSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZl YXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgY29zKQo+ICt7Cj4gKyAgICB1aW50NjRfdCBsM19kZWZfY2JtOwo+ICsKPiArICAgIGwz X2RlZl9jYm0gPSAoMXVsbCA8PCBmZWF0LT5pbmZvLmwzX2luZm8uY2JtX2xlbikgLSAxOwo+ICsK PiArICAgIC8qIENEUCAqLwo+ICsgICAgaWYgKCBmZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRf TDNfQ0RQICkKPiArICAgIHsKPiArICAgICAgICBpZiAoIGNvcyA+IGZlYXQtPmluZm8ubDNfaW5m by5jb3NfbWF4ICYmCj4gKyAgICAgICAgICAgICAodmFsWzBdICE9IGwzX2RlZl9jYm0gfHwgdmFs WzFdICE9IGwzX2RlZl9jYm0pICkKPiArICAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAg ICAgICAgKiBFeGNlZWQgY29zX21heCBhbmQgdmFsdWUgdG8gc2V0IGlzIG5vdCBkZWZhdWx0LAo+ ICsgICAgICAgICAgICAgICAgICogcmV0dXJuIGVycm9yLgo+ICsgICAgICAgICAgICAgICAgICov Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICAgLyogQ0RQIG9jY3Vw aWVzIHR3byBDT1MsIG9uZSBmb3IgZGF0YSwgb25lIGZvciBjb2RlLiAqLwo+ICsgICAgICAgIHJl dHVybiAyOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIENBVCAqLwo+ICsgICAgaWYgKCBjb3MgPiBm ZWF0LT5pbmZvLmwzX2luZm8uY29zX21heCAmJgo+ICsgICAgICAgICB2YWxbMF0gIT0gbDNfZGVm X2NibSApCj4gKyAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAqIEV4Y2VlZCBjb3NfbWF4 IGFuZCB2YWx1ZSB0byBzZXQgaXMgbm90IGRlZmF1bHQsCj4gKyAgICAgICAgICAgICAqIHJldHVy biBlcnJvci4KPiArICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsK PiArICAgIC8qIEwzIENBVCBvY2N1cGllcyBvbmUgQ09TLiAqLwo+ICsgICAgcmV0dXJuIDE7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbDNfY2F0X3dyaXRlX21zcih1bnNpZ25lZCBpbnQgY29zLCBj b25zdCB1aW50NjRfdCB2YWxbXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBmZWF0X2xpc3QgKmZlYXQpCj4gK3sKPiArICAgIC8qIENEUCAqLwo+ICsgICAgaWYgKCBmZWF0 LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKPiArICAgIHsKPiArICAgICAgICAvKgo+ ICsgICAgICAgICAqIElmIGlucHV0IGNvcyBpcyBtb3JlIHRoYW4gdGhlIGNvc19tYXggb2YgdGhl IGZlYXR1cmUsIHdlIHNob3VsZAo+ICsgICAgICAgICAqIG5vdCBzZXQgdGhlIHZhbHVlLgo+ICsg ICAgICAgICAqLwo+ICsgICAgICAgIGlmICggY29zID4gZmVhdC0+aW5mby5sM19pbmZvLmNvc19t YXggKQo+ICsgICAgICAgICAgICAvKiBDRFAgb2NjdXBpZXMgdHdvIENPUywgb25lIGZvciBkYXRh LCBvbmUgZm9yIGNvZGUuICovCj4gKyAgICAgICAgICAgIHJldHVybiAyOwo+ICsKPiArICAgICAg ICAvKiBEYXRhICovCj4gKyAgICAgICAgZmVhdC0+Y29zX3JlZ192YWxbY29zICogMl0gPSB2YWxb MF07Cj4gKyAgICAgICAgLyogQ29kZSAqLwo+ICsgICAgICAgIGZlYXQtPmNvc19yZWdfdmFsW2Nv cyAqIDIgKyAxXSA9IHZhbFsxXTsKPiArCj4gKyAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9M M19NQVNLX0RBVEEoY29zKSwgdmFsWzBdKTsKPiArICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNS X0wzX01BU0tfQ09ERShjb3MpLCB2YWxbMV0pOwo+ICsgICAgICAgIC8qIENEUCBvY2N1cGllcyB0 d28gQ09TLCBvbmUgZm9yIGRhdGEsIG9uZSBmb3IgY29kZS4gKi8KPiArICAgICAgICByZXR1cm4g MjsKPiArICAgIH0KPiArCj4gKyAgICAvKiBDQVQgKi8KPiArICAgIGlmICggY29zID4gZmVhdC0+ aW5mby5sM19pbmZvLmNvc19tYXggKQo+ICsgICAgICAgIC8qIEwzIENBVCBvY2N1cGllcyBvbmUg Q09TLiAqLwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGZlYXQtPmNvc19yZWdfdmFs W2Nvc10gPSB2YWxbMF07Cj4gKyAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0soY29zKSwg dmFsWzBdKTsKPiArICAgIC8qIEwzIENBVCBvY2N1cGllcyBvbmUgQ09TLiAqLwo+ICsgICAgcmV0 dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2dldF9jb3NfbnVt KGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQpCj4gK3sKPiArICAgIGlmICggZmVhdC0+ZmVh dHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCj4gKyAgICAgICAgcmV0dXJuIDI7Cj4gKwo+ICsg ICAgcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbDNfY2F0X2dldF9vbGRfdmFsKHVp bnQ2NF90IHZhbFtdLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgZmVhdF9saXN0ICpmZWF0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgb2xkX2NvcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBw c3JfdmFsX3R5cGUgdHlwZSkKPiArewo+ICsgICAgaWYgKCBvbGRfY29zID4gZmVhdC0+aW5mby5s M19pbmZvLmNvc19tYXggKQo+ICsgICAgICAgIC8qIFVzZSBkZWZhdWx0IHZhbHVlLiAqLwo+ICsg ICAgICAgIG9sZF9jb3MgPSAwOwo+ICsKPiArICAgIC8qIENEUCAqLwo+ICsgICAgaWYgKCBmZWF0 LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKPiArICAgIHsKPiArICAgICAgICAvKiBE YXRhICovCj4gKyAgICAgICAgdmFsWzBdID0gZmVhdC0+Y29zX3JlZ192YWxbb2xkX2NvcyAqIDJd Owo+ICsgICAgICAgIC8qIENvZGUgKi8KPiArICAgICAgICB2YWxbMV0gPSBmZWF0LT5jb3NfcmVn X3ZhbFtvbGRfY29zICogMiArIDFdOwo+ICsKPiArICAgICAgICAvKiBDRFAgb2NjdXBpZXMgdHdv IENPUywgb25lIGZvciBkYXRhLCBvbmUgZm9yIGNvZGUuICovCj4gKyAgICAgICAgcmV0dXJuIDI7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogQ0FUICovCj4gKyAgICB2YWxbMF0gPSAgZmVhdC0+Y29z X3JlZ192YWxbb2xkX2Nvc107Cj4gKwo+ICsgICAgLyogTDMgQ0FUIG9jY3VwaWVzIG9uZSBDT1Mu ICovCj4gKyAgICByZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBsM19jYXRfc2V0X25l d192YWwodWludDY0X3QgdmFsW10sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBvbGRfY29zLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBtKQo+ICt7Cj4gKyAgICAvKiBMMyBDQVQgb2NjdXBpZXMgb25lIENPUy4gKi8K PiArICAgIHVuc2lnbmVkIGludCByZXQgPSAxOwo+ICsKPiArICAgIHN3aXRjaCAodHlwZSkgewo+ ICsgICAgLyogQ0RQIG9jY3VwaWVzIHR3byBDT1MsIG9uZSBmb3IgZGF0YSwgb25lIGZvciBjb2Rl LiAqLwo+ICsgICAgY2FzZSBQU1JfTUFTS19UWVBFX0wzX0RBVEE6Cj4gKyAgICBjYXNlIFBTUl9N QVNLX1RZUEVfTDNfQ09ERToKPiArICAgICAgICBpZiAoIGZlYXQtPmZlYXR1cmUgIT0gUFNSX1NP Q0tFVF9MM19DRFAgKQo+ICsgICAgICAgICAgICByZXR1cm4gLUVOWElPOwo+ICsKPiArICAgICAg ICBpZiAoICFwc3JfY2hlY2tfY2JtKGZlYXQtPmluZm8ubDNfaW5mby5jYm1fbGVuLCBtKSApCj4g KyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgICAgICBpZiAoIHR5cGUgPT0g UFNSX01BU0tfVFlQRV9MM19EQVRBICkKPiArICAgICAgICAgICAgdmFsWzBdID0gbTsKPiArICAg ICAgICBlbHNlCj4gKyAgICAgICAgICAgIHZhbFsxXSA9IG07Cj4gKwo+ICsgICAgICAgIHJldD0g MjsKPiArICAgICAgICBicmVhazsKPiArCj4gKyAgICAvKiBDQVQgKi8KPiArICAgIGNhc2UgUFNS X01BU0tfVFlQRV9MM19DQk06Cj4gKyAgICAgICAgaWYgKCAhcHNyX2NoZWNrX2NibShmZWF0LT5p bmZvLmwzX2luZm8uY2JtX2xlbiwgbSkgKQo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiArCj4gKyAgICAgICAgdmFsWzBdID0gbTsKPiArICAgICAgICBicmVhazsKPiArCj4gKyAgICBk ZWZhdWx0Ogo+ICsgICAgICAgIGlmICggZmVhdC0+ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NE UCApCj4gKyAgICAgICAgICAgIC8qIENEUCBvY2N1cGllcyB0d28gQ09TLCBvbmUgZm9yIGRhdGEs IG9uZSBmb3IgY29kZS4gKi8KPiArICAgICAgICAgICAgcmV0ID0gMjsKPiArICAgICAgICBicmVh azsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGwzX2NhdF9nZXRfdmFsKGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsIHVuc2lnbmVkIGlu dCBjb3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlw ZSwgdWludDY0X3QgKnZhbCkKPiArewo+ICsgICAgaWYgKCBjb3MgPiBmZWF0LT5pbmZvLmwzX2lu Zm8uY29zX21heCApCj4gKyAgICAgICAgLyogVXNlIGRlZmF1bHQgdmFsdWUuICovCj4gKyAgICAg ICAgY29zID0gMDsKPiArCj4gKyAgICBzd2l0Y2ggKHR5cGUpIHsKPiArICAgIC8qIENEUCAqLwo+ ICsgICAgY2FzZSBQU1JfTUFTS19UWVBFX0wzX0RBVEE6Cj4gKyAgICBjYXNlIFBTUl9NQVNLX1RZ UEVfTDNfQ09ERToKPiArICAgICAgICBpZiAoIGZlYXQtPmZlYXR1cmUgIT0gUFNSX1NPQ0tFVF9M M19DRFAgKQo+ICsgICAgICAgICAgICByZXR1cm4gLUVOWElPOwo+ICsKPiArICAgICAgICBpZiAo IHR5cGUgPT0gUFNSX01BU0tfVFlQRV9MM19EQVRBICkKPiArICAgICAgICAgICAgKnZhbCA9IGZl YXQtPmNvc19yZWdfdmFsW2NvcyAqIDJdOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAg KnZhbCA9IGZlYXQtPmNvc19yZWdfdmFsW2NvcyAqIDIgKyAxXTsKPiArICAgICAgICBicmVhazsK PiArCj4gKyAgICAvKiBDQVQgKi8KPiArICAgIGNhc2UgUFNSX01BU0tfVFlQRV9MM19DQk06Cj4g KyAgICAgICAgKnZhbCA9ICBmZWF0LT5jb3NfcmVnX3ZhbFtjb3NdOwo+ICsgICAgICAgIGJyZWFr Owo+ICsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbDNfY2F0X2dldF9mZWF0X2lu Zm8oY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IGRhdFtdLCB1aW50MzJfdCBhcnJheV9sZW4pCj4gK3sKPiAr ICAgIGlmICggIWRhdCB8fCAzID4gYXJyYXlfbGVuICkKPiArICAgICAgICByZXR1cm4gMDsKCk5v dCByZXR1cm4gLUVJTlZBTD8KPiArCj4gKyAgICBzd2l0Y2ggKHR5cGUpIHsKPiArICAgIGNhc2Ug UFNSX01BU0tfVFlQRV9MM19DQk06Cj4gKyAgICBjYXNlIFBTUl9NQVNLX1RZUEVfTDNfREFUQToK PiArICAgIGNhc2UgUFNSX01BU0tfVFlQRV9MM19DT0RFOgo+ICsgICAgICAgIGlmICggZmVhdC0+ ZmVhdHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCj4gKyAgICAgICAgICAgIGRhdFsyXSB8PSBY RU5fU1lTQ1RMX1BTUl9DQVRfTDNfQ0RQOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAg ZGF0WzJdID0gMDsKPiArICAgICAgICBicmVhazsKPiAgCj4gKyAgICBkZWZhdWx0Ogo+ICsgICAg ICAgIC8qIFRoaXMgZmVhdHVyZSBpcyBub3QgcmVxdWVzdGVkIGZlYXR1cmUuICovCj4gKyAgICAg ICAgcmV0dXJuIDA7CgpyZXR1cm4gLUVPUE5PVFNVUFBPPwoKPiArICAgIH0KPiArCj4gKyAgICBk YXRbMF0gPSBmZWF0LT5pbmZvLmwzX2luZm8uY2JtX2xlbjsKPiArICAgIGRhdFsxXSA9IGZlYXQt PmluZm8ubDNfaW5mby5jb3NfbWF4Owo+ICsKPiArICAgIHJldHVybiAxOwoKTm90IHJldHVybiAy ID8KCklmIHRoaXMgaXMganVzdCB0byByZXR1cm4gMHwxIHdoeSBub3QgdXNlICdib29sJyA/Cgo+ ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGwzX2NhdF9nZXRfbWF4X2Nvc19tYXgoY29u c3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCkKPiArewo+ICsgICAgcmV0dXJuIGZlYXQtPmluZm8u bDNfaW5mby5jb3NfbWF4Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZmVhdF9vcHMgbDNfY2F0X29wcyA9 IHsKPiArICAgIC5pbml0X2ZlYXR1cmUgPSBsM19jYXRfaW5pdF9mZWF0dXJlLAo+ICsgICAgLmdl dF9jb3NfbnVtID0gbDNfY2F0X2dldF9jb3NfbnVtLAo+ICsgICAgLmdldF9vbGRfdmFsID0gbDNf Y2F0X2dldF9vbGRfdmFsLAo+ICsgICAgLnNldF9uZXdfdmFsID0gbDNfY2F0X3NldF9uZXdfdmFs LAo+ICsgICAgLmNvbXBhcmVfdmFsID0gbDNfY2F0X2NvbXBhcmVfdmFsLAo+ICsgICAgLmdldF9j b3NfbWF4X2Zyb21fdHlwZSA9IGwzX2NhdF9nZXRfY29zX21heF9mcm9tX3R5cGUsCj4gKyAgICAu ZXhjZWVkc19jb3NfbWF4ID0gbDNfY2F0X2V4Y2VlZHNfY29zX21heCwKPiArICAgIC53cml0ZV9t c3IgPSBsM19jYXRfd3JpdGVfbXNyLAo+ICsgICAgLmdldF92YWwgPSBsM19jYXRfZ2V0X3ZhbCwK PiArICAgIC5nZXRfZmVhdF9pbmZvID0gbDNfY2F0X2dldF9mZWF0X2luZm8sCj4gKyAgICAuZ2V0 X21heF9jb3NfbWF4ID0gbDNfY2F0X2dldF9tYXhfY29zX21heCwKPiArfTsKPiArCj4gKy8qCj4g KyAqIENvbW1vbiBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24KPiArICovCj4gIHN0YXRpYyB1bnNp Z25lZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQgaW50IHNvY2tldCkKPiAgewo+ICAgICAg aWYgKCBsaWtlbHkoc29ja2V0IDwgbnJfc29ja2V0cykgKQo+IEBAIC0yMDksMTcgKzc0MCwyOSBA QCB2b2lkIHBzcl9mcmVlX3JtaWQoc3RydWN0IGRvbWFpbiAqZCkKPiAgICAgIGQtPmFyY2gucHNy X3JtaWQgPSAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbWF4 X2Nvc19tYXgoY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbykKPiArewo+ICsgICAg Y29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdF90bXA7Cj4gKyAgICB1bnNpZ25lZCBpbnQgY29z X21heCA9IDA7Cj4gKwo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8t PmZlYXRfbGlzdCwgbGlzdCkKPiArICAgICAgICBjb3NfbWF4ID0gbWF4KGZlYXRfdG1wLT5vcHMu Z2V0X21heF9jb3NfbWF4KGZlYXRfdG1wKSwgY29zX21heCk7Cj4gKwo+ICsgICAgcmV0dXJuIGNv c19tYXg7Cj4gK30KPiArCj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBwc3JfYXNzb2NfaW5pdCh2b2lk KQo+ICB7Cj4gICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3Nv Yyk7Cj4gIAo+IC0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQo+ICsgICAgaWYgKCBzb2NrZXRf aW5mbyApCj4gICAgICB7Cj4gICAgICAgICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19z b2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKPiArICAgICAgICBjb25zdCBzdHJ1Y3QgcHNyX3Nv Y2tldF9pbmZvICppbmZvID0gc29ja2V0X2luZm8gKyBzb2NrZXQ7Cj4gKyAgICAgICAgdW5zaWdu ZWQgaW50IGNvc19tYXggPSBnZXRfbWF4X2Nvc19tYXgoaW5mbyk7Cj4gIAo+IC0gICAgICAgIGlm ICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQo+IC0gICAgICAgICAgICBw c3JhLT5jb3NfbWFzayA9ICgoMXVsbCA8PCBnZXRfY291bnRfb3JkZXIoCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2F0X3NvY2tldF9pbmZvW3NvY2tldF0uY29zX21heCkpIC0gMSkg PDwgMzI7Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5mZWF0dXJlcyApCj4gKyAgICAgICAgICAgIHBz cmEtPmNvc19tYXNrID0gKCgxdWxsIDw8IGdldF9jb3VudF9vcmRlcihjb3NfbWF4KSkgLSAxKSA8 PCAzMjsKPiAgICAgIH0KPiAgCj4gICAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IHBzcmEt PmNvc19tYXNrICkKPiBAQCAtMjU2LDI3MCArNzk5LDM2MiBAQCB2b2lkIHBzcl9jdHh0X3N3aXRj aF90byhzdHJ1Y3QgZG9tYWluICpkKQo+ICAgICAgICAgIHBzcmEtPnZhbCA9IHJlZzsKPiAgICAg IH0KPiAgfQo+IC1zdGF0aWMgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmdldF9jYXRfc29j a2V0X2luZm8odW5zaWduZWQgaW50IHNvY2tldCkKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcHNyX3Nv Y2tldF9pbmZvICpnZXRfc29ja2V0X2luZm8odW5zaWduZWQgaW50IHNvY2tldCkKPiAgewo+IC0g ICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8g KmluZm87Cj4gKwo+ICsgICAgaWYgKCAhc29ja2V0X2luZm8gKQo+ICAgICAgICAgIHJldHVybiBF UlJfUFRSKC1FTk9ERVYpOwo+ICAKPiAgICAgIGlmICggc29ja2V0ID49IG5yX3NvY2tldHMgKQo+ ICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7Cj4gIAo+IC0gICAgaWYgKCAhdGVz dF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQo+IC0gICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9FTlQpOwo+ICsgICAgaW5mbyA9IHNvY2tldF9pbmZvICsgc29ja2V0Owo+ICAKPiAt ICAgIHJldHVybiBjYXRfc29ja2V0X2luZm8gKyBzb2NrZXQ7Cj4gLX0KPiArICAgIGlmICggIWlu Zm8tPmZlYXR1cmVzICkKPiArICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKPiAgCj4g LXN0YXRpYyBpbmxpbmUgYm9vbF90IGNkcF9pc19lbmFibGVkKHVuc2lnbmVkIGludCBzb2NrZXQp Cj4gLXsKPiAtICAgIHJldHVybiBjZHBfc29ja2V0X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQs IGNkcF9zb2NrZXRfZW5hYmxlKTsKPiArICAgIHJldHVybiBpbmZvOwo+ICB9Cj4gIAo+IC1pbnQg cHNyX2dldF9jYXRfbDNfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0LCB1aW50MzJfdCAqY2JtX2xl biwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmNvc19tYXgsIHVpbnQzMl90 ICpmbGFncykKPiAraW50IHBzcl9nZXRfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0LCBlbnVtIHBz cl92YWxfdHlwZSB0eXBlLAo+ICsgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdFtdLCB1aW50 MzJfdCBhcnJheV9sZW4pCj4gIHsKPiAtICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpp bmZvID0gZ2V0X2NhdF9zb2NrZXRfaW5mbyhzb2NrZXQpOwo+ICsgICAgc3RydWN0IHBzcl9zb2Nr ZXRfaW5mbyAqaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhzb2NrZXQpOwo+ICsgICAgY29uc3Qgc3Ry dWN0IGZlYXRfbGlzdCAqZmVhdF90bXA7Cj4gIAo+ICAgICAgaWYgKCBJU19FUlIoaW5mbykgKQo+ ICAgICAgICAgIHJldHVybiBQVFJfRVJSKGluZm8pOwo+ICAKPiAtICAgICpjYm1fbGVuID0gaW5m by0+Y2JtX2xlbjsKPiAtICAgICpjb3NfbWF4ID0gaW5mby0+Y29zX21heDsKPiArICAgIGxpc3Rf Zm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gKyAgICAg ICAgaWYgKCBmZWF0X3RtcC0+b3BzLmdldF9mZWF0X2luZm8oZmVhdF90bXAsIHR5cGUsIGRhdCwg YXJyYXlfbGVuKSApCj4gKyAgICAgICAgICAgIHJldHVybiAwOwoKSG93IGFib3V0IGp1c3QgdXNp bmcgdGhlIHJlZ3VsYXJkIHJldHVybiB2YWx1ZXM6IDAgZm9yIHN1Y2NjZXNzIGFuZApvdGhlciBu dW1iZXJzIGFyZSBmYWlsdXJlcz8KCj4gIAo+IC0gICAgKmZsYWdzID0gMDsKPiAtICAgIGlmICgg Y2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCj4gLSAgICAgICAgKmZsYWdzIHw9IFhFTl9TWVNDVExf UFNSX0NBVF9MM19DRFA7Cj4gKyAgICByZXR1cm4gLUVOT0RFVjsKPiArfQo+ICAKPiAtICAgIHJl dHVybiAwOwo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb3NfbnVtKGNvbnN0IHN0cnVjdCBw c3Jfc29ja2V0X2luZm8gKmluZm8pCj4gK3sKPiArICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3Qg KmZlYXRfdG1wOwo+ICsgICAgdW5zaWduZWQgaW50IG51bSA9IDA7Cj4gKwo+ICsgICAgbGlzdF9m b3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiArICAgICAg ICBudW0gKz0gZmVhdF90bXAtPm9wcy5nZXRfY29zX251bShmZWF0X3RtcCk7Cj4gKwo+ICsgICAg cmV0dXJuIG51bTsKPiAgfQo+ICAKPiAtaW50IHBzcl9nZXRfbDNfY2JtKHN0cnVjdCBkb21haW4g KmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCj4gLSAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAq Y2JtLCBlbnVtIGNibV90eXBlIHR5cGUpCj4gK3N0YXRpYyBpbnQgZ2V0X29sZF9zZXRfbmV3KHVp bnQ2NF90ICp2YWwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFycmF5 X2xlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBzcl9zb2Nr ZXRfaW5mbyAqaW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG9sZF9jb3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBl IHR5cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0pCj4gIHsKPiAt ICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0X2NhdF9zb2NrZXRfaW5m byhzb2NrZXQpOwo+IC0gICAgYm9vbF90IGNkcF9lbmFibGVkID0gY2RwX2lzX2VuYWJsZWQoc29j a2V0KTsKPiArICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXRfdG1wOwo+ICsgICAgaW50 IHJldDsKPiArICAgIHVpbnQ2NF90ICp2YWxfdG1wID0gdmFsOwo+ICAKPiAtICAgIGlmICggSVNf RVJSKGluZm8pICkKPiAtICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKPiArICAgIGlmICgg IXZhbCApCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gIAo+IC0gICAgc3dpdGNoICggdHlw ZSApCj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlYXRfdG1wLCAmaW5mby0+ZmVhdF9saXN0 LCBsaXN0KQo+ICAgICAgewo+IC0gICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDM6Cj4gLSAgICAgICAg aWYgKCBjZHBfZW5hYmxlZCApCj4gLSAgICAgICAgICAgIHJldHVybiAtRVhERVY7Cj4gLSAgICAg ICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5j Ym07Cj4gLSAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgLyogdmFsdWUgZ2V0dGluZyBvcmRlciBp cyBzYW1lIGFzIGZlYXR1cmUgbGlzdCAqLwo+ICsgICAgICAgIHJldCA9IGZlYXRfdG1wLT5vcHMu Z2V0X29sZF92YWwodmFsX3RtcCwgZmVhdF90bXAsIG9sZF9jb3MsIHR5cGUpOwo+ICAKPiAtICAg IGNhc2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Cj4gLSAgICAgICAgaWYgKCAhY2RwX2VuYWJsZWQg KQo+IC0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3Nf aWRzW3NvY2tldF1dLmNibTsKPiAtICAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICpjYm0gPSBp bmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uY29kZTsKPiAtICAg ICAgICBicmVhazsKPiAtCj4gLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgo+IC0gICAg ICAgIGlmICggIWNkcF9lbmFibGVkICkKPiAtICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190 b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jYm07Cj4gLSAgICAgICAgZWxzZQo+ IC0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRz W3NvY2tldF1dLmRhdGE7Cj4gLSAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgdmFsX3RtcCArPSBy ZXQ7Cj4gKyAgICAgICAgaWYgKCB2YWxfdG1wIC0gdmFsID4gYXJyYXlfbGVuKQo+ICsgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgIH0KPiAgCj4gLSAgICBkZWZhdWx0Ogo+IC0gICAg ICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwo+ICsgICAgdmFsX3RtcCA9IHZhbDsKPiArICAgIGxp c3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gKyAg ICB7Cj4gKyAgICAgICAgLyogdmFsdWUgc2V0dGluZyBvcmRlciBpcyBzYW1lIGFzIGZlYXR1cmUg bGlzdCAqLwo+ICsgICAgICAgIHJldCA9IGZlYXRfdG1wLT5vcHMuc2V0X25ld192YWwodmFsX3Rt cCwgZmVhdF90bXAsIG9sZF9jb3MsIHR5cGUsIG0pOwo+ICsgICAgICAgIGlmICggcmV0IDwgMCAp Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgIHZhbF90bXAgKz0gcmV0 Owo+ICsgICAgICAgIGlmICggdmFsX3RtcCAtIHZhbCA+IGFycmF5X2xlbikKPiArICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4gICAgICB9Cj4gIAo+ICAgICAgcmV0dXJuIDA7Cj4gIH0KPiAg Cj4gLXN0YXRpYyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xlbiwgdWlu dDY0X3QgY2JtKQo+ICtpbnQgcHNyX2dldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQg aW50IHNvY2tldCwKPiArICAgICAgICAgICAgICAgIHVpbnQ2NF90ICp2YWwsIGVudW0gcHNyX3Zh bF90eXBlIHR5cGUpCj4gIHsKPiAtICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0 Owo+ICsgICAgY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9zb2NrZXRf aW5mbyhzb2NrZXQpOwo+ICsgICAgdW5zaWduZWQgaW50IGNvcyA9IGQtPmFyY2gucHNyX2Nvc19p ZHNbc29ja2V0XTsKPiArICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXRfdG1wOwo+ICsg ICAgaW50IHJldDsKPiAgCj4gLSAgICAvKiBTZXQgYml0cyBzaG91bGQgb25seSBpbiB0aGUgcmFu Z2Ugb2YgWzAsIGNibV9sZW4pLiAqLwo+IC0gICAgaWYgKCBjYm0gJiAofjB1bGwgPDwgY2JtX2xl bikgKQo+IC0gICAgICAgIHJldHVybiAwOwo+IC0KPiAtICAgIC8qIEF0IGxlYXN0IG9uZSBiaXQg bmVlZCB0byBiZSBzZXQuICovCj4gLSAgICBpZiAoIGNibSA9PSAwICkKPiAtICAgICAgICByZXR1 cm4gMDsKPiArICAgIGlmICggSVNfRVJSKGluZm8pICkKPiArICAgICAgICByZXR1cm4gUFRSX0VS UihpbmZvKTsKPiAgCj4gLSAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmY2JtLCBjYm1f bGVuKTsKPiAtICAgIHplcm9fYml0ID0gZmluZF9uZXh0X3plcm9fYml0KCZjYm0sIGNibV9sZW4s IGZpcnN0X2JpdCk7Cj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlYXRfdG1wLCAmaW5mby0+ ZmVhdF9saXN0LCBsaXN0KQo+ICsgICAgewo+ICsgICAgICAgIHJldCA9IGZlYXRfdG1wLT5vcHMu Z2V0X3ZhbChmZWF0X3RtcCwgY29zLCB0eXBlLCB2YWwpOwo+ICsgICAgICAgIGlmICggcmV0IDwg MCApCj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gIAo+IC0gICAgLyogU2V0IGJpdHMgc2hv dWxkIGJlIGNvbnRpZ3VvdXMuICovCj4gLSAgICBpZiAoIHplcm9fYml0IDwgY2JtX2xlbiAmJgo+ IC0gICAgICAgICBmaW5kX25leHRfYml0KCZjYm0sIGNibV9sZW4sIHplcm9fYml0KSA8IGNibV9s ZW4gKQo+IC0gICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgIGlmICggcmV0ID4gMCApCj4gKyAg ICAgICAgICAgIC8qIEZvdW5kICovCj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICAK PiAtICAgIHJldHVybiAxOwo+ICsgICAgcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0cnVjdCBjb3Nf Y2JtX2luZm8KPiArc3RydWN0IGNvc19tYXNrX2luZm8KPiAgewo+ICAgICAgdW5zaWduZWQgaW50 IGNvczsKPiAtICAgIGJvb2xfdCBjZHA7Cj4gLSAgICB1aW50NjRfdCBjYm1fY29kZTsKPiAtICAg IHVpbnQ2NF90IGNibV9kYXRhOwo+ICsgICAgc3RydWN0IGxpc3RfaGVhZCAqZmVhdF9saXN0Owo+ ICsgICAgY29uc3QgdWludDY0X3QgKnZhbDsKPiAgfTsKPiAgCj4gLXN0YXRpYyB2b2lkIGRvX3dy aXRlX2wzX2NibSh2b2lkICpkYXRhKQo+ICtzdGF0aWMgdm9pZCBkb193cml0ZV9wc3JfbXNyKHZv aWQgKmRhdGEpCj4gIHsKPiAtICAgIHN0cnVjdCBjb3NfY2JtX2luZm8gKmluZm8gPSBkYXRhOwo+ ICsgICAgc3RydWN0IGNvc19tYXNrX2luZm8gKmluZm8gPSAoc3RydWN0IGNvc19tYXNrX2luZm8g KilkYXRhOwo+ICsgICAgdW5zaWduZWQgaW50IGNvcyAgICAgICAgICAgPSBpbmZvLT5jb3M7Cj4g KyAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmZWF0X2xpc3Q9IGluZm8tPmZlYXRfbGlzdDsKPiArICAg IGNvbnN0IHVpbnQ2NF90ICp2YWwgICAgICAgID0gaW5mby0+dmFsOwo+ICsgICAgc3RydWN0IGZl YXRfbGlzdCAqZmVhdF90bXA7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGlmICggIWZlYXRf bGlzdCApCj4gKyAgICAgICAgcmV0dXJuOwo+ICAKPiAtICAgIGlmICggaW5mby0+Y2RwICkKPiAr ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsIGZlYXRfbGlzdCwgbGlzdCkKPiAgICAg IHsKPiAtICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0tfQ09ERShpbmZvLT5jb3Mp LCBpbmZvLT5jYm1fY29kZSk7Cj4gLSAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNL X0RBVEEoaW5mby0+Y29zKSwgaW5mby0+Y2JtX2RhdGEpOwo+ICsgICAgICAgIHJldCA9IGZlYXRf dG1wLT5vcHMud3JpdGVfbXNyKGNvcywgdmFsLCBmZWF0X3RtcCk7Cj4gKyAgICAgICAgaWYgKCBy ZXQgPD0gMCkKPiArICAgICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgICAgICB2YWwgKz0gcmV0 Owo+ICAgICAgfQo+IC0gICAgZWxzZQo+IC0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNf TUFTSyhpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQg d3JpdGVfbDNfY2JtKHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBjYm1fZGF0 YSwgYm9vbF90IGNkcCkKPiArc3RhdGljIGludCB3cml0ZV9wc3JfbXNyKHVuc2lnbmVkIGludCBz b2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50NjRfdCAqdmFsKQo+ICB7Cj4gLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZvIGluZm8gPQo+ ICsgICAgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhzb2Nr ZXQpOwo+ICsKPiArICAgIHN0cnVjdCBjb3NfbWFza19pbmZvIGRhdGEgPQo+ICAgICAgewo+ICAg ICAgICAgIC5jb3MgPSBjb3MsCj4gLSAgICAgICAgLmNibV9jb2RlID0gY2JtX2NvZGUsCj4gLSAg ICAgICAgLmNibV9kYXRhID0gY2JtX2RhdGEsCj4gLSAgICAgICAgLmNkcCA9IGNkcCwKPiArICAg ICAgICAuZmVhdF9saXN0ID0gJmluZm8tPmZlYXRfbGlzdCwKPiArICAgICAgICAudmFsID0gdmFs LAo+ICAgICAgfTsKPiAgCj4gICAgICBpZiAoIHNvY2tldCA9PSBjcHVfdG9fc29ja2V0KHNtcF9w cm9jZXNzb3JfaWQoKSkgKQo+IC0gICAgICAgIGRvX3dyaXRlX2wzX2NibSgmaW5mbyk7Cj4gKyAg ICAgICAgZG9fd3JpdGVfcHNyX21zcigmZGF0YSk7Cj4gICAgICBlbHNlCj4gICAgICB7Cj4gICAg ICAgICAgdW5zaWduZWQgaW50IGNwdSA9IGdldF9zb2NrZXRfY3B1KHNvY2tldCk7Cj4gIAo+ICAg ICAgICAgIGlmICggY3B1ID49IG5yX2NwdV9pZHMgKQo+ICAgICAgICAgICAgICByZXR1cm4gLUVO T1RTT0NLOwo+IC0gICAgICAgIG9uX3NlbGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193 cml0ZV9sM19jYm0sICZpbmZvLCAxKTsKPiArICAgICAgICBvbl9zZWxlY3RlZF9jcHVzKGNwdW1h c2tfb2YoY3B1KSwgZG9fd3JpdGVfcHNyX21zciwgJmRhdGEsIDEpOwo+ICAgICAgfQo+ICAKPiAg ICAgIHJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGZpbmRfY29zKHN0cnVjdCBwc3Jf Y2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21heCwKPiAtICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBjYm1fY29kZSwgdWludDY0X3QgY2JtX2RhdGEsIGJvb2xfdCBjZHBfZW5hYmxl ZCkKPiArc3RhdGljIGludCBmaW5kX2Nvcyhjb25zdCB1aW50NjRfdCAqdmFsLCB1aW50MzJfdCBh cnJheV9sZW4sCj4gKyAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlwZSwK PiArICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZv KQo+ICB7Cj4gICAgICB1bnNpZ25lZCBpbnQgY29zOwo+ICsgICAgY29uc3Qgc3RydWN0IHBzcl9y ZWYgKm1hcCA9IGluZm8tPmNvc19yZWY7Cj4gKyAgICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpm ZWF0X3RtcDsKPiArICAgIGNvbnN0IHVpbnQ2NF90ICp2YWxfdG1wID0gdmFsOwo+ICsgICAgaW50 IHJldDsKPiArICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKPiArICAgIHVuc2lnbmVkIGludCBjb3Nf bWF4ID0gMDsKPiArCj4gKyAgICAvKiBjb3NfbWF4IGlzIHRoZSBtYXggQ09TIG9mIHRoZSBmZWF0 dXJlIHRvIGJlIHNldC4gKi8KPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZp bmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gKyAgICB7Cj4gKyAgICAgICAgY29zX21heCA9IGZlYXRf dG1wLT5vcHMuZ2V0X2Nvc19tYXhfZnJvbV90eXBlKGZlYXRfdG1wLCB0eXBlKTsKPiArICAgICAg ICBpZiAoIGNvc19tYXggPiAwICkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gIAo+ ICAgICAgZm9yICggY29zID0gMDsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKPiAgICAgIHsKPiAt ICAgICAgICBpZiAoIChtYXBbY29zXS5yZWYgfHwgY29zID09IDApICYmCj4gLSAgICAgICAgICAg ICAoKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gPT0gY2JtX2NvZGUpIHx8Cj4gLSAgICAg ICAgICAgICAgKGNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNvZGUgPT0gY2JtX2NvZGUgJiYKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwW2Nvc10uZGF0YSA9PSBjYm1fZGF0YSkp ICkKPiArICAgICAgICBpZiAoIDAgIT0gY29zICYmIDAgPT0gbWFwW2Nvc10ucmVmICkKCmhvdyBh Ym91dCBqdXN0OgoKaWYgKCBjb3MgJiYgIW1hcFtjb3NdLnJlZiApID8KCj4gKyAgICAgICAgICAg IGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAvKiBOb3QgZm91bmQsIG5lZWQgZmluZCBhZ2FpbiBm cm9tIGJlZ2lubmluZy4gKi8KPiArICAgICAgICB2YWxfdG1wID0gdmFsOwo+ICsgICAgICAgIGxp c3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAgKiBDb21wYXJlIHZhbHVl IGFjY29yZGluZyB0byBmZWF0dXJlIGxpc3Qgb3JkZXIuCj4gKyAgICAgICAgICAgICAqIFdlIG11 c3QgZm9sbG93IHRoaXMgb3JkZXIgYmVjYXVzZSB2YWx1ZSBhcnJheSBpcyBhc3NlbWJsZWQKPiAr ICAgICAgICAgICAgICogYXMgdGhpcyBvcmRlciBpbiBnZXRfb2xkX3NldF9uZXcoKS4KPiArICAg ICAgICAgICAgICovCj4gKyAgICAgICAgICAgIHJldCA9IGZlYXRfdG1wLT5vcHMuY29tcGFyZV92 YWwodmFsX3RtcCwgZmVhdF90bXAsIGNvcywgJmZvdW5kKTsKPiArICAgICAgICAgICAgaWYgKCBy ZXQgPCAwICkKPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgICAg ICAvKiBJZiBmYWlsIHRvIG1hdGNoLCBnbyB0byBuZXh0IGNvcyB0byBjb21wYXJlLiAqLwo+ICsg ICAgICAgICAgICBpZiAoICFmb3VuZCApCj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArCj4g KyAgICAgICAgICAgIHZhbF90bXAgKz0gcmV0Owo+ICsgICAgICAgICAgICBpZiAoIHZhbF90bXAg LSB2YWwgPiBhcnJheV9sZW4gKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBFdmVyeSBmZWF0dXJlIGNhbiBtYXRjaCwgdGhp cyBjb3MgaXMgd2hhdCB3ZSBmaW5kLiAqLwoKSSBhbSBub3Qgc3VyZSBJIHVuZGVyc3RhbmQgdGhl IGNvbW1lbnQuCgo+ICsgICAgICAgIGlmICggZm91bmQgKQo+ICAgICAgICAgICAgICByZXR1cm4g Y29zOwo+ICAgICAgfQo+ICAKPiAgICAgIHJldHVybiAtRU5PRU5UOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgaW50IHBpY2tfYXZhaWxfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBp bnQgY29zX21heCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xk X2NvcykKPiArc3RhdGljIGJvb2wgZXhjZWVkc19jb3NfbWF4KGNvbnN0IHVpbnQ2NF90ICp2YWws Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheV9sZW4sCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICpp bmZvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcykKPiAr ewo+ICsgICAgdW5zaWduZWQgaW50IHJldDsKPiArICAgIGNvbnN0IHVpbnQ2NF90ICp2YWxfdG1w ID0gdmFsOwo+ICsgICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdF90bXA7Cj4gKwo+ICsg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkK PiArICAgIHsKPiArICAgICAgICByZXQgPSBmZWF0X3RtcC0+b3BzLmV4Y2VlZHNfY29zX21heCh2 YWxfdG1wLCBmZWF0X3RtcCwgY29zKTsKPiArICAgICAgICBpZiAoIDAgPT0gcmV0ICkKCkhvdyBh Ym91dAoKIGlmICggIXJldCApCglyZXR1cm4gZmFsc2U7Cgo+ICsgICAgICAgICAgICByZXR1cm4g ZmFsc2U7Cj4gKwo+ICsgICAgICAgIHZhbF90bXAgKz0gcmV0Owo+ICsgICAgICAgIGlmICggdmFs X3RtcCAtIHZhbCA+IGFycmF5X2xlbiApCj4gKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAr ICAgIH0KPiArCj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhbGxv Y19uZXdfY29zKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8sCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1aW50NjRfdCAqdmFsLCB1aW50MzJfdCBhcnJheV9sZW4s Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpCj4gIHsKPiAgICAg IHVuc2lnbmVkIGludCBjb3M7Cj4gKyAgICB1bnNpZ25lZCBpbnQgY29zX21heCA9IDA7Cj4gKyAg ICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiArICAgIGNvbnN0IHN0cnVjdCBw c3JfcmVmICptYXAgPSBpbmZvLT5jb3NfcmVmOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBjb3Nf bWF4IGlzIHRoZSBtYXggQ09TIG9mIHRoZSBmZWF0dXJlIHRvIGJlIHNldC4KPiArICAgICAqLwo+ ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlz dCkKPiArICAgIHsKPiArICAgICAgICBjb3NfbWF4ID0gZmVhdF90bXAtPm9wcy5nZXRfY29zX21h eF9mcm9tX3R5cGUoZmVhdF90bXAsIHR5cGUpOwo+ICsgICAgICAgIGlmICggY29zX21heCA+IDAg KQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoICFjb3NfbWF4 ICkKPiArICAgICAgICByZXR1cm4gLUVOT0VOVDsKPiAgCj4gICAgICAvKiBJZiBvbGQgY29zIGlz IHJlZmVycmVkIG9ubHkgYnkgdGhlIGRvbWFpbiwgdGhlbiB1c2UgaXQuICovCj4gICAgICBpZiAo IG1hcFtvbGRfY29zXS5yZWYgPT0gMSAmJiBvbGRfY29zICE9IDAgKQo+IC0gICAgICAgIHJldHVy biBvbGRfY29zOwo+ICsgICAgICAgIGlmICggZXhjZWVkc19jb3NfbWF4KHZhbCwgYXJyYXlfbGVu LCBpbmZvLCBvbGRfY29zKSApCj4gKyAgICAgICAgICAgIHJldHVybiBvbGRfY29zOwo+ICAKPiAg ICAgIC8qIEZpbmQgYW4gdW51c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCj4gICAgICBmb3Ig KCBjb3MgPSAxOyBjb3MgPD0gY29zX21heDsgY29zKysgKQo+ICsgICAgICAgIC8qCj4gKyAgICAg ICAgICogcmVmIGlzIDAgbWVhbnMgdGhpcyBDT1MgaXMgbm90IG9jY3VwaWVkIGJ5IG90aGVyIGRv bWFpbiBhbmQKPiArICAgICAgICAgKiBjYW4gYmUgdXNlZCBmb3IgY3VycmVudCBzZXR0aW5nLgo+ ICsgICAgICAgICAqLwo+ICAgICAgICAgIGlmICggbWFwW2Nvc10ucmVmID09IDAgKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgaWYgKCAhZXhjZWVkc19jb3NfbWF4KHZhbCwgYXJyYXlfbGVu LCBpbmZvLCBjb3MpICkKPiArICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsKPiAg ICAgICAgICAgICAgcmV0dXJuIGNvczsKPiArICAgICAgICB9Cj4gIAo+ICAgICAgcmV0dXJuIC1F Tk9FTlQ7Cj4gIH0KPiAgCj4gLWludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1 bnNpZ25lZCBpbnQgc29ja2V0LAo+IC0gICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtLCBl bnVtIGNibV90eXBlIHR5cGUpCj4gK2ludCBwc3Jfc2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1 bnNpZ25lZCBpbnQgc29ja2V0LAo+ICsgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCBlbnVt IHBzcl92YWxfdHlwZSB0eXBlKQo+ICB7Cj4gLSAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywgY29z X21heDsKPiArICAgIHVuc2lnbmVkIGludCBvbGRfY29zOwo+ICAgICAgaW50IGNvcywgcmV0Owo+ IC0gICAgdWludDY0X3QgY2JtX2RhdGEsIGNibV9jb2RlOwo+IC0gICAgYm9vbF90IGNkcF9lbmFi bGVkID0gY2RwX2lzX2VuYWJsZWQoc29ja2V0KTsKPiAtICAgIHN0cnVjdCBwc3JfY2F0X2NibSAq bWFwOwo+IC0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBnZXRfY2F0X3Nv Y2tldF9pbmZvKHNvY2tldCk7Cj4gKyAgICBzdHJ1Y3QgcHNyX3JlZiAqbWFwOwo+ICsgICAgdWlu dDY0X3QgKnZhbF9hcnJheTsKPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8gPSBn ZXRfc29ja2V0X2luZm8oc29ja2V0KTsKPiArICAgIHVpbnQzMl90IGFycmF5X2xlbjsKPiAgCj4g ICAgICBpZiAoIElTX0VSUihpbmZvKSApCj4gICAgICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7 Cj4gIAo+IC0gICAgaWYgKCAhcHNyX2NoZWNrX2NibShpbmZvLT5jYm1fbGVuLCBjYm0pICkKPiAt ICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAtCj4gLSAgICBpZiAoICFjZHBfZW5hYmxlZCAmJiAo dHlwZSA9PSBQU1JfQ0JNX1RZUEVfTDNfQ09ERSB8fAo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGUgPT0gUFNSX0NCTV9UWVBFX0wzX0RBVEEpICkKPiAtICAgICAgICByZXR1cm4gLUVO WElPOwo+IC0KPiAtICAgIGNvc19tYXggPSBpbmZvLT5jb3NfbWF4Owo+ICsgICAgbWFwID0gaW5m by0+Y29zX3JlZjsKPiAgICAgIG9sZF9jb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF07 Cj4gLSAgICBtYXAgPSBpbmZvLT5jb3NfdG9fY2JtOwo+ICAKPiAtICAgIHN3aXRjaCAoIHR5cGUg KQo+IC0gICAgewo+IC0gICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDM6Cj4gLSAgICAgICAgY2JtX2Nv ZGUgPSBjYm07Cj4gLSAgICAgICAgY2JtX2RhdGEgPSBjYm07Cj4gLSAgICAgICAgYnJlYWs7Cj4g LQo+IC0gICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDNfQ09ERToKPiAtICAgICAgICBjYm1fY29kZSA9 IGNibTsKPiAtICAgICAgICBjYm1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRhOwo+IC0gICAgICAg IGJyZWFrOwo+IC0KPiAtICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Cj4gLSAgICAgICAg Y2JtX2NvZGUgPSBtYXBbb2xkX2Nvc10uY29kZTsKPiAtICAgICAgICBjYm1fZGF0YSA9IGNibTsK PiAtICAgICAgICBicmVhazsKPiArICAgIGFycmF5X2xlbiA9IGdldF9jb3NfbnVtKChjb25zdCBz dHJ1Y3QgcHNyX3NvY2tldF9pbmZvICopaW5mbyk7Cj4gKyAgICB2YWxfYXJyYXkgPSB4emFsbG9j X2FycmF5KHVpbnQ2NF90LCBhcnJheV9sZW4pOwo+ICsgICAgaWYgKCAhdmFsX2FycmF5ICkKPiAr ICAgICAgICByZXR1cm4gLUVOT01FTTsKPiAgCj4gLSAgICBkZWZhdWx0Ogo+IC0gICAgICAgIEFT U0VSVF9VTlJFQUNIQUJMRSgpOwo+IC0gICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0gICAgfQo+ ICsgICAgaWYgKCAocmV0ID0gZ2V0X29sZF9zZXRfbmV3KHZhbF9hcnJheSwgYXJyYXlfbGVuLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgcHNyX3NvY2tl dF9pbmZvICopaW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfY29z LCB0eXBlLCB2YWwpKSAhPSAwICkKPiArICAgICAgICByZXR1cm4gcmV0OwoKWW91IGFyZSBsZWFr aW5nICd2YWxfYXJyYXknPyBUaGF0IGNhbid0IGJlIGdvb2QuCgo+ICAKPiAtICAgIHNwaW5fbG9j aygmaW5mby0+Y2JtX2xvY2spOwo+IC0gICAgY29zID0gZmluZF9jb3MobWFwLCBjb3NfbWF4LCBj Ym1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKPiArICAgIHNwaW5fbG9jaygmaW5mby0+ bWFza19sb2NrKTsKPiArICAgIGNvcyA9IGZpbmRfY29zKChjb25zdCB1aW50NjRfdCAqKXZhbF9h cnJheSwgYXJyYXlfbGVuLCB0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVj dCBwc3Jfc29ja2V0X2luZm8gKilpbmZvKTsKPiAgICAgIGlmICggY29zID49IDAgKQo+ICAgICAg ewo+ICAgICAgICAgIGlmICggY29zID09IG9sZF9jb3MgKQo+ICAgICAgICAgIHsKPiAtICAgICAg ICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKPiArICAgICAgICAgICAgc3Bpbl91 bmxvY2soJmluZm8tPm1hc2tfbG9jayk7Cj4gKyAgICAgICAgICAgIHhmcmVlKHZhbF9hcnJheSk7 Cj4gICAgICAgICAgICAgIHJldHVybiAwOwo+ICAgICAgICAgIH0KPiAgICAgIH0KPiAgICAgIGVs c2UKPiAgICAgIHsKPiAtICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2NvcyhtYXAsIGNvc19tYXgs IG9sZF9jb3MpOwo+ICsgICAgICAgIGNvcyA9IGFsbG9jX25ld19jb3MoKGNvbnN0IHN0cnVjdCBw c3Jfc29ja2V0X2luZm8gKilpbmZvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0IHVpbnQ2NF90ICopdmFsX2FycmF5LCBhcnJheV9sZW4sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbGRfY29zLCB0eXBlKTsKPiAgICAgICAgICBpZiAoIGNvcyA8IDAgKQo+ICAg ICAgICAgIHsKPiAtICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKPiAr ICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPm1hc2tfbG9jayk7Cj4gKyAgICAgICAgICAg IHhmcmVlKHZhbF9hcnJheSk7Cj4gICAgICAgICAgICAgIHJldHVybiBjb3M7Cj4gICAgICAgICAg fQo+ICAKPiAtICAgICAgICAvKiBXZSB0cnkgdG8gYXZvaWQgd3JpdGluZyBNU1IuICovCj4gLSAg ICAgICAgaWYgKCAoY2RwX2VuYWJsZWQgJiYKPiAtICAgICAgICAgICAgIChtYXBbY29zXS5jb2Rl ICE9IGNibV9jb2RlIHx8IG1hcFtjb3NdLmRhdGEgIT0gY2JtX2RhdGEpKSB8fAo+IC0gICAgICAg ICAgICAgKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gIT0gY2JtX2NvZGUpICkKPiArICAg ICAgICAvKiBXcml0ZSBhbGwgZmVhdHVyZXMgTVNScyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDT1Mg Ki8KPiArICAgICAgICByZXQgPSB3cml0ZV9wc3JfbXNyKHNvY2tldCwgY29zLCAoY29uc3QgdWlu dDY0X3QgKil2YWxfYXJyYXkpOwo+ICsgICAgICAgIGlmICggcmV0ICkKPiAgICAgICAgICB7Cj4g LSAgICAgICAgICAgIHJldCA9IHdyaXRlX2wzX2NibShzb2NrZXQsIGNvcywgY2JtX2NvZGUsIGNi bV9kYXRhLCBjZHBfZW5hYmxlZCk7Cj4gLSAgICAgICAgICAgIGlmICggcmV0ICkKPiAtICAgICAg ICAgICAgewo+IC0gICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsK PiAtICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAg ICAgICAgbWFwW2Nvc10uY29kZSA9IGNibV9jb2RlOwo+IC0gICAgICAgICAgICBtYXBbY29zXS5k YXRhID0gY2JtX2RhdGE7Cj4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5tYXNrX2xv Y2spOwo+ICsgICAgICAgICAgICB4ZnJlZSh2YWxfYXJyYXkpOwo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICAgICAgICAgIH0KPiAgICAgIH0KPiAgCj4gICAgICBtYXBbY29zXS5yZWYrKzsK PiAgICAgIG1hcFtvbGRfY29zXS5yZWYtLTsKPiAtICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1f bG9jayk7Cj4gKwo+ICsgICAgc3Bpbl91bmxvY2soJmluZm8tPm1hc2tfbG9jayk7Cj4gIAo+ICAg ICAgZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdID0gY29zOwo+ICsgICAgeGZyZWUodmFsX2Fy cmF5KTsKPiAgCj4gICAgICByZXR1cm4gMDsKPiAgfQo+IEBAIC01MjksMjAgKzExNjQsMjMgQEAg c3RhdGljIHZvaWQgcHNyX2ZyZWVfY29zKHN0cnVjdCBkb21haW4gKmQpCj4gIHsKPiAgICAgIHVu c2lnbmVkIGludCBzb2NrZXQ7Cj4gICAgICB1bnNpZ25lZCBpbnQgY29zOwo+IC0gICAgc3RydWN0 IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm87Cj4gKyAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZv ICppbmZvOwo+ICAKPiAgICAgIGlmKCAhZC0+YXJjaC5wc3JfY29zX2lkcyApCj4gICAgICAgICAg cmV0dXJuOwo+ICAKPiAtICAgIGZvcl9lYWNoX3NldF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2Vu YWJsZSwgbnJfc29ja2V0cykKPiArICAgIGZvciggc29ja2V0ID0gMDsgc29ja2V0IDwgbnJfc29j a2V0czsgc29ja2V0KyspCgpXcm9uZyBTdHlsZS4gWW91IGhhdmUgdGhlICggaW5jb3JyZWN0bHkg YW5kIGFsc28gdGhlICsrIG5lZWRzIGEgc3BhY2UKYWZ0ZXIgaXQuCj4gICAgICB7Cj4gICAgICAg ICAgaWYgKCAoY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdKSA9PSAwICkKPiAgICAg ICAgICAgICAgY29udGludWU7Cj4gIAo+IC0gICAgICAgIGluZm8gPSBjYXRfc29ja2V0X2luZm8g KyBzb2NrZXQ7Cj4gLSAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Cj4gLSAgICAg ICAgaW5mby0+Y29zX3RvX2NibVtjb3NdLnJlZi0tOwo+IC0gICAgICAgIHNwaW5fdW5sb2NrKCZp bmZvLT5jYm1fbG9jayk7Cj4gKyAgICAgICAgaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhzb2NrZXQp Owo+ICsgICAgICAgIGlmICggSVNfRVJSKGluZm8pICkKPiArICAgICAgICAgICAgY29udGludWU7 Cj4gKwo+ICsgICAgICAgIHNwaW5fbG9jaygmaW5mby0+bWFza19sb2NrKTsKPiArICAgICAgICBp bmZvLT5jb3NfcmVmW2Nvc10ucmVmLS07Cj4gKyAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPm1h c2tfbG9jayk7Cj4gICAgICB9Cj4gIAo+ICAgICAgeGZyZWUoZC0+YXJjaC5wc3JfY29zX2lkcyk7 Cj4gQEAgLTU1MSw3ICsxMTg5LDcgQEAgc3RhdGljIHZvaWQgcHNyX2ZyZWVfY29zKHN0cnVjdCBk b21haW4gKmQpCj4gIAo+ICBpbnQgcHNyX2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4g IHsKPiAtICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKPiArICAgIGlmICggc29ja2V0X2luZm8g KQo+ICAgICAgewo+ICAgICAgICAgIGQtPmFyY2gucHNyX2Nvc19pZHMgPSB4emFsbG9jX2FycmF5 KHVuc2lnbmVkIGludCwgbnJfc29ja2V0cyk7Cj4gICAgICAgICAgaWYgKCAhZC0+YXJjaC5wc3Jf Y29zX2lkcyApCj4gQEAgLTU2NywxMzcgKzEyMDUsMTI2IEBAIHZvaWQgcHNyX2RvbWFpbl9mcmVl KHN0cnVjdCBkb21haW4gKmQpCj4gICAgICBwc3JfZnJlZV9jb3MoZCk7Cj4gIH0KPiAgCj4gLXN0 YXRpYyBpbnQgY2F0X2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCj4gK3N0YXRpYyBpbnQg Y3B1X3ByZXBhcmVfd29yayh1bnNpZ25lZCBpbnQgY3B1KQo+ICB7Cj4gLSAgICBpZiAoICFjYXRf c29ja2V0X2luZm8gKQo+ICsgICAgaWYgKCAhc29ja2V0X2luZm8gKQo+ICAgICAgICAgIHJldHVy biAwOwo+ICAKPiAtICAgIGlmICggdGVtcF9jb3NfdG9fY2JtID09IE5VTEwgJiYKPiAtICAgICAg ICAgKHRlbXBfY29zX3RvX2NibSA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9jYXRfY2JtLAo+ ICsgICAgaWYgKCB0ZW1wX2Nvc19yZWYgPT0gTlVMTCAmJgo+ICsgICAgICAgICAodGVtcF9jb3Nf cmVmID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX3JlZiwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Nvc19tYXggKyAxVUwpKSA9PSBOVUxMICkKPiAg ICAgICAgICByZXR1cm4gLUVOT01FTTsKPiAgCj4gKyAgICAvKiBNYWxsb2MgbWVtb3J5IGZvciB0 aGUgZ2xvYmFsIGZlYXR1cmUgaGVhZCBoZXJlLiAqLwo+ICsgICAgaWYgKCBmZWF0X2wzID09IE5V TEwgJiYKPiArICAgICAgICAgKGZlYXRfbDMgPSB4emFsbG9jKHN0cnVjdCBmZWF0X2xpc3QpKSA9 PSBOVUxMICkKPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKCi4uIGFuZCBsZWFrIHRlbXBfY29z X3JlZj8KCj4gKwo+ICAgICAgcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNhdF9j cHVfaW5pdCh2b2lkKQo+ICtzdGF0aWMgdm9pZCBjcHVfaW5pdF93b3JrKHZvaWQpCj4gIHsKPiAg ICAgIHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7Cj4gLSAgICBzdHJ1Y3QgcHNyX2Nh dF9zb2NrZXRfaW5mbyAqaW5mbzsKPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm87 Cj4gICAgICB1bnNpZ25lZCBpbnQgc29ja2V0Owo+ICAgICAgdW5zaWduZWQgaW50IGNwdSA9IHNt cF9wcm9jZXNzb3JfaWQoKTsKPiAtICAgIHVpbnQ2NF90IHZhbDsKPiAgICAgIGNvbnN0IHN0cnVj dCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgY3B1Owo+ICsgICAgc3RydWN0IGZlYXRfbGlz dCAqZmVhdF90bXA7Cj4gIAo+ICAgICAgaWYgKCAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QUUUp IHx8IGMtPmNwdWlkX2xldmVsIDwgUFNSX0NQVUlEX0xFVkVMX0NBVCApCj4gICAgICAgICAgcmV0 dXJuOwo+ICAKPiAgICAgIHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1KTsKPiAtICAgIGlmICgg dGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQo+ICsgICAgaW5mbyA9IHNvY2tl dF9pbmZvICsgc29ja2V0Owo+ICsgICAgaWYgKCBpbmZvLT5mZWF0dXJlcyApCj4gICAgICAgICAg cmV0dXJuOwo+ICAKPiArICAgIGluZm8tPmNvc19yZWYgPSB0ZW1wX2Nvc19yZWY7Cj4gKyAgICB0 ZW1wX2Nvc19yZWYgPSBOVUxMOwo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJmluZm8tPm1hc2tfbG9j ayk7Cj4gKwo+ICAgICAgY3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMCwgJmVheCwg JmVieCwgJmVjeCwgJmVkeCk7Cj4gICAgICBpZiAoIGVieCAmIFBTUl9SRVNPVVJDRV9UWVBFX0wz ICkKPiAgICAgIHsKPiAtICAgICAgICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAx LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKPiAtICAgICAgICBpbmZvID0gY2F0X3NvY2tldF9p bmZvICsgc29ja2V0Owo+IC0gICAgICAgIGluZm8tPmNibV9sZW4gPSAoZWF4ICYgMHgxZikgKyAx Owo+IC0gICAgICAgIGluZm8tPmNvc19tYXggPSBtaW4ob3B0X2Nvc19tYXgsIGVkeCAmIDB4ZmZm Zik7Cj4gLQo+IC0gICAgICAgIGluZm8tPmNvc190b19jYm0gPSB0ZW1wX2Nvc190b19jYm07Cj4g LSAgICAgICAgdGVtcF9jb3NfdG9fY2JtID0gTlVMTDsKPiAtICAgICAgICAvKiBjb3M9MCBpcyBy ZXNlcnZlZCBhcyBkZWZhdWx0IGNibShhbGwgb25lcykuICovCj4gLSAgICAgICAgaW5mby0+Y29z X3RvX2NibVswXS5jYm0gPSAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7Cj4gKyAgICAgICAg ZmVhdF90bXAgPSBmZWF0X2wzOwo+ICsgICAgICAgIGZlYXRfbDMgPSBOVUxMOwo+ICAKPiAtICAg ICAgICBzcGluX2xvY2tfaW5pdCgmaW5mby0+Y2JtX2xvY2spOwo+IC0KPiAtICAgICAgICBzZXRf Yml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpOwo+IC0KPiAtICAgICAgICBpZiAoIChlY3gg JiBQU1JfQ0FUX0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3BzciAmIFBTUl9DRFApICYmCj4gLSAg ICAgICAgICAgICBjZHBfc29ja2V0X2VuYWJsZSAmJiAhdGVzdF9iaXQoc29ja2V0LCBjZHBfc29j a2V0X2VuYWJsZSkgKQo+IC0gICAgICAgIHsKPiAtICAgICAgICAgICAgaW5mby0+Y29zX3RvX2Ni bVswXS5jb2RlID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwo+IC0gICAgICAgICAgICBp bmZvLT5jb3NfdG9fY2JtWzBdLmRhdGEgPSAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7Cj4g LQo+IC0gICAgICAgICAgICAvKiBXZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1hc2swIGlzIGFs d2F5cyBhbGwgb25lcyBieSBkZWZhdWx0LiAqLwo+IC0gICAgICAgICAgICB3cm1zcmwoTVNSX0lB MzJfUFNSX0wzX01BU0soMSksICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMSk7Cj4gLQo+IC0g ICAgICAgICAgICByZG1zcmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCk7Cj4gLSAgICAg ICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfUU9TX0NGRywgdmFsIHwgKDEgPDwgUFNSX0wz X1FPU19DRFBfRU5BQkxFX0JJVCkpOwo+IC0KPiAtICAgICAgICAgICAgLyogQ3V0IGhhbGYgb2Yg Y29zX21heCB3aGVuIENEUCBpcyBlbmFibGVkLiAqLwo+IC0gICAgICAgICAgICBpbmZvLT5jb3Nf bWF4ID4+PSAxOwo+IC0KPiAtICAgICAgICAgICAgc2V0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRf ZW5hYmxlKTsKPiAtICAgICAgICB9Cj4gLSAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6 IGVuYWJsZWQgb24gc29ja2V0ICV1LCBjb3NfbWF4OiV1LCBjYm1fbGVuOiV1LCBDRFA6JXNcbiIs Cj4gLSAgICAgICAgICAgICAgIHNvY2tldCwgaW5mby0+Y29zX21heCwgaW5mby0+Y2JtX2xlbiwK PiAtICAgICAgICAgICAgICAgY2RwX2lzX2VuYWJsZWQoc29ja2V0KSA/ICJvbiIgOiAib2ZmIik7 Cj4gKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGlzIGZlYXR1cmUgYWNjb3JkaW5nIHRvIENQVUlE LiAqLwo+ICsgICAgICAgIGNwdWlkX2NvdW50KFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgs ICZlYngsICZlY3gsICZlZHgpOwo+ICsgICAgICAgIGZlYXRfdG1wLT5vcHMgPSBsM19jYXRfb3Bz Owo+ICsgICAgICAgIGZlYXRfdG1wLT5vcHMuaW5pdF9mZWF0dXJlKGVheCwgZWJ4LCBlY3gsIGVk eCwgZmVhdF90bXAsIGluZm8pOwo+ICAgICAgfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBjYXRf Y3B1X2ZpbmkodW5zaWduZWQgaW50IGNwdSkKPiArc3RhdGljIHZvaWQgY3B1X2Zpbmlfd29yayh1 bnNpZ25lZCBpbnQgY3B1KQo+ICB7Cj4gICAgICB1bnNpZ25lZCBpbnQgc29ja2V0ID0gY3B1X3Rv X3NvY2tldChjcHUpOwo+ICAKPiAgICAgIGlmICggIXNvY2tldF9jcHVtYXNrW3NvY2tldF0gfHwg Y3B1bWFza19lbXB0eShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKSApCj4gICAgICB7Cj4gLSAgICAg ICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBjYXRfc29ja2V0X2luZm8gKyBz b2NrZXQ7Cj4gKyAgICAgICAgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9zb2Nr ZXRfaW5mbyhzb2NrZXQpOwo+ICsKPiArICAgICAgICBmcmVlX2ZlYXR1cmUoaW5mbyk7Cj4gIAo+ IC0gICAgICAgIGlmICggaW5mby0+Y29zX3RvX2NibSApCj4gKyAgICAgICAgaWYgKCBpbmZvLT5j b3NfcmVmICkKClVtLCBqdXN0IGNhbGxlZCAnZnJlZV9mZWF0dXJlJyBzbyB0aGUgJ2luZm8nIGhh cyBnYXJiYWdlLi4KClBlaHJhcHMgeW91IHNob3VsZCBjYWxsIGZyZWVfZmVhdHVyZSBhZnRlciB5 b3UgZG9uZSB3aXRoICdpbmZvJwo+ICAgICAgICAgIHsKPiAtICAgICAgICAgICAgeGZyZWUoaW5m by0+Y29zX3RvX2NibSk7Cj4gLSAgICAgICAgICAgIGluZm8tPmNvc190b19jYm0gPSBOVUxMOwo+ ICsgICAgICAgICAgICB4ZnJlZShpbmZvLT5jb3NfcmVmKTsKPiArICAgICAgICAgICAgaW5mby0+ Y29zX3JlZiA9IE5VTEw7Cj4gICAgICAgICAgfQo+IC0KPiAtICAgICAgICBpZiAoIGNkcF9pc19l bmFibGVkKHNvY2tldCkgKQo+IC0gICAgICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjZHBfc29j a2V0X2VuYWJsZSk7Cj4gLQo+IC0gICAgICAgIGNsZWFyX2JpdChzb2NrZXQsIGNhdF9zb2NrZXRf ZW5hYmxlKTsKPiAgICAgIH0KPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgX19pbml0IHBzcl9jYXRf ZnJlZSh2b2lkKQo+ICtzdGF0aWMgdm9pZCBfX2luaXQgcHNyX2ZyZWUodm9pZCkKPiAgewo+IC0g ICAgeGZyZWUoY2F0X3NvY2tldF9lbmFibGUpOwo+IC0gICAgY2F0X3NvY2tldF9lbmFibGUgPSBO VUxMOwo+IC0gICAgeGZyZWUoY2F0X3NvY2tldF9pbmZvKTsKPiAtICAgIGNhdF9zb2NrZXRfaW5m byA9IE5VTEw7Cj4gKyAgICB1bnNpZ25lZCBpbnQgaTsKPiArCj4gKyAgICBmb3IgKCBpID0gMDsg aSA8IG5yX3NvY2tldHM7IGkrKyApCj4gKyAgICAgICAgZnJlZV9mZWF0dXJlKCZzb2NrZXRfaW5m b1tpXSk7Cj4gKwo+ICsgICAgeGZyZWUoc29ja2V0X2luZm8pOwo+ICsgICAgc29ja2V0X2luZm8g PSBOVUxMOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wc3JfY2F0KHZvaWQp Cj4gK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3Bzcih2b2lkKQo+ICB7Cj4gKyAgICB1bnNpZ25l ZCBpbnQgaTsKPiArCj4gICAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSApCj4gICAgICB7Cj4gICAg ICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6IGRpc2FibGVkLCBjb3NfbWF4IGlzIHRvbyBz bWFsbFxuIik7Cj4gICAgICAgICAgcmV0dXJuOwo+ICAgICAgfQo+ICAKPiAtICAgIGNhdF9zb2Nr ZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5y X3NvY2tldHMpKTsKPiAtICAgIGNhdF9zb2NrZXRfaW5mbyA9IHh6YWxsb2NfYXJyYXkoc3RydWN0 IHBzcl9jYXRfc29ja2V0X2luZm8sIG5yX3NvY2tldHMpOwo+IC0gICAgY2RwX3NvY2tldF9lbmFi bGUgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGxvbmcsIEJJVFNfVE9fTE9OR1MobnJfc29ja2V0 cykpOwo+ICsgICAgc29ja2V0X2luZm8gPSB4emFsbG9jX2FycmF5KHN0cnVjdCBwc3Jfc29ja2V0 X2luZm8sIG5yX3NvY2tldHMpOwo+ICsKPiArICAgIGlmICggIXNvY2tldF9pbmZvICkKPiArICAg IHsKPiArICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIkZhaWwgdG8gYWxsb2Mgc29ja2V0X2lu Zm8hXG4iKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gIAo+IC0gICAgaWYgKCAhY2F0 X3NvY2tldF9lbmFibGUgfHwgIWNhdF9zb2NrZXRfaW5mbyApCj4gLSAgICAgICAgcHNyX2NhdF9m cmVlKCk7Cj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX3NvY2tldHM7IGkrKyApCj4gKyAgICAg ICAgSU5JVF9MSVNUX0hFQUQoJnNvY2tldF9pbmZvW2ldLmZlYXRfbGlzdCk7Cj4gIH0KPiAgCj4g IHN0YXRpYyBpbnQgcHNyX2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCj4gIHsKPiAtICAg IHJldHVybiBjYXRfY3B1X3ByZXBhcmUoY3B1KTsKPiArICAgIHJldHVybiBjcHVfcHJlcGFyZV93 b3JrKGNwdSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHBzcl9jcHVfaW5pdCh2b2lkKQo+ICB7 Cj4gLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCj4gLSAgICAgICAgY2F0X2NwdV9pbml0KCk7 Cj4gKyAgICBpZiAoIHNvY2tldF9pbmZvICkKPiArICAgICAgICBjcHVfaW5pdF93b3JrKCk7Cj4g IAo+ICAgICAgcHNyX2Fzc29jX2luaXQoKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgcHNyX2Nw dV9maW5pKHVuc2lnbmVkIGludCBjcHUpCj4gIHsKPiAtICAgIGlmICggY2F0X3NvY2tldF9pbmZv ICkKPiAtICAgICAgICBjYXRfY3B1X2ZpbmkoY3B1KTsKPiArICAgIGlmICggc29ja2V0X2luZm8g KQo+ICsgICAgICAgIGNwdV9maW5pX3dvcmsoY3B1KTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBj cHVfY2FsbGJhY2soCj4gQEAgLTczOSwxMyArMTM2NiwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBw c3JfcHJlc21wX2luaXQodm9pZCkKPiAgICAgICAgICBpbml0X3Bzcl9jbXQob3B0X3JtaWRfbWF4 KTsKPiAgCj4gICAgICBpZiAoIG9wdF9wc3IgJiBQU1JfQ0FUICkKPiAtICAgICAgICBpbml0X3Bz cl9jYXQoKTsKPiArICAgICAgICBpbml0X3BzcigpOwo+ICAKPiAgICAgIGlmICggcHNyX2NwdV9w cmVwYXJlKDApICkKPiAtICAgICAgICBwc3JfY2F0X2ZyZWUoKTsKPiArICAgICAgICBwc3JfZnJl ZSgpOwo+ICAKPiAgICAgIHBzcl9jcHVfaW5pdCgpOwo+IC0gICAgaWYgKCBwc3JfY210X2VuYWJs ZWQoKSB8fCBjYXRfc29ja2V0X2luZm8gKQo+ICsgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8 fCBzb2NrZXRfaW5mbyApCj4gICAgICAgICAgcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfbmZi KTsKPiAgCj4gICAgICByZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3N5c2N0 bC5jIGIveGVuL2FyY2gveDg2L3N5c2N0bC5jCj4gaW5kZXggMTRlN2RjNy4uOGUxN2E5YSAxMDA2 NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvc3lzY3RsLmMKPiArKysgYi94ZW4vYXJjaC94ODYvc3lz Y3RsLmMKPiBAQCAtMTc2LDE1ICsxNzYsMTkgQEAgbG9uZyBhcmNoX2RvX3N5c2N0bCgKPiAgICAg ICAgICBzd2l0Y2ggKCBzeXNjdGwtPnUucHNyX2NhdF9vcC5jbWQgKQo+ICAgICAgICAgIHsKPiAg ICAgICAgICBjYXNlIFhFTl9TWVNDVExfUFNSX0NBVF9nZXRfbDNfaW5mbzoKPiAtICAgICAgICAg ICAgcmV0ID0gcHNyX2dldF9jYXRfbDNfaW5mbyhzeXNjdGwtPnUucHNyX2NhdF9vcC50YXJnZXQs Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5c2N0bC0+dS5wc3Jf Y2F0X29wLnUubDNfaW5mby5jYm1fbGVuLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uY29zX21heCwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3lzY3RsLT51LnBzcl9jYXRfb3Au dS5sM19pbmZvLmZsYWdzKTsKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHVpbnQzMl90IGRh dFszXTsKClBlcmhhcHMgYSAjZGVmaW5lIGZvciBpdD8KPiArICAgICAgICAgICAgcmV0ID0gcHNy X2dldF9pbmZvKHN5c2N0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0LCAzKTsKClRoYXQgd2F5IHlvdSBjYW4gdXNlIHRoYXQgdGhlcmUu Cj4gKyAgICAgICAgICAgIHN5c2N0bC0+dS5wc3JfY2F0X29wLnUubDNfaW5mby5jYm1fbGVuID0g ZGF0WzBdOwo+ICsgICAgICAgICAgICBzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uY29z X21heCA9IGRhdFsxXTsKPiArICAgICAgICAgICAgc3lzY3RsLT51LnBzcl9jYXRfb3AudS5sM19p bmZvLmZsYWdzICAgPSBkYXRbMl07Cj4gIAo+ICAgICAgICAgICAgICBpZiAoICFyZXQgJiYgX19j b3B5X2ZpZWxkX3RvX2d1ZXN0KHVfc3lzY3RsLCBzeXNjdGwsIHUucHNyX2NhdF9vcCkgKQo+ICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPiAgICAgICAgICAgICAgYnJlYWs7Cj4gLQo+ ICsgICAgICAgIH0KPiAgICAgICAgICBkZWZhdWx0Ogo+ICAgICAgICAgICAgICByZXQgPSAtRU9Q Tk9UU1VQUDsKPiAgICAgICAgICAgICAgYnJlYWs7Cj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L2FzbS14ODYvcHNyLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3Bzci5oCj4gaW5kZXggNTdmNDdl OS4uZWY0NmQxMiAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3Bzci5oCj4gKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wc3IuaAo+IEBAIC00NiwxMCArNDYsMTAgQEAgc3RydWN0 IHBzcl9jbXQgewo+ICAgICAgc3RydWN0IHBzcl9jbXRfbDMgbDM7Cj4gIH07Cj4gIAo+IC1lbnVt IGNibV90eXBlIHsKPiAtICAgIFBTUl9DQk1fVFlQRV9MMywKPiAtICAgIFBTUl9DQk1fVFlQRV9M M19DT0RFLAo+IC0gICAgUFNSX0NCTV9UWVBFX0wzX0RBVEEsCj4gK2VudW0gcHNyX3ZhbF90eXBl IHsKPiArICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNLAo+ICsgICAgUFNSX01BU0tfVFlQRV9MM19D T0RFLAo+ICsgICAgUFNSX01BU0tfVFlQRV9MM19EQVRBLAo+ICB9Owo+ICAKPiAgZXh0ZXJuIHN0 cnVjdCBwc3JfY210ICpwc3JfY210Owo+IEBAIC02MywxMiArNjMsMTIgQEAgaW50IHBzcl9hbGxv Y19ybWlkKHN0cnVjdCBkb21haW4gKmQpOwo+ICB2b2lkIHBzcl9mcmVlX3JtaWQoc3RydWN0IGRv bWFpbiAqZCk7Cj4gIHZvaWQgcHNyX2N0eHRfc3dpdGNoX3RvKHN0cnVjdCBkb21haW4gKmQpOwo+ ICAKPiAtaW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQgaW50IHNvY2tldCwgdWludDMy X3QgKmNibV9sZW4sCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb3NfbWF4 LCB1aW50MzJfdCAqZmxhZ3MpOwo+IC1pbnQgcHNyX2dldF9sM19jYm0oc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgaW50IHNvY2tldCwKPiAtICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpj Ym0sIGVudW0gY2JtX3R5cGUgdHlwZSk7Cj4gLWludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAo+IC0gICAgICAgICAgICAgICAgICAgdWludDY0 X3QgY2JtLCBlbnVtIGNibV90eXBlIHR5cGUpOwo+ICtpbnQgcHNyX2dldF9pbmZvKHVuc2lnbmVk IGludCBzb2NrZXQsIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUsCj4gKyAgICAgICAgICAgICAgICAg dWludDMyX3QgZGF0W10sIHVpbnQzMl90IGFycmF5X2xlbik7Cj4gK2ludCBwc3JfZ2V0X3ZhbChz dHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAo+ICsgICAgICAgICAgICAgICAg dWludDY0X3QgKnZhbCwgZW51bSBwc3JfdmFsX3R5cGUgdHlwZSk7Cj4gK2ludCBwc3Jfc2V0X3Zh bChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAo+ICsgICAgICAgICAgICAg ICAgdWludDY0X3QgdmFsLCBlbnVtIHBzcl92YWxfdHlwZSB0eXBlKTsKPiAgCj4gIGludCBwc3Jf ZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCk7Cj4gIHZvaWQgcHNyX2RvbWFpbl9mcmVlKHN0 cnVjdCBkb21haW4gKmQpOwo+IC0tIAo+IDIuNy40Cj4gCj4gCj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4g WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKPiBodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwK