From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clark Williams Subject: [PATCH 2/2] netrate - network rate/rtt measurement utility Date: Tue, 21 Oct 2008 22:40:29 -0500 Message-ID: <20081021224029.0853b2ac@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: base64 To: Thomas Gleixner , RT Return-path: Received: from qw-out-2122.google.com ([74.125.92.24]:64323 "EHLO qw-out-2122.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751086AbYJVDkk (ORCPT ); Tue, 21 Oct 2008 23:40:40 -0400 Received: by qw-out-2122.google.com with SMTP id 3so794838qwe.37 for ; Tue, 21 Oct 2008 20:40:39 -0700 (PDT) Sender: linux-rt-users-owner@vger.kernel.org List-ID: LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBMQ0KDQoNCi0gRnJv bSAxZWNkZWI3ZjQ4MzAyYTJlYThhMzdmZDhhZWNkOTAwODE2MzdlMGRjIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpE YXRlOiBUaHUsIDIgT2N0IDIwMDggMTc6MjY6MDUgLTA1MDANClN1YmplY3Q6IFtQQVRDSF0gY29u c29saWRhdGUgaW50byBjb21tb24NCg0KY29uc29saWRhdGVkIGJvdGggcnR0IGFuZCB0cmFuc21p dCB0byB1c2Ugc2FtZSBzb2NrZXQgc2V0dXAgZnVuY3Rpb247IGFkZGVkIGV4Y2hhbmdlIGNvZGUg YW5kIGRhZW1vbiBtb2RlOyByZW1vdmVkIC0tc2VydmVyIGFuZCAtLXJlY2VpdmU7IGFkZGVkIHZl cnNpb25pbmcNCg0KU2lnbmVkLW9mZi1ieTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhh dC5jb20+DQotIC0tLQ0KIGNvbW1vbi5jICAgfCAgIDgyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKw0KIG1haW4uYyAgICAgfCAgMTQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQ0KIG5ldHJhdGUuaCAgfCAgIDI4ICsr KysrKysrKy0tLQ0KIHJlY2VpdmUuYyAgfCAgIDcxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KIHJ0dC5jICAgICAgfCAgIDUxICstLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHNlcnZlci5j ICAgfCAgIDc0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB0cmFuc21pdC5jIHwg ICA1MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiA3IGZpbGVzIGNoYW5nZWQsIDIzNyBpbnNlcnRp b25zKCspLCAyNjUgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9jb21tb24uYyBiL2NvbW1v bi5jDQppbmRleCA0OGNkNGU5Li44ZWQwNTkwIDEwMDY0NA0KLSAtLS0gYS9jb21tb24uYw0KKysr IGIvY29tbW9uLmMNCkBAIC00MzMsMyArNDMzLDg1IEBAIGZyZWVfaGlzdG9ncmFtKHN0cnVjdCBo aXN0b2dyYW0gKmgpDQogCWZyZWUoaCk7DQogfQ0KIA0KKy8qDQorICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQor ICogc29ja2V0IHN0dWZmDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICovDQorDQoraW50DQorbmV0cmF0 ZV90eF9zb2NrZXQoaW50IHByb3RvY29sLCBpbnQgcG9ydCwgaW50IHJlcXVlc3QpDQorew0KKwlp bnQgcmV0Ow0KKwlpbnQgc29jazsNCisJaW50IHZhbDsNCisJY2hhciBwb3J0c3RyaW5nWzEwXTsN CisJc3RydWN0IGFkZHJpbmZvICphaSwgaGludHM7DQorCXN0cnVjdCBuZXRyYXRlX2V4Y2hhbmdl IGV4Ow0KKw0KKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsNCisJaGludHMuYWlf ZmxhZ3MgPSBBSV9DQU5PTk5BTUU7DQorCWhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ7DQorCWhp bnRzLmFpX3NvY2t0eXBlID0gdHlwZTsNCisJaGludHMuYWlfcHJvdG9jb2wgPSBwcm90b2NvbDsN CisJc3ByaW50Zihwb3J0c3RyaW5nLCAiJWQiLCBwb3J0KTsNCisNCisJcmV0ID0gZ2V0YWRkcmlu Zm8oaG9zdG5hbWUsIHBvcnRzdHJpbmcsICZoaW50cywgJmFpKTsNCisJaWYgKHJldCkgew0KKwkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBmcm9tIGdldGFkZHJpbmZvOiAlc1xuIiwgc3RyZXJyb3Io cmV0KSk7DQorCQlyZXR1cm4gLXJldDsNCisJfQ0KKw0KKwlzb2NrID0gc29ja2V0KGFpLT5haV9m YW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsNCisJaWYgKHNvY2sgPCAw KSB7DQorCQlwZXJyb3IoInRyYW5zbWl0IHNvY2tldCgpIik7DQorCQlyZXR1cm4gLShlcnJubyk7 DQorCX0NCisNCisJZHByaW50ZigiY2FsbGluZyBjb25uZWN0XG4iKTsNCisJaWYgKGNvbm5lY3Qo c29jaywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDApIHsNCisJCXBlcnJvcigiY29u bmVjdCIpOw0KKwkJY2xvc2Uoc29jayk7DQorCQlyZXR1cm4gLShlcnJubyk7DQorCX0NCisNCisJ ZnJlZWFkZHJpbmZvKGFpKTsNCisNCisJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQICYmIG5v ZGVsYXkgPT0gVFJVRSkgew0KKwkJLyogc2V0IFRDUF9OT0RFTEFZICovDQorCQlkcHJpbnRmKCJz ZXR0aW5nIFRDUF9OT0RFTEFZXG4iKTsNCisJCXZhbCA9IDE7DQorCQlpZiAoc2V0c29ja29wdChz b2NrLCBTT0xfU09DS0VULCBUQ1BfTk9ERUxBWSwgJnZhbCwgc2l6ZW9mKHZhbCkpIDwgMCkgew0K KwkJCXBlcnJvcigic2V0c29ja29wdCIpOw0KKwkJCXJldCA9IC1lcnJubzsNCisJCQljbG9zZShz b2NrKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorCW1lbXNldCgmZXgsIDAsIHNpemVv ZihleCkpOw0KKwlleC5tYWpvciA9IE1BSk9SOw0KKwlleC5taW5vciA9IE1JTk9SOw0KKwlleC5y ZXF1ZXN0ID0gcmVxdWVzdDsNCisJZXguc2l6ZSA9IHNpemU7DQorCXJldCA9IHdyaXRlKHNvY2ss ICh2b2lkICopICZleCwgc2l6ZW9mKGV4KSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIHNlbmRpbmcgZXhjaGFuZ2UgcmVxdWVzdDogJXNcbiIsIHN0cmVycm9y KGVycm5vKSk7DQorCQlyZXQgPSAtZXJybm87DQorCQljbG9zZShzb2NrKTsNCisJCXJldHVybiBy ZXQ7DQorCX0NCisJcmV0ID0gcmVhZChzb2NrLCAodm9pZCAqKSAmZXgsIHNpemVvZihleCkpOw0K KwlpZiAocmV0IDwgMCkgew0KKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciByZWFkaW5nIGV4Y2hh bmdlIGFjazogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQorCQlyZXQgPSAtZXJybm87DQorCQlj bG9zZShzb2NrKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJaWYgKGV4LnJlcXVlc3QgIT0gUkVR VUVTVF9BQ0spIHsNCisJCWZwcmludGYoc3RkZXJyLCAiRXhjaGFuZ2UgYWNrIG5vdCB2YWxpZDog JXhcbiIsIGV4LnJlcXVlc3QpOw0KKwkJcmV0ID0gLWVycm5vOw0KKwkJY2xvc2Uoc29jayk7DQor CQlyZXR1cm4gcmV0Ow0KKwl9DQorCXJldHVybiBzb2NrOw0KK30NCmRpZmYgLS1naXQgYS9tYWlu LmMgYi9tYWluLmMNCmluZGV4IDgzODY0MmMuLmExM2Y3ZjYgMTAwNjQ0DQotIC0tLSBhL21haW4u Yw0KKysrIGIvbWFpbi5jDQpAQCAtNTQsMTAgKzU0LDkgQEAgY2hhciBob3N0bmFtZVsxMDI0XTsJ CS8qIGhvc3QgdG8gY29ubmVjdCB0byAqLw0KIHN0YXRpYyB2b2lkIGludGVycnVwdChpbnQgc2ln KTsNCiANCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCi0gLQl7InJl Y2VpdmUiLCAwLCAwLCBSWH0sDQogCXsidHJhbnNtaXQiLCAwLCAwLCBUWH0sDQotIC0JeyJzZXJ2 ZXIiLCAwLCAwLCBTRVJWRVJ9LA0KIAl7InJ0dCIsIDAsIDAsIFJUVH0sDQorCXsiZGFlbW9uIiwg MCwgMCwgREFFTU9OfSwNCiAJeyJyYXRlIiwgMSwgMCwgUkFURX0sDQogCXsic2l6ZSIsIDEsIDAs IFNJWkV9LA0KIAl7InRjcCIsIDAsIDAsIFRDUH0sDQpAQCAtNzUsNyArNzQsNyBAQCBzdGF0aWMg c3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCiANCiB2b2lkIHVzYWdlKHZvaWQpDQog ew0KLSAtCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG5ldHJhdGUgey0tdHJhbnNtaXR8LS1yZWNl aXZlfC0tc2VydmVyfC0tcnR0fSBbb3B0aW9uc11cbiIpOw0KKwlmcHJpbnRmKHN0ZGVyciwgInVz YWdlOiBuZXRyYXRlIHstLXRyYW5zbWl0fC0tcnR0fC0tZGFlbW9ufSBbb3B0aW9uc11cbiIpOw0K IAlmcHJpbnRmKHN0ZGVyciwgIiAgIHdoZXJlIG9wdGlvbnMgYXJlOlxuIik7DQogCWZwcmludGYo c3RkZXJyLCAiICAgICAgICAtLXJhdGU9PEludGVyLVBhY2tldCBJbnRlcnZhbD5cbiIpOw0KIAlm cHJpbnRmKHN0ZGVyciwgIiAgICAgICAgLS1zaXplPTxwYWNrZXQgc2l6ZT5cbiIpOw0KQEAgLTky LDYgKzkxLDEyNiBAQCB2b2lkIHVzYWdlKHZvaWQpDQogfQ0KIA0KIA0KK2ludA0KK25ldHJhdGVf cnhfc29ja2V0KGludCBwcm90b2NvbCwgaW50IHR5cGUpDQorew0KKwlpbnQgcmV0Ow0KKwlpbnQg c29jazsNCisJY2hhciBwb3J0c3RyaW5nWzEwXTsNCisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAq YWk7DQorDQorCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOw0KKwloaW50cy5haV9m bGFncyA9IEFJX1BBU1NJVkU7DQorCWhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ7DQorCWhpbnRz LmFpX3NvY2t0eXBlID0gdHlwZTsNCisJaGludHMuYWlfcHJvdG9jb2wgPSBwcm90b2NvbDsNCisJ c3ByaW50Zihwb3J0c3RyaW5nLCAiJWQiLCBwb3J0KTsNCisNCisJZHByaW50ZigiY2FsbGluZyBn ZXRhZGRyaW5mb1xuIik7DQorCXJldCA9IGdldGFkZHJpbmZvKE5VTEwsIHBvcnRzdHJpbmcsICZo aW50cywgJmFpKTsNCisJaWYgKHJldCkgew0KKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBmcm9t IGdldGFkZHJpbmZvOiAlc1xuIiwgc3RyZXJyb3IocmV0KSk7DQorCQlyZXR1cm4gLXJldDsNCisJ fQ0KKw0KKwlkcHJpbnRmKCJjYWxsaW5nIHNvY2tldFxuIik7DQorCXNvY2sgPSBzb2NrZXQoYWkt PmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOw0KKwlpZiAoc29j ayA8IDApIHsNCisJCXBlcnJvciAoInJlY2VpdmUgc29ja2V0KCkiKTsNCisJCXJldHVybiAtKGVy cm5vKTsNCisJfQ0KKw0KKwlkcHJpbnRmKCJjYWxsaW5nIGFjY2VwdFxuIik7DQorCXJldCA9IGJp bmQoc29jaywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsNCisJaWYgKHJldCA8IDApIHsN CisJCXBlcnJvcigiYmluZCIpOw0KKwkJcmV0dXJuIC0oZXJybm8pOw0KKwl9DQorDQorCWlmIChw cm90b2NvbCA9PSBJUFBST1RPX1RDUCkgew0KKwkJZHByaW50ZigiY2FsbGluZyBsaXN0ZW5cbiIp Ow0KKwkJcmV0ID0gbGlzdGVuKHNvY2ssIFNPTUFYQ09OTik7DQorCQlpZiAocmV0IDwgMCkgew0K KwkJCXBlcnJvcigibGlzdGVuKCkiKTsNCisJCQlyZXR1cm4gLShlcnJubyk7DQorCQl9DQorCX0N CisJcmV0dXJuIHNvY2s7DQorfQ0KKw0KK2ludA0KK25ldHJhdGVfZGFlbW9uKHZvaWQpDQorew0K KwlpbnQgcmV0Ow0KKwlpbnQgc2VydnNvY2ssIHNvY2s7DQorCXNvY2tsZW5fdCBjbGllbnRsZW47 DQorCXN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7DQorCXN0cnVjdCBuZXRyYXRlX2V4Y2hhbmdl IGV4LCBhY2s7DQorDQorCWRwcmludGYoIm5ldHJhdGVfZGFlbW9uOiBzdGFydGluZ1xuIik7DQor CXNlcnZzb2NrID0gbmV0cmF0ZV9yeF9zb2NrZXQocHJvdG9jb2wsIHR5cGUpOw0KKwkNCisJaWYg KHByb3RvY29sID09IElQUFJPVE9fVENQKSB7DQorCQlkcHJpbnRmKCJjYWxsaW5nIGFjY2VwdFxu Iik7DQorCQlzb2NrID0gYWNjZXB0KHNlcnZzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmNsaWVu dCwgJmNsaWVudGxlbik7DQorCQlpZiAoc29jayA8IDApIHsNCisJCQlmcHJpbnRmKHN0ZGVyciwg ImVycm9yIGZyb20gYWNjZXB0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCisJCQljbG9zZShz ZXJ2c29jayk7DQorCQkJZXhpdCgtMSk7DQorCQl9DQorCQljbG9zZShzZXJ2c29jayk7DQorCQlk cHJpbnRmKCJvdXQgb2YgYWNjZXB0XG4iKTsNCisJfQ0KKwllbHNlDQorCQlzb2NrID0gc2VydnNv Y2s7DQorDQorCWRwcmludGYoImNhbGxpbmcgcmVhZCBmb3IgZXhjaGFuZ2VcbiIpOw0KKwlyZXQg PSByZWFkKHNvY2ssICZleCwgc2l6ZW9mKGV4KSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJp bnRmKHN0ZGVyciwgImVycm9yIHJlYWRpbmcgZXhjaGFuZ2UgbWVzc2FnZTogJXNcbiIsIHN0cmVy cm9yKGVycm5vKSk7DQorCQljbG9zZShzb2NrKTsNCisJCWV4aXQoLTIpOw0KKwl9DQorCWRwcmlu dGYoImdvdCBleGNoYW5nZTogbWFqb3I6ICVkLCBtaW5vcjogJWQsIHJlcXVlc3Q6ICVkLCBzaXpl OiAlZFxuIiwNCisJCWV4Lm1ham9yLCBleC5taW5vciwgZXgucmVxdWVzdCwgZXguc2l6ZSk7DQor DQorCWlmIChleC5tYWpvciAhPSBNQUpPUiB8fCBleC5taW5vciAhPSBNSU5PUikgew0KKwkJZnBy aW50ZihzdGRlcnIsICJwcm90b2NvbCBtaXNtYXRjaCB1czogKCVkLCAlZCksIHRoZW06KCVkLCAl ZClcbiIsDQorCQkJTUFKT1IsIE1JTk9SLCBleC5tYWpvciwgZXgubWlub3IpOw0KKwkJY2xvc2Uo c29jayk7DQorCQlleGl0KC0zKTsNCisJfQ0KKw0KKwlzaXplID0gZXguc2l6ZTsNCisNCisJYWNr ID0gZXg7DQorCWFjay5yZXF1ZXN0ID0gUkVRVUVTVF9BQ0s7DQorDQorCWRwcmludGYoIkFDSydp bmcgZXhjaGFuZ2VcbiIpOw0KKwlyZXQgPSB3cml0ZShzb2NrLCAmYWNrLCBzaXplb2YoYWNrKSk7 DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGFja25vd2xlZGdp bmcgZXhjaGFuZ2UgcmVxdWVzdDogJXNcbiIsDQorCQkJc3RyZXJyb3IoZXJybm8pKTsNCisJCWNs b3NlKHNvY2spOw0KKwkJZXhpdCgtNCk7DQorCX0NCisNCisJc3dpdGNoIChleC5yZXF1ZXN0KSB7 DQorDQorCWNhc2UgU0VSVkVSOg0KKwkJZHByaW50ZigiY2FsbGluZyBuZXRyYXRlX3NlcnZlcigp XG4iKTsNCisJCXJldHVybiBuZXRyYXRlX3NlcnZlcihzb2NrKTsNCisJCQ0KKwljYXNlIFJYOg0K KwkJZHByaW50ZigiY2FsbGluZyBuZXRyYXRlX3JlY2VpdmUoKVxuIik7DQorCQlyZXR1cm4gbmV0 cmF0ZV9yZWNlaXZlKHNvY2spOw0KKwl9DQorCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBleGNo YW5nZSByZXF1ZXN0OiAlZFxuIiwgZXgucmVxdWVzdCk7DQorCWNsb3NlKHNvY2spOw0KKwlyZXR1 cm4gLTE7DQorfQ0KKw0KKw0KIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiB7DQog CWludCByZXQ7DQpAQCAtMTA3LDE4ICsyMjYsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KIAkJCWJyZWFrOw0KIA0KIAkJc3dpdGNoKG9wdCkgew0KLSAtCQljYXNlIFJYOg0K LSAtCQkJcm9sZSA9IFJYOw0KLSAtCQkJZHByaW50Zigicm9sZSA9PSBSWFxuIik7DQorCQljYXNl IERBRU1PTjoNCisJCQlyb2xlID0gREFFTU9OOw0KKwkJCWRwcmludGYoInJvbGUgPT0gREFFTU9O XG4iKTsNCiAJCQlicmVhazsNCiAJCWNhc2UgVFg6DQogCQkJcm9sZSA9IFRYOw0KIAkJCWRwcmlu dGYoInJvbGUgPT0gVFhcbiIpOw0KIAkJCWJyZWFrOw0KLSAtCQljYXNlIFNFUlZFUjoNCi0gLQkJ CXJvbGUgPSBTRVJWRVI7DQotIC0JCQlkcHJpbnRmKCJyb2xlID09IFNFUlZFUlxuIik7DQotIC0J CQlicmVhazsNCiAJCWNhc2UgUlRUOg0KIAkJCXJvbGUgPSBSVFQ7DQogCQkJZHByaW50Zigicm9s ZSA9PSBSVFRcbiIpOw0KQEAgLTE5Myw4ICszMDgsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpDQogCQl9DQogCX0NCiAJaWYgKHJvbGUgPT0gMCkgew0KLSAtCQlmcHJpbnRmKHN0 ZGVyciwgIk11c3Qgc3BlY2lmaXkgZWl0aGVyIC0tdHJhbnNtaXQgb3IgIg0KLSAtCQkJIi0tcmVj ZWl2ZSBvcHRpb25zIVxuIik7DQorCQlmcHJpbnRmKHN0ZGVyciwgIk11c3Qgc3BlY2lmaXkgZWl0 aGVyIC0tdHJhbnNtaXQsIC0tZGFlbW9uIG9yICINCisJCQkiLS1ydHQgb3B0aW9ucyFcbiIpOw0K IAkJZXhpdCgtMSk7DQogCX0NCiANCkBAIC0yMTgsMTEgKzMzMyw4IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikNCiAJY2FzZSBUWDoNCiAJCWV4aXRfdmFsID0gbmV0cmF0ZV90cmFu c21pdCgpOw0KIAkJYnJlYWs7DQotIC0JY2FzZSBSWDoNCi0gLQkJZXhpdF92YWwgPSBuZXRyYXRl X3JlY2VpdmUoKTsNCi0gLQkJYnJlYWs7DQotIC0JY2FzZSBTRVJWRVI6DQotIC0JCWV4aXRfdmFs ID0gbmV0cmF0ZV9zZXJ2ZXIoKTsNCisJY2FzZSBEQUVNT046DQorCQlleGl0X3ZhbCA9IG5ldHJh dGVfZGFlbW9uKCk7DQogCQlicmVhazsNCiAJY2FzZSBSVFQ6DQogCQlleGl0X3ZhbCA9IG5ldHJh dGVfcnR0KCk7DQpkaWZmIC0tZ2l0IGEvbmV0cmF0ZS5oIGIvbmV0cmF0ZS5oDQppbmRleCBhMGY3 OWI1Li5jMmFhYmE4IDEwMDY0NA0KLSAtLS0gYS9uZXRyYXRlLmgNCisrKyBiL25ldHJhdGUuaA0K QEAgLTIyLDEyICsyMiwxOCBAQA0KICNpZm5kZWYgX19ORVRSQVRFX0hfXw0KICNkZWZpbmUgX19O RVRSQVRFX0hfXw0KIA0KKyNkZWZpbmUgTUFKT1IgMA0KKyNkZWZpbmUgTUlOT1IgMw0KKw0KICNk ZWZpbmUgVFJVRSAgMQ0KICNkZWZpbmUgRkFMU0UgMA0KIA0KLSAtZW51bSBvcHR2YWxzIHtSWD0x LCBUWCwgUkFURSwgU0laRSwgVENQLCBVRFAsIFNDVFAsIA0KLSAtCSAgICAgIE1VTFRJLCBQT1JU LCBIT1NULCBERUJVRywgSEVMUCwNCi0gLQkgICAgICBTRVJWRVIsIFJUVCwgTk9ERUxBWSwgSElT VE9HUkFNfTsNCitlbnVtIG9wdHZhbHMgeyBSWD0xLCBUWCwgUkFURSwgU0laRSwgVENQLCBVRFAs IFNDVFAsIA0KKwkgICAgICAgTVVMVEksIFBPUlQsIEhPU1QsIERFQlVHLCBIRUxQLCBEQUVNT04s DQorCSAgICAgICBTRVJWRVIsIFJUVCwgTk9ERUxBWSwgSElTVE9HUkFNLA0KKwkgICAgICAgTlVN X09QVF9WQUxTLA0KK307DQorDQogDQogI2RlZmluZSBOU19QRVJfU0VDCTEwMDAwMDAwMDANCiAj ZGVmaW5lIFVTX1BFUl9TRUMJMTAwMDAwMA0KQEAgLTQ4LDYgKzU0LDE2IEBAIGVudW0gb3B0dmFs cyB7Ulg9MSwgVFgsIFJBVEUsIFNJWkUsIFRDUCwgVURQLCBTQ1RQLA0KICNkZWZpbmUgTUFYX0JV Rl9TSVpFCTgxOTINCiAjZGVmaW5lIE5FVFJBVEVfTVNHX0RBVEEgMHhhNQ0KIA0KKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPg0KK3N0cnVjdCBuZXRyYXRlX2V4Y2hhbmdlIHsNCisJX191MTYgbWFq b3I7DQorCV9fdTE2IG1pbm9yOw0KKwlfX3UxNiByZXF1ZXN0Ow0KKwlfX3UxNiBzaXplOw0KK307 CQ0KKw0KKyNkZWZpbmUgUkVRVUVTVF9BQ0sJMHhmZmZmDQorDQogc3RydWN0IG5ldHJhdGVfbWVz c2FnZSB7DQogCXVuc2lnbmVkIGxvbmcgbXNnX2xlbjsJLyogbWVzc2FnZSBsZW5ndGggKGluY2x1 ZGluZyBoZWFkZXIpICovDQogCXVuc2lnbmVkIGxvbmcgbXNnX3NlcTsJLyogc2VxdWVuY2UgbnVt YmVyICovDQpAQCAtNTUsNyArNzEsNiBAQCBzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlIHsNCiAJY2hh ciBtc2dfZGF0YVtdOyAvKiBib2R5IG9mIG1lc3NhZ2UgKi8NCiB9Ow0KIA0KLSAtDQogZXh0ZXJu IGludCBwcm90b2NvbDsNCiBleHRlcm4gaW50IHR5cGU7DQogZXh0ZXJuIGludCBub2RlbGF5Ow0K QEAgLTcwLDkgKzg1LDEwIEBAIGV4dGVybiBpbnQgaW50ZXJydXB0ZWQ7DQogZXh0ZXJuIGptcF9i dWYgam1wYnVmOw0KIA0KIGludCBuZXRyYXRlX3RyYW5zbWl0KHZvaWQpOw0KLSAtaW50IG5ldHJh dGVfcmVjZWl2ZSh2b2lkKTsNCitpbnQgbmV0cmF0ZV9yZWNlaXZlKGludCBzb2NrKTsNCiBpbnQg bmV0cmF0ZV9ydHQodm9pZCk7DQotIC1pbnQgbmV0cmF0ZV9zZXJ2ZXIodm9pZCk7DQoraW50IG5l dHJhdGVfc2VydmVyKGludCBzb2NrKTsNCitpbnQgbmV0cmF0ZV90eF9zb2NrZXQoaW50IHByb3Rv Y29sLCBpbnQgcG9ydCwgaW50IHJlcXVlc3QpOw0KIHZvaWQgc3RvcF9leGVjdXRpb24odm9pZCk7 DQogdm9pZCBkcHJpbnRmKGNoYXIgKiwgLi4uKTsNCiANCmRpZmYgLS1naXQgYS9yZWNlaXZlLmMg Yi9yZWNlaXZlLmMNCmluZGV4IGFjMTQ1ZDUuLmI5YTI1NWEgMTAwNjQ0DQotIC0tLSBhL3JlY2Vp dmUuYw0KKysrIGIvcmVjZWl2ZS5jDQpAQCAtMzYsNjAgKzM2LDEzIEBADQogIA0KIHN0YXRpYyBz dHJ1Y3Qgc3RhdGlzdGljcyAqc3RhdHM7DQogDQotIC1zdGF0aWMgaW50DQotIC1uZXRyYXRlX3J4 X3NvY2tldChpbnQgcHJvdG9jb2wsIGludCBwb3J0LCBpbnQgbXVsdGljYXN0KQ0KLSAtew0KLSAt CWludCByZXQ7DQotIC0JaW50IHNvY2s7DQotIC0JY2hhciBwb3J0c3RyaW5nWzEwXTsNCi0gLQlz dHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsNCi0gLQ0KLSAtCW1lbXNldCgmaGludHMsIDAsIHNp emVvZihoaW50cykpOw0KLSAtCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsNCi0gLQloaW50 cy5haV9mYW1pbHkgPSBBRl9JTkVUOw0KLSAtCWhpbnRzLmFpX3NvY2t0eXBlID0gdHlwZTsNCi0g LQloaW50cy5haV9wcm90b2NvbCA9IHByb3RvY29sOw0KLSAtCXNwcmludGYocG9ydHN0cmluZywg IiVkIiwgcG9ydCk7DQotIC0NCi0gLQlyZXQgPSBnZXRhZGRyaW5mbyhOVUxMLCBwb3J0c3RyaW5n LCAmaGludHMsICZhaSk7DQotIC0JaWYgKHJldCkgew0KLSAtCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIGZyb20gZ2V0YWRkcmluZm86ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsNCi0gLQkJcmV0dXJu IC1yZXQ7DQotIC0JfQ0KLSAtDQotIC0Jc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+ YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7DQotIC0JaWYgKHNvY2sgPCAwKSB7DQotIC0J CXBlcnJvciAoInJlY2VpdmUgc29ja2V0KCkiKTsNCi0gLQkJcmV0dXJuIC0oZXJybm8pOw0KLSAt CX0NCi0gLQ0KLSAtCXJldCA9IGJpbmQoc29jaywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVu KTsNCi0gLQlpZiAocmV0IDwgMCkgew0KLSAtCQlwZXJyb3IoImJpbmQiKTsNCi0gLQkJcmV0dXJu IC0oZXJybm8pOw0KLSAtCX0NCi0gLQ0KLSAtCWlmIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkg ew0KLSAtCQlyZXQgPSBsaXN0ZW4oc29jaywgU09NQVhDT05OKTsNCi0gLQkJaWYgKHJldCA8IDAp IHsNCi0gLQkJCXBlcnJvcigibGlzdGVuKCkiKTsNCi0gLQkJCXJldHVybiAtKGVycm5vKTsNCi0g LQkJfQ0KLSAtCX0NCi0gLQlyZXR1cm4gc29jazsNCi0gLX0NCi0gLQ0KLSAtDQogLyoNCiAgKiBt YWluIHJlY2VpdmVyIHJvdXRpbmUNCiAgKi8NCiBpbnQNCi0gLW5ldHJhdGVfcmVjZWl2ZSh2b2lk KQ0KK25ldHJhdGVfcmVjZWl2ZShpbnQgY29uc29jaykNCiB7DQogCWludCByZXQ7DQotIC0JaW50 IHNlcnZzb2NrLCBjb25zb2NrOw0KLSAtCXNvY2tsZW5fdCBzb2NrbGVuOw0KLSAtCXN0cnVjdCBz b2NrYWRkcl9pbiBjbGllbnQ7DQogCXZvaWQgKnB0cjsNCiAJc3RydWN0IG5ldHJhdGVfbWVzc2Fn ZSAqbXNnOw0KIAlsb25nIHN0YXR1czsNCkBAIC0xMDEsMjggKzU0LDYgQEAgbmV0cmF0ZV9yZWNl aXZlKHZvaWQpDQogCS8qIHNldCB1cCBvdXIgcmluZyBidWZmZXJzICovDQogCXIgPSBzZXR1cF9y aW5nX2J1ZmZlcnMoMTAsIGJ1ZnNpemUpOw0KIA0KLSAtCS8qIHNldHVwIGEgc29ja2V0ICovDQot IC0Jc2VydnNvY2sgPSBuZXRyYXRlX3J4X3NvY2tldChwcm90b2NvbCwgcG9ydCwgbXVsdGljYXN0 KTsNCi0gLQlpZiAoc2VydnNvY2sgPCAwKSB7DQotIC0JCXBlcnJvcigic2V0dGluZyB1cCByZWNp ZXZlIHNvY2tldCIpOw0KLSAtCQlyZXR1cm4gc2VydnNvY2s7DQotIC0JfQ0KLSAtDQotIC0JLyog aWYgd2UncmUgZG9pbmcgVENQLCBjYWxsIGFjY2VwdCAqLw0KLSAtCWlmIChwcm90b2NvbCA9PSBJ UFBST1RPX1RDUCkgew0KLSAtCQlkcHJpbnRmKCJjYWxsaW5nIGFjY2VwdFxuIik7DQotIC0JCWNv bnNvY2sgPSBhY2NlcHQoc2VydnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50LCAmc29j a2xlbik7DQotIC0JCWlmIChjb25zb2NrIDwgMCkgew0KLSAtCQkJcGVycm9yKCJhY2NlcHQiKTsN Ci0gLQkJCWNsb3NlKHNlcnZzb2NrKTsNCi0gLQkJCXJldHVybiBjb25zb2NrOw0KLSAtCQl9DQot IC0JCWNsb3NlKHNlcnZzb2NrKTsNCi0gLQkJZHByaW50ZigiY29ubmVjdGlvbiBzdGFydGVkXG4i KTsNCi0gLQl9DQotIC0JZWxzZSB7DQotIC0JCWNvbnNvY2sgPSBzZXJ2c29jazsNCi0gLQl9DQog DQogCS8qIGFsbG9jYXRlIHN0YXRpc3RpY3Mgc3BhY2UgKi8NCiAJc3RhdHMgPSBzZXR1cF9zdGF0 aXN0aWNzKE1TRUMpOw0KZGlmZiAtLWdpdCBhL3J0dC5jIGIvcnR0LmMNCmluZGV4IDA2N2QyODIu LjI2NGE5YTYgMTAwNjQ0DQotIC0tLSBhL3J0dC5jDQorKysgYi9ydHQuYw0KQEAgLTQ0LDU0ICs0 NCw2IEBAIHN0YXRpYyBpbnQgc3RvcF9ydW5uaW5nID0gRkFMU0U7DQogDQogc3RhdGljIHN0cnVj dCBzdGF0aXN0aWNzICpzdGF0czsNCiANCi0gLXN0YXRpYyBpbnQNCi0gLXNldHVwX3NvY2tldChp bnQgcHJvdG9jb2wsIGludCBwb3J0LCBpbnQgbXVsdGljYXN0KQ0KLSAtew0KLSAtCWludCByZXQ7 CQ0KLSAtCWludCB2YWw7DQotIC0JY2hhciBwb3J0c3RyaW5nWzEwXTsNCi0gLQlzdHJ1Y3QgYWRk cmluZm8gaGludHMsICphaTsNCi0gLQ0KLSAtCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50 cykpOw0KLSAtCWhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOw0KLSAtCWhpbnRzLmFpX2Zh bWlseSA9IEFGX0lORVQ7DQotIC0JaGludHMuYWlfc29ja3R5cGUgPSB0eXBlOw0KLSAtCWhpbnRz LmFpX3Byb3RvY29sID0gcHJvdG9jb2w7DQotIC0Jc3ByaW50Zihwb3J0c3RyaW5nLCAiJWQiLCBw b3J0KTsNCi0gLQkgICAgICAgDQotIC0JcmV0ID0gZ2V0YWRkcmluZm8oaG9zdG5hbWUsIHBvcnRz dHJpbmcsICZoaW50cywgJmFpKTsNCi0gLQlpZiAocmV0KSB7DQotIC0JCWZwcmludGYoc3RkZXJy LCAiRXJyb3IgZnJvbSBnZXRhZGRyaW5mbzogJXNcbiIsIHN0cmVycm9yKHJldCkpOw0KLSAtCQly ZXR1cm4gLXJldDsNCi0gLQl9DQotIC0NCi0gLQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHks IGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsNCi0gLQlpZiAoc29jayA8IDApIHsN Ci0gLQkJcGVycm9yKCJ0cmFuc21pdCBzb2NrZXQoKSIpOw0KLSAtCQlyZXR1cm4gLShlcnJubyk7 DQotIC0JfQ0KLSAtDQotIC0JZHByaW50ZigiY2FsbGluZyBjb25uZWN0XG4iKTsNCi0gLQlpZiAo Y29ubmVjdChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgew0KLSAtCQlw ZXJyb3IoImNvbm5lY3QiKTsNCi0gLQkJY2xvc2Uoc29jayk7DQotIC0JCXJldHVybiAtKGVycm5v KTsNCi0gLQl9DQotIC0JCQ0KLSAtCWZyZWVhZGRyaW5mbyhhaSk7DQotIC0NCi0gLQlpZiAocHJv dG9jb2wgPT0gSVBQUk9UT19UQ1AgJiYgbm9kZWxheSA9PSBUUlVFKSB7DQotIC0JCS8qIHNldCBU Q1BfTk9ERUxBWSAqLw0KLSAtCQlkcHJpbnRmKCJzZXR0aW5nIFRDUF9OT0RFTEFZXG4iKTsNCi0g LQkJdmFsID0gMTsNCi0gLQkJaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgVENQX05P REVMQVksICZ2YWwsIHNpemVvZih2YWwpKSA8IDApIHsNCi0gLQkJCXBlcnJvcigic2V0c29ja29w dCIpOw0KLSAtCQkJY2xvc2Uoc29jayk7DQotIC0JCQlyZXR1cm4gLShlcnJubyk7DQotIC0JCX0N Ci0gLQl9DQotIC0JcmV0dXJuIHNvY2s7DQotIC19DQogDQogc3RhdGljIHZvaWQNCiBzZXR1cF9i dWZmZXJzKHN0cnVjdCByaW5nX2J1ZmZlciAqKnR4cmluZywgc3RydWN0IHJpbmdfYnVmZmVyICoq cnhyaW5nKQ0KQEAgLTIyMSwxNCArMTczLDEzIEBAIGludA0KIG5ldHJhdGVfcnR0KHZvaWQpDQog ew0KIAlpbnQgcmV0Ow0KLSAtCWludCBzb2NrOw0KIAlsb25nIHZhbDsNCiAJc3RydWN0IG5ldHJh dGVfbWVzc2FnZSAqbXNnOw0KIAlzdHJ1Y3QgdGltZXNwZWMgdHM7DQogCXB0aHJlYWRfdCB0aHJl YWRfaWQ7DQogDQogCWRwcmludGYoInNldHRpbmcgdXAgdHJhbnNtaXQgc29ja2V0XG4iKTsNCi0g LQlzb2NrID0gc2V0dXBfc29ja2V0KHByb3RvY29sLCBwb3J0LCBtdWx0aWNhc3QpOw0KKwlzb2Nr ID0gbmV0cmF0ZV90eF9zb2NrZXQocHJvdG9jb2wsIHBvcnQsIFNFUlZFUik7DQogCWlmIChzb2Nr IDwgMCkgew0KIAkJcGVycm9yKCJ0cmFuc21pdCBzb2NrZXQiKTsNCiAJCXJldHVybiAtKGVycm5v KTsNCmRpZmYgLS1naXQgYS9zZXJ2ZXIuYyBiL3NlcnZlci5jDQppbmRleCA4MjY0YjRlLi45ZDIw NWJhIDEwMDY0NA0KLSAtLS0gYS9zZXJ2ZXIuYw0KKysrIGIvc2VydmVyLmMNCkBAIC0zNCw2MSAr MzQsMTQgQEAgc3RhdGljIGludCBidWZzaXplOw0KIA0KICNkZWZpbmUgUklOR19TSVpFIDEwDQog DQotIC1zdGF0aWMgaW50DQotIC1uZXRyYXRlX3J4X3NvY2tldChpbnQgcHJvdG9jb2wsIGludCBw b3J0LCBpbnQgbXVsdGljYXN0KQ0KLSAtew0KLSAtCWludCByZXQ7DQotIC0JaW50IHNvY2s7DQot IC0JY2hhciBwb3J0c3RyaW5nWzEwXTsNCi0gLQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsN Ci0gLQ0KLSAtCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOw0KLSAtCWhpbnRzLmFp X2ZsYWdzID0gQUlfUEFTU0lWRTsNCi0gLQloaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOw0KLSAt CWhpbnRzLmFpX3NvY2t0eXBlID0gdHlwZTsNCi0gLQloaW50cy5haV9wcm90b2NvbCA9IHByb3Rv Y29sOw0KLSAtCXNwcmludGYocG9ydHN0cmluZywgIiVkIiwgcG9ydCk7DQotIC0JICAgICAgIA0K LSAtCXJldCA9IGdldGFkZHJpbmZvKE5VTEwsIHBvcnRzdHJpbmcsICZoaW50cywgJmFpKTsNCi0g LQlpZiAocmV0KSB7DQotIC0JCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZnJvbSBnZXRhZGRyaW5m bzogJXNcbiIsIHN0cmVycm9yKHJldCkpOw0KLSAtCQlyZXR1cm4gLXJldDsNCi0gLQl9DQotIC0N Ci0gLQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFp X3Byb3RvY29sKTsNCi0gLQlpZiAoc29jayA8IDApIHsNCi0gLQkJcGVycm9yICgicmVjZWl2ZSBz b2NrZXQoKSIpOw0KLSAtCQlyZXR1cm4gLShlcnJubyk7DQotIC0JfQ0KLSAtDQotIC0JcmV0ID0g YmluZChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOw0KLSAtCWlmIChyZXQgPCAw KSB7DQotIC0JCXBlcnJvcigiYmluZCIpOw0KLSAtCQlyZXR1cm4gLShlcnJubyk7DQotIC0JfQ0K LSAtDQotIC0JZnJlZWFkZHJpbmZvKGFpKTsNCi0gLQ0KLSAtCWlmIChwcm90b2NvbCA9PSBJUFBS T1RPX1RDUCkgew0KLSAtCQlyZXQgPSBsaXN0ZW4oc29jaywgU09NQVhDT05OKTsNCi0gLQkJaWYg KHJldCA8IDApIHsNCi0gLQkJCXBlcnJvcigibGlzdGVuKCkiKTsNCi0gLQkJCXJldHVybiAtKGVy cm5vKTsNCi0gLQkJfQ0KLSAtCX0NCi0gLQlyZXR1cm4gc29jazsNCi0gLX0NCiANCiAvKg0KICAq IHJlY2VpdmUgbmV0cmF0ZSBtZXNzYWdlcyBhbmQgcmV0dXJuIHRoZW0gYXMgcXVpY2tseSBhcyBw b3NzaWJsZQ0KICAqLw0KIGludA0KLSAtbmV0cmF0ZV9zZXJ2ZXIodm9pZCkNCituZXRyYXRlX3Nl cnZlcihpbnQgY29uc29jaykNCiB7DQogCWludCByZXQ7DQotIC0JaW50IHNlcnZzb2NrLCBjb25z b2NrOw0KLSAtCXNvY2tsZW5fdCBzb2NrbGVuOw0KLSAtCXN0cnVjdCBzb2NrYWRkcl9pbiBjbGll bnQ7DQogCXVuc2lnbmVkIGxvbmcgcGFja2V0cyA9IDA7DQogCXN0cnVjdCByaW5nX2J1ZmZlciAq cjsNCiAJDQpAQCAtOTcsMzEgKzUwLDYgQEAgbmV0cmF0ZV9zZXJ2ZXIodm9pZCkNCiAJLyogc2V0 dXAgcmVjZWl2ZSByaW5nICovDQogCXIgPSBzZXR1cF9yaW5nX2J1ZmZlcnMoUklOR19TSVpFLCBi dWZzaXplKTsNCiANCi0gLQkvKiBzZXR1cCBhIHNvY2tldCAqLw0KLSAtCXNlcnZzb2NrID0gbmV0 cmF0ZV9yeF9zb2NrZXQocHJvdG9jb2wsIHBvcnQsIG11bHRpY2FzdCk7DQotIC0JaWYgKHNlcnZz b2NrIDwgMCkgew0KLSAtCQlwZXJyb3IoInNldHRpbmcgdXAgcmVjaWV2ZSBzb2NrZXQiKTsNCi0g LQkJZnJlZV9yaW5nX2J1ZmZlcnMocik7DQotIC0JCXJldHVybiBzZXJ2c29jazsNCi0gLQl9DQot IC0NCi0gLQkvKiBpZiB3ZSdyZSBkb2luZyBUQ1AsIGNhbGwgYWNjZXB0ICovDQotIC0JaWYgKHBy b3RvY29sID09IElQUFJPVE9fVENQKSB7DQotIC0JCWRwcmludGYoImNhbGxpbmcgYWNjZXB0XG4i KTsNCi0gLQkJY29uc29jayA9IGFjY2VwdChzZXJ2c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZj bGllbnQsICZzb2NrbGVuKTsNCi0gLQkJaWYgKGNvbnNvY2sgPCAwKSB7DQotIC0JCQlwZXJyb3Io ImFjY2VwdCIpOw0KLSAtCQkJY2xvc2Uoc2VydnNvY2spOw0KLSAtCQkJZnJlZV9yaW5nX2J1ZmZl cnMocik7DQotIC0JCQlyZXR1cm4gY29uc29jazsNCi0gLQkJfQ0KLSAtCQljbG9zZShzZXJ2c29j ayk7DQotIC0JCWRwcmludGYoImNvbm5lY3Rpb24gc3RhcnRlZFxuIik7DQotIC0JfQ0KLSAtCWVs c2Ugew0KLSAtCQljb25zb2NrID0gc2VydnNvY2s7DQotIC0JfQ0KLSAtDQogCWRwcmludGYoImVu dGVyaW5nIHNlcnZlciBsb29wXG4iKTsNCiANCiAJLyogc2F2ZSBvdXIgYmFpbG91dCBwb2ludCBm b3IgU0lHSU5UICovDQpkaWZmIC0tZ2l0IGEvdHJhbnNtaXQuYyBiL3RyYW5zbWl0LmMNCmluZGV4 IGMxMzQ5MTYuLjVlMDliZjYgMTAwNjQ0DQotIC0tLSBhL3RyYW5zbWl0LmMNCisrKyBiL3RyYW5z bWl0LmMNCkBAIC0zMSw1NCArMzEsNiBAQA0KIA0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg c2VxdWVuY2UgPSAwOw0KIA0KLSAtc3RhdGljIGludA0KLSAtbmV0cmF0ZV90eF9zb2NrZXQoaW50 IHByb3RvY29sLCBpbnQgcG9ydCwgaW50IG11bHRpY2FzdCkNCi0gLXsNCi0gLQlpbnQgcmV0Ow0K LSAtCWludCBzb2NrOw0KLSAtCWludCB2YWw7DQotIC0JY2hhciBwb3J0c3RyaW5nWzEwXTsNCi0g LQlzdHJ1Y3QgYWRkcmluZm8gKmFpLCBoaW50czsNCi0gLQ0KLSAtCW1lbXNldCgmaGludHMsIDAs IHNpemVvZihoaW50cykpOw0KLSAtCWhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOw0KLSAt CWhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ7DQotIC0JaGludHMuYWlfc29ja3R5cGUgPSB0eXBl Ow0KLSAtCWhpbnRzLmFpX3Byb3RvY29sID0gcHJvdG9jb2w7DQotIC0Jc3ByaW50Zihwb3J0c3Ry aW5nLCAiJWQiLCBwb3J0KTsNCi0gLQ0KLSAtCXJldCA9IGdldGFkZHJpbmZvKGhvc3RuYW1lLCBw b3J0c3RyaW5nLCAmaGludHMsICZhaSk7DQotIC0JaWYgKHJldCkgew0KLSAtCQlmcHJpbnRmKHN0 ZGVyciwgIkVycm9yIGZyb20gZ2V0YWRkcmluZm86ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsNCi0g LQkJcmV0dXJuIC1yZXQ7DQotIC0JfQ0KLSAtCXNvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwg YWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOw0KLSAtCWlmIChzb2NrIDwgMCkgew0K LSAtCQlwZXJyb3IoInRyYW5zbWl0IHNvY2tldCgpIik7DQotIC0JCXJldHVybiAtKGVycm5vKTsN Ci0gLQl9DQotIC0JDQotIC0JZHByaW50ZigiY2FsbGluZyBjb25uZWN0XG4iKTsNCi0gLQlpZiAo Y29ubmVjdChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgew0KLSAtCQlw ZXJyb3IoImNvbm5lY3QiKTsNCi0gLQkJY2xvc2Uoc29jayk7DQotIC0JCXJldHVybiAtKGVycm5v KTsNCi0gLQl9DQotIC0JZnJlZWFkZHJpbmZvKGFpKTsNCi0gLQ0KLSAtCWlmIChwcm90b2NvbCA9 PSBJUFBST1RPX1RDUCkgew0KLSAtCQkvKiBzZXQgVENQX05PREVMQVkgKi8NCi0gLQkJZHByaW50 Zigic2V0dGluZyBUQ1BfTk9ERUxBWVxuIik7DQotIC0JCXZhbCA9IDE7DQotIC0JCWlmIChzZXRz b2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFRDUF9OT0RFTEFZLCAmdmFsLCBzaXplb2YodmFsKSkg PCAwKSB7DQotIC0JCQlwZXJyb3IoInNldHNvY2tvcHQiKTsNCi0gLQkJCWNsb3NlKHNvY2spOw0K LSAtCQkJcmV0dXJuIC0oZXJybm8pOw0KLSAtCQl9DQotIC0JfQ0KLSAtCXJldHVybiBzb2NrOw0K LSAtfQ0KLSAtDQogaW50DQogbmV0cmF0ZV90cmFuc21pdCh2b2lkKQ0KIHsNCkBAIC05NCw3ICs0 Niw3IEBAIG5ldHJhdGVfdHJhbnNtaXQodm9pZCkNCiAJciA9IHNldHVwX3JpbmdfYnVmZmVycygx MCwgYnVmc2l6ZSk7DQogDQogCWRwcmludGYoInNldHRpbmcgdXAgdHJhbnNtaXQgc29ja2V0XG4i KTsNCi0gLQlzb2NrID0gbmV0cmF0ZV90eF9zb2NrZXQocHJvdG9jb2wsIHBvcnQsIG11bHRpY2Fz dCk7DQorCXNvY2sgPSBuZXRyYXRlX3R4X3NvY2tldChwcm90b2NvbCwgcG9ydCwgUlgpOw0KIAlp ZiAoc29jayA8IDApIHsNCiAJCXBlcnJvcigidHJhbnNtaXQgc29ja2V0Iik7DQogCQlyZXR1cm4g LShlcnJubyk7DQotIC0tIA0KMS42LjAuMQ0KDQoNCi0gRnJvbSBlZDc5NWY3YTBjMzYzYjdiYTJh MDVjNDg3YjVkN2UxMmU4MGU5NzYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQ2xh cmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpEYXRlOiBXZWQsIDggT2N0IDIwMDgg MTU6MDg6MzMgLTA1MDANClN1YmplY3Q6IFtQQVRDSF0gbWFrZSB1c2Ugd2lsZGNhcmRzDQoNCm1v ZGlmaWVkIE1ha2VmaWxlIHRhcmdldHMgdG8gdXNlIHdpbGRjYXJkIGJ1aWx0aW4NCg0KU2lnbmVk LW9mZi1ieTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQotIC0tLQ0KIE1h a2VmaWxlIHwgICAgNCArKy0tDQogMSBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIg ZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlDQppbmRleCA3 YTVjMjVlLi5lOWFkODU0IDEwMDY0NA0KLSAtLS0gYS9NYWtlZmlsZQ0KKysrIGIvTWFrZWZpbGUN CkBAIC0xLDcgKzEsNyBAQA0KIENDCTo9IGdjYw0KIENGTEFHUwk6PSAtZyAtTzIgLVdhbGwNCi0g LVNSQwk6PSBtYWluLmMgcmVjZWl2ZS5jIHRyYW5zbWl0LmMgcnR0LmMgc2VydmVyLmMgY29tbW9u LmMNCi0gLUhEUgk6PSBuZXRyYXRlLmggbmV0d29ya2luZy5oDQorU1JDCTo9ICQod2lsZGNhcmQg Ki5jKQ0KK0hEUgk6PSAkKHdpbGRjYXJkICouaCkNCiBPQkoJOj0gJChzdWJzdCAuYywubywkKFNS QykpDQogDQogbmV0cmF0ZToJJChPQkopDQotIC0tIA0KMS42LjAuMQ0KDQoNCi0gRnJvbSBjMjEy MDg5YjRmM2U3NTFlN2I1Y2I0N2EyYTIwN2Q2MWFmNmYwN2EzIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpEYXRlOiBX ZWQsIDggT2N0IDIwMDggMTU6MTI6MTAgLTA1MDANClN1YmplY3Q6IFtQQVRDSF0gc29ja2V0IGZ1 bmN0aW9ucyB0byBjb21tb24NCg0KbW92ZWQgdHggYW5kIHJ4IHNvY2tldCBzZXR1cCBmdW5jdGlv bnMgaW50byBjb21tb24uYzsgY2hhbmdlZCB0byB1NjQgdHlwZSAoZnJvbSB1bnNpZ25lZCBsb25n IGxvbmcpDQoNClNpZ25lZC1vZmYtYnk6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQu Y29tPg0KLSAtLS0NCiBjb21tb24uYyB8ICAgOTggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0NCiAxIGZpbGVzIGNoYW5nZWQsIDg3 IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvY29tbW9uLmMg Yi9jb21tb24uYw0KaW5kZXggOGVkMDU5MC4uYTk5MGUyMCAxMDA2NDQNCi0gLS0tIGEvY29tbW9u LmMNCisrKyBiL2NvbW1vbi5jDQpAQCAtNDIsMjYgKzQyLDI2IEBADQogLyoNCiAgKiB0dXJuICBh IHN0cnVjdCB0aW1lc3BlYyBpbnRvIGEgbG9uZyBsb25nIG9mIG5hbm9zZWNvbmRzDQogICovDQot IC11bnNpZ25lZCBsb25nIGxvbmcNCit1NjQNCiB0czJucyhzdHJ1Y3QgdGltZXNwZWMgKnQpDQog ew0KIAlyZXR1cm4gKCh0LT50dl9zZWMgKiBOU19QRVJfU0VDKSArIHQtPnR2X25zZWMpOw0KIH0N CiANCi0gLXVuc2lnbmVkIGxvbmcNCit1NjQNCiB0czJ1cyhzdHJ1Y3QgdGltZXNwZWMgKnQpDQog ew0KIAlyZXR1cm4gKHQtPnR2X3NlYyAqIFVTX1BFUl9TRUMpICsgTlNfVE9fVVModC0+dHZfbnNl Yyk7DQogfQ0KIA0KLSAtdW5zaWduZWQgbG9uZw0KK3U2NA0KIHRzMm1zKHN0cnVjdCB0aW1lc3Bl YyAqdCkNCiB7DQogCXJldHVybiAodC0+dHZfc2VjICogTVNfUEVSX1NFQykgKyBOU19UT19NUyh0 LT50dl9uc2VjKTsNCiB9DQogDQogc3RhdGljIHVuc2lnbmVkIGxvbmcNCi0gLW5zMngodW5zaWdu ZWQgbG9uZyBucywgaW50IHVuaXRzKQ0KK25zMngodTY0IG5zLCBpbnQgdW5pdHMpDQogew0KIAlz d2l0Y2godW5pdHMpIHsNCiAJY2FzZSBNU0VDOg0KQEAgLTc2LDcgKzc2LDcgQEAgbnMyeCh1bnNp Z25lZCBsb25nIG5zLCBpbnQgdW5pdHMpDQogCXJldHVybiAwOw0KIH0NCiANCi0gLXVuc2lnbmVk IGxvbmcNCit1NjQNCiB0czJ4KHN0cnVjdCB0aW1lc3BlYyAqdHMsIGludCB1bml0cykNCiB7DQog CWlmICh0cyA9PSBOVUxMKSB7DQpAQCAtMTIwLDcgKzEyMCw3IEBAIHRzbm9ybWFsaXplKHN0cnVj dCB0aW1lc3BlYyAqdHMpDQogfQ0KIA0KIHZvaWQNCi0gLXRzYWRkKHN0cnVjdCB0aW1lc3BlYyAq dHMsIHVuc2lnbmVkIGxvbmcgbnMpDQordHNhZGQoc3RydWN0IHRpbWVzcGVjICp0cywgdTY0IG5z KQ0KIHsNCiAJdHMtPnR2X25zZWMgKz0gbnM7DQogCXRzbm9ybWFsaXplKHRzKTsNCkBAIC0zMDIs MTEgKzMwMiwyOSBAQCB1cGRhdGVfc3RhdGlzdGljc190aW1lIChzdHJ1Y3Qgc3RhdGlzdGljcyAq cywNCiAJCXMtPmVuZCA9ICplbmQ7DQogfQ0KIAkJDQordm9pZA0KK2NoZWNrX2RlbHRhKHN0cnVj dCBzdGF0aXN0aWNzICpzLCBzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhKQ0KK3sNCisJdTY0IHZhbDsN CisJaWYgKGRlbHRhID09IE5VTEwpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0aW1l c3BlYyBwb2ludGVyIVxuIik7DQorCQlleGl0KC0yKTsNCisJfQ0KKw0KKwl2YWwgPSB0czJucyhk ZWx0YSk7DQorCWlmIChicmVha29uICYmIHZhbCA+IGJyZWFrb24pIHsNCisJCWZwcmludGYoc3Rk ZXJyLCAiYnJlYWtvbiB0aHJlc2hvbGQgZXhjZWVkZWQhIg0KKwkJCSIgc2FtcGxlOiAlbHUsIHZh bHVlOiAlbHVuc1xuIiwgDQorCQkJKHVuc2lnbmVkIGxvbmcpcy0+c2FtcGxlcywgKHVuc2lnbmVk IGxvbmcpIHZhbCk7DQorCQlleGl0KC0xKTsNCisJfQ0KK30NCisNCiAvKiBub3RlOiByYXcgdmFs dWVzIGFyZSBrZXB0IGluIG5hbm9zZWNvbmRzICovDQogdm9pZA0KIHVwZGF0ZV9zdGF0aXN0aWNz X2RhdGEgKHN0cnVjdCBzdGF0aXN0aWNzICpzLCBzdHJ1Y3QgdGltZXNwZWMgKnRzZGVsdGEpDQog ew0KLSAtCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7DQorCXU2NCB2YWw7DQogDQogCWlmIChzID09 IE5VTEwpIHsNCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzdGF0aXN0aWNzIHN0cnVjdHVy ZSFcbiIpOw0KQEAgLTM0NCwxMyArMzYyLDIzIEBAIHByaW50X3N0YXRpc3RpY3Moc3RydWN0IHN0 YXRpc3RpY3MgKnMpDQogCQkgICAgICAgbnMyeChydW5sZW4udHZfbnNlYywgcy0+dW5pdHMpLCBz dWZmaXgpOw0KIAl9DQogCXByaW50ZigiUnVuIFN0YXRpc3RpY3M6XG4iKTsNCi0gLQlwcmludGYo Ik51bWJlciBvZiBTYW1wbGVzOiAlbHVcbiIsIHMtPnNhbXBsZXMpOw0KKwlwcmludGYoIk51bWJl ciBvZiBTYW1wbGVzOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBzLT5zYW1wbGVzKTsNCiAJcHJp bnRmKCJNaW51bXVtOiAgICAgICAgICAgJWx1JXNcbiIsIG5zMngocy0+bWluLCBzLT51bml0cyks IHN1ZmZpeCk7DQogCXByaW50ZigiTWF4aW11bTogICAgICAgICAgICVsdSVzXG4iLCBuczJ4KHMt Pm1heCwgcy0+dW5pdHMpLCBzdWZmaXgpOw0KIAlwcmludGYoIkF2ZXJhZ2U6ICAgICAgICAgICAl bHUlc1xuIiwgDQogCSAgICAgICBuczJ4KHMtPmFjY3VtIC8gcy0+c2FtcGxlcywgcy0+dW5pdHMp LCBzdWZmaXgpOw0KIH0NCiANCitpbnQNCittaXNzZWRfc2VxdWVuY2Uoc3RydWN0IHN0YXRpc3Rp Y3MgKnMsIGludCBleHBlY3RlZCwgaW50IGdvdCkNCit7DQorCXMtPm1pc3NlZF9zZXF1ZW5jZSsr Ow0KKwlpZiAoZXhwZWN0ZWQgPCBnb3QpDQorCQlyZXR1cm4gZ290KzE7DQorCXJldHVybiBleHBl Y3RlZDsNCit9DQorDQorDQogdm9pZA0KIGZyZWVfc3RhdGlzdGljcyhzdHJ1Y3Qgc3RhdGlzdGlj cyAqcykNCiB7DQpAQCAtMzY3LDcgKzM5NSw3IEBAIHN0cnVjdCBoaXN0b2dyYW0gKg0KIHNldHVw X2hpc3RvZ3JhbSAoaW50IHVuaXRzLCBpbnQgbmJ1Y2tldHMsIGludCBidWNrZXR3aWR0aCwgaW50 IGJhc2UpDQogew0KIAlzdHJ1Y3QgaGlzdG9ncmFtICpoOw0KLSAtCWludCBoc2l6ZSA9IHNpemVv ZihzdHJ1Y3QgaGlzdG9ncmFtKSArIChuYnVja2V0cyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7 IA0KKwlpbnQgaHNpemUgPSBzaXplb2Yoc3RydWN0IGhpc3RvZ3JhbSkgKyAobmJ1Y2tldHMgKiBz aXplb2YodTY0KSk7IA0KIA0KIAloID0gbWFsbG9jKGhzaXplKTsNCiAJaWYgKGggPT0gTlVMTCkg ew0KQEAgLTM4NSw3ICs0MTMsNyBAQCBzZXR1cF9oaXN0b2dyYW0gKGludCB1bml0cywgaW50IG5i dWNrZXRzLCBpbnQgYnVja2V0d2lkdGgsIGludCBiYXNlKQ0KIHZvaWQNCiBoaXN0b2dyYW1fcmVj b3JkKHN0cnVjdCBoaXN0b2dyYW0gKmgsIHN0cnVjdCB0aW1lc3BlYyAqdHMpDQogew0KLSAtCXVu c2lnbmVkIGxvbmcgbG9uZyB2YWw7DQorCXU2NCB2YWw7DQogDQogCWlmIChoID09IE5VTEwpIHsN CiAJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBoaXN0b2dyYW0gc3RydWN0dXJlIVxuIik7DQpA QCAtNDIzLDcgKzQ1MSw4IEBAIGhpc3RvZ3JhbV9wcmludChzdHJ1Y3QgaGlzdG9ncmFtICpoKQ0K IAlwcmludGYoIkhpc3RvZ3JhbSAoJWQgICVkJXMgYnVja2V0cylcbiIsDQogCSAgICAgICBoLT5u YnVja2V0cywgaC0+YnVja2V0d2lkdGgsIHN1ZmZpeCk7DQogCWZvciAoaSA9IDA7IGkgPCBoLT5u YnVja2V0czsgaSsrKQ0KLSAtCQlwcmludGYoIiU0LjRkJXM6ICVsdVxuIiwgaSpoLT5idWNrZXR3 aWR0aCwgc3VmZml4LCBoLT5idWNrZXRbaV0pOw0KKwkJcHJpbnRmKCIlNC40ZCVzOiAlbHVcbiIs IGkqaC0+YnVja2V0d2lkdGgsIHN1ZmZpeCwgDQorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaC0+ YnVja2V0W2ldKTsNCiANCiB9DQogDQpAQCAtNTE1LDMgKzU0NCw1MCBAQCBuZXRyYXRlX3R4X3Nv Y2tldChpbnQgcHJvdG9jb2wsIGludCBwb3J0LCBpbnQgcmVxdWVzdCkNCiAJfQ0KIAlyZXR1cm4g c29jazsNCiB9DQorDQoraW50DQorbmV0cmF0ZV9yeF9zb2NrZXQoaW50IHByb3RvY29sLCBpbnQg dHlwZSkNCit7DQorCWludCByZXQ7DQorCWludCBzb2NrOw0KKwljaGFyIHBvcnRzdHJpbmdbMTBd Ow0KKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsNCisNCisJbWVtc2V0KCZoaW50cywgMCwg c2l6ZW9mKGhpbnRzKSk7DQorCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsNCisJaGludHMu YWlfZmFtaWx5ID0gQUZfSU5FVDsNCisJaGludHMuYWlfc29ja3R5cGUgPSB0eXBlOw0KKwloaW50 cy5haV9wcm90b2NvbCA9IHByb3RvY29sOw0KKwlzcHJpbnRmKHBvcnRzdHJpbmcsICIlZCIsIHBv cnQpOw0KKw0KKwlkcHJpbnRmKCJjYWxsaW5nIGdldGFkZHJpbmZvXG4iKTsNCisJcmV0ID0gZ2V0 YWRkcmluZm8oTlVMTCwgcG9ydHN0cmluZywgJmhpbnRzLCAmYWkpOw0KKwlpZiAocmV0KSB7DQor CQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGZyb20gZ2V0YWRkcmluZm86ICVzXG4iLCBzdHJlcnJv cihyZXQpKTsNCisJCXJldHVybiAtcmV0Ow0KKwl9DQorDQorCWRwcmludGYoImNhbGxpbmcgc29j a2V0XG4iKTsNCisJc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUs IGFpLT5haV9wcm90b2NvbCk7DQorCWlmIChzb2NrIDwgMCkgew0KKwkJcGVycm9yICgicmVjZWl2 ZSBzb2NrZXQoKSIpOw0KKwkJcmV0dXJuIC0oZXJybm8pOw0KKwl9DQorDQorCWRwcmludGYoImNh bGxpbmcgYWNjZXB0XG4iKTsNCisJcmV0ID0gYmluZChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFp X2FkZHJsZW4pOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJcGVycm9yKCJiaW5kIik7DQorCQlyZXR1 cm4gLShlcnJubyk7DQorCX0NCisNCisJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQKSB7DQor CQlkcHJpbnRmKCJjYWxsaW5nIGxpc3RlblxuIik7DQorCQlyZXQgPSBsaXN0ZW4oc29jaywgU09N QVhDT05OKTsNCisJCWlmIChyZXQgPCAwKSB7DQorCQkJcGVycm9yKCJsaXN0ZW4oKSIpOw0KKwkJ CXJldHVybiAtKGVycm5vKTsNCisJCX0NCisJfQ0KKwlyZXR1cm4gc29jazsNCit9DQotIC0tIA0K MS42LjAuMQ0KDQoNCi0gRnJvbSBmYTg3MjE0MDNjOWUzMTExYWUyMzYxMzk0MTQwNjI4Njg2NDI1 MTRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxp YW1zQHJlZGhhdC5jb20+DQpEYXRlOiBXZWQsIDggT2N0IDIwMDggMTU6MTI6NTMgLTA1MDANClN1 YmplY3Q6IFtQQVRDSF0gYWRkIG5ldCBleGNoYW5nZQ0KDQpyZW1vdmVkIG5ldHJhdGVfcnhfc29j a2V0OyBhZGRlZCBmdW5jdGlvbiBleGNoYW5nZQ0KDQpTaWduZWQtb2ZmLWJ5OiBDbGFyayBXaWxs aWFtcyA8d2lsbGlhbXNAcmVkaGF0LmNvbT4NCi0gLS0tDQogbWFpbi5jIHwgIDEzMCArKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CiAxIGZpbGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQ0KDQpk aWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jDQppbmRleCBhMTNmN2Y2Li4yZWU1YWQzIDEwMDY0 NA0KLSAtLS0gYS9tYWluLmMNCisrKyBiL21haW4uYw0KQEAgLTQyLDYgKzQyLDcgQEAgaW50IHR5 cGUJPSBTT0NLX1NUUkVBTTsgIC8qIHR5cGUgb2Ygc29ja2V0ICovDQogaW50IG5vZGVsYXkJPSBG QUxTRTsJLyogdXNlIFRDUF9OT0RFTEFZIGZvciBUQ1Agc29ja2V0cyAqLw0KIGludCByb2xlIAk9 IDA7CQkvKiBzaG91bGQgYmUgZWl0aGVyIFRYIG9yIFJYICovDQogaW50IHJhdGUgCT0gREVGX1RY X1JBVEU7CS8qIHRyYW5zbWl0IHBhY2tldCByYXRlIGluIG5hbm9zZWNvbmRzICovDQordTY0IGJy ZWFrb24JPSAwOyAgICAgICAgICAgIC8qIHN0b3AgaWYgdGhpcyB0aHJlc2hvbGQgZXhjZWVkZWQg Ki8NCiBpbnQgc2l6ZSAJPSBERUZfTVNHX1NJWkU7CS8qIHNpemUgb2YgbWVzc2FnZSAqLw0KIGlu dCBwb3J0IAk9IERFRl9QT1JUOwkvKiB0eC9yeCBwb3J0IHRvIHVzZSAqLw0KIGludCBtdWx0aWNh c3QgCT0gRkFMU0U7CS8qIGFyZSB3ZSBtdWx0aWNhc3Rpbmc/ICovDQpAQCAtNjksNiArNzAsNyBA QCBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCiAJeyJoZWxwIiwgMCwg MCwgSEVMUH0sDQogCXsibm9kZWxheSIsIDAsIDAsIE5PREVMQVl9LA0KIAl7Imhpc3RvZ3JhbSIs IDAsIDAsIEhJU1RPR1JBTX0sDQorCXsiYnJlYWtvbiIsIDEsIDAsIEJSRUFLT059LA0KIAl7MCwg MCwgMCwgMH0sDQogfTsNCiANCkBAIC05MSw1MiArOTMsNiBAQCB2b2lkIHVzYWdlKHZvaWQpDQog fQ0KIA0KIA0KLSAtaW50DQotIC1uZXRyYXRlX3J4X3NvY2tldChpbnQgcHJvdG9jb2wsIGludCB0 eXBlKQ0KLSAtew0KLSAtCWludCByZXQ7DQotIC0JaW50IHNvY2s7DQotIC0JY2hhciBwb3J0c3Ry aW5nWzEwXTsNCi0gLQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsNCi0gLQ0KLSAtCW1lbXNl dCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOw0KLSAtCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFT U0lWRTsNCi0gLQloaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOw0KLSAtCWhpbnRzLmFpX3NvY2t0 eXBlID0gdHlwZTsNCi0gLQloaW50cy5haV9wcm90b2NvbCA9IHByb3RvY29sOw0KLSAtCXNwcmlu dGYocG9ydHN0cmluZywgIiVkIiwgcG9ydCk7DQotIC0NCi0gLQlkcHJpbnRmKCJjYWxsaW5nIGdl dGFkZHJpbmZvXG4iKTsNCi0gLQlyZXQgPSBnZXRhZGRyaW5mbyhOVUxMLCBwb3J0c3RyaW5nLCAm aGludHMsICZhaSk7DQotIC0JaWYgKHJldCkgew0KLSAtCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9y IGZyb20gZ2V0YWRkcmluZm86ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsNCi0gLQkJcmV0dXJuIC1y ZXQ7DQotIC0JfQ0KLSAtDQotIC0JZHByaW50ZigiY2FsbGluZyBzb2NrZXRcbiIpOw0KLSAtCXNv Y2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9j b2wpOw0KLSAtCWlmIChzb2NrIDwgMCkgew0KLSAtCQlwZXJyb3IgKCJyZWNlaXZlIHNvY2tldCgp Iik7DQotIC0JCXJldHVybiAtKGVycm5vKTsNCi0gLQl9DQotIC0NCi0gLQlkcHJpbnRmKCJjYWxs aW5nIGFjY2VwdFxuIik7DQotIC0JcmV0ID0gYmluZChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFp X2FkZHJsZW4pOw0KLSAtCWlmIChyZXQgPCAwKSB7DQotIC0JCXBlcnJvcigiYmluZCIpOw0KLSAt CQlyZXR1cm4gLShlcnJubyk7DQotIC0JfQ0KLSAtDQotIC0JaWYgKHByb3RvY29sID09IElQUFJP VE9fVENQKSB7DQotIC0JCWRwcmludGYoImNhbGxpbmcgbGlzdGVuXG4iKTsNCi0gLQkJcmV0ID0g bGlzdGVuKHNvY2ssIFNPTUFYQ09OTik7DQotIC0JCWlmIChyZXQgPCAwKSB7DQotIC0JCQlwZXJy b3IoImxpc3RlbigpIik7DQotIC0JCQlyZXR1cm4gLShlcnJubyk7DQotIC0JCX0NCi0gLQl9DQot IC0JcmV0dXJuIHNvY2s7DQotIC19DQogDQogaW50DQogbmV0cmF0ZV9kYWVtb24odm9pZCkNCkBA IC0xNDUsNyArMTAxLDcgQEAgbmV0cmF0ZV9kYWVtb24odm9pZCkNCiAJaW50IHNlcnZzb2NrLCBz b2NrOw0KIAlzb2NrbGVuX3QgY2xpZW50bGVuOw0KIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50 Ow0KLSAtCXN0cnVjdCBuZXRyYXRlX2V4Y2hhbmdlIGV4LCBhY2s7DQorCXN0cnVjdCBuZXRyYXRl X2V4Y2hhbmdlIGV4Ow0KIA0KIAlkcHJpbnRmKCJuZXRyYXRlX2RhZW1vbjogc3RhcnRpbmdcbiIp Ow0KIAlzZXJ2c29jayA9IG5ldHJhdGVfcnhfc29ja2V0KHByb3RvY29sLCB0eXBlKTsNCkBAIC0x ODMsMTggKzEzOSw2IEBAIG5ldHJhdGVfZGFlbW9uKHZvaWQpDQogDQogCXNpemUgPSBleC5zaXpl Ow0KIA0KLSAtCWFjayA9IGV4Ow0KLSAtCWFjay5yZXF1ZXN0ID0gUkVRVUVTVF9BQ0s7DQotIC0N Ci0gLQlkcHJpbnRmKCJBQ0snaW5nIGV4Y2hhbmdlXG4iKTsNCi0gLQlyZXQgPSB3cml0ZShzb2Nr LCAmYWNrLCBzaXplb2YoYWNrKSk7DQotIC0JaWYgKHJldCA8IDApIHsNCi0gLQkJZnByaW50Zihz dGRlcnIsICJlcnJvciBhY2tub3dsZWRnaW5nIGV4Y2hhbmdlIHJlcXVlc3Q6ICVzXG4iLA0KLSAt CQkJc3RyZXJyb3IoZXJybm8pKTsNCi0gLQkJY2xvc2Uoc29jayk7DQotIC0JCWV4aXQoLTQpOw0K LSAtCX0NCi0gLQ0KIAlzd2l0Y2ggKGV4LnJlcXVlc3QpIHsNCiANCiAJY2FzZSBTRVJWRVI6DQpA QCAtMjExLDYgKzE1NSw0NyBAQCBuZXRyYXRlX2RhZW1vbih2b2lkKQ0KIH0NCiANCiANCit2b2lk DQorbmV0cmF0ZV9zZW5kYWNrKGludCBzb2NrKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IG5l dHJhdGVfZXhjaGFuZ2UgYWNrOw0KKw0KKwltZW1zZXQoJmFjaywgMCwgc2l6ZW9mKGFjaykpOw0K KwlhY2subWFqb3IgPSBNQUpPUjsNCisJYWNrLm1pbm9yID0gTUlOT1I7DQorCWFjay5yZXF1ZXN0 ID0gUkVRVUVTVF9BQ0s7DQorDQorCWRwcmludGYoIkFDSydpbmcgZXhjaGFuZ2VcbiIpOw0KKwly ZXQgPSB3cml0ZShzb2NrLCAmYWNrLCBzaXplb2YoYWNrKSk7DQorCWlmIChyZXQgPCAwKSB7DQor CQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGFja25vd2xlZGdpbmcgZXhjaGFuZ2UgcmVxdWVzdDog JXNcbiIsDQorCQkJc3RyZXJyb3IoZXJybm8pKTsNCisJCWNsb3NlKHNvY2spOw0KKwkJZXhpdCgt NCk7DQorCX0NCit9DQorCQ0KKwkNCit1NjQNCithZGp1c3RucyhjaGFyICpzdWZmaXgsIHU2NCB2 YWwpDQorew0KKwl1NjQgbmV3dmFsID0gdmFsOw0KKwlpZiAoc3VmZml4KSB7DQorCQlpZiAoc3Ry Y21wKHN1ZmZpeCwgIm1zIikgPT0gMCkNCisJCQluZXd2YWwgPSBNU19UT19OUyh2YWwpOw0KKwkJ ZWxzZSBpZiAoc3RyY21wKHN1ZmZpeCwgInVzIikgPT0gMCkNCisJCQluZXd2YWwgPSBVU19UT19O Uyh2YWwpOw0KKwkJZWxzZSBpZiAoc3RyY21wKHN1ZmZpeCwgInMiKSkNCisJCQluZXd2YWwgPSB2 YWwgKiBOU19QRVJfU0VDOw0KKwkJZWxzZSB7DQorCQkJZnByaW50ZihzdGRlcnIsICJ1bmtub3du IHRpbWUgc3VmZml4OiAlc1xuIiwgc3VmZml4KTsNCisJCQlleGl0KC0xKTsNCisJCX0NCisJfQ0K KwlyZXR1cm4gbmV3dmFsOw0KK30NCisNCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp DQogew0KIAlpbnQgcmV0Ow0KQEAgLTIyMCw3ICsyMDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogDQogCXN0cmNweShob3N0bmFtZSwgImxvY2FsaG9zdCIpOw0KIAl3aGls ZSAoMSkgew0KLSAtCQlvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAicnRhOno6Y2RtcCIs IA0KKwkJb3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgInJ0YTp6OmNkbXBiOiIsIA0KIAkJ CQkgIGxvbmdfb3B0aW9ucywgJmlkeCk7DQogCQlpZiAob3B0ID09IC0xKQ0KIAkJCWJyZWFrOw0K QEAgLTI0MCwyMyArMjI1LDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJ CQlicmVhazsNCiAJCWNhc2UgUkFURToNCiAJCQlyYXRlID0gc3RydG9sKG9wdGFyZywgJmVuZHB0 ciwgMTApOw0KLSAtCQkJaWYgKGVuZHB0cikgew0KLSAtCQkJCWlmIChzdHJjbXAoZW5kcHRyLCAi bXMiKSA9PSAwKQ0KLSAtCQkJCQlyYXRlID0gTVNfVE9fTlMocmF0ZSk7DQotIC0JCQkJZWxzZSBp ZiAoc3RyY21wKGVuZHB0ciwgInVzIikgPT0gMCkNCi0gLQkJCQkJcmF0ZSA9IFVTX1RPX05TKHJh dGUpOw0KLSAtCQkJCWVsc2UgaWYgKHN0cmNtcChlbmRwdHIsICJzIikpDQotIC0JCQkJCXJhdGUg PSByYXRlICogTlNfUEVSX1NFQzsNCi0gLQkJCQllbHNlIHsNCi0gLQkJCQkJZnByaW50ZihzdGRl cnIsICJ1bmtub3duIHRpbWUgc3VmZml4OiAlc1xuIiwgZW5kcHRyKTsNCi0gLQkJCQkJZXhpdCgt MSk7DQotIC0JCQkJfQ0KLSAtCQkJfQ0KKwkJCWlmIChlbmRwdHIpDQorCQkJCXJhdGUgPSBhZGp1 c3RucyhlbmRwdHIsIHJhdGUpOw0KIAkJCS8qIGRlZmF1bHQgKG5vIHN1ZmZpeCkgaXMgbWlsbGlz ZWNvbmRzICovDQogCQkJZWxzZQ0KIAkJCQlyYXRlID0gTVNfVE9fTlMocmF0ZSk7DQogCQkJZHBy aW50ZigicmF0ZSBzZXQgdG8gJWRtc1xuIiwgTlNfVE9fTVMocmF0ZSkpOw0KIAkJCWJyZWFrOw0K KwkJY2FzZSBCUkVBS09OOg0KKwkJCWJyZWFrb24gPSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRyLCAx MCk7DQorCQkJaWYgKGVuZHB0cikNCisJCQkJYnJlYWtvbiA9IGFkanVzdG5zKGVuZHB0ciwgYnJl YWtvbik7DQorCQkJZWxzZQ0KKwkJCQlicmVha29uID0gTVNfVE9fTlMoYnJlYWtvbik7DQorCQkJ ZHByaW50ZigiYnJlYWtvbiBzZXQgdG8gJWx1bXNcbiIsIA0KKwkJCQkodW5zaWduZWQgbG9uZykg TlNfVE9fTVMoYnJlYWtvbikpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKw0KIAkJY2FzZSBTSVpFOg0K IAkJCXNpemUgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7DQogCQkJZHByaW50Zigic2l6ZSBz ZXQgdG8gJWRcbiIsIHNpemUpOw0KLSAtLSANCjEuNi4wLjENCg0KDQotIEZyb20gZTVjZTBlOThm YzgxY2JiZmRiODhjZGQ0NzkwMjk2NWI3ZDczMWQxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEN CkZyb206IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0KRGF0ZTogV2VkLCA4 IE9jdCAyMDA4IDE1OjEzOjM4IC0wNTAwDQpTdWJqZWN0OiBbUEFUQ0hdIGJyZWFrb24gYW5kIHNo b3J0IHR5cGVuYW1lcw0KDQphZGRlZCB0aGUgQlJFQUtPTiBlbnVtZXJhdGVkIHR5cGUgYW5kIG9w dGlvbiB0byBzdG9wIG9uIGEgbGF0ZW5jeSBncmVhdGVyIHRoYW4gWDsgY2hhbmdlZCB0byBzaG9y dCB0eXBlbmFtZXMNCg0KU2lnbmVkLW9mZi1ieTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJl ZGhhdC5jb20+DQotIC0tLQ0KIG5ldHJhdGUuaCB8ICAgNTAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAxIGZpbGVzIGNoYW5nZWQsIDMwIGluc2Vy dGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvbmV0cmF0ZS5oIGIvbmV0 cmF0ZS5oDQppbmRleCBjMmFhYmE4Li45ZjA3M2RkIDEwMDY0NA0KLSAtLS0gYS9uZXRyYXRlLmgN CisrKyBiL25ldHJhdGUuaA0KQEAgLTMwLDcgKzMwLDcgQEANCiANCiBlbnVtIG9wdHZhbHMgeyBS WD0xLCBUWCwgUkFURSwgU0laRSwgVENQLCBVRFAsIFNDVFAsIA0KIAkgICAgICAgTVVMVEksIFBP UlQsIEhPU1QsIERFQlVHLCBIRUxQLCBEQUVNT04sDQotIC0JICAgICAgIFNFUlZFUiwgUlRULCBO T0RFTEFZLCBISVNUT0dSQU0sDQorCSAgICAgICBTRVJWRVIsIFJUVCwgTk9ERUxBWSwgSElTVE9H UkFNLCBCUkVBS09OLA0KIAkgICAgICAgTlVNX09QVF9WQUxTLA0KIH07DQogDQpAQCAtNTUsMTgg KzU1LDIyIEBAIGVudW0gb3B0dmFscyB7IFJYPTEsIFRYLCBSQVRFLCBTSVpFLCBUQ1AsIFVEUCwg U0NUUCwNCiAjZGVmaW5lIE5FVFJBVEVfTVNHX0RBVEEgMHhhNQ0KIA0KICNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPg0KK3R5cGVkZWYgX191MTYgIHUxNjsNCit0eXBlZGVmIF9fdTMyICB1MzI7DQor dHlwZWRlZiBfX3U2NCAgdTY0Ow0KKw0KIHN0cnVjdCBuZXRyYXRlX2V4Y2hhbmdlIHsNCi0gLQlf X3UxNiBtYWpvcjsNCi0gLQlfX3UxNiBtaW5vcjsNCi0gLQlfX3UxNiByZXF1ZXN0Ow0KLSAtCV9f dTE2IHNpemU7DQorCXUxNiBtYWpvcjsNCisJdTE2IG1pbm9yOw0KKwl1MTYgcmVxdWVzdDsNCisJ dTE2IHNpemU7DQogfTsJDQogDQogI2RlZmluZSBSRVFVRVNUX0FDSwkweGZmZmYNCiANCiBzdHJ1 Y3QgbmV0cmF0ZV9tZXNzYWdlIHsNCi0gLQl1bnNpZ25lZCBsb25nIG1zZ19sZW47CS8qIG1lc3Nh Z2UgbGVuZ3RoIChpbmNsdWRpbmcgaGVhZGVyKSAqLw0KLSAtCXVuc2lnbmVkIGxvbmcgbXNnX3Nl cTsJLyogc2VxdWVuY2UgbnVtYmVyICovDQorCXU2NCBtc2dfbGVuOwkvKiBtZXNzYWdlIGxlbmd0 aCAoaW5jbHVkaW5nIGhlYWRlcikgKi8NCisJdTY0IG1zZ19zZXE7CS8qIHNlcXVlbmNlIG51bWJl ciAqLw0KIAlzdHJ1Y3QgdGltZXNwZWMgbXNnX3RzOyAvKiB0aW1lIG1lc3NhZ2Ugd2FzIHNlbnQg Ki8NCiAJY2hhciBtc2dfZGF0YVtdOyAvKiBib2R5IG9mIG1lc3NhZ2UgKi8NCiB9Ow0KQEAgLTc2 LDYgKzgwLDcgQEAgZXh0ZXJuIGludCB0eXBlOw0KIGV4dGVybiBpbnQgbm9kZWxheTsNCiBleHRl cm4gaW50IHJvbGU7DQogZXh0ZXJuIGludCByYXRlOw0KK2V4dGVybiB1NjQgYnJlYWtvbjsNCiBl eHRlcm4gaW50IHNpemU7DQogZXh0ZXJuIGludCBtdWx0aWNhc3Q7DQogZXh0ZXJuIGludCBwb3J0 Ow0KQEAgLTg5LDE3ICs5NCwxOSBAQCBpbnQgbmV0cmF0ZV9yZWNlaXZlKGludCBzb2NrKTsNCiBp bnQgbmV0cmF0ZV9ydHQodm9pZCk7DQogaW50IG5ldHJhdGVfc2VydmVyKGludCBzb2NrKTsNCiBp bnQgbmV0cmF0ZV90eF9zb2NrZXQoaW50IHByb3RvY29sLCBpbnQgcG9ydCwgaW50IHJlcXVlc3Qp Ow0KK2ludCBuZXRyYXRlX3J4X3NvY2tldChpbnQgcHJvdG9jb2wsIGludCB0eXBlKTsNCit2b2lk IG5ldHJhdGVfc2VuZGFjayhpbnQgc29jayk7DQogdm9pZCBzdG9wX2V4ZWN1dGlvbih2b2lkKTsN CiB2b2lkIGRwcmludGYoY2hhciAqLCAuLi4pOw0KIA0KLSAtdW5zaWduZWQgbG9uZyBsb25nIHRz Mm5zKHN0cnVjdCB0aW1lc3BlYyAqdHMpOw0KLSAtdW5zaWduZWQgbG9uZyB0czJ1cyhzdHJ1Y3Qg dGltZXNwZWMgKnRzKTsNCi0gLXVuc2lnbmVkIGxvbmcgdHMybXMoc3RydWN0IHRpbWVzcGVjICp0 cyk7DQordTY0IHRzMm5zKHN0cnVjdCB0aW1lc3BlYyAqdHMpOw0KK3U2NCB0czJ1cyhzdHJ1Y3Qg dGltZXNwZWMgKnRzKTsNCit1NjQgdHMybXMoc3RydWN0IHRpbWVzcGVjICp0cyk7DQogdm9pZCB0 c2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqbGF0ZXIsIA0KIAkJICAgIHN0cnVjdCB0aW1lc3BlYyAq ZWFybGllciwgDQogCQkgICAgc3RydWN0IHRpbWVzcGVjICpkZWx0YSk7DQogdm9pZCB0c25vcm1h bGl6ZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsNCi0gLXZvaWQgdHNhZGQoc3RydWN0IHRpbWVzcGVj ICp0cywgdW5zaWduZWQgbG9uZyBucyk7DQordm9pZCB0c2FkZChzdHJ1Y3QgdGltZXNwZWMgKnRz LCB1NjQgbnMpOw0KIA0KIA0KIHN0cnVjdCByaW5nX2J1ZmZlciB7DQpAQCAtMTIzLDEyICsxMzAs MTMgQEAgZW51bSB1bml0cyB7IFNFQz0xLCBNU0VDLCBVU0VDLCBOU0VDIH07DQogc3RydWN0IHN0 YXRpc3RpY3Mgew0KIAlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7DQogCXN0cnVjdCB0aW1lc3BlYyBl bmQ7DQotIC0JdW5zaWduZWQgbG9uZyBtaW47DQotIC0JdW5zaWduZWQgbG9uZyBtYXg7DQotIC0J dW5zaWduZWQgbG9uZyBhdmVyYWdlOw0KLSAtCXVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bTsNCi0g LQl1bnNpZ25lZCBsb25nIHNhbXBsZXM7DQotIC0JdW5zaWduZWQgaW50ICB1bml0czsNCisJdTY0 IG1pbjsNCisJdTY0IG1heDsNCisJdTY0IGF2ZXJhZ2U7DQorCXU2NCBhY2N1bTsNCisJdTY0IHNh bXBsZXM7DQorCXUzMiB1bml0czsNCisJdTMyIG1pc3NlZF9zZXF1ZW5jZTsNCiB9Ow0KIA0KIA0K QEAgLTEzNiwxNyArMTQ0LDE5IEBAIHN0cnVjdCBzdGF0aXN0aWNzICpzZXR1cF9zdGF0aXN0aWNz KGludCB1bml0cyk7DQogdm9pZCB1cGRhdGVfc3RhdGlzdGljc19kYXRhKHN0cnVjdCBzdGF0aXN0 aWNzICpzLCBzdHJ1Y3QgdGltZXNwZWMgKnRzZGVsdGEpOw0KIHZvaWQgdXBkYXRlX3N0YXRpc3Rp Y3NfdGltZShzdHJ1Y3Qgc3RhdGlzdGljcyAqcywgDQogCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAq c3RhcnQsIHN0cnVjdCB0aW1lc3BlYyAqZW5kKTsNCit2b2lkIGNoZWNrX2RlbHRhKHN0cnVjdCBz dGF0aXN0aWNzICpzLCBzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhKTsNCiB2b2lkIHByaW50X3N0YXRp c3RpY3Moc3RydWN0IHN0YXRpc3RpY3MgKnMpOw0KIHZvaWQgZnJlZV9zdGF0aXN0aWNzKHN0cnVj dCBzdGF0aXN0aWNzICpzKTsNCitpbnQgbWlzc2VkX3NlcXVlbmNlKHN0cnVjdCBzdGF0aXN0aWNz ICpzLCBpbnQgZXhwZWN0ZWQsIGludCBnb3QpOw0KIA0KIHN0cnVjdCBoaXN0b2dyYW0gew0KIAlp bnQgdW5pdHM7DQogCWludCBiYXNlOw0KIAlpbnQgbmJ1Y2tldHM7DQogCWludCBidWNrZXR3aWR0 aDsNCi0gLQl1bnNpZ25lZCBsb25nIHVuZGVyZmxvdzsNCi0gLQl1bnNpZ25lZCBsb25nIG92ZXJm bG93Ow0KLSAtCXVuc2lnbmVkIGxvbmcgYnVja2V0W107DQorCXU2NCB1bmRlcmZsb3c7DQorCXU2 NCBvdmVyZmxvdzsNCisJdTY0IGJ1Y2tldFtdOw0KIH07DQogDQogc3RydWN0IGhpc3RvZ3JhbSAq c2V0dXBfaGlzdG9ncmFtIChpbnQgdW5pdHMsIGludCBuYnVja2V0cywgDQotIC0tIA0KMS42LjAu MQ0KDQoNCi0gRnJvbSA3NjFkNDlmODQ2ZTE5NDdkNzA4YzNiMjA1M2IyZjA0ODU2MjQ4NWJkIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJl ZGhhdC5jb20+DQpEYXRlOiBUdWUsIDIxIE9jdCAyMDA4IDIwOjQ1OjQ4IC0wNTAwDQpTdWJqZWN0 OiBbUEFUQ0hdIGtlZXAgZ29pbmcgb24gc2VxdWVuY2UgbWlzbWF0Y2gNCg0KZG9udCBleGl0IG9u IHNlcXVlbmNlIG1pc21hdGNoOyBhZGRlZCBleGNoYW5nZSBjb2RlDQoNClNpZ25lZC1vZmYtYnk6 IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0KLSAtLS0NCiByZWNlaXZlLmMg IHwgICAyNyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0NCiBydHQuYyAgICAgIHwgICAgMiAr LQ0KIHNlcnZlci5jICAgfCAgICA1ICsrKystDQogdHJhbnNtaXQuYyB8ICAgIDIgKy0NCiA0IGZp bGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0t Z2l0IGEvcmVjZWl2ZS5jIGIvcmVjZWl2ZS5jDQppbmRleCBiOWEyNTVhLi43OThkYWZmIDEwMDY0 NA0KLSAtLS0gYS9yZWNlaXZlLmMNCisrKyBiL3JlY2VpdmUuYw0KQEAgLTU0LDI2ICs1NCwzNiBA QCBuZXRyYXRlX3JlY2VpdmUoaW50IGNvbnNvY2spDQogCS8qIHNldCB1cCBvdXIgcmluZyBidWZm ZXJzICovDQogCXIgPSBzZXR1cF9yaW5nX2J1ZmZlcnMoMTAsIGJ1ZnNpemUpOw0KIA0KLSAtDQog CS8qIGFsbG9jYXRlIHN0YXRpc3RpY3Mgc3BhY2UgKi8NCiAJc3RhdHMgPSBzZXR1cF9zdGF0aXN0 aWNzKE1TRUMpOw0KIA0KKwkvKiBtYXJrIG91ciBzdGFydCB0aW1lICovDQorCXN0YXR1cyA9IGNs b2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3VycmVudCk7DQorCWlmIChzdGF0dXMgPCAw KSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGZyb20gY2xvY2tfZ2V0dGltZTogJXNcbiIs IA0KKwkJCXN0cmVycm9yKGFicyhzdGF0dXMpKSk7DQorCQlyZXR1cm4gKGludCkgc3RhdHVzOw0K Kwl9DQorCXVwZGF0ZV9zdGF0aXN0aWNzX3RpbWUoc3RhdHMsICZjdXJyZW50LCBOVUxMKTsNCisN CisJLyogYWNrIHRoZSByZXF1ZXN0IHNvIHRoZSB0cmFuc21pdHRlciBzdGFydHMgKi8NCisJbmV0 cmF0ZV9zZW5kYWNrKGNvbnNvY2spOw0KKw0KKwkvKiBnZXQgYSB2YWxpZCAibGFzdCIgdGltZSAq Lw0KIAlzdGF0dXMgPSBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmxhc3QpOw0KIAlp ZiAoc3RhdHVzIDwgMCkgew0KIAkJZnByaW50ZihzdGRlcnIsICJlcnJvciBmcm9tIGNsb2NrX2dl dHRpbWU6ICVzXG4iLCANCiAJCQlzdHJlcnJvcihhYnMoc3RhdHVzKSkpOw0KIAkJcmV0dXJuIChp bnQpIHN0YXR1czsNCiAJfQ0KLSAtCXVwZGF0ZV9zdGF0aXN0aWNzX3RpbWUoc3RhdHMsICZsYXN0 LCBOVUxMKTsNCiANCiAJLyogc2F2ZSBvdXIgYmFpbG91dCBwb2ludCBmb3IgU0lHSU5UICovDQog CXNldGptcChqbXBidWYpOw0KLSAtDQogCWRwcmludGYoImVudGVyaW5nIHJlY2VpdmUgbG9vcFxu Iik7DQogDQogCS8qIGxvb3AgdW50aWwgZG9uZSAqLw0KIAl3aGlsZSghaW50ZXJydXB0ZWQpIHsN Ci0gLQkJcHRyID0gZ2V0X25leHRfcmluZ19idWZmZXIocik7DQorCQltc2cgPSBwdHIgPSBnZXRf bmV4dF9yaW5nX2J1ZmZlcihyKTsNCiAJCXJldCA9IHJlYWRfbWVzc2FnZShjb25zb2NrLCBwdHIs IGJ1ZnNpemUpOw0KIAkJaWYgKHJldCA8PSAwKQ0KIAkJCWJyZWFrOw0KQEAgLTg3LDE1ICs5Nywx NiBAQCBuZXRyYXRlX3JlY2VpdmUoaW50IGNvbnNvY2spDQogCQl9DQogCQlpZiAoc2VxdWVuY2Ur Kykgew0KIAkJCXRzZGVsdGEoJmN1cnJlbnQsICZsYXN0LCAmZGVsdGEpOw0KKwkJCWNoZWNrX2Rl bHRhKHN0YXRzLCAmZGVsdGEpOw0KIAkJCXVwZGF0ZV9zdGF0aXN0aWNzX2RhdGEoc3RhdHMsICZk ZWx0YSk7DQogCQl9DQotIC0JCW1zZyA9IHB0cjsNCisJCWVsc2UNCisJCQlkcHJpbnRmKCJza2lw cGVkIGZpcnN0IHBhY2tldFxuIik7DQogCQlpZiAobXNnLT5tc2dfc2VxICE9IHNlcXVlbmNlKSB7 DQogCQkJZnByaW50ZihzdGRlcnIsICJzZXF1ZW5jZSBudW1iZXIgd3JvbmchXG4iDQogCQkJCSIg ICAgY2FsY3VsYXRlZDogJWx1LCByZWNlaXZlZDogJWx1XG4iLCANCi0gLQkJCQlzZXF1ZW5jZSwg bXNnLT5tc2dfc2VxKTsNCi0gLQkJCWNsb3NlKGNvbnNvY2spOw0KLSAtCQkJYnJlYWs7DQorCQkJ CXNlcXVlbmNlLCAodW5zaWduZWQgbG9uZykgbXNnLT5tc2dfc2VxKTsNCisJCQlzZXF1ZW5jZSA9 IG1pc3NlZF9zZXF1ZW5jZShzdGF0cywgc2VxdWVuY2UsIG1zZy0+bXNnX3NlcSk7DQogCQl9DQog CQlsYXN0ID0gY3VycmVudDsNCiAJfQ0KZGlmZiAtLWdpdCBhL3J0dC5jIGIvcnR0LmMNCmluZGV4 IDI2NGE5YTYuLjVmOWQwNTIgMTAwNjQ0DQotIC0tLSBhL3J0dC5jDQorKysgYi9ydHQuYw0KQEAg LTM2LDcgKzM2LDcgQEAgc3RhdGljIHN0cnVjdCByaW5nX2J1ZmZlciAqdHhfcmluZzsNCiBzdGF0 aWMgc3RydWN0IHJpbmdfYnVmZmVyICpyeF9yaW5nOw0KIHN0YXRpYyBpbnQgYnVmc2l6ZTsNCiAN Ci0gLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2VxdWVuY2UgPSAwOw0KK3N0YXRpYyB1NjQg c2VxdWVuY2UgPSAwOw0KIA0KIHN0YXRpYyBpbnQgc29jayA9IC0xOw0KIA0KZGlmZiAtLWdpdCBh L3NlcnZlci5jIGIvc2VydmVyLmMNCmluZGV4IDlkMjA1YmEuLmY0Yzk1MDggMTAwNjQ0DQotIC0t LSBhL3NlcnZlci5jDQorKysgYi9zZXJ2ZXIuYw0KQEAgLTQyLDcgKzQyLDcgQEAgaW50DQogbmV0 cmF0ZV9zZXJ2ZXIoaW50IGNvbnNvY2spDQogew0KIAlpbnQgcmV0Ow0KLSAtCXVuc2lnbmVkIGxv bmcgcGFja2V0cyA9IDA7DQorCXU2NCBwYWNrZXRzID0gMDsNCiAJc3RydWN0IHJpbmdfYnVmZmVy ICpyOw0KIAkNCiAJYnVmc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlKSArIHNp emU7DQpAQCAtNTIsNiArNTIsOSBAQCBuZXRyYXRlX3NlcnZlcihpbnQgY29uc29jaykNCiANCiAJ ZHByaW50ZigiZW50ZXJpbmcgc2VydmVyIGxvb3BcbiIpOw0KIA0KKwkvKiBzZW5kIHRoZSBhY2sg dG8gc3RhcnQgdGhlIHRyYW5zbWl0dGVyICovDQorCW5ldHJhdGVfc2VuZGFjayhjb25zb2NrKTsN CisNCiAJLyogc2F2ZSBvdXIgYmFpbG91dCBwb2ludCBmb3IgU0lHSU5UICovDQogCXNldGptcChq bXBidWYpOw0KIA0KZGlmZiAtLWdpdCBhL3RyYW5zbWl0LmMgYi90cmFuc21pdC5jDQppbmRleCA1 ZTA5YmY2Li5mMGRiMTg2IDEwMDY0NA0KLSAtLS0gYS90cmFuc21pdC5jDQorKysgYi90cmFuc21p dC5jDQpAQCAtMjksNyArMjksNyBAQA0KICNpbmNsdWRlICJuZXR3b3JraW5nLmgiDQogDQogDQot IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNlcXVlbmNlID0gMDsNCitzdGF0aWMgdTY0IHNl cXVlbmNlID0gMDsNCiANCiBpbnQNCiBuZXRyYXRlX3RyYW5zbWl0KHZvaWQpDQotIC0tIA0KMS42 LjAuMQ0KDQoNCi0gRnJvbSBlNmUwNDU0YTFiOGI3YzU3YzE0NTljMzQ5OGJmNWJkOGUzNzExOGEz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1z QHJlZGhhdC5jb20+DQpEYXRlOiBUdWUsIDIxIE9jdCAyMDA4IDIwOjUyOjI0IC0wNTAwDQpTdWJq ZWN0OiBbUEFUQ0hdIHBhY2tldCBza2lwIGFuZCBjb25uZWN0ZWQgVURQDQoNCmFkZGVkIGxvZ2lj IHRvIHB1dCBVRFAgc29ja2V0IGluIGNvbm5lY3RlZCBtb2RlOyBhZGRlZCBwYWNrZXQgc2tpcCBv cHRpb24NCmFkZGVkIHZlcnNpb25pbmcgaW4gdGhlIE1ha2VmaWxlDQoNClNpZ25lZC1vZmYtYnk6 IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0KLSAtLS0NCiAuZ2l0aWdub3Jl IHwgICAgMSArDQogTWFrZWZpbGUgICB8ICAgIDcgKysrKystLQ0KIG1haW4uYyAgICAgfCAgIDQx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tDQogbmV0cmF0ZS5oICB8 ICAgMTEgKysrKysrKysrLS0NCiByZWNlaXZlLmMgIHwgICAgOSArKysrKysrLS0NCiBydHQuYyAg ICAgIHwgICAgOSArKysrKysrKysNCiBzZXJ2ZXIuYyAgIHwgICAgOSArKysrKysrLS0NCiB0cmFu c21pdC5jIHwgICAxMCArKysrKysrKysrDQogOCBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25z KCspLCAxNiBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdu b3JlDQppbmRleCAyZTAxZmUzLi5kMDU2ZjI3IDEwMDY0NA0KLSAtLS0gYS8uZ2l0aWdub3JlDQor KysgYi8uZ2l0aWdub3JlDQpAQCAtMSwzICsxLDQgQEANCiAqLm8NCiAqfg0KIG5ldHJhdGUNCisq LmJ6Mg0KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCmluZGV4IGU5YWQ4NTQuLmQ3 NWY3NDEgMTAwNjQ0DQotIC0tLSBhL01ha2VmaWxlDQorKysgYi9NYWtlZmlsZQ0KQEAgLTMsNiAr Myw5IEBAIENGTEFHUwk6PSAtZyAtTzIgLVdhbGwNCiBTUkMJOj0gJCh3aWxkY2FyZCAqLmMpDQog SERSCTo9ICQod2lsZGNhcmQgKi5oKQ0KIE9CSgk6PSAkKHN1YnN0IC5jLC5vLCQoU1JDKSkNCitN QUpPUgk6PSAkKHNoZWxsIGF3ayAnL01BSk9SLyB7cHJpbnQgJCQzfScgbmV0cmF0ZS5oKQ0KK01J Tk9SCTo9ICQoc2hlbGwgYXdrICcvTUlOT1IvIHtwcmludCAkJDN9JyBuZXRyYXRlLmgpDQorVkVS U0lPTgk6PSAkKE1BSk9SKS4kKE1JTk9SKQ0KIA0KIG5ldHJhdGU6CSQoT0JKKQ0KIAkkKENDKSAk KENGTEFHUykgLW8gbmV0cmF0ZSAkKE9CSikgLWxydA0KQEAgLTE1LDUgKzE4LDUgQEAgY2xlYW46 DQogdGFyYmFsbDogIGNsZWFuDQogCW1rZGlyIC1wIHRtcC9uZXRyYXRlDQogCWNwIE1ha2VmaWxl ICQoU1JDKSAkKEhEUikgdG1wL25ldHJhdGUNCi0gLQkoY2QgdG1wICYmIHRhciAtY2p2ZiBuZXRy YXRlLnRhci5iejIgbmV0cmF0ZSkNCi0gLQltdiB0bXAvbmV0cmF0ZS50YXIuYnoyIC4NCisJKGNk IHRtcCAmJiB0YXIgLWNqdmYgbmV0cmF0ZS0kKFZFUlNJT04pLnRhci5iejIgbmV0cmF0ZSkNCisJ bXYgdG1wL25ldHJhdGUtJChWRVJTSU9OKS50YXIuYnoyIC4NCmRpZmYgLS1naXQgYS9tYWluLmMg Yi9tYWluLmMNCmluZGV4IDJlZTVhZDMuLjAyOTNhMWIgMTAwNjQ0DQotIC0tLSBhL21haW4uYw0K KysrIGIvbWFpbi5jDQpAQCAtNTAsNiArNTAsNyBAQCBpbnQgZGVidWdnaW5nIAk9IEZBTFNFOwkv KiBBcmUgd2UgZWRidWdnaW5nPyAqLw0KIGludCBpbnRlcnJ1cHRlZCA9IEZBTFNFOwkvKiBoYXZl IHdlIGJlZW4gaW50ZXJydXB0ZWQ/ICovDQogam1wX2J1ZiBqbXBidWY7CQkJLyogYmFpbG91dCBz dGF0ZSBmb3IgYmVpbmcgaW50ZXJydXB0ZWQgKi8NCiBpbnQgaGlzdG9ncmFtICAgPSBGQUxTRTsJ Lyoga2VlcCBhIGhpc3RvZ3JhbSBvZiB0aW1lIHZhbHVlcyAqLw0KK2ludCBza2lwCT0gMDsJCS8q IG51bWJlciBvZiBwYWNrZXRzIHRvIHNraXAgYmVmb3JlIG1lYXN1cmluZyAqLw0KIGNoYXIgaG9z dG5hbWVbMTAyNF07CQkvKiBob3N0IHRvIGNvbm5lY3QgdG8gKi8NCiANCiBzdGF0aWMgdm9pZCBp bnRlcnJ1cHQoaW50IHNpZyk7DQpAQCAtNzEsNiArNzIsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlv biBsb25nX29wdGlvbnNbXSA9IHsNCiAJeyJub2RlbGF5IiwgMCwgMCwgTk9ERUxBWX0sDQogCXsi aGlzdG9ncmFtIiwgMCwgMCwgSElTVE9HUkFNfSwNCiAJeyJicmVha29uIiwgMSwgMCwgQlJFQUtP Tn0sDQorCXsic2tpcCIsIDEsIDAsIFNLSVB9LA0KIAl7MCwgMCwgMCwgMH0sDQogfTsNCiANCkBA IC0xMTYsMTYgKzExOCwzNSBAQCBuZXRyYXRlX2RhZW1vbih2b2lkKQ0KIAkJfQ0KIAkJY2xvc2Uo c2VydnNvY2spOw0KIAkJZHByaW50Zigib3V0IG9mIGFjY2VwdFxuIik7DQorCQlkcHJpbnRmKCJj YWxsaW5nIHJlYWQgZm9yIGV4Y2hhbmdlXG4iKTsNCisJCXJldCA9IHJlYWQoc29jaywgJmV4LCBz aXplb2YoZXgpKTsNCisJCWlmIChyZXQgPCAwKSB7DQorCQkJZnByaW50ZihzdGRlcnIsICJlcnJv ciByZWFkaW5nIGV4Y2hhbmdlIG1lc3NhZ2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KKwkJ CWNsb3NlKHNvY2spOw0KKwkJCWV4aXQoLTIpOw0KKwkJfQ0KIAl9DQotIC0JZWxzZQ0KLSAtCQlz b2NrID0gc2VydnNvY2s7DQorCWVsc2Ugew0KKwkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7DQor CQlzb2NrbGVuX3QgYWRkcmxlbjsNCiANCi0gLQlkcHJpbnRmKCJjYWxsaW5nIHJlYWQgZm9yIGV4 Y2hhbmdlXG4iKTsNCi0gLQlyZXQgPSByZWFkKHNvY2ssICZleCwgc2l6ZW9mKGV4KSk7DQotIC0J aWYgKHJldCA8IDApIHsNCi0gLQkJZnByaW50ZihzdGRlcnIsICJlcnJvciByZWFkaW5nIGV4Y2hh bmdlIG1lc3NhZ2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KLSAtCQljbG9zZShzb2NrKTsN Ci0gLQkJZXhpdCgtMik7DQorCQlzb2NrID0gc2VydnNvY2s7DQorCQlkcHJpbnRmKCJDYWxsaW5n IHJlY3Zmcm9tIGZvciBleGNoYW5nZVxuIik7DQorCQlyZXQgPSByZWN2ZnJvbShzb2NrLCAmZXgs IHNpemVvZihleCksIDAsIA0KKwkJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAN CisJCQkgICAgICAgKHNvY2tsZW5fdCAqKSAmYWRkcmxlbik7DQorCQlpZiAocmV0ID09IC0xKSB7 DQorCQkJZnByaW50ZihzdGRlcnIsICJlcnJvciByZWNlaXZpbmcgZXhjaGFuZ2UgZGF0YTogJXNc biIsDQorCQkJCXN0cmVycm9yKGVycm5vKSk7DQorCQkJY2xvc2Uoc29jayk7DQorCQkJZXhpdCgt Mik7DQorCQl9DQorCQlpZiAoY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRy LCBhZGRybGVuKSA8IDApIHsNCisJCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNvbm5lY3Rpbmcg VURQIHNvY2tldDogJXNcbiIsDQorCQkJCXN0cmVycm9yKGVycm5vKSk7DQorCQkJY2xvc2Uoc29j ayk7DQorCQkJZXhpdCgtMik7DQorCQl9DQogCX0NCiAJZHByaW50ZigiZ290IGV4Y2hhbmdlOiBt YWpvcjogJWQsIG1pbm9yOiAlZCwgcmVxdWVzdDogJWQsIHNpemU6ICVkXG4iLA0KIAkJZXgubWFq b3IsIGV4Lm1pbm9yLCBleC5yZXF1ZXN0LCBleC5zaXplKTsNCkBAIC0yODcsNiArMzA4LDEwIEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQloaXN0b2dyYW0gPSBUUlVFOw0K IAkJCWRwcmludGYoImhpc3RvZ3JhbSBzZXQgdG8gdHJ1ZVxuIik7DQogCQkJYnJlYWs7DQorCQlj YXNlIFNLSVA6DQorCQkJc2tpcCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsNCisJCQlkcHJp bnRmKCJwYWNrZXQgc2tpcCBzZXQgdG8gJWRcbiIsIHNraXApOw0KKwkJCWJyZWFrOw0KIAkJY2Fz ZSBIRUxQOg0KIAkJZGVmYXVsdDoNCiAJCQl1c2FnZSgpOw0KZGlmZiAtLWdpdCBhL25ldHJhdGUu aCBiL25ldHJhdGUuaA0KaW5kZXggOWYwNzNkZC4uODE4NmRjNCAxMDA2NDQNCi0gLS0tIGEvbmV0 cmF0ZS5oDQorKysgYi9uZXRyYXRlLmgNCkBAIC0yMyw3ICsyMyw3IEBADQogI2RlZmluZSBfX05F VFJBVEVfSF9fDQogDQogI2RlZmluZSBNQUpPUiAwDQotIC0jZGVmaW5lIE1JTk9SIDMNCisjZGVm aW5lIE1JTk9SIDQNCiANCiAjZGVmaW5lIFRSVUUgIDENCiAjZGVmaW5lIEZBTFNFIDANCkBAIC0z MSw3ICszMSw3IEBADQogZW51bSBvcHR2YWxzIHsgUlg9MSwgVFgsIFJBVEUsIFNJWkUsIFRDUCwg VURQLCBTQ1RQLCANCiAJICAgICAgIE1VTFRJLCBQT1JULCBIT1NULCBERUJVRywgSEVMUCwgREFF TU9OLA0KIAkgICAgICAgU0VSVkVSLCBSVFQsIE5PREVMQVksIEhJU1RPR1JBTSwgQlJFQUtPTiwN Ci0gLQkgICAgICAgTlVNX09QVF9WQUxTLA0KKwkgICAgICAgU0tJUCwgTlVNX09QVF9WQUxTLA0K IH07DQogDQogDQpAQCAtNTQsNiArNTQsOSBAQCBlbnVtIG9wdHZhbHMgeyBSWD0xLCBUWCwgUkFU RSwgU0laRSwgVENQLCBVRFAsIFNDVFAsDQogI2RlZmluZSBNQVhfQlVGX1NJWkUJODE5Mg0KICNk ZWZpbmUgTkVUUkFURV9NU0dfREFUQSAweGE1DQogDQorLyogbnVtYmVyIG9mIHBhY2tldHMgdG8g c2tpcCBiZWZvcmUgc3RhcnRpbmcgbWVhc3VyZW1lbnRzICovDQorI2RlZmluZSBTVEVBRFlfU1RB VEVfREVMQVkgMQ0KKw0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KIHR5cGVkZWYgX191MTYg IHUxNjsNCiB0eXBlZGVmIF9fdTMyICB1MzI7DQpAQCAtNjgsNyArNzEsMTAgQEAgc3RydWN0IG5l dHJhdGVfZXhjaGFuZ2Ugew0KIA0KICNkZWZpbmUgUkVRVUVTVF9BQ0sJMHhmZmZmDQogDQorZW51 bSBtc2dfdHlwZXMgeyBNU0dfREFUQT0xLCBNU0dfRU9GPTB4ZmZmZmZmZmZ9Ow0KKw0KIHN0cnVj dCBuZXRyYXRlX21lc3NhZ2Ugew0KKwl1MzIgbXNnX3R5cGU7DQogCXU2NCBtc2dfbGVuOwkvKiBt ZXNzYWdlIGxlbmd0aCAoaW5jbHVkaW5nIGhlYWRlcikgKi8NCiAJdTY0IG1zZ19zZXE7CS8qIHNl cXVlbmNlIG51bWJlciAqLw0KIAlzdHJ1Y3QgdGltZXNwZWMgbXNnX3RzOyAvKiB0aW1lIG1lc3Nh Z2Ugd2FzIHNlbnQgKi8NCkBAIC04NSw2ICs5MSw3IEBAIGV4dGVybiBpbnQgc2l6ZTsNCiBleHRl cm4gaW50IG11bHRpY2FzdDsNCiBleHRlcm4gaW50IHBvcnQ7DQogZXh0ZXJuIGludCBoaXN0b2dy YW07DQorZXh0ZXJuIGludCBza2lwOw0KIGV4dGVybiBjaGFyIGhvc3RuYW1lW107DQogZXh0ZXJu IGludCBpbnRlcnJ1cHRlZDsNCiBleHRlcm4gam1wX2J1ZiBqbXBidWY7DQpkaWZmIC0tZ2l0IGEv cmVjZWl2ZS5jIGIvcmVjZWl2ZS5jDQppbmRleCA3OThkYWZmLi5lZGFkYzAyIDEwMDY0NA0KLSAt LS0gYS9yZWNlaXZlLmMNCisrKyBiL3JlY2VpdmUuYw0KQEAgLTg4LDYgKzg4LDEwIEBAIG5ldHJh dGVfcmVjZWl2ZShpbnQgY29uc29jaykNCiAJCWlmIChyZXQgPD0gMCkNCiAJCQlicmVhazsNCiAN CisJCS8qIGJhaWwgb3V0IGlmIHRoZSBvdGhlciBlbmQgZ29pbmcgYXdheSAqLw0KKwkJaWYgKG1z Zy0+bXNnX3R5cGUgPT0gTVNHX0VPRikNCisJCQlicmVhazsNCisNCiAJCS8vZHByaW50ZigiLiIp Ow0KIAkJc3RhdHVzID0gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJyZW50KTsN CiAJCWlmIChzdGF0dXMgPCAwKSB7DQpAQCAtOTUsMTMgKzk5LDEzIEBAIG5ldHJhdGVfcmVjZWl2 ZShpbnQgY29uc29jaykNCiAJCQkJc3RyZXJyb3IoYWJzKHN0YXR1cykpKTsNCiAJCQlyZXR1cm4g KGludCkgc3RhdHVzOw0KIAkJfQ0KLSAtCQlpZiAoc2VxdWVuY2UrKykgew0KKwkJaWYgKHNlcXVl bmNlKysgPiBza2lwKSB7IA0KIAkJCXRzZGVsdGEoJmN1cnJlbnQsICZsYXN0LCAmZGVsdGEpOw0K IAkJCWNoZWNrX2RlbHRhKHN0YXRzLCAmZGVsdGEpOw0KIAkJCXVwZGF0ZV9zdGF0aXN0aWNzX2Rh dGEoc3RhdHMsICZkZWx0YSk7DQogCQl9DQogCQllbHNlDQotIC0JCQlkcHJpbnRmKCJza2lwcGVk IGZpcnN0IHBhY2tldFxuIik7DQorCQkJZHByaW50Zigic2tpcHBlZCBwYWNrZXQgJWRcbiIsIHNl cXVlbmNlKTsNCiAJCWlmIChtc2ctPm1zZ19zZXEgIT0gc2VxdWVuY2UpIHsNCiAJCQlmcHJpbnRm KHN0ZGVyciwgInNlcXVlbmNlIG51bWJlciB3cm9uZyFcbiINCiAJCQkJIiAgICBjYWxjdWxhdGVk OiAlbHUsIHJlY2VpdmVkOiAlbHVcbiIsIA0KQEAgLTExMSw2ICsxMTUsNyBAQCBuZXRyYXRlX3Jl Y2VpdmUoaW50IGNvbnNvY2spDQogCQlsYXN0ID0gY3VycmVudDsNCiAJfQ0KIAlkcHJpbnRmKCJv dXQgb2YgcmVjZWl2ZSBsb29wXG4iKTsNCisJY2xvc2UoY29uc29jayk7DQogCXN0YXR1cyA9IGNs b2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmbGFzdCk7DQogCWlmIChzdGF0dXMgPCAwKSB7 DQogCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGZyb20gY2xvY2tfZ2V0dGltZTogJXNcbiIsIA0K ZGlmZiAtLWdpdCBhL3J0dC5jIGIvcnR0LmMNCmluZGV4IDVmOWQwNTIuLmQ5YjU2M2UgMTAwNjQ0 DQotIC0tLSBhL3J0dC5jDQorKysgYi9ydHQuYw0KQEAgLTEwNCw2ICsxMDQsNyBAQCBzZXR1cF9t ZXNzYWdlKGludCBzZXF1ZW5jZSwgc3RydWN0IG5ldHJhdGVfbWVzc2FnZSAqbSkNCiAJCWZwcmlu dGYoc3RkZXJyLCAiaW52YWxpZCBidWZmZXIgcG9pbnRlciFcbiIpOw0KIAkJZXhpdCgtMSk7DQog CX0NCisJbS0+bXNnX3R5cGUgPSBNU0dfREFUQTsNCiAJbS0+bXNnX3NlcSA9IHNlcXVlbmNlOw0K IAltLT5tc2dfbGVuID0gc2l6ZTsNCiAJcmV0ID0gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9O SUMsICZtLT5tc2dfdHMpOw0KQEAgLTIyOSw2ICsyMzAsMTQgQEAgbmV0cmF0ZV9ydHQodm9pZCkN CiAJCX0JDQogCX0NCiAJZHByaW50Zigib3V0IG9mIHRyYW5zbWl0IGxvb3AgKCVsdSBtZXNzYWdl cyB0cmFuc21pdHRlZClcbiIsIHNlcXVlbmNlKTsNCisJaWYgKHByb3RvY29sID09IElQUFJPVE9f VURQKSB7DQorCQltc2cgPSAoc3RydWN0IG5ldHJhdGVfbWVzc2FnZSAqKSBnZXRfbmV4dF9yaW5n X2J1ZmZlcih0eF9yaW5nKTsNCisJCW1zZy0+bXNnX3R5cGUgPSBNU0dfRU9GOw0KKwkJbXNnLT5t c2dfc2VxID0gc2VxdWVuY2U7DQorCQltc2ctPm1zZ19sZW4gPSBzaXplOw0KKwkJd3JpdGVfbWVz c2FnZShtc2cpOw0KKwl9DQorCWNsb3NlKHNvY2spOw0KIAlkcHJpbnRmKCJmcmVlaW5nIHRyYW5z bWl0IHJpbmdcbiIpOw0KIAlmcmVlX3JpbmdfYnVmZmVycyh0eF9yaW5nKTsNCiAJZHByaW50Zigi ZnJlZWluZyByZWNlaXZlIHJpbmdcbiIpOw0KZGlmZiAtLWdpdCBhL3NlcnZlci5jIGIvc2VydmVy LmMNCmluZGV4IGY0Yzk1MDguLjRmMGUxYmIgMTAwNjQ0DQotIC0tLSBhL3NlcnZlci5jDQorKysg Yi9zZXJ2ZXIuYw0KQEAgLTQ0LDcgKzQ0LDggQEAgbmV0cmF0ZV9zZXJ2ZXIoaW50IGNvbnNvY2sp DQogCWludCByZXQ7DQogCXU2NCBwYWNrZXRzID0gMDsNCiAJc3RydWN0IHJpbmdfYnVmZmVyICpy Ow0KLSAtCQ0KKwlzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlICptOw0KKw0KIAlidWZzaXplID0gc2l6 ZW9mKHN0cnVjdCBuZXRyYXRlX21lc3NhZ2UpICsgc2l6ZTsNCiANCiAJLyogc2V0dXAgcmVjZWl2 ZSByaW5nICovDQpAQCAtNjAsMTEgKzYxLDE0IEBAIG5ldHJhdGVfc2VydmVyKGludCBjb25zb2Nr KQ0KIA0KIAkvKiBsb29wIHVudGlsIGRvbmUgKi8NCiAJd2hpbGUoIWludGVycnVwdGVkKSB7DQot IC0JCWNoYXIgKmJ1ZiA9IGdldF9uZXh0X3JpbmdfYnVmZmVyKHIpOw0KKwkJdm9pZCAqYnVmID0g Z2V0X25leHRfcmluZ19idWZmZXIocik7DQogDQorCQltID0gYnVmOw0KIAkJaWYgKChyZXQgPSBy ZWFkX21lc3NhZ2UoY29uc29jaywgYnVmLCBidWZzaXplKSkgPD0gMCkNCiAJCQkJYnJlYWs7DQog DQorCQlpZiAobS0+bXNnX3R5cGUgPT0gTVNHX0VPRikNCisJCQlicmVhazsNCiAJCWlmICgocmV0 ID0gd3JpdGUoY29uc29jaywgYnVmLCBidWZzaXplKSkgPCAwKSB7DQogCQkJZnByaW50ZihzdGRl cnIsICJFcnJvciBlY2hvaW5nIHBhY2tldDogJXNcbiIsDQogCQkJCXN0cmVycm9yKGVycm5vKSk7 DQpAQCAtNzMsNiArNzcsNyBAQCBuZXRyYXRlX3NlcnZlcihpbnQgY29uc29jaykNCiAJCXBhY2tl dHMrKzsNCiAJfQ0KIAlkcHJpbnRmKCJvdXQgb2YgcmVjZWl2ZSBsb29wIChwcm9jZXNzZWQgJWQg cGFja2V0cylcbiIsIHBhY2tldHMpOw0KKwljbG9zZShjb25zb2NrKTsNCiANCiAJZnJlZV9yaW5n X2J1ZmZlcnMocik7DQogCXJldHVybiAwOw0KZGlmZiAtLWdpdCBhL3RyYW5zbWl0LmMgYi90cmFu c21pdC5jDQppbmRleCBmMGRiMTg2Li5kZDkwZmFiIDEwMDY0NA0KLSAtLS0gYS90cmFuc21pdC5j DQorKysgYi90cmFuc21pdC5jDQpAQCAtNjEsNiArNjEsNyBAQCBuZXRyYXRlX3RyYW5zbWl0KHZv aWQpDQogCXNldGptcChqbXBidWYpOw0KIAl3aGlsZSghaW50ZXJydXB0ZWQpIHsNCiAJCW1zZyA9 IChzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlICopIGdldF9uZXh0X3JpbmdfYnVmZmVyKHIpOw0KKwkJ bXNnLT5tc2dfdHlwZSA9IE1TR19EQVRBOw0KIAkJbXNnLT5tc2dfc2VxID0gKytzZXF1ZW5jZTsN CiAJCW1zZy0+bXNnX2xlbiA9IHNpemU7DQogDQpAQCAtODEsNiArODIsMTUgQEAgbmV0cmF0ZV90 cmFuc21pdCh2b2lkKQ0KIAkJfQkNCiAJfQ0KIAlkcHJpbnRmKCJvdXQgb2YgdHJhbnNtaXQgbG9v cCAoJWx1IG1lc3NhZ2VzIHRyYW5zbWl0dGVkKVxuIiwgc2VxdWVuY2UpOw0KKwlpZiAocHJvdG9j b2wgPT0gSVBQUk9UT19VRFApIHsNCisJCW1zZyA9IChzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlICop IGdldF9uZXh0X3JpbmdfYnVmZmVyKHIpOw0KKwkJbXNnLT5tc2dfdHlwZSA9IE1TR19FT0Y7DQor CQltc2ctPm1zZ19zZXEgPSArK3NlcXVlbmNlOw0KKwkJbXNnLT5tc2dfbGVuID0gc2l6ZTsNCisN CisJCWlmICgocmV0ID0gd3JpdGUoc29jaywgbXNnLCBidWZzaXplKSkgPCAwKQ0KKwkJCXBlcnJv cigidHJhbnNtaXQiKTsNCisJfQ0KIAljbG9zZShzb2NrKTsNCiAJZnJlZV9yaW5nX2J1ZmZlcnMo cik7DQogCXJldHVybiByZXQ7DQotIC0tIA0KMS42LjAuMQ0KDQoNCi0gRnJvbSAxYWJlZjU2ZDE3 ZTRhMDgxZGIyYjczZmRiZmUzYzhkMjI4YzM4YTVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0K RnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpEYXRlOiBUaHUsIDE2 IE9jdCAyMDA4IDEyOjEyOjI1IC0wNTAwDQpTdWJqZWN0OiBbUEFUQ0hdIGZpeGVkIG5vZGVsYXkg b3B0aW9uIHNldHRpbmcNCg0KDQpTaWduZWQtb2ZmLWJ5OiBDbGFyayBXaWxsaWFtcyA8d2lsbGlh bXNAcmVkaGF0LmNvbT4NCi0gLS0tDQogY29tbW9uLmMgfCAgIDIwICsrKysrKysrKysrLS0tLS0t LS0tDQogMSBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQ0K DQpkaWZmIC0tZ2l0IGEvY29tbW9uLmMgYi9jb21tb24uYw0KaW5kZXggYTk5MGUyMC4uNTMwMjc4 NSAxMDA2NDQNCi0gLS0tIGEvY29tbW9uLmMNCisrKyBiL2NvbW1vbi5jDQpAQCAtNDczLDcgKzQ3 Myw2IEBAIG5ldHJhdGVfdHhfc29ja2V0KGludCBwcm90b2NvbCwgaW50IHBvcnQsIGludCByZXF1 ZXN0KQ0KIHsNCiAJaW50IHJldDsNCiAJaW50IHNvY2s7DQotIC0JaW50IHZhbDsNCiAJY2hhciBw b3J0c3RyaW5nWzEwXTsNCiAJc3RydWN0IGFkZHJpbmZvICphaSwgaGludHM7DQogCXN0cnVjdCBu ZXRyYXRlX2V4Y2hhbmdlIGV4Ow0KQEAgLTUwNiwxNSArNTA1LDE4IEBAIG5ldHJhdGVfdHhfc29j a2V0KGludCBwcm90b2NvbCwgaW50IHBvcnQsIGludCByZXF1ZXN0KQ0KIA0KIAlmcmVlYWRkcmlu Zm8oYWkpOw0KIA0KLSAtCWlmIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCAmJiBub2RlbGF5ID09 IFRSVUUpIHsNCisJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQKSB7DQorCQlpbnQgdmFsOw0K IAkJLyogc2V0IFRDUF9OT0RFTEFZICovDQotIC0JCWRwcmludGYoInNldHRpbmcgVENQX05PREVM QVlcbiIpOw0KLSAtCQl2YWwgPSAxOw0KLSAtCQlpZiAoc2V0c29ja29wdChzb2NrLCBTT0xfU09D S0VULCBUQ1BfTk9ERUxBWSwgJnZhbCwgc2l6ZW9mKHZhbCkpIDwgMCkgew0KLSAtCQkJcGVycm9y KCJzZXRzb2Nrb3B0Iik7DQotIC0JCQlyZXQgPSAtZXJybm87DQotIC0JCQljbG9zZShzb2NrKTsN Ci0gLQkJCXJldHVybiByZXQ7DQorCQlpZiAobm9kZWxheSA9PSBUUlVFKSB7DQorCQkJZHByaW50 Zigic2V0dGluZyBUQ1BfTk9ERUxBWVxuIik7DQorCQkJdmFsID0gMTsNCisJCQlpZiAoc2V0c29j a29wdChzb2NrLCBTT0xfU09DS0VULCBUQ1BfTk9ERUxBWSwgJnZhbCwgc2l6ZW9mKHZhbCkpIDwg MCkgew0KKwkJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsNCisJCQkJcmV0ID0gLWVycm5vOw0KKwkJ CQljbG9zZShzb2NrKTsNCisJCQkJcmV0dXJuIHJldDsNCisJCQl9DQogCQl9DQogCX0NCiAJbWVt c2V0KCZleCwgMCwgc2l6ZW9mKGV4KSk7DQotIC0tIA0KMS42LjAuMQ0KDQoNCi0gRnJvbSAyYmRi ZDA0NGYxZDFmZDk0ZjU2NWU4MTJiMmJmZmRhZDUxNDcwODdlIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpEYXRlOiBU dWUsIDIxIE9jdCAyMDA4IDIwOjU0OjMzIC0wNTAwDQpTdWJqZWN0OiBbUEFUQ0hdIHJlbmFtZWQg ZGFlbW9uIG9wdGlvbiB0byBsaXN0ZW4NCg0KY2hhbmdlZCBEQUVNT04gdG8gTElTVEVOOyBjaGFu Z2VkIGRlZmF1bHQgbXNnIHNpemUgdG8gNTM2DQoNClNpZ25lZC1vZmYtYnk6IENsYXJrIFdpbGxp YW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0KLSAtLS0NCiBtYWluLmMgICAgfCAgIDI3ICsrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLQ0KIG5ldHJhdGUuaCB8ICAgIDQgKystLQ0KIDIgZmlsZXMg Y2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQg YS9tYWluLmMgYi9tYWluLmMNCmluZGV4IDAyOTNhMWIuLmFhNDE2MzcgMTAwNjQ0DQotIC0tLSBh L21haW4uYw0KKysrIGIvbWFpbi5jDQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgdm9pZCBpbnRl cnJ1cHQoaW50IHNpZyk7DQogc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7 DQogCXsidHJhbnNtaXQiLCAwLCAwLCBUWH0sDQogCXsicnR0IiwgMCwgMCwgUlRUfSwNCi0gLQl7 ImRhZW1vbiIsIDAsIDAsIERBRU1PTn0sDQorCXsibGlzdGVuIiwgMCwgMCwgTElTVEVOfSwNCiAJ eyJyYXRlIiwgMSwgMCwgUkFURX0sDQogCXsic2l6ZSIsIDEsIDAsIFNJWkV9LA0KIAl7InRjcCIs IDAsIDAsIFRDUH0sDQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25n X29wdGlvbnNbXSA9IHsNCiANCiB2b2lkIHVzYWdlKHZvaWQpDQogew0KLSAtCWZwcmludGYoc3Rk ZXJyLCAidXNhZ2U6IG5ldHJhdGUgey0tdHJhbnNtaXR8LS1ydHR8LS1kYWVtb259IFtvcHRpb25z XVxuIik7DQorCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG5ldHJhdGUgey0tdHJhbnNtaXR8LS1y dHR8LS1saXN0ZW59IFtvcHRpb25zXVxuIik7DQogCWZwcmludGYoc3RkZXJyLCAiICAgd2hlcmUg b3B0aW9ucyBhcmU6XG4iKTsNCiAJZnByaW50ZihzdGRlcnIsICIgICAgICAgIC0tcmF0ZT08SW50 ZXItUGFja2V0IEludGVydmFsPlxuIik7DQogCWZwcmludGYoc3RkZXJyLCAiICAgICAgICAtLXNp emU9PHBhY2tldCBzaXplPlxuIik7DQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIHVzYWdlKHZvaWQp DQogDQogDQogaW50DQotIC1uZXRyYXRlX2RhZW1vbih2b2lkKQ0KK25ldHJhdGVfbGlzdGVuKHZv aWQpDQogew0KIAlpbnQgcmV0Ow0KIAlpbnQgc2VydnNvY2ssIHNvY2s7DQpAQCAtMTA1LDcgKzEw NSw3IEBAIG5ldHJhdGVfZGFlbW9uKHZvaWQpDQogCXN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7 DQogCXN0cnVjdCBuZXRyYXRlX2V4Y2hhbmdlIGV4Ow0KIA0KLSAtCWRwcmludGYoIm5ldHJhdGVf ZGFlbW9uOiBzdGFydGluZ1xuIik7DQorCWRwcmludGYoIm5ldHJhdGVfbGlzdGVuOiBzdGFydGlu Z1xuIik7DQogCXNlcnZzb2NrID0gbmV0cmF0ZV9yeF9zb2NrZXQocHJvdG9jb2wsIHR5cGUpOw0K IAkNCiAJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQKSB7DQpAQCAtMTIxLDcgKzEyMSw4IEBA IG5ldHJhdGVfZGFlbW9uKHZvaWQpDQogCQlkcHJpbnRmKCJjYWxsaW5nIHJlYWQgZm9yIGV4Y2hh bmdlXG4iKTsNCiAJCXJldCA9IHJlYWQoc29jaywgJmV4LCBzaXplb2YoZXgpKTsNCiAJCWlmIChy ZXQgPCAwKSB7DQotIC0JCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIHJlYWRpbmcgZXhjaGFuZ2Ug bWVzc2FnZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQorCQkJZnByaW50ZihzdGRlcnIsICJl cnJvciByZWFkaW5nIGV4Y2hhbmdlIG1lc3NhZ2U6ICVzXG4iLA0KKwkJCQlzdHJlcnJvcihlcnJu bykpOw0KIAkJCWNsb3NlKHNvY2spOw0KIAkJCWV4aXQoLTIpOw0KIAkJfQ0KQEAgLTIzMiw5ICsy MzMsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJYnJlYWs7DQogDQog CQlzd2l0Y2gob3B0KSB7DQotIC0JCWNhc2UgREFFTU9OOg0KLSAtCQkJcm9sZSA9IERBRU1PTjsN Ci0gLQkJCWRwcmludGYoInJvbGUgPT0gREFFTU9OXG4iKTsNCisJCWNhc2UgTElTVEVOOg0KKwkJ CXJvbGUgPSBMSVNURU47DQorCQkJZHByaW50Zigicm9sZSA9PSBMSVNURU5cbiIpOw0KIAkJCWJy ZWFrOw0KIAkJY2FzZSBUWDoNCiAJCQlyb2xlID0gVFg7DQpAQCAtMzA1LDYgKzMwNiw4IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQlkcHJpbnRmKCJzZXR0aW5nIG5vZGVs YXlcbiIpOw0KIAkJCWJyZWFrOw0KIAkJY2FzZSBISVNUT0dSQU06DQorCQkJZnByaW50ZihzdGRl cnIsICJoaXN0b2dyYW0gb3B0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsNCisJCQlleGl0KC0x KTsNCiAJCQloaXN0b2dyYW0gPSBUUlVFOw0KIAkJCWRwcmludGYoImhpc3RvZ3JhbSBzZXQgdG8g dHJ1ZVxuIik7DQogCQkJYnJlYWs7DQpAQCAtMzE5LDcgKzMyMiw3IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikNCiAJCX0NCiAJfQ0KIAlpZiAocm9sZSA9PSAwKSB7DQotIC0JCWZw cmludGYoc3RkZXJyLCAiTXVzdCBzcGVjaWZpeSBlaXRoZXIgLS10cmFuc21pdCwgLS1kYWVtb24g b3IgIg0KKwkJZnByaW50ZihzdGRlcnIsICJNdXN0IHNwZWNpZml5IGVpdGhlciAtLXRyYW5zbWl0 LCAtLWxpc3RlbiBvciAiDQogCQkJIi0tcnR0IG9wdGlvbnMhXG4iKTsNCiAJCWV4aXQoLTEpOw0K IAl9DQpAQCAtMzM4LDE0ICszNDEsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KIAl9DQogCXNpZ25hbChTSUdJTlQsIGludGVycnVwdCk7DQogDQotIC0JZHByaW50Zigic3Rh cnR1cCB1cCB3aXRoIG1lc3NhZ2Ugc2l6ZSA9PSAlZFxuIiwgc2l6ZSk7DQotIC0NCiAJc3dpdGNo KHJvbGUpIHsNCiAJY2FzZSBUWDoNCiAJCWV4aXRfdmFsID0gbmV0cmF0ZV90cmFuc21pdCgpOw0K IAkJYnJlYWs7DQotIC0JY2FzZSBEQUVNT046DQotIC0JCWV4aXRfdmFsID0gbmV0cmF0ZV9kYWVt b24oKTsNCisJY2FzZSBMSVNURU46DQorCQlleGl0X3ZhbCA9IG5ldHJhdGVfbGlzdGVuKCk7DQog CQlicmVhazsNCiAJY2FzZSBSVFQ6DQogCQlleGl0X3ZhbCA9IG5ldHJhdGVfcnR0KCk7DQpkaWZm IC0tZ2l0IGEvbmV0cmF0ZS5oIGIvbmV0cmF0ZS5oDQppbmRleCA4MTg2ZGM0Li44OGEyZjZkIDEw MDY0NA0KLSAtLS0gYS9uZXRyYXRlLmgNCisrKyBiL25ldHJhdGUuaA0KQEAgLTI5LDcgKzI5LDcg QEANCiAjZGVmaW5lIEZBTFNFIDANCiANCiBlbnVtIG9wdHZhbHMgeyBSWD0xLCBUWCwgUkFURSwg U0laRSwgVENQLCBVRFAsIFNDVFAsIA0KLSAtCSAgICAgICBNVUxUSSwgUE9SVCwgSE9TVCwgREVC VUcsIEhFTFAsIERBRU1PTiwNCisJICAgICAgIE1VTFRJLCBQT1JULCBIT1NULCBERUJVRywgSEVM UCwgTElTVEVOLA0KIAkgICAgICAgU0VSVkVSLCBSVFQsIE5PREVMQVksIEhJU1RPR1JBTSwgQlJF QUtPTiwNCiAJICAgICAgIFNLSVAsIE5VTV9PUFRfVkFMUywNCiB9Ow0KQEAgLTQ5LDcgKzQ5LDcg QEAgZW51bSBvcHR2YWxzIHsgUlg9MSwgVFgsIFJBVEUsIFNJWkUsIFRDUCwgVURQLCBTQ1RQLA0K ICNkZWZpbmUgTlNfVE9fTVMobikJKE5TX1RPX1VTKG4pIC8gMTAwMCkNCiANCiAjZGVmaW5lIERF Rl9UWF9SQVRFIAlNU19UT19OUygxMDApDQotIC0jZGVmaW5lIERFRl9NU0dfU0laRSAJNTANCisj ZGVmaW5lIERFRl9NU0dfU0laRSAJNTM2DQogI2RlZmluZSBERUZfUE9SVCAJNTAwMSAvKiBzdGVh bCB0aGUgdHRjcCBwb3J0IDopICovDQogI2RlZmluZSBNQVhfQlVGX1NJWkUJODE5Mg0KICNkZWZp bmUgTkVUUkFURV9NU0dfREFUQSAweGE1DQotIC0tIA0KMS42LjAuMQ0KDQoNCi0gRnJvbSBiZGMw ZDNmNmU5MGM5NzkyN2E2YWE3MzZkOTMyMWI5NzVkM2IzYzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQ0KRnJvbTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQpEYXRlOiBU aHUsIDE2IE9jdCAyMDA4IDEyOjM0OjIzIC0wNTAwDQpTdWJqZWN0OiBbUEFUQ0hdIHJlYXJyYW5n ZWQgaW5jbHVkZXMNCg0KQ2hhbmdlZCBvcmRlciBvZiBzb2NrZXQgaW5jbHVkZXMNCg0KU2lnbmVk LW9mZi1ieTogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+DQotIC0tLQ0KIG5l dHdvcmtpbmcuaCB8ICAgMTAgKysrKysrLS0tLQ0KIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRp b25zKCspLCA0IGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvbmV0d29ya2luZy5oIGIvbmV0 d29ya2luZy5oDQppbmRleCBkYjA4NzU4Li5lODcwNTkxIDEwMDY0NA0KLSAtLS0gYS9uZXR3b3Jr aW5nLmgNCisrKyBiL25ldHdvcmtpbmcuaA0KQEAgLTIyLDEzICsyMiwxNSBAQA0KICNkZWZpbmUg X19ORVRXT1JLSU5HX0hfXw0KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAjaW5jbHVkZSA8c3lz L3NvY2tldC5oPg0KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQorI2luY2x1ZGUgPG5ldGluZXQv aXAuaD4NCisjaW5jbHVkZSA8bGludXgvdGNwLmg+DQogI2luY2x1ZGUgPHN5cy90aW1lLmg+DQog I2luY2x1ZGUgPHRpbWUuaD4NCi0gLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQotIC0jaW5jbHVk ZSA8ZmNudGwuaD4NCi0gLSNpbmNsdWRlIDxzaWduYWwuaD4NCiAjaW5jbHVkZSA8c3lzL3VuLmg+ DQogI2luY2x1ZGUgPHN5cy93YWl0Lmg+DQogI2luY2x1ZGUgPG5ldGRiLmg+DQotIC0jaW5jbHVk ZSA8bGludXgvdGNwLmg+DQorI2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1ZGUgPHNpZ25hbC5o Pg0KKw0KICNlbmRpZg0KLSAtLSANCjEuNi4wLjENCg0KDQotIEZyb20gOGEyYzkyM2I3MzQ1YzY0 NTQzZTRjZDRkOGExOWY0Y2E2NDQ5NGUxYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206 IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0KRGF0ZTogVGh1LCAxNiBPY3Qg MjAwOCAxMjozNToxOCAtMDUwMA0KU3ViamVjdDogW1BBVENIXSBtb3ZlIHR4IGJ1ZmZlciBzZXR1 cA0KDQpkb24ndCBzZXR1cCB0eCBidWZmZXJzIHVudGlsIHdlIGtub3cgd2UncmUgY29ubmVjdGVk DQoNClNpZ25lZC1vZmYtYnk6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPg0K LSAtLS0NCiB0cmFuc21pdC5jIHwgICAgOCArKysrLS0tLQ0KIDEgZmlsZXMgY2hhbmdlZCwgNCBp bnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvdHJhbnNtaXQuYyBi L3RyYW5zbWl0LmMNCmluZGV4IGRkOTBmYWIuLjBiZDQxNGEgMTAwNjQ0DQotIC0tLSBhL3RyYW5z bWl0LmMNCisrKyBiL3RyYW5zbWl0LmMNCkBAIC00MCwxMCArNDAsNyBAQCBuZXRyYXRlX3RyYW5z bWl0KHZvaWQpDQogCXN0cnVjdCBuZXRyYXRlX21lc3NhZ2UgKm1zZzsNCiAJc3RydWN0IHRpbWVz cGVjIHRzOw0KIAlzdHJ1Y3QgcmluZ19idWZmZXIgKnI7DQotIC0JaW50IGJ1ZnNpemUgPSBzaXpl b2Yoc3RydWN0IG5ldHJhdGVfbWVzc2FnZSkgKyBzaXplOw0KLSAtDQotIC0JLyogc2V0dXAgdHJh bnNtaXQgYnVmZmVycyAqLw0KLSAtCXIgPSBzZXR1cF9yaW5nX2J1ZmZlcnMoMTAsIGJ1ZnNpemUp Ow0KKwlpbnQgYnVmc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0cmF0ZV9tZXNzYWdlKSArIHNpemU7 Ow0KIA0KIAlkcHJpbnRmKCJzZXR0aW5nIHVwIHRyYW5zbWl0IHNvY2tldFxuIik7DQogCXNvY2sg PSBuZXRyYXRlX3R4X3NvY2tldChwcm90b2NvbCwgcG9ydCwgUlgpOw0KQEAgLTUyLDYgKzQ5LDkg QEAgbmV0cmF0ZV90cmFuc21pdCh2b2lkKQ0KIAkJcmV0dXJuIC0oZXJybm8pOw0KIAl9DQogDQor CS8qIHNldHVwIHRyYW5zbWl0IGJ1ZmZlcnMgKi8NCisJciA9IHNldHVwX3JpbmdfYnVmZmVycygx MCwgYnVmc2l6ZSk7DQorDQogCWRwcmludGYoImVudGVyaW5nIHRyYW5zbWl0IGxvb3AgKElQSSA9 PSAlZG1zKVxuIiwgTlNfVE9fTVMocmF0ZSkpOw0KIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19N T05PVE9OSUMsICZ0cykpIHsNCiAJCWZwcmludGYoc3RkZXJyLCAiY2xvY2tfZ2V0dGltZSBmYWls ZWRcbiIpOw0KLSAtLSANCjEuNi4wLjENCg0KLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0N ClZlcnNpb246IEdudVBHIHYyLjAuOSAoR05VL0xpbnV4KQ0KDQppRVVFQVJFQ0FBWUZBa2orb0xF QUNna1FxQTRKVmI2MWI5ZEJvQUNZdG45Z1hsQ0d2NE45U0tpZks0VURTTXNKDQp0QUNlSjZnUTA1 QkpNenFxT3ZrOEM1b1VFWFdGZklZPQ0KPVZaVEgNCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0t LQ0K