From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lars Lockenvitz" Subject: pom-ng Date: Fri, 03 Sep 2004 09:56:56 +0200 Sender: netfilter-devel-bounces@lists.netfilter.org Message-ID: <1450662352@web.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="STEFAN413823cc5019" Return-path: To: netfilter-devel@lists.netfilter.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netfilter-devel.vger.kernel.org This is a MIME encoded message. --STEFAN413823cc5019 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, the clearcase conntrack diff for pom-ng depends on the rpc modules. I send the diff for pom-ng as attachment. These patch is for kernel 2.4 an= d I don=B4t know how to Integrate, that it works with kernel 2.6. If I make to directories, one for kernel 2.4 and one for 2.6 then it works= .=20 regards >Patrick McHardy schrieb am 02.09.04 22:57:28: > >Lars Lockenvitz wrote: > >>Hi, >> >>I contributed a diff for pom-ng. There was the changes for clearcase con= nection tracking for >kernel 2.4. Now I want that it runs with kernel 2.6,= but the some files like Makefile are different >and I want for kernel 2.6= not have an additional directory. >> >>Could anybody help=3F >> >> >Depending on what it is you may have to. Which patch is it =3F > >Regards >Patrick > =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F WEB.DE Video-Mail - Sagen Sie mehr mit bewegten Bildern Informationen unter: http://freemail.web.de/=3Fmc=3D021199 --STEFAN413823cc5019 Content-Type: application/octet-stream; name="clearcase_diff_output_for_pom-ng" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="clearcase_diff_output_for_pom-ng" ZGlmZiAtcnVOIC4uL3BhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFy Y2FzZS9oZWxwIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2Fz ZS9oZWxwCi0tLSAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVh cmNhc2UvaGVscAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgcGF0 Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2hlbHAJMjAwNC0w OC0yNSAxMDoyMzowMy4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSw2IEBACisgICBUaGlz IGFkZHMgQ09ORklHX0lQX05GX0NMRUFSQ0FTRSwgd2hpY2ggaXMgdGhlIENMRUFSQ0FTRQor ICAgY29ubmVjdGlvbiB0cmFja2VyLgorCisgICBUaGlzIG9wdGlvbiBzdXBwbGllcyB0d28g Y29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGVzOworICAgaXBfY29ubnRyYWNrX2NsZWFyY2Fz ZV91ZHAgYW5kIGlwX2Nvbm50cmFja19jbGVhcmNhc2FlX3RjcCwgd2hpY2ggdHJhY2sKKyAg IGNsZWFyY2FzZSByZXF1ZXN0cyB1c2luZyBVRFAgYW5kIFRDUCByZXNwZWN0aXZlbHkuCmRp ZmYgLXJ1TiAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNh c2UvaW5mbyBwYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2Uv aW5mbwotLS0gLi4vcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJj YXNlL2luZm8JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBhdGNo LW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9pbmZvCTIwMDQtMDgt MjUgMTA6MjE6MTQuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiAi TWFyY2VsbyBCYXJib3NhIExpbWEiIDxtYXJjZWxvLmxpbWFAZGNjLnVuaWNhbXAuYnI+CitT dGF0dXM6IHJlcXVlc3QgZm9yIHBlcm1hbmVudCBpbmNsdXNpb24KK1JlcG9zaXRvcnk6IGV4 dHJhCitSZXF1aXJlczogbGludXggPCAyLjYuMApkaWZmIC1ydU4gLi4vcGF0Y2gtby1tYXRp Yy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L0RvY3VtZW50YXRpb24v Q29uZmlndXJlLmhlbHAubGFkZCBwYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFj a19jbGVhcmNhc2UvbGludXgvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC5sYWRkCi0t LSAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGlu dXgvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC5sYWRkCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKyBwYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50 cmFja19jbGVhcmNhc2UvbGludXgvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC5sYWRk CTIwMDQtMDgtMjUgMDk6NDg6MzguMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTIgQEAK K0NPTkZJR19JUF9ORl9DT05OVFJBQ0sKK0NMRUFSQ0FTRSBwcm90b2NvbCBzdXBwb3J0CitD T05GSUdfSVBfTkZfQ0xFQVJDQVNFCisgIFRoaXMgYWRkcyBDT05GSUdfSVBfTkZfQ0xFQVJD QVNFLCB3aGljaCBpcyB0aGUgQ0xFQVJDQVNFCisgIGNvbm5lY3Rpb24gdHJhY2tlci4KKwor ICBUaGlzIG9wdGlvbiBzdXBwbGllcyB0d28gY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGVz OworICBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcCBhbmQgaXBfY29ubnRyYWNrX2NsZWFy Y2FzYWVfdGNwLCB3aGljaCB0cmFjaworICBjbGVhcmNhc2UgcmVxdWVzdHMgdXNpbmcgVURQ IGFuZCBUQ1AgcmVzcGVjdGl2ZWx5LgorCisgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQg YXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKKyAgPGZpbGU6RG9jdW1lbnRhdGlv bi9tb2R1bGVzLnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCmRpZmYgLXJ1TiAuLi9wYXRj aC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvaW5jbHVk ZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY2xlYXJjYXNlLmggcGF0Y2gt by1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4L2luY2x1ZGUv bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NsZWFyY2FzZS5oCi0tLSAuLi9w YXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvaW5j bHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY2xlYXJjYXNlLmgJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBhdGNoLW8tbWF0aWMtbmct MjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9pbmNsdWRlL2xpbnV4L25ldGZp bHRlcl9pcHY0L2lwX2Nvbm50cmFja19jbGVhcmNhc2UuaAkyMDA0LTA4LTI0IDE0OjI4OjIx LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDY4IEBACisvKiBDTEVBUkNBU0UgZXh0ZW5z aW9uIGZvciBJUCBjb25uZWN0aW9uIHRyYWNraW5nLCBWZXJzaW9uIDIuMgorICogKEMpIDIw MDAgYnkgTWFyY2VsbyBCYXJib3NhIExpbWEgPG1hcmNlbG8ubGltYUBkY2MudW5pY2FtcC5i cj4KKyAqCS0gb3JpZ2luYWwgQ0xFQVJDQVNFIHRyYWNraW5nIG1vZHVsZQorICoJLSAicmVj ZW50IiBjb25uZWN0aW9uIGhhbmRsaW5nIGZvciBrZXJuZWwgMi4zKyBuZXRmaWx0ZXIKKyAq CisgKiAoQykgMjAwMSBieSBSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+ CisgKgktIHVwZ3JhZGVkIGNvbm50cmFjayBtb2R1bGVzIHRvIG9sZG5hdCBhcGkgLSBrZXJu ZWwgMi40LjArCisgKgorICogKEMpIDIwMDIgYnkgSWFuIChMYXJyeSkgTGF0dGVyIDxJYW4u TGF0dGVyQG1xLmVkdS5hdT4KKyAqCS0gdXBncmFkZWQgY29ubnRyYWNrIG1vZHVsZXMgdG8g bmV3bmF0IGFwaSAtIGtlcm5lbCAyLjQuMjArCisgKgktIGV4dGVuZGVkIG1hdGNoaW5nIHRv IHN1cHBvcnQgZmlsdGVyaW5nIG9uIHByb2NlZHVyZXMKKyAqCisgKiBpcF9jb25udHJhY2tf Q0xFQVJDQVNFLmgsdiAyLjIgMjAwMy8wMS8xMiAxODozMDowMAorICoKKyAqCVRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKioKKyAqLworCisjaW5jbHVkZSA8YXNt L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90 aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19o ZWxwZXIuaD4KKworI2lmbmRlZiBfSVBfQ09OTlRSQUNLX0NMRUFSQ0FTRV9ICisjZGVmaW5l IF9JUF9DT05OVFJBQ0tfQ0xFQVJDQVNFX0gKKworI2RlZmluZSBDTEVBUkNBU0VfUE9SVCAg ICAgICAzNzEKKworCisvKiBEYXR1bSBpbiBDTEVBUkNBU0UgcGFja2V0cyBhcmUgZW5jb2Rl ZCBpbiBYRFIgKi8KKyNkZWZpbmUgSVhEUl9HRVRfSU5UMzIoYnVmKSAoKHVfaW50MzJfdCkg bnRvaGwoKHVpbnQzMl90KSpidWYpKQorCisvKiBGYXN0IHRpbWVvdXQsIHRvIGRlbnkgRG9T IGF0dGFja3MgKi8KKyNkZWZpbmUgRVhQICg2MCAqIEhaKQorCisvKiBOb3JtYWwgdGltZW91 dHMgKi8KKyNkZWZpbmUgRVhQSVJFUyAoMTgwICogSFopCisKKy8qIEZvciBmdXR1cmUgY29u ZWN0aW9ucyBDTEVBUkNBU0UsIHVzaW5nIGNsaWVudCdzIGNhY2hlIGJpbmRpbmdzCisgKiBJ J2xsIHVzZSBpcF9jb25udHJhY2tfbG9jayB0byBsb2NrIHRoZXNlIGxpc3RzCSovCisKKy8q IFRoaXMgaWRlbnRpZmllcyBlYWNoIHJlcXVlc3QgYW5kIHN0b3JlcyBwcm90b2NvbCAqLwor c3RydWN0IHJlcXVlc3RfcCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJdV9pbnQz Ml90IHhpZDsgICAKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisJCisJLyog UHJvdG9jb2wgKi8KKwl1X2ludDE2X3QgcHJvdG87CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0 aW1lb3V0OworfTsKKworc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9wX2NtcChjb25zdCBz dHJ1Y3QgcmVxdWVzdF9wICpwLCB1X2ludDMyX3QgeGlkLCAKKwkJCQl1X2ludDMyX3QgaXAs IHVfaW50MzJfdCBwb3J0KSB7CisJcmV0dXJuIChwLT54aWQgPT0geGlkICYmIHAtPmlwID09 IGlwICYmIHAtPnBvcnQpOworCit9CisKKyNlbmRpZiAvKiBfSVBfQ09OTlRSQUNLX0NMRUFS Q0FTRV9IICovCmRpZmYgLXJ1TiAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50 cmFja19jbGVhcmNhc2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL0NvbmZpZy5pbi5sYWRk IHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9u ZXQvaXB2NC9uZXRmaWx0ZXIvQ29uZmlnLmluLmxhZGQKLS0tIC4uL3BhdGNoLW8tbWF0aWMt bmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9uZXQvaXB2NC9uZXRmaWx0 ZXIvQ29uZmlnLmluLmxhZGQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51 eC9uZXQvaXB2NC9uZXRmaWx0ZXIvQ29uZmlnLmluLmxhZGQJMjAwNC0wOC0yNSAxMDozMDo1 OS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwyIEBACitpZiBbICIkQ09ORklHX0lQX05G X0NPTk5UUkFDSyIgIT0gIm4iIF07IHRoZW4KKyAgZGVwX3RyaXN0YXRlICcgIENMRUFSQ0FT RSBwcm90b2NvbCBzdXBwb3J0JyBDT05GSUdfSVBfTkZfQ0xFQVJDQVNFICRDT05GSUdfSVBf TkZfQ09OTlRSQUNLCmRpZmYgLXJ1TiAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nv bm50cmFja19jbGVhcmNhc2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLmxh ZGQgcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4 L25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS5sYWRkCi0tLSAuLi9wYXRjaC1vLW1hdGlj LW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvbmV0L2lwdjQvbmV0Zmls dGVyL01ha2VmaWxlLmxhZGQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51 eC9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUubGFkZAkyMDA0LTA4LTI1IDExOjQ3OjE1 LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDYgQEAKKyMgY29ubmVjdGlvbiB0cmFja2lu ZyBoZWxwZXJzCitvYmotJChDT05GSUdfSVBfTkZfQ0xFQVJDQVNFKSArPSBpcF9jb25udHJh Y2tfY2xlYXJjYXNlX3RjcC5vIGlwX2Nvbm50cmFja19jbGVhcmNhc2VfdWRwLm8KK2lmZGVm IENPTkZJR19JUF9ORl9DTEVBUkNBU0UKKyAgICAgICAgZXhwb3J0LW9ianMgKz0gaXBfY29u bnRyYWNrX2NsZWFyY2FzZV90Y3AubyBpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5vCitl bmRpZgorCmRpZmYgLXJ1TiAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFj a19jbGVhcmNhc2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jbGVh cmNhc2VfdGNwLmMgcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJj YXNlL2xpbnV4L25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3Rj cC5jCi0tLSAuLi9wYXRjaC1vLW1hdGljLW5nLTIwMDQwNjIxL2Nvbm50cmFja19jbGVhcmNh c2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jbGVhcmNhc2VfdGNw LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBhdGNoLW8tbWF0 aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51eC9uZXQvaXB2NC9uZXRm aWx0ZXIvaXBfY29ubnRyYWNrX2NsZWFyY2FzZV90Y3AuYwkyMDA0LTA4LTI0IDE1OjA1OjU2 LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDUxMyBAQAorLyogY2xlYXJjYXNlIGV4dGVu c2lvbiBmb3IgSVAgKFRDUCkgY29ubmVjdGlvbiB0cmFja2luZywgVmVyc2lvbiAyLjIKKyAq IChDKSAyMDAwIGJ5IE1hcmNlbG8gQmFyYm9zYSBMaW1hIDxtYXJjZWxvLmxpbWFAZGNjLnVu aWNhbXAuYnI+CisgKgktIG9yaWdpbmFsIGNsZWFyY2FzZSB0cmFja2luZyBtb2R1bGUKKyAq CS0gInJlY2VudCIgY29ubmVjdGlvbiBoYW5kbGluZyBmb3Iga2VybmVsIDIuMysgbmV0Zmls dGVyCisgKgorICogKEMpIDIwMDEgYnkgUnVzdHkgUnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAu Y29tLmF1PgorICoJLSB1cGdyYWRlZCBjb25udHJhY2sgbW9kdWxlcyB0byBvbGRuYXQgYXBp IC0ga2VybmVsIDIuNC4wKworICoKKyAqIChDKSAyMDAyLDIwMDMgYnkgSWFuIChMYXJyeSkg TGF0dGVyIDxJYW4uTGF0dGVyQG1xLmVkdS5hdT4KKyAqCS0gdXBncmFkZWQgY29ubnRyYWNr IG1vZHVsZXMgdG8gbmV3bmF0IGFwaSAtIGtlcm5lbCAyLjQuMjArCisgKgktIGV4dGVuZGVk IG1hdGNoaW5nIHRvIHN1cHBvcnQgZmlsdGVyaW5nIG9uIHByb2NlZHVyZXMKKyAqCisgKiBp cF9jb25udHJhY2tfY2xlYXJjYXNlX3RjcC5jLHYgMi4yIDIwMDMvMDEvMTIgMTg6MzA6MDAK KyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoqCisgKglN b2R1bGUgbG9hZCBzeW50YXg6CisgKglpbnNtb2QgaXBfY29ubnRyYWNrX2NsZWFyY2FzZV90 Y3AubyBwb3J0cz1wb3J0MSxwb3J0MiwuLi5wb3J0PE1BWF9QT1JUUz4KKyAqCisgKglQbGVh c2UgZ2l2ZSB0aGUgcG9ydHMgb2YgYWxsIGNsZWFyY2FzZSBzZXJ2ZXJzIHlvdSB3aXNoIHRv IGNvbm5lY3QgdG8uCisgKglJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBwb3J0cywgdGhlIGRlZmF1 bHQgd2lsbCBiZSBwb3J0IDExMS4KKyAqKgorICoJTm90ZSB0byBhbGw6CisgKgorICoJY2xl YXJjYXNlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdGhlIGludGVybmV0IC0gYXNrIHRo ZSBQZW50YWdvbjsKKyAqCisgKgkgICJUaGUgdW5pZGVudGlmaWVkIGNyYWNrZXJzIHBsZWFk ZWQgZ3VpbHR5IGluIEp1bHkgdG8gY2hhcmdlcworICoJICAgb2YganV2ZW5pbGUgZGVsaW5x dWVuY3kgc3RlbW1pbmcgZnJvbSBhIHN0cmluZyBvZiBQZW50YWdvbgorICoJICAgbmV0d29y ayBpbnRydXNpb25zIGluIEZlYnJ1YXJ5LgorICoKKyAqCSAgIFRoZSB5b3V0aHMsIGdvaW5n IGJ5IHRoZSBuYW1lcyBUb29TaG9ydCBhbmQgTWFrYXZlbGksIHVzZWQKKyAqCSAgIGEgY29t bW9uIHNlcnZlciBzZWN1cml0eSBob2xlIHRvIGJyZWFrIGluLCBhY2NvcmRpbmcgdG8KKyAq CSAgIERhbmUgSmFzcGVyLCBvd25lciBvZiB0aGUgQ2FsaWZvcm5pYSBJbnRlcm5ldCBzZXJ2 aWNlCisgKgkgICBwcm92aWRlciwgU29uaWMuIFRoZXkgdXNlZCB0aGUgaG9sZSwga25vd24g YXMgdGhlICdzdGF0ZCcKKyAqCSAgIGV4cGxvaXQsIHRvIGF0dGVtcHQgbW9yZSB0aGFuIDgw MCBicmVhay1pbnMsIEphc3BlciBzYWlkLiIKKyAqCisgKglGcm9tOiBXaXJlZCBOZXdzOyAi UGVudGFnb24gS2lkcyBLaWNrZWQgT2ZmIEdyaWQiIC0gTm92IDYsIDE5OTgKKyAqCVVSTDog IGh0dHA6Ly93d3cud2lyZWQuY29tL25ld3MvcG9saXRpY3MvMCwxMjgzLDE2MDk4LDAwLmh0 bWwKKyAqKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPG5l dC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPGFzbS9w YXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGlt ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9sb2NraGVscC5oPgorI2lu Y2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxp bnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY2xlYXJjYXNlLmg+CisKKyNkZWZp bmUgTUFYX1BPUlRTIDgKK3N0YXRpYyBpbnQgcG9ydHNbTUFYX1BPUlRTXTsKK3N0YXRpYyBp bnQgcG9ydHNfbl9jID0gMDsKKworI2lmZGVmIE1PRFVMRV9QQVJNCitNT0RVTEVfUEFSTShw b3J0cywgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX1BPUlRTKSAiaSIpOworTU9EVUxFX1BB Uk1fREVTQyhwb3J0cywgInBvcnQgbnVtYmVycyAoVENQL1RDUCkgb2YgY2xlYXJjYXNlIHBv cnRtYXBwZXIgc2VydmVycyIpOworI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIk1hcmNlbG8g QmFyYm9zYSBMaW1hIDxtYXJjZWxvLmxpbWFAZGNjLnVuaWNhbXAuYnI+Iik7CitNT0RVTEVf REVTQ1JJUFRJT04oImNsZWFyY2FzZSBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUi KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmIDAKKyNkZWZpbmUgREVCVUdQKGZv cm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgImlwX2Nvbm50cmFja19jbGVhcmNh c2VfdGNwOiAiIFwKKwkJCQkJZm9ybWF0LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVC VUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitERUNMQVJFX1JXTE9DSyhpcGN0X2Ns ZWFyY2FzZV90Y3BfbG9jayk7CisjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkgTVVTVF9C RV9SRUFEX0xPQ0tFRCgmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spCisjZGVmaW5lIEFTU0VS VF9XUklURV9MT0NLKHgpIE1VU1RfQkVfV1JJVEVfTE9DS0VEKCZpcGN0X2NsZWFyY2FzZV90 Y3BfbG9jaykKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmg+ CisKKy8qIEZvciBmdXR1cmUgY29uZWN0aW9ucyBjbGVhcmNhc2UsIHVzaW5nIGNsaWVudCdz IGNhY2hlIGJpbmRpbmdzCisgKiBJJ2xsIHVzZSBpcF9jb25udHJhY2tfbG9jayB0byBsb2Nr IHRoZXNlIGxpc3RzICAgICAgICAgICAqLworCitMSVNUX0hFQUQocmVxdWVzdF9wX2xpc3Rf dGNwKTsKKworCitzdGF0aWMgdm9pZCBkZWxldGVfcmVxdWVzdF9wKHVuc2lnbmVkIGxvbmcg cmVxdWVzdF9wX3VsKQoreworCXN0cnVjdCByZXF1ZXN0X3AgKnAgPSAodm9pZCAqKXJlcXVl c3RfcF91bDsKKworCVdSSVRFX0xPQ0soJmlwY3RfY2xlYXJjYXNlX3RjcF9sb2NrKTsKKwlM SVNUX0RFTEVURSgmcmVxdWVzdF9wX2xpc3RfdGNwLCBwKTsKKwlXUklURV9VTkxPQ0soJmlw Y3RfY2xlYXJjYXNlX3RjcF9sb2NrKTsKKwlrZnJlZShwKTsKKwlyZXR1cm47Cit9CisKKwor c3RhdGljIHZvaWQgcmVxX2NsKHN0cnVjdCByZXF1ZXN0X3AgKiByKQoreworCVdSSVRFX0xP Q0soJmlwY3RfY2xlYXJjYXNlX3RjcF9sb2NrKTsKKwlkZWxfdGltZXIoJnItPnRpbWVvdXQp OworCUxJU1RfREVMRVRFKCZyZXF1ZXN0X3BfbGlzdF90Y3AsIHIpOworCVdSSVRFX1VOTE9D SygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOworCWtmcmVlKHIpOworCXJldHVybjsKK30K KworCitzdGF0aWMgdm9pZCBjbGVhbl9yZXF1ZXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Qp Cit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5wcmV2OworCXN0cnVjdCBs aXN0X2hlYWQgKnRlbXAgPSBsaXN0LT5uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKmF1eDsK KworCWlmIChsaXN0X2VtcHR5KGxpc3QpKQorCQlyZXR1cm47CisKKwl3aGlsZSAoZmlyc3Qg IT0gdGVtcCkgeworCQlhdXggPSB0ZW1wLT5uZXh0OworCQlyZXFfY2woKHN0cnVjdCByZXF1 ZXN0X3AgKil0ZW1wKTsKKwkJdGVtcCA9IGF1eDsKKwl9CisJcmVxX2NsKChzdHJ1Y3QgcmVx dWVzdF9wICopdGVtcCk7CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIGFsbG9jX3Jl cXVlc3RfcCh1X2ludDMyX3QgeGlkLCB1X2ludDE2X3QgcHJvdG8sIHVfaW50MzJfdCBpcCwK KwkJICAgICB1X2ludDE2X3QgcG9ydCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9wICpyZXFfcDsK KworCS8qIFZlcmlmaWVzIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJV1JJVEVfTE9D SygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOworCXJlcV9wID0gTElTVF9GSU5EKCZyZXF1 ZXN0X3BfbGlzdF90Y3AsIHJlcXVlc3RfcF9jbXAsCisJCXN0cnVjdCByZXF1ZXN0X3AgKiwg eGlkLCBpcCwgcG9ydCk7CisKKwlpZiAocmVxX3ApIHsKKwkJLyogUmVmcmVzaCB0aW1lb3V0 ICovCisJCWlmIChkZWxfdGltZXIoJnJlcV9wLT50aW1lb3V0KSkgeworCQkJcmVxX3AtPnRp bWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBFWFA7CisJCQlhZGRfdGltZXIoJnJlcV9wLT50 aW1lb3V0KTsKKwkJfQorCQlXUklURV9VTkxPQ0soJmlwY3RfY2xlYXJjYXNlX3RjcF9sb2Nr KTsKKwkJcmV0dXJuOworCisJfQorCVdSSVRFX1VOTE9DSygmaXBjdF9jbGVhcmNhc2VfdGNw X2xvY2spOworCisJLyogQWxsb2NhdGUgbmV3IHJlcXVlc3RfcCAqLworCXJlcV9wID0gKHN0 cnVjdCByZXF1ZXN0X3AgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlcXVlc3RfcCksIEdG UF9BVE9NSUMpOworCWlmICghcmVxX3ApIHsKKyAJCURFQlVHUCgiY2FuJ3QgYWxsb2NhdGUg cmVxdWVzdF9wXG4iKTsKKwkJcmV0dXJuOworCX0KKwkqcmVxX3AgPSAoKHN0cnVjdCByZXF1 ZXN0X3ApIHt7IE5VTEwsIE5VTEwgfSwgeGlkLCBpcCwgcG9ydCwgcHJvdG8sCisJCXsgeyBO VUxMLCBOVUxMIH0sIGppZmZpZXMgKyBFWFAsICh1bnNpZ25lZCBsb25nKXJlcV9wLAorCQkJ TlVMTCB9fSk7CisKKwkvKiBJbml0aWFsaXplIHRpbWVyICovCisJaW5pdF90aW1lcigmcmVx X3AtPnRpbWVvdXQpOworCXJlcV9wLT50aW1lb3V0LmZ1bmN0aW9uID0gZGVsZXRlX3JlcXVl c3RfcDsKKwlhZGRfdGltZXIoJnJlcV9wLT50aW1lb3V0KTsKKworCS8qIFB1dCBpbiBsaXN0 ICovCisJV1JJVEVfTE9DSygmaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOworCWxpc3RfcHJl cGVuZCgmcmVxdWVzdF9wX2xpc3RfdGNwLCByZXFfcCk7CisJV1JJVEVfVU5MT0NLKCZpcGN0 X2NsZWFyY2FzZV90Y3BfbG9jayk7CisJcmV0dXJuOworCit9CisKKworc3RhdGljIGludCBj aGVja19jbGVhcmNhc2VfcGFja2V0KGNvbnN0IHVfaW50MzJfdCAqZGF0YSwKKwkJCWludCBk aXIsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJc3RydWN0IGxpc3RfaGVhZCByZXF1 ZXN0X3BfbGlzdCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9wICpyZXFfcDsKKwl1X2ludDMyX3Qg eGlkOworCXVfaW50MzJfdCBtdHlwZTsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCBl eHBlY3QsICpleHAgPSAmZXhwZWN0OworCisJLyogVHJhbnNsc3Rpb24ncyBidWZmZXIgZm9y IFhEUiAqLworCXVfaW50MzJfdCBwb3J0X2J1ZjsKKworCS8qIEdldCBYSUQgYW5kIE1lc3Nh Z2UgVHlwZSovCisJZGF0YS0tOworCXhpZCA9IG50b2hsKCpkYXRhKTsKKwlkYXRhKys7CisJ bXR5cGUgPSBudG9obCgqZGF0YSk7CisJZGF0YS0tOworCisgCS8qIFRoaXMgZG9lcyBzYW5p dHkgY2hlY2tpbmcgb24gY2xlYXJjYXNlIHBheWxvYWRzLAorCSAqIGFuZCBwZXJtaXRzIG9u bHkgdGhlIGNsZWFyY2FzZSAiZ2V0IHBvcnQiICgzKQorCSAqIGluIGF1dGhvcmlzZWQgcHJv Y2VkdXJlcyBpbiBjbGllbnQKKwkgKiBjb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBwb3J0bWFw cGVyLgorCSAqLworCisJLyogcGVyZm9ybSBkaXJlY3Rpb24gZGVwZW5kYW50IGNsZWFyY2Fz ZSB3b3JrICovCisJaWYgKGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKKworCQlkYXRh ICs9IDU7CisKKwkJLyogR2V0IGNsZWFyY2FzZSByZXF1ZXN0b3IgKi8KKwkJaWYgKElYRFJf R0VUX0lOVDMyKGRhdGEpICE9IDMpIHsKKwkJCURFQlVHUCgiY2xlYXJjYXNlIHBhY2tldCBj b250YWlucyBhbiBpbnZhbGlkIChub24gXCJnZXRcIikgcmVxdWVzdG9yLiBbc2tpcF0gXG4i KTsKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKwkJREVCVUdQKCJjbGVhcmNhc2UgcGFj a2V0IGNvbnRhaW5zIGEgXCJnZXRcIiByZXF1ZXN0b3IuIFtjb250XVxuIik7CisKKwkJZGF0 YSsrOworCisJCS8qIEp1bXAgQ3JlZGVudGlhbHMgYW5kIFZlcmZpZmllciAqLworCQlkYXRh ID0gZGF0YSArIElYRFJfR0VUX0lOVDMyKGRhdGEpICsgMjsKKwkJZGF0YSA9IGRhdGEgKyBJ WERSX0dFVF9JTlQzMihkYXRhKSArIDI7CisKKwkJLyogR2V0IGNsZWFyY2FzZSBwcm9jZWR1 cmUgKi8KKwkJREVCVUdQKCJjbGVhcmNhc2UgcGFja2V0IGNvbnRhaW5zIHByb2NlZHVyZSBy ZXF1ZXN0IFsldV0uIFtjb250XVxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpSVhEUl9HRVRfSU5U MzIoZGF0YSkpOworCisJCS8qIEdldCBjbGVhcmNhc2UgcHJvdG9jb2wgYW5kIHN0b3JlIGFn YWluc3QgY2xpZW50IHBhcmFtZXRlcnMgKi8KKwkJZGF0YSA9IGRhdGEgKyAyOworCQlhbGxv Y19yZXF1ZXN0X3AoeGlkLCBJWERSX0dFVF9JTlQzMihkYXRhKSwgY3QtPnR1cGxlaGFzaFtk aXJdLnR1cGxlLnNyYy5pcCwKKwkJCQljdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUu YWxsKTsKKworCQlERUJVR1AoImFsbG9jYXRlZCBjbGVhcmNhc2UgcmVxX3AgZm9yIHhpZD0l dSAldS4ldS4ldS4ldToldVxuIiwKKwkJCW50b2hsKHhpZCksCisJCQlOSVBRVUFEKGN0LT50 dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXApLAorCQkJbnRvaHMoY3QtPnR1cGxlaGFzaFtk aXJdLnR1cGxlLnNyYy51LmFsbCkpOworCisJfSBlbHNlIHsKKworCQkvKiBDaGVjayBmb3Ig cmV0dXJuaW5nIHBhY2tldCdzIHN0b3JlZCBjb3VudGVycGFydCAqLworCQlyZXFfcCA9IExJ U1RfRklORCgmcmVxdWVzdF9wX2xpc3RfdGNwLCByZXF1ZXN0X3BfY21wLAorCQkJCSAgc3Ry dWN0IHJlcXVlc3RfcCAqLCB4aWQsCisJCQkJICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxl LnNyYy5pcCwKKwkJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudGNwLnBv cnQpOworCisJCS8vIE5leHQgQ29ubmVjdGlvbiB3aWxsIGJlIFRDUAorCQlyZXFfcC0+cHJv dG89NjsKKworCQkvKiBEcm9wIHVuZXhwZWN0ZWQgcGFja2V0cyAqLworCQlpZiAoIXJlcV9w KSB7CisJCQlERUJVR1AoInBhY2tldCBpcyBub3QgZXhwZWN0ZWQuIFtza2lwXVxuIik7CisJ CQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisKKwkJLyogVmVyaWZpZXMgaWYgcGFja2V0IGlz IHJlYWxseSBhbiBjbGVhcmNhc2UgcmVwbHkgcGFja2V0ICovCisJCWRhdGEgKys7CisJCWlm IChJWERSX0dFVF9JTlQzMihkYXRhKSAhPSAxKSB7CisJCQlERUJVR1AoInBhY2tldCBpcyBu b3QgYSB2YWxpZCBjbGVhcmNhc2UgcmVwbHkuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZf QUNDRVBUOworCQl9CisKKwkJLyogSXMgc3RhdHVzIGFjY2VwdD8gKi8KKwkJZGF0YSsrOwor CQlpZiAoSVhEUl9HRVRfSU5UMzIoZGF0YSkpIHsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5v dCBhbiBjbGVhcmNhc2UgYWNjZXB0LiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQ VDsKKwkJfQorCisJCS8qIEdldCBWZXJpZmllciBsZW5ndGguIEp1bXAgdmVyaWZpZXIgKi8K KwkJZGF0YSsrOworCQlkYXRhID0gZGF0YSArIElYRFJfR0VUX0lOVDMyKGRhdGEpICsgMjsK KworCQkvKiBJcyBhY2NwZXQgc3RhdHVzICJzdWNjZXNzIj8gKi8KKwkJaWYgKElYRFJfR0VU X0lOVDMyKGRhdGEpKSB7CisJCQlERUJVR1AoInBhY2tldCBpcyBub3QgYW4gY2xlYXJjYXNl IGFjY2VwdCBzdGF0dXMgb2Ygc3VjY2Vzcy4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9B Q0NFUFQ7CisJCX0KKworCQkvKiBHZXQgc2VydmVyIHBvcnQgbnVtYmVyICovCisJCS8vZGF0 YSsrOworCQlkYXRhICs9IDEwOworCQlwb3J0X2J1ZiA9ICh1X2ludDE2X3QpIElYRFJfR0VU X0lOVDMyKGRhdGEpOworCisJCS8qIElmIGEgcGFja2V0IGhhcyBtYWRlIGl0IHRoaXMgZmFy IHRoZW4gaXQgZGVzZXJ2ZXMgYW4KKwkJICogZXhwZWN0YXRpb24gLi4uICBpZiBwb3J0ID09 IDAsIHRoZW4gdGhpcyBzZXJ2aWNlIGlzCisJCSAqIG5vdCBnb2luZyB0byBiZSByZWdpc3Rl cmVkLgorCQkgKi8KKwkJaWYgKHBvcnRfYnVmKSB7CisJCQlERUJVR1AoInBvcnQgZm91bmQ6 ICV1XG4iLCBwb3J0X2J1Zik7CisKKwkJCW1lbXNldCgmZXhwZWN0LCAwLCBzaXplb2YoZXhw ZWN0KSk7CisKKwkJCS8qIFdhdGNoIG91dCwgUmFkaW9hY3RpdmUtTWFuISAqLworCQkJZXhw LT50dXBsZS5zcmMuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcDsKKwkJ CWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7 CisJCQlleHAtPm1hc2suc3JjLmlwID0gMHhmZmZmZmZmZjsKKwkJCWV4cC0+bWFzay5kc3Qu aXAgPSAweGZmZmZmZmZmOworCisJCQlzd2l0Y2ggKHJlcV9wLT5wcm90bykgeworCQkJCWNh c2UgSVBQUk9UT19VRFA6CisJCQkJCWV4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQgPSAwOwor CQkJCQlleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydF9idWYpOworCQkJ CQlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCQkJCQlleHAtPm1h c2suc3JjLnUudWRwLnBvcnQgPSAwOworCQkJCQlleHAtPm1hc2suZHN0LnUudWRwLnBvcnQg PSBodG9ucygweGZmZmYpOworCQkJCQlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhmZmZm OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSVBQUk9UT19UQ1A6CisJCQkJCWV4cC0+dHVw bGUuc3JjLnUudGNwLnBvcnQgPSAwOworCQkJCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0 ID0gaHRvbnMocG9ydF9idWYpOworCQkJCQlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQ UFJPVE9fVENQOworCQkJCQlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCQkJCQll eHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweGZmZmYpOworCQkJCQlleHAtPm1h c2suZHN0LnByb3RvbnVtID0gMHhmZmZmOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWV4cC0+ ZXhwZWN0Zm4gPSBOVUxMOworCisJCQlpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoY3Qs ICZleHBlY3QpOworCisJCQlERUJVR1AoImV4cGVjdCByZWxhdGVkIGlwICAgJXUuJXUuJXUu JXU6MC0ldS4ldS4ldS4ldToldSBwcm90bz0ldVxuIiwKKwkJCQlOSVBRVUFEKGV4cC0+dHVw bGUuc3JjLmlwKSwKKwkJCQlOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwKKwkJCQlwb3J0 X2J1ZiwgcmVxX3AtPnByb3RvKTsKKworCQkJREVCVUdQKCJleHBlY3QgcmVsYXRlZCBtYXNr ICV1LiV1LiV1LiV1OjAtJXUuJXUuJXUuJXU6NjU1MzUgcHJvdG89JXVcbiIsCisJCQkJTklQ UVVBRChleHAtPm1hc2suc3JjLmlwKSwKKwkJCQlOSVBRVUFEKGV4cC0+bWFzay5kc3QuaXAp LAorCQkJCWV4cC0+bWFzay5kc3QucHJvdG9udW0pOworCisJCX0KKworCQlyZXFfY2wocmVx X3ApOworCisJCURFQlVHUCgicGFja2V0IGV2YWx1YXRlZC4gW2V4cGVjdF1cbiIpOworCQly ZXR1cm4gTkZfQUNDRVBUOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7CisKK30KKworCisv KiBDTEVBUkNBU0UgVENQIGhlbHBlciAqLworc3RhdGljIGludCBoZWxwKGNvbnN0IHN0cnVj dCBpcGhkciAqaXBoLCBzaXplX3QgbGVuLAorCQlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwg ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJc3RydWN0IHRjcGhkciAqdGNw aCA9ICh2b2lkICopIGlwaCArIGlwaC0+aWhsICogNDsKKwljb25zdCB1X2ludDMyX3QgKmRh dGEgPSAoY29uc3QgdV9pbnQzMl90ICopdGNwaCArIHRjcGgtPmRvZmY7CisJc2l6ZV90IHRj cGxlbiA9IGxlbiAtIGlwaC0+aWhsICogNDsKKworCWludCBkaXIgPSBDVElORk8yRElSKGN0 aW5mbyk7CisJaW50IGNycF9yZXQ7CisKKworCURFQlVHUCgibmV3IHBhY2tldCB0byBldmFs dWF0ZSAuLlxuIik7CisKKwkvKiBUaGlzIHdvcmtzIGZvciBwYWNrZXRzIGxpa2UgaGFuZHNo YWtlIHBhY2tldHMsIGlnbm9yZSAqLworCWlmIChsZW4gPT0gKCh0Y3BoLT5kb2ZmICsgaXBo LT5paGwpICogNCkpIHsKKwkJREVCVUdQKCJwYWNrZXQgaGFzIG5vIGRhdGEgKG1heSBzdGls bCBiZSBoYW5kc2hha2luZykuIFtza2lwXVxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJ fQorCisJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBs b29rIGluIHBhY2tldHMuICovCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAm JiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkKKwl7CisJ CURFQlVHUCgiY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBpczsgY3RpbmZvPSV1IC4uXG4i LCBjdGluZm8pOworCQlERUJVR1AoIltub3RlOiBmYWlsdXJlIHRvIGdldCBwYXN0IHRoaXMg ZXJyb3IgbWF5IGluZGljYXRlIGFzeW1tZXRyaWMgcm91dGluZ11cbiIpOworCQlERUJVR1Ao InBhY2tldCBpcyBub3QgeWV0IHBhcnQgb2YgYSB0d28gd2F5IHN0cmVhbS4gW3NraXBdXG4i KTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBOb3Qgd2hvbGUgVENQIGhlYWRl cj8gKi8KKwlpZiAodGNwbGVuIDwgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpIHx8IHRjcGxlbiA8 IHRjcGgtPmRvZmYgKiA0KSB7CisJCURFQlVHUCgiVENQIGhlYWRlciBsZW5ndGggaXM7IHRj cGxlbj0ldSAuLlxuIiwgKHVuc2lnbmVkKSB0Y3BsZW4pOworCQlERUJVR1AoInBhY2tldCBk b2VzIG5vdCBjb250YWluIGEgY29tcGxldGUgVENQIGhlYWRlci4gW3NraXBdXG4iKTsKKwkJ cmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9w dGlvbiBwYWNrZXRzIC0tUlIgKi8KKwlpZiAodGNwX3Y0X2NoZWNrKHRjcGgsIHRjcGxlbiwg aXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCSBjc3VtX3BhcnRpYWwoKGNoYXIgKikgdGNw aCwgdGNwbGVuLCAwKSkpIHsKKwkJREVCVUdQKCJjc3VtOyAlcCAldSAldS4ldS4ldS4ldSAl dS4ldS4ldS4ldVxuIiwKKwkJICAgICB0Y3BoLCB0Y3BsZW4sIE5JUFFVQUQoaXBoLT5zYWRk ciksCisJCSAgICAgTklQUVVBRChpcGgtPmRhZGRyKSk7CisJCURFQlVHUCgiW25vdGU6IGZh aWx1cmUgdG8gZ2V0IHBhc3QgdGhpcyBlcnJvciBtYXkgaW5kaWNhdGUgc291cmNlIHJvdXRp bmddXG4iKTsKKwkJREVCVUdQKCJwYWNrZXQgY29udGFpbnMgYSBiYWQgY2hlY2tzdW0uIFtz a2lwXVxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJLyogcGVyZm9ybSBkaXJl Y3Rpb24gZGVwZW5kYW50IHByb3RvY29sIHdvcmsgKi8KKwlpZiAoZGlyID09IElQX0NUX0RJ Ul9PUklHSU5BTCkgeworCisJCURFQlVHUCgicGFja2V0IGlzIGZyb20gdGhlIGluaXRpYXRv ci4gW2NvbnRdXG4iKTsKKworCQkvKiBUZXN0cyBpZiBwYWNrZXQgbGVuIGlzIG9rICovCisJ CWlmICgodGNwbGVuIC0gKHRjcGgtPmRvZmYgKiA0KSkgIT0gMTQwKSB7CisJCQlERUJVR1Ao InBhY2tldCBsZW5ndGggaXMgbm90IGNvcnJlY3QuIFtza2lwXVxuIik7CisJCQlyZXR1cm4g TkZfQUNDRVBUOworCQl9CisKKwl9IGVsc2UgeworCisJCURFQlVHUCgicGFja2V0IGlzIGZy b20gdGhlIHJlY2VpdmVyLiBbY29udF1cbiIpOworCisJCS8qIFRlc3RzIGlmIHBhY2tldCBs ZW4gaXMgb2sgKi8KKwkJaWYgKCh0Y3BsZW4gLSAodGNwaC0+ZG9mZiAqIDQpKSAhPSA2NCkg eworCQkJREVCVUdQKCJwYWNrZXQgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0LiBbc2tpcF1cbiIp OworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCX0KKworCS8qIEdldCB0byB0aGUgZGF0 YSAqLworCWRhdGErKzsKKworCS8qIENoZWNrIHRoZSBDTEVBUkNBU0UgZGF0YSAqLworCWNy cF9yZXQgPSBjaGVja19jbGVhcmNhc2VfcGFja2V0KGRhdGEsIGRpciwgY3QsIHJlcXVlc3Rf cF9saXN0X3RjcCk7CisKKwlyZXR1cm4gY3JwX3JldDsKKworfQorCisKK3N0YXRpYyBzdHJ1 Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBjbGVhcmNhc2VfaGVscGVyc1tNQVhfUE9SVFNdOwor CitzdGF0aWMgdm9pZCBmaW5pKHZvaWQpOworCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQo dm9pZCkKK3sKKwlpbnQgcG9ydCwgcmV0OworCXN0YXRpYyBjaGFyIG5hbWVbMTBdOworCisK KwkvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIENMRUFSQ0FTRSBw b3J0ICovCisJaWYgKHBvcnRzWzBdID09IDApCisJCXBvcnRzWzBdID0gQ0xFQVJDQVNFX1BP UlQ7CisKKwlmb3IgKHBvcnQgPSAwOyAocG9ydCA8IE1BWF9QT1JUUykgJiYgcG9ydHNbcG9y dF07IHBvcnQrKykgeworCQltZW1zZXQoJmNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLCAwLCBz aXplb2Yoc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIpKTsKKworICAgICAgICAgICAgICAg IGlmIChwb3J0c1twb3J0XSA9PSBDTEVBUkNBU0VfUE9SVCkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHNwcmludGYobmFtZSwgImNsZWFyY2FzZSIpOworICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobmFtZSwgImNsZWFyY2FzZS0l ZCIsIHBvcnQpOworCisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm5hbWUgPSBuYW1lOwor CQljbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tZSA9IFRISVNfTU9EVUxFOworCQljbGVhcmNh c2VfaGVscGVyc1twb3J0XS5tYXhfZXhwZWN0ZWQgPSAxOworCQljbGVhcmNhc2VfaGVscGVy c1twb3J0XS5mbGFncyA9IElQX0NUX0hFTFBFUl9GX1JFVVNFX0VYUEVDVDsKKwkJY2xlYXJj YXNlX2hlbHBlcnNbcG9ydF0udGltZW91dCA9IDA7CisKKwkJY2xlYXJjYXNlX2hlbHBlcnNb cG9ydF0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJCWNsZWFyY2FzZV9o ZWxwZXJzW3BvcnRdLm1hc2suZHN0LnByb3RvbnVtID0gMHhmZmZmOworCisJCS8qIENMRUFS Q0FTRSBjYW4gY29tZSBmcm9tIHBvcnRzIDA6NjU1MzUgdG8gcG9ydHNbcG9ydF0gKDExMSkg Ki8KKwkJY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuc3JjLnUudGNwLnBvcnQgPSBo dG9ucyhwb3J0c1twb3J0XSk7CisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1hc2suc3Jj LnUudGNwLnBvcnQgPSBodG9ucygweGZmZmYpOworCQljbGVhcmNhc2VfaGVscGVyc1twb3J0 XS5tYXNrLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMoMHgwKTsKKworCQljbGVhcmNhc2VfaGVs cGVyc1twb3J0XS5oZWxwID0gaGVscDsKKworCQlERUJVR1AoInJlZ2lzdGVyaW5nIGhlbHBl ciBmb3IgcG9ydCAjJWQ6ICVkL1RDUFxuIiwgcG9ydCwgcG9ydHNbcG9ydF0pOworCQlERUJV R1AoImhlbHBlciBtYXRjaCBpcCAgICV1LiV1LiV1LiV1OiV1LT4ldS4ldS4ldS4ldToldVxu IiwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuZHN0LmlwKSwK KwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLmRzdC51LnRjcC5wb3J0 KSwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuc3JjLmlwKSwK KwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLnNyYy51LnRjcC5wb3J0 KSk7CisJCURFQlVHUCgiaGVscGVyIG1hdGNoIG1hc2sgJXUuJXUuJXUuJXU6JXUtPiV1LiV1 LiV1LiV1OiV1XG4iLAorCQkJTklQUVVBRChjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNr LmRzdC5pcCksCisJCQludG9ocyhjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNrLmRzdC51 LnRjcC5wb3J0KSwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFzay5z cmMuaXApLAorCQkJbnRvaHMoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFzay5zcmMudS50 Y3AucG9ydCkpOworCisJCXJldCA9IGlwX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmNs ZWFyY2FzZV9oZWxwZXJzW3BvcnRdKTsKKworCQlpZiAocmV0KSB7CisJCQlwcmludGsoIkVS Uk9SIHJlZ2lzdGVyaW5nIHBvcnQgJWRcbiIsCisJCQkJcG9ydHNbcG9ydF0pOworCQkJZmlu aSgpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlwb3J0c19uX2MrKzsKKwl9CisJcmV0 dXJuIDA7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IF9OT1Rf IGRlZmluZWQgYXMgX19leGl0LCBiZWNhdXNlCisgKiBpdCBpcyBuZWVkZWQgYnkgdGhlIGlu aXQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGZpbmkodm9pZCkKK3sKKwlpbnQgcG9ydDsK KworCURFQlVHUCgiY2xlYW5pbmcgcmVxdWVzdCBsaXN0XG4iKTsKKwljbGVhbl9yZXF1ZXN0 KCZyZXF1ZXN0X3BfbGlzdF90Y3ApOworCisJZm9yIChwb3J0ID0gMDsgKHBvcnQgPCBwb3J0 c19uX2MpICYmIHBvcnRzW3BvcnRdOyBwb3J0KyspIHsKKwkJREVCVUdQKCJ1bnJlZ2lzdGVy aW5nIHBvcnQgJWRcbiIsIHBvcnRzW3BvcnRdKTsKKwkJaXBfY29ubnRyYWNrX2hlbHBlcl91 bnJlZ2lzdGVyKCZjbGVhcmNhc2VfaGVscGVyc1twb3J0XSk7CisJfQorfQorCisKK21vZHVs ZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CisKK3N0cnVjdCBtb2R1bGUgKmlw X2Nvbm50cmFja19jbGVhcmNhc2VfdGNwID0gVEhJU19NT0RVTEU7CitFWFBPUlRfU1lNQk9M KHJlcXVlc3RfcF9saXN0X3RjcCk7CitFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja19jbGVh cmNhc2VfdGNwKTsKK0VYUE9SVF9TWU1CT0woaXBjdF9jbGVhcmNhc2VfdGNwX2xvY2spOwpk aWZmIC1ydU4gLi4vcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJj YXNlL2xpbnV4L25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3Vk cC5jIHBhdGNoLW8tbWF0aWMtbmctMjAwNDA2MjEvY29ubnRyYWNrX2NsZWFyY2FzZS9saW51 eC9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NsZWFyY2FzZV91ZHAuYwotLS0g Li4vcGF0Y2gtby1tYXRpYy1uZy0yMDA0MDYyMS9jb25udHJhY2tfY2xlYXJjYXNlL2xpbnV4 L25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcC5jCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBwYXRjaC1vLW1hdGljLW5nLTIw MDQwNjIxL2Nvbm50cmFja19jbGVhcmNhc2UvbGludXgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lw X2Nvbm50cmFja19jbGVhcmNhc2VfdWRwLmMJMjAwNC0wOC0yNCAxNTowNzo1NS4wMDAwMDAw MDAgKzAyMDAKQEAgLTAsMCArMSw1MTUgQEAKKy8qIGNsZWFyY2FzZSBleHRlbnNpb24gZm9y IElQIChVRFApIGNvbm5lY3Rpb24gdHJhY2tpbmcsIFZlcnNpb24gMi4yCisgKiAoQykgMjAw MCBieSBNYXJjZWxvIEJhcmJvc2EgTGltYSA8bWFyY2Vsby5saW1hQGRjYy51bmljYW1wLmJy PgorICoJLSBvcmlnaW5hbCBjbGVhcmNhc2UgdHJhY2tpbmcgbW9kdWxlCisgKgktICJyZWNl bnQiIGNvbm5lY3Rpb24gaGFuZGxpbmcgZm9yIGtlcm5lbCAyLjMrIG5ldGZpbHRlcgorICoK KyAqIChDKSAyMDAxIGJ5IFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4K KyAqCS0gdXBncmFkZWQgY29ubnRyYWNrIG1vZHVsZXMgdG8gb2xkbmF0IGFwaSAtIGtlcm5l bCAyLjQuMCsKKyAqCisgKiAoQykgMjAwMiwyMDAzIGJ5IElhbiAoTGFycnkpIExhdHRlciA8 SWFuLkxhdHRlckBtcS5lZHUuYXU+CisgKgktIHVwZ3JhZGVkIGNvbm50cmFjayBtb2R1bGVz IHRvIG5ld25hdCBhcGkgLSBrZXJuZWwgMi40LjIwKworICoJLSBleHRlbmRlZCBtYXRjaGlu ZyB0byBzdXBwb3J0IGZpbHRlcmluZyBvbiBwcm9jZWR1cmVzCisgKgorICogaXBfY29ubnRy YWNrX2NsZWFyY2FzZV91ZHAuYyx2IDIuMiAyMDAzLzAxLzEyIDE4OjMwOjAwCisgKgorICoJ VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqKgorICoJTW9kdWxlIGxv YWQgc3ludGF4OgorICoJaW5zbW9kIGlwX2Nvbm50cmFja19jbGVhcmNhc2VfdWRwLm8gcG9y dHM9cG9ydDEscG9ydDIsLi4ucG9ydDxNQVhfUE9SVFM+CisgKgorICoJUGxlYXNlIGdpdmUg dGhlIHBvcnRzIG9mIGFsbCBjbGVhcmNhc2Ugc2VydmVycyB5b3Ugd2lzaCB0byBjb25uZWN0 IHRvLgorICoJSWYgeW91IGRvbid0IHNwZWNpZnkgcG9ydHMsIHRoZSBkZWZhdWx0IHdpbGwg YmUgcG9ydCAxMTEuCisgKioKKyAqCU5vdGUgdG8gYWxsOgorICoKKyAqCWNsZWFyY2FzZXMg c2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHRoZSBpbnRlcm5ldCAtIGFzayB0aGUgUGVudGFn b247CisgKgorICoJICAiVGhlIHVuaWRlbnRpZmllZCBjcmFja2VycyBwbGVhZGVkIGd1aWx0 eSBpbiBKdWx5IHRvIGNoYXJnZXMKKyAqCSAgIG9mIGp1dmVuaWxlIGRlbGlucXVlbmN5IHN0 ZW1taW5nIGZyb20gYSBzdHJpbmcgb2YgUGVudGFnb24KKyAqCSAgIG5ldHdvcmsgaW50cnVz aW9ucyBpbiBGZWJydWFyeS4KKyAqCisgKgkgICBUaGUgeW91dGhzLCBnb2luZyBieSB0aGUg bmFtZXMgVG9vU2hvcnQgYW5kIE1ha2F2ZWxpLCB1c2VkCisgKgkgICBhIGNvbW1vbiBzZXJ2 ZXIgc2VjdXJpdHkgaG9sZSB0byBicmVhayBpbiwgYWNjb3JkaW5nIHRvCisgKgkgICBEYW5l IEphc3Blciwgb3duZXIgb2YgdGhlIENhbGlmb3JuaWEgSW50ZXJuZXQgc2VydmljZQorICoJ ICAgcHJvdmlkZXIsIFNvbmljLiBUaGV5IHVzZWQgdGhlIGhvbGUsIGtub3duIGFzIHRoZSAn c3RhdGQnCisgKgkgICBleHBsb2l0LCB0byBhdHRlbXB0IG1vcmUgdGhhbiA4MDAgYnJlYWst aW5zLCBKYXNwZXIgc2FpZC4iCisgKgorICoJRnJvbTogV2lyZWQgTmV3czsgIlBlbnRhZ29u IEtpZHMgS2lja2VkIE9mZiBHcmlkIiAtIE5vdiA2LCAxOTk4CisgKglVUkw6ICBodHRwOi8v d3d3LndpcmVkLmNvbS9uZXdzL3BvbGl0aWNzLzAsMTI4MywxNjA5OCwwMC5odG1sCisgKioK KyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0 ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tz dW0uaD4KKyNpbmNsdWRlIDxuZXQvdWRwLmg+CisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4K KyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Cisj aW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisj aW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbG9ja2hlbHAuaD4KKyNpbmNsdWRlIDxs aW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRm aWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0 ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NsZWFyY2FzZS5oPgorCisjZGVmaW5lIE1BWF9Q T1JUUyA4CitzdGF0aWMgaW50IHBvcnRzW01BWF9QT1JUU107CitzdGF0aWMgaW50IHBvcnRz X25fYyA9IDA7CisKKyNpZmRlZiBNT0RVTEVfUEFSTQorTU9EVUxFX1BBUk0ocG9ydHMsICIx LSIgX19NT0RVTEVfU1RSSU5HKE1BWF9QT1JUUykgImkiKTsKK01PRFVMRV9QQVJNX0RFU0Mo cG9ydHMsICJwb3J0IG51bWJlcnMgKFRDUC9VRFApIG9mIGNsZWFyY2FzZSBwb3J0bWFwcGVy IHNlcnZlcnMiKTsKKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJNYXJjZWxvIEJhcmJvc2Eg TGltYSA8bWFyY2Vsby5saW1hQGRjYy51bmljYW1wLmJyPiIpOworTU9EVUxFX0RFU0NSSVBU SU9OKCJjbGVhcmNhc2UgVURQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIik7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFy Z3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJpcF9jb25udHJhY2tfY2xlYXJjYXNlX3VkcDog IiBcCisJCQkJCWZvcm1hdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3Jt YXQsIGFyZ3MuLi4pCisjZW5kaWYKKworREVDTEFSRV9SV0xPQ0soaXBjdF9jbGVhcmNhc2Vf dWRwX2xvY2spOworI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpIE1VU1RfQkVfUkVBRF9M T0NLRUQoJmlwY3RfY2xlYXJjYXNlX3VkcF9sb2NrKQorI2RlZmluZSBBU1NFUlRfV1JJVEVf TE9DSyh4KSBNVVNUX0JFX1dSSVRFX0xPQ0tFRCgmaXBjdF9jbGVhcmNhc2VfdWRwX2xvY2sp CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgorCisvKiBG b3IgZnV0dXJlIGNvbmVjdGlvbnMgY2xlYXJjYXNlLCB1c2luZyBjbGllbnQncyBjYWNoZSBi aW5kaW5ncworICogSSdsbCB1c2UgaXBfY29ubnRyYWNrX2xvY2sgdG8gbG9jayB0aGVzZSBs aXN0cyAgICAgICAgICAgKi8KKworTElTVF9IRUFEKHJlcXVlc3RfcF9saXN0X3VkcCk7CisK Kworc3RhdGljIHZvaWQgZGVsZXRlX3JlcXVlc3RfcCh1bnNpZ25lZCBsb25nIHJlcXVlc3Rf cF91bCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9wICpwID0gKHZvaWQgKilyZXF1ZXN0X3BfdWw7 CisKKwlXUklURV9MT0NLKCZpcGN0X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJTElTVF9ERUxF VEUoJnJlcXVlc3RfcF9saXN0X3VkcCwgcCk7CisJV1JJVEVfVU5MT0NLKCZpcGN0X2NsZWFy Y2FzZV91ZHBfbG9jayk7CisJa2ZyZWUocCk7CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2 b2lkIHJlcV9jbChzdHJ1Y3QgcmVxdWVzdF9wICogcikKK3sKKwlXUklURV9MT0NLKCZpcGN0 X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJZGVsX3RpbWVyKCZyLT50aW1lb3V0KTsKKwlMSVNU X0RFTEVURSgmcmVxdWVzdF9wX2xpc3RfdWRwLCByKTsKKwlXUklURV9VTkxPQ0soJmlwY3Rf Y2xlYXJjYXNlX3VkcF9sb2NrKTsKKwlrZnJlZShyKTsKKwlyZXR1cm47Cit9CisKKworc3Rh dGljIHZvaWQgY2xlYW5fcmVxdWVzdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0 cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0gbGlzdC0+cHJldjsKKwlzdHJ1Y3QgbGlzdF9oZWFk ICp0ZW1wID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICphdXg7CisKKwlpZiAo bGlzdF9lbXB0eShsaXN0KSkKKwkJcmV0dXJuOworCisJd2hpbGUgKGZpcnN0ICE9IHRlbXAp IHsKKwkJYXV4ID0gdGVtcC0+bmV4dDsKKwkJcmVxX2NsKChzdHJ1Y3QgcmVxdWVzdF9wICop dGVtcCk7CisJCXRlbXAgPSBhdXg7CisJfQorCXJlcV9jbCgoc3RydWN0IHJlcXVlc3RfcCAq KXRlbXApOworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBhbGxvY19yZXF1ZXN0X3Ao dV9pbnQzMl90IHhpZCwgdV9pbnQxNl90IHByb3RvLCB1X2ludDMyX3QgaXAsCisJCSAgICAg dV9pbnQxNl90IHBvcnQpCit7CisJc3RydWN0IHJlcXVlc3RfcCAqcmVxX3A7CisKKwkvKiBW ZXJpZmllcyBpZiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCVdSSVRFX0xPQ0soJmlwY3Rf Y2xlYXJjYXNlX3VkcF9sb2NrKTsKKwlyZXFfcCA9IExJU1RfRklORCgmcmVxdWVzdF9wX2xp c3RfdWRwLCByZXF1ZXN0X3BfY21wLAorCQlzdHJ1Y3QgcmVxdWVzdF9wICosIHhpZCwgaXAs IHBvcnQpOworCisJaWYgKHJlcV9wKSB7CisJCS8qIFJlZnJlc2ggdGltZW91dCAqLworCQlp ZiAoZGVsX3RpbWVyKCZyZXFfcC0+dGltZW91dCkpIHsKKwkJCXJlcV9wLT50aW1lb3V0LmV4 cGlyZXMgPSBqaWZmaWVzICsgRVhQOworCQkJYWRkX3RpbWVyKCZyZXFfcC0+dGltZW91dCk7 CisJCX0KKwkJV1JJVEVfVU5MT0NLKCZpcGN0X2NsZWFyY2FzZV91ZHBfbG9jayk7CisJCXJl dHVybjsKKworCX0KKwlXUklURV9VTkxPQ0soJmlwY3RfY2xlYXJjYXNlX3VkcF9sb2NrKTsK KworCS8qIEFsbG9jYXRlIG5ldyByZXF1ZXN0X3AgKi8KKwlyZXFfcCA9IChzdHJ1Y3QgcmVx dWVzdF9wICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3ApLCBHRlBfQVRPTUlD KTsKKwlpZiAoIXJlcV9wKSB7CisgCQlERUJVR1AoImNhbid0IGFsbG9jYXRlIHJlcXVlc3Rf cFxuIik7CisJCXJldHVybjsKKwl9CisJKnJlcV9wID0gKChzdHJ1Y3QgcmVxdWVzdF9wKSB7 eyBOVUxMLCBOVUxMIH0sIHhpZCwgaXAsIHBvcnQsIHByb3RvLAorCQl7IHsgTlVMTCwgTlVM TCB9LCBqaWZmaWVzICsgRVhQLCAodW5zaWduZWQgbG9uZylyZXFfcCwKKwkJCU5VTEwgfX0p OworCisJLyogSW5pdGlhbGl6ZSB0aW1lciAqLworCWluaXRfdGltZXIoJnJlcV9wLT50aW1l b3V0KTsKKwlyZXFfcC0+dGltZW91dC5mdW5jdGlvbiA9IGRlbGV0ZV9yZXF1ZXN0X3A7CisJ YWRkX3RpbWVyKCZyZXFfcC0+dGltZW91dCk7CisKKwkvKiBQdXQgaW4gbGlzdCAqLworCVdS SVRFX0xPQ0soJmlwY3RfY2xlYXJjYXNlX3VkcF9sb2NrKTsKKwlsaXN0X3ByZXBlbmQoJnJl cXVlc3RfcF9saXN0X3VkcCwgcmVxX3ApOworCVdSSVRFX1VOTE9DSygmaXBjdF9jbGVhcmNh c2VfdWRwX2xvY2spOworCXJldHVybjsKKworfQorCisKK3N0YXRpYyBpbnQgY2hlY2tfY2xl YXJjYXNlX3BhY2tldChjb25zdCB1X2ludDMyX3QgKmRhdGEsCisJCQlpbnQgZGlyLCBzdHJ1 Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgcmVxdWVzdF9wX2xp c3QpCit7CisJc3RydWN0IHJlcXVlc3RfcCAqcmVxX3A7CisJdV9pbnQzMl90IHhpZDsKKwl1 X2ludDMyX3QgbXR5cGU7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgZXhwZWN0LCAq ZXhwID0gJmV4cGVjdDsKKworCS8qIFRyYW5zbHN0aW9uJ3MgYnVmZmVyIGZvciBYRFIgKi8K Kwl1X2ludDMyX3QgcG9ydF9idWY7CisKKworCS8qIEdldCBYSUQgYW5kIE1lc3NhZ2UgVHlw ZSovCisJeGlkID0gKmRhdGE7CisJZGF0YSsrOworCW10eXBlID0gbnRvaGwoKmRhdGEpOwor CWRhdGEtLTsKKworIAkvKiBUaGlzIGRvZXMgc2FuaXR5IGNoZWNraW5nIG9uIGNsZWFyY2Fz ZSBwYXlsb2FkcywKKwkgKiBhbmQgcGVybWl0cyBvbmx5IHRoZSBjbGVhcmNhc2UgImdldCBw b3J0IiAoMykKKwkgKiBpbiBhdXRob3Jpc2VkIHByb2NlZHVyZXMgaW4gY2xpZW50CisJICog Y29tbXVuaWNhdGlvbnMgd2l0aCB0aGUgcG9ydG1hcHBlci4KKwkgKi8KKworCS8qIHBlcmZv cm0gZGlyZWN0aW9uIGRlcGVuZGFudCBjbGVhcmNhc2Ugd29yayAqLworCWlmIChkaXIgPT0g SVBfQ1RfRElSX09SSUdJTkFMKSB7CisKKwkJZGF0YSArPSA1OworCisJCS8qIEdldCBjbGVh cmNhc2UgcmVxdWVzdG9yICovCisJCWlmIChJWERSX0dFVF9JTlQzMihkYXRhKSAhPSAzKSB7 CisJCQlERUJVR1AoImNsZWFyY2FzZSBwYWNrZXQgY29udGFpbnMgYW4gaW52YWxpZCAobm9u IFwiZ2V0XCIpIHJlcXVlc3Rvci4gW3NraXBdIFxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBU OworCQl9CisJCURFQlVHUCgiY2xlYXJjYXNlIHBhY2tldCBjb250YWlucyBhIFwiZ2V0XCIg cmVxdWVzdG9yLiBbY29udF1cbiIpOworCisJCWRhdGErKzsKKworCQkvKiBKdW1wIENyZWRl bnRpYWxzIGFuZCBWZXJmaWZpZXIgKi8KKwkJZGF0YSA9IGRhdGEgKyBJWERSX0dFVF9JTlQz MihkYXRhKSArIDI7CisJCWRhdGEgPSBkYXRhICsgSVhEUl9HRVRfSU5UMzIoZGF0YSkgKyAy OworCisJCS8qIEdldCBjbGVhcmNhc2UgcHJvY2VkdXJlICovCisJCURFQlVHUCgiY2xlYXJj YXNlIHBhY2tldCBjb250YWlucyBwcm9jZWR1cmUgcmVxdWVzdCBbJXVdLiBbY29udF1cbiIs CisJCQkodW5zaWduZWQgaW50KUlYRFJfR0VUX0lOVDMyKGRhdGEpKTsKKworCQkvKiBHZXQg Y2xlYXJjYXNlIHByb3RvY29sIGFuZCBzdG9yZSBhZ2FpbnN0IGNsaWVudCBwYXJhbWV0ZXJz ICovCisJCWRhdGEgPSBkYXRhICsgMjsKKwkJYWxsb2NfcmVxdWVzdF9wKHhpZCwgSVhEUl9H RVRfSU5UMzIoZGF0YSksIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAsCisJCQkJ Y3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51LmFsbCk7CisKKwkJREVCVUdQKCJhbGxv Y2F0ZWQgY2xlYXJjYXNlIHJlcV9wIGZvciB4aWQ9JXUgJXUuJXUuJXUuJXU6JXVcbiIsCisJ CQludG9obCh4aWQpLAorCQkJTklQUVVBRChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3Jj LmlwKSwKKwkJCW50b2hzKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS5hbGwpKTsK KworCS8vCURFQlVHUCgiYWxsb2NhdGVkIGNsZWFyY2FzZSByZXF1ZXN0IGZvciBwcm90b2Nv bCAldS4gW2RvbmVdXG4iLAorCS8vCQkodW5zaWduZWQgaW50KUlYRFJfR0VUX0lOVDMyKGRh dGEpKTsKKworCX0gZWxzZSB7CisKKwkJLyogQ2hlY2sgZm9yIHJldHVybmluZyBwYWNrZXQn cyBzdG9yZWQgY291bnRlcnBhcnQgKi8KKwkJcmVxX3AgPSBMSVNUX0ZJTkQoJnJlcXVlc3Rf cF9saXN0X3VkcCwgcmVxdWVzdF9wX2NtcCwKKwkJCQkgIHN0cnVjdCByZXF1ZXN0X3AgKiwg eGlkLAorCQkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXAsCisJCQkJICBj dC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51LnRjcC5wb3J0KTsKKworCQkvLyBOZXh0 IENvbm5lY3Rpb24gd2lsbCBiZSBUQ1AKKwkJcmVxX3AtPnByb3RvPTY7CisKKwkJLyogRHJv cCB1bmV4cGVjdGVkIHBhY2tldHMgKi8KKwkJaWYgKCFyZXFfcCkgeworCQkJREVCVUdQKCJw YWNrZXQgaXMgbm90IGV4cGVjdGVkLiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQ VDsKKwkJfQorCisJCS8qIFZlcmlmaWVzIGlmIHBhY2tldCBpcyByZWFsbHkgYW4gY2xlYXJj YXNlIHJlcGx5IHBhY2tldCAqLworCQlkYXRhKys7CisJCWlmIChJWERSX0dFVF9JTlQzMihk YXRhKSAhPSAxKSB7CisJCQlERUJVR1AoInBhY2tldCBpcyBub3QgYSB2YWxpZCBjbGVhcmNh c2UgcmVwbHkuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisKKwkJ LyogSXMgc3RhdHVzIGFjY2VwdD8gKi8KKwkJZGF0YSsrOworCQlpZiAoSVhEUl9HRVRfSU5U MzIoZGF0YSkpIHsKKwkJCURFQlVHUCgicGFja2V0IGlzIG5vdCBhbiBjbGVhcmNhc2UgYWNj ZXB0LiBbc2tpcF1cbiIpOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCisJCS8qIEdl dCBWZXJpZmllciBsZW5ndGguIEp1bXAgdmVyaWZpZXIgKi8KKwkJZGF0YSsrOworCQlkYXRh ID0gZGF0YSArIElYRFJfR0VUX0lOVDMyKGRhdGEpICsgMjsKKworCQkvKiBJcyBhY2NwZXQg c3RhdHVzICJzdWNjZXNzIj8gKi8KKwkJaWYgKElYRFJfR0VUX0lOVDMyKGRhdGEpKSB7CisJ CQlERUJVR1AoInBhY2tldCBpcyBub3QgYW4gY2xlYXJjYXNlIGFjY2VwdCBzdGF0dXMgb2Yg c3VjY2Vzcy4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKworCQkv KiBHZXQgc2VydmVyIHBvcnQgbnVtYmVyICovCisJCS8vZGF0YSsrOworCQlkYXRhICs9IDEw OworCQlwb3J0X2J1ZiA9ICh1X2ludDE2X3QpIElYRFJfR0VUX0lOVDMyKGRhdGEpOworCisJ CS8qIElmIGEgcGFja2V0IGhhcyBtYWRlIGl0IHRoaXMgZmFyIHRoZW4gaXQgZGVzZXJ2ZXMg YW4KKwkJICogZXhwZWN0YXRpb24gLi4uICBpZiBwb3J0ID09IDAsIHRoZW4gdGhpcyBzZXJ2 aWNlIGlzCisJCSAqIG5vdCBnb2luZyB0byBiZSByZWdpc3RlcmVkLgorCQkgKi8KKwkJaWYg KHBvcnRfYnVmKSB7CisJCQlERUJVR1AoInBvcnQgZm91bmQ6ICV1XG4iLCBwb3J0X2J1Zik7 CisKKwkJCW1lbXNldCgmZXhwZWN0LCAwLCBzaXplb2YoZXhwZWN0KSk7CisKKwkJCS8qIFdh dGNoIG91dCwgUmFkaW9hY3RpdmUtTWFuISAqLworCQkJZXhwLT50dXBsZS5zcmMuaXAgPSBj dC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcDsKKwkJCWV4cC0+dHVwbGUuZHN0Lmlw ID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJCQlleHAtPm1hc2suc3Jj LmlwID0gMHhmZmZmZmZmZjsKKwkJCWV4cC0+bWFzay5kc3QuaXAgPSAweGZmZmZmZmZmOwor CisJCQlERUJVR1AoInJlcV9wLT5wcm90bzogJXVcbiIscmVxX3AtPnByb3RvKTsKKworCQkJ c3dpdGNoIChyZXFfcC0+cHJvdG8pIHsKKwkJCQljYXNlIElQUFJPVE9fVURQOgorCQkJCQll eHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gMDsKKwkJCQkJZXhwLT50dXBsZS5kc3QudS51 ZHAucG9ydCA9IGh0b25zKHBvcnRfYnVmKTsKKwkJCQkJZXhwLT50dXBsZS5kc3QucHJvdG9u dW0gPSBJUFBST1RPX1VEUDsKKwkJCQkJZXhwLT5tYXNrLnNyYy51LnVkcC5wb3J0ID0gMDsK KwkJCQkJZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMoMHhmZmZmKTsKKwkJCQkJ ZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4ZmZmZjsKKwkJCQkJYnJlYWs7CisKKwkJCQlj YXNlIElQUFJPVE9fVENQOgorCQkJCQlleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gMDsK KwkJCQkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnRfYnVmKTsKKwkJ CQkJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwkJCQkJZXhwLT5t YXNrLnNyYy51LnRjcC5wb3J0ID0gMDsKKwkJCQkJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0 ID0gaHRvbnMoMHhmZmZmKTsKKwkJCQkJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4ZmZm ZjsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlleHAtPmV4cGVjdGZuID0gTlVMTDsKKworCQkJ aXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGN0LCAmZXhwZWN0KTsKKworCQkJREVCVUdQ KCJleHBlY3QgcmVsYXRlZCBpcCAgICV1LiV1LiV1LiV1OjAtJXUuJXUuJXUuJXU6JXUgcHJv dG89JXVcbiIsCisJCQkJTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksCisJCQkJTklQUVVB RChleHAtPnR1cGxlLmRzdC5pcCksCisJCQkJcG9ydF9idWYsIHJlcV9wLT5wcm90byk7CisK KwkJCURFQlVHUCgiZXhwZWN0IHJlbGF0ZWQgbWFzayAldS4ldS4ldS4ldTowLSV1LiV1LiV1 LiV1OjY1NTM1IHByb3RvPSV1XG4iLAorCQkJCU5JUFFVQUQoZXhwLT5tYXNrLnNyYy5pcCks CisJCQkJTklQUVVBRChleHAtPm1hc2suZHN0LmlwKSwKKwkJCQlleHAtPm1hc2suZHN0LnBy b3RvbnVtKTsKKworCQl9CisKKwkJcmVxX2NsKHJlcV9wKTsKKworCQlERUJVR1AoInBhY2tl dCBldmFsdWF0ZWQuIFtleHBlY3RdXG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisK KwlyZXR1cm4gTkZfQUNDRVBUOworCit9CisKKworLyogY2xlYXJjYXNlIFVEUCBoZWxwZXIg Ki8KK3N0YXRpYyBpbnQgaGVscChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgc2l6ZV90IGxl biwKKwkJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8g Y3RpbmZvKQoreworCXN0cnVjdCB1ZHBoZHIgKnVkcGggPSAodm9pZCAqKSBpcGggKyBpcGgt PmlobCAqIDQ7CisJY29uc3QgdV9pbnQzMl90ICpkYXRhID0gKGNvbnN0IHVfaW50MzJfdCAq KXVkcGggKyAyOworCXNpemVfdCB1ZHBsZW4gPSBsZW4gLSBpcGgtPmlobCAqIDQ7CisJaW50 IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgY3JwX3JldDsKKworCisJLyogQ2hl Y2tzdW0gKi8KKwljb25zdCB1X2ludDE2X3QgKmNoc20gPSAoY29uc3QgdV9pbnQxNl90ICop dWRwaCArIDM7CisKKworCURFQlVHUCgibmV3IHBhY2tldCB0byBldmFsdWF0ZSAuLlxuIik7 CisKKwkvKiBOb3Qgd2hvbGUgVURQIGhlYWRlcj8gKi8KKwlpZiAodWRwbGVuIDwgc2l6ZW9m KHN0cnVjdCB1ZHBoZHIpKSB7CisJCURFQlVHUCgiVURQIGhlYWRlciBsZW5ndGggaXM7IHVk cGxlbj0ldSAuLlxuIiwgKHVuc2lnbmVkKSB1ZHBsZW4pOworCQlERUJVR1AoInBhY2tldCBk b2VzIG5vdCBjb250YWluIGEgY29tcGxldGUgVURQIGhlYWRlci4gW3NraXBdXG4iKTsKKwkJ cmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9w dGlvbiBwYWNrZXRzIC0tUlIgKi8KKwlpZiAoKmNoc20pIHsKKwkJaWYgKGNzdW1fdGNwdWRw X21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHVkcGxlbiwgSVBQUk9UT19VRFAsCisJ CSAgICBjc3VtX3BhcnRpYWwoKGNoYXIgKil1ZHBoLCB1ZHBsZW4sIDApKSkgeworCQkJREVC VUdQKCJbbm90ZTogZmFpbHVyZSB0byBnZXQgcGFzdCB0aGlzIGVycm9yIG1heSBpbmRpY2F0 ZSBzb3VyY2Ugcm91dGluZ11cbiIpOworCQkJREVCVUdQKCJwYWNrZXQgY29udGFpbnMgYSBi YWQgY2hlY2tzdW0uIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQkgICB9 CisJfQorCisJLyogcGVyZm9ybSBkaXJlY3Rpb24gZGVwZW5kYW50IHByb3RvY29sIHdvcmsg Ki8KKwlpZiAoZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCkgeworCisJCURFQlVHUCgicGFj a2V0IGlzIGZyb20gdGhlIGluaXRpYXRvci4gW2NvbnRdXG4iKTsKKworCQkvKiBUZXN0cyBp ZiBwYWNrZXQgbGVuIGlzIG9rICovCisJCWlmICgodWRwbGVuIC0gc2l6ZW9mKHN0cnVjdCB1 ZHBoZHIpKSAhPSAxNDApIHsKKwkJCURFQlVHUCgicGFja2V0IGxlbmd0aCBpcyBub3QgY29y cmVjdC4gW3NraXBdXG4iKTsKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKworCX0gZWxz ZSB7CisKKwkJREVCVUdQKCJwYWNrZXQgaXMgZnJvbSB0aGUgcmVjZWl2ZXIuIFtjb250XVxu Iik7CisKKwkJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24n dCBsb29rIGluIHBhY2tldHMuICovCisJCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNI RUQgKyBJUF9DVF9JU19SRVBMWSkgeworCQkJREVCVUdQKCJjb25uZWN0aW9uIHRyYWNraW5n IHN0YXRlIGlzOyBjdGluZm89JXUgLi5cbiIsIGN0aW5mbyk7CisJCQlERUJVR1AoIltub3Rl OiBmYWlsdXJlIHRvIGdldCBwYXN0IHRoaXMgZXJyb3IgbWF5IGluZGljYXRlIGFzeW1tZXRy aWMgcm91dGluZ11cbiIpOworCQkJREVCVUdQKCJwYWNrZXQgaXMgbm90IHlldCBwYXJ0IG9m IGEgdHdvIHdheSBzdHJlYW0uIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOwor CQl9CisKKwkJLyogVGVzdHMgaWYgcGFja2V0IGxlbiBpcyBvayAqLworCQkJaWYgKCh1ZHBs ZW4gLSBzaXplb2Yoc3RydWN0IHVkcGhkcikpICE9IDY0KSB7CisJCQlERUJVR1AoInBhY2tl dCBsZW5ndGggaXMgbm90IGNvcnJlY3QuIFtza2lwXVxuIik7CisJCQlyZXR1cm4gTkZfQUND RVBUOworCQl9CisKKwl9CisKKwkvKiBHZXQgdG8gdGhlIGRhdGEgKi8KKwkvKiB1ZHAgKmRh dGEgPT0gKmNvcnJlY3QgKi8KKworCS8qIENoZWNrIHRoZSBjbGVhcmNhc2UgZGF0YSAqLwor CWNycF9yZXQgPSBjaGVja19jbGVhcmNhc2VfcGFja2V0KGRhdGEsIGRpciwgY3QsIHJlcXVl c3RfcF9saXN0X3VkcCk7CisKKwlyZXR1cm4gY3JwX3JldDsKKworfQorCisKK3N0YXRpYyBz dHJ1Y3QgaXBfY29ubnRyYWNrX2hlbHBlciBjbGVhcmNhc2VfaGVscGVyc1tNQVhfUE9SVFNd OworCitzdGF0aWMgdm9pZCBmaW5pKHZvaWQpOworCisKK3N0YXRpYyBpbnQgX19pbml0IGlu aXQodm9pZCkKK3sKKwlpbnQgcG9ydCwgcmV0OworCXN0YXRpYyBjaGFyIG5hbWVbMTBdOwor CisKKwkvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGNsZWFyY2Fz ZSBwb3J0ICovCisJaWYgKHBvcnRzWzBdID09IDApCisJCXBvcnRzWzBdID0gQ0xFQVJDQVNF X1BPUlQ7CisKKwlmb3IgKHBvcnQgPSAwOyAocG9ydCA8IE1BWF9QT1JUUykgJiYgcG9ydHNb cG9ydF07IHBvcnQrKykgeworCQltZW1zZXQoJmNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLCAw LCBzaXplb2Yoc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIpKTsKKworICAgICAgICAgICAg ICAgIGlmIChwb3J0c1twb3J0XSA9PSBDTEVBUkNBU0VfUE9SVCkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNwcmludGYobmFtZSwgImNsZWFyY2FzZSIpOworICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobmFtZSwgImNsZWFyY2Fz ZS0lZCIsIHBvcnQpOworCisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm5hbWUgPSBuYW1l OworCQljbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tZSA9IFRISVNfTU9EVUxFOworCQljbGVh cmNhc2VfaGVscGVyc1twb3J0XS5tYXhfZXhwZWN0ZWQgPSAxOworCQljbGVhcmNhc2VfaGVs cGVyc1twb3J0XS5mbGFncyA9IElQX0NUX0hFTFBFUl9GX1JFVVNFX0VYUEVDVDsKKwkJY2xl YXJjYXNlX2hlbHBlcnNbcG9ydF0udGltZW91dCA9IDA7CisKKwkJY2xlYXJjYXNlX2hlbHBl cnNbcG9ydF0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCWNsZWFyY2Fz ZV9oZWxwZXJzW3BvcnRdLm1hc2suZHN0LnByb3RvbnVtID0gMHhmZmZmOworCisJCS8qIGNs ZWFyY2FzZSBjYW4gY29tZSBmcm9tIHBvcnRzIDA6NjU1MzUgdG8gcG9ydHNbcG9ydF0gKDEx MSkgKi8KKwkJY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuc3JjLnUudWRwLnBvcnQg PSBodG9ucyhwb3J0c1twb3J0XSk7CisJCWNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLm1hc2su c3JjLnUudWRwLnBvcnQgPSBodG9ucygweGZmZmYpOworCQljbGVhcmNhc2VfaGVscGVyc1tw b3J0XS5tYXNrLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMoMHgwKTsKKworCQljbGVhcmNhc2Vf aGVscGVyc1twb3J0XS5oZWxwID0gaGVscDsKKworCQlERUJVR1AoInJlZ2lzdGVyaW5nIGhl bHBlciBmb3IgcG9ydCAjJWQ6ICVkL1VEUFxuIiwgcG9ydCwgcG9ydHNbcG9ydF0pOworCQlE RUJVR1AoImhlbHBlciBtYXRjaCBpcCAgICV1LiV1LiV1LiV1OiV1LT4ldS4ldS4ldS4ldTol dVxuIiwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuZHN0Lmlw KSwKKwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLmRzdC51LnVkcC5w b3J0KSwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0udHVwbGUuc3JjLmlw KSwKKwkJCW50b2hzKGNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdLnR1cGxlLnNyYy51LnVkcC5w b3J0KSk7CisJCURFQlVHUCgiaGVscGVyIG1hdGNoIG1hc2sgJXUuJXUuJXUuJXU6JXUtPiV1 LiV1LiV1LiV1OiV1XG4iLAorCQkJTklQUVVBRChjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5t YXNrLmRzdC5pcCksCisJCQludG9ocyhjbGVhcmNhc2VfaGVscGVyc1twb3J0XS5tYXNrLmRz dC51LnVkcC5wb3J0KSwKKwkJCU5JUFFVQUQoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFz ay5zcmMuaXApLAorCQkJbnRvaHMoY2xlYXJjYXNlX2hlbHBlcnNbcG9ydF0ubWFzay5zcmMu dS51ZHAucG9ydCkpOworCisJCXJldCA9IGlwX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIo JmNsZWFyY2FzZV9oZWxwZXJzW3BvcnRdKTsKKworCQlpZiAocmV0KSB7CisJCQlwcmludGso IkVSUk9SIHJlZ2lzdGVyaW5nIHBvcnQgJWRcbiIsCisJCQkJcG9ydHNbcG9ydF0pOworCQkJ ZmluaSgpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlwb3J0c19uX2MrKzsKKwl9CisJ cmV0dXJuIDA7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IF9O T1RfIGRlZmluZWQgYXMgX19leGl0LCBiZWNhdXNlCisgKiBpdCBpcyBuZWVkZWQgYnkgdGhl IGluaXQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGZpbmkodm9pZCkKK3sKKwlpbnQgcG9y dDsKKworCURFQlVHUCgiY2xlYW5pbmcgcmVxdWVzdCBsaXN0XG4iKTsKKwljbGVhbl9yZXF1 ZXN0KCZyZXF1ZXN0X3BfbGlzdF91ZHApOworCisJZm9yIChwb3J0ID0gMDsgKHBvcnQgPCBw b3J0c19uX2MpICYmIHBvcnRzW3BvcnRdOyBwb3J0KyspIHsKKwkJREVCVUdQKCJ1bnJlZ2lz dGVyaW5nIHBvcnQgJWRcbiIsIHBvcnRzW3BvcnRdKTsKKwkJaXBfY29ubnRyYWNrX2hlbHBl cl91bnJlZ2lzdGVyKCZjbGVhcmNhc2VfaGVscGVyc1twb3J0XSk7CisJfQorfQorCisKK21v ZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CisKK3N0cnVjdCBtb2R1bGUg KmlwX2Nvbm50cmFja19jbGVhcmNhc2VfdWRwID0gVEhJU19NT0RVTEU7CitFWFBPUlRfU1lN Qk9MKHJlcXVlc3RfcF9saXN0X3VkcCk7CitFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja19j bGVhcmNhc2VfdWRwKTsKK0VYUE9SVF9TWU1CT0woaXBjdF9jbGVhcmNhc2VfdWRwX2xvY2sp OworCg== --STEFAN413823cc5019--