From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261934AbULVJR5 (ORCPT ); Wed, 22 Dec 2004 04:17:57 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261951AbULVJR4 (ORCPT ); Wed, 22 Dec 2004 04:17:56 -0500 Received: from dea.vocord.ru ([217.67.177.50]:29627 "EHLO vocord.com") by vger.kernel.org with ESMTP id S261934AbULVJRB (ORCPT ); Wed, 22 Dec 2004 04:17:01 -0500 Subject: Kernel conector. Reincarnation #1. From: Evgeniy Polyakov Reply-To: johnpol@2ka.mipt.ru To: Greg KH Cc: linux-kernel@vger.kernel.org In-Reply-To: <20041221204101.GA9831@kroah.com> References: <1101286481.18807.66.camel@uganda> <1101287606.18807.75.camel@uganda> <20041124222857.GG3584@kroah.com> <1102504677.3363.55.camel@uganda> <20041221204101.GA9831@kroah.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-TizxkV5T9H8MXodLTgHL" Organization: MIPT Date: Wed, 22 Dec 2004 12:21:12 +0300 Message-Id: <1103707272.3432.6.camel@uganda> Mime-Version: 1.0 X-Mailer: Evolution 2.0.2 (2.0.2-3) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-1.4 (vocord.com [192.168.0.1]); Wed, 22 Dec 2004 09:16:39 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --=-TizxkV5T9H8MXodLTgHL Content-Type: multipart/mixed; boundary="=-TaaTUlrfsac4uE81fCIK" --=-TaaTUlrfsac4uE81fCIK Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hello, Greg, developers. This is first public resending of connector patch after several private discussions. Noone objected before, so if there are no complaints, Greg, please apply. Signed-off-by: Evgeniy Polyakov --=20 Evgeniy Polyakov Crash is better than data corruption -- Arthur Grabowski --=-TaaTUlrfsac4uE81fCIK Content-Disposition: attachment; filename=connector.patch Content-Type: text/x-patch; name=connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 ZGlmZiAtTnJ1IC90bXAvZW1wdHkvS2NvbmZpZyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3Iv S2NvbmZpZw0KLS0tIC90bXAvZW1wdHkvS2NvbmZpZwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAw MDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnCTIwMDQt MDktMjYgMDA6MTI6NTcuMDAwMDAwMDAwICswNDAwDQpAQCAtMCwwICsxLDEzIEBADQorbWVudSAi Q29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlciINCisN Citjb25maWcgQ09OTkVDVE9SDQorCXRyaXN0YXRlICJDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJz cGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyIg0KKwlkZXBlbmRzIG9uIE5FVA0KKwktLS1oZWxw LS0tDQorCSAgVGhpcyBpcyB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgY29ubmVj dG9yIHdvcmtpbmcgb24gdG9wDQorCSAgb2YgdGhlIG5ldGxpbmsgc29ja2V0IHByb3RvY29sLg0K Kw0KKwkgIENvbm5lY3RvciBzdXBwb3J0IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAg SWYgc28sIHRoZSBtb2R1bGUNCisJICB3aWxsIGJlIGNhbGxlZCBjb25uZWN0b3Iua28uDQorDQor ZW5kbWVudQ0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvTWFrZWZpbGUgbGludXgtMi42L2RyaXZlcnMv Y29ubmVjdG9yL01ha2VmaWxlDQotLS0gL3RtcC9lbXB0eS9NYWtlZmlsZQkxOTcwLTAxLTAxIDAz OjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9N YWtlZmlsZQkyMDA0LTA5LTI2IDAwOjEyOjU3LjAwMDAwMDAwMCArMDQwMA0KQEAgLTAsMCArMSwy IEBADQorb2JqLSQoQ09ORklHX0NPTk5FQ1RPUikJCSs9IGNuLm8NCitjbi1vYmpzCQk6PSBjbl9x dWV1ZS5vIGNvbm5lY3Rvci5vDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jbl9xdWV1ZS5jIGxpbnV4 LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jDQotLS0gL3RtcC9lbXB0eS9jbl9xdWV1 ZS5jCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2Ry aXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMJMjAwNC0wOS0yNiAyMTo1MDoxMi4wMDAwMDAwMDAg KzA0MDANCkBAIC0wLDAgKzEsMjE5IEBADQorLyoNCisgKiAJY25fcXVldWUuYw0KKyAqIA0KKyAq IDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1 Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz MzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKyAqDQorICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisjaW5jbHVkZSA8 bGludXgvc3BpbmxvY2suaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxs aW51eC9za2J1ZmYuaD4NCisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPg0KKw0KKyNpbmNsdWRl ICJjbl9xdWV1ZS5oIg0KKw0KK3N0YXRpYyB2b2lkIGNuX3F1ZXVlX3dyYXBwZXIodm9pZCAqZGF0 YSkNCit7DQorCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxID0gKHN0cnVjdCBjbl9jYWxs YmFja19lbnRyeSAqKWRhdGE7DQorDQorCWF0b21pY19pbmMoJmNicS0+Y2ItPnJlZmNudCk7DQor CWNicS0+Y2ItPmNhbGxiYWNrKGNicS0+Y2ItPnByaXYpOw0KKwlhdG9taWNfZGVjKCZjYnEtPmNi LT5yZWZjbnQpOw0KKw0KKwljYnEtPmRlc3RydWN0X2RhdGEoY2JxLT5kZGF0YSk7DQorfQ0KKw0K K3N0YXRpYyBzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNr X2VudHJ5KHN0cnVjdA0KKwkJCQkJCQkgICAgICAgY25fY2FsbGJhY2sgKmNiKQ0KK3sNCisJc3Ry dWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnE7DQorDQorCWNicSA9IGttYWxsb2Moc2l6ZW9mKCpj YnEpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFjYnEpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFp bGVkIHRvIGNyZWF0ZSBuZXcgY2FsbGJhY2sgcXVldWUuXG4iKTsNCisJCXJldHVybiBOVUxMOw0K Kwl9DQorDQorCW1lbXNldChjYnEsIDAsIHNpemVvZigqY2JxKSk7DQorDQorCWNicS0+Y2IgPSBj YjsNCisNCisJSU5JVF9XT1JLKCZjYnEtPndvcmssICZjbl9xdWV1ZV93cmFwcGVyLCBjYnEpOw0K Kw0KKwlyZXR1cm4gY2JxOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9xdWV1ZV9mcmVlX2NhbGxi YWNrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxKQ0KK3sNCisJY2FuY2VsX2RlbGF5ZWRf d29yaygmY2JxLT53b3JrKTsNCisNCisJd2hpbGUgKGF0b21pY19yZWFkKCZjYnEtPmNiLT5yZWZj bnQpKSB7DQorCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJl ZTogcmVmY250PSVkLlxuIiwNCisJCSAgICAgICBjYnEtPnBkZXYtPm5hbWUsIGF0b21pY19yZWFk KCZjYnEtPmNiLT5yZWZjbnQpKTsNCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBU SUJMRSk7DQorCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsNCisNCisJCWlmIChjdXJyZW50LT5mbGFn cyAmIFBGX0ZSRUVaRSkNCisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsNCisNCisJCWlmIChz aWduYWxfcGVuZGluZyhjdXJyZW50KSkNCisJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOw0KKwl9 DQorDQorCWtmcmVlKGNicSk7DQorfQ0KKw0KK2ludCBjbl9jYl9lcXVhbChzdHJ1Y3QgY2JfaWQg KmkxLCBzdHJ1Y3QgY2JfaWQgKmkyKQ0KK3sNCisJcmV0dXJuICgoaTEtPmlkeCA9PSBpMi0+aWR4 KSAmJiAoaTEtPnZhbCA9PSBpMi0+dmFsKSk7DQorfQ0KKw0KK2ludCBjbl9xdWV1ZV9hZGRfY2Fs bGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQ0K K3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpuLCAqX19jYnE7DQorCWludCBm b3VuZCA9IDA7DQorDQorCWNicSA9IGNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNrX2VudHJ5KGNiKTsN CisJaWYgKCFjYnEpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJYXRvbWljX2luYygmZGV2LT5y ZWZjbnQpOw0KKwljYnEtPnBkZXYgPSBkZXY7DQorDQorCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9s b2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAmZGV2LT5xdWV1ZV9s aXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlk LCAmY2ItPmlkKSkgew0KKwkJCWZvdW5kID0gMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKwlp ZiAoIWZvdW5kKSB7DQorCQlhdG9taWNfc2V0KCZjYnEtPmNiLT5yZWZjbnQsIDEpOw0KKwkJbGlz dF9hZGRfdGFpbCgmY2JxLT5jYWxsYmFja19lbnRyeSwgJmRldi0+cXVldWVfbGlzdCk7DQorCX0N CisJc3Bpbl91bmxvY2soJmRldi0+cXVldWVfbG9jayk7DQorDQorCWlmIChmb3VuZCkgew0KKwkJ YXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOw0KKwkJYXRvbWljX3NldCgmY2JxLT5jYi0+cmVmY250 LCAwKTsNCisJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soY2JxKTsNCisJCXJldHVybiAtRUlOVkFM Ow0KKwl9DQorDQorCWNicS0+bmxzID0gZGV2LT5ubHM7DQorCWNicS0+c2VxID0gMDsNCisJLy9j YnEtPmdyb3VwID0gKytkZXYtPm5ldGxpbmtfZ3JvdXBzOw0KKwljYnEtPmdyb3VwID0gY2JxLT5j Yi0+aWQuaWR4Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBjbl9xdWV1ZV9kZWxfY2Fs bGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQ0K K3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPSBOVUxMLCAqbjsNCisJaW50IGZv dW5kID0gMDsNCisNCisJc3Bpbl9sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOw0KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkg ew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZjYnEtPmNiLT5pZCwgJmNiLT5pZCkpIHsNCisJCQlsaXN0 X2RlbCgmY2JxLT5jYWxsYmFja19lbnRyeSk7DQorCQkJZm91bmQgPSAxOw0KKwkJCWJyZWFrOw0K KwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwlpZiAoZm91 bmQpIHsNCisJCWF0b21pY19kZWMoJmNicS0+Y2ItPnJlZmNudCk7DQorCQljbl9xdWV1ZV9mcmVl X2NhbGxiYWNrKGNicSk7DQorCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7DQorCX0NCit9DQor DQorc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNoYXIgKm5hbWUsIHN0 cnVjdCBzb2NrICpubHMpDQorew0KKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXY7DQorDQorCWRl diA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkZXYpIHsNCisJ CXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY3RlIG5ldyBzdHJ1Y3QgY25fcXVl dWVfZGV2LlxuIiwNCisJCSAgICAgICBuYW1lKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQor CW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7DQorDQorCXNucHJpbnRmKGRldi0+bmFtZSwg c2l6ZW9mKGRldi0+bmFtZSksICIlcyIsIG5hbWUpOw0KKw0KKwlhdG9taWNfc2V0KCZkZXYtPnJl ZmNudCwgMCk7DQorCUlOSVRfTElTVF9IRUFEKCZkZXYtPnF1ZXVlX2xpc3QpOw0KKwlzcGluX2xv Y2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsNCisNCisJZGV2LT5ubHMgPSBubHM7DQorCWRldi0+ bmV0bGlua19ncm91cHMgPSAwOw0KKw0KKwlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1 ZShkZXYtPm5hbWUpOw0KKwlpZiAoIWRldi0+Y25fcXVldWUpIHsNCisJCXByaW50ayhLRVJOX0VS UiAiRmFpbGVkIHRvIGNyZWF0ZSAlcyBxdWV1ZS5cbiIsIGRldi0+bmFtZSk7DQorCQlrZnJlZShk ZXYpOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJcmV0dXJuIGRldjsNCit9DQorDQordm9p ZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpDQorew0KKwlzdHJ1 Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgKm47DQorDQorCWZsdXNoX3dvcmtxdWV1ZShkZXYt PmNuX3F1ZXVlKTsNCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7DQorDQorCXNw aW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNi cSwgbiwgJmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCWxpc3RfZGVsKCZj YnEtPmNhbGxiYWNrX2VudHJ5KTsNCisJCWF0b21pY19kZWMoJmNicS0+Y2ItPnJlZmNudCk7DQor CX0NCisJc3Bpbl91bmxvY2soJmRldi0+cXVldWVfbG9jayk7DQorDQorCXdoaWxlIChhdG9taWNf cmVhZCgmZGV2LT5yZWZjbnQpKSB7DQorCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nIGZvciAl cyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwNCisJCSAgICAgICBkZXYtPm5hbWUsIGF0 b21pY19yZWFkKCZkZXYtPnJlZmNudCkpOw0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRF UlJVUFRJQkxFKTsNCisJCXNjaGVkdWxlX3RpbWVvdXQoSFopOw0KKw0KKwkJaWYgKGN1cnJlbnQt PmZsYWdzICYgUEZfRlJFRVpFKQ0KKwkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOw0KKw0KKwkJ aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KKwkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7 DQorCX0NCisNCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsNCisJa2ZyZWUoZGV2KTsN CisJZGV2ID0gTlVMTDsNCit9DQorDQorRVhQT1JUX1NZTUJPTChjbl9xdWV1ZV9hZGRfY2FsbGJh Y2spOw0KK0VYUE9SVF9TWU1CT0woY25fcXVldWVfZGVsX2NhbGxiYWNrKTsNCitFWFBPUlRfU1lN Qk9MKGNuX3F1ZXVlX2FsbG9jX2Rldik7DQorRVhQT1JUX1NZTUJPTChjbl9xdWV1ZV9mcmVlX2Rl dik7DQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jbl9xdWV1ZS5oIGxpbnV4LTIuNi9kcml2ZXJzL2Nv bm5lY3Rvci9jbl9xdWV1ZS5oDQotLS0gL3RtcC9lbXB0eS9jbl9xdWV1ZS5oCTE5NzAtMDEtMDEg MDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvY29ubmVjdG9y L2NuX3F1ZXVlLmgJMjAwNC0wOS0yNiAwMDoxNDoxNi4wMDAwMDAwMDAgKzA0MDANCkBAIC0wLDAg KzEsOTAgQEANCisvKg0KKyAqIAljbl9xdWV1ZS5oDQorICogDQorICogMjAwNCBDb3B5cmlnaHQg KGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCisgKiANCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICog dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBG b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBDQorICovDQorDQorI2lmbmRlZiBfX0NOX1FVRVVFX0gNCisjZGVmaW5l IF9fQ05fUVVFVUVfSA0KKw0KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4NCisNCitzdHJ1Y3QgY2Jf aWQNCit7DQorCV9fdTMyCQkJaWR4Ow0KKwlfX3UzMgkJCXZhbDsNCit9Ow0KKw0KKyNpZmRlZiBf X0tFUk5FTF9fDQorDQorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4NCisNCisjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisNCisjZGVmaW5lIENO X0NCUV9OQU1FTEVOCQkzMg0KKw0KK3N0cnVjdCBjbl9xdWV1ZV9kZXYNCit7DQorCWF0b21pY190 CQlyZWZjbnQ7DQorCXVuc2lnbmVkIGNoYXIJCW5hbWVbQ05fQ0JRX05BTUVMRU5dOw0KKw0KKwlz dHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqY25fcXVldWU7DQorCQ0KKwlzdHJ1Y3QgbGlzdF9oZWFk IAlxdWV1ZV9saXN0Ow0KKwlzcGlubG9ja190IAkJcXVldWVfbG9jazsNCisNCisJaW50CQkJbmV0 bGlua19ncm91cHM7DQorCXN0cnVjdCBzb2NrCQkqbmxzOw0KK307DQorDQorc3RydWN0IGNuX2Nh bGxiYWNrDQorew0KKwl1bnNpZ25lZCBjaGFyCQluYW1lW0NOX0NCUV9OQU1FTEVOXTsNCisJDQor CXN0cnVjdCBjYl9pZAkJaWQ7DQorCXZvaWQJCQkoKiBjYWxsYmFjaykodm9pZCAqKTsNCisJdm9p ZAkJCSpwcml2Ow0KKwkNCisJYXRvbWljX3QJCXJlZmNudDsNCit9Ow0KKw0KK3N0cnVjdCBjbl9j YWxsYmFja19lbnRyeQ0KK3sNCisJc3RydWN0IGxpc3RfaGVhZAljYWxsYmFja19lbnRyeTsNCisJ c3RydWN0IGNuX2NhbGxiYWNrCSpjYjsNCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7DQorCXN0 cnVjdCBjbl9xdWV1ZV9kZXYJKnBkZXY7DQorCQ0KKwl2b2lkCQkJKCogZGVzdHJ1Y3RfZGF0YSko dm9pZCAqKTsNCisJdm9pZAkJCSpkZGF0YTsNCisNCisJaW50CQkJc2VxLCBncm91cDsNCisJc3Ry dWN0IHNvY2sJCSpubHM7DQorfTsNCisNCitpbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVj dCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYik7DQordm9pZCBjbl9x dWV1ZV9kZWxfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2Fs bGJhY2sgKmNiKTsNCisNCitzdHJ1Y3QgY25fcXVldWVfZGV2ICpjbl9xdWV1ZV9hbGxvY19kZXYo Y2hhciAqbmFtZSwgc3RydWN0IHNvY2sgKik7DQordm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1 Y3QgY25fcXVldWVfZGV2ICpkZXYpOw0KKw0KK2ludCBjbl9jYl9lcXVhbChzdHJ1Y3QgY2JfaWQg Kiwgc3RydWN0IGNiX2lkICopOw0KKw0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQorI2VuZGlm IC8qIF9fQ05fUVVFVUVfSCAqLw0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvY29ubmVjdG9yLmMgbGlu dXgtMi42L2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jDQotLS0gL3RtcC9lbXB0eS9jb25u ZWN0b3IuYwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIu Ni9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwkyMDA0LTA5LTI2IDIxOjUyOjAyLjAwMDAw MDAwMCArMDQwMA0KQEAgLTAsMCArMSw0OTggQEANCisvKg0KKyAqIAljb25uZWN0b3IuYw0KKyAq IA0KKyAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5t aXB0LnJ1Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkN CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+DQorI2luY2x1ZGUgPGxp bnV4L25ldGxpbmsuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisNCisjaW5j bHVkZSA8bmV0L3NvY2suaD4NCisNCisjaW5jbHVkZSAiLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5o Ig0KKyNpbmNsdWRlICIuLi9jb25uZWN0b3IvY25fcXVldWUuaCINCisNCitNT0RVTEVfTElDRU5T RSgiR1BMIik7DQorTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2Eu bWlwdC5ydT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgdXNlcnNwYWNlIDwtPiBr ZXJuZWxzcGFjZSBjb25uZWN0b3IuIik7DQorDQorc3RhdGljIGludCB1bml0ID0gTkVUTElOS19O RkxPRzsNCitzdGF0aWMgdTMyIGNuX2lkeCA9IC0xOw0KK3N0YXRpYyB1MzIgY25fdmFsID0gLTE7 DQorDQorbW9kdWxlX3BhcmFtKHVuaXQsIGludCwgMCk7DQorbW9kdWxlX3BhcmFtKGNuX2lkeCwg dWludCwgMCk7DQorbW9kdWxlX3BhcmFtKGNuX3ZhbCwgdWludCwgMCk7DQorDQorc3BpbmxvY2tf dCBub3RpZnlfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCitzdGF0aWMgTElTVF9IRUFEKG5v dGlmeV9saXN0KTsNCisNCitzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2Ow0KKw0KKy8qDQorICog bXNnLT5zZXEgYW5kIG1zZy0+YWNrIGFyZSB1c2VkIHRvIGRldGVybWluZSBtZXNzYWdlIGdlbmVh bG9neS4NCisgKiBXaGVuIHNvbWVvbmUgc2VuZHMgbWVzc2FnZSBpdCBwdXRzIHRoZXJlIGxvY2Fs bHkgdW5pcXVlIHNlcXVlbmNlIA0KKyAqIGFuZCByYW5kb20gYWNrbm93bGVkZ2UgbnVtYmVycy4N CisgKiBTZXF1ZW5jZSBudW1iZXIgbWF5IGJlIGNvcGllZCBpbnRvIG5sbXNnaGRyLT5ubG1zZ19z ZXEgdG9vLg0KKyAqDQorICogU2VxdWVuY2UgbnVtYmVyIGlzIGluY3JlbWVudGVkIHdpdGggZWFj aCBtZXNzYWdlIHRvIGJlIHNlbnQuDQorICoNCisgKiBJZiB3ZSBleHBlY3QgcmVwbHkgdG8gb3Vy IG1lc3NhZ2UsIA0KKyAqIHRoZW4gc2VxdWVuY2UgbnVtYmVyIGluIHJlY2VpdmVkIG1lc3NhZ2Ug TVVTVCBiZSB0aGUgc2FtZSBhcyBpbiBvcmlnaW5hbCBtZXNzYWdlLA0KKyAqIGFuZCBhY2tub3ds ZWRnZSBudW1iZXIgTVVTVCBiZSB0aGUgc2FtZSArIDEuDQorICoNCisgKiBJZiB3ZSByZWNlaXZl IG1lc3NhZ2UgYW5kIGl0J3Mgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2Ug YXJlIGV4cGVjdGluZywgDQorICogdGhlbiBpdCBpcyBuZXcgbWVzc2FnZS4NCisgKiBJZiB3ZSBy ZWNlaXZlIG1lc3NhZ2UgYW5kIGl0J3Mgc2VxdWVuY2UgbnVtYmVyIGlzIHRoZSBzYW1lIGFzIG9u ZSB3ZSBhcmUgZXhwZWN0aW5nLA0KKyAqIGJ1dCBpdCdzIGFja25vd2xlZGdlIGlzIG5vdCBlcXVh bCBhY2tub3dsZWRnZSBudW1iZXIgaW4gb3JpZ2luYWwgbWVzc2FnZSArIDEsDQorICogdGhlbiBp dCBpcyBuZXcgbWVzc2FnZS4NCisgKg0KKyAqLw0KK3ZvaWQgY25fbmV0bGlua19zZW5kKHN0cnVj dCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzKQ0KK3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2Vu dHJ5ICpuLCAqX19jYnE7DQorCXVuc2lnbmVkIGludCBzaXplOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOw0KKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsNCisJc3RydWN0IGNuX21zZyAqZGF0YTsNCisJ c3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXUzMiBncm91cHMgPSAwOw0KKwlpbnQgZm91 bmQgPSAwOw0KKw0KKwlpZiAoIV9fZ3JvdXBzKQ0KKwl7DQorCQlzcGluX2xvY2soJmRldi0+Y2Jk ZXYtPnF1ZXVlX2xvY2spOw0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAm ZGV2LT5jYmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCQlpZiAoY25fY2Jf ZXF1YWwoJl9fY2JxLT5jYi0+aWQsICZtc2ctPmlkKSkgew0KKwkJCQlmb3VuZCA9IDE7DQorCQkJ CWdyb3VwcyA9IF9fY2JxLT5ncm91cDsNCisJCQl9DQorCQl9DQorCQlzcGluX3VubG9jaygmZGV2 LT5jYmRldi0+cXVldWVfbG9jayk7DQorDQorCQlpZiAoIWZvdW5kKSB7DQorCQkJcHJpbnRrKEtF Uk5fRVJSICJGYWlsZWQgdG8gZmluZCBtdWx0aWNhc3QgbmV0bGluayBncm91cCBmb3IgY2FsbGJh Y2tbMHgleC4weCV4XS4gc2VxPSV1XG4iLA0KKwkJCSAgICAgICBtc2ctPmlkLmlkeCwgbXNnLT5p ZC52YWwsIG1zZy0+c2VxKTsNCisJCQlyZXR1cm47DQorCQl9DQorCX0NCisJZWxzZQ0KKwkJZ3Jv dXBzID0gX19ncm91cHM7DQorDQorCXNpemUgPSBOTE1TR19TUEFDRShzaXplb2YoKm1zZykgKyBt c2ctPmxlbik7DQorDQorCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsNCisJaWYg KCFza2IpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2Ig d2l0aCBzaXplPSV1LlxuIiwgc2l6ZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbmxoID0gTkxN U0dfUFVUKHNrYiwgMCwgbXNnLT5zZXEsIE5MTVNHX0RPTkUsIHNpemUgLSBzaXplb2YoKm5saCkp Ow0KKw0KKwlkYXRhID0gKHN0cnVjdCBjbl9tc2cgKilOTE1TR19EQVRBKG5saCk7DQorDQorCW1l bWNweShkYXRhLCBtc2csIHNpemVvZigqZGF0YSkgKyBtc2ctPmxlbik7DQorI2lmIDANCisJcHJp bnRrKCIlczogbGVuPSV1LCBzZXE9JXUsIGFjaz0ldSwgZ3JvdXA9JXUuXG4iLA0KKwkgICAgICAg X19mdW5jX18sIG1zZy0+bGVuLCBtc2ctPnNlcSwgbXNnLT5hY2ssIGdyb3Vwcyk7DQorI2VuZGlm DQorCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXBzID0gZ3JvdXBzOw0KKwluZXRsaW5rX2Jyb2Fk Y2FzdChkZXYtPm5scywgc2tiLCAwLCBncm91cHMsIEdGUF9BVE9NSUMpOw0KKw0KKwlyZXR1cm47 DQorDQorICAgICAgbmxtc2dfZmFpbHVyZToNCisJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8g c2VuZCAldS4ldVxuIiwgbXNnLT5zZXEsIG1zZy0+YWNrKTsNCisJa2ZyZWVfc2tiKHNrYik7DQor CXJldHVybjsNCit9DQorDQorc3RhdGljIGludCBjbl9jYWxsX2NhbGxiYWNrKHN0cnVjdCBjbl9t c2cgKm1zZywgdm9pZCAoKmRlc3RydWN0X2RhdGEpICh2b2lkICopLCB2b2lkICpkYXRhKQ0KK3sN CisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpuLCAqX19jYnE7DQorCXN0cnVjdCBjbl9kZXYg KmRldiA9ICZjZGV2Ow0KKwlpbnQgZm91bmQgPSAwOw0KKw0KKwlzcGluX2xvY2soJmRldi0+Y2Jk ZXYtPnF1ZXVlX2xvY2spOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZk ZXYtPmNiZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJaWYgKGNuX2NiX2Vx dWFsKCZfX2NicS0+Y2ItPmlkLCAmbXNnLT5pZCkpIHsNCisJCQlfX2NicS0+Y2ItPnByaXYgPSBt c2c7DQorDQorCQkJX19jYnEtPmRkYXRhID0gZGF0YTsNCisJCQlfX2NicS0+ZGVzdHJ1Y3RfZGF0 YSA9IGRlc3RydWN0X2RhdGE7DQorDQorCQkJcXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1 ZSwgJl9fY2JxLT53b3JrKTsNCisJCQlmb3VuZCA9IDE7DQorCQkJYnJlYWs7DQorCQl9DQorCX0N CisJc3Bpbl91bmxvY2soJmRldi0+Y2JkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwlyZXR1cm4gZm91 bmQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19jbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IG5sbXNnaGRyICpubGgpDQorew0KKwl1MzIgcGlkLCB1aWQsIHNlcSwgZ3JvdXA7DQor CXN0cnVjdCBjbl9tc2cgKm1zZzsNCisNCisJcGlkID0gTkVUTElOS19DUkVEUyhza2IpLT5waWQ7 DQorCXVpZCA9IE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkOw0KKwlzZXEgPSBubGgtPm5sbXNnX3Nl cTsNCisJZ3JvdXAgPSBORVRMSU5LX0NCKChza2IpKS5ncm91cHM7DQorCW1zZyA9IChzdHJ1Y3Qg Y25fbXNnICopTkxNU0dfREFUQShubGgpOw0KKw0KKwlpZiAobXNnLT5sZW4gIT0gbmxoLT5ubG1z Z19sZW4gLSBzaXplb2YoKm1zZykgLSBzaXplb2YoKm5saCkpIHsNCisJCXByaW50ayhLRVJOX0VS UiAic2tiIGRvZXMgbm90IGhhdmUgZW5vdWdoIGxlbmd0aDogIg0KKwkJCQkicmVxdWVzdGVkIG1z Zy0+bGVuPSV1WyV1XSwgbmxoLT5ubG1zZ19sZW49JXVbJXVdLCBza2ItPmxlbj0ldVttdXN0IGJl ICV1XS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgTkxNU0dfU1BBQ0UobXNnLT5sZW4pLCANCisJCQkJ bmxoLT5ubG1zZ19sZW4sIG5saC0+bmxtc2dfbGVuIC0gc2l6ZW9mKCpubGgpLA0KKwkJCQlza2It PmxlbiwgbXNnLT5sZW4gKyBzaXplb2YoKm1zZykpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0N CisjaWYgMA0KKwlwcmludGsoS0VSTl9JTkZPICJwaWQ9JXUsIHVpZD0ldSwgc2VxPSV1LCBncm91 cD0ldS5cbiIsDQorCSAgICAgICBwaWQsIHVpZCwgc2VxLCBncm91cCk7DQorI2VuZGlmDQorCXJl dHVybiBjbl9jYWxsX2NhbGxiYWNrKG1zZywgKHZvaWQgKCopKHZvaWQgKikpa2ZyZWVfc2tiLCBz a2IpOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKl9fc2ti KQ0KK3sNCisJc3RydWN0IG5sbXNnaGRyICpubGg7DQorCXUzMiBsZW47DQorCWludCBlcnI7DQor CXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IHNrYl9nZXQoX19za2IpOw0KKwlpZiAo IXNrYikgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVmZXJlbmNlIGFuIHNrYi5c biIpOw0KKwkJcmV0dXJuOw0KKwl9DQorI2lmIDANCisJcHJpbnRrKEtFUk5fSU5GTw0KKwkgICAg ICAgInNrYjogbGVuPSV1LCBkYXRhX2xlbj0ldSwgdHJ1ZXNpemU9JXUsIHByb3RvPSV1LCBjbG9u ZWQ9JWQsIHNoYXJlZD0lZC5cbiIsDQorCSAgICAgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwg c2tiLT50cnVlc2l6ZSwgc2tiLT5wcm90b2NvbCwNCisJICAgICAgIHNrYl9jbG9uZWQoc2tiKSwg c2tiX3NoYXJlZChza2IpKTsNCisjZW5kaWYNCisJd2hpbGUgKHNrYi0+bGVuID49IE5MTVNHX1NQ QUNFKDApKSB7DQorCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOw0KKwkJaWYg KG5saC0+bmxtc2dfbGVuIDwgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpIHx8DQorCQkgICAgc2tiLT5s ZW4gPCBubGgtPm5sbXNnX2xlbiB8fA0KKwkJICAgIG5saC0+bmxtc2dfbGVuID4gQ09OTkVDVE9S X01BWF9NU0dfU0laRSkgew0KKwkJCXByaW50ayhLRVJOX0lORk8gIm5sbXNnX2xlbj0ldSwgc2l6 ZW9mKCpubGgpPSV1XG4iLA0KKwkJCSAgICAgICBubGgtPm5sbXNnX2xlbiwgc2l6ZW9mKCpubGgp KTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCWxlbiA9IE5MTVNHX0FMSUdOKG5saC0+bmxtc2df bGVuKTsNCisJCWlmIChsZW4gPiBza2ItPmxlbikNCisJCQlsZW4gPSBza2ItPmxlbjsNCisNCisJ CWVyciA9IF9fY25fcnhfc2tiKHNrYiwgbmxoKTsNCisJCWlmIChlcnIpIHsNCisjaWYgMA0KKwkJ CWlmIChlcnIgPCAwICYmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQUNLKSkNCisJCQkJbmV0 bGlua19hY2soc2tiLCBubGgsIC1lcnIpOw0KKyNlbmRpZg0KKwkJCWtmcmVlX3NrYihza2IpOw0K KwkJCWJyZWFrOw0KKwkJfSBlbHNlIHsNCisjaWYgMA0KKwkJCWlmIChubGgtPm5sbXNnX2ZsYWdz ICYgTkxNX0ZfQUNLKQ0KKwkJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgMCk7DQorI2VuZGlmDQor CQkJa2ZyZWVfc2tiKHNrYik7DQorCQkJYnJlYWs7DQorCQl9DQorCQlza2JfcHVsbChza2IsIGxl bik7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgY25faW5wdXQoc3RydWN0IHNvY2sgKnNrLCBp bnQgbGVuKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJd2hpbGUgKChza2IgPSBz a2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKQ0KKwkJY25fcnhfc2ti KHNrYik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNuX25vdGlmeShzdHJ1Y3QgY2JfaWQgKmlkLCB1 MzIgbm90aWZ5X2V2ZW50KQ0KK3sNCisJc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50Ow0KKw0KKwlz cGluX2xvY2soJm5vdGlmeV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsICZub3Rp ZnlfbGlzdCwgbm90aWZ5X2VudHJ5KSB7DQorCQlpbnQgaTsNCisJCXN0cnVjdCBjbl9ub3RpZnlf cmVxICpyZXE7DQorCQlzdHJ1Y3QgY25fY3RsX21zZyAqY3RsID0gZW50LT5tc2c7DQorCQlpbnQg YSwgYjsNCisNCisJCWEgPSBiID0gMDsNCisJCQ0KKwkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlf cmVxICopY3RsLT5kYXRhOw0KKwkJZm9yIChpPTA7IGk8Y3RsLT5pZHhfbm90aWZ5X251bTsgKytp LCArK3JlcSkgew0KKwkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYgaWQtPmlkeCA8IHJl cS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7DQorCQkJCWEgPSAxOw0KKwkJCQlicmVhazsNCisJCQl9 DQorCQl9DQorCQkNCisJCWZvciAoaT0wOyBpPGN0bC0+dmFsX25vdGlmeV9udW07ICsraSwgKyty ZXEpIHsNCisJCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmIGlkLT52YWwgPCByZXEtPmZp cnN0ICsgcmVxLT5yYW5nZSkgew0KKwkJCQliID0gMTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJ fQ0KKw0KKwkJaWYgKGEgJiYgYikgew0KKwkJCXN0cnVjdCBjbl9tc2cgbTsNCisJCQkNCisJCQlw cmludGsoS0VSTl9JTkZPICJOb3RpZnlpbmcgZ3JvdXAgJXggd2l0aCBldmVudCAldSBhYm91dCAl eC4leC5cbiIsIA0KKwkJCQkJY3RsLT5ncm91cCwgbm90aWZ5X2V2ZW50LCANCisJCQkJCWlkLT5p ZHgsIGlkLT52YWwpOw0KKw0KKwkJCW1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsNCisJCQltLmFj ayA9IG5vdGlmeV9ldmVudDsNCisNCisJCQltZW1jcHkoJm0uaWQsIGlkLCBzaXplb2YobS5pZCkp Ow0KKwkJCWNuX25ldGxpbmtfc2VuZCgmbSwgY3RsLT5ncm91cCk7DQorCQl9DQorCX0NCisJc3Bp bl91bmxvY2soJm5vdGlmeV9sb2NrKTsNCit9DQorDQoraW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1 Y3QgY2JfaWQgKmlkLCBjaGFyICpuYW1lLCB2b2lkICgqY2FsbGJhY2spICh2b2lkICopKQ0KK3sN CisJaW50IGVycjsNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXN0cnVjdCBjbl9j YWxsYmFjayAqY2I7DQorDQorCWNiID0ga21hbGxvYyhzaXplb2YoKmNiKSwgR0ZQX0tFUk5FTCk7 DQorCWlmICghY2IpIHsNCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gYWxsb2Nh dGUgbmV3IHN0cnVjdCBjbl9jYWxsYmFjay5cbiIsDQorCQkgICAgICAgZGV2LT5jYmRldi0+bmFt ZSk7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKw0KKwltZW1zZXQoY2IsIDAsIHNpemVvZigq Y2IpKTsNCisNCisJc25wcmludGYoY2ItPm5hbWUsIHNpemVvZihjYi0+bmFtZSksICIlcyIsIG5h bWUpOw0KKw0KKwltZW1jcHkoJmNiLT5pZCwgaWQsIHNpemVvZihjYi0+aWQpKTsNCisJY2ItPmNh bGxiYWNrID0gY2FsbGJhY2s7DQorDQorCWF0b21pY19zZXQoJmNiLT5yZWZjbnQsIDApOw0KKw0K KwllcnIgPSBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soZGV2LT5jYmRldiwgY2IpOw0KKwlpZiAoZXJy KSB7DQorCQlrZnJlZShjYik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorCQkJDQorCWNuX25vdGlm eShpZCwgMCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIGNuX2RlbF9jYWxsYmFjayhz dHJ1Y3QgY2JfaWQgKmlkKQ0KK3sNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXN0 cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KKw0KKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPmNiZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRy eSkgew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlkLCBpZCkpIHsNCisJCQljbl9x dWV1ZV9kZWxfY2FsbGJhY2soZGV2LT5jYmRldiwgX19jYnEtPmNiKTsNCisJCQljbl9ub3RpZnko aWQsIDEpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgY25fY3Rs X21zZ19lcXVhbHMoc3RydWN0IGNuX2N0bF9tc2cgKm0xLCBzdHJ1Y3QgY25fY3RsX21zZyAqbTIp DQorew0KKwlpbnQgaTsNCisJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTEsICpyZXEyOw0KKw0K KwlpZiAobTEtPmlkeF9ub3RpZnlfbnVtICE9IG0yLT5pZHhfbm90aWZ5X251bSkNCisJCXJldHVy biAwOw0KKwkNCisJaWYgKG0xLT52YWxfbm90aWZ5X251bSAhPSBtMi0+dmFsX25vdGlmeV9udW0p DQorCQlyZXR1cm4gMDsNCisJDQorCWlmIChtMS0+bGVuICE9IG0yLT5sZW4pDQorCQlyZXR1cm4g MDsNCisNCisJaWYgKChtMS0+aWR4X25vdGlmeV9udW0gKyBtMS0+dmFsX25vdGlmeV9udW0pKnNp emVvZigqcmVxMSkgIT0gbTEtPmxlbikgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJOb3RpZnkgZW50 cnlbaWR4X251bT0leCwgdmFsX251bT0leCwgbGVuPSV1XSBjb250YWlucyBnYXJiYWdlLiBSZW1v dmluZy5cbiIsIA0KKwkJCQltMS0+aWR4X25vdGlmeV9udW0sIG0xLT52YWxfbm90aWZ5X251bSwg bTEtPmxlbik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKw0KKwlyZXExID0gKHN0cnVjdCBjbl9ub3Rp ZnlfcmVxICopbTEtPmRhdGE7DQorCXJlcTIgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiltMi0+ ZGF0YTsNCisJDQorCWZvciAoaT0wOyBpPG0xLT5pZHhfbm90aWZ5X251bTsgKytpKSB7DQorCQlp ZiAobWVtY21wKHJlcTEsIHJlcTIsIHNpemVvZigqcmVxMSkpKQ0KKwkJCXJldHVybiAwOw0KKw0K KwkJcmVxMSsrOw0KKwkJcmVxMisrOw0KKwl9DQorDQorCWZvciAoaT0wOyBpPG0xLT52YWxfbm90 aWZ5X251bTsgKytpKSB7DQorCQlpZiAobWVtY21wKHJlcTEsIHJlcTIsIHNpemVvZigqcmVxMSkp KQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJcmVxMSsrOw0KKwkJcmVxMisrOw0KKwl9DQorDQorCXJl dHVybiAxOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9jYWxsYmFjayh2b2lkICogZGF0YSkNCit7 DQorCXN0cnVjdCBjbl9tc2cgKm1zZyA9IChzdHJ1Y3QgY25fbXNnICopZGF0YTsNCisJc3RydWN0 IGNuX2N0bF9tc2cgKmN0bDsNCisJc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50Ow0KKwl1MzIgc2l6 ZTsNCisgDQorCWlmIChtc2ctPmxlbiA8IHNpemVvZigqY3RsKSkgew0KKwkJcHJpbnRrKEtFUk5f RVJSICJXcm9uZyBjb25uZWN0b3IgcmVxdWVzdCBzaXplICV1LCBtdXN0IGJlID49ICV1LlxuIiwg DQorCQkJCW1zZy0+bGVuLCBzaXplb2YoKmN0bCkpOw0KKwkJcmV0dXJuOw0KKwl9DQorCQ0KKwlj dGwgPSAoc3RydWN0IGNuX2N0bF9tc2cgKiltc2ctPmRhdGE7DQorDQorCXNpemUgPSBzaXplb2Yo KmN0bCkgKyAoY3RsLT5pZHhfbm90aWZ5X251bSArIGN0bC0+dmFsX25vdGlmeV9udW0pKnNpemVv ZihzdHJ1Y3QgY25fbm90aWZ5X3JlcSk7DQorDQorCWlmIChtc2ctPmxlbiAhPSBzaXplKSB7DQor CQlwcmludGsoS0VSTl9FUlIgIldyb25nIGNvbm5lY3RvciByZXF1ZXN0IHNpemUgJXUsIG11c3Qg YmUgPT0gJXUuXG4iLCANCisJCQkJbXNnLT5sZW4sIHNpemUpOw0KKwkJcmV0dXJuOw0KKwl9DQor DQorCWlmIChjdGwtPmxlbiArIHNpemVvZigqY3RsKSAhPSBtc2ctPmxlbikgew0KKwkJcHJpbnRr KEtFUk5fRVJSICJXcm9uZyBtZXNzYWdlOiBtc2ctPmxlbj0ldSBtdXN0IGJlIGVxdWFsIHRvIGlu bmVyX2xlbj0ldSBbKyV1XS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgY3RsLT5sZW4sIHNpemVvZigq Y3RsKSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoNCisJICogUmVtb3ZlIG5vdGlmaWNhdGlv bi4NCisJICovDQorCWlmIChjdGwtPmdyb3VwID09IDApIHsNCisJCXN0cnVjdCBjbl9jdGxfZW50 cnkgKm47DQorCQkNCisJCXNwaW5fbG9jaygmbm90aWZ5X2xvY2spOw0KKwkJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKGVudCwgbiwgJm5vdGlmeV9saXN0LCBub3RpZnlfZW50cnkpIHsNCisJCQlp ZiAoY25fY3RsX21zZ19lcXVhbHMoZW50LT5tc2csIGN0bCkpIHsNCisJCQkJbGlzdF9kZWwoJmVu dC0+bm90aWZ5X2VudHJ5KTsNCisJCQkJa2ZyZWUoZW50KTsNCisJCQl9DQorCQl9DQorCQlzcGlu X3VubG9jaygmbm90aWZ5X2xvY2spOw0KKw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXNpemUgKz0g c2l6ZW9mKCplbnQpOw0KKw0KKwllbnQgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOw0KKwlp ZiAoIWVudCkgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0 ZXMgZm9yIG5ldyBub3RpZnkgZW50cnkuXG4iLCBzaXplKTsNCisJCXJldHVybjsNCisJfQ0KKw0K KwltZW1zZXQoZW50LCAwLCBzaXplKTsNCisNCisJZW50LT5tc2cgPSAoc3RydWN0IGNuX2N0bF9t c2cgKikoZW50ICsgMSk7DQorDQorCW1lbWNweShlbnQtPm1zZywgY3RsLCBzaXplIC0gc2l6ZW9m KCplbnQpKTsNCisNCisJc3Bpbl9sb2NrKCZub3RpZnlfbG9jayk7DQorCWxpc3RfYWRkKCZlbnQt Pm5vdGlmeV9lbnRyeSwgJm5vdGlmeV9saXN0KTsNCisJc3Bpbl91bmxvY2soJm5vdGlmeV9sb2Nr KTsNCisNCisJew0KKwkJaW50IGk7DQorCQlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxOw0KKwkN CisJCXByaW50aygiTm90aWZ5IGdyb3VwICV4IGZvciBpZHg6ICIsIGN0bC0+Z3JvdXApOw0KKw0K KwkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopY3RsLT5kYXRhOw0KKwkJZm9yIChpPTA7 IGk8Y3RsLT5pZHhfbm90aWZ5X251bTsgKytpLCArK3JlcSkgew0KKwkJCXByaW50aygiJXUtJXUg IiwgcmVxLT5maXJzdCwgcmVxLT5maXJzdCtyZXEtPnJhbmdlLTEpOw0KKwkJfQ0KKwkJDQorCQlw cmludGsoIlxuTm90aWZ5IGdyb3VwICV4IGZvciB2YWw6ICIsIGN0bC0+Z3JvdXApOw0KKw0KKwkJ Zm9yIChpPTA7IGk8Y3RsLT52YWxfbm90aWZ5X251bTsgKytpLCArK3JlcSkgew0KKwkJCXByaW50 aygiJXUtJXUgIiwgcmVxLT5maXJzdCwgcmVxLT5maXJzdCtyZXEtPnJhbmdlLTEpOw0KKwkJfQ0K KwkJcHJpbnRrKCJcbiIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgY25faW5pdCh2b2lkKQ0K K3sNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorDQorCWRldi0+aW5wdXQgPSBjbl9p bnB1dDsNCisJZGV2LT5pZC5pZHggPSBjbl9pZHg7DQorCWRldi0+aWQudmFsID0gY25fdmFsOw0K Kw0KKwlkZXYtPm5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSh1bml0LCBkZXYtPmlucHV0KTsN CisJaWYgKCFkZXYtPm5scykgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRl IG5ldyBuZXRsaW5rIHNvY2tldCgldSkuXG4iLA0KKwkJICAgICAgIHVuaXQpOw0KKwkJcmV0dXJu IC1FSU87DQorCX0NCisNCisJZGV2LT5jYmRldiA9IGNuX3F1ZXVlX2FsbG9jX2RldigiY3F1ZXVl IiwgZGV2LT5ubHMpOw0KKwlpZiAoIWRldi0+Y2JkZXYpIHsNCisJCWlmIChkZXYtPm5scy0+c2tf c29ja2V0KQ0KKwkJCXNvY2tfcmVsZWFzZShkZXYtPm5scy0+c2tfc29ja2V0KTsNCisJCXJldHVy biAtRUlOVkFMOw0KKwl9DQorDQorCXJldHVybiBjbl9hZGRfY2FsbGJhY2soJmRldi0+aWQsICJj b25uZWN0b3IiLCAmY25fY2FsbGJhY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9maW5pKHZv aWQpDQorew0KKwlzdHJ1Y3QgY25fZGV2ICpkZXYgPSAmY2RldjsNCisNCisJY25fZGVsX2NhbGxi YWNrKCZkZXYtPmlkKTsNCisJY25fcXVldWVfZnJlZV9kZXYoZGV2LT5jYmRldik7DQorCWlmIChk ZXYtPm5scy0+c2tfc29ja2V0KQ0KKwkJc29ja19yZWxlYXNlKGRldi0+bmxzLT5za19zb2NrZXQp Ow0KK30NCisNCittb2R1bGVfaW5pdChjbl9pbml0KTsNCittb2R1bGVfZXhpdChjbl9maW5pKTsN CisNCitFWFBPUlRfU1lNQk9MKGNuX2FkZF9jYWxsYmFjayk7DQorRVhQT1JUX1NZTUJPTChjbl9k ZWxfY2FsbGJhY2spOw0KK0VYUE9SVF9TWU1CT0woY25fbmV0bGlua19zZW5kKTsNCmRpZmYgLU5y dSAvdG1wL2VtcHR5L2Nvbm5lY3Rvci5oIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25u ZWN0b3IuaA0KLS0tIC90bXAvZW1wdHkvY29ubmVjdG9yLmgJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9y LmgJMjAwNC0wOS0yNiAwMDoxNDoxNi4wMDAwMDAwMDAgKzA0MDANCkBAIC0wLDAgKzEsODEgQEAN CisvKg0KKyAqIAljb25uZWN0b3IuaA0KKyAqIA0KKyAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdl bml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y DQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlv biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEz MDcgIFVTQQ0KKyAqLw0KKw0KKyNpZm5kZWYgX19DT05ORUNUT1JfSA0KKyNkZWZpbmUgX19DT05O RUNUT1JfSA0KKw0KKyNpbmNsdWRlICIuLi9jb25uZWN0b3IvY25fcXVldWUuaCINCisNCisjZGVm aW5lIENPTk5FQ1RPUl9NQVhfTVNHX1NJWkUgCTEwMjQNCisNCitzdHJ1Y3QgY25fbXNnDQorew0K KwlzdHJ1Y3QgY2JfaWQgCQlpZDsNCisNCisJX191MzIJCQlzZXE7DQorCV9fdTMyCQkJYWNrOw0K Kw0KKwlfX3UzMgkJCWxlbjsJCS8qIExlbmd0aCBvZiB0aGUgZm9sbG93aW5nIGRhdGEgKi8NCisJ X191OAkJCWRhdGFbMF07DQorfTsNCisNCitzdHJ1Y3QgY25fbm90aWZ5X3JlcQ0KK3sNCisJX191 MzIJCQlmaXJzdDsNCisJX191MzIJCQlyYW5nZTsNCit9Ow0KKw0KK3N0cnVjdCBjbl9jdGxfbXNn DQorew0KKwlfX3UzMgkJCWlkeF9ub3RpZnlfbnVtOw0KKwlfX3UzMgkJCXZhbF9ub3RpZnlfbnVt Ow0KKwlfX3UzMgkJCWdyb3VwOw0KKwlfX3UzMgkJCWxlbjsNCisJX191OAkJCWRhdGFbMF07DQor fTsNCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNsdWRlIDxuZXQvc29jay5oPg0KKw0K K3N0cnVjdCBjbl9jdGxfZW50cnkNCit7DQorCXN0cnVjdCBsaXN0X2hlYWQJbm90aWZ5X2VudHJ5 Ow0KKwlzdHJ1Y3QgY25fY3RsX21zZwkqbXNnOw0KK307DQorDQorc3RydWN0IGNuX2Rldg0KK3sN CisJc3RydWN0IGNiX2lkIAkJaWQ7DQorDQorCXUzMgkJCXNlcSwgZ3JvdXBzOw0KKwlzdHJ1Y3Qg c29jayAJCSpubHM7DQorCXZvaWQgCQkJKCppbnB1dCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVu KTsNCisNCisJc3RydWN0IGNuX3F1ZXVlX2RldgkqY2JkZXY7DQorfTsNCisNCitpbnQgY25fYWRk X2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqLCBjaGFyICosIHZvaWQgKCogY2FsbGJhY2spKHZvaWQg KikpOw0KK3ZvaWQgY25fZGVsX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqKTsNCit2b2lkIGNuX25l dGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICosIHUzMik7DQorDQorI2VuZGlmIC8qIF9fS0VSTkVM X18gKi8NCisjZW5kaWYgLyogX19DT05ORUNUT1JfSCAqLw0K --=-TaaTUlrfsac4uE81fCIK Content-Disposition: attachment; filename=Kconfig.connector.patch Content-Type: text/x-patch; name=Kconfig.connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL0tjb25maWcub3JpZwkyMDA0LTA5LTI2IDEzOjM0OjQ4LjAw MDAwMDAwMCArMDQwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL0tjb25maWcJMjAwNC0wOS0yNiAx MzozNDo1Ny4wMDAwMDAwMDAgKzA0MDANCkBAIC00NCw2ICs0NCw4IEBADQogDQogc291cmNlICJk cml2ZXJzL3cxL0tjb25maWciDQogDQorc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmln Ig0KKw0KIHNvdXJjZSAiZHJpdmVycy9taXNjL0tjb25maWciDQogDQogc291cmNlICJkcml2ZXJz L21lZGlhL0tjb25maWciDQoNCg== --=-TaaTUlrfsac4uE81fCIK Content-Disposition: attachment; filename=Makefile.connector.patch Content-Type: text/x-patch; name=Makefile.connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL01ha2VmaWxlLm9yaWcJMjAwNC0wOS0yNSAyMzo0NzowOC4w MDAwMDAwMDAgKzA0MDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9NYWtlZmlsZQkyMDA0LTA5LTI2 IDEzOjM0OjI1LjAwMDAwMDAwMCArMDQwMA0KQEAgLTQ0LDYgKzQ0LDcgQEANCiBvYmotJChDT05G SUdfSTJPKQkJKz0gbWVzc2FnZS8NCiBvYmotJChDT05GSUdfSTJDKQkJKz0gaTJjLw0KIG9iai0k KENPTkZJR19XMSkJCSs9IHcxLw0KK29iai0kKENPTkZJR19DT05ORUNUT1IpCSs9IGNvbm5lY3Rv ci8NCiBvYmotJChDT05GSUdfUEhPTkUpCQkrPSB0ZWxlcGhvbnkvDQogb2JqLSQoQ09ORklHX01E KQkJKz0gbWQvDQogb2JqLSQoQ09ORklHX0JUKQkJKz0gYmx1ZXRvb3RoLw0KDQo= --=-TaaTUlrfsac4uE81fCIK-- --=-TizxkV5T9H8MXodLTgHL Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQBByTyIIKTPhE+8wY0RAvsmAJ4gGfMdMD6QCsL70yOkDPpEfdQQLQCeNFjT cbV/MHJXARjqXS0JwoogCgQ= =5jf5 -----END PGP SIGNATURE----- --=-TizxkV5T9H8MXodLTgHL--