From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy Polyakov Subject: Kernel connector - userspace <-> kernelspace "linker". Date: Thu, 16 Sep 2004 14:51:39 +0400 Sender: netdev-bounce@oss.sgi.com Message-ID: <1095331899.18219.58.camel@uganda> Reply-To: johnpol@2ka.mipt.ru Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-mcQn/wn0/BKtRO/PaPc5" Return-path: To: netdev@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --=-mcQn/wn0/BKtRO/PaPc5 Content-Type: multipart/mixed; boundary="=-cgNL2/x9Za/yEgPSnppb" --=-cgNL2/x9Za/yEgPSnppb Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hmm, do not know how to describe...=20 Kind of mega-picture can be found at=20 http://tservice.net.ru/~s0mbre/?section=3Dgallery&item=3Dconnector_design This driver adds possibility to connect anything with anything using netlink based network. One must register callback and identificator. When driver receives special netlink message with appropriate identificator, appropriate callback will be called. I think that the code better explains what I'm trying to say. cn_queue.[ch] - main queue processing routings. connector.[ch] - interface to the external modules. ucon.c - userspace daemon. It is broken a bit, but the main idea is=20 very clear. cn_test.c - module to test new connector. Makefile - it will link all above cruft. Origianlly this was written for SuperIO and w1 subsystems to connect=20 them to userspace, but actually it can be used outside those projects. Greg KH recommended to send it to linux-kernl@ mail list, but I personally=20 no not like that too "floodfil" list. Please review and comment. --=20 Evgeniy Polyakov Crash is better than data corruption. -- Art Grabowski --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=cn_queue.c Content-Type: text/x-csrc; name=cn_queue.c; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAljbl9xdWV1ZS5jDQogKiANCiAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBv bHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAq IA0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkNCiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQog KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlDQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K ICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KICoNCiAqLw0KDQoj aW5jbHVkZSA8bGludXgva2VybmVsLmg+DQojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQojaW5j bHVkZSA8bGludXgvbGlzdC5oPg0KI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQojaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KI2luY2x1ZGUg PGxpbnV4L3NrYnVmZi5oPg0KI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4NCg0KI2luY2x1ZGUg ImNuX3F1ZXVlLmgiDQoNCnN0YXRpYyB2b2lkIGNuX3F1ZXVlX3dyYXBwZXIodm9pZCAqZGF0YSkN CnsNCglzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSA9IChzdHJ1Y3QgY25fY2FsbGJhY2tf ZW50cnkgKilkYXRhOw0KDQoJYXRvbWljX2luYygmY2JxLT5jYi0+cmVmY250KTsNCgljYnEtPmNi LT5jYWxsYmFjayhjYnEtPmNiLT5wcml2KTsNCglhdG9taWNfZGVjKCZjYnEtPmNiLT5yZWZjbnQp Ow0KDQoJY2JxLT5kZXN0cnVjdF9kYXRhKGNicS0+ZGRhdGEpOw0KfQ0KDQpzdGF0aWMgc3RydWN0 IGNuX2NhbGxiYWNrX2VudHJ5ICpjbl9xdWV1ZV9hbGxvY19jYWxsYmFja19lbnRyeShzdHJ1Y3QN CgkJCQkJCQkgICAgICAgY25fY2FsbGJhY2sgKmNiKQ0Kew0KCXN0cnVjdCBjbl9jYWxsYmFja19l bnRyeSAqY2JxOw0KDQoJY2JxID0ga21hbGxvYyhzaXplb2YoKmNicSksIEdGUF9LRVJORUwpOw0K CWlmICghY2JxKSB7DQoJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcgY2Fs bGJhY2sgcXVldWUuXG4iKTsNCgkJcmV0dXJuIE5VTEw7DQoJfQ0KDQoJbWVtc2V0KGNicSwgMCwg c2l6ZW9mKCpjYnEpKTsNCg0KCWNicS0+Y2IgPSBjYjsNCg0KCUlOSVRfV09SSygmY2JxLT53b3Jr LCAmY25fcXVldWVfd3JhcHBlciwgY2JxKTsNCg0KCXJldHVybiBjYnE7DQp9DQoNCnN0YXRpYyB2 b2lkIGNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEp DQp7DQoJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2JxLT53b3JrKTsNCg0KCXdoaWxlIChhdG9taWNf cmVhZCgmY2JxLT5jYi0+cmVmY250KSkgew0KCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nICVz IHRvIGJlY2FtZSBmcmVlOiByZWZjbnQ9JWQuXG4iLA0KCQkgICAgICAgY2JxLT5wZGV2LT5uYW1l LCBhdG9taWNfcmVhZCgmY2JxLT5jYi0+cmVmY250KSk7DQoJCXNldF9jdXJyZW50X3N0YXRlKFRB U0tfSU5URVJSVVBUSUJMRSk7DQoJCXNjaGVkdWxlX3RpbWVvdXQoSFopOw0KDQoJCWlmIChjdXJy ZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkNCgkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOw0KDQoJ CWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkNCgkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7 DQoJfQ0KDQoJa2ZyZWUoY2JxKTsNCn0NCg0KaW50IGNuX2NiX2VxdWFsKHN0cnVjdCBjYl9pZCAq aTEsIHN0cnVjdCBjYl9pZCAqaTIpDQp7DQoJcmV0dXJuICgoaTEtPmlkeCA9PSBpMi0+aWR4KSAm JiAoaTEtPnZhbCA9PSBpMi0+dmFsKSk7DQp9DQoNCmludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2so c3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQ0Kew0KCXN0 cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCAqbiwgKl9fY2JxOw0KCWludCBmb3VuZCA9IDA7 DQoNCgljYnEgPSBjbl9xdWV1ZV9hbGxvY19jYWxsYmFja19lbnRyeShjYik7DQoJaWYgKCFjYnEp DQoJCXJldHVybiAtRU5PTUVNOw0KDQoJYXRvbWljX2luYygmZGV2LT5yZWZjbnQpOw0KCWNicS0+ cGRldiA9IGRldjsNCg0KCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsNCglsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5 KSB7DQoJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEtPmNiLT5pZCwgJmNiLT5pZCkpIHsNCgkJCWZv dW5kID0gMTsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KCWlmICghZm91bmQpIHsNCgkJYXRvbWljX3Nl dCgmY2JxLT5jYi0+cmVmY250LCAxKTsNCgkJbGlzdF9hZGRfdGFpbCgmY2JxLT5jYWxsYmFja19l bnRyeSwgJmRldi0+cXVldWVfbGlzdCk7DQoJfQ0KCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xv Y2spOw0KDQoJaWYgKGZvdW5kKSB7DQoJCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsNCgkJYXRv bWljX3NldCgmY2JxLT5jYi0+cmVmY250LCAwKTsNCgkJY25fcXVldWVfZnJlZV9jYWxsYmFjayhj YnEpOw0KCQlyZXR1cm4gLUVJTlZBTDsNCgl9DQoNCgljYnEtPm5scyA9IGRldi0+bmxzOw0KCWNi cS0+c2VxID0gMDsNCgljYnEtPmdyb3VwID0gKytkZXYtPm5ldGxpbmtfZ3JvdXBzOw0KDQoJcmV0 dXJuIDA7DQp9DQoNCnZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9k ZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYikNCnsNCglzdHJ1Y3QgY25fY2FsbGJhY2tf ZW50cnkgKmNicSA9IE5VTEwsICpuOw0KCWludCBmb3VuZCA9IDA7DQoNCglzcGluX2xvY2soJmRl di0+cXVldWVfbG9jayk7DQoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNicSwgbiwgJmRldi0+ cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCgkJaWYgKGNuX2NiX2VxdWFsKCZjYnEtPmNi LT5pZCwgJmNiLT5pZCkpIHsNCgkJCWxpc3RfZGVsKCZjYnEtPmNhbGxiYWNrX2VudHJ5KTsNCgkJ CWZvdW5kID0gMTsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVl X2xvY2spOw0KDQoJaWYgKGZvdW5kKSB7DQoJCWF0b21pY19kZWMoJmNicS0+Y2ItPnJlZmNudCk7 DQoJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soY2JxKTsNCgkJYXRvbWljX2RlYygmZGV2LT5yZWZj bnQpOw0KCX0NCn0NCg0Kc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNo YXIgKm5hbWUsIHN0cnVjdCBzb2NrICpubHMpDQp7DQoJc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2 Ow0KDQoJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOw0KCWlmICghZGV2 KSB7DQoJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY3RlIG5ldyBzdHJ1Y3Qg Y25fcXVldWVfZGV2LlxuIiwNCgkJICAgICAgIG5hbWUpOw0KCQlyZXR1cm4gTlVMTDsNCgl9DQoN CgltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOw0KDQoJc25wcmludGYoZGV2LT5uYW1lLCBz aXplb2YoZGV2LT5uYW1lKSwgIiVzIiwgbmFtZSk7DQoNCglhdG9taWNfc2V0KCZkZXYtPnJlZmNu dCwgMCk7DQoJSU5JVF9MSVNUX0hFQUQoJmRldi0+cXVldWVfbGlzdCk7DQoJc3Bpbl9sb2NrX2lu aXQoJmRldi0+cXVldWVfbG9jayk7DQoNCglkZXYtPm5scyA9IG5sczsNCglkZXYtPm5ldGxpbmtf Z3JvdXBzID0gMDsNCg0KCWRldi0+Y25fcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKGRldi0+bmFt ZSk7DQoJaWYgKCFkZXYtPmNuX3F1ZXVlKSB7DQoJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRv IGNyZWF0ZSAlcyBxdWV1ZS5cbiIsIGRldi0+bmFtZSk7DQoJCWtmcmVlKGRldik7DQoJCXJldHVy biBOVUxMOw0KCX0NCg0KCXJldHVybiBkZXY7DQp9DQoNCnZvaWQgY25fcXVldWVfZnJlZV9kZXYo c3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KQ0Kew0KCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAq Y2JxLCAqbjsNCg0KCWZsdXNoX3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsNCglkZXN0cm95X3dv cmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsNCg0KCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsN CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxs YmFja19lbnRyeSkgew0KCQlsaXN0X2RlbCgmY2JxLT5jYWxsYmFja19lbnRyeSk7DQoJCWF0b21p Y19kZWMoJmNicS0+Y2ItPnJlZmNudCk7DQoJfQ0KCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xv Y2spOw0KDQoJd2hpbGUgKGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkpIHsNCgkJcHJpbnRrKEtF Uk5fSU5GTyAiV2FpdGluZyAlcyB0byBiZWNhbWUgZnJlZTogcmVmY250PSVkLlxuIiwNCgkJICAg ICAgIGRldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7DQoJCXNldF9jdXJyZW50 X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7DQoJCXNjaGVkdWxlX3RpbWVvdXQoSFopOw0KDQoJ CWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkNCgkJCXJlZnJpZ2VyYXRvcihQRl9GUkVF WkUpOw0KDQoJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkNCgkJCWZsdXNoX3NpZ25hbHMo Y3VycmVudCk7DQoJfQ0KDQoJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsNCglrZnJlZShk ZXYpOw0KCWRldiA9IE5VTEw7DQp9DQoNCkVYUE9SVF9TWU1CT0woY25fcXVldWVfYWRkX2NhbGxi YWNrKTsNCkVYUE9SVF9TWU1CT0woY25fcXVldWVfZGVsX2NhbGxiYWNrKTsNCkVYUE9SVF9TWU1C T0woY25fcXVldWVfYWxsb2NfZGV2KTsNCkVYUE9SVF9TWU1CT0woY25fcXVldWVfZnJlZV9kZXYp Ow0K --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=cn_queue.h Content-Type: text/x-chdr; name=cn_queue.h; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAljbl9xdWV1ZS5oDQogKiANCiAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBv bHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAq IA0KICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkNCiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAqDQogKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQog KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlDQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K ICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KICovDQoNCiNpZm5k ZWYgX19DTl9RVUVVRV9IDQojZGVmaW5lIF9fQ05fUVVFVUVfSA0KDQojaW5jbHVkZSA8YXNtL3R5 cGVzLmg+DQoNCnN0cnVjdCBjYl9pZA0Kew0KCV9fdTMyCQkJaWR4Ow0KCV9fdTMyCQkJdmFsOw0K fTsNCg0KI2lmZGVmIF9fS0VSTkVMX18NCg0KI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4NCg0KI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4NCiNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCg0KI2Rl ZmluZSBDTl9DQlFfTkFNRUxFTgkJMzINCg0Kc3RydWN0IGNuX3F1ZXVlX2Rldg0Kew0KCWF0b21p Y190CQlyZWZjbnQ7DQoJdW5zaWduZWQgY2hhcgkJbmFtZVtDTl9DQlFfTkFNRUxFTl07DQoNCglz dHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqY25fcXVldWU7DQoJDQoJc3RydWN0IGxpc3RfaGVhZCAJ cXVldWVfbGlzdDsNCglzcGlubG9ja190IAkJcXVldWVfbG9jazsNCg0KCWludAkJCW5ldGxpbmtf Z3JvdXBzOw0KCXN0cnVjdCBzb2NrCQkqbmxzOw0KfTsNCg0Kc3RydWN0IGNuX2NhbGxiYWNrDQp7 DQoJdW5zaWduZWQgY2hhcgkJbmFtZVtDTl9DQlFfTkFNRUxFTl07DQoJDQoJc3RydWN0IGNiX2lk CQlpZDsNCgl2b2lkCQkJKCogY2FsbGJhY2spKHZvaWQgKik7DQoJdm9pZAkJCSpwcml2Ow0KCQ0K CWF0b21pY190CQlyZWZjbnQ7DQp9Ow0KDQpzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkNCnsNCglz dHJ1Y3QgbGlzdF9oZWFkCWNhbGxiYWNrX2VudHJ5Ow0KCXN0cnVjdCBjbl9jYWxsYmFjawkqY2I7 DQoJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7DQoJc3RydWN0IGNuX3F1ZXVlX2RldgkqcGRldjsN CgkNCgl2b2lkCQkJKCogZGVzdHJ1Y3RfZGF0YSkodm9pZCAqKTsNCgl2b2lkCQkJKmRkYXRhOw0K DQoJaW50CQkJc2VxLCBncm91cDsNCglzdHJ1Y3Qgc29jawkJKm5sczsNCn07DQoNCmludCBjbl9x dWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2Fs bGJhY2sgKmNiKTsNCnZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9k ZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYik7DQoNCnN0cnVjdCBjbl9xdWV1ZV9kZXYg KmNuX3F1ZXVlX2FsbG9jX2RldihjaGFyICpuYW1lLCBzdHJ1Y3Qgc29jayAqKTsNCnZvaWQgY25f cXVldWVfZnJlZV9kZXYoc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KTsNCg0KaW50IGNuX2NiX2Vx dWFsKHN0cnVjdCBjYl9pZCAqLCBzdHJ1Y3QgY2JfaWQgKik7DQoNCiNlbmRpZiAvKiBfX0tFUk5F TF9fICovDQojZW5kaWYgLyogX19DTl9RVUVVRV9IICovDQo= --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=cn_test.c Content-Type: text/x-csrc; name=cn_test.c; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAljbl90ZXN0LmMNCiAqIA0KICogMjAwNCBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9s eWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICog DQogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQ0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQogKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUNCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQog Kg0KICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQogKi8NCg0KI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPg0KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KI2luY2x1ZGUg PGxpbnV4L21vZHVsZXBhcmFtLmg+DQoNCiNpbmNsdWRlICJjb25uZWN0b3IuaCINCg0Kc3RhdGlj IHN0cnVjdCBjYl9pZCBjbl90ZXN0X2lkID0geyAweDEyMywgMHg0NTYgfTsNCnN0YXRpYyBjaGFy IGNuX3Rlc3RfbmFtZVtdID0gImNuX3Rlc3QiOw0KDQp2b2lkIGNuX3Rlc3RfY2FsbGJhY2sodm9p ZCAqZGF0YSkNCnsNCglzdHJ1Y3QgY25fbXNnICptc2cgPSAoc3RydWN0IGNuX21zZyAqKWRhdGE7 DQoNCglwcmludGsoIiVzOiBpZHg9JXgsIHZhbD0leCwgbGVuPSVkLlxuIiwNCgkgICAgICAgX19m dW5jX18sIG1zZy0+aWQuaWR4LCBtc2ctPmlkLnZhbCwgbXNnLT5sZW4pOw0KfQ0KDQpzdGF0aWMg aW50IGNuX3Rlc3RfaW5pdCh2b2lkKQ0Kew0KCWludCBlcnI7DQoNCgllcnIgPSBjbl9hZGRfY2Fs bGJhY2soJmNuX3Rlc3RfaWQsIGNuX3Rlc3RfbmFtZSwgY25fdGVzdF9jYWxsYmFjayk7DQoJaWYg KGVycikNCgkJcmV0dXJuIGVycjsNCgljbl90ZXN0X2lkLnZhbCsrOw0KCWVyciA9IGNuX2FkZF9j YWxsYmFjaygmY25fdGVzdF9pZCwgY25fdGVzdF9uYW1lLCBjbl90ZXN0X2NhbGxiYWNrKTsNCglp ZiAoZXJyKSB7DQoJCWNuX2RlbF9jYWxsYmFjaygmY25fdGVzdF9pZCk7DQoJCXJldHVybiBlcnI7 DQoJfQ0KDQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyB2b2lkIGNuX3Rlc3RfZmluaSh2b2lkKQ0K ew0KCWNuX2RlbF9jYWxsYmFjaygmY25fdGVzdF9pZCk7DQoJY25fdGVzdF9pZC52YWwtLTsNCglj bl9kZWxfY2FsbGJhY2soJmNuX3Rlc3RfaWQpOw0KfQ0KDQptb2R1bGVfaW5pdChjbl90ZXN0X2lu aXQpOw0KbW9kdWxlX2V4aXQoY25fdGVzdF9maW5pKTsNCg== --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=connector.c Content-Type: text/x-csrc; name=connector.c; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAljb25uZWN0b3IuYw0KICogDQogKiAyMDA0IENvcHlyaWdodCAoYykgRXZnZW5peSBQ b2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQog KiANCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQ0KICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N CiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQ0KICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCiAqLw0KDQojaW5j bHVkZSA8bGludXgva2VybmVsLmg+DQojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQojaW5jbHVk ZSA8bGludXgvbGlzdC5oPg0KI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KI2luY2x1ZGUgPGxp bnV4L25ldGxpbmsuaD4NCiNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPg0KDQojaW5jbHVk ZSA8bmV0L3NvY2suaD4NCg0KI2luY2x1ZGUgIi4uL2Nvbm5lY3Rvci9jb25uZWN0b3IuaCINCiNp bmNsdWRlICIuLi9jb25uZWN0b3IvY25fcXVldWUuaCINCg0KTU9EVUxFX0xJQ0VOU0UoIkdQTCIp Ow0KTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4i KTsNCk1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNl IGNvbm5lY3Rvci4iKTsNCg0Kc3RhdGljIGludCB1bml0ID0gTkVUTElOS19ORkxPRzsNCm1vZHVs ZV9wYXJhbSh1bml0LCBpbnQsIDApOw0KDQpzdHJ1Y3QgY25fZGV2IGNkZXY7DQoNCi8qDQogKiBt c2ctPnNlcSBhbmQgbXNnLT5hY2sgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIG1lc3NhZ2UgZ2VuZWFs b2d5Lg0KICogV2hlbiBzb21lb25lIHNlbmRzIG1lc3NhZ2UgaXQgcHV0cyB0aGVyZSBsb2NhbGx5 IHVuaXF1ZSBzZXF1ZW5jZSANCiAqIGFuZCByYW5kb20gYWNrbm93bGVkZ2UgbnVtYmVycy4NCiAq IFNlcXVlbmNlIG51bWJlciBtYXkgYmUgY29waWVkIGludG8gbmxtc2doZHItPm5sbXNnX3NlcSB0 b28uDQogKg0KICogU2VxdWVuY2UgbnVtYmVyIGlzIGluY3JlbWVudGVkIHdpdGggZWFjaCBtZXNz YWdlIHRvIGJlIHNlbnQuDQogKg0KICogSWYgd2UgZXhwZWN0IHJlcGx5IHRvIG91ciBtZXNzYWdl LCANCiAqIHRoZW4gc2VxdWVuY2UgbnVtYmVyIGluIHJlY2VpdmVkIG1lc3NhZ2UgTVVTVCBiZSB0 aGUgc2FtZSBhcyBpbiBvcmlnaW5hbCBtZXNzYWdlLA0KICogYW5kIGFja25vd2xlZGdlIG51bWJl ciBNVVNUIGJlIHRoZSBzYW1lICsgMS4NCiAqDQogKiBJZiB3ZSByZWNlaXZlIG1lc3NhZ2UgYW5k IGl0J3Mgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2UgYXJlIGV4cGVjdGlu ZywgDQogKiB0aGVuIGl0IGlzIG5ldyBtZXNzYWdlLg0KICogSWYgd2UgcmVjZWl2ZSBtZXNzYWdl IGFuZCBpdCdzIHNlcXVlbmNlIG51bWJlciBpcyB0aGUgc2FtZSBhcyBvbmUgd2UgYXJlIGV4cGVj dGluZywNCiAqIGJ1dCBpdCdzIGFja25vd2xlZGdlIGlzIG5vdCBlcXVhbCBhY2tub3dsZWRnZSBu dW1iZXIgaW4gb3JpZ2luYWwgbWVzc2FnZSArIDEsDQogKiB0aGVuIGl0IGlzIG5ldyBtZXNzYWdl Lg0KICoNCiAqLw0Kdm9pZCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqbXNnKQ0Kew0K CXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KCXVuc2lnbmVkIGludCBzaXpl Ow0KCXN0cnVjdCBza19idWZmICpza2I7DQoJc3RydWN0IG5sbXNnaGRyICpubGg7DQoJc3RydWN0 IGNuX21zZyAqZGF0YTsNCglzdHJ1Y3QgY25fZGV2ICpkZXYgPSAmY2RldjsNCgl1MzIgZ3JvdXBz ID0gMDsNCglpbnQgZm91bmQgPSAwOw0KDQoJc3Bpbl9sb2NrKCZkZXYtPmNiZGV2LT5xdWV1ZV9s b2NrKTsNCglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPmNiZGV2LT5x dWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgew0KCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5j Yi0+aWQsICZtc2ctPmlkKSkgew0KCQkJZm91bmQgPSAxOw0KCQkJZ3JvdXBzID0gX19jYnEtPmdy b3VwOw0KCQl9DQoJfQ0KCXNwaW5fdW5sb2NrKCZkZXYtPmNiZGV2LT5xdWV1ZV9sb2NrKTsNCg0K CWlmICghZm91bmQpIHsNCgkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZmluZCBtdWx0aWNh c3QgbmV0bGluayBncm91cCBmb3IgY2FsbGJhY2tbMHgleC4weCV4XS4gc2VxPSV1XG4iLA0KCQkg ICAgICAgbXNnLT5pZC5pZHgsIG1zZy0+aWQudmFsLCBtc2ctPnNlcSk7DQoJCXJldHVybjsNCgl9 DQoNCglzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKCptc2cpICsgbXNnLT5sZW4pOw0KDQoJc2ti ID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOw0KCWlmICghc2tiKSB7DQoJCXByaW50ayhL RVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2Igd2l0aCBzaXplPSV1LlxuIiwgc2l6 ZSk7DQoJCXJldHVybjsNCgl9DQoNCglubGggPSBOTE1TR19QVVQoc2tiLCAwLCBtc2ctPnNlcSwg TkxNU0dfRE9ORSwgc2l6ZSAtIHNpemVvZigqbmxoKSk7DQoNCglkYXRhID0gKHN0cnVjdCBjbl9t c2cgKilOTE1TR19EQVRBKG5saCk7DQoNCgltZW1jcHkoZGF0YSwgbXNnLCBzaXplb2YoKmRhdGEp ICsgbXNnLT5sZW4pOw0KI2lmIDANCglwcmludGsoIiVzOiBsZW49JXUsIHNlcT0ldSwgYWNrPSV1 LCBncm91cD0ldS5cbiIsDQoJICAgICAgIF9fZnVuY19fLCBtc2ctPmxlbiwgbXNnLT5zZXEsIG1z Zy0+YWNrLCBncm91cHMpOw0KI2VuZGlmDQoJTkVUTElOS19DQihza2IpLmRzdF9ncm91cHMgPSBn cm91cHM7DQoJbmV0bGlua19icm9hZGNhc3QoZGV2LT5ubHMsIHNrYiwgMCwgZ3JvdXBzLCBHRlBf QVRPTUlDKTsNCg0KCXJldHVybjsNCg0KICAgICAgbmxtc2dfZmFpbHVyZToNCglwcmludGsoS0VS Tl9FUlIgIkZhaWxlZCB0byBzZW5kICV1LiV1XG4iLCBtc2ctPnNlcSwgbXNnLT5hY2spOw0KCWtm cmVlX3NrYihza2IpOw0KCXJldHVybjsNCn0NCg0Kc3RhdGljIGludCBjbl9jYWxsX2NhbGxiYWNr KHN0cnVjdCBjbl9tc2cgKm1zZywgdm9pZCAoKmRlc3RydWN0X2RhdGEpICh2b2lkICopLCB2b2lk ICpkYXRhKQ0Kew0KCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KCXN0cnVj dCBjbl9kZXYgKmRldiA9ICZjZGV2Ow0KCWludCBmb3VuZCA9IDA7DQoNCglzcGluX2xvY2soJmRl di0+Y2JkZXYtPnF1ZXVlX2xvY2spOw0KCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShfX2NicSwg biwgJmRldi0+Y2JkZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5KSB7DQoJCWlmIChjbl9j Yl9lcXVhbCgmX19jYnEtPmNiLT5pZCwgJm1zZy0+aWQpKSB7DQoJCQlfX2NicS0+Y2ItPnByaXYg PSBtc2c7DQoNCgkJCV9fY2JxLT5kZGF0YSA9IGRhdGE7DQoJCQlfX2NicS0+ZGVzdHJ1Y3RfZGF0 YSA9IGRlc3RydWN0X2RhdGE7DQoNCgkJCXF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUs ICZfX2NicS0+d29yayk7DQoJCQlmb3VuZCA9IDE7DQoJCQlicmVhazsNCgkJfQ0KCX0NCglzcGlu X3VubG9jaygmZGV2LT5jYmRldi0+cXVldWVfbG9jayk7DQoNCglyZXR1cm4gZm91bmQ7DQp9DQoN CnN0YXRpYyBpbnQgX19jbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNn aGRyICpubGgpDQp7DQoJdTMyIHBpZCwgdWlkLCBzZXEsIGdyb3VwOw0KCXN0cnVjdCBjbl9tc2cg Km1zZzsNCg0KCXBpZCA9IE5FVExJTktfQ1JFRFMoc2tiKS0+cGlkOw0KCXVpZCA9IE5FVExJTktf Q1JFRFMoc2tiKS0+dWlkOw0KCXNlcSA9IG5saC0+bmxtc2dfc2VxOw0KCWdyb3VwID0gTkVUTElO S19DQigoc2tiKSkuZ3JvdXBzOw0KCW1zZyA9IChzdHJ1Y3QgY25fbXNnICopTkxNU0dfREFUQShu bGgpOw0KI2lmIDANCglwcmludGsoS0VSTl9JTkZPICJwaWQ9JXUsIHVpZD0ldSwgc2VxPSV1LCBn cm91cD0ldS5cbiIsDQoJICAgICAgIHBpZCwgdWlkLCBzZXEsIGdyb3VwKTsNCiNlbmRpZg0KCXJl dHVybiBjbl9jYWxsX2NhbGxiYWNrKG1zZywgKHZvaWQgKCopKHZvaWQgKikpa2ZyZWVfc2tiLCBz a2IpOw0KfQ0KDQpzdGF0aWMgdm9pZCBjbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKl9fc2tiKQ0K ew0KCXN0cnVjdCBubG1zZ2hkciAqbmxoOw0KCXUzMiBsZW47DQoJaW50IGVycjsNCglzdHJ1Y3Qg c2tfYnVmZiAqc2tiOw0KDQoJc2tiID0gc2tiX2dldChfX3NrYik7DQoJaWYgKCFza2IpIHsNCgkJ cHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVmZXJlbmNlIGFuIHNrYi5cbiIpOw0KCQlyZXR1 cm47DQoJfQ0KI2lmIDANCglwcmludGsoS0VSTl9JTkZPDQoJICAgICAgICJza2I6IGxlbj0ldSwg ZGF0YV9sZW49JXUsIHRydWVzaXplPSV1LCBwcm90bz0ldSwgY2xvbmVkPSVkLCBzaGFyZWQ9JWQu XG4iLA0KCSAgICAgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgc2tiLT50cnVlc2l6ZSwgc2ti LT5wcm90b2NvbCwNCgkgICAgICAgc2tiX2Nsb25lZChza2IpLCBza2Jfc2hhcmVkKHNrYikpOw0K I2VuZGlmDQoJd2hpbGUgKHNrYi0+bGVuID49IE5MTVNHX1NQQUNFKDApKSB7DQoJCW5saCA9IChz dHJ1Y3Qgbmxtc2doZHIgKilza2ItPmRhdGE7DQoJCWlmIChubGgtPm5sbXNnX2xlbiA8IHNpemVv ZihzdHJ1Y3QgY25fbXNnKSB8fA0KCQkgICAgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbiB8fA0K CQkgICAgbmxoLT5ubG1zZ19sZW4gPiBDT05ORUNUT1JfTUFYX01TR19TSVpFKSB7DQoJCQlwcmlu dGsoS0VSTl9JTkZPICJubG1zZ19sZW49JXUsIHNpemVvZigqbmxoKT0ldVxuIiwNCgkJCSAgICAg ICBubGgtPm5sbXNnX2xlbiwgc2l6ZW9mKCpubGgpKTsNCgkJCWJyZWFrOw0KCQl9DQoNCgkJbGVu ID0gTkxNU0dfQUxJR04obmxoLT5ubG1zZ19sZW4pOw0KCQlpZiAobGVuID4gc2tiLT5sZW4pDQoJ CQlsZW4gPSBza2ItPmxlbjsNCg0KCQllcnIgPSBfX2NuX3J4X3NrYihza2IsIG5saCk7DQoJCWlm IChlcnIpIHsNCgkJCWlmIChlcnIgPCAwKQ0KCQkJCW5ldGxpbmtfYWNrKHNrYiwgbmxoLCAtZXJy KTsNCgkJCWtmcmVlX3NrYihza2IpOw0KCQkJYnJlYWs7DQoJCX0gZWxzZSB7DQoJCQlpZiAobmxo LT5ubG1zZ19mbGFncyAmIE5MTV9GX0FDSykNCgkJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgMCk7 DQoJCQlrZnJlZV9za2Ioc2tiKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXNrYl9wdWxsKHNrYiwgbGVu KTsNCgl9DQp9DQoNCnN0YXRpYyB2b2lkIGNuX2lucHV0KHN0cnVjdCBzb2NrICpzaywgaW50IGxl bikNCnsNCglzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KDQoJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1 ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKQ0KCQljbl9yeF9za2Ioc2tiKTsNCn0N Cg0KaW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKmlkLCBjaGFyICpuYW1lLCB2b2lk ICgqY2FsbGJhY2spICh2b2lkICopKQ0Kew0KCWludCBlcnI7DQoJc3RydWN0IGNuX2RldiAqZGV2 ID0gJmNkZXY7DQoJc3RydWN0IGNuX2NhbGxiYWNrICpjYjsNCg0KCWNiID0ga21hbGxvYyhzaXpl b2YoKmNiKSwgR0ZQX0tFUk5FTCk7DQoJaWYgKCFjYikgew0KCQlwcmludGsoS0VSTl9JTkZPICIl czogRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBzdHJ1Y3QgY25fY2FsbGJhY2suXG4iLA0KCQkgICAg ICAgZGV2LT5jYmRldi0+bmFtZSk7DQoJCXJldHVybiAtRU5PTUVNOw0KCX0NCg0KCW1lbXNldChj YiwgMCwgc2l6ZW9mKCpjYikpOw0KDQoJc25wcmludGYoY2ItPm5hbWUsIHNpemVvZihjYi0+bmFt ZSksICIlcyIsIG5hbWUpOw0KDQoJbWVtY3B5KCZjYi0+aWQsIGlkLCBzaXplb2YoY2ItPmlkKSk7 DQoJY2ItPmNhbGxiYWNrID0gY2FsbGJhY2s7DQoNCglhdG9taWNfc2V0KCZjYi0+cmVmY250LCAw KTsNCg0KCWVyciA9IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhkZXYtPmNiZGV2LCBjYik7DQoJaWYg KGVycikgew0KCQlrZnJlZShjYik7DQoJCXJldHVybiBlcnI7DQoJfQ0KDQoJcmV0dXJuIDA7DQp9 DQoNCnZvaWQgY25fZGVsX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqaWQpDQp7DQoJc3RydWN0IGNu X2RldiAqZGV2ID0gJmNkZXY7DQoJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpuLCAqX19jYnE7 DQoNCglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPmNiZGV2LT5xdWV1 ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgew0KCQlpZiAoY25fY2JfZXF1YWwoJl9fY2JxLT5jYi0+ aWQsIGlkKSkgew0KCQkJY25fcXVldWVfZGVsX2NhbGxiYWNrKGRldi0+Y2JkZXYsIF9fY2JxLT5j Yik7DQoJCQlicmVhazsNCgkJfQ0KCX0NCn0NCg0Kc3RhdGljIGludCBjbl9pbml0KHZvaWQpDQp7 DQoJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQoNCglkZXYtPmlucHV0ID0gY25faW5wdXQ7 DQoNCglkZXYtPm5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSh1bml0LCBkZXYtPmlucHV0KTsN CglpZiAoIWRldi0+bmxzKSB7DQoJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBu ZXcgbmV0bGluayBzb2NrZXQoJXUpLlxuIiwNCgkJICAgICAgIHVuaXQpOw0KCQlyZXR1cm4gLUVJ TzsNCgl9DQoNCglkZXYtPmNiZGV2ID0gY25fcXVldWVfYWxsb2NfZGV2KCJjcXVldWUiLCBkZXYt Pm5scyk7DQoJaWYgKCFkZXYtPmNiZGV2KSB7DQoJCWlmIChkZXYtPm5scy0+c2tfc29ja2V0KQ0K CQkJc29ja19yZWxlYXNlKGRldi0+bmxzLT5za19zb2NrZXQpOw0KCQlyZXR1cm4gLUVJTlZBTDsN Cgl9DQoNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIHZvaWQgY25fZmluaSh2b2lkKQ0Kew0KCXN0 cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2Ow0KDQoJY25fcXVldWVfZnJlZV9kZXYoZGV2LT5jYmRl dik7DQoJaWYgKGRldi0+bmxzLT5za19zb2NrZXQpDQoJCXNvY2tfcmVsZWFzZShkZXYtPm5scy0+ c2tfc29ja2V0KTsNCn0NCg0KbW9kdWxlX2luaXQoY25faW5pdCk7DQptb2R1bGVfZXhpdChjbl9m aW5pKTsNCg0KRVhQT1JUX1NZTUJPTChjbl9hZGRfY2FsbGJhY2spOw0KRVhQT1JUX1NZTUJPTChj bl9kZWxfY2FsbGJhY2spOw0KRVhQT1JUX1NZTUJPTChjbl9uZXRsaW5rX3NlbmQpOw0K --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=connector.h Content-Type: text/x-chdr; name=connector.h; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAljb25uZWN0b3IuaA0KICogDQogKiAyMDA0IENvcHlyaWdodCAoYykgRXZnZW5peSBQ b2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQog KiANCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQ0KICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N CiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQ0KICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCiAqLw0KDQojaWZu ZGVmIF9fQ09OTkVDVE9SX0gNCiNkZWZpbmUgX19DT05ORUNUT1JfSA0KDQojaW5jbHVkZSAiLi4v Y29ubmVjdG9yL2NuX3F1ZXVlLmgiDQoNCiNkZWZpbmUgQ09OTkVDVE9SX01BWF9NU0dfU0laRSAJ MTAyNA0KDQpzdHJ1Y3QgY25fbXNnDQp7DQoJc3RydWN0IGNiX2lkIAkJaWQ7DQoNCglfX3UzMgkJ CXNlcTsNCglfX3UzMgkJCWFjazsNCg0KCV9fdTMyCQkJbGVuOwkJLyogTGVuZ3RoIG9mIHRoZSBm b2xsb3dpbmcgZGF0YSAqLw0KCV9fdTgJCQlkYXRhWzBdOw0KfTsNCg0KI2lmZGVmIF9fS0VSTkVM X18NCg0KI2luY2x1ZGUgPG5ldC9zb2NrLmg+DQoNCnN0cnVjdCBjbl9kZXYNCnsNCgl1MzIJCQlz ZXEsIGdyb3VwczsNCglzdHJ1Y3Qgc29jayAJCSpubHM7DQoJdm9pZCAJCQkoKmlucHV0KShzdHJ1 Y3Qgc29jayAqc2ssIGludCBsZW4pOw0KDQoJc3RydWN0IGNuX3F1ZXVlX2RldgkqY2JkZXY7DQp9 Ow0KDQppbnQgY25fYWRkX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqLCBjaGFyICosIHZvaWQgKCog Y2FsbGJhY2spKHZvaWQgKikpOw0Kdm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICop Ow0Kdm9pZCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqKTsNCg0KI2VuZGlmIC8qIF9f S0VSTkVMX18gKi8NCiNlbmRpZiAvKiBfX0NPTk5FQ1RPUl9IICovDQo= --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=Makefile Content-Type: text/x-makefile; name=Makefile; charset=KOI8-R Content-Transfer-Encoding: base64 b2JqLW0JCTo9IGNuLm8gY25fdGVzdC5vDQpjbi1vYmpzCQk6PSBjbl9xdWV1ZS5vIGNvbm5lY3Rv ci5vDQoNCiNLRElSCTo9IC9saWIvbW9kdWxlcy8kKHNoZWxsIHVuYW1lIC1yKS9idWlsZA0KS0RJ Ugk6PSAvdXNyL2xvY2FsL3NyYy9saW51eC0yLjYvbGludXgtMi42LjYNClBXRAk6PSAkKHNoZWxs IHB3ZCkNCg0KZGVmYXVsdDoNCgkkKE1BS0UpIC1DICQoS0RJUikgU1VCRElSUz0kKFBXRCkgbW9k dWxlcw0KDQpjbGVhbjoNCglybSAtZiAqLm8gKi5rbyAqLm1vZC4qIC4qLmNtZCAqfg0KCXJtIC1y ZiAudG1wX3ZlcnNpb25zDQoNCnVjb246CXVjb24uYyBjb25uZWN0b3IuaA0KCWdjYyAtVyAtV2Fs bCAtTzkgdWNvbi5jIC1vIHVjb24NCg== --=-cgNL2/x9Za/yEgPSnppb Content-Disposition: attachment; filename=ucon.c Content-Type: text/x-csrc; name=ucon.c; charset=KOI8-R Content-Transfer-Encoding: base64 LyoNCiAqIAl1Y29uLmMNCiAqDQogKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtv diA8am9obnBvbEAya2EubWlwdC5ydT4NCiAqIA0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQ0KICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3INCiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQogKg0KICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAq IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1B IDAyMTExLTEzMDcgVVNBDQogKi8NCg0KI2luY2x1ZGUgPGFzbS90eXBlcy5oPg0KDQojaW5jbHVk ZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPHN5cy9w b2xsLmg+DQoNCiNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+DQojaW5jbHVkZSA8bGludXgvcnRu ZXRsaW5rLmg+DQoNCiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+ DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3Ry aW5nLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQoNCiNpbmNsdWRl ICJjb25uZWN0b3IuaCINCiNpbmNsdWRlICIuLi9zb2VrcmlzL3NjX2Nvbm4uaCINCg0Kc3RhdGlj IGludCBuZWVkX2V4aXQ7DQpfX3UzMiBzZXE7DQoNCnN0YXRpYyBpbnQgbmV0bGlua19zZW5kKGlu dCBzLCBjaGFyICpkYXRhKQ0Kew0KCXN0cnVjdCBubG1zZ2hkciAqbmxoOw0KCXVuc2lnbmVkIGlu dCBzaXplOw0KCWludCBlcnI7DQoJY2hhciBidWZbMTI4XTsNCglzdHJ1Y3QgY25fbXNnICptLCAq bXNnOw0KCXN0cnVjdCBzY19jb25uX2RhdGEgKmNtZDsNCg0KCXNpemUgPSBOTE1TR19TUEFDRShz aXplb2Yoc3RydWN0IGNuX21zZykgKyBzaXplb2Yoc3RydWN0IHNjX2Nvbm5fZGF0YSkpOw0KDQoJ bmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1ZjsNCglubGgtPm5sbXNnX3NlcSA9IHNlcSsrOw0K CW5saC0+bmxtc2dfcGlkID0gZ2V0cGlkKCk7DQoJbmxoLT5ubG1zZ190eXBlID0gTkxNU0dfRE9O RTsNCglubGgtPm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplIC0gc2l6ZW9mKCpubGgpKTsN CglubGgtPm5sbXNnX2ZsYWdzID0gMDsNCg0KCW0gPSBOTE1TR19EQVRBKG5saCk7DQoJbXNnID0g KHN0cnVjdCBjbl9tc2cgKilkYXRhOw0KCWNtZCA9IChzdHJ1Y3Qgc2NfY29ubl9kYXRhICopKG1z ZyArIDEpOw0KDQoJcHJpbnRmKCIlczogbGVuPSV1LCBzZXE9JXUsIGFjaz0ldSwgIg0KCSAgICAg ICAic25hbWU9JXMsIGxuYW1lPSVzLCBpZHg9MHgleCwgY21kPSUwMnggWyUwMnguJTAyeC4lMDJ4 XS5cbiIsDQoJICAgICAgIF9fZnVuY19fLA0KCSAgICAgICBtc2ctPmxlbiwgbXNnLT5zZXEsIG1z Zy0+YWNrLA0KCSAgICAgICBjbWQtPnNuYW1lLA0KCSAgICAgICBjbWQtPmxuYW1lLCBjbWQtPmlk eCwgY21kLT5jbWQsIGNtZC0+cDAsIGNtZC0+cDEsIGNtZC0+cDIpOw0KDQoJbWVtY3B5KG0sIGRh dGEsIHNpemVvZigqbSkgKyBtc2ctPmxlbik7DQoNCgllcnIgPSBzZW5kKHMsIG5saCwgc2l6ZSwg MCk7DQoJaWYgKGVyciA9PSAtMSkNCgkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc2VuZDog JXMgWyVkXS5cbiIsDQoJCQlzdHJlcnJvcihlcnJubyksIGVycm5vKTsNCg0KCXJldHVybiBlcnI7 DQp9DQoNCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQoJaW50IHM7DQoJY2hh ciBidWZbMTAyNF07DQoJaW50IGxlbjsNCglzdHJ1Y3Qgbmxtc2doZHIgKnJlcGx5Ow0KCXN0cnVj dCBzb2NrYWRkcl9ubCBsX2xvY2FsOw0KCXN0cnVjdCBjbl9tc2cgKmRhdGE7DQoJc3RydWN0IHNj X2Nvbm5fZGF0YSAqbTsNCglGSUxFICpvdXQ7DQoJdGltZV90IHRtOw0KCXN0cnVjdCBwb2xsZmQg cGZkOw0KDQoJaWYgKGFyZ2MgPCAyKQ0KCQlvdXQgPSBzdGRvdXQ7DQoJZWxzZSB7DQoJCW91dCA9 IGZvcGVuKGFyZ3ZbMV0sICJhKyIpOw0KCQlpZiAoIW91dCkgew0KCQkJZnByaW50ZihzdGRlcnIs ICJVbmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZzogJXNcbiIsDQoJCQkJYXJndlsxXSwgc3Ry ZXJyb3IoZXJybm8pKTsNCgkJCW91dCA9IHN0ZG91dDsNCgkJfQ0KCX0NCg0KCW1lbXNldChidWYs IDAsIHNpemVvZihidWYpKTsNCg0KCXMgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwg TkVUTElOS19ORkxPRyk7DQoJaWYgKHMgPT0gLTEpIHsNCgkJcGVycm9yKCJzb2NrZXQiKTsNCgkJ cmV0dXJuIC0xOw0KCX0NCg0KCWxfbG9jYWwubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsNCglsX2xv Y2FsLm5sX2dyb3VwcyA9IDE7DQoJbF9sb2NhbC5ubF9waWQgPSBnZXRwaWQoKTsNCg0KCWlmIChi aW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9sb2NhbCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9ubCkpID09DQoJICAgIC0xKSB7DQoJCXBlcnJvcigiYmluZCIpOw0KCQljbG9zZShzKTsNCgkJ cmV0dXJuIC0xOw0KCX0NCg0KCXBmZC5mZCA9IHM7DQoNCgl3aGlsZSAoIW5lZWRfZXhpdCkgew0K CQlwZmQuZXZlbnRzID0gUE9MTElOOw0KCQlwZmQucmV2ZW50cyA9IDA7DQoJCS8qc3dpdGNoIChw b2xsKCZwZmQsIDEsIC0xKSkgDQoJCSAgIHsNCgkJICAgY2FzZSAwOg0KCQkgICBuZWVkX2V4aXQg PSAxOw0KCQkgICBicmVhazsNCgkJICAgY2FzZSAtMToNCgkJICAgaWYgKGVycm5vICE9IEVJTlRS KSANCgkJICAgew0KCQkgICBuZWVkX2V4aXQgPSAxOw0KCQkgICBicmVhazsNCgkJICAgfQ0KCQkg ICBjb250aW51ZTsNCgkJICAgfSAqLw0KCQlpZiAobmVlZF9leGl0KQ0KCQkJYnJlYWs7DQoNCgkJ ZGF0YSA9IChzdHJ1Y3QgY25fbXNnICopYnVmOw0KDQoJCWRhdGEtPmlkLmlkeCA9IDB4YWFiYjsN CgkJZGF0YS0+aWQudmFsID0gMHhjY2RkOw0KCQlkYXRhLT5zZXEgPSBzZXErKzsNCgkJZGF0YS0+ YWNrID0gKHNlcSBeIDB4MTIzNCk7DQoJCWRhdGEtPmxlbiA9IHNpemVvZigqbSk7DQoNCgkJbSA9 IChzdHJ1Y3Qgc2NfY29ubl9kYXRhICopKGRhdGEgKyAxKTsNCgkJbWVtc2V0KG0sIDAsIHNpemVv ZigqbSkpOw0KDQoJCW0tPmNtZCA9IFNDX0NNRF9MREVWX1JFQUQ7DQoJCW0tPmlkeCA9IDB4ZmY7 DQoJCXNwcmludGYobS0+c25hbWUsICJQQzg3MzZYIik7DQoJCXNwcmludGYobS0+bG5hbWUsICJH UElPIik7DQoNCgkJbS0+cDAgPSAyMTsNCg0KCQlsZW4gPSBuZXRsaW5rX3NlbmQocywgYnVmKTsN Cg0KCQlsZW4gPSByZWN2KHMsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOw0KCQlpZiAobGVuID09IC0x KSB7DQoJCQlwZXJyb3IoInJlY3YgYnVmIik7DQoJCQljbG9zZShzKTsNCgkJCXJldHVybiAtMTsN CgkJfQ0KCQlyZXBseSA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7DQoNCgkJc3dpdGNoIChyZXBs eS0+bmxtc2dfdHlwZSkgew0KCQljYXNlIE5MTVNHX0VSUk9SOg0KCQkJZnByaW50ZihvdXQsICJF cnJvciBtZXNzYWdlIHJlY2VpdmVkLlxuIik7DQoJCQlmZmx1c2gob3V0KTsNCgkJCWJyZWFrOw0K CQljYXNlIE5MTVNHX0RPTkU6DQoJCQlkYXRhID0gKHN0cnVjdCBjbl9tc2cgKilOTE1TR19EQVRB KHJlcGx5KTsNCgkJCW0gPSAoc3RydWN0IHNjX2Nvbm5fZGF0YSAqKShkYXRhICsgMSk7DQoNCgkJ CXRpbWUoJnRtKTsNCgkJCWZwcmludGYob3V0LA0KCQkJCSIlLjI0cyA6IFsleC4leF0gW3NlcT0l dSwgYWNrPSV1XSwgc25hbWU9JXMsIGxuYW1lPSVzLCBpZHg9JXUsIGNtZD0lIzAyeCBbJSMwMngu JSMwMnguJSMwMnhdXG4iLA0KCQkJCWN0aW1lKCZ0bSksIGRhdGEtPmlkLmlkeCwgZGF0YS0+aWQu dmFsLA0KCQkJCWRhdGEtPnNlcSwgZGF0YS0+YWNrLCBtLT5zbmFtZSwgbS0+bG5hbWUsDQoJCQkJ bS0+aWR4LCBtLT5jbWQsIG0tPnAwLCBtLT5wMSwgbS0+cDIpOw0KCQkJZmZsdXNoKG91dCk7DQoJ CQlicmVhazsNCgkJZGVmYXVsdDoNCgkJCWJyZWFrOw0KCQl9DQoNCgkJc2xlZXAoMSk7DQoJfQ0K DQoJY2xvc2Uocyk7DQoJcmV0dXJuIDA7DQp9DQo= --=-cgNL2/x9Za/yEgPSnppb-- --=-mcQn/wn0/BKtRO/PaPc5 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBBSXA7IKTPhE+8wY0RApWEAJwPkuzLA0h4fnVWjfOQlsBcj0rKpgCglGwp HSpi06OQW3ozVuqzVth7LlU= =xxSJ -----END PGP SIGNATURE----- --=-mcQn/wn0/BKtRO/PaPc5--