From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: Re: [v2 1/3] x86: refactor psr implementation in hypervisor. Date: Sun, 9 Oct 2016 14:43:47 +0800 Message-ID: <20161009064347.GZ30513@yi.y.sun> References: <1474510520-29525-1-git-send-email-yi.y.sun@linux.intel.com> <20160930211833.GC5382@char.us.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bt7vf-00034U-Gt for xen-devel@lists.xenproject.org; Sun, 09 Oct 2016 06:49:47 +0000 Content-Disposition: inline In-Reply-To: <20160930211833.GC5382@char.us.oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk 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 VGhhbmtzIGZvciByZXZpZXdpbmcgdGhlIHBhdGNoZXMhIFNvcnJ5IGZvciBsYXRlIHRvIHJlcGx5 IGJlY2F1c2UgT2N0IDEgdG8gNwppcyBDaGluYSBOYXRpb25hbCBIb2xpZGF5LgoKT24gMTYtMDkt MzAgMTc6MTg6MzMsIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBPbiBUaHUsIFNlcCAy MiwgMjAxNiBhdCAxMDoxNToyMEFNICswODAwLCBZaSBTdW4gd3JvdGU6Cj4gPiBDdXJyZW50IHBz ci5jIGlzIGRlc2lnbmVkIGZvciBzdXBwb3J0aW5nIEwzIENBVC9DRFAuIEl0IGhhcyBtYW55Cj4g PiBsaW1pdGF0aW9ucyB0byBhZGQgbmV3IGZlYXR1cmUuIENvbnNpZGVyaW5nIHRvIHN1cHBvcnQg bW9yZSBQU1IKPiA+IGZlYXR1cmVzLCB3ZSBuZWVkIHJlZmFjdG9yIFBTUiBpbXBsZW1lbnRhdGlv biB0byBtYWtlIGl0IG1vcmUKPiA+IGZsZXhpYmxlIGFuZCBmdWxmaWxsIHRoZSBwcmluY2lwbGUs IG9wZW4gZm9yIGV4dGVuc2lvbiBidXQgY2xvc2VkCj4gPiBmb3IgbW9kaWZpY2F0aW9uLgo+ID4g Cj4gPiBUaGUgY29yZSBvZiB0aGUgcmVmYWN0b3JpbmcgaXMgdG8gYWJzdHJhY3QgdGhlIGNvbW1v biBhY3Rpb25zIGFuZAo+ID4gZW5jYXBzdWxhdGUgdGhlbSBpbnRvICJzdHJ1Y3QgZmVhdF9vcHMi LiBUaGUgZGV0YWlsZWQgc3RlcHMgdG8gYWRkCj4gPiBhIG5ldyBmZWF0dXJlIGFyZSBkZXNjcmli ZWQgYXQgdGhlIGhlYWQgb2YgcHNyLmMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFlpIFN1biA8 eWkueS5zdW5AbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiAtLS0KPiA+IENoYW5nZWQgc2luY2Ug djE6Cj4gPiAgKiBzeXNjdGwuYwo+ID4gICAgIC0gSW50ZXJmYWNlIGNoYW5nZSBmb3IgYWJzdHJh Y3Rpb24gcmVxdWlyZW1lbnQuCj4gPiAgKiBwc3IuYwo+ID4gICAgIC0gRnVuY3Rpb24gYW5kIHZh cmlhYmxlcyBuYW1lcyBhcmUgY2hhbmdlZCB0byBleHByZXNzIGFjY3VyYXRlbHkuCj4gPiAgICAg LSBGaXggY29kZSBzdHlsZSBpc3N1ZXMuCj4gPiAgICAgLSBGaXggaW1wcmVjaXNlIGNvbW1lbnRz Lgo+ID4gICAgIC0gQWRkIG9uZSBjYWxsYmFjayBmdW5jdGlvbiwgZ2V0X2Nvc19udW0oKSwgdG8g ZnVsZmlsbCB0aGUKPiA+ICAgICAgIGFic3RyYWN0aW9uIHJlcXVpcmVtZW50Lgo+ID4gICAgIC0g RGl2aWRlIGdldF9vbGRfc2V0X25ldygpIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbnRvIHR3byBmdW5j dGlvbnM6Cj4gPiAgICAgICBnZXRfb2xkX3ZhbCgpIGFuZCBzZXRfbmV3X3ZhbCgpIG1ha2UgaXQg bW9yZSBwcmltaXRpdmUuCj4gPiAgICAgLSBDaGFuZ2UgZmVhdF9pbmZvIHR5cGUgZnJvbSBhbiBh cnJheSB0byB1bmlvbi4KPiA+ICAgICAtIEFkanVzdCBzb21lIGZ1bmN0aW9ucyB0byByZXBsYWNl IGlmIHRvIHN3aXRjaCB0byBtYWtlIHRoZW0KPiA+ICAgICAgIGNsZWFyZXIuCj4gPiAgICAgLSBS ZXBsYWNlIGN1c3RvbSBsaXN0IG1hbmFnZW1lbnQgdG8gc3lzdGVtLgo+ID4gICAgIC0gVXNlICdj b25zdCcgdG8gbWFrZSBjb2RlcyBtb3JlIHNhZmUuCj4gPiAgKiBwc3IuaAo+ID4gICAgIC0gQ2hh bmdlICdlbnVtIG1hc2tfdHlwZScgdG8gJ2VudW0gcHNyX3ZhbF90eXBlJyB0byBleHByZXNzCj4g PiAgICAgICBtb3JlIGFjY3VyYXRlLgo+ID4gICAgIC0gQ2hhbmdlIHBhcmFtZXRlcnMgb2YgcHNy X2dldF9pbmZvKCkgdG8gZnVsZmlsbCBhYnN0cmFjdGlvbgo+ID4gICAgICAgcmVxdWlyZW1lbnQu Cj4gPiAtLS0KPiA+ICB4ZW4vYXJjaC94ODYvZG9tY3RsLmMgICAgIHwgICAzNiArLQo+ID4gIHhl bi9hcmNoL3g4Ni9wc3IuYyAgICAgICAgfCAxMTA1ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLQo+IAo+IFdob2EuIDFLIGNoYW5nZXMuIFRoaXMgaXMgYSBkZW5z ZSBwYXRjaC4KPiAKWWVzLCBhIGxpdHRsZSBiaWcgYmVjYXVzZSBpdCByZWZhY3RvcnMgcHNyLmMu IDotKQoKPiA+ICB4ZW4vYXJjaC94ODYvc3lzY3RsLmMgICAgIHwgICAxNCArLQo+ID4gIHhlbi9p bmNsdWRlL2FzbS14ODYvcHNyLmggfCAgIDIwICstCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA5MDMg aW5zZXJ0aW9ucygrKSwgMjcyIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L2RvbWN0bC5jIGIveGVuL2FyY2gveDg2L2RvbWN0bC5jCj4gPiBpbmRleCAyYTJm ZTA0Li5jNTNkODE5IDEwMDY0NAo+ID4gLS0tIGEveGVuL2FyY2gveDg2L2RvbWN0bC5jCj4gPiAr KysgYi94ZW4vYXJjaC94ODYvZG9tY3RsLmMKPiA+IEBAIC0xMzg2LDQxICsxMzg2LDQxIEBAIGxv bmcgYXJjaF9kb19kb21jdGwoCj4gPiAgICAgICAgICBzd2l0Y2ggKCBkb21jdGwtPnUucHNyX2Nh dF9vcC5jbWQgKQo+ID4gICAgICAgICAgewo+ID4gICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX1BT Ul9DQVRfT1BfU0VUX0wzX0NCTToKPiA+IC0gICAgICAgICAgICByZXQgPSBwc3Jfc2V0X2wzX2Ni bShkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJnZXQsCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQU1JfQ0JNX1RZUEVfTDMpOwo+ID4gKyAgICAgICAgICAg IHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNKTsK PiA+ICAgICAgICAgICAgICBicmVhazsKPiA+ICAKPiA+ICAgICAgICAgIGNhc2UgWEVOX0RPTUNU TF9QU1JfQ0FUX09QX1NFVF9MM19DT0RFOgo+ID4gLSAgICAgICAgICAgIHJldCA9IHBzcl9zZXRf bDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9MM19DT0RFKTsKPiA+ICsg ICAgICAgICAgICByZXQgPSBwc3Jfc2V0X3ZhbChkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50YXJn ZXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tY3RsLT51LnBzcl9jYXRf b3AuZGF0YSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfTUFTS19UWVBF X0wzX0NPREUpOwo+ID4gICAgICAgICAgICAgIGJyZWFrOwo+ID4gIAo+ID4gICAgICAgICAgY2Fz ZSBYRU5fRE9NQ1RMX1BTUl9DQVRfT1BfU0VUX0wzX0RBVEE6Cj4gPiAtICAgICAgICAgICAgcmV0 ID0gcHNyX3NldF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEs Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzX0RB VEEpOwo+ID4gKyAgICAgICAgICAgIHJldCA9IHBzcl9zZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3Jf Y2F0X29wLnRhcmdldCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21jdGwt PnUucHNyX2NhdF9vcC5kYXRhLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBT Ul9NQVNLX1RZUEVfTDNfREFUQSk7Cj4gPiAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAgCj4gPiAg ICAgICAgICBjYXNlIFhFTl9ET01DVExfUFNSX0NBVF9PUF9HRVRfTDNfQ0JNOgo+ID4gLSAgICAg ICAgICAgIHJldCA9IHBzcl9nZXRfbDNfY2JtKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdl dCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9tY3RsLT51LnBzcl9j YXRfb3AuZGF0YSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfQ0JN X1RZUEVfTDMpOwo+ID4gKyAgICAgICAgICAgIHJldCA9IHBzcl9nZXRfdmFsKGQsIGRvbWN0bC0+ dS5wc3JfY2F0X29wLnRhcmdldCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQU1JfTUFTS19UWVBFX0wzX0NCTSk7Cj4gPiAgICAgICAgICAgICAgY29weWJhY2sgPSAx Owo+ID4gICAgICAgICAgICAgIGJyZWFrOwo+ID4gIAo+ID4gICAgICAgICAgY2FzZSBYRU5fRE9N Q1RMX1BTUl9DQVRfT1BfR0VUX0wzX0NPREU6Cj4gPiAtICAgICAgICAgICAgcmV0ID0gcHNyX2dl dF9sM19jYm0oZCwgZG9tY3RsLT51LnBzcl9jYXRfb3AudGFyZ2V0LAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZkb21jdGwtPnUucHNyX2NhdF9vcC5kYXRhLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTUl9DQk1fVFlQRV9MM19DT0RFKTsKPiA+ ICsgICAgICAgICAgICByZXQgPSBwc3JfZ2V0X3ZhbChkLCBkb21jdGwtPnUucHNyX2NhdF9vcC50 YXJnZXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbWN0bC0+dS5wc3Jf Y2F0X29wLmRhdGEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNSX01BU0tf VFlQRV9MM19DT0RFKTsKPiA+ICAgICAgICAgICAgICBjb3B5YmFjayA9IDE7Cj4gPiAgICAgICAg ICAgICAgYnJlYWs7Cj4gPiAgCj4gPiAgICAgICAgICBjYXNlIFhFTl9ET01DVExfUFNSX0NBVF9P UF9HRVRfTDNfREFUQToKPiA+IC0gICAgICAgICAgICByZXQgPSBwc3JfZ2V0X2wzX2NibShkLCBk b21jdGwtPnUucHNyX2NhdF9vcC50YXJnZXQsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmRvbWN0bC0+dS5wc3JfY2F0X29wLmRhdGEsCj4gPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFNSX0NCTV9UWVBFX0wzX0RBVEEpOwo+ID4gKyAgICAgICAgICAg IHJldCA9IHBzcl9nZXRfdmFsKGQsIGRvbWN0bC0+dS5wc3JfY2F0X29wLnRhcmdldCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9tY3RsLT51LnBzcl9jYXRfb3AuZGF0YSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfTUFTS19UWVBFX0wzX0RBVEEp Owo+ID4gICAgICAgICAgICAgIGNvcHliYWNrID0gMTsKPiA+ICAgICAgICAgICAgICBicmVhazsK PiA+ICAKPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHNyLmMgYi94ZW4vYXJjaC94ODYv cHNyLmMKPiA+IGluZGV4IDBiNTA3M2MuLjk5ZTRjNzggMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vYXJj aC94ODYvcHNyLmMKPiA+ICsrKyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwo+ID4gQEAgLTE3LDI4ICsx NywxNTkgQEAKPiA+ICAjaW5jbHVkZSA8eGVuL2NwdS5oPgo+ID4gICNpbmNsdWRlIDx4ZW4vZXJy Lmg+Cj4gPiAgI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgo+ID4gKyNpbmNsdWRlIDx4ZW4vbGlzdC5o Pgo+ID4gICNpbmNsdWRlIDxhc20vcHNyLmg+Cj4gPiAgCj4gPiAgI2RlZmluZSBQU1JfQ01UICAg ICAgICAoMTw8MCkKPiA+ICAjZGVmaW5lIFBTUl9DQVQgICAgICAgICgxPDwxKQo+ID4gICNkZWZp bmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCj4gPiAgCj4gPiAtc3RydWN0IHBzcl9jYXRfY2JtIHsK PiA+ICsvKgo+ID4gKyAqIFRvIGFkZCBhIG5ldyBQU1IgZmVhdHVyZSwgcGxlYXNlIGZvbGxvdyBi ZWxvdyBzdGVwczoKPiA+ICsgKiAxLiBJbXBsZW1lbnQgZmVhdHVyZSBzcGVjaWZpYyBjYWxsYmFj ayBmdW5jdGlvbnMgbGlzdGVkIGluCj4gPiArICogICAgInN0cnVjdCBmZWF0X29wcyI7Cj4gPiAr ICogMi4gSW1wbGVtZW50IGEgZmVhdHVyZSBzcGVjaWZpYyAic3RydWN0IGZlYXRfb3BzIiBvYmpl Y3QgYW5kIHJlZ2lzdGVyCj4gPiArICogICAgZmVhdHVyZSBzcGVjaWZpYyBjYWxsYmFjayBmdW5j dGlvbnMgaW50byBpdDsKPiA+ICsgKiAzLiBEZWxjYXJlIGZlYXRfbGlzdCBvYmplY3QgZm9yIHRo ZSBmZWF0dXJlIGFuZCBtYWxsb2MgbWVtb3J5IGZvciBpdAo+ID4gKyAqICAgIGluIGNwdV9wcmVw YXJlX3dvcmsoKS4gQ29ycmVzcG9uZGluZ2x5LCBmcmVlIHRoZW0gaW4KPiA+ICsgKiAgICBmcmVl X2ZlYXR1cmUoKTsKPiA+ICsgKiA0LiBBZGQgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBjb2RlcyBp biBjcHVfaW5pdF93b3JrKCkuCj4gPiArICovCj4gPiArCj4gPiArc3RydWN0IGZlYXRfbGlzdDsK PiA+ICtzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvOwo+ID4gKwo+ID4gKy8qIEV2ZXJ5IGZlYXR1cmUg ZW5hYmxlZCBzaG91bGQgaW1wbGVtZW50IHN1Y2ggb3BzIGFuZCBjYWxsYmFjayBmdW5jdGlvbnMu ICovCj4gCj4gc2hvdWxkIG1lYW5zIGl0IGNhbiBjaG9vc2UgdG8gaW1wbGVtZW50IDAgb2YgdGhl bS4gUGVyaGFwcyBNVVNUID8gT3IKPiBhdCBsZWFzdCBtZW50aW9uIHdoaWNoIG9uZXMgTVVTVCBi ZSBpbXBsZW1lbnRlZD8KPiAKVGhhbmtzISBJIHdpbGwgY2hhbmdlICJzaG91bGQiIHRvICJNVVNU Ii4KCj4gPiArc3RydWN0IGZlYXRfb3BzIHsKPiA+ICsgICAgLyoKPiA+ICsgICAgICogaW5pdF9m ZWF0dXJlIGlzIHVzZWQgaW4gY3B1IGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG8gZG8gZmVhdHVy ZQo+ID4gKyAgICAgKiBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB3b3Jrcy4KPiA+ICsgICAgICov Cj4gPiArICAgIHZvaWQgKCppbml0X2ZlYXR1cmUpKHVuc2lnbmVkIGludCBlYXgsIHVuc2lnbmVk IGludCBlYngsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlY3gs IHVuc2lnbmVkIGludCBlZHgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBm ZWF0X2xpc3QgKmZlYXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwc3Jf c29ja2V0X2luZm8gKmluZm8pOwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBnZXRfY29zX251bSBp cyB1c2VkIHRvIGdldCB0aGUgQ09TIHJlZ2lzdGVycyBudW1iZXIgb2NjdXBpZWQgYnkgdGhlCj4g Cj4gUGVyaGFwcyBpbnN0ZWFkIG9mICdudW1iZXInIHVzZSAnYW1vdW50JwoKT2ssIHRoYW5rcyEK Cj4gPiArICAgICAqIGZlYXR1cmUgZm9yIG9uZSBzZXR0aW5nLCBsaWtlIENEUCBvY2N1cGllcyAy IENPU3MgYnV0IENBVCBvY2N1cGllcyAxLgo+IAo+IG9jY3VwaWVzPyBQZXJoYXBzIHVzZXM/Cj4g Ck9rLCB0aGFua3MhCgo+IAo+ID4gKyAgICAgKi8KPiA+ICsgICAgdW5zaWduZWQgaW50ICgqZ2V0 X2Nvc19udW0pKGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQpOwo+ID4gKyAgICAvKgo+ID4g KyAgICAgKiBnZXRfb2xkX3ZhbCBhbmQgc2V0X25ld192YWwgYXJlIGEgcGFpciBvZiBmdW5jdGlv bnMgY2FsbGVkIHRvZ2V0aGVyLgo+ID4gKyAgICAgKiBUaGUgY2FsbGVyIHdpbGwgdHJhdmVyc2Ug YWxsIGZlYXR1cmVzIGluIGxpc3QgdG8gYW5kIGNhbGwgYm90aCBmdW5jdGlvbnMKPiAKPiBzL2lu IGxpc3QvaW4gdGhlIGxpc3QvCgpUaGFua3MhCgo+ID4gKyAgICAgKiBmb3IgZXZlcnkgZmVhdHVy ZSBkbyBiZWxvdyB0d28gdGhpbmdzOgo+IHMvZG8vdG8gZG8vCgpUaGFua3MhCgo+ID4gKyAgICAg KiAxLiBnZXQgb2xkX2NvcyByZWdpc3RlciB2YWx1ZSBvZiBhbGwgc3VwcG9ydGVkIGZlYXR1cmVz IGFuZAo+ID4gKyAgICAgKiAyLiBzZXQgdGhlIG5ldyB2YWx1ZSBmb3IgYXBwb2ludGVkIGZlYXR1 cmUuCj4gCj4gQXBwb2ludGVkPyBJIGFtIG5vdCBzdXJlIHdoYXQgeW91IG1lYW4gYnkgdGhhdD8K PiAKSXQgbWVhbnMgdGhlIGZlYXR1cmUgdGhhdCB1c2VyIHdhbnRzIHRvIHNldCB2YWx1ZS4gRm9y IGV4YW1wbGUsIHdoZW4gdXNlcgpleGVjdXRlcyAieGwgcHNyLWNhdC1jYm0tc2V0IC1sMiAwIDB4 ZiIsIHRoZSBMMiBDQVQgdmFsaWQgdmFsdWUgb2YgRG9tMCB3aWxsCmJlIHVwZGF0ZWQgdG8gMHhm LiBQU1JfTUFTS19UWVBFX0wyX0NCTSB3aWxsIGJlIHNlbnQgaW50byBwc3IgaW50ZXJmYWNlIGFz CmEgcGFyYW1ldGVyIHRvIGluZGljYXRlIHRoZSAiYXBwb2ludGVkIGZlYXR1cmUiIGlzIEwyIENB VC4KCj4gQW5kIHdoYXQgZG8geW91IG1lYW4gYnkgJ3NldF9uZXdfdmFsdWUnIEFzIGluIHdoYXQg dGhlIENPUyAKPiB2YWx1ZSBzaG91bGQgYmU/Cj4gCmdldF9vbGRfdmFsIGFuZCBzZXRfbmV3X3Zh bCBhcmUgYSBwYWlyIG9mIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgdG9nZXRoZXIuCkZpcnN0LCB3 ZSBleGVjdXRlIGdldF9vbGRfdmFsIHRvIGdldCBhbGwgZmVhdHVyZXMgb2xkIHZhbHVlcyBhbmQg YXNzZW1ibGUgdGhlbQppbnRvIGFuIGFycmF5LiBUaGVuLCB3ZSBjYWxsIHNldF9uZXdfdmFsIHRv IHNldCBuZXcgdmFsdWUgb2YgdGhlCiJhcHBvaW50ZWQgZmVhdHVyZSIgaW50byB0aGUgYXJyYXku IEFmdGVyIHRoYXQsIHdlIGNhbGwgZmluZF9jb3MoKSB0byBmaW5kIGlmCnRoZSB2YWx1ZSBhcnJh eSBjYW4gYmUgZm91bmQgaW4gZXhpc3RlZCBDT1MgdmFsdWVzLiBJZiBub3QsIHdlIGNhbGwKYWxs b2NfbmV3X2NvcyB0byBhbGxvY2F0ZSBhIG5ldyBDT1MgSUQgdG8gc2F2ZSB0aGlzIHZhbHVlIGFy cmF5LgoKWW91IGNhbiByZWZlciBiZWxvdyBleGFtcGxlLgoKPiA+ICsgICAgICoKPiA+ICsgICAg ICogQWxsIHRoZSB2YWx1ZXMgYXJlIHNldCBpbnRvIHZhbHVlIGFycmF5IGFjY29yZGluZyB0aGUg dHJhdmVyc2FsIG9yZGVyLAo+IAo+IFdoYXQgdmFsdWUgYXJyYXk/IFRoZSBDT1MgYXJyYXk/Cj4g ClRoZSBhcnJheSBpcyBjcmVhdGVkIGluIHBzcl9zZXRfdmFsKCkuIEl0IG1haW50YWlucyBhbGwg ZmVhdHVyZXMnIHZhbGlkIHZhbHVlcwpvbiBjdXJyZW50IGRvbWFpbi4gV2UgdXNlIGl0IHRvIGZp bmQgaWYgdGhlcmUgaXMgYSBtYXRjaCBvbmUuCgpGb3IgZXhhbXBsZSwgb2xkX2NvcyBvZiB0aGUg ZG9tYWluIGlzIDEuIFRoZW4sIFVzZXIgd2FudHMgdG8gc2V0IEwzIENBVCBDQk0gdG8KMHgxZmYg YW5kIEwyIENBVCAweDNmLiBUaGUgb3JpZ2luYWwgQ09TIHJlZ2lzdGVycyBsaWtlIGJlbG93LgoK ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgfCBDT1MgMCB8 IENPUyAxIHwgQ09TIDIgfCAuLi4gfAogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KTDMgQ0FUICB8IDB4N2ZmIHwgMHgzZmYgfCAweDFmZiB8IC4uLiB8CiAgICAgICAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpMMiBDQVQgIHwgMHhmZiAgfCAweDNmICB8IDB4 M2YgIHwgLi4uIHwKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGVu LCB0aGUgYXJyYXkgc2hvdWxkIGJlIGFzc2VtYmxlZCBpbiBnZXRfb2xkX3NldF9uZXcoKSBsaWtl IGJlbG93Ogp2YWxfYXJyYXlbMF06IDB4MWZmCnZhbF9hcnJheVsxXTogMHgzZgoKVGhlbiwgd2Ug Y2FuIHVzZSB0aGlzIHZhbHVlIGFycmF5IHRvIGZpbmQgaWYgdGhlcmUgaXMgbWF0Y2hpbmcgQ09T IHRocm91Z2gKY29tcGFyZV92YWwoKS4gV2UgY2FuIGZpbmQgQ09TIDIgaXMgdGhlIG1hdGNoaW5n IG9uZS4gCgpJZiB0aGVyZSBpcyBhbHJlYWR5IGEgQ09TIHJlZ2lzdGVycyBjb21iaW5hdGlvbiAo ZS5nLiBMMyBDT1MgMiBhbmQgTDIgQ09TIDIpCnNhbWUgYXMgdGhlIHZhbHVlIGFycmF5LCB3ZSBj YW4gcmV1c2UgdGhpcyBjb21iaW5hdGlvbiBkaXJlY3RseSBidXQgbm90IHRvCmFsbG9jYXRlIGEg bmV3IENPUyBJRC4gQnkgdGhpcyB3YXksIHdlIGNhbiBzYXZlIHRoZSBDT1MgcmVnaXN0ZXJzLiBZ b3Uga25vdywKdGhlcmUgaXMgbGltaXRhdGlvbiBvbiBDT1MgcmVnaXN0ZXJzIG51bWJlci4KCk9m IGNvdXJzZSwgaWYgd2UgY2Fubm90IGZpbmQgaXQgaW4gZXhpc3RpbmcgY29tYmluYXRpb25zLCB3 ZSB3aWxsIGNhbGwKYWxsb2NfbmV3X2NvcygpIHRvIGFsbG9jYXRlIGEgbmV3IENPUyB0byB1c2Uu Cgo+ID4gKyAgICAgKiBtZWFuaW5nIHRoZSBzYW1lIG9yZGVyIG9mIGZlYXR1cmUgbGlzdCBtZW1i ZXJzLgo+ID4gKyAgICAgKgo+ID4gKyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5j dGlvbiBtZWFucyB0aGUgbnVtYmVyIG9mIHRoZSB2YWx1ZSBhcnJheQo+IAo+IHMvbnVtYmVyL2Ft b3VudC8gcGVyaGFwcz8KPiAKPiA+ICsgICAgICogbWVtYmVyIHRvIHNraXAgb3IgZXJyb3IuCj4g Cj4gUGVyaGFwczoKPiAKPiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhbW91bnQgb2YgZW50cmll cyB0byBza2lwIGluIHRoZSB2YWx1ZSBhcnJheT8KPiAKT2ssIHRoYW5rcyEKCj4gPiArICAgICAq IDEgLSBvbmUgaXRlbSBpbiB2YWx1ZSBhcnJheS4KPiA+ICsgICAgICogMiAtIHR3byBpdGVtcyBp biB2YWx1ZSBhcnJheSwgbGlrZSBDRFAgb2NjdXBpZXMgdHdvIGl0ZW1zLgo+IAo+IHMvbGlrZS9l LmcuLwoKVGhhbmtzIQoKPiA+ICsgICAgICogbmVnYXRpdmUgLSBlcnJvci4KPiA+ICsgICAgICov Cj4gPiArICAgIGludCAoKmdldF9vbGRfdmFsKSh1aW50NjRfdCB2YWxbXSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpOwo+ID4gKyAgICBpbnQgKCpzZXRfbmV3 X3ZhbCkodWludDY0X3QgdmFsW10sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgZmVhdF9saXN0ICpmZWF0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IG9sZF9jb3MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxf dHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbSk7Cj4gPiAr ICAgIC8qCj4gPiArICAgICAqIGNvbXBhcmVfdmFsIGlzIHVzZWQgdG8gaW4gc2V0IHZhbHVlIHBy b2Nlc3MgdG8gY29tcGFyZSBpZiB0aGUKPiAKPiAndG8gaW4gc2V0IHZhbHVlIHByb2Nlc3MgdG8n ID8gSSBhbSBub3Qgc3VyZSB3aGF0IHlvdSBtZWFuPwo+IApTb3JyeSwgc2hvdWxkIGJlICdjb21w YXJlX3ZhbCBpcyB1c2VkIGluIHZhbHVlIHNldHRpbmcgcHJvY2VzcycuCgo+ID4gKyAgICAgKiBp bnB1dCB2YWx1ZSBhcnJheSBjYW4gbWF0Y2ggYWxsIHRoZSBmZWF0dXJlcycgQ09TIHJlZ2lzdGVy cyB2YWx1ZXMKPiA+ICsgICAgICogYWNjb3JkaW5nIHRvIGlucHV0IGNvcyBpZC4KPiAKPiA+ICsg ICAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gbWVhbnMgdGhlIG51bWJlciBv ZiB0aGUgdmFsdWUgYXJyYXkKPiA+ICsgICAgICogbWVtYmVyIHRvIHNraXAgb3IgZXJyb3IuCj4g Cj4gUGVyaGFwczoKPiAKPiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhbW91bnQgb2YgZW50cmll cyB0byBza2lwIGluIHRoZSBDb1MgYXJyYXk/Cj4gCk9rLCB0aGFua3MhCgo+ID4gKyAgICAgKiAx IC0gb25lIGl0ZW0gaW4gdmFsdWUgYXJyYXkuCj4gPiArICAgICAqIDIgLSB0d28gaXRlbXMgaW4g dmFsdWUgYXJyYXksIGxpa2UgQ0RQIG9jY3VwaWVzIHR3byBpdGVtcy4KPiAKPiBEaXR0bwoKVGhh bmtzIQoKPiA+ICsgICAgICogbmVnYXRpdmUgLSBlcnJvci4KPiA+ICsgICAgICovCj4gPiArICAg IGludCAoKmNvbXBhcmVfdmFsKShjb25zdCB1aW50NjRfdCB2YWxbXSwgY29uc3Qgc3RydWN0IGZl YXRfbGlzdCAqZmVhdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg Y29zLCBib29sICpmb3VuZCk7Cj4gPiArICAgIC8qCj4gPiArICAgICAqIGdldF9jb3NfbWF4X2Zy b21fdHlwZSBpcyB1c2VkIHRvIGdldCB0aGUgY29zX21heCB2YWx1ZSBvZiB0aGUgZmVhdHVyZQo+ ID4gKyAgICAgKiBhY2NvcmRpbmcgdG8gaW5wdXQgcHNyX3ZhbF90eXBlLgo+ID4gKyAgICAgKi8K PiA+ICsgICAgdW5zaWduZWQgaW50ICgqZ2V0X2Nvc19tYXhfZnJvbV90eXBlKShjb25zdCBzdHJ1 Y3QgZmVhdF9saXN0ICpmZWF0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpOwo+ID4gKyAgICAvKgo+ID4gKyAgICAg KiBleGNlZWRzX2Nvc19tYXggaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgaW5wdXQgY29zIGlkIGV4 Y2VlZHMgdGhlCj4gPiArICAgICAqIGZlYXR1cmUncyBjb3NfbWF4IGFuZCBpZiB0aGUgaW5wdXQg dmFsdWUgaXMgbm90IHRoZSBkZWZhdWx0IG9uZS4KPiA+ICsgICAgICogRXZlbiBpZiB0aGUgYXNz b2NpYXRlZCBjb3MgZXhjZWVkcyB0aGUgY29zX21heCwgSFcgY2FuIHdvcmsgYXMgZGVmYXVsdAo+ IAo+IHMvYXMgZGVmYXVsdCB2YWx1ZS93aXRoIGRlZmF1bHQgdmFsdWVzLwoKVGhhbmtzIQoKPiA+ ICsgICAgICogdmFsdWUuIFRoYXQgaXMgdGhlIHJlYXNvbiB3ZSBuZWVkIGNoZWNrIGlmIGlucHV0 IHZhbHVlIGlzIGRlZmF1bHQgb25lLgo+IAo+IEFuZCB3aGF0IGlzIHRoZSByZWFzb24/IEJhc2Vk IG9uIHRoZSBkZXNpZ24gZG9jdW1lbnQgSSB3b3VsZCBhc3N1bWUgdGhhdCB0aGUKPiBkZWZhdWx0 IHZhbHVlIGlzIHRvIGFsbG93IGZ1bGwgdXNhZ2UuIFBsZWFzZSBtZW50aW9uIHRoYXQuCj4gCkxp a2UgYWJvdmUgZXhhbXBsZSBJIHByb3ZpZGVkLCBhc3N1bWUgdGhlIG1heCBjb3MgbnVtYmVyIG9m IEwzIGlzIDggYnV0IEwyJ3MgaXMKNC4gQm90aCBMMyBhbmQgTDIgaGF2ZSB1c2VkIDQgQ09TIHJl Z2lzdGVycyhDT1NbMDozXSkuIFRoYXQgbWVhbnMgdGhlcmUgaXMgbm8KYWRkaXRpb25hbCBDT1Mg cmVnaXN0ZXIgb2YgTDIgdG8gdXNlLgoKQXQgdGhhdCB0aW1lLCB1c2VyIHRyaWVzIHRvIHNldCBh IG5ldyB2YWx1ZSBmb3IgTDMgb24gRG9tMCBidXQga2VlcCB0aGUgb2xkIEwyCnZhbHVlLiBUaGF0 IG1lYW5zIHdlIGNhbm5vdCBmaW5kIGEgbWF0Y2hpbmcgb25lIHRocm91Z2ggZmluZF9jb3MoKS4g U28sIHdlIG5lZWQKYWxsb2NhdGUgYSBuZXcgQ09TIHRocm91Z2ggYWxsb2NfbmV3X2NvcygpLiBU aGVyZSBhcmUgdHdvIHNjZW5hcmlvczoKMS4gVGhlIG9sZCBMMiB2YWx1ZSBvZiBEb20wIGlzIGRl ZmF1bHQgdmFsdWUuCjIuIFRoZSBvbGQgTDIgdmFsdWUgb2YgRG9tMCBpcyBOT1QgZGVmYXVsdCB2 YWx1ZS4KCkZvciBib3RoIGNhc2VzLCB3ZSBjYW4gZmluZCBDT1NbNF0gZm9yIEwzLgoKRm9yIGNh c2UgMSwgd2UgY2FuIHNldCA0IGludG8gYXNzb2NpYXRpb24gcmVnaXN0ZXIgYW5kIG1ha2UgaXQg d29yayBldmVuIGlmIDQKZXhjZWVkcyB0aGUgY29zX21heCBvZiBMMi4gQmVjYXVzZSBIVyBjYW4g aGFuZGxlIHRoaXMuIElmIHRoZSBDT1MgSUQgc2V0IGludG8KYXNzb2NpYXRpb24gcmVnaXN0ZXIg ZXhjZWVkcyB0aGUgbWF4IHZhbHVlLCBIVyB0cmVhdHMgaXQgYXMgZGVmYXVsdCB2YWx1ZS4KCkJ1 dCBmb3IgY2FzZSAyLCBMMiB2YWx1ZSB0aGF0IHVzZXIgd2FudHMgaXMgTk9UIGRlZmF1bHQgdmFs dWUgd2hpY2ggSFcgY2Fubm90CmhhbmRsZSBpdC4gU28gd2UgaGF2ZSB0byByZXR1cm4gZXJyb3Ig d2hpY2ggbWVhbnMgdGhpcyB2YWx1ZSBwYWlyKEwzIGFuZCBMMikKY2Fubm90IHdvcmsgaW4gY3Vy cmVudCBlbnZpcm9ubWVudC4KCj4gPiArICAgICAqIElmIGJvdGggY3JpdGVyaWEgYXJlIGZ1bGZp bGxlZCwgdGhhdCBtZWFucyB0aGUgaW5wdXQgZXhjZWVkcyB0aGUKPiA+ICsgICAgICogcmFuZ2Uu Cj4gPiArICAgICAqCj4gPiArICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9u IG1lYW5zIHRoZSBudW1iZXIgb2YgdGhlIHZhbHVlIGFycmF5Cj4gPiArICAgICAqIG1lbWJlciB0 byBza2lwIG9yIGVycm9yLgo+ID4gKyAgICAgKiAxIC0gb25lIGl0ZW0gaW4gdmFsdWUgYXJyYXku Cj4gPiArICAgICAqIDIgLSB0d28gaXRlbXMgaW4gdmFsdWUgYXJyYXksIGxpa2UgQ0RQIG9jY3Vw aWVzIHR3byBpdGVtcy4KPiA+ICsgICAgICogMCAtIGVycm9yLCBleGNlZWQgY29zX21heCBhbmQg dmFsdWUgdG8gc2V0IGlzIG5vdCBkZWZhdWx0Lgo+IAo+ICd0byBzZXQgaXMgbm90IGRlZmF1bHQn IEkgdGhpbmsgeW91IG1lYW4gdGhhdCAidGhlIHZhbHVlIGlzIG5vdCBzZXQsIGFuZCAKPiB0aGUg ZGVmYXVsdCBvbmUgaXMgdXNlZC4gJyA/Cj4gCk5vcGUsIDAgbWVhbnMgZXJyb3IgdGhhdCB3ZSBm YWlsIHRvIGFsbG9jYXRlIGEgbmV3IENPUyBJRC5IZXJlLApJIHdhbnQgdG8gZXhwcmVzcyB0aGF0 IGF0IGxlYXN0IG9uZSBmZWF0dXJlJ3MgY29zX21heCBoYXMgYmVlbiBleGNlZWRlZCBhbmQKdGhp cyBmZWF0dXJlJ3MgdmFsdWUgaXMgbm90IGRlZmF1bHQgb25lLiBTbywgd2UgY2Fubm90IGhhbmRs ZSB0aGlzIGNhc2UgYW5kCnJldHVybiBlcnJvciBiYWNrLgoKPiA+ICsgICAgICovCj4gPiArICAg IHVuc2lnbmVkIGludCAoKmV4Y2VlZHNfY29zX21heCkoY29uc3QgdWludDY0X3QgdmFsW10sCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGZlYXRf bGlzdCAqZmVhdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgY29zKTsKPiA+ICsgICAgLyogd3JpdGVfbXNyIGlzIHVzZWQgdG8gd3JpdGUgZmVh dHVyZSBzcGVjaWZpYyBNU1IgcmVnaXN0ZXJzLiAqLwo+IAo+IHMvd3JpdGUvd3JpdGUgb3V0Lwo+ IApUaGFua3MhCgo+ID4gKyAgICBpbnQgKCp3cml0ZV9tc3IpKHVuc2lnbmVkIGludCBjb3MsIGNv bnN0IHVpbnQ2NF90IHZhbFtdLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmZWF0 X2xpc3QgKmZlYXQpOwo+ID4gKyAgICAvKiBnZXRfdmFsIGlzIHVzZWQgdG8gZ2V0IGZlYXR1cmUg c3BlY2lmaWMgQ09TIHJlZ2lzdGVyIHZhbHVlLiAqLwo+IAo+IFlvdSBtZW50aW9uZWQgZXhhbXBs ZXMgcHJldmlvdXNseS4gV291bGQgaXQgbWFrZSBzZW5zZSB0byBlbnVtZXJhdGUKPiBpdCBoZXJl IHRvby4KPiAKU29ycnksIEkgZG8gbm90IGdldCB5b3VyIG1lYW5pbmcuIENvdWxkIHlvdSBwbGVh c2UgZXhwbGFpbiBpdD8gVGhhbmtzIQoKPiA+ICsgICAgaW50ICgqZ2V0X3ZhbCkoY29uc3Qgc3Ry dWN0IGZlYXRfbGlzdCAqZmVhdCwgdW5zaWduZWQgaW50IGNvcywKPiA+ICsgICAgICAgICAgICAg ICAgICAgZW51bSBwc3JfdmFsX3R5cGUgdHlwZSwgdWludDY0X3QgKnZhbCk7Cj4gPiArICAgIC8q IGdldF9mZWF0X2luZm8gaXMgdXNlZCB0byBnZXQgZmVhdHVyZSBzcGVjaWZpYyBIVyBpbmZvLiAq Lwo+IAo+IFRoYXQgc291bmRzIG15c3RlcmlvdXMuCj4gCj4gSSBwcmVzdW1lIHRoYXQgJ2RhdCcg YW5kICdhcnJheV9sZW4nIGFyZSB3aGVyZSB0aGUgc3BlY2lmaWMgSFcgaW5mbwo+IGlzIHB1dC4K PgpZZXMsIHlvdSBhcmUgcmlnaHQuIGRhdFtdIGlzIHVzZWQgdG8gcHV0IEhXIGluZm8uIFRoZSBh cnJheV9sZW4gbWVhbnMgdGhlCmxlbmd0aCBvZiBkYXRbXSBhcnJheS4KIAo+IEJ1dCBub3RoaW5n IGFib3V0IHRoZSByZXR1cm4gY29kZT8KPiAKMCBpcyBlcnJvciBhbmQgMSBpcyBzdWNjZXNzLiBJ ZiB5b3UgdGhpbmsgaXQgaXMgbmVjZXNzYXJ5LCBJIHdpbGwgZXhwbGFpbiBpdAppbiBjb21tZW50 LiBUaGFua3MhCgo+ID4gKyAgICBpbnQgKCpnZXRfZmVhdF9pbmZvKShjb25zdCBzdHJ1Y3QgZmVh dF9saXN0ICpmZWF0LCBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBkYXRbXSwgdWludDMyX3QgYXJyYXlfbGVuKTsKPiA+ICsgICAg LyogZ2V0X21heF9jb3NfbWF4IGlzIHVzZWQgdG8gZ2V0IGZlYXR1cmUncyBjb3NfbWF4LiAqLwo+ ID4gKyAgICB1bnNpZ25lZCBpbnQgKCpnZXRfbWF4X2Nvc19tYXgpKGNvbnN0IHN0cnVjdCBmZWF0 X2xpc3QgKmZlYXQpOwo+ID4gK307Cj4gPiArCj4gPiArLyogQ0FUL0NEUCBpbmZvIGRhdGEgc3Ry dWN0dXJlLiAqLwo+ID4gK3N0cnVjdCBwc3JfY2F0X2x2bF9pbmZvIHsKPiA+ICsgICAgdW5zaWdu ZWQgaW50IGNibV9sZW47Cj4gPiArICAgIHVuc2lnbmVkIGludCBjb3NfbWF4Owo+ID4gK307Cj4g PiArCj4gPiArc3RydWN0IGZlYXRfaW5mbyB7Cj4gPiAgICAgIHVuaW9uIHsKPiA+IC0gICAgICAg IHVpbnQ2NF90IGNibTsKPiA+IC0gICAgICAgIHN0cnVjdCB7Cj4gPiAtICAgICAgICAgICAgdWlu dDY0X3QgY29kZTsKPiA+IC0gICAgICAgICAgICB1aW50NjRfdCBkYXRhOwo+ID4gLSAgICAgICAg fTsKPiA+ICsgICAgICAgIHN0cnVjdCBwc3JfY2F0X2x2bF9pbmZvIGwzX2luZm87Cj4gPiAgICAg IH07Cj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFBlciBzcGVjLCB0aGUgbWF4aW11bSBD T1MgcmVnaXN0ZXIgbnVtYmVyIGlzIDEyOCBmb3IgYWxsIGN1cnJlbnQgUFNSCj4gPiArICogZmVh dHVyZXMuCj4gPiArICovCj4gPiArI2RlZmluZSBNQVhfQ09TX1JFR19OVU0gIDEyOAo+ID4gKwo+ ID4gK3N0cnVjdCBmZWF0X2xpc3Qgewo+ID4gKyAgICB1bnNpZ25lZCBpbnQgZmVhdHVyZTsKPiA+ ICsgICAgc3RydWN0IGZlYXRfb3BzIG9wczsKPiA+ICsgICAgc3RydWN0IGZlYXRfaW5mbyBpbmZv Owo+ID4gKyAgICB1aW50NjRfdCBjb3NfcmVnX3ZhbFtNQVhfQ09TX1JFR19OVU1dOwo+ID4gKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgcHNyX3Jl ZiB7Cj4gPiAgICAgIHVuc2lnbmVkIGludCByZWY7Cj4gPiAgfTsKPiA+ICAKPiA+IC1zdHJ1Y3Qg cHNyX2NhdF9zb2NrZXRfaW5mbyB7Cj4gPiAtICAgIHVuc2lnbmVkIGludCBjYm1fbGVuOwo+ID4g LSAgICB1bnNpZ25lZCBpbnQgY29zX21heDsKPiA+IC0gICAgc3RydWN0IHBzcl9jYXRfY2JtICpj b3NfdG9fY2JtOwo+ID4gLSAgICBzcGlubG9ja190IGNibV9sb2NrOwo+ID4gKyNkZWZpbmUgUFNS X1NPQ0tFVF9MM19DQVQgMAo+ID4gKyNkZWZpbmUgUFNSX1NPQ0tFVF9MM19DRFAgMQo+ID4gKwo+ ID4gK3N0cnVjdCBwc3Jfc29ja2V0X2luZm8gewo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBiaXQg MX4wOiBbMDFdLT5MMyBDQVQtb25seSwgWzEwXS0+TDMgQ0RQCj4gPiArICAgICAqLwo+ID4gKyAg ICB1bnNpZ25lZCBpbnQgZmVhdHVyZXM7Cj4gCj4gWW91IGNhbiBhbHNvIHVzZToKPiAJdW5zaWdu ZWQgaW50IGwzX2NhdDoxCj4gCQkgICAgIGwzX2NkcDoxCj4gCj4gYW5kIHRoZW4geW91IGRvbid0 IGhhdmUgdG8gdXNlIGEgI2RlZmluZS4gQnV0IHRoYXQgaXMgdXAgdG8geW91Lgo+IApUaGFuayB5 b3UhIEkgcHJlZmVyIHRvIGtlZXAgY3VycmVudCBjb2RlcyB0aGVuIEkgY2FuIHVzZSBiaXQgcmVs YXRlZCBmdW5jdGlvbnMsCmxpa2UgdGVzdF9iaXQoKS9fX3NldF9iaXQoKS9ldGMuCgo+ID4gKyAg ICB1bnNpZ25lZCBpbnQgbnJfZmVhdDsKPiA+ICsgICAgc3RydWN0IGxpc3RfaGVhZCBmZWF0X2xp c3Q7Cj4gPiArICAgIHN0cnVjdCBwc3JfcmVmICpjb3NfcmVmOwo+ID4gKyAgICBzcGlubG9ja190 IG1hc2tfbG9jazsKPiAKPiBDYW4geW91IGdpdmUgYSBjb21tZW50IGFib3ZlIHRoaXMgc3Bpbmxv Y2sgYW5kIHNheSB3aGF0IGl0IHByb3RlY3RzIGFnYWluc3Q/Cj4gClN1cmUsIHdpbGwgYWRkIGl0 LiBUaGFua3MhCgo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IHBzcl9hc3NvYyB7Cj4gPiBAQCAt NDgsOSArMTc5LDcgQEAgc3RydWN0IHBzcl9hc3NvYyB7Cj4gPiAgCj4gPiAgc3RydWN0IHBzcl9j bXQgKl9fcmVhZF9tb3N0bHkgcHNyX2NtdDsKPiA+ICAKPiA+IC1zdGF0aWMgdW5zaWduZWQgbG9u ZyAqX19yZWFkX21vc3RseSBjYXRfc29ja2V0X2VuYWJsZTsKPiA+IC1zdGF0aWMgc3RydWN0IHBz cl9jYXRfc29ja2V0X2luZm8gKl9fcmVhZF9tb3N0bHkgY2F0X3NvY2tldF9pbmZvOwo+ID4gLXN0 YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxlOwo+ID4g K3N0YXRpYyBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICpfX3JlYWRfbW9zdGx5IHNvY2tldF9pbmZv Owo+ID4gIAo+ID4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgb3B0X3BzcjsKPiA+ICBzdGF0aWMgdW5z aWduZWQgaW50IF9faW5pdGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owo+ID4gQEAgLTU4LDggKzE4 Nyw0MTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG9wdF9jb3NfbWF4ID0g MjU1Owo+ID4gIHN0YXRpYyB1aW50NjRfdCBybWlkX21hc2s7Cj4gPiAgc3RhdGljIERFRklORV9Q RVJfQ1BVKHN0cnVjdCBwc3JfYXNzb2MsIHBzcl9hc3NvYyk7Cj4gPiAgCj4gPiAtc3RhdGljIHN0 cnVjdCBwc3JfY2F0X2NibSAqdGVtcF9jb3NfdG9fY2JtOwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcHNy X3JlZiAqdGVtcF9jb3NfcmVmOwo+ID4gKy8qIEV2ZXJ5IGZlYXR1cmUgaGFzIGl0cyBvd24gb2Jq ZWN0LiAqLwo+IAo+IE5vdCBzdXJlIEkgdW5kZXJzdGFuZCB0aGF0LiBXaGF0IG9iamVjdD8gVGhl IGZlYXRfbDMgPwo+IApZZXMsIGNvcnJlY3QuCgo+ID4gK3N0YXRpYyBzdHJ1Y3QgZmVhdF9saXN0 ICpmZWF0X2wzOwo+ID4gKwo+ID4gKy8qIENvbW1vbiBmdW5jdGlvbnMgZm9yIHN1cHBvcnRpbmcg ZmVhdHVyZSBjYWxsYmFjayBmdW5jdGlvbnMuICovCj4gPiArc3RhdGljIHZvaWQgZnJlZV9mZWF0 dXJlKHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCj4gPiArewo+ID4gKyAgICBzdHJ1Y3Qg ZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ICsKPiA+ICsgICAgaWYgKCAhaW5mbyApCj4gPiArICAg ICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAs ICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gPiArICAgIHsKPiA+ICsgICAgICAgIGNsZWFyX2Jp dChmZWF0X3RtcC0+ZmVhdHVyZSwgJmluZm8tPmZlYXR1cmVzKTsKPiA+ICsgICAgICAgIGxpc3Rf ZGVsKCZmZWF0X3RtcC0+bGlzdCk7Cj4gPiArICAgICAgICB4ZnJlZShmZWF0X3RtcCk7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgLyogRnJlZSBmZWF0dXJlIHdoaWNoIGFyZSBub3QgYWRkZWQg aW50byBmZWF0X2xpc3QuICovCj4gPiArICAgIGlmICggZmVhdF9sMyApCj4gPiArICAgIHsKPiA+ ICsgICAgICAgIHhmcmVlKGZlYXRfbDMpOwo+ID4gKyAgICAgICAgZmVhdF9sMyA9IE5VTEw7Cj4g PiArICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgcHNyX2NoZWNrX2NibSh1bnNp Z25lZCBpbnQgY2JtX2xlbiwgdWludDY0X3QgY2JtKQo+ID4gK3sKPiA+ICsgICAgdW5zaWduZWQg aW50IGZpcnN0X2JpdCwgemVyb19iaXQ7Cj4gPiArCj4gPiArICAgIC8qIFNldCBiaXRzIHNob3Vs ZCBvbmx5IGluIHRoZSByYW5nZSBvZiBbMCwgY2JtX2xlbikuICovCj4gPiArICAgIGlmICggY2Jt ICYgKH4wdWxsIDw8IGNibV9sZW4pICkKPiA+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPiA+ICsK PiA+ICsgICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KPiA+ICsgICAg aWYgKCBjYm0gPT0gMCApCj4gPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArICAg IGZpcnN0X2JpdCA9IGZpbmRfZmlyc3RfYml0KCZjYm0sIGNibV9sZW4pOwo+ID4gKyAgICB6ZXJv X2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9iaXQpOwo+ID4g Kwo+ID4gKyAgICAvKiBTZXQgYml0cyBzaG91bGQgYmUgY29udGlndW91cy4gKi8KPiA+ICsgICAg aWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKPiA+ICsgICAgICAgICBmaW5kX25leHRfYml0KCZj Ym0sIGNibV9sZW4sIHplcm9fYml0KSA8IGNibV9sZW4gKQo+ID4gKyAgICAgICAgcmV0dXJuIGZh bHNlOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ ICsgKiBGZWF0dXJlcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuCj4gPiArICovCj4gPiArCj4g PiArLyogTDMgQ0FUL0NEUCBjYWxsYmFjayBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24uICovCj4g PiArc3RhdGljIHZvaWQgbDNfY2F0X2luaXRfZmVhdHVyZSh1bnNpZ25lZCBpbnQgZWF4LCB1bnNp Z25lZCBpbnQgZWJ4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGVjeCwgdW5zaWduZWQgaW50IGVkeCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvKQo+ID4gK3sKPiA+ICsg ICAgc3RydWN0IHBzcl9jYXRfbHZsX2luZm8gbDNfY2F0Owo+ID4gKyAgICB1bnNpZ25lZCBpbnQg c29ja2V0Owo+ID4gKyAgICB1aW50NjRfdCB2YWw7Cj4gPiArCj4gPiArICAgIC8qIE5vIHZhbGlk IHZhbHVlIHNvIGRvIG5vdCBlbmFibGUgZmVhdHVyZS4gKi8KPiA+ICsgICAgaWYgKCAwID09IGVh eCB8fCAwID09IGVkeCApCj4gCj4gSSBhbSBjdXJpb3VzIC0gaG93IGNvbWUgeW91IHB1dCB0aGUg dmFsdWUgYmVmb3JlIHRoZSB2YXJpYWJsZT8KPiBbSSBoYXZlIGJlZW4gYWx3YXlzIHB1dHRpbmcg dGhlIHZhbHVlIF9hZnRlcl8gdGhlIHZhcmlhYmxlXQo+IApUaGF0IGlzIGEgY29kaW5nIGhhYml0 LiBUbyBwdXQgdmFsdWUgYmVmb3JlIHZhcmlhYmxlIGNhbiBoZWxwIHRvIGZpbmQgY29kZQplcnJv ciBieSBjb21waWxhdGlvbiwgbGlrZSAnMCA9IGVheCcsIGEgJz0nIGlzIG1pc3NlZC4KCklmIHRo aXMgaXMgbm90IHRoZSBzdHlsZSBvZiBYZW4sIEkgY2FuIGNoYW5nZSBpdC4gVGhhbmtzIQoKPiA+ ICsgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgbDNfY2F0LmNibV9sZW4gPSAoZWF4ICYg MHgxZikgKyAxOwo+ID4gKyAgICBsM19jYXQuY29zX21heCA9IG1pbihvcHRfY29zX21heCwgZWR4 ICYgMHhmZmZmKTsKPiA+ICsKPiA+ICsgICAgLyogY29zPTAgaXMgcmVzZXJ2ZWQgYXMgZGVmYXVs dCBjYm0oYWxsIG9uZXMpLiAqLwo+ID4gKyAgICBmZWF0LT5jb3NfcmVnX3ZhbFswXSA9ICgxdWxs IDw8IGwzX2NhdC5jYm1fbGVuKSAtIDE7Cj4gPiArCj4gPiArICAgIGZlYXQtPmZlYXR1cmUgPSBQ U1JfU09DS0VUX0wzX0NBVDsKPiA+ICsKPiA+ICsgICAgaWYgKCAoZWN4ICYgUFNSX0NBVF9DRFBf Q0FQQUJJTElUWSkgJiYgKG9wdF9wc3IgJiBQU1JfQ0RQKSAmJgo+ID4gKyAgICAgICAgICF0ZXN0 X2JpdChQU1JfU09DS0VUX0wzX0NEUCwgJmluZm8tPmZlYXR1cmVzKSApCj4gPiArICAgIHsKPiA+ ICsgICAgICAgIC8qIERhdGEgKi8KPiA+ICsgICAgICAgIGZlYXQtPmNvc19yZWdfdmFsWzBdID0g KDF1bGwgPDwgbDNfY2F0LmNibV9sZW4pIC0gMTsKPiA+ICsgICAgICAgIC8qIENvZGUgKi8KPiA+ ICsgICAgICAgIGZlYXQtPmNvc19yZWdfdmFsWzFdID0gKDF1bGwgPDwgbDNfY2F0LmNibV9sZW4p IC0gMTsKPiA+ICsKPiA+ICsgICAgICAgIC8qIFdlIG9ubHkgd3JpdGUgbWFzazEgc2luY2UgbWFz azAgaXMgYWx3YXlzIGFsbCBvbmVzIGJ5IGRlZmF1bHQuICovCj4gPiArICAgICAgICB3cm1zcmwo TVNSX0lBMzJfUFNSX0wzX01BU0soMSksCj4gPiArICAgICAgICAgICAgICAgKDF1bGwgPDwgbDNf Y2F0LmNibV9sZW4pIC0gMSk7Cj4gPiArICAgICAgICByZG1zcmwoTVNSX0lBMzJfUFNSX0wzX1FP U19DRkcsIHZhbCk7Cj4gPiArICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcs IHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VOQUJMRV9CSVQpKTsKPiA+ICsKPiA+ICsgICAg ICAgIC8qIEN1dCBoYWxmIG9mIGNvc19tYXggd2hlbiBDRFAgaXMgZW5hYmxlZC4gKi8KPiA+ICsg ICAgICAgIGwzX2NhdC5jb3NfbWF4ID4+PSAxOwo+ID4gKwo+ID4gKyAgICAgICAgZmVhdC0+ZmVh dHVyZSA9IFBTUl9TT0NLRVRfTDNfQ0RQOwo+ID4gKyAgICAgICAgX19zZXRfYml0KFBTUl9TT0NL RVRfTDNfQ0RQLCAmaW5mby0+ZmVhdHVyZXMpOwo+ID4gKyAgICB9Cj4gPiArICAgIGVsc2UKPiA+ ICsgICAgICAgIF9fc2V0X2JpdChQU1JfU09DS0VUX0wzX0NBVCwgJmluZm8tPmZlYXR1cmVzKTsK PiA+ICsKPiA+ICsgICAgZmVhdC0+aW5mby5sM19pbmZvID0gbDNfY2F0Owo+ID4gKwo+ID4gKyAg ICBpbmZvLT5ucl9mZWF0Kys7Cj4gPiArCj4gPiArICAgIC8qIEFkZCB0aGlzIGZlYXR1cmUgaW50 byBsaXN0LiAqLwo+ID4gKyAgICBsaXN0X2FkZF90YWlsKCZmZWF0LT5saXN0LCAmaW5mby0+ZmVh dF9saXN0KTsKPiA+ICsKPiA+ICsgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vz c29yX2lkKCkpOwo+ID4gKyAgICBwcmludGsoWEVOTE9HX0lORk8gIkwzIENBVDogZW5hYmxlZCBv biBzb2NrZXQgJXUsIGNvc19tYXg6JXUsIGNibV9sZW46JXUsIENEUDolc1xuIiwKPiA+ICsgICAg ICAgICAgIHNvY2tldCwgZmVhdC0+aW5mby5sM19pbmZvLmNvc19tYXgsIGZlYXQtPmluZm8ubDNf aW5mby5jYm1fbGVuLAo+ID4gKyAgICAgICAgICAgdGVzdF9iaXQoUFNSX1NPQ0tFVF9MM19DRFAs ICZpbmZvLT5mZWF0dXJlcykgPyAib24iIDogIm9mZiIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGwzX2NhdF9jb21wYXJlX3ZhbChjb25zdCB1aW50NjRfdCB2YWxbXSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0LAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3MsIGJvb2wg KmZvdW5kKQo+ID4gK3sKPiA+ICsgICAgdWludDY0X3QgbDNfZGVmX2NibTsKPiA+ICsKPiA+ICsg ICAgbDNfZGVmX2NibSA9ICgxdWxsIDw8IGZlYXQtPmluZm8ubDNfaW5mby5jYm1fbGVuKSAtIDE7 Cj4gPiArCj4gPiArICAgIC8qIENEUCAqLwo+ID4gKyAgICBpZiAoIGZlYXQtPmZlYXR1cmUgPT0g UFNSX1NPQ0tFVF9MM19DRFAgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBpZiAoIGNvcyA+IGZl YXQtPmluZm8ubDNfaW5mby5jb3NfbWF4ICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAg ICBpZiAoIHZhbFswXSAhPSBsM19kZWZfY2JtIHx8Cj4gPiArICAgICAgICAgICAgICAgICB2YWxb MV0gIT0gbDNfZGVmX2NibSApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAg ICAqZm91bmQgPSBmYWxzZTsKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4g PiArICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICpmb3VuZCA9IHRydWU7Cj4gPiArICAg ICAgICB9Cj4gPiArICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgKmZvdW5kID0gKHZhbFsw XSA9PSBmZWF0LT5jb3NfcmVnX3ZhbFtjb3MgKiAyXSAmJgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICB2YWxbMV0gPT0gZmVhdC0+Y29zX3JlZ192YWxbY29zICogMiArIDFdKTsKPiA+ICsKPiA+ ICsgICAgICAgIC8qIENEUCBvY2N1cGllcyB0d28gQ09TLCBvbmUgZm9yIGRhdGEsIG9uZSBmb3Ig Y29kZS4gKi8KPiA+ICsgICAgICAgIHJldHVybiAyOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IC8qIENBVCAqLwo+ID4gKyAgICBpZiAoIGNvcyA+IGZlYXQtPmluZm8ubDNfaW5mby5jb3NfbWF4 ICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgaWYgKCB2YWxbMF0gIT0gbDNfZGVmX2NibSApCj4g PiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgKmZvdW5kID0gZmFsc2U7Cj4gPiArICAgICAg ICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gPiArICAgICAgICB9Cj4gPiArICAgICAgICAqZm91bmQg PSB0cnVlOwo+ID4gKyAgICB9Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgICAgICpmb3VuZCA9ICh2 YWxbMF0gPT0gZmVhdC0+Y29zX3JlZ192YWxbY29zXSk7Cj4gPiArCj4gPiArICAgIC8qIEwzIENB VCBvY2N1cGllcyBvbmUgQ09TLiAqLwo+ID4gKyAgICByZXR1cm4gMTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHVuc2lnbmVkIGludCBsM19jYXRfZ2V0X2Nvc19tYXhfZnJvbV90eXBlKGNvbnN0 IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpCj4gPiArewo+ID4g KyAgICBpZiAoIHR5cGUgIT0gUFNSX01BU0tfVFlQRV9MM19EQVRBICYmCj4gPiArICAgICAgICAg dHlwZSAhPSBQU1JfTUFTS19UWVBFX0wzX0NPREUgJiYKPiA+ICsgICAgICAgICB0eXBlICE9IFBT Ul9NQVNLX1RZUEVfTDNfQ0JNICkKPiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAg ICByZXR1cm4gZmVhdC0+aW5mby5sM19pbmZvLmNvc19tYXg7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2V4Y2VlZHNfY29zX21heChjb25zdCB1aW50NjRfdCB2 YWxbXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcykKPiA+ICt7Cj4gPiArICAgIHVpbnQ2 NF90IGwzX2RlZl9jYm07Cj4gPiArCj4gPiArICAgIGwzX2RlZl9jYm0gPSAoMXVsbCA8PCBmZWF0 LT5pbmZvLmwzX2luZm8uY2JtX2xlbikgLSAxOwo+ID4gKwo+ID4gKyAgICAvKiBDRFAgKi8KPiA+ ICsgICAgaWYgKCBmZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKPiA+ICsgICAg ewo+ID4gKyAgICAgICAgaWYgKCBjb3MgPiBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21heCAmJgo+ ID4gKyAgICAgICAgICAgICAodmFsWzBdICE9IGwzX2RlZl9jYm0gfHwgdmFsWzFdICE9IGwzX2Rl Zl9jYm0pICkKPiA+ICsgICAgICAgICAgICAgICAgLyoKPiA+ICsgICAgICAgICAgICAgICAgICog RXhjZWVkIGNvc19tYXggYW5kIHZhbHVlIHRvIHNldCBpcyBub3QgZGVmYXVsdCwKPiA+ICsgICAg ICAgICAgICAgICAgICogcmV0dXJuIGVycm9yLgo+ID4gKyAgICAgICAgICAgICAgICAgKi8KPiA+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArICAgICAgICAvKiBDRFAgb2Nj dXBpZXMgdHdvIENPUywgb25lIGZvciBkYXRhLCBvbmUgZm9yIGNvZGUuICovCj4gPiArICAgICAg ICByZXR1cm4gMjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiBDQVQgKi8KPiA+ICsgICAg aWYgKCBjb3MgPiBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21heCAmJgo+ID4gKyAgICAgICAgIHZh bFswXSAhPSBsM19kZWZfY2JtICkKPiA+ICsgICAgICAgICAgICAvKgo+ID4gKyAgICAgICAgICAg ICAqIEV4Y2VlZCBjb3NfbWF4IGFuZCB2YWx1ZSB0byBzZXQgaXMgbm90IGRlZmF1bHQsCj4gPiAr ICAgICAgICAgICAgICogcmV0dXJuIGVycm9yLgo+ID4gKyAgICAgICAgICAgICAqLwo+ID4gKyAg ICAgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICAvKiBMMyBDQVQgb2NjdXBpZXMgb25l IENPUy4gKi8KPiA+ICsgICAgcmV0dXJuIDE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg bDNfY2F0X3dyaXRlX21zcih1bnNpZ25lZCBpbnQgY29zLCBjb25zdCB1aW50NjRfdCB2YWxbXSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCkK PiA+ICt7Cj4gPiArICAgIC8qIENEUCAqLwo+ID4gKyAgICBpZiAoIGZlYXQtPmZlYXR1cmUgPT0g UFNSX1NPQ0tFVF9MM19DRFAgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICAvKgo+ID4gKyAgICAg ICAgICogSWYgaW5wdXQgY29zIGlzIG1vcmUgdGhhbiB0aGUgY29zX21heCBvZiB0aGUgZmVhdHVy ZSwgd2Ugc2hvdWxkCj4gPiArICAgICAgICAgKiBub3Qgc2V0IHRoZSB2YWx1ZS4KPiA+ICsgICAg ICAgICAqLwo+ID4gKyAgICAgICAgaWYgKCBjb3MgPiBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21h eCApCj4gPiArICAgICAgICAgICAgLyogQ0RQIG9jY3VwaWVzIHR3byBDT1MsIG9uZSBmb3IgZGF0 YSwgb25lIGZvciBjb2RlLiAqLwo+ID4gKyAgICAgICAgICAgIHJldHVybiAyOwo+ID4gKwo+ID4g KyAgICAgICAgLyogRGF0YSAqLwo+ID4gKyAgICAgICAgZmVhdC0+Y29zX3JlZ192YWxbY29zICog Ml0gPSB2YWxbMF07Cj4gPiArICAgICAgICAvKiBDb2RlICovCj4gPiArICAgICAgICBmZWF0LT5j b3NfcmVnX3ZhbFtjb3MgKiAyICsgMV0gPSB2YWxbMV07Cj4gPiArCj4gPiArICAgICAgICB3cm1z cmwoTVNSX0lBMzJfUFNSX0wzX01BU0tfREFUQShjb3MpLCB2YWxbMF0pOwo+ID4gKyAgICAgICAg d3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0NPREUoY29zKSwgdmFsWzFdKTsKPiA+ICsgICAg ICAgIC8qIENEUCBvY2N1cGllcyB0d28gQ09TLCBvbmUgZm9yIGRhdGEsIG9uZSBmb3IgY29kZS4g Ki8KPiA+ICsgICAgICAgIHJldHVybiAyOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qIENB VCAqLwo+ID4gKyAgICBpZiAoIGNvcyA+IGZlYXQtPmluZm8ubDNfaW5mby5jb3NfbWF4ICkKPiA+ ICsgICAgICAgIC8qIEwzIENBVCBvY2N1cGllcyBvbmUgQ09TLiAqLwo+ID4gKyAgICAgICAgcmV0 dXJuIDE7Cj4gPiArCj4gPiArICAgIGZlYXQtPmNvc19yZWdfdmFsW2Nvc10gPSB2YWxbMF07Cj4g PiArICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTSyhjb3MpLCB2YWxbMF0pOwo+ID4gKyAg ICAvKiBMMyBDQVQgb2NjdXBpZXMgb25lIENPUy4gKi8KPiA+ICsgICAgcmV0dXJuIDE7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2dldF9jb3NfbnVtKGNvbnN0 IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQpCj4gPiArewo+ID4gKyAgICBpZiAoIGZlYXQtPmZlYXR1 cmUgPT0gUFNSX1NPQ0tFVF9MM19DRFAgKQo+ID4gKyAgICAgICAgcmV0dXJuIDI7Cj4gPiArCj4g PiArICAgIHJldHVybiAxOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGwzX2NhdF9nZXRf b2xkX3ZhbCh1aW50NjRfdCB2YWxbXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfY29zLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUpCj4gPiArewo+ID4gKyAgICBpZiAoIG9s ZF9jb3MgPiBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21heCApCj4gPiArICAgICAgICAvKiBVc2Ug ZGVmYXVsdCB2YWx1ZS4gKi8KPiA+ICsgICAgICAgIG9sZF9jb3MgPSAwOwo+ID4gKwo+ID4gKyAg ICAvKiBDRFAgKi8KPiA+ICsgICAgaWYgKCBmZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNf Q0RQICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyogRGF0YSAqLwo+ID4gKyAgICAgICAgdmFs WzBdID0gZmVhdC0+Y29zX3JlZ192YWxbb2xkX2NvcyAqIDJdOwo+ID4gKyAgICAgICAgLyogQ29k ZSAqLwo+ID4gKyAgICAgICAgdmFsWzFdID0gZmVhdC0+Y29zX3JlZ192YWxbb2xkX2NvcyAqIDIg KyAxXTsKPiA+ICsKPiA+ICsgICAgICAgIC8qIENEUCBvY2N1cGllcyB0d28gQ09TLCBvbmUgZm9y IGRhdGEsIG9uZSBmb3IgY29kZS4gKi8KPiA+ICsgICAgICAgIHJldHVybiAyOwo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIC8qIENBVCAqLwo+ID4gKyAgICB2YWxbMF0gPSAgZmVhdC0+Y29zX3Jl Z192YWxbb2xkX2Nvc107Cj4gPiArCj4gPiArICAgIC8qIEwzIENBVCBvY2N1cGllcyBvbmUgQ09T LiAqLwo+ID4gKyAgICByZXR1cm4gMTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBsM19j YXRfc2V0X25ld192YWwodWludDY0X3QgdmFsW10sCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0pCj4gPiArewo+ID4gKyAgICAvKiBMMyBDQVQg b2NjdXBpZXMgb25lIENPUy4gKi8KPiA+ICsgICAgdW5zaWduZWQgaW50IHJldCA9IDE7Cj4gPiAr Cj4gPiArICAgIHN3aXRjaCAodHlwZSkgewo+ID4gKyAgICAvKiBDRFAgb2NjdXBpZXMgdHdvIENP Uywgb25lIGZvciBkYXRhLCBvbmUgZm9yIGNvZGUuICovCj4gPiArICAgIGNhc2UgUFNSX01BU0tf VFlQRV9MM19EQVRBOgo+ID4gKyAgICBjYXNlIFBTUl9NQVNLX1RZUEVfTDNfQ09ERToKPiA+ICsg ICAgICAgIGlmICggZmVhdC0+ZmVhdHVyZSAhPSBQU1JfU09DS0VUX0wzX0NEUCApCj4gPiArICAg ICAgICAgICAgcmV0dXJuIC1FTlhJTzsKPiA+ICsKPiA+ICsgICAgICAgIGlmICggIXBzcl9jaGVj a19jYm0oZmVhdC0+aW5mby5sM19pbmZvLmNibV9sZW4sIG0pICkKPiA+ICsgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsgICAgICAgIGlmICggdHlwZSA9PSBQU1JfTUFTS19U WVBFX0wzX0RBVEEgKQo+ID4gKyAgICAgICAgICAgIHZhbFswXSA9IG07Cj4gPiArICAgICAgICBl bHNlCj4gPiArICAgICAgICAgICAgdmFsWzFdID0gbTsKPiA+ICsKPiA+ICsgICAgICAgIHJldD0g MjsKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKwo+ID4gKyAgICAvKiBDQVQgKi8KPiA+ICsgICAg Y2FzZSBQU1JfTUFTS19UWVBFX0wzX0NCTToKPiA+ICsgICAgICAgIGlmICggIXBzcl9jaGVja19j Ym0oZmVhdC0+aW5mby5sM19pbmZvLmNibV9sZW4sIG0pICkKPiA+ICsgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsgICAgICAgIHZhbFswXSA9IG07Cj4gPiArICAgICAgICBi cmVhazsKPiA+ICsKPiA+ICsgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgIGlmICggZmVhdC0+ZmVh dHVyZSA9PSBQU1JfU09DS0VUX0wzX0NEUCApCj4gPiArICAgICAgICAgICAgLyogQ0RQIG9jY3Vw aWVzIHR3byBDT1MsIG9uZSBmb3IgZGF0YSwgb25lIGZvciBjb2RlLiAqLwo+ID4gKyAgICAgICAg ICAgIHJldCA9IDI7Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAg ICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGwzX2NhdF9nZXRfdmFs KGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsIHVuc2lnbmVkIGludCBjb3MsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLCB1aW50NjRfdCAq dmFsKQo+ID4gK3sKPiA+ICsgICAgaWYgKCBjb3MgPiBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21h eCApCj4gPiArICAgICAgICAvKiBVc2UgZGVmYXVsdCB2YWx1ZS4gKi8KPiA+ICsgICAgICAgIGNv cyA9IDA7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAodHlwZSkgewo+ID4gKyAgICAvKiBDRFAgKi8K PiA+ICsgICAgY2FzZSBQU1JfTUFTS19UWVBFX0wzX0RBVEE6Cj4gPiArICAgIGNhc2UgUFNSX01B U0tfVFlQRV9MM19DT0RFOgo+ID4gKyAgICAgICAgaWYgKCBmZWF0LT5mZWF0dXJlICE9IFBTUl9T T0NLRVRfTDNfQ0RQICkKPiA+ICsgICAgICAgICAgICByZXR1cm4gLUVOWElPOwo+ID4gKwo+ID4g KyAgICAgICAgaWYgKCB0eXBlID09IFBTUl9NQVNLX1RZUEVfTDNfREFUQSApCj4gPiArICAgICAg ICAgICAgKnZhbCA9IGZlYXQtPmNvc19yZWdfdmFsW2NvcyAqIDJdOwo+ID4gKyAgICAgICAgZWxz ZQo+ID4gKyAgICAgICAgICAgICp2YWwgPSBmZWF0LT5jb3NfcmVnX3ZhbFtjb3MgKiAyICsgMV07 Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgLyogQ0FUICovCj4gPiArICAgIGNh c2UgUFNSX01BU0tfVFlQRV9MM19DQk06Cj4gPiArICAgICAgICAqdmFsID0gIGZlYXQtPmNvc19y ZWdfdmFsW2Nvc107Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgZGVmYXVsdDoK PiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAx Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGwzX2NhdF9nZXRfZmVhdF9pbmZvKGNvbnN0 IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgZGF0W10sIHVpbnQzMl90IGFycmF5X2xlbikKPiA+ICt7Cj4gPiAr ICAgIGlmICggIWRhdCB8fCAzID4gYXJyYXlfbGVuICkKPiA+ICsgICAgICAgIHJldHVybiAwOwo+ IAo+IE5vdCByZXR1cm4gLUVJTlZBTD8KCkkgdXNlIDAgYXMgaW50ZXJuYWwgZXJyb3IgbnVtYmVy LiBUaGUgZXJyb3IgY29kZSBvZiBnZXRfZmVhdF9pbmZvIHdpbGwgbm90CmJlIHJldHVybmVkIG91 dHNpZGUgcHNyLmMuCgo+ID4gKwo+ID4gKyAgICBzd2l0Y2ggKHR5cGUpIHsKPiA+ICsgICAgY2Fz ZSBQU1JfTUFTS19UWVBFX0wzX0NCTToKPiA+ICsgICAgY2FzZSBQU1JfTUFTS19UWVBFX0wzX0RB VEE6Cj4gPiArICAgIGNhc2UgUFNSX01BU0tfVFlQRV9MM19DT0RFOgo+ID4gKyAgICAgICAgaWYg KCBmZWF0LT5mZWF0dXJlID09IFBTUl9TT0NLRVRfTDNfQ0RQICkKPiA+ICsgICAgICAgICAgICBk YXRbMl0gfD0gWEVOX1NZU0NUTF9QU1JfQ0FUX0wzX0NEUDsKPiA+ICsgICAgICAgIGVsc2UKPiA+ ICsgICAgICAgICAgICBkYXRbMl0gPSAwOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiAgCj4gPiAr ICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAvKiBUaGlzIGZlYXR1cmUgaXMgbm90IHJlcXVlc3Rl ZCBmZWF0dXJlLiAqLwo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gCj4gcmV0dXJuIC1FT1BOT1RT VVBQTz8KPiAKU2FtZSBhcyBhYm92ZSBjb21tZW50LiBUaGFua3MhCgo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIGRhdFswXSA9IGZlYXQtPmluZm8ubDNfaW5mby5jYm1fbGVuOwo+ID4gKyAgICBk YXRbMV0gPSBmZWF0LT5pbmZvLmwzX2luZm8uY29zX21heDsKPiA+ICsKPiA+ICsgICAgcmV0dXJu IDE7Cj4gCj4gTm90IHJldHVybiAyID8KPiAKPiBJZiB0aGlzIGlzIGp1c3QgdG8gcmV0dXJuIDB8 MSB3aHkgbm90IHVzZSAnYm9vbCcgPwo+IApZZXMsIEkgY2FuIGNoYW5nZSBpdCB0byAnYm9vbCcu IFRoYW5rcyEKCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbDNfY2F0X2dl dF9tYXhfY29zX21heChjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0KQo+ID4gK3sKPiA+ICsg ICAgcmV0dXJuIGZlYXQtPmluZm8ubDNfaW5mby5jb3NfbWF4Owo+ID4gK30KPiA+ICsKPiA+ICtz dHJ1Y3QgZmVhdF9vcHMgbDNfY2F0X29wcyA9IHsKPiA+ICsgICAgLmluaXRfZmVhdHVyZSA9IGwz X2NhdF9pbml0X2ZlYXR1cmUsCj4gPiArICAgIC5nZXRfY29zX251bSA9IGwzX2NhdF9nZXRfY29z X251bSwKPiA+ICsgICAgLmdldF9vbGRfdmFsID0gbDNfY2F0X2dldF9vbGRfdmFsLAo+ID4gKyAg ICAuc2V0X25ld192YWwgPSBsM19jYXRfc2V0X25ld192YWwsCj4gPiArICAgIC5jb21wYXJlX3Zh bCA9IGwzX2NhdF9jb21wYXJlX3ZhbCwKPiA+ICsgICAgLmdldF9jb3NfbWF4X2Zyb21fdHlwZSA9 IGwzX2NhdF9nZXRfY29zX21heF9mcm9tX3R5cGUsCj4gPiArICAgIC5leGNlZWRzX2Nvc19tYXgg PSBsM19jYXRfZXhjZWVkc19jb3NfbWF4LAo+ID4gKyAgICAud3JpdGVfbXNyID0gbDNfY2F0X3dy aXRlX21zciwKPiA+ICsgICAgLmdldF92YWwgPSBsM19jYXRfZ2V0X3ZhbCwKPiA+ICsgICAgLmdl dF9mZWF0X2luZm8gPSBsM19jYXRfZ2V0X2ZlYXRfaW5mbywKPiA+ICsgICAgLmdldF9tYXhfY29z X21heCA9IGwzX2NhdF9nZXRfbWF4X2Nvc19tYXgsCj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ID4g KyAqIENvbW1vbiBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24KPiA+ICsgKi8KPiA+ICBzdGF0aWMg dW5zaWduZWQgaW50IGdldF9zb2NrZXRfY3B1KHVuc2lnbmVkIGludCBzb2NrZXQpCj4gPiAgewo+ ID4gICAgICBpZiAoIGxpa2VseShzb2NrZXQgPCBucl9zb2NrZXRzKSApCj4gPiBAQCAtMjA5LDE3 ICs3NDAsMjkgQEAgdm9pZCBwc3JfZnJlZV9ybWlkKHN0cnVjdCBkb21haW4gKmQpCj4gPiAgICAg IGQtPmFyY2gucHNyX3JtaWQgPSAwOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBnZXRfbWF4X2Nvc19tYXgoY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAq aW5mbykKPiA+ICt7Cj4gPiArICAgIGNvbnN0IHN0cnVjdCBmZWF0X2xpc3QgKmZlYXRfdG1wOwo+ ID4gKyAgICB1bnNpZ25lZCBpbnQgY29zX21heCA9IDA7Cj4gPiArCj4gPiArICAgIGxpc3RfZm9y X2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3QpCj4gPiArICAgICAg ICBjb3NfbWF4ID0gbWF4KGZlYXRfdG1wLT5vcHMuZ2V0X21heF9jb3NfbWF4KGZlYXRfdG1wKSwg Y29zX21heCk7Cj4gPiArCj4gPiArICAgIHJldHVybiBjb3NfbWF4Owo+ID4gK30KPiA+ICsKPiA+ ICBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX2luaXQodm9pZCkKPiA+ICB7Cj4gPiAgICAg IHN0cnVjdCBwc3JfYXNzb2MgKnBzcmEgPSAmdGhpc19jcHUocHNyX2Fzc29jKTsKPiA+ICAKPiA+ IC0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQo+ID4gKyAgICBpZiAoIHNvY2tldF9pbmZvICkK PiA+ICAgICAgewo+ID4gICAgICAgICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19zb2Nr ZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKPiA+ICsgICAgICAgIGNvbnN0IHN0cnVjdCBwc3Jfc29j a2V0X2luZm8gKmluZm8gPSBzb2NrZXRfaW5mbyArIHNvY2tldDsKPiA+ICsgICAgICAgIHVuc2ln bmVkIGludCBjb3NfbWF4ID0gZ2V0X21heF9jb3NfbWF4KGluZm8pOwo+ID4gIAo+ID4gLSAgICAg ICAgaWYgKCB0ZXN0X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKSApCj4gPiAtICAgICAg ICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwgPDwgZ2V0X2NvdW50X29yZGVyKAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0X3NvY2tldF9pbmZvW3NvY2tldF0uY29zX21h eCkpIC0gMSkgPDwgMzI7Cj4gPiArICAgICAgICBpZiAoIGluZm8tPmZlYXR1cmVzICkKPiA+ICsg ICAgICAgICAgICBwc3JhLT5jb3NfbWFzayA9ICgoMXVsbCA8PCBnZXRfY291bnRfb3JkZXIoY29z X21heCkpIC0gMSkgPDwgMzI7Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgaWYgKCBwc3JfY210 X2VuYWJsZWQoKSB8fCBwc3JhLT5jb3NfbWFzayApCj4gPiBAQCAtMjU2LDI3MCArNzk5LDM2MiBA QCB2b2lkIHBzcl9jdHh0X3N3aXRjaF90byhzdHJ1Y3QgZG9tYWluICpkKQo+ID4gICAgICAgICAg cHNyYS0+dmFsID0gcmVnOwo+ID4gICAgICB9Cj4gPiAgfQo+ID4gLXN0YXRpYyBzdHJ1Y3QgcHNy X2NhdF9zb2NrZXRfaW5mbyAqZ2V0X2NhdF9zb2NrZXRfaW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0 KQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICpnZXRfc29ja2V0X2lu Zm8odW5zaWduZWQgaW50IHNvY2tldCkKPiA+ICB7Cj4gPiAtICAgIGlmICggIWNhdF9zb2NrZXRf aW5mbyApCj4gPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm87Cj4gPiArCj4gPiAr ICAgIGlmICggIXNvY2tldF9pbmZvICkKPiA+ICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9E RVYpOwo+ID4gIAo+ID4gICAgICBpZiAoIHNvY2tldCA+PSBucl9zb2NrZXRzICkKPiA+ICAgICAg ICAgIHJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7Cj4gPiAgCj4gPiAtICAgIGlmICggIXRlc3Rf Yml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKPiA+IC0gICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9FTlQpOwo+ID4gKyAgICBpbmZvID0gc29ja2V0X2luZm8gKyBzb2NrZXQ7Cj4gPiAg Cj4gPiAtICAgIHJldHVybiBjYXRfc29ja2V0X2luZm8gKyBzb2NrZXQ7Cj4gPiAtfQo+ID4gKyAg ICBpZiAoICFpbmZvLT5mZWF0dXJlcyApCj4gPiArICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5P RU5UKTsKPiA+ICAKPiA+IC1zdGF0aWMgaW5saW5lIGJvb2xfdCBjZHBfaXNfZW5hYmxlZCh1bnNp Z25lZCBpbnQgc29ja2V0KQo+ID4gLXsKPiA+IC0gICAgcmV0dXJuIGNkcF9zb2NrZXRfZW5hYmxl ICYmIHRlc3RfYml0KHNvY2tldCwgY2RwX3NvY2tldF9lbmFibGUpOwo+ID4gKyAgICByZXR1cm4g aW5mbzsKPiA+ICB9Cj4gPiAgCj4gPiAtaW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQg aW50IHNvY2tldCwgdWludDMyX3QgKmNibV9sZW4sCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgKmNvc19tYXgsIHVpbnQzMl90ICpmbGFncykKPiA+ICtpbnQgcHNyX2dldF9p bmZvKHVuc2lnbmVkIGludCBzb2NrZXQsIGVudW0gcHNyX3ZhbF90eXBlIHR5cGUsCj4gPiArICAg ICAgICAgICAgICAgICB1aW50MzJfdCBkYXRbXSwgdWludDMyX3QgYXJyYXlfbGVuKQo+ID4gIHsK PiA+IC0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBnZXRfY2F0X3NvY2tl dF9pbmZvKHNvY2tldCk7Cj4gPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8gPSBn ZXRfc29ja2V0X2luZm8oc29ja2V0KTsKPiA+ICsgICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAq ZmVhdF90bXA7Cj4gPiAgCj4gPiAgICAgIGlmICggSVNfRVJSKGluZm8pICkKPiA+ICAgICAgICAg IHJldHVybiBQVFJfRVJSKGluZm8pOwo+ID4gIAo+ID4gLSAgICAqY2JtX2xlbiA9IGluZm8tPmNi bV9sZW47Cj4gPiAtICAgICpjb3NfbWF4ID0gaW5mby0+Y29zX21heDsKPiA+ICsgICAgbGlzdF9m b3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICsgICAg ICAgIGlmICggZmVhdF90bXAtPm9wcy5nZXRfZmVhdF9pbmZvKGZlYXRfdG1wLCB0eXBlLCBkYXQs IGFycmF5X2xlbikgKQo+ID4gKyAgICAgICAgICAgIHJldHVybiAwOwo+IAo+IEhvdyBhYm91dCBq dXN0IHVzaW5nIHRoZSByZWd1bGFyZCByZXR1cm4gdmFsdWVzOiAwIGZvciBzdWNjY2VzcyBhbmQK PiBvdGhlciBudW1iZXJzIGFyZSBmYWlsdXJlcz8KPiAKRG8geW91IG1lYW4gZm9yIGFsbCBmdW5j dGlvbnM/IFRoYW5rcyEKCj4gPiAgCj4gPiAtICAgICpmbGFncyA9IDA7Cj4gPiAtICAgIGlmICgg Y2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCj4gPiAtICAgICAgICAqZmxhZ3MgfD0gWEVOX1NZU0NU TF9QU1JfQ0FUX0wzX0NEUDsKPiA+ICsgICAgcmV0dXJuIC1FTk9ERVY7Cj4gPiArfQo+ID4gIAo+ ID4gLSAgICByZXR1cm4gMDsKPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb3NfbnVtKGNv bnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCj4gPiArewo+ID4gKyAgICBjb25zdCBz dHJ1Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ICsgICAgdW5zaWduZWQgaW50IG51bSA9IDA7 Cj4gPiArCj4gPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0 X2xpc3QsIGxpc3QpCj4gPiArICAgICAgICBudW0gKz0gZmVhdF90bXAtPm9wcy5nZXRfY29zX251 bShmZWF0X3RtcCk7Cj4gPiArCj4gPiArICAgIHJldHVybiBudW07Cj4gPiAgfQo+ID4gIAo+ID4g LWludCBwc3JfZ2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0 LAo+ID4gLSAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqY2JtLCBlbnVtIGNibV90eXBlIHR5 cGUpCj4gPiArc3RhdGljIGludCBnZXRfb2xkX3NldF9uZXcodWludDY0X3QgKnZhbCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheV9sZW4sCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbywK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0pCj4gPiAgewo+ID4gLSAgICBz dHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29j a2V0KTsKPiA+IC0gICAgYm9vbF90IGNkcF9lbmFibGVkID0gY2RwX2lzX2VuYWJsZWQoc29ja2V0 KTsKPiA+ICsgICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVhdF90bXA7Cj4gPiArICAgIGlu dCByZXQ7Cj4gPiArICAgIHVpbnQ2NF90ICp2YWxfdG1wID0gdmFsOwo+ID4gIAo+ID4gLSAgICBp ZiAoIElTX0VSUihpbmZvKSApCj4gPiAtICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKPiA+ ICsgICAgaWYgKCAhdmFsICkKPiA+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gIAo+ID4g LSAgICBzd2l0Y2ggKCB0eXBlICkKPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3Rt cCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICAgICAgewo+ID4gLSAgICBjYXNlIFBTUl9D Qk1fVFlQRV9MMzoKPiA+IC0gICAgICAgIGlmICggY2RwX2VuYWJsZWQgKQo+ID4gLSAgICAgICAg ICAgIHJldHVybiAtRVhERVY7Cj4gPiAtICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtk LT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKPiA+IC0gICAgICAgIGJyZWFrOwo+ID4g KyAgICAgICAgLyogdmFsdWUgZ2V0dGluZyBvcmRlciBpcyBzYW1lIGFzIGZlYXR1cmUgbGlzdCAq Lwo+ID4gKyAgICAgICAgcmV0ID0gZmVhdF90bXAtPm9wcy5nZXRfb2xkX3ZhbCh2YWxfdG1wLCBm ZWF0X3RtcCwgb2xkX2NvcywgdHlwZSk7Cj4gPiAgCj4gPiAtICAgIGNhc2UgUFNSX0NCTV9UWVBF X0wzX0NPREU6Cj4gPiAtICAgICAgICBpZiAoICFjZHBfZW5hYmxlZCApCj4gPiAtICAgICAgICAg ICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5j Ym07Cj4gPiAtICAgICAgICBlbHNlCj4gPiAtICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190 b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jb2RlOwo+ID4gLSAgICAgICAgYnJl YWs7Cj4gPiAtCj4gPiAtICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Cj4gPiAtICAgICAg ICBpZiAoICFjZHBfZW5hYmxlZCApCj4gPiAtICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190 b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jYm07Cj4gPiAtICAgICAgICBlbHNl Cj4gPiAtICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29z X2lkc1tzb2NrZXRdXS5kYXRhOwo+ID4gLSAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICB2YWxf dG1wICs9IHJldDsKPiA+ICsgICAgICAgIGlmICggdmFsX3RtcCAtIHZhbCA+IGFycmF5X2xlbikK PiA+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgfQo+ID4gIAo+ID4gLSAg ICBkZWZhdWx0Ogo+ID4gLSAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Cj4gPiArICAgIHZh bF90bXAgPSB2YWw7Cj4gPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZv LT5mZWF0X2xpc3QsIGxpc3QpCj4gPiArICAgIHsKPiA+ICsgICAgICAgIC8qIHZhbHVlIHNldHRp bmcgb3JkZXIgaXMgc2FtZSBhcyBmZWF0dXJlIGxpc3QgKi8KPiA+ICsgICAgICAgIHJldCA9IGZl YXRfdG1wLT5vcHMuc2V0X25ld192YWwodmFsX3RtcCwgZmVhdF90bXAsIG9sZF9jb3MsIHR5cGUs IG0pOwo+ID4gKyAgICAgICAgaWYgKCByZXQgPCAwICkKPiA+ICsgICAgICAgICAgICByZXR1cm4g cmV0Owo+ID4gKwo+ID4gKyAgICAgICAgdmFsX3RtcCArPSByZXQ7Cj4gPiArICAgICAgICBpZiAo IHZhbF90bXAgLSB2YWwgPiBhcnJheV9sZW4pCj4gPiArICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4g LXN0YXRpYyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xlbiwgdWludDY0 X3QgY2JtKQo+ID4gK2ludCBwc3JfZ2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBp bnQgc29ja2V0LAo+ID4gKyAgICAgICAgICAgICAgICB1aW50NjRfdCAqdmFsLCBlbnVtIHBzcl92 YWxfdHlwZSB0eXBlKQo+ID4gIHsKPiA+IC0gICAgdW5zaWduZWQgaW50IGZpcnN0X2JpdCwgemVy b19iaXQ7Cj4gPiArICAgIGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8gPSBnZXRf c29ja2V0X2luZm8oc29ja2V0KTsKPiA+ICsgICAgdW5zaWduZWQgaW50IGNvcyA9IGQtPmFyY2gu cHNyX2Nvc19pZHNbc29ja2V0XTsKPiA+ICsgICAgY29uc3Qgc3RydWN0IGZlYXRfbGlzdCAqZmVh dF90bXA7Cj4gPiArICAgIGludCByZXQ7Cj4gPiAgCj4gPiAtICAgIC8qIFNldCBiaXRzIHNob3Vs ZCBvbmx5IGluIHRoZSByYW5nZSBvZiBbMCwgY2JtX2xlbikuICovCj4gPiAtICAgIGlmICggY2Jt ICYgKH4wdWxsIDw8IGNibV9sZW4pICkKPiA+IC0gICAgICAgIHJldHVybiAwOwo+ID4gLQo+ID4g LSAgICAvKiBBdCBsZWFzdCBvbmUgYml0IG5lZWQgdG8gYmUgc2V0LiAqLwo+ID4gLSAgICBpZiAo IGNibSA9PSAwICkKPiA+IC0gICAgICAgIHJldHVybiAwOwo+ID4gKyAgICBpZiAoIElTX0VSUihp bmZvKSApCj4gPiArICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKPiA+ICAKPiA+IC0gICAg Zmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xlbik7Cj4gPiAtICAgIHplcm9f Yml0ID0gZmluZF9uZXh0X3plcm9fYml0KCZjYm0sIGNibV9sZW4sIGZpcnN0X2JpdCk7Cj4gPiAr ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZmVhdF90bXAsICZpbmZvLT5mZWF0X2xpc3QsIGxpc3Qp Cj4gPiArICAgIHsKPiA+ICsgICAgICAgIHJldCA9IGZlYXRfdG1wLT5vcHMuZ2V0X3ZhbChmZWF0 X3RtcCwgY29zLCB0eXBlLCB2YWwpOwo+ID4gKyAgICAgICAgaWYgKCByZXQgPCAwICkKPiA+ICsg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gIAo+ID4gLSAgICAvKiBTZXQgYml0cyBzaG91bGQg YmUgY29udGlndW91cy4gKi8KPiA+IC0gICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKPiA+ IC0gICAgICAgICBmaW5kX25leHRfYml0KCZjYm0sIGNibV9sZW4sIHplcm9fYml0KSA8IGNibV9s ZW4gKQo+ID4gLSAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgICBpZiAoIHJldCA+IDAgKQo+ ID4gKyAgICAgICAgICAgIC8qIEZvdW5kICovCj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgIH0KPiA+ICAKPiA+IC0gICAgcmV0dXJuIDE7Cj4gPiArICAgIHJldHVybiAwOwo+ID4gIH0K PiA+ICAKPiA+IC1zdHJ1Y3QgY29zX2NibV9pbmZvCj4gPiArc3RydWN0IGNvc19tYXNrX2luZm8K PiA+ICB7Cj4gPiAgICAgIHVuc2lnbmVkIGludCBjb3M7Cj4gPiAtICAgIGJvb2xfdCBjZHA7Cj4g PiAtICAgIHVpbnQ2NF90IGNibV9jb2RlOwo+ID4gLSAgICB1aW50NjRfdCBjYm1fZGF0YTsKPiA+ ICsgICAgc3RydWN0IGxpc3RfaGVhZCAqZmVhdF9saXN0Owo+ID4gKyAgICBjb25zdCB1aW50NjRf dCAqdmFsOwo+ID4gIH07Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgZG9fd3JpdGVfbDNfY2JtKHZv aWQgKmRhdGEpCj4gPiArc3RhdGljIHZvaWQgZG9fd3JpdGVfcHNyX21zcih2b2lkICpkYXRhKQo+ ID4gIHsKPiA+IC0gICAgc3RydWN0IGNvc19jYm1faW5mbyAqaW5mbyA9IGRhdGE7Cj4gPiArICAg IHN0cnVjdCBjb3NfbWFza19pbmZvICppbmZvID0gKHN0cnVjdCBjb3NfbWFza19pbmZvICopZGF0 YTsKPiA+ICsgICAgdW5zaWduZWQgaW50IGNvcyAgICAgICAgICAgPSBpbmZvLT5jb3M7Cj4gPiAr ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmZlYXRfbGlzdD0gaW5mby0+ZmVhdF9saXN0Owo+ID4gKyAg ICBjb25zdCB1aW50NjRfdCAqdmFsICAgICAgICA9IGluZm8tPnZhbDsKPiA+ICsgICAgc3RydWN0 IGZlYXRfbGlzdCAqZmVhdF90bXA7Cj4gPiArICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgIGlm ICggIWZlYXRfbGlzdCApCj4gPiArICAgICAgICByZXR1cm47Cj4gPiAgCj4gPiAtICAgIGlmICgg aW5mby0+Y2RwICkKPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgZmVhdF9s aXN0LCBsaXN0KQo+ID4gICAgICB7Cj4gPiAtICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wz X01BU0tfQ09ERShpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Cj4gPiAtICAgICAgICB3cm1z cmwoTVNSX0lBMzJfUFNSX0wzX01BU0tfREFUQShpbmZvLT5jb3MpLCBpbmZvLT5jYm1fZGF0YSk7 Cj4gPiArICAgICAgICByZXQgPSBmZWF0X3RtcC0+b3BzLndyaXRlX21zcihjb3MsIHZhbCwgZmVh dF90bXApOwo+ID4gKyAgICAgICAgaWYgKCByZXQgPD0gMCkKPiA+ICsgICAgICAgICAgICByZXR1 cm47Cj4gPiArCj4gPiArICAgICAgICB2YWwgKz0gcmV0Owo+ID4gICAgICB9Cj4gPiAtICAgIGVs c2UKPiA+IC0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTSyhpbmZvLT5jb3MpLCBp bmZvLT5jYm1fY29kZSk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgd3JpdGVfbDNfY2Jt KHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgdWludDY0X3QgY2JtX2NvZGUsIHVpbnQ2NF90IGNibV9kYXRhLCBib29sX3Qg Y2RwKQo+ID4gK3N0YXRpYyBpbnQgd3JpdGVfcHNyX21zcih1bnNpZ25lZCBpbnQgc29ja2V0LCB1 bnNpZ25lZCBpbnQgY29zLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 NjRfdCAqdmFsKQo+ID4gIHsKPiA+IC0gICAgc3RydWN0IGNvc19jYm1faW5mbyBpbmZvID0KPiA+ ICsgICAgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhzb2Nr ZXQpOwo+ID4gKwo+ID4gKyAgICBzdHJ1Y3QgY29zX21hc2tfaW5mbyBkYXRhID0KPiA+ICAgICAg ewo+ID4gICAgICAgICAgLmNvcyA9IGNvcywKPiA+IC0gICAgICAgIC5jYm1fY29kZSA9IGNibV9j b2RlLAo+ID4gLSAgICAgICAgLmNibV9kYXRhID0gY2JtX2RhdGEsCj4gPiAtICAgICAgICAuY2Rw ID0gY2RwLAo+ID4gKyAgICAgICAgLmZlYXRfbGlzdCA9ICZpbmZvLT5mZWF0X2xpc3QsCj4gPiAr ICAgICAgICAudmFsID0gdmFsLAo+ID4gICAgICB9Owo+ID4gIAo+ID4gICAgICBpZiAoIHNvY2tl dCA9PSBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3JfaWQoKSkgKQo+ID4gLSAgICAgICAgZG9f d3JpdGVfbDNfY2JtKCZpbmZvKTsKPiA+ICsgICAgICAgIGRvX3dyaXRlX3Bzcl9tc3IoJmRhdGEp Owo+ID4gICAgICBlbHNlCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIHVuc2lnbmVkIGludCBjcHUg PSBnZXRfc29ja2V0X2NwdShzb2NrZXQpOwo+ID4gIAo+ID4gICAgICAgICAgaWYgKCBjcHUgPj0g bnJfY3B1X2lkcyApCj4gPiAgICAgICAgICAgICAgcmV0dXJuIC1FTk9UU09DSzsKPiA+IC0gICAg ICAgIG9uX3NlbGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193cml0ZV9sM19jYm0sICZp bmZvLCAxKTsKPiA+ICsgICAgICAgIG9uX3NlbGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBk b193cml0ZV9wc3JfbXNyLCAmZGF0YSwgMSk7Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgcmV0 dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgZmluZF9jb3Moc3RydWN0IHBzcl9j YXRfY2JtICptYXAsIHVuc2lnbmVkIGludCBjb3NfbWF4LAo+ID4gLSAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgY2JtX2NvZGUsIHVpbnQ2NF90IGNibV9kYXRhLCBib29sX3QgY2RwX2VuYWJs ZWQpCj4gPiArc3RhdGljIGludCBmaW5kX2Nvcyhjb25zdCB1aW50NjRfdCAqdmFsLCB1aW50MzJf dCBhcnJheV9sZW4sCj4gPiArICAgICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0 eXBlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5m byAqaW5mbykKPiA+ICB7Cj4gPiAgICAgIHVuc2lnbmVkIGludCBjb3M7Cj4gPiArICAgIGNvbnN0 IHN0cnVjdCBwc3JfcmVmICptYXAgPSBpbmZvLT5jb3NfcmVmOwo+ID4gKyAgICBjb25zdCBzdHJ1 Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ICsgICAgY29uc3QgdWludDY0X3QgKnZhbF90bXAg PSB2YWw7Cj4gPiArICAgIGludCByZXQ7Cj4gPiArICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKPiA+ ICsgICAgdW5zaWduZWQgaW50IGNvc19tYXggPSAwOwo+ID4gKwo+ID4gKyAgICAvKiBjb3NfbWF4 IGlzIHRoZSBtYXggQ09TIG9mIHRoZSBmZWF0dXJlIHRvIGJlIHNldC4gKi8KPiA+ICsgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICsg ICAgewo+ID4gKyAgICAgICAgY29zX21heCA9IGZlYXRfdG1wLT5vcHMuZ2V0X2Nvc19tYXhfZnJv bV90eXBlKGZlYXRfdG1wLCB0eXBlKTsKPiA+ICsgICAgICAgIGlmICggY29zX21heCA+IDAgKQo+ ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICB9Cj4gPiAgCj4gPiAgICAgIGZvciAoIGNv cyA9IDA7IGNvcyA8PSBjb3NfbWF4OyBjb3MrKyApCj4gPiAgICAgIHsKPiA+IC0gICAgICAgIGlm ICggKG1hcFtjb3NdLnJlZiB8fCBjb3MgPT0gMCkgJiYKPiA+IC0gICAgICAgICAgICAgKCghY2Rw X2VuYWJsZWQgJiYgbWFwW2Nvc10uY2JtID09IGNibV9jb2RlKSB8fAo+ID4gLSAgICAgICAgICAg ICAgKGNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNvZGUgPT0gY2JtX2NvZGUgJiYKPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbY29zXS5kYXRhID09IGNibV9kYXRhKSkgKQo+ ID4gKyAgICAgICAgaWYgKCAwICE9IGNvcyAmJiAwID09IG1hcFtjb3NdLnJlZiApCj4gCj4gaG93 IGFib3V0IGp1c3Q6Cj4gCj4gaWYgKCBjb3MgJiYgIW1hcFtjb3NdLnJlZiApID8KPiAKWWVzLCB0 aGFua3MhCgo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAgLyog Tm90IGZvdW5kLCBuZWVkIGZpbmQgYWdhaW4gZnJvbSBiZWdpbm5pbmcuICovCj4gPiArICAgICAg ICB2YWxfdG1wID0gdmFsOwo+ID4gKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3Rt cCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAg ICAvKgo+ID4gKyAgICAgICAgICAgICAqIENvbXBhcmUgdmFsdWUgYWNjb3JkaW5nIHRvIGZlYXR1 cmUgbGlzdCBvcmRlci4KPiA+ICsgICAgICAgICAgICAgKiBXZSBtdXN0IGZvbGxvdyB0aGlzIG9y ZGVyIGJlY2F1c2UgdmFsdWUgYXJyYXkgaXMgYXNzZW1ibGVkCj4gPiArICAgICAgICAgICAgICog YXMgdGhpcyBvcmRlciBpbiBnZXRfb2xkX3NldF9uZXcoKS4KPiA+ICsgICAgICAgICAgICAgKi8K PiA+ICsgICAgICAgICAgICByZXQgPSBmZWF0X3RtcC0+b3BzLmNvbXBhcmVfdmFsKHZhbF90bXAs IGZlYXRfdG1wLCBjb3MsICZmb3VuZCk7Cj4gPiArICAgICAgICAgICAgaWYgKCByZXQgPCAwICkK PiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAv KiBJZiBmYWlsIHRvIG1hdGNoLCBnbyB0byBuZXh0IGNvcyB0byBjb21wYXJlLiAqLwo+ID4gKyAg ICAgICAgICAgIGlmICggIWZvdW5kICkKPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgdmFsX3RtcCArPSByZXQ7Cj4gPiArICAgICAgICAgICAgaWYgKCB2 YWxfdG1wIC0gdmFsID4gYXJyYXlfbGVuICkKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvKiBFdmVyeSBmZWF0dXJl IGNhbiBtYXRjaCwgdGhpcyBjb3MgaXMgd2hhdCB3ZSBmaW5kLiAqLwo+IAo+IEkgYW0gbm90IHN1 cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21tZW50Lgo+IApUaGF0IG1lYW5zIGV2ZXJ5IGZlYXR1cmUn cyB2YWx1ZSBpbiAndmFsX3RtcCcgY2FuIGJlIGZvdW5kLiBQZXJoYXBzLCAnQWxsCmZlYXR1cmVz IGNhbiBtYXRjaCcgaXMgYmV0dGVyPwoKPiA+ICsgICAgICAgIGlmICggZm91bmQgKQo+ID4gICAg ICAgICAgICAgIHJldHVybiBjb3M7Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgcmV0dXJuIC1F Tk9FTlQ7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgcGlja19hdmFpbF9jb3Moc3RydWN0 IHBzcl9jYXRfY2JtICptYXAsIHVuc2lnbmVkIGludCBjb3NfbWF4LAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCj4gPiArc3RhdGljIGJvb2wgZXhj ZWVkc19jb3NfbWF4KGNvbnN0IHVpbnQ2NF90ICp2YWwsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGFycmF5X2xlbiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbywKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvcykKPiA+ICt7Cj4gPiArICAgIHVuc2ln bmVkIGludCByZXQ7Cj4gPiArICAgIGNvbnN0IHVpbnQ2NF90ICp2YWxfdG1wID0gdmFsOwo+ID4g KyAgICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ICsKPiA+ICsgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICsg ICAgewo+ID4gKyAgICAgICAgcmV0ID0gZmVhdF90bXAtPm9wcy5leGNlZWRzX2Nvc19tYXgodmFs X3RtcCwgZmVhdF90bXAsIGNvcyk7Cj4gPiArICAgICAgICBpZiAoIDAgPT0gcmV0ICkKPiAKPiBI b3cgYWJvdXQKPiAKPiAgaWYgKCAhcmV0ICkKPiAJcmV0dXJuIGZhbHNlOwo+IApTdXJlLCB0aGFu a3MhCgo+ID4gKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsgICAgICAgIHZh bF90bXAgKz0gcmV0Owo+ID4gKyAgICAgICAgaWYgKCB2YWxfdG1wIC0gdmFsID4gYXJyYXlfbGVu ICkKPiA+ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWxsb2NfbmV3X2Nv cyhjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50NjRfdCAqdmFsLCB1aW50MzJfdCBhcnJheV9sZW4sCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfY29zLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIHBzcl92YWxfdHlwZSB0eXBlKQo+ID4gIHsKPiA+ICAg ICAgdW5zaWduZWQgaW50IGNvczsKPiA+ICsgICAgdW5zaWduZWQgaW50IGNvc19tYXggPSAwOwo+ ID4gKyAgICBjb25zdCBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ICsgICAgY29uc3Qg c3RydWN0IHBzcl9yZWYgKm1hcCA9IGluZm8tPmNvc19yZWY7Cj4gPiArCj4gPiArICAgIC8qCj4g PiArICAgICAqIGNvc19tYXggaXMgdGhlIG1heCBDT1Mgb2YgdGhlIGZlYXR1cmUgdG8gYmUgc2V0 Lgo+ID4gKyAgICAgKi8KPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShmZWF0X3RtcCwgJmlu Zm8tPmZlYXRfbGlzdCwgbGlzdCkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgY29zX21heCA9IGZl YXRfdG1wLT5vcHMuZ2V0X2Nvc19tYXhfZnJvbV90eXBlKGZlYXRfdG1wLCB0eXBlKTsKPiA+ICsg ICAgICAgIGlmICggY29zX21heCA+IDAgKQo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAg ICB9Cj4gPiArCj4gPiArICAgIGlmICggIWNvc19tYXggKQo+ID4gKyAgICAgICAgcmV0dXJuIC1F Tk9FTlQ7Cj4gPiAgCj4gPiAgICAgIC8qIElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25seSBieSB0 aGUgZG9tYWluLCB0aGVuIHVzZSBpdC4gKi8KPiA+ICAgICAgaWYgKCBtYXBbb2xkX2Nvc10ucmVm ID09IDEgJiYgb2xkX2NvcyAhPSAwICkKPiA+IC0gICAgICAgIHJldHVybiBvbGRfY29zOwo+ID4g KyAgICAgICAgaWYgKCBleGNlZWRzX2Nvc19tYXgodmFsLCBhcnJheV9sZW4sIGluZm8sIG9sZF9j b3MpICkKPiA+ICsgICAgICAgICAgICByZXR1cm4gb2xkX2NvczsKPiA+ICAKPiA+ICAgICAgLyog RmluZCBhbiB1bnVzZWQgb25lIG90aGVyIHRoYW4gY29zMC4gKi8KPiA+ICAgICAgZm9yICggY29z ID0gMTsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKPiA+ICsgICAgICAgIC8qCj4gPiArICAgICAg ICAgKiByZWYgaXMgMCBtZWFucyB0aGlzIENPUyBpcyBub3Qgb2NjdXBpZWQgYnkgb3RoZXIgZG9t YWluIGFuZAo+ID4gKyAgICAgICAgICogY2FuIGJlIHVzZWQgZm9yIGN1cnJlbnQgc2V0dGluZy4K PiA+ICsgICAgICAgICAqLwo+ID4gICAgICAgICAgaWYgKCBtYXBbY29zXS5yZWYgPT0gMCApCj4g PiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgaWYgKCAhZXhjZWVkc19jb3NfbWF4KHZhbCwg YXJyYXlfbGVuLCBpbmZvLCBjb3MpICkKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9F TlQ7Cj4gPiArCj4gPiAgICAgICAgICAgICAgcmV0dXJuIGNvczsKPiA+ICsgICAgICAgIH0KPiA+ ICAKPiA+ICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gPiAgfQo+ID4gIAo+ID4gLWludCBwc3Jfc2V0 X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAo+ID4gLSAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBjYm0sIGVudW0gY2JtX3R5cGUgdHlwZSkKPiA+ICtpbnQg cHNyX3NldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKPiA+ICsg ICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCBlbnVtIHBzcl92YWxfdHlwZSB0eXBlKQo+ID4g IHsKPiA+IC0gICAgdW5zaWduZWQgaW50IG9sZF9jb3MsIGNvc19tYXg7Cj4gPiArICAgIHVuc2ln bmVkIGludCBvbGRfY29zOwo+ID4gICAgICBpbnQgY29zLCByZXQ7Cj4gPiAtICAgIHVpbnQ2NF90 IGNibV9kYXRhLCBjYm1fY29kZTsKPiA+IC0gICAgYm9vbF90IGNkcF9lbmFibGVkID0gY2RwX2lz X2VuYWJsZWQoc29ja2V0KTsKPiA+IC0gICAgc3RydWN0IHBzcl9jYXRfY2JtICptYXA7Cj4gPiAt ICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0X2NhdF9zb2NrZXRfaW5m byhzb2NrZXQpOwo+ID4gKyAgICBzdHJ1Y3QgcHNyX3JlZiAqbWFwOwo+ID4gKyAgICB1aW50NjRf dCAqdmFsX2FycmF5Owo+ID4gKyAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvID0gZ2V0 X3NvY2tldF9pbmZvKHNvY2tldCk7Cj4gPiArICAgIHVpbnQzMl90IGFycmF5X2xlbjsKPiA+ICAK PiA+ICAgICAgaWYgKCBJU19FUlIoaW5mbykgKQo+ID4gICAgICAgICAgcmV0dXJuIFBUUl9FUlIo aW5mbyk7Cj4gPiAgCj4gPiAtICAgIGlmICggIXBzcl9jaGVja19jYm0oaW5mby0+Y2JtX2xlbiwg Y2JtKSApCj4gPiAtICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC0gICAgaWYgKCAh Y2RwX2VuYWJsZWQgJiYgKHR5cGUgPT0gUFNSX0NCTV9UWVBFX0wzX0NPREUgfHwKPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT0gUFNSX0NCTV9UWVBFX0wzX0RBVEEpICkKPiA+ IC0gICAgICAgIHJldHVybiAtRU5YSU87Cj4gPiAtCj4gPiAtICAgIGNvc19tYXggPSBpbmZvLT5j b3NfbWF4Owo+ID4gKyAgICBtYXAgPSBpbmZvLT5jb3NfcmVmOwo+ID4gICAgICBvbGRfY29zID0g ZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdOwo+ID4gLSAgICBtYXAgPSBpbmZvLT5jb3NfdG9f Y2JtOwo+ID4gIAo+ID4gLSAgICBzd2l0Y2ggKCB0eXBlICkKPiA+IC0gICAgewo+ID4gLSAgICBj YXNlIFBTUl9DQk1fVFlQRV9MMzoKPiA+IC0gICAgICAgIGNibV9jb2RlID0gY2JtOwo+ID4gLSAg ICAgICAgY2JtX2RhdGEgPSBjYm07Cj4gPiAtICAgICAgICBicmVhazsKPiA+IC0KPiA+IC0gICAg Y2FzZSBQU1JfQ0JNX1RZUEVfTDNfQ09ERToKPiA+IC0gICAgICAgIGNibV9jb2RlID0gY2JtOwo+ ID4gLSAgICAgICAgY2JtX2RhdGEgPSBtYXBbb2xkX2Nvc10uZGF0YTsKPiA+IC0gICAgICAgIGJy ZWFrOwo+ID4gLQo+ID4gLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgo+ID4gLSAgICAg ICAgY2JtX2NvZGUgPSBtYXBbb2xkX2Nvc10uY29kZTsKPiA+IC0gICAgICAgIGNibV9kYXRhID0g Y2JtOwo+ID4gLSAgICAgICAgYnJlYWs7Cj4gPiArICAgIGFycmF5X2xlbiA9IGdldF9jb3NfbnVt KChjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICopaW5mbyk7Cj4gPiArICAgIHZhbF9hcnJh eSA9IHh6YWxsb2NfYXJyYXkodWludDY0X3QsIGFycmF5X2xlbik7Cj4gPiArICAgIGlmICggIXZh bF9hcnJheSApCj4gPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICAKPiA+IC0gICAgZGVm YXVsdDoKPiA+IC0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwo+ID4gLSAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPiAtICAgIH0KPiA+ICsgICAgaWYgKCAocmV0ID0gZ2V0X29sZF9zZXRf bmV3KHZhbF9hcnJheSwgYXJyYXlfbGVuLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKilpbmZvLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2NvcywgdHlwZSwgdmFsKSkgIT0gMCApCj4gPiAr ICAgICAgICByZXR1cm4gcmV0Owo+IAo+IFlvdSBhcmUgbGVha2luZyAndmFsX2FycmF5Jz8gVGhh dCBjYW4ndCBiZSBnb29kLgo+IApPaCwgc29ycnksIEkgbWlzc2VkIGl0LiBUaGFua3MhCgo+ID4g IAo+ID4gLSAgICBzcGluX2xvY2soJmluZm8tPmNibV9sb2NrKTsKPiA+IC0gICAgY29zID0gZmlu ZF9jb3MobWFwLCBjb3NfbWF4LCBjYm1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKPiA+ ICsgICAgc3Bpbl9sb2NrKCZpbmZvLT5tYXNrX2xvY2spOwo+ID4gKyAgICBjb3MgPSBmaW5kX2Nv cygoY29uc3QgdWludDY0X3QgKil2YWxfYXJyYXksIGFycmF5X2xlbiwgdHlwZSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKilpbmZvKTsKPiA+ ICAgICAgaWYgKCBjb3MgPj0gMCApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIGlmICggY29zID09 IG9sZF9jb3MgKQo+ID4gICAgICAgICAgewo+ID4gLSAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZp bmZvLT5jYm1fbG9jayk7Cj4gPiArICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPm1hc2tf bG9jayk7Cj4gPiArICAgICAgICAgICAgeGZyZWUodmFsX2FycmF5KTsKPiA+ICAgICAgICAgICAg ICByZXR1cm4gMDsKPiA+ICAgICAgICAgIH0KPiA+ICAgICAgfQo+ID4gICAgICBlbHNlCj4gPiAg ICAgIHsKPiA+IC0gICAgICAgIGNvcyA9IHBpY2tfYXZhaWxfY29zKG1hcCwgY29zX21heCwgb2xk X2Nvcyk7Cj4gPiArICAgICAgICBjb3MgPSBhbGxvY19uZXdfY29zKChjb25zdCBzdHJ1Y3QgcHNy X3NvY2tldF9pbmZvICopaW5mbywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0IHVpbnQ2NF90ICopdmFsX2FycmF5LCBhcnJheV9sZW4sCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9sZF9jb3MsIHR5cGUpOwo+ID4gICAgICAgICAgaWYgKCBjb3MgPCAwICkK PiA+ICAgICAgICAgIHsKPiA+IC0gICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xv Y2spOwo+ID4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5tYXNrX2xvY2spOwo+ID4g KyAgICAgICAgICAgIHhmcmVlKHZhbF9hcnJheSk7Cj4gPiAgICAgICAgICAgICAgcmV0dXJuIGNv czsKPiA+ICAgICAgICAgIH0KPiA+ICAKPiA+IC0gICAgICAgIC8qIFdlIHRyeSB0byBhdm9pZCB3 cml0aW5nIE1TUi4gKi8KPiA+IC0gICAgICAgIGlmICggKGNkcF9lbmFibGVkICYmCj4gPiAtICAg ICAgICAgICAgIChtYXBbY29zXS5jb2RlICE9IGNibV9jb2RlIHx8IG1hcFtjb3NdLmRhdGEgIT0g Y2JtX2RhdGEpKSB8fAo+ID4gLSAgICAgICAgICAgICAoIWNkcF9lbmFibGVkICYmIG1hcFtjb3Nd LmNibSAhPSBjYm1fY29kZSkgKQo+ID4gKyAgICAgICAgLyogV3JpdGUgYWxsIGZlYXR1cmVzIE1T UnMgY29ycmVzcG9uZGluZyB0byB0aGUgQ09TICovCj4gPiArICAgICAgICByZXQgPSB3cml0ZV9w c3JfbXNyKHNvY2tldCwgY29zLCAoY29uc3QgdWludDY0X3QgKil2YWxfYXJyYXkpOwo+ID4gKyAg ICAgICAgaWYgKCByZXQgKQo+ID4gICAgICAgICAgewo+ID4gLSAgICAgICAgICAgIHJldCA9IHdy aXRlX2wzX2NibShzb2NrZXQsIGNvcywgY2JtX2NvZGUsIGNibV9kYXRhLCBjZHBfZW5hYmxlZCk7 Cj4gPiAtICAgICAgICAgICAgaWYgKCByZXQgKQo+ID4gLSAgICAgICAgICAgIHsKPiA+IC0gICAg ICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKPiA+IC0gICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiA+IC0gICAgICAgICAgICB9Cj4gPiAtICAgICAgICAgICAgbWFw W2Nvc10uY29kZSA9IGNibV9jb2RlOwo+ID4gLSAgICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPSBj Ym1fZGF0YTsKPiA+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+bWFza19sb2NrKTsK PiA+ICsgICAgICAgICAgICB4ZnJlZSh2YWxfYXJyYXkpOwo+ID4gKyAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gPiAgICAgICAgICB9Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgbWFwW2Nvc10u cmVmKys7Cj4gPiAgICAgIG1hcFtvbGRfY29zXS5yZWYtLTsKPiA+IC0gICAgc3Bpbl91bmxvY2so JmluZm8tPmNibV9sb2NrKTsKPiA+ICsKPiA+ICsgICAgc3Bpbl91bmxvY2soJmluZm8tPm1hc2tf bG9jayk7Cj4gPiAgCj4gPiAgICAgIGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XSA9IGNvczsK PiA+ICsgICAgeGZyZWUodmFsX2FycmF5KTsKPiA+ICAKPiA+ICAgICAgcmV0dXJuIDA7Cj4gPiAg fQo+ID4gQEAgLTUyOSwyMCArMTE2NCwyMyBAQCBzdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3Ry dWN0IGRvbWFpbiAqZCkKPiA+ICB7Cj4gPiAgICAgIHVuc2lnbmVkIGludCBzb2NrZXQ7Cj4gPiAg ICAgIHVuc2lnbmVkIGludCBjb3M7Cj4gPiAtICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZv ICppbmZvOwo+ID4gKyAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvOwo+ID4gIAo+ID4g ICAgICBpZiggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQo+ID4gICAgICAgICAgcmV0dXJuOwo+ID4g IAo+ID4gLSAgICBmb3JfZWFjaF9zZXRfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUsIG5y X3NvY2tldHMpCj4gPiArICAgIGZvciggc29ja2V0ID0gMDsgc29ja2V0IDwgbnJfc29ja2V0czsg c29ja2V0KyspCj4gCj4gV3JvbmcgU3R5bGUuIFlvdSBoYXZlIHRoZSAoIGluY29ycmVjdGx5IGFu ZCBhbHNvIHRoZSArKyBuZWVkcyBhIHNwYWNlCj4gYWZ0ZXIgaXQuCgpTb3JyeSwgSSBtaXNzZWQg c3BhY2UuIFRoYW5rcyEKCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIGlmICggKGNvcyA9IGQtPmFy Y2gucHNyX2Nvc19pZHNbc29ja2V0XSkgPT0gMCApCj4gPiAgICAgICAgICAgICAgY29udGludWU7 Cj4gPiAgCj4gPiAtICAgICAgICBpbmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0Owo+ID4g LSAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Cj4gPiAtICAgICAgICBpbmZvLT5j b3NfdG9fY2JtW2Nvc10ucmVmLS07Cj4gPiAtICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2Jt X2xvY2spOwo+ID4gKyAgICAgICAgaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhzb2NrZXQpOwo+ID4g KyAgICAgICAgaWYgKCBJU19FUlIoaW5mbykgKQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ ID4gKwo+ID4gKyAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5tYXNrX2xvY2spOwo+ID4gKyAgICAg ICAgaW5mby0+Y29zX3JlZltjb3NdLnJlZi0tOwo+ID4gKyAgICAgICAgc3Bpbl91bmxvY2soJmlu Zm8tPm1hc2tfbG9jayk7Cj4gPiAgICAgIH0KPiA+ICAKPiA+ICAgICAgeGZyZWUoZC0+YXJjaC5w c3JfY29zX2lkcyk7Cj4gPiBAQCAtNTUxLDcgKzExODksNyBAQCBzdGF0aWMgdm9pZCBwc3JfZnJl ZV9jb3Moc3RydWN0IGRvbWFpbiAqZCkKPiA+ICAKPiA+ICBpbnQgcHNyX2RvbWFpbl9pbml0KHN0 cnVjdCBkb21haW4gKmQpCj4gPiAgewo+ID4gLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCj4g PiArICAgIGlmICggc29ja2V0X2luZm8gKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICBkLT5hcmNo LnBzcl9jb3NfaWRzID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBpbnQsIG5yX3NvY2tldHMpOwo+ ID4gICAgICAgICAgaWYgKCAhZC0+YXJjaC5wc3JfY29zX2lkcyApCj4gPiBAQCAtNTY3LDEzNyAr MTIwNSwxMjYgQEAgdm9pZCBwc3JfZG9tYWluX2ZyZWUoc3RydWN0IGRvbWFpbiAqZCkKPiA+ICAg ICAgcHNyX2ZyZWVfY29zKGQpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IGNhdF9jcHVf cHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQo+ID4gK3N0YXRpYyBpbnQgY3B1X3ByZXBhcmVfd29y ayh1bnNpZ25lZCBpbnQgY3B1KQo+ID4gIHsKPiA+IC0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZv ICkKPiA+ICsgICAgaWYgKCAhc29ja2V0X2luZm8gKQo+ID4gICAgICAgICAgcmV0dXJuIDA7Cj4g PiAgCj4gPiAtICAgIGlmICggdGVtcF9jb3NfdG9fY2JtID09IE5VTEwgJiYKPiA+IC0gICAgICAg ICAodGVtcF9jb3NfdG9fY2JtID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9jYm0sCj4g PiArICAgIGlmICggdGVtcF9jb3NfcmVmID09IE5VTEwgJiYKPiA+ICsgICAgICAgICAodGVtcF9j b3NfcmVmID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX3JlZiwKPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY29zX21heCArIDFVTCkpID09IE5VTEwg KQo+ID4gICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiAgCj4gPiArICAgIC8qIE1hbGxvYyBt ZW1vcnkgZm9yIHRoZSBnbG9iYWwgZmVhdHVyZSBoZWFkIGhlcmUuICovCj4gPiArICAgIGlmICgg ZmVhdF9sMyA9PSBOVUxMICYmCj4gPiArICAgICAgICAgKGZlYXRfbDMgPSB4emFsbG9jKHN0cnVj dCBmZWF0X2xpc3QpKSA9PSBOVUxMICkKPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+IAo+ IC4uIGFuZCBsZWFrIHRlbXBfY29zX3JlZj8KPiAKU29ycnksIHdpbGwgZnJlZSB0ZW1wX2Nvc19y ZWYgaGVyZS4gVGhhbmtzIQoKPiA+ICsKPiA+ICAgICAgcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ ID4gLXN0YXRpYyB2b2lkIGNhdF9jcHVfaW5pdCh2b2lkKQo+ID4gK3N0YXRpYyB2b2lkIGNwdV9p bml0X3dvcmsodm9pZCkKPiA+ICB7Cj4gPiAgICAgIHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4 LCBlZHg7Cj4gPiAtICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvOwo+ID4gKyAg ICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvOwo+ID4gICAgICB1bnNpZ25lZCBpbnQgc29j a2V0Owo+ID4gICAgICB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwo+ID4g LSAgICB1aW50NjRfdCB2YWw7Cj4gPiAgICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9 IGNwdV9kYXRhICsgY3B1Owo+ID4gKyAgICBzdHJ1Y3QgZmVhdF9saXN0ICpmZWF0X3RtcDsKPiA+ ICAKPiA+ICAgICAgaWYgKCAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QUUUpIHx8IGMtPmNwdWlk X2xldmVsIDwgUFNSX0NQVUlEX0xFVkVMX0NBVCApCj4gPiAgICAgICAgICByZXR1cm47Cj4gPiAg Cj4gPiAgICAgIHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1KTsKPiA+IC0gICAgaWYgKCB0ZXN0 X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKSApCj4gPiArICAgIGluZm8gPSBzb2NrZXRf aW5mbyArIHNvY2tldDsKPiA+ICsgICAgaWYgKCBpbmZvLT5mZWF0dXJlcyApCj4gPiAgICAgICAg ICByZXR1cm47Cj4gPiAgCj4gPiArICAgIGluZm8tPmNvc19yZWYgPSB0ZW1wX2Nvc19yZWY7Cj4g PiArICAgIHRlbXBfY29zX3JlZiA9IE5VTEw7Cj4gPiArICAgIHNwaW5fbG9ja19pbml0KCZpbmZv LT5tYXNrX2xvY2spOwo+ID4gKwo+ID4gICAgICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxf Q0FULCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKPiA+ICAgICAgaWYgKCBlYnggJiBQU1Jf UkVTT1VSQ0VfVFlQRV9MMyApCj4gPiAgICAgIHsKPiA+IC0gICAgICAgIGNwdWlkX2NvdW50KFBT Ul9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwo+ID4gLSAgICAg ICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKPiA+IC0gICAgICAgIGluZm8tPmNi bV9sZW4gPSAoZWF4ICYgMHgxZikgKyAxOwo+ID4gLSAgICAgICAgaW5mby0+Y29zX21heCA9IG1p bihvcHRfY29zX21heCwgZWR4ICYgMHhmZmZmKTsKPiA+IC0KPiA+IC0gICAgICAgIGluZm8tPmNv c190b19jYm0gPSB0ZW1wX2Nvc190b19jYm07Cj4gPiAtICAgICAgICB0ZW1wX2Nvc190b19jYm0g PSBOVUxMOwo+ID4gLSAgICAgICAgLyogY29zPTAgaXMgcmVzZXJ2ZWQgYXMgZGVmYXVsdCBjYm0o YWxsIG9uZXMpLiAqLwo+ID4gLSAgICAgICAgaW5mby0+Y29zX3RvX2NibVswXS5jYm0gPSAoMXVs bCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7Cj4gPiArICAgICAgICBmZWF0X3RtcCA9IGZlYXRfbDM7 Cj4gPiArICAgICAgICBmZWF0X2wzID0gTlVMTDsKPiA+ICAKPiA+IC0gICAgICAgIHNwaW5fbG9j a19pbml0KCZpbmZvLT5jYm1fbG9jayk7Cj4gPiAtCj4gPiAtICAgICAgICBzZXRfYml0KHNvY2tl dCwgY2F0X3NvY2tldF9lbmFibGUpOwo+ID4gLQo+ID4gLSAgICAgICAgaWYgKCAoZWN4ICYgUFNS X0NBVF9DRFBfQ0FQQUJJTElUWSkgJiYgKG9wdF9wc3IgJiBQU1JfQ0RQKSAmJgo+ID4gLSAgICAg ICAgICAgICBjZHBfc29ja2V0X2VuYWJsZSAmJiAhdGVzdF9iaXQoc29ja2V0LCBjZHBfc29ja2V0 X2VuYWJsZSkgKQo+ID4gLSAgICAgICAgewo+ID4gLSAgICAgICAgICAgIGluZm8tPmNvc190b19j Ym1bMF0uY29kZSA9ICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMTsKPiA+IC0gICAgICAgICAg ICBpbmZvLT5jb3NfdG9fY2JtWzBdLmRhdGEgPSAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDE7 Cj4gPiAtCj4gPiAtICAgICAgICAgICAgLyogV2Ugb25seSB3cml0ZSBtYXNrMSBzaW5jZSBtYXNr MCBpcyBhbHdheXMgYWxsIG9uZXMgYnkgZGVmYXVsdC4gKi8KPiA+IC0gICAgICAgICAgICB3cm1z cmwoTVNSX0lBMzJfUFNSX0wzX01BU0soMSksICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMSk7 Cj4gPiAtCj4gPiAtICAgICAgICAgICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2 YWwpOwo+ID4gLSAgICAgICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfUU9TX0NGRywgdmFs IHwgKDEgPDwgUFNSX0wzX1FPU19DRFBfRU5BQkxFX0JJVCkpOwo+ID4gLQo+ID4gLSAgICAgICAg ICAgIC8qIEN1dCBoYWxmIG9mIGNvc19tYXggd2hlbiBDRFAgaXMgZW5hYmxlZC4gKi8KPiA+IC0g ICAgICAgICAgICBpbmZvLT5jb3NfbWF4ID4+PSAxOwo+ID4gLQo+ID4gLSAgICAgICAgICAgIHNl dF9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJsZSk7Cj4gPiAtICAgICAgICB9Cj4gPiAtICAg ICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZW5hYmxlZCBvbiBzb2NrZXQgJXUsIGNvc19t YXg6JXUsIGNibV9sZW46JXUsIENEUDolc1xuIiwKPiA+IC0gICAgICAgICAgICAgICBzb2NrZXQs IGluZm8tPmNvc19tYXgsIGluZm8tPmNibV9sZW4sCj4gPiAtICAgICAgICAgICAgICAgY2RwX2lz X2VuYWJsZWQoc29ja2V0KSA/ICJvbiIgOiAib2ZmIik7Cj4gPiArICAgICAgICAvKiBJbml0aWFs aXplIHRoaXMgZmVhdHVyZSBhY2NvcmRpbmcgdG8gQ1BVSUQuICovCj4gPiArICAgICAgICBjcHVp ZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAxLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsK PiA+ICsgICAgICAgIGZlYXRfdG1wLT5vcHMgPSBsM19jYXRfb3BzOwo+ID4gKyAgICAgICAgZmVh dF90bXAtPm9wcy5pbml0X2ZlYXR1cmUoZWF4LCBlYngsIGVjeCwgZWR4LCBmZWF0X3RtcCwgaW5m byk7Cj4gPiAgICAgIH0KPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgY2F0X2NwdV9maW5p KHVuc2lnbmVkIGludCBjcHUpCj4gPiArc3RhdGljIHZvaWQgY3B1X2Zpbmlfd29yayh1bnNpZ25l ZCBpbnQgY3B1KQo+ID4gIHsKPiA+ICAgICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19z b2NrZXQoY3B1KTsKPiA+ICAKPiA+ICAgICAgaWYgKCAhc29ja2V0X2NwdW1hc2tbc29ja2V0XSB8 fCBjcHVtYXNrX2VtcHR5KHNvY2tldF9jcHVtYXNrW3NvY2tldF0pICkKPiA+ICAgICAgewo+ID4g LSAgICAgICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBjYXRfc29ja2V0X2lu Zm8gKyBzb2NrZXQ7Cj4gPiArICAgICAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvID0g Z2V0X3NvY2tldF9pbmZvKHNvY2tldCk7Cj4gPiArCj4gPiArICAgICAgICBmcmVlX2ZlYXR1cmUo aW5mbyk7Cj4gPiAgCj4gPiAtICAgICAgICBpZiAoIGluZm8tPmNvc190b19jYm0gKQo+ID4gKyAg ICAgICAgaWYgKCBpbmZvLT5jb3NfcmVmICkKPiAKPiBVbSwganVzdCBjYWxsZWQgJ2ZyZWVfZmVh dHVyZScgc28gdGhlICdpbmZvJyBoYXMgZ2FyYmFnZS4uCj4gCj4gUGVocmFwcyB5b3Ugc2hvdWxk IGNhbGwgZnJlZV9mZWF0dXJlIGFmdGVyIHlvdSBkb25lIHdpdGggJ2luZm8nCgpTb3JyeSwgY291 bGQgeW91IHBsZWFzZSBleHBsYWluIG1vcmU/CgpQZXIgbXkgZGVzaWduLCAnY3B1X2Zpbmlfd29y aycgaXMgdXNlZCB0byBmcmVlIENQVSByZXNvdXJjZXMgaW4gaW5mbyBidXQKbm90IGluZm8gaXRz ZWxmLiAnZnJlZV9mZWF0dXJlJyBvbmx5IGlzIHVzZWQgdG8gZnJlZSBmZWF0X2xpc3QgYW5kIGZl YXR1cmUKb2JqZWN0cyhlLmcuIGZlYXRfbDMpLiBJIHRoaW5rICdmcmVlX2ZlYXR1cmUnIGNhbiBi ZSBjYWxsZWQgYmVmb3JlIG9yIGFmdGVyCidpZiAoIGluZm8tPmNvc19yZWYgKScuCgo+ID4gICAg ICAgICAgewo+ID4gLSAgICAgICAgICAgIHhmcmVlKGluZm8tPmNvc190b19jYm0pOwo+ID4gLSAg ICAgICAgICAgIGluZm8tPmNvc190b19jYm0gPSBOVUxMOwo+ID4gKyAgICAgICAgICAgIHhmcmVl KGluZm8tPmNvc19yZWYpOwo+ID4gKyAgICAgICAgICAgIGluZm8tPmNvc19yZWYgPSBOVUxMOwo+ ID4gICAgICAgICAgfQo+ID4gLQo+ID4gLSAgICAgICAgaWYgKCBjZHBfaXNfZW5hYmxlZChzb2Nr ZXQpICkKPiA+IC0gICAgICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJs ZSk7Cj4gPiAtCj4gPiAtICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJs ZSk7Cj4gPiAgICAgIH0KPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgX19pbml0IHBzcl9j YXRfZnJlZSh2b2lkKQo+ID4gK3N0YXRpYyB2b2lkIF9faW5pdCBwc3JfZnJlZSh2b2lkKQo+ID4g IHsKPiA+IC0gICAgeGZyZWUoY2F0X3NvY2tldF9lbmFibGUpOwo+ID4gLSAgICBjYXRfc29ja2V0 X2VuYWJsZSA9IE5VTEw7Cj4gPiAtICAgIHhmcmVlKGNhdF9zb2NrZXRfaW5mbyk7Cj4gPiAtICAg IGNhdF9zb2NrZXRfaW5mbyA9IE5VTEw7Cj4gPiArICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ ID4gKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX3NvY2tldHM7IGkrKyApCj4gPiArICAgICAgICBm cmVlX2ZlYXR1cmUoJnNvY2tldF9pbmZvW2ldKTsKPiA+ICsKPiA+ICsgICAgeGZyZWUoc29ja2V0 X2luZm8pOwo+ID4gKyAgICBzb2NrZXRfaW5mbyA9IE5VTEw7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0 YXRpYyB2b2lkIF9faW5pdCBpbml0X3Bzcl9jYXQodm9pZCkKPiA+ICtzdGF0aWMgdm9pZCBfX2lu aXQgaW5pdF9wc3Iodm9pZCkKPiA+ICB7Cj4gPiArICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ ID4gICAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSApCj4gPiAgICAgIHsKPiA+ICAgICAgICAgIHBy aW50ayhYRU5MT0dfSU5GTyAiQ0FUOiBkaXNhYmxlZCwgY29zX21heCBpcyB0b28gc21hbGxcbiIp Owo+ID4gICAgICAgICAgcmV0dXJuOwo+ID4gICAgICB9Cj4gPiAgCj4gPiAtICAgIGNhdF9zb2Nr ZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5y X3NvY2tldHMpKTsKPiA+IC0gICAgY2F0X3NvY2tldF9pbmZvID0geHphbGxvY19hcnJheShzdHJ1 Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbywgbnJfc29ja2V0cyk7Cj4gPiAtICAgIGNkcF9zb2NrZXRf ZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5yX3Nv Y2tldHMpKTsKPiA+ICsgICAgc29ja2V0X2luZm8gPSB4emFsbG9jX2FycmF5KHN0cnVjdCBwc3Jf c29ja2V0X2luZm8sIG5yX3NvY2tldHMpOwo+ID4gKwo+ID4gKyAgICBpZiAoICFzb2NrZXRfaW5m byApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiRmFpbCB0byBh bGxvYyBzb2NrZXRfaW5mbyFcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuOwo+ID4gKyAgICB9Cj4g PiAgCj4gPiAtICAgIGlmICggIWNhdF9zb2NrZXRfZW5hYmxlIHx8ICFjYXRfc29ja2V0X2luZm8g KQo+ID4gLSAgICAgICAgcHNyX2NhdF9mcmVlKCk7Cj4gPiArICAgIGZvciAoIGkgPSAwOyBpIDwg bnJfc29ja2V0czsgaSsrICkKPiA+ICsgICAgICAgIElOSVRfTElTVF9IRUFEKCZzb2NrZXRfaW5m b1tpXS5mZWF0X2xpc3QpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgaW50IHBzcl9jcHVfcHJl cGFyZSh1bnNpZ25lZCBpbnQgY3B1KQo+ID4gIHsKPiA+IC0gICAgcmV0dXJuIGNhdF9jcHVfcHJl cGFyZShjcHUpOwo+ID4gKyAgICByZXR1cm4gY3B1X3ByZXBhcmVfd29yayhjcHUpOwo+ID4gIH0K PiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQodm9pZCkKPiA+ICB7Cj4gPiAtICAg IGlmICggY2F0X3NvY2tldF9pbmZvICkKPiA+IC0gICAgICAgIGNhdF9jcHVfaW5pdCgpOwo+ID4g KyAgICBpZiAoIHNvY2tldF9pbmZvICkKPiA+ICsgICAgICAgIGNwdV9pbml0X3dvcmsoKTsKPiA+ ICAKPiA+ICAgICAgcHNyX2Fzc29jX2luaXQoKTsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHZv aWQgcHNyX2NwdV9maW5pKHVuc2lnbmVkIGludCBjcHUpCj4gPiAgewo+ID4gLSAgICBpZiAoIGNh dF9zb2NrZXRfaW5mbyApCj4gPiAtICAgICAgICBjYXRfY3B1X2ZpbmkoY3B1KTsKPiA+ICsgICAg aWYgKCBzb2NrZXRfaW5mbyApCj4gPiArICAgICAgICBjcHVfZmluaV93b3JrKGNwdSk7Cj4gPiAg fQo+ID4gIAo+ID4gIHN0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKAo+ID4gQEAgLTczOSwxMyArMTM2 NiwxMyBAQCBzdGF0aWMgaW50IF9faW5pdCBwc3JfcHJlc21wX2luaXQodm9pZCkKPiA+ICAgICAg ICAgIGluaXRfcHNyX2NtdChvcHRfcm1pZF9tYXgpOwo+ID4gIAo+ID4gICAgICBpZiAoIG9wdF9w c3IgJiBQU1JfQ0FUICkKPiA+IC0gICAgICAgIGluaXRfcHNyX2NhdCgpOwo+ID4gKyAgICAgICAg aW5pdF9wc3IoKTsKPiA+ICAKPiA+ICAgICAgaWYgKCBwc3JfY3B1X3ByZXBhcmUoMCkgKQo+ID4g LSAgICAgICAgcHNyX2NhdF9mcmVlKCk7Cj4gPiArICAgICAgICBwc3JfZnJlZSgpOwo+ID4gIAo+ ID4gICAgICBwc3JfY3B1X2luaXQoKTsKPiA+IC0gICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8 fCBjYXRfc29ja2V0X2luZm8gKQo+ID4gKyAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IHNv Y2tldF9pbmZvICkKPiA+ICAgICAgICAgIHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7 Cj4gPiAgCj4gPiAgICAgIHJldHVybiAwOwo+ID4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9z eXNjdGwuYyBiL3hlbi9hcmNoL3g4Ni9zeXNjdGwuYwo+ID4gaW5kZXggMTRlN2RjNy4uOGUxN2E5 YSAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9zeXNjdGwuYwo+ID4gKysrIGIveGVuL2Fy Y2gveDg2L3N5c2N0bC5jCj4gPiBAQCAtMTc2LDE1ICsxNzYsMTkgQEAgbG9uZyBhcmNoX2RvX3N5 c2N0bCgKPiA+ICAgICAgICAgIHN3aXRjaCAoIHN5c2N0bC0+dS5wc3JfY2F0X29wLmNtZCApCj4g PiAgICAgICAgICB7Cj4gPiAgICAgICAgICBjYXNlIFhFTl9TWVNDVExfUFNSX0NBVF9nZXRfbDNf aW5mbzoKPiA+IC0gICAgICAgICAgICByZXQgPSBwc3JfZ2V0X2NhdF9sM19pbmZvKHN5c2N0bC0+ dS5wc3JfY2F0X29wLnRhcmdldCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uY2JtX2xlbiwKPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51 LmwzX2luZm8uY29zX21heCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uZmxhZ3MpOwo+ID4gKyAgICAgICAg ewo+ID4gKyAgICAgICAgICAgIHVpbnQzMl90IGRhdFszXTsKPiAKPiBQZXJoYXBzIGEgI2RlZmlu ZSBmb3IgaXQ/CgpEWU0gZGVmaW5lIGEgbWFjcm8gZm9yICd1aW50MzJfdCBkYXRbM10nPwoKPiA+ ICsgICAgICAgICAgICByZXQgPSBwc3JfZ2V0X2luZm8oc3lzY3RsLT51LnBzcl9jYXRfb3AudGFy Z2V0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1JfTUFTS19UWVBFX0wz X0NCTSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0LCAzKTsKPiAKPiBU aGF0IHdheSB5b3UgY2FuIHVzZSB0aGF0IHRoZXJlLgoKU29ycnksIEkgZG8gbm90IHVuZGVyc3Rh bmQgeW91ciBtZWFuaW5nLiBDb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gbW9yZT8gVGhhbmtzIQoK PiA+ICsgICAgICAgICAgICBzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8uY2JtX2xlbiA9 IGRhdFswXTsKPiA+ICsgICAgICAgICAgICBzeXNjdGwtPnUucHNyX2NhdF9vcC51LmwzX2luZm8u Y29zX21heCA9IGRhdFsxXTsKPiA+ICsgICAgICAgICAgICBzeXNjdGwtPnUucHNyX2NhdF9vcC51 LmwzX2luZm8uZmxhZ3MgICA9IGRhdFsyXTsKPiA+ICAKPiA+ICAgICAgICAgICAgICBpZiAoICFy ZXQgJiYgX19jb3B5X2ZpZWxkX3RvX2d1ZXN0KHVfc3lzY3RsLCBzeXNjdGwsIHUucHNyX2NhdF9v cCkgKQo+ID4gICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ID4gICAgICAgICAgICAg IGJyZWFrOwo+ID4gLQo+ID4gKyAgICAgICAgfQo+ID4gICAgICAgICAgZGVmYXVsdDoKPiA+ICAg ICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKPiA+ICAgICAgICAgICAgICBicmVhazsKPiA+ IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3Bzci5oIGIveGVuL2luY2x1ZGUvYXNt LXg4Ni9wc3IuaAo+ID4gaW5kZXggNTdmNDdlOS4uZWY0NmQxMiAxMDA2NDQKPiA+IC0tLSBhL3hl bi9pbmNsdWRlL2FzbS14ODYvcHNyLmgKPiA+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHNy LmgKPiA+IEBAIC00NiwxMCArNDYsMTAgQEAgc3RydWN0IHBzcl9jbXQgewo+ID4gICAgICBzdHJ1 Y3QgcHNyX2NtdF9sMyBsMzsKPiA+ICB9Owo+ID4gIAo+ID4gLWVudW0gY2JtX3R5cGUgewo+ID4g LSAgICBQU1JfQ0JNX1RZUEVfTDMsCj4gPiAtICAgIFBTUl9DQk1fVFlQRV9MM19DT0RFLAo+ID4g LSAgICBQU1JfQ0JNX1RZUEVfTDNfREFUQSwKPiA+ICtlbnVtIHBzcl92YWxfdHlwZSB7Cj4gPiAr ICAgIFBTUl9NQVNLX1RZUEVfTDNfQ0JNLAo+ID4gKyAgICBQU1JfTUFTS19UWVBFX0wzX0NPREUs Cj4gPiArICAgIFBTUl9NQVNLX1RZUEVfTDNfREFUQSwKPiA+ICB9Owo+ID4gIAo+ID4gIGV4dGVy biBzdHJ1Y3QgcHNyX2NtdCAqcHNyX2NtdDsKPiA+IEBAIC02MywxMiArNjMsMTIgQEAgaW50IHBz cl9hbGxvY19ybWlkKHN0cnVjdCBkb21haW4gKmQpOwo+ID4gIHZvaWQgcHNyX2ZyZWVfcm1pZChz dHJ1Y3QgZG9tYWluICpkKTsKPiA+ICB2b2lkIHBzcl9jdHh0X3N3aXRjaF90byhzdHJ1Y3QgZG9t YWluICpkKTsKPiA+ICAKPiA+IC1pbnQgcHNyX2dldF9jYXRfbDNfaW5mbyh1bnNpZ25lZCBpbnQg c29ja2V0LCB1aW50MzJfdCAqY2JtX2xlbiwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCAqY29zX21heCwgdWludDMyX3QgKmZsYWdzKTsKPiA+IC1pbnQgcHNyX2dldF9sM19j Ym0oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKPiA+IC0gICAgICAgICAg ICAgICAgICAgdWludDY0X3QgKmNibSwgZW51bSBjYm1fdHlwZSB0eXBlKTsKPiA+IC1pbnQgcHNy X3NldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKPiA+IC0g ICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtLCBlbnVtIGNibV90eXBlIHR5cGUpOwo+ID4g K2ludCBwc3JfZ2V0X2luZm8odW5zaWduZWQgaW50IHNvY2tldCwgZW51bSBwc3JfdmFsX3R5cGUg dHlwZSwKPiA+ICsgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdFtdLCB1aW50MzJfdCBhcnJh eV9sZW4pOwo+ID4gK2ludCBwc3JfZ2V0X3ZhbChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBp bnQgc29ja2V0LAo+ID4gKyAgICAgICAgICAgICAgICB1aW50NjRfdCAqdmFsLCBlbnVtIHBzcl92 YWxfdHlwZSB0eXBlKTsKPiA+ICtpbnQgcHNyX3NldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgaW50IHNvY2tldCwKPiA+ICsgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCBlbnVt IHBzcl92YWxfdHlwZSB0eXBlKTsKPiA+ICAKPiA+ICBpbnQgcHNyX2RvbWFpbl9pbml0KHN0cnVj dCBkb21haW4gKmQpOwo+ID4gIHZvaWQgcHNyX2RvbWFpbl9mcmVlKHN0cnVjdCBkb21haW4gKmQp Owo+ID4gLS0gCj4gPiAyLjcuNAo+ID4gCj4gPiAKPiA+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiBY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl bAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==