From owner-freebsd-bluetooth@FreeBSD.ORG Sat Feb 14 01:17:55 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 227C61065673 for ; Sat, 14 Feb 2009 01:17:55 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from el-out-1112.google.com (el-out-1112.google.com [209.85.162.178]) by mx1.freebsd.org (Postfix) with ESMTP id 9C0F28FC15 for ; Sat, 14 Feb 2009 01:17:54 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by el-out-1112.google.com with SMTP id r27so1344219ele.13 for ; Fri, 13 Feb 2009 17:17:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=vVXj/uRE+nZ9B6DO03qtMoeZRUHnOC7pfndwx3tV3vY=; b=flshOU2kJnM0B8xXhQPs/a4te9cvvnbAMEHzQglgnuhgXjrlZw8IzKGeARMqxx4PbR NxoubyOYv0Ikbr0pOdEw1eOosMG19Lr++B1DEz4lSLNSks6SRtZ4N5hZj0cXga6YDebX Dw6oG/cCPkqrUoWSZfT7wFyjQMIGDL6XqinRY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=wJPpqnK2vTG+x+m/BopWELdjPxTn93LDUVfLf3aROVoNDP5PeLideEwpnvCjsQ3pfz s9+hljcsOIV4K54fxVI83W+aC4ppcC60mRwi3SkUqv8fbFsVIatsw2Fb7H7flzQaMltE S+31Se1LiJNqVgpIVdBtoiYDLLGiJfBUUPVf4= MIME-Version: 1.0 Received: by 10.151.103.11 with SMTP id f11mr1411651ybm.21.1234574273727; Fri, 13 Feb 2009 17:17:53 -0800 (PST) In-Reply-To: <1233919880.530235.10843.nullmailer@galant.ukfsn.org> References: <1233365217.00068654.1233354838@10.7.7.3> <4988DCCC.80201@mavhome.dp.ua> <4988EBAC.3080202@mavhome.dp.ua> <1233758519.360141.162.nullmailer@galant.ukfsn.org> <1233845167.798942.24919.nullmailer@galant.ukfsn.org> <1233919880.530235.10843.nullmailer@galant.ukfsn.org> Date: Fri, 13 Feb 2009 17:17:53 -0800 Message-ID: From: Maksim Yevmenkin To: Iain Hibbert Content-Type: multipart/mixed; boundary=00151750e7f008ccc00462d6b947 Cc: "freebsd-bluetooth@freebsd.org" Subject: Re: libhci X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Feb 2009 01:17:55 -0000 --00151750e7f008ccc00462d6b947 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Iain, >> anyway, what would you suggest to use instead of dev_id? device name >> (i.e. ubt0)? anything else? cant use bd_addr because (in freebsd at >> least) device has to be "initialized" before bd_addr is known. > > for sure, a generic API would need to use the device name. Internally it > can translate to whatever the local hardware control API uses. > >> i will take a look at ms api. but surely we have ability to send and >> receive hci commands/events and enumerate all radios in the system in >> addition to inquiry, dont you think? > > enumerating the radios is useful, yes, but having a function to set the > afh_map or some other setting? I think that this is only required by the > administrator program (hccontrol in your case) so why does it need to be > in a shared library? > > In a way, its similar for the string functions. What program needs to be > able to print the features list? Only a shell based admin tool in > reality, even a graphical program might want to provide such a feature > list in a different format anyway.. i kinda started to work on hci/bluetooth shims. please take a look at the attached patch. this is basically to implement bt_devname() and bt_devaddr() similar to netbsd and i also added bt_hci_devinfo() and bt_hci_devenum() inspired by linux-bluez. i also plan to add bt_hci_devinquiry() and possibly bt_hci_devreq(), bt_hci_devsend() and bt_hci_devrecv(). the later 2 are to send command and receive event only. thanks, max --00151750e7f008ccc00462d6b947 Content-Type: text/plain; charset=US-ASCII; name="bluetooth.diff.txt" Content-Disposition: attachment; filename="bluetooth.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fr5liqvf0 SW5kZXg6IGRldi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi5jCShyZXZpc2lvbiAwKQorKysgZGV2LmMJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBkZXYuYworICovCisKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDA5IE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28u Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNs dWRlIDxibHVldG9vdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCitzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcKK3sKKwljaGFyCQlkZXZuYW1lW0hDSV9E RVZOQU1FX1NJWkVdOworCWJkYWRkcl90IGNvbnN0CSpiZGFkZHI7Cit9OworCitzdGF0aWMgYnRf aGNpX2RldmVudW1fY2JfdAlidF9kZXZhZGRyX21hdGNoOworCitpbnQKK2J0X2RldmFkZHIoY2hh ciBjb25zdCAqZGV2bmFtZSwgYmRhZGRyX3QgKmFkZHIpCit7CisJc3RydWN0IGJ0X2hjaV9kZXZp bmZvCWRpOworCisJaWYgKGJ0X2hjaV9kZXZpbmZvKGRldm5hbWUsICZkaSkgPCAwKQorCQlyZXR1 cm4gKDApOworCisJaWYgKGFkZHIgIT0gTlVMTCkKKwkJYmRhZGRyX2NvcHkoYWRkciwgJmRpLmJk YWRkcik7CisKKwlyZXR1cm4gKDEpOworfQorCitpbnQKK2J0X2Rldm5hbWUoY2hhciAqZGV2bmFt ZSwgYmRhZGRyX3QgY29uc3QgKmFkZHIpCit7CisJc3RydWN0IGJ0X2RldmFkZHJfbWF0Y2hfYXJn CWFyZzsKKworCW1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7CisJYXJnLmJkYWRkciA9IGFk ZHI7CisKKwlpZiAoYnRfaGNpX2RldmVudW0oMCwgJmJ0X2RldmFkZHJfbWF0Y2gsICZhcmcpIDwg MCkKKwkJcmV0dXJuICgwKTsKKwkKKwlpZiAoYXJnLmRldm5hbWVbMF0gPT0gJ1wwJykgeworCQll cnJubyA9IEVOWElPOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChkZXZuYW1lICE9IE5VTEwp CisJCXN0cmxjcHkoZGV2bmFtZSwgYXJnLmRldm5hbWUsIEhDSV9ERVZOQU1FX1NJWkUpOworCisJ cmV0dXJuICgxKTsKK30KKworc3RhdGljIGludAorYnRfZGV2YWRkcl9tYXRjaChpbnQgcywgc3Ry dWN0IGJ0X2hjaV9kZXZpbmZvIGNvbnN0ICpkaSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBidF9k ZXZhZGRyX21hdGNoX2FyZwkqbSA9IChzdHJ1Y3QgYnRfZGV2YWRkcl9tYXRjaF9hcmcgKilhcmc7 CisKKwlpZiAoIWJkYWRkcl9zYW1lKCZkaS0+YmRhZGRyLCBtLT5iZGFkZHIpKQorCQlyZXR1cm4g KDApOworCisJc3RybGNweShtLT5kZXZuYW1lLCBkaS0+ZGV2bmFtZSwgc2l6ZW9mKG0tPmRldm5h bWUpKTsKKworCXJldHVybiAoMSk7Cit9CisKSW5kZXg6IGhjaS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhj aS5jCShyZXZpc2lvbiAwKQorKysgaGNpLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ2IEBA CisvKgorICogaGNpLmMKKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBNYWtzaW0g WWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0 cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq CisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8Ymx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworc3RhdGljIGNoYXIgKiBidF9oY2lfZGV2Mm5vZGUgKGNoYXIgY29u c3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4pOworCitpbnQKK2J0X2hjaV9k ZXZpbmZvKGNoYXIgY29uc3QgKmRldm5hbWUsIHN0cnVjdCBidF9oY2lfZGV2aW5mbyAqZGkpCit7 CisJdW5pb24geworCQlzdHJ1Y3QgbmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX3N0YXRlCQlyMDsK KwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9iZGFkZHIJCXIxOworCQlzdHJ1Y3Qg bmdfYnRzb2NrZXRfaGNpX3Jhd19ub2RlX2ZlYXR1cmVzCXIyOworCQlzdHJ1Y3QgbmdfYnRzb2Nr ZXRfaGNpX3Jhd19ub2RlX2J1ZmZlcgkJcjM7CisJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3 X25vZGVfc3RhdAkJcjQ7CisJCXN0cnVjdCBuZ19idHNvY2tldF9oY2lfcmF3X25vZGVfbGlua19w b2xpY3lfbWFzayByNTsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9wYWNrZXRf bWFzawlyNjsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9yb2xlX3N3aXRjaAly NzsKKwkJc3RydWN0IG5nX2J0c29ja2V0X2hjaV9yYXdfbm9kZV9kZWJ1ZwkJcjg7CisJfQkJCQkJ CXJwOworCXN0cnVjdCBzb2NrYWRkcl9oY2kJCQkJaGE7CisJaW50CQkJCQkJcywgc3VjY2VzczsK KworCWlmIChkZXZuYW1lID09IE5VTEwgfHwgZGkgPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZB TDsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwltZW1zZXQoJmhhLCAwLCBzaXplb2YoaGEpKTsKKwlo YS5oY2lfbGVuID0gc2l6ZW9mKGhhKTsKKwloYS5oY2lfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwor CisJaWYgKGJ0X2F0b24oZGV2bmFtZSwgJnJwLnIxLmJkYWRkcikpIHsKKwkJaWYgKCFidF9kZXZu YW1lKGhhLmhjaV9ub2RlLCAmcnAucjEuYmRhZGRyKSkKKwkJCXJldHVybiAoMCk7CisJfSBlbHNl IGlmIChidF9oY2lfZGV2Mm5vZGUoZGV2bmFtZSwgaGEuaGNpX25vZGUsCisJCQkJCXNpemVvZiho YS5oY2lfbm9kZSkpID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTlhJTzsKKwkJcmV0dXJuICgwKTsK Kwl9CisKKwlzID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcsIEJMVUVUT09USF9QUk9U T19IQ0kpOworCWlmIChzIDwgMCkKKwkJcmV0dXJuICgwKTsKKworCXN1Y2Nlc3MgPSAwOworCisJ aWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAor CSAgICBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBzaXplb2YoaGEpKSA8IDAp CisJCWdvdG8gYmFkOworCXN0cmxjcHkoZGktPmRldm5hbWUsIGhhLmhjaV9ub2RlLCBzaXplb2Yo ZGktPmRldm5hbWUpKTsKKworCWlmIChpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfU1RB VEUsICZycC5yMCwgc2l6ZW9mKHJwLnIwKSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+c3RhdGUg PSBycC5yMC5zdGF0ZTsKKworCWlmIChpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9HRVRfQkRB RERSLCAmcnAucjEsIHNpemVvZihycC5yMSkpIDwgMCkKKwkJZ290byBiYWQ7CisJYmRhZGRyX2Nv cHkoJmRpLT5iZGFkZHIsICZycC5yMS5iZGFkZHIpOworCQorCWlmIChpb2N0bChzLCBTSU9DX0hD SV9SQVdfTk9ERV9HRVRfRkVBVFVSRVMsICZycC5yMiwgc2l6ZW9mKHJwLnIyKSkgPCAwKQorCQln b3RvIGJhZDsKKwltZW1jcHkoZGktPmZlYXR1cmVzLCBycC5yMi5mZWF0dXJlcywgc2l6ZW9mKGRp LT5mZWF0dXJlcykpOworCisJaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9CVUZG RVIsICZycC5yMywgc2l6ZW9mKHJwLnIzKSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+Y21kX2Zy ZWUgPSBycC5yMy5idWZmZXIuY21kX2ZyZWU7CisJZGktPnNjb19zaXplID0gcnAucjMuYnVmZmVy LnNjb19zaXplOworCWRpLT5zY29fcGt0cyA9IHJwLnIzLmJ1ZmZlci5zY29fcGt0czsKKwlkaS0+ c2NvX2ZyZWUgPSBycC5yMy5idWZmZXIuc2NvX2ZyZWU7CisJZGktPmFjbF9zaXplID0gcnAucjMu YnVmZmVyLmFjbF9zaXplOworCWRpLT5hY2xfcGt0cyA9IHJwLnIzLmJ1ZmZlci5hY2xfcGt0czsK KwlkaS0+YWNsX2ZyZWUgPSBycC5yMy5idWZmZXIuYWNsX2ZyZWU7CisKKwlpZiAoaW9jdGwocywg U0lPQ19IQ0lfUkFXX05PREVfR0VUX1NUQVQsICZycC5yNCwgc2l6ZW9mKHJwLnI0KSkgPCAwKQor CQlnb3RvIGJhZDsKKwlkaS0+Y21kX3NlbnQgPSBycC5yNC5zdGF0LmNtZF9zZW50OworCWRpLT5l dm50X3JlY3YgPSBycC5yNC5zdGF0LmV2bnRfcmVjdjsKKwlkaS0+YWNsX3JlY3YgPSBycC5yNC5z dGF0LmFjbF9yZWN2OworCWRpLT5hY2xfc2VudCA9IHJwLnI0LnN0YXQuYWNsX3NlbnQ7CisJZGkt PnNjb19yZWN2ID0gcnAucjQuc3RhdC5zY29fcmVjdjsKKwlkaS0+c2NvX3NlbnQgPSBycC5yNC5z dGF0LnNjb19zZW50OworCWRpLT5ieXRlc19yZWN2ID0gcnAucjQuc3RhdC5ieXRlc19yZWN2Owor CWRpLT5ieXRlc19zZW50ID0gcnAucjQuc3RhdC5ieXRlc19zZW50OworCisJaWYgKGlvY3RsKHMs IFNJT0NfSENJX1JBV19OT0RFX0dFVF9MSU5LX1BPTElDWV9NQVNLLAorCQkJJnJwLnI1LCBzaXpl b2YocnAucjUpKSA8IDApCisJCWdvdG8gYmFkOworCWRpLT5saW5rX3BvbGljeV9pbmZvID0gcnAu cjUucG9saWN5X21hc2s7CisKKwlpZiAoaW9jdGwocywgU0lPQ19IQ0lfUkFXX05PREVfR0VUX1BB Q0tFVF9NQVNLLAorCQkJJnJwLnI2LCBzaXplb2YocnAucjYpKSA8IDApCisJCWdvdG8gYmFkOwor CWRpLT5wYWNrZXRfdHlwZV9pbmZvID0gcnAucjYucGFja2V0X21hc2s7CisKKwkgaWYgKGlvY3Rs KHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9ST0xFX1NXSVRDSCwKKwkJCSZycC5yNywgc2l6ZW9m KHJwLnI3KSkgPCAwKQorCQlnb3RvIGJhZDsKKwlkaS0+cm9sZV9zd2l0Y2hfaW5mbyA9IHJwLnI3 LnJvbGVfc3dpdGNoOworCisJaWYgKGlvY3RsKHMsIFNJT0NfSENJX1JBV19OT0RFX0dFVF9ERUJV RywgJnJwLnI4LCBzaXplb2YocnAucjgpKSA8IDApCisJCWdvdG8gYmFkOworCWRpLT5kZWJ1ZyA9 IHJwLnI4LmRlYnVnOworCisJc3VjY2VzcyA9IDE7CitiYWQ6CisJY2xvc2Uocyk7CisKKwlyZXR1 cm4gKHN1Y2Nlc3MpOworfQorCitpbnQKK2J0X2hjaV9kZXZlbnVtKGludCBsaW1pdCwgYnRfaGNp X2RldmVudW1fY2JfdCBjYiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZ19idHNvY2tldF9oY2lf cmF3X25vZGVfbGlzdF9uYW1lcwlycDsKKwlzdHJ1Y3QgYnRfaGNpX2RldmluZm8JCQkJZGk7CisJ c3RydWN0IHNvY2thZGRyX2hjaQkJCQloYTsKKwlpbnQJCQkJCQlzLCBpOworCisJaWYgKGNiID09 IE5VTEwgfHwgbGltaXQgPCAwKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKDApOwor CX0KKworCXJwLm51bV9uYW1lcyA9IChsaW1pdCA+IDApPyBsaW1pdCA6IDE2OwkvKiBYWFggd2h5 IDE2Pz8gKi8KKwlycC5uYW1lcyA9IChzdHJ1Y3Qgbm9kZWluZm8gKikgY2FsbG9jKHJwLm51bV9u YW1lcywKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgbm9kZWluZm8pKTsKKwlpZiAocnAubmFtZXMgPT0g TlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwltZW1zZXQo JmhhLCAwLCBzaXplb2YoaGEpKTsKKwloYS5oY2lfbGVuID0gc2l6ZW9mKGhhKTsKKwloYS5oY2lf ZmFtaWx5ID0gQUZfQkxVRVRPT1RIOworCWhhLmhjaV9ub2RlWzBdID0gJ3gnOworCisJcyA9IHNv Y2tldChQRl9CTFVFVE9PVEgsIFNPQ0tfUkFXLCBCTFVFVE9PVEhfUFJPVE9fSENJKTsKKwlpZiAo cyA8IDApIHsKKwkJZnJlZShycC5uYW1lcyk7CisKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAo YmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZoYSwgc2l6ZW9mKGhhKSkgPCAwIHx8CisJICAg IGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNpemVvZihoYSkpIDwgMCB8fAor CSAgICBpb2N0bChzLCBTSU9DX0hDSV9SQVdfTk9ERV9MSVNUX05BTUVTLCAmcnAsIHNpemVvZihy cCkpIDwgMCkgeworCQljbG9zZShzKTsKKwkJZnJlZShycC5uYW1lcyk7CisKKwkJcmV0dXJuICgw KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcnAubnVtX25hbWVzOyBpICsrKSB7CisJCWlmIChi dF9oY2lfZGV2aW5mbyhycC5uYW1lc1tpXS5uYW1lLCAmZGkpIDwgMCkKKwkJCWNvbnRpbnVlOwor CisJCXN0cmxjcHkoaGEuaGNpX25vZGUsIHJwLm5hbWVzW2ldLm5hbWUsIHNpemVvZihoYS5oY2lf bm9kZSkpOworCisJCWlmIChiaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhhLCBzaXplb2Yo aGEpKSA8IDAgfHwKKwkJICAgIGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmaGEsIHNp emVvZihoYSkpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoKmNiKShzLCAmZGksIGFyZykg PiAwKQorCQkJYnJlYWs7CisJfQorCisJY2xvc2UgKHMpOworCWZyZWUocnAubmFtZXMpOworCisJ cmV0dXJuICgxKTsKK30KKworc3RhdGljIGNoYXIgKgorYnRfaGNpX2RldjJub2RlKGNoYXIgY29u c3QgKmRldm5hbWUsIGNoYXIgKm5vZGVuYW1lLCBpbnQgbm5sZW4pCit7CisJc3RhdGljIGNoYXIg Y29uc3QgKgkgYnRfZGV2X3ByZWZpeFtdID0geworCQkiYnRjY2MiLAkvKiAzQ29tIEJsdWV0b290 aCBQQy1DQVJEICovCisJCSJoNCIsCQkvKiBVQVJUL3NlcmlhbCBCbHVldG9vdGggZGV2aWNlcyAq LworCQkidWJ0IiwJCS8qIEJsdWV0b290aCBVU0IgZGV2aWNlcyAqLworCQlOVUxMCQkvKiBzaG91 bGQgYmUgbGFzdCAqLworCX07CisKKwlzdGF0aWMgY2hhcgkJX25vZGVuYW1lW0hDSV9ERVZOQU1F X1NJWkVdOworCWNoYXIgY29uc3QJCSoqcDsKKwljaGFyCQkJKmVwOworCWludAkJCXBsZW4sIHVu aXQ7CisKKwlpZiAobm9kZW5hbWUgPT0gTlVMTCkgeworCQlub2RlbmFtZSA9IF9ub2RlbmFtZTsK KwkJbm5sZW4gPSBIQ0lfREVWTkFNRV9TSVpFOworCX0KKworCWZvciAocCA9IGJ0X2Rldl9wcmVm aXg7ICpwICE9IE5VTEw7IHAgKyspIHsKKwkJcGxlbiA9IHN0cmxlbigqcCk7CisJCWlmIChzdHJu Y21wKGRldm5hbWUsICpwLCBwbGVuKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJdW5pdCA9IHN0 cnRvdWwoZGV2bmFtZSArIHBsZW4sICZlcCwgMTApOworCQlpZiAoKmVwICE9ICdcMCcgJiYKKwkJ ICAgIHN0cmNtcChlcCwgImhjaSIpICE9IDAgJiYKKwkJICAgIHN0cmNtcChlcCwgImwyY2FwIikg IT0gMCkKKwkJCXJldHVybiAoTlVMTCk7CS8qIGNhbid0IG1ha2Ugc2Vuc2Ugb2YgZGV2aWNlIG5h bWUgKi8KKworCQlzbnByaW50Zihub2RlbmFtZSwgbm5sZW4sICIlcyV1aGNpIiwgKnAsIHVuaXQp OworCisJCXJldHVybiAobm9kZW5hbWUpOworCX0KKworCXJldHVybiAoTlVMTCk7Cit9CisKSW5k ZXg6IGJsdWV0b290aC4zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0b290aC4zCShyZXZpc2lvbiAxODgx MDgpCisrKyBibHVldG9vdGguMwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS5cIiBD b3B5cmlnaHQgKGMpIDIwMDMgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+ CisuIENvcHlyaWdodCAoYykgMjAwMy0yMDA5IE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5A eWFob28uY29tPgogLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAuXCIKIC5cIiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK QEAgLTI1LDcgKzI1LDcgQEAKIC5cIiAkSWQ6IGJsdWV0b290aC4zLHYgMS41IDIwMDMvMDUvMjAg MjM6MDQ6MzAgbWF4IEV4cCAkCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBBdWd1c3QgMTMsIDIw MDgKKy5EZCBGZWJydWFyeSAxMywgMjAwOQogLkR0IEJMVUVUT09USCAzCiAuT3MKIC5TaCBOQU1F CkBAIC03NCw2ICs3NCwxNiBAQAogLkZ0IGNvbnN0IGNoYXIgKgogLkZuIGJ0X250b2EgImNvbnN0 IGJkYWRkcl90ICpiYSIgImNoYXIgKnN0ciIKIC5GdCBpbnQKKy5GbiBidF9kZXZhZGRyICJjb25z dCBjaGFyICpkZXZuYW1lIiAiYmRhZGRyX3QgKmFkZHIiCisuRnQgaW50CisuRm4gYnRfZGV2bmFt ZSAiY2hhciAqZGV2bmFtZSIgImNvbnN0IGJkYWRkcl90ICphZGRyIgorLkZ0IGludAorLkZuIChi dF9oY2lfZGV2ZW51bV9jYl90KSAiaW50IHMiICJzdHJ1Y3QgYnRfaGNpX2RldmluZm8gY29uc3Qg KmRpIiAidm9pZCAqYXJnIgorLkZ0IGludAorLkZuIGJ0X2hjaV9kZXZpbmZvICJjaGFyIGNvbnN0 ICpkZXZuYW1lIiAic3RydWN0IGJ0X2hjaV9kZXZpbmZvICpkaSIKKy5GdCBpbnQKKy5GbiBidF9o Y2lfZGV2ZW51bSAiaW50IGxpbWl0IiAiYnRfaGNpX2RldmVudW1fY2JfdCAqY2IiICJ2b2lkICph cmciCisuRnQgaW50CiAuRm4gYmRhZGRyX3NhbWUgImNvbnN0IGJkYWRkcl90ICphIiAiY29uc3Qg YmRhZGRyX3QgKmIiCiAuRnQgaW50CiAuRm4gYmRhZGRyX2FueSAiY29uc3QgYmRhZGRyX3QgKmEi CkBAIC0xOTcsNiArMjA3LDExMyBAQAogSWYgbm8gYnVmZmVyIHdhcyBwcm92aWRlZCB0aGVuIGlu dGVybmFsIHN0YXRpYyBidWZmZXIgd2lsbCBiZSB1c2VkLgogLlBwCiBUaGUKKy5GbiBidF9kZXZh ZGRyCitmdW5jdGlvbiBpbnRlcnByZXRzIHRoZSBzcGVjaWZpZWQKKy5GYSBkZXZuYW1lCitzdHJp bmcgYXMgdGhlIGFkZHJlc3Mgb3IgZGV2aWNlIG5hbWUgb2YgYSBCbHVldG9vdGggZGV2aWNlIG9u IHRoZSBsb2NhbCBzeXN0ZW0sCithbmQgcGxhY2VzIHRoZSBkZXZpY2UgYWRkcmVzcyBpbiB0aGUg cHJvdmlkZWQKKy5GYSBiZGFkZHIgLAoraWYgYW55LgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMSBp ZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgaW50ZXJwcmV0ZWQsCitvciAwIGlmIHRoZSBz dHJpbmcgZGlkIG5vdCBtYXRjaCBhbnkgbG9jYWwgZGV2aWNlLgorVGhlCisuRm4gYnRfZGV2bmFt ZQorZnVuY3Rpb24gdGFrZXMgYSBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MgYW5kIGNvcGllcyB0 aGUgbG9jYWwgZGV2aWNlCituYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGFkZHJlc3MgaW50byB0 aGUgYnVmZmVyIHByb3ZpZGVkLAoraWYgYW55LgorQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgcHJv dmlkZWQgYnVmZmVyIGlzIGF0IGxlYXN0CisuRHYgSENJX0RFVk5BTUVfU0laRQorY2hhcmFjdGVy cyBpbiBzaXplLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZSBkZXZpY2Ugd2FzIGZv dW5kLAorb3RoZXJ3aXNlIDAuCisuUHAKK1RoZQorLkZuIGJ0X2hjaV9kZXZpbmZvCitmdW5jdGlv biBwb3B1bGF0ZXMgcHJvZGl2ZGVkCisuVnQgYnRfaGNpX2RldmluZm8KK3N0cnVjdHVyZSB3aXRo IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBCbHVldG9vdGggZGV2aWNlCisuRmEgZGV2bmFtZSAuCitU aGUgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gc3VjY2Vzc2Z1bCBvdGhlcndpc2UgMC4KK1RoZQor LlZ0IGJ0X2hjaV9kZXZpbmZvCitzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzCisuQmQg LWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKK3N0cnVjdCBidF9oY2lfZGV2aW5mbworeworICAgICAg ICBjaGFyICAgICAgICAgICAgZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworICAgICAgICB1 aW50MzJfdCAgICAgICAgc3RhdGU7CisKKyAgICAgICAgYmRhZGRyX3QgICAgICAgIGJkYWRkcjsK KyAgICAgICAgdWludDE2X3QgICAgICAgIF9yZXNlcnZlZDA7CisKKyAgICAgICAgdWludDhfdCAg ICAgICAgIGZlYXR1cmVzW0hDSV9ERVZGRUFUVVJFU19TSVpFXTsKKworICAgICAgICAvKiBidWZm ZXIgaW5mbyAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgX3Jlc2VydmVkMTsKKyAgICAgICAg dWludDE2X3QgICAgICAgIGNtZF9mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgc2NvX3Np emU7CisgICAgICAgIHVpbnQxNl90ICAgICAgICBzY29fcGt0czsKKyAgICAgICAgdWludDE2X3Qg ICAgICAgIHNjb19mcmVlOworICAgICAgICB1aW50MTZfdCAgICAgICAgYWNsX3NpemU7CisgICAg ICAgIHVpbnQxNl90ICAgICAgICBhY2xfcGt0czsKKyAgICAgICAgdWludDE2X3QgICAgICAgIGFj bF9mcmVlOworCisgICAgICAgIC8qIHN0YXRzICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICBj bWRfc2VudDsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGV2bnRfcmVjdjsKKyAgICAgICAgdWlu dDMyX3QgICAgICAgIGFjbF9yZWN2OworICAgICAgICB1aW50MzJfdCAgICAgICAgYWNsX3NlbnQ7 CisgICAgICAgIHVpbnQzMl90ICAgICAgICBzY29fcmVjdjsKKyAgICAgICAgdWludDMyX3QgICAg ICAgIHNjb19zZW50OworICAgICAgICB1aW50MzJfdCAgICAgICAgYnl0ZXNfcmVjdjsKKyAgICAg ICAgdWludDMyX3QgICAgICAgIGJ5dGVzX3NlbnQ7CisKKyAgICAgICAgLyogbWlzYy9zcGVjaWZp YyAqLworICAgICAgICB1aW50MzJfdCAgICAgICAgbGlua19wb2xpY3lfaW5mbzsKKyAgICAgICAg dWludDMyX3QgICAgICAgIHBhY2tldF90eXBlX2luZm87CisgICAgICAgIHVpbnQzMl90ICAgICAg ICByb2xlX3N3aXRjaF9pbmZvOworICAgICAgICB1aW50MzJfdCAgICAgICAgZGVidWc7Cit9Owor LkVkCisuUHAKK1RoZQorLkZuIGJ0X2hjaV9kZXZlbnVtCitmdW5jdGlvbiBlbnVtZXJhdGVzIHVw IHRvCisuRmEgbGltaXQKK0JsdWV0b290aCBkZXZpY2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4K K0lmIHBhc3NlZAorLkZhIGxpbWl0CitpcyB6ZXJvLCB0aGUgaW50ZXJuYWwgZGVmYXVsdCBsaW1p dCB3aWxsIGJlIHVzZWQuCitGb3IgZXZlcnkgZGV2aWNlIGZvdW5kLAordGhlIGZ1bmN0aW9uIHdp bGwgY2FsbCBwcm92aWRlZAorLkZhIGNiCitjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBzaG91bGQg YmUgb2YKKy5WdCBidF9oY2lfZGV2ZW51bV9jYl90Cit0eXBlLgorVGhlIGNhbGxiYWNrIGZ1bmN0 aW9uIGlzIHBhc3NlZCBhIGNvbm5lY3RlZAorLkR2IEhDSQorc29ja2V0CisuRmEgcyAsCitmdWxs eSBwb3B1bGF0ZWQKKy5WdCBidF9oY2lfZGV2aW5mbworc3RydWN0dXJlCisuRmEgZGkKK2FuZAor LkZhIGFyZworYXJndW1lbnQgcHJvdmlkZWQgdG8gdGhlCisuRm4gYnRfaGNpX2RldmVudW0gLgor VGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBzdG9wIGVudW1lcmF0aW9uIGJ5IHJldHVybmluZyBh IHZhbHVlIG9mIGxlc3MKK29yIGVxdWFsIHRvIHplcm8uCitUaGUKKy5GbiBidF9oY2lfZGV2ZW51 bQordXNlcyB0aGUgc2FtZSBzb2NrZXQgZm9yIHRoZSBkdXJhdGlvbiBvZiBlbnVtZXJhdGlvbi4K K1RoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIHNvY2tldCwKK3Bhc3NlZCB0byB0aGUg Y2FsbGJhY2sgZnVuY3Rpb24sCit3aWxsIGJlIGJvdW5kIGFuZCBjb25uZWN0ZWQgdG8gdGhlIEJs dWV0b290aCBkZXZpY2UgYmVpbmcgZW51bWVyYXRlZC4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDEg d2hlbiBlbnVtZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvdGhlcndpc2UgMC4KKy5QcAorVGhlCiAu Rm4gYmRhZGRyX3NhbWUgLAogLkZuIGJkYWRkcl9hbnkKIGFuZApAQCAtMjg3LDcgKzQwNCw4IEBA CiAuWHIgZ2V0cHJvdG9ieW51bWJlciAzICwKIC5YciBoZXJyb3IgMyAsCiAuWHIgaW5ldF9hdG9u IDMgLAotLlhyIGluZXRfbnRvYSAzCisuWHIgaW5ldF9udG9hIDMgLAorLlhyIG5nX2hjaSA0CiAu U2ggQ0FWRUFUCiBUaGUKIC5GbiBidF9nZXRob3N0ZW50CkluZGV4OiBibHVldG9vdGguYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBibHVldG9vdGguYwkocmV2aXNpb24gMTg4MTA4KQorKysgYmx1ZXRvb3RoLmMJ KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw5IEBACiAvKgogICogYmx1ZXRvb3RoLmMKLSAqCi0g KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlh aG9vLmNvbT4KKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA5IE1ha3NpbSBZ ZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKSW5kZXg6IGJsdWV0b290aC5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJsdWV0 b290aC5oCShyZXZpc2lvbiAxODgxMDgpCisrKyBibHVldG9vdGguaAkod29ya2luZyBjb3B5KQpA QCAtMSw3ICsxLDkgQEAKIC8qCiAgKiBibHVldG9vdGguaAotICoKLSAqIENvcHlyaWdodCAoYykg MjAwMS0yMDAzIE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPgorICovCisK Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDkgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1l bmtpbkB5YWhvby5jb20+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dApAQCAtMzUsOSArMzcsMTIgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxz eXMvYml0c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPHN5cy9p b2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvdW4uaD4KKyNp bmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bmV0Z3JhcGgv bmdfbWVzc2FnZS5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2hj aS5oPgogI2luY2x1ZGUgPG5ldGdyYXBoL2JsdWV0b290aC9pbmNsdWRlL25nX2wyY2FwLmg+CiAj aW5jbHVkZSA8bmV0Z3JhcGgvYmx1ZXRvb3RoL2luY2x1ZGUvbmdfYnRzb2NrZXQuaD4KQEAgLTcy LDYgKzc3LDYwIEBACiBjaGFyIGNvbnN0ICogICAgICBidF9udG9hICAgICAgICAgICAgIChiZGFk ZHJfdCBjb25zdCAqYmEsIGNoYXIgKnN0cik7CiBpbnQgICAgICAgICAgICAgICBidF9hdG9uICAg ICAgICAgICAgIChjaGFyIGNvbnN0ICpzdHIsIGJkYWRkcl90ICpiYSk7CiAKKy8qIGJ0X2RldlhY WFgoKSBmdW5jdGlvbnMgKGluc3BpcmVkIGJ5IE5ldEJTRCkgKi8KK2ludCAgICAgICAgICAgICAg IGJ0X2RldmFkZHIgICAgICAgICAgKGNoYXIgY29uc3QgKmRldm5hbWUsIGJkYWRkcl90ICphZGRy KTsKK2ludCAgICAgICAgICAgICAgIGJ0X2Rldm5hbWUgICAgICAgICAgKGNoYXIgKmRldm5hbWUs IGJkYWRkcl90IGNvbnN0ICphZGRyKTsKKworLyogCisgKiBCbHVldG9vdGggSENJIGZ1bmN0aW9u cworICovCisKKyNkZWZpbmUJSENJX0RFVk5BTUVfU0laRQkJTkdfTk9ERVNJWgorI2RlZmluZQlI Q0lfREVWRkVBVFVSRVNfU0laRQkJTkdfSENJX0ZFQVRVUkVTX1NJWkUKKworc3RydWN0IGJ0X2hj aV9kZXZpbmZvCit7CisJY2hhcgkJZGV2bmFtZVtIQ0lfREVWTkFNRV9TSVpFXTsKKworCXVpbnQz Ml90CXN0YXRlOworCisJYmRhZGRyX3QJYmRhZGRyOworCXVpbnQxNl90CV9yZXNlcnZlZDA7CisK Kwl1aW50OF90CQlmZWF0dXJlc1tIQ0lfREVWRkVBVFVSRVNfU0laRV07CisKKwkvKiBidWZmZXIg aW5mbyAqLworCXVpbnQxNl90CV9yZXNlcnZlZDE7CisJdWludDE2X3QJY21kX2ZyZWU7CisJdWlu dDE2X3QJc2NvX3NpemU7CisJdWludDE2X3QJc2NvX3BrdHM7CisJdWludDE2X3QJc2NvX2ZyZWU7 CisJdWludDE2X3QJYWNsX3NpemU7CisJdWludDE2X3QJYWNsX3BrdHM7CisJdWludDE2X3QJYWNs X2ZyZWU7CisKKwkvKiBzdGF0cyAqLworCXVpbnQzMl90CWNtZF9zZW50OworCXVpbnQzMl90CWV2 bnRfcmVjdjsKKwl1aW50MzJfdAlhY2xfcmVjdjsKKwl1aW50MzJfdAlhY2xfc2VudDsKKwl1aW50 MzJfdAlzY29fcmVjdjsKKwl1aW50MzJfdAlzY29fc2VudDsKKwl1aW50MzJfdAlieXRlc19yZWN2 OworCXVpbnQzMl90CWJ5dGVzX3NlbnQ7CisKKwkvKiBtaXNjL3NwZWNpZmljICovCisJdWludDMy X3QJbGlua19wb2xpY3lfaW5mbzsKKwl1aW50MzJfdAlwYWNrZXRfdHlwZV9pbmZvOworCXVpbnQz Ml90CXJvbGVfc3dpdGNoX2luZm87CisJdWludDMyX3QJZGVidWc7Cit9OworCit0eXBlZGVmIGlu dAkoYnRfaGNpX2RldmVudW1fY2JfdCkoaW50LHN0cnVjdCBidF9oY2lfZGV2aW5mbyBjb25zdCAq LHZvaWQgKik7CisKK2ludAkJYnRfaGNpX2RldmluZm8gKGNoYXIgY29uc3QgKmRldm5hbWUsIHN0 cnVjdCBidF9oY2lfZGV2aW5mbyAqZGkpOworaW50CQlidF9oY2lfZGV2ZW51bSAoaW50IGxpbWl0 LCBidF9oY2lfZGV2ZW51bV9jYl90ICpjYiwgdm9pZCAqYXJnKTsKKwogLyoKICAqIGJkYWRkciB1 dGlsaXR5IGZ1bmN0aW9ucyAoZnJvbSBOZXRCU0QpCiAgKi8KSW5kZXg6IE1ha2VmaWxlCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIE1ha2VmaWxlCShyZXZpc2lvbiAxODgxMDgpCisrKyBNYWtlZmlsZQkod29ya2lu ZyBjb3B5KQpAQCAtNyw5ICs3LDExIEBACiBXQVJOUz89CQkyCiBDRkxBR1MrPQktSSR7LkNVUkRJ Un0gLUkkey5DVVJESVJ9Ly4uLy4uL3N5cwogCitERUJVR19GTEFHUz0JLWcKKwogU0hMSUJfTUFK T1I9CTMKIAotU1JDUz0JCWJsdWV0b290aC5jCitTUkNTPQkJYmx1ZXRvb3RoLmMgZGV2LmMgaGNp LmMKIElOQ1M9CQlibHVldG9vdGguaAogCiBNTElOS1MrPQlibHVldG9vdGguMyBidF9nZXRob3N0 YnluYW1lLjMKQEAgLTI3LDYgKzI5LDEyIEBACiBNTElOS1MrPQlibHVldG9vdGguMyBidF9udG9h LjMKIE1MSU5LUys9CWJsdWV0b290aC4zIGJ0X2F0b24uMwogCitNTElOS1MrPQlibHVldG9vdGgu MyBidF9kZXZhZGRyLjMKK01MSU5LUys9CWJsdWV0b290aC4zIGJ0X2Rldm5hbWUuMworCitNTElO S1MrPQlibHVldG9vdGguMyBidF9oY2lfZGV2aW5mby4zCitNTElOS1MrPQlibHVldG9vdGguMyBi dF9oY2lfZGV2ZW51bS4zCisKIE1MSU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9zYW1lLjMKIE1M SU5LUys9CWJsdWV0b290aC4zIGJkYWRkcl9hbnkuMwogTUxJTktTKz0JYmx1ZXRvb3RoLjMgYmRh ZGRyX2NvcHkuMwo= --00151750e7f008ccc00462d6b947--