From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5853 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: c threads, v.5.9 Date: Thu, 14 Aug 2014 22:55:48 +0200 Message-ID: <1408049748.4951.134.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-gxEolNiXJ/xp+5q5gbFq" X-Trace: ger.gmane.org 1408049770 15272 80.91.229.3 (14 Aug 2014 20:56:10 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 14 Aug 2014 20:56:10 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5859-gllmg-musl=m.gmane.org@lists.openwall.com Thu Aug 14 22:56:03 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XI240-0003d7-G0 for gllmg-musl@plane.gmane.org; Thu, 14 Aug 2014 22:56:00 +0200 Original-Received: (qmail 7441 invoked by uid 550); 14 Aug 2014 20:55:59 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 7433 invoked from network); 14 Aug 2014 20:55:59 -0000 X-IronPort-AV: E=Sophos;i="5.01,865,1400018400"; d="scan'";a="89387031" Face: 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 X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:5853 Archived-At: --=-gxEolNiXJ/xp+5q5gbFq Content-Type: multipart/mixed; boundary="=-oHnoPTcutwLqfukkEZfW" --=-oHnoPTcutwLqfukkEZfW Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Hello, this is now a version that I am quite confident of. It is a special edition that doesn't use spinlocks. The only "principal" thing it still has that people might not like is dynamic allocation of auxiliary structures for mtx_t and cnd_t. For the mtx_t, this could perhaps be avoided, but for the cnd_t it is really convenient, because it clearly separates different batches of cnd-waiters that should never be mixed. In summary: - (almost) all is private futex - the internal locks use a minimal test-and-set logic that is modeled after C's atomic_flag - mutexes and conditions are simpler (I hope) than their pthread counterparts because they don't need process sharing or robustness Best Jens --=20 :: INRIA Nancy Grand Est ::: AlGorille ::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-oHnoPTcutwLqfukkEZfW Content-Disposition: attachment; filename="thrd11-v5.9.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="thrd11-v5.9.patch"; charset="ISO-8859-1" ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWxsdHlwZXMuaC5pbiBiL2luY2x1ZGUvYWxsdHlwZXMuaC5p bg0KaW5kZXggODQ3OGZiNC4uNGNkMmNiMSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvYWxsdHlwZXMu aC5pbg0KKysrIGIvaW5jbHVkZS9hbGx0eXBlcy5oLmluDQpAQCAtNTgsNiArNTgsMTAgQEAgVFlQ RURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9tdXRleGF0dHJfdDsNCiBU WVBFREVGIHN0cnVjdCB7IHVuc2lnbmVkIF9fYXR0cjsgfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQog VFlQRURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9iYXJyaWVyYXR0cl90 Ow0KIFRZUEVERUYgc3RydWN0IHsgdW5zaWduZWQgX19hdHRyWzJdOyB9IHB0aHJlYWRfcndsb2Nr YXR0cl90Ow0KK1RZUEVERUYgcHRocmVhZF9jb25kX3QgY25kX3Q7DQorVFlQRURFRiBwdGhyZWFk X211dGV4X3QgbXR4X3Q7DQorDQorDQogDQogVFlQRURFRiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsN CiANCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RocmVhZHMuaCBiL2luY2x1ZGUvdGhyZWFkcy5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOTQ4NmI4Yw0KLS0tIC9kZXYvbnVs bA0KKysrIGIvaW5jbHVkZS90aHJlYWRzLmgNCkBAIC0wLDAgKzEsMTk4IEBADQorI2lmbmRlZiBf VEhSRUFEU19IDQorI2RlZmluZSBfVEhSRUFEU19IDQorDQorLyogVGhpcyBvbmUgaXMgZXhwbGlj aXRseSBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkLiAqLw0KKyNpbmNsdWRlIDx0aW1lLmg+DQorDQor DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmlu ZSBfX05FRURfY25kX3QNCisjZGVmaW5lIF9fTkVFRF9tdHhfdA0KKy8qIFVudGlsIHdlIGNvbWUg dXAgd2l0aCBhIGJldHRlciBuYW1pbmcgc2NoZW1lLCB3ZSBuZWVkIHRvIGV4cG9zZQ0KKyAgIHNv bWUgcHRocmVhZCB0eXBlcy4gKi8NCisjZGVmaW5lIF9fTkVFRF9wdGhyZWFkX2NvbmRfdA0KKyNk ZWZpbmUgX19ORUVEX3B0aHJlYWRfbXV0ZXhfdA0KKyNkZWZpbmUgX19ORUVEX3B0aHJlYWRfb25j ZV90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF9r ZXlfdA0KKw0KKyNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+DQorI2luY2x1ZGUgPGJpdHMvZXJy bm8uaD4NCisNCit0eXBlZGVmIHN0cnVjdCBfX210eF9vbl9oZWFwIF9fbXR4X3Q7DQordm9pZCBf X210eF91bnJlZihfX210eF90ICopIF9fYXR0cmlidXRlX18oKG5vbm51bGwoMSkpKTsNCitfX210 eF90KiBfX210eF9nZXRyZWYobXR4X3QgKikgX19hdHRyaWJ1dGVfXygobm9ubnVsbCgxKSkpOw0K Kw0KK2ludCBfX210eF9sb2NrKF9fbXR4X3QgKikgX19hdHRyaWJ1dGVfXygobm9ubnVsbCgxKSkp Ow0KK2ludCBfX210eF90cnlsb2NrKF9fbXR4X3QgKikgX19hdHRyaWJ1dGVfXygobm9ubnVsbCgx KSkpOw0KK2ludCBfX210eF91bmxvY2soX19tdHhfdCAqKSBfX2F0dHJpYnV0ZV9fKChub25udWxs KDEpKSk7DQoraW50IF9fbXR4X3RpbWVkbG9jayhfX210eF90ICpyZXN0cmljdCwgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpyZXN0cmljdCkgX19hdHRyaWJ1dGVfXygobm9ubnVsbCgxKSkpOw0KKw0K K3R5cGVkZWYgc3RydWN0IF9fY25kX29uX2hlYXAgX19jbmRfdDsNCit2b2lkIF9fY25kX3VucmVm KF9fY25kX3QgKikgX19hdHRyaWJ1dGVfXygobm9ubnVsbCgxKSkpOw0KK19fY25kX3QqIF9fY25k X2dldHJlZihjbmRfdCAqLCBfX210eF90ICosIGludCAqKSBfX2F0dHJpYnV0ZV9fKChub25udWxs KDEsMykpKTsNCisNCitpbnQgX19jbmRfd2FpdChfX2NuZF90ICpyZXN0cmljdCwgX19tdHhfdCAq cmVzdHJpY3QpIF9fYXR0cmlidXRlX18oKG5vbm51bGwoMSwyKSkpOw0KKw0KK3R5cGVkZWYgcHRo cmVhZF90IHRocmRfdDsNCit0eXBlZGVmIHB0aHJlYWRfa2V5X3QgdHNzX3Q7DQordHlwZWRlZiBp bnQgKCp0aHJkX3N0YXJ0X3QpKHZvaWQqKTsNCit0eXBlZGVmIHZvaWQgKCp0c3NfZHRvcl90KSh2 b2lkKik7DQorDQordHlwZWRlZiBzdHJ1Y3Qgb25jZV9mbGFnIG9uY2VfZmxhZzsNCisNCisvKiBK dXN0IGhhdmUgYSBjb3B5IG9mIHRoZSBkZWZpbml0aW9uIGZvciB0aGUgbW9tZW50LiBUaGlzIGhh cyB0byBiZQ0KKyAgIHJlcGxhY2VkIGJ5IHNoYXJpbmcgdGhhdCBkZWNsYXJhdGlvbiBpbiBhbGx0 eXBlcy5oICovDQorc3RydWN0IF9fb25jZV9jYiB7DQorCXZvaWQgKCpfX2YpKHZvaWQgKik7DQor CXZvaWQgKl9feDsNCisJc3RydWN0IF9fcHRjYiAqX19uZXh0Ow0KK307DQorDQorc3RydWN0IG9u Y2VfZmxhZyB7DQorICBpbnQgX19jbnRybDsNCisgIGludCBfX3dhaXRlcnM7DQorICBzdHJ1Y3Qg X19vbmNlX2NiIF9fY2I7DQorfTsNCisNCisjaWZuZGVmIF9fVEhSRF9FWFBFUklNRU5UQUwNCisj IGRlZmluZSBfX1RIUkRfRVhQRVJJTUVOVEFMIDENCisjZW5kaWYNCisNCisgIC8qIFRoZSBmb2xs b3dpbmcgbGlzdCBvZiA5IGludGVnZXIgY29uc3RhbnRzIG1ha2VzIHVwIGZvciB0aGUgYmluYXJ5 DQorICAgICBjb21wYXRpYmlsaXR5IG9mIHRoaXMgQyB0aHJlYWQgaW1wbGVtZW50YXRpb24uIFlv dSBtdXN0IG5ldmVyDQorICAgICBsaW5rIGNvZGUgYWdhaW5zdCB2ZXJzaW9ucyBvZiB0aGUgQyBs aWJyYXJ5IHRoYXQgZG8gbm90IGFncmVlDQorICAgICB1cG9uIHRoZXNlIEFCSSBwYXJhbWV0ZXJz Lg0KKw0KKyAgICAgQWRkaXRpb25hbGx5IHRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0 IHRoZSA1IHR5cGVzIGhhdmUNCisgICAgIHRoZSBzYW1lIHNpemUgYWNyb3NzIEMgbGlicmFyaWVz IGFuZCB0aGF0IHRoZXNlIHR5cGVzIGNhbiBiZQ0KKyAgICAgaW5pdGlhbGl6ZWQgYnkgdGhlIGRl ZmF1bHQgaW5pdGlhbGl6ZXIuDQorDQorICAgICBUaGUgdmFsdWVzIGZvciB0aGUgOSBwYXJhbWV0 ZXJzIGFyZSBub3QgZml4ZWQgZm9yIG5vdy4gRGVwZW5kaW5nDQorICAgICBvbiB0aGUgY2hvaWNl cyBvZiBvdGhlciBpbXBsZW1lbnRhdGlvbnMgYW5kIHRoZSBldm9sdXRpb24gb2YgdGhlDQorICAg ICBDIHN0YW5kYXJkIHRoZXkgbWF5IHN0aWxsIGNoYW5nZS4gVGhpcyBzaG91bGQgaGFwcGVuIHJh cmVseSwgYnV0DQorICAgICB5b3UgaGF2ZSB0byBjb25zaWRlciB0aGUgQyB0aHJlYWQgZmVhdHVy ZSB0byBiZSBleHBlcmltZW50YWwNCisgICAgIHVudGlsIHRoZW4sIGFuZCBiZSBwcmVwYXJlZCB0 byByZWNvbXBpbGUgeW91ciBiaW5hcnkgd2hlbiBsaW5raW5nDQorICAgICBhZ2FpbnN0IGEgZGlm ZmVyZW50IGltcGxlbWVudGF0aW9uIG9yIGEgbmV3IHZlcnNpb24uDQorDQorICAgICBUaGUgbWFj cm8gX19USFJEX0VYUEVSSU1FTlRBTCB3aWxsIGJlIGRlZmluZWQgYXMgbG9uZyBhcyB3ZQ0KKyAg ICAgY29uc2lkZXIgdGhpcyBBQkkgdG8gYmUgdW5zdGFibGUuIFRoaXMgY29tZXMgd2l0aCBzb21l IGxpbmsgdGltZQ0KKyAgICAgY2hlY2tzIGFuZCBhbiBvdmVyaGVhZCBvZiBzb21lIGJ5dGVzLiBB dCB5b3VyIG93biByaXNrIHlvdSBtYXkNCisgICAgIHN3aXRjaCB0aGlzIGNoZWNrIG9mZiBieSBk ZWZpbmluZyBfX1RIUkRfRVhQRVJJTUVOVEFMIG1hY3JvIHRvDQorICAgICAwLiAqLw0KKw0KKyNk ZWZpbmUgX19USFJEX1NVQ0NFU1MgICAgICAwDQorI2RlZmluZSBfX1RIUkRfQlVTWSAgICAgICAg IEVCVVNZDQorI2RlZmluZSBfX1RIUkRfRVJST1IgICAgICAgIEVJTlZBTA0KKyNkZWZpbmUgX19U SFJEX05PTUVNICAgICAgICBFTk9NRU0NCisjZGVmaW5lIF9fVEhSRF9USU1FRE9VVCAgICAgRVRJ TUVET1VUDQorI2RlZmluZSBfX01UWF9QTEFJTiAgICAgICAgIDANCisjZGVmaW5lIF9fTVRYX1JF Q1VSU0lWRSAgICAgMQ0KKyNkZWZpbmUgX19NVFhfVElNRUQgICAgICAgICAyDQorI2RlZmluZSBU U1NfRFRPUl9JVEVSQVRJT05TIDQNCisNCisjZGVmaW5lIF9fVEhSRF9DT05DQVQxMF8oXzAsIF8x LCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzkpICAgICAgICAgXA0KK18wICMjIF8gIyMg XzEgIyMgXyAjIyBfMiAjIyBfICMjIF8zICMjIF8gIyMgXzQgIyMgXyAjIyBfNSAjIyBfICMjIF82 ICMjIF8gIyMgXzcgIyMgXyAjIyBfOCAjIyBfICMjIF85DQorDQorI2RlZmluZSBfX1RIUkRfQ09O Q0FUMTAoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzkpIFwNCisgIF9fVEhS RF9DT05DQVQxMF8oXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzkpDQorDQor DQorI2RlZmluZSBfX1RIUkRfQUJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KK19f VEhSRF9DT05DQVQxMChfX3RocmRfYWJpLCAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg ICAgICAgICAgX19USFJEX1NVQ0NFU1MsICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAg ICAgIF9fVEhSRF9CVVNZLCAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBf X1RIUkRfRVJST1IsICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJE X05PTUVNLCAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fVEhSRF9USU1F RE9VVCwgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX01UWF9QTEFJTiwgICAg ICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19NVFhfUkVDVVJTSVZFLCAgICAg ICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fTVRYX1RJTUVELCAgICAgICAgICAgICAg ICAgICAgXA0KKyAgICAgICAgICAgICAgICBUU1NfRFRPUl9JVEVSQVRJT05TICAgICAgICAgICAg IFwNCisgICAgICAgICAgICAgICAgKQ0KKw0KKyNkZWZpbmUgX19USFJEX1NIRlQoWCwgWSkgKCgo WCkgPDwgMykgXiAoWSkpDQorDQorZW51bSB7DQorICBfX3RocmRfYWJpID0NCisgIF9fVEhSRF9T SEZUKHNpemVvZihjbmRfdCksDQorICAgICAgICAgICAgICBfX1RIUkRfU0hGVChzaXplb2YobXR4 X3QpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19USFJEX1NIRlQoc2l6ZW9mKG9uY2Vf ZmxhZyksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RIUkRfU0hG VChzaXplb2YodGhyZF90KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZih0c3NfdCkpKSkpLA0KK307DQorDQorZXh0ZXJuIHVuc2lnbmVk IGNvbnN0IF9fVEhSRF9BQkk7DQorDQorI2RlZmluZSBfX1RIUkRfQUJJX0NIRUNLICgxLyhfX1RI UkRfQUJJID09IF9fdGhyZF9hYmkpKQ0KKw0KKyNpZiBfX1RIUkRfRVhQRVJJTUVOVEFMDQorIyBk ZWZpbmUgX19USFJEX0FCSV9NQVJLIF9fYXR0cmlidXRlX18oKHVzZWQpKSBzdGF0aWMgdW5zaWdu ZWQgY29uc3QqY29uc3QgX190aHJkX2FiaV9tYXJrID0gJl9fVEhSRF9BQkkNCisjZWxzZQ0KKyMg ZGVmaW5lIF9fVEhSRF9BQklfTUFSSyB0eXBlZGVmIHVuc2lnbmVkIF9fdGhyZF9hYmlfZHVtbXlf dHlwZQ0KKyNlbmRpZg0KKw0KK2VudW0gew0KKyAgdGhyZF9zdWNjZXNzID0gX19USFJEX1NVQ0NF U1MsDQorICB0aHJkX2J1c3kgPSBfX1RIUkRfQlVTWSwNCisgIHRocmRfZXJyb3IgPSBfX1RIUkRf RVJST1IsDQorICB0aHJkX25vbWVtID0gX19USFJEX05PTUVNLA0KKyAgdGhyZF90aW1lZG91dCA9 IF9fVEhSRF9USU1FRE9VVCwNCit9Ow0KKw0KK2VudW0gew0KKyAgbXR4X3BsYWluID0gX19NVFhf UExBSU4sDQorICBtdHhfcmVjdXJzaXZlID0gX19NVFhfUkVDVVJTSVZFLA0KKyAgLy8gYWxsIG11 dGV4ZXMgYXJlIHRpbWVkLCBoZXJlLiBzbyB0aGlzIGlzIGEgbm8tb3ANCisgIG10eF90aW1lZCA9 IF9fTVRYX1RJTUVELA0KK307DQorDQorI2RlZmluZSBPTkNFX0ZMQUdfSU5JVCB7IC5fY250cmwg PSAwLCB9DQorI2RlZmluZSB0aHJlYWRfbG9jYWwgX1RocmVhZF9sb2NhbA0KKw0KK2ludCB0aHJk X2NyZWF0ZSh0aHJkX3QgKiwgdGhyZF9zdGFydF90LCB2b2lkICopOw0KK19Ob3JldHVybiB2b2lk IHRocmRfZXhpdChpbnQpOw0KKw0KK2ludCB0aHJkX2RldGFjaCh0aHJkX3QpOw0KK2ludCB0aHJk X2pvaW4odGhyZF90LCBpbnQgKik7DQorDQoraW50IHRocmRfc2xlZXAoY29uc3Qgc3RydWN0IHRp bWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsNCit2b2lkIHRocmRfeWllbGQodm9pZCk7DQor DQordGhyZF90IHRocmRfY3VycmVudCh2b2lkKTsNCitpbnQgdGhyZF9lcXVhbCh0aHJkX3QsIHRo cmRfdCk7DQorI2RlZmluZSB0aHJkX2VxdWFsKEEsIEIpICgoQSkgPT0gKEIpKQ0KKw0KK3ZvaWQg Y2FsbF9vbmNlKG9uY2VfZmxhZyAqLCB2b2lkICgqKSh2b2lkKSk7DQorDQoraW50IG10eF9pbml0 KG10eF90ICosIGludCk7DQordm9pZCBtdHhfZGVzdHJveShtdHhfdCAqKTsNCisNCitpbnQgbXR4 X2xvY2sobXR4X3QgKik7DQoraW50IG10eF90aW1lZGxvY2sobXR4X3QgKnJlc3RyaWN0LCBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3RyaWN0KTsNCitpbnQgbXR4X3RyeWxvY2sobXR4X3QgKik7 DQoraW50IG10eF91bmxvY2sobXR4X3QgKik7DQorDQoraW50IGNuZF9pbml0KGNuZF90ICopOw0K K3ZvaWQgY25kX2Rlc3Ryb3koY25kX3QgKik7DQorDQoraW50IGNuZF9icm9hZGNhc3QoY25kX3Qg Kik7DQoraW50IGNuZF9zaWduYWwoY25kX3QgKik7DQorDQoraW50IGNuZF90aW1lZHdhaXQoY25k X3QgKnJlc3RyaWN0LCBtdHhfdCAqcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVz dHJpY3QpOw0KK2ludCBjbmRfd2FpdChjbmRfdCAqLCBtdHhfdCAqKTsNCisNCitpbnQgdHNzX2Ny ZWF0ZSh0c3NfdCAqLCB0c3NfZHRvcl90KTsNCit2b2lkIHRzc19kZWxldGUodHNzX3Qga2V5KTsN CisNCitpbnQgdHNzX3NldCh0c3NfdCwgdm9pZCAqKTsNCit2b2lkICp0c3NfZ2V0KHRzc190KTsN CisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0t Z2l0IGEvc3JjL2ludGVybmFsL3B0aHJlYWRfaW1wbC5oIGIvc3JjL2ludGVybmFsL3B0aHJlYWRf aW1wbC5oDQppbmRleCA2NTBlODExLi5mOTY3YzI1IDEwMDY0NA0KLS0tIGEvc3JjL2ludGVybmFs L3B0aHJlYWRfaW1wbC5oDQorKysgYi9zcmMvaW50ZXJuYWwvcHRocmVhZF9pbXBsLmgNCkBAIC01 MSw2ICs1MSw1MyBAQCBzdHJ1Y3QgX190aW1lciB7DQogCXB0aHJlYWRfdCB0aHJlYWQ7DQogfTsN CiANCisvKiBGb3IgdGhlIG1vbWVudCB0aGlzIHR5cGUgaGFzIHRoZSBzYW1lIGxheW91dCBhcw0K KyAgIHB0aHJlYWRfbXV0ZXhfdC4gVGhpcyBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpbiBsYXRlciB2 ZXJzaW9ucyBvZiB0aGUNCisgICBDIHRocmVhZCBpbXBsZW1lbnRhdGlvbiwgYmUgaXQgZm9yIHRo ZSBzaW1wbGUgcmVhc29uIHRoYXQgdGhpcw0KKyAgIHdvdWxkIHJlZHVjZSB0aGUgc2l6ZSBvZiB0 aGUgc3RydWN0dXJlIGJ5IGhhbGYuICovDQorc3RydWN0IF9fbXR4X29uX2hlYXAgew0KKwlpbnQg X210X3R5cDsNCisJaW50IF9tdF9sY2s7DQorCWludCBfbXRfd3RzOw0KKwlpbnQgX210X3BhZDM7 DQorCWludCBfbXRfcGFkNDsNCisJaW50IF9tdF9jbnQ7DQorCWludCBfbXRfcmZzOw0KKwlpbnQg X210X3BhZDc7DQorCWludCBfbXRfcGFkODsNCisJaW50IF9tdF9wYWQ5Ow0KK307DQorDQorc3Rh dGljIGlubGluZQ0KK3ZvaWQgX19tdHhfYWRkcmVmKHN0cnVjdCBfX210eF9vbl9oZWFwICptKSB7 DQorCWlmIChtKSB7DQorCQlhX2luYygmbS0+X210X3Jmcyk7DQorCX0NCit9DQorDQorc3RydWN0 IF9fY25kX29uX2hlYXAgew0KKwlpbnQgcmZzOw0KKwlpbnQgdG9rOw0KKwlpbnQgd3RzOw0KKwlp bnQgc2VxOw0KKwlzdHJ1Y3QgX19tdHhfb25faGVhcCogbXR4Ow0KK307DQorDQorc3RhdGljIGlu bGluZQ0KK3ZvaWQgX19jbmRfYWRkcmVmKHN0cnVjdCBfX2NuZF9vbl9oZWFwICpjKSB7DQorCWlm IChjKSB7DQorCQlhX2luYygmYy0+cmZzKTsNCisJfQ0KK30NCisNCisvKiBVbmxlc3MgdG9sZCBv dGhlcndpc2UgdGhpcyBDIHRocmVhZCBpbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgdXNlDQorICAg cHJpdmF0ZSBmdXRleGVzLiAqLw0KKyNpZmRlZiBfX01UWF9TSEFSRUQNCisjZGVmaW5lIFRIUkRf UFJJVkFURSAwDQorI2Vsc2UNCisjZGVmaW5lIFRIUkRfUFJJVkFURSAxMjgNCisjZW5kaWYNCisN CiAjZGVmaW5lIF9fU1UgKHNpemVvZihzaXplX3QpL3NpemVvZihpbnQpKQ0KIA0KICNkZWZpbmUg X2Ffc3RhY2tzaXplIF9fdS5fX3NbMF0NCkBAIC02Niw2ICsxMTMsMTIgQEAgc3RydWN0IF9fdGlt ZXIgew0KICNkZWZpbmUgX21fcHJldiBfX3UuX19wWzNdDQogI2RlZmluZSBfbV9uZXh0IF9fdS5f X3BbNF0NCiAjZGVmaW5lIF9tX2NvdW50IF9fdS5fX2lbNV0NCisjZGVmaW5lIF9teF90eXBlIF9f dS5fX2lbMF0NCisjZGVmaW5lIF9teF9sb2NrIF9fdS5fX2lbMV0NCisjZGVmaW5lIF9teF9tdHgg X191Ll9fcFsyXQ0KKyNkZWZpbmUgX214X3ByZXYgX191Ll9fcFszXSAvKiB1bnVzZWQgKi8NCisj ZGVmaW5lIF9teF9uZXh0IF9fdS5fX3BbNF0gLyogdW51c2VkICovDQorI2RlZmluZSBfbXhfY291 bnQgX191Ll9faVs1XSAvKiB1bnVzZWQgKi8NCiAjZGVmaW5lIF9jX211dGV4IF9fdS5fX3BbMF0N CiAjZGVmaW5lIF9jX3NlcSBfX3UuX19pWzJdDQogI2RlZmluZSBfY193YWl0ZXJzIF9fdS5fX2lb M10NCkBAIC03NCw2ICsxMjcsMTQgQEAgc3RydWN0IF9fdGltZXIgew0KICNkZWZpbmUgX2NfbG9j a3dhaXQgX191Ll9faVs2XQ0KICNkZWZpbmUgX2Nfd2FpdGVyczIgX191Ll9faVs3XQ0KICNkZWZp bmUgX2NfZGVzdHJveSBfX3UuX19pWzhdDQorI2RlZmluZSBfY3hfY25kIF9fdS5fX3BbMF0NCisj ZGVmaW5lIF9jeF9zZXEgX191Ll9faVsyXSAgICAgLyogdW51c2VkICovDQorI2RlZmluZSBfY3hf d2FpdGVycyBfX3UuX19pWzNdIC8qIHVudXNlZCAqLw0KKyNkZWZpbmUgX2N4X2Nsb2NrIF9fdS5f X2lbNF0gICAvKiB1bnVzZWQgKi8NCisjZGVmaW5lIF9jeF9sb2NrIF9fdS5fX2lbNV0NCisjZGVm aW5lIF9jeF9sb2Nrd2FpdCBfX3UuX19pWzZdDQorI2RlZmluZSBfY3hfd2FpdGVyczIgX191Ll9f aVs3XS8qIHVudXNlZCAqLw0KKyNkZWZpbmUgX2N4X2Rlc3Ryb3kgX191Ll9faVs4XSAvKiB1bnVz ZWQgKi8NCiAjZGVmaW5lIF9yd19sb2NrIF9fdS5fX2lbMF0NCiAjZGVmaW5lIF9yd193YWl0ZXJz IF9fdS5fX2lbMV0NCiAjZGVmaW5lIF9iX2xvY2sgX191Ll9faVswXQ0KQEAgLTgzLDYgKzE0NCwz NCBAQCBzdHJ1Y3QgX190aW1lciB7DQogI2RlZmluZSBfYl93YWl0ZXJzMiBfX3UuX19pWzRdDQog I2RlZmluZSBfYl9pbnN0IF9fdS5fX3BbM10NCiANCisjaWYgZGVmaW5lZChfX0FUT01JQ19BQ1Ff UkVMKSAmJiBkZWZpbmVkKF9fQVRPTUlDX0FDUVVJUkUpICYmIGRlZmluZWQoX19BVE9NSUNfUkVM RUFTRSkNCisjZGVmaW5lIGFfdGFzKFgpIF9fYXRvbWljX3Rlc3RfYW5kX3NldCgoWCksIF9fQVRP TUlDX0FDUV9SRUwpDQorI2RlZmluZSBhX2FxZigpIF9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FU T01JQ19BQ1FVSVJFKQ0KKyNkZWZpbmUgYV9zcHVubChYKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcDQorCV9fYXNtX18gdm9sYXRpbGUgKCIjIGVuZCBDUyIpOyAgICAgICAgICBcDQorCWludCB2 b2xhdGlsZSogX2xjayA9IChYKTsgICAgICAgICAgICAgICBcDQorCV9fYXRvbWljX2NsZWFyKF9s Y2ssIF9fQVRPTUlDX1JFTEVBU0UpOyBcDQorfSkNCisjZWxzZQ0KKyNkZWZpbmUgYV90YXMoWCkg X19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KChYKSwgMSkNCisjZGVmaW5lIGFfYXFmKCkgX19zeW5j X3N5bmNocm9uaXplKCkNCisjZGVmaW5lIGFfc3B1bmwoWCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KKwlfX2FzbV9fIHZvbGF0aWxlICgiIyBlbmQgQ1MiKTsgICAgICAgICAgXA0KKwlpbnQg dm9sYXRpbGUqIF9sY2sgPSAoWCk7ICAgICAgICAgICAgICAgXA0KKwlfX3N5bmNfbG9ja19yZWxl YXNlKF9sY2spOyAgICAgICAgICAgICAgXA0KK30pDQorI2VuZGlmDQorDQorI2RlZmluZSBhX3Nw bGNrKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyh7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIGludCB2b2xhdGlsZSogX2xjayA9 IChYKTsgICAgICAgICAgICAgICAgICAgICBcDQorICB3aGlsZSAoYV90YXMoX2xjaykpICh2b2lk KTA7ICAgICAgICAgICAgICAgICAgXA0KKyAgYV9hcWYoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCisgIF9fYXNtX18gdm9sYXRpbGUgKCIjIHN0YXJ0IENTIik7ICAg ICAgICAgICAgICBcDQorIH0pDQorDQogI2luY2x1ZGUgInB0aHJlYWRfYXJjaC5oIg0KIA0KICNk ZWZpbmUgU0lHVElNRVIgMzINCkBAIC0xMTEsNiArMjAwLDEwIEBAIHZvaWQgX193YWl0KHZvbGF0 aWxlIGludCAqLCB2b2xhdGlsZSBpbnQgKiwgaW50LCBpbnQpOw0KICNkZWZpbmUgX193YWtlKGFk ZHIsIGNudCwgcHJpdikgXA0KIAlfX3N5c2NhbGwoU1lTX2Z1dGV4LCBhZGRyLCBGVVRFWF9XQUtF LCAoY250KTwwP0lOVF9NQVg6KGNudCkpDQogDQordm9pZCBfX3dhaXRfcHJpdih2b2xhdGlsZSBp bnQgKiwgdm9sYXRpbGUgaW50ICosIGludCk7DQorI2RlZmluZSBfX3dha2VfcHJpdihhZGRyLCBj bnQpIFwNCisJX19zeXNjYWxsKFNZU19mdXRleCwgYWRkciwgRlVURVhfV0FLRXxUSFJEX1BSSVZB VEUsIChjbnQpPDA/SU5UX01BWDooY250KSkNCisNCiB2b2lkIF9fYWNxdWlyZV9wdGMoKTsNCiB2 b2lkIF9fcmVsZWFzZV9wdGMoKTsNCiB2b2lkIF9faW5oaWJpdF9wdGMoKTsNCmRpZmYgLS1naXQg YS9zcmMvbW1hbi9tcHJvdGVjdC5jIGIvc3JjL21tYW4vbXByb3RlY3QuYw0KaW5kZXggZjQ4ODQ4 Ni4uNTM1Nzg3YiAxMDA2NDQNCi0tLSBhL3NyYy9tbWFuL21wcm90ZWN0LmMNCisrKyBiL3NyYy9t bWFuL21wcm90ZWN0LmMNCkBAIC0yLDEwICsyLDEyIEBADQogI2luY2x1ZGUgImxpYmMuaCINCiAj aW5jbHVkZSAic3lzY2FsbC5oIg0KIA0KLWludCBtcHJvdGVjdCh2b2lkICphZGRyLCBzaXplX3Qg bGVuLCBpbnQgcHJvdCkNCitpbnQgX19tcHJvdGVjdCh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBp bnQgcHJvdCkNCiB7DQogCXNpemVfdCBzdGFydCwgZW5kOw0KIAlzdGFydCA9IChzaXplX3QpYWRk ciAmIC1QQUdFX1NJWkU7DQogCWVuZCA9IChzaXplX3QpKChjaGFyICopYWRkciArIGxlbiArIFBB R0VfU0laRS0xKSAmIC1QQUdFX1NJWkU7DQogCXJldHVybiBzeXNjYWxsKFNZU19tcHJvdGVjdCwg c3RhcnQsIGVuZC1zdGFydCwgcHJvdCk7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19tcHJvdGVjdCwg bXByb3RlY3QpOw0KZGlmZiAtLWdpdCBhL3NyYy9zY2hlZC90aHJkX3lpZWxkLmMgYi9zcmMvc2No ZWQvdGhyZF95aWVsZC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMzAx ZTk1Mw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3NjaGVkL3RocmRfeWllbGQuYw0KQEAgLTAs MCArMSw3IEBADQorI2luY2x1ZGUgPHNjaGVkLmg+DQorI2luY2x1ZGUgInN5c2NhbGwuaCINCisN Cit2b2lkIHRocmRfeWllbGQoKQ0KK3sNCisgICAgICAgICAodm9pZClzeXNjYWxsKFNZU19zY2hl ZF95aWVsZCk7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvX19jbmRfZ2V0cmVmLmMgYi9z cmMvdGhyZWFkL19fY25kX2dldHJlZi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uNzQ5ZWFhZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9fX2NuZF9nZXRy ZWYuYw0KQEAgLTAsMCArMSw3MyBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5j bHVkZSA8dGhyZWFkcy5oPg0KKw0KK3N0YXRpYyBpbmxpbmUgX19jbmRfdCogX19jbmRfaW5pdChf X2NuZF90ICpjLCBfX210eF90ICptKSB7DQorCWlmIChjKSB7DQorCQkqYyA9IChfX2NuZF90KSB7 DQorCQkJLnJmcyA9IDIsDQorCQkJIC5tdHggPSBtLA0KKwkJCS53dHMgPSAxLA0KKwkJCS5zZXEg PSAwLA0KKwkJfTsNCisJfQ0KKwlpZiAobSkgX19tdHhfYWRkcmVmKG0pOw0KKwlyZXR1cm4gYzsN Cit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9fY25kX2RlbGV0ZShfX2NuZF90ICpjKSBfX2F0 dHJpYnV0ZV9fKChub25udWxsKDEpKSk7DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9fY25kX2Rl bGV0ZShfX2NuZF90ICpjKSB7DQorCV9fbXR4X3VucmVmKGMtPm10eCk7DQorCWMtPm10eCA9IDA7 DQorCWZyZWUoYyk7DQorfQ0KKw0KK3ZvaWQgX19jbmRfdW5yZWYoX19jbmRfdCAqYykgew0KKwlp ZiAoYV9mZXRjaF9hZGQoJmMtPnJmcywgLTEpID09IDEpIHsNCisJCV9fY25kX2RlbGV0ZShjKTsN CisJfQ0KK30NCisNCitzdGF0aWMgaW5saW5lIF9fY25kX3QqIF9fY25kX2dldHJlZl9kZWYoY25k X3QgKmNvbmQsIF9fbXR4X3QqIG0sIF9fY25kX3QqIGRlZiwgaW50ICogc2VxKSAgX19hdHRyaWJ1 dGVfXygobm9ubnVsbCgxLDIpKSk7DQorDQorc3RhdGljIGlubGluZSBfX2NuZF90KiBfX2NuZF9n ZXRyZWZfZGVmKGNuZF90ICpjb25kLCBfX210eF90KiBtLCBfX2NuZF90KiBkZWYsIGludCAqIHNl cSkgew0KKwlfX2NuZF90ICogcmV0Ow0KKwkvKiBDcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBi eSBsb2NrLiAqLw0KKwlfX2xvY2soJmNvbmQtPl9jeF9sb2NrKTsNCisJcmV0ID0gY29uZC0+X2N4 X2NuZDsNCisJaWYgKHJldCkgew0KKwkJaWYgKG0pIHsNCisJCQkvKiBIYXMgdGhlIGNuZCBqdXN0 IGJlZW4gaW5pdGlhbGl6ZWQ/ICovDQorCQkJaWYgKCFyZXQtPm10eCkgew0KKwkJCQlfX210eF9h ZGRyZWYobSk7DQorCQkJCXJldC0+bXR4ID0gbTsNCisJCQkvKiBJZiBub3QsIGlzIGl0IGNvbnNp c3RlbnQgd2l0aCBwcmV2aW91cyB1c2FnZT8gKi8NCisJCQl9IGVsc2UgaWYgKHJldC0+bXR4ICE9 IG0pIHsNCisJCQkJcmV0ID0gMDsNCisJCQkJZ290byBVTkxPQ0s7DQorCQkJfQ0KKwkJfQ0KKwkJ KytyZXQtPnd0czsNCisJCV9fY25kX2FkZHJlZihyZXQpOw0KKwkJKnNlcSA9IHJldC0+c2VxOw0K Kwl9IGVsc2UgaWYgKGRlZikgew0KKwkJcmV0ID0gZGVmOw0KKwkJY29uZC0+X2N4X2NuZCA9IGRl ZjsNCisJfQ0KKyBVTkxPQ0s6DQorCV9fdW5sb2NrKCZjb25kLT5fY3hfbG9jayk7DQorCXJldHVy biByZXQ7DQorfQ0KKw0KK19fY25kX3QqIF9fY25kX2dldHJlZihjbmRfdCAqY29uZCwgX19tdHhf dCAqIG0sIGludCAqIHNlcSkgew0KKwlfX2NuZF90ICogcmV0ID0gX19jbmRfZ2V0cmVmX2RlZihj b25kLCBtLCAwLCBzZXEpOw0KKwlpZiAoIXJldCkgew0KKwkJX19jbmRfdCAqIG5ldyA9IF9fY25k X2luaXQobWFsbG9jKHNpemVvZiAqcmV0KSwgbSk7DQorCQlpZiAobmV3KSB7DQorCQkJcmV0ID0g X19jbmRfZ2V0cmVmX2RlZihjb25kLCBtLCBuZXcsIHNlcSk7DQorCQkJLyogc29tZWJvZHkgc25l YWtlZCBpbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwgKi8NCisJCQlpZiAocmV0 ICE9IG5ldykgX19jbmRfZGVsZXRlKG5ldyk7DQorCQl9DQorCX0NCisJcmV0dXJuIHJldDsNCit9 DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9fX2xvY2suYyBiL3NyYy90aHJlYWQvX19sb2NrLmMN CmluZGV4IDA4NzRjMDQuLjhhNDJlMmQgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL19fbG9jay5j DQorKysgYi9zcmMvdGhyZWFkL19fbG9jay5jDQpAQCAtMSwxNSArMSwyOSBAQA0KICNpbmNsdWRl ICJwdGhyZWFkX2ltcGwuaCINCiANCi12b2lkIF9fbG9jayh2b2xhdGlsZSBpbnQgKmwpDQordm9p ZCBfX2xvY2sodm9sYXRpbGUgaW50ICphZGRyKQ0KIHsNCi0JaWYgKGxpYmMudGhyZWFkc19taW51 c18xKQ0KLQkJd2hpbGUgKGFfc3dhcChsLCAxKSkgX193YWl0KGwsIGwrMSwgMSwgMSk7DQorCWlm IChsaWJjLnRocmVhZHNfbWludXNfMSkgew0KKwkJaW50IHZvbGF0aWxlKiB3YWl0ZXJzID0gYWRk cisxOw0KKwkJZm9yICg7Oykgew0KKwkJCWZvciAoaW50IHNwaW5zID0gMDsgc3BpbnMgPCAxMDAw MDsgKytzcGlucykgew0KKwkJCQlpZiAoYV90YXMoYWRkcikpIGFfc3BpbigpOw0KKwkJCQllbHNl IHsNCisJCQkJCS8qIGEgbG9jayBtdXN0IGVuc3VyZSB0aGF0IGFsbCBkYXRhDQorCQkJCQkgICB0 aGF0IGlzIHdyaXR0ZW4gYmVmb3JlIHdpbGwgYmUNCisJCQkJCSAgIHZpc2libGUgKi8NCisJCQkJ CWFfYXFmKCk7DQorCQkJCQlyZXR1cm47DQorCQkJCX0NCisJCQl9DQorCQkJYV9pbmMod2FpdGVy cyk7DQorCQkJX19zeXNjYWxsKFNZU19mdXRleCwgYWRkciwgRlVURVhfV0FJVHxUSFJEX1BSSVZB VEUsIDEsIDApOw0KKwkJCWFfZGVjKHdhaXRlcnMpOw0KKwkJfQ0KKwl9DQogfQ0KIA0KIHZvaWQg X191bmxvY2sodm9sYXRpbGUgaW50ICpsKQ0KIHsNCi0JaWYgKGxbMF0pIHsNCi0JCWFfc3RvcmUo bCwgMCk7DQotCQlpZiAobFsxXSkgX193YWtlKGwsIDEsIDEpOw0KLQl9DQorCWFfc3B1bmwobCk7 DQorCWlmIChsWzFdKSBfX3dha2VfcHJpdihsLCAxKTsNCiB9DQpkaWZmIC0tZ2l0IGEvc3JjL3Ro cmVhZC9fX210eF9nZXRyZWYuYyBiL3NyYy90aHJlYWQvX19tdHhfZ2V0cmVmLmMNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi40Zjk4YWJkDQotLS0gL2Rldi9udWxsDQorKysg Yi9zcmMvdGhyZWFkL19fbXR4X2dldHJlZi5jDQpAQCAtMCwwICsxLDQ5IEBADQorI2luY2x1ZGUg InB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQorc3RhdGljIGlubGlu ZSBfX210eF90KiBfX210eF9pbml0KF9fbXR4X3QgKm0sIGludCB0eXBlKSB7DQorCWlmIChtKSB7 DQorCQkqbSA9IChfX210eF90KSB7DQorCQkJLl9tdF9yZnMgPSAyLA0KKwkJCSAuX210X3R5cCA9 IHR5cGUsDQorCQl9Ow0KKwl9DQorCXJldHVybiBtOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZv aWQgX19tdHhfZGVsZXRlKF9fbXR4X3QgKiBtKSB7DQorCWZyZWUobSk7DQorfQ0KKw0KK3ZvaWQg X19tdHhfdW5yZWYoX19tdHhfdCAqbSkgew0KKwlpZiAobSkgew0KKwkJaWYgKGFfZmV0Y2hfYWRk KCZtLT5fbXRfcmZzLCAtMSkgPT0gMSkgew0KKwkJCV9fbXR4X2RlbGV0ZShtKTsNCisJCX0NCisJ fQ0KK30NCisNCitzdGF0aWMgaW5saW5lIF9fbXR4X3QqIF9fbXR4X2dldHJlZl9kZWYobXR4X3Qg Km11dCwgX19tdHhfdCogZGVmKSB7DQorCS8qIENyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5 IGxvY2sgLiAqLw0KKwlfX2xvY2soJm11dC0+X214X2xvY2spOw0KKwlfX210eF90ICogcmV0ID0g bXV0LT5fbXhfbXR4Ow0KKwlpZiAocmV0KSB7DQorCQlfX210eF9hZGRyZWYocmV0KTsNCisJfSBl bHNlIGlmIChkZWYpIHsNCisJCXJldCA9IGRlZjsNCisJCW11dC0+X214X210eCA9IGRlZjsNCisJ fQ0KKwlfX3VubG9jaygmbXV0LT5fbXhfbG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK19f bXR4X3QqIF9fbXR4X2dldHJlZihtdHhfdCAqbXV0KSB7DQorCV9fbXR4X3QgKiByZXQgPSBfX210 eF9nZXRyZWZfZGVmKG11dCwgMCk7DQorCWlmICghcmV0KSB7DQorCQlfX210eF90ICogbmV3ID0g X19tdHhfaW5pdChtYWxsb2Moc2l6ZW9mICpyZXQpLCBtdXQtPl9teF90eXBlKTsNCisJCXJldCA9 IF9fbXR4X2dldHJlZl9kZWYobXV0LCBuZXcpOw0KKwkJLyogc29tZWJvZHkgc25lYWtlZCBpbiBi ZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwgKi8NCisJCWlmIChyZXQgIT0gbmV3KSBf X210eF9kZWxldGUobmV3KTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9z cmMvdGhyZWFkL19fdGhyZF9hYmkuYyBiL3NyYy90aHJlYWQvX190aHJkX2FiaS5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZTU2NzRlNg0KLS0tIC9kZXYvbnVsbA0KKysr IGIvc3JjL3RocmVhZC9fX3RocmRfYWJpLmMNCkBAIC0wLDAgKzEsMyBAQA0KKyNpbmNsdWRlIDx0 aHJlYWRzLmg+DQorDQordW5zaWduZWQgY29uc3QgX19USFJEX0FCSSA9ICBfX3RocmRfYWJpOw0K ZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvX190aHJkX3dhaXQuYyBiL3NyYy90aHJlYWQvX190aHJk X3dhaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjYzNTFjYjYNCi0t LSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvX190aHJkX3dhaXQuYw0KQEAgLTAsMCArMSwy NiBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0K Kw0KK2ludCBfX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsaywgc3RydWN0IHRpbWVzcGVjICp0 cyk7DQorDQoraW50IF9fdGhyZF93YWl0KHZvbGF0aWxlIGludCAqYWRkciwgaW50IHZhbCwgY29u c3Qgc3RydWN0IHRpbWVzcGVjICphdCkNCit7DQorCWludCByOw0KKwlzdHJ1Y3QgdGltZXNwZWMg dG8sICp0b3A9MDsNCisNCisJaWYgKGF0KSB7DQorCQlpZiAoYXQtPnR2X25zZWMgPj0gMTAwMDAw MDAwMFVMKSByZXR1cm4gRUlOVkFMOw0KKwkJaWYgKF9fY2xvY2tfZ2V0dGltZShDTE9DS19SRUFM VElNRSwgJnRvKSkgcmV0dXJuIEVJTlZBTDsNCisJCXRvLnR2X3NlYyA9IGF0LT50dl9zZWMgLSB0 by50dl9zZWM7DQorCQlpZiAoKHRvLnR2X25zZWMgPSBhdC0+dHZfbnNlYyAtIHRvLnR2X25zZWMp IDwgMCkgew0KKwkJCXRvLnR2X3NlYy0tOw0KKwkJCXRvLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsN CisJCX0NCisJCWlmICh0by50dl9zZWMgPCAwKSByZXR1cm4gRVRJTUVET1VUOw0KKwkJdG9wID0g JnRvOw0KKwl9DQorDQorCXIgPSAtX19zeXNjYWxsX2NwKFNZU19mdXRleCwgYWRkciwgRlVURVhf V0FJVHxUSFJEX1BSSVZBVEUsIHZhbCwgdG9wKTsNCisJaWYgKHIgPT0gRUlOVFIgfHwgciA9PSBF SU5WQUwgfHwgciA9PSBFVElNRURPVVQgfHwgciA9PSBFV09VTERCTE9DSykgcmV0dXJuIHI7DQor CXJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL19fdGltZWR3YWl0LmMgYi9z cmMvdGhyZWFkL19fdGltZWR3YWl0LmMNCmluZGV4IDMwMjI3M2EuLjNhZWQyYmQgMTAwNjQ0DQot LS0gYS9zcmMvdGhyZWFkL19fdGltZWR3YWl0LmMNCisrKyBiL3NyYy90aHJlYWQvX190aW1lZHdh aXQuYw0KQEAgLTQsNiArNCw5IEBADQogI2luY2x1ZGUgImZ1dGV4LmgiDQogI2luY2x1ZGUgInN5 c2NhbGwuaCINCiANCitpbnQgX19wdGhyZWFkX3NldGNhbmNlbHN0YXRlKGludCBuZXcsIGludCAq b2xkKTsNCitpbnQgX19jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGssIHN0cnVjdCB0aW1lc3Bl YyAqdHMpOw0KKw0KIHN0YXRpYyBpbnQgZG9fd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2 YWwsDQogCWNsb2NraWRfdCBjbGssIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYXQsIGludCBwcml2 KQ0KIHsNCkBAIC0xMiw3ICsxNSw3IEBAIHN0YXRpYyBpbnQgZG9fd2FpdCh2b2xhdGlsZSBpbnQg KmFkZHIsIGludCB2YWwsDQogDQogCWlmIChhdCkgew0KIAkJaWYgKGF0LT50dl9uc2VjID49IDEw MDAwMDAwMDBVTCkgcmV0dXJuIEVJTlZBTDsNCi0JCWlmIChjbG9ja19nZXR0aW1lKGNsaywgJnRv KSkgcmV0dXJuIEVJTlZBTDsNCisJCWlmIChfX2Nsb2NrX2dldHRpbWUoY2xrLCAmdG8pKSByZXR1 cm4gRUlOVkFMOw0KIAkJdG8udHZfc2VjID0gYXQtPnR2X3NlYyAtIHRvLnR2X3NlYzsNCiAJCWlm ICgodG8udHZfbnNlYyA9IGF0LT50dl9uc2VjIC0gdG8udHZfbnNlYykgPCAwKSB7DQogCQkJdG8u dHZfc2VjLS07DQpAQCAtMzMsMTMgKzM2LDEzIEBAIGludCBfX3RpbWVkd2FpdCh2b2xhdGlsZSBp bnQgKmFkZHIsIGludCB2YWwsDQogew0KIAlpbnQgciwgY3M7DQogDQotCWlmICghY2xlYW51cCkg cHRocmVhZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmY3MpOw0KKwlp ZiAoIWNsZWFudXApIF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NBTkNFTF9ESVNB QkxFLCAmY3MpOw0KIAlwdGhyZWFkX2NsZWFudXBfcHVzaChjbGVhbnVwLCBhcmcpOw0KIA0KIAly ID0gZG9fd2FpdChhZGRyLCB2YWwsIGNsaywgYXQsIHByaXYpOw0KIA0KIAlwdGhyZWFkX2NsZWFu dXBfcG9wKDApOw0KLQlpZiAoIWNsZWFudXApIHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoY3MsIDAp Ow0KKwlpZiAoIWNsZWFudXApIF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShjcywgMCk7DQogDQog CXJldHVybiByOw0KIH0NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL19fd2FpdF9wcml2LmMgYi9z cmMvdGhyZWFkL19fd2FpdF9wcml2LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwLi5mODM1OGNkDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL19fd2FpdF9wcml2 LmMNCkBAIC0wLDAgKzEsMTQgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorDQordm9p ZCBfX3dhaXRfcHJpdih2b2xhdGlsZSBpbnQgKmFkZHIsIHZvbGF0aWxlIGludCAqd2FpdGVycywg aW50IHZhbCkNCit7DQorCWludCBzcGlucz0xMDAwMDsNCisJd2hpbGUgKHNwaW5zLS0pIHsNCisJ CWlmICgqYWRkcj09dmFsKSBhX3NwaW4oKTsNCisJCWVsc2UgcmV0dXJuOw0KKwl9DQorCWlmICh3 YWl0ZXJzKSBhX2luYyh3YWl0ZXJzKTsNCisJd2hpbGUgKCphZGRyPT12YWwpDQorCQlfX3N5c2Nh bGwoU1lTX2Z1dGV4LCBhZGRyLCBGVVRFWF9XQUlUfFRIUkRfUFJJVkFURSwgdmFsLCAwKTsNCisJ aWYgKHdhaXRlcnMpIGFfZGVjKHdhaXRlcnMpOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFk L2NhbGxfb25jZS5jIGIvc3JjL3RocmVhZC9jYWxsX29uY2UuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLjFkMzU0MGUNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJl YWQvY2FsbF9vbmNlLmMNCkBAIC0wLDAgKzEsNDAgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBs LmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCisjZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9w dXNoX3N0YXRpYyhmLCB4KSBkbyB7IHN0YXRpYyBzdHJ1Y3QgX19wdGNiIF9fY2I7IF9wdGhyZWFk X2NsZWFudXBfcHVzaCgmX19jYiwgZiwgeCkNCisNCitzdGF0aWMgdm9pZCB1bmRvKHZvaWQgKmZs ZykNCit7DQorCW9uY2VfZmxhZyAqIGZsYWcgPSBmbGc7DQorCWFfc3RvcmUoJmZsYWctPl9fY250 cmwsIDApOw0KKwlfX3dha2VfcHJpdigmZmxhZy0+X19jbnRybCwgMSk7DQorfQ0KKw0KK3ZvaWQg Y2FsbF9vbmNlKG9uY2VfZmxhZyAqZmxhZywgdm9pZCAoKmZ1bmMpKHZvaWQpKQ0KK3sNCisJX19U SFJEX0FCSV9NQVJLOw0KKw0KKwkvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgaW5pdCBmaW5pc2hl ZCBiZWZvcmUgKi8NCisJaWYgKGZsYWctPl9fY250cmwgPT0gMikgcmV0dXJuOw0KKw0KKwkvKiBU cnkgdG8gZW50ZXIgaW5pdGlhbGl6aW5nIHN0YXRlLiBUaHJlZSBwb3NzaWJpbGl0aWVzOg0KKwkg KiAgMCAtIHdlJ3JlIHRoZSBmaXJzdCBvciB0aGUgb3RoZXIgY2FuY2VsbGVkOyBydW4gaW5pdA0K KwkgKiAgMSAtIGFub3RoZXIgdGhyZWFkIGlzIHJ1bm5pbmcgaW5pdDsgd2FpdA0KKwkgKiAgMiAt IGFub3RoZXIgdGhyZWFkIGZpbmlzaGVkIHJ1bm5pbmcgaW5pdDsganVzdCByZXR1cm4gKi8NCisN CisJZm9yICg7Oykgc3dpdGNoIChhX2NhcygmZmxhZy0+X19jbnRybCwgMCwgMSkpIHsNCisJY2Fz ZSAwOg0KKwkJX3B0aHJlYWRfY2xlYW51cF9wdXNoKCh2b2lkKikmZmxhZy0+X19jYiwgdW5kbywg ZmxhZyk7DQorCQlmdW5jKCk7DQorCQlfcHRocmVhZF9jbGVhbnVwX3BvcCgodm9pZCopJmZsYWct Pl9fY2IsIDApOw0KKw0KKwkJYV9zdG9yZSgmZmxhZy0+X19jbnRybCwgMik7DQorCQlpZiAoZmxh Zy0+X193YWl0ZXJzKSBfX3dha2UoJmZsYWctPl9fY250cmwsIC0xLCAwKTsNCisJCXJldHVybjsN CisJY2FzZSAxOg0KKwkJX193YWl0X3ByaXYoJmZsYWctPl9fY250cmwsICZmbGFnLT5fX3dhaXRl cnMsIDEpOw0KKwkJY29udGludWU7DQorCWNhc2UgMjoNCisJCXJldHVybjsNCisJfQ0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NuZF9icm9hZGNhc3QuYyBiL3NyYy90aHJlYWQvY25kX2Jy b2FkY2FzdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMTJjNzE4MQ0K LS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9jbmRfYnJvYWRjYXN0LmMNCkBAIC0wLDAg KzEsNjggQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMu aD4NCisNCitzdGF0aWMgaW50IF9fY25kX2Jyb2FkY2FzdChfX2NuZF90ICpjKQ0KK3sNCisJaW50 IHJldCA9IDA7DQorCV9fbXR4X3QgKiBtdHggPSBjLT5tdHg7DQorCS8qIElmIHRoZSBtdHggaXNu J3Qgc2V0LCB0aGlzIF9fY25kIGhhcyBuZXZlciBiZWVuIHVzZWQgZm9yIGEgd2FpdCwNCisJICAg bm90aGluZyB0byBkby4gKi8NCisJaWYgKG10eCkgew0KKwkJLyogUGVyZm9ybSB0aGUgZnV0ZXgg cmVxdWV1ZSwgd2FraW5nIG9uZSB3YWl0ZXIgdW5sZXNzIHdlIGtub3cNCisJCSAqIHRoYXQgdGhl IGNhbGxpbmcgdGhyZWFkIGhvbGRzIHRoZSBtdXRleC4gKi8NCisJCWludCB3YWtldXAgPSAhbXR4 LT5fbXRfdHlwIHx8IChtdHgtPl9tdF9sY2smSU5UX01BWCkhPV9fcHRocmVhZF9zZWxmKCktPnRp ZDsNCisJCXJldCA9IF9fc3lzY2FsbChTWVNfZnV0ZXgsICZjLT50b2ssIEZVVEVYX1JFUVVFVUV8 VEhSRF9QUklWQVRFLA0KKwkJICAgICAgICAgICAgICAgIDAsDQorCQkgICAgICAgICAgICAgICAg SU5UX01BWCwgJm10eC0+X210X2xjayk7DQorCQlpZiAocmV0IDwgMCkgZ290byBPVVQ7DQorCQlp bnQgbXYgPSByZXQ7DQorCQlyZXQgPSBfX3N5c2NhbGwoU1lTX2Z1dGV4LCAmYy0+c2VxLCBGVVRF WF9SRVFVRVVFfFRIUkRfUFJJVkFURSwNCisJCSAgICAgICAgICAgICAgICAwLA0KKwkJICAgICAg ICAgICAgICAgIElOVF9NQVgsICZtdHgtPl9tdF9sY2spOw0KKwkJaWYgKHJldCA8IDApIGdvdG8g T1VUOw0KKwkJbXYgKz0gcmV0Ow0KKwkJLyogRG8gdGhlIGJvb2trZWVwaW5nIGZvciB0aGUgbXV0 ZXggYW5kIHdha2UgdXAgb25lIHRocmVhZCBldmVudHVhbGx5LiAqLw0KKwkJaWYgKG12ID4gd2Fr ZXVwKSBhX2ZldGNoX2FkZCgmbXR4LT5fbXRfd3RzLCBtdi13YWtldXApOw0KKwkJaWYgKG12ID4g MCAmJiB3YWtldXApIHJldCA9IF9fc3lzY2FsbChTWVNfZnV0ZXgsICZtdHgtPl9tdF9sY2ssIEZV VEVYX1dBS0V8VEhSRF9QUklWQVRFLCAxKTsNCisJfQ0KK09VVDoNCisJcmV0dXJuICByZXQgPCAw ID8gdGhyZF9lcnJvciA6IHRocmRfc3VjY2VzczsNCit9DQorDQoraW50IGNuZF9icm9hZGNhc3Qo Y25kX3QgKiBjb25kKQ0KK3sNCisJaW50IHJldCA9IHRocmRfc3VjY2VzczsNCisJaW50IHdha2V1 cCA9IDA7DQorDQorCS8qIEF2b2lkIGZpZ2h0IGZvciBjcml0aWNhbCBzZWN0aW9uIGlmIHRoZXJl IGlzIG5vdGhpbmcgdG8NCisJICAgZG8uICovDQorCWlmICghY29uZCB8fCAhY29uZC0+X2N4X2Nu ZCkgcmV0dXJuIHJldDsNCisNCisJLyogQ3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgbG9j ayAqLw0KKwlfX2xvY2soJmNvbmQtPl9jeF9sb2NrKTsNCisJX19jbmRfdCAqIGMgPSBjb25kLT5f Y3hfY25kOw0KKwkvKiBJZiB0aGVyZSBhcmUgd2FpdGVycywgYWxsIHdpbGwgYmUgd2FpdGluZyBv biBjLiBTaW5jZSB3ZSBob2xkIHRoZQ0KKwkgICBsb2NrIG5vIG90aGVyIHdhaXRlcnMgY2FuIHNu ZWFrIGluLiBMb2NrIHRoZW0gcGVybWFuZW50bHkgb3V0DQorCSAgIG9mIHVzaW5nIHRoaXMgb25l LCBoZXJlLiBBcyBhIGNvbnNlcXVlbmNlIHdlIGRvbid0IGhhdmUgaW5jIHRoZQ0KKwkgICByZWZl cmVuY2UgY291bnQ6IHRoZXJlIGlzIG5vIGNoYW5nZSBpbiB0aGUgdG90YWwgbnVtYmVyIG9mDQor CSAgIHJlZmVyZW5jZXMuICovDQorCWlmIChjKSB7DQorCQkrK2MtPnNlcTsNCisJCXdha2V1cCA9 IGMtPnd0czsNCisJCWlmICh3YWtldXApIHsNCisJCQljb25kLT5fY3hfY25kID0gMDsNCisJCQlj LT53dHMgPSAwOw0KKwkJfSBlbHNlIHsNCisJCQljID0gMDsNCisJCX0NCisJfQ0KKwlfX3VubG9j aygmY29uZC0+X2N4X2xvY2spOw0KKw0KKwkvKiBJZiBjIGlzIDAsIHRoZXJlIGhhdmVuJ3QgYmVl biBhbnkgd2FpdGVycywgeWV0LCBub3RoaW5nIHRvIGRvLiAqLw0KKwlpZiAoYykgew0KKwkJYV9m ZXRjaF9hZGQoJmMtPnRvaywgd2FrZXVwKTsNCisJCXJldCA9IF9fY25kX2Jyb2FkY2FzdChjKTsN CisJCV9fY25kX3VucmVmKGMpOw0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBh L3NyYy90aHJlYWQvY25kX2Rlc3Ryb3kuYyBiL3NyYy90aHJlYWQvY25kX2Rlc3Ryb3kuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjBhOTllZWYNCi0tLSAvZGV2L251bGwN CisrKyBiL3NyYy90aHJlYWQvY25kX2Rlc3Ryb3kuYw0KQEAgLTAsMCArMSwxMyBAQA0KKyNpbmNs dWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3ZvaWQgY25k X2Rlc3Ryb3koY25kX3QgKmNvbmQpDQorew0KKwkvKiBDcml0aWNhbCBzZWN0aW9uIHByb3RlY3Rl ZCBieSBsb2NrICovDQorCV9fbG9jaygmY29uZC0+X2N4X2xvY2spOw0KKwlfX2NuZF90ICogcmV0 ID0gY29uZC0+X2N4X2NuZDsNCisJY29uZC0+X2N4X2NuZCA9IDA7DQorCV9fdW5sb2NrKCZjb25k LT5fY3hfbG9jayk7DQorDQorCWlmIChyZXQpIF9fY25kX3VucmVmKHJldCk7DQorfQ0KZGlmZiAt LWdpdCBhL3NyYy90aHJlYWQvY25kX2luaXQuYyBiL3NyYy90aHJlYWQvY25kX2luaXQuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjY5ZjlkOTINCi0tLSAvZGV2L251bGwN CisrKyBiL3NyYy90aHJlYWQvY25kX2luaXQuYw0KQEAgLTAsMCArMSwxNSBAQA0KKyNpbmNsdWRl ICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBjbmRfaW5p dChjbmRfdCAqIGMpDQorew0KKwkqYyA9IChjbmRfdCkgew0KKwkJMA0KKwl9Ow0KKwlzdGF0aWMg aW50IGR1bV9pbnQ7DQorCV9fY25kX3QqIHJldCA9IF9fY25kX2dldHJlZihjLCAwLCAmZHVtX2lu dCk7DQorCS8qIGRvIHRoZSBib29ra2VlcGluZyBmb3IgdGhpcyB1bmNvbnRlbmRlZCBjYXNlICov DQorCV9fY25kX3VucmVmKHJldCk7DQorICAgICAgICAtLXJldC0+d3RzOw0KKwlyZXR1cm4gcmV0 ID8gdGhyZF9zdWNjZXNzIDogdGhyZF9ub21lbTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVh ZC9jbmRfc2lnbmFsLmMgYi9zcmMvdGhyZWFkL2NuZF9zaWduYWwuYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLmE4MGUyZTMNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90 aHJlYWQvY25kX3NpZ25hbC5jDQpAQCAtMCwwICsxLDQxIEBADQorI2luY2x1ZGUgInB0aHJlYWRf aW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IGNuZF9zaWduYWwoY25kX3Qg KiBjb25kKSB7DQorCWludCByZXQgPSB0aHJkX3N1Y2Nlc3M7DQorDQorCS8qIEF2b2lkIGZpZ2h0 IGZvciBjcml0aWNhbCBzZWN0aW9uIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8NCisJICAgZG8uICov DQorCWlmICghY29uZCB8fCAhY29uZC0+X2N4X2NuZCkgcmV0dXJuIHJldDsNCisNCisJLyogQ3Jp dGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgbG9jayAqLw0KKwlfX2xvY2soJmNvbmQtPl9jeF9s b2NrKTsNCisJX19jbmRfdCAqIGMgPSBjb25kLT5fY3hfY25kOw0KKwlpZiAoYykgew0KKwkJaWYg KGMtPnd0cykgew0KKwkJCSsrYy0+c2VxOw0KKwkJCS8qIE1vdmUgb25lIHdhaXRlciB0byB0aGUg b25lcyB0byBiZSB3b2tlbiB1cCwgbGF0ZXIuICovDQorCQkJLS1jLT53dHM7DQorCQkJLyogSWYg dGhpcyB3YXMgdGhlIGxhc3Qgd2FpdGVyLCB1bmxpbmsuICovDQorCQkJaWYgKCFjLT53dHMpIGNv bmQtPl9jeF9jbmQgPSAwOw0KKwkJCWVsc2UgX19jbmRfYWRkcmVmKGMpOw0KKwkJfSBlbHNlIHsN CisJCQljID0gMDsNCisJCX0NCisJfQ0KKwlfX3VubG9jaygmY29uZC0+X2N4X2xvY2spOw0KKw0K KwkvKiBJZiBjIGlzIDAsIHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgd2FpdGVycywgeWV0LCBub3Ro aW5nIHRvIGRvLiAqLw0KKwlpZiAoYykgew0KKwkJLyogRG8gdGhlIGRlbGF5ZWQgd29yay4gKi8N CisJCWFfaW5jKCZjLT50b2spOw0KKwkJLyogTW92ZSB0aGUgdGhyZWFkcyBvZiB0aGUgcHJldmlv dXMgc2VxdWVuY2UgcG9pbnQgdG8gdGhlIHRva2VuIHF1ZXVlLiAqLw0KKwkJaW50IHJldDAgPSBf X3N5c2NhbGwoU1lTX2Z1dGV4LCAmYy0+c2VxLCBGVVRFWF9SRVFVRVVFfFRIUkRfUFJJVkFURSwN CisJCSAgICAgICAgICAgICAgICAgICAgIDAsDQorCQkgICAgICAgICAgICAgICAgICAgICBJTlRf TUFYLCAmYy0+dG9rKTsNCisJCWludCByZXQxID0gX19zeXNjYWxsKFNZU19mdXRleCwgJmMtPnRv aywgRlVURVhfV0FLRXxUSFJEX1BSSVZBVEUsIDEpOw0KKwkJcmV0ID0gKChyZXQwIDwgMCkgfHwg KHJldDEgPCAwKSkgPyB0aHJkX2Vycm9yIDogdGhyZF9zdWNjZXNzOw0KKwkJX19jbmRfdW5yZWYo Yyk7DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9jbmRf dGltZWR3YWl0LmMgYi9zcmMvdGhyZWFkL2NuZF90aW1lZHdhaXQuYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLmVkYzFhZjYNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90 aHJlYWQvY25kX3RpbWVkd2FpdC5jDQpAQCAtMCwwICsxLDczIEBADQorI2luY2x1ZGUgInB0aHJl YWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCBfX3B0aHJlYWRfdGVz dGNhbmNlbCh2b2lkKTsNCitpbnQgX19jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGssIHN0cnVj dCB0aW1lc3BlYyAqdHMpOw0KK2ludCBfX3RocmRfd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGlu dCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYXQpOw0KKw0KK3N0YXRpYyBpbnQgX19jbmRf dGltZWR3YWl0KF9fY25kX3QgKnJlc3RyaWN0IGMsIF9fbXR4X3QgKnJlc3RyaWN0IG11dCwgY29u c3Qgc3RydWN0IHRpbWVzcGVjICpyZXN0cmljdCB0cywgaW50IHNlcSkNCit7DQorCWludCBlID0g RUlOVFIsIHI7DQorCV9fbXR4X3VubG9jayhtdXQpOw0KKw0KKwkvKiBJbiBhIGZpcnN0IHBoYXNl LCB3ZSBpZ25vcmUgYWxsIHdha2V1cHMgaWYgdGhlcmUgaGFzbid0DQorCSAgIGJlZW4gYW55IHNp Z25hbCBvciBicm9hZGNhc3QuIE5vIGxlZ2l0aW1hdGUgd2FrZXVwIHdpbGwgYmUNCisJICAgbG9z dCBieSB0aGF0LCBzaW5jZSB3ZSBjYW4gb25seSBiZSB0YXJnZXQgb2Ygc3VjaCBhIHdha2V1cA0K KwkgICBpZiB3ZSBoYXZlIGJlZW4gcmVzY2hlZHVsZWQgdG8gdGhlIHRvayBxdWV1ZSBvciB0aGUg b25lIG9mDQorCSAgIHRoZSBtdXRleC4gQnV0IHRoaXMgaXMgb25seSB0aGUgY2FzZSB3aGVuIGEg c2lnbmFsIG9yDQorCSAgIGJyb2FkY2FzdCBoYXMgb2NjdXJlZC4gKi8NCisJd2hpbGUgKGMtPnNl cSA9PSBzZXEpIHsNCisJCWUgPSBfX3RocmRfd2FpdCgmYy0+c2VxLCBzZXEsIHRzKTsNCisJCWlm IChlICYmIGUgIT0gRUlOVFIgJiYgZSAhPSBFV09VTERCTE9DSykgZ290byBSRUxPQ0s7DQorCX0N CisNCisJaWYgKGUgPT0gRVRJTUVET1VUKSBnb3RvIFJFTE9DSzsNCisNCisJLyogRnJvbSBoZXJl IG9uIGEgc2lnbmFsIG9yIGJyb2FkY2FzdCBoYXMgaGFwcGVuZWQgYWZ0ZXIgb3VyIHNlcXVlbmNl DQorCSAgIHBvaW50LiAqLw0KKw0KKwlkbyB7DQorCQlpbnQgdG9rZW4gPSBjLT50b2s7DQorCQkv KiBhIHdha2V1cCBoYXMgaGFwcGVuZWQgc2luY2Ugb3VyIGVudHJ5IHRvDQorCQkgICBjbmRfdGlt ZWR3YWl0LCBnZXQgYSB0b2tlbiBpZiBzb21lIGlzDQorCQkgICBhdmFpbGFibGUgKi8NCisJCXdo aWxlICh0b2tlbiA+IDApIHsNCisJCQlpbnQgcHJldiA9IGFfY2FzKCZjLT50b2ssIHRva2VuLCB0 b2tlbiAtIDEpOw0KKwkJCWlmIChwcmV2ID09IHRva2VuKSBnb3RvIFJFTE9DSzsNCisJCQl0b2tl biA9IHByZXY7DQorCQl9DQorDQorCQllID0gX190aHJkX3dhaXQoJmMtPnRvaywgdG9rZW4sIHRz KTsNCisNCisJfSB3aGlsZSAoIWUgfHwgZSA9PSBFSU5UUiB8fCBlID09IEVXT1VMREJMT0NLKTsN CisNCisJaWYgKGUgIT0gRVRJTUVET1VUKSByZXR1cm4gdGhyZF9lcnJvcjsNCisNCitSRUxPQ0s6 DQorCWlmICgocj1fX210eF9sb2NrKG11dCkpKSByZXR1cm4gcjsNCisNCisJc3dpdGNoIChlKSB7 DQorCWNhc2UgMDoNCisJCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorCWNhc2UgRVRJTUVET1VUOg0K KwkJcmV0dXJuIHRocmRfdGltZWRvdXQ7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gdGhyZF9lcnJv cjsNCisJfQ0KK30NCisNCitpbnQgY25kX3RpbWVkd2FpdChjbmRfdCAqcmVzdHJpY3QgY29uZCwg bXR4X3QgKnJlc3RyaWN0IG11dCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXN0cmljdCB0cykN Cit7DQorCWludCByZXQgPSB0aHJkX2Vycm9yOw0KKwlpbnQgc2VxID0gMDsNCisJX19tdHhfdCAq IG0gPSBfX210eF9nZXRyZWYobXV0KTsNCisJaWYgKG0pIHsNCisJCV9fY25kX3QgKiBjID0gX19j bmRfZ2V0cmVmKGNvbmQsIG0sICZzZXEpOw0KKwkJaWYgKGMpIHsNCisJCQlyZXQgPSBfX2NuZF90 aW1lZHdhaXQoYywgbSwgdHMsIHNlcSk7DQorCQkJX19jbmRfdW5yZWYoYyk7DQorCQl9DQorCQlf X210eF91bnJlZihtKTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMv dGhyZWFkL2NuZF93YWl0LmMgYi9zcmMvdGhyZWFkL2NuZF93YWl0LmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwLi45MWU4OWRiDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMv dGhyZWFkL2NuZF93YWl0LmMNCkBAIC0wLDAgKzEsMTAgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5o Pg0KKw0KK2ludCBjbmRfd2FpdChjbmRfdCAqY29uZCwgbXR4X3QgKm11dGV4KQ0KK3sNCisJLyog Q2FsbGluZyBjbmRfdGltZWR3YWl0IHdpdGggYSBudWxsIHBvaW50ZXIgaXMgYW4NCisJICAgZXh0 ZW5zaW9uLiBTdWNoIGEgY2FsbCBpcyBjb252ZW5pZW50LCBoZXJlIHNpbmNlIGl0IGF2b2lkcyB0 bw0KKwkgICByZXBlYXQgdGhlIGNhc2UgYW5hbHlzaXMgdGhhdCBpcyBhbHJlYWR5IGRvbmUgZm9y DQorCSAgIGNuZF90aW1lZHdhaXQuICovDQorCXJldHVybiBjbmRfdGltZWR3YWl0KGNvbmQsIG11 dGV4LCAwKTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5jIGIvc3Jj L3RocmVhZC9tdHhfZGVzdHJveS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uYTFiZWE2NQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5j DQpAQCAtMCwwICsxLDExIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRl IDx0aHJlYWRzLmg+DQorDQordm9pZCAobXR4X2Rlc3Ryb3kpKG10eF90ICptdXQpIHsNCisJLyog Q3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgbG9jayAqLw0KKwlfX2xvY2soJm11dC0+X214 X2xvY2spOw0KKwlfX210eF90ICogcmV0ID0gbXV0LT5fbXhfbXR4Ow0KKwltdXQtPl9teF9tdHgg PSAwOw0KKwlfX3VubG9jaygmbXV0LT5fbXhfbG9jayk7DQorCWlmIChyZXQpIF9fbXR4X3VucmVm KHJldCk7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X2luaXQuYyBiL3NyYy90aHJl YWQvbXR4X2luaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjQwY2M2 YzENCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X2luaXQuYw0KQEAgLTAsMCAr MSwxMiBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5o Pg0KKw0KK2ludCBtdHhfaW5pdChtdHhfdCAqIG0sIGludCB0eXBlKQ0KK3sNCisJKm0gPSAobXR4 X3QpIHsNCisJCS5fbXhfdHlwZSA9ICgodHlwZSZtdHhfcmVjdXJzaXZlKSA/IFBUSFJFQURfTVVU RVhfUkVDVVJTSVZFIDogMCksDQorCX07DQorCV9fbXR4X3QqIHJldCA9IF9fbXR4X2dldHJlZiht KTsNCisJX19tdHhfdW5yZWYocmV0KTsNCisJcmV0dXJuIHJldCA/IHRocmRfc3VjY2VzcyA6IHRo cmRfZXJyb3I7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X2xvY2suYyBiL3NyYy90 aHJlYWQvbXR4X2xvY2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjU5 YmMxYjINCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X2xvY2suYw0KQEAgLTAs MCArMSwxMyBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFk cy5oPg0KKw0KK2ludCBfX210eF9sb2NrKF9fbXR4X3QgKm11dCkNCit7DQorCXJldHVybiBfX210 eF90aW1lZGxvY2sobXV0LCAwKTsNCit9DQorDQoraW50IG10eF9sb2NrKG10eF90ICptdXQpDQor ew0KKwlfX1RIUkRfQUJJX01BUks7DQorCXJldHVybiBtdHhfdGltZWRsb2NrKG11dCwgMCk7DQor fQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X3RpbWVkbG9jay5jIGIvc3JjL3RocmVhZC9t dHhfdGltZWRsb2NrLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5jZjUy NzQ5DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL210eF90aW1lZGxvY2suYw0KQEAg LTAsMCArMSw0NiBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhy ZWFkcy5oPg0KKw0KK2ludCBfX3RocmRfd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2YWws IGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYXQpOw0KKw0KK2ludCBfX210eF90aW1lZGxvY2soX19t dHhfdCAqcmVzdHJpY3QgbXR4LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3RyaWN0IGF0KQ0K K3sNCisJaW50IHIsIHQ7DQorDQorCWlmIChtdHgtPl9tdF90eXAgPT0gUFRIUkVBRF9NVVRFWF9O T1JNQUwgJiYgIWFfY2FzKCZtdHgtPl9tdF9sY2ssIDAsIHRocmRfYnVzeSkpDQorCQlyZXR1cm4g dGhyZF9zdWNjZXNzOw0KKw0KKwlmb3IgKDs7KSB7DQorCQlyPV9fbXR4X3RyeWxvY2sobXR4KTsN CisJCWlmIChyICE9IHRocmRfYnVzeSkgcmV0dXJuIHI7DQorCQllbHNlIHsNCisJCQlpZiAoIShy PW10eC0+X210X2xjaykgfHwgKHImMHg0MDAwMDAwMCkpIGNvbnRpbnVlOw0KKwkJCWFfaW5jKCZt dHgtPl9tdF93dHMpOw0KKwkJCXQgPSByIHwgMHg4MDAwMDAwMDsNCisJCQlhX2NhcygmbXR4LT5f bXRfbGNrLCByLCB0KTsNCisJCQlyID0gX190aHJkX3dhaXQoJm10eC0+X210X2xjaywgdCwgYXQp Ow0KKwkJCWFfZGVjKCZtdHgtPl9tdF93dHMpOw0KKwkJCXN3aXRjaCAocikgew0KKwkJCWNhc2Ug MDoNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBFSU5UUjoNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBF V09VTERCTE9DSzoNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBFVElNRURPVVQ6DQorCQkJCXJldHVy biB0aHJkX3RpbWVkb3V0Ow0KKwkJCWRlZmF1bHQ6DQorCQkJCXJldHVybiB0aHJkX2Vycm9yOw0K KwkJCX0NCisJCX0NCisJfQ0KK30NCisNCitpbnQgbXR4X3RpbWVkbG9jayhtdHhfdCAqcmVzdHJp Y3QgbXV0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3RyaWN0IGF0KQ0KK3sNCisJX19tdHhf dCAqIG0gPSBfX210eF9nZXRyZWYobXV0KTsNCisJaWYgKCFtKSByZXR1cm4gdGhyZF9lcnJvcjsN CisJaW50IHJldCA9IF9fbXR4X3RpbWVkbG9jayhtLCBhdCk7DQorCV9fbXR4X3VucmVmKG0pOw0K KwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL210eF90cnlsb2NrLmMg Yi9zcmMvdGhyZWFkL210eF90cnlsb2NrLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAw MDAwMDAwLi44NTJmYTE1DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL210eF90cnls b2NrLmMNCkBAIC0wLDAgKzEsMzMgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2lu Y2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgX19tdHhfdHJ5bG9jayhfX210eF90ICptdHgpDQor ew0KKwlpbnQgdGlkLCBvbGQsIG93biwgcmV0ID0gMDsNCisJcHRocmVhZF90IHNlbGY7DQorCWlm IChtdHgtPl9tdF90eXAgPT0gUFRIUkVBRF9NVVRFWF9OT1JNQUwpIHsNCisJCXJldHVybiBhX2Nh cygmbXR4LT5fbXRfbGNrLCAwLCB0aHJkX2J1c3kpICYgdGhyZF9idXN5Ow0KKwl9IGVsc2Ugew0K KwkJc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQorCQl0aWQgPSBzZWxmLT50aWQ7DQorCQlvbGQg PSBtdHgtPl9tdF9sY2s7DQorCQlvd24gPSBvbGQgJiAweDdmZmZmZmZmOw0KKwkJaWYgKG93biA9 PSB0aWQpIHsNCisJCQlpZiAoKHVuc2lnbmVkKW10eC0+X210X2NudCA+PSBJTlRfTUFYKSByZXR1 cm4gdGhyZF9lcnJvcjsNCisJCQllbHNlIG10eC0+X210X2NudCsrOw0KKwkJfSBlbHNlIHsNCisJ CQlpZiAoKG93biAmJiAhKG93biAmIDB4NDAwMDAwMDApKSB8fCBhX2NhcygmbXR4LT5fbXRfbGNr LCBvbGQsIHRpZCkhPW9sZCkNCisJCQkJcmV0dXJuIHRocmRfYnVzeTsNCisJCX0NCisJfQ0KKwly ZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCisNCitpbnQgbXR4X3RyeWxvY2sobXR4X3QgKm11dCkN Cit7DQorCV9fbXR4X3QgKiBtID0gX19tdHhfZ2V0cmVmKG11dCk7DQorCWlmICghbSkgcmV0dXJu IHRocmRfZXJyb3I7DQorCWludCByZXQgPSBfX210eF90cnlsb2NrKG0pOw0KKwlfX210eF91bnJl ZihtKTsNCisJcmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9tdHhfdW5s b2NrLmMgYi9zcmMvdGhyZWFkL210eF91bmxvY2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAuLjVjOThiMDcNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4 X3VubG9jay5jDQpAQCAtMCwwICsxLDI4IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0K KyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IF9fbXR4X3VubG9jayhfX210eF90ICptdHgp DQorew0KKwlpbnQgcmV0ID0gdGhyZF9zdWNjZXNzOw0KKwlpZiAoKG10eC0+X210X3R5cCYzKSA9 PSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAmJiBtdHgtPl9tdF9jbnQpIHsNCisJCWlmICgobXR4 LT5fbXRfbGNrJjB4MWZmZmZmZmYpICE9IF9fcHRocmVhZF9zZWxmKCktPnRpZCkNCisJCQlyZXQg PSB0aHJkX2Vycm9yOw0KKwkJLyogX21fY291bnQgaXMgdGhlIGNvdW50IG9mIGFkZGl0aW9uYWwg bG9ja3MsIG5vIG5lZWQgdG8gcmVhbCB1bmxvY2sgKi8NCisJCWVsc2UgLS1tdHgtPl9tdF9jbnQ7 DQorCX0gZWxzZSB7DQorCQlpZiAoYV9zd2FwKCZtdHgtPl9tdF9sY2ssIDApPDAgfHwgbXR4LT5f bXRfd3RzKQ0KKwkJCV9fc3lzY2FsbChTWVNfZnV0ZXgsICZtdHgtPl9tdF9sY2ssIEZVVEVYX1dB S0V8VEhSRF9QUklWQVRFLCAxKTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgbXR4 X3VubG9jayhtdHhfdCAqbXV0KQ0KK3sNCisJaW50IHJldCA9IHRocmRfZXJyb3I7DQorCV9fbXR4 X3QgKiBtID0gX19tdHhfZ2V0cmVmKG11dCk7DQorCWlmIChtKSB7DQorCQlyZXQgPSBfX210eF91 bmxvY2sobSk7DQorCQlfX210eF91bnJlZihtKTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF90aW1lZHdhaXQuYyBiL3NyYy90aHJl YWQvcHRocmVhZF9jb25kX3RpbWVkd2FpdC5jDQppbmRleCA5OWQ2MmNjLi5mNDNjYTllIDEwMDY0 NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCisrKyBiL3NyYy90 aHJlYWQvcHRocmVhZF9jb25kX3RpbWVkd2FpdC5jDQpAQCAtMSw1ICsxLDcgQEANCiAjaW5jbHVk ZSAicHRocmVhZF9pbXBsLmgiDQogDQordm9pZCBfX3B0aHJlYWRfdGVzdGNhbmNlbCh2b2lkKTsN CisNCiBzdHJ1Y3QgY20gew0KIAlwdGhyZWFkX2NvbmRfdCAqYzsNCiAJcHRocmVhZF9tdXRleF90 ICptOw0KQEAgLTQ3LDcgKzQ5LDcgQEAgaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVh ZF9jb25kX3QgKnJlc3RyaWN0IGMsIHB0aHJlYWRfbXV0ZXhfdCAqcmVzdHJpY3QNCiAJaWYgKHRz ICYmIHRzLT50dl9uc2VjID49IDEwMDAwMDAwMDBVTCkNCiAJCXJldHVybiBFSU5WQUw7DQogDQot CXB0aHJlYWRfdGVzdGNhbmNlbCgpOw0KKwlfX3B0aHJlYWRfdGVzdGNhbmNlbCgpOw0KIA0KIAlh X2luYygmYy0+X2Nfd2FpdGVycyk7DQogDQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFk X2NyZWF0ZS5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NyZWF0ZS5jDQppbmRleCBlNzdlNTRhLi5k MTlkNzhiIDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2NyZWF0ZS5jDQorKysgYi9z cmMvdGhyZWFkL3B0aHJlYWRfY3JlYXRlLmMNCkBAIC0zLDk3ICszLDIxIEBADQogI2luY2x1ZGUg InN0ZGlvX2ltcGwuaCINCiAjaW5jbHVkZSAibGliYy5oIg0KICNpbmNsdWRlIDxzeXMvbW1hbi5o Pg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCAqX19tbWFwKHZvaWQgKiwgc2l6ZV90 LCBpbnQsIGludCwgaW50LCBvZmZfdCk7DQoraW50IF9fbXVubWFwKHZvaWQgKiwgc2l6ZV90KTsN CitpbnQgX19tcHJvdGVjdCh2b2lkICosIHNpemVfdCwgaW50KTsNCit2b2lkIF9fdGhyZWFkX2Vu YWJsZSh2b2lkKTsNCitfTm9yZXR1cm4gdm9pZCBfX3B0aHJlYWRfZXhpdCh2b2lkICopOw0KK3Zv aWQgKl9fY29weV90bHModW5zaWduZWQgY2hhciAqKTsNCitleHRlcm4gdm9sYXRpbGUgc2l6ZV90 IF9fcHRocmVhZF90c2Rfc2l6ZTsNCiANCiBzdGF0aWMgdm9pZCBkdW1teV8wKCkNCiB7DQogfQ0K IHdlYWtfYWxpYXMoZHVtbXlfMCwgX19hY3F1aXJlX3B0Yyk7DQogd2Vha19hbGlhcyhkdW1teV8w LCBfX3JlbGVhc2VfcHRjKTsNCi13ZWFrX2FsaWFzKGR1bW15XzAsIF9fcHRocmVhZF90c2RfcnVu X2R0b3JzKTsNCi0NCi1fTm9yZXR1cm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqcmVzdWx0KQ0K LXsNCi0JcHRocmVhZF90IHNlbGYgPSBfX3B0aHJlYWRfc2VsZigpOw0KLQlzaWdzZXRfdCBzZXQ7 DQotDQotCXNlbGYtPnJlc3VsdCA9IHJlc3VsdDsNCi0NCi0Jd2hpbGUgKHNlbGYtPmNhbmNlbGJ1 Zikgew0KLQkJdm9pZCAoKmYpKHZvaWQgKikgPSBzZWxmLT5jYW5jZWxidWYtPl9fZjsNCi0JCXZv aWQgKnggPSBzZWxmLT5jYW5jZWxidWYtPl9feDsNCi0JCXNlbGYtPmNhbmNlbGJ1ZiA9IHNlbGYt PmNhbmNlbGJ1Zi0+X19uZXh0Ow0KLQkJZih4KTsNCi0JfQ0KLQ0KLQlfX3B0aHJlYWRfdHNkX3J1 bl9kdG9ycygpOw0KLQ0KLQlfX2xvY2soc2VsZi0+ZXhpdGxvY2spOw0KLQ0KLQkvKiBNYXJrIHRo aXMgdGhyZWFkIGRlYWQgYmVmb3JlIGRlY3JlbWVudGluZyBjb3VudCAqLw0KLQlfX2xvY2soc2Vs Zi0+a2lsbGxvY2spOw0KLQlzZWxmLT5kZWFkID0gMTsNCi0NCi0JLyogQmxvY2sgYWxsIHNpZ25h bHMgYmVmb3JlIGRlY3JlbWVudGluZyB0aGUgbGl2ZSB0aHJlYWQgY291bnQuDQotCSAqIFRoaXMg aXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBUTFMNCi0J ICogaXMgbm90IHVuZGVyLWFsbG9jYXRlZC9vdmVyLWNvbW1pdHRlZCwgYW5kIHBvc3NpYmx5IGZv ciBvdGhlcg0KLQkgKiByZWFzb25zIGFzIHdlbGwuICovDQotCV9fYmxvY2tfYWxsX3NpZ3MoJnNl dCk7DQotDQotCS8qIFdhaXQgdG8gdW5sb2NrIHRoZSBraWxsIGxvY2ssIHdoaWNoIGdvdmVybnMg ZnVuY3Rpb25zIGxpa2UNCi0JICogcHRocmVhZF9raWxsIHdoaWNoIHRhcmdldCBhIHRocmVhZCBp ZCwgdW50aWwgc2lnbmFscyBoYXZlDQotCSAqIGJlZW4gYmxvY2tlZC4gVGhpcyBwcmVjbHVkZXMg b2JzZXJ2YXRpb24gb2YgdGhlIHRocmVhZCBpZA0KLQkgKiBhcyBhIGxpdmUgdGhyZWFkICh3aXRo IGFwcGxpY2F0aW9uIGNvZGUgcnVubmluZyBpbiBpdCkgYWZ0ZXINCi0JICogdGhlIHRocmVhZCB3 YXMgcmVwb3J0ZWQgZGVhZCBieSBFU1JDSCBiZWluZyByZXR1cm5lZC4gKi8NCi0JX191bmxvY2so c2VsZi0+a2lsbGxvY2spOw0KLQ0KLQkvKiBJdCdzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdo ZXRoZXIgdGhpcyBpcyAidGhlIGxhc3QgdGhyZWFkIg0KLQkgKiB1bnRpbCBwZXJmb3JtaW5nIHRo ZSBhdG9taWMgZGVjcmVtZW50LCBzaW5jZSBtdWx0aXBsZSB0aHJlYWRzDQotCSAqIGNvdWxkIGV4 aXQgYXQgdGhlIHNhbWUgdGltZS4gRm9yIHRoZSBsYXN0IHRocmVhZCwgcmV2ZXJ0IHRoZQ0KLQkg KiBkZWNyZW1lbnQgYW5kIHVuYmxvY2sgc2lnbmFscyB0byBnaXZlIHRoZSBhdGV4aXQgaGFuZGxl cnMgYW5kDQotCSAqIHN0ZGlvIGNsZWFudXAgY29kZSBhIGNvbnNpc3RlbnQgc3RhdGUuICovDQot CWlmIChhX2ZldGNoX2FkZCgmbGliYy50aHJlYWRzX21pbnVzXzEsIC0xKT09MCkgew0KLQkJbGli Yy50aHJlYWRzX21pbnVzXzEgPSAwOw0KLQkJX19yZXN0b3JlX3NpZ3MoJnNldCk7DQotCQlleGl0 KDApOw0KLQl9DQotDQotCWlmIChzZWxmLT5sb2NhbGUgIT0gJmxpYmMuZ2xvYmFsX2xvY2FsZSkg ew0KLQkJYV9kZWMoJmxpYmMudXNlbG9jYWxlX2NudCk7DQotCQlpZiAoc2VsZi0+bG9jYWxlLT5j dHlwZV91dGY4KQ0KLQkJCWFfZGVjKCZsaWJjLmJ5dGVsb2NhbGVfY250X21pbnVzXzEpOw0KLQl9 DQotDQotCWlmIChzZWxmLT5kZXRhY2hlZCAmJiBzZWxmLT5tYXBfYmFzZSkgew0KLQkJLyogRGV0 YWNoZWQgdGhyZWFkcyBtdXN0IGF2b2lkIHRoZSBrZXJuZWwgY2xlYXJfY2hpbGRfdGlkDQotCQkg KiBmZWF0dXJlLCBzaW5jZSB0aGUgdmlydHVhbCBhZGRyZXNzIHdpbGwgaGF2ZSBiZWVuDQotCQkg KiB1bm1hcHBlZCBhbmQgcG9zc2libHkgYWxyZWFkeSByZXVzZWQgYnkgYSBuZXcgbWFwcGluZw0K LQkJICogYXQgdGhlIHRpbWUgdGhlIGtlcm5lbCB3b3VsZCBwZXJmb3JtIHRoZSB3cml0ZS4gSW4N Ci0JCSAqIHRoZSBjYXNlIG9mIHRocmVhZHMgdGhhdCBzdGFydGVkIG91dCBkZXRhY2hlZCwgdGhl DQotCQkgKiBpbml0aWFsIGNsb25lIGZsYWdzIGFyZSBjb3JyZWN0LCBidXQgaWYgdGhlIHRocmVh ZCB3YXMNCi0JCSAqIGRldGFjaGVkIGxhdGVyICg9PSAyKSwgd2UgbmVlZCB0byBjbGVhciBpdCBo ZXJlLiAqLw0KLQkJaWYgKHNlbGYtPmRldGFjaGVkID09IDIpIF9fc3lzY2FsbChTWVNfc2V0X3Rp ZF9hZGRyZXNzLCAwKTsNCi0NCi0JCS8qIFRoZSBmb2xsb3dpbmcgY2FsbCB1bm1hcHMgdGhlIHRo cmVhZCdzIHN0YWNrIG1hcHBpbmcNCi0JCSAqIGFuZCB0aGVuIGV4aXRzIHdpdGhvdXQgdG91Y2hp bmcgdGhlIHN0YWNrLiAqLw0KLQkJX191bm1hcHNlbGYoc2VsZi0+bWFwX2Jhc2UsIHNlbGYtPm1h cF9zaXplKTsNCi0JfQ0KLQ0KLQlmb3IgKDs7KSBfX3N5c2NhbGwoU1lTX2V4aXQsIDApOw0KLX0N Ci0NCi12b2lkIF9fZG9fY2xlYW51cF9wdXNoKHN0cnVjdCBfX3B0Y2IgKmNiKQ0KLXsNCi0JaWYg KCFsaWJjLmhhc190aHJlYWRfcG9pbnRlcikgcmV0dXJuOw0KLQlzdHJ1Y3QgcHRocmVhZCAqc2Vs ZiA9IF9fcHRocmVhZF9zZWxmKCk7DQotCWNiLT5fX25leHQgPSBzZWxmLT5jYW5jZWxidWY7DQot CXNlbGYtPmNhbmNlbGJ1ZiA9IGNiOw0KLX0NCi0NCi12b2lkIF9fZG9fY2xlYW51cF9wb3Aoc3Ry dWN0IF9fcHRjYiAqY2IpDQotew0KLQlpZiAoIWxpYmMuaGFzX3RocmVhZF9wb2ludGVyKSByZXR1 cm47DQotCV9fcHRocmVhZF9zZWxmKCktPmNhbmNlbGJ1ZiA9IGNiLT5fX25leHQ7DQotfQ0KIA0K IHN0YXRpYyBpbnQgc3RhcnQodm9pZCAqcCkNCiB7DQpAQCAtMTE1LDI4ICszOSwxMCBAQCBzdGF0 aWMgaW50IHN0YXJ0KHZvaWQgKnApDQogDQogI2RlZmluZSBST1VORCh4KSAoKCh4KStQQUdFX1NJ WkUtMSkmLVBBR0VfU0laRSkNCiANCi0vKiBwdGhyZWFkX2tleV9jcmVhdGUuYyBvdmVycmlkZXMg dGhpcyAqLw0KLXN0YXRpYyB2b2xhdGlsZSBzaXplX3QgZHVtbXkgPSAwOw0KLXdlYWtfYWxpYXMo ZHVtbXksIF9fcHRocmVhZF90c2Rfc2l6ZSk7DQotc3RhdGljIHZvaWQgKmR1bW15X3RzZFsxXSA9 IHsgMCB9Ow0KLXdlYWtfYWxpYXMoZHVtbXlfdHNkLCBfX3B0aHJlYWRfdHNkX21haW4pOw0KLQ0K LXN0YXRpYyBGSUxFICp2b2xhdGlsZSBkdW1teV9maWxlID0gMDsNCi13ZWFrX2FsaWFzKGR1bW15 X2ZpbGUsIF9fc3RkaW5fdXNlZCk7DQotd2Vha19hbGlhcyhkdW1teV9maWxlLCBfX3N0ZG91dF91 c2VkKTsNCi13ZWFrX2FsaWFzKGR1bW15X2ZpbGUsIF9fc3RkZXJyX3VzZWQpOw0KLQ0KLXN0YXRp YyB2b2lkIGluaXRfZmlsZV9sb2NrKEZJTEUgKmYpDQotew0KLQlpZiAoZiAmJiBmLT5sb2NrPDAp IGYtPmxvY2sgPSAwOw0KLX0NCi0NCi12b2lkICpfX2NvcHlfdGxzKHVuc2lnbmVkIGNoYXIgKik7 DQotDQogaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqcmVzdHJpY3QgcmVzLCBjb25zdCBw dGhyZWFkX2F0dHJfdCAqcmVzdHJpY3QgYXR0cnAsIHZvaWQgKigqZW50cnkpKHZvaWQgKiksIHZv aWQgKnJlc3RyaWN0IGFyZykNCiB7DQogCWludCByZXQ7DQotCXNpemVfdCBzaXplLCBndWFyZDsN CisJc2l6ZV90IHNpemUsIGd1YXJkID0gMDsNCiAJc3RydWN0IHB0aHJlYWQgKnNlbGYsICpuZXc7 DQogCXVuc2lnbmVkIGNoYXIgKm1hcCA9IDAsICpzdGFjayA9IDAsICp0c2QgPSAwLCAqc3RhY2tf bGltaXQ7DQogCXVuc2lnbmVkIGZsYWdzID0gQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJ TEVTIHwgQ0xPTkVfU0lHSEFORA0KQEAgLTE0NywxNiArNTMsNyBAQCBpbnQgcHRocmVhZF9jcmVh dGUocHRocmVhZF90ICpyZXN0cmljdCByZXMsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICpyZXN0cmlj dCBhdHRycA0KIA0KIAlpZiAoIWxpYmMuY2FuX2RvX3RocmVhZHMpIHJldHVybiBFTk9TWVM7DQog CXNlbGYgPSBfX3B0aHJlYWRfc2VsZigpOw0KLQlpZiAoIWxpYmMudGhyZWFkZWQpIHsNCi0JCWZv ciAoRklMRSAqZj1saWJjLm9mbF9oZWFkOyBmOyBmPWYtPm5leHQpDQotCQkJaW5pdF9maWxlX2xv Y2soZik7DQotCQlpbml0X2ZpbGVfbG9jayhfX3N0ZGluX3VzZWQpOw0KLQkJaW5pdF9maWxlX2xv Y2soX19zdGRvdXRfdXNlZCk7DQotCQlpbml0X2ZpbGVfbG9jayhfX3N0ZGVycl91c2VkKTsNCi0J CV9fc3lzY2FsbChTWVNfcnRfc2lncHJvY21hc2ssIFNJR19VTkJMT0NLLCBTSUdQVF9TRVQsIDAs IF9OU0lHLzgpOw0KLQkJc2VsZi0+dHNkID0gKHZvaWQgKiopX19wdGhyZWFkX3RzZF9tYWluOw0K LQkJbGliYy50aHJlYWRlZCA9IDE7DQotCX0NCisJaWYgKCFsaWJjLnRocmVhZGVkKSBfX3RocmVh ZF9lbmFibGUoKTsNCiAJaWYgKGF0dHJwKSBhdHRyID0gKmF0dHJwOw0KIA0KIAlfX2FjcXVpcmVf cHRjKCk7DQpAQCAtMTg0LDE0ICs4MSwxNCBAQCBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90 ICpyZXN0cmljdCByZXMsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICpyZXN0cmljdCBhdHRycA0KIA0K IAlpZiAoIXRzZCkgew0KIAkJaWYgKGd1YXJkKSB7DQotCQkJbWFwID0gbW1hcCgwLCBzaXplLCBQ Uk9UX05PTkUsIE1BUF9QUklWQVRFfE1BUF9BTk9OLCAtMSwgMCk7DQorCQkJbWFwID0gX19tbWFw KDAsIHNpemUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAwKTsNCiAJCQlp ZiAobWFwID09IE1BUF9GQUlMRUQpIGdvdG8gZmFpbDsNCi0JCQlpZiAobXByb3RlY3QobWFwK2d1 YXJkLCBzaXplLWd1YXJkLCBQUk9UX1JFQUR8UFJPVF9XUklURSkpIHsNCi0JCQkJbXVubWFwKG1h cCwgc2l6ZSk7DQorCQkJaWYgKF9fbXByb3RlY3QobWFwK2d1YXJkLCBzaXplLWd1YXJkLCBQUk9U X1JFQUR8UFJPVF9XUklURSkpIHsNCisJCQkJX19tdW5tYXAobWFwLCBzaXplKTsNCiAJCQkJZ290 byBmYWlsOw0KIAkJCX0NCiAJCX0gZWxzZSB7DQotCQkJbWFwID0gbW1hcCgwLCBzaXplLCBQUk9U X1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAwKTsNCisJCQltYXAg PSBfX21tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9B Tk9OLCAtMSwgMCk7DQogCQkJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSBnb3RvIGZhaWw7DQogCQl9 DQogCQl0c2QgPSBtYXAgKyBzaXplIC0gX19wdGhyZWFkX3RzZF9zaXplOw0KQEAgLTIzMyw3ICsx MzAsNyBAQCBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICpyZXN0cmljdCByZXMsIGNvbnN0 IHB0aHJlYWRfYXR0cl90ICpyZXN0cmljdCBhdHRycA0KIA0KIAlpZiAocmV0IDwgMCkgew0KIAkJ YV9kZWMoJmxpYmMudGhyZWFkc19taW51c18xKTsNCi0JCWlmIChtYXApIG11bm1hcChtYXAsIHNp emUpOw0KKwkJaWYgKG1hcCkgX19tdW5tYXAobWFwLCBzaXplKTsNCiAJCXJldHVybiBFQUdBSU47 DQogCX0NCiANCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfZXhpdC5jIGIvc3JjL3Ro cmVhZC9wdGhyZWFkX2V4aXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LmM2ZjRlNjANCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9leGl0LmMN CkBAIC0wLDAgKzEsMTI4IEBADQorI2RlZmluZSBfR05VX1NPVVJDRQ0KKyNpbmNsdWRlICJwdGhy ZWFkX2ltcGwuaCINCisjaW5jbHVkZSAic3RkaW9faW1wbC5oIg0KKyNpbmNsdWRlICJsaWJjLmgi DQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitzdGF0 aWMgdm9pZCBkdW1teV8wKCkNCit7DQorfQ0KK3dlYWtfYWxpYXMoZHVtbXlfMCwgX19wdGhyZWFk X3RzZF9ydW5fZHRvcnMpOw0KK3dlYWtfYWxpYXMoZHVtbXlfMCwgX190c3NfcnVuX2R0b3JzKTsN CisNCitfTm9yZXR1cm4gdm9pZCBfX3B0aHJlYWRfZXhpdCh2b2lkICpyZXN1bHQpDQorew0KKwlw dGhyZWFkX3Qgc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQorCXNpZ3NldF90IHNldDsNCisNCisJ c2VsZi0+cmVzdWx0ID0gcmVzdWx0Ow0KKw0KKwl3aGlsZSAoc2VsZi0+Y2FuY2VsYnVmKSB7DQor CQl2b2lkICgqZikodm9pZCAqKSA9IHNlbGYtPmNhbmNlbGJ1Zi0+X19mOw0KKwkJdm9pZCAqeCA9 IHNlbGYtPmNhbmNlbGJ1Zi0+X194Ow0KKwkJc2VsZi0+Y2FuY2VsYnVmID0gc2VsZi0+Y2FuY2Vs YnVmLT5fX25leHQ7DQorCQlmKHgpOw0KKwl9DQorDQorCV9fcHRocmVhZF90c2RfcnVuX2R0b3Jz KCk7DQorDQorCV9fdHNzX3J1bl9kdG9ycygpOw0KKw0KKwlfX2xvY2soc2VsZi0+ZXhpdGxvY2sp Ow0KKw0KKwkvKiBNYXJrIHRoaXMgdGhyZWFkIGRlYWQgYmVmb3JlIGRlY3JlbWVudGluZyBjb3Vu dCAqLw0KKwlfX2xvY2soc2VsZi0+a2lsbGxvY2spOw0KKwlzZWxmLT5kZWFkID0gMTsNCisNCisJ LyogQmxvY2sgYWxsIHNpZ25hbHMgYmVmb3JlIGRlY3JlbWVudGluZyB0aGUgbGl2ZSB0aHJlYWQg Y291bnQuDQorCSAqIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IGR5bmFtaWNhbGx5 IGFsbG9jYXRlZCBUTFMNCisJICogaXMgbm90IHVuZGVyLWFsbG9jYXRlZC9vdmVyLWNvbW1pdHRl ZCwgYW5kIHBvc3NpYmx5IGZvciBvdGhlcg0KKwkgKiByZWFzb25zIGFzIHdlbGwuICovDQorCV9f YmxvY2tfYWxsX3NpZ3MoJnNldCk7DQorDQorCS8qIFdhaXQgdG8gdW5sb2NrIHRoZSBraWxsIGxv Y2ssIHdoaWNoIGdvdmVybnMgZnVuY3Rpb25zIGxpa2UNCisJICogcHRocmVhZF9raWxsIHdoaWNo IHRhcmdldCBhIHRocmVhZCBpZCwgdW50aWwgc2lnbmFscyBoYXZlDQorCSAqIGJlZW4gYmxvY2tl ZC4gVGhpcyBwcmVjbHVkZXMgb2JzZXJ2YXRpb24gb2YgdGhlIHRocmVhZCBpZA0KKwkgKiBhcyBh IGxpdmUgdGhyZWFkICh3aXRoIGFwcGxpY2F0aW9uIGNvZGUgcnVubmluZyBpbiBpdCkgYWZ0ZXIN CisJICogdGhlIHRocmVhZCB3YXMgcmVwb3J0ZWQgZGVhZCBieSBFU1JDSCBiZWluZyByZXR1cm5l ZC4gKi8NCisJX191bmxvY2soc2VsZi0+a2lsbGxvY2spOw0KKw0KKwkvKiBJdCdzIGltcG9zc2li bGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyAidGhlIGxhc3QgdGhyZWFkIg0KKwkgKiB1 bnRpbCBwZXJmb3JtaW5nIHRoZSBhdG9taWMgZGVjcmVtZW50LCBzaW5jZSBtdWx0aXBsZSB0aHJl YWRzDQorCSAqIGNvdWxkIGV4aXQgYXQgdGhlIHNhbWUgdGltZS4gRm9yIHRoZSBsYXN0IHRocmVh ZCwgcmV2ZXJ0IHRoZQ0KKwkgKiBkZWNyZW1lbnQgYW5kIHVuYmxvY2sgc2lnbmFscyB0byBnaXZl IHRoZSBhdGV4aXQgaGFuZGxlcnMgYW5kDQorCSAqIHN0ZGlvIGNsZWFudXAgY29kZSBhIGNvbnNp c3RlbnQgc3RhdGUuICovDQorCWlmIChhX2ZldGNoX2FkZCgmbGliYy50aHJlYWRzX21pbnVzXzEs IC0xKT09MCkgew0KKwkJbGliYy50aHJlYWRzX21pbnVzXzEgPSAwOw0KKwkJX19yZXN0b3JlX3Np Z3MoJnNldCk7DQorCQlleGl0KDApOw0KKwl9DQorDQorCWlmIChzZWxmLT5sb2NhbGUgIT0gJmxp YmMuZ2xvYmFsX2xvY2FsZSkgew0KKwkJYV9kZWMoJmxpYmMudXNlbG9jYWxlX2NudCk7DQorCQlp ZiAoc2VsZi0+bG9jYWxlLT5jdHlwZV91dGY4KQ0KKwkJCWFfZGVjKCZsaWJjLmJ5dGVsb2NhbGVf Y250X21pbnVzXzEpOw0KKwl9DQorDQorCWlmIChzZWxmLT5kZXRhY2hlZCAmJiBzZWxmLT5tYXBf YmFzZSkgew0KKwkJLyogRGV0YWNoZWQgdGhyZWFkcyBtdXN0IGF2b2lkIHRoZSBrZXJuZWwgY2xl YXJfY2hpbGRfdGlkDQorCQkgKiBmZWF0dXJlLCBzaW5jZSB0aGUgdmlydHVhbCBhZGRyZXNzIHdp bGwgaGF2ZSBiZWVuDQorCQkgKiB1bm1hcHBlZCBhbmQgcG9zc2libHkgYWxyZWFkeSByZXVzZWQg YnkgYSBuZXcgbWFwcGluZw0KKwkJICogYXQgdGhlIHRpbWUgdGhlIGtlcm5lbCB3b3VsZCBwZXJm b3JtIHRoZSB3cml0ZS4gSW4NCisJCSAqIHRoZSBjYXNlIG9mIHRocmVhZHMgdGhhdCBzdGFydGVk IG91dCBkZXRhY2hlZCwgdGhlDQorCQkgKiBpbml0aWFsIGNsb25lIGZsYWdzIGFyZSBjb3JyZWN0 LCBidXQgaWYgdGhlIHRocmVhZCB3YXMNCisJCSAqIGRldGFjaGVkIGxhdGVyICg9PSAyKSwgd2Ug bmVlZCB0byBjbGVhciBpdCBoZXJlLiAqLw0KKwkJaWYgKHNlbGYtPmRldGFjaGVkID09IDIpIF9f c3lzY2FsbChTWVNfc2V0X3RpZF9hZGRyZXNzLCAwKTsNCisNCisJCS8qIFRoZSBmb2xsb3dpbmcg Y2FsbCB1bm1hcHMgdGhlIHRocmVhZCdzIHN0YWNrIG1hcHBpbmcNCisJCSAqIGFuZCB0aGVuIGV4 aXRzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHN0YWNrLiAqLw0KKwkJX191bm1hcHNlbGYoc2VsZi0+ bWFwX2Jhc2UsIHNlbGYtPm1hcF9zaXplKTsNCisJfQ0KKw0KKwlmb3IgKDs7KSBfX3N5c2NhbGwo U1lTX2V4aXQsIDApOw0KK30NCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9leGl0LCBwdGhyZWFkX2V4 aXQpOw0KKw0KK3ZvaWQgX19kb19jbGVhbnVwX3B1c2goc3RydWN0IF9fcHRjYiAqY2IpDQorew0K KwlpZiAoIWxpYmMuaGFzX3RocmVhZF9wb2ludGVyKSByZXR1cm47DQorCXN0cnVjdCBwdGhyZWFk ICpzZWxmID0gX19wdGhyZWFkX3NlbGYoKTsNCisJY2ItPl9fbmV4dCA9IHNlbGYtPmNhbmNlbGJ1 ZjsNCisJc2VsZi0+Y2FuY2VsYnVmID0gY2I7DQorfQ0KKw0KK3ZvaWQgX19kb19jbGVhbnVwX3Bv cChzdHJ1Y3QgX19wdGNiICpjYikNCit7DQorCWlmICghbGliYy5oYXNfdGhyZWFkX3BvaW50ZXIp IHJldHVybjsNCisJX19wdGhyZWFkX3NlbGYoKS0+Y2FuY2VsYnVmID0gY2ItPl9fbmV4dDsNCit9 DQorDQorLyogcHRocmVhZF9rZXlfY3JlYXRlLmMgb3ZlcnJpZGVzIHRoaXMgKi8NCitzdGF0aWMg dm9sYXRpbGUgc2l6ZV90IGR1bW15ID0gMDsNCit3ZWFrX2FsaWFzKGR1bW15LCBfX3B0aHJlYWRf dHNkX3NpemUpOw0KK3N0YXRpYyB2b2lkICpkdW1teV90c2RbMV0gPSB7IDAgfTsNCit3ZWFrX2Fs aWFzKGR1bW15X3RzZCwgX19wdGhyZWFkX3RzZF9tYWluKTsNCisNCitzdGF0aWMgRklMRSAqdm9s YXRpbGUgZHVtbXlfZmlsZSA9IDA7DQord2Vha19hbGlhcyhkdW1teV9maWxlLCBfX3N0ZGluX3Vz ZWQpOw0KK3dlYWtfYWxpYXMoZHVtbXlfZmlsZSwgX19zdGRvdXRfdXNlZCk7DQord2Vha19hbGlh cyhkdW1teV9maWxlLCBfX3N0ZGVycl91c2VkKTsNCisNCitzdGF0aWMgdm9pZCBpbml0X2ZpbGVf bG9jayhGSUxFICpmKQ0KK3sNCisJaWYgKGYgJiYgZi0+bG9jazwwKSBmLT5sb2NrID0gMDsNCit9 DQorDQordm9pZCBfX3RocmVhZF9lbmFibGUodm9pZCkNCit7DQorCWZvciAoRklMRSAqZj1saWJj Lm9mbF9oZWFkOyBmOyBmPWYtPm5leHQpDQorCQlpbml0X2ZpbGVfbG9jayhmKTsNCisJaW5pdF9m aWxlX2xvY2soX19zdGRpbl91c2VkKTsNCisJaW5pdF9maWxlX2xvY2soX19zdGRvdXRfdXNlZCk7 DQorCWluaXRfZmlsZV9sb2NrKF9fc3RkZXJyX3VzZWQpOw0KKwlfX3N5c2NhbGwoU1lTX3J0X3Np Z3Byb2NtYXNrLCBTSUdfVU5CTE9DSywgU0lHUFRfU0VULCAwLCBfTlNJRy84KTsNCisJX19wdGhy ZWFkX3NlbGYoKS0+dHNkID0gKHZvaWQgKiopX19wdGhyZWFkX3RzZF9tYWluOw0KKwlsaWJjLnRo cmVhZGVkID0gMTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNh bmNlbHN0YXRlLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUuYw0KaW5kZXgg MDYwYmNkYy4uMjI2ODIxNyAxMDA2NDQNCi0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF9zZXRjYW5j ZWxzdGF0ZS5jDQorKysgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUuYw0KQEAg LTEsNiArMSw2IEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KLWludCBwdGhyZWFk X3NldGNhbmNlbHN0YXRlKGludCBuZXcsIGludCAqb2xkKQ0KK2ludCBfX3B0aHJlYWRfc2V0Y2Fu Y2Vsc3RhdGUoaW50IG5ldywgaW50ICpvbGQpDQogew0KIAlpZiAobmV3ID4gMVUpIHJldHVybiBF SU5WQUw7DQogCWlmICghbGliYy5oYXNfdGhyZWFkX3BvaW50ZXIpIHJldHVybiBFTk9TWVM7DQpA QCAtOSwzICs5LDUgQEAgaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50IG5ldywgaW50ICpv bGQpDQogCXNlbGYtPmNhbmNlbGRpc2FibGUgPSBuZXc7DQogCXJldHVybiAwOw0KIH0NCisNCit3 ZWFrX2FsaWFzKF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSwgcHRocmVhZF9zZXRjYW5jZWxzdGF0 ZSk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNhbmNlbHR5cGUuYyBiL3Ny Yy90aHJlYWQvcHRocmVhZF9zZXRjYW5jZWx0eXBlLmMNCmluZGV4IGJmMGEzZjMuLmQ0OTNjMWIg MTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2VsdHlwZS5jDQorKysgYi9z cmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2VsdHlwZS5jDQpAQCAtMSwxMSArMSwxMyBAQA0KICNp bmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiANCit2b2lkIF9fcHRocmVhZF90ZXN0Y2FuY2VsKHZv aWQpOw0KKw0KIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUoaW50IG5ldywgaW50ICpvbGQpDQog ew0KIAlzdHJ1Y3QgcHRocmVhZCAqc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQogCWlmIChuZXcg PiAxVSkgcmV0dXJuIEVJTlZBTDsNCiAJaWYgKG9sZCkgKm9sZCA9IHNlbGYtPmNhbmNlbGFzeW5j Ow0KIAlzZWxmLT5jYW5jZWxhc3luYyA9IG5ldzsNCi0JaWYgKG5ldykgcHRocmVhZF90ZXN0Y2Fu Y2VsKCk7DQorCWlmIChuZXcpIF9fcHRocmVhZF90ZXN0Y2FuY2VsKCk7DQogCXJldHVybiAwOw0K IH0NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfdGVzdGNhbmNlbC5jIGIvc3JjL3Ro cmVhZC9wdGhyZWFkX3Rlc3RjYW5jZWwuYw0KaW5kZXggYmE1ZjdjNi4uZWU0OGU2ZCAxMDA2NDQN Ci0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF90ZXN0Y2FuY2VsLmMNCisrKyBiL3NyYy90aHJlYWQv cHRocmVhZF90ZXN0Y2FuY2VsLmMNCkBAIC03LDcgKzcsOSBAQCBzdGF0aWMgdm9pZCBkdW1teSgp DQogDQogd2Vha19hbGlhcyhkdW1teSwgX190ZXN0Y2FuY2VsKTsNCiANCi12b2lkIHB0aHJlYWRf dGVzdGNhbmNlbCgpDQordm9pZCBfX3B0aHJlYWRfdGVzdGNhbmNlbCgpDQogew0KIAlfX3Rlc3Rj YW5jZWwoKTsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRfdGVzdGNhbmNlbCwgcHRocmVh ZF90ZXN0Y2FuY2VsKTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3RocmRfY3JlYXRlLmMgYi9z cmMvdGhyZWFkL3RocmRfY3JlYXRlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwLi5mNzJmOTkyDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3RocmRfY3JlYXRl LmMNCkBAIC0wLDAgKzEsOTggQEANCisjZGVmaW5lIF9HTlVfU09VUkNFDQorI2luY2x1ZGUgInB0 aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlICJzdGRpb19pbXBsLmgiDQorI2luY2x1ZGUgImxpYmMu aCINCisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3Zv aWQgKl9fbW1hcCh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpOw0KK2ludCBf X211bm1hcCh2b2lkICosIHNpemVfdCk7DQoraW50IF9fbXByb3RlY3Qodm9pZCAqLCBzaXplX3Qs IGludCk7DQordm9pZCBfX3RocmVhZF9lbmFibGUodm9pZCk7DQorX05vcmV0dXJuIHZvaWQgX19w dGhyZWFkX2V4aXQodm9pZCAqKTsNCit2b2lkICpfX2NvcHlfdGxzKHVuc2lnbmVkIGNoYXIgKik7 DQorZXh0ZXJuIHZvbGF0aWxlIHNpemVfdCBfX3B0aHJlYWRfdHNkX3NpemU7DQorDQorX05vcmV0 dXJuIHZvaWQgdGhyZF9leGl0KGludCByZXN1bHQpIHsNCisJX19wdGhyZWFkX2V4aXQoKHZvaWQq KShpbnRwdHJfdClyZXN1bHQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBkdW1teV8wKCkNCit7DQor fQ0KK3dlYWtfYWxpYXMoZHVtbXlfMCwgX19hY3F1aXJlX3B0Yyk7DQord2Vha19hbGlhcyhkdW1t eV8wLCBfX3JlbGVhc2VfcHRjKTsNCisNCitzdGF0aWMgaW50IHN0YXJ0KHZvaWQgKnApDQorew0K Kwl0aHJkX3Qgc2VsZiA9IHA7DQorCWludCAoKnN0YXJ0KSh2b2lkKikgPSAoaW50KCopKHZvaWQq KSkgc2VsZi0+c3RhcnQ7DQorCXRocmRfZXhpdChzdGFydChzZWxmLT5zdGFydF9hcmcpKTsNCisJ cmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUgUk9VTkQoeCkgKCgoeCkrUEFHRV9TSVpFLTEpJi1Q QUdFX1NJWkUpDQorDQoraW50IHRocmRfY3JlYXRlKHRocmRfdCAqcmVzLCB0aHJkX3N0YXJ0X3Qg ZW50cnksIHZvaWQgKmFyZykNCit7DQorCWludCByZXQgPSAtRU5PTUVNOw0KKwlzaXplX3QgZ3Vh cmQgPSBST1VORChERUZBVUxUX0dVQVJEX1NJWkUpOw0KKwlzaXplX3Qgc2l6ZSA9IGd1YXJkICsg Uk9VTkQoREVGQVVMVF9TVEFDS19TSVpFICsgbGliYy50bHNfc2l6ZSArICBfX3B0aHJlYWRfdHNk X3NpemUpOw0KKwlzdHJ1Y3QgcHRocmVhZCAqc2VsZiwgKm5ldzsNCisJdW5zaWduZWQgY2hhciAq bWFwLCAqc3RhY2ssICp0c2QsICpzdGFja19saW1pdDsNCisJdW5zaWduZWQgZmxhZ3MgPSBDTE9O RV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EDQorCQl8IENMT05F X1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfCBDTE9ORV9TRVRUTFMNCisJCXwgQ0xPTkVfUEFSRU5U X1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHwgQ0xPTkVfREVUQUNIRUQ7DQorDQorCWlm ICghbGliYy5jYW5fZG9fdGhyZWFkcykgcmV0dXJuIHRocmRfZXJyb3I7DQorCXNlbGYgPSBfX3B0 aHJlYWRfc2VsZigpOw0KKwlpZiAoIWxpYmMudGhyZWFkZWQpIF9fdGhyZWFkX2VuYWJsZSgpOw0K Kw0KKwlfX2FjcXVpcmVfcHRjKCk7DQorDQorCWlmIChndWFyZCkgew0KKwkJbWFwID0gX19tbWFw KDAsIHNpemUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAwKTsNCisJCWlm IChtYXAgPT0gTUFQX0ZBSUxFRCkgZ290byBDTEVBTlVQOw0KKwkJaWYgKF9fbXByb3RlY3QobWFw K2d1YXJkLCBzaXplLWd1YXJkLCBQUk9UX1JFQUR8UFJPVF9XUklURSkpIHsNCisJCQlfX211bm1h cChtYXAsIHNpemUpOw0KKwkJCWdvdG8gQ0xFQU5VUDsNCisJCX0NCisJfSBlbHNlIHsNCisJCW1h cCA9IF9fbW1hcCgwLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQ X0FOT04sIC0xLCAwKTsNCisJCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgZ290byBDTEVBTlVQOw0K Kwl9DQorCXRzZCA9IG1hcCArIHNpemUgLSBfX3B0aHJlYWRfdHNkX3NpemU7DQorCXN0YWNrID0g dHNkIC0gbGliYy50bHNfc2l6ZTsNCisJc3RhY2tfbGltaXQgPSBtYXAgKyBndWFyZDsNCisNCisJ bmV3ID0gX19jb3B5X3Rscyh0c2QgLSBsaWJjLnRsc19zaXplKTsNCisJbmV3LT5tYXBfYmFzZSA9 IG1hcDsNCisJbmV3LT5tYXBfc2l6ZSA9IHNpemU7DQorCW5ldy0+c3RhY2sgPSBzdGFjazsNCisJ bmV3LT5zdGFja19zaXplID0gc3RhY2sgLSBzdGFja19saW1pdDsNCisJbmV3LT5zdGFydCA9ICh2 b2lkICooKikodm9pZCopKWVudHJ5Ow0KKwluZXctPnN0YXJ0X2FyZyA9IGFyZzsNCisJbmV3LT5z ZWxmID0gbmV3Ow0KKwluZXctPnRzZCA9ICh2b2lkICopdHNkOw0KKwluZXctPmxvY2FsZSA9ICZs aWJjLmdsb2JhbF9sb2NhbGU7DQorCW5ldy0+dW5ibG9ja19jYW5jZWwgPSBzZWxmLT5jYW5jZWw7 DQorCW5ldy0+Y2FuYXJ5ID0gc2VsZi0+Y2FuYXJ5Ow0KKw0KKwlhX2luYygmbGliYy50aHJlYWRz X21pbnVzXzEpOw0KKwlyZXQgPSBfX2Nsb25lKHN0YXJ0LCBzdGFjaywgZmxhZ3MsIG5ldywgJm5l dy0+dGlkLCBUUF9BREoobmV3KSwgJm5ldy0+dGlkKTsNCisNCisgQ0xFQU5VUDoNCisJX19yZWxl YXNlX3B0YygpOw0KKw0KKwlpZiAocmV0ID4gMCkgew0KKyAgICAgICAgICAqcmVzID0gbmV3Ow0K KyAgICAgICAgICByZXQgPSB0aHJkX3N1Y2Nlc3M7DQorICAgICAgICB9IGVsc2UgaWYgKHJldCA9 PSAtRU5PTUVNKSB7DQorICAgICAgICAgIHJldCA9IHRocmRfbm9tZW07DQorICAgICAgICB9IGVs c2Ugew0KKyAgICAgICAgICBhX2RlYygmbGliYy50aHJlYWRzX21pbnVzXzEpOw0KKyAgICAgICAg ICBpZiAobWFwKSBfX211bm1hcChtYXAsIHNpemUpOw0KKyAgICAgICAgICByZXQgPSB0aHJkX2Vy cm9yOw0KKwl9DQorICAgICAgICByZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhy ZWFkL3RocmRfY3VycmVudC5jIGIvc3JjL3RocmVhZC90aHJkX2N1cnJlbnQuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjE3Mjg1MzUNCi0tLSAvZGV2L251bGwNCisrKyBi L3NyYy90aHJlYWQvdGhyZF9jdXJyZW50LmMNCkBAIC0wLDAgKzEsMTEgQEANCisjaW5jbHVkZSAi cHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCisvKiBOb3QgYWxsIGFy Y2ggaGF2ZSBfX3B0aHJlYWRfc2VsZiBhcyBhIHN5bWJvbC4gT24gc29tZSB0aGlzIHJlc3VsdHMN CisgICBpbiBzb21lIG1hZ2ljLiBTbyB0aGlzICJjYWxsIiB0byBfX3B0aHJlYWRfc2VsZiBpcyBu b3QgbmVjZXNzYXJ5IGENCisgICB0YWlsIGNhbGwuIEluIHBhcnRpY3VsYXIsIG90aGVyIHRoYW4g dGhlIGFwcGVhcmFuY2UsIHRocmRfY3VycmVudA0KKyAgIGNhbiBub3QgYmUgaW1wbGVtZW50ZWQg YXMgYSB3ZWFrIHN5bWJvbC4gKi8NCitwdGhyZWFkX3QgdGhyZF9jdXJyZW50KCkNCit7DQorCXJl dHVybiBfX3B0aHJlYWRfc2VsZigpOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3RocmRf ZGV0YWNoLmMgYi9zcmMvdGhyZWFkL3RocmRfZGV0YWNoLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi5kZDI5MzA4DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFk L3RocmRfZGV0YWNoLmMNCkBAIC0wLDAgKzEsMTcgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBs LmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisNCitp bnQgdGhyZF9kZXRhY2godGhyZF90IHQpDQorew0KKwkvKiBDYW5ub3QgZGV0YWNoIGEgdGhyZWFk IHRoYXQncyBhbHJlYWR5IGV4aXRpbmcgKi8NCisJaWYgKGFfc3dhcCh0LT5leGl0bG9jaywgMSkp ew0KKwkJaW50IHRtcDsNCisJCXdoaWxlICgodG1wID0gdC0+dGlkKSkgX190aW1lZHdhaXQoJnQt PnRpZCwgdG1wLCAwLCAwLCAwLCAwLCAwKTsNCisJCWlmICh0LT5tYXBfYmFzZSkgbXVubWFwKHQt Pm1hcF9iYXNlLCB0LT5tYXBfc2l6ZSk7DQorCX0gZWxzZSB7DQorCQl0LT5kZXRhY2hlZCA9IDI7 DQorCQlfX3VubG9jayh0LT5leGl0bG9jayk7DQorCX0NCisJcmV0dXJuIHRocmRfc3VjY2VzczsN Cit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90aHJkX2VxdWFsLmMgYi9zcmMvdGhyZWFkL3Ro cmRfZXF1YWwuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmFjNDlhNDQN Ci0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvdGhyZF9lcXVhbC5jDQpAQCAtMCwwICsx LDYgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCAodGhyZF9lcXVhbCkodGhyZF90 IGEsIHRocmRfdCBiKQ0KK3sNCisJcmV0dXJuIGE9PWI7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90 aHJlYWQvdGhyZF9qb2luLmMgYi9zcmMvdGhyZWFkL3RocmRfam9pbi5jDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMDQ0Njk3NQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3Jj L3RocmVhZC90aHJkX2pvaW4uYw0KQEAgLTAsMCArMSwxNCBAQA0KKyNpbmNsdWRlICJwdGhyZWFk X2ltcGwuaCINCisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0K Kw0KKy8qIEMxMSB0aHJlYWRzIGNhbm5vdCBiZSBjYW5jZWxlZCwgc28gdGhlcmUgaXMgbm8gbmVl ZCBmb3IgYQ0KKyAgIGNhbmNlbGF0aW9uIGZ1bmN0aW9uIHBvaW50ZXIsIGhlcmUuICovDQoraW50 IHRocmRfam9pbih0aHJkX3QgdCwgaW50ICpyZXMpDQorew0KKwlpbnQgdG1wOw0KKwl3aGlsZSAo KHRtcCA9IHQtPnRpZCkpIF9fdGltZWR3YWl0KCZ0LT50aWQsIHRtcCwgMCwgMCwgMCwgMCwgMCk7 DQorCWlmIChyZXMpICpyZXMgPSAoaW50KShpbnRwdHJfdCl0LT5yZXN1bHQ7DQorCWlmICh0LT5t YXBfYmFzZSkgbXVubWFwKHQtPm1hcF9iYXNlLCB0LT5tYXBfc2l6ZSk7DQorCXJldHVybiB0aHJk X3N1Y2Nlc3M7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdHNzX2NyZWF0ZS5jIGIvc3Jj L3RocmVhZC90c3NfY3JlYXRlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li4yMzM4ZDU5DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3Rzc19jcmVhdGUuYw0K QEAgLTAsMCArMSw5NyBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8 dGhyZWFkcy5oPg0KKw0KKy8qIGZ1dHVyZSB2ZXJzaW9uIG9mIEMgbWlnaHQgcHJlc2NyaWJlIGEg bWluaW11bSBudW1iZXIgb2YgdHNzICovDQorI2RlZmluZSBfX1RTU19NQVhfTUlOIDY0DQorDQor I2lmbmRlZiBUU1NfTUFYDQorIyBkZWZpbmUgVFNTX01BWCBfX1RTU19NQVhfTUlODQorI2VuZGlm DQorDQorI2RlZmluZSBfX0xPV19CSVQoWCkgKChYKzBVKSAmIC0oWCswVSkpDQorDQorI2RlZmlu ZSBTVFJJTkdJRllfKFgpICNYDQorI2RlZmluZSBTVFJJTkdJRlkoWCkgU1RSSU5HSUZZXyhYKQ0K KyNkZWZpbmUgV0FSTl9fKFgpIF9QcmFnbWEoI1gpDQorI2RlZmluZSBXQVJOXyhYKSBXQVJOX18o bWVzc2FnZSAoWCkpDQorI2RlZmluZSBXQVJOKFgpIFdBUk5fKFgpDQorDQorI2lmIChUU1NfTUFY KSA8IF9fVFNTX01BWF9NSU4NCitXQVJOKCJUU1NfTUFYICIgU1RSSU5HSUZZKFRTU19NQVgpICIg cmVwbGFjZWQgYnkgbWluaW1hbCB2YWx1ZSAiIFNUUklOR0lGWShfX1RTU19NQVhfTUlOKSkNCisj IHVuZGVmIFRTU19NQVgNCisjIGRlZmluZSBUU1NfTUFYIF9fVFNTX01BWF9NSU4NCisjZW5kaWYN CisNCisjaWYgKFRTU19NQVgpICE9IF9fTE9XX0JJVChUU1NfTUFYKQ0KKyMgZXJyb3IgVFNTX01B WCBtdXN0IGJlIGEgcG93ZXIgb2YgMg0KKyNlbmRpZg0KKw0KK2VudW0geyB0c3NfbWF4ID0gKFRT U19NQVgpLCB9Ow0KKw0KK3N0YXRpYyB0c3NfZHRvcl90IGR0b3JzW3Rzc19tYXhdOw0KKw0KK3N0 YXRpYyB2b2lkIG5vZHRvcih2b2lkICpkdW1teSkNCit7DQorfQ0KKw0KKy8qIFRoaXMgc2hvdWxk IHVzZSBfVGhyZWFkX2xvY2FsIHdoaWNoIG11c3QgZXhpc3QgZm9yIEMxMSB0aHJlYWRzLg0KKyAg IFNpbmNlIG11c2wgbWlnaHQgZ2V0IGNvbXBpbGVkIHdpdGggcHJlLUMxMSBvcHRpb25zIHdlIHVz ZSBnY2Mncw0KKyAgIF9fdGhyZWFkIGV4dGVuc2lvbiwgaW5zdGVhZC4gKi8NCitzdGF0aWMgX190 aHJlYWQgdm9pZCAqIGRhdGFbdHNzX21heF07DQorLyogVGhyZWFkIGxvY2FsIGRhdGEgaXMgYWNj b3VudGVkIGZvciB3aXRoIGEgdXNhZ2UgY291bnRlciAqLw0KK3N0YXRpYyBfX3RocmVhZCB0c3Nf dCB1c2VkOw0KKw0KK2ludCB0c3NfY3JlYXRlKHRzc190ICp0c3MsIHRzc19kdG9yX3QgZHRvcikN Cit7DQorCXVuc2lnbmVkIHN0YXJ0ID0gKHVpbnRwdHJfdCkmdHNzIC8gMTYgJSB0c3NfbWF4Ow0K KwlpZiAoIWR0b3IpIGR0b3IgPSBub2R0b3I7DQorDQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkg PCB0c3NfbWF4OyArK2kpIHsNCisJCXVuc2lnbmVkIGogPSAoc3RhcnQraSkldHNzX21heDsNCisJ CWlmICghYV9jYXNfcChkdG9ycytqLCAwLCAodm9pZCAqKWR0b3IpKSB7DQorCQkJKnRzcyA9IGo7 DQorCQkJcmV0dXJuIHRocmRfc3VjY2VzczsNCisJCX0NCisJfQ0KKwkqdHNzID0gLTE7DQorCXJl dHVybiB0aHJkX2Vycm9yOw0KK30NCisNCit2b2lkIHRzc19kZWxldGUodHNzX3QgaykNCit7DQor CS8qIHRzc19kZWxldGUgaGFzIG5vIGZhaWx1cmUgcGF0aCwgc28gY2hlY2sgdGhlIGFyZ3VtZW50 LiAqLw0KKwlpZiAoayA8IHRzc19tYXgpIGR0b3JzW2tdID0gMDsNCit9DQorDQoraW50IHRzc19z ZXQodHNzX3Qgaywgdm9pZCAqeCkNCit7DQorCWlmIChrID49IHRzc19tYXggfHwgIWR0b3JzW2td KSByZXR1cm4gdGhyZF9lcnJvcjsNCisJaWYgKGRhdGFba10gIT0geCkgew0KKwkJLyogdHNzX3Nl dCBjYW4gYmUgdXNlZCB0byBhZGQgb3IgcmVtb3ZlIGEgdHNzLiBjb21wdXRlDQorCQkgICB0aGUg ZGlmZmVyZW5jZSBpbiB1c2FnZS4gKi8NCisJCXVzZWQgKz0gKCEheCAtICEhZGF0YVtrXSk7DQor CQlkYXRhW2tdID0geDsNCisJfQ0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCisNCit2b2lk ICogdHNzX2dldCh0c3NfdCBrKSB7DQorCXJldHVybiBkdG9yc1trXSA/IGRhdGFba10gOiAwOw0K K30NCisNCisNCit2b2lkIF9fdHNzX3J1bl9kdG9ycyh2b2lkKQ0KK3sNCisJZm9yICh1bnNpZ25l ZCBqPTA7IHVzZWQgJiYgajxUU1NfRFRPUl9JVEVSQVRJT05TOyBqKyspIHsNCisJCWZvciAodW5z aWduZWQgaT0wOyBpPHRzc19tYXg7IGkrKykgew0KKwkJCWlmIChkYXRhW2ldKSB7DQorCQkJCXZv aWQgKnRtcCA9IGRhdGFbaV07DQorCQkJCWRhdGFbaV0gPSAwOw0KKwkJCQktLXVzZWQ7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbG90IGkgbWlnaHQgaGF2ZSBiZWVuIGRl bGV0ZWQsIGNoZWNrDQorCQkJCWlmIChkdG9yc1tpXSkgZHRvcnNbaV0odG1wKTsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCWlmICghdXNlZCkgcmV0dXJuOw0KKwkJCX0NCisJCX0N CisJfQ0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGltZS90aHJkX3NsZWVwLmMgYi9zcmMvdGltZS90 aHJkX3NsZWVwLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi42NTcwYjBj DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGltZS90aHJkX3NsZWVwLmMNCkBAIC0wLDAgKzEs MzEgQEANCisjaW5jbHVkZSA8dGltZS5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRl ICJzeXNjYWxsLmgiDQorI2luY2x1ZGUgImxpYmMuaCINCisjaW5jbHVkZSAidGhyZWFkcy5oIg0K Kw0KKy8qIFJvdWdobHkgX19zeXNjYWxsIGFscmVhZHkgcmV0dXJucyB0aGUgcmlnaHQgdGhpbmc6 IDAgaWYgYWxsIHdlbnQNCisgICB3ZWxsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaW5kaWNhdGlvbiwg b3RoZXJ3aXNlLiAqLw0KK2ludCB0aHJkX3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVx LCBzdHJ1Y3QgdGltZXNwZWMgKnJlbSkNCit7DQorICBpbnQgcmV0ID0gX19zeXNjYWxsKFNZU19u YW5vc2xlZXAsIHJlcSwgcmVtKTsNCisgIC8vIGNvbXBpbGUgdGltZSBjb21wYXJpc29uLCBjb25z dGFudCBwcm9wYWdhdGVkDQorICBpZiAoRUlOVFIgIT0gMSkgew0KKyAgICBzd2l0Y2ggKHJldCkg ew0KKyAgICBjYXNlIDA6IHJldHVybiAwOw0KKyAgICAgIC8qIGVycm9yIGRlc2NyaWJlZCBieSBQ T1NJWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgIC8qIEVJ TlRSICBUaGUgbmFub3NsZWVwKCkgZnVuY3Rpb24gd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFs LiAqLw0KKyAgICAgIC8qIFRoZSBDMTEgd29yZGluZyBpczogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgIC8qIC0xIGlmIGl0IGhhcyBiZWVuIGludGVy cnVwdGVkIGJ5IGEgc2lnbmFsICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBjYXNlIC1FSU5U UjogIHJldHVybiAtMTsNCisgICAgICAvKiBlcnJvciBkZXNjcmliZWQgYnkgUE9TSVggKi8NCisg ICAgY2FzZSAtRUlOVkFMOiByZXR1cm4gLTI7DQorICAgICAgLyogZGVzY3JpYmVkIGZvciBsaW51 eCAqLw0KKyAgICBjYXNlIC1FRkFVTFQ6IHJldHVybiAtMzsNCisgICAgICAvKiBObyBvdGhlciBl cnJvciByZXR1cm5zIGFyZSBzcGVjaWZpZWQuICovDQorICAgIGRlZmF1bHQ6IHJldHVybiBJTlRf TUlOOw0KKyAgICB9DQorICB9DQorICAvLyBwb3RlbnRpYWxseSBhIHRhaWwgY2FsbA0KKyAgcmV0 dXJuIHJldDsNCit9DQo= --=-oHnoPTcutwLqfukkEZfW-- --=-gxEolNiXJ/xp+5q5gbFq Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEUEABECAAYFAlPtIlQACgkQD9PoadrVN+LieQCeLjFcvAxq2l09bCEnVYncVMfS PKMAmLZpPA8K6Osy0VN6zGkg7KKUA8k= =fK5/ -----END PGP SIGNATURE----- --=-gxEolNiXJ/xp+5q5gbFq--