Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n820Z-0002rf-4k for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jan 2022 15:27:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n820X-0002zj-Mx for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jan 2022 15:27:21 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n820W-0002y7-E4 for pgsql-hackers@lists.postgresql.org; Thu, 13 Jan 2022 15:27:21 +0000 Received: from smtp03.optiver.com ([195.246.114.70]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n820R-0005Jk-Mr for pgsql-hackers@lists.postgresql.org; Thu, 13 Jan 2022 15:27:19 +0000 Received: from pps.filterd (smtp03.optiver.com [127.0.0.1]) by smtp03.optiver.com (8.16.0.42/8.16.0.42) with SMTP id 20DFHARR000783; Thu, 13 Jan 2022 16:27:10 +0100 Received: from opammb0561.comp.optiver.com (opammb0561.comp.optiver.com [10.131.160.1]) by smtp03.optiver.com with ESMTP id 3dhhgus8j4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 13 Jan 2022 16:27:10 +0100 Received: from opammb0562.comp.optiver.com (10.131.160.2) by opammb0561.comp.optiver.com (10.131.160.1) with Microsoft SMTP Server (TLS) id 15.0.1497.24; Thu, 13 Jan 2022 16:27:08 +0100 Received: from opammb0562.comp.optiver.com ([fe80::78b2:4c74:ab37:5362]) by opammb0562.comp.optiver.com ([fe80::78b2:4c74:ab37:5362%17]) with mapi id 15.00.1497.024; Thu, 13 Jan 2022 16:27:08 +0100 From: Floris Van Nee To: Julien Rouhaud CC: Peter Geoghegan , Tom Lane , "Jesper Pedersen" , Dmitry Dolgov <9erthalion6@gmail.com>, Andy Fan , PostgreSQL Hackers Thread-Topic: MDAM techniques and Index Skip Scan patch [External] Thread-Index: AQHXxurUGKphn/J7bke3TjKa9c4Y+Kvgj7eQgICkdACAAF8yYA== Date: Thu, 13 Jan 2022 15:27:08 +0000 Message-ID: <25e9af19f3374cb7ad05a692f616a3ab@opammb0562.comp.optiver.com> References: <2f26e1e475364ab7b23f466e4a4f4392@opammb0562.comp.optiver.com> <20220113103612.k6lzyq6b3lhoocbq@jrouhaud> In-Reply-To: <20220113103612.k6lzyq6b3lhoocbq@jrouhaud> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.131.160.182] x-tm-as-product-ver: SMEX-14.0.0.3031-8.6.1018-26652.001 x-tm-as-result: No-10--0.272100-5.000000 x-tmase-matchedrid: 5+1rHnqhWUTuo96mfIBuogrcxrzwsv5u3dCmvEa6IiFJkYDIfDuRn01N J2MN+nPkbSL9AN4UjluIGsyHgNfUOQ3JzFwPEgwjKNfRqDeFqBgWVvwM7aO0LOxaM7+U8PZJgxs fzkNRlfIRTILTyAA+ovoLR4+zsDTttrrTuahHzlGuLrXenqvFhnnxlO1CUuHRS6W02suwoTSgI9 678O8jnRpef7Eu6kkTYQxR5g8eYUSLozdGv+c27/fZ83q+P6s4bRSzG15ilhVTybtzTG9z95BXq qWM3uVaO8Z/GeP4CluQD5jUYah8ob7rweoAIK8o x-tm-as-user-approved-sender: Yes x-tm-as-user-blocked-sender: No x-tmase-result: 10--0.272100-5.000000 x-tmase-version: SMEX-14.0.0.3031-8.6.1018-26652.001 x-tm-snts-smtp: 28CB24C06DC2FFA6285A8908E2E15BCE915CED713C39AC904B5ABD896BE189BA2000:8 Content-Type: multipart/mixed; boundary="_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_" MIME-Version: 1.0 Subject: RE: MDAM techniques and Index Skip Scan patch X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.816 definitions=2022-01-13_05:2022-01-12,2022-01-13 signatures=0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable >=20 > Could you send a rebased version? In the meantime I will change the stat= us > on the cf app to Waiting on Author. Attached a rebased version. --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: application/octet-stream; name="v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch" Content-Description: v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch Content-Disposition: attachment; filename="v9-0001-Introduce-RelOptInfo-notnullattrs-attribute.patch"; size=4935; creation-date="Thu, 13 Jan 2022 15:10:50 GMT"; modification-date="Thu, 13 Jan 2022 15:10:50 GMT" Content-Transfer-Encoding: base64 RnJvbSBmYzI4NTBhOTcyYmUyZWY3NzFhMmMwMmEzNTMxZDVmYWU5ZTM4NzE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFN1biwgMyBNYXkgMjAyMCAyMjozNzo0NiArMDgw MApTdWJqZWN0OiBbUEFUQ0ggMS81XSBJbnRyb2R1Y2UgUmVsT3B0SW5mby0+bm90bnVsbGF0dHJz IGF0dHJpYnV0ZQoKVGhlIG5vdG51bGxhdHRycyBpcyBjYWxjdWxhdGVkIGZyb20gY2F0YWxvZyBh bmQgcnVuLXRpbWUgcXVlcnkuIFRoYXQKaW5mb21hdGlvbiBpcyB0cmFuc2xhdGVkIHRvIGNoaWxk IHJlbGF0aW9uIGFzIHdlbGwgZm9yIHBhcnRpdGlvbmVkCnRhYmxlLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIHwgMTAgKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICB8IDEwICsrKysrKysrKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgMiArKwogNCBmaWxlcyBj aGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKaW5kZXggMTY5YjFkNTNmYy4uYzg1MTk5NTYxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jCkBAIC05OTksNiArOTk5LDcgQEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsK IAkJTGlzdENlbGwgICAqcGFyZW50dmFyczsKIAkJTGlzdENlbGwgICAqY2hpbGR2YXJzOworCQlp bnQgaSA9IC0xOwogCiAJCS8qIGFwcGVuZF9yZWxfbGlzdCBjb250YWlucyBhbGwgYXBwZW5kIHJl bHM7IGlnbm9yZSBvdGhlcnMgKi8KIAkJaWYgKGFwcGluZm8tPnBhcmVudF9yZWxpZCAhPSBwYXJl bnRSVGluZGV4KQpAQCAtMTA1NSw2ICsxMDU2LDM2IEBAIHNldF9hcHBlbmRfcmVsX3NpemUoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICAgKE5vZGUgKikgcmVs LT5yZWx0YXJnZXQtPmV4cHJzLAogCQkJCQkJCQkgICAxLCAmYXBwaW5mbyk7CiAKKwkJLyogQ29w eSBub3RudWxsYXR0cnMuICovCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWwtPm5v dG51bGxhdHRycywgaSkpID4gMCkKKwkJeworCQkJQXR0ck51bWJlciBhdHRubyA9IGkgKyBGaXJz dExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkJQXR0ck51bWJlciBjaGlsZF9hdHRu bzsKKwkJCWlmIChhdHRubyA9PSAwKQorCQkJeworCQkJCS8qIFdob2xlIHJvdyBpcyBub3QgbnVs bCwgc28gbXVzdCBiZSBzYW1lIGZvciBjaGlsZCAqLworCQkJCWNoaWxkcmVsLT5ub3RudWxsYXR0 cnMgPSBibXNfYWRkX21lbWJlcihjaGlsZHJlbC0+bm90bnVsbGF0dHJzLAorCQkJCQkJCQkJCQkJ CQlhdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJCWJyZWFr OworCQkJfQorCQkJaWYgKGF0dG5vIDwgMCApCisJCQkJLyogbm8gbmVlZCB0byB0cmFuc2xhdGUg c3lzdGVtIGNvbHVtbiAqLworCQkJCWNoaWxkX2F0dG5vID0gYXR0bm87CisJCQllbHNlCisJCQl7 CisJCQkJTm9kZSAqIG5vZGUgPSBsaXN0X250aChhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMsIGF0 dG5vIC0gMSk7CisJCQkJaWYgKCFJc0Eobm9kZSwgVmFyKSkKKwkJCQkJLyogVGhpcyBtYXkgaGFw cGVucyBhdCBVTklPTiBjYXNlLCBsaWtlIChTRUxFQ1QgYSBGUk9NIHQxIFVOSU9OIFNFTEVDVCBh ICsgMworCQkJCQkgKiBGUk9NIHQyKSB0IGFuZCB3ZSBrbm93IHQuYSBpcyBub3QgbnVsbAorCQkJ CQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJY2hpbGRfYXR0bm8gPSBjYXN0Tm9kZShWYXIsIG5v ZGUpLT52YXJhdHRubzsKKwkJCX0KKworCQkJY2hpbGRyZWwtPm5vdG51bGxhdHRycyA9IGJtc19h ZGRfbWVtYmVyKGNoaWxkcmVsLT5ub3RudWxsYXR0cnMsCisJCQkJCQkJCQkJCQkJY2hpbGRfYXR0 bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJfQorCiAJCS8qCiAJ CSAqIFdlIGhhdmUgdG8gbWFrZSBjaGlsZCBlbnRyaWVzIGluIHRoZSBFcXVpdmFsZW5jZUNsYXNz IGRhdGEKIAkJICogc3RydWN0dXJlcyBhcyB3ZWxsLiAgVGhpcyBpcyBuZWVkZWQgZWl0aGVyIGlm IHRoZSBwYXJlbnQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRz cGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXggMDIz ZWZiYWYwOS4uZmI1ODBkZjYxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFu LmMKQEAgLTgzMSw2ICs4MzEsMTYgQEAgZGVjb25zdHJ1Y3RfcmVjdXJzZShQbGFubmVySW5mbyAq cm9vdCwgTm9kZSAqanRub2RlLCBib29sIGJlbG93X291dGVyX2pvaW4sCiAJCXsKIAkJCU5vZGUJ ICAgKnF1YWwgPSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKKwkJCS8qIFNldCB0aGUgbm90IG51bGwg aW5mbyBub3cgKi8KKwkJCUxpc3RDZWxsCSpsYzsKKwkJCUxpc3QJCSpub25fbnVsbGFibGVfdmFy cyA9IGZpbmRfbm9ubnVsbGFibGVfdmFycyhxdWFsKTsKKwkJCWZvcmVhY2gobGMsIG5vbl9udWxs YWJsZV92YXJzKQorCQkJeworCQkJCVZhciAqdmFyID0gbGZpcnN0X25vZGUoVmFyLCBsYyk7CisJ CQkJUmVsT3B0SW5mbyAqcmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVt2YXItPnZhcm5vXTsK KwkJCQlyZWwtPm5vdG51bGxhdHRycyA9IGJtc19hZGRfbWVtYmVyKHJlbC0+bm90bnVsbGF0dHJz LAorCQkJCQkJCQkJCQkJICAgdmFyLT52YXJhdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXIpOworCQkJfQogCQkJZGlzdHJpYnV0ZV9xdWFsX3RvX3JlbHMocm9vdCwgcXVh bCwKIAkJCQkJCQkJCWJlbG93X291dGVyX2pvaW4sIEpPSU5fSU5ORVIsCiAJCQkJCQkJCQlyb290 LT5xdWFsX3NlY3VyaXR5X2xldmVsLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmlu ZGV4IDUzNWZhMDQxYWQuLjBmZGI4ZTlhZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFu Y2F0LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCVJlbGF0aW9uCXJl bGF0aW9uOwogCWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3MgPSBOSUw7CisJ aW50CQkJaTsKIAogCS8qCiAJICogV2UgbmVlZCBub3QgbG9jayB0aGUgcmVsYXRpb24gc2luY2Ug aXQgd2FzIGFscmVhZHkgbG9ja2VkLCBlaXRoZXIgYnkKQEAgLTQ3MSw2ICs0NzIsMTUgQEAgZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBi b29sIGluaHBhcmVudCwKIAlpZiAoaW5ocGFyZW50ICYmIHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKIAkJc2V0X3JlbGF0aW9uX3BhcnRpdGlv bl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCisJQXNzZXJ0KHJlbC0+bm90bnVsbGF0dHJz ID09IE5VTEwpOworCWZvcihpID0gMDsgaSA8IHJlbGF0aW9uLT5yZF9hdHQtPm5hdHRzOyBpKysp CisJeworCQlGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgYXR0ciA9IHJlbGF0aW9uLT5yZF9hdHQtPmF0 dHJzW2ldOworCQlpZiAoYXR0ci5hdHRub3RudWxsKQorCQkJcmVsLT5ub3RudWxsYXR0cnMgPSBi bXNfYWRkX21lbWJlcihyZWwtPm5vdG51bGxhdHRycywKKwkJCQkJCQkJCQkJICAgYXR0ci5hdHRu dW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwl9CisKIAl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDFm MzNmZTEzYzEuLjU4YjllZjcxYTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC03MjcsNiArNzI3 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWludAkJCXJlbF9wYXJhbGxlbF93b3Jr ZXJzOwkvKiB3YW50ZWQgbnVtYmVyIG9mIHBhcmFsbGVsIHdvcmtlcnMgKi8KIAl1aW50MzIJCWFt ZmxhZ3M7CQkvKiBCaXRtYXNrIG9mIG9wdGlvbmFsIGZlYXR1cmVzIHN1cHBvcnRlZCBieQogCQkJ CQkJCQkgKiB0aGUgdGFibGUgQU0gKi8KKwkvKiBOb3QgbnVsbCBhdHRycywgc3RhcnQgZnJvbSAt Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciAqLworCUJpdG1hcHNldAkJKm5vdG51 bGxhdHRyczsKIAogCS8qIEluZm9ybWF0aW9uIGFib3V0IGZvcmVpZ24gdGFibGVzIGFuZCBmb3Jl aWduIGpvaW5zICovCiAJT2lkCQkJc2VydmVyaWQ7CQkvKiBpZGVudGlmaWVzIHNlcnZlciBmb3Ig dGhlIHRhYmxlIG9yIGpvaW4gKi8KLS0gCjIuMzMuMQoK --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: application/octet-stream; name="v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch" Content-Description: v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch Content-Disposition: attachment; filename="v9-0002-Introduce-UniqueKey-attributes-on-RelOptInfo-stru.patch"; size=60795; creation-date="Thu, 13 Jan 2022 15:10:50 GMT"; modification-date="Thu, 13 Jan 2022 15:10:50 GMT" Content-Transfer-Encoding: base64 RnJvbSA3YjIwNDFmYjg5NGJkZGVmMjUwYWI3ZmI5NzczM2Q4ODFmMmUwOTA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IE1vbiwgMTEgTWF5IDIwMjAgMTU6NTA6NTIgKzA4 MDAKU3ViamVjdDogW1BBVENIIDIvNV0gSW50cm9kdWNlIFVuaXF1ZUtleSBhdHRyaWJ1dGVzIG9u IFJlbE9wdEluZm8gc3RydWN0LgoKVW5pcXVlS2V5IGlzIGEgc2V0IG9mIGV4cHJzIG9uIFJlbE9w dEluZm8gd2hpY2ggcmVwcmVzZW50cyB0aGUgZXhwcnMKd2lsbCBiZSB1bmlxdWUgb24gdGhlIGdp dmVuIFJlbE9wdEluZm8uIFlvdSBjYW4gc2VlIFJFQURNRS51bmlxdWVrZXkKZm9yIG1vcmUgaW5m b3JtYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAg ICB8ICAgMTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jICAgICAgICAgICAgICAgICAgICB8 ICAgMzEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAg MTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgICAgICB8ICAgMTEg Kwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgMTAgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgICAgICAgICB8ICAgIDMgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkgfCAgMTMxICsrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICB8ICAgMTAgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgICAgIHwgMTEzNCArKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgIHwgICAxNSArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAgICB8ICAgIDIgKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jICAgICB8ICAgNDQgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jICAgICAgICB8ICAgMTggKy0KIHNyYy9pbmNs dWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRl L25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgfCAgIDI5ICstCiBzcmMvaW5jbHVkZS9ub2Rl cy9wZ19saXN0LmggICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvYXBwZW5kaW5mby5oICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmggICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCAgICAgICAgICAgICAgIHwgICA0MyArCiAyMyBmaWxlcyBjaGFuZ2VkLCAxNTA2IGluc2Vy dGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmlu ZGV4IDQ1NmQ1NjNmMzQuLmZhOTI3YTMwNDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC0yMzIz LDYgKzIzMjMsMTYgQEAgX2NvcHlQYXRoS2V5KGNvbnN0IFBhdGhLZXkgKmZyb20pCiAJcmV0dXJu IG5ld25vZGU7CiB9CiAKK3N0YXRpYyBVbmlxdWVLZXkgKgorX2NvcHlVbmlxdWVLZXkoY29uc3Qg VW5pcXVlS2V5ICpmcm9tKQoreworCVVuaXF1ZUtleQkqbmV3bm9kZSA9IG1ha2VOb2RlKFVuaXF1 ZUtleSk7CisKKwlDT1BZX05PREVfRklFTEQoZXhwcnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG11 bHRpX251bGx2YWxzKTsKKworCXJldHVybiBuZXdub2RlOworfQogLyoKICAqIF9jb3B5UmVzdHJp Y3RJbmZvCiAgKi8KQEAgLTUzMzEsNiArNTM0MSw5IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZv aWQgKmZyb20pCiAJCWNhc2UgVF9QYXRoS2V5OgogCQkJcmV0dmFsID0gX2NvcHlQYXRoS2V5KGZy b20pOwogCQkJYnJlYWs7CisJCWNhc2UgVF9VbmlxdWVLZXk6CisJCQlyZXR2YWwgPSBfY29weVVu aXF1ZUtleShmcm9tKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfUmVzdHJpY3RJbmZvOgogCQkJcmV0 dmFsID0gX2NvcHlSZXN0cmljdEluZm8oZnJvbSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL2xpc3QuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYwppbmRleCBm ODQzZjg2MWVmLi44M2Y5ZDM3ZGM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9saXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jCkBAIC03MTQsNiArNzE0LDM3IEBAIGxp c3RfbWVtYmVyX29pZChjb25zdCBMaXN0ICpsaXN0LCBPaWQgZGF0dW0pCiAJcmV0dXJuIGZhbHNl OwogfQogCisvKgorICogcmV0dXJuIHRydWUgaWZmIGV2ZXJ5IGVudHJ5IGluICJtZW1iZXJzIiBs aXN0IGlzIGFsc28gcHJlc2VudAorICogaW4gdGhlICJ0YXJnZXQiIGxpc3QuCisgKi8KK2Jvb2wK K2xpc3RfaXNfc3Vic2V0KGNvbnN0IExpc3QgKm1lbWJlcnMsIGNvbnN0IExpc3QgKnRhcmdldCkK K3sKKwljb25zdCBMaXN0Q2VsbAkqbGMxLCAqbGMyOworCisJQXNzZXJ0KElzUG9pbnRlckxpc3Qo bWVtYmVycykpOworCUFzc2VydChJc1BvaW50ZXJMaXN0KHRhcmdldCkpOworCWNoZWNrX2xpc3Rf aW52YXJpYW50cyhtZW1iZXJzKTsKKwljaGVja19saXN0X2ludmFyaWFudHModGFyZ2V0KTsKKwor CWZvcmVhY2gobGMxLCBtZW1iZXJzKQorCXsKKwkJYm9vbCBmb3VuZCA9IGZhbHNlOworCQlmb3Jl YWNoKGxjMiwgdGFyZ2V0KQorCQl7CisJCQlpZiAoZXF1YWwobGZpcnN0KGxjMSksIGxmaXJzdChs YzIpKSkKKwkJCXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ aWYgKCFmb3VuZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIC8q CiAgKiBEZWxldGUgdGhlIG4ndGggY2VsbCAoY291bnRpbmcgZnJvbSAwKSBpbiBsaXN0LgogICoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggODIyMzk1NjI1Yi4uMjI5NWE5NWQ5NyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKQEAgLTgxNywzICs4MTcsMTYgQEAgbWFrZVZhY3V1bVJlbGF0aW9uKFJhbmdl VmFyICpyZWxhdGlvbiwgT2lkIG9pZCwgTGlzdCAqdmFfY29scykKIAl2LT52YV9jb2xzID0gdmFf Y29sczsKIAlyZXR1cm4gdjsKIH0KKworCisvKgorICogbWFrZVVuaXF1ZUtleQorICovCitVbmlx dWVLZXkqCittYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251bGx2YWxzKQor eworCVVuaXF1ZUtleSAqIHVrZXkgPSBtYWtlTm9kZShVbmlxdWVLZXkpOworCXVrZXktPmV4cHJz ID0gZXhwcnM7CisJdWtleS0+bXVsdGlfbnVsbHZhbHMgPSBtdWx0aV9udWxsdmFsczsKKwlyZXR1 cm4gdWtleTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGMwYmYyN2QyOGIuLjIzNjlkMjZjOGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMjUxNSw2ICsyNTE1LDE0IEBAIF9vdXRQYXRoS2V5KFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQYXRoS2V5ICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQocGtf bnVsbHNfZmlyc3QpOwogfQogCitzdGF0aWMgdm9pZAorX291dFVuaXF1ZUtleShTdHJpbmdJbmZv IHN0ciwgY29uc3QgVW5pcXVlS2V5ICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiVU5JUVVF S0VZIik7CisJV1JJVEVfTk9ERV9GSUVMRChleHBycyk7CisJV1JJVEVfQk9PTF9GSUVMRChtdWx0 aV9udWxsdmFscyk7Cit9CisKIHN0YXRpYyB2b2lkCiBfb3V0UGF0aFRhcmdldChTdHJpbmdJbmZv IHN0ciwgY29uc3QgUGF0aFRhcmdldCAqbm9kZSkKIHsKQEAgLTQyOTksNiArNDMwNyw5IEBAIG91 dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QYXRoS2V5 OgogCQkJCV9vdXRQYXRoS2V5KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgVF9Vbmlx dWVLZXk6CisJCQkJX291dFVuaXF1ZUtleShzdHIsIG9iaik7CisJCQkJYnJlYWs7CiAJCQljYXNl IFRfUGF0aFRhcmdldDoKIAkJCQlfb3V0UGF0aFRhcmdldChzdHIsIG9iaik7CiAJCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDNmNjhmN2MxOGQuLjdiMWEyYTM5N2MgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L3JlYWRmdW5jcy5jCkBAIC00OTIsNiArNDkyLDE0IEBAIF9yZWFkU2V0T3BlcmF0aW9uU3RtdCh2 b2lkKQogCVJFQURfRE9ORSgpOwogfQogCitzdGF0aWMgVW5pcXVlS2V5ICoKK19yZWFkVW5pcXVl S2V5KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoVW5pcXVlS2V5KTsKKwlSRUFEX05PREVfRklFTEQo ZXhwcnMpOworCVJFQURfQk9PTF9GSUVMRChtdWx0aV9udWxsdmFscyk7CisJUkVBRF9ET05FKCk7 Cit9CiAKIC8qCiAgKglTdHVmZiBmcm9tIHByaW1ub2Rlcy5oLgpAQCAtMjc0Niw2ICsyNzU0LDgg QEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkQ29tbW9uVGFi bGVFeHByKCk7CiAJZWxzZSBpZiAoTUFUQ0goIlNFVE9QRVJBVElPTlNUTVQiLCAxNikpCiAJCXJl dHVybl92YWx1ZSA9IF9yZWFkU2V0T3BlcmF0aW9uU3RtdCgpOworCWVsc2UgaWYgKE1BVENIKCJV TklRVUVLRVkiLCA5KSkKKwkJcmV0dXJuX3ZhbHVlID0gX3JlYWRVbmlxdWVLZXkoKTsKIAllbHNl IGlmIChNQVRDSCgiQUxJQVMiLCA1KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRBbGlhcygpOwog CWVsc2UgaWYgKE1BVENIKCJSQU5HRVZBUiIsIDgpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9NYWtl ZmlsZQppbmRleCAxZTE5OWZmNjZmLi43Yjk4MjBjMjVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQCBPQkpTID0gXAogCWpvaW5wYXRoLm8gXAogCWpv aW5yZWxzLm8gXAogCXBhdGhrZXlzLm8gXAotCXRpZHBhdGgubworCXRpZHBhdGgubyBcCisJdW5p cXVla2V5cy5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9SRUFETUUudW5pcXVla2V5Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVlYWM3NjE5OTUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9SRUFETUUudW5pcXVla2V5CkBAIC0wLDAgKzEs MTMxIEBACisxLiBXaGF0IGlzIFVuaXF1ZUtleT8KK1dlIGNhbiB0aGluayBVbmlxdWVLZXkgaXMg YSBzZXQgb2YgZXhwcnMgZm9yIGEgUmVsT3B0SW5mbywgd2hpY2ggd2UgYXJlIGluc3VyZQordGhh dCBkb2Vzbid0IHlpZWxkcyBzYW1lIHJlc3VsdCBhbW9uZyBhbGwgdGhlIHJvd3MuIFRoZSBzaW1w bGVzdCBVbmlxdWVLZXkKK2Zvcm1hdCBpcyBwcmltYXJ5IGtleS4KKworSG93ZXZlciB3ZSBkZWZp bmUgdGhlIFVucWl1ZUtleSBhcyBiZWxvdy4KKwordHlwZWRlZiBzdHJ1Y3QgVW5pcXVlS2V5Cit7 CisgICAgICAgIE5vZGVUYWcJdHlwZTsKKyAgICAgICAgTGlzdAkqZXhwcnM7CisgICAgICAgIGJv b2wJbXVsdGlfbnVsbHZhbHM7Cit9IFVuaXF1ZUtleTsKKworZXhwcnMgaXMgYSBsaXN0IG9mIGV4 cHJzIHdoaWNoIGlzIHVuaXF1ZSBvbiBjdXJyZW50IFJlbE9wdEluZm8uIGV4cHJzID0gTklMCitp cyBhIHNwZWNpYWwgY2FzZSBvZiBVbmlxdWVLZXksIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG9ubHkg b25lIHJvdyBpbiB0aGF0CityZWxhdGlvbi5pdCBoYXMgYSBzdHJvbmdlciBzZW1hbnRpYyB0aGFu IG90aGVycy4gbGlrZSBTRUxFQ1QgdWsgRlJPTSB0OyB1ayBpcworbm9ybWFsIHVuaXF1ZSBrZXkg YW5kIG1heSBoYXZlIGRpZmZlcmVudCB2YWx1ZXMuIFNFTEVDVCBjb2x4IEZST00gdCBXSEVSRSB1 ayA9Citjb25zdC4gIGNvbHggaXMgdW5pcXVlIEFORCB3ZSBoYXZlIG9ubHkgMSB2YWx1ZS4gVGhp cyBmaWVsZCBjYW4gdXNlZCBmb3IKK2lubmVycmVsX2lzX3VuaXF1ZS4gdGhpcyBsb2dpYyBpcyBo YW5kbGVkIHNwZWNpYWxseSBpbiBhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3cKK2Z1bmN0aW9uLgor CittdWx0aV9udWxsdmFsczogdHJ1ZSBtZWFucyBtdWx0aSBudWxsIHZhbHVlcyBtYXkgZXhpc3Qg aW4gdGhlc2UgZXhwcnMsIHNvIHRoZQordW5pcXVlbmVzcyBpcyBub3QgZ3VhcmFudGVlZCBpbiB0 aGlzIGNhc2UuIFRoaXMgZmllbGQgaXMgbmVjZXNzYXJ5IGZvcgorcmVtb3ZlX3VzZWxlc3Nfam9p biAmIHJlZHVjZV91bmlxdWVfc2VtaWpvaW5zIHdoZXJlIHdlIGRvbid0IG1pbmQgdGhlc2UKK2R1 cGxpY2F0ZWQgTlVMTCB2YWx1ZXMuIEl0IGlzIHNldCB0byB0cnVlIGZvciAyIGNhc2VzLiBPbmUg aXMgYSB1bmlxdWUga2V5Citmcm9tIGEgdW5pcXVlIGluZGV4IGJ1dCB0aGUgcmVsYXRlZCBjb2x1 bW4gaXMgbnVsbGFibGUuIFRoZSBvdGhlciBvbmUgaXMgZm9yCitvdXRlciBqb2luLiBzZWUgcG9w dWxhdGVfam9pbnJlbF91bmlxdWVrZXlzIGZvciBkZXRhaWwuCisKKworVGhlIFVuaXF1ZUtleSBj YW4gYmUgdXNlZCBhdCB0aGUgZm9sbG93aW5nIGNhc2VzIGF0IGxlYXN0OgorMS4gcmVtb3ZlX3Vz ZWxlc3Nfam9pbnMuCisyLiByZWR1Y2Vfc2VtaWFudGlfam9pbnMKKzMuIHJlbW92ZSBkaXN0aW5j dCBub2RlIGlmIGRpc3RpbmN0IGNsYXVzZSBpcyB1bmlxdWUuCis0LiByZW1vdmUgYWdnbm9kZSBp ZiBncm91cCBieSBjbGF1c2UgaXMgdW5pcXVlLgorNS4gSW5kZXggU2tpcCBTY2FuIChXSVApCis2 LiBBZ2dyZWdhdGlvbiBQdXNoIERvd24gd2l0aG91dCAyIHBoYXNlIGFnZ3JlZ2F0aW9uIGlmIHRo ZSBqb2luIGNhbid0CisgICBkdXBsaWNhdGVkIHRoZSBhZ2dyZWdhdGVkIHJvd3MuICh3b3JrIGlu IHByb2dyZXNzIGZlYXR1cmUpCisKKzIuIEhvdyBpcyBpdCBtYWludGFpbmVkPworCitXZSBoYXZl IGEgc2V0IG9mIHBvcHVsYXRlX3h4eF91bnFpdWVrZXlzIGZ1bmN0aW9ucyB0byBtYWludGFpbiB0 aGUgdW5pcXVla2V5IG9uCit2YXJpb3VzIGNhc2VzLiB4eHggaW5jbHVkZXMgYmFzZXJlbCwgam9p bnJlbCwgcGFydGl0aW9uZWRyZWwsIGRpc3RpbmN0cmVsLAorZ3JvdXBlZHJlbCwgdW5pb25yZWwu IGFuZCB3ZSBhbHNvIG5lZWQgdG8gY29udmVydCB0aGUgdW5pcXVla2V5IGZyb20gc3VicXVlcnkK K3RvIG91dGVyIHJlbGF0aW9uLCB3aGljaCBpcyB3aGF0IGNvbnZlcnRfc3VicXVlcnlfdW5pcXVl a2V5cyBkb2VzLgorCisxLiBUaGUgZmlyc3QgcGFydCBpcyBhYm91dCBiYXNlcmVsLiBXZSBoYW5k bGVkIDMgY2FzZXMuIHN1cHBvc2Ugd2UgaGF2ZSBVbmlxdWUKK0luZGV4IG9uIChhLCBiKS4KKwor MS4gU0VMRUNUIGEsIGIgRlJPTSB0LiAgVW5pcXVlS2V5IChhLCBiKQorMi4gU0VMRUNUIGEgRlJP TSB0IFdIRVJFIGIgPSAxOyAgVW5pcXVlS2V5IChhKQorMy4gU0VMRUNUIC4uIEZST00gdCBXSEVS RSBhID0gMSBBTkQgYiA9IDE7ICBVbmlxdWVLZXkgKE5JTCkuICBvbmVyb3cgY2FzZSwgZXZlcnkK KyAgIGNvbHVtbiBpcyBVbmlxdWUuCisKKzIuIFRoZSBuZXh0IHBhcnQgaXMgam9pbnJlbCwgdGhp cyBwYXJ0IGlzIG1vc3QgZXJyb3ItcHJvbmUsIHdlIHNpbXBsaWZpZWQgdGhlIHJ1bGVzCitsaWtl IGJlbG93OgorMS4gSWYgdGhlIHJlbGF0aW9uJ3MgVW5pcXVlS2V5IGNhbid0IGJlIGR1cGxpY2F0 ZWQgYWZ0ZXIgam9pbiwgIHRoZW4gaXMgd2lsbCBiZQorICAgc3RpbGwgdmFsaWQgZm9yIHRoZSBq b2luIHJlbC4gVGhlIGZ1bmN0aW9uIHdlIHVzZWQgaGVyZSBpcworICAgaW5uZXJyZWxfa2VlcHNf dW5pcXVlLiBUaGUgYmFzaWMgaWRlYSBpcyBpbm5lcnJlbC5hbnlfY29sID0gb3V0ZXIudWsuCisK KzIuIElmIHRoZSBVbnFpdWVLZXkgY2FuJ3Qga2VlcCB2YWxpZCB2aWEgdGhlIHJ1bGUgMSwgdGhl IGNvbWJpbmF0aW9uIG9mIHRoZQorICAgVW5pcXVlS2V5IGZyb20gYm90aCBzaWRlcyBhcmUgdmFs aWQgZm9yIHN1cmUuICBXZSBjYW4gcHJvdmUgdGhpcyBhczogaWYgdGhlCisgICB1bmlxdWUgZXhw cnMgZnJvbSByZWwxIGlzIGR1cGxpY2F0ZWQgYnkgcmVsMiwgdGhlIGR1cGxpY2F0ZWQgcm93cyBt dXN0CisgICBjb250YWlucyBkaWZmZXJlbnQgdW5pcXVlIGV4cHJzIGZyb20gcmVsMi4KKworTW9y ZSBjb25zaWRlcmF0aW9ucyBhYm91dCBvbmVyb3c6CisxLiBJZiByZWxhdGlvbiB3aXRoIG9uZSBy b3cgYW5kIGl0IGNhbid0IGJlIGR1cGxpY2F0ZWQsIGl0IGlzIHN0aWxsIHBvc3NpYmxlCisgICBj b250YWlucyBtdWxpdF9udWxsdmFzIGFmdGVyIG91dGVyIGpvaW4uCisyLiBJZiB0aGUgZWl0aGVy IFVuaXF1ZUtleSBjYW4gYmUgZHVwbGljYXRlZCBhZnRlciBqb2luLCB0aGUgY2FuIGdldCBvbmUg cm93CisgICBvbmx5IHdoZW4gYm90aCBzaWRlIGlzIG9uZSByb3cgQU5EIHRoZXJlIGlzIG5vIG91 dGVyIGpvaW4uCiszLiBXaGVuZXZlciB0aGUgb25lcm93IFVuaXF1ZUtleSBpcyBub3QgYSB2YWxp ZCBhbnkgbW9yZSwgd2UgbmVlZCB0byBjb252ZXJ0IG9uZQorICAgcm93IFVuaXF1ZUtleSB0byBu b3JtYWwgdW5pcXVlIGtleSBzaW5jZSB3ZSBkb24ndCBzdG9yZSBleHBycyBmb3Igb25lLXJvdwor ICAgcmVsYXRpb24uIGdldF9leHByc19mcm9tX3VuaXF1ZWtleXMgd2lsbCBiZSB1c2VkIGhlcmUu CisKKworTW9yZSBjb25zaWRlcmF0aW9ucyBhYm91dCBtdWx0aV9udWxsdmFscyBhZnRlciBqb2lu OgorMS4gSWYgdGhlIG9yaWdpbmFsIFVucWl1ZUtleSBoYXMgbXVsdGlfbnVsbHZhbHMsIHRoZSBm aW5hbCBVbmlxdWVLZXkgd2lsbCBoYXZlCisgICBtdWxpdF9udWxsdmFscyBpbiBhbnkgY2FzZS4K KzIuIElmIGEgdW5pcXVlIGtleSBkb2Vzbid0IGFsbG93IG11bGl0X251bGx2YWxzLCBhZnRlciBz b21lIG91dGVyIGpvaW4sIGl0CisgICBhbGxvd3Mgc29tZSBvdXRlciBqb2luLgorCisKKzMuIFdo ZW4gd2UgY29tZXMgdG8gc3VicXVlcnksIHdlIG5lZWQgdG8gY29udmVydF9zdWJxdWVyeV91bnFp dWVrZXlzIGp1c3QgbGlrZQorY29udmVydF9zdWJxdWVyeV9wYXRoa2V5cy4gIE9ubHkgdGhlIFVu aXF1ZUtleSBpbnNpZGVzIHN1YnF1ZXJ5IGlzIHJlZmVyZW5jZWQgYXMKK2EgVmFyIGluIG91dGVy IHJlbGF0aW9uIHdpbGwgYmUgcmV1c2VkLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG91 dGVycmVsLlZhcgorYW5kIHN1YnF1ZXJ5LmV4cHJzIGlzIGJ1aWx0IHdpdGggb3V0ZXJlbC0+c3Vi cm9vdC0+cHJvY2Vzc2VkX3RsaXN0LgorCisKKzQuIEFzIGZvciB0aGUgU1JGIGZ1bmN0aW9ucywg aXQgd2lsbCBicmVhayB0aGUgdW5pcXVlbmVzcyBvZiB1bmlxdWVrZXksIEhvd2V2ZXIgaXQKK2lz IGhhbmRsZWQgaW4gYWRqdXN0X3BhdGhzX2Zvcl9zcmZzLCB3aGljaCBoYXBwZW5zIGFmdGVyIHRo ZSBxdWVyeV9wbGFubmVyLiBzbword2Ugd2lsbCBtYWludGFpbiB0aGUgVW5pcXVlS2V5IHVudGls IHRoZXJlIGFuZCByZXNldCBpdCB0byBOSUwgYXQgdGhhdAorcGxhY2VzLiBUaGlzIGNhbid0IGhl bHAgb24gZGlzdGluY3QvZ3JvdXAgYnkgZWxpbWluYXRpb24gY2FzZXMgYnV0IHByb2JhYmx5IGhl bHAKK2luIHNvbWUgb3RoZXIgY2FzZXMsIGxpa2UgcmVkdWNlX3VucWl1ZV9zZW1pam9pbnMvcmVt b3ZlX3VzZWxlc3Nfam9pbnMgYW5kIGl0IGlzCitzZW1hbnRpYyBjb3JyZWN0bHkuCisKKworNS4g QXMgZm9yIGluaGVyaXQgdGFibGUsIHdlIGZpcnN0IG1haW4gdGhlIFVucWl1ZUtleSBvbiBjaGls ZHJlbCBhcyB3ZWxsLiBCdXQgZm9yCitwYXJ0aXRpb25lZCB0YWJsZSB3ZSBuZWVkIHRvIG1haW50 YWluIDIgZGlmZmVyZW50IGtpbmRzIG9mCitVbnFpdWVLZXkuIDEpLiBVbmlxdWVLZXkgb24gdGhl IHBhcmVudCByZWxhdGlvbiAyKS4gVW5pcXVlS2V5IG9uIGNoaWxkCityZWxhdGlvbiBmb3IgcGFy dGl0aW9uIHdpc2UgcXVlcnkuCisKK0V4YW1wbGU6CitDUkVBVEUgVEFCTEUgcCAoYSBpbnQgbm90 IG51bGwsIGIgaW50IG5vdCBudWxsKSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitDUkVBVEUgVEFC TEUgcDAgcGFydGl0aW9uIG9mIHAgZm9yIHZhbHVlcyBpbiAoMSk7CitDUkVBVEUgVEFCTEUgcDEg cGFydGl0aW9uIG9mIHAgZm9yIHZhbHVlcyBpbiAoMik7CisKK2NyZWF0ZSB1bmlxdWUgaW5kZXgg cDBfYiBvbiBwMChiKTsKK2NyZWF0ZSB1bmlxdWUgaW5kZXggcDFfYiBvbiBwMShiKTsKKworTm93 IGIgaXMgb25seSB1bmlxdWUgb24gcGFydGl0aW9uIGxldmVsLCBzbyB0aGUgZGlzdGluY3QgY2Fu J3QgYmUgcmVtb3ZlZCBvbgordGhlIGZvbGxvd2luZyBjYXNlcy4gU0VMRUNUIERJU1RJTkNUIGIg RlJPTSBwOworCitBbm90aGVyIGV4YW1wbGUgaXMgU0VMRUNUIERJU1RJTkNUIGEsIGIgRlJPTSBw IFdIRVJFIGEgPSAxOyBTaW5jZSBvbmx5IG9uZQorcGFydGl0aW9uIGlzIGNob3NlbiwgdGhlIFVu aXF1ZUtleSBvbiBjaGlsZCByZWxhdGlvbiBpcyBzYW1lIGFzIHRoZSBVbmlxdWVLZXkgb24KK3Bh cmVudCByZWxhdGlvbi4KKworQW5vdGhlciB1c2FnZSBvZiBVbmlxdWVLZXkgb24gcGFydGl0aW9u IGxldmVsIGlzIGl0IGJlIGhlbHBmdWwgZm9yCitwYXJ0aXRpb24td2lzZSBqb2luLgorCitBcyBm b3IgdGhlIFVuaXF1ZUtleSBvbiBwYXJlbnQgdGFibGUgbGV2ZWwsIGl0IGNvbWVzIHdpdGggMiBk aWZmZXJlbnQgd2F5cywKKzEpLiB0aGUgVW5pcXVlS2V5IGlzIGFsc28gZGVyaXZlZCBpbiBVbmlx dWVLZXkgaW5kZXgsIGJ1dCB0aGUgaW5kZXggbXVzdCBiZSBzYW1lCitpbiBhbGwgdGhlIHJlbGF0 ZWQgY2hpbGRyZW4gcmVsYXRpb25zIGFuZCB0aGUgdW5pcXVlIGluZGV4IG11c3QgY29udGFpbnMK K1BhcnRpdGlvbiBLZXkgaW4gaXQuIEV4YW1wbGU6CisKK0NSRUFURSBVTklRVUUgSU5ERVggcF9h YiBPTiBwKGEsIGIpOyAgLS0gd2hlcmUgYSBpcyB0aGUgcGFydGl0aW9uIGtleS4KKworLS0gUXVl cnkKK1NFTEVDVCBhLCBiIEZST00gcDsgdGhlIChhLCBiKSBpcyBhIFVuaXF1ZUtleSBvZiBwLgor CisyKS4gSWYgdGhlIHBhcmVudCByZWxhdGlvbiBoYXMgb25seSBvbmUgY2hpbGRyZWwsIHRoZSBV bmlxdWVLZXkgb24gY2hpbGRyZWwgaXMKKyB0aGUgVW5pcXVlS2V5IG9uIHBhcmVudCBhcyB3ZWxs LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggYzg1MTk5NTYxOC4uYWM5 NTAxNWI1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC01ODAsNiAr NTgwLDEyIEBAIHNldF9wbGFpbl9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLCBSYW5nZVRibEVudHJ5ICpydGUpCiAJICovCiAJY2hlY2tfaW5kZXhfcHJlZGljYXRl cyhyb290LCByZWwpOwogCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSd2ZSBtYXJrZWQgd2hpY2ggcGFy dGlhbCBpbmRleGVzIGFyZSBzdWl0YWJsZSwgd2UgY2FuIG5vdworCSAqIGJ1aWxkIHRoZSByZWxh dGlvbidzIHVuaXF1ZSBrZXlzLgorCSAqLworCXBvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5cyhy b290LCByZWwsIHJlbC0+aW5kZXhsaXN0KTsKKwogCS8qIE1hcmsgcmVsIHdpdGggZXN0aW1hdGVk IG91dHB1dCByb3dzLCB3aWR0aCwgZXRjICovCiAJc2V0X2Jhc2VyZWxfc2l6ZV9lc3RpbWF0ZXMo cm9vdCwgcmVsKTsKIH0KQEAgLTEyOTgsNiArMTMwNCw4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkvKiBBZGQgcGF0aHMg dG8gdGhlIGFwcGVuZCByZWxhdGlvbi4gKi8KIAlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290 LCByZWwsIGxpdmVfY2hpbGRyZWxzKTsKKwlpZiAoSVNfUEFSVElUSU9ORURfUkVMKHJlbCkpCisJ CXBvcHVsYXRlX3BhcnRpdGlvbmVkcmVsX3VuaXF1ZWtleXMocm9vdCwgcmVsLCBsaXZlX2NoaWxk cmVscyk7CiB9CiAKIApAQCAtMjM3Myw2ICsyMzgxLDggQEAgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJICBwYXRoa2V5 cywgcmVxdWlyZWRfb3V0ZXIpKTsKIAl9CiAKKwljb252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMo cm9vdCwgcmVsLCBzdWJfZmluYWxfcmVsKTsKKwogCS8qIElmIG91dGVyIHJlbCBhbGxvd3MgcGFy YWxsZWxpc20sIGRvIHNhbWUgZm9yIHBhcnRpYWwgcGF0aHMuICovCiAJaWYgKHJlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291dGVyKSkKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCBmOTZmYzlmZDI4Li41ZWE5ZDdmZmRlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTc3LDEzICs3Nyw2IEBAIHN0 YXRpYyB2b2lkIGNvbnNpZGVyX3BhcmFsbGVsX21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwK IHN0YXRpYyB2b2lkIGhhc2hfaW5uZXJfYW5kX291dGVyKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdElu Zm8gKmlubmVycmVsLAogCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsIEpvaW5QYXRoRXh0cmFE YXRhICpleHRyYSk7Ci1zdGF0aWMgTGlzdCAqc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5u ZXJJbmZvICpyb290LAotCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAotCQkJCQkJCQkJ ICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKLQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWws Ci0JCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKLQkJCQkJCQkJCSAgSm9pblR5cGUgam9p bnR5cGUsCi0JCQkJCQkJCQkgIGJvb2wgKm1lcmdlam9pbl9hbGxvd2VkKTsKIHN0YXRpYyB2b2lk IGdlbmVyYXRlX21lcmdlam9pbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBS ZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVycmVsLApAQCAt MjIxOCw3ICsyMjExLDcgQEAgaGFzaF9pbm5lcl9hbmRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAgKiBpZiBpdCBpcyBtZXJnZWpvaW5hYmxlIGFuZCBpbnZvbHZlcyB2YXJzIGZyb20gdGhlIHR3 byBzdWItcmVsYXRpb25zCiAgKiBjdXJyZW50bHkgb2YgaW50ZXJlc3QuCiAgKi8KLXN0YXRpYyBM aXN0ICoKK0xpc3QgKgogc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCA5ZGEzZmYyZjlhLi43 ODljNzZhZjlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVs cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTkyNCw2 ICs5MjQsOCBAQCBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsCiAKIAkvKiBBcHBseSBwYXJ0aXRpb253aXNlIGpvaW4gdGVjaG5p cXVlLCBpZiBwb3NzaWJsZS4gKi8KIAl0cnlfcGFydGl0aW9ud2lzZV9qb2luKHJvb3QsIHJlbDEs IHJlbDIsIGpvaW5yZWwsIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCXBvcHVsYXRlX2pvaW5y ZWxfdW5pcXVla2V5cyhyb290LCBqb2lucmVsLCByZWwxLCByZWwyLCByZXN0cmljdGxpc3QsIHNq aW5mby0+am9pbnR5cGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5j CmluZGV4IDg2YTM1Y2RlZjEuLjkwMjJjNzdkYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL3BhdGhrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv cGF0aGtleXMuYwpAQCAtMzMsNyArMzMsNiBAQCBzdGF0aWMgYm9vbCBwYXRoa2V5X2lzX3JlZHVu ZGFudChQYXRoS2V5ICpuZXdfcGF0aGtleSwgTGlzdCAqcGF0aGtleXMpOwogc3RhdGljIGJvb2wg bWF0Y2hlc19ib29sZWFuX3BhcnRpdGlvbl9jbGF1c2UoUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKnBhcnRyZWwsCiAJCQkJCQkJCQkJCSBpbnQgcGFydGtleWNv bCk7Ci1zdGF0aWMgVmFyICpmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKFJlbE9wdEluZm8gKnJl bCwgVGFyZ2V0RW50cnkgKnRsZSk7CiBzdGF0aWMgYm9vbCByaWdodF9tZXJnZV9kaXJlY3Rpb24o UGxhbm5lckluZm8gKnJvb3QsIFBhdGhLZXkgKnBhdGhrZXkpOwogCiAKQEAgLTEwMzUsNyArMTAz NCw3IEBAIGNvbnZlcnRfc3VicXVlcnlfcGF0aGtleXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKICAqIFdlIG5lZWQgdGhpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1 cm4gcGF0aGtleXMgZGVzY3JpYmluZyB2YWx1ZXMKICAqIHRoYXQgYXJlIHVuYXZhaWxhYmxlIGFi b3ZlIHRoZSBsZXZlbCBvZiB0aGUgc3VicXVlcnkgc2Nhbi4KICAqLwotc3RhdGljIFZhciAqCitW YXIgKgogZmluZF92YXJfZm9yX3N1YnF1ZXJ5X3RsZShSZWxPcHRJbmZvICpyZWwsIFRhcmdldEVu dHJ5ICp0bGUpCiB7CiAJTGlzdENlbGwgICAqbGM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91 bmlxdWVrZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2E0MGM0 MDg1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1 ZWtleXMuYwpAQCAtMCwwICsxLDExMzQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHVu aXF1ZWtleXMuYworICoJICBVdGlsaXRpZXMgZm9yIG1hdGNoaW5nIGFuZCBidWlsZGluZyB1bmlx dWUga2V5cworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvYXBwZW5kaW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5p cC5oIgorCisKKy8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIGhlbHAgcG9wdWxhdGVfam9p bnJlbF91bmlxdWVrZXlzLgorICoKKyAqIGFkZGVkX3RvX2pvaW5yZWwgaXMgdHJ1ZSBpZiBhIHVu aXF1ZWtleSAoZnJvbSBvdXRlcnJlbCBvciBpbm5lcnJlbCkKKyAqIGhhcyBiZWVuIGFkZGVkIHRv IGpvaW5yZWwuCisgKiB1c2VmdWwgaXMgdHJ1ZSBpZiB0aGUgZXhwcnMgb2YgdGhlIHVuaXF1ZWtl eSBzdGlsbCBhcHBlYXJzIGluIGpvaW5yZWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IFVuaXF1ZUtl eUNvbnRleHREYXRhCit7CisJVW5pcXVlS2V5CSp1bmlxdWVrZXk7CisJYm9vbAlhZGRlZF90b19q b2lucmVsOworCWJvb2wJdXNlZnVsOworfSAqVW5pcXVlS2V5Q29udGV4dDsKKworc3RhdGljIExp c3QgKmluaXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChSZWxPcHRJbmZvICppbnB1 dHJlbCk7CitzdGF0aWMgYm9vbCBpbm5lcnJlbF9rZWVwc191bmlxdWUoUGxhbm5lckluZm8gKnJv b3QsCisJCQkJCQkJCSAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSAgUmVsT3B0SW5m byAqaW5uZXJyZWwsCisJCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkgIGJv b2wgcmV2ZXJzZSk7CisKK3N0YXRpYyBMaXN0ICpnZXRfZXhwcnNfZnJvbV91bmlxdWVpbmRleChJ bmRleE9wdEluZm8gKnVuaXF1ZV9pbmRleCwKKwkJCQkJCQkJCQlMaXN0ICpjb25zdF9leHBycywK KwkJCQkJCQkJCQlMaXN0ICpjb25zdF9leHByX29wZmFtaWxpZXMsCisJCQkJCQkJCQkJQml0bWFw c2V0ICp1c2VkX3ZhcmF0dHJzLAorCQkJCQkJCQkJCWJvb2wgKnVzZWZ1bCwKKwkJCQkJCQkJCQli b29sICptdWx0aV9udWxsdmFscyk7CitzdGF0aWMgTGlzdCAqZ2V0X2V4cHJzX2Zyb21fdW5pcXVl a2V5KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAor CQkJCQkJCQkJICBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkJCQkJICBVbmlxdWVLZXkgKnVrZXkp Oworc3RhdGljIHZvaWQgYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KFJlbE9wdEluZm8gKnJlbCk7 CitzdGF0aWMgYm9vbCBhZGRfY29tYmluZWRfdW5pcXVla2V5KFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVyX3JlbCwKKwkJCQkJCQkJICAg VW5pcXVlS2V5ICpvdXRlcl91a2V5LAorCQkJCQkJCQkgICBVbmlxdWVLZXkgKmlubmVyX3VrZXks CisJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlKTsKKworLyogVXNlZCBmb3IgdW5pcXVlIGlu ZGV4ZXMgY2hlY2tpbmcgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCitzdGF0aWMgYm9vbCBpbmRl eF9jb25zdGFpbnNfcGFydGtleShSZWxPcHRJbmZvICpwYXJ0cmVsLCAgSW5kZXhPcHRJbmZvICpp bmQpOworc3RhdGljIEluZGV4T3B0SW5mbyAqc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVu dChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAorCQkJCQkJCQkJCQkJCSBJbmRleE9wdEluZm8gKmZyb20pOworc3RhdGljIGJvb2wgc2ltcGxl X2luZGV4aW5mb19lcXVhbChJbmRleE9wdEluZm8gKmluZDEsIEluZGV4T3B0SW5mbyAqaW5kMik7 CitzdGF0aWMgdm9pZCBhZGp1c3RfcGFydGl0aW9uX3VuaXF1ZV9pbmRleGxpc3QoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJCQkJ CQkgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAorCQkJCQkJCQkJCQkgIExpc3QgKipnbG9iYWxfdW5p cXVlX2luZGV4KTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBncm91cGVkIHJlbGF0aW9uIGFu ZCBkaXN0aW5jdCByZWxhdGlvbi4gKi8KK3N0YXRpYyB2b2lkIGFkZF91bmlxdWVrZXlfZnJvbV9z b3J0Z3JvdXBzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVs LAorCQkJCQkJCQkJCSAgTGlzdCAqc29ydGdyb3Vwcyk7CisKKy8qCisgKiBwb3B1bGF0ZV9iYXNl cmVsX3VuaXF1ZWtleXMKKyAqCQlQb3B1bGF0ZSAnYmFzZXJlbCcgdW5pcXVla2V5cyBsaXN0IGJ5 IGxvb2tpbmcgYXQgdGhlIHJlbCdzIHVuaXF1ZSBpbmRleAorICogYW5kIGJhc2VyZXN0cmljdGlu Zm8KKyAqLwordm9pZAorcG9wdWxhdGVfYmFzZXJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCVJlbE9wdEluZm8gKmJhc2VyZWwsCisJCQkJCQkJTGlzdCAqaW5kZXhsaXN0 KQoreworCUxpc3RDZWxsICpsYzsKKwlMaXN0CSptYXRjaGVkX3VuaXFfaW5kZXhlcyA9IE5JTDsK KworCS8qIEF0dHJzIGFwcGVhcnMgaW4gcmVsLT5yZWx0YXJnZXQtPmV4cHJzLiAqLworCUJpdG1h cHNldCAqdXNlZF9hdHRycyA9IE5VTEw7CisKKwlMaXN0CSpjb25zdF9leHBycyA9IE5JTDsKKwlM aXN0CSpleHByX29wZmFtaWxpZXMgPSBOSUw7CisKKwlBc3NlcnQoYmFzZXJlbC0+cnRla2luZCA9 PSBSVEVfUkVMQVRJT04pOworCisJZm9yZWFjaChsYywgaW5kZXhsaXN0KQorCXsKKwkJSW5kZXhP cHRJbmZvICppbmQgPSAoSW5kZXhPcHRJbmZvICopIGxmaXJzdChsYyk7CisJCWlmICghaW5kLT51 bmlxdWUgfHwgIWluZC0+aW1tZWRpYXRlIHx8CisJCQkoaW5kLT5pbmRwcmVkICE9IE5JTCAmJiAh aW5kLT5wcmVkT0spKQorCQkJY29udGludWU7CisJCW1hdGNoZWRfdW5pcV9pbmRleGVzID0gbGFw cGVuZChtYXRjaGVkX3VuaXFfaW5kZXhlcywgaW5kKTsKKwl9CisKKwlpZiAobWF0Y2hlZF91bmlx X2luZGV4ZXMgID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgd2hpY2ggYXR0cnMgaXMg dXNlZCBpbiBiYXNlcmVsLT5yZWx0YXJnZXQgKi8KKwlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKWJh c2VyZWwtPnJlbHRhcmdldC0+ZXhwcnMsIGJhc2VyZWwtPnJlbGlkLCAmdXNlZF9hdHRycyk7CisK KwkvKiBDaGVjayB3aGljaCBhdHRybm8gaXMgdXNlZCBhdCBhIG1lcmdlYWJsZSBjb25zdCBmaWx0 ZXIgKi8KKwlmb3JlYWNoKGxjLCBiYXNlcmVsLT5iYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJUmVz dHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAo cmluZm8tPm1lcmdlb3BmYW1pbGllcyA9PSBOSUwpCisJCQljb250aW51ZTsKKworCQlpZiAoYm1z X2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykpCisJCXsKKwkJCWNvbnN0X2V4cHJzID0gbGFw cGVuZChjb25zdF9leHBycywgZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSkpOworCQl9CisJCWVs c2UgaWYgKGJtc19pc19lbXB0eShyaW5mby0+cmlnaHRfcmVsaWRzKSkKKwkJeworCQkJY29uc3Rf ZXhwcnMgPSBsYXBwZW5kKGNvbnN0X2V4cHJzLCBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2UpKTsK KwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKworCQlleHByX29wZmFtaWxpZXMgPSBsYXBwZW5k KGV4cHJfb3BmYW1pbGllcywgcmluZm8tPm1lcmdlb3BmYW1pbGllcyk7CisJfQorCisJZm9yZWFj aChsYywgbWF0Y2hlZF91bmlxX2luZGV4ZXMpCisJeworCQlib29sCW11bHRpX251bGx2YWxzLCB1 c2VmdWw7CisJCUxpc3QJKmV4cHJzID0gZ2V0X2V4cHJzX2Zyb21fdW5pcXVlaW5kZXgobGZpcnN0 X25vZGUoSW5kZXhPcHRJbmZvLCBsYyksCisJCQkJCQkJCQkJCQkJY29uc3RfZXhwcnMsCisJCQkJ CQkJCQkJCQkJZXhwcl9vcGZhbWlsaWVzLAorCQkJCQkJCQkJCQkJCXVzZWRfYXR0cnMsCisJCQkJ CQkJCQkJCQkJJnVzZWZ1bCwKKwkJCQkJCQkJCQkJCQkmbXVsdGlfbnVsbHZhbHMpOworCQlpZiAo dXNlZnVsKQorCQl7CisJCQlpZiAoZXhwcnMgPT0gTklMKQorCQkJeworCQkJCS8qIEFsbCB0aGUg Y29sdW1ucyBpbiBVbmlxdWUgSW5kZXggbWF0Y2hlZCB3aXRoIGEgcmVzdHJpY3RpbmZvICovCisJ CQkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGJhc2VyZWwpOworCQkJCXJldHVybjsKKwkJCX0K KwkJCWJhc2VyZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGJhc2VyZWwtPnVuaXF1ZWtleXMsCisJ CQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KGV4cHJzLCBtdWx0aV9udWxsdmFscykpOworCQl9CisJ fQorfQorCisKKy8qCisgKiBwb3B1bGF0ZV9wYXJ0aXRpb25lZHJlbF91bmlxdWVrZXlzCisgKiBU aGUgVW5pcXVlS2V5IG9uIHBhcnRpdGlvbnJlbCBjb21lcyBmcm9tIDIgY2FzZXM6CisgKiAxKS4g T25seSBvbmUgcGFydGl0aW9uIGlzIGludm9sdmVkIGluIHRoaXMgcXVlcnksIHRoZSB1bmlxdWUg a2V5IGNhbiBiZQorICogY29waWVkIHRvIHBhcmVudCByZWwgZnJvbSBjaGlsZHJlbC4KKyAqIDIp LiBUaGVyZSBhcmUgc29tZSB1bmlxdWUgaW5kZXggd2hpY2ggaW5jbHVkZXMgcGFydGl0aW9uIGtl eSBhbmQgZXhpc3RzCisgKiBpbiBhbGwgdGhlIHJlbGF0ZWQgcGFydGl0aW9ucy4KKyAqIFdlIG5l dmVyIG1pbmQgcnVsZSAyIGlmIHdlIGhpdCBydWxlIDEuCisgKi8KKwordm9pZAorcG9wdWxhdGVf cGFydGl0aW9uZWRyZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAg UmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkgICBMaXN0ICpjaGlsZHJlbHMpCit7CisJTGlzdENl bGwJKmxjOworCUxpc3QJKmdsb2JhbF91bmlxX2luZGV4bGlzdCA9IE5JTDsKKwlSZWxPcHRJbmZv ICpjaGlsZHJlbDsKKwlib29sIGlzX2ZpcnN0ID0gdHJ1ZTsKKworCUFzc2VydChJU19QQVJUSVRJ T05FRF9SRUwocmVsKSk7CisKKwlpZiAoY2hpbGRyZWxzID09IE5JTCkKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24gdXNlZCBpbiB0aGlzIHF1ZXJ5 LCB0aGUgVW5pcXVlS2V5IGluIGNoaWxkcmVsIGlzCisJICogc3RpbGwgdmFsaWQgaW4gcGFyZW50 IGxldmVsLCBidXQgd2UgbmVlZCBjb252ZXJ0IHRoZSBmb3JtYXQgZnJvbSBjaGlsZCBleHByIHRv CisJICogcGFyZW50IGV4cHIuCisJICovCisJaWYgKGxpc3RfbGVuZ3RoKGNoaWxkcmVscykgPT0g MSkKKwl7CisJCS8qIENoZWNrIGZvciBSdWxlIDEgKi8KKwkJUmVsT3B0SW5mbyAqY2hpbGRyZWwg PSBsaW5pdGlhbF9ub2RlKFJlbE9wdEluZm8sIGNoaWxkcmVscyk7CisJCUxpc3RDZWxsCSpsYzsK KwkJQXNzZXJ0KGNoaWxkcmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVM KTsKKwkJaWYgKHJlbGF0aW9uX2lzX29uZXJvdyhjaGlsZHJlbCkpCisJCXsKKwkJCWFkZF91bmlx dWVrZXlfZm9yX29uZXJvdyhyZWwpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yZWFjaChsYywg Y2hpbGRyZWwtPnVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9u b2RlKFVuaXF1ZUtleSwgbGMpOworCQkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IGZpbmRfYXBw aW5mb19ieV9jaGlsZChyb290LCBjaGlsZHJlbC0+cmVsaWQpOworCQkJTGlzdCAqcGFyZW50X2V4 cHJzID0gTklMOworCQkJYm9vbCBjYW5fcmV1c2UgPSB0cnVlOworCQkJTGlzdENlbGwJKmxjMjsK KwkJCWZvcmVhY2gobGMyLCB1a2V5LT5leHBycykKKwkJCXsKKwkJCQlWYXIgKnZhciA9IChWYXIg KilsZmlyc3QobGMyKTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBleHByIGNvbWVzIGZyb20gYSBl eHByZXNzaW9uLCBpdCBpcyBoYXJkIHRvIGJ1aWxkIHRoZSBleHByZXNzaW9uCisJCQkJICogaW4g cGFyZW50IHNvIGlnbm9yZSB0aGF0IGNhc2UgZm9yIG5vdy4KKwkJCQkgKi8KKwkJCQlpZighSXNB KHZhciwgVmFyKSkKKwkJCQl7CisJCQkJCWNhbl9yZXVzZSA9IGZhbHNlOworCQkJCQlicmVhazsK KwkJCQl9CisJCQkJLyogQ29udmVydCBpdCB0byBwYXJlbnQgdmFyICovCisJCQkJcGFyZW50X2V4 cHJzID0gbGFwcGVuZChwYXJlbnRfZXhwcnMsIGZpbmRfcGFyZW50X3ZhcihhcHBpbmZvLCB2YXIp KTsKKwkJCX0KKwkJCWlmIChjYW5fcmV1c2UpCisJCQkJcmVsLT51bmlxdWVrZXlzID0gbGFwcGVu ZChyZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KHBhcmVudF9leHBy cywKKwkJCQkJCQkJCQkJCQkJdWtleS0+bXVsdGlfbnVsbHZhbHMpKTsKKwkJfQorCX0KKwllbHNl CisJeworCQkvKiBDaGVjayBmb3IgcnVsZSAyICovCisJCWNoaWxkcmVsID0gbGluaXRpYWxfbm9k ZShSZWxPcHRJbmZvLCBjaGlsZHJlbHMpOworCQlmb3JlYWNoKGxjLCBjaGlsZHJlbC0+aW5kZXhs aXN0KQorCQl7CisJCQlJbmRleE9wdEluZm8gKmluZCA9IGxmaXJzdChsYyk7CisJCQlJbmRleE9w dEluZm8gKm1vZGlmaWVkX2luZGV4OworCQkJaWYgKCFpbmQtPnVuaXF1ZSB8fCAhaW5kLT5pbW1l ZGlhdGUgfHwKKwkJCQkoaW5kLT5pbmRwcmVkICE9IE5JTCAmJiAhaW5kLT5wcmVkT0spKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKgorCQkJICogRHVyaW5nIHNpbXBsZV9jb3B5X2luZGV4aW5mb190 b19wYXJlbnQsIHdlIG5lZWQgdG8gY29udmVydCB2YXIgZnJvbQorCQkJICogY2hpbGQgdmFyIHRv IHBhcmVudCB2YXIsIGluZGV4IG9uIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsZXggdG8gaGFuZGxl LgorCQkJICogc28gaWdub3JlIGl0IGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChpbmQtPmluZGV4 cHJzICE9IE5JTCkKKwkJCQljb250aW51ZTsKKworCQkJbW9kaWZpZWRfaW5kZXggPSBzaW1wbGVf Y29weV9pbmRleGluZm9fdG9fcGFyZW50KHJvb3QsIHJlbCwgaW5kKTsKKwkJCS8qCisJCQkgKiBJ ZiB0aGUgdW5pcXVlIGluZGV4IGRvZXNuJ3QgY29udGFpbiBwYXJ0a2V5LCB0aGVuIGl0IGlzIHVu aXF1ZQorCQkJICogb24gdGhpcyBwYXJ0aXRpb24gb25seSwgc28gaXQgaXMgdXNlbGVzcyBmb3Ig dXMuCisJCQkgKi8KKwkJCWlmICghaW5kZXhfY29uc3RhaW5zX3BhcnRrZXkocmVsLCBtb2RpZmll ZF9pbmRleCkpCisJCQkJY29udGludWU7CisKKwkJCWdsb2JhbF91bmlxX2luZGV4bGlzdCA9IGxh cHBlbmQoZ2xvYmFsX3VuaXFfaW5kZXhsaXN0LCAgbW9kaWZpZWRfaW5kZXgpOworCQl9CisKKwkJ aWYgKGdsb2JhbF91bmlxX2luZGV4bGlzdCAhPSBOSUwpCisJCXsKKwkJCWZvcmVhY2gobGMsIGNo aWxkcmVscykKKwkJCXsKKwkJCQlSZWxPcHRJbmZvICpjaGlsZCA9IGxmaXJzdChsYyk7CisJCQkJ aWYgKGlzX2ZpcnN0KQorCQkJCXsKKwkJCQkJaXNfZmlyc3QgPSBmYWxzZTsKKwkJCQkJY29udGlu dWU7CisJCQkJfQorCQkJCWFkanVzdF9wYXJ0aXRpb25fdW5pcXVlX2luZGV4bGlzdChyb290LCBy ZWwsIGNoaWxkLCAmZ2xvYmFsX3VuaXFfaW5kZXhsaXN0KTsKKwkJCX0KKwkJCS8qIE5vdyB3ZSBo YXZlIGEgbGlzdCBvZiB1bmlxdWUgaW5kZXggd2hpY2ggYXJlIGV4YWN0bHkgc2FtZSBvbiBhbGwg Y2hpbGRyZWxzLAorCQkJICogU2V0IHRoZSBVbmlxdWVLZXkganVzdCBsaWtlIGl0IGlzIG5vbi1w YXJ0aXRpb24gdGFibGUKKwkJCSAqLworCQkJcG9wdWxhdGVfYmFzZXJlbF91bmlxdWVrZXlzKHJv b3QsIHJlbCwgZ2xvYmFsX3VuaXFfaW5kZXhsaXN0KTsKKwkJfQorCX0KK30KKworCisvKgorICog cG9wdWxhdGVfZGlzdGluY3RyZWxfdW5pcXVla2V5cworICovCit2b2lkCitwb3B1bGF0ZV9kaXN0 aW5jdHJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQlSZWxPcHRJbmZv ICppbnB1dHJlbCwKKwkJCQkJCQkJUmVsT3B0SW5mbyAqZGlzdGluY3RyZWwpCit7CisJLyogVGhl IHVuaXF1ZSBrZXkgYmVmb3JlIHRoZSBkaXN0aW5jdCBpcyBzdGlsbCB2YWxpZC4gKi8KKwlkaXN0 aW5jdHJlbC0+dW5pcXVla2V5cyA9IGxpc3RfY29weShpbnB1dHJlbC0+dW5pcXVla2V5cyk7CisJ YWRkX3VuaXF1ZWtleV9mcm9tX3NvcnRncm91cHMocm9vdCwgZGlzdGluY3RyZWwsIHJvb3QtPnBh cnNlLT5kaXN0aW5jdENsYXVzZSk7Cit9CisKKy8qCisgKiBwb3B1bGF0ZV9ncm91cHJlbF91bmlx dWVrZXlzCisgKi8KK3ZvaWQKK3BvcHVsYXRlX2dyb3VwcmVsX3VuaXF1ZWtleXMoUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJIFJlbE9wdEluZm8gKmdyb3VwcmVsLAorCQkJCQkJCSBSZWxPcHRJ bmZvICppbnB1dHJlbCkKKworeworCVF1ZXJ5ICpwYXJzZSA9IHJvb3QtPnBhcnNlOworCWJvb2wg aW5wdXRfdWtleV9hZGRlZCA9IGZhbHNlOworCUxpc3RDZWxsICpsYzsKKworCWlmIChyZWxhdGlv bl9pc19vbmVyb3coaW5wdXRyZWwpKQorCXsKKwkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGdy b3VwcmVsKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2UtPmdyb3VwaW5nU2V0cykKKwkJcmV0 dXJuOworCisJLyogQSBOb3JtYWwgZ3JvdXAgYnkgd2l0aG91dCBncm91cGluZyBzZXQuICovCisJ aWYgKHBhcnNlLT5ncm91cENsYXVzZSkKKwl7CisJCS8qCisJCSAqIEN1cnJlbnQgZXZlbiB0aGUg Z3JvdXBieSBjbGF1c2UgaXMgVW5pcXVlIGFscmVhZHksIGJ1dCBpZiBxdWVyeSBoYXMgYWdncmVm CisJCSAqIFdlIGhhdmUgdG8gY3JlYXRlIGdyb3VwcmVsIHN0aWxsLiBUbyBrZWVwIHRoZSBVbnFp dWVLZXkgc2hvcnQsIHdlIHdpbGwgY2hlY2sKKwkJICogdGhlIFVuaXF1ZUtleSBvZiBpbnB1dF9y ZWwgc3RpbGwgdmFsaWQsIGlmIHNvIHdlIHJldXNlIGl0LgorCQkgKi8KKwkJZm9yZWFjaChsYywg aW5wdXRyZWwtPnVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9u b2RlKFVuaXF1ZUtleSwgbGMpOworCQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJzLCBn cm91cHJlbC0+cmVsdGFyZ2V0LT5leHBycykpCisJCQl7CisJCQkJZ3JvdXByZWwtPnVuaXF1ZWtl eXMgPSBsYXBwZW5kKGdyb3VwcmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkgICB1a2V5KTsK KwkJCQlpbnB1dF91a2V5X2FkZGVkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZiAoIWlucHV0X3Vr ZXlfYWRkZWQpCisJCQkvKgorCQkJICogZ3JvdXAgYnkgY2xhdXNlIG11c3QgYmUgYSBzdXBlci1z ZXQgb2YgZ3JvdXByZWwtPnJlbHRhcmdldC0+ZXhwcnMgZXhjZXB0IHRoZQorCQkJICogYWdncmVn YXRpb24gZXhwciwgc28gaWYgc3VjaCBleHBycyBpcyB1bmlxdWUgYWxyZWFkeSwgbm8gYm90aGVy IHRvIGdlbmVyYXRlCisJCQkgKiBuZXcgdW5pcXVla2V5IGZvciBncm91cCBieSBleHBycy4KKwkJ CSAqLworCQkJYWRkX3VuaXF1ZWtleV9mcm9tX3NvcnRncm91cHMocm9vdCwKKwkJCQkJCQkJCQkg IGdyb3VwcmVsLAorCQkJCQkJCQkJCSAgcm9vdC0+cGFyc2UtPmdyb3VwQ2xhdXNlKTsKKwl9CisJ ZWxzZQorCQkvKiBJdCBoYXMgYWdncmVnYXRpb24gYnV0IHdpdGhvdXQgYSBncm91cCBieSwgc28g b25seSBvbmUgcm93IHJldHVybmVkICovCisJCWFkZF91bmlxdWVrZXlfZm9yX29uZXJvdyhncm91 cHJlbCk7Cit9CisKKy8qCisgKiBzaW1wbGVfY29weV91bmlxdWVrZXlzCisgKiBVc2luZyBhIGZ1 bmN0aW9uIGZvciB0aGUgb25lLWxpbmUgY29kZSBtYWtlcyB1cyBlYXN5IHRvIGNoZWNrIHdoZXJl IHdlIHNpbXBseQorICogY29waWVkIHRoZSB1bmlxdWVrZXkuCisgKi8KK3ZvaWQKK3NpbXBsZV9j b3B5X3VuaXF1ZWtleXMoUmVsT3B0SW5mbyAqb2xkcmVsLAorCQkJCQkgICBSZWxPcHRJbmZvICpu ZXdyZWwpCit7CisJbmV3cmVsLT51bmlxdWVrZXlzID0gb2xkcmVsLT51bmlxdWVrZXlzOworfQor CisvKgorICogIHBvcHVsYXRlX3VuaW9ucmVsX3VuaXF1ZWtleXMKKyAqLwordm9pZAorcG9wdWxh dGVfdW5pb25yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgIFJlbE9w dEluZm8gKnVuaW9ucmVsKQoreworCUxpc3RDZWxsCSpsYzsKKwlMaXN0CSpleHBycyA9IE5JTDsK KworCUFzc2VydCh1bmlvbnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpOworCisJZm9yZWFjaChsYywg dW5pb25yZWwtPnJlbHRhcmdldC0+ZXhwcnMpCisJeworCQlleHBycyA9IGxhcHBlbmQoZXhwcnMs IGxmaXJzdChsYykpOworCX0KKworCWlmIChleHBycyA9PSBOSUwpCisJCS8qIFNRTDogc2VsZWN0 IHVuaW9uIHNlbGVjdDsgaXMgdmFsaWQsIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGhlcmUuICovCisJ CWFkZF91bmlxdWVrZXlfZm9yX29uZXJvdyh1bmlvbnJlbCk7CisJZWxzZQorCQl1bmlvbnJlbC0+ dW5pcXVla2V5cyA9IGxhcHBlbmQodW5pb25yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkgICBt YWtlVW5pcXVlS2V5KGV4cHJzLGZhbHNlKSk7CisKK30KKworLyoKKyAqIHBvcHVsYXRlX2pvaW5y ZWxfdW5pcXVla2V5cworICoKKyAqIHBvcHVsYXRlIHVuaXF1ZWtleXMgZm9yIGpvaW5yZWwuIFdl IHdpbGwgY2hlY2sgZWFjaCByZWxhdGlvbiB0byBzZWUgaWYgaXRzCisgKiBVbmlxdWVLZXkgaXMg c3RpbGwgdmFsaWQgdmlhIGlubmVycmVsX2tlZXBzX3VuaXF1ZSwgaWYgc28sIHdlIGFkZCBpdCB0 bworICogam9pbnJlbC4gIFRoZSBtdWx0aV9udWxsdmFscyBmaWVsZCB3aWxsIGJlIGNoYW5nZWQg dG8gdHJ1ZSBmb3Igc29tZSBvdXRlcgorICogam9pbiBjYXNlcyBhbmQgb25lLXJvdyBVbmlxdWVL ZXkgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIG5vcm1hbCBVbmlxdWVLZXkKKyAqIGZvciB0aGUg c2FtZSBjYXNlIGFzIHdlbGwuCisgKiBGb3IgdGhlIHVuaXF1ZWtleSBpbiBlaXRoZXIgYmFzZXJl bCB3aGljaCBjYW4ndCBiZSB1bmlxdWUgYWZ0ZXIgam9pbiwgd2Ugc3RpbGwKKyAqIGNoZWNrIHRv IHNlZSBpZiBjb21iaW5hdGlvbiBvZiBVbmlxdWVLZXlzIGZyb20gYm90aCBzaWRlIGlzIHN0aWxs IHVzZWZ1bCBmb3IgdXMuCisgKiBpZiB5ZXMsIHdlIGFkZCBpdCB0byBqb2lucmVsIGFzIHdlbGwu CisgKi8KK3ZvaWQKK3BvcHVsYXRlX2pvaW5yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQlSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVs T3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJTGlzdCAqcmVzdHJpY3RsaXN0LCBKb2luVHlwZSBq b2ludHlwZSkKK3sKKwlMaXN0Q2VsbCAqbGMsICpsYzI7CisJTGlzdAkqY2xhdXNlX2xpc3QgPSBO SUw7CisJTGlzdAkqb3V0ZXJyZWxfdWtleV9jdHg7CisJTGlzdAkqaW5uZXJyZWxfdWtleV9jdHg7 CisJYm9vbAlpbm5lcl9vbmVyb3csIG91dGVyX29uZXJvdzsKKwlib29sCW1lcmdlam9pbl9hbGxv d2VkOworCisJLyogQ2FyZSBhYm91dCB0aGUgb3V0ZXJyZWwgcmVsYXRpb24gb25seSBmb3IgU0VN SS9BTlRJIGpvaW4gKi8KKwlpZiAoam9pbnR5cGUgPT0gSk9JTl9TRU1JIHx8IGpvaW50eXBlID09 IEpPSU5fQU5USSkKKwl7CisJCWZvcmVhY2gobGMsIG91dGVycmVsLT51bmlxdWVrZXlzKQorCQl7 CisJCQlVbmlxdWVLZXkJKnVuaXF1ZWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOwor CQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVuaXF1ZWtleS0+ZXhwcnMsIGpvaW5yZWwtPnJlbHRhcmdl dC0+ZXhwcnMpKQorCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVu aXF1ZWtleXMsIHVuaXF1ZWtleSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCUFzc2VydChqb2lu dHlwZSA9PSBKT0lOX0xFRlQgfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMIHx8IGpvaW50eXBlID09 IEpPSU5fSU5ORVIpOworCisJLyogRmFzdCBwYXRoICovCisJaWYgKGlubmVycmVsLT51bmlxdWVr ZXlzID09IE5JTCB8fCBvdXRlcnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpCisJCXJldHVybjsKKwor CWlubmVyX29uZXJvdyA9IHJlbGF0aW9uX2lzX29uZXJvdyhpbm5lcnJlbCk7CisJb3V0ZXJfb25l cm93ID0gcmVsYXRpb25faXNfb25lcm93KG91dGVycmVsKTsKKworCW91dGVycmVsX3VrZXlfY3R4 ID0gaW5pdGlsaWx6ZV91bmlxdWVjb250ZXh0X2Zvcl9qb2lucmVsKG91dGVycmVsKTsKKwlpbm5l cnJlbF91a2V5X2N0eCA9IGluaXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChpbm5l cnJlbCk7CisKKwljbGF1c2VfbGlzdCA9IHNlbGVjdF9tZXJnZWpvaW5fY2xhdXNlcyhyb290LCBq b2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCQkJICAgcmVzdHJpY3RsaXN0LCBq b2ludHlwZSwKKwkJCQkJCQkJCQkgICAmbWVyZ2Vqb2luX2FsbG93ZWQpOworCisJaWYgKGlubmVy cmVsX2tlZXBzX3VuaXF1ZShyb290LCBpbm5lcnJlbCwgb3V0ZXJyZWwsIGNsYXVzZV9saXN0LCB0 cnVlIC8qIHJldmVyc2UgKi8pKQorCXsKKwkJYm9vbCBvdXRlcl9pbXBhY3QgPSBqb2ludHlwZSA9 PSBKT0lOX0ZVTEw7CisJCWZvcmVhY2gobGMsIG91dGVycmVsX3VrZXlfY3R4KQorCQl7CisJCQlV bmlxdWVLZXlDb250ZXh0IGN0eCA9IChVbmlxdWVLZXlDb250ZXh0KWxmaXJzdChsYyk7CisKKwkJ CWlmICghbGlzdF9pc19zdWJzZXQoY3R4LT51bmlxdWVrZXktPmV4cHJzLCBqb2lucmVsLT5yZWx0 YXJnZXQtPmV4cHJzKSkKKwkJCXsKKwkJCQljdHgtPnVzZWZ1bCA9IGZhbHNlOworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQkvKiBPdXRlciByZWxhdGlvbiBoYXMgb25lIHJvdywgYW5kIHRoZSB1 bmlxdWUga2V5IGlzIG5vdCBkdXBsaWNhdGVkIGFmdGVyIGpvaW4sCisJCQkgKiB0aGUgam9pbnJl bCB3aWxsIHN0aWxsIGhhcyBvbmUgcm93IHVubGVzcyB0aGUgam9pbnR5cGUgPT0gSk9JTl9GVUxM LgorCQkJICovCisJCQlpZiAob3V0ZXJfb25lcm93ICYmICFvdXRlcl9pbXBhY3QpCisJCQl7CisJ CQkJYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93KGpvaW5yZWwpOworCQkJCXJldHVybjsKKwkJCX0K KwkJCWVsc2UgaWYgKG91dGVyX29uZXJvdykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoZSBvbmVy b3cgb3V0ZXJyZWwgYmVjb21lcyBtdWx0aSByb3dzIGFuZCBtdWx0aV9udWxsdmFscworCQkJCSAq IHdpbGwgYmUgY2hhbmdlZCB0byB0cnVlLiBXZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBleHBycyBj b3JyZWN0bHkgc2luY2UgaXQKKwkJCQkgKiBjYW4ndCBiZSBOSUwgYW55IG1vcmUuCisJCQkJICov CisJCQkJTGlzdENlbGwgKmxjMjsKKwkJCQlmb3JlYWNoKGxjMiwgZ2V0X2V4cHJzX2Zyb21fdW5p cXVla2V5KHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBOVUxMKSkKKwkJCQl7CisJCQkJCWpvaW5y ZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJ CQkgIG1ha2VVbmlxdWVLZXkobGZpcnN0KGxjMiksIHRydWUpKTsKKwkJCQl9CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJaWYgKCFjdHgtPnVuaXF1ZWtleS0+bXVsdGlfbnVsbHZhbHMgJiYgb3V0 ZXJfaW1wYWN0KQorCQkJCQkvKiBDaGFuZ2UgbXVsdGlfbnVsbHZhbHMgdG8gdHJ1ZSBkdWUgdG8g dGhlIGZ1bGwgam9pbi4gKi8KKwkJCQkJam9pbnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoam9p bnJlbC0+dW5pcXVla2V5cywKKwkJCQkJCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShjdHgtPnVuaXF1 ZWtleS0+ZXhwcnMsIHRydWUpKTsKKwkJCQllbHNlCisJCQkJCS8qIEp1c3QgcmV1c2UgaXQgKi8K KwkJCQkJam9pbnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoam9pbnJlbC0+dW5pcXVla2V5cywK KwkJCQkJCQkJCQkJCSAgY3R4LT51bmlxdWVrZXkpOworCQkJfQorCQkJY3R4LT5hZGRlZF90b19q b2lucmVsID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChpbm5lcnJlbF9rZWVwc191bmlxdWUocm9v dCwgb3V0ZXJyZWwsIGlubmVycmVsLCBjbGF1c2VfbGlzdCwgZmFsc2UpKQorCXsKKwkJYm9vbCBv dXRlcl9pbXBhY3QgPSBqb2ludHlwZSA9PSBKT0lOX0ZVTEwgfHwgam9pbnR5cGUgPT0gSk9JTl9M RUZUOzsKKworCQlmb3JlYWNoKGxjLCBpbm5lcnJlbF91a2V5X2N0eCkKKwkJeworCQkJVW5pcXVl S2V5Q29udGV4dCBjdHggPSAoVW5pcXVlS2V5Q29udGV4dClsZmlyc3QobGMpOworCisJCQlpZiAo IWxpc3RfaXNfc3Vic2V0KGN0eC0+dW5pcXVla2V5LT5leHBycywgam9pbnJlbC0+cmVsdGFyZ2V0 LT5leHBycykpCisJCQl7CisJCQkJY3R4LT51c2VmdWwgPSBmYWxzZTsKKwkJCQljb250aW51ZTsK KwkJCX0KKworCQkJaWYgKGlubmVyX29uZXJvdyAmJiAgIW91dGVyX2ltcGFjdCkKKwkJCXsKKwkJ CQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coam9pbnJlbCk7CisJCQkJcmV0dXJuOworCQkJfQor CQkJZWxzZSBpZiAoaW5uZXJfb25lcm93KQorCQkJeworCQkJCUxpc3RDZWxsICpsYzI7CisJCQkJ Zm9yZWFjaChsYzIsIGdldF9leHByc19mcm9tX3VuaXF1ZWtleShyb290LCBqb2lucmVsLCBpbm5l cnJlbCwgTlVMTCkpCisJCQkJeworCQkJCQlqb2lucmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChq b2lucmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkJICBtYWtlVW5pcXVlS2V5KGxmaXJzdChs YzIpLCB0cnVlKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICghY3R4LT51 bmlxdWVrZXktPm11bHRpX251bGx2YWxzICYmIG91dGVyX2ltcGFjdCkKKwkJCQkJLyogTmVlZCB0 byBjaGFuZ2UgbXVsdGlfbnVsbHZhbHMgdG8gdHJ1ZSBkdWUgdG8gdGhlIG91dGVyIGpvaW4uICov CisJCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMs CisJCQkJCQkJCQkJCQkgIG1ha2VVbmlxdWVLZXkoY3R4LT51bmlxdWVrZXktPmV4cHJzLAorCQkJ CQkJCQkJCQkJCQkJCXRydWUpKTsKKwkJCQllbHNlCisJCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMg PSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJCQkgIGN0eC0+dW5pcXVl a2V5KTsKKworCQkJfQorCQkJY3R4LT5hZGRlZF90b19qb2lucmVsID0gdHJ1ZTsKKwkJfQorCX0K KworCS8qCisJICogVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBVbmlxdWVLZXkgZnJvbSBib3RoIHNp ZGVzIGlzIHVuaXF1ZSBhcyB3ZWxsIHJlZ2FyZGxlc3MKKwkgKiBvZiBqb2luIHR5cGUsIGJ1dCBu byBib3RoZXIgdG8gYWRkIGl0IGlmIGl0cyBzdWJzZXQgaGFzIGJlZW4gYWRkZWQgdG8gam9pbnJl bAorCSAqIGFscmVhZHkgb3IgaXQgaXMgbm90IHVzZWZ1bCBmb3IgdGhlIGpvaW5yZWwuCisJICov CisJZm9yZWFjaChsYywgb3V0ZXJyZWxfdWtleV9jdHgpCisJeworCQlVbmlxdWVLZXlDb250ZXh0 IGN0eDEgPSAoVW5pcXVlS2V5Q29udGV4dCkgbGZpcnN0KGxjKTsKKwkJaWYgKGN0eDEtPmFkZGVk X3RvX2pvaW5yZWwgfHwgIWN0eDEtPnVzZWZ1bCkKKwkJCWNvbnRpbnVlOworCQlmb3JlYWNoKGxj MiwgaW5uZXJyZWxfdWtleV9jdHgpCisJCXsKKwkJCVVuaXF1ZUtleUNvbnRleHQgY3R4MiA9IChV bmlxdWVLZXlDb250ZXh0KSBsZmlyc3QobGMyKTsKKwkJCWlmIChjdHgyLT5hZGRlZF90b19qb2lu cmVsIHx8ICFjdHgyLT51c2VmdWwpCisJCQkJY29udGludWU7CisJCQlpZiAoYWRkX2NvbWJpbmVk X3VuaXF1ZWtleShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCQkg ICBjdHgxLT51bmlxdWVrZXksIGN0eDItPnVuaXF1ZWtleSwKKwkJCQkJCQkJCSAgIGpvaW50eXBl KSkKKwkJCQkvKiBJZiB3ZSBzZXQgYSBvbmVyb3cgVW5pcXVlS2V5IHRvIGpvaW5yZWwsIHdlIGRv bid0IG5lZWQgb3RoZXIuICovCisJCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKKy8qCisgKiBj b252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMKKyAqCisgKiBDb3ZlcnQgdGhlIFVuaXF1ZUtleSBp biBzdWJxdWVyeSB0byBvdXRlciByZWxhdGlvbi4KKyAqLwordm9pZCBjb252ZXJ0X3N1YnF1ZXJ5 X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpjdXJy ZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpzdWJfZmluYWxfcmVsKQoreworCUxpc3RDZWxsCSps YzsKKworCWlmIChzdWJfZmluYWxfcmVsLT51bmlxdWVrZXlzID09IE5JTCkKKwkJcmV0dXJuOwor CisJaWYgKHJlbGF0aW9uX2lzX29uZXJvdyhzdWJfZmluYWxfcmVsKSkKKwl7CisJCWFkZF91bmlx dWVrZXlfZm9yX29uZXJvdyhjdXJyZWwpOworCQlyZXR1cm47CisJfQorCisJQXNzZXJ0KGN1cnJl bC0+c3Vicm9vdCAhPSBOVUxMKTsKKworCWZvcmVhY2gobGMsIHN1Yl9maW5hbF9yZWwtPnVuaXF1 ZWtleXMpCisJeworCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmlyc3Rfbm9kZShVbmlxdWVLZXksIGxj KTsKKwkJTGlzdENlbGwJKmxjOworCQlMaXN0CSpleHBycyA9IE5JTDsKKwkJYm9vbAl1a2V5X3Vz ZWZ1bCA9IHRydWU7CisKKwkJLyogT25lIHJvdyBjYXNlIGlzIGhhbmRsZWQgYWJvdmUgKi8KKwkJ QXNzZXJ0KHVrZXktPmV4cHJzICE9IE5JTCk7CisJCWZvcmVhY2gobGMsIHVrZXktPmV4cHJzKQor CQl7CisJCQlWYXIgKnZhcjsKKwkJCVRhcmdldEVudHJ5ICp0bGUgPSB0bGlzdF9tZW1iZXIobGZp cnN0KGxjKSwKKwkJCQkJCQkJCQkJY3VycmVsLT5zdWJyb290LT5wcm9jZXNzZWRfdGxpc3QpOwor CQkJaWYgKHRsZSA9PSBOVUxMKQorCQkJeworCQkJCXVrZXlfdXNlZnVsID0gZmFsc2U7CisJCQkJ YnJlYWs7CisJCQl9CisJCQl2YXIgPSBmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKGN1cnJlbCwg dGxlKTsKKwkJCWlmICh2YXIgPT0gTlVMTCkKKwkJCXsKKwkJCQl1a2V5X3VzZWZ1bCA9IGZhbHNl OworCQkJCWJyZWFrOworCQkJfQorCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB2YXIpOworCQl9 CisKKwkJaWYgKHVrZXlfdXNlZnVsKQorCQkJY3VycmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChj dXJyZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJIG1ha2VVbmlxdWVLZXkoZXhwcnMsCisJCQkJ CQkJCQkJCQkJICAgdWtleS0+bXVsdGlfbnVsbHZhbHMpKTsKKworCX0KK30KKworLyoKKyAqIGlu bmVycmVsX2tlZXBzX3VuaXF1ZQorICoKKyAqIENoZWNrIGlmIFVuaXF1ZSBrZXkgb2YgdGhlIGlu bmVycmVsIGlzIHZhbGlkIGFmdGVyIGpvaW4uIGlubmVycmVsJ3MgVW5pcXVlS2V5CisgKiB3aWxs IGJlIHN0aWxsIHZhbGlkIGlmIGlubmVycmVsJ3MgYW55LWNvbHVtbiBtZXJnZW9wIG91dHJlcmVs J3MgdW5pcXVla2V5CisgKiBleGlzdHMgaW4gY2xhdXNlX2xpc3QuCisgKgorICogTm90ZTogdGhl IGNsYXVzZV9saXN0IG11c3QgYmUgYSBsaXN0IG9mIG1lcmdlYWJsZSByZXN0cmljdGluZm8gYWxy ZWFkeS4KKyAqLworc3RhdGljIGJvb2wKK2lubmVycmVsX2tlZXBzX3VuaXF1ZShQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJICBSZWxPcHRJbmZv ICppbm5lcnJlbCwKKwkJCQkJICBMaXN0ICpjbGF1c2VfbGlzdCwKKwkJCQkJICBib29sIHJldmVy c2UpCit7CisJTGlzdENlbGwJKmxjLCAqbGMyLCAqbGMzOworCisJaWYgKG91dGVycmVsLT51bmlx dWVrZXlzID09IE5JTCB8fCBpbm5lcnJlbC0+dW5pcXVla2V5cyA9PSBOSUwpCisJCXJldHVybiBm YWxzZTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIG91dGVycmVsJ3MgdW5pcXVla2V5IGluIG1l cmdlYWJsZSBjbGF1c2UuICovCisJZm9yZWFjaChsYywgb3V0ZXJyZWwtPnVuaXF1ZWtleXMpCisJ eworCQlMaXN0CSpvdXRlcl91cV9leHBycyA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpLT5l eHByczsKKwkJYm9vbCBjbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMgPSB0cnVlOworCQlmb3Jl YWNoKGxjMiwgb3V0ZXJfdXFfZXhwcnMpCisJCXsKKwkJCU5vZGUgKm91dGVyX3VxX2V4cHIgPSBs Zmlyc3QobGMyKTsKKwkJCWJvb2wgZmluZF91cV9leHByX2luX2NsYXVzZWxpc3QgPSBmYWxzZTsK KwkJCWZvcmVhY2gobGMzLCBjbGF1c2VfbGlzdCkKKwkJCXsKKwkJCQlSZXN0cmljdEluZm8gKnJp bmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYzMpOworCQkJCU5vZGUgKm91dGVyX2V4 cHI7CisJCQkJaWYgKHJldmVyc2UpCisJCQkJCW91dGVyX2V4cHIgPSByaW5mby0+b3V0ZXJfaXNf bGVmdCA/IGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2UpIDogZ2V0X2xlZnRvcChyaW5mby0+Y2xh dXNlKTsKKwkJCQllbHNlCisJCQkJCW91dGVyX2V4cHIgPSByaW5mby0+b3V0ZXJfaXNfbGVmdCA/ IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSkgOiBnZXRfcmlnaHRvcChyaW5mby0+Y2xhdXNlKTsK KwkJCQlpZiAoZXF1YWwob3V0ZXJfZXhwciwgb3V0ZXJfdXFfZXhwcikpCisJCQkJeworCQkJCQlm aW5kX3VxX2V4cHJfaW5fY2xhdXNlbGlzdCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKwkJCWlmICghZmluZF91cV9leHByX2luX2NsYXVzZWxpc3QpCisJCQl7CisJCQkJLyogTm8g bmVlZCB0byBjaGVjayB0aGUgbmV4dCBleHBycyBpbiB0aGUgY3VycmVudCB1bmlxdWVrZXkgKi8K KwkJCQljbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCisJCWlmIChjbGF1c2VsaXN0X21hdGNoc19hbGxfZXhwcnMpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qCisgKiByZWxhdGlvbl9pc19vbmVy b3cKKyAqIENoZWNrIGlmIGl0IGlzIGEgb25lLXJvdyByZWxhdGlvbiBieSBjaGVja2luZyBVbmlx dWVLZXkuCisgKi8KK2Jvb2wKK3JlbGF0aW9uX2lzX29uZXJvdyhSZWxPcHRJbmZvICpyZWwpCit7 CisJVW5pcXVlS2V5ICp1a2V5OworCWlmIChyZWwtPnVuaXF1ZWtleXMgPT0gTklMKQorCQlyZXR1 cm4gZmFsc2U7CisJdWtleSA9IGxpbml0aWFsX25vZGUoVW5pcXVlS2V5LCByZWwtPnVuaXF1ZWtl eXMpOworCXJldHVybiB1a2V5LT5leHBycyA9PSBOSUwgJiYgbGlzdF9sZW5ndGgocmVsLT51bmlx dWVrZXlzKSA9PSAxOworfQorCisvKgorICogcmVsYXRpb25faGFzX3VuaXF1ZWtleXNfZm9yCisg KgkJUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgcHJvb2ZzIHRoYXQgJ3JlbCcgY2Fubm90IHJldHVy biBtdWx0aXBsZSByb3dzIHdpdGgKKyAqCQl0aGUgc2FtZSB2YWx1ZXMgaW4gZWFjaCBvZiAnZXhw cnMnLiAgT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wKK3JlbGF0aW9uX2hhc191 bmlxdWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJ CUxpc3QgKmV4cHJzLCBib29sIGFsbG93X211bHRpbnVsbHMpCit7CisJTGlzdENlbGwgKmxjOwor CisJLyoKKwkgKiBGb3IgVW5pcXVlS2V5LT5vbmVyb3cgY2FzZSwgdGhlIHVuaXF1ZWtleS0+ZXhw cnMgaXMgZW1wdHkgYXMgd2VsbAorCSAqIHNvIHdlIGNhbid0IHJlbHkgb24gbGlzdF9pc19zdWJz ZXQgdG8gaGFuZGxlIHRoaXMgc3BlY2lhbCBjYXNlcworCSAqLworCWlmIChleHBycyA9PSBOSUwp CisJCXJldHVybiBmYWxzZTsKKworCWZvcmVhY2gobGMsIHJlbC0+dW5pcXVla2V5cykKKwl7CisJ CVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOworCQlpZiAodWtl eS0+bXVsdGlfbnVsbHZhbHMgJiYgIWFsbG93X211bHRpbnVsbHMpCisJCQljb250aW51ZTsKKwkJ aWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJzLCBleHBycykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qCisgKiBnZXRfZXhwcnNfZnJvbV91bmlxdWVp bmRleAorICoKKyAqIFJldHVybiBhIGxpc3Qgb2YgZXhwcnMgd2hpY2ggaXMgdW5pcXVlLiBzZXQg dXNlZnVsIHRvIGZhbHNlIGlmIHRoaXMKKyAqIHVuaXF1ZSBpbmRleCBpcyBub3QgdXNlZnVsIGZv ciB1cy4KKyAqLworc3RhdGljIExpc3QgKgorZ2V0X2V4cHJzX2Zyb21fdW5pcXVlaW5kZXgoSW5k ZXhPcHRJbmZvICp1bmlxdWVfaW5kZXgsCisJCQkJCQkgICBMaXN0ICpjb25zdF9leHBycywKKwkJ CQkJCSAgIExpc3QgKmNvbnN0X2V4cHJfb3BmYW1pbGllcywKKwkJCQkJCSAgIEJpdG1hcHNldCAq dXNlZF92YXJhdHRycywKKwkJCQkJCSAgIGJvb2wgKnVzZWZ1bCwKKwkJCQkJCSAgIGJvb2wgKm11 bHRpX251bGx2YWxzKQoreworCUxpc3QJKmV4cHJzID0gTklMOworCUxpc3RDZWxsCSppbmRleHBy X2l0ZW07CisJaW50CWMgPSAwOworCisJKnVzZWZ1bCA9IHRydWU7CisJKm11bHRpX251bGx2YWxz ID0gZmFsc2U7CisKKwlpbmRleHByX2l0ZW0gPSBsaXN0X2hlYWQodW5pcXVlX2luZGV4LT5pbmRl eHBycyk7CisJZm9yKGMgPSAwOyBjIDwgdW5pcXVlX2luZGV4LT5uY29sdW1uczsgYysrKQorCXsK KwkJaW50IGF0dHIgPSB1bmlxdWVfaW5kZXgtPmluZGV4a2V5c1tjXTsKKwkJRXhwciAqZXhwcjsK KwkJYm9vbAltYXRjaGVkX2NvbnN0ID0gZmFsc2U7CisJCUxpc3RDZWxsCSpsYzEsICpsYzI7CisK KwkJaWYoYXR0ciA+IDApCisJCXsKKwkJCWV4cHIgPSBsaXN0X250aF9ub2RlKFRhcmdldEVudHJ5 LCB1bmlxdWVfaW5kZXgtPmluZGV4dGxpc3QsIGMpLT5leHByOworCQl9CisJCWVsc2UgaWYgKGF0 dHIgPT0gMCkKKwkJeworCQkJLyogRXhwcmVzc2lvbiBpbmRleCAqLworCQkJZXhwciA9IGxmaXJz dChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQodW5pcXVlX2luZGV4LT5p bmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJfQorCQllbHNlIC8qIGF0dHIgPCAwICovCisJCXsK KwkJCS8qIEluZGV4IG9uIHN5c3RlbSBjb2x1bW4gaXMgbm90IHN1cHBvcnRlZCAqLworCQkJQXNz ZXJ0KGZhbHNlKTsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGluZGV4X2NvbCA9IENvbnN0IGNh c2Ugd2l0aCByZWdhcmRpbmcgdG8gb3BmYW1pbHkgY2hlY2tpbmcKKwkJICogSWYgd2UgY2FuIHJl bW92ZSB0aGUgaW5kZXhfY29sIGZyb20gdGhlIGZpbmFsIFVuaXF1ZUtleS0+ZXhwcnMuCisJCSAq LworCQlmb3Jib3RoKGxjMSwgY29uc3RfZXhwcnMsIGxjMiwgY29uc3RfZXhwcl9vcGZhbWlsaWVz KQorCQl7CisJCQlpZiAobGlzdF9tZW1iZXJfb2lkKChMaXN0ICopbGZpcnN0KGxjMiksIHVuaXF1 ZV9pbmRleC0+b3BmYW1pbHlbY10pCisJCQkJJiYgbWF0Y2hfaW5kZXhfdG9fb3BlcmFuZCgoTm9k ZSAqKSBsZmlyc3QobGMxKSwgYywgdW5pcXVlX2luZGV4KSkKKwkJCXsKKwkJCQltYXRjaGVkX2Nv bnN0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChtYXRjaGVkX2NvbnN0 KQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgaWYgdGhlIGluZGV4ZWQgZXhwciBpcyB1c2Vk IGluIHJlbCAqLworCQlpZiAoYXR0ciA+IDApCisJCXsKKwkJCS8qCisJCQkgKiBOb3JtYWwgSW5k ZXhlZCBjb2x1bW4sIGlmIHRoZSBjb2wgaXMgbm90IHVzZWQsIHRoZW4gdGhlIGluZGV4IGlzIHVz ZWxlc3MKKwkJCSAqIGZvciB1bmlxdWVrZXkuCisJCQkgKi8KKwkJCWF0dHIgLT0gRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQkJaWYgKCFibXNfaXNfbWVtYmVyKGF0dHIs IHVzZWRfdmFyYXR0cnMpKQorCQkJeworCQkJCSp1c2VmdWwgPSBmYWxzZTsKKwkJCQlicmVhazsK KwkJCX0KKwkJfQorCQllbHNlIGlmICghbGlzdF9tZW1iZXIodW5pcXVlX2luZGV4LT5yZWwtPnJl bHRhcmdldC0+ZXhwcnMsIGV4cHIpKQorCQl7CisJCQkvKiBFeHByZXNzaW9uIGluZGV4IGJ1dCB0 aGUgZXhwcmVzc2lvbiBpcyBub3QgdXNlZCBpbiByZWwgKi8KKwkJCSp1c2VmdWwgPSBmYWxzZTsK KwkJCWJyZWFrOworCQl9CisKKwkJLyogY2hlY2sgbm90IG51bGwgcHJvcGVydHkuICovCisJCWlm IChhdHRyID09IDApCisJCXsKKwkJCS8qIFdlIG5ldmVyIGtub3cgaWYgYSBleHByZXNzaW9uIHlp ZWxkcyBudWxsIG9yIG5vdCAqLworCQkJKm11bHRpX251bGx2YWxzID0gdHJ1ZTsKKwkJfQorCQll bHNlIGlmICghYm1zX2lzX21lbWJlcihhdHRyLCB1bmlxdWVfaW5kZXgtPnJlbC0+bm90bnVsbGF0 dHJzKQorCQkJCSAmJiAhYm1zX2lzX21lbWJlcigwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJp YnV0ZU51bWJlciwKKwkJCQkJCQkJICAgdW5pcXVlX2luZGV4LT5yZWwtPm5vdG51bGxhdHRycykp CisJCXsKKwkJCSptdWx0aV9udWxsdmFscyA9IHRydWU7CisJCX0KKworCQlleHBycyA9IGxhcHBl bmQoZXhwcnMsIGV4cHIpOworCX0KKwlyZXR1cm4gZXhwcnM7Cit9CisKKworLyoKKyAqIGFkZF91 bmlxdWVrZXlfZm9yX29uZXJvdworICogSWYgd2UgYXJlIHN1cmUgdGhhdCB0aGUgcmVsYXRpb24g b25seSByZXR1cm5zIG9uZSByb3csIHRoZW4gYWxsIHRoZSBjb2x1bW5zCisgKiBhcmUgdW5pcXVl LiBIb3dldmVyIHdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIFVuaXF1ZUtleSBmb3IgZXZlcnkgY29s dW1uLCB3ZQorICoganVzdCBzZXQgZXhwcnMgPSBOSUwgYW5kIG92ZXJ3cml0ZXMgYWxsIHRoZSBv dGhlciBVbmlxdWVLZXkgb24gdGhpcyBSZWxPcHRJbmZvCisgKiBzaW5jZSB0aGlzIG9uZSBoYXMg c3Ryb25nZXN0IHNlbWFudGljcy4KKyAqLwordm9pZAorYWRkX3VuaXF1ZWtleV9mb3Jfb25lcm93 KFJlbE9wdEluZm8gKnJlbCkKK3sKKwkvKgorCSAqIFdlIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMg VW5pcXVlS2V5IG9uIHB1cnBvc2Ugc2luY2UgdGhpcyBvbmUgaGFzIHRoZQorCSAqIHN0cm9uZ2Vz dCBzZW1hbnRpYy4KKwkgKi8KKwlyZWwtPnVuaXF1ZWtleXMgPSBsaXN0X21ha2UxKG1ha2VVbmlx dWVLZXkoTklMLCBmYWxzZSkpOworfQorCisKKy8qCisgKiBpbml0aWxpbHplX3VuaXF1ZWNvbnRl eHRfZm9yX2pvaW5yZWwKKyAqIFJldHVybiBhIExpc3Qgb2YgVW5pcXVlS2V5Q29udGV4dCBmb3Ig YW4gaW5wdXRyZWwKKyAqLworc3RhdGljIExpc3QgKgoraW5pdGlsaWx6ZV91bmlxdWVjb250ZXh0 X2Zvcl9qb2lucmVsKFJlbE9wdEluZm8gKmlucHV0cmVsKQoreworCUxpc3QJKnJlcyA9IE5JTDsK KwlMaXN0Q2VsbCAqbGM7CisJZm9yZWFjaChsYywgIGlucHV0cmVsLT51bmlxdWVrZXlzKQorCXsK KwkJVW5pcXVlS2V5Q29udGV4dCBjb250ZXh0OworCQljb250ZXh0ID0gcGFsbG9jKHNpemVvZihz dHJ1Y3QgVW5pcXVlS2V5Q29udGV4dERhdGEpKTsKKwkJY29udGV4dC0+dW5pcXVla2V5ID0gbGZp cnN0X25vZGUoVW5pcXVlS2V5LCBsYyk7CisJCWNvbnRleHQtPmFkZGVkX3RvX2pvaW5yZWwgPSBm YWxzZTsKKwkJY29udGV4dC0+dXNlZnVsID0gdHJ1ZTsKKwkJcmVzID0gbGFwcGVuZChyZXMsIGNv bnRleHQpOworCX0KKwlyZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBnZXRfZXhwcnNfZnJvbV91 bmlxdWVrZXkKKyAqCVVuaWZ5IHRoZSB3YXkgb2YgZ2V0IExpc3Qgb2YgZXhwcnMgZnJvbSBhIG9u ZS1yb3cgVW5pcXVlS2V5IG9yCisgKiBub3JtYWwgVW5pcXVlS2V5LiBmb3IgdGhlIG9uZXJvdyBj YXNlLCBldmVyeSBleHByIGluIHJlbDEgaXMgYSB2YWxpZAorICogVW5pcXVlS2V5LiBSZXR1cm4g YSBMaXN0IG9mIGV4cHJzLgorICoKKyAqIHJlbDE6IFRoZSByZWxhdGlvbiB3aGljaCB5b3Ugd2Fu dCB0byBnZXQgdGhlIGV4cHJzLgorICogdWtleTogVGhlIFVuaXF1ZUtleSB5b3Ugd2FudCB0byBn ZXQgdGhlIGV4cHJzLgorICovCitzdGF0aWMgTGlzdCAqCitnZXRfZXhwcnNfZnJvbV91bmlxdWVr ZXkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsIFJlbE9wdEluZm8gKnJl bDEsIFVuaXF1ZUtleSAqdWtleSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisJYm9vbCBvbmVyb3cgPSBy ZWwxICE9IE5VTEwgJiYgcmVsYXRpb25faXNfb25lcm93KHJlbDEpOworCisJTGlzdAkqcmVzID0g TklMOworCUFzc2VydChvbmVyb3cgfHwgdWtleSk7CisJaWYgKG9uZXJvdykKKwl7CisJCS8qIE9u bHkgY2FyZXMgYWJvdXQgdGhlIGV4cHJzIHN0aWxsIGV4aXN0IGluIGpvaW5yZWwgKi8KKwkJZm9y ZWFjaChsYywgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwkJeworCQkJQml0bWFwc2V0ICpy ZWxpZHMgPSBwdWxsX3Zhcm5vcyhyb290LCBsZmlyc3QobGMpKTsKKwkJCWlmIChibXNfaXNfc3Vi c2V0KHJlbGlkcywgcmVsMS0+cmVsaWRzKSkKKwkJCXsKKwkJCQlyZXMgPSBsYXBwZW5kKHJlcywg bGlzdF9tYWtlMShsZmlyc3QobGMpKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcmVz ID0gbGlzdF9tYWtlMSh1a2V5LT5leHBycyk7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qCisg KiBQYXJ0aXRpb25lZCB0YWJsZSBVbmlxdWUgS2V5cy4KKyAqIFRoZSBwYXJ0aXRpb24gdGFibGUg dW5pcXVlIGtleSBpcyBtYWludGFpbmVkIGFzOgorICogMS4gVGhlIGluZGV4IG11c3QgYmUgdW5p cXVlIGFzIHVzdWFsLgorICogMi4gVGhlIGluZGV4IG11c3QgY29udGFpbnMgcGFydGl0aW9uIGtl eS4KKyAqIDMuIFRoZSBpbmRleCBtdXN0IGV4aXN0IG9uIGFsbCB0aGUgY2hpbGQgcmVsLiBzZWUg c2ltcGxlX2luZGV4aW5mb19lcXVhbCBmb3IKKyAqICAgIGhvdyB3ZSBjb21wYXJlIGl0LgorICov CisKKy8qCisgKiBpbmRleF9jb25zdGFpbnNfcGFydGtleQorICogcmV0dXJuIHRydWUgaWYgdGhl IGluZGV4IGNvbnRhaW5zIHRoZSBwYXJ0aXRvbiBrZXkuCisgKi8KK3N0YXRpYyBib29sCitpbmRl eF9jb25zdGFpbnNfcGFydGtleShSZWxPcHRJbmZvICpwYXJ0cmVsLCAgSW5kZXhPcHRJbmZvICpp bmQpCit7CisJTGlzdENlbGwJKmxjOworCWludAlpOworCUFzc2VydChJU19QQVJUSVRJT05FRF9S RUwocGFydHJlbCkpOworCUFzc2VydChwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFydG5hdHRzID4g MCk7CisKKwlmb3IoaSA9IDA7IGkgPCBwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFydG5hdHRzOyBp KyspCisJeworCQlOb2RlICpwYXJ0X2V4cHIgPSBsaW5pdGlhbChwYXJ0cmVsLT5wYXJ0ZXhwcnNb aV0pOworCQlib29sIGZvdW5kX2luX2luZGV4ID0gZmFsc2U7CisJCWZvcmVhY2gobGMsIGluZC0+ aW5kZXh0bGlzdCkKKwkJeworCQkJRXhwciAqaW5kZXhfZXhwciA9IGxmaXJzdF9ub2RlKFRhcmdl dEVudHJ5LCBsYyktPmV4cHI7CisJCQlpZiAoZXF1YWwoaW5kZXhfZXhwciwgcGFydF9leHByKSkK KwkJCXsKKwkJCQlmb3VuZF9pbl9pbmRleCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K KwkJaWYgKCFmb3VuZF9pbl9pbmRleCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBzaW1wbGVfaW5kZXhpbmZvX2VxdWFsCisgKgorICogVXNlZCB0byBj aGVjayBpZiB0aGUgMiBpbmRleCBpcyBzYW1lIGFzIGVhY2ggb3RoZXIuIFRoZSBpbmRleCBoZXJl CisgKiBpcyBDT1BJRUQgZnJvbSBjaGlsZHJlbCBhbmQgZGlkIHNvbWUgdGlueSBjaGFuZ2VzKHNl ZQorICogc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCkKKyAqLworc3RhdGljIGJvb2wK K3NpbXBsZV9pbmRleGluZm9fZXF1YWwoSW5kZXhPcHRJbmZvICppbmQxLCBJbmRleE9wdEluZm8g KmluZDIpCit7CisJU2l6ZSBvaWRfY21wX2xlbiA9IHNpemVvZihPaWQpICogaW5kMS0+bmNvbHVt bnM7CisKKwlyZXR1cm4gaW5kMS0+bmNvbHVtbnMgPT0gaW5kMi0+bmNvbHVtbnMgJiYKKwkJaW5k MS0+dW5pcXVlID09IGluZDItPnVuaXF1ZSAmJgorCQltZW1jbXAoaW5kMS0+aW5kZXhrZXlzLCBp bmQyLT5pbmRleGtleXMsIHNpemVvZihpbnQpICogaW5kMS0+bmNvbHVtbnMpID09IDAgJiYKKwkJ bWVtY21wKGluZDEtPm9wZmFtaWx5LCBpbmQyLT5vcGZhbWlseSwgb2lkX2NtcF9sZW4pID09IDAg JiYKKwkJbWVtY21wKGluZDEtPm9wY2ludHlwZSwgaW5kMi0+b3BjaW50eXBlLCBvaWRfY21wX2xl bikgPT0gMCAmJgorCQltZW1jbXAoaW5kMS0+c29ydG9wZmFtaWx5LCBpbmQyLT5zb3J0b3BmYW1p bHksIG9pZF9jbXBfbGVuKSA9PSAwICYmCisJCWVxdWFsKGdldF90bGlzdF9leHBycyhpbmQxLT5p bmRleHRsaXN0LCB0cnVlKSwKKwkJCSAgZ2V0X3RsaXN0X2V4cHJzKGluZDItPmluZGV4dGxpc3Qs IHRydWUpKTsKK30KKworCisvKgorICogVGhlIGJlbG93IG1hY3JvcyBhcmUgdXNlZCBmb3Igc2lt cGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCB3aGljaCBpcyBzbworICogY3VzdG9taXplZCB0 aGF0IEkgZG9uJ3Qgd2FudCB0byBwdXQgaXQgdG8gY29weWZ1bmNzLmMuIFNvIGNvcHkgaXQgaGVy ZS4KKyAqLworI2RlZmluZSBDT1BZX1BPSU5URVJfRklFTEQoZmxkbmFtZSwgc3opIFwKKwlkbyB7 IFwKKwkJU2l6ZQlfc2l6ZSA9IChzeik7IFwKKwkJbmV3bm9kZS0+ZmxkbmFtZSA9IHBhbGxvYyhf c2l6ZSk7IFwKKwkJbWVtY3B5KG5ld25vZGUtPmZsZG5hbWUsIGZyb20tPmZsZG5hbWUsIF9zaXpl KTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9OT0RFX0ZJRUxEKGZsZG5hbWUpIFwK KwkobmV3bm9kZS0+ZmxkbmFtZSA9IGNvcHlPYmplY3RJbXBsKGZyb20tPmZsZG5hbWUpKQorCisj ZGVmaW5lIENPUFlfU0NBTEFSX0ZJRUxEKGZsZG5hbWUpIFwKKwkobmV3bm9kZS0+ZmxkbmFtZSA9 IGZyb20tPmZsZG5hbWUpCisKKworLyoKKyAqIHNpbXBsZV9jb3B5X2luZGV4aW5mb190b19wYXJl bnQgKGZyb20gcGFydGl0aW9uKQorICogQ29weSB0aGUgSW5kZXhJbmZvIGZyb20gY2hpbGQgcmVs YXRpb24gdG8gcGFyZW50IHJlbGF0aW9uIHdpdGggc29tZSBtb2RpZmljYXRpb24sCisgKiB3aGlj aCBpcyB1c2VkIHRvIHRlc3Q6CisgKiAxLiBJZiB0aGUgc2FtZSBpbmRleCBleGlzdHMgaW4gYWxs IHRoZSBjaGlsZHJlbHMuCisgKiAyLiBJZiB0aGUgcGFyZW50cmVsLT5yZWx0YXJnZXQvYmFzaWNy ZXN0cmljdCBpbmZvIG1hdGNoZXMgdGhpcyBpbmRleC4KKyAqLworc3RhdGljIEluZGV4T3B0SW5m byAqCitzaW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJCQkJCQkJCUluZGV4T3B0SW5mbyAqZnJv bSkKK3sKKwlJbmRleE9wdEluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShJbmRleE9wdEluZm8pOwor CUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBmaW5kX2FwcGluZm9fYnlfY2hpbGQocm9vdCwgZnJv bS0+cmVsLT5yZWxpZCk7CisJTGlzdENlbGwJKmxjOworCWludAlpZHggPSAwOworCisJQ09QWV9T Q0FMQVJfRklFTEQobmNvbHVtbnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5rZXljb2x1bW5zKTsK KwlDT1BZX1NDQUxBUl9GSUVMRCh1bmlxdWUpOworCUNPUFlfU0NBTEFSX0ZJRUxEKGltbWVkaWF0 ZSk7CisJLyogV2UganVzdCBuZWVkIHRvIGtub3cgaWYgaXQgaXMgTklMIG9yIG5vdCAqLworCUNP UFlfU0NBTEFSX0ZJRUxEKGluZHByZWQpOworCUNPUFlfU0NBTEFSX0ZJRUxEKHByZWRPSyk7CisJ Q09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4a2V5cywgZnJvbS0+bmNvbHVtbnMgKiBzaXplb2YoaW50 KSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4Y29sbGF0aW9ucywgZnJvbS0+bmNvbHVtbnMg KiBzaXplb2YoT2lkKSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKG9wZmFtaWx5LCBmcm9tLT5uY29s dW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQob3BjaW50eXBlLCBmcm9t LT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQoc29ydG9wZmFt aWx5LCBmcm9tLT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX05PREVfRklFTEQoaW5k ZXh0bGlzdCk7CisKKwkvKiBDb252ZXJ0IGluZGV4IGV4cHJzIG9uIGNoaWxkIGV4cHIgdG8gZXhw ciBvbiBwYXJlbnQgKi8KKwlmb3JlYWNoKGxjLCBuZXdub2RlLT5pbmRleHRsaXN0KQorCXsKKwkJ VGFyZ2V0RW50cnkgKnRsZSA9IGxmaXJzdF9ub2RlKFRhcmdldEVudHJ5LCBsYyk7CisJCS8qIElu ZGV4IG9uIGV4cHJlc3Npb24gaXMgaWdub3JlZCAqLworCQlBc3NlcnQoSXNBKHRsZS0+ZXhwciwg VmFyKSk7CisJCXRsZS0+ZXhwciA9IChFeHByICopIGZpbmRfcGFyZW50X3ZhcihhcHBpbmZvLCAo VmFyICopIHRsZS0+ZXhwcik7CisJCW5ld25vZGUtPmluZGV4a2V5c1tpZHhdID0gY2FzdE5vZGUo VmFyLCB0bGUtPmV4cHIpLT52YXJhdHRubzsKKwkJaWR4Kys7CisJfQorCW5ld25vZGUtPnJlbCA9 IHBhcmVudHJlbDsKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworLyoKKyAqIGFkanVzdF9wYXJ0aXRp b25fdW5pcXVlX2luZGV4bGlzdAorICoKKyAqIGdsb2JhbF91bmlxdWVfaW5kZXhlczogQXQgdGhl IGJlZ2lubmluZywgaXQgY29udGFpbnMgdGhlIGNvcHkgJiBtb2RpZmllZAorICogdW5pcXVlIGlu ZGV4IGZyb20gdGhlIGZpcnN0IHBhcnRpdGlvbi4gQW5kIHRoZW4gY2hlY2sgaWYgZWFjaCBpbmRl eCBpbiBpdCBzdGlsbAorICogZXhpc3RzIGluIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9ucy4gSWYg bm8sIHJlbW92ZSBpdC4gYXQgbGFzdCwgaXQgaGFzIGFuCisgKiBpbmRleCBsaXN0IHdoaWNoIGV4 aXN0cyBpbiBhbGwgdGhlIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCithZGp1c3RfcGFy dGl0aW9uX3VuaXF1ZV9pbmRleGxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgUmVs T3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAorCQkJ CQkJCQkgIExpc3QgKipnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCit7CisJTGlzdENlbGwJKmxjLCAq bGMyOworCWZvcmVhY2gobGMsICpnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCisJeworCQlJbmRleE9w dEluZm8JKmdfaW5kID0gbGZpcnN0X25vZGUoSW5kZXhPcHRJbmZvLCBsYyk7CisJCWJvb2wgZm91 bmRfaW5fY2hpbGQgPSBmYWxzZTsKKworCQlmb3JlYWNoKGxjMiwgY2hpbGRyZWwtPmluZGV4bGlz dCkKKwkJeworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kID0gbGZpcnN0X25vZGUoSW5kZXhPcHRJ bmZvLCBsYzIpOworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kX2NvcHk7CisJCQlpZiAoIXBfaW5k LT51bmlxdWUgfHwgIXBfaW5kLT5pbW1lZGlhdGUgfHwKKwkJCQkocF9pbmQtPmluZHByZWQgIT0g TklMICYmICFwX2luZC0+cHJlZE9LKSkKKwkJCQljb250aW51ZTsKKwkJCXBfaW5kX2NvcHkgPSBz aW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KHJvb3QsIHBhcmVudHJlbCwgcF9pbmQpOwor CQkJaWYgKHNpbXBsZV9pbmRleGluZm9fZXF1YWwocF9pbmRfY29weSwgZ19pbmQpKQorCQkJewor CQkJCWZvdW5kX2luX2NoaWxkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAo IWZvdW5kX2luX2NoaWxkKQorCQkJLyogVGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QgaW4gY2hpbGRy ZWwsIHJlbW92ZSBpdCBmcm9tIGdsb2JhbF91bmlxdWVfaW5kZXhlcyAqLworCQkJKmdsb2JhbF91 bmlxdWVfaW5kZXhlcyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoKmdsb2JhbF91bmlxdWVfaW5k ZXhlcywgbGMpOworCX0KK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBncm91cHJlcy9kaXN0 aW5jdHJlbCAqLworc3RhdGljIHZvaWQKK2FkZF91bmlxdWVrZXlfZnJvbV9zb3J0Z3JvdXBzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKnNvcnRncm91cHMpCit7CisJ UXVlcnkgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJTGlzdAkqZXhwcnM7CisKKwkvKgorCSAqIFhY WDogSWYgdGhlcmUgYXJlIHNvbWUgdmFycyB3aGljaCBpcyBub3QgaW4gY3VycmVudCBsZXZlbHN1 cCwgdGhlIHNlbWFudGljIGlzCisJICogaW1wcmVjaXNlLCBzaG91bGQgd2UgYXZvaWQgaXQgb3Ig bm90PyBsZXZlbHN1cCA9IDEgaXMganVzdCBhIGRlbW8sIG1heWJlIHdlIG5lZWQgdG8KKwkgKiBj aGVjayBldmVyeSBsZXZlbCBvdGhlciB0aGFuIDAsIGlmIHNvLCBsb29rcyB3ZSBoYXZlIHRvIHdy aXRlIGFub3RoZXIKKwkgKiBwdWxsX3Zhcl93YWxrZXIuCisJICovCisJTGlzdAkqdXBwZXJfdmFy cyA9IHB1bGxfdmFyc19vZl9sZXZlbCgoTm9kZSopc29ydGdyb3VwcywgMSk7CisKKwlpZiAodXBw ZXJfdmFycyAhPSBOSUwpCisJCXJldHVybjsKKworCWV4cHJzID0gZ2V0X3NvcnRncm91cGxpc3Rf ZXhwcnMoc29ydGdyb3VwcywgcGFyc2UtPnRhcmdldExpc3QpOworCXJlbC0+dW5pcXVla2V5cyA9 IGxhcHBlbmQocmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShleHBycywK KwkJCQkJCQkJCQkJZmFsc2UgLyogc29ydGdyb3VwY2xhdXNlIGNhbid0IGJlIG11bHRpX251bGx2 YWxzICovKSk7Cit9CisKKworLyoKKyAqIGFkZF9jb21iaW5lZF91bmlxdWVrZXkKKyAqIFRoZSBj b21iaW5hdGlvbiBvZiBib3RoIFVuaXF1ZUtleXMgaXMgYSB2YWxpZCBVbmlxdWVLZXkgZm9yIGpv aW5yZWwgbm8gbWF0dGVyCisgKiB0aGUgam9pbnR5cGUuCisgKi8KK2Jvb2wKK2FkZF9jb21iaW5l ZF91bmlxdWVrZXkoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5y ZWwsCisJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJICAgUmVsT3B0SW5mbyAq aW5uZXJfcmVsLAorCQkJCQkgICBVbmlxdWVLZXkgKm91dGVyX3VrZXksCisJCQkJCSAgIFVuaXF1 ZUtleSAqaW5uZXJfdWtleSwKKwkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUpCit7CisKKwlMaXN0 Q2VsbAkqbGMxLCAqbGMyOworCisJLyogRWl0aGVyIHNpZGUgaGFzIG11bHRpX251bGx2YWxzIG9y IHdlIGhhdmUgb3V0ZXIgam9pbiwKKwkgKiB0aGUgY29tYmluZWQgVW5pcXVlS2V5IGhhcyBtdWx0 aV9udWxsdmFscyAqLworCWJvb2wgbXVsdGlfbnVsbHZhbHMgPSBvdXRlcl91a2V5LT5tdWx0aV9u dWxsdmFscyB8fAorCQlpbm5lcl91a2V5LT5tdWx0aV9udWxsdmFscyB8fCBJU19PVVRFUl9KT0lO KGpvaW50eXBlKTsKKworCS8qIFRoZSBvbmx5IGNhc2Ugd2UgY2FuIGdldCBvbmVyb3cgam9pbnJl bCBhZnRlciBqb2luICovCisJaWYgIChyZWxhdGlvbl9pc19vbmVyb3cob3V0ZXJfcmVsKQorCQkg JiYgcmVsYXRpb25faXNfb25lcm93KGlubmVyX3JlbCkKKwkJICYmIGpvaW50eXBlID09IEpPSU5f SU5ORVIpCisJeworCQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coam9pbnJlbCk7CisJCXJldHVy biB0cnVlOworCX0KKworCWZvcmVhY2gobGMxLCBnZXRfZXhwcnNfZnJvbV91bmlxdWVrZXkocm9v dCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBvdXRlcl91a2V5KSkKKwl7CisJCWZvcmVhY2gobGMyLCBn ZXRfZXhwcnNfZnJvbV91bmlxdWVrZXkocm9vdCwgam9pbnJlbCwgaW5uZXJfcmVsLCBpbm5lcl91 a2V5KSkKKwkJeworCQkJTGlzdCAqZXhwcnMgPSBsaXN0X2NvbmNhdF9jb3B5KGxmaXJzdF9ub2Rl KExpc3QsIGxjMSksIGxmaXJzdF9ub2RlKExpc3QsIGxjMikpOworCQkJam9pbnJlbC0+dW5pcXVl a2V5cyA9IGxhcHBlbmQoam9pbnJlbC0+dW5pcXVla2V5cywKKwkJCQkJCQkJCQkgIG1ha2VVbmlx dWVLZXkoZXhwcnMsCisJCQkJCQkJCQkJCQkJCW11bHRpX251bGx2YWxzKSk7CisJCX0KKwl9CisJ cmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGJk MDlmODVhZWEuLmZmOWY2ZGY4NTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK QEAgLTE4Nyw4ICsxODcsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfb25lX3dpbmRvd19wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgICBQYXRoVGFyZ2V0ICpvdXRwdXRfdGFyZ2V0LAog CQkJCQkJCQkgICBXaW5kb3dGdW5jTGlzdHMgKndmbGlzdHMsCiAJCQkJCQkJCSAgIExpc3QgKmFj dGl2ZVdpbmRvd3MpOwotc3RhdGljIFJlbE9wdEluZm8gKmNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKLQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5wdXRfcmVsKTsKK3N0 YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfZGlzdGluY3RfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCk7CiBzdGF0aWMgdm9pZCBjcmVhdGVfcGFydGlhbF9kaXN0 aW5jdF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmlu cHV0X3JlbCwKIAkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmZpbmFsX2Rpc3RpbmN0X3JlbCk7CkBA IC0xODY2LDYgKzE4NjUsOCBAQCBncm91cGluZ19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgdHVwbGVfZnJhY3Rpb24pCiAJCWFkZF9wYXRoKGZpbmFsX3JlbCwgcGF0aCk7CiAJfQog CisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhjdXJyZW50X3JlbCwgZmluYWxfcmVsKTsKKwogCS8q CiAJICogR2VuZXJhdGUgcGFydGlhbCBwYXRocyBmb3IgZmluYWxfcmVsLCB0b28sIGlmIG91dGVy IHF1ZXJ5IGxldmVscyBtaWdodAogCSAqIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlbS4KQEAg LTMzODAsNiArMzM4MSw4IEBAIGNyZWF0ZV9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9v dCwKIAl9CiAKIAlzZXRfY2hlYXBlc3QoZ3JvdXBlZF9yZWwpOworCisJcG9wdWxhdGVfZ3JvdXBy ZWxfdW5pcXVla2V5cyhyb290LCBncm91cGVkX3JlbCwgaW5wdXRfcmVsKTsKIAlyZXR1cm4gZ3Jv dXBlZF9yZWw7CiB9CiAKQEAgLTQxMDIsNyArNDEwNSw3IEBAIGNyZWF0ZV93aW5kb3dfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKiBOb3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgocykgKi8K IAlzZXRfY2hlYXBlc3Qod2luZG93X3JlbCk7Ci0KKwlzaW1wbGVfY29weV91bmlxdWVrZXlzKGlu cHV0X3JlbCwgd2luZG93X3JlbCk7CiAJcmV0dXJuIHdpbmRvd19yZWw7CiB9CiAKQEAgLTQyOTEs NiArNDI5NCw3IEBAIGNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5wdXRfcmVsKQogCiAJLyogTm93IGNob29zZSB0aGUgYmVzdCBwYXRoKHMpICov CiAJc2V0X2NoZWFwZXN0KGRpc3RpbmN0X3JlbCk7CisJcG9wdWxhdGVfZGlzdGluY3RyZWxfdW5p cXVla2V5cyhyb290LCBpbnB1dF9yZWwsIGRpc3RpbmN0X3JlbCk7CiAKIAlyZXR1cm4gZGlzdGlu Y3RfcmVsOwogfQpAQCAtNDgyMyw2ICs0ODI3LDggQEAgY3JlYXRlX29yZGVyZWRfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsCiAJICovCiAJQXNzZXJ0KG9yZGVyZWRfcmVsLT5wYXRobGlzdCAhPSBO SUwpOwogCisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhpbnB1dF9yZWwsIG9yZGVyZWRfcmVsKTsK KwogCXJldHVybiBvcmRlcmVkX3JlbDsKIH0KIApAQCAtNTcwMCw2ICs1NzA2LDkgQEAgYWRqdXN0 X3BhdGhzX2Zvcl9zcmZzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJaWYg KGxpc3RfbGVuZ3RoKHRhcmdldHMpID09IDEpCiAJCXJldHVybjsKIAorCS8qIFVuaXF1ZUtleSBp cyBub3QgdmFsaWQgYWZ0ZXIgaGFuZGxpbmcgdGhlIFNSRi4gKi8KKwlyZWwtPnVuaXF1ZWtleXMg PSBOSUw7CisKIAkvKgogCSAqIFN0YWNrIFNSRi1ldmFsdWF0aW9uIG5vZGVzIGF0b3AgZWFjaCBw YXRoIGZvciB0aGUgcmVsLgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j CmluZGV4IGYwMDRmYWQxZDkuLjZjNjA0YWZmNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jCkBAIC02OTAsNiArNjkwLDggQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCS8qIFVuZG8gZWZmZWN0cyBv ZiBwb3NzaWJseSBmb3JjaW5nIHR1cGxlX2ZyYWN0aW9uIHRvIDAgKi8KIAlyb290LT50dXBsZV9m cmFjdGlvbiA9IHNhdmVfZnJhY3Rpb247CiAKKwkvKiBBZGQgdGhlIFVuaXF1ZUtleXMgKi8KKwlw b3B1bGF0ZV91bmlvbnJlbF91bmlxdWVrZXlzKHJvb3QsIHJlc3VsdF9yZWwpOwogCXJldHVybiBy ZXN1bHRfcmVsOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9h cHBlbmRpbmZvLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5k ZXggYjgwMzljMzIzYi4uZjIwNGM1MzlhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Fw cGVuZGluZm8uYwpAQCAtMTAwMCwzICsxMDAwLDQ3IEBAIGRpc3RyaWJ1dGVfcm93X2lkZW50aXR5 X3ZhcnMoUGxhbm5lckluZm8gKnJvb3QpCiAJCX0KIAl9CiB9CisKKy8qCisgKiBmaW5kX2FwcGlu Zm9fYnlfY2hpbGQKKyAqCisgKi8KK0FwcGVuZFJlbEluZm8gKgorZmluZF9hcHBpbmZvX2J5X2No aWxkKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBjaGlsZF9pbmRleCkKK3sKKwlMaXN0Q2VsbAkq bGM7CisJZm9yZWFjaChsYywgcm9vdC0+YXBwZW5kX3JlbF9saXN0KQorCXsKKwkJQXBwZW5kUmVs SW5mbyAqYXBwaW5mbyA9IGxmaXJzdF9ub2RlKEFwcGVuZFJlbEluZm8sIGxjKTsKKwkJaWYgKGFw cGluZm8tPmNoaWxkX3JlbGlkID09IGNoaWxkX2luZGV4KQorCQkJcmV0dXJuIGFwcGluZm87CisJ fQorCWVsb2coRVJST1IsICJwYXJlbnQgcmVsYXRpb24gY2FudCBiZSBmb3VuZCIpOworCXJldHVy biBOVUxMOworfQorCisvKgorICogZmluZF9wYXJlbnRfdmFyCisgKgorICovCitWYXIgKgorZmlu ZF9wYXJlbnRfdmFyKEFwcGVuZFJlbEluZm8gKmFwcGluZm8sIFZhciAqY2hpbGRfdmFyKQorewor CUxpc3RDZWxsCSpsYzsKKwlWYXIJKnJlcyA9IE5VTEw7CisJSW5kZXggYXR0bm8gPSAxOworCWZv cmVhY2gobGMsIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycykKKwl7CisJCU5vZGUgKmNoaWxkX25v ZGUgPSBsZmlyc3QobGMpOworCQlpZiAoZXF1YWwoY2hpbGRfbm9kZSwgY2hpbGRfdmFyKSkKKwkJ eworCQkJcmVzID0gY29weU9iamVjdChjaGlsZF92YXIpOworCQkJcmVzLT52YXJhdHRubyA9IGF0 dG5vOworCQkJcmVzLT52YXJubyA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJfQorCQlhdHRu bysrOworCX0KKwlpZiAocmVzID09IE5VTEwpCisJCWVsb2coRVJST1IsICJwYXJlbnQgdmFyIGNh bid0IGJlIGZvdW5kLiIpOworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9p bmhlcml0LmMKaW5kZXggOGM1ZGM2NTk0Ny4uOWI0OWYxMmU0MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2luaGVyaXQuYwpAQCAtNzk3LDYgKzc5Nyw3IEBAIGFwcGx5X2NoaWxkX2Jhc2VxdWFs cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQl7CiAJCQlOb2Rl CSAgICpvbmVjcSA9IChOb2RlICopIGxmaXJzdChsYzIpOwogCQkJYm9vbAkJcHNldWRvY29uc3Rh bnQ7CisJCQlSZXN0cmljdEluZm8JKmNoaWxkX3JpbmZvOwogCiAJCQkvKiBjaGVjayBmb3IgcHNl dWRvY29uc3RhbnQgKG5vIFZhcnMgb3Igdm9sYXRpbGUgZnVuY3Rpb25zKSAqLwogCQkJcHNldWRv Y29uc3RhbnQgPQpAQCAtODA4LDE0ICs4MDksMTUgQEAgYXBwbHlfY2hpbGRfYmFzZXF1YWxzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJcm9vdC0+aGFzUHNl dWRvQ29uc3RhbnRRdWFscyA9IHRydWU7CiAJCQl9CiAJCQkvKiByZWNvbnN0aXR1dGUgUmVzdHJp Y3RJbmZvIHdpdGggYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqLwotCQkJY2hpbGRxdWFscyA9IGxh cHBlbmQoY2hpbGRxdWFscywKLQkJCQkJCQkJIG1ha2VfcmVzdHJpY3RpbmZvKHJvb3QsCi0JCQkJ CQkJCQkJCQkgICAoRXhwciAqKSBvbmVjcSwKLQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNo ZWRfZG93biwKLQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5vdXRlcmpvaW5fZGVsYXllZCwKLQkJCQkJ CQkJCQkJCSAgIHBzZXVkb2NvbnN0YW50LAotCQkJCQkJCQkJCQkJICAgcmluZm8tPnNlY3VyaXR5 X2xldmVsLAotCQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCkpOworCQkJY2hpbGRfcmlu Zm8gPSAgbWFrZV9yZXN0cmljdGluZm8ocm9vdCwKKwkJCQkJCQkJCQkJIChFeHByICopIG9uZWNx LAorCQkJCQkJCQkJCQkgcmluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCQkJCQkJCQkgcmluZm8t Pm91dGVyam9pbl9kZWxheWVkLAorCQkJCQkJCQkJCQkgcHNldWRvY29uc3RhbnQsCisJCQkJCQkJ CQkJCSByaW5mby0+c2VjdXJpdHlfbGV2ZWwsCisJCQkJCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxM KTsKKwkJCWNoaWxkX3JpbmZvLT5tZXJnZW9wZmFtaWxpZXMgPSByaW5mby0+bWVyZ2VvcGZhbWls aWVzOworCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywgY2hpbGRfcmluZm8pOwog CQkJLyogdHJhY2sgbWluaW11bSBzZWN1cml0eSBsZXZlbCBhbW9uZyBjaGlsZCBxdWFscyAqLwog CQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgcmluZm8tPnNlY3VyaXR5 X2xldmVsKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCBmZTE3MzEwMWQxLi5iZmRhOTRl OTA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1 ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCiAKIGV4dGVybiBBX0V4cHIgKm1ha2VBX0V4cHIoQV9F eHByX0tpbmQga2luZCwgTGlzdCAqbmFtZSwKQEAgLTEwNiw0ICsxMDcsNiBAQCBleHRlcm4gR3Jv dXBpbmdTZXQgKm1ha2VHcm91cGluZ1NldChHcm91cGluZ1NldEtpbmQga2luZCwgTGlzdCAqY29u dGVudCwgaW50IGxvYwogCiBleHRlcm4gVmFjdXVtUmVsYXRpb24gKm1ha2VWYWN1dW1SZWxhdGlv bihSYW5nZVZhciAqcmVsYXRpb24sIE9pZCBvaWQsIExpc3QgKnZhX2NvbHMpOwogCitleHRlcm4g VW5pcXVlS2V5KiBtYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251bGx2YWxz KTsKKwogI2VuZGlmCQkJCQkJCS8qIE1BS0VGVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IDI4Y2Y1 YWVmY2EuLjc1YTQwNmI5ODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjY3LDYgKzI2Nyw3IEBAIHR5cGVk ZWYgZW51bSBOb2RlVGFnCiAJVF9FcXVpdmFsZW5jZU1lbWJlciwKIAlUX1BhdGhLZXksCiAJVF9Q YXRoVGFyZ2V0LAorCVRfVW5pcXVlS2V5LAogCVRfUmVzdHJpY3RJbmZvLAogCVRfSW5kZXhDbGF1 c2UsCiAJVF9QbGFjZUhvbGRlclZhciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNThiOWVmNzFh Ny4uNTdlODBhNDdkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTc0OCw2ICs3NDgsNyBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUXVhbENvc3QJYmFzZXJlc3RyaWN0Y29zdDsJLyog Y29zdCBvZiBldmFsdWF0aW5nIHRoZSBhYm92ZSAqLwogCUluZGV4CQliYXNlcmVzdHJpY3RfbWlu X3NlY3VyaXR5OwkvKiBtaW4gc2VjdXJpdHlfbGV2ZWwgZm91bmQgaW4KIAkJCQkJCQkJCQkJICog YmFzZXJlc3RyaWN0aW5mbyAqLworCUxpc3QJICAgKnVuaXF1ZWtleXM7CQkvKiBMaXN0IG9mIFVu aXF1ZUtleSAqLwogCUxpc3QJICAgKmpvaW5pbmZvOwkJLyogUmVzdHJpY3RJbmZvIHN0cnVjdHVy ZXMgZm9yIGpvaW4gY2xhdXNlcwogCQkJCQkJCQkgKiBpbnZvbHZpbmcgdGhpcyByZWwgKi8KIAli b29sCQloYXNfZWNsYXNzX2pvaW5zOwkvKiBUIG1lYW5zIGpvaW5pbmZvIGlzIGluY29tcGxldGUg Ki8KQEAgLTEwODMsNiArMTA4NCwyOCBAQCB0eXBlZGVmIGVudW0gVm9sYXRpbGVGdW5jdGlvblN0 YXR1cwogCVZPTEFUSUxJVFlfTk9WT0xBVElMRQogfSBWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzOwog CisvKgorICogVW5pcXVlS2V5CisgKgorICogUmVwcmVzZW50cyB0aGUgdW5pcXVlIHByb3BlcnRp ZXMgaGVsZCBieSBhIFJlbE9wdEluZm8uCisgKgorICogZXhwcnMgaXMgYSBsaXN0IG9mIGV4cHJz IHdoaWNoIGlzIHVuaXF1ZSBvbiBjdXJyZW50IFJlbE9wdEluZm8uIGV4cHJzID0gTklMCisgKiBp cyBhIHNwZWNpYWwgY2FzZSBvZiBVbmlxdWVLZXksIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG9ubHkg MSByb3cgaW4gdGhhdAorICogcmVsYXRpb24uCisgKiBtdWx0aV9udWxsdmFsczogdHJ1ZSBtZWFu cyBtdWx0aSBudWxsIHZhbHVlcyBtYXkgZXhpc3QgaW4gdGhlc2UgZXhwcnMsIHNvIHRoZQorICog dW5pcXVlbmVzcyBpcyBub3QgZ3VhcmFudGVlZCBpbiB0aGlzIGNhc2UuIFRoaXMgZmllbGQgaXMg bmVjZXNzYXJ5IGZvcgorICogcmVtb3ZlX3VzZWxlc3Nfam9pbiAmIHJlZHVjZV91bmlxdWVfc2Vt aWpvaW5zIHdoZXJlIHdlIGRvbid0IG1pbmQgdGhlc2UKKyAqIGR1cGxpY2F0ZWQgTlVMTCB2YWx1 ZXMuIEl0IGlzIHNldCB0byB0cnVlIGZvciAyIGNhc2VzLiBPbmUgaXMgYSB1bmlxdWUga2V5Cisg KiBmcm9tIGEgdW5pcXVlIGluZGV4IGJ1dCB0aGUgcmVsYXRlZCBjb2x1bW4gaXMgbnVsbGFibGUu IFRoZSBvdGhlciBvbmUgaXMgZm9yCisgKiBvdXRlciBqb2luLiBzZWUgcG9wdWxhdGVfam9pbnJl bF91bmlxdWVrZXlzIGZvciBkZXRhaWwuCisgKi8KK3R5cGVkZWYgc3RydWN0IFVuaXF1ZUtleQor eworCU5vZGVUYWcJCXR5cGU7CisJTGlzdAkgICAqZXhwcnM7CisJYm9vbAkJbXVsdGlfbnVsbHZh bHM7Cit9IFVuaXF1ZUtleTsKKwogLyoKICAqIFBhdGhUYXJnZXQKICAqCkBAIC0yNTgxLDcgKzI2 MDQsNyBAQCB0eXBlZGVmIGVudW0KICAqCiAgKiBmbGFncyBpbmRpY2F0aW5nIHdoYXQga2luZHMg b2YgZ3JvdXBpbmcgYXJlIHBvc3NpYmxlLgogICogcGFydGlhbF9jb3N0c19zZXQgaXMgdHJ1ZSBp ZiB0aGUgYWdnX3BhcnRpYWxfY29zdHMgYW5kIGFnZ19maW5hbF9jb3N0cwotICogCQloYXZlIGJl ZW4gaW5pdGlhbGl6ZWQuCisgKgkJaGF2ZSBiZWVuIGluaXRpYWxpemVkLgogICogYWdnX3BhcnRp YWxfY29zdHMgZ2l2ZXMgcGFydGlhbCBhZ2dyZWdhdGlvbiBjb3N0cy4KICAqIGFnZ19maW5hbF9j b3N0cyBnaXZlcyBmaW5hbGl6YXRpb24gY29zdHMuCiAgKiB0YXJnZXRfcGFyYWxsZWxfc2FmZSBp cyB0cnVlIGlmIHRhcmdldCBpcyBwYXJhbGxlbCBzYWZlLgpAQCAtMjYxMSw4ICsyNjM0LDggQEAg dHlwZWRlZiBzdHJ1Y3QKICAqIGxpbWl0X3R1cGxlcyBpcyBhbiBlc3RpbWF0ZWQgYm91bmQgb24g dGhlIG51bWJlciBvZiBvdXRwdXQgdHVwbGVzLAogICoJCW9yIC0xIGlmIG5vIExJTUlUIG9yIGNv dWxkbid0IGVzdGltYXRlLgogICogY291bnRfZXN0IGFuZCBvZmZzZXRfZXN0IGFyZSB0aGUgZXN0 aW1hdGVkIHZhbHVlcyBvZiB0aGUgTElNSVQgYW5kIE9GRlNFVAotICogCQlleHByZXNzaW9ucyBj b21wdXRlZCBieSBwcmVwcm9jZXNzX2xpbWl0KCkgKHNlZSBjb21tZW50cyBmb3IKLSAqIAkJcHJl cHJvY2Vzc19saW1pdCgpIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAqCQlleHByZXNzaW9ucyBj b21wdXRlZCBieSBwcmVwcm9jZXNzX2xpbWl0KCkgKHNlZSBjb21tZW50cyBmb3IKKyAqCQlwcmVw cm9jZXNzX2xpbWl0KCkgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICovCiB0eXBlZGVmIHN0cnVj dAogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGdfbGlzdC5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGdfbGlzdC5oCmluZGV4IDJjYjlkMTM3MWQuLmQxYmZiYjc3YzYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w Z19saXN0LmgKQEAgLTU1OCw2ICs1NTgsNyBAQCBleHRlcm4gYm9vbCBsaXN0X21lbWJlcl9wdHIo Y29uc3QgTGlzdCAqbGlzdCwgY29uc3Qgdm9pZCAqZGF0dW0pOwogZXh0ZXJuIGJvb2wgbGlzdF9t ZW1iZXJfaW50KGNvbnN0IExpc3QgKmxpc3QsIGludCBkYXR1bSk7CiBleHRlcm4gYm9vbCBsaXN0 X21lbWJlcl9vaWQoY29uc3QgTGlzdCAqbGlzdCwgT2lkIGRhdHVtKTsKIAorZXh0ZXJuIGJvb2wg bGlzdF9pc19zdWJzZXQoY29uc3QgTGlzdCAqbWVtYmVycywgY29uc3QgTGlzdCAqdGFyZ2V0KTsK IGV4dGVybiBwZ19ub2Rpc2NhcmQgTGlzdCAqbGlzdF9kZWxldGUoTGlzdCAqbGlzdCwgdm9pZCAq ZGF0dW0pOwogZXh0ZXJuIHBnX25vZGlzY2FyZCBMaXN0ICpsaXN0X2RlbGV0ZV9wdHIoTGlzdCAq bGlzdCwgdm9pZCAqZGF0dW0pOwogZXh0ZXJuIHBnX25vZGlzY2FyZCBMaXN0ICpsaXN0X2RlbGV0 ZV9pbnQoTGlzdCAqbGlzdCwgaW50IGRhdHVtKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29w dGltaXplci9hcHBlbmRpbmZvLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kaW5mby5o CmluZGV4IGZjODA4ZGNkMjcuLmIyZDlkZjJkZjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29w dGltaXplci9hcHBlbmRpbmZvLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGlu Zm8uaApAQCAtNDcsNCArNDcsNyBAQCBleHRlcm4gdm9pZCBhZGRfcm93X2lkZW50aXR5X2NvbHVt bnMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aW5kZXgsCiAJCQkJCQkJCQkgUmVsYXRpb24g dGFyZ2V0X3JlbGF0aW9uKTsKIGV4dGVybiB2b2lkIGRpc3RyaWJ1dGVfcm93X2lkZW50aXR5X3Zh cnMoUGxhbm5lckluZm8gKnJvb3QpOwogCitleHRlcm4gQXBwZW5kUmVsSW5mbyAqZmluZF9hcHBp bmZvX2J5X2NoaWxkKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBjaGlsZF9pbmRleCk7CitleHRl cm4gVmFyICpmaW5kX3BhcmVudF92YXIoQXBwZW5kUmVsSW5mbyAqYXBwaW5mbywgVmFyICpjaGls ZF92YXIpOworCiAjZW5kaWYJCQkJCQkJLyogQVBQRU5ESU5GT19IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmgKaW5kZXggNmI4ZWUwYzY5Zi4uMjg1MWQwNGRlOSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9vcHRpbWl6ZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBPUFRJTUlaRVJfSAogCiAj aW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgogCiAvKiBUZXN0IGlmIGFuIGV4cHJlc3Npb24gbm9kZSByZXByZXNlbnRzIGEgU1JGIGNhbGwu ICBCZXdhcmUgbXVsdGlwbGUgZXZhbCEgKi8KICNkZWZpbmUgSVNfU1JGX0NBTEwobm9kZSkgXApA QCAtMTcxLDYgKzE3Miw3IEBAIGV4dGVybiBUYXJnZXRFbnRyeSAqZ2V0X3NvcnRncm91cHJlZl90 bGUoSW5kZXggc29ydHJlZiwKIAkJCQkJCQkJCQkgTGlzdCAqdGFyZ2V0TGlzdCk7CiBleHRlcm4g VGFyZ2V0RW50cnkgKmdldF9zb3J0Z3JvdXBjbGF1c2VfdGxlKFNvcnRHcm91cENsYXVzZSAqc2dD bGF1c2UsCiAJCQkJCQkJCQkJCUxpc3QgKnRhcmdldExpc3QpOworZXh0ZXJuIFZhciAqZmluZF92 YXJfZm9yX3N1YnF1ZXJ5X3RsZShSZWxPcHRJbmZvICpyZWwsIFRhcmdldEVudHJ5ICp0bGUpOwog ZXh0ZXJuIE5vZGUgKmdldF9zb3J0Z3JvdXBjbGF1c2VfZXhwcihTb3J0R3JvdXBDbGF1c2UgKnNn Q2xhdXNlLAogCQkJCQkJCQkJICBMaXN0ICp0YXJnZXRMaXN0KTsKIGV4dGVybiBMaXN0ICpnZXRf c29ydGdyb3VwbGlzdF9leHBycyhMaXN0ICpzZ0NsYXVzZXMsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmlu ZGV4IDBjM2EwYjkwYzguLjI4ZGIzYzU5Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yNTQs NSArMjU0LDQ4IEBAIGV4dGVybiBQYXRoS2V5ICptYWtlX2Nhbm9uaWNhbF9wYXRoa2V5KFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCQkJICAgaW50IHN0cmF0ZWd5LCBib29sIG51bGxzX2ZpcnN0 KTsKIGV4dGVybiB2b2lkIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQlMaXN0ICpsaXZlX2NoaWxkcmVscyk7CitleHRl cm4gTGlzdCAqc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJICBSZWxPcHRJbmZvICpvdXRl cnJlbCwKKwkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCQkgIExpc3Qg KnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCQkg IGJvb2wgKm1lcmdlam9pbl9hbGxvd2VkKTsKKworLyoKKyAqIHVuaXF1ZWtleXMuYworICoJICBV dGlsaXRpZXMgZm9yIG1hdGNoaW5nIGFuZCBidWlsZGluZyB1bmlxdWUga2V5cworICovCitleHRl cm4gdm9pZCBwb3B1bGF0ZV9iYXNlcmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCQkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkJCQkJCQlMaXN0KiB1bmlxdWVfaW5k ZXhfbGlzdCk7CitleHRlcm4gdm9pZCBwb3B1bGF0ZV9wYXJ0aXRpb25lZHJlbF91bmlxdWVrZXlz KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJ CQkJCQkJTGlzdCAqY2hpbGRyZWxzKTsKK2V4dGVybiB2b2lkIHBvcHVsYXRlX2Rpc3RpbmN0cmVs X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCVJlbE9wdEluZm8gKmlu cHV0cmVsLAorCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpkaXN0aW5jdHJlbCk7CitleHRlcm4gdm9p ZCBwb3B1bGF0ZV9ncm91cHJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJ CQkJCSBSZWxPcHRJbmZvICpncm91cHJlbCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5wdXRy ZWwpOworZXh0ZXJuIHZvaWQgcG9wdWxhdGVfdW5pb25yZWxfdW5pcXVla2V5cyhQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnVuaW9ucmVsKTsKK2V4dGVybiB2b2lk IHNpbXBsZV9jb3B5X3VuaXF1ZWtleXMoUmVsT3B0SW5mbyAqb2xkcmVsLAorCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpuZXdyZWwpOworZXh0ZXJuIHZvaWQgY29udmVydF9zdWJxdWVyeV91bmlxdWVr ZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKmN1cnJlbCwKKwkJ CQkJCQkJCQlSZWxPcHRJbmZvICpzdWJfZmluYWxfcmVsKTsKK2V4dGVybiB2b2lkIHBvcHVsYXRl X2pvaW5yZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJ bmZvICpqb2lucmVsLAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDEsCisJCQkJCQkJCQkJUmVs T3B0SW5mbyAqcmVsMiwKKwkJCQkJCQkJCQlMaXN0ICpyZXN0cmljdGxpc3QsCisJCQkJCQkJCQkJ Sm9pblR5cGUgam9pbnR5cGUpOworCitleHRlcm4gYm9vbCByZWxhdGlvbl9oYXNfdW5pcXVla2V5 c19mb3IoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAorCQkJ CQkJCQkJCUxpc3QgKmV4cHJzLAorCQkJCQkJCQkJCWJvb2wgYWxsb3dfbXVsdGludWxscyk7Citl eHRlcm4gYm9vbCByZWxhdGlvbl9pc19vbmVyb3coUmVsT3B0SW5mbyAqcmVsKTsKIAogI2VuZGlm CQkJCQkJCS8qIFBBVEhTX0ggKi8KLS0gCjIuMzMuMQoK --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: application/octet-stream; name="v3-0001-Extend-UniqueKeys.patch" Content-Description: v3-0001-Extend-UniqueKeys.patch Content-Disposition: attachment; filename="v3-0001-Extend-UniqueKeys.patch"; size=13363; creation-date="Thu, 13 Jan 2022 15:10:50 GMT"; modification-date="Thu, 13 Jan 2022 15:10:50 GMT" Content-Transfer-Encoding: base64 RnJvbSA5ZTI0N2E3MGE3MmM0MmE0YWUyYzY5YWQ0Yjg0ODNlYjQ3N2VhY2MyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6MzM6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIIDMv NV0gRXh0ZW5kIFVuaXF1ZUtleXMKClByZXBhcmVzIGluZGV4IHNraXAgc2NhbiBpbXBsZW1lbnRh dGlvbiB1c2luZyBVbmlxdWVLZXlzLiBBbGxvd3MgdG8Kc3BlY2lmeSB3aGF0IGFyZSB0aGUgInJl cXVlc3RlZCIga2V5cyB0aGF0IHNob3VsZCBiZSB1bmlxdWUsIGFuZCBhZGQKdGhlbSB0byBuZWNl c3NhcnkgUGF0aHMgdG8gbWFrZSB0aGVtIHVzZWZ1bCBsYXRlci4KClByb3Bvc2VkIGJ5IERhdmlk IFJvd2xleSwgY29udGFpbnMgZmV3IGJpdHMgb3V0IG9mIHByZXZpb3VzIHZlcnNpb24gZnJvbQpK ZXNwZXIgUGVkZXJzZW4uCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMu YyAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL3VuaXF1ZWtleXMuYyB8IDYzICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8IDM2ICsrKysrKysrKysrKystCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAzMiArKysrKysrKystLS0tCiBz cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgNSArKwogc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmggICAgICAgICAgIHwgIDggKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxOTQgaW5z ZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvcGF0aGtleXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhr ZXlzLmMKaW5kZXggOTAyMmM3N2RhYy4uOWI3Y2RjZTM1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9wYXRoa2V5cy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAKIAorc3RhdGljIGJvb2wgcGF0aGtleV9pc191bmlxdWUoUGF0aEtleSAqbmV3X3Bh dGhrZXksIExpc3QgKnBhdGhrZXlzKTsKIHN0YXRpYyBib29sIHBhdGhrZXlfaXNfcmVkdW5kYW50 KFBhdGhLZXkgKm5ld19wYXRoa2V5LCBMaXN0ICpwYXRoa2V5cyk7CiBzdGF0aWMgYm9vbCBtYXRj aGVzX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShSZXN0cmljdEluZm8gKnJpbmZvLAogCQkJCQkJ CQkJCQkgUmVsT3B0SW5mbyAqcGFydHJlbCwKQEAgLTk1LDYgKzk2LDI5IEBAIG1ha2VfY2Fub25p Y2FsX3BhdGhrZXkoUGxhbm5lckluZm8gKnJvb3QsCiAJcmV0dXJuIHBrOwogfQogCisvKgorICog cGF0aGtleV9pc191bmlxdWUKKyAqCSAgIENoZWNrcyBpZiB0aGUgbmV3IHBhdGhrZXkncyBlcXVp dmFsZW5jZSBjbGFzcyBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mCisgKiAgICAgYW55IGV4aXN0aW5n IG1lbWJlciBvZiB0aGUgcGF0aGtleSBsaXN0LgorICovCitzdGF0aWMgYm9vbAorcGF0aGtleV9p c191bmlxdWUoUGF0aEtleSAqbmV3X3BhdGhrZXksIExpc3QgKnBhdGhrZXlzKQoreworCUVxdWl2 YWxlbmNlQ2xhc3MgKm5ld19lYyA9IG5ld19wYXRoa2V5LT5wa19lY2xhc3M7CisJTGlzdENlbGwg ICAqbGM7CisKKwkvKiBJZiBzYW1lIEVDIGFscmVhZHkgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCwg dGhlbiBub3QgdW5pcXVlICovCisJZm9yZWFjaChsYywgcGF0aGtleXMpCisJeworCQlQYXRoS2V5 ICAgICpvbGRfcGF0aGtleSA9IChQYXRoS2V5ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKG5ld19l YyA9PSBvbGRfcGF0aGtleS0+cGtfZWNsYXNzKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJl dHVybiB0cnVlOworfQorCiAvKgogICogcGF0aGtleV9pc19yZWR1bmRhbnQKICAqCSAgIElzIGEg cGF0aGtleSByZWR1bmRhbnQgd2l0aCBvbmUgYWxyZWFkeSBpbiB0aGUgZ2l2ZW4gbGlzdD8KQEAg LTExNTEsNiArMTE3NSw0MSBAQCBtYWtlX3BhdGhrZXlzX2Zvcl9zb3J0Y2xhdXNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAlyZXR1cm4gcGF0aGtleXM7CiB9CiAKKy8qCisgKiBtYWtlX3BhdGhrZXlz X2Zvcl91bmlxdWVrZXljbGF1c2VzCisgKgkJR2VuZXJhdGUgYSBwYXRoa2V5cyBsaXN0IHRvIGJl IHVzZWQgZm9yIHVuaXF1ZWtleSBjbGF1c2VzCisgKi8KK0xpc3QgKgorbWFrZV9wYXRoa2V5c19m b3JfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgTGlzdCAqc29ydGNsYXVz ZXMsCisJCQkJCQkJIExpc3QgKnRsaXN0KQoreworCUxpc3QJICAgKnBhdGhrZXlzID0gTklMOwor CUxpc3RDZWxsICAgKmw7CisKKwlmb3JlYWNoKGwsIHNvcnRjbGF1c2VzKQorCXsKKwkJU29ydEdy b3VwQ2xhdXNlICpzb3J0Y2wgPSAoU29ydEdyb3VwQ2xhdXNlICopIGxmaXJzdChsKTsKKwkJRXhw cgkgICAqc29ydGtleTsKKwkJUGF0aEtleSAgICAqcGF0aGtleTsKKworCQlzb3J0a2V5ID0gKEV4 cHIgKikgZ2V0X3NvcnRncm91cGNsYXVzZV9leHByKHNvcnRjbCwgdGxpc3QpOworCQlBc3NlcnQo T2lkSXNWYWxpZChzb3J0Y2wtPnNvcnRvcCkpOworCQlwYXRoa2V5ID0gbWFrZV9wYXRoa2V5X2Zy b21fc29ydG9wKHJvb3QsCisJCQkJCQkJCQkJICAgc29ydGtleSwKKwkJCQkJCQkJCQkgICByb290 LT5udWxsYWJsZV9iYXNlcmVscywKKwkJCQkJCQkJCQkgICBzb3J0Y2wtPnNvcnRvcCwKKwkJCQkJ CQkJCQkgICBzb3J0Y2wtPm51bGxzX2ZpcnN0LAorCQkJCQkJCQkJCSAgIHNvcnRjbC0+dGxlU29y dEdyb3VwUmVmLAorCQkJCQkJCQkJCSAgIHRydWUpOworCisJCWlmIChwYXRoa2V5X2lzX3VuaXF1 ZShwYXRoa2V5LCBwYXRoa2V5cykpCisJCQlwYXRoa2V5cyA9IGxhcHBlbmQocGF0aGtleXMsIHBh dGhrZXkpOworCX0KKworCXJldHVybiBwYXRoa2V5czsKK30KKwogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAqCQlQQVRIS0VZUyBBTkQgTUVSR0VDTEFVU0VTCiAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMuYwppbmRleCBjYTQwYzQwODU4Li5h YjRiMWQxOTM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVr ZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5cy5jCkBAIC0x MTMyLDMgKzExMzIsNjYgQEAgYWRkX2NvbWJpbmVkX3VuaXF1ZWtleShQbGFubmVySW5mbyAqcm9v dCwKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQorCitMaXN0KgorYnVpbGRfdW5pcXVla2V5cyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqc29ydGNsYXVzZXMpCit7CisJTGlzdCAqcmVzdWx0ID0gTklM OworCUxpc3QgKnNvcnRrZXlzOworCUxpc3RDZWxsICpsOworCUxpc3QgKmV4cHJzID0gTklMOwor CisJc29ydGtleXMgPSBtYWtlX3BhdGhrZXlzX2Zvcl91bmlxdWVrZXlzKHJvb3QsCisJCQkJCQkJ CQkJCXNvcnRjbGF1c2VzLAorCQkJCQkJCQkJCQlyb290LT5wcm9jZXNzZWRfdGxpc3QpOworCisJ LyogQ3JlYXRlIGEgdW5pcXVla2V5IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KKwlmb3JlYWNo KGwsIHNvcnRrZXlzKQorCXsKKwkJUGF0aEtleSAgICAqcGF0aGtleSA9IChQYXRoS2V5ICopIGxm aXJzdChsKTsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSBwYXRoa2V5LT5wa19lY2xhc3M7CisJ CUVxdWl2YWxlbmNlTWVtYmVyICptZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIqKSBsZmlyc3QobGlz dF9oZWFkKGVjLT5lY19tZW1iZXJzKSk7CisJCWlmIChFQ19NVVNUX0JFX1JFRFVOREFOVChlYykp CisJCQljb250aW51ZTsKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBtZW0tPmVtX2V4cHIpOwor CX0KKworCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBtYWtlVW5pcXVlS2V5KGV4cHJzLCBmYWxz ZSkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbAorcXVlcnlfaGFzX3VuaXF1ZWtleXNf Zm9yKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRodW5pcXVla2V5cywKKwkJCQkJCSBib29s IGFsbG93X211bHRpbnVsbHMpCit7CisJTGlzdENlbGwgKmxjOworCUxpc3RDZWxsICpsYzI7CisK KwkvKiByb290LT5xdWVyeV91bmlxdWVrZXlzIGFyZSB0aGUgcmVxdWVzdGVkIERJU1RJTkNUIGNs YXVzZXMgb24gcXVlcnkgbGV2ZWwKKwkgKiBwYXRodW5pcXVla2V5cyBhcmUgdGhlIHVuaXF1ZSBr ZXlzIG9uIGN1cnJlbnQgcGF0aC4KKwkgKiBBbGwgcmVxdWVzdGVkIHF1ZXJ5X3VuaXF1ZWtleXMg bXVzdCBiZSBzYXRpc2ZpZWQgYnkgdGhlIHBhdGh1bmlxdWVrZXlzCisJICovCisJZm9yZWFjaChs Yywgcm9vdC0+cXVlcnlfdW5pcXVla2V5cykKKwl7CisJCVVuaXF1ZUtleSAqcXVlcnlfdWtleSA9 IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOworCQlib29sIHNhdGlzZmllZCA9IGZhbHNlOwor CQlmb3JlYWNoKGxjMiwgcGF0aHVuaXF1ZWtleXMpCisJCXsKKwkJCVVuaXF1ZUtleSAqdWtleSA9 IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMyKTsKKwkJCWlmICh1a2V5LT5tdWx0aV9udWxsdmFs cyAmJiAhYWxsb3dfbXVsdGludWxscykKKwkJCQljb250aW51ZTsKKwkJCWlmIChsaXN0X2xlbmd0 aCh1a2V5LT5leHBycykgPT0gMCAmJgorCQkJCWxpc3RfbGVuZ3RoKHF1ZXJ5X3VrZXktPmV4cHJz KSAhPSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJz LCBxdWVyeV91a2V5LT5leHBycykpCisJCQl7CisJCQkJc2F0aXNmaWVkID0gdHJ1ZTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIXNhdGlzZmllZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXgg ZmY5ZjZkZjg1Ny4uNWFlMjQ3NTQwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwpAQCAtMzA4MiwxMiArMzA4MiwxOCBAQCBzdGFuZGFyZF9xcF9jYWxsYmFjayhQbGFubmVySW5m byAqcm9vdCwgdm9pZCAqZXh0cmEpCiAJICovCiAJaWYgKHFwX2V4dHJhLT5ncm91cENsYXVzZSAm JgogCQlncm91cGluZ19pc19zb3J0YWJsZShxcF9leHRyYS0+Z3JvdXBDbGF1c2UpKQorCXsKIAkJ cm9vdC0+Z3JvdXBfcGF0aGtleXMgPQogCQkJbWFrZV9wYXRoa2V5c19mb3Jfc29ydGNsYXVzZXMo cm9vdCwKIAkJCQkJCQkJCQkgIHFwX2V4dHJhLT5ncm91cENsYXVzZSwKIAkJCQkJCQkJCQkgIHRs aXN0KTsKKwkJcm9vdC0+cXVlcnlfdW5pcXVla2V5cyA9IGJ1aWxkX3VuaXF1ZWtleXMocm9vdCwg cGFyc2UtPmRpc3RpbmN0Q2xhdXNlKTsKKwl9CiAJZWxzZQorCXsKIAkJcm9vdC0+Z3JvdXBfcGF0 aGtleXMgPSBOSUw7CisJCXJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgPSBOSUw7CisJfQogCiAJLyog V2UgY29uc2lkZXIgb25seSB0aGUgZmlyc3QgKGJvdHRvbSkgd2luZG93IGluIHBhdGhrZXlzIGxv Z2ljICovCiAJaWYgKGFjdGl2ZVdpbmRvd3MgIT0gTklMKQpAQCAtNDQ5NywxMyArNDUwMywxOSBA QCBjcmVhdGVfZmluYWxfZGlzdGluY3RfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKmlucHV0X3JlbCwKIAkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOwog CiAJCQlpZiAocGF0aGtleXNfY29udGFpbmVkX2luKG5lZWRlZF9wYXRoa2V5cywgcGF0aC0+cGF0 aGtleXMpKQotCQkJewogCQkJCWFkZF9wYXRoKGRpc3RpbmN0X3JlbCwgKFBhdGggKikKIAkJCQkJ CSBjcmVhdGVfdXBwZXJfdW5pcXVlX3BhdGgocm9vdCwgZGlzdGluY3RfcmVsLAogCQkJCQkJCQkJ CQkJICBwYXRoLAogCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChyb290LT5kaXN0aW5jdF9wYXRo a2V5cyksCiAJCQkJCQkJCQkJCQkgIG51bURpc3RpbmN0Um93cykpOwotCQkJfQorCQl9CisKKwkJ Zm9yZWFjaChsYywgaW5wdXRfcmVsLT51bmlxdWVfcGF0aGxpc3QpCisJCXsKKwkJCVBhdGgJICAg KnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCisJCQlpZiAocXVlcnlfaGFzX3VuaXF1ZWtl eXNfZm9yKHJvb3QsIG5lZWRlZF9wYXRoa2V5cywgZmFsc2UpKQorCQkJCWFkZF9wYXRoKGRpc3Rp bmN0X3JlbCwgcGF0aCk7CiAJCX0KIAogCQkvKiBGb3IgZXhwbGljaXQtc29ydCBjYXNlLCBhbHdh eXMgdXNlIHRoZSBtb3JlIHJpZ29yb3VzIGNsYXVzZSAqLwpAQCAtNzExOCw2ICs3MTMwLDI2IEBA IGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJfQog CX0KIAorCWZvcmVhY2gobGMsIHJlbC0+dW5pcXVlX3BhdGhsaXN0KQorCXsKKwkJUGF0aAkgICAq c3VicGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisKKwkJLyogU2hvdWxkbid0IGhhdmUgYW55 IHBhcmFtZXRlcml6ZWQgcGF0aHMgYW55bW9yZSAqLworCQlBc3NlcnQoc3VicGF0aC0+cGFyYW1f aW5mbyA9PSBOVUxMKTsKKworCQlpZiAodGxpc3Rfc2FtZV9leHBycykKKwkJCXN1YnBhdGgtPnBh dGh0YXJnZXQtPnNvcnRncm91cHJlZnMgPQorCQkJCXNjYW5qb2luX3RhcmdldC0+c29ydGdyb3Vw cmVmczsKKwkJZWxzZQorCQl7CisJCQlQYXRoCSAgICpuZXdwYXRoOworCisJCQluZXdwYXRoID0g KFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LCByZWwsIHN1YnBhdGgsCisJCQkJ CQkJCQkJCQkJICBzY2Fuam9pbl90YXJnZXQpOworCQkJbGZpcnN0KGxjKSA9IG5ld3BhdGg7CisJ CX0KKwl9CisKIAkvKgogCSAqIE5vdywgaWYgZmluYWwgc2Nhbi9qb2luIHRhcmdldCBjb250YWlu cyBTUkZzLCBpbnNlcnQgUHJvamVjdFNldFBhdGgocykKIAkgKiBhdG9wIGVhY2ggZXhpc3Rpbmcg cGF0aC4gIChOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGxvb2sgYXQgdGhlCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA1YzMyYzk2YjcxLi5hYmI3N2Q4Njdl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTQxNiwxMCArNDE2LDEw IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogICogJ3BhcmVudF9yZWwn IGlzIHRoZSByZWxhdGlvbiBlbnRyeSB0byB3aGljaCB0aGUgcGF0aCBjb3JyZXNwb25kcy4KICAq ICduZXdfcGF0aCcgaXMgYSBwb3RlbnRpYWwgcGF0aCBmb3IgcGFyZW50X3JlbC4KICAqCi0gKiBS ZXR1cm5zIG5vdGhpbmcsIGJ1dCBtb2RpZmllcyBwYXJlbnRfcmVsLT5wYXRobGlzdC4KKyAqIFJl dHVybnMgbW9kaWZpZWQgcGF0aGxpc3QuCiAgKi8KLXZvaWQKLWFkZF9wYXRoKFJlbE9wdEluZm8g KnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRoKQorc3RhdGljIExpc3QgKgorYWRkX3BhdGhfdG8o UmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgTGlzdCAqcGF0aGxpc3QsIFBhdGggKm5ld19wYXRoKQog ewogCWJvb2wJCWFjY2VwdF9uZXcgPSB0cnVlOwkvKiB1bmxlc3Mgd2UgZmluZCBhIHN1cGVyaW9y IG9sZCBwYXRoICovCiAJaW50CQkJaW5zZXJ0X2F0ID0gMDsJLyogd2hlcmUgdG8gaW5zZXJ0IG5l dyBpdGVtICovCkBAIC00NDAsNyArNDQwLDcgQEAgYWRkX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50 X3JlbCwgUGF0aCAqbmV3X3BhdGgpCiAJICogZm9yIG1vcmUgdGhhbiBvbmUgb2xkIHBhdGggdG8g YmUgdG9zc2VkIG91dCBiZWNhdXNlIG5ld19wYXRoIGRvbWluYXRlcwogCSAqIGl0LgogCSAqLwot CWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhdGhsaXN0KQorCWZvcmVhY2gocDEsIHBhdGhsaXN0 KQogCXsKIAkJUGF0aAkgICAqb2xkX3BhdGggPSAoUGF0aCAqKSBsZmlyc3QocDEpOwogCQlib29s CQlyZW1vdmVfb2xkID0gZmFsc2U7IC8qIHVubGVzcyBuZXcgcHJvdmVzIHN1cGVyaW9yICovCkBA IC01ODQsOCArNTg0LDcgQEAgYWRkX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAq bmV3X3BhdGgpCiAJCSAqLwogCQlpZiAocmVtb3ZlX29sZCkKIAkJewotCQkJcGFyZW50X3JlbC0+ cGF0aGxpc3QgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KHBhcmVudF9yZWwtPnBhdGhsaXN0LAot CQkJCQkJCQkJCQkJCQkgIHAxKTsKKwkJCXBhdGhsaXN0ID0gZm9yZWFjaF9kZWxldGVfY3VycmVu dChwYXRobGlzdCwgcDEpOwogCiAJCQkvKgogCQkJICogRGVsZXRlIHRoZSBkYXRhIHBvaW50ZWQt dG8gYnkgdGhlIGRlbGV0ZWQgY2VsbCwgaWYgcG9zc2libGUKQEAgLTYxMiw4ICs2MTEsNyBAQCBh ZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkKIAlpZiAoYWNj ZXB0X25ldykKIAl7CiAJCS8qIEFjY2VwdCB0aGUgbmV3IHBhdGg6IGluc2VydCBpdCBhdCBwcm9w ZXIgcGxhY2UgaW4gcGF0aGxpc3QgKi8KLQkJcGFyZW50X3JlbC0+cGF0aGxpc3QgPQotCQkJbGlz dF9pbnNlcnRfbnRoKHBhcmVudF9yZWwtPnBhdGhsaXN0LCBpbnNlcnRfYXQsIG5ld19wYXRoKTsK KwkJcGF0aGxpc3QgPSBsaXN0X2luc2VydF9udGgocGF0aGxpc3QsIGluc2VydF9hdCwgbmV3X3Bh dGgpOwogCX0KIAllbHNlCiAJewpAQCAtNjIxLDYgKzYxOSwyMyBAQCBhZGRfcGF0aChSZWxPcHRJ bmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkKIAkJaWYgKCFJc0EobmV3X3BhdGgsIElu ZGV4UGF0aCkpCiAJCQlwZnJlZShuZXdfcGF0aCk7CiAJfQorCisJcmV0dXJuIHBhdGhsaXN0Owor fQorCit2b2lkCithZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0 aCkKK3sKKwlwYXJlbnRfcmVsLT5wYXRobGlzdCA9IGFkZF9wYXRoX3RvKHBhcmVudF9yZWwsCisJ CQkJCQkJCQkgICBwYXJlbnRfcmVsLT5wYXRobGlzdCwgbmV3X3BhdGgpOworfQorCit2b2lkCith ZGRfdW5pcXVlX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpCit7 CisJcGFyZW50X3JlbC0+dW5pcXVlX3BhdGhsaXN0ID0gYWRkX3BhdGhfdG8ocGFyZW50X3JlbCwK KwkJCQkJCQkJCQkJICBwYXJlbnRfcmVsLT51bmlxdWVfcGF0aGxpc3QsCisJCQkJCQkJCQkJCSAg bmV3X3BhdGgpOwogfQogCiAvKgpAQCAtMjY2Miw2ICsyNjc3LDcgQEAgY3JlYXRlX3Byb2plY3Rp b25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRoa2V5cyA9IHN1 YnBhdGgtPnBhdGhrZXlzOwogCiAJcGF0aG5vZGUtPnN1YnBhdGggPSBzdWJwYXRoOworCXBhdGhu b2RlLT5wYXRoLnVuaXF1ZWtleXMgPSBzdWJwYXRoLT51bmlxdWVrZXlzOwogCiAJLyoKIAkgKiBX ZSBtaWdodCBub3QgbmVlZCBhIHNlcGFyYXRlIFJlc3VsdCBub2RlLiAgSWYgdGhlIGlucHV0IHBs YW4gbm9kZSB0eXBlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDU3ZTgwYTQ3ZDIuLjFkZTUwOTVl NzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yOTMsNiArMjkzLDcgQEAgc3RydWN0IFBsYW5u ZXJJbmZvCiAKIAlMaXN0CSAgICpxdWVyeV9wYXRoa2V5czsgLyogZGVzaXJlZCBwYXRoa2V5cyBm b3IgcXVlcnlfcGxhbm5lcigpICovCiAKKwlMaXN0CSAgICpxdWVyeV91bmlxdWVrZXlzOyAvKiB1 bmlxdWUga2V5cyByZXF1aXJlZCBmb3IgdGhlIHF1ZXJ5ICovCiAJTGlzdAkgICAqZ3JvdXBfcGF0 aGtleXM7IC8qIGdyb3VwQ2xhdXNlIHBhdGhrZXlzLCBpZiBhbnkgKi8KIAlMaXN0CSAgICp3aW5k b3dfcGF0aGtleXM7CS8qIHBhdGhrZXlzIG9mIGJvdHRvbSB3aW5kb3csIGlmIGFueSAqLwogCUxp c3QJICAgKmRpc3RpbmN0X3BhdGhrZXlzOwkvKiBkaXN0aW5jdENsYXVzZSBwYXRoa2V5cywgaWYg YW55ICovCkBAIC02OTUsNiArNjk2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUxp c3QJICAgKnBhdGhsaXN0OwkJLyogUGF0aCBzdHJ1Y3R1cmVzICovCiAJTGlzdAkgICAqcHBpbGlz dDsJCS8qIFBhcmFtUGF0aEluZm9zIHVzZWQgaW4gcGF0aGxpc3QgKi8KIAlMaXN0CSAgICpwYXJ0 aWFsX3BhdGhsaXN0OwkvKiBwYXJ0aWFsIFBhdGhzICovCisJTGlzdCAgICAgICAqdW5pcXVlX3Bh dGhsaXN0OyAgICAvKiB1bmlxdWUgUGF0aHMgKi8KIAlzdHJ1Y3QgUGF0aCAqY2hlYXBlc3Rfc3Rh cnR1cF9wYXRoOwogCXN0cnVjdCBQYXRoICpjaGVhcGVzdF90b3RhbF9wYXRoOwogCXN0cnVjdCBQ YXRoICpjaGVhcGVzdF91bmlxdWVfcGF0aDsKQEAgLTg4Niw2ICs4ODgsNyBAQCBzdHJ1Y3QgSW5k ZXhPcHRJbmZvCiAJYm9vbAkJYW1zZWFyY2hudWxsczsJLyogY2FuIEFNIHNlYXJjaCBmb3IgTlVM TC9OT1QgTlVMTCBlbnRyaWVzPyAqLwogCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CS8qIGRvZXMgQU0g aGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsgLyog ZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWNhbnNraXA7 CQkvKiBjYW4gQU0gc2tpcCBkdXBsaWNhdGUgdmFsdWVzPyAqLwogCWJvb2wJCWFtY2FucGFyYWxs ZWw7CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwogCWJvb2wJCWFtY2FubWFy a3BvczsJLyogZG9lcyBBTSBzdXBwb3J0IG1hcmsvcmVzdG9yZT8gKi8KIAkvKiBSYXRoZXIgdGhh biBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRo aXMgKi8KQEAgLTEyMjAsNiArMTIyMyw4IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgKIAogCUxpc3QJ ICAgKnBhdGhrZXlzOwkJLyogc29ydCBvcmRlcmluZyBvZiBwYXRoJ3Mgb3V0cHV0ICovCiAJLyog cGF0aGtleXMgaXMgYSBMaXN0IG9mIFBhdGhLZXkgbm9kZXM7IHNlZSBhYm92ZSAqLworCisJTGlz dAkgICAqdW5pcXVla2V5czsJLyogdGhlIHVuaXF1ZSBrZXlzLCBvciBOSUwgaWYgbm9uZSAqLwog fSBQYXRoOwogCiAvKiBNYWNybyBmb3IgZXh0cmFjdGluZyBhIHBhdGgncyBwYXJhbWV0ZXJpemF0 aW9uIHJlbGlkczsgYmV3YXJlIGRvdWJsZSBldmFsICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CmluZGV4IDYyMGVlZGEyZDYuLmJiNmQ3MzBlOTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29w dGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiBpbnQJY29tcGFyZV9mcmFjdGlvbmFsX3BhdGhfY29z dHMoUGF0aCAqcGF0aDEsIFBhdGggKnBhdGgyLAogCQkJCQkJCQkJCSAgZG91YmxlIGZyYWN0aW9u KTsKIGV4dGVybiB2b2lkIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKTsKIGV4 dGVybiB2b2lkIGFkZF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRo KTsKK2V4dGVybiB2b2lkIGFkZF91bmlxdWVfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQ YXRoICpuZXdfcGF0aCk7CiBleHRlcm4gYm9vbCBhZGRfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZv ICpwYXJlbnRfcmVsLAogCQkJCQkJCSAgQ29zdCBzdGFydHVwX2Nvc3QsIENvc3QgdG90YWxfY29z dCwKIAkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aHMuaAppbmRleCAyOGRiM2M1OWNkLi4xNmJiNWUwZWVhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aHMuaApAQCAtMjI5LDYgKzIyOSw5IEBAIGV4dGVybiBMaXN0ICpidWlsZF9qb2luX3BhdGhr ZXlzKFBsYW5uZXJJbmZvICpyb290LAogZXh0ZXJuIExpc3QgKm1ha2VfcGF0aGtleXNfZm9yX3Nv cnRjbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnNvcnRjbGF1 c2VzLAogCQkJCQkJCQkJCSAgIExpc3QgKnRsaXN0KTsKK2V4dGVybiBMaXN0ICptYWtlX3BhdGhr ZXlzX2Zvcl91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgTGlzdCAq c29ydGNsYXVzZXMsCisJCQkJCQkJCQkJICBMaXN0ICp0bGlzdCk7CiBleHRlcm4gdm9pZCBpbml0 aWFsaXplX21lcmdlY2xhdXNlX2VjbGFzc2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJ CQlSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5mbyk7CiBleHRlcm4gdm9pZCB1cGRhdGVfbWVyZ2Vj bGF1c2VfZWNsYXNzZXMoUGxhbm5lckluZm8gKnJvb3QsCkBAIC0yOTYsNiArMjk5LDExIEBAIGV4 dGVybiBib29sIHJlbGF0aW9uX2hhc191bmlxdWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJTGlzdCAqZXhwcnMsCiAJCQkJ CQkJCQkJYm9vbCBhbGxvd19tdWx0aW51bGxzKTsKK2V4dGVybiBib29sIHF1ZXJ5X2hhc191bmlx dWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBMaXN0ICpleHBycywKKwkJ CQkJCQkJCSBib29sIGFsbG93X211bHRpbnVsbHMpOwogZXh0ZXJuIGJvb2wgcmVsYXRpb25faXNf b25lcm93KFJlbE9wdEluZm8gKnJlbCk7CiAKK2V4dGVybiBMaXN0ICpidWlsZF91bmlxdWVrZXlz KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpzb3J0Y2xhdXNlcyk7CisKICNlbmRpZgkJCQkJCQkv KiBQQVRIU19IICovCi0tIAoyLjMzLjEKCg== --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: application/octet-stream; name="v3-0002-Index-skip-scan.patch" Content-Description: v3-0002-Index-skip-scan.patch Content-Disposition: attachment; filename="v3-0002-Index-skip-scan.patch"; size=236575; creation-date="Thu, 13 Jan 2022 15:10:50 GMT"; modification-date="Thu, 13 Jan 2022 15:10:50 GMT" Content-Transfer-Encoding: base64 RnJvbSA4YjUyNzg5YjI3ZmM1NzMwYjU3MTVhOTFmYmZlOTZlYmE3NTYyYmUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaXMgdmFuIE5lZSA8ZmxvcmlzLnZhbm5lZUBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMTUgTm92IDIwMTkgMDk6NDY6NTMgLTA1MDAKU3ViamVjdDogW1BBVENI IDQvNV0gSW5kZXggc2tpcCBzY2FuCgpJbXBsZW1lbnRhdGlvbiBvZiBJbmRleCBTa2lwIFNjYW4g KHNlZSBMb29zZSBJbmRleCBTY2FuIGluIHRoZSB3aWtpIFsxXSkKYXMgcGFydCBvZiB0aGUgSW5k ZXhPbmx5U2NhbiwgSW5kZXhTY2FuIGFuZCBCaXRtYXBJbmRleFNjYW4gZm9yIG5idHJlZS4KVGhp cyBwYXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiB0d28gbWFpbiB0eXBlcyBvZiBxdWVyaWVz IHNpZ25pZmljYW50bHk6Ci0gU0VMRUNUIERJU1RJTkNULCBTRUxFQ1QgRElTVElOQ1QgT04KLSBS ZWd1bGFyIFNFTEVDVHMgd2l0aCBXSEVSRS1jbGF1c2VzIG9uIG5vbi1sZWFkaW5nIGluZGV4IGF0 dHJpYnV0ZXMKRm9yIGV4YW1wbGUsIGdpdmVuIGFuIG5idHJlZSBpbmRleCBvbiB0aHJlZSBjb2x1 bW5zIChhLGIsYyksIHRoZSBmb2xsb3dpbmcgcXVlcmllcwptYXkgbm93IGJlIHNpZ25pZmljYW50 bHkgZmFzdGVyOgotIFNFTEVDVCBESVNUSU5DVCBPTiAoYSkgKiBGUk9NIHQxCi0gU0VMRUNUICog RlJPTSB0MSBXSEVSRSBiPTIKLSBTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGIgSU4gKDEwLDQwKQot IFNFTEVDVCBESVNUSU5DVCBPTiAoYSxiKSAqIEZST00gdDEgV0hFUkUgYyBCRVRXRUVOIDEwIEFO RCAxMDAgT1JERVIgQlkgYSxiLGMKCk9yaWdpbmFsIHBhdGNoIGFuZCBkZXNpZ24gd2VyZSBwcm9w b3NlZCBieSBUaG9tYXMgTXVucm8gWzJdLCByZXZpdmVkIGFuZAppbXByb3ZlZCBieSBEbWl0cnkg RG9sZ292IGFuZCBKZXNwZXIgUGVkZXJzZW4uIEZ1cnRoZXIgZW5oYW5jZWQgZnVuY3Rpb25hbGl0 eQphZGRlZCBieSBGbG9yaXMgdmFuIE5lZSByZWdhcmRpbmcgYSBtb3JlIGdlbmVyYWwgYW5kIHBl cmZvcm1hbnQgc2tpcCBpbXBsZW1lbnRhdGlvbi4KClsxXSBodHRwczovL3dpa2kucG9zdGdyZXNx bC5vcmcvd2lraS9Mb29zZV9pbmRleHNjYW4KWzJdIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvZmxhdC9DQURMV21YWGJUU0J4UC1Nekp1UEFZU3NMXzJmMGlQbTVWV1BiQ3ZE YlZ2Zlg5M0ZLa3clNDBtYWlsLmdtYWlsLmNvbQoKQXV0aG9yOiBGbG9yaXMgdmFuIE5lZSwgSmVz cGVyIFBlZGVyc2VuLCBEbWl0cnkgRG9sZ292ClJldmlld2VkLWJ5OiBUaG9tYXMgTXVucm8sIERh dmlkIFJvd2xleSwgS3lvdGFybyBIb3JpZ3VjaGksIFRvbWFzIFZvbmRyYSwgUGV0ZXIgR2VvZ2hl Z2FuCi0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwg ICAgNCArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMyArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAg IDE1ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAx MjEgKy0KIGRvYy9zcmMvc2dtbC9pbmRpY2VzLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICAg MyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgICAz ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgIDMg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAgMyAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAgMTYzICsr CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01ha2VmaWxlICAgICAgICAgICAgfCAgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8ICAgNTggKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8ICA3OTAgKysr Ky0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNraXAuYyAgICAgICAgICAgfCAx NDU1ICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQu YyAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxz LmMgICAgICAgICAgfCAgODUwICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jICAgICAgICAgICAgICAgIHwgICAyOSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nh bi5jICAgICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0 bWFwSW5kZXhzY2FuLmMgICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jICAgICAgfCAgIDY5ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMgICAgICAgICAgfCAgIDcyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3Mu YyAgICAgICAgICAgICAgICAgfCAgICA1ICsKIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMg ICAgICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxw YXRocy5jICAgICAgICAgfCAgIDUyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMgICAgICAgICB8ICAgNjggKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtl eXMuYyAgICAgICAgIHwgICA3MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMgICAgICAgfCAgIDM4ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMgICAgICAgICAgfCAgIDE2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jICAgICAgICAgfCAgIDc4ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAg ICAgICAgICAgIHwgICAgOSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMgICAg ICAgICAgICB8ICAgIDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAg ICAgICAgICB8ICAgMTkgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAg ICAgICAgIHwgICAxNiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAg ICAgICAgfCAgMTQzICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAg ICAgICAgfCAgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAgIDcgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAg ICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgICA1ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgICAgNCArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAg fCAgICA0ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2VuY25hbWVzLmMgICAgICAgICAgICAgICB8 ICAgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvd2NoYXIuYyAgICAgICAgICAgICAgICAgIHwg ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQgfCAg NTk5ICsrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAg ICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwgICAg ICB8ICAyNDggKysrCiA1MyBmaWxlcyBjaGFuZ2VkLCA0NjExIGluc2VydGlvbnMoKyksIDU0NiBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNraXAuYwogY3JlYXRlIG1vZGUgMTIwMDAwIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2VuY25h bWVzLmMKIGNyZWF0ZSBtb2RlIDEyMDAwMCBzcmMvaW50ZXJmYWNlcy9saWJwcS93Y2hhci5jCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggZDI1MTBlZTY0OC4uOTkxNGFiMWY3YSAxMDA2NDQK LS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCkBAIC0yNjUzLDcgKzI2NTMsNyBAQCBidF9yb290ZGVzY2VuZChC dHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJQnVmZmVyCQlsYnVmOwog CWJvb2wJCWV4aXN0czsKIAotCWtleSA9IF9idF9ta3NjYW5rZXkoc3RhdGUtPnJlbCwgaXR1cCk7 CisJa2V5ID0gX2J0X21rc2NhbmtleShzdGF0ZS0+cmVsLCBpdHVwLCBOVUxMKTsKIAlBc3NlcnQo a2V5LT5oZWFwa2V5c3BhY2UgJiYga2V5LT5zY2FudGlkICE9IE5VTEwpOwogCiAJLyoKQEAgLTMx MDksNyArMzEwOSw3IEBAIGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChSZWxhdGlvbiByZWwsIElu ZGV4VHVwbGUgaXR1cCkKIHsKIAlCVFNjYW5JbnNlcnQgc2tleTsKIAotCXNrZXkgPSBfYnRfbWtz Y2Fua2V5KHJlbCwgaXR1cCk7CisJc2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBpdHVwLCBOVUxM KTsKIAlza2V5LT5waXZvdHNlYXJjaCA9IHRydWU7CiAKIAlyZXR1cm4gc2tleTsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5k ZXggYTQzNGNmOTNlZi4uZGUxYmM0NTgwMCAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0 aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTEzNCw2ICsxMzQsOSBAQCBi bGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJs YnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGJsdmFjdXVtY2xlYW51 cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9 IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2tpcHNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+ YW1nZXRza2lwdHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBibGNv c3Rlc3RpbWF0ZTsKIAlhbXJvdXRpbmUtPmFtb3B0aW9ucyA9IGJsb3B0aW9uczsKIAlhbXJvdXRp bmUtPmFtcHJvcGVydHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGFmYmI2YzM1ZTMuLjhhNjY5YjY0 NGUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTUwMTIsNiArNTAxMiwyMSBAQCBBTlkgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xh c3M9IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNraXBzY2FuIiB4cmVmbGFiZWw9ImVuYWJs ZV9pbmRleHNraXBzY2FuIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNraXBz Y2FuPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgor ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNraXBzY2FuPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFi bGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGluZGV4LXNraXAtc2Nh biBwbGFuCisgICAgICAgIHR5cGVzIChzZWUgPHhyZWYgbGlua2VuZD0iaW5kZXhlcy1pbmRleC1z a2lwLXNjYW5zIi8+KS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgPGxpdGVyYWw+b248L2xpdGVy YWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwiIHhyZWZs YWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9tYXRl cmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IDg0ZGU5MzEwNzEuLmU0NTBiNjhlZWIgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAt MTUzLDYgKzE1Myw5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1lbmRz Y2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKICAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9z OyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0 cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1za2lwX2Z1bmN0aW9uIGFtc2tpcDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtYmVnaW5zY2Fu X3NraXBfZnVuY3Rpb24gYW1iZWdpbnNraXBzY2FuOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAg ICBhbWdldHR1cGxlX3dpdGhfc2tpcF9mdW5jdGlvbiBhbWdldHNraXB0dXBsZTsgIC8qIGNhbiBi ZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxs ZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBOVUxMICovCkBAIC03NjIsNiArNzY1 LDEyMiBAQCBhbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICAgc3RydWN0IG1heSBi ZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor Ym9vbAorYW1za2lwIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgIFNjYW5EaXJlY3Rpb24g cHJlZml4RGlyLAorCVNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7Cis8L3Byb2dyYW1saXN0aW5n PgorICBTa2lwIHBhc3QgYWxsIHR1cGxlcyB3aGVyZSB0aGUgZmlyc3QgJ3ByZWZpeCcgY29sdW1u cyBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzCisgIHRoZSBsYXN0IHR1cGxlIHJldHVybmVkIGluIHRo ZSBjdXJyZW50IHNjYW4uIFRoZSBhcmd1bWVudHMgYXJlOgorCisgICA8dmFyaWFibGVsaXN0Pgor ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxwYXJhbWV0ZXI+c2NhbjwvcGFyYW1ldGVy PjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgSW5kZXggc2Nh biBpbmZvcm1hdGlvbgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHBhcmFtZXRlcj5w cmVmaXhEaXI8L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJh PgorICAgICAgIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHByZWZpeCBwYXJ0IG9mIHRoZSB0 dXBsZSBpcyBhZHZhbmNpbmcuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48cGFyYW1l dGVyPnBvc3RmaXhEaXI8L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAg IDxwYXJhPgorICAgICAgICBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBwb3N0Zml4IChldmVy eXRoaW5nIGFmdGVyIHRoZSBwcmVmaXgpIG9mIHRoZSB0dXBsZSBpcyBhZHZhbmNpbmcuCisgICAg ICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICA8L3Zh cmlhYmxlbGlzdD4KKworICA8L3BhcmE+CisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgorSW5k ZXhTY2FuRGVzYworYW1iZWdpbnNjYW5fc2tpcCAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKyAg ICAgICAgICAgICBpbnQgbmtleXMsCisJICAgICBpbnQgbm9yZGVyYnlzLAorCSAgICAgaW50IHBy ZWZpeCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUHJlcGFyZSBmb3IgYW4gaW5kZXggc2Nhbi4g IFRoZSA8bGl0ZXJhbD5ua2V5czwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPm5vcmRlcmJ5czwvbGl0 ZXJhbD4KKyAgIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBxdWFscyBhbmQgb3Jk ZXJpbmcgb3BlcmF0b3JzIHRoYXQgd2lsbCBiZQorICAgdXNlZCBpbiB0aGUgc2NhbjsgdGhlc2Ug bWF5IGJlIHVzZWZ1bCBmb3Igc3BhY2UgYWxsb2NhdGlvbiBwdXJwb3Nlcy4KKyAgIE5vdGUgdGhh dCB0aGUgYWN0dWFsIHZhbHVlcyBvZiB0aGUgc2NhbiBrZXlzIGFyZW4ndCBwcm92aWRlZCB5ZXQu CisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBwYWxsb2MnZCBzdHJ1Y3QuCisgICBGb3IgaW1wbGVt ZW50YXRpb24gcmVhc29ucyB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgPGVtcGhhc2lzPm11 c3Q8L2VtcGhhc2lzPiBjcmVhdGUgdGhpcyBzdHJ1Y3QgYnkgY2FsbGluZworICAgPGZ1bmN0aW9u PlJlbGF0aW9uR2V0SW5kZXhTY2FuKCk8L2Z1bmN0aW9uPi4gIEluIG1vc3QgY2FzZXMKKyAgIDxm dW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcg dGhhdCBjYWxsIGFuZCBwZXJoYXBzCisgICBhY3F1aXJpbmcgbG9ja3M7CisgICB0aGUgaW50ZXJl c3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNj YW48L2Z1bmN0aW9uPi4KKyAgIElmIHRoaXMgaXMgYSBza2lwIHNjYW4sIHByZWZpeCBtdXN0IGlu ZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCB0aGF0IGNhbiBiZQorICAgc2tpcHBlZCBv dmVyLiBQcmVmaXggY2FuIGJlIHNldCB0byAtMSB0byBkaXNhYmxlIHNraXBwaW5nLCB3aGljaCB3 aWxsIHlpZWxkIGFuCisgICBpZGVudGljYWwgc2NhbiB0byBhIHJlZ3VsYXIgY2FsbCB0byA8ZnVu Y3Rpb24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgPHBy b2dyYW1saXN0aW5nPgorICBib29sZWFuCisgIGFtZ2V0dHVwbGVfc2tpcCAoSW5kZXhTY2FuRGVz YyBzY2FuLAorICAgICAgICAgICAgICBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwKKwkgICAgICBT Y2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOworICA8L3Byb2dyYW1saXN0aW5nPgorICAgICBGZXRj aCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZSBnaXZlbgor ICAgICBkaXJlY3Rpb25zLiBEaXJlY3Rpb25zIGFyZSBzcGVjaWZpZWQgYnkgdGhlIGRpcmVjdGlv biBvZiB0aGUgcHJlZml4IHdlJ3JlIG1vdmluZyBpbiwKKyAgICAgb2Ygd2hpY2ggdGhlIHNpemUg b2YgdGhlIHByZWZpeCBoYXMgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIDxmdW5jdGlvbj5idGJlZ2lu c2Nhbl9za2lwPC9mdW5jdGlvbj4KKyAgICAgY2FsbC4gVGhpcyBkaXJlY3Rpb24gY2FuIGJlIGRp ZmZlcmVudCBpbiBESVNUSU5DVCBzY2FucyB3aGVuIGZldGNoaW5nIGJhY2t3YXJkcworICAgICBm cm9tIGEgY3Vyc29yLgorICAgICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMKKyAgICAgb2J0 YWluZWQsIGZhbHNlIGlmIG5vIG1hdGNoaW5nIHR1cGxlcyByZW1haW4uICBJbiB0aGUgdHJ1ZSBj YXNlIHRoZSB0dXBsZQorICAgICBUSUQgaXMgc3RvcmVkIGludG8gdGhlIDxsaXRlcmFsPnNjYW48 L2xpdGVyYWw+IHN0cnVjdHVyZS4gIE5vdGUgdGhhdAorICAgICA8cXVvdGU+c3VjY2VzczwvcXVv dGU+IG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMgYW4gZW50cnkgdGhhdCBtYXRj aGVzCisgICAgIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBz dGlsbCBleGlzdHMgaW4gdGhlIGhlYXAgb3IKKyAgICAgd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBz bmFwc2hvdCB0ZXN0LiAgT24gc3VjY2VzcywgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PgorICAgICBtdXN0IGFsc28gc2V0IDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVy YWw+IHRvIHRydWUgb3IgZmFsc2UuCisgICAgIEZhbHNlIG1lYW5zIGl0IGlzIGNlcnRhaW4gdGhh dCB0aGUgaW5kZXggZW50cnkgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLgorICAgICB0cnVlIG1lYW5z IHRoaXMgaXMgbm90IGNlcnRhaW4sIGFuZCB0aGUgY29uZGl0aW9ucyByZXByZXNlbnRlZCBieSB0 aGUKKyAgICAgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkIGFnYWluc3QgdGhlIGhlYXAgdHVw bGUgYWZ0ZXIgZmV0Y2hpbmcgaXQuCisgICAgIFRoaXMgcHJvdmlzaW9uIHN1cHBvcnRzIDxxdW90 ZT5sb3NzeTwvcXVvdGU+IGluZGV4IG9wZXJhdG9ycy4KKyAgICAgTm90ZSB0aGF0IHJlY2hlY2tp bmcgd2lsbCBleHRlbmQgb25seSB0byB0aGUgc2NhbiBjb25kaXRpb25zOyBhIHBhcnRpYWwKKyAg ICAgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGlzIG5ldmVyIHJlY2hlY2tlZCBieSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICAgIGNhbGxlcnMuCisgICAgPC9wYXJhPgorCisg ICAgPHBhcmE+CisgICAgIElmIHRoZSBpbmRleCBzdXBwb3J0cyA8bGluayBsaW5rZW5kPSJpbmRl eGVzLWluZGV4LW9ubHktc2NhbnMiPmluZGV4LW9ubHkKKyAgICAgc2NhbnM8L2xpbms+IChpLmUu LCA8ZnVuY3Rpb24+YW1jYW5yZXR1cm48L2Z1bmN0aW9uPiByZXR1cm5zIHRydWUgZm9yIGl0KSwK KyAgICAgdGhlbiBvbiBzdWNjZXNzIHRoZSBBTSBtdXN0IGFsc28gY2hlY2sgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfd2FudF9pdHVwPC9saXRlcmFsPiwKKyAgICAgYW5kIGlmIHRoYXQgaXMgdHJ1ZSBp dCBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWxseSBpbmRleGVkIGRhdGEgZm9yIHRoZQorICAgICBp bmRleCBlbnRyeS4gIFRoZSBkYXRhIGNhbiBiZSByZXR1cm5lZCBpbiB0aGUgZm9ybSBvZiBhbgor ICAgICA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIHN0b3JlZCBh dCA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiwKKyAgICAgd2l0aCB0dXBsZSBk ZXNjcmlwdG9yIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXBkZXNjPC9saXRlcmFsPjsgb3IgaW4g dGhlIGZvcm0gb2YKKyAgICAgYSA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBv aW50ZXIgc3RvcmVkIGF0IDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiwKKyAg ICAgd2l0aCB0dXBsZSBkZXNjcmlwdG9yIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwZGVzYzwv bGl0ZXJhbD4uICAoVGhlIGxhdHRlcgorICAgICBmb3JtYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBy ZWNvbnN0cnVjdGluZyBkYXRhIHRoYXQgbWlnaHQgcG9zc2libHkgbm90IGZpdAorICAgICBpbnRv IGFuIDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+LikgIEluIGVpdGhlciBjYXNl LAorICAgICBtYW5hZ2VtZW50IG9mIHRoZSBkYXRhIHJlZmVyZW5jZWQgYnkgdGhlIHBvaW50ZXIg aXMgdGhlIGFjY2VzcyBtZXRob2QncworICAgICByZXNwb25zaWJpbGl0eS4gIFRoZSBkYXRhIG11 c3QgcmVtYWluIGdvb2QgYXQgbGVhc3QgdW50aWwgdGhlIG5leHQKKyAgICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4sIG9yIDxm dW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPgorICAgICBjYWxsIGZvciB0aGUgc2Nhbi4KKyAg ICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKKyAg ICAgbWV0aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYg aXQgZG9lc24ndCwgdGhlCisgICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgor ICAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KKyAgICA8L3BhcmE+CisKICAgPHBhcmE+ CiAgICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIG9yZGluYXJ5IGluZGV4IHNjYW5zLCBzb21l IHR5cGVzIG9mIGluZGV4CiAgICBtYXkgd2lzaCB0byBzdXBwb3J0IDxmaXJzdHRlcm0+cGFyYWxs ZWwgaW5kZXggc2NhbnM8L2ZpcnN0dGVybT4sIHdoaWNoIGFsbG93CkBAIC03NzcsNyArODk2LDcg QEAgYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgIGZ1bmN0aW9ucyBtYXkgYmUg aW1wbGVtZW50ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FuczoKICAgPC9wYXJhPgog Ci0gIDxwYXJhPgorICAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogU2l6ZQogYW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiAodm9pZCk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kaWNlcy5z Z21sIGIvZG9jL3NyYy9zZ21sL2luZGljZXMuc2dtbAppbmRleCAwMjMxNTdkODg4Li4wZmQ0OGM2 YTZmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kaWNlcy5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9pbmRpY2VzLnNnbWwKQEAgLTEyOTcsNiArMTI5NywzNCBAQCBTRUxFQ1QgdGFyZ2V0IEZS T00gdGVzdHMgV0hFUkUgc3ViamVjdCA9ICdzb21lLXN1YmplY3QnIEFORCBzdWNjZXNzOwogICAg YW5kIGxhdGVyIHdpbGwgcmVjb2duaXplIHN1Y2ggY2FzZXMgYW5kIGFsbG93IGluZGV4LW9ubHkg c2NhbnMgdG8gYmUKICAgIGdlbmVyYXRlZCwgYnV0IG9sZGVyIHZlcnNpb25zIHdpbGwgbm90Lgog ICA8L3BhcmE+CisKKyAgPHNlY3QyIGlkPSJpbmRleGVzLWluZGV4LXNraXAtc2NhbnMiPgorICAg IDx0aXRsZT5JbmRleCBTa2lwIFNjYW5zPC90aXRsZT4KKworICAgIDxpbmRleHRlcm0gem9uZT0i aW5kZXhlcy1pbmRleC1za2lwLXNjYW5zIj4KKyAgICAgIDxwcmltYXJ5PmluZGV4PC9wcmltYXJ5 PgorICAgICAgPHNlY29uZGFyeT5pbmRleC1za2lwIHNjYW5zPC9zZWNvbmRhcnk+CisgICAgPC9p bmRleHRlcm0+CisgICAgPGluZGV4dGVybSB6b25lPSJpbmRleGVzLWluZGV4LXNraXAtc2NhbnMi PgorICAgICAgPHByaW1hcnk+aW5kZXgtc2tpcCBzY2FuPC9wcmltYXJ5PgorICAgIDwvaW5kZXh0 ZXJtPgorCisgICAgPHBhcmE+CisgICAgIFdoZW4gdGhlIHJvd3MgcmV0cmlldmVkIGZyb20gYW4g aW5kZXggc2NhbiBhcmUgdGhlbiBkZWR1cGxpY2F0ZWQgYnkKKyAgICAgZWxpbWluYXRpbmcgcm93 cyBtYXRjaGluZyBvbiBhIHByZWZpeCBvZiBpbmRleCBrZXlzIChlLmcuIHdoZW4gdXNpbmcKKyAg ICAgPGxpdGVyYWw+U0VMRUNUIERJU1RJTkNUPC9saXRlcmFsPiksIHRoZSBwbGFubmVyIHdpbGwg Y29uc2lkZXIKKyAgICAgc2tpcHBpbmcgZ3JvdXBzIG9mIHJvd3Mgd2l0aCBhIG1hdGNoaW5nIGtl eSBwcmVmaXguIFdoZW4gYSByb3cgd2l0aAorICAgICBhIHBhcnRpY3VsYXIgcHJlZml4IGlzIGZv dW5kLCByZW1haW5pbmcgcm93cyB3aXRoIHRoZSBzYW1lIGtleSBwcmVmaXgKKyAgICAgYXJlIHNr aXBwZWQuICBUaGUgbGFyZ2VyIHRoZSBudW1iZXIgb2Ygcm93cyB3aXRoIHRoZSBzYW1lIGtleSBw cmVmaXgKKyAgICAgcm93cyAoaS5lLiB0aGUgbG93ZXIgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBr ZXkgcHJlZml4ZXMgaW4gdGhlIGluZGV4KSwKKyAgICAgdGhlIG1vcmUgZWZmaWNpZW50IHRoaXMg aXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQWRkaXRpb25hbGx5LCBhIHNraXAg c2NhbiBjYW4gYmUgY29uc2lkZXJlZCBpbiByZWd1bGFyIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJh bD4KKyAgICAgIHF1ZXJpZXMuIFdoZW4gZmlsdGVyaW5nIG9uIGFuIG5vbi1sZWFkaW5nIGF0dHJp YnV0ZSBvZiBhbiBpbmRleCwgdGhlIHBsYW5uZXIKKyAgICAgIG1heSBjaG9vc2UgYSBza2lwIHNj YW4uCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgogIDwvc2VjdDE+CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCmluZGV4IGJhNzhlY2ZmNjYuLjQzZjFmNDZkZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMKQEAgLTExOSw2ICsxMTksOSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1idWxrZGVsZXRlID0gYnJpbmJ1bGtkZWxldGU7CiAJYW1yb3V0aW5lLT5hbXZh Y3V1bWNsZWFudXAgPSBicmludmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJu ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2lu c2tpcHNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRza2lwdHVwbGUgPSBOVUxMOwogCWFt cm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBicmluY29zdGVzdGltYXRlOwogCWFtcm91dGluZS0+ YW1vcHRpb25zID0gYnJpbm9wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggM2QxNTcwMWEwMS4uZDFiYWM0M2Q3ZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTY3LDYgKzY3LDkgQEAgZ2luaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gZ2luYnVsa2RlbGV0ZTsK IAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGdpbnZhY3V1bWNsZWFudXA7CiAJYW1yb3V0 aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXNraXAgPSBOVUxMOworCWFt cm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0c2tpcHR1 cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gZ2luY29zdGVzdGltYXRl OwogCWFtcm91dGluZS0+YW1vcHRpb25zID0gZ2lub3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJv cGVydHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IGMzY2RmY2E5YTIuLmNkOWE0 NWJjZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTg4LDYgKzg4LDkgQEAgZ2lzdGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGdpc3RidWxr ZGVsZXRlOwogCWFtcm91dGluZS0+YW12YWN1dW1jbGVhbnVwID0gZ2lzdHZhY3V1bWNsZWFudXA7 CiAJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IGdpc3RjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5h bXNraXAgPSBOVUxMOworCWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtZ2V0c2tpcHR1cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRl ID0gZ2lzdGNvc3Rlc3RpbWF0ZTsKIAlhbXJvdXRpbmUtPmFtb3B0aW9ucyA9IGdpc3RvcHRpb25z OwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGdpc3Rwcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwppbmRleCBkNDhjOGE0NTQ5Li41NWQ1Y2E1ODA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CkBAIC04NSw2ICs4NSw5IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0 aW5lLT5hbWJ1bGtkZWxldGUgPSBoYXNoYnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVt Y2xlYW51cCA9IGhhc2h2YWN1dW1jbGVhbnVwOwogCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBO VUxMOworCWFtcm91dGluZS0+YW1za2lwID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYmVnaW5za2lw c2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldHNraXB0dXBsZSA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IGhhc2hjb3N0ZXN0aW1hdGU7CiAJYW1yb3V0aW5lLT5hbW9w dGlvbnMgPSBoYXNob3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBOVUxMOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZmU4MGI4YjBiYS4uYzA2MGUwMWI0NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0xNCw3ICsxNCw5IEBACiAgKgkJaW5kZXhf b3BlbgkJLSBvcGVuIGFuIGluZGV4IHJlbGF0aW9uIGJ5IHJlbGF0aW9uIE9JRAogICoJCWluZGV4 X2Nsb3NlCQktIGNsb3NlIGFuIGluZGV4IHJlbGF0aW9uCiAgKgkJaW5kZXhfYmVnaW5zY2FuIC0g c3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQorICoJCWluZGV4X2JlZ2lu c2Nhbl9za2lwIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZSBhbmQg c2tpcHBpbmcKICAqCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3RhcnQgYSBzY2FuIG9mIGFu IGluZGV4IHdpdGggYW1nZXRiaXRtYXAKKyAqCQlpbmRleF9iZWdpbnNjYW5fYml0bWFwX3NraXAg LSBzdGFydCBhIHNraXAgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5k ZXhfcmVzY2FuCS0gcmVzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2Fu CS0gZW5kIGEgc2NhbgogICoJCWluZGV4X2luc2VydAktIGluc2VydCBhbiBpbmRleCB0dXBsZSBp bnRvIGEgcmVsYXRpb24KQEAgLTI1LDE0ICsyNywxNyBAQAogICoJCWluZGV4X3BhcmFsbGVscmVz Y2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9i ZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KICAqCQlpbmRleF9n ZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRu ZXh0X3RpZF9za2lwCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2tpcCBzY2FuCiAgKgkJaW5k ZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCQlpbmRl eF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRl eF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNraXAgc2NhbgogICoJ CWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhf YnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3Zh Y3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CiAgKgkJaW5k ZXhfY2FuX3JldHVybgktIGRvZXMgaW5kZXggc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zPwogICoJ CWluZGV4X2dldHByb2NpZCAtIGdldCBhIHN1cHBvcnQgcHJvY2VkdXJlIE9JRAogICoJCWluZGV4 X2dldHByb2NpbmZvIC0gZ2V0IGEgc3VwcG9ydCBwcm9jZWR1cmUncyBsb29rdXAgaW5mbworICoJ CWluZGV4X3NraXAJCS0gYWR2YW5jZSBwYXN0IGR1cGxpY2F0ZSBrZXkgdmFsdWVzIGluIGEgc2Nh bgogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbmRleF8gcm91dGlu ZXMgd2hpY2ggdXNlZApAQCAtMjI0LDYgKzIyOSw3OCBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCXJldHVybiBzY2FuOwogfQogCitzdGF0aWMgSW5kZXhTY2FuRGVz YworaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsX3NraXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK KwkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmaXgsIFNuYXBzaG90IHNu YXBzaG90LAorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3Nu YXApCit7CisJSW5kZXhTY2FuRGVzYyBzY2FuOworCisJUkVMQVRJT05fQ0hFQ0tTOworCUNIRUNL X1JFTF9QUk9DRURVUkUoYW1iZWdpbnNraXBzY2FuKTsKKworCWlmICghKGluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXByZWRsb2NrcykpCisJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihpbmRleFJl bGF0aW9uLCBzbmFwc2hvdCk7CisKKwkvKgorCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgY291bnQg dG8gdGhlIHJlbGNhY2hlIGVudHJ5IHRocm91Z2hvdXQgdGhlIHNjYW4uCisJICovCisJUmVsYXRp b25JbmNyZW1lbnRSZWZlcmVuY2VDb3VudChpbmRleFJlbGF0aW9uKTsKKworCS8qCisJICogVGVs bCB0aGUgQU0gdG8gb3BlbiBhIHNjYW4uCisJICovCisJc2NhbiA9IGluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWJlZ2luc2tpcHNjYW4oaW5kZXhSZWxhdGlvbiwgbmtleXMsCisJCQkJCQkJCQkJ CQlub3JkZXJieXMsIHByZWZpeCk7CisJLyogSW5pdGlhbGl6ZSBpbmZvcm1hdGlvbiBmb3IgcGFy YWxsZWwgc2Nhbi4gKi8KKwlzY2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CisJc2Nhbi0+eHNf dGVtcF9zbmFwID0gdGVtcF9zbmFwOworCisJcmV0dXJuIHNjYW47Cit9CisKK0luZGV4U2NhbkRl c2MKK2luZGV4X2JlZ2luc2Nhbl9za2lwKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQlSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCVNuYXBzaG90IHNuYXBzaG90LAorCQkJCWludCBua2V5 cywgaW50IG5vcmRlcmJ5cywgaW50IHByZWZpeCkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW47CisK KwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsX3NraXAoaW5kZXhSZWxhdGlvbiwgbmtl eXMsIG5vcmRlcmJ5cywgcHJlZml4LCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOworCisJLyoKKwkg KiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhp bmcgZWxzZSB3YXMgc2V0CisJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCisJICovCisJ c2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCXNjYW4tPnhzX3NuYXBzaG90ID0g c25hcHNob3Q7CisKKwkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJs ZSAqLworCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBS ZWxhdGlvbik7CisKKwlyZXR1cm4gc2NhbjsKK30KKworSW5kZXhTY2FuRGVzYworaW5kZXhfYmVn aW5zY2FuX2JpdG1hcF9za2lwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCSAgIFNuYXBz aG90IHNuYXBzaG90LAorCQkJCQkgICBpbnQgbmtleXMsCisJCQkJCSAgIGludCBwcmVmaXgpCit7 CisJSW5kZXhTY2FuRGVzYyBzY2FuOworCisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bF9za2lwKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBwcmVmaXgsIHNuYXBzaG90LCBOVUxMLCBm YWxzZSk7CisKKwkvKgorCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNj YW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKKwkgKiB1cCBieSBSZWxhdGlvbkdldElu ZGV4U2Nhbi4KKwkgKi8KKwlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCisJcmV0dXJu IHNjYW47Cit9CisKIC8qCiAgKiBpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3RhcnQgYSBzY2Fu IG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKICAqCkBAIC01NTMsNiArNjMwLDQ1IEBAIGlu ZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCitJdGVtUG9pbnRlcgoraW5kZXhf Z2V0bmV4dF90aWRfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4 RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJYm9vbAkJZm91bmQ7CisKKwlTQ0FO X0NIRUNLUzsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHNraXB0dXBsZSk7CisKKwlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCisJLyoKKwkgKiBUaGUgQU0n cyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5kZXggZW50cnkgbWF0Y2hpbmcgdGhl IHNjYW4KKwkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElEIGludG8gc2Nhbi0+eHNfaGVhcHRpZC4g IEl0IHNob3VsZCBhbHNvIHNldAorCSAqIHNjYW4tPnhzX3JlY2hlY2sgYW5kIHBvc3NpYmx5IHNj YW4tPnhzX2l0dXAvc2Nhbi0+eHNfaGl0dXAsIHRob3VnaCB3ZQorCSAqIHBheSBubyBhdHRlbnRp b24gdG8gdGhvc2UgZmllbGRzIGhlcmUuCisJICovCisJZm91bmQgPSBzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1nZXRza2lwdHVwbGUoc2NhbiwgcHJlZml4RGlyLCBwb3N0Zml4RGly KTsKKworCS8qIFJlc2V0IGtpbGwgZmxhZyBpbW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCisJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOworCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBm YWxzZTsKKworCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICov CisJaWYgKCFmb3VuZCkKKwl7CisJCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBw aW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJ CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJCXJldHVy biBOVUxMOworCX0KKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlk KSk7CisKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEp OworCisJLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kLiAqLworCXJldHVy biAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4 X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCkBAIC02NDQs NiArNzYwLDM4IEBAIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqCiAJcmV0dXJuIGZhbHNlOwogfQog Citib29sCitpbmRleF9nZXRuZXh0X3Nsb3Rfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIsIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCWZvciAoOzspCisJeworCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGlu dWUpCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZDsKKworCQkJLyogVGltZSB0byBmZXRjaCB0aGUg bmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KKwkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkX3Nr aXAoc2NhbiwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQli cmVhazsKKworCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0 aWQpKTsKKwkJfQorCisJCS8qCisJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxl IGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQg YW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAqIHRo ZSBpbmRleC4KKwkJICovCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hl YXB0aWQpKTsKKwkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAq CQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4gaW5kZXgg c2NhbgogICoKQEAgLTczOSw2ICs4ODcsMjEgQEAgaW5kZXhfY2FuX3JldHVybihSZWxhdGlvbiBp bmRleFJlbGF0aW9uLCBpbnQgYXR0bm8pCiAJcmV0dXJuIGluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWNhbnJldHVybihpbmRleFJlbGF0aW9uLCBhdHRubyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCQlpbmRleF9za2lwCisgKgorICoJCVNraXAgcGFzdCBhbGwgdHVwbGVzIHdoZXJl IHRoZSBmaXJzdCAncHJlZml4JyBjb2x1bW5zIGhhdmUgdGhlCisgKgkJc2FtZSB2YWx1ZSBhcyB0 aGUgbGFzdCB0dXBsZSByZXR1cm5lZCBpbiB0aGUgY3VycmVudCBzY2FuLgorICogLS0tLS0tLS0t LS0tLS0tLQorICovCitib29sCitpbmRleF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcikKK3sKKwlTQ0FOX0NI RUNLUzsKKworCXJldHVybiBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1za2lwKHNj YW4sIHByZWZpeERpciwgcG9zdGZpeERpcik7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAq CQlpbmRleF9nZXRwcm9jaWQKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZQppbmRleCBk Njk4MDhlNzhjLi5kYTk2YWMwMGE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKQEAg LTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAluYnRwYWdlLm8gXAogCW5idHJlZS5vIFwKIAluYnRz ZWFyY2gubyBcCisJbmJ0c2tpcC5vIFwKIAluYnRzb3J0Lm8gXAogCW5idHNwbGl0bG9jLm8gXAog CW5idHV0aWxzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggNjI3 NDZjNDcyMS4uNmFmNTI0MzFhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5j CkBAIC0xMDgsNyArMTA4LDcgQEAgX2J0X2RvaW5zZXJ0KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBs ZSBpdHVwLAogCWJvb2wJCWNoZWNraW5ndW5pcXVlID0gKGNoZWNrVW5pcXVlICE9IFVOSVFVRV9D SEVDS19OTyk7CiAKIAkvKiB3ZSBuZWVkIGFuIGluc2VydGlvbiBzY2FuIGtleSB0byBkbyBvdXIg c2VhcmNoLCBzbyBidWlsZCBvbmUgKi8KLQlpdHVwX2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBp dHVwKTsKKwlpdHVwX2tleSA9IF9idF9ta3NjYW5rZXkocmVsLCBpdHVwLCBOVUxMKTsKIAogCWlm IChjaGVja2luZ3VuaXF1ZSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4 IDZiNWYwMWUxZDAuLjI4NDU4OWFhMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CkBAIC0xOTY3LDcgKzE5NjcsNyBAQCBfYnRfcGFnZWRlbChSZWxhdGlvbiByZWwsIEJ1ZmZlciBs ZWFmYnVmLCBCVFZhY1N0YXRlICp2c3RhdGUpCiAJCQkJfQogCiAJCQkJLyogd2UgbmVlZCBhbiBp bnNlcnRpb24gc2NhbiBrZXkgZm9yIHRoZSBzZWFyY2gsIHNvIGJ1aWxkIG9uZSAqLwotCQkJCWl0 dXBfa2V5ID0gX2J0X21rc2NhbmtleShyZWwsIHRhcmdldGtleSk7CisJCQkJaXR1cF9rZXkgPSBf YnRfbWtzY2Fua2V5KHJlbCwgdGFyZ2V0a2V5LCBOVUxMKTsKIAkJCQkvKiBmaW5kIHRoZSBsZWZ0 bW9zdCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGluZyBwaXZvdC9oaWdoIGtleSAqLwogCQkJCWl0dXBf a2V5LT5waXZvdHNlYXJjaCA9IHRydWU7CiAJCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgaXR1 cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVBRCwgTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYwppbmRleCAxMzAyNGFmMmZhLi41Yzk2ZWZhNzQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKQEAgLTEyNCw2ICsxMjQsNyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJ0YnVsa2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IGJ0dmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJu ID0gYnRjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5hbXNraXAgPSBidHNraXA7CiAJYW1yb3V0aW5l LT5hbWNvc3Rlc3RpbWF0ZSA9IGJ0Y29zdGVzdGltYXRlOwogCWFtcm91dGluZS0+YW1vcHRpb25z ID0gYnRvcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGJ0cHJvcGVydHk7CkBAIC0x MzEsOCArMTMyLDEwIEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW12YWxpZGF0ZSA9IGJ0dmFsaWRhdGU7CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBi dGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwor CWFtcm91dGluZS0+YW1iZWdpbnNraXBzY2FuID0gYnRiZWdpbnNjYW5fc2tpcDsKIAlhbXJvdXRp bmUtPmFtcmVzY2FuID0gYnRyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gYnRnZXR0 dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0c2tpcHR1cGxlID0gYnRnZXR0dXBsZV9za2lwOwogCWFt cm91dGluZS0+YW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2Nh biA9IGJ0ZW5kc2NhbjsKIAlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IGJ0bWFya3BvczsKQEAgLTIw OSw2ICsyMTIsMTUgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29s ICppc251bGwsCiAgKi8KIGJvb2wKIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKK3sKKwlyZXR1cm4gYnRnZXR0dXBsZV9za2lwKHNjYW4sIGRpciwgZGly KTsKK30KKworLyoKKyAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhl IHNjYW4uCisgKi8KK2Jvb2wKK2J0Z2V0dHVwbGVfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCWJvb2wJCXJlczsK QEAgLTIyNyw3ICsyMzksNyBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJCWlmIChzby0+bnVtQXJyYXlLZXlzIDwgMCkKIAkJCXJldHVybiBmYWxz ZTsKIAotCQlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBkaXIpOworCQlfYnRfc3RhcnRfYXJy YXlfa2V5cyhzY2FuLCBwcmVmaXhEaXIpOwogCX0KIAogCS8qIFRoaXMgbG9vcCBoYW5kbGVzIGFk dmFuY2luZyB0byB0aGUgbmV4dCBhcnJheSBlbGVtZW50cywgaWYgYW55ICovCkBAIC0yMzksNyAr MjUxLDcgQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCiAJ CSAqLwogCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJcmVzID0gX2J0 X2ZpcnN0KHNjYW4sIGRpcik7CisJCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgcHJlZml4RGlyLCBw b3N0Zml4RGlyKTsKIAkJZWxzZQogCQl7CiAJCQkvKgpAQCAtMjY2LDE0ICsyNzgsMTQgQEAgYnRn ZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyoKIAkJ CSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KIAkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nh biwgZGlyKTsKKwkJCXJlcyA9IF9idF9uZXh0KHNjYW4sIHByZWZpeERpciwgcG9zdGZpeERpcik7 CiAJCX0KIAogCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVybiBpdCAuLi4gKi8KIAkJaWYg KHJlcykKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBoYXZlIG1vcmUg YXJyYXkga2V5cyB0byBkZWFsIHdpdGggKi8KLQl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYm IF9idF9hZHZhbmNlX2FycmF5X2tleXMoc2NhbiwgZGlyKSk7CisJfSB3aGlsZSAoc28tPm51bUFy cmF5S2V5cyAmJiBfYnRfYWR2YW5jZV9hcnJheV9rZXlzKHNjYW4sIHByZWZpeERpcikpOwogCiAJ cmV0dXJuIHJlczsKIH0KQEAgLTMwNCw3ICszMTYsNyBAQCBidGdldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCWRvCiAJewogCQkvKiBGZXRjaCB0aGUgZmlyc3Qg cGFnZSAmIHR1cGxlICovCi0JCWlmIChfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24pKQorCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBGb3J3YXJk U2NhbkRpcmVjdGlvbikpCiAJCXsKIAkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBz Y2FubmluZyAqLwogCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwpAQCAtMzIwLDcgKzMz Miw3IEBAIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJ CQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCiAJ CQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJ aWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWlmICghX2J0 X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkK IAkJCQkJCWJyZWFrOwogCQkJCX0KIApAQCAtMzQxLDYgKzM1MywxNiBAQCBidGdldGJpdG1hcChJ bmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogICovCiBJbmRleFNjYW5EZXNjCiBi dGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKK3sKKwly ZXR1cm4gYnRiZWdpbnNjYW5fc2tpcChyZWwsIG5rZXlzLCBub3JkZXJieXMsIC0xKTsKK30KKwor CisvKgorICoJYnRiZWdpbnNjYW4oKSAtLSBzdGFydCBhIHNjYW4gb24gYSBidHJlZSBpbmRleAor ICovCitJbmRleFNjYW5EZXNjCitidGJlZ2luc2Nhbl9za2lwKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzLCBpbnQgc2tpcFByZWZpeCkKIHsKIAlJbmRleFNjYW5EZXNjIHNj YW47CiAJQlRTY2FuT3BhcXVlIHNvOwpAQCAtMzc1LDEwICszOTcsMjAgQEAgYnRiZWdpbnNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJICovCiAJc28tPmN1cnJU dXBsZXMgPSBzby0+bWFya1R1cGxlcyA9IE5VTEw7CiAKKwlzby0+c2tpcERhdGEgPSBOVUxMOwor CiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAKIAlzY2FuLT5v cGFxdWUgPSBzbzsKIAorCWlmIChza2lwUHJlZml4ID4gMCkKKwl7CisJCXNvLT5za2lwRGF0YSA9 IChCVFNraXApIHBhbGxvYzAoc2l6ZW9mKEJUU2tpcERhdGEpKTsKKwkJc28tPnNraXBEYXRhLT5w cmVmaXggPSBza2lwUHJlZml4OworCisJCWVsb2coREVCVUcxLCAic2tpcCBwcmVmaXg6ICVkIiwg c2tpcFByZWZpeCk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ0MSw2ICs0NzMsMTUg QEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAJX2J0X3ByZXByb2Nlc3NfYXJyYXlfa2V5cyhzY2FuKTsKIH0KIAorLyoKKyAqIGJ0 c2tpcCgpIC0tIHNraXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBrZXkgcHJlZml4Cisg Ki8KK2Jvb2wKK2J0c2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4 RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJcmV0dXJuIF9idF9za2lwKHNjYW4s IHByZWZpeERpciwgcG9zdGZpeERpcik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9z ZSBkb3duIGEgc2NhbgogICovCkBAIC00NzQsNiArNTE1LDggQEAgYnRlbmRzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbikKIAlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmN1 cnJUdXBsZXMpOwogCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2Vl IGJ0cmVzY2FuICovCisJaWYgKF9idF9za2lwX2VuYWJsZWQoc28pKQorCQlwZnJlZShzby0+c2tp cERhdGEpOwogCXBmcmVlKHNvKTsKIH0KIApAQCAtNTU3LDYgKzYwMCw5IEBAIGJ0cmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQogCQkJCW1lbWNweShz by0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCiAJCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRU dXBsZU9mZnNldCk7CisJCQlpZiAoc28tPnNraXBEYXRhKQorCQkJCW1lbWNweSgmc28tPnNraXBE YXRhLT5jdXJQb3MsICZzby0+c2tpcERhdGEtPm1hcmtQb3MsCisJCQkJCSAgIHNpemVvZihCVFNr aXBQb3NEYXRhKSk7CiAJCX0KIAkJZWxzZQogCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3Vy clBvcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCA5ZDgyZDQ5MDRk Li40ZjU2ZmFmZDc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTE3 LDE5ICsxNywxNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgdm9pZCBfYnRfZHJvcF9s b2NrX2FuZF9tYXliZV9waW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5Qb3Mgc3ApOwotc3Rh dGljIE9mZnNldE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBr ZXksIEJ1ZmZlciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbklu c2VydCBrZXksIFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0 aWMgYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIHN0YXRpYyB2b2lkIF9idF9zYXZlaXRl bShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCiAJCQkJCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1z KEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKQEAgLTM4LDE0ICszNiwxMiBAQCBzdGF0 aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5k ZXgsCiBzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJ CQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKLXN0YXRpYyBi b29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK LXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBkaXIpOwogc3RhdGljIGJvb2wgX2J0X3BhcmFsbGVs X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJCQkJ CSAgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIEJ1ZmZlciBfYnRfd2Fsa19sZWZ0KFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgU25hcHNob3Qgc25hcHNob3QpOwogc3RhdGljIGJvb2wgX2J0 X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGlj IGlubGluZSB2b2lkIF9idF9pbml0aWFsaXplX21vcmVfZGF0YShCVFNjYW5PcGFxdWUgc28sIFNj YW5EaXJlY3Rpb24gZGlyKTsKLQorc3RhdGljIGlubGluZSBib29sIF9idF9jaGVja2tleXNfZXh0 ZW5kZWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMs CisJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBpc1JlZ3VsYXJNb2RlLAorCQkJ CQkJCQkJCSAgYm9vbCAqY29udGludWVzY2FuLCBpbnQgKnByZWZpeHNraXBpbmRleCk7CiAKIC8q CiAgKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQpAQCAtNTYsNyArNTIsNyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgX2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKEJUU2Nhbk9wYXF1ZSBzbywg U2NhbkRpcmVjdGlvbiBkaXIpOwogICoKICAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24g bWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgogICovCi1zdGF0aWMgdm9pZAor dm9pZAogX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRT Y2FuUG9zIHNwKQogewogCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc3AtPmJ1 Zik7CkBAIC0zMzQsNyArMzMwLDcgQEAgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsCiAgKiB0 aGUgZ2l2ZW4gcGFnZS4gIF9idF9iaW5zcmNoKCkgaGFzIG5vIGxvY2sgb3IgcmVmY291bnQgc2lk ZSBlZmZlY3RzCiAgKiBvbiB0aGUgYnVmZmVyLgogICovCi1zdGF0aWMgT2Zmc2V0TnVtYmVyCitP ZmZzZXROdW1iZXIKIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwKIAkJCUJUU2Nhbkluc2VydCBr ZXksCiAJCQlCdWZmZXIgYnVmKQpAQCAtODU3LDI1ICs4NTMsMjMgQEAgX2J0X2NvbXBhcmUoUmVs YXRpb24gcmVsLAogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8K IGJvb2wKLV9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQor X2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNj YW5EaXJlY3Rpb24gcG9zdGZpeERpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK IAlCdWZmZXIJCWJ1ZjsKIAlCVFN0YWNrCQlzdGFjazsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwot CVN0cmF0ZWd5TnVtYmVyIHN0cmF0OwotCWJvb2wJCW5leHRrZXk7CiAJYm9vbAkJZ29iYWNrOwog CUJUU2Nhbkluc2VydERhdGEgaW5za2V5OwogCVNjYW5LZXkJCXN0YXJ0S2V5c1tJTkRFWF9NQVhf S0VZU107CiAJU2NhbktleURhdGEgbm90bnVsbGtleXNbSU5ERVhfTUFYX0tFWVNdOwogCWludAkJ CWtleXNDb3VudCA9IDA7Ci0JaW50CQkJaTsKIAlib29sCQlzdGF0dXM7CiAJU3RyYXRlZ3lOdW1i ZXIgc3RyYXRfdG90YWw7CiAJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAJQmxvY2tOdW1iZXIg Ymxrbm87CisJSW5kZXhUdXBsZSBpdHVwOwogCiAJQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSk7CiAKQEAgLTkxNiwxODQgKzkxMCwxMyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJfQogCQllbHNlIGlmIChibGtubyAhPSBJ bnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKLQkJCWlmICghX2J0X3BhcmFsbGVsX3JlYWRwYWdlKHNj YW4sIGJsa25vLCBkaXIpKQorCQkJaWYgKCFfYnRfcGFyYWxsZWxfcmVhZHBhZ2Uoc2NhbiwgYmxr bm8sIHByZWZpeERpcikpCiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJZ290byByZWFkY29tcGxldGU7 CiAJCX0KIAl9CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgdG8g ZGlzY292ZXIgd2hlcmUgd2UgbmVlZCB0byBzdGFydCB0aGUgc2Nhbi4KLQkgKgotCSAqIFdlIHdh bnQgdG8gaWRlbnRpZnkgdGhlIGtleXMgdGhhdCBjYW4gYmUgdXNlZCBhcyBzdGFydGluZyBib3Vu ZGFyaWVzOwotCSAqIHRoZXNlIGFyZSA9LCA+LCBvciA+PSBrZXlzIGZvciBhIGZvcndhcmQgc2Nh biBvciA9LCA8LCA8PSBrZXlzIGZvcgotCSAqIGEgYmFja3dhcmRzIHNjYW4uICBXZSBjYW4gdXNl IGtleXMgZm9yIG11bHRpcGxlIGF0dHJpYnV0ZXMgc28gbG9uZyBhcwotCSAqIHRoZSBwcmlvciBh dHRyaWJ1dGVzIGhhZCBvbmx5ID0sID49IChyZXNwLiA9LCA8PSkga2V5cy4gIE9uY2Ugd2UgYWNj ZXB0Ci0JICogYSA+IG9yIDwgYm91bmRhcnkgb3IgZmluZCBhbiBhdHRyaWJ1dGUgd2l0aCBubyBi b3VuZGFyeSAod2hpY2ggY2FuIGJlCi0JICogdGhvdWdodCBvZiBhcyB0aGUgc2FtZSBhcyAiPiAt aW5maW5pdHkiKSwgd2UgY2FuJ3QgdXNlIGtleXMgZm9yIGFueQotCSAqIGF0dHJpYnV0ZXMgdG8g aXRzIHJpZ2h0LCBiZWNhdXNlIGl0IHdvdWxkIGJyZWFrIG91ciBzaW1wbGlzdGljIG5vdGlvbgot CSAqIG9mIHdoYXQgaW5pdGlhbCBwb3NpdGlvbmluZyBzdHJhdGVneSB0byB1c2UuCi0JICoKLQkg KiBXaGVuIHRoZSBzY2FuIGtleXMgaW5jbHVkZSBjcm9zcy10eXBlIG9wZXJhdG9ycywgX2J0X3By ZXByb2Nlc3Nfa2V5cwotCSAqIG1heSBub3QgYmUgYWJsZSB0byBlbGltaW5hdGUgcmVkdW5kYW50 IGtleXM7IGluIHN1Y2ggY2FzZXMgd2Ugd2lsbAotCSAqIGFyYml0cmFyaWx5IHBpY2sgYSB1c2Fi bGUgb25lIGZvciBlYWNoIGF0dHJpYnV0ZS4gIFRoaXMgaXMgY29ycmVjdAotCSAqIGJ1dCBwb3Nz aWJseSBub3Qgb3B0aW1hbCBiZWhhdmlvci4gIChGb3IgZXhhbXBsZSwgd2l0aCBrZXlzIGxpa2UK LQkgKiAieCA+PSA0IEFORCB4ID49IDUiIHdlIHdvdWxkIGVsZWN0IHRvIHNjYW4gc3RhcnRpbmcg YXQgeD00IHdoZW4KLQkgKiB4PTUgd291bGQgYmUgbW9yZSBlZmZpY2llbnQuKSAgU2luY2UgdGhl IHNpdHVhdGlvbiBvbmx5IGFyaXNlcyBnaXZlbgotCSAqIGEgcG9vcmx5LXdvcmRlZCBxdWVyeSBw bHVzIGFuIGluY29tcGxldGUgb3BmYW1pbHksIGxpdmUgd2l0aCBpdC4KLQkgKgotCSAqIFdoZW4g Ym90aCBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSBrZXlzIGFwcGVhciBmb3IgYSBzaW5nbGUgYXR0 cmlidXRlCi0JICogKGFnYWluLCBvbmx5IHBvc3NpYmxlIHdoZW4gY3Jvc3MtdHlwZSBvcGVyYXRv cnMgYXBwZWFyKSwgd2UgKm11c3QqCi0JICogc2VsZWN0IG9uZSBvZiB0aGUgZXF1YWxpdHkga2V5 cyBmb3IgdGhlIHN0YXJ0aW5nIHBvaW50LCBiZWNhdXNlCi0JICogX2J0X2NoZWNra2V5cygpIHdp bGwgc3RvcCB0aGUgc2NhbiBhcyBzb29uIGFzIGFuIGVxdWFsaXR5IHF1YWwgZmFpbHMuCi0JICog Rm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUga2V5cyBsaWtlICJ4ID49IDQgQU5EIHggPSAxMCIgYW5k IHdlIGVsZWN0IHRvCi0JICogc3RhcnQgYXQgeD00LCB3ZSB3aWxsIGZhaWwgYW5kIHN0b3AgYmVm b3JlIHJlYWNoaW5nIHg9MTAuICBJZiBtdWx0aXBsZQotCSAqIGVxdWFsaXR5IHF1YWxzIHN1cnZp dmUgcHJlcHJvY2Vzc2luZywgaG93ZXZlciwgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2gKLQkgKiBv bmUgd2UgdXNlIC0tLSBieSBkZWZpbml0aW9uLCB0aGV5IGFyZSBlaXRoZXIgcmVkdW5kYW50IG9y Ci0JICogY29udHJhZGljdG9yeS4KLQkgKgotCSAqIEFueSByZWd1bGFyIChub3QgU0tfU0VBUkNI TlVMTCkga2V5IGltcGxpZXMgYSBOT1QgTlVMTCBxdWFsaWZpZXIuCi0JICogSWYgdGhlIGluZGV4 IHN0b3JlcyBudWxscyBhdCB0aGUgZW5kIG9mIHRoZSBpbmRleCB3ZSdsbCBiZSBzdGFydGluZwot CSAqIGZyb20sIGFuZCB3ZSBoYXZlIG5vIGJvdW5kYXJ5IGtleSBmb3IgdGhlIGNvbHVtbiAod2hp Y2ggbWVhbnMgdGhlIGtleQotCSAqIHdlIGRlZHVjZWQgTk9UIE5VTEwgZnJvbSBpcyBhbiBpbmVx dWFsaXR5IGtleSB0aGF0IGNvbnN0cmFpbnMgdGhlIG90aGVyCi0JICogZW5kIG9mIHRoZSBpbmRl eCksIHRoZW4gd2UgY29ucyB1cCBhbiBleHBsaWNpdCBTS19TRUFSQ0hOT1ROVUxMIGtleSB0bwot CSAqIHVzZSBhcyBhIGJvdW5kYXJ5IGtleS4gIElmIHdlIGRpZG4ndCBkbyB0aGlzLCB3ZSBtaWdo dCBmaW5kIG91cnNlbHZlcwotCSAqIHRyYXZlcnNpbmcgYSBsb3Qgb2YgbnVsbCBlbnRyaWVzIGF0 IHRoZSBzdGFydCBvZiB0aGUgc2Nhbi4KLQkgKgotCSAqIEluIHRoaXMgbG9vcCwgcm93LWNvbXBh cmlzb24ga2V5cyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBrZXlzIG9uIHRoZWlyCi0JICogZmly c3QgKGxlZnRtb3N0KSBjb2x1bW5zLiAgV2UnbGwgYWRkIG9uIGxvd2VyLW9yZGVyIGNvbHVtbnMg b2YgdGhlIHJvdwotCSAqIGNvbXBhcmlzb24gYmVsb3csIGlmIHBvc3NpYmxlLgotCSAqCi0JICog VGhlIHNlbGVjdGVkIHNjYW4ga2V5cyAoYXQgbW9zdCBvbmUgcGVyIGluZGV4IGNvbHVtbikgYXJl IHJlbWVtYmVyZWQgYnkKLQkgKiBzdG9yaW5nIHRoZWlyIGFkZHJlc3NlcyBpbnRvIHRoZSBsb2Nh bCBzdGFydEtleXNbXSBhcnJheS4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLQlzdHJhdF90b3RhbCA9 IEJURXF1YWxTdHJhdGVneU51bWJlcjsKLQlpZiAoc28tPm51bWJlck9mS2V5cyA+IDApCi0Jewot CQlBdHRyTnVtYmVyCWN1cmF0dHI7Ci0JCVNjYW5LZXkJCWNob3NlbjsKLQkJU2NhbktleQkJaW1w bGllc05OOwotCQlTY2FuS2V5CQljdXI7Ci0KLQkJLyoKLQkJICogY2hvc2VuIGlzIHRoZSBzby1m YXItY2hvc2VuIGtleSBmb3IgdGhlIGN1cnJlbnQgYXR0cmlidXRlLCBpZiBhbnkuCi0JCSAqIFdl IGRvbid0IGNhc3QgdGhlIGRlY2lzaW9uIGluIHN0b25lIHVudGlsIHdlIHJlYWNoIGtleXMgZm9y IHRoZQotCQkgKiBuZXh0IGF0dHJpYnV0ZS4KLQkJICovCi0JCWN1cmF0dHIgPSAxOwotCQljaG9z ZW4gPSBOVUxMOwotCQkvKiBBbHNvIHJlbWVtYmVyIGFueSBzY2Fua2V5IHRoYXQgaW1wbGllcyBh IE5PVCBOVUxMIGNvbnN0cmFpbnQgKi8KLQkJaW1wbGllc05OID0gTlVMTDsKLQotCQkvKgotCQkg KiBMb29wIGl0ZXJhdGVzIGZyb20gMCB0byBudW1iZXJPZktleXMgaW5jbHVzaXZlOyB3ZSB1c2Ug dGhlIGxhc3QKLQkJICogcGFzcyB0byBoYW5kbGUgYWZ0ZXItbGFzdC1rZXkgcHJvY2Vzc2luZy4g IEFjdHVhbCBleGl0IGZyb20gdGhlCi0JCSAqIGxvb3AgaXMgYXQgb25lIG9mIHRoZSAiYnJlYWsi IHN0YXRlbWVudHMgYmVsb3cuCi0JCSAqLwotCQlmb3IgKGN1ciA9IHNvLT5rZXlEYXRhLCBpID0g MDs7IGN1cisrLCBpKyspCi0JCXsKLQkJCWlmIChpID49IHNvLT5udW1iZXJPZktleXMgfHwgY3Vy LT5za19hdHRubyAhPSBjdXJhdHRyKQotCQkJewotCQkJCS8qCi0JCQkJICogRG9uZSBsb29raW5n IGF0IGtleXMgZm9yIGN1cmF0dHIuICBJZiB3ZSBkaWRuJ3QgZmluZCBhCi0JCQkJICogdXNhYmxl IGJvdW5kYXJ5IGtleSwgc2VlIGlmIHdlIGNhbiBkZWR1Y2UgYSBOT1QgTlVMTCBrZXkuCi0JCQkJ ICovCi0JCQkJaWYgKGNob3NlbiA9PSBOVUxMICYmIGltcGxpZXNOTiAhPSBOVUxMICYmCi0JCQkJ CSgoaW1wbGllc05OLT5za19mbGFncyAmIFNLX0JUX05VTExTX0ZJUlNUKSA/Ci0JCQkJCSBTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgOgotCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQo ZGlyKSkpCi0JCQkJewotCQkJCQkvKiBZZXMsIHNvIGJ1aWxkIHRoZSBrZXkgaW4gbm90bnVsbGtl eXNba2V5c0NvdW50XSAqLwotCQkJCQljaG9zZW4gPSAmbm90bnVsbGtleXNba2V5c0NvdW50XTsK LQkJCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZShjaG9zZW4sCi0JCQkJCQkJCQkJICAgKFNLX1NF QVJDSE5PVE5VTEwgfCBTS19JU05VTEwgfAotCQkJCQkJCQkJCQkoaW1wbGllc05OLT5za19mbGFn cyAmCi0JCQkJCQkJCQkJCSAoU0tfQlRfREVTQyB8IFNLX0JUX05VTExTX0ZJUlNUKSkpLAotCQkJ CQkJCQkJCSAgIGN1cmF0dHIsCi0JCQkJCQkJCQkJICAgKChpbXBsaWVzTk4tPnNrX2ZsYWdzICYg U0tfQlRfTlVMTFNfRklSU1QpID8KLQkJCQkJCQkJCQkJQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXIg OgotCQkJCQkJCQkJCQlCVExlc3NTdHJhdGVneU51bWJlciksCi0JCQkJCQkJCQkJICAgSW52YWxp ZE9pZCwKLQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgIEludmFsaWRPaWQs Ci0JCQkJCQkJCQkJICAgKERhdHVtKSAwKTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIElmIHdl IHN0aWxsIGRpZG4ndCBmaW5kIGEgdXNhYmxlIGJvdW5kYXJ5IGtleSwgcXVpdDsgZWxzZQotCQkJ CSAqIHNhdmUgdGhlIGJvdW5kYXJ5IGtleSBwb2ludGVyIGluIHN0YXJ0S2V5cy4KLQkJCQkgKi8K LQkJCQlpZiAoY2hvc2VuID09IE5VTEwpCi0JCQkJCWJyZWFrOwotCQkJCXN0YXJ0S2V5c1trZXlz Q291bnQrK10gPSBjaG9zZW47Ci0KLQkJCQkvKgotCQkJCSAqIEFkanVzdCBzdHJhdF90b3RhbCwg YW5kIHF1aXQgaWYgd2UgaGF2ZSBzdG9yZWQgYSA+IG9yIDwKLQkJCQkgKiBrZXkuCi0JCQkJICov Ci0JCQkJc3RyYXQgPSBjaG9zZW4tPnNrX3N0cmF0ZWd5OwotCQkJCWlmIChzdHJhdCAhPSBCVEVx dWFsU3RyYXRlZ3lOdW1iZXIpCi0JCQkJewotCQkJCQlzdHJhdF90b3RhbCA9IHN0cmF0OwotCQkJ CQlpZiAoc3RyYXQgPT0gQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXIgfHwKLQkJCQkJCXN0cmF0ID09 IEJUTGVzc1N0cmF0ZWd5TnVtYmVyKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyoKLQkJ CQkgKiBEb25lIGlmIHRoYXQgd2FzIHRoZSBsYXN0IGF0dHJpYnV0ZSwgb3IgaWYgbmV4dCBrZXkg aXMgbm90Ci0JCQkJICogaW4gc2VxdWVuY2UgKGltcGx5aW5nIG5vIGJvdW5kYXJ5IGtleSBpcyBh dmFpbGFibGUgZm9yIHRoZQotCQkJCSAqIG5leHQgYXR0cmlidXRlKS4KLQkJCQkgKi8KLQkJCQlp ZiAoaSA+PSBzby0+bnVtYmVyT2ZLZXlzIHx8Ci0JCQkJCWN1ci0+c2tfYXR0bm8gIT0gY3VyYXR0 ciArIDEpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyoKLQkJCQkgKiBSZXNldCBmb3IgbmV4dCBhdHRy LgotCQkJCSAqLwotCQkJCWN1cmF0dHIgPSBjdXItPnNrX2F0dG5vOwotCQkJCWNob3NlbiA9IE5V TEw7Ci0JCQkJaW1wbGllc05OID0gTlVMTDsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIENhbiB3ZSB1 c2UgdGhpcyBrZXkgYXMgYSBzdGFydGluZyBib3VuZGFyeSBmb3IgdGhpcyBhdHRyPwotCQkJICoK LQkJCSAqIElmIG5vdCwgZG9lcyBpdCBpbXBseSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQ/ICAoQmVj YXVzZQotCQkJICogU0tfU0VBUkNITlVMTCBrZXlzIGFyZSBhbHdheXMgYXNzaWduZWQgQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLAotCQkJICogKmFueSogaW5lcXVhbGl0eSBrZXkgd29ya3MgZm9yIHRo YXQ7IHdlIG5lZWQgbm90IHRlc3QuKQotCQkJICovCi0JCQlzd2l0Y2ggKGN1ci0+c2tfc3RyYXRl Z3kpCi0JCQl7Ci0JCQkJY2FzZSBCVExlc3NTdHJhdGVneU51bWJlcjoKLQkJCQljYXNlIEJUTGVz c0VxdWFsU3RyYXRlZ3lOdW1iZXI6Ci0JCQkJCWlmIChjaG9zZW4gPT0gTlVMTCkKLQkJCQkJewot CQkJCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCi0JCQkJCQkJY2hvc2VuID0g Y3VyOwotCQkJCQkJZWxzZQotCQkJCQkJCWltcGxpZXNOTiA9IGN1cjsKLQkJCQkJfQotCQkJCQli cmVhazsKLQkJCQljYXNlIEJURXF1YWxTdHJhdGVneU51bWJlcjoKLQkJCQkJLyogb3ZlcnJpZGUg YW55IG5vbi1lcXVhbGl0eSBjaG9pY2UgKi8KLQkJCQkJY2hvc2VuID0gY3VyOwotCQkJCQlicmVh azsKLQkJCQljYXNlIEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXI6Ci0JCQkJY2FzZSBCVEdy ZWF0ZXJTdHJhdGVneU51bWJlcjoKLQkJCQkJaWYgKGNob3NlbiA9PSBOVUxMKQotCQkJCQl7Ci0J CQkJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJCQkJCWNob3NlbiA9IGN1 cjsKLQkJCQkJCWVsc2UKLQkJCQkJCQlpbXBsaWVzTk4gPSBjdXI7Ci0JCQkJCX0KLQkJCQkJYnJl YWs7Ci0JCQl9Ci0JCX0KLQl9CisJa2V5c0NvdW50ID0gX2J0X2Nob29zZV9zY2FuX2tleXMoc28t PmtleURhdGEsIHNvLT5udW1iZXJPZktleXMsIHByZWZpeERpciwgc3RhcnRLZXlzLCBub3RudWxs a2V5cywgJnN0cmF0X3RvdGFsLCAwKTsKIAogCS8qCiAJICogSWYgd2UgZm91bmQgbm8gdXNhYmxl IGJvdW5kYXJ5IGtleXMsIHdlIGhhdmUgdG8gc3RhcnQgZnJvbSBvbmUgZW5kIG9mCkBAIC0xMTA0 LDI2MCArOTI3LDExMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAl7CiAJCWJvb2wJCW1hdGNoOwogCi0JCW1hdGNoID0gX2J0X2VuZHBvaW50KHNj YW4sIGRpcik7Ci0KLQkJaWYgKCFtYXRjaCkKKwkJaWYgKCFfYnRfc2tpcF9lbmFibGVkKHNvKSkK IAkJewotCQkJLyogTm8gbWF0Y2gsIHNvIG1hcmsgKHBhcmFsbGVsKSBzY2FuIGZpbmlzaGVkICov Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJfQorCQkJbWF0Y2ggPSBfYnRfZW5kcG9p bnQoc2NhbiwgcHJlZml4RGlyKTsKIAotCQlyZXR1cm4gbWF0Y2g7Ci0JfQorCQkJaWYgKCFtYXRj aCkKKwkJCXsKKwkJCQkvKiBObyBtYXRjaCwgc28gbWFyayAocGFyYWxsZWwpIHNjYW4gZmluaXNo ZWQgKi8KKwkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCX0KIAotCS8qCi0JICogV2Ug d2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1 cCBhbgotCSAqIGluc2VydGlvbiBzY2Fua2V5IHdlIGNhbiB1c2UgdG8gc2VhcmNoIGZvciB0aGUg Ym91bmRhcnkgcG9pbnQgd2UKLQkgKiBpZGVudGlmaWVkIGFib3ZlLiAgVGhlIGluc2VydGlvbiBz Y2Fua2V5IGlzIGJ1aWx0IHVzaW5nIHRoZSBrZXlzCi0JICogaWRlbnRpZmllZCBieSBzdGFydEtl eXNbXS4gIChSZW1haW5pbmcgaW5zZXJ0aW9uIHNjYW5rZXkgZmllbGRzIGFyZQotCSAqIGluaXRp YWxpemVkIGFmdGVyIGluaXRpYWwtcG9zaXRpb25pbmcgc3RyYXRlZ3kgaXMgZmluYWxpemVkLikK LQkgKi8KLQlBc3NlcnQoa2V5c0NvdW50IDw9IElOREVYX01BWF9LRVlTKTsKLQlmb3IgKGkgPSAw OyBpIDwga2V5c0NvdW50OyBpKyspCi0JewotCQlTY2FuS2V5CQljdXIgPSBzdGFydEtleXNbaV07 CisJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOworCQkJQnVmZmVyCQlidWY7CisJCQlQYWdlCQlwYWdlOworCQkJ QlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwkJCU9mZnNldE51bWJlciBzdGFydDsKKwkJCUJUU2tpcENv bXBhcmVSZXN1bHQgY21wID0gezB9OwogCi0JCUFzc2VydChjdXItPnNrX2F0dG5vID09IGkgKyAx KTsKKwkJCV9idF9za2lwX2NyZWF0ZV9zY2Fua2V5cyhyZWwsIHNvKTsKIAotCQlpZiAoY3VyLT5z a19mbGFncyAmIFNLX1JPV19IRUFERVIpCi0JCXsKIAkJCS8qCi0JCQkgKiBSb3cgY29tcGFyaXNv biBoZWFkZXI6IGxvb2sgdG8gdGhlIGZpcnN0IHJvdyBtZW1iZXIgaW5zdGVhZC4KLQkJCSAqCi0J CQkgKiBUaGUgbWVtYmVyIHNjYW5rZXlzIGFyZSBhbHJlYWR5IGluIGluc2VydGlvbiBmb3JtYXQg KGllLCB0aGV5Ci0JCQkgKiBoYXZlIHNrX2Z1bmMgPSAzLXdheS1jb21wYXJpc29uIGZ1bmN0aW9u KSwgYnV0IHdlIGhhdmUgdG8gd2F0Y2gKLQkJCSAqIG91dCBmb3IgbnVsbHMsIHdoaWNoIF9idF9w cmVwcm9jZXNzX2tleXMgZGlkbid0IGNoZWNrLiBBIG51bGwKLQkJCSAqIGluIHRoZSBmaXJzdCBy b3cgbWVtYmVyIG1ha2VzIHRoZSBjb25kaXRpb24gdW5tYXRjaGFibGUsIGp1c3QKLQkJCSAqIGxp a2UgcXVhbF9vayA9IGZhbHNlLgorCQkJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciBy aWdodG1vc3QgbGVhZiBwYWdlIGFuZCBwb3NpdGlvbgorCQkJICogdGhlIHNjYW4gb24gdGhlIGxl ZnRtb3N0IG9yIHJpZ2h0bW9zdCBpdGVtIG9uIHRoYXQgcGFnZS4KKwkJCSAqIFN0YXJ0IHRoZSBz a2lwIHNjYW4gZnJvbSB0aGVyZSB0byBmaW5kIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtCiAJCQkg Ki8KLQkJCVNjYW5LZXkJCXN1YmtleSA9IChTY2FuS2V5KSBEYXR1bUdldFBvaW50ZXIoY3VyLT5z a19hcmd1bWVudCk7CisJCQlidWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVj dGlvbklzQmFja3dhcmQocHJlZml4RGlyKSwgc2Nhbi0+eHNfc25hcHNob3QpOwogCi0JCQlBc3Nl cnQoc3Via2V5LT5za19mbGFncyAmIFNLX1JPV19NRU1CRVIpOwotCQkJaWYgKHN1YmtleS0+c2tf ZmxhZ3MgJiBTS19JU05VTEwpCisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJCXsKLQkJ CQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCQkvKgorCQkJCSAqIEVtcHR5IGluZGV4LiBM b2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2NrCisJCQkJICog ZXhpc3RzLgorCQkJCSAqLworCQkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhz X3NuYXBzaG90KTsKKwkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAkJCQly ZXR1cm4gZmFsc2U7CiAJCQl9Ci0JCQltZW1jcHkoaW5za2V5LnNjYW5rZXlzICsgaSwgc3Via2V5 LCBzaXplb2YoU2NhbktleURhdGEpKTsKIAotCQkJLyoKLQkJCSAqIElmIHRoZSByb3cgY29tcGFy aXNvbiBpcyB0aGUgbGFzdCBwb3NpdGlvbmluZyBrZXkgd2UgYWNjZXB0ZWQsCi0JCQkgKiB0cnkg dG8gYWRkIGFkZGl0aW9uYWwga2V5cyBmcm9tIHRoZSBsb3dlci1vcmRlciByb3cgbWVtYmVycy4K LQkJCSAqIChJZiB3ZSBhY2NlcHRlZCBpbmRlcGVuZGVudCBjb25kaXRpb25zIG9uIGFkZGl0aW9u YWwgaW5kZXgKLQkJCSAqIGNvbHVtbnMsIHdlIHVzZSB0aG9zZSBpbnN0ZWFkIC0tLSBkb2Vzbid0 IHNlZW0gd29ydGggdHJ5aW5nIHRvCi0JCQkgKiBkZXRlcm1pbmUgd2hpY2ggaXMgbW9yZSByZXN0 cmljdGl2ZS4pICBOb3RlIHRoYXQgdGhpcyBpcyBPSwotCQkJICogZXZlbiBpZiB0aGUgcm93IGNv bXBhcmlzb24gaXMgb2YgIj4iIG9yICI8IiB0eXBlLCBiZWNhdXNlIHRoZQotCQkJICogY29uZGl0 aW9uIGFwcGxpZWQgdG8gYWxsIGJ1dCB0aGUgbGFzdCByb3cgbWVtYmVyIGlzIGVmZmVjdGl2ZWx5 Ci0JCQkgKiAiPj0iIG9yICI8PSIsIGFuZCBzbyB0aGUgZXh0cmEga2V5cyBkb24ndCBicmVhayB0 aGUgcG9zaXRpb25pbmcKLQkJCSAqIHNjaGVtZS4gIEJ1dCwgYnkgdGhlIHNhbWUgdG9rZW4sIGlm IHdlIGFyZW4ndCBhYmxlIHRvIHVzZSBhbGwKLQkJCSAqIHRoZSByb3cgbWVtYmVycywgdGhlbiB0 aGUgcGFydCBvZiB0aGUgcm93IGNvbXBhcmlzb24gdGhhdCB3ZQotCQkJICogZGlkIHVzZSBoYXMg dG8gYmUgdHJlYXRlZCBhcyBqdXN0IGEgIj49IiBvciAiPD0iIGNvbmRpdGlvbiwgYW5kCi0JCQkg KiBzbyB3ZSdkIGJldHRlciBhZGp1c3Qgc3RyYXRfdG90YWwgYWNjb3JkaW5nbHkuCi0JCQkgKi8K LQkJCWlmIChpID09IGtleXNDb3VudCAtIDEpCisJCQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZiksIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKGJ1Zik7CisJCQlvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQYWdlR2V0U3Bl Y2lhbFBvaW50ZXIocGFnZSk7CisJCQlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CisKKwkJCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHByZWZpeERpcikpCiAJCQl7Ci0JCQkJYm9vbAkJdXNl ZF9hbGxfc3Via2V5cyA9IGZhbHNlOworCQkJCS8qIFRoZXJlIGNvdWxkIGJlIGRlYWQgcGFnZXMg dG8gdGhlIGxlZnQsIHNvIG5vdCB0aGlzOiAqLworCQkJCS8qIEFzc2VydChQX0xFRlRNT1NUKG9w YXF1ZSkpOyAqLwogCi0JCQkJQXNzZXJ0KCEoc3Via2V5LT5za19mbGFncyAmIFNLX1JPV19FTkQp KTsKLQkJCQlmb3IgKDs7KQotCQkJCXsKLQkJCQkJc3Via2V5Kys7Ci0JCQkJCUFzc2VydChzdWJr ZXktPnNrX2ZsYWdzICYgU0tfUk9XX01FTUJFUik7Ci0JCQkJCWlmIChzdWJrZXktPnNrX2F0dG5v ICE9IGtleXNDb3VudCArIDEpCi0JCQkJCQlicmVhazsJLyogb3V0LW9mLXNlcXVlbmNlLCBjYW4n dCB1c2UgaXQgKi8KLQkJCQkJaWYgKHN1YmtleS0+c2tfc3RyYXRlZ3kgIT0gY3VyLT5za19zdHJh dGVneSkKLQkJCQkJCWJyZWFrOwkvKiB3cm9uZyBkaXJlY3Rpb24sIGNhbid0IHVzZSBpdCAqLwot CQkJCQlpZiAoc3Via2V5LT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJCQkJCWJyZWFrOwkvKiBj YW4ndCB1c2UgbnVsbCBrZXlzICovCi0JCQkJCUFzc2VydChrZXlzQ291bnQgPCBJTkRFWF9NQVhf S0VZUyk7Ci0JCQkJCW1lbWNweShpbnNrZXkuc2NhbmtleXMgKyBrZXlzQ291bnQsIHN1YmtleSwK LQkJCQkJCSAgIHNpemVvZihTY2FuS2V5RGF0YSkpOwotCQkJCQlrZXlzQ291bnQrKzsKLQkJCQkJ aWYgKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19ST1dfRU5EKQotCQkJCQl7Ci0JCQkJCQl1c2VkX2Fs bF9zdWJrZXlzID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICgh dXNlZF9hbGxfc3Via2V5cykKLQkJCQl7Ci0JCQkJCXN3aXRjaCAoc3RyYXRfdG90YWwpCi0JCQkJ CXsKLQkJCQkJCWNhc2UgQlRMZXNzU3RyYXRlZ3lOdW1iZXI6Ci0JCQkJCQkJc3RyYXRfdG90YWwg PSBCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVyOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJY2FzZSBC VEdyZWF0ZXJTdHJhdGVneU51bWJlcjoKLQkJCQkJCQlzdHJhdF90b3RhbCA9IEJUR3JlYXRlckVx dWFsU3RyYXRlZ3lOdW1iZXI7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJl YWs7CQkJLyogZG9uZSB3aXRoIG91dGVyIGxvb3AgKi8KKwkJCQlzdGFydCA9IFBfRklSU1REQVRB S0VZKG9wYXF1ZSk7CiAJCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogT3JkaW5h cnkgY29tcGFyaXNvbiBrZXkuICBUcmFuc2Zvcm0gdGhlIHNlYXJjaC1zdHlsZSBzY2FuIGtleQot CQkJICogdG8gYW4gaW5zZXJ0aW9uIHNjYW4ga2V5IGJ5IHJlcGxhY2luZyB0aGUgc2tfZnVuYyB3 aXRoIHRoZQotCQkJICogYXBwcm9wcmlhdGUgYnRyZWUgY29tcGFyaXNvbiBmdW5jdGlvbi4KLQkJ CSAqCi0JCQkgKiBJZiBzY2Fua2V5IG9wZXJhdG9yIGlzIG5vdCBhIGNyb3NzLXR5cGUgY29tcGFy aXNvbiwgd2UgY2FuIHVzZQotCQkJICogdGhlIGNhY2hlZCBjb21wYXJpc29uIGZ1bmN0aW9uOyBv dGhlcndpc2UgZ290dGEgbG9vayBpdCB1cCBpbgotCQkJICogdGhlIGNhdGFsb2dzLiAgKFRoYXQg Y2FuJ3QgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24sIHNpbmNlIG5vCi0JCQkgKiBpbmRleHNj YW4gaW5pdGlhdGVkIGJ5IHN5c2NhY2hlIGxvb2t1cCB3aWxsIHVzZSBjcm9zcy1kYXRhLXR5cGUK LQkJCSAqIG9wZXJhdG9ycy4pCi0JCQkgKgotCQkJICogV2Ugc3VwcG9ydCB0aGUgY29udmVudGlv biB0aGF0IHNrX3N1YnR5cGUgPT0gSW52YWxpZE9pZCBtZWFucwotCQkJICogdGhlIG9wY2xhc3Mg aW5wdXQgdHlwZTsgdGhpcyBpcyBhIGhhY2sgdG8gc2ltcGxpZnkgbGlmZSBmb3IKLQkJCSAqIFNj YW5LZXlJbml0KCkuCi0JCQkgKi8KLQkJCWlmIChjdXItPnNrX3N1YnR5cGUgPT0gcmVsLT5yZF9v cGNpbnR5cGVbaV0gfHwKLQkJCQljdXItPnNrX3N1YnR5cGUgPT0gSW52YWxpZE9pZCkKKwkJCWVs c2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKHByZWZpeERpcikpCiAJCQl7Ci0JCQkJRm1n ckluZm8gICAqcHJvY2luZm87Ci0KLQkJCQlwcm9jaW5mbyA9IGluZGV4X2dldHByb2NpbmZvKHJl bCwgY3VyLT5za19hdHRubywgQlRPUkRFUl9QUk9DKTsKLQkJCQlTY2FuS2V5RW50cnlJbml0aWFs aXplV2l0aEluZm8oaW5za2V5LnNjYW5rZXlzICsgaSwKLQkJCQkJCQkJCQkJICAgY3VyLT5za19m bGFncywKLQkJCQkJCQkJCQkJICAgY3VyLT5za19hdHRubywKLQkJCQkJCQkJCQkJICAgSW52YWxp ZFN0cmF0ZWd5LAotCQkJCQkJCQkJCQkgICBjdXItPnNrX3N1YnR5cGUsCi0JCQkJCQkJCQkJCSAg IGN1ci0+c2tfY29sbGF0aW9uLAotCQkJCQkJCQkJCQkgICBwcm9jaW5mbywKLQkJCQkJCQkJCQkJ ICAgY3VyLT5za19hcmd1bWVudCk7CisJCQkJQXNzZXJ0KFBfUklHSFRNT1NUKG9wYXF1ZSkpOwor CisJCQkJc3RhcnQgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwogCQkJfQogCQkJZWxz ZQogCQkJewotCQkJCVJlZ1Byb2NlZHVyZSBjbXBfcHJvYzsKLQotCQkJCWNtcF9wcm9jID0gZ2V0 X29wZmFtaWx5X3Byb2MocmVsLT5yZF9vcGZhbWlseVtpXSwKLQkJCQkJCQkJCQkJIHJlbC0+cmRf b3BjaW50eXBlW2ldLAotCQkJCQkJCQkJCQkgY3VyLT5za19zdWJ0eXBlLAotCQkJCQkJCQkJCQkg QlRPUkRFUl9QUk9DKTsKLQkJCQlpZiAoIVJlZ1Byb2NlZHVyZUlzVmFsaWQoY21wX3Byb2MpKQot CQkJCQllbG9nKEVSUk9SLCAibWlzc2luZyBzdXBwb3J0IGZ1bmN0aW9uICVkKCV1LCV1KSBmb3Ig YXR0cmlidXRlICVkIG9mIGluZGV4IFwiJXNcIiIsCi0JCQkJCQkgQlRPUkRFUl9QUk9DLCByZWwt PnJkX29wY2ludHlwZVtpXSwgY3VyLT5za19zdWJ0eXBlLAotCQkJCQkJIGN1ci0+c2tfYXR0bm8s IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwotCQkJCVNjYW5LZXlFbnRyeUluaXRpYWxp emUoaW5za2V5LnNjYW5rZXlzICsgaSwKLQkJCQkJCQkJCSAgIGN1ci0+c2tfZmxhZ3MsCi0JCQkJ CQkJCQkgICBjdXItPnNrX2F0dG5vLAotCQkJCQkJCQkJICAgSW52YWxpZFN0cmF0ZWd5LAotCQkJ CQkJCQkJICAgY3VyLT5za19zdWJ0eXBlLAotCQkJCQkJCQkJICAgY3VyLT5za19jb2xsYXRpb24s Ci0JCQkJCQkJCQkgICBjbXBfcHJvYywKLQkJCQkJCQkJCSAgIGN1ci0+c2tfYXJndW1lbnQpOwor CQkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNjYW4gZGlyZWN0aW9uOiAlZCIsIChpbnQpIHByZWZp eERpcik7CiAJCQl9Ci0JCX0KLQl9CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBFeGFtaW5lIHRoZSBz ZWxlY3RlZCBpbml0aWFsLXBvc2l0aW9uaW5nIHN0cmF0ZWd5IHRvIGRldGVybWluZSBleGFjdGx5 Ci0JICogd2hlcmUgd2UgbmVlZCB0byBzdGFydCB0aGUgc2NhbiwgYW5kIHNldCBmbGFnIHZhcmlh YmxlcyB0byBjb250cm9sIHRoZQotCSAqIGNvZGUgYmVsb3cuCi0JICoKLQkgKiBJZiBuZXh0a2V5 ID0gZmFsc2UsIF9idF9zZWFyY2ggYW5kIF9idF9iaW5zcmNoIHdpbGwgbG9jYXRlIHRoZSBmaXJz dAotCSAqIGl0ZW0gPj0gc2NhbiBrZXkuICBJZiBuZXh0a2V5ID0gdHJ1ZSwgdGhleSB3aWxsIGxv Y2F0ZSB0aGUgZmlyc3QKLQkgKiBpdGVtID4gc2NhbiBrZXkuCi0JICoKLQkgKiBJZiBnb2JhY2sg PSB0cnVlLCB3ZSB3aWxsIHRoZW4gc3RlcCBiYWNrIG9uZSBpdGVtLCB3aGlsZSBpZgotCSAqIGdv YmFjayA9IGZhbHNlLCB3ZSB3aWxsIHN0YXJ0IHRoZSBzY2FuIG9uIHRoZSBsb2NhdGVkIGl0ZW0u Ci0JICotLS0tLS0tLS0tCi0JICovCi0Jc3dpdGNoIChzdHJhdF90b3RhbCkKLQl7Ci0JCWNhc2Ug QlRMZXNzU3RyYXRlZ3lOdW1iZXI6Ci0KLQkJCS8qCi0JCQkgKiBGaW5kIGZpcnN0IGl0ZW0gPj0g c2NhbmtleSwgdGhlbiBiYWNrIHVwIG9uZSB0byBhcnJpdmUgYXQgbGFzdAotCQkJICogaXRlbSA8 IHNjYW5rZXkuICAoTm90ZTogdGhpcyBwb3NpdGlvbmluZyBzdHJhdGVneSBpcyBvbmx5IHVzZWQK LQkJCSAqIGZvciBhIGJhY2t3YXJkIHNjYW4sIHNvIHRoYXQgaXMgYWx3YXlzIHRoZSBjb3JyZWN0 IHN0YXJ0aW5nCi0JCQkgKiBwb3NpdGlvbi4pCi0JCQkgKi8KLQkJCW5leHRrZXkgPSBmYWxzZTsK LQkJCWdvYmFjayA9IHRydWU7Ci0JCQlicmVhazsKLQotCQljYXNlIEJUTGVzc0VxdWFsU3RyYXRl Z3lOdW1iZXI6Ci0KLQkJCS8qCi0JCQkgKiBGaW5kIGZpcnN0IGl0ZW0gPiBzY2Fua2V5LCB0aGVu IGJhY2sgdXAgb25lIHRvIGFycml2ZSBhdCBsYXN0Ci0JCQkgKiBpdGVtIDw9IHNjYW5rZXkuICAo Tm90ZTogdGhpcyBwb3NpdGlvbmluZyBzdHJhdGVneSBpcyBvbmx5IHVzZWQKLQkJCSAqIGZvciBh IGJhY2t3YXJkIHNjYW4sIHNvIHRoYXQgaXMgYWx3YXlzIHRoZSBjb3JyZWN0IHN0YXJ0aW5nCi0J CQkgKiBwb3NpdGlvbi4pCi0JCQkgKi8KLQkJCW5leHRrZXkgPSB0cnVlOwotCQkJZ29iYWNrID0g dHJ1ZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOgotCi0JCQkv KgotCQkJICogSWYgYSBiYWNrd2FyZCBzY2FuIHdhcyBzcGVjaWZpZWQsIG5lZWQgdG8gc3RhcnQg d2l0aCBsYXN0IGVxdWFsCi0JCQkgKiBpdGVtIG5vdCBmaXJzdCBvbmUuCisJCQkvKiByZW1lbWJl ciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQgKi8KKwkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKKwkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1 cnJQb3MuYnVmKTsKKworCQkJaXR1cCA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIHN0 YXJ0KTsKKwkJCS8qIGluIHNvbWUgY2FzZXMsIHdlIGNhbiAob3IgaGF2ZSB0bykgc2tpcCBmdXJ0 aGVyIGluc2lkZSB0aGUgcHJlZml4LgorCQkJICogd2UgY2FuIGRvIHRoaXMgaWYgd2UgaGF2ZSBl eHRyYSBxdWFscyBiZWNvbWluZyBhdmFpbGFibGUsIGVnLgorCQkJICogV0hFUkUgYj0yIG9uIGFu IGluZGV4IG9uIChhLGIpLgorCQkJICogV2UgbXVzdCwgaWYgdGhpcyBpcyBub3QgcmVndWxhciBt b2RlIChwcmVmaXhEaXIhPXBvc3RmaXhEaXIpLgorCQkJICogQmVjYXVzZSB0aGlzIG1lYW5zIHdl J3JlIGF0IHRoZSBlbmQgb2YgdGhlIHByZWZpeCwgd2hpbGUgd2Ugc2hvdWxkIGJlCisJCQkgKiBh dCB0aGUgYmVnaW5uaW5nLgogCQkJICovCi0JCQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQo ZGlyKSkKKwkJCWlmIChfYnRfaGFzX2V4dHJhX3F1YWxzX2FmdGVyX3NraXAoc28tPnNraXBEYXRh LCBwb3N0Zml4RGlyLCAwKSB8fAorCQkJCQkhX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZp eERpciwgcG9zdGZpeERpcikpCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGlzIHRoZSBzYW1l IGFzIHRoZSA8PSBzdHJhdGVneS4gIFdlIHdpbGwgY2hlY2sgYXQgdGhlCi0JCQkJICogZW5kIHdo ZXRoZXIgdGhlIGZvdW5kIGl0ZW0gaXMgYWN0dWFsbHkgPS4KLQkJCQkgKi8KLQkJCQluZXh0a2V5 ID0gdHJ1ZTsKLQkJCQlnb2JhY2sgPSB0cnVlOworCQkJCV9idF9za2lwX2V4dHJhX2NvbmRpdGlv bnMoc2NhbiwgJml0dXAsICZzdGFydCwgcHJlZml4RGlyLCBwb3N0Zml4RGlyLCAmY21wKTsKIAkJ CX0KLQkJCWVsc2UKKwkJCS8qIG5vdyBmaW5kIHRoZSBuZXh0IG1hdGNoaW5nIHR1cGxlICovCisJ CQltYXRjaCA9IF9idF9za2lwX2ZpbmRfbmV4dChzY2FuLCBpdHVwLCBzdGFydCwgcHJlZml4RGly LCBwb3N0Zml4RGlyKTsKKwkJCWlmICghbWF0Y2gpCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBUaGlz IGlzIHRoZSBzYW1lIGFzIHRoZSA+PSBzdHJhdGVneS4gIFdlIHdpbGwgY2hlY2sgYXQgdGhlCi0J CQkJICogZW5kIHdoZXRoZXIgdGhlIGZvdW5kIGl0ZW0gaXMgYWN0dWFsbHkgPS4KLQkJCQkgKi8K LQkJCQluZXh0a2V5ID0gZmFsc2U7Ci0JCQkJZ29iYWNrID0gZmFsc2U7CisJCQkJaWYgKF9idF9z a2lwX2lzX2Fsd2F5c192YWxpZChzbykpCisJCQkJCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bp bihzY2FuLCAmc28tPmN1cnJQb3MpOworCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCWJyZWFr OwogCi0JCWNhc2UgQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJlcjoKKwkJCV9idF9kcm9wX2xv Y2tfYW5kX21heWJlX3BpbihzY2FuLCAmc28tPmN1cnJQb3MpOwogCi0JCQkvKgotCQkJICogRmlu ZCBmaXJzdCBpdGVtID49IHNjYW5rZXkuICAoVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGZvcndhcmQK LQkJCSAqIHNjYW5zLikKLQkJCSAqLwotCQkJbmV4dGtleSA9IGZhbHNlOwotCQkJZ29iYWNrID0g ZmFsc2U7Ci0JCQlicmVhazsKLQotCQljYXNlIEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyOgotCi0J CQkvKgotCQkJICogRmluZCBmaXJzdCBpdGVtID4gc2NhbmtleS4gIChUaGlzIGlzIG9ubHkgdXNl ZCBmb3IgZm9yd2FyZAotCQkJICogc2NhbnMuKQotCQkJICovCi0JCQluZXh0a2V5ID0gdHJ1ZTsK LQkJCWdvYmFjayA9IGZhbHNlOwotCQkJYnJlYWs7CisJCQljdXJySXRlbSA9ICZzby0+Y3VyclBv cy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOworCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IGN1 cnJJdGVtLT5oZWFwVGlkOworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQlzY2FuLT54 c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9m ZnNldCk7CiAKLQkJZGVmYXVsdDoKLQkJCS8qIGNhbid0IGdldCBoZXJlLCBidXQga2VlcCBjb21w aWxlciBxdWlldCAqLwotCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBzdHJhdF90b3RhbDog JWQiLCAoaW50KSBzdHJhdF90b3RhbCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQogCX0KIAotCS8qIEluaXRpYWxpemUgcmVtYWluaW5nIGluc2VydGlvbiBzY2FuIGtl eSBmaWVsZHMgKi8KLQlfYnRfbWV0YXZlcnNpb24ocmVsLCAmaW5za2V5LmhlYXBrZXlzcGFjZSwg Jmluc2tleS5hbGxlcXVhbGltYWdlKTsKLQlpbnNrZXkuYW55bnVsbGtleXMgPSBmYWxzZTsgLyog dW51c2VkICovCi0JaW5za2V5Lm5leHRrZXkgPSBuZXh0a2V5OwotCWluc2tleS5waXZvdHNlYXJj aCA9IGZhbHNlOwotCWluc2tleS5zY2FudGlkID0gTlVMTDsKLQlpbnNrZXkua2V5c3ogPSBrZXlz Q291bnQ7CisJaWYgKCFfYnRfY3JlYXRlX2luc2VydGlvbl9zY2FuX2tleShyZWwsIHByZWZpeERp ciwgc3RhcnRLZXlzLCBrZXlzQ291bnQsICZpbnNrZXksICZzdHJhdF90b3RhbCwgICZnb2JhY2sp KQorCXsKKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAK IAkvKgogCSAqIFVzZSB0aGUgbWFudWZhY3R1cmVkIGluc2VydGlvbiBzY2FuIGtleSB0byBkZXNj ZW5kIHRoZSB0cmVlIGFuZApAQCAtMTM4OSw3ICsxMDY0LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwg QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSwKIAkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3QpOwog Ci0JX2J0X2luaXRpYWxpemVfbW9yZV9kYXRhKHNvLCBkaXIpOworCV9idF9pbml0aWFsaXplX21v cmVfZGF0YShzbywgcHJlZml4RGlyKTsKIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0 ZW0gb24gdGhlIHBhZ2UgKi8KIAlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGJ1 Zik7CkBAIC0xNDE5LDIzICsxMDk0LDgxIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpOwogCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKIAotCS8qCi0JICogTm93IGxvYWQgZGF0YSBm cm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgotCSAqLwotCWlmICghX2J0X3JlYWRwYWdl KHNjYW4sIGRpciwgb2ZmbnVtKSkKKwlpZiAoX2J0X3NraXBfZW5hYmxlZChzbykpCiAJewotCQkv KgotCQkgKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhpcyBwYWdlLiAg VHJ5IHRvIGFkdmFuY2UgdG8KLQkJICogdGhlIG5leHQgcGFnZS4gIFJldHVybiBmYWxzZSBpZiB0 aGVyZSdzIG5vIG1hdGNoaW5nIGRhdGEgYXQgYWxsLgorCQlQYWdlIHBhZ2U7CisJCUJUUGFnZU9w YXF1ZSBvcGFxdWU7CisJCU9mZnNldE51bWJlciBtaW5vZmY7CisJCWJvb2wgbWF0Y2g7CisJCUJU U2tpcENvbXBhcmVSZXN1bHQgY21wID0gezB9OworCisJCS8qIGZpcnN0IGNyZWF0ZSB0aGUgc2tp cCBzY2FuIGtleXMgKi8KKwkJX2J0X3NraXBfY3JlYXRlX3NjYW5rZXlzKHJlbCwgc28pOworCisJ CS8qIHJlbWVtYmVyIHdoaWNoIHBhZ2Ugd2UgaGF2ZSBwaW5uZWQgKi8KKwkJc28tPmN1cnJQb3Mu Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOworCisJCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCW9wYXF1ZSA9IChCVFBhZ2VP cGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihwYWdlKTsKKwkJbWlub2ZmID0gUF9GSVJTVERB VEFLRVkob3BhcXVlKTsKKwkJLyogX2JpbnNyY2ggKyBnb2JhY2sgcGFyYW1ldGVyIGNhbiBsZWF2 ZSB0aGUgb2ZmbnVtIGJlZm9yZSB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgcGFnZQorCQkgKiBvciBh ZnRlciB0aGUgbGFzdCBpdGVtIG9uIHRoZSBwYWdlLiBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIG5l ZWQgdG8gZWl0aGVyIHN0ZXAKKwkJICogYmFjayBvciBmb3J3YXJkIG9uZSBwYWdlCiAJCSAqLwot CQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7Ci0J CWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCisJCWlmIChvZmZudW0gPCBtaW5vZmYpCisJ CXsKKwkJCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOworCQkJaWYgKCFfYnRf c3RlcF9iYWNrX3BhZ2Uoc2NhbiwgJml0dXAsICZvZmZudW0pKQorCQkJCXJldHVybiBmYWxzZTsK KwkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCX0KKwkJZWxzZSBp ZiAob2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkKKwkJeworCQkJQmxvY2tO dW1iZXIgbmV4dCA9IG9wYXF1ZS0+YnRwb19uZXh0OworCQkJX2J0X3VubG9ja2J1ZihyZWwsIHNv LT5jdXJyUG9zLmJ1Zik7CisJCQlpZiAoIV9idF9zdGVwX2ZvcndhcmRfcGFnZShzY2FuLCBuZXh0 LCAmaXR1cCwgJm9mZm51bSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJfQorCisJCWl0dXAgPSBfYnRfZ2V0X3R1cGxlX2Zy b21fb2Zmc2V0KHNvLCBvZmZudW0pOworCQkvKiBjaGVjayBpZiB3ZSBjYW4gc2tpcCBldmVuIG1v cmUgYmVjYXVzZSB3ZSBjYW4gdXNlIG5ldyBjb25kaXRpb25zICovCisJCWlmIChfYnRfaGFzX2V4 dHJhX3F1YWxzX2FmdGVyX3NraXAoc28tPnNraXBEYXRhLCBwb3N0Zml4RGlyLCBpbnNrZXkua2V5 c3opIHx8CisJCQkJIV9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIsIHBvc3RmaXhE aXIpKQorCQl7CisJCQlfYnRfc2tpcF9leHRyYV9jb25kaXRpb25zKHNjYW4sICZpdHVwLCAmb2Zm bnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIsICZjbXApOworCQl9CisJCS8qIG5vdyBmaW5kIHRo ZSB0dXBsZSAqLworCQltYXRjaCA9IF9idF9za2lwX2ZpbmRfbmV4dChzY2FuLCBpdHVwLCBvZmZu dW0sIHByZWZpeERpciwgcG9zdGZpeERpcik7CisJCWlmICghbWF0Y2gpCisJCXsKKwkJCWlmIChf YnRfc2tpcF9pc19hbHdheXNfdmFsaWQoc28pKQorCQkJCV9idF9kcm9wX2xvY2tfYW5kX21heWJl X3BpbihzY2FuLCAmc28tPmN1cnJQb3MpOwogCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CiAJfQogCWVsc2UK IAl7Ci0JCS8qIERyb3AgdGhlIGxvY2ssIGFuZCBtYXliZSB0aGUgcGluLCBvbiB0aGUgY3VycmVu dCBwYWdlICovCi0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihzY2FuLCAmc28tPmN1cnJQ b3MpOworCQkvKgorCQkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhl IHNjYW4uCisJCSAqLworCQlpZiAoIV9idF9yZWFkcGFnZShzY2FuLCBwcmVmaXhEaXIsICZvZmZu dW0sIHRydWUpKQorCQl7CisJCQkvKgorCQkJICogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGlu ZyBkYXRhIG9uIHRoaXMgcGFnZS4gIFRyeSB0byBhZHZhbmNlIHRvCisJCQkgKiB0aGUgbmV4dCBw YWdlLiAgUmV0dXJuIGZhbHNlIGlmIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgZGF0YSBhdCBhbGwuCisJ CQkgKi8KKwkJCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3Mu YnVmKTsKKwkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIHByZWZpeERpcikpCisJCQkJcmV0dXJu IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRHJvcCB0aGUgbG9jaywgYW5kIG1heWJl IHRoZSBwaW4sIG9uIHRoZSBjdXJyZW50IHBhZ2UgKi8KKwkJCV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihzY2FuLCAmc28tPmN1cnJQb3MpOworCQl9CiAJfQogCiByZWFkY29tcGxldGU6CkBA IC0xNDYzLDI5ICsxMTk2LDExMyBAQCByZWFkY29tcGxldGU6CiAgKgkJc28tPmN1cnJQb3MuYnVm IHRvIEludmFsaWRCdWZmZXIuCiAgKi8KIGJvb2wKLV9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtOwogCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBw YWdlOyBvciBpZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQg cGFnZSB3aXRoIGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK KwlpZiAoIV9idF9za2lwX2VuYWJsZWQoc28pKQogCXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRl bUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCS8qCisJCSAqIEFkdmFuY2UgdG8gbmV4 dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlmIHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCisJ CSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCisJCSAqLworCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChwcmVmaXhEaXIpKQogCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShz Y2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1J bmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJeworCQkJCWlmICghX2J0X3N0ZXBwYWdl KHNjYW4sIHByZWZpeERpcikpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQllbHNl CisJCXsKKwkJCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0 SXRlbSkKKwkJCXsKKwkJCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBwcmVmaXhEaXIpKQorCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQl9CiAJCX0KIAl9CiAJZWxzZQogCXsKLQkJaWYgKC0tc28tPmN1 cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQorCQlib29sIG1hdGNoOwor CQlJbmRleFR1cGxlIGl0dXAgPSBOVUxMOworCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0gSW52YWxp ZE9mZnNldE51bWJlcjsKKworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChwb3N0Zml4RGly KSkKIAkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFs c2U7CisJCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRl bSkKKwkJCXsKKwkJCQlpZiAocHJlZml4RGlyICE9IHNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRE aXJlY3Rpb24pCisJCQkJeworCQkJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiBkb2luZyBhIGN1cnNv ciBzY2FuIGFuZCBjaGFuZ2luZworCQkJCQkgKiBkaXJlY3Rpb24gaW4gdGhlIG1lYW50aW1lLiBl Zy4gZmlyc3QgZmV0Y2ggZm9yd2FyZHMsCisJCQkJCSAqIHRoZW4gYmFja3dhcmRzLgorCQkJCQkg KiB3ZSAqYWx3YXlzKiBqdXN0IGdvIHRvIHRoZSBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBza2lwcGlu ZywKKwkJCQkJICogYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgc2FmZSBvcHRpb24uCisJCQkJCSAq LworCQkJCQlzby0+c2tpcERhdGEtPmN1clBvcy5uZXh0QWN0aW9uID0gU2tpcFN0YXRlTmV4dDsK KwkJCQkJc28tPnNraXBEYXRhLT5jdXJQb3MubmV4dERpcmVjdGlvbiA9IHByZWZpeERpcjsKKwkJ CQl9CisKKwkJCQlpZiAoc28tPnNraXBEYXRhLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3Rh dGVOZXh0KQorCQkJCXsKKwkJCQkJLyogd2Ugc2hvdWxkIGp1c3QgZ28gZm9yd2FyZHMgb25lIHBh Z2UsIG5vIHNraXBwaW5nIGlzIG5lY2Vzc2FyeSAqLworCQkJCQlpZiAoIV9idF9zdGVwX2Zvcndh cmRfcGFnZShzY2FuLCBzby0+Y3VyclBvcy5uZXh0UGFnZSwgJml0dXAsICZvZmZudW0pKQorCQkJ CQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQllbHNlIGlmIChzby0+c2tpcERhdGEtPmN1clBv cy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVN0b3ApCisJCQkJeworCQkJCQkvKiB3ZSd2ZSByZWFj aGVkIHRoZSBlbmQgb2YgdGhlIGluZGV4LCBvciB3ZSBjYW5ub3QgZmluZCBhbnkgbW9yZSBrZXlz ICovCisJCQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCQkJCQlCVFNj YW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0K KworCQkJCS8qIG5vdyBmaW5kIHRoZSBuZXh0IHR1cGxlICovCisJCQkJbWF0Y2ggPSBfYnRfc2tp cF9maW5kX25leHQoc2NhbiwgaXR1cCwgb2ZmbnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOwor CQkJCWlmICghbWF0Y2gpCisJCQkJeworCQkJCQlpZiAoX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlk KHNvKSkKKwkJCQkJCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihzY2FuLCAmc28tPmN1cnJQ b3MpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihzY2FuLCAmc28tPmN1cnJQb3MpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJ aWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQorCQkJ eworCQkJCWlmIChwcmVmaXhEaXIgIT0gc28tPnNraXBEYXRhLT5jdXJQb3MubmV4dERpcmVjdGlv bikKKwkJCQl7CisJCQkJCXNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRBY3Rpb24gPSBTa2lwU3Rh dGVOZXh0OworCQkJCQlzby0+c2tpcERhdGEtPmN1clBvcy5uZXh0RGlyZWN0aW9uID0gcHJlZml4 RGlyOworCQkJCX0KKworCQkJCWlmIChzby0+c2tpcERhdGEtPmN1clBvcy5uZXh0QWN0aW9uID09 IFNraXBTdGF0ZU5leHQpCisJCQkJeworCQkJCQlpZiAoIV9idF9zdGVwX2JhY2tfcGFnZShzY2Fu LCAmaXR1cCwgJm9mZm51bSkpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWVsc2Ug aWYgKHNvLT5za2lwRGF0YS0+Y3VyUG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU3RvcCkKKwkJ CQl7CisJCQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCQkJCQlCVFNj YW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0K KworCQkJCS8qIG5vdyBmaW5kIHRoZSBuZXh0IHR1cGxlICovCisJCQkJbWF0Y2ggPSBfYnRfc2tp cF9maW5kX25leHQoc2NhbiwgaXR1cCwgb2ZmbnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOwor CQkJCWlmICghbWF0Y2gpCisJCQkJeworCQkJCQlpZiAoX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlk KHNvKSkKKwkJCQkJCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihzY2FuLCAmc28tPmN1cnJQ b3MpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihzY2FuLCAmc28tPmN1cnJQb3MpOworCQkJfQogCQl9CiAJfQogCkBAIC0xNTE3LDgg KzEzMzQsOCBAQCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhl IHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkK K2Jvb2wKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgKm9mZm51bSwgYm9vbCBpc1JlZ3VsYXJNb2RlKQogewogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwpAQCAt MTUyOCw2ICsxMzQ1LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJaW50CQkJaXRlbUluZGV4OwogCWJv b2wJCWNvbnRpbnVlc2NhbjsKIAlpbnQJCQlpbmRuYXR0czsKKwlpbnQJCQlwcmVmaXhza2lwaW5k ZXg7CiAKIAkvKgogCSAqIFdlIG11c3QgaGF2ZSB0aGUgYnVmZmVyIHBpbm5lZCBhbmQgbG9ja2Vk LCBidXQgdGhlIHVzdWFsIG1hY3JvIGNhbid0IGJlCkBAIC0xNTg2LDExICsxNDA0LDExIEBAIF9i dF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXRO dW1iZXIgb2ZmbnVtKQogCQkvKiBsb2FkIGl0ZW1zW10gaW4gYXNjZW5kaW5nIG9yZGVyICovCiAJ CWl0ZW1JbmRleCA9IDA7CiAKLQkJb2ZmbnVtID0gTWF4KG9mZm51bSwgbWlub2ZmKTsKKwkJKm9m Zm51bSA9IE1heCgqb2ZmbnVtLCBtaW5vZmYpOwogCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2Zm KQorCQl3aGlsZSAoKm9mZm51bSA8PSBtYXhvZmYpCiAJCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFn ZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlk KHBhZ2UsICpvZmZudW0pOwogCQkJSW5kZXhUdXBsZQlpdHVwOwogCiAJCQkvKgpAQCAtMTU5OSwx OSArMTQxNywxOSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJCSAqLwogCQkJaWYgKHNjYW4tPmlnbm9y ZV9raWxsZWRfdHVwbGVzICYmIEl0ZW1JZElzRGVhZChpaWQpKQogCQkJewotCQkJCW9mZm51bSA9 IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJCQkqb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4 dCgqb2ZmbnVtKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAogCQkJaXR1cCA9IChJbmRleFR1cGxl KSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwogCi0JCQlpZiAoX2J0X2NoZWNra2V5cyhzY2FuLCBp dHVwLCBpbmRuYXR0cywgZGlyLCAmY29udGludWVzY2FuKSkKKwkJCWlmIChfYnRfY2hlY2trZXlz X2V4dGVuZGVkKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsIGlzUmVndWxhck1vZGUsICZjb250 aW51ZXNjYW4sICZwcmVmaXhza2lwaW5kZXgpKQogCQkJewogCQkJCS8qIHR1cGxlIHBhc3NlcyBh bGwgc2NhbiBrZXkgY29uZGl0aW9ucyAqLwogCQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhp dHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShz bywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1J bmRleCwgKm9mZm51bSwgaXR1cCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQllbHNl CkBAIC0xNjIzLDI2ICsxNDQxLDMwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJCQkgKiBUSUQKIAkJ CQkJICovCiAJCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhz bywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0 ZW1JbmRleCwgKm9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1 cCwgMCksCiAJCQkJCQkJCQkJCSAgaXR1cCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQkvKiBS ZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJl ZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0 aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVt KHNvLCBpdGVtSW5kZXgsICpvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5n TihpdHVwLCBpKSwKIAkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7 CiAJCQkJCX0KIAkJCQl9CiAJCQl9CisKKwkJCSpvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KCpv ZmZudW0pOworCiAJCQkvKiBXaGVuICFjb250aW51ZXNjYW4sIHRoZXJlIGNhbid0IGJlIGFueSBt b3JlIG1hdGNoZXMsIHNvIHN0b3AgKi8KIAkJCWlmICghY29udGludWVzY2FuKQogCQkJCWJyZWFr OwotCi0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CisJCQlpZiAoIWlzUmVn dWxhck1vZGUgJiYgcHJlZml4c2tpcGluZGV4ICE9IC0xKQorCQkJCWJyZWFrOwogCQl9CisJCSpv ZmZudW0gPSBPZmZzZXROdW1iZXJQcmV2KCpvZmZudW0pOwogCiAJCS8qCiAJCSAqIFdlIGRvbid0 IG5lZWQgdG8gdmlzaXQgcGFnZSB0byB0aGUgcmlnaHQgd2hlbiB0aGUgaGlnaCBrZXkKQEAgLTE2 NjIsNyArMTQ4NCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJaW50CQkJdHJ1bmNhdHQ7CiAKIAkJ CXRydW5jYXR0ID0gQlRyZWVUdXBsZUdldE5BdHRzKGl0dXAsIHNjYW4tPmluZGV4UmVsYXRpb24p OwotCQkJX2J0X2NoZWNra2V5cyhzY2FuLCBpdHVwLCB0cnVuY2F0dCwgZGlyLCAmY29udGludWVz Y2FuKTsKKwkJCV9idF9jaGVja2tleXMoc2NhbiwgaXR1cCwgdHJ1bmNhdHQsIGRpciwgJmNvbnRp bnVlc2NhbiwgTlVMTCk7CiAJCX0KIAogCQlpZiAoIWNvbnRpbnVlc2NhbikKQEAgLTE2NzgsMTEg KzE1MDAsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCS8qIGxvYWQgaXRlbXNbXSBpbiBkZXNjZW5k aW5nIG9yZGVyICovCiAJCWl0ZW1JbmRleCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CiAKLQkJb2Zm bnVtID0gTWluKG9mZm51bSwgbWF4b2ZmKTsKKwkJKm9mZm51bSA9IE1pbigqb2ZmbnVtLCBtYXhv ZmYpOwogCi0JCXdoaWxlIChvZmZudW0gPj0gbWlub2ZmKQorCQl3aGlsZSAoKm9mZm51bSA+PSBt aW5vZmYpCiAJCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0p OworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsICpvZmZudW0pOwogCQkJSW5k ZXhUdXBsZQlpdHVwOwogCQkJYm9vbAkJdHVwbGVfYWxpdmU7CiAJCQlib29sCQlwYXNzZXNfcXVh bHM7CkBAIC0xNjk5LDEwICsxNTIxLDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJICovCiAJCQlp ZiAoc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgJiYgSXRlbUlkSXNEZWFkKGlpZCkpCiAJCQl7 Ci0JCQkJQXNzZXJ0KG9mZm51bSA+PSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKTsKLQkJCQlpZiAo b2ZmbnVtID4gUF9GSVJTVERBVEFLRVkob3BhcXVlKSkKKwkJCQlBc3NlcnQoKm9mZm51bSA+PSBQ X0ZJUlNUREFUQUtFWShvcGFxdWUpKTsKKwkJCQlpZiAoKm9mZm51bSA+IFBfRklSU1REQVRBS0VZ KG9wYXF1ZSkpCiAJCQkJewotCQkJCQlvZmZudW0gPSBPZmZzZXROdW1iZXJQcmV2KG9mZm51bSk7 CisJCQkJCSpvZmZudW0gPSBPZmZzZXROdW1iZXJQcmV2KCpvZmZudW0pOwogCQkJCQljb250aW51 ZTsKIAkJCQl9CiAKQEAgLTE3MTMsOCArMTUzNSw4IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCiAJCQlp dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CiAKLQkJCXBhc3Nlc19x dWFscyA9IF9idF9jaGVja2tleXMoc2NhbiwgaXR1cCwgaW5kbmF0dHMsIGRpciwKLQkJCQkJCQkJ CQkgJmNvbnRpbnVlc2Nhbik7CisJCQlwYXNzZXNfcXVhbHMgPSBfYnRfY2hlY2trZXlzX2V4dGVu ZGVkKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsCisJCQkJCQkJCQkJCQkgIGlzUmVndWxhck1v ZGUsICZjb250aW51ZXNjYW4sICZwcmVmaXhza2lwaW5kZXgpOwogCQkJaWYgKHBhc3Nlc19xdWFs cyAmJiB0dXBsZV9hbGl2ZSkKIAkJCXsKIAkJCQkvKiB0dXBsZSBwYXNzZXMgYWxsIHNjYW4ga2V5 IGNvbmRpdGlvbnMgKi8KQEAgLTE3MjIsNyArMTU0NCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJ CXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9z YXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgKm9mZm51bSwgaXR1cCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CkBA IC0xNzQwLDI4ICsxNTYyLDMyIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCQkJCQkgKi8KIAkJCQkJaXRl bUluZGV4LS07CiAJCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVt cyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28s IGl0ZW1JbmRleCwgKm9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04o aXR1cCwgMCksCiAJCQkJCQkJCQkJCSAgaXR1cCk7CiAJCQkJCS8qIFJlbWVtYmVyIGFkZGl0aW9u YWwgVElEcyAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGlu ZyhpdHVwKTsgaSsrKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJCV9idF9zYXZl cG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5n aXRlbShzbywgaXRlbUluZGV4LCAqb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9z dGluZ04oaXR1cCwgaSksCiAJCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0K IAkJCX0KKworCQkJKm9mZm51bSA9IE9mZnNldE51bWJlclByZXYoKm9mZm51bSk7CisKIAkJCWlm ICghY29udGludWVzY2FuKQogCQkJewogCQkJCS8qIHRoZXJlIGNhbid0IGJlIGFueSBtb3JlIG1h dGNoZXMsIHNvIHN0b3AgKi8KIAkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwogCQkJ CWJyZWFrOwogCQkJfQotCi0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJQcmV2KG9mZm51bSk7CisJ CQlpZiAoIWlzUmVndWxhck1vZGUgJiYgcHJlZml4c2tpcGluZGV4ICE9IC0xKQorCQkJCWJyZWFr OwogCQl9CisJCSpvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KCpvZmZudW0pOwogCiAJCUFzc2Vy dChpdGVtSW5kZXggPj0gMCk7CiAJCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsK QEAgLTE4NjksNyArMTY5NSw3IEBAIF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNv LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogICogcmVhZCBsb2NrLCBvbiB0 aGF0IHBhZ2UuICBJZiB3ZSBkbyBub3QgaG9sZCB0aGUgcGluLCB3ZSBzZXQgc28tPmN1cnJQb3Mu YnVmCiAgKiB0byBJbnZhbGlkQnVmZmVyLiAgV2UgcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgc3Vj Y2Vzcy4KICAqLwotc3RhdGljIGJvb2wKK2Jvb2wKIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTE4OTcsNiArMTcyMyw5IEBAIF9idF9zdGVwcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoc28tPm1hcmtUdXBs ZXMpCiAJCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAogCQkJCSAgIHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCWlmIChzby0+c2tpcERhdGEpCisJCQltZW1j cHkoJnNvLT5za2lwRGF0YS0+bWFya1BvcywgJnNvLT5za2lwRGF0YS0+Y3VyUG9zLAorCQkJCSAg IHNpemVvZihCVFNraXBQb3NEYXRhKSk7CiAJCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5t YXJrSXRlbUluZGV4OwogCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwogCX0KQEAgLTE5NzYsNyAr MTgwNSw3IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLCB3ZSBkcm9wIGFsbAogICogbG9ja3MgYW5kIHBpbnMsIHNldCBzby0+Y3Vy clBvcy5idWYgdG8gSW52YWxpZEJ1ZmZlciwgYW5kIHJldHVybiBmYWxzZS4KICAqLwotc3RhdGlj IGJvb2wKK2Jvb2wKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwpAQCAtMTk4NCw2ICsxODEzLDcgQEAgX2J0X3JlYWRu ZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJYm9vbAkJc3Rh dHVzOworCU9mZnNldE51bWJlciBvZmZudW07CiAKIAlyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwogCkBAIC0yMDE0LDcgKzE4NDQsOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJCVByZWRpY2F0 ZUxvY2tQYWdlKHJlbCwgYmxrbm8sIHNjYW4tPnhzX3NuYXBzaG90KTsKIAkJCQkvKiBzZWUgaWYg dGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJCS8qIG5vdGUgdGhhdCB0 aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9y ZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSkpKQorCQkJCW9mZm51bSA9 IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7CisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIs ICZvZmZudW0sIHRydWUpKQogCQkJCQlicmVhazsKIAkJCX0KIAkJCWVsc2UgaWYgKHNjYW4tPnBh cmFsbGVsX3NjYW4gIT0gTlVMTCkKQEAgLTIxMTYsNyArMTk0Nyw4IEBAIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCQkJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+ Y3VyclBvcy5idWYpLCBzY2FuLT54c19zbmFwc2hvdCk7CiAJCQkJLyogc2VlIGlmIHRoZXJlIGFy ZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxs IGNsZWFyIG1vcmVMZWZ0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShz Y2FuLCBkaXIsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkpKQorCQkJCW9mZm51bSA9IFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBk aXIsICZvZmZudW0sIHRydWUpKQogCQkJCQlicmVhazsKIAkJCX0KIAkJCWVsc2UgaWYgKHNjYW4t PnBhcmFsbGVsX3NjYW4gIT0gTlVMTCkKQEAgLTIxODQsNyArMjAxNiw3IEBAIF9idF9wYXJhbGxl bF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2FuRGly ZWN0aW9uIGRpcikKICAqIHRvIGJlIGhhbGYtZGVhZDsgdGhlIGNhbGxlciBzaG91bGQgY2hlY2sg dGhhdCBjb25kaXRpb24gYW5kIHN0ZXAgbGVmdAogICogYWdhaW4gaWYgaXQncyBpbXBvcnRhbnQu CiAgKi8KLXN0YXRpYyBCdWZmZXIKK0J1ZmZlcgogX2J0X3dhbGtfbGVmdChSZWxhdGlvbiByZWws IEJ1ZmZlciBidWYsIFNuYXBzaG90IHNuYXBzaG90KQogewogCVBhZ2UJCXBhZ2U7CkBAIC0yNDQ4 LDcgKzIyODAsNyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0 aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkcGFnZShzY2FuLCBkaXIsIHN0YXJ0KSkKKwlp ZiAoIV9idF9yZWFkcGFnZShzY2FuLCBkaXIsICZzdGFydCwgdHJ1ZSkpCiAJewogCQkvKgogCQkg KiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhpcyBwYWdlLiAgVHJ5IHRv IGFkdmFuY2UgdG8KQEAgLTI0NzcsNyArMjMwOSw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogX2J0X2luaXRpYWxpemVfbW9yZV9kYXRh KCkgLS0gaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgYXBwcm9wcmlhdGVseQogICogZm9y IHNjYW4gZGlyZWN0aW9uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAoraW5saW5lIHZvaWQKIF9i dF9pbml0aWFsaXplX21vcmVfZGF0YShCVFNjYW5PcGFxdWUgc28sIFNjYW5EaXJlY3Rpb24gZGly KQogewogCS8qIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IGFwcHJvcHJpYXRlbHkgZm9y IHNjYW4gZGlyZWN0aW9uICovCkBAIC0yNDk0LDMgKzIzMjYsMjUgQEAgX2J0X2luaXRpYWxpemVf bW9yZV9kYXRhKEJUU2Nhbk9wYXF1ZSBzbywgU2NhbkRpcmVjdGlvbiBkaXIpCiAJc28tPm51bUtp bGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwogCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7 CQkvKiBkaXR0byAqLwogfQorCisvKiBGb3J3YXJkIHRoZSBjYWxsIHRvIGVpdGhlciBfYnRfY2hl Y2trZXlzLCB3aGljaCBpcyBhIHNpbXBsZQorICogYW5kIGZhc3Rlc3Qgd2F5IG9mIGNoZWNraW5n IGtleXMsIG9yIHRvIF9idF9jaGVja2tleXNfc2tpcCwKKyAqIHdoaWNoIGlzIGEgc2xvd2VyIHdh eSB0byBjaGVjayB0aGUga2V5cywgYnV0IGl0IHdpbGwgcmV0dXJuIGV4dHJhCisgKiBpbmZvcm1h dGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgc3RvcCByZWFkaW5nIHRoZSBjdXJy ZW50IHBhZ2UKKyAqIGFuZCBza2lwLiBUaGUgZXhwZW5zaXZlIGNoZWNraW5nIGlzIG9ubHkgbmVj ZXNzYXJ5IHdoZW4gIWlzUmVndWxhck1vZGUsIGVnLgorICogd2hlbiBwcmVmaXhEaXIhPXBvc3Rm aXhEaXIsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIHNjYW5uaW5nIGZyb20gY3Vyc29ycyBiYWNr d2FyZHMKKyAqLworc3RhdGljIGlubGluZSBib29sCitfYnRfY2hlY2trZXlzX2V4dGVuZGVkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAorCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBpc1JlZ3VsYXJNb2RlLAorCQkJCQkgICBib29sICpj b250aW51ZXNjYW4sIGludCAqcHJlZml4c2tpcGluZGV4KQoreworCWlmIChpc1JlZ3VsYXJNb2Rl KQorCXsKKwkJcmV0dXJuIF9idF9jaGVja2tleXMoc2NhbiwgdHVwbGUsIHR1cG5hdHRzLCBkaXIs IGNvbnRpbnVlc2NhbiwgcHJlZml4c2tpcGluZGV4KTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJu IF9idF9jaGVja2tleXNfc2tpcChzY2FuLCB0dXBsZSwgdHVwbmF0dHMsIGRpciwgY29udGludWVz Y2FuLCBwcmVmaXhza2lwaW5kZXgpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2tpcC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRza2lw LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTJkYmFmMmU2OQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2tpcC5jCkBAIC0w LDAgKzEsMTQ1NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbmJ0c2tpcC5jCisgKgkg IFNlYXJjaCBjb2RlIHJlbGF0ZWQgdG8gc2tpcCBzY2FuIGZvciBwb3N0Z3JlcyBidHJlZXMuCisg KgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNB VElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNraXAuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL25idHJlZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9jYXRhbG9nLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRp bHMvZ3VjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGls cy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworc3RhdGljIGlubGluZSB2 b2lkIF9idF91cGRhdGVfc2NhbmtleV93aXRoX3R1cGxlKEJUU2Nhbkluc2VydCBzY2Fua2V5cywK KwkJCQkJCQkJCQkJUmVsYXRpb24gaW5kZXhSZWwsIEluZGV4VHVwbGUgaXR1cCwgaW50IG51bWF0 dHJzKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBfYnRfc2NhbmtleV93aXRoaW5fcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBidWYpOworc3RhdGljIGlubGlu ZSBpbnQzMiBfYnRfY29tcGFyZV91bnRpbChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXks IEluZGV4VHVwbGUgaXR1cCwgaW50IHByZWZpeCk7CitzdGF0aWMgaW5saW5lIHZvaWQKK19idF9k ZXRlcm1pbmVfbmV4dF9hY3Rpb24oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNraXBDb21wYXJlUmVz dWx0ICpjbXAsIE9mZnNldE51bWJlciBmaXJzdE9mZm51bSwKKwkJCQkJCSAgT2Zmc2V0TnVtYmVy IGxhc3RPZmZudW0sIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpciwgQlRTa2lwU3RhdGUgKm5leHRB Y3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkCitfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uX2Fm dGVyX3NraXAoQlRTY2FuT3BhcXVlIHNvLCBCVFNraXBDb21wYXJlUmVzdWx0ICpjbXAsIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpciwg aW50IHNraXBwZWQsIEJUU2tpcFN0YXRlICpuZXh0QWN0aW9uKTsKK3N0YXRpYyBpbmxpbmUgdm9p ZAorX2J0X2RldGVybWluZV9uZXh0X2FjdGlvbl9hZnRlcl9za2lwX2V4dHJhKEJUU2Nhbk9wYXF1 ZSBzbywgQlRTa2lwQ29tcGFyZVJlc3VsdCAqY21wLCBCVFNraXBTdGF0ZSAqbmV4dEFjdGlvbik7 CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X2NvcHlfc2NhbmtleShCVFNjYW5JbnNlcnQgdG8sIEJU U2Nhbkluc2VydCBmcm9tLCBpbnQgbnVtYXR0cnMpOworc3RhdGljIGlubGluZSBJbmRleFR1cGxl IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXRfd2l0aF9jb3B5KEJUU2Nhbk9wYXF1ZSBzbywgT2Zm c2V0TnVtYmVyIGN1clR1cGxlT2ZmbnVtKTsKKworc3RhdGljIHZvaWQgX2J0X3NraXBfdXBkYXRl X3NjYW5rZXlfYWZ0ZXJfcmVhZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgY3VyVHVw bGUsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9u IHBvc3RmaXhEaXIpOworc3RhdGljIHZvaWQgX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX3By ZWZpeF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJ CQkJaW50IHByZWZpeCwgSW5kZXhUdXBsZSBpdHVwLCBTY2FuRGlyZWN0aW9uIHByZWZpeERpcik7 CitzdGF0aWMgYm9vbCBfYnRfdHJ5X2luX3BhZ2Vfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gcHJlZml4RGlyKTsKK3N0YXRpYyB2b2lkIGRlYnVnX3ByaW50KEluZGV4VHVw bGUgaXR1cCwgQlRTY2FuSW5zZXJ0IHNjYW5LZXksIFJlbGF0aW9uIHJlbCwgY2hhciAqZXh0cmEp OworCisvKiBwcm9iYWJseSB0byBiZSByZW1vdmVkIGJ1dCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBk dXJpbmcgcGF0Y2ggaW1wbGVtZW50YXRpb24gKi8KK3N0YXRpYyB2b2lkIGRlYnVnX3ByaW50KElu ZGV4VHVwbGUgaXR1cCwgQlRTY2FuSW5zZXJ0IHNjYW5LZXksIFJlbGF0aW9uIHJlbCwgY2hhciAq ZXh0cmEpCit7CisJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwlEYXR1bQkJdmFsdWVz W0lOREVYX01BWF9LRVlTXTsKKwljaGFyCSAgICpsa2V5X2Rlc2MgPSBOVUxMOworCisJLyogQXZv aWQgaW5maW5pdGUgcmVjdXJzaW9uIC0tIGRvbid0IGluc3RydW1lbnQgY2F0YWxvZyBpbmRleGVz ICovCisJaWYgKCFJc0NhdGFsb2dSZWxhdGlvbihyZWwpKQorCXsKKwkJVHVwbGVEZXNjCWl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQlpbnQJCQluYXR0czsKKwkJaW50CQkJaW5k bmtleWF0dHMgPSByZWwtPnJkX2luZGV4LT5pbmRua2V5YXR0czsKKworCQlPaWQJCQl0eXBPdXRw dXQ7CisJCWJvb2wJCXZhcmxlbmF0eXBlOworCQljaGFyCSAgICp2YWw7CisJCWludCBpOworCisJ CWNoYXIgYnVmWzgwOTZdID0gezB9OworCQlpbnQgaWR4ID0gMDsKKworCQlpZiAoaXR1cCAhPSBO VUxMKQorCQl7CisJCQluYXR0cyA9IEJUcmVlVHVwbGVHZXROQXR0cyhpdHVwLCByZWwpOworCQkJ aXR1cGRlc2MtPm5hdHRzID0gTWluKGluZG5rZXlhdHRzLCBuYXR0cyk7CisJCQltZW1zZXQoJmlz bnVsbCwgMHhGRiwgc2l6ZW9mKGlzbnVsbCkpOworCQkJaW5kZXhfZGVmb3JtX3R1cGxlKGl0dXAs IGl0dXBkZXNjLCB2YWx1ZXMsIGlzbnVsbCk7CisKKwkJCXJlbC0+cmRfaW5kZXgtPmluZG5rZXlh dHRzID0gbmF0dHM7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBz aG91bGQgcGFzcyB3aGVuIHRoZSBpbnN0cnVtZW50YXRpb24KKwkJCSAqIHBhdGNoIGlzIGFwcGxp ZWQsIGJlIHByZXBhcmVkIGZvciBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbigpIHRvCisJCQkg KiByZXR1cm4gTlVMTCBkdWUgdG8gc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuCisJCQkgKi8KKwkJ CWxrZXlfZGVzYyA9IEJ1aWxkSW5kZXhWYWx1ZURlc2NyaXB0aW9uKHJlbCwgdmFsdWVzLCBpc251 bGwpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHNjYW5LZXktPmtleXN6OyBpKyspCisJCXsK KwkJCVNjYW5LZXkgY3VyID0gJnNjYW5LZXktPnNjYW5rZXlzW2ldOworCisJCQlpZiAoaSAhPSAw KQorCQkJeworCQkJCWJ1ZltpZHhdID0gJywnOworCQkJCWlkeCsrOworCQkJfQorCisJCQlpZiAo IShjdXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKSkKKwkJCXsKKwkJCQlpZiAoY3VyLT5za19zdWJ0 eXBlICE9IEludmFsaWRPaWQpCisJCQkJCWdldFR5cGVPdXRwdXRJbmZvKGN1ci0+c2tfc3VidHlw ZSwKKwkJCQkJCQkJCSAgJnR5cE91dHB1dCwgJnZhcmxlbmF0eXBlKTsKKwkJCQllbHNlCisJCQkJ CWdldFR5cGVPdXRwdXRJbmZvKHJlbC0+cmRfb3BjaW50eXBlW2ldLAorCQkJCQkJCQkJICAmdHlw T3V0cHV0LCAmdmFybGVuYXR5cGUpOworCQkJCXZhbCA9IE9pZE91dHB1dEZ1bmN0aW9uQ2FsbCh0 eXBPdXRwdXQsIGN1ci0+c2tfYXJndW1lbnQpOworCQkJCWlmICh2YWwpCisJCQkJeworCQkJCQl1 bnNpZ25lZCBsb25nIHRvY29weSA9IHN0cm5sZW4odmFsLCAxNSk7CisJCQkJCW1lbWNweShidWYg KyBpZHgsIHZhbCwgdG9jb3B5KTsKKwkJCQkJaWR4ICs9IHRvY29weTsKKwkJCQkJcGZyZWUodmFs KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJbWVtY3B5KGJ1ZiArIGlkeCwgIm4vYSIs IDMpOworCQkJCQlpZHggKz0gMzsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJbWVt Y3B5KGJ1ZiArIGlkeCwgIm51bGwiLCA0KTsKKwkJCQlpZHggKz0gNDsKKwkJCX0KKwkJfQorCQli dWZbaWR4XSA9IDA7CisKKwkJZWxvZyhERUJVRzEsICIlcyA6ICVzIHR1cGxlKCVzKSBzayglcyki LAorCQkJIGV4dHJhLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCBsa2V5X2Rlc2MgPyBs a2V5X2Rlc2MgOiAiTi9BIiwgYnVmKTsKKworCQkvKiBDbGVhbnVwICovCisJCWl0dXBkZXNjLT5u YXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsKTsKKwkJcmVsLT5y ZF9pbmRleC0+aW5kbmtleWF0dHMgPSBpbmRua2V5YXR0czsKKwkJaWYgKGxrZXlfZGVzYykKKwkJ CXBmcmVlKGxrZXlfZGVzYyk7CisJfQorfQorCisvKgorICogcmV0dXJucyB3aGV0aGVyIHdlJ3Jl IGF0IHRoZSBlbmQgb2YgYSBzY2FuLgorICogdGhlIHNjYW4gcG9zaXRpb24gY2FuIGJlIGludmFs aWQgZXZlbiB0aG91Z2ggd2Ugc3RpbGwKKyAqIHNob3VsZCBjb250aW51ZSB0aGUgc2Nhbi4gdGhp cyBoYXBwZW5zIGZvciBleGFtcGxlIHdoZW4KKyAqIHdlJ3JlIHNjYW5uaW5nIHdpdGggcHJlZml4 RGlyIT1wb3N0Zml4RGlyLiB3aGVuIGxvb2tpbmcgYXQgdGhlIGZpcnN0CisgKiBwcmVmaXgsIHdl IHRyYXZlcnNlIHRoZSBpdGVtcyB3aXRoaW4gdGhlIHByZWZpeCBmcm9tIG1heCB0byBtaW4uCisg KiBpZiBub25lIG9mIHRoZW0gbWF0Y2gsIHdlIGFjdHVhbGx5IHJ1biBvZmYgdGhlIHN0YXJ0IG9m IHRoZSBpbmRleCwKKyAqIG1lYW5pbmcgbm9uZSBvZiB0aGUgdHVwbGVzIHdpdGhpbiB0aGlzIHBy ZWZpeCBtYXRjaC4gdGhlIHNjYW4gcG9zIGJlY29tZXMKKyAqIGludmFsaWQsIGhvd2V2ZXIsIHdl IGRvIG5lZWQgdG8gbG9vayBmdXJ0aGVyIHRvIHRoZSBuZXh0IHByZWZpeC4KKyAqIHRoZXJlZm9y ZSwgdGhpcyBmdW5jdGlvbiBzdGlsbCByZXR1cm5zIHRydWUgaW4gdGhpcyBwYXJ0aWN1bGFyIGNh c2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0X3NraXBfaXNfdmFsaWQoQlRTY2FuT3Bh cXVlIHNvLCBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGly KQoreworCXJldHVybiBCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSB8fAorCQkJKCFfYnRf c2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSAmJgorCQkJIHNvLT5z a2lwRGF0YS0+Y3VyUG9zLm5leHRBY3Rpb24gIT0gU2tpcFN0YXRlU3RvcCk7Cit9CisKKy8qIHRy eSBmaW5kaW5nIHRoZSBuZXh0IHR1cGxlIHRvIHNraXAgdG8gd2l0aGluIHRoZSBsb2NhbCB0dXBs ZSBzdG9yYWdlLgorICogbG9jYWwgdHVwbGUgc3RvcmFnZSBpcyBmaWxsZWQgZHVyaW5nIF9idF9y ZWFkcGFnZSB3aXRoIGFsbCBtYXRjaGluZworICogdHVwbGVzIG9uIHRoYXQgcGFnZS4gaWYgd2Ug Y2FuIGZpbmQgdGhlIG5leHQgcHJlZml4IGhlcmUgaXQgc2F2ZXMKKyAqIHVzIGRvaW5nIGEgc2Nh biBmcm9tIHJvb3QuCisgKiBOb3RlIHRoYXQgdGhpcyBvcHRpbWl6YXRpb24gb25seSB3b3JrcyB3 aXRoIF9idF9yZWd1bGFyX21vZGUgPT0gdHJ1ZQorICogSWYgdGhpcyBpcyBub3QgdGhlIGNhc2Us IHRoZSBsb2NhbCB0dXBsZSB3b3Jrc3BhY2Ugd2lsbCBhbHdheXMgb25seQorICogY29udGFpbiB0 dXBsZXMgb2Ygb25lIHNwZWNpZmljIHByZWZpeCAoX2J0X3JlYWRwYWdlIHdpbGwgc3RvcCBhdAor ICogdGhlIGVuZCBvZiBhIHByZWZ4KQorICovCitzdGF0aWMgYm9vbAorX2J0X3RyeV9pbl9wYWdl X3NraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIHByZWZpeERpcikKK3sKKwlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW07CisJQlRTa2lwIHNraXAgPSBzby0+c2tpcERhdGE7CisJSW5kZXhUdXBs ZSBpdHVwID0gTlVMTDsKKwlib29sIGdvYmFjazsKKwlpbnQgbG93LCBoaWdoLCBzdGFydGhpZ2gs IHN0YXJ0bG93OworCWludDMyCQlyZXN1bHQsCisJCQkJY21wdmFsOworCUJUU2Nhbkluc2VydCBr ZXkgPSAmc28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFNjYW5LZXk7CisKKwljdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOworCWl0dXAgPSAoSW5kZXhU dXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKKworCV9idF9z a2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9wcmVmaXhfc2tpcChzY2FuLCBzY2FuLT5pbmRleFJlbGF0 aW9uLCBza2lwLT5wcmVmaXgsIGl0dXAsIHByZWZpeERpcik7CisKKwlfYnRfc2V0X2JzZWFyY2hf ZmxhZ3Moa2V5LT5zY2Fua2V5c1trZXktPmtleXN6IC0gMV0uc2tfc3RyYXRlZ3ksIHByZWZpeERp ciwgJmtleS0+bmV4dGtleSwgJmdvYmFjayk7CisKKwkvKiBSZXF1ZXN0aW5nIG5leHRrZXkgc2Vt YW50aWNzIHdoaWxlIHVzaW5nIHNjYW50aWQgc2VlbXMgbm9uc2Vuc2ljYWwgKi8KKwlBc3NlcnQo IWtleS0+bmV4dGtleSB8fCBrZXktPnNjYW50aWQgPT0gTlVMTCk7CisJLyogc2NhbnRpZC1zZXQg Y2FsbGVycyBtdXN0IHVzZSBfYnRfYmluc3JjaF9pbnNlcnQoKSBvbiBsZWFmIHBhZ2VzICovCisK KwlzdGFydGxvdyA9IGxvdyA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocHJlZml4RGlyKSA/IHNv LT5jdXJyUG9zLml0ZW1JbmRleCArIDEgOiBzby0+Y3VyclBvcy5maXJzdEl0ZW07CisJc3RhcnRo aWdoID0gaGlnaCA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocHJlZml4RGlyKSA/IHNvLT5jdXJy UG9zLmxhc3RJdGVtIDogc28tPmN1cnJQb3MuaXRlbUluZGV4IC0gMTsKKworCS8qCisJICogSWYg dGhlcmUgYXJlIG5vIGtleXMgb24gdGhlIHBhZ2UsIHJldHVybiB0aGUgZmlyc3QgYXZhaWxhYmxl IHNsb3QuIE5vdGUKKwkgKiB0aGlzIGNvdmVycyB0d28gY2FzZXM6IHRoZSBwYWdlIGlzIHJlYWxs eSBlbXB0eSAobm8ga2V5cyksIG9yIGl0CisJICogY29udGFpbnMgb25seSBhIGhpZ2gga2V5LiAg VGhlIGxhdHRlciBjYXNlIGlzIHBvc3NpYmxlIGFmdGVyIHZhY3V1bWluZy4KKwkgKiBUaGlzIGNh biBuZXZlciBoYXBwZW4gb24gYW4gaW50ZXJuYWwgcGFnZSwgaG93ZXZlciwgc2luY2UgdGhleSBh cmUKKwkgKiBuZXZlciBlbXB0eSAoYW4gaW50ZXJuYWwgcGFnZSBtdXN0IGhhdmUgY2hpbGRyZW4p LgorCSAqLworCWlmICh1bmxpa2VseShoaWdoIDwgbG93KSkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBCaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGZpcnN0IGtleSBvbiB0aGUgcGFnZSA+ PSBzY2FuIGtleSwgb3IgZmlyc3QKKwkgKiBrZXkgPiBzY2Fua2V5IHdoZW4gbmV4dGtleSBpcyB0 cnVlLgorCSAqCisJICogRm9yIG5leHRrZXk9ZmFsc2UgKGNtcHZhbD0xKSwgdGhlIGxvb3AgaW52 YXJpYW50IGlzOiBhbGwgc2xvdHMgYmVmb3JlCisJICogJ2xvdycgYXJlIDwgc2NhbiBrZXksIGFs bCBzbG90cyBhdCBvciBhZnRlciAnaGlnaCcgYXJlID49IHNjYW4ga2V5LgorCSAqCisJICogRm9y IG5leHRrZXk9dHJ1ZSAoY21wdmFsPTApLCB0aGUgbG9vcCBpbnZhcmlhbnQgaXM6IGFsbCBzbG90 cyBiZWZvcmUKKwkgKiAnbG93JyBhcmUgPD0gc2NhbiBrZXksIGFsbCBzbG90cyBhdCBvciBhZnRl ciAnaGlnaCcgYXJlID4gc2NhbiBrZXkuCisJICoKKwkgKiBXZSBjYW4gZmFsbCBvdXQgd2hlbiBo aWdoID09IGxvdy4KKwkgKi8KKwloaWdoKys7CQkJCQkJLyogZXN0YWJsaXNoIHRoZSBsb29wIGlu dmFyaWFudCBmb3IgaGlnaCAqLworCisJY21wdmFsID0ga2V5LT5uZXh0a2V5ID8gMCA6IDE7CS8q IHNlbGVjdCBjb21wYXJpc29uIHZhbHVlICovCisKKwl3aGlsZSAoaGlnaCA+IGxvdykKKwl7CisJ CWludCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpIC8gMik7CisKKwkJLyogV2UgaGF2ZSBsb3cg PD0gbWlkIDwgaGlnaCwgc28gbWlkIHBvaW50cyBhdCBhIHJlYWwgc2xvdCAqLworCisJCWN1cnJJ dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW21pZF07CisJCWl0dXAgPSAoSW5kZXhUdXBsZSkgKHNv LT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKKwkJcmVzdWx0ID0gX2J0X2Nv bXBhcmVfdW50aWwoc2Nhbi0+aW5kZXhSZWxhdGlvbiwga2V5LCBpdHVwLCBza2lwLT5wcmVmaXgp OworCisJCWlmIChyZXN1bHQgPj0gY21wdmFsKQorCQkJbG93ID0gbWlkICsgMTsKKwkJZWxzZQor CQkJaGlnaCA9IG1pZDsKKwl9CisKKwlpZiAoaGlnaCA+IHN0YXJ0aGlnaCkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKGdvYmFjaykKKwl7CisJCWxvdy0tOworCQlpZiAobG93IDwgc3RhcnRsb3cp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gbG93Owor CisJaWYgKERFQlVHMSA+PSBsb2dfbWluX21lc3NhZ2VzIHx8IERFQlVHMSA+PSBjbGllbnRfbWlu X21lc3NhZ2VzKQorCXsKKwkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbbG93XTsKKwkJ aXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZz ZXQpOworCQlkZWJ1Z19wcmludChpdHVwLCAmc28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFNjYW5L ZXksIHNjYW4tPmluZGV4UmVsYXRpb24sICJza2lwLWluLXBhZ2UiKTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyoKKyAqICBfYnRfc2tpcCgpIC0tIFNraXAgaXRlbXMgdGhhdCBoYXZlIHRo ZSBzYW1lIHByZWZpeCBhcyB0aGUgbW9zdCByZWNlbnRseQorICogCQkJCSAgZmV0Y2hlZCBpbmRl eCB0dXBsZS4KKyAqCisgKiBpbjogcGlubmVkLCBub3QgbG9ja2VkCisgKiBvdXQ6IHBpbm5lZCwg bm90IGxvY2tlZCAodW5sZXNzIGVuZCBvZiBzY2FuLCB0aGVuIHVucGlubmVkKQorICovCitib29s CitfYnRfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBT Y2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUluZGV4VHVw bGUgaXR1cCA9IE5VTEw7CisJT2Zmc2V0TnVtYmVyIGN1clR1cGxlT2ZmbnVtID0gSW52YWxpZE9m ZnNldE51bWJlcjsKKwlCVFNraXBDb21wYXJlUmVzdWx0IGNtcDsKKwlCVFNraXAgc2tpcCA9IHNv LT5za2lwRGF0YTsKKwlPZmZzZXROdW1iZXIgZmlyc3Q7CisKKwkvKiBpbiBwYWdlIHNraXAgb25s eSB3b3JrcyB3aGVuIHByZWZpeERpciA9PSBwb3N0Zml4RGlyICovCisJaWYgKCFfYnRfc2tpcF9p c19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSB8fCAhX2J0X3RyeV9pbl9wYWdl X3NraXAoc2NhbiwgcHJlZml4RGlyKSkKKwl7CisJCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0 ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWl0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5j dXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKKworCQlzby0+c2tpcERhdGEtPmN1 clBvcy5uZXh0U2tpcEluZGV4ID0gc28tPnNraXBEYXRhLT5wcmVmaXg7CisJCV9idF9za2lwX29u Y2Uoc2NhbiwgJml0dXAsICZjdXJUdXBsZU9mZm51bSwgdHJ1ZSwgcHJlZml4RGlyLCBwb3N0Zml4 RGlyKTsKKwkJX2J0X3NraXBfdW50aWxfbWF0Y2goc2NhbiwgJml0dXAsICZjdXJUdXBsZU9mZm51 bSwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKwkJaWYgKCFfYnRfc2tpcF9pc19hbHdheXNfdmFs aWQoc28pKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWZpcnN0ID0gY3VyVHVwbGVPZmZudW07CisJ CV9idF9yZWFkcGFnZShzY2FuLCBwb3N0Zml4RGlyLCAmY3VyVHVwbGVPZmZudW0sIF9idF9za2lw X2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIsIHBvc3RmaXhEaXIpKTsKKwkJaWYgKERFQlVHMiA+ PSBsb2dfbWluX21lc3NhZ2VzIHx8IERFQlVHMiA+PSBjbGllbnRfbWluX21lc3NhZ2VzKQorCQl7 CisJCQlwcmludF9pdHVwKEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksIF9i dF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGZpcnN0KSwgTlVMTCwgc2Nhbi0+aW5kZXhSZWxh dGlvbiwKKwkJCQkJCSJmaXJzdCBpdGVtIG9uIHBhZ2UgY29tcGFyZWQgYWZ0ZXIgc2tpcCIpOwor CQkJcHJpbnRfaXR1cChCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpLCBfYnRf Z2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCBjdXJUdXBsZU9mZm51bSksIE5VTEwsIHNjYW4tPmlu ZGV4UmVsYXRpb24sCisJCQkJCQkibGFzdCBpdGVtIG9uIHBhZ2UgY29tcGFyZWQgYWZ0ZXIgc2tp cCIpOworCQl9CisJCV9idF9jb21wYXJlX2N1cnJlbnRfaXRlbShzY2FuLCBfYnRfZ2V0X3R1cGxl X2Zyb21fb2Zmc2V0KHNvLCBjdXJUdXBsZU9mZm51bSksCisJCQkJCQkJCSBJbmRleFJlbGF0aW9u R2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24pLAorCQkJCQkJCQkgcG9z dGZpeERpciwgX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpciks ICZjbXApOworCQlfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uKHNjYW4sICZjbXAsIGZpcnN0LCBj dXJUdXBsZU9mZm51bSwgcG9zdGZpeERpciwgJnNraXAtPmN1clBvcy5uZXh0QWN0aW9uKTsKKwkJ c2tpcC0+Y3VyUG9zLm5leHREaXJlY3Rpb24gPSBwcmVmaXhEaXI7CisJCXNraXAtPmN1clBvcy5u ZXh0U2tpcEluZGV4ID0gY21wLnByZWZpeFNraXBJbmRleDsKKwkJX2J0X3NraXBfdXBkYXRlX3Nj YW5rZXlfYWZ0ZXJfcmVhZChzY2FuLCBfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCBjdXJU dXBsZU9mZm51bSksIHByZWZpeERpciwgcG9zdGZpeERpcik7CisKKwkJX2J0X2Ryb3BfbG9ja19h bmRfbWF5YmVfcGluKHNjYW4sICZzby0+Y3VyclBvcyk7CisJfQorCisJLyogcHJlcGFyZSBmb3Ig dGhlIGNhbGwgdG8gX2J0X25leHQsIGJlY2F1c2UgX2J0X25leHQgaW5jcmVtZW50cyB0aGlzIHRv IGdldCB0byB0aGUgdHVwbGUgd2Ugd2FudCB0byBiZSBhdCAqLworCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKHBvc3RmaXhEaXIpKQorCQlzby0+Y3VyclBvcy5pdGVtSW5kZXgtLTsKKwllbHNl CisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCsrOworCisJcmV0dXJuIHRydWU7Cit9CisKK0luZGV4 VHVwbGUKK19idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQoQlRTY2FuT3BhcXVlIHNvLCBPZmZzZXRO dW1iZXIgY3VyVHVwbGVPZmZudW0pCit7CisJUGFnZSBwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+ Y3VyclBvcy5idWYpOworCXJldHVybiAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFn ZUdldEl0ZW1JZChwYWdlLCBjdXJUdXBsZU9mZm51bSkpOworfQorCitzdGF0aWMgSW5kZXhUdXBs ZQorX2J0X2dldF90dXBsZV9mcm9tX29mZnNldF93aXRoX2NvcHkoQlRTY2FuT3BhcXVlIHNvLCBP ZmZzZXROdW1iZXIgY3VyVHVwbGVPZmZudW0pCit7CisJUGFnZSBwYWdlID0gQnVmZmVyR2V0UGFn ZShzby0+Y3VyclBvcy5idWYpOworCUluZGV4VHVwbGUgaXR1cCA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBQYWdlR2V0SXRlbUlkKHBhZ2UsIGN1clR1cGxlT2ZmbnVtKSk7CisJU2l6 ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CisJbWVtY3B5KHNvLT5za2lwRGF0YS0+ Y3VyUG9zLnNraXBUdXBsZSwgaXR1cCwgaXR1cHN6KTsKKworCXJldHVybiAoSW5kZXhUdXBsZSkg c28tPnNraXBEYXRhLT5jdXJQb3Muc2tpcFR1cGxlOworfQorCitzdGF0aWMgdm9pZAorX2J0X2Rl dGVybWluZV9uZXh0X2FjdGlvbihJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2tpcENvbXBhcmVSZXN1 bHQgKmNtcCwgT2Zmc2V0TnVtYmVyIGZpcnN0T2ZmbnVtLCBPZmZzZXROdW1iZXIgbGFzdE9mZm51 bSwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyLCBCVFNraXBTdGF0ZSAqbmV4dEFjdGlvbikKK3sK KwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlpZiAo Y21wLT5mdWxsS2V5U2tpcCkKKwkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTdG9wOworCWVsc2Ug aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocG9zdGZpeERpcikpCisJeworCQlPZmZzZXROdW1i ZXIgZmlyc3RJdGVtID0gZmlyc3RPZmZudW0sIGxhc3RJdGVtID0gbGFzdE9mZm51bTsKKwkJaWYg KGNtcC0+cHJlZml4U2tpcCkKKwkJeworCQkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTa2lwOwor CQl9CisJCWVsc2UKKwkJeworCQkJSW5kZXhUdXBsZSB0b0NtcDsKKwkJCWlmIChzby0+Y3VyclBv cy5sYXN0SXRlbSA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCisJCQkJdG9DbXAgPSBfYnRfZ2V0 X3R1cGxlX2Zyb21fb2Zmc2V0X3dpdGhfY29weShzbywgc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MubGFzdEl0ZW1dLmluZGV4T2Zmc2V0KTsKKwkJCWVsc2UKKwkJCQl0b0NtcCA9IF9idF9n ZXRfdHVwbGVfZnJvbV9vZmZzZXRfd2l0aF9jb3B5KHNvLCBmaXJzdEl0ZW0pOworCQkJX2J0X3Vw ZGF0ZV9zY2Fua2V5X3dpdGhfdHVwbGUoJnNvLT5za2lwRGF0YS0+Y3VycmVudFR1cGxlS2V5LAor CQkJCQkJCQkJCSAgc2Nhbi0+aW5kZXhSZWxhdGlvbiwgdG9DbXAsIFJlbGF0aW9uR2V0TnVtYmVy T2ZBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24pKTsKKwkJCWlmIChfYnRfaGFzX2V4dHJh X3F1YWxzX2FmdGVyX3NraXAoc28tPnNraXBEYXRhLCBwb3N0Zml4RGlyLCBzby0+c2tpcERhdGEt PnByZWZpeCkgJiYgIWNtcC0+ZXF1YWwgJiYKKwkJCQkJKGNtcC0+cHJlZml4Q21wUmVzdWx0ICE9 IDAgfHwKKwkJCQkJIF9idF9jb21wYXJlX3VudGlsKHNjYW4tPmluZGV4UmVsYXRpb24sICZzby0+ c2tpcERhdGEtPmN1cnJlbnRUdXBsZUtleSwKKwkJCQkJCQkJCSAgIF9idF9nZXRfdHVwbGVfZnJv bV9vZmZzZXQoc28sIGxhc3RJdGVtKSwgc28tPnNraXBEYXRhLT5wcmVmaXgpICE9IDApKQorCQkJ CSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlU2tpcEV4dHJhOworCQkJZWxzZQorCQkJCSpuZXh0QWN0 aW9uID0gU2tpcFN0YXRlTmV4dDsKKwkJfQorCX0KKwllbHNlCisJeworCQlPZmZzZXROdW1iZXIg Zmlyc3RJdGVtID0gbGFzdE9mZm51bSwgbGFzdEl0ZW0gPSBmaXJzdE9mZm51bTsKKwkJaWYgKGNt cC0+cHJlZml4U2tpcCkKKwkJeworCQkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVTa2lwOworCQl9 CisJCWVsc2UKKwkJeworCQkJSW5kZXhUdXBsZSB0b0NtcDsKKwkJCWlmIChzby0+Y3VyclBvcy5s YXN0SXRlbSA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCisJCQkJdG9DbXAgPSBfYnRfZ2V0X3R1 cGxlX2Zyb21fb2Zmc2V0X3dpdGhfY29weShzbywgc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQ b3MuZmlyc3RJdGVtXS5pbmRleE9mZnNldCk7CisJCQllbHNlCisJCQkJdG9DbXAgPSBfYnRfZ2V0 X3R1cGxlX2Zyb21fb2Zmc2V0X3dpdGhfY29weShzbywgbGFzdEl0ZW0pOworCQkJX2J0X3VwZGF0 ZV9zY2Fua2V5X3dpdGhfdHVwbGUoJnNvLT5za2lwRGF0YS0+Y3VycmVudFR1cGxlS2V5LAorCQkJ CQkJCQkJCSAgc2Nhbi0+aW5kZXhSZWxhdGlvbiwgdG9DbXAsIFJlbGF0aW9uR2V0TnVtYmVyT2ZB dHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24pKTsKKwkJCWlmIChfYnRfaGFzX2V4dHJhX3F1 YWxzX2FmdGVyX3NraXAoc28tPnNraXBEYXRhLCBwb3N0Zml4RGlyLCBzby0+c2tpcERhdGEtPnBy ZWZpeCkgJiYgIWNtcC0+ZXF1YWwgJiYKKwkJCQkJKGNtcC0+cHJlZml4Q21wUmVzdWx0ICE9IDAg fHwKKwkJCQkJIF9idF9jb21wYXJlX3VudGlsKHNjYW4tPmluZGV4UmVsYXRpb24sICZzby0+c2tp cERhdGEtPmN1cnJlbnRUdXBsZUtleSwKKwkJCQkJCQkJCSAgIF9idF9nZXRfdHVwbGVfZnJvbV9v ZmZzZXQoc28sIGZpcnN0SXRlbSksIHNvLT5za2lwRGF0YS0+cHJlZml4KSAhPSAwKSkKKwkJCQkq bmV4dEFjdGlvbiA9IFNraXBTdGF0ZVNraXBFeHRyYTsKKwkJCWVsc2UKKwkJCQkqbmV4dEFjdGlv biA9IFNraXBTdGF0ZU5leHQ7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0 X3Nob3VsZF9wcmVmaXhfc2tpcChCVFNraXBDb21wYXJlUmVzdWx0ICpjbXApCit7CisJcmV0dXJu IGNtcC0+cHJlZml4U2tpcCB8fCBjbXAtPnByZWZpeENtcFJlc3VsdCAhPSAwOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK19idF9kZXRlcm1pbmVfbmV4dF9hY3Rpb25fYWZ0ZXJfc2tpcChCVFNj YW5PcGFxdWUgc28sIEJUU2tpcENvbXBhcmVSZXN1bHQgKmNtcCwgU2NhbkRpcmVjdGlvbiBwcmVm aXhEaXIsCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyLCBpbnQgc2tpcHBlZCwg QlRTa2lwU3RhdGUgKm5leHRBY3Rpb24pCit7CisJaWYgKCFfYnRfc2tpcF9pc19hbHdheXNfdmFs aWQoc28pIHx8IGNtcC0+ZnVsbEtleVNraXApCisJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlU3Rv cDsKKwllbHNlIGlmIChjbXAtPmVxdWFsICYmIF9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVm aXhEaXIsIHBvc3RmaXhEaXIpKQorCQkqbmV4dEFjdGlvbiA9IFNraXBTdGF0ZU5leHQ7CisJZWxz ZSBpZiAoX2J0X3Nob3VsZF9wcmVmaXhfc2tpcChjbXApICYmIF9idF9za2lwX2lzX3JlZ3VsYXJf bW9kZShwcmVmaXhEaXIsIHBvc3RmaXhEaXIpICYmCisJCQkgKChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKHByZWZpeERpcikgJiYgY21wLT5za0NtcFJlc3VsdCA9PSAtMSkgfHwKKwkJCSAgKFNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkKHByZWZpeERpcikgJiYgY21wLT5za0NtcFJlc3VsdCA9PSAxKSkp CisJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlU2tpcDsKKwllbHNlIGlmICghX2J0X3NraXBfaXNf cmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikgfHwKKwkJCSBfYnRfaGFzX2V4dHJh X3F1YWxzX2FmdGVyX3NraXAoc28tPnNraXBEYXRhLCBwb3N0Zml4RGlyLCBza2lwcGVkKSB8fAor CQkJIGNtcC0+cHJlZml4Q21wUmVzdWx0ICE9IDApCisJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRl U2tpcEV4dHJhOworCWVsc2UKKwkJKm5leHRBY3Rpb24gPSBTa2lwU3RhdGVOZXh0OworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK19idF9kZXRlcm1pbmVfbmV4dF9hY3Rpb25fYWZ0ZXJfc2tpcF9l eHRyYShCVFNjYW5PcGFxdWUgc28sIEJUU2tpcENvbXBhcmVSZXN1bHQgKmNtcCwgQlRTa2lwU3Rh dGUgKm5leHRBY3Rpb24pCit7CisJaWYgKCFfYnRfc2tpcF9pc19hbHdheXNfdmFsaWQoc28pIHx8 IGNtcC0+ZnVsbEtleVNraXApCisJCSpuZXh0QWN0aW9uID0gU2tpcFN0YXRlU3RvcDsKKwllbHNl IGlmIChjbXAtPmVxdWFsKQorCQkqbmV4dEFjdGlvbiA9IFNraXBTdGF0ZU5leHQ7CisJZWxzZSBp ZiAoX2J0X3Nob3VsZF9wcmVmaXhfc2tpcChjbXApKQorCQkqbmV4dEFjdGlvbiA9IFNraXBTdGF0 ZVNraXA7CisJZWxzZQorCQkqbmV4dEFjdGlvbiA9IFNraXBTdGF0ZU5leHQ7Cit9CisKKy8qIGp1 c3QgYSBkZWJ1ZyBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHNjYW5rZXkuIHdpbGwgYmUgcmVtb3Zl ZCBmb3IgZmluYWwgcGF0Y2ggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX3ByaW50X3NrZXkoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5JbnNlcnQgc2NhbktleSkKK3sKKwlPaWQJCQl0eXBPdXRw dXQ7CisJYm9vbAkJdmFybGVuYXR5cGU7CisJY2hhcgkgICAqdmFsOworCWludCBpOworCVJlbGF0 aW9uIHJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisKKwlmb3IgKGkgPSAwOyBpIDwgc2Nhbktl eS0+a2V5c3o7IGkrKykKKwl7CisJCVNjYW5LZXkgY3VyID0gJnNjYW5LZXktPnNjYW5rZXlzW2ld OworCQlpZiAoIUlzQ2F0YWxvZ1JlbGF0aW9uKHJlbCkpCisJCXsKKwkJCWlmICghKGN1ci0+c2tf ZmxhZ3MgJiBTS19JU05VTEwpKQorCQkJeworCQkJCWlmIChjdXItPnNrX3N1YnR5cGUgIT0gSW52 YWxpZE9pZCkKKwkJCQkJZ2V0VHlwZU91dHB1dEluZm8oY3VyLT5za19zdWJ0eXBlLAorCQkJCQkJ CQkJICAmdHlwT3V0cHV0LCAmdmFybGVuYXR5cGUpOworCQkJCWVsc2UKKwkJCQkJZ2V0VHlwZU91 dHB1dEluZm8ocmVsLT5yZF9vcGNpbnR5cGVbaV0sCisJCQkJCQkJCQkgICZ0eXBPdXRwdXQsICZ2 YXJsZW5hdHlwZSk7CisJCQkJdmFsID0gT2lkT3V0cHV0RnVuY3Rpb25DYWxsKHR5cE91dHB1dCwg Y3VyLT5za19hcmd1bWVudCk7CisJCQkJaWYgKHZhbCkKKwkJCQl7CisJCQkJCWVsb2coREVCVUcx LCAiJXMgc2sgYXR0ciAlZCB2YWw6ICVzICglcywgJXMpIiwKKwkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpLCBpLCB2YWwsCisJCQkJCQkgKGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9O VUxMU19GSVJTVCkgIT0gMCA/ICJOVUxMUyBGSVJTVCIgOiAiTlVMTFMgTEFTVCIsCisJCQkJCQkg KGN1ci0+c2tfZmxhZ3MgJiBTS19CVF9ERVNDKSAhPSAwID8gIkRFU0MiIDogIkFTQyIpOworCQkJ CQlwZnJlZSh2YWwpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQllbG9nKERFQlVH MSwgIiVzIHNrIGF0dHIgJWQgdmFsOiBOVUxMICglcywgJXMpIiwKKwkJCQkJIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCksIGksCisJCQkJCSAoY3VyLT5za19mbGFncyAmIFNLX0JUX05VTExT X0ZJUlNUKSAhPSAwID8gIk5VTExTIEZJUlNUIiA6ICJOVUxMUyBMQVNUIiwKKwkJCQkJIChjdXIt PnNrX2ZsYWdzICYgU0tfQlRfREVTQykgIT0gMCA/ICJERVNDIiA6ICJBU0MiKTsKKwkJCX0KKwkJ fQorCX0KK30KKworYm9vbAorX2J0X2NoZWNra2V5c19za2lwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly LCBib29sICpjb250aW51ZXNjYW4sIGludCAqcHJlZml4c2tpcGluZGV4KQoreworCUJUU2Nhbk9w YXF1ZSAJc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTa2lwIHNraXAgPSBz by0+c2tpcERhdGE7CisKKwlib29sIG1hdGNoID0gX2J0X2NoZWNra2V5cyhzY2FuLCB0dXBsZSwg dHVwbmF0dHMsIGRpciwgY29udGludWVzY2FuLCBwcmVmaXhza2lwaW5kZXgpOworCWludCBwcmVm aXhDbXBSZXN1bHQgPSBfYnRfY29tcGFyZV91bnRpbChzY2FuLT5pbmRleFJlbGF0aW9uLCAmc2tp cC0+Y3VyUG9zLnNraXBTY2FuS2V5LCB0dXBsZSwgc2tpcC0+cHJlZml4KTsKKwlpZiAoKnByZWZp eHNraXBpbmRleCA9PSAtMSAmJiBwcmVmaXhDbXBSZXN1bHQgIT0gMCkKKwl7CisJCSpwcmVmaXhz a2lwaW5kZXggPSBza2lwLT5wcmVmaXg7CisJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsK KwkJYm9vbCBuZXdjb250OworCQlfYnRfY2hlY2trZXlzX3RocmVld2F5KHNjYW4sIHR1cGxlLCB0 dXBuYXR0cywgZGlyLCAmbmV3Y29udCwgcHJlZml4c2tpcGluZGV4KTsKKwkJaWYgKCpwcmVmaXhz a2lwaW5kZXggPT0gLTEgJiYgcHJlZml4Q21wUmVzdWx0ICE9IDApCisJCXsKKwkJCSpwcmVmaXhz a2lwaW5kZXggPSBza2lwLT5wcmVmaXg7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJcmV0 dXJuIG1hdGNoOworfQorCisvKgorICogQ29tcGFyZSBhIHNjYW5rZXkgd2l0aCBhIGdpdmVuIHR1 cGxlIGJ1dCBvbmx5IHRoZSBmaXJzdCBwcmVmaXggY29sdW1ucworICogVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIDAgaWYgdGhlIGZpcnN0ICdwcmVmaXgnIGNvbHVtbnMgYXJlIGVxdWFsCisgKiAtMSBp ZiBrZXkgPCBpdHVwIGZvciB0aGUgZmlyc3QgcHJlZml4IGNvbHVtbnMKKyAqIDEgaWYga2V5ID4g aXR1cCBmb3IgdGhlIGZpcnN0IHByZWZpeCBjb2x1bW5zCisgKi8KK2ludDMyCitfYnRfY29tcGFy ZV91bnRpbChSZWxhdGlvbiByZWwsCisJCQlCVFNjYW5JbnNlcnQga2V5LAorCQkJSW5kZXhUdXBs ZSBpdHVwLAorCQkJaW50IHByZWZpeCkKK3sKKwlUdXBsZURlc2MJaXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CisJU2NhbktleQkJc2NhbmtleTsKKwlpbnQJCQluY21wa2V5OworCisJ QXNzZXJ0KGtleS0+a2V5c3ogPD0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRl cyhyZWwpKTsKKworCW5jbXBrZXkgPSBNaW4ocHJlZml4LCBrZXktPmtleXN6KTsKKwlzY2Fua2V5 ID0ga2V5LT5zY2Fua2V5czsKKwlmb3IgKGludCBpID0gMTsgaSA8PSBuY21wa2V5OyBpKyspCisJ eworCQlEYXR1bQkJZGF0dW07CisJCWJvb2wJCWlzTnVsbDsKKwkJaW50MzIJCXJlc3VsdDsKKwor CQlkYXR1bSA9IGluZGV4X2dldGF0dHIoaXR1cCwgc2NhbmtleS0+c2tfYXR0bm8sIGl0dXBkZXNj LCAmaXNOdWxsKTsKKworCQkvKiBzZWUgY29tbWVudHMgYWJvdXQgTlVMTHMgaGFuZGxpbmcgaW4g YnRidWlsZCAqLworCQlpZiAoc2NhbmtleS0+c2tfZmxhZ3MgJiBTS19JU05VTEwpCS8qIGtleSBp cyBOVUxMICovCisJCXsKKwkJCWlmIChpc051bGwpCisJCQkJcmVzdWx0ID0gMDsJCS8qIE5VTEwg Ij0iIE5VTEwgKi8KKwkJCWVsc2UgaWYgKHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNf RklSU1QpCisJCQkJcmVzdWx0ID0gLTE7CS8qIE5VTEwgIjwiIE5PVF9OVUxMICovCisJCQllbHNl CisJCQkJcmVzdWx0ID0gMTsJCS8qIE5VTEwgIj4iIE5PVF9OVUxMICovCisJCX0KKwkJZWxzZSBp ZiAoaXNOdWxsKQkJLyoga2V5IGlzIE5PVF9OVUxMIGFuZCBpdGVtIGlzIE5VTEwgKi8KKwkJewor CQkJaWYgKHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNfRklSU1QpCisJCQkJcmVzdWx0 ID0gMTsJCS8qIE5PVF9OVUxMICI+IiBOVUxMICovCisJCQllbHNlCisJCQkJcmVzdWx0ID0gLTE7 CS8qIE5PVF9OVUxMICI8IiBOVUxMICovCisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICog VGhlIHNrX2Z1bmMgbmVlZHMgdG8gYmUgcGFzc2VkIHRoZSBpbmRleCB2YWx1ZSBhcyBsZWZ0IGFy ZyBhbmQKKwkJCSAqIHRoZSBza19hcmd1bWVudCBhcyByaWdodCBhcmcgKHRoZXkgbWlnaHQgYmUg b2YgZGlmZmVyZW50CisJCQkgKiB0eXBlcykuICBTaW5jZSBpdCBpcyBjb252ZW5pZW50IGZvciBj YWxsZXJzIHRvIHRoaW5rIG9mCisJCQkgKiBfYnRfY29tcGFyZSBhcyBjb21wYXJpbmcgdGhlIHNj YW5rZXkgdG8gdGhlIGluZGV4IGl0ZW0sIHdlIGhhdmUKKwkJCSAqIHRvIGZsaXAgdGhlIHNpZ24g b2YgdGhlIGNvbXBhcmlzb24gcmVzdWx0LiAgKFVubGVzcyBpdCdzIGEgREVTQworCQkJICogY29s dW1uLCBpbiB3aGljaCBjYXNlIHdlICpkb24ndCogZmxpcCB0aGUgc2lnbi4pCisJCQkgKi8KKwkJ CXJlc3VsdCA9IERhdHVtR2V0SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwoJnNjYW5rZXktPnNrX2Z1 bmMsCisJCQkJCQkJCQkJCQkJIHNjYW5rZXktPnNrX2NvbGxhdGlvbiwKKwkJCQkJCQkJCQkJCQkg ZGF0dW0sCisJCQkJCQkJCQkJCQkJIHNjYW5rZXktPnNrX2FyZ3VtZW50KSk7CisKKwkJCWlmICgh KHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfQlRfREVTQykpCisJCQkJSU5WRVJUX0NPTVBBUkVfUkVT VUxUKHJlc3VsdCk7CisJCX0KKworCQkvKiBpZiB0aGUga2V5cyBhcmUgdW5lcXVhbCwgcmV0dXJu IHRoZSBkaWZmZXJlbmNlICovCisJCWlmIChyZXN1bHQgIT0gMCkKKwkJCXJldHVybiByZXN1bHQ7 CisKKwkJc2NhbmtleSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKgorICogQ3JlYXRlIGlu aXRpYWwgc2NhbmtleXMgZm9yIHNraXBwaW5nIGFuZCBzdG9yZXMgdGhlbSBpbiB0aGUgc2tpcERh dGEKKyAqIHN0cnVjdHVyZQorICovCit2b2lkCitfYnRfc2tpcF9jcmVhdGVfc2NhbmtleXMoUmVs YXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCit7CisJaW50IGtleXNDb3VudDsKKwlCVFNraXAg c2tpcCA9IHNvLT5za2lwRGF0YTsKKwlTdHJhdGVneU51bWJlciBzdHJhdFRvdGFsOworCVNjYW5L ZXkJCWtleVBvaW50ZXJzW0lOREVYX01BWF9LRVlTXTsKKwlib29sIGdvYmFjazsKKwkvKiB3ZSBu ZWVkIHRvIGNyZWF0ZSBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkIGtleXMgYmVjYXVzZSB0aGUg c2NhbiBkaXJlY3Rpb24KKwkgKiBtYXkgY2hhbmdlIGF0IGFueSBtb21lbnQgaW4gc2NhbnMgd2l0 aCBhIGN1cnNvci4KKwkgKiB3ZSBjb3VsZCB0ZWNobmljYWxseSBkZWxheSBjcmVhdGlvbiBvZiB0 aGUgc2Vjb25kIHVudGlsIGZpcnN0IHVzZSBhcyBhbiBvcHRpbWl6YXRpb24KKwkgKiBidXQgdGhh dCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgorCSAqLworCWtleXNDb3VudCA9IF9idF9jaG9vc2Vf c2Nhbl9rZXlzKHNvLT5rZXlEYXRhLCBzby0+bnVtYmVyT2ZLZXlzLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwKKwkJCQkJCQkJCSBrZXlQb2ludGVycywgc2tpcC0+ZndkTm90TnVsbEtleXMsICZzdHJh dFRvdGFsLCBza2lwLT5wcmVmaXgpOworCV9idF9jcmVhdGVfaW5zZXJ0aW9uX3NjYW5fa2V5KHJl bCwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGtleVBvaW50ZXJzLCBrZXlzQ291bnQsCisJCQkJCQkJ CSAgJnNraXAtPmZ3ZFNjYW5LZXksICZzdHJhdFRvdGFsLCAmZ29iYWNrKTsKKworCWtleXNDb3Vu dCA9IF9idF9jaG9vc2Vfc2Nhbl9rZXlzKHNvLT5rZXlEYXRhLCBzby0+bnVtYmVyT2ZLZXlzLCBC YWNrd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkga2V5UG9pbnRlcnMsIHNraXAtPmJ3ZE5v dE51bGxLZXlzLCAmc3RyYXRUb3RhbCwgc2tpcC0+cHJlZml4KTsKKwlfYnRfY3JlYXRlX2luc2Vy dGlvbl9zY2FuX2tleShyZWwsIEJhY2t3YXJkU2NhbkRpcmVjdGlvbiwga2V5UG9pbnRlcnMsIGtl eXNDb3VudCwKKwkJCQkJCQkJICAmc2tpcC0+YndkU2NhbktleSwgJnN0cmF0VG90YWwsICZnb2Jh Y2spOworCisJX2J0X21ldGF2ZXJzaW9uKHJlbCwgJnNraXAtPmN1clBvcy5za2lwU2NhbktleS5o ZWFwa2V5c3BhY2UsCisJCQkJCSZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkuYWxsZXF1YWxpbWFn ZSk7CisJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LmFueW51bGxrZXlzID0gZmFsc2U7IC8qIHVu dXNlZCAqLworCXNraXAtPmN1clBvcy5za2lwU2NhbktleS5uZXh0a2V5ID0gZmFsc2U7CisJc2tp cC0+Y3VyUG9zLnNraXBTY2FuS2V5LnBpdm90c2VhcmNoID0gZmFsc2U7CisJc2tpcC0+Y3VyUG9z LnNraXBTY2FuS2V5LnNjYW50aWQgPSBOVUxMOworCXNraXAtPmN1clBvcy5za2lwU2NhbktleS5r ZXlzeiA9IDA7CisKKwkvKiBzZXR1cCBzY2Fua2V5IGZvciB0aGUgY3VycmVudCB0dXBsZSBhcyB3 ZWxsLiBpdCdzIG5vdCBuZWNlc3NhcmlseSB0aGF0CisJICogd2Ugd2lsbCB1c2UgdGhlIGRhdGEg ZnJvbSB0aGUgY3VycmVudCB0dXBsZSBhbHJlYWR5LAorCSAqIGJ1dCB3ZSBuZWVkIHRoZSByZXN0 IG9mIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBiZSBzZXQgdXAgY29ycmVjdGx5CisJICogZm9yIHdo ZW4gd2UgdXNlIGl0IHRvIGNyZWF0ZSBza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXkga2V5cyBsYXRl cgorCSAqLworCV9idF9ta3NjYW5rZXkocmVsLCBOVUxMLCAmc2tpcC0+Y3VycmVudFR1cGxlS2V5 KTsKK30KKworLyoKKyAqIF9idF9zY2Fua2V5X3dpdGhpbl9wYWdlKCkgLS0gY2hlY2sgaWYgdGhl IHByb3ZpZGVkIHNjYW5rZXkgY291bGQgYmUgZm91bmQKKyAqIAkJCQkJCQkJd2l0aGluIGEgcGFn ZSwgc3BlY2lmaWVkIGJ5IHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0 X3NjYW5rZXlfd2l0aGluX3BhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5JbnNlcnQga2V5 LAorCQkJCQkJQnVmZmVyIGJ1ZikKK3sKKwkvKiBAdG9kbzogb3B0aW1pemF0aW9uIGlzIHN0aWxs IHBvc3NpYmxlIGhlcmUgdG8KKwkgKiBvbmx5IGNoZWNrIGVpdGhlciB0aGUgbG93IG9yIHRoZSBo aWdoLCBkZXBlbmRpbmcgb24KKwkgKiB3aGljaCBkaXJlY3Rpb24gKndlIGNhbWUgZnJvbSogQU5E IHdoaWNoIGRpcmVjdGlvbgorCSAqICp3ZSBhcmUgcGxhbm5pbmcgdG8gc2NhbioKKwkgKi8KKwlP ZmZzZXROdW1iZXIgbG93LCBoaWdoOworCVBhZ2UgcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK KwlCVFBhZ2VPcGFxdWUgb3BhcXVlID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2lu dGVyKHBhZ2UpOworCWludAkJCWFuc19sbywgYW5zX2hpOworCisJbG93ID0gUF9GSVJTVERBVEFL RVkob3BhcXVlKTsKKwloaWdoID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCWlm ICh1bmxpa2VseShoaWdoIDwgbG93KSkKKwkJcmV0dXJuIGZhbHNlOworCisJYW5zX2xvID0gX2J0 X2NvbXBhcmUoc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJICAga2V5LCBwYWdlLCBsb3cpOwor CWFuc19oaSA9IF9idF9jb21wYXJlKHNjYW4tPmluZGV4UmVsYXRpb24sCisJCQkJCSAgIGtleSwg cGFnZSwgaGlnaCk7CisJaWYgKGtleS0+bmV4dGtleSkKKwl7CisJCS8qIHNrIDwgbGFzdCAmJiBz ayA+PSBmaXJzdCAqLworCQlyZXR1cm4gYW5zX2xvID49IDAgJiYgYW5zX2hpID09IC0xOworCX0K KwllbHNlCisJeworCQkvKiBzayA8PSBsYXN0ICYmIHNrID4gZmlyc3QgKi8KKwkJcmV0dXJuIGFu c19sbyA9PSAxICYmIGFuc19oaSA8PSAwOworCX0KK30KKworLyogaW46IHBpbm5lZCBhbmQgbG9j a2VkLCBvdXQ6IHBpbm5lZCBhbmQgbG9ja2VkICh1bmxlc3MgZW5kIG9mIHNjYW4pICovCitzdGF0 aWMgdm9pZAorX2J0X3NraXBfZmluZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1 clR1cGxlLCBPZmZzZXROdW1iZXIgKmN1clR1cGxlT2ZmbnVtLAorCQkJICBCVFNjYW5JbnNlcnQg c2NhbktleSwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJQlRTY2FuT3BhcXVlIAlzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtOworCUJUU3RhY2sg c3RhY2s7CisJQnVmZmVyIGJ1ZjsKKwlib29sIGdvYmFjazsKKwlQYWdlCQlwYWdlOworCUJUUGFn ZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlSZWxhdGlvbiByZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOworCWJvb2wgZnJvbXJvb3QgPSB0cnVlOworCisJX2J0X3NldF9i c2VhcmNoX2ZsYWdzKHNjYW5LZXktPnNjYW5rZXlzW3NjYW5LZXktPmtleXN6IC0gMV0uc2tfc3Ry YXRlZ3ksIGRpciwgJnNjYW5LZXktPm5leHRrZXksICZnb2JhY2spOworCisJaWYgKChERUJVRzIg Pj0gbG9nX21pbl9tZXNzYWdlcyB8fCBERUJVRzIgPj0gY2xpZW50X21pbl9tZXNzYWdlcykgJiYg IUlzQ2F0YWxvZ1JlbGF0aW9uKHJlbCkpCisJeworCQlpZiAoKmN1clR1cGxlICE9IE5VTEwpCisJ CQlwcmludF9pdHVwKEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksICpjdXJU dXBsZSwgTlVMTCwgcmVsLAorCQkJCQkJImJlZm9yZSBidHJlZSBzZWFyY2giKTsKKworCQllbG9n KERFQlVHMSwgIiVzIHNlYXJjaGluZyB0cmVlIHdpdGggJWQga2V5cywgbmV4dGtleT0lZCwgZ29i YWNrPSVkIiwKKwkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCBzY2FuS2V5LT5rZXlz eiwgc2NhbktleS0+bmV4dGtleSwKKwkJCSBnb2JhY2spOworCisJCV9wcmludF9za2V5KHNjYW4s IHNjYW5LZXkpOworCX0KKworCWlmICgqY3VyVHVwbGVPZmZudW0gPT0gSW52YWxpZE9mZnNldE51 bWJlcikKKwl7CisJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCX0KKwll bHNlCisJeworCQlpZiAoX2J0X3NjYW5rZXlfd2l0aGluX3BhZ2Uoc2Nhbiwgc2NhbktleSwgc28t PmN1cnJQb3MuYnVmKSkKKwkJeworCQkJZWxvZyhERUJVRzEsICJzayBmb3VuZCB3aXRoaW4gY3Vy cmVudCBwYWdlIik7CisKKwkJCW9mZm51bSA9IF9idF9iaW5zcmNoKHNjYW4tPmluZGV4UmVsYXRp b24sIHNjYW5LZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJCQlmcm9tcm9vdCA9IGZhbHNlOworCQl9 CisJCWVsc2UKKwkJeworCQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7CisJ CQlSZWxlYXNlQnVmZmVyKHNvLT5jdXJyUG9zLmJ1Zik7CisJCQlzby0+Y3VyclBvcy5idWYgPSBJ bnZhbGlkQnVmZmVyOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBoYXZlbid0IGZvdW5kIHNjYW4g a2V5IHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLCBzbyBsZXQncyBzY2FuIGZyb20KKwkgKiB0aGUg cm9vdC4gVXNlIF9idF9zZWFyY2ggYW5kIF9idF9iaW5zcmNoIHRvIGdldCB0aGUgYnVmZmVyIGFu ZCBvZmZzZXQKKwkgKiBudW1iZXIKKwkgKi8KKwlpZiAoZnJvbXJvb3QpCisJeworCQlzdGFjayA9 IF9idF9zZWFyY2goc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc2NhbktleSwKKwkJCQkJCSAgICZidWYs IEJUX1JFQUQsIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJX2J0X2ZyZWVzdGFjayhzdGFjayk7CisJ CXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKworCQlvZmZudW0gPSBfYnRfYmluc3JjaChzY2FuLT5p bmRleFJlbGF0aW9uLCBzY2FuS2V5LCBidWYpOworCisJCS8qIExvY2sgdGhlIHBhZ2UgZm9yIFNF UklBTElaQUJMRSB0cmFuc2FjdGlvbnMgKi8KKwkJUHJlZGljYXRlTG9ja1BhZ2Uoc2Nhbi0+aW5k ZXhSZWxhdGlvbiwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKSwKKwkJCQkJ CSAgc2Nhbi0+eHNfc25hcHNob3QpOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5j dXJyUG9zLmJ1Zik7CisJb3BhcXVlID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2lu dGVyKHBhZ2UpOworCisJaWYgKGdvYmFjaykKKwl7CisJCW9mZm51bSA9IE9mZnNldE51bWJlclBy ZXYob2ZmbnVtKTsKKwkJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwkJaWYgKG9m Zm51bSA8IG1pbm9mZikKKwkJeworCQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1 Zik7CisJCQlpZiAoIV9idF9zdGVwX2JhY2tfcGFnZShzY2FuLCBjdXJUdXBsZSwgY3VyVHVwbGVP ZmZudW0pKQorCQkJCXJldHVybjsKKwkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9z LmJ1Zik7CisJCQlvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIo cGFnZSk7CisJCQlvZmZudW0gPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCQl9CisJ fQorCWVsc2UgaWYgKG9mZm51bSA+IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkpCisJewor CQlCbG9ja051bWJlciBuZXh0ID0gb3BhcXVlLT5idHBvX25leHQ7CisJCV9idF91bmxvY2tidWYo cmVsLCBzby0+Y3VyclBvcy5idWYpOworCQlpZiAoIV9idF9zdGVwX2ZvcndhcmRfcGFnZShzY2Fu LCBuZXh0LCBjdXJUdXBsZSwgY3VyVHVwbGVPZmZudW0pKQorCQkJcmV0dXJuOworCQlwYWdlID0g QnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlvcGFxdWUgPSAoQlRQYWdlT3BhcXVl KSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CisJCW9mZm51bSA9IFBfRklSU1REQVRBS0VZ KG9wYXF1ZSk7CisJfQorCisJLyogV2Uga25vdyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gbG9vayAq LworCV9idF9pbml0aWFsaXplX21vcmVfZGF0YShzbywgZGlyKTsKKworCSpjdXJUdXBsZU9mZm51 bSA9IG9mZm51bTsKKwkqY3VyVHVwbGUgPSBfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCBv ZmZudW0pOworCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28t PmN1cnJQb3MuYnVmKTsKKworCWlmIChERUJVRzIgPj0gbG9nX21pbl9tZXNzYWdlcyB8fCBERUJV RzIgPj0gY2xpZW50X21pbl9tZXNzYWdlcykKKwkJcHJpbnRfaXR1cChCdWZmZXJHZXRCbG9ja051 bWJlcihzby0+Y3VyclBvcy5idWYpLCAqY3VyVHVwbGUsIE5VTEwsIHJlbCwKKwkJCQkJImFmdGVy IGJ0cmVlIHNlYXJjaCIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK19idF9zdGVwX29uZV9w YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4VHVwbGUgKmN1 clR1cGxlLAorCQkJCSAgT2Zmc2V0TnVtYmVyICpjdXJUdXBsZU9mZm51bSkKK3sKKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCXsKKwkJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCQlyZXR1cm4gX2J0X3N0ZXBfZm9yd2FyZF9wYWdlKHNj YW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLCBjdXJUdXBsZSwgY3VyVHVwbGVPZmZudW0pOworCX0K KwllbHNlCisJeworCQlyZXR1cm4gX2J0X3N0ZXBfYmFja19wYWdlKHNjYW4sIGN1clR1cGxlLCBj dXJUdXBsZU9mZm51bSk7CisJfQorfQorCisvKiBpbjogcG9zc2libHkgcGlubmVkLCBidXQgdW5s b2NrZWQsIG91dDogcGlubmVkIGFuZCBsb2NrZWQgKi8KK2Jvb2wKK19idF9zdGVwX2ZvcndhcmRf cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIG5leHQsIEluZGV4VHVwbGUgKmN1 clR1cGxlLAorCQkJCQkgIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0pCit7CisJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCVJlbGF0aW9uIHJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247CisJQmxvY2tOdW1iZXIgYmxrbm8gPSBuZXh0OworCVBhZ2Ug cGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCisJQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKKworCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3 aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KKwlpZiAoc28tPm51bUtpbGxlZCA+IDApCisJCV9idF9r aWxsaXRlbXMoc2Nhbik7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFr ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQorCSAqIG1hcmsgcG9zaXRp b24gdGhhdCBuZWVkcyBpdC4KKwkgKi8KKwlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKKwl7 CisJCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsg YnVmZmVyICovCisJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCisJCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKKwkJbWVtY3B5KCZzby0+bWFya1Bvcywg JnNvLT5jdXJyUG9zLAorCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsK KwkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKKwkJ aWYgKHNvLT5tYXJrVHVwbGVzKQorCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1 cGxlcywKKwkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOworCQlzby0+bWFya1Bv cy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKKwkJaWYgKHNvLT5za2lwRGF0YSkKKwkJ CW1lbWNweSgmc28tPnNraXBEYXRhLT5tYXJrUG9zLCAmc28tPnNraXBEYXRhLT5jdXJQb3MsCisJ CQkJICAgc2l6ZW9mKEJUU2tpcFBvc0RhdGEpKTsKKwkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsK Kwl9CisKKwkvKiBSZW1lbWJlciB3ZSBsZWZ0IGEgcGFnZSB3aXRoIGRhdGEgKi8KKwlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IHRydWU7CisKKwkvKiByZWxlYXNlIHRoZSBwcmV2aW91cyBidWZmZXIs IGlmIHBpbm5lZCAqLworCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCisJ eworCQlmb3IgKDs7KQorCQl7CisJCQkvKgorCQkJICogaWYgd2UncmUgYXQgZW5kIG9mIHNjYW4s IGdpdmUgdXAgYW5kIG1hcmsgcGFyYWxsZWwgc2NhbiBhcworCQkJICogZG9uZSwgc28gdGhhdCBh bGwgdGhlIHdvcmtlcnMgY2FuIGZpbmlzaCB0aGVpciBzY2FuCisJCQkgKi8KKwkJCWlmIChibGtu byA9PSBQX05PTkUpCisJCQl7CisJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQkJQlRT Y2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQor CisJCQkvKiBjaGVjayBmb3IgaW50ZXJydXB0cyB3aGlsZSB3ZSdyZSBub3QgaG9sZGluZyBhbnkg YnVmZmVyIGxvY2sgKi8KKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCQkvKiBzdGVwIHJp Z2h0IG9uZSBwYWdlICovCisJCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxr bm8sIEJUX1JFQUQpOworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsK KwkJCVRlc3RGb3JPbGRTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCwgcmVsLCBwYWdlKTsKKwkJ CW9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihwYWdlKTsKKwkJ CS8qIGNoZWNrIGZvciBkZWxldGVkIHBhZ2UgKi8KKwkJCWlmICghUF9JR05PUkUob3BhcXVlKSkK KwkJCXsKKwkJCQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIGJsa25vLCBzY2FuLT54c19zbmFwc2hv dCk7CisJCQkJKmN1clR1cGxlT2ZmbnVtID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwkJCQkq Y3VyVHVwbGUgPSBfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCAqY3VyVHVwbGVPZmZudW0p OworCQkJCWJyZWFrOworCQkJfQorCisJCQlibGtubyA9IG9wYXF1ZS0+YnRwb19uZXh0OworCQkJ X2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyogaW46IHBvc3NpYmx5IHBpbm5lZCwgYnV0IHVubG9ja2VkLCBvdXQ6IHBpbm5l ZCBhbmQgbG9ja2VkICovCitib29sCitfYnRfc3RlcF9iYWNrX3BhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFR1cGxlICpjdXJUdXBsZSwgT2Zmc2V0TnVtYmVyICpjdXJUdXBsZU9mZm51bSkK K3sKKwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlB c3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCisJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLworCWlmIChzby0+ bnVtS2lsbGVkID4gMCkKKwkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKKworCS8qCisJICogQmVmb3Jl IHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRhIGlmIHRoZXJl IHdhcyBhCisJICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgorCSAqLworCWlmIChzby0+ bWFya0l0ZW1JbmRleCA+PSAwKQorCXsKKwkJLyogYnVtcCBwaW4gb24gY3VycmVudCBidWZmZXIg Zm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KKwkJaWYgKEJUU2NhblBvc0lzUGlubmVk KHNvLT5jdXJyUG9zKSkKKwkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBvcy5idWYpOwor CQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCisJCQkgICBvZmZzZXRvZihCVFNj YW5Qb3NEYXRhLCBpdGVtc1sxXSkgKworCQkJICAgc28tPmN1cnJQb3MubGFzdEl0ZW0gKiBzaXpl b2YoQlRTY2FuUG9zSXRlbSkpOworCQlpZiAoc28tPm1hcmtUdXBsZXMpCisJCQltZW1jcHkoc28t Pm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAorCQkJCSAgIHNvLT5jdXJyUG9zLm5leHRUdXBs ZU9mZnNldCk7CisJCWlmIChzby0+c2tpcERhdGEpCisJCQltZW1jcHkoJnNvLT5za2lwRGF0YS0+ bWFya1BvcywgJnNvLT5za2lwRGF0YS0+Y3VyUG9zLAorCQkJCSAgIHNpemVvZihCVFNraXBQb3NE YXRhKSk7CisJCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OworCQlz by0+bWFya0l0ZW1JbmRleCA9IC0xOworCX0KKworCS8qIFJlbWVtYmVyIHdlIGxlZnQgYSBwYWdl IHdpdGggZGF0YSAqLworCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisKKwkvKiBOb3Qg cGFyYWxsZWwsIHNvIGp1c3QgdXNlIG91ciBvd24gbm90aW9uIG9mIHRoZSBjdXJyZW50IHBhZ2Ug Ki8KKworCXsKKwkJUmVsYXRpb24JcmVsOworCQlQYWdlCQlwYWdlOworCQlCVFBhZ2VPcGFxdWUg b3BhcXVlOworCisJCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisKKwkJaWYgKEJUU2NhblBv c0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKKwkJCV9idF9sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3Mu YnVmLCBCVF9SRUFEKTsKKwkJZWxzZQorCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKKworCQlmb3IgKDs7KQorCQl7CisJ CQkvKiBTdGVwIHRvIG5leHQgcGh5c2ljYWwgcGFnZSAqLworCQkJc28tPmN1cnJQb3MuYnVmID0g X2J0X3dhbGtfbGVmdChyZWwsIHNvLT5jdXJyUG9zLmJ1ZiwKKwkJCQkJCQkJCQkJc2Nhbi0+eHNf c25hcHNob3QpOworCisJCQkvKiBpZiB3ZSdyZSBwaHlzaWNhbGx5IGF0IGVuZCBvZiBpbmRleCwg cmV0dXJuIGZhaWx1cmUgKi8KKwkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZl cikKKwkJCXsKKwkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKKwkJCQlyZXR1 cm4gZmFsc2U7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPa2F5LCB3ZSBtYW5hZ2VkIHRvIG1vdmUg bGVmdCB0byBhIG5vbi1kZWxldGVkIHBhZ2UuIERvbmUgaWYKKwkJCSAqIGl0J3Mgbm90IGhhbGYt ZGVhZCBhbmQgY29udGFpbnMgbWF0Y2hpbmcgdHVwbGVzLiBFbHNlIGxvb3AgYmFjaworCQkJICog YW5kIGRvIGl0IGFsbCBhZ2Fpbi4KKwkJCSAqLworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28t PmN1cnJQb3MuYnVmKTsKKwkJCVRlc3RGb3JPbGRTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCwg cmVsLCBwYWdlKTsKKwkJCW9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9p bnRlcihwYWdlKTsKKwkJCWlmICghUF9JR05PUkUob3BhcXVlKSkKKwkJCXsKKwkJCQlQcmVkaWNh dGVMb2NrUGFnZShyZWwsIEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksIHNj YW4tPnhzX3NuYXBzaG90KTsKKwkJCQkqY3VyVHVwbGVPZmZudW0gPSBQYWdlR2V0TWF4T2Zmc2V0 TnVtYmVyKHBhZ2UpOworCQkJCSpjdXJUdXBsZSA9IF9idF9nZXRfdHVwbGVfZnJvbV9vZmZzZXQo c28sICpjdXJUdXBsZU9mZm51bSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyogaG9sZHMgbG9jayBhcyBsb25nIGFzIGN1clR1cGxlT2ZmbnVtICE9 IEludmFsaWRPZmZzZXROdW1iZXIgKi8KK2Jvb2wKK19idF9za2lwX2ZpbmRfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgY3VyVHVwbGUsIE9mZnNldE51bWJlciBjdXJUdXBsZU9m Zm51bSwKKwkJCQkgICBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0 Zml4RGlyKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKKwlCVFNraXAgc2tpcCA9IHNvLT5za2lwRGF0YTsKKwlCVFNraXBDb21wYXJlUmVzdWx0IGNt cDsKKworCXdoaWxlIChfYnRfc2tpcF9pc192YWxpZChzbywgcHJlZml4RGlyLCBwb3N0Zml4RGly KSkKKwl7CisJCWJvb2wgZm91bmQ7CisJCV9idF9za2lwX3VudGlsX21hdGNoKHNjYW4sICZjdXJU dXBsZSwgJmN1clR1cGxlT2ZmbnVtLCBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOworCisJCXdoaWxl IChfYnRfc2tpcF9pc19hbHdheXNfdmFsaWQoc28pKQorCQl7CisJCQlPZmZzZXROdW1iZXIgZmly c3QgPSBjdXJUdXBsZU9mZm51bTsKKwkJCWZvdW5kID0gX2J0X3JlYWRwYWdlKHNjYW4sIHBvc3Rm aXhEaXIsICZjdXJUdXBsZU9mZm51bSwKKwkJCQkJCQkJIF9idF9za2lwX2lzX3JlZ3VsYXJfbW9k ZShwcmVmaXhEaXIsIHBvc3RmaXhEaXIpKTsKKwkJCWlmIChERUJVRzIgPj0gbG9nX21pbl9tZXNz YWdlcyB8fCBERUJVRzIgPj0gY2xpZW50X21pbl9tZXNzYWdlcykKKwkJCXsKKwkJCQlwcmludF9p dHVwKEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksCisJCQkJCQkgICBfYnRf Z2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCBmaXJzdCksIE5VTEwsIHNjYW4tPmluZGV4UmVsYXRp b24sCisJCQkJCQkJImZpcnN0IGl0ZW0gb24gcGFnZSBjb21wYXJlZCIpOworCQkJCXByaW50X2l0 dXAoQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKSwKKwkJCQkJCSAgIF9idF9n ZXRfdHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVtKSwgTlVMTCwgc2Nhbi0+aW5k ZXhSZWxhdGlvbiwKKwkJCQkJCQkibGFzdCBpdGVtIG9uIHBhZ2UgY29tcGFyZWQiKTsKKwkJCX0K KwkJCV9idF9jb21wYXJlX2N1cnJlbnRfaXRlbShzY2FuLCBfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zm c2V0KHNvLCBjdXJUdXBsZU9mZm51bSksCisJCQkJCQkJCQkgSW5kZXhSZWxhdGlvbkdldE51bWJl ck9mQXR0cmlidXRlcyhzY2FuLT5pbmRleFJlbGF0aW9uKSwKKwkJCQkJCQkJCSBwb3N0Zml4RGly LCBfYnRfc2tpcF9pc19yZWd1bGFyX21vZGUocHJlZml4RGlyLCBwb3N0Zml4RGlyKSwgJmNtcCk7 CisJCQlfYnRfZGV0ZXJtaW5lX25leHRfYWN0aW9uKHNjYW4sICZjbXAsIGZpcnN0LCBjdXJUdXBs ZU9mZm51bSwKKwkJCQkJCQkJCSAgcG9zdGZpeERpciwgJnNraXAtPmN1clBvcy5uZXh0QWN0aW9u KTsKKwkJCXNraXAtPmN1clBvcy5uZXh0RGlyZWN0aW9uID0gcHJlZml4RGlyOworCQkJc2tpcC0+ Y3VyUG9zLm5leHRTa2lwSW5kZXggPSBjbXAucHJlZml4U2tpcEluZGV4OworCisJCQlpZiAoZm91 bmQpCisJCQl7CisJCQkJX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfYWZ0ZXJfcmVhZChzY2FuLCBf YnRfZ2V0X3R1cGxlX2Zyb21fb2Zmc2V0KHNvLCBjdXJUdXBsZU9mZm51bSksCisJCQkJCQkJCQkJ CQkgICBwcmVmaXhEaXIsIHBvc3RmaXhEaXIpOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJ ZWxzZSBpZiAoc2tpcC0+Y3VyUG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlTmV4dCkKKwkJCXsK KwkJCQlpZiAoY3VyVHVwbGVPZmZudW0gIT0gSW52YWxpZE9mZnNldE51bWJlcikKKwkJCQkJX2J0 X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOworCQkJCWlm ICghX2J0X3N0ZXBfb25lX3BhZ2Uoc2NhbiwgcG9zdGZpeERpciwgJmN1clR1cGxlLCAmY3VyVHVw bGVPZmZudW0pKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQllbHNlIGlmIChza2lwLT5j dXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3RhdGVTa2lwIHx8IHNraXAtPmN1clBvcy5uZXh0QWN0 aW9uID09IFNraXBTdGF0ZVNraXBFeHRyYSkKKwkJCXsKKwkJCQljdXJUdXBsZSA9IF9idF9nZXRf dHVwbGVfZnJvbV9vZmZzZXQoc28sIGN1clR1cGxlT2ZmbnVtKTsKKwkJCQlfYnRfc2tpcF91cGRh dGVfc2NhbmtleV9hZnRlcl9yZWFkKHNjYW4sIGN1clR1cGxlLCBwcmVmaXhEaXIsIHBvc3RmaXhE aXIpOworCQkJCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3Mu YnVmKTsKKwkJCQljdXJUdXBsZU9mZm51bSA9IEludmFsaWRPZmZzZXROdW1iZXI7CisJCQkJY3Vy VHVwbGUgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoc2tpcC0+Y3VyUG9z Lm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU3RvcCkKKwkJCXsKKwkJCQlfYnRfdW5sb2NrYnVmKHNj YW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJCQkJQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+Y3VyclBvcyk7CisJCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBv cyk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUFzc2VydChm YWxzZSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitfYnRfc2tp cF91bnRpbF9tYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBP ZmZzZXROdW1iZXIgKmN1clR1cGxlT2ZmbnVtLAorCQkJCQkgU2NhbkRpcmVjdGlvbiBwcmVmaXhE aXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcikKK3sKKwlCVFNjYW5PcGFxdWUgCXNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOwor CXdoaWxlIChfYnRfc2tpcF9pc192YWxpZChzbywgcHJlZml4RGlyLCBwb3N0Zml4RGlyKSAmJgor CQkgICAoc2tpcC0+Y3VyUG9zLm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU2tpcCB8fCBza2lwLT5j dXJQb3MubmV4dEFjdGlvbiA9PSBTa2lwU3RhdGVTa2lwRXh0cmEpKQorCXsKKwkJX2J0X3NraXBf b25jZShzY2FuLCBjdXJUdXBsZSwgY3VyVHVwbGVPZmZudW0sCisJCQkJCSAgc2tpcC0+Y3VyUG9z Lm5leHRBY3Rpb24gPT0gU2tpcFN0YXRlU2tpcCwgcHJlZml4RGlyLCBwb3N0Zml4RGlyKTsKKwl9 Cit9CisKK3ZvaWQKK19idF9jb21wYXJlX2N1cnJlbnRfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkgYm9vbCBpc1JlZ3VsYXJNb2RlLCBCVFNraXBDb21wYXJlUmVzdWx0KiBjbXApCit7CisJQlRT Y2FuT3BhcXVlIAlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNraXAgc2tp cCA9IHNvLT5za2lwRGF0YTsKKworCWlmIChfYnRfc2tpcF9pc19hbHdheXNfdmFsaWQoc28pKQor CXsKKwkJYm9vbCBjb250aW51ZXNjYW4gPSB0cnVlOworCisJCWNtcC0+ZXF1YWwgPSBfYnRfY2hl Y2trZXlzKHNjYW4sIHR1cGxlLCB0dXBuYXR0cywgZGlyLCAmY29udGludWVzY2FuLCAmY21wLT5w cmVmaXhTa2lwSW5kZXgpOworCQljbXAtPmZ1bGxLZXlTa2lwID0gIWNvbnRpbnVlc2NhbjsKKwkJ LyogcHJlZml4IGNhbiBiZSBzbWFsbGVyIHRoYW4gc2NhbmtleSBkdWUgdG8gZXh0cmEgcXVhbHMg YmVpbmcgYWRkZWQKKwkJICogdGhlcmVmb3JlIHdlIG5lZWQgdG8gY29tcGFyZSBib3RoLiBAdG9k byB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQgaW50byBvbmUgZnVuY3Rpb24gY2FsbCAqLworCQljbXAt PnByZWZpeENtcFJlc3VsdCA9IF9idF9jb21wYXJlX3VudGlsKHNjYW4tPmluZGV4UmVsYXRpb24s ICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXksIHR1cGxlLCBza2lwLT5wcmVmaXgpOworCQljbXAt PnNrQ21wUmVzdWx0ID0gX2J0X2NvbXBhcmVfdW50aWwoc2Nhbi0+aW5kZXhSZWxhdGlvbiwKKwkJ CQkJCQkJCQkJICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXksIHR1cGxlLCBza2lwLT5jdXJQb3Mu c2tpcFNjYW5LZXkua2V5c3opOworCQlpZiAoY21wLT5wcmVmaXhTa2lwSW5kZXggPT0gLTEpCisJ CXsKKwkJCWlmIChpc1JlZ3VsYXJNb2RlKQorCQkJeworCQkJCWNtcC0+cHJlZml4U2tpcCA9IGZh bHNlOworCQkJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0gc2tpcC0+cHJlZml4OworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCWNtcC0+cHJlZml4U2tpcCA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSA/IGNtcC0+cHJlZml4Q21wUmVzdWx0IDwgMCA6IGNtcC0+cHJlZml4Q21wUmVzdWx0ID4g MDsKKwkJCQljbXAtPnByZWZpeFNraXBJbmRleCA9IHNraXAtPnByZWZpeDsKKwkJCX0KKwkJfQor CQllbHNlCisJCXsKKwkJCWludCBuZXdza2lwID0gLTE7CisJCQlfYnRfY2hlY2trZXlzX3RocmVl d2F5KHNjYW4sIHR1cGxlLCB0dXBuYXR0cywgZGlyLCAmY29udGludWVzY2FuLCAmbmV3c2tpcCk7 CisJCQlpZiAobmV3c2tpcCAhPSAtMSkKKwkJCXsKKwkJCQljbXAtPnByZWZpeFNraXAgPSB0cnVl OworCQkJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0gbmV3c2tpcDsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlpZiAoaXNSZWd1bGFyTW9kZSkKKwkJCQl7CisJCQkJCWNtcC0+cHJlZml4U2tpcCA9 IGZhbHNlOworCQkJCQljbXAtPnByZWZpeFNraXBJbmRleCA9IHNraXAtPnByZWZpeDsKKwkJCQl9 CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJY21wLT5wcmVmaXhTa2lwID0gU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gY21wLT5wcmVmaXhDbXBSZXN1bHQgPCAwIDogY21wLT5wcmVmaXhDbXBS ZXN1bHQgPiAwOworCQkJCQljbXAtPnByZWZpeFNraXBJbmRleCA9IHNraXAtPnByZWZpeDsKKwkJ CQl9CisJCQl9CisJCX0KKworCQlpZiAoREVCVUcyID49IGxvZ19taW5fbWVzc2FnZXMgfHwgREVC VUcyID49IGNsaWVudF9taW5fbWVzc2FnZXMpCisJCXsKKwkJCXByaW50X2l0dXAoQnVmZmVyR2V0 QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKSwgdHVwbGUsIE5VTEwsIHNjYW4tPmluZGV4UmVs YXRpb24sCisJCQkJCQkiY29tcGFyZSBpdGVtIik7CisJCQlfcHJpbnRfc2tleShzY2FuLCAmc2tp cC0+Y3VyUG9zLnNraXBTY2FuS2V5KTsKKwkJCWVsb2coREVCVUcxLCAicmVzdWx0OiBlcTogJWQg Zmtza2lwOiAlZCBwZnhza2lwOiAlZCBwcmVmaXhjbXByZXM6ICVkIHByZWZpeHNraXBpZHg6ICVk IiwgY21wLT5lcXVhbCwgY21wLT5mdWxsS2V5U2tpcCwKKwkJCQkgX2J0X3Nob3VsZF9wcmVmaXhf c2tpcChjbXApLCBjbXAtPnByZWZpeENtcFJlc3VsdCwgY21wLT5wcmVmaXhTa2lwSW5kZXgpOwor CQl9CisJfQorCWVsc2UKKwl7CisJCS8qIHdlIGNhbm5vdCBzdG9wIHRoZSBzY2FuIGlmICFpc1Jl Z3VsYXJNb2RlIC0gdGhlbiB3ZSBkbyBuZWVkIHRvIHNraXAgdG8gdGhlIG5leHQgcHJlZml4ICov CisJCWNtcC0+ZnVsbEtleVNraXAgPSBpc1JlZ3VsYXJNb2RlOworCQljbXAtPmVxdWFsID0gZmFs c2U7CisJCWNtcC0+cHJlZml4Q21wUmVzdWx0ID0gLTI7CisJCWNtcC0+cHJlZml4U2tpcCA9IHRy dWU7CisJCWNtcC0+cHJlZml4U2tpcEluZGV4ID0gc2tpcC0+cHJlZml4OworCQljbXAtPnNrQ21w UmVzdWx0ID0gLTI7CisJfQorfQorCit2b2lkCitfYnRfc2tpcF9vbmNlKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhUdXBsZSAqY3VyVHVwbGUsIE9mZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0s CisJCQkgIGJvb2wgZm9yY2VTa2lwLCBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVj dGlvbiBwb3N0Zml4RGlyKQoreworCUJUU2Nhbk9wYXF1ZSAJc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisJQlRTa2lwIHNraXAgPSBzby0+c2tpcERhdGE7CisJQlRTa2lwQ29tcGFy ZVJlc3VsdCBjbXA7CisJYm9vbCBkb3NraXAgPSBmb3JjZVNraXA7CisJaW50IHNraXBJbmRleCA9 IHNraXAtPmN1clBvcy5uZXh0U2tpcEluZGV4OworCXNraXAtPmN1clBvcy5uZXh0QWN0aW9uID0g U2tpcFN0YXRlU2tpcEV4dHJhOworCisJd2hpbGUgKGRvc2tpcCkKKwl7CisJCWludCB0b3NraXAg PSBza2lwSW5kZXg7CisJCWlmICgqY3VyVHVwbGUgIT0gTlVMTCkKKwkJeworCQkJaWYgKHNraXAt PnByZWZpeCA8PSBza2lwSW5kZXggfHwgIV9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhE aXIsIHBvc3RmaXhEaXIpKQorCQkJeworCQkJCXRvc2tpcCA9IHNraXAtPnByZWZpeDsKKwkJCX0K KworCQkJX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX3ByZWZpeF9za2lwKHNjYW4sIHNjYW4t PmluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCQkJdG9za2lwLCAqY3VyVHVwbGUsIHByZWZpeERp cik7CisJCX0KKworCQlpZiAoREVCVUcxID49IGxvZ19taW5fbWVzc2FnZXMgfHwgREVCVUcxID49 IGNsaWVudF9taW5fbWVzc2FnZXMpCisJCXsKKwkJCWRlYnVnX3ByaW50KCpjdXJUdXBsZSwgJnNv LT5za2lwRGF0YS0+Y3VyUG9zLnNraXBTY2FuS2V5LCBzY2FuLT5pbmRleFJlbGF0aW9uLCAic2tp cCIpOworCQl9CisKKwkJX2J0X3NraXBfZmluZChzY2FuLCBjdXJUdXBsZSwgY3VyVHVwbGVPZmZu dW0sICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXksIHByZWZpeERpcik7CisKKwkJaWYgKF9idF9z a2lwX2lzX2Fsd2F5c192YWxpZChzbykpCisJCXsKKwkJCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5 X2Zvcl9leHRyYV9za2lwKHNjYW4sIHNjYW4tPmluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCQkg ICBwcmVmaXhEaXIsIHByZWZpeERpciwgdHJ1ZSwgKmN1clR1cGxlKTsKKwkJCV9idF9jb21wYXJl X2N1cnJlbnRfaXRlbShzY2FuLCAqY3VyVHVwbGUsCisJCQkJCQkJCQkgSW5kZXhSZWxhdGlvbkdl dE51bWJlck9mQXR0cmlidXRlcyhzY2FuLT5pbmRleFJlbGF0aW9uKSwKKwkJCQkJCQkJCSBwcmVm aXhEaXIsCisJCQkJCQkJCQkgX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9z dGZpeERpciksICZjbXApOworCQkJc2tpcEluZGV4ID0gY21wLnByZWZpeFNraXBJbmRleDsKKwkJ CV9idF9kZXRlcm1pbmVfbmV4dF9hY3Rpb25fYWZ0ZXJfc2tpcChzbywgJmNtcCwgcHJlZml4RGly LAorCQkJCQkJCQkJCQkJIHBvc3RmaXhEaXIsIHRvc2tpcCwgJnNraXAtPmN1clBvcy5uZXh0QWN0 aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXNraXAtPmN1clBvcy5uZXh0QWN0aW9uID0gU2tp cFN0YXRlU3RvcDsKKwkJfQorCQlkb3NraXAgPSBza2lwLT5jdXJQb3MubmV4dEFjdGlvbiA9PSBT a2lwU3RhdGVTa2lwOworCX0KKwlpZiAoc2tpcC0+Y3VyUG9zLm5leHRBY3Rpb24gIT0gU2tpcFN0 YXRlU3RvcCAmJiBza2lwLT5jdXJQb3MubmV4dEFjdGlvbiAhPSBTa2lwU3RhdGVOZXh0KQorCQlf YnRfc2tpcF9leHRyYV9jb25kaXRpb25zKHNjYW4sIGN1clR1cGxlLCBjdXJUdXBsZU9mZm51bSwg cHJlZml4RGlyLCBwb3N0Zml4RGlyLCAmY21wKTsKK30KKwordm9pZAorX2J0X3NraXBfZXh0cmFf Y29uZGl0aW9ucyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBPZmZz ZXROdW1iZXIgKmN1clR1cGxlT2ZmbnVtLAorCQkJCQkJICBTY2FuRGlyZWN0aW9uIHByZWZpeERp ciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyLCBCVFNraXBDb21wYXJlUmVzdWx0ICpjbXApCit7 CisJQlRTY2FuT3BhcXVlIAlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNr aXAgc2tpcCA9IHNvLT5za2lwRGF0YTsKKwlib29sIHJlZ3VsYXJNb2RlID0gX2J0X3NraXBfaXNf cmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcik7CisJaWYgKF9idF9za2lwX2lzX2Fs d2F5c192YWxpZChzbykpCisJeworCQlkbworCQl7CisJCQlpZiAoKmN1clR1cGxlICE9IE5VTEwp CisJCQkJX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX2V4dHJhX3NraXAoc2Nhbiwgc2Nhbi0+ aW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkgICBwb3N0Zml4RGlyLCBwcmVmaXhEaXIsIGZh bHNlLCAqY3VyVHVwbGUpOworCQkJaWYgKERFQlVHMSA+PSBsb2dfbWluX21lc3NhZ2VzIHx8IERF QlVHMSA+PSBjbGllbnRfbWluX21lc3NhZ2VzKQorCQkJeworCQkJCWRlYnVnX3ByaW50KCpjdXJU dXBsZSwgJnNvLT5za2lwRGF0YS0+Y3VyUG9zLnNraXBTY2FuS2V5LCBzY2FuLT5pbmRleFJlbGF0 aW9uLCAic2tpcC1leHRyYSIpOworCQkJfQorCQkJX2J0X3NraXBfZmluZChzY2FuLCBjdXJUdXBs ZSwgY3VyVHVwbGVPZmZudW0sICZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXksIHBvc3RmaXhEaXIp OworCQkJX2J0X2NvbXBhcmVfY3VycmVudF9pdGVtKHNjYW4sICpjdXJUdXBsZSwKKwkJCQkJCQkJ CSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHNjYW4tPmluZGV4UmVsYXRpb24p LAorCQkJCQkJCQkJIHBvc3RmaXhEaXIsIF9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhE aXIsIHBvc3RmaXhEaXIpLCBjbXApOworCQl9IHdoaWxlIChyZWd1bGFyTW9kZSAmJiBjbXAtPnBy ZWZpeENtcFJlc3VsdCAhPSAwICYmICFjbXAtPmVxdWFsICYmICFjbXAtPmZ1bGxLZXlTa2lwKTsK KwkJc2tpcC0+Y3VyUG9zLm5leHRTa2lwSW5kZXggPSBjbXAtPnByZWZpeFNraXBJbmRleDsKKwl9 CisJX2J0X2RldGVybWluZV9uZXh0X2FjdGlvbl9hZnRlcl9za2lwX2V4dHJhKHNvLCBjbXAsICZz a2lwLT5jdXJQb3MubmV4dEFjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitfYnRfc2tpcF91cGRh dGVfc2NhbmtleV9hZnRlcl9yZWFkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBjdXJU dXBsZSwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24g cG9zdGZpeERpcikKK3sKKwlCVFNjYW5PcGFxdWUgCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCUJUU2tpcCBza2lwID0gc28tPnNraXBEYXRhOworCWlmIChza2lwLT5jdXJQb3Mu bmV4dEFjdGlvbiA9PSBTa2lwU3RhdGVTa2lwKQorCXsKKwkJaW50IHRvc2tpcCA9IHNraXAtPmN1 clBvcy5uZXh0U2tpcEluZGV4OworCQlpZiAoc2tpcC0+cHJlZml4IDw9IHNraXAtPmN1clBvcy5u ZXh0U2tpcEluZGV4IHx8CisJCQkJIV9idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShwcmVmaXhEaXIs IHBvc3RmaXhEaXIpKQorCQl7CisJCQl0b3NraXAgPSBza2lwLT5wcmVmaXg7CisJCX0KKworCQlp ZiAoX2J0X3NraXBfaXNfcmVndWxhcl9tb2RlKHByZWZpeERpciwgcG9zdGZpeERpcikpCisJCQlf YnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfcHJlZml4X3NraXAoc2Nhbiwgc2Nhbi0+aW5kZXhS ZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQl0b3NraXAsIGN1clR1cGxlLCBwcmVmaXhEaXIpOworCQll bHNlCisJCQlfYnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfcHJlZml4X3NraXAoc2Nhbiwgc2Nh bi0+aW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQl0b3NraXAsIE5VTEwsIHByZWZpeERpcik7 CisJfQorCWVsc2UgaWYgKHNraXAtPmN1clBvcy5uZXh0QWN0aW9uID09IFNraXBTdGF0ZVNraXBF eHRyYSkKKwl7CisJCV9idF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9leHRyYV9za2lwKHNjYW4s IHNjYW4tPmluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCSAgIHBvc3RmaXhEaXIsIHByZWZpeERp ciwgZmFsc2UsIGN1clR1cGxlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfYnRfY29t cGFyZV9vbmUoU2NhbktleSBzY2Fua2V5LCBEYXR1bSBkYXR1bTIsIGJvb2wgaXNOdWxsMikKK3sK KwlpbnQzMgkJcmVzdWx0OworCURhdHVtIGRhdHVtMSA9IHNjYW5rZXktPnNrX2FyZ3VtZW50Owor CWJvb2wgaXNOdWxsMSA9IHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfSVNOVUxMOworCS8qIHNlZSBj b21tZW50cyBhYm91dCBOVUxMcyBoYW5kbGluZyBpbiBidGJ1aWxkICovCisJaWYgKGlzTnVsbDEp CS8qIGtleSBpcyBOVUxMICovCisJeworCQlpZiAoaXNOdWxsMikKKwkJCXJlc3VsdCA9IDA7CQkv KiBOVUxMICI9IiBOVUxMICovCisJCWVsc2UgaWYgKHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfQlRf TlVMTFNfRklSU1QpCisJCQlyZXN1bHQgPSAtMTsJLyogTlVMTCAiPCIgTk9UX05VTEwgKi8KKwkJ ZWxzZQorCQkJcmVzdWx0ID0gMTsJCS8qIE5VTEwgIj4iIE5PVF9OVUxMICovCisJfQorCWVsc2Ug aWYgKGlzTnVsbDIpCQkvKiBrZXkgaXMgTk9UX05VTEwgYW5kIGl0ZW0gaXMgTlVMTCAqLworCXsK KwkJaWYgKHNjYW5rZXktPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNfRklSU1QpCisJCQlyZXN1bHQg PSAxOwkJLyogTk9UX05VTEwgIj4iIE5VTEwgKi8KKwkJZWxzZQorCQkJcmVzdWx0ID0gLTE7CS8q IE5PVF9OVUxMICI8IiBOVUxMICovCisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFRoZSBza19m dW5jIG5lZWRzIHRvIGJlIHBhc3NlZCB0aGUgaW5kZXggdmFsdWUgYXMgbGVmdCBhcmcgYW5kCisJ CSAqIHRoZSBza19hcmd1bWVudCBhcyByaWdodCBhcmcgKHRoZXkgbWlnaHQgYmUgb2YgZGlmZmVy ZW50CisJCSAqIHR5cGVzKS4gIFNpbmNlIGl0IGlzIGNvbnZlbmllbnQgZm9yIGNhbGxlcnMgdG8g dGhpbmsgb2YKKwkJICogX2J0X2NvbXBhcmUgYXMgY29tcGFyaW5nIHRoZSBzY2Fua2V5IHRvIHRo ZSBpbmRleCBpdGVtLCB3ZSBoYXZlCisJCSAqIHRvIGZsaXAgdGhlIHNpZ24gb2YgdGhlIGNvbXBh cmlzb24gcmVzdWx0LiAgKFVubGVzcyBpdCdzIGEgREVTQworCQkgKiBjb2x1bW4sIGluIHdoaWNo IGNhc2Ugd2UgKmRvbid0KiBmbGlwIHRoZSBzaWduLikKKwkJICovCisJCXJlc3VsdCA9IERhdHVt R2V0SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwoJnNjYW5rZXktPnNrX2Z1bmMsCisJCQkJCQkJCQkJ CQkgc2NhbmtleS0+c2tfY29sbGF0aW9uLAorCQkJCQkJCQkJCQkJIGRhdHVtMiwKKwkJCQkJCQkJ CQkJCSBkYXR1bTEpKTsKKworCQlpZiAoIShzY2Fua2V5LT5za19mbGFncyAmIFNLX0JUX0RFU0Mp KQorCQkJSU5WRVJUX0NPTVBBUkVfUkVTVUxUKHJlc3VsdCk7CisJfQorCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBzZXQgdXAgbmV3IHZhbHVlcyBmb3IgdGhlIGV4aXN0aW5nIHNjYW5rZXlz CisgKiBiYXNlZCBvbiB0aGUgY3VycmVudCBpbmRleCB0dXBsZQorICovCitzdGF0aWMgaW5saW5l IHZvaWQKK19idF91cGRhdGVfc2NhbmtleV93aXRoX3R1cGxlKEJUU2Nhbkluc2VydCBpbnNlcnRL ZXksIFJlbGF0aW9uIGluZGV4UmVsLCBJbmRleFR1cGxlIGl0dXAsIGludCBudW1hdHRycykKK3sK KwlUdXBsZURlc2MJCWl0dXBkZXNjOworCWludAkJCQlpOworCVNjYW5LZXkJCQlzY2Fua2V5cyA9 IGluc2VydEtleS0+c2NhbmtleXM7CisKKwlpbnNlcnRLZXktPmtleXN6ID0gbnVtYXR0cnM7CisJ aXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGluZGV4UmVsKTsKKwlmb3IgKGkgPSAwOyBpIDwg bnVtYXR0cnM7IGkrKykKKwl7CisJCURhdHVtIGRhdHVtOworCQlib29sIG51bGw7CisJCWludCBm bGFnczsKKworCQlkYXR1bSA9IGluZGV4X2dldGF0dHIoaXR1cCwgaSArIDEsIGl0dXBkZXNjLCAm bnVsbCk7CisJCWZsYWdzID0gKG51bGwgPyBTS19JU05VTEwgOiAwKSB8CisJCQkJKGluZGV4UmVs LT5yZF9pbmRvcHRpb25baV0gPDwgU0tfQlRfSU5ET1BUSU9OX1NISUZUKTsKKwkJc2NhbmtleXNb aV0uc2tfZmxhZ3MgPSBmbGFnczsKKwkJc2NhbmtleXNbaV0uc2tfYXJndW1lbnQgPSBkYXR1bTsK Kwl9Cit9CisKKy8qIGNvcHkgdGhlIGVsZW1lbnRzIGltcG9ydGFudCB0byBhIHNraXAgZnJvbSBv bmUgaW5zZXJ0aW9uIHNrIHRvIGFub3RoZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX2J0X2Nv cHlfc2NhbmtleShCVFNjYW5JbnNlcnQgdG8sIEJUU2Nhbkluc2VydCBmcm9tLCBpbnQgbnVtYXR0 cnMpCit7CisJbWVtY3B5KHRvLT5zY2Fua2V5cywgZnJvbS0+c2NhbmtleXMsIHNpemVvZihTY2Fu S2V5RGF0YSkgKiAodW5zaWduZWQgbG9uZyludW1hdHRycyk7CisJdG8tPm5leHRrZXkgPSBmcm9t LT5uZXh0a2V5OworCXRvLT5rZXlzeiA9IG51bWF0dHJzOworfQorCisvKgorICogVXBkYXRlcyB0 aGUgZXhpc3Rpbmcgc2NhbmtleSBmb3Igc2tpcHBpbmcgdG8gdGhlIG5leHQgcHJlZml4CisgKiBh bHdheXNVc2VQcmVmaXggZGV0ZXJtaW5lcyBob3cgbWFueSBhdHRycyB0aGUgc2NhbmtleSB3aWxs IGhhdmUKKyAqIHdoZW4gdHJ1ZSwgaXQgd2lsbCBhbHdheXMgaGF2ZSBza2lwLT5wcmVmaXggbnVt YmVyIG9mIGF0dHJpYnV0ZXMsCisgKiBvdGhlcndpc2UsIHRoZSB2YWx1ZSBjYW4gYmUgbGVzcywg d2hpY2ggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb21wYXJpc29uCisgKiByZXN1bHQgd2l0 aCB0aGUgY3VycmVudCB0dXBsZS4KKyAqIGZvciBleGFtcGxlLCBhIFNFTEVDVCAqIEZST00gdGJs IFdIRVJFIGI8MiwgaW5kZXggKGEsYixjKSBhbmQgd2hlbiBza2lwcGluZyB3aXRoIHByZWZpeCBz aXplPTIKKyAqIGlmIHdlIGVuY291bnRlciB0aGUgdHVwbGUgKDEsMywxKSAtIHRoaXMgZG9lcyBu b3QgbWF0Y2ggdGhlIHF1YWwgYjwyLiBob3dldmVyLCB3ZSBhbHNvIGtub3cgdGhhdAorICogaXQg aXMgbm90IHVzZWZ1bCB0byBza2lwIHRvIGFueSBuZXh0IHF1YWwgd2l0aCBwcmVmaXg9MiAoZWcu ICgxLDQpKSwgYmVjYXVzZSB0aGF0IHdpbGwgZGVmaW5pdGVseSBub3QKKyAqIG1hdGNoIGVpdGhl ci4gSG93ZXZlciwgd2UgZG8gd2FudCB0byBza2lwIHRvIGVnLiAoMiwwKS4gVGhlcmVmb3JlLCB3 ZSBza2lwIG92ZXIgcHJlZml4PTEgaW4gdGhpcyBjYXNlLgorICoKKyAqIHRoZSBwcm92aWRlZCBp dHVwIG1heSBiZSBudWxsLiB0aGlzIGhhcHBlbnMgd2hlbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0 aGUgY3VycmVudCB0dXBsZSB0byB1cGRhdGUKKyAqIHRoZSBzY2Fua2V5LCBidXQgaW5zdGVhZCB3 YW50IHRvIHVzZSB0aGUgZXhpc3RpbmcgY3VyUG9zLnNraXBTY2FuS2V5IHRvIGZpbGwgY3VycmVu dFR1cGxlS2V5LiB0aGlzIGFjY291bnRzCisgKiBmb3Igc29tZSBlZGdlIGNhc2VzLgorICovCitz dGF0aWMgdm9pZAorX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX3ByZWZpeF9za2lwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJCQkJaW50IHByZWZpeCwg SW5kZXhUdXBsZSBpdHVwLCBTY2FuRGlyZWN0aW9uIHByZWZpeERpcikKK3sKKwlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTa2lwIHNraXAgPSBzby0+ c2tpcERhdGE7CisJLyogd2UgdXNlIHNraXAtPnByZWZpeCBpcyBhbHdheXNVc2VQcmVmaXggaXMg c2V0IG9yIGlmIHNraXAtPnByZWZpeCBpcyBzbWFsbGVyIHRoYW4gd2hhdGV2ZXIgdGhlCisJICog Y29tcGFyaXNvbiByZXN1bHQgcHJvdmlkZWQsIHN1Y2ggdGhhdCB3ZSBuZXZlciBza2lwIG1vcmUg dGhhbiBza2lwLT5wcmVmaXgKKwkgKi8KKwlpbnQgbnVtYXR0cnMgPSBwcmVmaXg7CisKKwlpZiAo aXR1cCAhPSBOVUxMKQorCXsKKwkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7 CisJCW1lbWNweShzby0+c2tpcERhdGEtPmN1clBvcy5za2lwVHVwbGUsIGl0dXAsIGl0dXBzeik7 CisKKwkJX2J0X3VwZGF0ZV9zY2Fua2V5X3dpdGhfdHVwbGUoJnNraXAtPmN1cnJlbnRUdXBsZUtl eSwgaW5kZXhSZWwsIChJbmRleFR1cGxlKXNvLT5za2lwRGF0YS0+Y3VyUG9zLnNraXBUdXBsZSwg bnVtYXR0cnMpOworCQlfYnRfY29weV9zY2Fua2V5KCZza2lwLT5jdXJQb3Muc2tpcFNjYW5LZXks ICZza2lwLT5jdXJyZW50VHVwbGVLZXksIG51bWF0dHJzKTsKKwl9CisJZWxzZQorCXsKKwkJc2tp cC0+Y3VyUG9zLnNraXBTY2FuS2V5LmtleXN6ID0gbnVtYXR0cnM7CisJCV9idF9jb3B5X3NjYW5r ZXkoJnNraXAtPmN1cnJlbnRUdXBsZUtleSwgJnNraXAtPmN1clBvcy5za2lwU2NhbktleSwgbnVt YXR0cnMpOworCX0KKwkvKiB1cGRhdGUgc3RyYXRlZ3kgZm9yIGxhc3QgYXR0cmlidXRlIGFzIHdl IHdpbGwgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSByZXN0IG9mIHRoZQorCSAqIHJlc3Qgb2Yg dGhlIGZsYWdzIChnb2JhY2spIHdoZW4gZG9pbmcgdGhlIGFjdHVhbCB0cmVlIHNlYXJjaAorCSAq LworCXNraXAtPmN1cnJlbnRUdXBsZUtleS5zY2Fua2V5c1tudW1hdHRycyAtIDFdLnNrX3N0cmF0 ZWd5ID0KKwkJCXNraXAtPmN1clBvcy5za2lwU2NhbktleS5zY2Fua2V5c1tudW1hdHRycyAtIDFd LnNrX3N0cmF0ZWd5ID0KKwkJCVNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQocHJlZml4RGlyKSA/IEJU R3JlYXRlclN0cmF0ZWd5TnVtYmVyIDogQlRMZXNzU3RyYXRlZ3lOdW1iZXI7Cit9CisKKy8qIHVw ZGF0ZSB0aGUgc2NhbmtleSBmb3Igc2tpcHBpbmcgdGhlICdleHRyYScgY29uZGl0aW9ucywgb3Bw b3J0dW5pdGllcworICogdGhhdCBhcmlzZSB3aGVuIHdlIGhhdmUganVzdCBza2lwcGVkIHRvIGEg bmV3IHByZWZpeCBhbmQgY2FuIHRyeSB0byBza2lwCisgKiB3aXRoaW4gdGhlIHByZWZpeCB0byB0 aGUgcmlnaHQgdHVwbGUgYnkgdXNpbmcgZXh0cmEgcXVhbHMgd2hlbiBhdmFpbGFibGUKKyAqCisg KiBAdG9kbyBhcyBhbiBvcHRpbWl6YXRpb24gaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIG9wdGlt aXplIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24KKyAqIGFuZCB0byBfYnRfc2tpcF91cGRhdGVfc2Nh bmtleV9mb3JfcHJlZml4X3NraXAgdG8gc29tZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0 CisgKiB3aWxsIG5lZWQgdG8gZG8gbGVzcyBjb3B5aW5nIG9mIGRhdGEuCisgKi8KK3ZvaWQKK19i dF9za2lwX3VwZGF0ZV9zY2Fua2V5X2Zvcl9leHRyYV9za2lwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg UmVsYXRpb24gaW5kZXhSZWwsIFNjYW5EaXJlY3Rpb24gY3VyRGlyLAorCQkJCQkJCQkJICAgU2Nh bkRpcmVjdGlvbiBwcmVmaXhEaXIsIGJvb2wgcHJpb3JpdGl6ZUVxdWFsLCBJbmRleFR1cGxlIGl0 dXApCit7CisJQlRTY2FuT3BhcXVlIAlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCVFNraXAgc2tpcCA9IHNvLT5za2lwRGF0YTsKKwlCVFNjYW5JbnNlcnQgdG9Db3B5OworCWlu dCBpLCBsZWZ0LCBsYXN0Tm9uVHVwbGUgPSBza2lwLT5wcmVmaXg7CisKKwkvKiBmaXJzdCBtYWtl IHN1cmUgdGhhdCBjdXJyZW50VHVwbGVLZXkgaXMgY29ycmVjdCBhdCBhbGwgdGltZXMgKi8KKwlf YnRfc2tpcF91cGRhdGVfc2NhbmtleV9mb3JfcHJlZml4X3NraXAoc2NhbiwgaW5kZXhSZWwsIHNr aXAtPnByZWZpeCwgaXR1cCwgcHJlZml4RGlyKTsKKwkvKiB0aGVuIGRvIHRoZSBhY3R1YWwgd29y ayB0byBzZXR1cCBjdXJQb3Muc2tpcFNjYW5LZXkgLSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdvcmsg dGhhdCBkZXBlbmRzIG9uIG92ZXJhbGxEaXIKKwkgKiAodGhvc2UgYXR0cmlidXRlcyBiZXR3ZWVu IGF0dHJpYnV0ZSBudW1iZXIgMSBhbmQgJ3ByZWZpeCcgaW5jbHVzaXZlKQorCSAqIGFuZCB3b3Jr IHRoYXQgZGVwZW5kcyBvbiBjdXJEaXIKKwkgKiAodGhvc2UgYXR0cmlidXRlcyBiZXR3ZWVuIGF0 dHJpYnV0ZSBudW1iZXIgJ3ByZWZpeCcgKyAxIGFuZCBmd2RTY2FuS2V5LmtleXN6IGluY2x1c2l2 ZSkKKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChwcmVmaXhEaXIpKQorCXsKKwkJ LyoKKwkJICogaWYgb3ZlcmFsbERpciBpcyBGb3J3YXJkLCB3ZSBuZWVkIHRvIGNob29zZSBiZXR3 ZWVuIGZ3ZFNjYW5LZXkgb3IKKwkJICogY3VycmVudFR1cGxlS2V5LiB3ZSBuZWVkIHRvIGNob29z ZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBvbmUgLQorCQkgKiBpbiBtb3N0IGNhc2VzIHRoaXMgbWVh bnMgY2hvb3NpbmcgZWcuIGE+NSBvdmVyIGE9MiB3aGVuIHNjYW5uaW5nIGZvcndhcmQsCisJCSAq IHVubGVzcyBwcmlvcml0aXplRXF1YWwgaXMgc2V0LiB0aGlzIGlzIGRvbmUgZm9yIGNlcnRhaW4g c3BlY2lhbCBjYXNlcworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNraXAtPnByZWZpeDsgaSsr KQorCQl7CisJCQlTY2FuS2V5IHNjYW5rZXkgPSAmc2tpcC0+ZndkU2NhbktleS5zY2Fua2V5c1tp XTsKKwkJCVNjYW5LZXkgc2NhbmtleUl0ZW0gPSAmc2tpcC0+Y3VycmVudFR1cGxlS2V5LnNjYW5r ZXlzW2ldOworCQkJaWYgKHNjYW5rZXktPnNrX2F0dG5vICE9IDAgJiYgKF9idF9jb21wYXJlX29u ZShzY2Fua2V5LCBzY2Fua2V5SXRlbS0+c2tfYXJndW1lbnQsIHNjYW5rZXlJdGVtLT5za19mbGFn cyAmIFNLX0lTTlVMTCkgPiAwCisJCQkJCQkJCQkJICAgfHwgKHByaW9yaXRpemVFcXVhbCAmJiBz Y2Fua2V5LT5za19zdHJhdGVneSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpKSkKKwkJCXsKKwkJ CQltZW1jcHkoc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNjYW5rZXlzICsgaSwgc2NhbmtleSwg c2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJCQkJbGFzdE5vblR1cGxlID0gaTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlpZiAobGFzdE5vblR1cGxlIDwgaSkKKwkJCQkJYnJlYWs7CisJCQkJbWVt Y3B5KHNraXAtPmN1clBvcy5za2lwU2NhbktleS5zY2Fua2V5cyArIGksIHNjYW5rZXlJdGVtLCBz aXplb2YoU2NhbktleURhdGEpKTsKKwkJCX0KKwkJCS8qIGZvciBub3cgY2hvb3NlIGVxdWFsIGhl cmUgLSBpdCBjb3VsZCBhY3R1YWxseSBiZSBpbXByb3ZlZCBhIGJpdCBAdG9kbyBieSBjaG9vc2lu ZyB0aGUgc3RyYXRlZ3kKKwkJCSAqIGZyb20gdGhlIHNjYW5rZXlzLCBidXQgaXQgZG9lc24ndCBt YXR0ZXIgYSBsb3QKKwkJCSAqLworCQkJc2tpcC0+Y3VyUG9zLnNraXBTY2FuS2V5LnNjYW5rZXlz W2ldLnNrX3N0cmF0ZWd5ID0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOworCQl9CisJfQorCWVsc2UK Kwl7CisJCS8qIHNpbWlsYXIgZm9yIGJhY2t3YXJkIGJ1dCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb24g Ki8KKwkJZm9yIChpID0gMDsgaSA8IHNraXAtPnByZWZpeDsgaSsrKQorCQl7CisJCQlTY2FuS2V5 IHNjYW5rZXkgPSAmc2tpcC0+YndkU2NhbktleS5zY2Fua2V5c1tpXTsKKwkJCVNjYW5LZXkgc2Nh bmtleUl0ZW0gPSAmc2tpcC0+Y3VycmVudFR1cGxlS2V5LnNjYW5rZXlzW2ldOworCQkJaWYgKHNj YW5rZXktPnNrX2F0dG5vICE9IDAgJiYgKF9idF9jb21wYXJlX29uZShzY2Fua2V5LCBzY2Fua2V5 SXRlbS0+c2tfYXJndW1lbnQsIHNjYW5rZXlJdGVtLT5za19mbGFncyAmIFNLX0lTTlVMTCkgPCAw CisJCQkJCQkJCQkJICAgfHwgKHByaW9yaXRpemVFcXVhbCAmJiBzY2Fua2V5LT5za19zdHJhdGVn eSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpKSkKKwkJCXsKKwkJCQltZW1jcHkoc2tpcC0+Y3Vy UG9zLnNraXBTY2FuS2V5LnNjYW5rZXlzICsgaSwgc2NhbmtleSwgc2l6ZW9mKFNjYW5LZXlEYXRh KSk7CisJCQkJbGFzdE5vblR1cGxlID0gaTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAo bGFzdE5vblR1cGxlIDwgaSkKKwkJCQkJYnJlYWs7CisJCQkJbWVtY3B5KHNraXAtPmN1clBvcy5z a2lwU2NhbktleS5zY2Fua2V5cyArIGksIHNjYW5rZXlJdGVtLCBzaXplb2YoU2NhbktleURhdGEp KTsKKwkJCX0KKwkJCXNraXAtPmN1clBvcy5za2lwU2NhbktleS5zY2Fua2V5c1tpXS5za19zdHJh dGVneSA9IEJURXF1YWxTdHJhdGVneU51bWJlcjsKKwkJfQorCX0KKworCS8qCisJICogdGhlIHJl bWFpbmluZyBrZXlzIGFyZSB0aGUgcXVhbHMgYWZ0ZXIgdGhlIHByZWZpeAorCSAqLworCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGN1ckRpcikpCisJCXRvQ29weSA9ICZza2lwLT5md2RTY2Fu S2V5OworCWVsc2UKKwkJdG9Db3B5ID0gJnNraXAtPmJ3ZFNjYW5LZXk7CisKKwlpZiAobGFzdE5v blR1cGxlID49IHNraXAtPnByZWZpeCAtIDEpCisJeworCQlsZWZ0ID0gdG9Db3B5LT5rZXlzeiAt IHNraXAtPnByZWZpeDsKKwkJaWYgKGxlZnQgPiAwKQorCQl7CisJCQltZW1jcHkoc2tpcC0+Y3Vy UG9zLnNraXBTY2FuS2V5LnNjYW5rZXlzICsgc2tpcC0+cHJlZml4LCB0b0NvcHktPnNjYW5rZXlz ICsgaSwgc2l6ZW9mKFNjYW5LZXlEYXRhKSAqICh1bnNpZ25lZCBsb25nKWxlZnQpOworCQl9CisJ CXNraXAtPmN1clBvcy5za2lwU2NhbktleS5rZXlzeiA9IHRvQ29weS0+a2V5c3o7CisJfQorCWVs c2UKKwl7CisJCXNraXAtPmN1clBvcy5za2lwU2NhbktleS5rZXlzeiA9IGxhc3ROb25UdXBsZSAr IDE7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwppbmRleCBkYzIyMDE0NmZk Li43OGNlYjZhZWU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNv cnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwpAQCAtNTYwLDcg KzU2MCw3IEBAIF9idF9sZWFmYnVpbGQoQlRTcG9vbCAqYnRzcG9vbCwgQlRTcG9vbCAqYnRzcG9v bDIpCiAKIAl3c3RhdGUuaGVhcCA9IGJ0c3Bvb2wtPmhlYXA7CiAJd3N0YXRlLmluZGV4ID0gYnRz cG9vbC0+aW5kZXg7Ci0Jd3N0YXRlLmluc2tleSA9IF9idF9ta3NjYW5rZXkod3N0YXRlLmluZGV4 LCBOVUxMKTsKKwl3c3RhdGUuaW5za2V5ID0gX2J0X21rc2NhbmtleSh3c3RhdGUuaW5kZXgsIE5V TEwsIE5VTEwpOwogCS8qIF9idF9ta3NjYW5rZXkoKSB3b24ndCBzZXQgYWxsZXF1YWxpbWFnZSB3 aXRob3V0IG1ldGFwYWdlICovCiAJd3N0YXRlLmluc2tleS0+YWxsZXF1YWxpbWFnZSA9IF9idF9h bGxlcXVhbGltYWdlKHdzdGF0ZS5pbmRleCwgdHJ1ZSk7CiAJd3N0YXRlLmJ0d3NfdXNlX3dhbCA9 IFJlbGF0aW9uTmVlZHNXQUwod3N0YXRlLmluZGV4KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 dXRpbHMuYwppbmRleCBlZDY3ODYzYzU2Li5lOTE2MzBiMDUwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jCkBAIC00OSwxMCArNDksMTAgQEAgc3RhdGljIGJvb2wgX2J0X2NvbXBh cmVfc2NhbmtleV9hcmdzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBvcCwKIAkJCQkJCQkJ CSBTY2FuS2V5IGxlZnRhcmcsIFNjYW5LZXkgcmlnaHRhcmcsCiAJCQkJCQkJCQkgYm9vbCAqcmVz dWx0KTsKIHN0YXRpYyBib29sIF9idF9maXhfc2NhbmtleV9zdHJhdGVneShTY2FuS2V5IHNrZXks IGludDE2ICppbmRvcHRpb24pOwotc3RhdGljIHZvaWQgX2J0X21hcmtfc2NhbmtleV9yZXF1aXJl ZChTY2FuS2V5IHNrZXkpOworc3RhdGljIHZvaWQgX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChT Y2FuS2V5IHNrZXksIGludCBmb3J3YXJkUmVxRmxhZywgaW50IGJhY2t3YXJkUmVxRmxhZyk7CiBz dGF0aWMgYm9vbCBfYnRfY2hlY2tfcm93Y29tcGFyZShTY2FuS2V5IHNrZXksCiAJCQkJCQkJCSBJ bmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsIFR1cGxlRGVzYyB0dXBkZXNjLAotCQkJCQkJ CQkgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVlc2Nhbik7CisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2FuLCBpbnQgKnByZWZpeHNraXBpbmRleCk7 CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0 bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBf a2V5KTsKIApAQCAtODcsOSArODcsOCBAQCBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJlbGF0 aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKICAqCQlmaWVsZCB0aGVtc2VsdmVzLgogICov CiBCVFNjYW5JbnNlcnQKLV9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0 dXApCitfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwLCBCVFNjYW5J bnNlcnQga2V5KQogewotCUJUU2Nhbkluc2VydCBrZXk7CiAJU2NhbktleQkJc2tleTsKIAlUdXBs ZURlc2MJaXR1cGRlc2M7CiAJaW50CQkJaW5kbmtleWF0dHM7CkBAIC0xMDksOCArMTA4LDEwIEBA IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApCiAJICogVHJ1bmNh dGVkIGF0dHJpYnV0ZXMgYW5kIG5vbi1rZXkgYXR0cmlidXRlcyBhcmUgb21pdHRlZCBmcm9tIHRo ZSBmaW5hbAogCSAqIHNjYW4ga2V5LgogCSAqLwotCWtleSA9IHBhbGxvYyhvZmZzZXRvZihCVFNj YW5JbnNlcnREYXRhLCBzY2Fua2V5cykgKwotCQkJCSBzaXplb2YoU2NhbktleURhdGEpICogaW5k bmtleWF0dHMpOworCWlmIChrZXkgPT0gTlVMTCkKKwkJa2V5ID0gcGFsbG9jKG9mZnNldG9mKEJU U2Nhbkluc2VydERhdGEsIHNjYW5rZXlzKSArCisJCQkJCSBzaXplb2YoU2NhbktleURhdGEpICog aW5kbmtleWF0dHMpOworCiAJaWYgKGl0dXApCiAJCV9idF9tZXRhdmVyc2lvbihyZWwsICZrZXkt PmhlYXBrZXlzcGFjZSwgJmtleS0+YWxsZXF1YWxpbWFnZSk7CiAJZWxzZQpAQCAtMTU1LDcgKzE1 Niw3IEBAIF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApCiAJCVNj YW5LZXlFbnRyeUluaXRpYWxpemVXaXRoSW5mbygmc2tleVtpXSwKIAkJCQkJCQkJCSAgIGZsYWdz LAogCQkJCQkJCQkJICAgKEF0dHJOdW1iZXIpIChpICsgMSksCi0JCQkJCQkJCQkgICBJbnZhbGlk U3RyYXRlZ3ksCisJCQkJCQkJCQkgICBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCiAJCQkJCQkJCQkg ICBJbnZhbGlkT2lkLAogCQkJCQkJCQkJICAgcmVsLT5yZF9pbmRjb2xsYXRpb25baV0sCiAJCQkJ CQkJCQkgICBwcm9jaW5mbywKQEAgLTc0NSw3ICs3NDYsNyBAQCBfYnRfcHJlcHJvY2Vzc19rZXlz KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpbnQJCQludW1iZXJPZktleXMgPSBzY2FuLT5udW1iZXJP ZktleXM7CiAJaW50MTYJICAgKmluZG9wdGlvbiA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2lu ZG9wdGlvbjsKIAlpbnQJCQluZXdfbnVtYmVyT2ZLZXlzOwotCWludAkJCW51bWJlck9mRXF1YWxD b2xzOworCWludAkJCW51bWJlck9mRXF1YWxDb2xzLCBudW1iZXJPZkVxdWFsQ29sc1NpbmNlUHJl Zml4OwogCVNjYW5LZXkJCWlua2V5czsKIAlTY2FuS2V5CQlvdXRrZXlzOwogCVNjYW5LZXkJCWN1 cjsKQEAgLTc1NCw2ICs3NTUsNyBAQCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlpbnQJCQlpLAogCQkJCWo7CiAJQXR0ck51bWJlcglhdHRubzsKKwlpbnQJCQlwcmVm aXggPSAwOwogCiAJLyogaW5pdGlhbGl6ZSByZXN1bHQgdmFyaWFibGVzICovCiAJc28tPnF1YWxf b2sgPSB0cnVlOwpAQCAtNzYyLDYgKzc2NCwxMSBAQCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAlpZiAobnVtYmVyT2ZLZXlzIDwgMSkKIAkJcmV0dXJuOwkJCQkJLyog ZG9uZSBpZiBxdWFsLWxlc3Mgc2NhbiAqLwogCisJaWYgKF9idF9za2lwX2VuYWJsZWQoc28pKQor CXsKKwkJcHJlZml4ID0gc28tPnNraXBEYXRhLT5wcmVmaXg7CisJfQorCiAJLyoKIAkgKiBSZWFk IHNvLT5hcnJheUtleURhdGEgaWYgYXJyYXkga2V5cyBhcmUgcHJlc2VudCwgZWxzZSBzY2FuLT5r ZXlEYXRhCiAJICovCkBAIC03ODYsNyArNzkzLDkgQEAgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRl eFNjYW5EZXNjIHNjYW4pCiAJCXNvLT5udW1iZXJPZktleXMgPSAxOwogCQkvKiBXZSBjYW4gbWFy ayB0aGUgcXVhbCBhcyByZXF1aXJlZCBpZiBpdCdzIGZvciBmaXJzdCBpbmRleCBjb2wgKi8KIAkJ aWYgKGN1ci0+c2tfYXR0bm8gPT0gMSkKLQkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0 a2V5cyk7CisJCQlfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKG91dGtleXMsIFNLX0JUX1JFUUZX RCwgU0tfQlRfUkVRQktXRCk7CisJCWlmIChjdXItPnNrX2F0dG5vIDw9IHByZWZpeCArIDEpCisJ CQlfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKG91dGtleXMsIFNLX0JUX1JFUVNLSVBGV0QsIFNL X0JUX1JFUVNLSVBCS1dEKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzk1LDYgKzgwNCw4IEBAIF9i dF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCSAqLwogCW5ld19udW1iZXJP ZktleXMgPSAwOwogCW51bWJlck9mRXF1YWxDb2xzID0gMDsKKwludW1iZXJPZkVxdWFsQ29sc1Np bmNlUHJlZml4ID0gMDsKKwogCiAJLyoKIAkgKiBJbml0aWFsaXplIGZvciBwcm9jZXNzaW5nIG9m IGtleXMgZm9yIGF0dHIgMS4KQEAgLTgzMCw2ICs4NDEsOCBAQCBfYnRfcHJlcHJvY2Vzc19rZXlz KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJaWYgKGkgPT0gbnVtYmVyT2ZLZXlzIHx8IGN1ci0+c2tf YXR0bm8gIT0gYXR0bm8pCiAJCXsKIAkJCWludAkJCXByaW9yTnVtYmVyT2ZFcXVhbENvbHMgPSBu dW1iZXJPZkVxdWFsQ29sczsKKwkJCWludAkJCXByaW9yTnVtYmVyT2ZFcXVhbENvbHNTaW5jZVBy ZWZpeCA9IG51bWJlck9mRXF1YWxDb2xzU2luY2VQcmVmaXg7CisKIAogCQkJLyogY2hlY2sgaW5w dXQga2V5cyBhcmUgY29ycmVjdGx5IG9yZGVyZWQgKi8KIAkJCWlmIChpIDwgbnVtYmVyT2ZLZXlz ICYmIGN1ci0+c2tfYXR0bm8gPCBhdHRubykKQEAgLTg4MCw2ICs4OTMsOCBAQCBfYnRfcHJlcHJv Y2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQl9CiAJCQkJLyogdHJhY2sgbnVtYmVy IG9mIGF0dHJzIGZvciB3aGljaCB3ZSBoYXZlICI9IiBrZXlzICovCiAJCQkJbnVtYmVyT2ZFcXVh bENvbHMrKzsKKwkJCQlpZiAoYXR0bm8gPiBwcmVmaXgpCisJCQkJCW51bWJlck9mRXF1YWxDb2xz U2luY2VQcmVmaXgrKzsKIAkJCX0KIAogCQkJLyogdHJ5IHRvIGtlZXAgb25seSBvbmUgb2YgPCwg PD0gKi8KQEAgLTkyOSw3ICs5NDQsOSBAQCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRl c2Mgc2NhbikKIAogCQkJCQltZW1jcHkob3V0a2V5LCB4Zm9ybVtqXSwgc2l6ZW9mKFNjYW5LZXlE YXRhKSk7CiAJCQkJCWlmIChwcmlvck51bWJlck9mRXF1YWxDb2xzID09IGF0dG5vIC0gMSkKLQkJ CQkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5KTsKKwkJCQkJCV9idF9tYXJrX3Nj YW5rZXlfcmVxdWlyZWQob3V0a2V5LCBTS19CVF9SRVFGV0QsIFNLX0JUX1JFUUJLV0QpOworCQkJ CQlpZiAoYXR0bm8gPD0gcHJlZml4IHx8IHByaW9yTnVtYmVyT2ZFcXVhbENvbHNTaW5jZVByZWZp eCA9PSBhdHRubyAtIHByZWZpeCAtIDEpCisJCQkJCQlfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVk KG91dGtleSwgU0tfQlRfUkVRU0tJUEZXRCwgU0tfQlRfUkVRU0tJUEJLV0QpOwogCQkJCX0KIAkJ CX0KIApAQCAtOTU0LDcgKzk3MSw5IEBAIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVz YyBzY2FuKQogCiAJCQltZW1jcHkob3V0a2V5LCBjdXIsIHNpemVvZihTY2FuS2V5RGF0YSkpOwog CQkJaWYgKG51bWJlck9mRXF1YWxDb2xzID09IGF0dG5vIC0gMSkKLQkJCQlfYnRfbWFya19zY2Fu a2V5X3JlcXVpcmVkKG91dGtleSk7CisJCQkJX2J0X21hcmtfc2NhbmtleV9yZXF1aXJlZChvdXRr ZXksIFNLX0JUX1JFUUZXRCwgU0tfQlRfUkVRQktXRCk7CisJCQlpZiAoYXR0bm8gPD0gcHJlZml4 IHx8IG51bWJlck9mRXF1YWxDb2xzU2luY2VQcmVmaXggPT0gYXR0bm8gLSBwcmVmaXggLSAxKQor CQkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5LCBTS19CVF9SRVFTS0lQRldELCBT S19CVF9SRVFTS0lQQktXRCk7CiAKIAkJCS8qCiAJCQkgKiBXZSBkb24ndCBzdXBwb3J0IFJvd0Nv bXBhcmUgdXNpbmcgZXF1YWxpdHk7IHN1Y2ggYSBxdWFsIHdvdWxkCkBAIC05OTcsNyArMTAxNiw5 IEBAIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJCQkJbWVtY3B5 KG91dGtleSwgY3VyLCBzaXplb2YoU2NhbktleURhdGEpKTsKIAkJCQlpZiAobnVtYmVyT2ZFcXVh bENvbHMgPT0gYXR0bm8gLSAxKQotCQkJCQlfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKG91dGtl eSk7CisJCQkJCV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQob3V0a2V5LCBTS19CVF9SRVFGV0Qs IFNLX0JUX1JFUUJLV0QpOworCQkJCWlmIChhdHRubyA8PSBwcmVmaXggfHwgbnVtYmVyT2ZFcXVh bENvbHNTaW5jZVByZWZpeCA9PSBhdHRubyAtIHByZWZpeCAtIDEpCisJCQkJCV9idF9tYXJrX3Nj YW5rZXlfcmVxdWlyZWQob3V0a2V5LCBTS19CVF9SRVFTS0lQRldELCBTS19CVF9SRVFTS0lQQktX RCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMjk1LDcgKzEzMTYsNyBAQCBfYnRfZml4X3NjYW5rZXlf c3RyYXRlZ3koU2NhbktleSBza2V5LCBpbnQxNiAqaW5kb3B0aW9uKQogICogYW55d2F5IG9uIGEg cmVzY2FuLiAgU29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uIHRob3VnaC4KICAqLwogc3RhdGlj IHZvaWQKLV9idF9tYXJrX3NjYW5rZXlfcmVxdWlyZWQoU2NhbktleSBza2V5KQorX2J0X21hcmtf c2NhbmtleV9yZXF1aXJlZChTY2FuS2V5IHNrZXksIGludCBmb3J3YXJkUmVxRmxhZywgaW50IGJh Y2t3YXJkUmVxRmxhZykKIHsKIAlpbnQJCQlhZGRmbGFnczsKIApAQCAtMTMwMywxNCArMTMyNCwx NCBAQCBfYnRfbWFya19zY2Fua2V5X3JlcXVpcmVkKFNjYW5LZXkgc2tleSkKIAl7CiAJCWNhc2Ug QlRMZXNzU3RyYXRlZ3lOdW1iZXI6CiAJCWNhc2UgQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjoK LQkJCWFkZGZsYWdzID0gU0tfQlRfUkVRRldEOworCQkJYWRkZmxhZ3MgPSBmb3J3YXJkUmVxRmxh ZzsKIAkJCWJyZWFrOwogCQljYXNlIEJURXF1YWxTdHJhdGVneU51bWJlcjoKLQkJCWFkZGZsYWdz ID0gU0tfQlRfUkVRRldEIHwgU0tfQlRfUkVRQktXRDsKKwkJCWFkZGZsYWdzID0gZm9yd2FyZFJl cUZsYWcgfCBiYWNrd2FyZFJlcUZsYWc7CiAJCQlicmVhazsKIAkJY2FzZSBCVEdyZWF0ZXJFcXVh bFN0cmF0ZWd5TnVtYmVyOgogCQljYXNlIEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyOgotCQkJYWRk ZmxhZ3MgPSBTS19CVF9SRVFCS1dEOworCQkJYWRkZmxhZ3MgPSBiYWNrd2FyZFJlcUZsYWc7CiAJ CQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU3RyYXRl Z3lOdW1iZXI6ICVkIiwKQEAgLTEzNTMsMTcgKzEzNzQsMjIgQEAgX2J0X21hcmtfc2NhbmtleV9y ZXF1aXJlZChTY2FuS2V5IHNrZXkpCiAgKi8KIGJvb2wKIF9idF9jaGVja2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCi0JCQkgIFNjYW5EaXJl Y3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4pCisJCQkgIFNjYW5EaXJlY3Rpb24gZGlyLCBi b29sICpjb250aW51ZXNjYW4sIGludCAqcHJlZml4U2tpcEluZGV4KQogewogCVR1cGxlRGVzYwl0 dXBkZXNjOwogCUJUU2Nhbk9wYXF1ZSBzbzsKIAlpbnQJCQlrZXlzejsKIAlpbnQJCQlpa2V5Owog CVNjYW5LZXkJCWtleTsKKwlpbnQgcGZ4OworCisJaWYgKHByZWZpeFNraXBJbmRleCA9PSBOVUxM KQorCQlwcmVmaXhTa2lwSW5kZXggPSAmcGZ4OwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0 cyh0dXBsZSwgc2Nhbi0+aW5kZXhSZWxhdGlvbikgPT0gdHVwbmF0dHMpOwogCiAJKmNvbnRpbnVl c2NhbiA9IHRydWU7CQkvKiBkZWZhdWx0IGFzc3VtcHRpb24gKi8KKwkqcHJlZml4U2tpcEluZGV4 ID0gLTE7CiAKIAl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihzY2FuLT5pbmRleFJlbGF0aW9u KTsKIAlzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTEzOTIsNyArMTQxOCw3 IEBAIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBp bnQgdHVwbmF0dHMsCiAJCWlmIChrZXktPnNrX2ZsYWdzICYgU0tfUk9XX0hFQURFUikKIAkJewog CQkJaWYgKF9idF9jaGVja19yb3djb21wYXJlKGtleSwgdHVwbGUsIHR1cG5hdHRzLCB0dXBkZXNj LCBkaXIsCi0JCQkJCQkJCQkgY29udGludWVzY2FuKSkKKwkJCQkJCQkJCSBjb250aW51ZXNjYW4s IHByZWZpeFNraXBJbmRleCkpCiAJCQkJY29udGludWU7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0K QEAgLTE0MjksNiArMTQ1NSwxMyBAQCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAogCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQoZGlyKSkKIAkJCQkqY29udGludWVzY2FuID0gZmFsc2U7CiAKKwkJCWlmICgoa2V5LT5z a19mbGFncyAmIFNLX0JUX1JFUVNLSVBGV0QpICYmCisJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQorCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsKKwkJCWVs c2UgaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRU0tJUEJLV0QpICYmCisJCQkJCSBTY2Fu RGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBrZXktPnNr X2F0dG5vIC0gMTsKKwogCQkJLyoKIAkJCSAqIEluIGFueSBjYXNlLCB0aGlzIGluZGV4dHVwbGUg ZG9lc24ndCBtYXRjaCB0aGUgcXVhbC4KIAkJCSAqLwpAQCAtMTQ1Miw2ICsxNDg1LDEwIEBAIF9i dF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVw bmF0dHMsCiAJCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgKFNLX0JUX1JFUUZXRCB8IFNLX0JUX1JF UUJLV0QpKSAmJgogCQkJCQlTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQogCQkJCQkqY29u dGludWVzY2FuID0gZmFsc2U7CisKKwkJCQlpZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVR U0tJUEZXRCB8IFNLX0JUX1JFUVNLSVBCS1dEKSkgJiYKKwkJCQkJU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQoZGlyKSkKKwkJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOwog CQkJfQogCQkJZWxzZQogCQkJewpAQCAtMTQ2OCw2ICsxNTA1LDkgQEAgX2J0X2NoZWNra2V5cyhJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCQlp ZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRRldEIHwgU0tfQlRfUkVRQktXRCkpICYmCiAJ CQkJCVNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCQkJKmNvbnRpbnVlc2NhbiA9IGZh bHNlOworCQkJCWlmICgoa2V5LT5za19mbGFncyAmIChTS19CVF9SRVFTS0lQRldEIHwgU0tfQlRf UkVRU0tJUEJLV0QpKSAmJgorCQkJCQkJCQkJU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkK KwkJCQkJCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsKIAkJCX0KIAog CQkJLyoKQEAgLTE0OTgsNiArMTUzOCwxMyBAQCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAogCQkJCQkgU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSkKIAkJCQkqY29udGludWVzY2FuID0gZmFsc2U7CiAKKwkJCWlmICgo a2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBGV0QpICYmCisJCQkJU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpKQorCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsK KwkJCWVsc2UgaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRU0tJUEJLV0QpICYmCisJCQkJ CSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKQorCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBr ZXktPnNrX2F0dG5vIC0gMTsKKwogCQkJLyoKIAkJCSAqIEluIGFueSBjYXNlLCB0aGlzIGluZGV4 dHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgcXVhbC4KIAkJCSAqLwpAQCAtMTUwOSw2ICsxNTU2LDIy OCBAQCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwg aW50IHR1cG5hdHRzLAogCXJldHVybiB0cnVlOwogfQogCitib29sCitfYnRfY2hlY2trZXlzX3Ro cmVld2F5KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRz LAorCQkJICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2FuLCBpbnQgKnByZWZp eFNraXBJbmRleCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlCVFNjYW5PcGFxdWUgc287CisJ aW50CQkJa2V5c3o7CisJaW50CQkJaWtleTsKKwlTY2FuS2V5CQlrZXk7CisJaW50IHBmeDsKKwlC VFNjYW5JbnNlcnQga2V5czsKKwlib29sIG92ZXJhbGxtYXRjaCA9IHRydWU7CisKKwlpZiAocHJl Zml4U2tpcEluZGV4ID09IE5VTEwpCisJCXByZWZpeFNraXBJbmRleCA9ICZwZng7CisKKwlBc3Nl cnQoQlRyZWVUdXBsZUdldE5BdHRzKHR1cGxlLCBzY2FuLT5pbmRleFJlbGF0aW9uKSA9PSB0dXBu YXR0cyk7CisKKwkqY29udGludWVzY2FuID0gdHJ1ZTsJCS8qIGRlZmF1bHQgYXNzdW1wdGlvbiAq LworCSpwcmVmaXhTa2lwSW5kZXggPSAtMTsKKworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KHNjYW4tPmluZGV4UmVsYXRpb24pOworCXNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWtleXMgPSAmc28tPnNraXBE YXRhLT5id2RTY2FuS2V5OworCWVsc2UKKwkJa2V5cyA9ICZzby0+c2tpcERhdGEtPmZ3ZFNjYW5L ZXk7CisKKwlrZXlzeiA9IGtleXMtPmtleXN6OworCisJZm9yIChrZXkgPSBrZXlzLT5zY2Fua2V5 cywgaWtleSA9IDA7IGlrZXkgPCBrZXlzejsga2V5KyssIGlrZXkrKykKKwl7CisJCURhdHVtCQlk YXR1bTsKKwkJYm9vbAkJaXNOdWxsOworCQlpbnQJCWNtcHJlc3VsdDsKKworCQlpZiAoa2V5LT5z a19hdHRubyA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGtleS0+c2tfYXR0bm8gPiB0dXBu YXR0cykKKwkJeworCQkJLyoKKwkJCSAqIFRoaXMgYXR0cmlidXRlIGlzIHRydW5jYXRlZCAobXVz dCBiZSBoaWdoIGtleSkuICBUaGUgdmFsdWUgZm9yCisJCQkgKiB0aGlzIGF0dHJpYnV0ZSBpbiB0 aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlIG9uIHRoZSBwYWdlIHRvIHRoZQorCQkJICogcmlnaHQg Y291bGQgYmUgYW55IHBvc3NpYmxlIHZhbHVlLiAgQXNzdW1lIHRoYXQgdHJ1bmNhdGVkCisJCQkg KiBhdHRyaWJ1dGUgcGFzc2VzIHRoZSBxdWFsLgorCQkJICovCisJCQlBc3NlcnQoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogcm93LWNvbXBh cmlzb24ga2V5cyBuZWVkIHNwZWNpYWwgcHJvY2Vzc2luZyAqLworCQlBc3NlcnQoKGtleS0+c2tf ZmxhZ3MgJiBTS19ST1dfSEVBREVSKSA9PSAwKTsKKworCQlkYXR1bSA9IGluZGV4X2dldGF0dHIo dHVwbGUsCisJCQkJCQkJICBrZXktPnNrX2F0dG5vLAorCQkJCQkJCSAgdHVwZGVzYywKKwkJCQkJ CQkgICZpc051bGwpOworCisJCWlmIChrZXktPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQorCQl7CisJ CQkvKiBIYW5kbGUgSVMgTlVMTC9OT1QgTlVMTCB0ZXN0cyAqLworCQkJaWYgKGtleS0+c2tfZmxh Z3MgJiBTS19TRUFSQ0hOVUxMKQorCQkJeworCQkJCWlmIChpc051bGwpCisJCQkJCWNvbnRpbnVl OwkvKiB0dXBsZSBzYXRpc2ZpZXMgdGhpcyBxdWFsICovCisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJQXNzZXJ0KGtleS0+c2tfZmxhZ3MgJiBTS19TRUFSQ0hOT1ROVUxMKTsKKwkJCQlpZiAoIWlz TnVsbCkKKwkJCQkJY29udGludWU7CS8qIHR1cGxlIHNhdGlzZmllcyB0aGlzIHF1YWwgKi8KKwkJ CX0KKworCQkJLyoKKwkJCSAqIFR1cGxlIGZhaWxzIHRoaXMgcXVhbC4gIElmIGl0J3MgYSByZXF1 aXJlZCBxdWFsIGZvciB0aGUgY3VycmVudAorCQkJICogc2NhbiBkaXJlY3Rpb24sIHRoZW4gd2Ug Y2FuIGNvbmNsdWRlIG5vIGZ1cnRoZXIgdHVwbGVzIHdpbGwKKwkJCSAqIHBhc3MsIGVpdGhlci4K KwkJCSAqLworCQkJaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRRldEKSAmJgorCQkJCVNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJCXsKKwkJCQkqY29udGludWVzY2FuID0gZmFs c2U7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZWxzZSBpZiAoKGtleS0+c2tfZmxhZ3Mg JiBTS19CVF9SRVFCS1dEKSAmJgorCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkK KwkJCXsKKwkJCQkqY29udGludWVzY2FuID0gZmFsc2U7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJ fQorCisJCQlpZiAoKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQRldEKSAmJgorCQkJCVNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJCXsKKwkJCQkqcHJlZml4U2tpcEluZGV4ID0g a2V5LT5za19hdHRubyAtIDE7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJZWxzZSBpZiAo KGtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQQktXRCkgJiYKKwkJCQkJIFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkKGRpcikpCisJCQl7CisJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tf YXR0bm8gLSAxOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJb3ZlcmFsbG1hdGNoID0g ZmFsc2U7CisJCX0KKworCQlpZiAoaXNOdWxsKQorCQl7CisJCQlpZiAoa2V5LT5za19mbGFncyAm IFNLX0JUX05VTExTX0ZJUlNUKQorCQkJeworCQkJCS8qCisJCQkJICogU2luY2UgTlVMTHMgYXJl IHNvcnRlZCBiZWZvcmUgbm9uLU5VTExzLCB3ZSBrbm93IHdlIGhhdmUKKwkJCQkgKiByZWFjaGVk IHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB0aGlzCisJCQkJICog aW5kZXggYXR0ci4gIE9uIGEgYmFja3dhcmQgc2Nhbiwgd2UgY2FuIHN0b3AgaWYgdGhpcyBxdWFs CisJCQkJICogaXMgb25lIG9mIHRoZSAibXVzdCBtYXRjaCIgc3Vic2V0LiAgV2UgY2FuIHN0b3Ag cmVnYXJkbGVzcworCQkJCSAqIG9mIHdoZXRoZXIgdGhlIHF1YWwgaXMgPiBvciA8LCBzbyBsb25n IGFzIGl0J3MgcmVxdWlyZWQsCisJCQkJICogYmVjYXVzZSBpdCdzIG5vdCBwb3NzaWJsZSBmb3Ig YW55IGZ1dHVyZSB0dXBsZXMgdG8gcGFzcy4gT24KKwkJCQkgKiBhIGZvcndhcmQgc2NhbiwgaG93 ZXZlciwgd2UgbXVzdCBrZWVwIGdvaW5nLCBiZWNhdXNlIHdlIG1heQorCQkJCSAqIGhhdmUgaW5p dGlhbGx5IHBvc2l0aW9uZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBpbmRleC4KKwkJCQkgKi8KKwkJ CQlpZiAoKGtleS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRRldEIHwgU0tfQlRfUkVRQktXRCkpICYm CisJCQkJCVNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCisJCQkJeworCQkJCQkqY29udGlu dWVzY2FuID0gZmFsc2U7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisKKwkJCQlpZiAoKGtl eS0+c2tfZmxhZ3MgJiAoU0tfQlRfUkVRU0tJUEZXRCB8IFNLX0JUX1JFUVNLSVBCS1dEKSkgJiYK KwkJCQkJU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCQl7CisJCQkJCSpwcmVmaXhT a2lwSW5kZXggPSBrZXktPnNrX2F0dG5vIC0gMTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0K KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFNpbmNlIE5VTExzIGFyZSBzb3J0 ZWQgYWZ0ZXIgbm9uLU5VTExzLCB3ZSBrbm93IHdlIGhhdmUKKwkJCQkgKiByZWFjaGVkIHRoZSB1 cHBlciBsaW1pdCBvZiB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciB0aGlzCisJCQkJICogaW5kZXgg YXR0ci4gIE9uIGEgZm9yd2FyZCBzY2FuLCB3ZSBjYW4gc3RvcCBpZiB0aGlzIHF1YWwgaXMKKwkJ CQkgKiBvbmUgb2YgdGhlICJtdXN0IG1hdGNoIiBzdWJzZXQuICBXZSBjYW4gc3RvcCByZWdhcmRs ZXNzIG9mCisJCQkJICogd2hldGhlciB0aGUgcXVhbCBpcyA+IG9yIDwsIHNvIGxvbmcgYXMgaXQn cyByZXF1aXJlZCwKKwkJCQkgKiBiZWNhdXNlIGl0J3Mgbm90IHBvc3NpYmxlIGZvciBhbnkgZnV0 dXJlIHR1cGxlcyB0byBwYXNzLiBPbgorCQkJCSAqIGEgYmFja3dhcmQgc2NhbiwgaG93ZXZlciwg d2UgbXVzdCBrZWVwIGdvaW5nLCBiZWNhdXNlIHdlCisJCQkJICogbWF5IGhhdmUgaW5pdGlhbGx5 IHBvc2l0aW9uZWQgdG8gdGhlIGVuZCBvZiB0aGUgaW5kZXguCisJCQkJICovCisJCQkJaWYgKChr ZXktPnNrX2ZsYWdzICYgKFNLX0JUX1JFUUZXRCB8IFNLX0JUX1JFUUJLV0QpKSAmJgorCQkJCQlT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCQkJeworCQkJCQkqY29udGludWVzY2FuID0g ZmFsc2U7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJaWYgKChrZXktPnNrX2ZsYWdz ICYgKFNLX0JUX1JFUVNLSVBGV0QgfCBTS19CVF9SRVFTS0lQQktXRCkpICYmCisJCQkJCVNjYW5E aXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpCisJCQkJeworCQkJCQkqcHJlZml4U2tpcEluZGV4ID0g a2V5LT5za19hdHRubyAtIDE7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisKKwkJ CW92ZXJhbGxtYXRjaCA9IGZhbHNlOworCQl9CisKKwkJLyogUGVyZm9ybSB0aGUgdGVzdCAtLS0g dGhyZWUtd2F5IGNvbXBhcmlzb24gbm90IGJvb2wgb3BlcmF0b3IgKi8KKwkJY21wcmVzdWx0ID0g RGF0dW1HZXRJbnQzMihGdW5jdGlvbkNhbGwyQ29sbCgma2V5LT5za19mdW5jLAorCQkJCQkJCQkJ CQkJCWtleS0+c2tfY29sbGF0aW9uLAorCQkJCQkJCQkJCQkJCWRhdHVtLAorCQkJCQkJCQkJCQkJ CWtleS0+c2tfYXJndW1lbnQpKTsKKwkJaWYgKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9ERVNDKQor CQkJSU5WRVJUX0NPTVBBUkVfUkVTVUxUKGNtcHJlc3VsdCk7CisKKwkJaWYgKGNtcHJlc3VsdCAh PSAwKQorCQl7CisJCQkvKgorCQkJICogVHVwbGUgZmFpbHMgdGhpcyBxdWFsLiAgSWYgaXQncyBh IHJlcXVpcmVkIHF1YWwgZm9yIHRoZSBjdXJyZW50CisJCQkgKiBzY2FuIGRpcmVjdGlvbiwgdGhl biB3ZSBjYW4gY29uY2x1ZGUgbm8gZnVydGhlciB0dXBsZXMgd2lsbAorCQkJICogcGFzcywgZWl0 aGVyLgorCQkJICoKKwkJCSAqIE5vdGU6IGJlY2F1c2Ugd2Ugc3RvcCB0aGUgc2NhbiBhcyBzb29u IGFzIGFueSByZXF1aXJlZCBlcXVhbGl0eQorCQkJICogcXVhbCBmYWlscywgaXQgaXMgY3JpdGlj YWwgdGhhdCBlcXVhbGl0eSBxdWFscyBiZSB1c2VkIGZvciB0aGUKKwkJCSAqIGluaXRpYWwgcG9z aXRpb25pbmcgaW4gX2J0X2ZpcnN0KCkgd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuIFNlZQorCQkJ ICogY29tbWVudHMgaW4gX2J0X2ZpcnN0KCkuCisJCQkgKi8KKwkJCWlmICgoa2V5LT5za19mbGFn cyAmIFNLX0JUX1JFUUZXRCkgJiYKKwkJCQlTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYg Y21wcmVzdWx0ID4gMCkKKwkJCXsKKwkJCQkqY29udGludWVzY2FuID0gZmFsc2U7CisJCQkJcmV0 dXJuIGZhbHNlOworCQkJfQorCQkJZWxzZSBpZiAoKGtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFC S1dEKSAmJgorCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJiBjbXByZXN1bHQg PCAwKQorCQkJeworCQkJCSpjb250aW51ZXNjYW4gPSBmYWxzZTsKKwkJCQlyZXR1cm4gZmFsc2U7 CisJCQl9CisKKwkJCWlmICgoa2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBGV0QpICYmCisJ CQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpICYmIGNtcHJlc3VsdCA+IDApCisJCQl7CisJ CQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOworCQkJCXJldHVybiBmYWxz ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKChrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRU0tJUEJLV0Qp ICYmCisJCQkJCSBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpICYmIGNtcHJlc3VsdCA8IDAp CisJCQl7CisJCQkJKnByZWZpeFNraXBJbmRleCA9IGtleS0+c2tfYXR0bm8gLSAxOworCQkJCXJl dHVybiBmYWxzZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEluIGFueSBjYXNlLCB0aGlzIGluZGV4 dHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgcXVhbC4KKwkJCSAqLworCQkJb3ZlcmFsbG1hdGNoID0g ZmFsc2U7CisJCX0KKwl9CisKKwkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHR1cGxlIHBhc3NlcyBh bGwgaW5kZXggcXVhbHMuICovCisJcmV0dXJuIG92ZXJhbGxtYXRjaDsKK30KKwogLyoKICAqIFRl c3Qgd2hldGhlciBhbiBpbmRleHR1cGxlIHNhdGlzZmllcyBhIHJvdy1jb21wYXJpc29uIHNjYW4g Y29uZGl0aW9uLgogICoKQEAgLTE1MjAsNyArMTc4OSw3IEBAIF9idF9jaGVja2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCiAgKi8KIHN0YXRp YyBib29sCiBfYnRfY2hlY2tfcm93Y29tcGFyZShTY2FuS2V5IHNrZXksIEluZGV4VHVwbGUgdHVw bGUsIGludCB0dXBuYXR0cywKLQkJCQkJIFR1cGxlRGVzYyB0dXBkZXNjLCBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCAqY29udGludWVzY2FuKQorCQkJCQkgVHVwbGVEZXNjIHR1cGRlc2MsIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4sIGludCAqcHJlZml4U2tpcEluZGV4KQog ewogCVNjYW5LZXkJCXN1YmtleSA9IChTY2FuS2V5KSBEYXR1bUdldFBvaW50ZXIoc2tleS0+c2tf YXJndW1lbnQpOwogCWludDMyCQljbXByZXN1bHQgPSAwOwpAQCAtMTU3Niw2ICsxODQ1LDEwIEBA IF9idF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkgc2tleSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50 IHR1cG5hdHRzLAogCQkJCWlmICgoc3Via2V5LT5za19mbGFncyAmIChTS19CVF9SRVFGV0QgfCBT S19CVF9SRVFCS1dEKSkgJiYKIAkJCQkJU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKIAkJ CQkJKmNvbnRpbnVlc2NhbiA9IGZhbHNlOworCisJCQkJaWYgKChzdWJrZXktPnNrX2ZsYWdzICYg KFNLX0JUX1JFUVNLSVBGV0QgfCBTS19CVF9SRVFCS1dEKSAmJgorCQkJCQlTY2FuRGlyZWN0aW9u SXNCYWNrd2FyZChkaXIpKSkKKwkJCQkJKnByZWZpeFNraXBJbmRleCA9IHN1YmtleS0+c2tfYXR0 bm8gLSAxOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtMTU5Miw2ICsxODY1LDEwIEBAIF9idF9j aGVja19yb3djb21wYXJlKFNjYW5LZXkgc2tleSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5h dHRzLAogCQkJCWlmICgoc3Via2V5LT5za19mbGFncyAmIChTS19CVF9SRVFGV0QgfCBTS19CVF9S RVFCS1dEKSkgJiYKIAkJCQkJU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJCQkqY29u dGludWVzY2FuID0gZmFsc2U7CisKKwkJCQlpZiAoKHN1YmtleS0+c2tfZmxhZ3MgJiAoU0tfQlRf UkVRU0tJUEZXRCB8IFNLX0JUX1JFUUJLV0QpICYmCisJCQkJCVNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkpCisJCQkJCSpwcmVmaXhTa2lwSW5kZXggPSBzdWJrZXktPnNrX2F0dG5vIC0gMTsK IAkJCX0KIAogCQkJLyoKQEAgLTE2MTYsNiArMTg5MywxMyBAQCBfYnRfY2hlY2tfcm93Y29tcGFy ZShTY2FuS2V5IHNrZXksIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCWVsc2Ug aWYgKChzdWJrZXktPnNrX2ZsYWdzICYgU0tfQlRfUkVRQktXRCkgJiYKIAkJCQkJIFNjYW5EaXJl Y3Rpb25Jc0JhY2t3YXJkKGRpcikpCiAJCQkJKmNvbnRpbnVlc2NhbiA9IGZhbHNlOworCisJCQlp ZiAoKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQRldEKSAmJgorCQkJCVNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJCQkqcHJlZml4U2tpcEluZGV4ID0gc3Via2V5LT5za19h dHRubyAtIDE7CisJCQllbHNlIGlmICgoc3Via2V5LT5za19mbGFncyAmIFNLX0JUX1JFUVNLSVBC S1dEKSAmJgorCQkJCQkgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCQkqcHJlZml4 U2tpcEluZGV4ID0gc3Via2V5LT5za19hdHRubyAtIDE7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0K IApAQCAtMTY3OCw2ICsxOTYyLDEzIEBAIF9idF9jaGVja19yb3djb21wYXJlKFNjYW5LZXkgc2tl eSwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAogCQllbHNlIGlmICgoc3Via2V5LT5z a19mbGFncyAmIFNLX0JUX1JFUUJLV0QpICYmCiAJCQkJIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJk KGRpcikpCiAJCQkqY29udGludWVzY2FuID0gZmFsc2U7CisKKwkJaWYgKChzdWJrZXktPnNrX2Zs YWdzICYgU0tfQlRfUkVRU0tJUEZXRCkgJiYKKwkJCVNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKKwkJCSpwcmVmaXhTa2lwSW5kZXggPSBzdWJrZXktPnNrX2F0dG5vIC0gMTsKKwkJZWxzZSBp ZiAoKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19CVF9SRVFTS0lQQktXRCkgJiYKKwkJCQkgU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCSpwcmVmaXhTa2lwSW5kZXggPSBzdWJrZXktPnNr X2F0dG5vIC0gMTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjczMywzICszMDI0LDUyNCBA QCBfYnRfYWxsZXF1YWxpbWFnZShSZWxhdGlvbiByZWwsIGJvb2wgZGVidWdtZXNzYWdlKQogCiAJ cmV0dXJuIGFsbGVxdWFsaW1hZ2U7CiB9CisKK3ZvaWQgX2J0X3NldF9ic2VhcmNoX2ZsYWdzKFN0 cmF0ZWd5TnVtYmVyIHN0cmF0VG90YWwsIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sKiBuZXh0a2V5 LCBib29sKiBnb2JhY2spCit7CisJLyotLS0tLS0tLS0tCisJICogRXhhbWluZSB0aGUgc2VsZWN0 ZWQgaW5pdGlhbC1wb3NpdGlvbmluZyBzdHJhdGVneSB0byBkZXRlcm1pbmUgZXhhY3RseQorCSAq IHdoZXJlIHdlIG5lZWQgdG8gc3RhcnQgdGhlIHNjYW4sIGFuZCBzZXQgZmxhZyB2YXJpYWJsZXMg dG8gY29udHJvbCB0aGUKKwkgKiBjb2RlIGJlbG93LgorCSAqCisJICogSWYgbmV4dGtleSA9IGZh bHNlLCBfYnRfc2VhcmNoIGFuZCBfYnRfYmluc3JjaCB3aWxsIGxvY2F0ZSB0aGUgZmlyc3QKKwkg KiBpdGVtID49IHNjYW4ga2V5LiAgSWYgbmV4dGtleSA9IHRydWUsIHRoZXkgd2lsbCBsb2NhdGUg dGhlIGZpcnN0CisJICogaXRlbSA+IHNjYW4ga2V5LgorCSAqCisJICogSWYgZ29iYWNrID0gdHJ1 ZSwgd2Ugd2lsbCB0aGVuIHN0ZXAgYmFjayBvbmUgaXRlbSwgd2hpbGUgaWYKKwkgKiBnb2JhY2sg PSBmYWxzZSwgd2Ugd2lsbCBzdGFydCB0aGUgc2NhbiBvbiB0aGUgbG9jYXRlZCBpdGVtLgorCSAq LS0tLS0tLS0tLQorCSAqLworCXN3aXRjaCAoc3RyYXRUb3RhbCkKKwl7CisJCWNhc2UgQlRMZXNz U3RyYXRlZ3lOdW1iZXI6CisKKwkJCS8qCisJCQkgKiBGaW5kIGZpcnN0IGl0ZW0gPj0gc2Nhbmtl eSwgdGhlbiBiYWNrIHVwIG9uZSB0byBhcnJpdmUgYXQgbGFzdAorCQkJICogaXRlbSA8IHNjYW5r ZXkuICAoTm90ZTogdGhpcyBwb3NpdGlvbmluZyBzdHJhdGVneSBpcyBvbmx5IHVzZWQKKwkJCSAq IGZvciBhIGJhY2t3YXJkIHNjYW4sIHNvIHRoYXQgaXMgYWx3YXlzIHRoZSBjb3JyZWN0IHN0YXJ0 aW5nCisJCQkgKiBwb3NpdGlvbi4pCisJCQkgKi8KKwkJCSpuZXh0a2V5ID0gZmFsc2U7CisJCQkq Z29iYWNrID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgQlRMZXNzRXF1YWxTdHJhdGVneU51 bWJlcjoKKworCQkJLyoKKwkJCSAqIEZpbmQgZmlyc3QgaXRlbSA+IHNjYW5rZXksIHRoZW4gYmFj ayB1cCBvbmUgdG8gYXJyaXZlIGF0IGxhc3QKKwkJCSAqIGl0ZW0gPD0gc2NhbmtleS4gIChOb3Rl OiB0aGlzIHBvc2l0aW9uaW5nIHN0cmF0ZWd5IGlzIG9ubHkgdXNlZAorCQkJICogZm9yIGEgYmFj a3dhcmQgc2Nhbiwgc28gdGhhdCBpcyBhbHdheXMgdGhlIGNvcnJlY3Qgc3RhcnRpbmcKKwkJCSAq IHBvc2l0aW9uLikKKwkJCSAqLworCQkJKm5leHRrZXkgPSB0cnVlOworCQkJKmdvYmFjayA9IHRy dWU7CisJCQlicmVhazsKKworCQljYXNlIEJURXF1YWxTdHJhdGVneU51bWJlcjoKKworCQkJLyoK KwkJCSAqIElmIGEgYmFja3dhcmQgc2NhbiB3YXMgc3BlY2lmaWVkLCBuZWVkIHRvIHN0YXJ0IHdp dGggbGFzdCBlcXVhbAorCQkJICogaXRlbSBub3QgZmlyc3Qgb25lLgorCQkJICovCisJCQlpZiAo U2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoaXMg aXMgdGhlIHNhbWUgYXMgdGhlIDw9IHN0cmF0ZWd5LiAgV2Ugd2lsbCBjaGVjayBhdCB0aGUKKwkJ CQkgKiBlbmQgd2hldGhlciB0aGUgZm91bmQgaXRlbSBpcyBhY3R1YWxseSA9LgorCQkJCSAqLwor CQkJCSpuZXh0a2V5ID0gdHJ1ZTsKKwkJCQkqZ29iYWNrID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlID49IHN0cmF0ZWd5 LiAgV2Ugd2lsbCBjaGVjayBhdCB0aGUKKwkJCQkgKiBlbmQgd2hldGhlciB0aGUgZm91bmQgaXRl bSBpcyBhY3R1YWxseSA9LgorCQkJCSAqLworCQkJCSpuZXh0a2V5ID0gZmFsc2U7CisJCQkJKmdv YmFjayA9IGZhbHNlOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBCVEdyZWF0ZXJFcXVhbFN0 cmF0ZWd5TnVtYmVyOgorCisJCQkvKgorCQkJICogRmluZCBmaXJzdCBpdGVtID49IHNjYW5rZXku ICAoVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGZvcndhcmQKKwkJCSAqIHNjYW5zLikKKwkJCSAqLwor CQkJKm5leHRrZXkgPSBmYWxzZTsKKwkJCSpnb2JhY2sgPSBmYWxzZTsKKwkJCWJyZWFrOworCisJ CWNhc2UgQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXI6CisKKwkJCS8qCisJCQkgKiBGaW5kIGZpcnN0 IGl0ZW0gPiBzY2Fua2V5LiAgKFRoaXMgaXMgb25seSB1c2VkIGZvciBmb3J3YXJkCisJCQkgKiBz Y2Fucy4pCisJCQkgKi8KKwkJCSpuZXh0a2V5ID0gdHJ1ZTsKKwkJCSpnb2JhY2sgPSBmYWxzZTsK KwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAg Y29tcGlsZXIgcXVpZXQgKi8KKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3RyYXRfdG90 YWw6ICVkIiwgKGludCkgc3RyYXRUb3RhbCk7CisJfQorfQorCitib29sIF9idF9jcmVhdGVfaW5z ZXJ0aW9uX3NjYW5fa2V5KFJlbGF0aW9uCXJlbCwgU2NhbkRpcmVjdGlvbiBkaXIsIFNjYW5LZXkq IHN0YXJ0S2V5cywgaW50IGtleXNDb3VudCwgQlRTY2FuSW5zZXJ0IGluc2tleSwgU3RyYXRlZ3lO dW1iZXIqIHN0cmF0VG90YWwsICBib29sKiBnb2JhY2spCit7CisJaW50IGk7CisJYm9vbCBuZXh0 a2V5OworCisJLyoKKwkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRo aW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCisJICogaW5zZXJ0aW9uIHNjYW5rZXkgd2UgY2FuIHVz ZSB0byBzZWFyY2ggZm9yIHRoZSBib3VuZGFyeSBwb2ludCB3ZQorCSAqIGlkZW50aWZpZWQgYWJv dmUuICBUaGUgaW5zZXJ0aW9uIHNjYW5rZXkgaXMgYnVpbHQgdXNpbmcgdGhlIGtleXMKKwkgKiBp ZGVudGlmaWVkIGJ5IHN0YXJ0S2V5c1tdLiAgKFJlbWFpbmluZyBpbnNlcnRpb24gc2NhbmtleSBm aWVsZHMgYXJlCisJICogaW5pdGlhbGl6ZWQgYWZ0ZXIgaW5pdGlhbC1wb3NpdGlvbmluZyBzdHJh dGVneSBpcyBmaW5hbGl6ZWQuKQorCSAqLworCUFzc2VydChrZXlzQ291bnQgPD0gSU5ERVhfTUFY X0tFWVMpOworCWZvciAoaSA9IDA7IGkgPCBrZXlzQ291bnQ7IGkrKykKKwl7CisJCVNjYW5LZXkJ CWN1ciA9IHN0YXJ0S2V5c1tpXTsKKworCQlpZiAoY3VyID09IE5VTEwpCisJCXsKKwkJCWluc2tl eS0+c2NhbmtleXNbaV0uc2tfYXR0bm8gPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlBc3Nl cnQoY3VyLT5za19hdHRubyA9PSBpICsgMSk7CisKKwkJaWYgKGN1ci0+c2tfZmxhZ3MgJiBTS19S T1dfSEVBREVSKQorCQl7CisJCQkvKgorCQkJICogUm93IGNvbXBhcmlzb24gaGVhZGVyOiBsb29r IHRvIHRoZSBmaXJzdCByb3cgbWVtYmVyIGluc3RlYWQuCisJCQkgKgorCQkJICogVGhlIG1lbWJl ciBzY2Fua2V5cyBhcmUgYWxyZWFkeSBpbiBpbnNlcnRpb24gZm9ybWF0IChpZSwgdGhleQorCQkJ ICogaGF2ZSBza19mdW5jID0gMy13YXktY29tcGFyaXNvbiBmdW5jdGlvbiksIGJ1dCB3ZSBoYXZl IHRvIHdhdGNoCisJCQkgKiBvdXQgZm9yIG51bGxzLCB3aGljaCBfYnRfcHJlcHJvY2Vzc19rZXlz IGRpZG4ndCBjaGVjay4gQSBudWxsCisJCQkgKiBpbiB0aGUgZmlyc3Qgcm93IG1lbWJlciBtYWtl cyB0aGUgY29uZGl0aW9uIHVubWF0Y2hhYmxlLCBqdXN0CisJCQkgKiBsaWtlIHF1YWxfb2sgPSBm YWxzZS4KKwkJCSAqLworCQkJU2NhbktleQkJc3Via2V5ID0gKFNjYW5LZXkpIERhdHVtR2V0UG9p bnRlcihjdXItPnNrX2FyZ3VtZW50KTsKKworCQkJQXNzZXJ0KHN1YmtleS0+c2tfZmxhZ3MgJiBT S19ST1dfTUVNQkVSKTsKKwkJCWlmIChzdWJrZXktPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQorCQkJ eworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCW1lbWNweShpbnNrZXktPnNjYW5rZXlzICsg aSwgc3Via2V5LCBzaXplb2YoU2NhbktleURhdGEpKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBy b3cgY29tcGFyaXNvbiBpcyB0aGUgbGFzdCBwb3NpdGlvbmluZyBrZXkgd2UgYWNjZXB0ZWQsCisJ CQkgKiB0cnkgdG8gYWRkIGFkZGl0aW9uYWwga2V5cyBmcm9tIHRoZSBsb3dlci1vcmRlciByb3cg bWVtYmVycy4KKwkJCSAqIChJZiB3ZSBhY2NlcHRlZCBpbmRlcGVuZGVudCBjb25kaXRpb25zIG9u IGFkZGl0aW9uYWwgaW5kZXgKKwkJCSAqIGNvbHVtbnMsIHdlIHVzZSB0aG9zZSBpbnN0ZWFkIC0t LSBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvCisJCQkgKiBkZXRlcm1pbmUgd2hpY2ggaXMg bW9yZSByZXN0cmljdGl2ZS4pICBOb3RlIHRoYXQgdGhpcyBpcyBPSworCQkJICogZXZlbiBpZiB0 aGUgcm93IGNvbXBhcmlzb24gaXMgb2YgIj4iIG9yICI8IiB0eXBlLCBiZWNhdXNlIHRoZQorCQkJ ICogY29uZGl0aW9uIGFwcGxpZWQgdG8gYWxsIGJ1dCB0aGUgbGFzdCByb3cgbWVtYmVyIGlzIGVm ZmVjdGl2ZWx5CisJCQkgKiAiPj0iIG9yICI8PSIsIGFuZCBzbyB0aGUgZXh0cmEga2V5cyBkb24n dCBicmVhayB0aGUgcG9zaXRpb25pbmcKKwkJCSAqIHNjaGVtZS4gIEJ1dCwgYnkgdGhlIHNhbWUg dG9rZW4sIGlmIHdlIGFyZW4ndCBhYmxlIHRvIHVzZSBhbGwKKwkJCSAqIHRoZSByb3cgbWVtYmVy cywgdGhlbiB0aGUgcGFydCBvZiB0aGUgcm93IGNvbXBhcmlzb24gdGhhdCB3ZQorCQkJICogZGlk IHVzZSBoYXMgdG8gYmUgdHJlYXRlZCBhcyBqdXN0IGEgIj49IiBvciAiPD0iIGNvbmRpdGlvbiwg YW5kCisJCQkgKiBzbyB3ZSdkIGJldHRlciBhZGp1c3Qgc3RyYXRfdG90YWwgYWNjb3JkaW5nbHku CisJCQkgKi8KKwkJCWlmIChpID09IGtleXNDb3VudCAtIDEpCisJCQl7CisJCQkJYm9vbAkJdXNl ZF9hbGxfc3Via2V5cyA9IGZhbHNlOworCisJCQkJQXNzZXJ0KCEoc3Via2V5LT5za19mbGFncyAm IFNLX1JPV19FTkQpKTsKKwkJCQlmb3IgKDs7KQorCQkJCXsKKwkJCQkJc3Via2V5Kys7CisJCQkJ CUFzc2VydChzdWJrZXktPnNrX2ZsYWdzICYgU0tfUk9XX01FTUJFUik7CisJCQkJCWlmIChzdWJr ZXktPnNrX2F0dG5vICE9IGtleXNDb3VudCArIDEpCisJCQkJCQlicmVhazsJLyogb3V0LW9mLXNl cXVlbmNlLCBjYW4ndCB1c2UgaXQgKi8KKwkJCQkJaWYgKHN1YmtleS0+c2tfc3RyYXRlZ3kgIT0g Y3VyLT5za19zdHJhdGVneSkKKwkJCQkJCWJyZWFrOwkvKiB3cm9uZyBkaXJlY3Rpb24sIGNhbid0 IHVzZSBpdCAqLworCQkJCQlpZiAoc3Via2V5LT5za19mbGFncyAmIFNLX0lTTlVMTCkKKwkJCQkJ CWJyZWFrOwkvKiBjYW4ndCB1c2UgbnVsbCBrZXlzICovCisJCQkJCUFzc2VydChrZXlzQ291bnQg PCBJTkRFWF9NQVhfS0VZUyk7CisJCQkJCW1lbWNweShpbnNrZXktPnNjYW5rZXlzICsga2V5c0Nv dW50LCBzdWJrZXksCisJCQkJCQkgICBzaXplb2YoU2NhbktleURhdGEpKTsKKwkJCQkJa2V5c0Nv dW50Kys7CisJCQkJCWlmIChzdWJrZXktPnNrX2ZsYWdzICYgU0tfUk9XX0VORCkKKwkJCQkJewor CQkJCQkJdXNlZF9hbGxfc3Via2V5cyA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJ CX0KKwkJCQlpZiAoIXVzZWRfYWxsX3N1YmtleXMpCisJCQkJeworCQkJCQlzd2l0Y2ggKCpzdHJh dFRvdGFsKQorCQkJCQl7CisJCQkJCQljYXNlIEJUTGVzc1N0cmF0ZWd5TnVtYmVyOgorCQkJCQkJ CSpzdHJhdFRvdGFsID0gQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjsKKwkJCQkJCQlicmVhazsK KwkJCQkJCWNhc2UgQlRHcmVhdGVyU3RyYXRlZ3lOdW1iZXI6CisJCQkJCQkJKnN0cmF0VG90YWwg PSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVyOworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJ CQkJfQorCQkJCWJyZWFrOwkJCS8qIGRvbmUgd2l0aCBvdXRlciBsb29wICovCisJCQl9CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogT3JkaW5hcnkgY29tcGFyaXNvbiBrZXkuICBUcmFu c2Zvcm0gdGhlIHNlYXJjaC1zdHlsZSBzY2FuIGtleQorCQkJICogdG8gYW4gaW5zZXJ0aW9uIHNj YW4ga2V5IGJ5IHJlcGxhY2luZyB0aGUgc2tfZnVuYyB3aXRoIHRoZQorCQkJICogYXBwcm9wcmlh dGUgYnRyZWUgY29tcGFyaXNvbiBmdW5jdGlvbi4KKwkJCSAqCisJCQkgKiBJZiBzY2Fua2V5IG9w ZXJhdG9yIGlzIG5vdCBhIGNyb3NzLXR5cGUgY29tcGFyaXNvbiwgd2UgY2FuIHVzZQorCQkJICog dGhlIGNhY2hlZCBjb21wYXJpc29uIGZ1bmN0aW9uOyBvdGhlcndpc2UgZ290dGEgbG9vayBpdCB1 cCBpbgorCQkJICogdGhlIGNhdGFsb2dzLiAgKFRoYXQgY2FuJ3QgbGVhZCB0byBpbmZpbml0ZSBy ZWN1cnNpb24sIHNpbmNlIG5vCisJCQkgKiBpbmRleHNjYW4gaW5pdGlhdGVkIGJ5IHN5c2NhY2hl IGxvb2t1cCB3aWxsIHVzZSBjcm9zcy1kYXRhLXR5cGUKKwkJCSAqIG9wZXJhdG9ycy4pCisJCQkg KgorCQkJICogV2Ugc3VwcG9ydCB0aGUgY29udmVudGlvbiB0aGF0IHNrX3N1YnR5cGUgPT0gSW52 YWxpZE9pZCBtZWFucworCQkJICogdGhlIG9wY2xhc3MgaW5wdXQgdHlwZTsgdGhpcyBpcyBhIGhh Y2sgdG8gc2ltcGxpZnkgbGlmZSBmb3IKKwkJCSAqIFNjYW5LZXlJbml0KCkuCisJCQkgKi8KKwkJ CWlmIChjdXItPnNrX3N1YnR5cGUgPT0gcmVsLT5yZF9vcGNpbnR5cGVbaV0gfHwKKwkJCQljdXIt PnNrX3N1YnR5cGUgPT0gSW52YWxpZE9pZCkKKwkJCXsKKwkJCQlGbWdySW5mbyAgICpwcm9jaW5m bzsKKworCQkJCXByb2NpbmZvID0gaW5kZXhfZ2V0cHJvY2luZm8ocmVsLCBjdXItPnNrX2F0dG5v LCBCVE9SREVSX1BST0MpOworCQkJCVNjYW5LZXlFbnRyeUluaXRpYWxpemVXaXRoSW5mbyhpbnNr ZXktPnNjYW5rZXlzICsgaSwKKwkJCQkJCQkJCQkJICAgY3VyLT5za19mbGFncywKKwkJCQkJCQkJ CQkJICAgY3VyLT5za19hdHRubywKKwkJCQkJCQkJCQkJICAgY3VyLT5za19zdHJhdGVneSwKKwkJ CQkJCQkJCQkJICAgY3VyLT5za19zdWJ0eXBlLAorCQkJCQkJCQkJCQkgICBjdXItPnNrX2NvbGxh dGlvbiwKKwkJCQkJCQkJCQkJICAgcHJvY2luZm8sCisJCQkJCQkJCQkJCSAgIGN1ci0+c2tfYXJn dW1lbnQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJlZ1Byb2NlZHVyZSBjbXBfcHJvYzsK KworCQkJCWNtcF9wcm9jID0gZ2V0X29wZmFtaWx5X3Byb2MocmVsLT5yZF9vcGZhbWlseVtpXSwK KwkJCQkJCQkJCQkJIHJlbC0+cmRfb3BjaW50eXBlW2ldLAorCQkJCQkJCQkJCQkgY3VyLT5za19z dWJ0eXBlLAorCQkJCQkJCQkJCQkgQlRPUkRFUl9QUk9DKTsKKwkJCQlpZiAoIVJlZ1Byb2NlZHVy ZUlzVmFsaWQoY21wX3Byb2MpKQorCQkJCQllbG9nKEVSUk9SLCAibWlzc2luZyBzdXBwb3J0IGZ1 bmN0aW9uICVkKCV1LCV1KSBmb3IgYXR0cmlidXRlICVkIG9mIGluZGV4IFwiJXNcIiIsCisJCQkJ CQkgQlRPUkRFUl9QUk9DLCByZWwtPnJkX29wY2ludHlwZVtpXSwgY3VyLT5za19zdWJ0eXBlLAor CQkJCQkJIGN1ci0+c2tfYXR0bm8sIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCQkJ CVNjYW5LZXlFbnRyeUluaXRpYWxpemUoaW5za2V5LT5zY2Fua2V5cyArIGksCisJCQkJCQkJCQkg ICBjdXItPnNrX2ZsYWdzLAorCQkJCQkJCQkJICAgY3VyLT5za19hdHRubywKKwkJCQkJCQkJCSAg IGN1ci0+c2tfc3RyYXRlZ3ksCisJCQkJCQkJCQkgICBjdXItPnNrX3N1YnR5cGUsCisJCQkJCQkJ CQkgICBjdXItPnNrX2NvbGxhdGlvbiwKKwkJCQkJCQkJCSAgIGNtcF9wcm9jLAorCQkJCQkJCQkJ ICAgY3VyLT5za19hcmd1bWVudCk7CisJCQl9CisJCX0KKwl9CisKKwlfYnRfc2V0X2JzZWFyY2hf ZmxhZ3MoKnN0cmF0VG90YWwsIGRpciwgJm5leHRrZXksIGdvYmFjayk7CisKKwkvKiBJbml0aWFs aXplIHJlbWFpbmluZyBpbnNlcnRpb24gc2NhbiBrZXkgZmllbGRzICovCisJX2J0X21ldGF2ZXJz aW9uKHJlbCwgJmluc2tleS0+aGVhcGtleXNwYWNlLCAmaW5za2V5LT5hbGxlcXVhbGltYWdlKTsK KwlpbnNrZXktPmFueW51bGxrZXlzID0gZmFsc2U7IC8qIHVudXNlZCAqLworCWluc2tleS0+bmV4 dGtleSA9IG5leHRrZXk7CisJaW5za2V5LT5waXZvdHNlYXJjaCA9IGZhbHNlOworCWluc2tleS0+ c2NhbnRpZCA9IE5VTEw7CisJaW5za2V5LT5rZXlzeiA9IGtleXNDb3VudDsKKworCXJldHVybiB0 cnVlOworfQorCisvKi0tLS0tLS0tLS0KKyAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyB0byBkaXNj b3ZlciB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBzY2FuLgorICoKKyAqIFdlIHdhbnQgdG8g aWRlbnRpZnkgdGhlIGtleXMgdGhhdCBjYW4gYmUgdXNlZCBhcyBzdGFydGluZyBib3VuZGFyaWVz OworICogdGhlc2UgYXJlID0sID4sIG9yID49IGtleXMgZm9yIGEgZm9yd2FyZCBzY2FuIG9yID0s IDwsIDw9IGtleXMgZm9yCisgKiBhIGJhY2t3YXJkcyBzY2FuLiAgV2UgY2FuIHVzZSBrZXlzIGZv ciBtdWx0aXBsZSBhdHRyaWJ1dGVzIHNvIGxvbmcgYXMKKyAqIHRoZSBwcmlvciBhdHRyaWJ1dGVz IGhhZCBvbmx5ID0sID49IChyZXNwLiA9LCA8PSkga2V5cy4gIE9uY2Ugd2UgYWNjZXB0CisgKiBh ID4gb3IgPCBib3VuZGFyeSBvciBmaW5kIGFuIGF0dHJpYnV0ZSB3aXRoIG5vIGJvdW5kYXJ5ICh3 aGljaCBjYW4gYmUKKyAqIHRob3VnaHQgb2YgYXMgdGhlIHNhbWUgYXMgIj4gLWluZmluaXR5Iiks IHdlIGNhbid0IHVzZSBrZXlzIGZvciBhbnkKKyAqIGF0dHJpYnV0ZXMgdG8gaXRzIHJpZ2h0LCBi ZWNhdXNlIGl0IHdvdWxkIGJyZWFrIG91ciBzaW1wbGlzdGljIG5vdGlvbgorICogb2Ygd2hhdCBp bml0aWFsIHBvc2l0aW9uaW5nIHN0cmF0ZWd5IHRvIHVzZS4KKyAqCisgKiBXaGVuIHRoZSBzY2Fu IGtleXMgaW5jbHVkZSBjcm9zcy10eXBlIG9wZXJhdG9ycywgX2J0X3ByZXByb2Nlc3Nfa2V5cwor ICogbWF5IG5vdCBiZSBhYmxlIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQga2V5czsgaW4gc3VjaCBj YXNlcyB3ZSB3aWxsCisgKiBhcmJpdHJhcmlseSBwaWNrIGEgdXNhYmxlIG9uZSBmb3IgZWFjaCBh dHRyaWJ1dGUuICBUaGlzIGlzIGNvcnJlY3QKKyAqIGJ1dCBwb3NzaWJseSBub3Qgb3B0aW1hbCBi ZWhhdmlvci4gIChGb3IgZXhhbXBsZSwgd2l0aCBrZXlzIGxpa2UKKyAqICJ4ID49IDQgQU5EIHgg Pj0gNSIgd2Ugd291bGQgZWxlY3QgdG8gc2NhbiBzdGFydGluZyBhdCB4PTQgd2hlbgorICogeD01 IHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LikgIFNpbmNlIHRoZSBzaXR1YXRpb24gb25seSBhcmlz ZXMgZ2l2ZW4KKyAqIGEgcG9vcmx5LXdvcmRlZCBxdWVyeSBwbHVzIGFuIGluY29tcGxldGUgb3Bm YW1pbHksIGxpdmUgd2l0aCBpdC4KKyAqCisgKiBXaGVuIGJvdGggZXF1YWxpdHkgYW5kIGluZXF1 YWxpdHkga2V5cyBhcHBlYXIgZm9yIGEgc2luZ2xlIGF0dHJpYnV0ZQorICogKGFnYWluLCBvbmx5 IHBvc3NpYmxlIHdoZW4gY3Jvc3MtdHlwZSBvcGVyYXRvcnMgYXBwZWFyKSwgd2UgKm11c3QqCisg KiBzZWxlY3Qgb25lIG9mIHRoZSBlcXVhbGl0eSBrZXlzIGZvciB0aGUgc3RhcnRpbmcgcG9pbnQs IGJlY2F1c2UKKyAqIF9idF9jaGVja2tleXMoKSB3aWxsIHN0b3AgdGhlIHNjYW4gYXMgc29vbiBh cyBhbiBlcXVhbGl0eSBxdWFsIGZhaWxzLgorICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUga2V5 cyBsaWtlICJ4ID49IDQgQU5EIHggPSAxMCIgYW5kIHdlIGVsZWN0IHRvCisgKiBzdGFydCBhdCB4 PTQsIHdlIHdpbGwgZmFpbCBhbmQgc3RvcCBiZWZvcmUgcmVhY2hpbmcgeD0xMC4gIElmIG11bHRp cGxlCisgKiBlcXVhbGl0eSBxdWFscyBzdXJ2aXZlIHByZXByb2Nlc3NpbmcsIGhvd2V2ZXIsIGl0 IGRvZXNuJ3QgbWF0dGVyIHdoaWNoCisgKiBvbmUgd2UgdXNlIC0tLSBieSBkZWZpbml0aW9uLCB0 aGV5IGFyZSBlaXRoZXIgcmVkdW5kYW50IG9yCisgKiBjb250cmFkaWN0b3J5LgorICoKKyAqIEFu eSByZWd1bGFyIChub3QgU0tfU0VBUkNITlVMTCkga2V5IGltcGxpZXMgYSBOT1QgTlVMTCBxdWFs aWZpZXIuCisgKiBJZiB0aGUgaW5kZXggc3RvcmVzIG51bGxzIGF0IHRoZSBlbmQgb2YgdGhlIGlu ZGV4IHdlJ2xsIGJlIHN0YXJ0aW5nCisgKiBmcm9tLCBhbmQgd2UgaGF2ZSBubyBib3VuZGFyeSBr ZXkgZm9yIHRoZSBjb2x1bW4gKHdoaWNoIG1lYW5zIHRoZSBrZXkKKyAqIHdlIGRlZHVjZWQgTk9U IE5VTEwgZnJvbSBpcyBhbiBpbmVxdWFsaXR5IGtleSB0aGF0IGNvbnN0cmFpbnMgdGhlIG90aGVy CisgKiBlbmQgb2YgdGhlIGluZGV4KSwgdGhlbiB3ZSBjb25zIHVwIGFuIGV4cGxpY2l0IFNLX1NF QVJDSE5PVE5VTEwga2V5IHRvCisgKiB1c2UgYXMgYSBib3VuZGFyeSBrZXkuICBJZiB3ZSBkaWRu J3QgZG8gdGhpcywgd2UgbWlnaHQgZmluZCBvdXJzZWx2ZXMKKyAqIHRyYXZlcnNpbmcgYSBsb3Qg b2YgbnVsbCBlbnRyaWVzIGF0IHRoZSBzdGFydCBvZiB0aGUgc2Nhbi4KKyAqCisgKiBJbiB0aGlz IGxvb3AsIHJvdy1jb21wYXJpc29uIGtleXMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMga2V5cyBv biB0aGVpcgorICogZmlyc3QgKGxlZnRtb3N0KSBjb2x1bW5zLiAgV2UnbGwgYWRkIG9uIGxvd2Vy LW9yZGVyIGNvbHVtbnMgb2YgdGhlIHJvdworICogY29tcGFyaXNvbiBiZWxvdywgaWYgcG9zc2li bGUuCisgKgorICogVGhlIHNlbGVjdGVkIHNjYW4ga2V5cyAoYXQgbW9zdCBvbmUgcGVyIGluZGV4 IGNvbHVtbikgYXJlIHJlbWVtYmVyZWQgYnkKKyAqIHN0b3JpbmcgdGhlaXIgYWRkcmVzc2VzIGlu dG8gdGhlIGxvY2FsIHN0YXJ0S2V5c1tdIGFycmF5LgorICotLS0tLS0tLS0tCisgKi8KK2ludCBf YnRfY2hvb3NlX3NjYW5fa2V5cyhTY2FuS2V5IHNjYW5LZXlzLCBpbnQgbnVtYmVyT2ZLZXlzLCBT Y2FuRGlyZWN0aW9uIGRpciwgU2NhbktleSogc3RhcnRLZXlzLCBTY2FuS2V5RGF0YSogbm90bnVs bGtleXMsIFN0cmF0ZWd5TnVtYmVyKiBzdHJhdFRvdGFsLCBpbnQgcHJlZml4KQoreworCVN0cmF0 ZWd5TnVtYmVyIHN0cmF0OworCWludAkJCWtleXNDb3VudCA9IDA7CisJaW50CQkJaTsKKworCSpz dHJhdFRvdGFsID0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyOworCWlmIChudW1iZXJPZktleXMgPiAw IHx8IHByZWZpeCA+IDApCisJeworCQlBdHRyTnVtYmVyCWN1cmF0dHI7CisJCVNjYW5LZXkJCWNo b3NlbjsKKwkJU2NhbktleQkJaW1wbGllc05OOworCQlTY2FuS2V5CQljdXI7CisKKwkJLyoKKwkJ ICogY2hvc2VuIGlzIHRoZSBzby1mYXItY2hvc2VuIGtleSBmb3IgdGhlIGN1cnJlbnQgYXR0cmli dXRlLCBpZiBhbnkuCisJCSAqIFdlIGRvbid0IGNhc3QgdGhlIGRlY2lzaW9uIGluIHN0b25lIHVu dGlsIHdlIHJlYWNoIGtleXMgZm9yIHRoZQorCQkgKiBuZXh0IGF0dHJpYnV0ZS4KKwkJICovCisJ CWN1cmF0dHIgPSAxOworCQljaG9zZW4gPSBOVUxMOworCQkvKiBBbHNvIHJlbWVtYmVyIGFueSBz Y2Fua2V5IHRoYXQgaW1wbGllcyBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgKi8KKwkJaW1wbGllc05O ID0gTlVMTDsKKworCQkvKgorCQkgKiBMb29wIGl0ZXJhdGVzIGZyb20gMCB0byBudW1iZXJPZktl eXMgaW5jbHVzaXZlOyB3ZSB1c2UgdGhlIGxhc3QKKwkJICogcGFzcyB0byBoYW5kbGUgYWZ0ZXIt bGFzdC1rZXkgcHJvY2Vzc2luZy4gIEFjdHVhbCBleGl0IGZyb20gdGhlCisJCSAqIGxvb3AgaXMg YXQgb25lIG9mIHRoZSAiYnJlYWsiIHN0YXRlbWVudHMgYmVsb3cuCisJCSAqLworCQlmb3IgKGN1 ciA9IHNjYW5LZXlzLCBpID0gMDs7IGN1cisrLCBpKyspCisJCXsKKwkJCWlmIChpID49IG51bWJl ck9mS2V5cyB8fCBjdXItPnNrX2F0dG5vICE9IGN1cmF0dHIpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBEb25lIGxvb2tpbmcgYXQga2V5cyBmb3IgY3VyYXR0ci4gIElmIHdlIGRpZG4ndCBmaW5kIGEK KwkJCQkgKiB1c2FibGUgYm91bmRhcnkga2V5LCBzZWUgaWYgd2UgY2FuIGRlZHVjZSBhIE5PVCBO VUxMIGtleS4KKwkJCQkgKi8KKwkJCQlpZiAoY2hvc2VuID09IE5VTEwgJiYgaW1wbGllc05OICE9 IE5VTEwgJiYKKwkJCQkJKChpbXBsaWVzTk4tPnNrX2ZsYWdzICYgU0tfQlRfTlVMTFNfRklSU1Qp ID8KKwkJCQkJIFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA6CisJCQkJCSBTY2FuRGlyZWN0 aW9uSXNCYWNrd2FyZChkaXIpKSkKKwkJCQl7CisJCQkJCS8qIFllcywgc28gYnVpbGQgdGhlIGtl eSBpbiBub3RudWxsa2V5c1trZXlzQ291bnRdICovCisJCQkJCWNob3NlbiA9ICZub3RudWxsa2V5 c1trZXlzQ291bnRdOworCQkJCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKGNob3NlbiwKKwkJCQkJ CQkJCQkgICAoU0tfU0VBUkNITk9UTlVMTCB8IFNLX0lTTlVMTCB8CisJCQkJCQkJCQkJCShpbXBs aWVzTk4tPnNrX2ZsYWdzICYKKwkJCQkJCQkJCQkJIChTS19CVF9ERVNDIHwgU0tfQlRfTlVMTFNf RklSU1QpKSksCisJCQkJCQkJCQkJICAgY3VyYXR0ciwKKwkJCQkJCQkJCQkgICAoKGltcGxpZXNO Ti0+c2tfZmxhZ3MgJiBTS19CVF9OVUxMU19GSVJTVCkgPworCQkJCQkJCQkJCQlCVEdyZWF0ZXJT dHJhdGVneU51bWJlciA6CisJCQkJCQkJCQkJCUJUTGVzc1N0cmF0ZWd5TnVtYmVyKSwKKwkJCQkJ CQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkJCQkJ ICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkgICAoRGF0dW0pIDApOworCQkJCX0KKworCQkJCS8q CisJCQkJICogSWYgd2Ugc3RpbGwgZGlkbid0IGZpbmQgYSB1c2FibGUgYm91bmRhcnkga2V5LCBx dWl0OyBlbHNlCisJCQkJICogc2F2ZSB0aGUgYm91bmRhcnkga2V5IHBvaW50ZXIgaW4gc3RhcnRL ZXlzLgorCQkJCSAqLworCQkJCWlmIChjaG9zZW4gPT0gTlVMTCAmJiBjdXJhdHRyID4gcHJlZml4 KQorCQkJCQlicmVhazsKKwkJCQlzdGFydEtleXNba2V5c0NvdW50KytdID0gY2hvc2VuOworCisJ CQkJLyoKKwkJCQkgKiBBZGp1c3Qgc3RyYXRfdG90YWwsIGFuZCBxdWl0IGlmIHdlIGhhdmUgc3Rv cmVkIGEgPiBvciA8CisJCQkJICoga2V5LgorCQkJCSAqLworCQkJCWlmIChjaG9zZW4gIT0gTlVM TCAmJiBjdXJhdHRyID4gcHJlZml4KQorCQkJCXsKKwkJCQkJc3RyYXQgPSBjaG9zZW4tPnNrX3N0 cmF0ZWd5OworCQkJCQlpZiAoc3RyYXQgIT0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJCQl7 CisJCQkJCQkqc3RyYXRUb3RhbCA9IHN0cmF0OworCQkJCQkJaWYgKHN0cmF0ID09IEJUR3JlYXRl clN0cmF0ZWd5TnVtYmVyIHx8CisJCQkJCQkJc3RyYXQgPT0gQlRMZXNzU3RyYXRlZ3lOdW1iZXIp CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIERvbmUgaWYg dGhhdCB3YXMgdGhlIGxhc3QgYXR0cmlidXRlLCBvciBpZiBuZXh0IGtleSBpcyBub3QKKwkJCQkg KiBpbiBzZXF1ZW5jZSAoaW1wbHlpbmcgbm8gYm91bmRhcnkga2V5IGlzIGF2YWlsYWJsZSBmb3Ig dGhlCisJCQkJICogbmV4dCBhdHRyaWJ1dGUpLgorCQkJCSAqLworCQkJCWlmIChpID49IG51bWJl ck9mS2V5cykKKwkJCQl7CisJCQkJCWN1cmF0dHIrKzsKKwkJCQkJd2hpbGUoY3VyYXR0ciA8PSBw cmVmaXgpCisJCQkJCXsKKwkJCQkJCXN0YXJ0S2V5c1trZXlzQ291bnQrK10gPSBOVUxMOworCQkJ CQkJY3VyYXR0cisrOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmIChj dXItPnNrX2F0dG5vICE9IGN1cmF0dHIgKyAxKQorCQkJCXsKKwkJCQkJY3VyYXR0cisrOworCQkJ CQl3aGlsZShjdXJhdHRyIDwgY3VyLT5za19hdHRubyAmJiBjdXJhdHRyIDw9IHByZWZpeCkKKwkJ CQkJeworCQkJCQkJc3RhcnRLZXlzW2tleXNDb3VudCsrXSA9IE5VTEw7CisJCQkJCQljdXJhdHRy Kys7CisJCQkJCX0KKwkJCQkJaWYgKGN1cmF0dHIgPiBwcmVmaXggJiYgY3VyYXR0ciAhPSBjdXIt PnNrX2F0dG5vKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWN1 cmF0dHIrKzsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFJlc2V0IGZvciBuZXh0IGF0dHIuCisJ CQkJICovCisJCQkJY2hvc2VuID0gTlVMTDsKKwkJCQlpbXBsaWVzTk4gPSBOVUxMOworCQkJfQor CisJCQkvKgorCQkJICogQ2FuIHdlIHVzZSB0aGlzIGtleSBhcyBhIHN0YXJ0aW5nIGJvdW5kYXJ5 IGZvciB0aGlzIGF0dHI/CisJCQkgKgorCQkJICogSWYgbm90LCBkb2VzIGl0IGltcGx5IGEgTk9U IE5VTEwgY29uc3RyYWludD8gIChCZWNhdXNlCisJCQkgKiBTS19TRUFSQ0hOVUxMIGtleXMgYXJl IGFsd2F5cyBhc3NpZ25lZCBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkgKiAqYW55KiBpbmVx dWFsaXR5IGtleSB3b3JrcyBmb3IgdGhhdDsgd2UgbmVlZCBub3QgdGVzdC4pCisJCQkgKi8KKwkJ CXN3aXRjaCAoY3VyLT5za19zdHJhdGVneSkKKwkJCXsKKwkJCQljYXNlIEJUTGVzc1N0cmF0ZWd5 TnVtYmVyOgorCQkJCWNhc2UgQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjoKKwkJCQkJaWYgKGNo b3NlbiA9PSBOVUxMKQorCQkJCQl7CisJCQkJCQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQo ZGlyKSkKKwkJCQkJCQljaG9zZW4gPSBjdXI7CisJCQkJCQllbHNlCisJCQkJCQkJaW1wbGllc05O ID0gY3VyOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQlRFcXVhbFN0cmF0ZWd5TnVt YmVyOgorCQkJCQkvKiBvdmVycmlkZSBhbnkgbm9uLWVxdWFsaXR5IGNob2ljZSAqLworCQkJCQlj aG9zZW4gPSBjdXI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQlRHcmVhdGVyRXF1YWxTdHJhdGVn eU51bWJlcjoKKwkJCQljYXNlIEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyOgorCQkJCQlpZiAoY2hv c2VuID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCisJCQkJCQkJY2hvc2VuID0gY3VyOworCQkJCQkJZWxzZQorCQkJCQkJCWltcGxpZXNOTiA9 IGN1cjsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4ga2V5c0Nv dW50OworfQorCit2b2lkIHByaW50X2l0dXAoQmxvY2tOdW1iZXIgYmxrLCBJbmRleFR1cGxlIGxl ZnQsIEluZGV4VHVwbGUgcmlnaHQsIFJlbGF0aW9uIHJlbCwgY2hhciAqZXh0cmEpCit7CisJYm9v bAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlT XTsKKwljaGFyCSAgICpsa2V5X2Rlc2MgPSBOVUxMOworCWNoYXIJICAgKnJrZXlfZGVzYzsKKwor CS8qIEF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiAtLSBkb24ndCBpbnN0cnVtZW50IGNhdGFsb2cg aW5kZXhlcyAqLworCWlmICghSXNDYXRhbG9nUmVsYXRpb24ocmVsKSkKKwl7CisJCVR1cGxlRGVz YwlpdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJaW50CQkJbmF0dHM7CisJCWlu dAkJCWluZG5rZXlhdHRzID0gcmVsLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7CisKKwkJbmF0dHMg PSBCVHJlZVR1cGxlR2V0TkF0dHMobGVmdCwgcmVsKTsKKwkJaXR1cGRlc2MtPm5hdHRzID0gTWlu KGluZG5rZXlhdHRzLCBuYXR0cyk7CisJCW1lbXNldCgmaXNudWxsLCAweEZGLCBzaXplb2YoaXNu dWxsKSk7CisJCWluZGV4X2RlZm9ybV90dXBsZShsZWZ0LCBpdHVwZGVzYywgdmFsdWVzLCBpc251 bGwpOworCQlyZWwtPnJkX2luZGV4LT5pbmRua2V5YXR0cyA9IG5hdHRzOworCisJCS8qCisJCSAq IFNpbmNlIHRoZSByZWdyZXNzaW9uIHRlc3RzIHNob3VsZCBwYXNzIHdoZW4gdGhlIGluc3RydW1l bnRhdGlvbgorCQkgKiBwYXRjaCBpcyBhcHBsaWVkLCBiZSBwcmVwYXJlZCBmb3IgQnVpbGRJbmRl eFZhbHVlRGVzY3JpcHRpb24oKSB0bworCQkgKiByZXR1cm4gTlVMTCBkdWUgdG8gc2VjdXJpdHkg Y29uc2lkZXJhdGlvbnMuCisJCSAqLworCQlsa2V5X2Rlc2MgPSBCdWlsZEluZGV4VmFsdWVEZXNj cmlwdGlvbihyZWwsIHZhbHVlcywgaXNudWxsKTsKKwkJaWYgKGxrZXlfZGVzYyAmJiByaWdodCkK KwkJeworCQkJLyoKKwkJCSAqIFJldm9sdGluZyBoYWNrOiBtb2RpZnkgdHVwbGUgZGVzY3JpcHRv ciB0byBoYXZlIG51bWJlciBvZiBrZXkKKwkJCSAqIGNvbHVtbnMgYWN0dWFsbHkgcHJlc2VudCBp biBjYWxsZXIncyBwaXZvdCB0dXBsZXMKKwkJCSAqLworCQkJbmF0dHMgPSBCVHJlZVR1cGxlR2V0 TkF0dHMocmlnaHQsIHJlbCk7CisJCQlpdHVwZGVzYy0+bmF0dHMgPSBNaW4oaW5kbmtleWF0dHMs IG5hdHRzKTsKKwkJCW1lbXNldCgmaXNudWxsLCAweEZGLCBzaXplb2YoaXNudWxsKSk7CisJCQlp bmRleF9kZWZvcm1fdHVwbGUocmlnaHQsIGl0dXBkZXNjLCB2YWx1ZXMsIGlzbnVsbCk7CisJCQly ZWwtPnJkX2luZGV4LT5pbmRua2V5YXR0cyA9IG5hdHRzOworCQkJcmtleV9kZXNjID0gQnVpbGRJ bmRleFZhbHVlRGVzY3JpcHRpb24ocmVsLCB2YWx1ZXMsIGlzbnVsbCk7CisJCQllbG9nKERFQlVH MSwgIiVzIGJsayAldSBzayA+ICVzLCBzayA8PSAlcyAlcyIsCisJCQkJIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCksIGJsaywgbGtleV9kZXNjLCBya2V5X2Rlc2MsCisJCQkJIGV4dHJhKTsK KwkJCXBmcmVlKHJrZXlfZGVzYyk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhERUJVRzEsICIlcyBi bGsgJXUgc2sgY2hlY2sgJXMgJXMiLAorCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp LCBibGssIGxrZXlfZGVzYywgZXh0cmEpOworCisJCS8qIENsZWFudXAgKi8KKwkJaXR1cGRlc2Mt Pm5hdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mQXR0cmlidXRlcyhyZWwpOworCQlyZWwt PnJkX2luZGV4LT5pbmRua2V5YXR0cyA9IGluZG5rZXlhdHRzOworCQlpZiAobGtleV9kZXNjKQor CQkJcGZyZWUobGtleV9kZXNjKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMKaW5kZXggMWFlNzQ5MjIxNi4uYTBmMTBlYmJkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwpAQCAtNzMsNiArNzMsOSBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJYW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzcGdidWxrZGVsZXRlOwogCWFtcm91dGluZS0+ YW12YWN1dW1jbGVhbnVwID0gc3BndmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0 dXJuID0gc3BnY2FucmV0dXJuOworCWFtcm91dGluZS0+YW1za2lwID0gTlVMTDsKKwlhbXJvdXRp bmUtPmFtYmVnaW5za2lwc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldHNraXB0dXBsZSA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IHNwZ2Nvc3Rlc3RpbWF0ZTsKIAlh bXJvdXRpbmUtPmFtb3B0aW9ucyA9IHNwZ29wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5 ID0gc3BncHJvcGVydHk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjk3MDk5N2MzNC4uZjJj ZTE4OTNmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTUyLDYgKzE1Miw3IEBAIHN0YXRp YyB2b2lkIEV4cGxhaW5YTUxUYWcoY29uc3QgY2hhciAqdGFnbmFtZSwgaW50IGZsYWdzLCBFeHBs YWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIEV4cGxhaW5JbmRlbnRUZXh0KEV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIHZvaWQgRXhwbGFpbkpTT05MaW5lRW5kaW5nKEV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgRXhwbGFpbllBTUxMaW5lU3RhcnRpbmcoRXhwbGFpblN0YXRlICpl cyk7CitzdGF0aWMgdm9pZCBFeHBsYWluSW5kZXhTa2lwU2NhbktleXMoaW50IHNraXBQcmVmaXhT aXplLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIGVzY2FwZV95YW1sKFN0cmluZ0lu Zm8gYnVmLCBjb25zdCBjaGFyICpzdHIpOwogCiAKQEAgLTExMTQsNiArMTExNSwyMiBAQCBFeHBs YWluUHJlU2Nhbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIEJpdG1hcHNldCAqKnJlbHNfdXNl ZCkKIAlyZXR1cm4gcGxhbnN0YXRlX3RyZWVfd2Fsa2VyKHBsYW5zdGF0ZSwgRXhwbGFpblByZVNj YW5Ob2RlLCByZWxzX3VzZWQpOwogfQogCisvKgorICogRXhwbGFpbkluZGV4U2tpcFNjYW5LZXlz IC0KKyAqCSAgQXBwZW5kIGluZm9ybWF0aW9uIGFib3V0IGluZGV4IHNraXAgc2NhbiB0byBlcy0+ c3RyLgorICoKKyAqIENhbiBiZSB1c2VkIHRvIHByaW50IHRoZSBza2lwIHByZWZpeCBzaXplLgor ICovCitzdGF0aWMgdm9pZAorRXhwbGFpbkluZGV4U2tpcFNjYW5LZXlzKGludCBza2lwUHJlZml4 U2l6ZSwgRXhwbGFpblN0YXRlICplcykKK3sKKwlpZiAoc2tpcFByZWZpeFNpemUgPiAwKQorCXsK KwkJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJCUV4cGxhaW5Qcm9w ZXJ0eUludGVnZXIoIkRpc3RpbmN0IFByZWZpeCIsIE5VTEwsIHNraXBQcmVmaXhTaXplLCBlcyk7 CisJfQorfQorCiAvKgogICogRXhwbGFpbk5vZGUgLQogICoJICBBcHBlbmRzIGEgZGVzY3JpcHRp b24gb2YgYSBwbGFuIHRyZWUgdG8gZXMtPnN0cgpAQCAtMTQ2MSw2ICsxNDc4LDkgQEAgRXhwbGFp bk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCXsKIAkJCQlJ bmRleFNjYW4gICppbmRleHNjYW4gPSAoSW5kZXhTY2FuICopIHBsYW47CiAKKwkJCQlpZiAoaW5k ZXhzY2FuLT5pbmRleGRpc3RpbmN0KQorCQkJCQlFeHBsYWluSW5kZXhTa2lwU2NhbktleXMoaW5k ZXhzY2FuLT5pbmRleHNraXBwcmVmaXhzaXplLCBlcyk7CisKIAkJCQlFeHBsYWluSW5kZXhTY2Fu RGV0YWlscyhpbmRleHNjYW4tPmluZGV4aWQsCiAJCQkJCQkJCQkJaW5kZXhzY2FuLT5pbmRleG9y ZGVyZGlyLAogCQkJCQkJCQkJCWVzKTsKQEAgLTE0NzEsNiArMTQ5MSw5IEBAIEV4cGxhaW5Ob2Rl KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQl7CiAJCQkJSW5kZXhP bmx5U2NhbiAqaW5kZXhvbmx5c2NhbiA9IChJbmRleE9ubHlTY2FuICopIHBsYW47CiAKKwkJCQlp ZiAoaW5kZXhvbmx5c2Nhbi0+aW5kZXhkaXN0aW5jdCkKKwkJCQkJRXhwbGFpbkluZGV4U2tpcFNj YW5LZXlzKGluZGV4b25seXNjYW4tPmluZGV4c2tpcHByZWZpeHNpemUsIGVzKTsKKwogCQkJCUV4 cGxhaW5JbmRleFNjYW5EZXRhaWxzKGluZGV4b25seXNjYW4tPmluZGV4aWQsCiAJCQkJCQkJCQkJ aW5kZXhvbmx5c2Nhbi0+aW5kZXhvcmRlcmRpciwKIAkJCQkJCQkJCQllcyk7CkBAIC0xNzMxLDYg KzE3NTQsOCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9JbmRleFNjYW46CisJ CQlpZiAoKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4c2tpcHByZWZpeHNpemUgPiAwKQorCQkJ CUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlNraXAgc2NhbiIsICgoSW5kZXhTY2FuICopIHBsYW4pLT5p bmRleGRpc3RpbmN0ID8gIkRpc3RpbmN0IG9ubHkiIDogIkFsbCIsIGVzKTsKIAkJCXNob3dfc2Nh bl9xdWFsKCgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIklu ZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwogCQkJaWYgKCgoSW5kZXhTY2Fu ICopIHBsYW4pLT5pbmRleHF1YWxvcmlnKQpAQCAtMTc0NCw2ICsxNzY5LDggQEAgRXhwbGFpbk5v ZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJCQkgICBw bGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCWlm ICgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4c2tpcHByZWZpeHNpemUgPiAwKQorCQkJ CUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlNraXAgc2NhbiIsICgoSW5kZXhPbmx5U2NhbiAqKSBwbGFu KS0+aW5kZXhkaXN0aW5jdCA/ICJEaXN0aW5jdCBvbmx5IiA6ICJBbGwiLCBlcyk7CiAJCQlzaG93 X3NjYW5fcXVhbCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKIAkJCQkJCSAg ICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKIAkJCWlmICgoKEluZGV4 T25seVNjYW4gKikgcGxhbiktPnJlY2hlY2txdWFsKQpAQCAtMTc2MCw2ICsxNzg3LDggQEAgRXhw bGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJ CSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7CiAJCQlicmVhazsKIAkJ Y2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKKwkJCWlmICgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFu KS0+aW5kZXhza2lwcHJlZml4c2l6ZSA+IDApCisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU2tp cCBzY2FuIiwgIkFsbCIsIGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2Fu ICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3Rh dGUsIGFuY2VzdG9ycywgZXMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjU2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYwppbmRl eCAwNDNiYjgzZjU1Li5mYjU2MTA5ZTg5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjU2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTY2FuLmMKQEAgLTEz Myw2ICsxMzMsMTQgQEAgRXhlY1NjYW5GZXRjaChTY2FuU3RhdGUgKm5vZGUsCiAJcmV0dXJuICgq YWNjZXNzTXRkKSAobm9kZSk7CiB9CiAKK1R1cGxlVGFibGVTbG90ICoKK0V4ZWNTY2FuKFNjYW5T dGF0ZSAqbm9kZSwKKwkJIEV4ZWNTY2FuQWNjZXNzTXRkIGFjY2Vzc010ZCwJLyogZnVuY3Rpb24g cmV0dXJuaW5nIGEgdHVwbGUgKi8KKwkJIEV4ZWNTY2FuUmVjaGVja010ZCByZWNoZWNrTXRkKQor eworCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkKG5vZGUsIGFjY2Vzc010ZCwgcmVjaGVja010ZCwg TlVMTCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjU2NhbgogICoKQEAgLTE1NSw5ICsxNjMs MTAgQEAgRXhlY1NjYW5GZXRjaChTY2FuU3RhdGUgKm5vZGUsCiAgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIFR1 cGxlVGFibGVTbG90ICoKLUV4ZWNTY2FuKFNjYW5TdGF0ZSAqbm9kZSwKK0V4ZWNTY2FuRXh0ZW5k ZWQoU2NhblN0YXRlICpub2RlLAogCQkgRXhlY1NjYW5BY2Nlc3NNdGQgYWNjZXNzTXRkLAkvKiBm dW5jdGlvbiByZXR1cm5pbmcgYSB0dXBsZSAqLwotCQkgRXhlY1NjYW5SZWNoZWNrTXRkIHJlY2hl Y2tNdGQpCisJCSBFeGVjU2NhblJlY2hlY2tNdGQgcmVjaGVja010ZCwKKwkJIEV4ZWNTY2FuU2tp cE10ZCBza2lwTXRkKQogewogCUV4cHJDb250ZXh0ICplY29udGV4dDsKIAlFeHByU3RhdGUgICpx dWFsOwpAQCAtMTcwLDYgKzE3OSwyMCBAQCBFeGVjU2NhbihTY2FuU3RhdGUgKm5vZGUsCiAJcHJv akluZm8gPSBub2RlLT5wcy5wc19Qcm9qSW5mbzsKIAllY29udGV4dCA9IG5vZGUtPnBzLnBzX0V4 cHJDb250ZXh0OwogCisJaWYgKHNraXBNdGQgIT0gTlVMTCAmJiBub2RlLT5zc19GaXJzdFR1cGxl RW1pdHRlZCkKKwl7CisJCWJvb2wgY29udCA9IHNraXBNdGQobm9kZSk7CisJCWlmICghY29udCkK KwkJeworCQkJbm9kZS0+c3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSBmYWxzZTsKKwkJCXJldHVybiBF eGVjQ2xlYXJUdXBsZShub2RlLT5zc19TY2FuVHVwbGVTbG90KTsKKwkJfQorCX0KKwllbHNlCisJ eworCQlub2RlLT5zc19GaXJzdFR1cGxlRW1pdHRlZCA9IHRydWU7CisJfQorCiAJLyogaW50ZXJy dXB0IGNoZWNrcyBhcmUgaW4gRXhlY1NjYW5GZXRjaCAqLwogCiAJLyoKQEAgLTE3OCw4ICsyMDEs MTMgQEAgRXhlY1NjYW4oU2NhblN0YXRlICpub2RlLAogCSAqLwogCWlmICghcXVhbCAmJiAhcHJv akluZm8pCiAJeworCQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwogCQlSZXNldEV4cHJDb250ZXh0 KGVjb250ZXh0KTsKLQkJcmV0dXJuIEV4ZWNTY2FuRmV0Y2gobm9kZSwgYWNjZXNzTXRkLCByZWNo ZWNrTXRkKTsKKwkJc2xvdCA9IEV4ZWNTY2FuRmV0Y2gobm9kZSwgYWNjZXNzTXRkLCByZWNoZWNr TXRkKTsKKwkJaWYgKFR1cElzTnVsbChzbG90KSkKKwkJCW5vZGUtPnNzX0ZpcnN0VHVwbGVFbWl0 dGVkID0gZmFsc2U7CisJCXJldHVybiBzbG90OwogCX0KIAogCS8qCkBAIC0yMDYsNiArMjM0LDcg QEAgRXhlY1NjYW4oU2NhblN0YXRlICpub2RlLAogCQkgKi8KIAkJaWYgKFR1cElzTnVsbChzbG90 KSkKIAkJeworCQkJbm9kZS0+c3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSBmYWxzZTsKIAkJCWlmIChw cm9qSW5mbykKIAkJCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUocHJvakluZm8tPnBpX3N0YXRlLnJl c3VsdHNsb3QpOwogCQkJZWxzZQpAQCAtMzA2LDYgKzMzNSw4IEBAIEV4ZWNTY2FuUmVTY2FuKFNj YW5TdGF0ZSAqbm9kZSkKIAkgKi8KIAlFeGVjQ2xlYXJUdXBsZShub2RlLT5zc19TY2FuVHVwbGVT bG90KTsKIAorCW5vZGUtPnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisKIAkvKiBSZXNj YW4gRXZhbFBsYW5RdWFsIHR1cGxlIGlmIHdlJ3JlIGluc2lkZSBhbiBFdmFsUGxhblF1YWwgcmVj aGVjayAqLwogCWlmIChlc3RhdGUtPmVzX2VwcV9hY3RpdmUgIT0gTlVMTCkKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNTUxZTQ3NjMwZC4uNWMw NDAxMjUzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4 c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwpA QCAtMjIsMTMgKzIyLDE0IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFj Y2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY2RlYnVnLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nh bi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjQml0bWFwSW5kZXhTY2FuCiAgKgpAQCAtMjIz LDYgKzIyNCw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhbiAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+c3MucHMucGxhbiA9 IChQbGFuICopIG5vZGU7CiAJaW5kZXhzdGF0ZS0+c3MucHMuc3RhdGUgPSBlc3RhdGU7CiAJaW5k ZXhzdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY0JpdG1hcEluZGV4U2NhbjsKKwlpbmRl eHN0YXRlLT5zcy5zc19GaXJzdFR1cGxlRW1pdHRlZCA9IGZhbHNlOwogCiAJLyogbm9ybWFsbHkg d2UgZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IGJpdG1hcCB0aWxsIHJ1bnRpbWUgKi8KIAlpbmRleHN0 YXRlLT5iaXNzX3Jlc3VsdCA9IE5VTEw7CkBAIC0zMDgsMTAgKzMxMCwyMCBAQCBFeGVjSW5pdEJp dG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCS8qCiAJICogSW5pdGlhbGl6ZSBzY2FuIGRlc2NyaXB0b3IuCiAJICovCi0JaW5k ZXhzdGF0ZS0+Ymlzc19TY2FuRGVzYyA9Ci0JCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhz dGF0ZS0+Ymlzc19SZWxhdGlvbkRlc2MsCi0JCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwK LQkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsKKwlpZiAobm9kZS0+aW5k ZXhza2lwcHJlZml4c2l6ZSA+IDApCisJeworCQlpbmRleHN0YXRlLT5iaXNzX1NjYW5EZXNjID0K KwkJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXBfc2tpcChpbmRleHN0YXRlLT5iaXNzX1JlbGF0aW9u RGVzYywKKwkJCQllc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCWluZGV4c3RhdGUtPmJpc3NfTnVt U2NhbktleXMsCisJCQkJTWluKEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMo aW5kZXhzdGF0ZS0+Ymlzc19SZWxhdGlvbkRlc2MpLAorCQkJCQlub2RlLT5pbmRleHNraXBwcmVm aXhzaXplKSk7CisJfQorCWVsc2UKKwkJaW5kZXhzdGF0ZS0+Ymlzc19TY2FuRGVzYyA9CisJCQlp bmRleF9iZWdpbnNjYW5fYml0bWFwKGluZGV4c3RhdGUtPmJpc3NfUmVsYXRpb25EZXNjLAorCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNz X051bVNjYW5LZXlzKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxh dGUsIGdvIGFoZWFkIGFuZCBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGViM2RkZDI5NDMuLmYzZWE0ZDQ0MTcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtNDEsNiArNDEsNyBA QAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2l0ZW1wdHIu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog CkBAIC00OSw2ICs1MCwzNyBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShU dXBsZVRhYmxlU2xvdCAqc2xvdCwgSW5kZXhUdXBsZSBpdHVwLAogCQkJCQkJCVR1cGxlRGVzYyBp dHVwZGVzYyk7CiAKK3N0YXRpYyBib29sCitJbmRleE9ubHlTa2lwKEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSkKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bjsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCUluZGV4T25seVNjYW4gKmluZGV4b25seXNj YW4gPSAoSW5kZXhPbmx5U2NhbiAqKSBub2RlLT5zcy5wcy5wbGFuOworCisJaWYgKCFub2RlLT5p b3NzX0Rpc3RpbmN0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogZXh0cmFjdCBuZWNlc3Nh cnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKKwkgKi8KKwllc3RhdGUgPSBub2Rl LT5zcy5wcy5zdGF0ZTsKKwlkaXJlY3Rpb24gPSBlc3RhdGUtPmVzX2RpcmVjdGlvbjsKKwkvKiBm bGlwIGRpcmVjdGlvbiBpZiB0aGlzIGlzIGFuIG92ZXJhbGwgYmFja3dhcmQgc2NhbiAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChpbmRleG9ubHlzY2FuLT5pbmRleG9yZGVyZGlyKSkK Kwl7CisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rp b24gPSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247CisJCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0Jh Y2t3YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24gPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsK Kwl9CisJc2NhbmRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOworCisJaWYgKCFpbmRleF9za2lw KHNjYW5kZXNjLCBkaXJlY3Rpb24sIGluZGV4b25seXNjYW4tPmluZGV4b3JkZXJkaXIpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUluZGV4 T25seU5leHQKQEAgLTY1LDYgKzk3LDggQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xv dDsKIAlJdGVtUG9pbnRlciB0aWQ7CisJSXRlbVBvaW50ZXJEYXRhIHN0YXJ0VGlkOworCUluZGV4 T25seVNjYW4gKmluZGV4b25seXNjYW4gPSAoSW5kZXhPbmx5U2NhbiAqKSBub2RlLT5zcy5wcy5w bGFuOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4 IHNjYW4gbm9kZQpAQCAtNzIsNyArMTA2LDcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2Fu U3RhdGUgKm5vZGUpCiAJZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CiAJZGlyZWN0aW9uID0g ZXN0YXRlLT5lc19kaXJlY3Rpb247CiAJLyogZmxpcCBkaXJlY3Rpb24gaWYgdGhpcyBpcyBhbiBv dmVyYWxsIGJhY2t3YXJkIHNjYW4gKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoKChJ bmRleE9ubHlTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKSkKKwlpZiAo U2NhbkRpcmVjdGlvbklzQmFja3dhcmQoaW5kZXhvbmx5c2Nhbi0+aW5kZXhvcmRlcmRpcikpCiAJ ewogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQogCQkJZGlyZWN0aW9u ID0gQmFja3dhcmRTY2FuRGlyZWN0aW9uOwpAQCAtOTAsMTEgKzEyNCwxOSBAQCBJbmRleE9ubHlO ZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFu IGluZGV4IG9ubHkgc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlCiAJCSAqIHBhcmFsbGVsLgog CQkgKi8KLQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICAg ZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywK LQkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJCWlmIChub2RlLT5pb3Nz X1NraXBQcmVmaXhTaXplID4gMCkKKwkJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuX3NraXAo bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxh dGlvbkRlc2MsCisJCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkJICAg bm9kZS0+aW9zc19OdW1TY2FuS2V5cywKKwkJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJC eUtleXMsCisJCQkJCQkJCQkgICBNaW4oSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmli dXRlcyhub2RlLT5pb3NzX1JlbGF0aW9uRGVzYyksIG5vZGUtPmlvc3NfU2tpcFByZWZpeFNpemUp KTsKKwkJZWxzZQorCQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAorCQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAorCQkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1T Y2FuS2V5cywKKwkJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCiAJCW5v ZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtMTE0LDExICsxNTYsMTYgQEAgSW5k ZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkgbm9kZS0+aW9zc19P cmRlckJ5S2V5cywKIAkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAl9CisJZWxz ZQorCXsKKwkJSXRlbVBvaW50ZXJDb3B5KCZzY2FuZGVzYy0+eHNfaGVhcHRpZCwgJnN0YXJ0VGlk KTsKKwl9CiAKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0 Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAoKHRpZCA9IG5vZGUtPmlv c3NfU2tpcFByZWZpeFNpemUgPiAwID8gaW5kZXhfZ2V0bmV4dF90aWRfc2tpcChzY2FuZGVzYywg ZGlyZWN0aW9uLCBub2RlLT5pb3NzX0Rpc3RpbmN0ID8gaW5kZXhvbmx5c2Nhbi0+aW5kZXhvcmRl cmRpciA6IGRpcmVjdGlvbikgOgorCQkJaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVj dGlvbikpICE9IE5VTEwpCiAJewogCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKIApA QCAtMzEyLDkgKzM1OSwxMCBAQCBFeGVjSW5kZXhPbmx5U2NhbihQbGFuU3RhdGUgKnBzdGF0ZSkK IAlpZiAobm9kZS0+aW9zc19OdW1SdW50aW1lS2V5cyAhPSAwICYmICFub2RlLT5pb3NzX1J1bnRp bWVLZXlzUmVhZHkpCiAJCUV4ZWNSZVNjYW4oKFBsYW5TdGF0ZSAqKSBub2RlKTsKIAotCXJldHVy biBFeGVjU2Nhbigmbm9kZS0+c3MsCisJcmV0dXJuIEV4ZWNTY2FuRXh0ZW5kZWQoJm5vZGUtPnNz LAogCQkJCQkoRXhlY1NjYW5BY2Nlc3NNdGQpIEluZGV4T25seU5leHQsCi0JCQkJCShFeGVjU2Nh blJlY2hlY2tNdGQpIEluZGV4T25seVJlY2hlY2spOworCQkJCQkoRXhlY1NjYW5SZWNoZWNrTXRk KSBJbmRleE9ubHlSZWNoZWNrLAorCQkJCQlub2RlLT5pb3NzX0Rpc3RpbmN0ID8gKEV4ZWNTY2Fu U2tpcE10ZCkgSW5kZXhPbmx5U2tpcCA6IE5VTEwpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MDIs NiArNTUwLDkgQEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPnNzLnBzLnBsYW4gPSAoUGxh biAqKSBub2RlOwogCWluZGV4c3RhdGUtPnNzLnBzLnN0YXRlID0gZXN0YXRlOwogCWluZGV4c3Rh dGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNJbmRleE9ubHlTY2FuOworCWluZGV4c3RhdGUt PnNzLnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJaW5kZXhzdGF0ZS0+aW9zc19Ta2lw UHJlZml4U2l6ZSA9IG5vZGUtPmluZGV4c2tpcHByZWZpeHNpemU7CisJaW5kZXhzdGF0ZS0+aW9z c19EaXN0aW5jdCA9IG5vZGUtPmluZGV4ZGlzdGluY3Q7CiAKIAkvKgogCSAqIE1pc2NlbGxhbmVv dXMgaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBh OTFmMTM1YmU3Li4zNDljMzU2NTg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j CkBAIC02OSw2ICs2OSwzNyBAQCBzdGF0aWMgdm9pZCByZW9yZGVycXVldWVfcHVzaChJbmRleFNj YW5TdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJICBEYXR1bSAqb3Jk ZXJieXZhbHMsIGJvb2wgKm9yZGVyYnludWxscyk7CiBzdGF0aWMgSGVhcFR1cGxlIHJlb3JkZXJx dWV1ZV9wb3AoSW5kZXhTY2FuU3RhdGUgKm5vZGUpOwogCitzdGF0aWMgYm9vbAorSW5kZXhTa2lw KEluZGV4U2NhblN0YXRlICpub2RlKQoreworCUVTdGF0ZQkgICAqZXN0YXRlOworCVNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uOworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CisJSW5kZXhTY2FuICpp bmRleHNjYW4gPSAoSW5kZXhTY2FuICopIG5vZGUtPnNzLnBzLnBsYW47CisKKwlpZiAoIW5vZGUt Pmlzc19EaXN0aW5jdCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIGV4dHJhY3QgbmVjZXNz YXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCisJICovCisJZXN0YXRlID0gbm9k ZS0+c3MucHMuc3RhdGU7CisJZGlyZWN0aW9uID0gZXN0YXRlLT5lc19kaXJlY3Rpb247CisJLyog ZmxpcCBkaXJlY3Rpb24gaWYgdGhpcyBpcyBhbiBvdmVyYWxsIGJhY2t3YXJkIHNjYW4gKi8KKwlp ZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoaW5kZXhzY2FuLT5pbmRleG9yZGVyZGlyKSkKKwl7 CisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24g PSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247CisJCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24gPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKKwl9 CisJc2NhbmRlc2MgPSBub2RlLT5pc3NfU2NhbkRlc2M7CisKKwlpZiAoIWluZGV4X3NraXAoc2Nh bmRlc2MsIGRpcmVjdGlvbiwgaW5kZXhzY2FuLT5pbmRleG9yZGVyZGlyKSkKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlJbmRleE5leHQKQEAg LTg1LDYgKzExNiw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVT bG90ICpzbG90OworCUluZGV4U2NhbiAqaW5kZXhzY2FuID0gKEluZGV4U2NhbiAqKSBub2RlLT5z cy5wcy5wbGFuOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9t IGluZGV4IHNjYW4gbm9kZQpAQCAtOTIsNyArMTI0LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0 YXRlICpub2RlKQogCWVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwogCWRpcmVjdGlvbiA9IGVz dGF0ZS0+ZXNfZGlyZWN0aW9uOwogCS8qIGZsaXAgZGlyZWN0aW9uIGlmIHRoaXMgaXMgYW4gb3Zl cmFsbCBiYWNrd2FyZCBzY2FuICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKCgoSW5k ZXhTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKSkKKwlpZiAoU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoaW5kZXhzY2FuLT5pbmRleG9yZGVyZGlyKSkKIAl7CiAJCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCiAJCQlkaXJlY3Rpb24gPSBCYWNrd2Fy ZFNjYW5EaXJlY3Rpb247CkBAIC0xMDksMTQgKzE0MSwyNSBAQCBJbmRleE5leHQoSW5kZXhTY2Fu U3RhdGUgKm5vZGUpCiAJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGluZGV4IHNjYW4gaXMgbm90 IHBhcmFsbGVsLCBvciBpZiB3ZSdyZQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXgg c2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KLQkJc2NhbmRlc2Mg PSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkg ICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90 LAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlz c19OdW1PcmRlckJ5S2V5cyk7CisJCWlmIChub2RlLT5pc3NfU2tpcFByZWZpeFNpemUgPiAwKQor CQkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW5fc2tpcChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCisJCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJICAg ZXN0YXRlLT5lc19zbmFwc2hvdCwKKwkJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywK KwkJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJCSAgIE1pbihJ bmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKG5vZGUtPmlzc19SZWxhdGlvbkRl c2MpLCBub2RlLT5pc3NfU2tpcFByZWZpeFNpemUpKTsKKwkJZWxzZQorCQkJc2NhbmRlc2MgPSBp bmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkJICAg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3Qs CisJCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCisJCQkJCQkJCQkgICBub2RlLT5p c3NfTnVtT3JkZXJCeUtleXMpOwogCiAJCW5vZGUtPmlzc19TY2FuRGVzYyA9IHNjYW5kZXNjOwog CisJCS8qIEluZGV4IHNraXAgc2NhbiBhc3N1bWVzIHhzX3dhbnRfaXR1cCwgc28gc2V0IGl0IHRv IHRydWUgaWYgd2Ugc2tpcCBvdmVyIGRpc3RpbmN0ICovCisJCW5vZGUtPmlzc19TY2FuRGVzYy0+ eHNfd2FudF9pdHVwID0gaW5kZXhzY2FuLT5pbmRleGRpc3RpbmN0OworCiAJCS8qCiAJCSAqIElm IG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVh ZCBhbmQKIAkJICogcGFzcyB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtMTMwLDcg KzE3Myw5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBu b3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICov Ci0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkK Kwl3aGlsZSAobm9kZS0+aXNzX1NraXBQcmVmaXhTaXplID4gMCA/CisJCSAgIGluZGV4X2dldG5l eHRfc2xvdF9za2lwKHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlzc19EaXN0aW5jdCA/IGlu ZGV4c2Nhbi0+aW5kZXhvcmRlcmRpciA6IGRpcmVjdGlvbiwgc2xvdCkgOgorCQkgICBpbmRleF9n ZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCkBAIC01MzAsMTMgKzU3NSwxNSBAQCBFeGVjSW5kZXhTY2FuKFBsYW5T dGF0ZSAqcHN0YXRlKQogCQlFeGVjUmVTY2FuKChQbGFuU3RhdGUgKikgbm9kZSk7CiAKIAlpZiAo bm9kZS0+aXNzX051bU9yZGVyQnlLZXlzID4gMCkKLQkJcmV0dXJuIEV4ZWNTY2FuKCZub2RlLT5z cywKKwkJcmV0dXJuIEV4ZWNTY2FuRXh0ZW5kZWQoJm5vZGUtPnNzLAogCQkJCQkJKEV4ZWNTY2Fu QWNjZXNzTXRkKSBJbmRleE5leHRXaXRoUmVvcmRlciwKLQkJCQkJCShFeGVjU2NhblJlY2hlY2tN dGQpIEluZGV4UmVjaGVjayk7CisJCQkJCQkoRXhlY1NjYW5SZWNoZWNrTXRkKSBJbmRleFJlY2hl Y2ssCisJCQkJCQlub2RlLT5pc3NfRGlzdGluY3QgPyAoRXhlY1NjYW5Ta2lwTXRkKSBJbmRleFNr aXAgOiBOVUxMKTsKIAllbHNlCi0JCXJldHVybiBFeGVjU2Nhbigmbm9kZS0+c3MsCisJCXJldHVy biBFeGVjU2NhbkV4dGVuZGVkKCZub2RlLT5zcywKIAkJCQkJCShFeGVjU2NhbkFjY2Vzc010ZCkg SW5kZXhOZXh0LAotCQkJCQkJKEV4ZWNTY2FuUmVjaGVja010ZCkgSW5kZXhSZWNoZWNrKTsKKwkJ CQkJCShFeGVjU2NhblJlY2hlY2tNdGQpIEluZGV4UmVjaGVjaywKKwkJCQkJCW5vZGUtPmlzc19E aXN0aW5jdCA/IChFeGVjU2NhblNraXBNdGQpIEluZGV4U2tpcCA6IE5VTEwpOwogfQogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkBAIC05MTAsNiArOTU3LDkgQEAgRXhlY0luaXRJbmRleFNjYW4oSW5kZXhTY2FuICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5zcy5wcy5wbGFu ID0gKFBsYW4gKikgbm9kZTsKIAlpbmRleHN0YXRlLT5zcy5wcy5zdGF0ZSA9IGVzdGF0ZTsKIAlp bmRleHN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjSW5kZXhTY2FuOworCWluZGV4c3Rh dGUtPnNzLnNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJaW5kZXhzdGF0ZS0+aXNzX1Nr aXBQcmVmaXhTaXplID0gbm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZTsKKwlpbmRleHN0YXRlLT5p c3NfRGlzdGluY3QgPSBub2RlLT5pbmRleGRpc3RpbmN0OwogCiAJLyoKIAkgKiBNaXNjZWxsYW5l b3VzIGluaXRpYWxpemF0aW9uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGZhOTI3YTMwNDQuLmYz ZDAwNTRhMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC00OTcsNiArNDk3LDggQEAgX2NvcHlJ bmRleFNjYW4oY29uc3QgSW5kZXhTY2FuICpmcm9tKQogCUNPUFlfTk9ERV9GSUVMRChpbmRleG9y ZGVyYnlvcmlnKTsKIAlDT1BZX05PREVfRklFTEQoaW5kZXhvcmRlcmJ5b3BzKTsKIAlDT1BZX1ND QUxBUl9GSUVMRChpbmRleG9yZGVyZGlyKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleHNraXBw cmVmaXhzaXplKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleGRpc3RpbmN0KTsKIAogCXJldHVy biBuZXdub2RlOwogfQpAQCAtNTIzLDYgKzUyNSw4IEBAIF9jb3B5SW5kZXhPbmx5U2Nhbihjb25z dCBJbmRleE9ubHlTY2FuICpmcm9tKQogCUNPUFlfTk9ERV9GSUVMRChpbmRleG9yZGVyYnkpOwog CUNPUFlfTk9ERV9GSUVMRChpbmRleHRsaXN0KTsKIAlDT1BZX1NDQUxBUl9GSUVMRChpbmRleG9y ZGVyZGlyKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpbmRleHNraXBwcmVmaXhzaXplKTsKKwlDT1BZ X1NDQUxBUl9GSUVMRChpbmRleGRpc3RpbmN0KTsKIAogCXJldHVybiBuZXdub2RlOwogfQpAQCAt NTQ3LDYgKzU1MSw3IEBAIF9jb3B5Qml0bWFwSW5kZXhTY2FuKGNvbnN0IEJpdG1hcEluZGV4U2Nh biAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChpc3NoYXJlZCk7CiAJQ09QWV9OT0RFX0ZJRUxE KGluZGV4cXVhbCk7CiAJQ09QWV9OT0RFX0ZJRUxEKGluZGV4cXVhbG9yaWcpOworCUNPUFlfU0NB TEFSX0ZJRUxEKGluZGV4c2tpcHByZWZpeHNpemUpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9k ZXMvb3V0ZnVuY3MuYwppbmRleCAyMzY5ZDI2YzhjLi44NzE4ZmZmZDI2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMKQEAgLTU2OSw2ICs1NjksOCBAQCBfb3V0SW5kZXhTY2FuKFN0cmluZ0luZm8gc3RyLCBj b25zdCBJbmRleFNjYW4gKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChpbmRleG9yZGVyYnlvcmln KTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4b3JkZXJieW9wcyk7CiAJV1JJVEVfRU5VTV9GSUVM RChpbmRleG9yZGVyZGlyLCBTY2FuRGlyZWN0aW9uKTsKKwlXUklURV9JTlRfRklFTEQoaW5kZXhz a2lwcHJlZml4c2l6ZSk7CisJV1JJVEVfSU5UX0ZJRUxEKGluZGV4ZGlzdGluY3QpOwogfQogCiBz dGF0aWMgdm9pZApAQCAtNTg0LDYgKzU4Niw5IEBAIF9vdXRJbmRleE9ubHlTY2FuKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBJbmRleE9ubHlTY2FuICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoaW5k ZXhvcmRlcmJ5KTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4dGxpc3QpOwogCVdSSVRFX0VOVU1f RklFTEQoaW5kZXhvcmRlcmRpciwgU2NhbkRpcmVjdGlvbik7CisJV1JJVEVfSU5UX0ZJRUxEKGlu ZGV4c2tpcHByZWZpeHNpemUpOworCVdSSVRFX0lOVF9GSUVMRChpbmRleGRpc3RpbmN0KTsKKwog fQogCiBzdGF0aWMgdm9pZApAQCAtNTk3LDYgKzYwMiw3IEBAIF9vdXRCaXRtYXBJbmRleFNjYW4o U3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJpdG1hcEluZGV4U2NhbiAqbm9kZSkKIAlXUklURV9CT09M X0ZJRUxEKGlzc2hhcmVkKTsKIAlXUklURV9OT0RFX0ZJRUxEKGluZGV4cXVhbCk7CiAJV1JJVEVf Tk9ERV9GSUVMRChpbmRleHF1YWxvcmlnKTsKKwlXUklURV9JTlRfRklFTEQoaW5kZXhza2lwcHJl Zml4c2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDdiMWEy YTM5N2MuLmEwNTgwYmYzMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0xODc2LDYgKzE4NzYs OCBAQCBfcmVhZEluZGV4U2Nhbih2b2lkKQogCVJFQURfTk9ERV9GSUVMRChpbmRleG9yZGVyYnlv cmlnKTsKIAlSRUFEX05PREVfRklFTEQoaW5kZXhvcmRlcmJ5b3BzKTsKIAlSRUFEX0VOVU1fRklF TEQoaW5kZXhvcmRlcmRpciwgU2NhbkRpcmVjdGlvbik7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhz a2lwcHJlZml4c2l6ZSk7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhkaXN0aW5jdCk7CiAKIAlSRUFE X0RPTkUoKTsKIH0KQEAgLTE4OTYsNiArMTg5OCw4IEBAIF9yZWFkSW5kZXhPbmx5U2Nhbih2b2lk KQogCVJFQURfTk9ERV9GSUVMRChpbmRleG9yZGVyYnkpOwogCVJFQURfTk9ERV9GSUVMRChpbmRl eHRsaXN0KTsKIAlSRUFEX0VOVU1fRklFTEQoaW5kZXhvcmRlcmRpciwgU2NhbkRpcmVjdGlvbik7 CisJUkVBRF9JTlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CisJUkVBRF9JTlRfRklFTEQo aW5kZXhkaXN0aW5jdCk7CiAKIAlSRUFEX0RPTkUoKTsKIH0KQEAgLTE5MTQsNiArMTkxOCw3IEBA IF9yZWFkQml0bWFwSW5kZXhTY2FuKHZvaWQpCiAJUkVBRF9CT09MX0ZJRUxEKGlzc2hhcmVkKTsK IAlSRUFEX05PREVfRklFTEQoaW5kZXhxdWFsKTsKIAlSRUFEX05PREVfRklFTEQoaW5kZXhxdWFs b3JpZyk7CisJUkVBRF9JTlRfRklFTEQoaW5kZXhza2lwcHJlZml4c2l6ZSk7CiAKIAlSRUFEX0RP TkUoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IGFjOTUwMTVi NTYuLjYxMDUyOGY2MDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt MTc1Niw3ICsxNzU2LDkgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0g TklMOwogCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rp b25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkgICAqdW5pcV90b3RhbF9zdWJwYXRocyA9IE5J TDsKIAkJYm9vbAkJc3RhcnR1cF9uZXFfdG90YWwgPSBmYWxzZTsKKwkJYm9vbAkJdW5pcV9uZXFf dG90YWwgPSBmYWxzZTsKIAkJTGlzdENlbGwgICAqbGNyOwogCQlib29sCQltYXRjaF9wYXJ0aXRp b25fb3JkZXI7CiAJCWJvb2wJCW1hdGNoX3BhcnRpdGlvbl9vcmRlcl9kZXNjOwpAQCAtMTc4Niw3 ICsxNzg4LDggQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGNyKTsKIAkJCVBhdGgJICAgKmNoZWFwZXN0X3N0YXJ0dXAsCiAJCQkJCSAg ICpjaGVhcGVzdF90b3RhbCwKLQkJCQkJICAgKmNoZWFwZXN0X2ZyYWN0aW9uYWwgPSBOVUxMOwor CQkJCQkgICAqY2hlYXBlc3RfZnJhY3Rpb25hbCA9IE5VTEwsCisJCQkJCQkqY2hlYXBlc3RfdW5p cV90b3RhbCA9IE5VTEw7CiAKIAkJCS8qIExvY2F0ZSB0aGUgcmlnaHQgcGF0aHMsIGlmIHRoZXkg YXJlIGF2YWlsYWJsZS4gKi8KIAkJCWNoZWFwZXN0X3N0YXJ0dXAgPQpAQCAtMTgwMiw2ICsxODA1 LDE5IEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJICAgVE9UQUxfQ09TVCwKIAkJCQkJCQkJCQkJICAg ZmFsc2UpOwogCisJCQljaGVhcGVzdF91bmlxX3RvdGFsID0KKwkJCQlnZXRfY2hlYXBlc3RfcGF0 aF9mb3JfcGF0aGtleXMoY2hpbGRyZWwtPnVuaXF1ZV9wYXRobGlzdCwKKwkJCQkJCQkJCQkJICAg cGF0aGtleXMsCisJCQkJCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJCQkJCSAgIFRPVEFMX0NPU1Qs CisJCQkJCQkJCQkJCSAgIGZhbHNlKTsKKworCQkJaWYgKGNoZWFwZXN0X3VuaXFfdG90YWwgIT0g TlVMTCAmJiAhdW5pcV9uZXFfdG90YWwpCisJCQl7CisJCQkJdW5pcV9uZXFfdG90YWwgPSB0cnVl OworCQkJCXVuaXFfdG90YWxfc3VicGF0aHMgPSBsaXN0X2NvcHkodG90YWxfc3VicGF0aHMpOwor CQkJfQorCiAJCQkvKgogCQkJICogSWYgd2UgY2FuJ3QgZmluZCBhbnkgcGF0aHMgd2l0aCB0aGUg cmlnaHQgb3JkZXIganVzdCB1c2UgdGhlCiAJCQkgKiBjaGVhcGVzdC10b3RhbCBwYXRoOyB3ZSds bCBoYXZlIHRvIHNvcnQgaXQgbGF0ZXIuCkBAIC0xODE0LDYgKzE4MzAsOSBAQCBnZW5lcmF0ZV9v cmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsLT5wYXJhbV9pbmZvID09IE5VTEwpOwogCQkJfQogCisJ CQlpZiAoY2hlYXBlc3RfdW5pcV90b3RhbCA9PSBOVUxMKQorCQkJCWNoZWFwZXN0X3VuaXFfdG90 YWwgPSBjaGVhcGVzdF90b3RhbDsKKwogCQkJLyoKIAkJCSAqIFdoZW4gYnVpbGRpbmcgYSBmcmFj dGlvbmFsIHBhdGgsIGRldGVybWluZSBhIGNoZWFwZXN0IGZyYWN0aW9uYWwKIAkJCSAqIHBhdGgg Zm9yIGVhY2ggY2hpbGQgcmVsYXRpb24gdG9vLiBMb29raW5nIGF0IHN0YXJ0dXAgYW5kIHRvdGFs CkBAIC0xODc3LDYgKzE4OTYsMTEgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFs ID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9mcmFjdGlvbmFsKTsKIAkJ CQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQoZnJhY3Rpb25hbF9zdWJwYXRocywgY2hl YXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQorCQkJCWlmICh1bmlxX25lcV90b3RhbCkKKwkJCQl7 CisJCQkJCWNoZWFwZXN0X3VuaXFfdG90YWwgPSBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X3VuaXFfdG90YWwpOworCQkJCQl1bmlxX3RvdGFsX3N1YnBhdGhzID0gbGFwcGVu ZCh1bmlxX3RvdGFsX3N1YnBhdGhzLCBjaGVhcGVzdF91bmlxX3RvdGFsKTsKKwkJCQl9CiAJCQl9 CiAJCQllbHNlIGlmIChtYXRjaF9wYXJ0aXRpb25fb3JkZXJfZGVzYykKIAkJCXsKQEAgLTE4OTYs NiArMTkyMCwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCWNoZWFwZXN0X2ZyYWN0aW9uYWwgPSBnZXRfc2lu Z2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X2ZyYWN0aW9uYWwpOwogCQkJCQlmcmFjdGlv bmFsX3N1YnBhdGhzID0gbGNvbnMoY2hlYXBlc3RfZnJhY3Rpb25hbCwgZnJhY3Rpb25hbF9zdWJw YXRocyk7CiAJCQkJfQorCQkJCWlmICh1bmlxX25lcV90b3RhbCkKKwkJCQl7CisJCQkJCWNoZWFw ZXN0X3VuaXFfdG90YWwgPSBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3Vu aXFfdG90YWwpOworCQkJCQl1bmlxX3RvdGFsX3N1YnBhdGhzID0gbGNvbnMoY2hlYXBlc3RfdW5p cV90b3RhbCwgdW5pcV90b3RhbF9zdWJwYXRocyk7CisJCQkJfQogCQkJfQogCQkJZWxzZQogCQkJ ewpAQCAtMTkxMSw2ICsxOTQwLDEwIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlpZiAoY2hlYXBlc3RfZnJhY3Rp b25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9mcmFjdGlvbmFs LAogCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMKTsKKworCQkJCWlmICh1 bmlxX25lcV90b3RhbCkKKwkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF91 bmlxX3RvdGFsLAorCQkJCQkJCQkJCQkgICZ1bmlxX3RvdGFsX3N1YnBhdGhzLCBOVUxMKTsKIAkJ CX0KIAkJfQogCkBAIC0xOTQ4LDYgKzE5ODEsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCQkg IDAsCiAJCQkJCQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKKworCQkJ aWYgKHVuaXFfbmVxX3RvdGFsKQorCQkJCWFkZF91bmlxdWVfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkgIHJlbCwKKwkJCQkJCQkJCQkJ CQkJICB1bmlxX3RvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJ CQkJCQkJICBwYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCQkJCQkg IDAsCisJCQkJCQkJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAkJfQog CQllbHNlCiAJCXsKQEAgLTE5NzAsNiArMjAxNCwxMiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5k X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkJ CQkJZnJhY3Rpb25hbF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CisJCQlpZiAodW5pcV9uZXFfdG90YWwpCisJCQkJYWRkX3VuaXF1 ZV9wYXRoKHJlbCwgKFBhdGggKikgIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAorCQkJ CQkJCQkJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCQkJCQkJCQkJdW5pcV90b3RhbF9zdWJwYXRo cywKKwkJCQkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCQkJTlVMTCkp OwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggOGRj N2RkNGNhMi4uZWZiMjk1NDMzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j CkBAIC0xMzMsNiArMTMzLDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhz Y2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVu YWJsZV9pbmRleHNraXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1 ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1 ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDBlZjcwYWQ3ZjEuLjdj ODg4OWEzNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRo LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtNzg0LDYg Kzc4NCwxNiBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0gKEluZGV4UGF0aCAqKSBsZmlyc3QobGMp OwogCisJCS8qCisJCSAqIFRvIHByZXZlbnQgdW5pcXVlIHBhdGhzIGZyb20gaW5kZXggc2tpcCBz Y2FucyBiZWluZyBwb3RlbnRpYWxseSB1c2VkCisJCSAqIHdoZW4gbm90IG5lZWRlZCBzY2FuIGtl ZXAgdGhlbSBpbiBhIHNlcGFyYXRlIHBhdGhsaXN0LgorCQkqLworCQlpZiAoaXBhdGgtPmluZGV4 ZGlzdGluY3QpCisJCXsKKwkJCWFkZF91bmlxdWVfcGF0aChyZWwsIChQYXRoICopIGlwYXRoKTsK KwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQogCQkJYWRk X3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAKQEAgLTg3Miw2ICs4ODIsNyBAQCBidWlsZF9p bmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWJvb2wJCXBh dGhrZXlzX3Bvc3NpYmx5X3VzZWZ1bDsKIAlib29sCQlpbmRleF9pc19vcmRlcmVkOwogCWJvb2wJ CWluZGV4X29ubHlfc2NhbjsKKwlib29sCQljYW5fc2tpcDsKIAlpbnQJCQlpbmRleGNvbDsKIAog CS8qCkBAIC0xMDIxLDYgKzEwMzIsOSBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWluZGV4X29ubHlfc2NhbiA9IChzY2FudHlwZSAhPSBT VF9CSVRNQVBTQ0FOICYmCiAJCQkJCSAgIGNoZWNrX2luZGV4X29ubHkocmVsLCBpbmRleCkpOwog CisJLyogQ2hlY2sgaWYgYW4gaW5kZXggc2tpcCBzY2FuIGlzIHBvc3NpYmxlLiAqLworCWNhbl9z a2lwID0gZW5hYmxlX2luZGV4c2tpcHNjYW4gJiBpbmRleC0+YW1jYW5za2lwOworCiAJLyoKIAkg KiA0LiBHZW5lcmF0ZSBhbiBpbmRleHNjYW4gcGF0aCBpZiB0aGVyZSBhcmUgcmVsZXZhbnQgcmVz dHJpY3Rpb24gY2xhdXNlcwogCSAqIGluIHRoZSBjdXJyZW50IGNsYXVzZXMsIE9SIHRoZSBpbmRl eCBvcmRlcmluZyBpcyBwb3RlbnRpYWxseSB1c2VmdWwgZm9yCkBAIC0xMDQ0LDYgKzEwNTgsMzMg QEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkJCQkJICBmYWxzZSk7CiAJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpcGF0aCk7CiAK KwkJLyogQ29uc2lkZXIgaW5kZXggc2tpcCBzY2FuIGFzIHdlbGwgKi8KKwkJaWYgKHJvb3QtPnF1 ZXJ5X3VuaXF1ZWtleXMgIT0gTlVMTCAmJiBjYW5fc2tpcCkKKwkJeworCQkJaW50IG51bXVzZWZ1 bGtleXMgPSBsaXN0X2xlbmd0aCh1c2VmdWxfcGF0aGtleXMpOworCQkJaW50IG51bXNvcnRrZXlz ID0gbGlzdF9sZW5ndGgocm9vdC0+cXVlcnlfcGF0aGtleXMpOworCisJCQlpZiAobnVtdXNlZnVs a2V5cyA9PSBudW1zb3J0a2V5cykKKwkJCXsKKwkJCQlpbnQgcHJlZml4OworCQkJCWlmIChsaXN0 X2xlbmd0aChyb290LT5kaXN0aW5jdF9wYXRoa2V5cykgPiAwKQorCQkJCQlwcmVmaXggPSBmaW5k X2luZGV4X3ByZWZpeF9mb3JfcGF0aGtleShyb290LAorCQkJCQkJCQkJCQkJCQkgICBpbmRleCwK KwkJCQkJCQkJCQkJCQkJICAgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCSAg IGxsYXN0X25vZGUoUGF0aEtleSwKKwkJCQkJCQkJCQkJCQkJICAgcm9vdC0+ZGlzdGluY3RfcGF0 aGtleXMpKTsKKwkJCQllbHNlCisJCQkJCS8qIGFsbCBhcmUgZGlzdGluY3Qga2V5cyBhcmUgY29u c3RhbnQgYW5kIG9wdGltaXplZCBhd2F5LgorCQkJCQkgKiBza2lwcGluZyB3aXRoIDEgaXMgc3Vm ZmljaWVudCBhcyBhbGwgYXJlIGNvbnN0YW50IGFueXdheQorCQkJCQkgKi8KKwkJCQkJcHJlZml4 ID0gMTsKKworCQkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LAorCQkJCQkJCQkgY3JlYXRlX3Nr aXBzY2FuX3VuaXF1ZV9wYXRoKHJvb3QsIGluZGV4LAorCQkJCQkJCQkJCQkJCQkJIChQYXRoICop IGlwYXRoLCBwcmVmaXgpKTsKKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIElmIGFwcHJvcHJpYXRl LCBjb25zaWRlciBwYXJhbGxlbCBpbmRleCBzY2FuLiAgV2UgZG9uJ3QgYWxsb3cKIAkJICogcGFy YWxsZWwgaW5kZXggc2NhbiBmb3IgYml0bWFwIGluZGV4IHNjYW5zLgpAQCAtMTA5OSw2ICsxMTQw LDMzIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJCQkJCQkgIGZhbHNlKTsKIAkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpcGF0 aCk7CiAKKwkJCS8qIENvbnNpZGVyIGluZGV4IHNraXAgc2NhbiBhcyB3ZWxsICovCisJCQlpZiAo cm9vdC0+cXVlcnlfdW5pcXVla2V5cyAhPSBOVUxMICYmIGNhbl9za2lwKQorCQkJeworCQkJCWlu dCBudW11c2VmdWxrZXlzID0gbGlzdF9sZW5ndGgodXNlZnVsX3BhdGhrZXlzKTsKKwkJCQlpbnQg bnVtc29ydGtleXMgPSBsaXN0X2xlbmd0aChyb290LT5xdWVyeV9wYXRoa2V5cyk7CisKKwkJCQlp ZiAobnVtdXNlZnVsa2V5cyA9PSBudW1zb3J0a2V5cykKKwkJCQl7CisJCQkJCWludCBwcmVmaXg7 CisJCQkJCWlmIChsaXN0X2xlbmd0aChyb290LT5kaXN0aW5jdF9wYXRoa2V5cykgPiAwKQorCQkJ CQkJcHJlZml4ID0gZmluZF9pbmRleF9wcmVmaXhfZm9yX3BhdGhrZXkocm9vdCwKKwkJCQkJCQkJ CQkJCQkJCSAgIGluZGV4LAorCQkJCQkJCQkJCQkJCQkJICAgQmFja3dhcmRTY2FuRGlyZWN0aW9u LAorCQkJCQkJCQkJCQkJCQkJICAgbGxhc3Rfbm9kZShQYXRoS2V5LAorCQkJCQkJCQkJCQkJCQkJ ICAgcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMpKTsKKwkJCQkJZWxzZQorCQkJCQkJLyogYWxsIGFy ZSBkaXN0aW5jdCBrZXlzIGFyZSBjb25zdGFudCBhbmQgb3B0aW1pemVkIGF3YXkuCisJCQkJCQkg KiBza2lwcGluZyB3aXRoIDEgaXMgc3VmZmljaWVudCBhcyBhbGwgYXJlIGNvbnN0YW50IGFueXdh eQorCQkJCQkJICovCisJCQkJCQlwcmVmaXggPSAxOworCisJCQkJCXJlc3VsdCA9IGxhcHBlbmQo cmVzdWx0LAorCQkJCQkJCQkJIGNyZWF0ZV9za2lwc2Nhbl91bmlxdWVfcGF0aChyb290LCBpbmRl eCwKKwkJCQkJCQkJCQkJCQkJCQkgKFBhdGggKikgaXBhdGgsIHByZWZpeCkpOworCQkJCX0KKwkJ CX0KKwogCQkJLyogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGluZGV4IHNjYW4g Ki8KIAkJCWlmIChpbmRleC0+YW1jYW5wYXJhbGxlbCAmJgogCQkJCXJlbC0+Y29uc2lkZXJfcGFy YWxsZWwgJiYgb3V0ZXJfcmVsaWRzID09IE5VTEwgJiYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9w YXRoa2V5cy5jCmluZGV4IDliN2NkY2UzNTAuLmNjOTBlMTU5NTIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvcGF0aGtleXMuYwpAQCAtNTIyLDYgKzUyMiw3OCBAQCBnZXRfY2hlYXBlc3RfcGFy YWxsZWxfc2FmZV90b3RhbF9pbm5lcihMaXN0ICpwYXRocykKICAqCQlORVcgUEFUSEtFWSBGT1JN QVRJT04KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogRmluZCB0aGUgcHJlZml4IHNp emUgZm9yIGEgc3BlY2lmaWMgcGF0aCBrZXkgaW4gYW4gaW5kZXguCisgKiBGb3IgZXhhbXBsZSwg YW4gaW5kZXggd2l0aCAoYSxiLGMpIGZpbmRpbmcgcGF0aCBrZXkgYiB3aWxsCisgKiByZXR1cm4g cHJlZml4IDIuCisgKiBSZXR1cm5zIDAgd2hlbiBub3QgZm91bmQuCisgKi8KK2ludAorZmluZF9p bmRleF9wcmVmaXhfZm9yX3BhdGhrZXkoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSBJbmRleE9w dEluZm8gKmluZGV4LAorCQkJCQkgU2NhbkRpcmVjdGlvbiBzY2FuZGlyLAorCQkJCQkgUGF0aEtl eSAqcGF0aGtleSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQlpOworCisJaSA9IDA7CisJ Zm9yZWFjaChsYywgaW5kZXgtPmluZGV4dGxpc3QpCisJeworCQlUYXJnZXRFbnRyeSAqaW5kZXh0 bGUgPSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKTsKKwkJRXhwcgkgICAqaW5kZXhrZXk7CisJ CWJvb2wJCXJldmVyc2Vfc29ydDsKKwkJYm9vbAkJbnVsbHNfZmlyc3Q7CisJCVBhdGhLZXkgICAg KmNwYXRoa2V5OworCisJCS8qCisJCSAqIElOQ0xVREUgY29sdW1ucyBhcmUgc3RvcmVkIGluIGlu ZGV4IHVub3JkZXJlZCwgc28gdGhleSBkb24ndAorCQkgKiBzdXBwb3J0IG9yZGVyZWQgaW5kZXgg c2Nhbi4KKwkJICovCisJCWlmIChpID49IGluZGV4LT5ua2V5Y29sdW1ucykKKwkJCWJyZWFrOwor CisJCS8qIFdlIGFzc3VtZSB3ZSBkb24ndCBuZWVkIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSB0bGlz dCBpdGVtICovCisJCWluZGV4a2V5ID0gaW5kZXh0bGUtPmV4cHI7CisKKwkJaWYgKFNjYW5EaXJl Y3Rpb25Jc0JhY2t3YXJkKHNjYW5kaXIpKQorCQl7CisJCQlyZXZlcnNlX3NvcnQgPSAhaW5kZXgt PnJldmVyc2Vfc29ydFtpXTsKKwkJCW51bGxzX2ZpcnN0ID0gIWluZGV4LT5udWxsc19maXJzdFtp XTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldmVyc2Vfc29ydCA9IGluZGV4LT5yZXZlcnNlX3Nv cnRbaV07CisJCQludWxsc19maXJzdCA9IGluZGV4LT5udWxsc19maXJzdFtpXTsKKwkJfQorCisJ CS8qCisJCSAqIE9LLCB0cnkgdG8gbWFrZSBhIGNhbm9uaWNhbCBwYXRoa2V5IGZvciB0aGlzIHNv cnQga2V5LiAgTm90ZSB3ZSdyZQorCQkgKiB1bmRlcm5lYXRoIGFueSBvdXRlciBqb2lucywgc28g bnVsbGFibGVfcmVsaWRzIHNob3VsZCBiZSBOVUxMLgorCQkgKi8KKwkJY3BhdGhrZXkgPSBtYWtl X3BhdGhrZXlfZnJvbV9zb3J0aW5mbyhyb290LAorCQkJCQkJCQkJCQkgIGluZGV4a2V5LAorCQkJ CQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkJCSAgaW5kZXgtPnNvcnRvcGZhbWlseVtpXSwKKwkJ CQkJCQkJCQkJICBpbmRleC0+b3BjaW50eXBlW2ldLAorCQkJCQkJCQkJCQkgIGluZGV4LT5pbmRl eGNvbGxhdGlvbnNbaV0sCisJCQkJCQkJCQkJCSAgcmV2ZXJzZV9zb3J0LAorCQkJCQkJCQkJCQkg IG51bGxzX2ZpcnN0LAorCQkJCQkJCQkJCQkgIDAsCisJCQkJCQkJCQkJCSAgaW5kZXgtPnJlbC0+ cmVsaWRzLAorCQkJCQkJCQkJCQkgIGZhbHNlKTsKKworCQlpZiAoY3BhdGhrZXkgPT0gcGF0aGtl eSkKKwkJeworCQkJcmV0dXJuIGkgKyAxOworCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiAw OworfQorCiAvKgogICogYnVpbGRfaW5kZXhfcGF0aGtleXMKICAqCSAgQnVpbGQgYSBwYXRoa2V5 cyBsaXN0IHRoYXQgZGVzY3JpYmVzIHRoZSBvcmRlcmluZyBpbmR1Y2VkIGJ5IGFuIGluZGV4CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggY2Q2ZDcyYzc2My4uOWRm NGQ5NWViZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTg1 LDE2ICsxODUsMjEgQEAgc3RhdGljIEluZGV4U2NhbiAqbWFrZV9pbmRleHNjYW4oTGlzdCAqcXB0 bGlzdCwgTGlzdCAqcXBxdWFsLCBJbmRleCBzY2FucmVsaWQsCiAJCQkJCQkJCSBPaWQgaW5kZXhp ZCwgTGlzdCAqaW5kZXhxdWFsLCBMaXN0ICppbmRleHF1YWxvcmlnLAogCQkJCQkJCQkgTGlzdCAq aW5kZXhvcmRlcmJ5LCBMaXN0ICppbmRleG9yZGVyYnlvcmlnLAogCQkJCQkJCQkgTGlzdCAqaW5k ZXhvcmRlcmJ5b3BzLAotCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIpOworCQkJ CQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIsCisJCQkJCQkJCSBpbnQgc2tpcHByZWZp eCwKKwkJCQkJCQkJIGJvb2wgZGlzdGluY3QpOwogc3RhdGljIEluZGV4T25seVNjYW4gKm1ha2Vf aW5kZXhvbmx5c2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0ICpxcHF1YWwsCiAJCQkJCQkJCQkJIElu ZGV4IHNjYW5yZWxpZCwgT2lkIGluZGV4aWQsCiAJCQkJCQkJCQkJIExpc3QgKmluZGV4cXVhbCwg TGlzdCAqcmVjaGVja3F1YWwsCiAJCQkJCQkJCQkJIExpc3QgKmluZGV4b3JkZXJieSwKIAkJCQkJ CQkJCQkgTGlzdCAqaW5kZXh0bGlzdCwKLQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNj YW5kaXIpOworCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRpciwKKwkJCQkJCQkJ CQkgaW50IHNraXBwcmVmaXgsCisJCQkJCQkJCQkJIGJvb2wgZGlzdGluY3QpOwogc3RhdGljIEJp dG1hcEluZGV4U2NhbiAqbWFrZV9iaXRtYXBfaW5kZXhzY2FuKEluZGV4IHNjYW5yZWxpZCwgT2lk IGluZGV4aWQsCiAJCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhxdWFsLAotCQkJCQkJCQkJCQkgIExp c3QgKmluZGV4cXVhbG9yaWcpOworCQkJCQkJCQkJCQkgIExpc3QgKmluZGV4cXVhbG9yaWcsCisJ CQkJCQkJCQkJCSAgaW50IHNraXBQcmVmaXhTaXplKTsKIHN0YXRpYyBCaXRtYXBIZWFwU2NhbiAq bWFrZV9iaXRtYXBfaGVhcHNjYW4oTGlzdCAqcXB0bGlzdCwKIAkJCQkJCQkJCQkJTGlzdCAqcXBx dWFsLAogCQkJCQkJCQkJCQlQbGFuICpsZWZ0dHJlZSwKQEAgLTMwOTIsNyArMzA5Nyw5IEBAIGNy ZWF0ZV9pbmRleHNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCXN0cmlw cGVkX2luZGV4cXVhbHMsCiAJCQkJCQkJCQkJCQlmaXhlZF9pbmRleG9yZGVyYnlzLAogCQkJCQkJ CQkJCQkJaW5kZXhpbmZvLT5pbmRleHRsaXN0LAotCQkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRl eHNjYW5kaXIpOworCQkJCQkJCQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIsCisJCQkJCQkJ CQkJCQliZXN0X3BhdGgtPmluZGV4c2tpcHByZWZpeCwKKwkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+ aW5kZXhkaXN0aW5jdCk7CiAJZWxzZQogCQlzY2FuX3BsYW4gPSAoU2NhbiAqKSBtYWtlX2luZGV4 c2Nhbih0bGlzdCwKIAkJCQkJCQkJCQkJcXBxdWFsLApAQCAtMzEwMyw3ICszMTEwLDkgQEAgY3Jl YXRlX2luZGV4c2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlmaXhlZF9p bmRleG9yZGVyYnlzLAogCQkJCQkJCQkJCQlpbmRleG9yZGVyYnlzLAogCQkJCQkJCQkJCQlpbmRl eG9yZGVyYnlvcHMsCi0JCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyKTsKKwkJCQkJ CQkJCQkJYmVzdF9wYXRoLT5pbmRleHNjYW5kaXIsCisJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5k ZXhza2lwcHJlZml4LAorCQkJCQkJCQkJCQliZXN0X3BhdGgtPmluZGV4ZGlzdGluY3QpOwogCiAJ Y29weV9nZW5lcmljX3BhdGhfaW5mbygmc2Nhbl9wbGFuLT5wbGFuLCAmYmVzdF9wYXRoLT5wYXRo KTsKIApAQCAtMzM5Myw3ICszNDAyLDggQEAgY3JlYXRlX2JpdG1hcF9zdWJwbGFuKFBsYW5uZXJJ bmZvICpyb290LCBQYXRoICpiaXRtYXBxdWFsLAogCQlwbGFuID0gKFBsYW4gKikgbWFrZV9iaXRt YXBfaW5kZXhzY2FuKGlzY2FuLT5zY2FuLnNjYW5yZWxpZCwKIAkJCQkJCQkJCQkJICBpc2Nhbi0+ aW5kZXhpZCwKIAkJCQkJCQkJCQkJICBpc2Nhbi0+aW5kZXhxdWFsLAotCQkJCQkJCQkJCQkgIGlz Y2FuLT5pbmRleHF1YWxvcmlnKTsKKwkJCQkJCQkJCQkJICBpc2Nhbi0+aW5kZXhxdWFsb3JpZywK KwkJCQkJCQkJCQkJICBpc2Nhbi0+aW5kZXhza2lwcHJlZml4c2l6ZSk7CiAJCS8qIGFuZCBzZXQg aXRzIGNvc3Qvd2lkdGggZmllbGRzIGFwcHJvcHJpYXRlbHkgKi8KIAkJcGxhbi0+c3RhcnR1cF9j b3N0ID0gMC4wOwogCQlwbGFuLT50b3RhbF9jb3N0ID0gaXBhdGgtPmluZGV4dG90YWxjb3N0OwpA QCAtNTQzNiw3ICs1NDQ2LDkgQEAgbWFrZV9pbmRleHNjYW4oTGlzdCAqcXB0bGlzdCwKIAkJCSAg IExpc3QgKmluZGV4b3JkZXJieSwKIAkJCSAgIExpc3QgKmluZGV4b3JkZXJieW9yaWcsCiAJCQkg ICBMaXN0ICppbmRleG9yZGVyYnlvcHMsCi0JCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRp cikKKwkJCSAgIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyLAorCQkJICAgaW50IHNraXBQcmVm aXhTaXplLAorCQkJICAgYm9vbCBkaXN0aW5jdCkKIHsKIAlJbmRleFNjYW4gICpub2RlID0gbWFr ZU5vZGUoSW5kZXhTY2FuKTsKIAlQbGFuCSAgICpwbGFuID0gJm5vZGUtPnNjYW4ucGxhbjsKQEAg LTU0NTMsNiArNTQ2NSw4IEBAIG1ha2VfaW5kZXhzY2FuKExpc3QgKnFwdGxpc3QsCiAJbm9kZS0+ aW5kZXhvcmRlcmJ5b3JpZyA9IGluZGV4b3JkZXJieW9yaWc7CiAJbm9kZS0+aW5kZXhvcmRlcmJ5 b3BzID0gaW5kZXhvcmRlcmJ5b3BzOwogCW5vZGUtPmluZGV4b3JkZXJkaXIgPSBpbmRleHNjYW5k aXI7CisJbm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZSA9IHNraXBQcmVmaXhTaXplOworCW5vZGUt PmluZGV4ZGlzdGluY3QgPSBkaXN0aW5jdDsKIAogCXJldHVybiBub2RlOwogfQpAQCAtNTQ2Niw3 ICs1NDgwLDkgQEAgbWFrZV9pbmRleG9ubHlzY2FuKExpc3QgKnFwdGxpc3QsCiAJCQkJICAgTGlz dCAqcmVjaGVja3F1YWwsCiAJCQkJICAgTGlzdCAqaW5kZXhvcmRlcmJ5LAogCQkJCSAgIExpc3Qg KmluZGV4dGxpc3QsCi0JCQkJICAgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIpCisJCQkJICAg U2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIsCisJCQkJICAgaW50IHNraXBQcmVmaXhTaXplLAor CQkJCSAgIGJvb2wgZGlzdGluY3QpCiB7CiAJSW5kZXhPbmx5U2NhbiAqbm9kZSA9IG1ha2VOb2Rl KEluZGV4T25seVNjYW4pOwogCVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+c2Nhbi5wbGFuOwpAQCAt NTQ4Miw2ICs1NDk4LDggQEAgbWFrZV9pbmRleG9ubHlzY2FuKExpc3QgKnFwdGxpc3QsCiAJbm9k ZS0+aW5kZXhvcmRlcmJ5ID0gaW5kZXhvcmRlcmJ5OwogCW5vZGUtPmluZGV4dGxpc3QgPSBpbmRl eHRsaXN0OwogCW5vZGUtPmluZGV4b3JkZXJkaXIgPSBpbmRleHNjYW5kaXI7CisJbm9kZS0+aW5k ZXhza2lwcHJlZml4c2l6ZSA9IHNraXBQcmVmaXhTaXplOworCW5vZGUtPmluZGV4ZGlzdGluY3Qg PSBkaXN0aW5jdDsKIAogCXJldHVybiBub2RlOwogfQpAQCAtNTQ5MCw3ICs1NTA4LDggQEAgc3Rh dGljIEJpdG1hcEluZGV4U2NhbiAqCiBtYWtlX2JpdG1hcF9pbmRleHNjYW4oSW5kZXggc2NhbnJl bGlkLAogCQkJCQkgIE9pZCBpbmRleGlkLAogCQkJCQkgIExpc3QgKmluZGV4cXVhbCwKLQkJCQkJ ICBMaXN0ICppbmRleHF1YWxvcmlnKQorCQkJCQkgIExpc3QgKmluZGV4cXVhbG9yaWcsCisJCQkJ CSAgaW50IHNraXBQcmVmaXhTaXplKQogewogCUJpdG1hcEluZGV4U2NhbiAqbm9kZSA9IG1ha2VO b2RlKEJpdG1hcEluZGV4U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5zY2FuLnBsYW47 CkBAIC01NTAzLDYgKzU1MjIsNyBAQCBtYWtlX2JpdG1hcF9pbmRleHNjYW4oSW5kZXggc2NhbnJl bGlkLAogCW5vZGUtPmluZGV4aWQgPSBpbmRleGlkOwogCW5vZGUtPmluZGV4cXVhbCA9IGluZGV4 cXVhbDsKIAlub2RlLT5pbmRleHF1YWxvcmlnID0gaW5kZXhxdWFsb3JpZzsKKwlub2RlLT5pbmRl eHNraXBwcmVmaXhzaXplID0gc2tpcFByZWZpeFNpemU7CiAKIAlyZXR1cm4gbm9kZTsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA1YWUyNDc1NDAwLi42YTdhYzQ5ZDZl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0zMTA5LDEyICszMTA5LDE4 IEBAIHN0YW5kYXJkX3FwX2NhbGxiYWNrKFBsYW5uZXJJbmZvICpyb290LCB2b2lkICpleHRyYSkK IAogCWlmIChwYXJzZS0+ZGlzdGluY3RDbGF1c2UgJiYKIAkJZ3JvdXBpbmdfaXNfc29ydGFibGUo cGFyc2UtPmRpc3RpbmN0Q2xhdXNlKSkKKwl7CiAJCXJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzID0K IAkJCW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsCiAJCQkJCQkJCQkJICBwYXJz ZS0+ZGlzdGluY3RDbGF1c2UsCiAJCQkJCQkJCQkJICB0bGlzdCk7CisJCXJvb3QtPnF1ZXJ5X3Vu aXF1ZWtleXMgPSBidWlsZF91bmlxdWVrZXlzKHJvb3QsIHBhcnNlLT5kaXN0aW5jdENsYXVzZSk7 CisJfQogCWVsc2UKKwl7CiAJCXJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzID0gTklMOworCQlyb290 LT5xdWVyeV91bmlxdWVrZXlzID0gTklMOworCX0KIAogCXJvb3QtPnNvcnRfcGF0aGtleXMgPQog CQltYWtlX3BhdGhrZXlzX2Zvcl9zb3J0Y2xhdXNlcyhyb290LApAQCAtNDQ0MSw3ICs0NDQ3LDcg QEAgY3JlYXRlX2ZpbmFsX2Rpc3RpbmN0X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAJCQkJCQkJUmVsT3B0SW5mbyAqZGlzdGluY3RfcmVsKQogewogCVF1 ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwotCVBhdGgJICAgKmNoZWFwZXN0X2lucHV0X3Bh dGggPSBpbnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJUGF0aAkgICAqY2hlYXBlc3Rf aW5wdXRfcGF0aCA9IGlucHV0X3JlbC0+Y2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGg7CiAJ ZG91YmxlCQludW1EaXN0aW5jdFJvd3M7CiAJYm9vbAkJYWxsb3dfaGFzaDsKIAlQYXRoCSAgICpw YXRoOwpAQCAtNDUxNCw4ICs0NTIwLDE0IEBAIGNyZWF0ZV9maW5hbF9kaXN0aW5jdF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQl7CiAJCQlQYXRoCSAg ICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQkJaWYgKHF1ZXJ5X2hhc191bmlxdWVr ZXlzX2Zvcihyb290LCBuZWVkZWRfcGF0aGtleXMsIGZhbHNlKSkKKwkJCWlmIChxdWVyeV9oYXNf dW5pcXVla2V5c19mb3Iocm9vdCwgcGF0aC0+dW5pcXVla2V5cywgZmFsc2UpKQogCQkJCWFkZF9w YXRoKGRpc3RpbmN0X3JlbCwgcGF0aCk7CisJCQllbHNlIGlmIChwYXRoa2V5c19jb250YWluZWRf aW4obmVlZGVkX3BhdGhrZXlzLCBwYXRoLT5wYXRoa2V5cykpCisJCQkJYWRkX3BhdGgoZGlzdGlu Y3RfcmVsLCAoUGF0aCAqKQorCQkJCQkJIGNyZWF0ZV91cHBlcl91bmlxdWVfcGF0aChyb290LCBk aXN0aW5jdF9yZWwsCisJCQkJCQkJCQkJCQkgIHBhdGgsCisJCQkJCQkJCQkJCQkgIGxpc3RfbGVu Z3RoKHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzKSwKKwkJCQkJCQkJCQkJCSAgbnVtRGlzdGluY3RS b3dzKSk7CiAJCX0KIAogCQkvKiBGb3IgZXhwbGljaXQtc29ydCBjYXNlLCBhbHdheXMgdXNlIHRo ZSBtb3JlIHJpZ29yb3VzIGNsYXVzZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMKaW5kZXggYWJiNzdkODY3ZS4uYWMzMjFiZjMxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wYXRobm9kZS5jCkBAIC0yNDUsNiArMjQ1LDcgQEAgc2V0X2NoZWFwZXN0KFJlbE9wdEluZm8g KnBhcmVudF9yZWwpCiB7CiAJUGF0aAkgICAqY2hlYXBlc3Rfc3RhcnR1cF9wYXRoOwogCVBhdGgJ ICAgKmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJUGF0aAkgICAqY2hlYXBlc3RfZGlzdGluY3RfdW5p cXVlX3BhdGg7CiAJUGF0aAkgICAqYmVzdF9wYXJhbV9wYXRoOwogCUxpc3QJICAgKnBhcmFtZXRl cml6ZWRfcGF0aHM7CiAJTGlzdENlbGwgICAqcDsKQEAgLTI1Niw2ICsyNTcsNyBAQCBzZXRfY2hl YXBlc3QoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCkKIAogCWNoZWFwZXN0X3N0YXJ0dXBfcGF0aCA9 IGNoZWFwZXN0X3RvdGFsX3BhdGggPSBiZXN0X3BhcmFtX3BhdGggPSBOVUxMOwogCXBhcmFtZXRl cml6ZWRfcGF0aHMgPSBOSUw7CisJY2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGggPSBOVUxM OwogCiAJZm9yZWFjaChwLCBwYXJlbnRfcmVsLT5wYXRobGlzdCkKIAl7CkBAIC0zNTQsNiArMzU2 LDM2IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCQljaGVhcGVzdF90 b3RhbF9wYXRoID0gYmVzdF9wYXJhbV9wYXRoOwogCUFzc2VydChjaGVhcGVzdF90b3RhbF9wYXRo ICE9IE5VTEwpOwogCisJY2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGggPSBjaGVhcGVzdF90 b3RhbF9wYXRoOworCisJZm9yZWFjaChwLCBwYXJlbnRfcmVsLT51bmlxdWVfcGF0aGxpc3QpCisJ eworCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0KHApOworCQlpbnQJCQljbXA7CisK KwkJLyogVW5wYXJhbWV0ZXJpemVkIHBhdGgsIHNvIGNvbnNpZGVyIGl0IGZvciBjaGVhcGVzdCBz bG90cyAqLworCQlpZiAoY2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGggPT0gTlVMTCkKKwkJ eworCQkJY2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGggPSBwYXRoOworCQkJY29udGludWU7 CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBmaW5kIHR3byBwYXRocyBvZiBpZGVudGljYWwgY29z dHMsIHRyeSB0byBrZWVwIHRoZQorCQkgKiBiZXR0ZXItc29ydGVkIG9uZS4gIFRoZSBwYXRocyBt aWdodCBoYXZlIHVucmVsYXRlZCBzb3J0CisJCSAqIG9yZGVyaW5ncywgaW4gd2hpY2ggY2FzZSB3 ZSBjYW4gb25seSBndWVzcyB3aGljaCBtaWdodCBiZQorCQkgKiBiZXR0ZXIgdG8ga2VlcCwgYnV0 IGlmIG9uZSBpcyBzdXBlcmlvciB0aGVuIHdlIGRlZmluaXRlbHkKKwkJICogc2hvdWxkIGtlZXAg dGhhdCBvbmUuCisJCSAqLworCQljbXAgPSBjb21wYXJlX3BhdGhfY29zdHMoY2hlYXBlc3RfZGlz dGluY3RfdW5pcXVlX3BhdGgsIHBhdGgsIFRPVEFMX0NPU1QpOworCQlpZiAoY21wID4gMCB8fAor CQkJKGNtcCA9PSAwICYmCisJCQkgY29tcGFyZV9wYXRoa2V5cyhjaGVhcGVzdF9kaXN0aW5jdF91 bmlxdWVfcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJICBwYXRoLT5wYXRoa2V5cykgPT0gUEFUSEtF WVNfQkVUVEVSMikpCisJCQljaGVhcGVzdF9kaXN0aW5jdF91bmlxdWVfcGF0aCA9IHBhdGg7CisJ fQorCisJcGFyZW50X3JlbC0+Y2hlYXBlc3RfZGlzdGluY3RfdW5pcXVlX3BhdGggPSBjaGVhcGVz dF9kaXN0aW5jdF91bmlxdWVfcGF0aDsKIAlwYXJlbnRfcmVsLT5jaGVhcGVzdF9zdGFydHVwX3Bh dGggPSBjaGVhcGVzdF9zdGFydHVwX3BhdGg7CiAJcGFyZW50X3JlbC0+Y2hlYXBlc3RfdG90YWxf cGF0aCA9IGNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJcGFyZW50X3JlbC0+Y2hlYXBlc3RfdW5pcXVl X3BhdGggPSBOVUxMOwkvKiBjb21wdXRlZCBvbmx5IGlmIG5lZWRlZCAqLwpAQCAtMTI5Myw2ICsx MzI1LDEwIEBAIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9k ZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlwYXRobm9k ZS0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID0gcGFyYWxsZWxfd29ya2VyczsKIAlwYXRobm9kZS0+ cGF0aC5wYXRoa2V5cyA9IHBhdGhrZXlzOworCWlmIChsaXN0X2xlbmd0aChzdWJwYXRocykgPT0g MSkKKwl7CisJCXBhdGhub2RlLT5wYXRoLnVuaXF1ZWtleXMgPSAoKFBhdGgqKWxpbml0aWFsKHN1 YnBhdGhzKSktPnVuaXF1ZWtleXM7CisJfQogCiAJLyoKIAkgKiBGb3IgcGFyYWxsZWwgYXBwZW5k LCBub24tcGFydGlhbCBwYXRocyBhcmUgc29ydGVkIGJ5IGRlc2NlbmRpbmcgdG90YWwKQEAgLTE0 MzcsNiArMTQ3MywxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9IDA7CiAJcGF0aG5vZGUtPnBh dGgucGF0aGtleXMgPSBwYXRoa2V5czsKIAlwYXRobm9kZS0+c3VicGF0aHMgPSBzdWJwYXRoczsK KwlpZiAobGlzdF9sZW5ndGgoc3VicGF0aHMpID09IDEpCisJeworCQlwYXRobm9kZS0+cGF0aC51 bmlxdWVrZXlzID0gKChQYXRoKilsaW5pdGlhbChzdWJwYXRocykpLT51bmlxdWVrZXlzOworCX0K IAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBpcyBm b3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMzA5NSw2ICszMTM1LDQ0IEBAIGNyZWF0ZV91cHBl cl91bmlxdWVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlyZXR1cm4gcGF0aG5vZGU7CiB9CiAK Ky8qCisgKiBjcmVhdGVfc2tpcHNjYW5fdW5pcXVlX3BhdGgKKyAqCSAgQ3JlYXRlcyBhIHBhdGhu b2RlIHRoZSBzYW1lIGFzIGFuIGV4aXN0aW5nIEluZGV4UGF0aCBleGNlcHQgYmFzZWQgb24KKyAq CSAgc2tpcHBpbmcgZHVwbGljYXRlIHZhbHVlcy4gIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgY2hl YXBlciB0aGFuIHVzaW5nCisgKgkgIGNyZWF0ZV91cHBlcl91bmlxdWVfcGF0aC4KKyAqCisgKiBU aGUgaW5wdXQgcGF0aCBtdXN0IGJlIGFuIEluZGV4UGF0aCBmb3IgYW4gaW5kZXggdGhhdCBzdXBw b3J0cyBhbXNraXAuCisgKi8KK0luZGV4UGF0aCAqCitjcmVhdGVfc2tpcHNjYW5fdW5pcXVlX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkJUGF0aCAq YmFzZXBhdGgsIGludCBwcmVmaXgpCit7CisJSW5kZXhQYXRoIAkqcGF0aG5vZGUgPSBtYWtlTm9k ZShJbmRleFBhdGgpOworCWludCAJCW51bURpc3RpbmN0Um93czsKKwlVbmlxdWVLZXkgKnVrZXk7 CisKKwlBc3NlcnQoSXNBKGJhc2VwYXRoLCBJbmRleFBhdGgpKTsKKworCS8qIFdlIGRvbid0IHdh bnQgdG8gbW9kaWZ5IGJhc2VwYXRoLCBzbyBtYWtlIGEgY29weS4gKi8KKwltZW1jcHkocGF0aG5v ZGUsIGJhc2VwYXRoLCBzaXplb2YoSW5kZXhQYXRoKSk7CisKKwl1a2V5ID0gbGluaXRpYWxfbm9k ZShVbmlxdWVLZXksIHJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMpOworCisJQXNzZXJ0KHByZWZpeCA+ IDApOworCXBhdGhub2RlLT5pbmRleHNraXBwcmVmaXggPSBwcmVmaXg7CisJcGF0aG5vZGUtPmlu ZGV4ZGlzdGluY3QgPSB0cnVlOworCXBhdGhub2RlLT5wYXRoLnVuaXF1ZWtleXMgPSByb290LT5x dWVyeV91bmlxdWVrZXlzOworCisJbnVtRGlzdGluY3RSb3dzID0gZXN0aW1hdGVfbnVtX2dyb3Vw cyhyb290LCB1a2V5LT5leHBycywKKwkJCQkJCQkJCQkgIHBhdGhub2RlLT5wYXRoLnJvd3MsCisJ CQkJCQkJCQkJICBOVUxMLCBOVUxMKTsKKworCXBhdGhub2RlLT5wYXRoLnRvdGFsX2Nvc3QgPSBw YXRobm9kZS0+cGF0aC5zdGFydHVwX2Nvc3QgKiBudW1EaXN0aW5jdFJvd3M7CisJcGF0aG5vZGUt PnBhdGgucm93cyA9IG51bURpc3RpbmN0Um93czsKKworCXJldHVybiBwYXRobm9kZTsKK30KKwog LyoKICAqIGNyZWF0ZV9hZ2dfcGF0aAogICoJICBDcmVhdGVzIGEgcGF0aG5vZGUgdGhhdCByZXBy ZXNlbnRzIHBlcmZvcm1pbmcgYWdncmVnYXRpb24vZ3JvdXBpbmcKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYwppbmRleCAwZmRiOGU5YWRhLi4zNjhkMmMzZjI3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0yNzIsNiArMjcyLDkgQEAgZ2V0X3JlbGF0aW9uX2lu Zm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVu dCwKIAkJCWluZm8tPmFtb3B0aW9uYWxrZXkgPSBhbXJvdXRpbmUtPmFtb3B0aW9uYWxrZXk7CiAJ CQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJaW5m by0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxsczsKKwkJCWluZm8tPmFt Y2Fuc2tpcCA9IChhbXJvdXRpbmUtPmFtc2tpcCAhPSBOVUxMICYmCisJCQkJCWFtcm91dGluZS0+ YW1nZXRza2lwdHVwbGUgIT0gTlVMTCAmJgorCQkJCQlhbXJvdXRpbmUtPmFtYmVnaW5za2lwc2Nh biAhPSBOVUxMKTsKIAkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFy YWxsZWw7CiAJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0dXBsZSAh PSBOVUxMKTsKIAkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1h cCAhPSBOVUxMICYmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA2ZmM1Y2JjMDlhLi45OWI0MjA2M2Ix IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTEwMDEsNiArMTAwMSwxNSBAQCBzdGF0aWMgc3RydWN0 IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJdHJ1ZSwKIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJsZV9pbmRleHNraXBzY2FuIiwgUEdDX1VTRVJTRVQs IFFVRVJZX1RVTklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5u ZXIncyB1c2Ugb2YgaW5kZXgtc2tpcC1zY2FuIHBsYW5zLiIpLAorCQkJTlVMTAorCQl9LAorCQkm ZW5hYmxlX2luZGV4c2tpcHNjYW4sCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAog CXsKIAkJeyJlbmFibGVfYml0bWFwc2NhbiIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVU SE9ELAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHRoZSBwbGFubmVyJ3MgdXNlIG9mIGJpdG1h cC1zY2FuIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlCmluZGV4IGExYWNkNDZiNjEuLjhjZGYzZDBlZTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM2Nyw2ICszNjcsNyBAQAog I2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNl bmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2tpcHNjYW4gPSBvbgogI2Vu YWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpv aW4gPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKaW5kZXggYTNmMjJkNzM1Ny4uMjc1 NmMxNTg3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCkBAIC0xMDA5LDcgKzEwMDks NyBAQCB0dXBsZXNvcnRfYmVnaW5fY2x1c3RlcihUdXBsZURlc2MgdHVwRGVzYywKIAogCXN0YXRl LT50dXBEZXNjID0gdHVwRGVzYzsJLyogYXNzdW1lIHdlIG5lZWQgbm90IGNvcHkgdHVwRGVzYyAq LwogCi0JaW5kZXhTY2FuS2V5ID0gX2J0X21rc2NhbmtleShpbmRleFJlbCwgTlVMTCk7CisJaW5k ZXhTY2FuS2V5ID0gX2J0X21rc2NhbmtleShpbmRleFJlbCwgTlVMTCwgTlVMTCk7CiAKIAlpZiAo c3RhdGUtPmluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgIT0gTlVMTCkKIAl7CkBAIC0xMTA0LDcg KzExMDQsNyBAQCB0dXBsZXNvcnRfYmVnaW5faW5kZXhfYnRyZWUoUmVsYXRpb24gaGVhcFJlbCwK IAlzdGF0ZS0+aW5kZXhSZWwgPSBpbmRleFJlbDsKIAlzdGF0ZS0+ZW5mb3JjZVVuaXF1ZSA9IGVu Zm9yY2VVbmlxdWU7CiAKLQlpbmRleFNjYW5LZXkgPSBfYnRfbWtzY2Fua2V5KGluZGV4UmVsLCBO VUxMKTsKKwlpbmRleFNjYW5LZXkgPSBfYnRfbWtzY2Fua2V5KGluZGV4UmVsLCBOVUxMLCBOVUxM KTsKIAogCS8qIFByZXBhcmUgU29ydFN1cHBvcnQgZGF0YSBmb3IgZWFjaCBjb2x1bW4gKi8KIAlz dGF0ZS0+c29ydEtleXMgPSAoU29ydFN1cHBvcnQpIHBhbGxvYzAoc3RhdGUtPm5LZXlzICoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2FtYXBpLmgKaW5kZXggYTM4MjU1MWE5OC4uY2JjYzM3M2UwMSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAg LTE2Miw2ICsxNjIsMTIgQEAgdHlwZWRlZiBJbmRleFNjYW5EZXNjICgqYW1iZWdpbnNjYW5fZnVu Y3Rpb24pIChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJCQkgICBpbnQgbmtleXMs CiAJCQkJCQkJCQkJCSAgIGludCBub3JkZXJieXMpOwogCisvKiBwcmVwYXJlIGZvciBpbmRleCBz Y2FuIHdpdGggc2tpcCAqLwordHlwZWRlZiBJbmRleFNjYW5EZXNjICgqYW1iZWdpbnNjYW5fc2tp cF9mdW5jdGlvbikgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCSAgIGludCBu a2V5cywKKwkJCQkJCQkJCQkJICAgaW50IG5vcmRlcmJ5cywKKwkJCQkJCQkJCQkJICAgaW50IHBy ZWZpeCk7CisKIC8qIChyZSlzdGFydCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQgKCphbXJl c2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJICAgU2NhbktleSBr ZXlzLApAQCAtMTczLDYgKzE3OSwxNiBAQCB0eXBlZGVmIHZvaWQgKCphbXJlc2Nhbl9mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pOwogCisvKiBuZXh0IHZhbGlkIHR1cGxlICovCit0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxl X3dpdGhfc2tpcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAg U2NhbkRpcmVjdGlvbiBwcmVmaXhEaXIsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gcG9z dGZpeERpcik7CisKKy8qIHNraXAgcGFzdCBkdXBsaWNhdGVzICovCit0eXBlZGVmIGJvb2wgKCph bXNraXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSBTY2FuRGlyZWN0 aW9uIHByZWZpeERpciwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CisKIC8q IGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJt KTsKQEAgLTI3MSwxMiArMjg3LDE1IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJ YW12YWxpZGF0ZV9mdW5jdGlvbiBhbXZhbGlkYXRlOwogCWFtYWRqdXN0bWVtYmVyc19mdW5jdGlv biBhbWFkanVzdG1lbWJlcnM7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1iZWdpbnNjYW5fZnVuY3Rp b24gYW1iZWdpbnNjYW47CisJYW1iZWdpbnNjYW5fc2tpcF9mdW5jdGlvbiBhbWJlZ2luc2tpcHNj YW47CiAJYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBh bWdldHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0dHVwbGVfd2l0aF9za2lwX2Z1bmN0 aW9uIGFtZ2V0c2tpcHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0 aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBh bWVuZHNjYW47CiAJYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwg Ki8KIAlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJ YW1za2lwX2Z1bmN0aW9uIGFtc2tpcDsJCQkJLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVy ZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0 aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2Fu IGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggMTM0YjIwZjFlNi4uOTNkYjkxMzlmOCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKQEAgLTE1Miw5ICsxNTIsMTcgQEAgZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdp bnNjYW5fc2tpcChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkgUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSBpbnQg bmtleXMsIGludCBub3JkZXJieXMsIGludCBwcmVmaXgpOwogZXh0ZXJuIEluZGV4U2NhbkRlc2Mg aW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJ CQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCQkJaW50IG5rZXlzKTsKK2V4dGVybiBJbmRl eFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXBfc2tpcChSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLAorCQkJCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJaW50IG5rZXlz LAorCQkJCQkJCQkJCQlpbnQgcHJlZml4KTsKIGV4dGVybiB2b2lkIGluZGV4X3Jlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkgU2NhbktleSBrZXlzLCBpbnQgbmtleXMsCiAJCQkJCQkg U2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xNzAsMTAgKzE3OCwxNiBAQCBl eHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVh cHJlbCwKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJu IEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJ CQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhf Z2V0bmV4dF90aWRfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgU2NhbkRpcmVj dGlvbiBwcmVmaXhEaXIsCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKTsKIHN0 cnVjdCBUdXBsZVRhYmxlU2xvdDsKIGV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhT Y2FuRGVzYyBzY2FuLCBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wg aW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCiAJCQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBi b29sIGluZGV4X2dldG5leHRfc2xvdF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBwcmVmaXhEaXIsCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIsCisJCQkJ CQkJCQlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJu IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZv ICppbmZvLApAQCAtMTgzLDYgKzE5Nyw4IEBAIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmluZGV4X3ZhY3V1bV9jbGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKIAkJCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaXN0YXQpOwogZXh0ZXJu IGJvb2wgaW5kZXhfY2FuX3JldHVybihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgYXR0bm8p OworZXh0ZXJuIGJvb2wgaW5kZXhfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gcHJlZml4RGlyLAorCQkJCQkgICBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOwogZXh0ZXJu IFJlZ1Byb2NlZHVyZSBpbmRleF9nZXRwcm9jaWQoUmVsYXRpb24gaXJlbCwgQXR0ck51bWJlciBh dHRudW0sCiAJCQkJCQkJCQl1aW50MTYgcHJvY251bSk7CiBleHRlcm4gRm1nckluZm8gKmluZGV4 X2dldHByb2NpbmZvKFJlbGF0aW9uIGlyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oCmluZGV4IDlmZWM2ZmIxYTguLmQzNGFjNDAzMWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTEw MjcsNiArMTAyNyw1NCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCURhdHVtCSAg ICplbGVtX3ZhbHVlczsJLyogYXJyYXkgb2YgbnVtX2VsZW1zIERhdHVtcyAqLwogfSBCVEFycmF5 S2V5SW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgQlRTa2lwQ29tcGFyZVJlc3VsdAoreworCWJvb2wJ CWVxdWFsOworCWludAkJCXByZWZpeENtcFJlc3VsdCwgc2tDbXBSZXN1bHQ7CisJYm9vbAkJcHJl Zml4U2tpcCwgZnVsbEtleVNraXA7CisJaW50CQkJcHJlZml4U2tpcEluZGV4OworfSBCVFNraXBD b21wYXJlUmVzdWx0OworCit0eXBlZGVmIGVudW0gQlRTa2lwU3RhdGUKK3sKKwlTa2lwU3RhdGVT dG9wLAorCVNraXBTdGF0ZVNraXAsCisJU2tpcFN0YXRlU2tpcEV4dHJhLAorCVNraXBTdGF0ZU5l eHQKK30gQlRTa2lwU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEJUU2tpcFBvc0RhdGEKK3sKKwlC VFNraXBTdGF0ZSBuZXh0QWN0aW9uOworCVNjYW5EaXJlY3Rpb24gbmV4dERpcmVjdGlvbjsKKwlp bnQgbmV4dFNraXBJbmRleDsKKwlCVFNjYW5JbnNlcnREYXRhIHNraXBTY2FuS2V5OworCWNoYXIg c2tpcFR1cGxlW0JMQ0tTWl07IC8qIHR1cGxlIGRhdGEgd2hlcmUgc2tpcFNjYW5LZXkgRGF0dW0n cyBwb2ludCB0byAqLworfSBCVFNraXBQb3NEYXRhOworCit0eXBlZGVmIHN0cnVjdCBCVFNraXBE YXRhCit7CisJLyogdXNlZCB0byBjb250cm9sIHNraXBwaW5nCisJICogY3VyUG9zLnNraXBTY2Fu S2V5IGlzIGEgY29tYmluYXRpb24gb2YgY3VycmVudFR1cGxlS2V5IGFuZCBmd2RTY2FuS2V5L2J3 ZFNjYW5LZXkuCisJICogY3VycmVudFR1cGxlS2V5IGNvbnRhaW5zIHRoZSBzY2FuIGtleXMgZm9y IHRoZSBjdXJyZW50IHR1cGxlCisJICogZndkU2NhbktleSBjb250YWlucyB0aGUgc2NhbiBrZXlz IGZvciBxdWFscyB0aGF0IHdvdWxkIGJlIGNob3NlbiBmb3IgYSBmb3J3YXJkIHNjYW4KKwkgKiBi d2RTY2FuS2V5IGNvbnRhaW5zIHRoZSBzY2FuIGtleXMgZm9yIHF1YWxzIHRoYXQgd291bGQgYmUg Y2hvc2VuIGZvciBhIGJhY2t3YXJkIHNjYW4KKwkgKiB3ZSBuZWVkIGJvdGggZndkIGFuZCBid2Qs IGJlY2F1c2UgdGhlIHNjYW4ga2V5cyBkaWZmZXIgZm9yIGdvaW5nIGZ3ZCBhbmQgYndkCisJICog aWYgYSBxdWFsIHdvdWxkIGJlIGE+MiBhbmQgYTw1LCBmd2Qgd291bGQgaGF2ZSBhPjIsIHdoaWxl IGJ3ZCB3b3VsZCBoYXZlIGE8NQorCSAqLworCUJUU2Nhbkluc2VydERhdGEJY3VycmVudFR1cGxl S2V5OworCUJUU2Nhbkluc2VydERhdGEJZndkU2NhbktleTsKKwlTY2FuS2V5RGF0YQkJCWZ3ZE5v dE51bGxLZXlzW0lOREVYX01BWF9LRVlTXTsKKwlCVFNjYW5JbnNlcnREYXRhCWJ3ZFNjYW5LZXk7 CisJU2NhbktleURhdGEJCQlid2ROb3ROdWxsS2V5c1tJTkRFWF9NQVhfS0VZU107CisJLyogbGVu Z3RoIG9mIHByZWZpeCB0byBza2lwICovCisJaW50CQkJCQlwcmVmaXg7CisKKwlCVFNraXBQb3NE YXRhIGN1clBvcywgbWFya1BvczsKK30gQlRTa2lwRGF0YTsKKwordHlwZWRlZiBCVFNraXBEYXRh ICpCVFNraXA7CisKIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVz ZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY0LDYg KzExMTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJICovCiAJaW50CQkJ bWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQgKi8KIAorCS8q IFdvcmsgc3BhY2UgZm9yIF9idF9za2lwICovCisJQlRTa2lwCXNraXBEYXRhOwkvKiB1c2VkIHRv IGNvbnRyb2wgc2tpcHBpbmcgKi8KKwogCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9y IGVmZmljaWVuY3kgKi8KIAlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0 aW9uIGRhdGEgKi8KIAlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24s IGlmIGFueSAqLwpAQCAtMTA3OCw2ICsxMTI5LDggQEAgdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRh ICpCVFNjYW5PcGFxdWU7CiAgKi8KICNkZWZpbmUgU0tfQlRfUkVRRldECTB4MDAwMTAwMDAJLyog cmVxdWlyZWQgdG8gY29udGludWUgZm9yd2FyZCBzY2FuICovCiAjZGVmaW5lIFNLX0JUX1JFUUJL V0QJMHgwMDAyMDAwMAkvKiByZXF1aXJlZCB0byBjb250aW51ZSBiYWNrd2FyZCBzY2FuICovCisj ZGVmaW5lIFNLX0JUX1JFUVNLSVBGV0QJMHgwMDA0MDAwMAkvKiByZXF1aXJlZCB0byBjb250aW51 ZSBmb3J3YXJkIHNjYW4gd2l0aGluIGN1cnJlbnQgcHJlZml4ICovCisjZGVmaW5lIFNLX0JUX1JF UVNLSVBCS1dECTB4MDAwODAwMDAJLyogcmVxdWlyZWQgdG8gY29udGludWUgYmFja3dhcmQgc2Nh biB3aXRoaW4gY3VycmVudCBwcmVmaXggKi8KICNkZWZpbmUgU0tfQlRfSU5ET1BUSU9OX1NISUZU ICAyNAkvKiBtdXN0IGNsZWFyIHRoZSBhYm92ZSBiaXRzICovCiAjZGVmaW5lIFNLX0JUX0RFU0MJ CQkoSU5ET1BUSU9OX0RFU0MgPDwgU0tfQlRfSU5ET1BUSU9OX1NISUZUKQogI2RlZmluZSBTS19C VF9OVUxMU19GSVJTVAkoSU5ET1BUSU9OX05VTExTX0ZJUlNUIDw8IFNLX0JUX0lORE9QVElPTl9T SElGVCkKQEAgLTExMjQsOSArMTE3NywxMiBAQCBleHRlcm4gYm9vbCBidGluc2VydChSZWxhdGlv biByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJIGJvb2wgaW5kZXhVbmNo YW5nZWQsCiAJCQkJCSBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpOworZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNjYW5fc2tpcChSZWxhdGlvbiByZWws IGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgaW50IHNraXBQcmVmaXgpOwogZXh0ZXJuIFNpemUg YnRlc3RpbWF0ZXBhcmFsbGVsc2Nhbih2b2lkKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVs c2Nhbih2b2lkICp0YXJnZXQpOwogZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIGJ0Z2V0dHVwbGVfc2tpcChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9u IHBvc3RmaXhEaXIpOworZXh0ZXJuIGJvb2wgYnRza2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CiBleHRlcm4g aW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBl eHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwg aW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwpA QCAtMTIyNywxNSArMTI4Myw4MSBAQCBleHRlcm4gQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRp b24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmLAogCQkJCQkJCWJvb2wgZm9ydXBk YXRlLCBCVFN0YWNrIHN0YWNrLCBpbnQgYWNjZXNzLCBTbmFwc2hvdCBzbmFwc2hvdCk7CiBleHRl cm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0 U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJl bCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4 dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOworZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBwcmVmaXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CitleHRlcm4gYm9v bCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBT Y2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50 KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCwKIAkJCQkJCQkgICBT bmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gQnVmZmVyIF9idF93YWxrX2xlZnQoUmVsYXRpb24g cmVsLCBCdWZmZXIgYnVmLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gT2Zmc2V0TnVtYmVy IF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7 CitleHRlcm4gdm9pZCBfYnRfaW5pdGlhbGl6ZV9tb3JlX2RhdGEoQlRTY2FuT3BhcXVlIHNvLCBT Y2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSBPZmZzZXROdW1iZXIgKm9mZm51bSwg Ym9vbCBpc1JlZ3VsYXJNb2RlKTsKK2V4dGVybiBib29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywgU2NhbkRpcmVjdGlvbiBk aXIpOworZXh0ZXJuIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKEluZGV4U2NhbkRl c2Mgc2NhbiwgQlRTY2FuUG9zIHNwKTsKKworLyoKKyogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIG5idHNraXAuYworKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0X3NraXBfZW5hYmxlZChC VFNjYW5PcGFxdWUgc28pCit7CisJcmV0dXJuIHNvLT5za2lwRGF0YSAhPSBOVUxMOworfQorCitz dGF0aWMgaW5saW5lIGJvb2wKK19idF9za2lwX2lzX3JlZ3VsYXJfbW9kZShTY2FuRGlyZWN0aW9u IHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBwb3N0Zml4RGlyKQoreworCXJldHVybiBwcmVmaXhE aXIgPT0gcG9zdGZpeERpcjsKK30KKworLyogcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4g dXNlIGV4dHJhIHF1YWxzIGluIHRoZSBzY2Fua2V5IGFmdGVyIHNraXBwaW5nIHRvIGEgcHJlZml4 ICovCitzdGF0aWMgaW5saW5lIGJvb2wKK19idF9oYXNfZXh0cmFfcXVhbHNfYWZ0ZXJfc2tpcChC VFNraXAgc2tpcCwgU2NhbkRpcmVjdGlvbiBkaXIsIGludCBwcmVmaXgpCit7CisJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwl7CisJCXJldHVybiBza2lwLT5md2RTY2FuS2V5Lmtl eXN6ID4gcHJlZml4OworCX0KKwllbHNlCisJeworCQlyZXR1cm4gc2tpcC0+YndkU2NhbktleS5r ZXlzeiA+IHByZWZpeDsKKwl9Cit9CisKKy8qIGFsaWFzIG9mIEJUU2NhblBvc0lzVmFsaWQgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAorX2J0X3NraXBfaXNfYWx3YXlzX3ZhbGlkKEJUU2Nhbk9wYXF1 ZSBzbykKK3sKKwlyZXR1cm4gQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcyk7Cit9CisKK2V4 dGVybiBib29sIF9idF9za2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBwcmVm aXhEaXIsIFNjYW5EaXJlY3Rpb24gcG9zdGZpeERpcik7CitleHRlcm4gdm9pZCBfYnRfc2tpcF9j cmVhdGVfc2NhbmtleXMoUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworZXh0ZXJuIHZv aWQgX2J0X3NraXBfdXBkYXRlX3NjYW5rZXlfZm9yX2V4dHJhX3NraXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBSZWxhdGlvbiBpbmRleFJlbCwKKwkJCQkJU2NhbkRpcmVjdGlvbiBjdXJEaXIsIFNjYW5E aXJlY3Rpb24gcHJlZml4RGlyLCBib29sIHByaW9yaXRpemVFcXVhbCwgSW5kZXhUdXBsZSBpdHVw KTsKK2V4dGVybiB2b2lkIF9idF9za2lwX29uY2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1 cGxlICpjdXJUdXBsZSwgT2Zmc2V0TnVtYmVyICpjdXJUdXBsZU9mZm51bSwKKwkJCQkJCSAgYm9v bCBmb3JjZVNraXAsIFNjYW5EaXJlY3Rpb24gcHJlZml4RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3Rm aXhEaXIpOworZXh0ZXJuIHZvaWQgX2J0X3NraXBfZXh0cmFfY29uZGl0aW9ucyhJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBPZmZzZXROdW1iZXIgKmN1clR1cGxlT2Zm bnVtLAorCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIHByZWZpeERpciwgU2NhbkRpcmVjdGlvbiBw b3N0Zml4RGlyLCBCVFNraXBDb21wYXJlUmVzdWx0ICpjbXApOworZXh0ZXJuIGJvb2wgX2J0X3Nr aXBfZmluZF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBjdXJUdXBsZSwgT2Zm c2V0TnVtYmVyIGN1clR1cGxlT2ZmbnVtLAorCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gcHJlZml4 RGlyLCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOworZXh0ZXJuIHZvaWQgX2J0X3NraXBfdW50 aWxfbWF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlICpjdXJUdXBsZSwgT2Zmc2V0 TnVtYmVyICpjdXJUdXBsZU9mZm51bSwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gcHJlZml4RGly LCBTY2FuRGlyZWN0aW9uIHBvc3RmaXhEaXIpOworZXh0ZXJuIGJvb2wgX2J0X2hhc19yZXN1bHRz KEJUU2Nhbk9wYXF1ZSBzbyk7CitleHRlcm4gdm9pZCBfYnRfY29tcGFyZV9jdXJyZW50X2l0ZW0o SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMsCisJCQkJ CQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgaXNSZWd1bGFyTW9kZSwgQlRTa2lwQ29tcGFy ZVJlc3VsdCogY21wKTsKK2V4dGVybiBib29sIF9idF9zdGVwX2JhY2tfcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4VHVwbGUgKmN1clR1cGxlLCBPZmZzZXROdW1iZXIgKmN1clR1cGxlT2Zm bnVtKTsKK2V4dGVybiBib29sIF9idF9zdGVwX2ZvcndhcmRfcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJsb2NrTnVtYmVyIG5leHQsIEluZGV4VHVwbGUgKmN1clR1cGxlLAorCQkJCQkJCQkgIE9m ZnNldE51bWJlciAqY3VyVHVwbGVPZmZudW0pOworZXh0ZXJuIGJvb2wgX2J0X2NoZWNra2V5c19z a2lwKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzLAor CQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sICpjb250aW51ZXNjYW4sIGludCAqcHJl Zml4c2tpcGluZGV4KTsKK2V4dGVybiBJbmRleFR1cGxlCitfYnRfZ2V0X3R1cGxlX2Zyb21fb2Zm c2V0KEJUU2Nhbk9wYXF1ZSBzbywgT2Zmc2V0TnVtYmVyIGN1clR1cGxlT2ZmbnVtKTsKIAogLyoK ICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8KLWV4dGVybiBC VFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7 CiBleHRlcm4gdm9pZCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spOwogZXh0ZXJuIHZvaWQg X2J0X3ByZXByb2Nlc3NfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZv aWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CkBAIC0xMjQ0LDcgKzEzNjYsNyBAQCBleHRlcm4gdm9pZCBfYnRfbWFya19hcnJheV9r ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBfYnRfcmVzdG9yZV9hcnJheV9r ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlz KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSB0dXBsZSwKLQkJCQkJCSAgaW50IHR1cG5hdHRzLCBTY2Fu RGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2FuKTsKKwkJCQkJCSAgaW50IHR1cG5hdHRz LCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2FuLCBpbnQgKmluZGV4U2tpcFBy ZWZpeCk7CiBleHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBl eHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJu IEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CkBAIC0xMjY2LDYgKzEz ODgsMTkgQEAgZXh0ZXJuIGJvb2wgX2J0X2NoZWNrX25hdHRzKFJlbGF0aW9uIHJlbCwgYm9vbCBo ZWFwa2V5c3BhY2UsIFBhZ2UgcGFnZSwKIGV4dGVybiB2b2lkIF9idF9jaGVja190aGlyZF9wYWdl KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcCwKIAkJCQkJCQkJIGJvb2wgbmVlZGhlYXB0aWRz cGFjZSwgUGFnZSBwYWdlLCBJbmRleFR1cGxlIG5ld3R1cCk7CiBleHRlcm4gYm9vbCBfYnRfYWxs ZXF1YWxpbWFnZShSZWxhdGlvbiByZWwsIGJvb2wgZGVidWdtZXNzYWdlKTsKK2V4dGVybiBib29s IF9idF9jaGVja2tleXNfdGhyZWV3YXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIHR1 cGxlLCBpbnQgdHVwbmF0dHMsCisJCQkJU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgKmNvbnRpbnVl c2NhbiwgaW50ICpwcmVmaXhTa2lwSW5kZXgpOworZXh0ZXJuIGJvb2wgX2J0X2NyZWF0ZV9pbnNl cnRpb25fc2Nhbl9rZXkoUmVsYXRpb24JcmVsLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQlTY2Fu S2V5KiBzdGFydEtleXMsIGludCBrZXlzQ291bnQsCisJCQkJQlRTY2FuSW5zZXJ0IGluc2tleSwg U3RyYXRlZ3lOdW1iZXIqIHN0cmF0VG90YWwsCisJCQkJYm9vbCogZ29iYWNrKTsKK2V4dGVybiB2 b2lkIF9idF9zZXRfYnNlYXJjaF9mbGFncyhTdHJhdGVneU51bWJlciBzdHJhdFRvdGFsLCBTY2Fu RGlyZWN0aW9uIGRpciwKKwkJYm9vbCogbmV4dGtleSwgYm9vbCogZ29iYWNrKTsKK2V4dGVybiBp bnQgX2J0X2Nob29zZV9zY2FuX2tleXMoU2NhbktleSBzY2FuS2V5cywgaW50IG51bWJlck9mS2V5 cywgU2NhbkRpcmVjdGlvbiBkaXIsCitTY2FuS2V5KiBzdGFydEtleXMsIFNjYW5LZXlEYXRhKiBu b3RudWxsa2V5cywKKyAgU3RyYXRlZ3lOdW1iZXIqIHN0cmF0VG90YWwsIGludCBwcmVmaXgpOwor ZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBs ZSBpdHVwLCBCVFNjYW5JbnNlcnQga2V5KTsKK2V4dGVybiB2b2lkIHByaW50X2l0dXAoQmxvY2tO dW1iZXIgYmxrLCBJbmRleFR1cGxlIGxlZnQsIEluZGV4VHVwbGUgcmlnaHQsIFJlbGF0aW9uIHJl bCwgY2hhciAqZXh0cmEpOwogCiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5i dHZhbGlkYXRlLmMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgg Yi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDM0NDM5OWY2YTguLjliZjM5 MjJkNTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNDU1LDkgKzQ1NSwxMyBAQCBleHRl cm4gRGF0dW0gRXhlY01ha2VGdW5jdGlvblJlc3VsdFNldChTZXRFeHByU3RhdGUgKmZjYWNoZSwK ICAqLwogdHlwZWRlZiBUdXBsZVRhYmxlU2xvdCAqKCpFeGVjU2NhbkFjY2Vzc010ZCkgKFNjYW5T dGF0ZSAqbm9kZSk7CiB0eXBlZGVmIGJvb2wgKCpFeGVjU2NhblJlY2hlY2tNdGQpIChTY2FuU3Rh dGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK3R5cGVkZWYgYm9vbCAoKkV4ZWNTY2Fu U2tpcE10ZCkgKFNjYW5TdGF0ZSAqbm9kZSk7CiAKIGV4dGVybiBUdXBsZVRhYmxlU2xvdCAqRXhl Y1NjYW4oU2NhblN0YXRlICpub2RlLCBFeGVjU2NhbkFjY2Vzc010ZCBhY2Nlc3NNdGQsCiAJCQkJ CQkJCUV4ZWNTY2FuUmVjaGVja010ZCByZWNoZWNrTXRkKTsKK2V4dGVybiBUdXBsZVRhYmxlU2xv dCAqRXhlY1NjYW5FeHRlbmRlZChTY2FuU3RhdGUgKm5vZGUsIEV4ZWNTY2FuQWNjZXNzTXRkIGFj Y2Vzc010ZCwKKwkJCQkJCQkJRXhlY1NjYW5SZWNoZWNrTXRkIHJlY2hlY2tNdGQsCisJCQkJCQkJ CUV4ZWNTY2FuU2tpcE10ZCBza2lwTXRkKTsKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25TY2FuUHJv amVjdGlvbkluZm8oU2NhblN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25TY2Fu UHJvamVjdGlvbkluZm9XaXRoVmFybm8oU2NhblN0YXRlICpub2RlLCBpbnQgdmFybm8pOwogZXh0 ZXJuIHZvaWQgRXhlY1NjYW5SZVNjYW4oU2NhblN0YXRlICpub2RlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKaW5kZXggNGVhODczNWRkOC4uMWFhNjdjNWFlNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAg LTEzODMsNiArMTM4Myw3IEBAIHR5cGVkZWYgc3RydWN0IFNjYW5TdGF0ZQogCVJlbGF0aW9uCXNz X2N1cnJlbnRSZWxhdGlvbjsKIAlzdHJ1Y3QgVGFibGVTY2FuRGVzY0RhdGEgKnNzX2N1cnJlbnRT Y2FuRGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc3NfU2NhblR1cGxlU2xvdDsKKwlib29sIHNzX0Zp cnN0VHVwbGVFbWl0dGVkOwogfSBTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAg LTE0NzksNiArMTQ4MCw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJRXhwckNv bnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25EZXNjOwog CXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOworCWludAkJCWlzc19Ta2lw UHJlZml4U2l6ZTsKKwlib29sCQlpc3NfRGlzdGluY3Q7CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVk IGZvciByZS1jaGVja2luZyBPUkRFUiBCWSBleHByIG9yZGVyaW5nICovCiAJcGFpcmluZ2hlYXAg Kmlzc19SZW9yZGVyUXVldWU7CkBAIC0xNTA4LDYgKzE1MTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleFNjYW5TdGF0ZQogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMg ZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQogICoJCVZNQnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZv ciB2aXNpYmlsaXR5IG1hcCB0ZXN0aW5nLCBpZiBhbnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBv ZiBwYXJhbGxlbCBpbmRleC1vbmx5IHNjYW4gZGVzY3JpcHRvcgorICoJCVNraXBQcmVmaXhTaXpl CSAgIG51bWJlciBvZiBrZXlzIGZvciBza2lwLWJhc2VkIERJU1RJTkNUCisgKgkJRmlyc3RUdXBs ZUVtaXR0ZWQgIGhhcyB0aGUgZmlyc3QgdHVwbGUgYmVlbiBlbWl0dGVkCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0ZQpAQCAtMTUyNiw2 ICsxNTMxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCVR1cGxlVGFibGVTbG90ICppb3NzX1Rh YmxlU2xvdDsKIAlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CisJaW50CQkJaW9zc19Ta2lwUHJlZml4 U2l6ZTsKKwlib29sCQlpb3NzX0Rpc3RpbmN0OwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiB9IElu ZGV4T25seVNjYW5TdGF0ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAxZGU1MDk1ZTc0Li4y MjcwNGZhNWYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtNjk5LDYgKzY5OSw3IEBAIHR5cGVk ZWYgc3RydWN0IFJlbE9wdEluZm8KIAlMaXN0ICAgICAgICp1bmlxdWVfcGF0aGxpc3Q7ICAgIC8q IHVuaXF1ZSBQYXRocyAqLwogCXN0cnVjdCBQYXRoICpjaGVhcGVzdF9zdGFydHVwX3BhdGg7CiAJ c3RydWN0IFBhdGggKmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJc3RydWN0IFBhdGggKmNoZWFwZXN0 X2Rpc3RpbmN0X3VuaXF1ZV9wYXRoOwogCXN0cnVjdCBQYXRoICpjaGVhcGVzdF91bmlxdWVfcGF0 aDsKIAlMaXN0CSAgICpjaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzOwogCkBAIC0xMjY3LDYg KzEyNjgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoCiAgKiB3ZSBuZWVkIG5vdCByZWNvbXB1dGUg dGhlbSB3aGVuIGNvbnNpZGVyaW5nIHVzaW5nIHRoZSBzYW1lIGluZGV4IGluIGEKICAqIGJpdG1h cCBpbmRleC9oZWFwIHNjYW4gKHNlZSBCaXRtYXBIZWFwUGF0aCkuICBUaGUgY29zdHMgb2YgdGhl IEluZGV4UGF0aAogICogaXRzZWxmIHJlcHJlc2VudCB0aGUgY29zdHMgb2YgYW4gSW5kZXhTY2Fu IG9yIEluZGV4T25seVNjYW4gcGxhbiB0eXBlLgorICoKKyAqICdpbmRleHNraXBwcmVmaXgnIHJl cHJlc2VudHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRvIGNvbnNpZGVyIGZvciBza2lwCisgKiBz Y2Fucy4KICAqLS0tLS0tLS0tLQogICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFBhdGgKQEAgLTEy NzksNiArMTI4Myw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4UGF0aAogCVNjYW5EaXJlY3Rpb24g aW5kZXhzY2FuZGlyOwogCUNvc3QJCWluZGV4dG90YWxjb3N0OwogCVNlbGVjdGl2aXR5IGluZGV4 c2VsZWN0aXZpdHk7CisJaW50CQkJaW5kZXhza2lwcHJlZml4OworCWJvb2wJCWluZGV4ZGlzdGlu Y3Q7CiB9IEluZGV4UGF0aDsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMGI1MThjZTZi Mi4uODE3YjBiZTFmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTQxMSw2ICs0MTEsOCBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleFNjYW4KIAlMaXN0CSAgICppbmRleG9yZGVyYnlvcmlnOwkvKiB0 aGUgc2FtZSBpbiBvcmlnaW5hbCBmb3JtICovCiAJTGlzdAkgICAqaW5kZXhvcmRlcmJ5b3BzOwkv KiBPSURzIG9mIHNvcnQgb3BzIGZvciBPUkRFUiBCWSBleHBycyAqLwogCVNjYW5EaXJlY3Rpb24g aW5kZXhvcmRlcmRpcjsJLyogZm9yd2FyZCBvciBiYWNrd2FyZCBvciBkb24ndCBjYXJlICovCisJ aW50CQkJaW5kZXhza2lwcHJlZml4c2l6ZTsJLyogdGhlIHNpemUgb2YgdGhlIHByZWZpeCBmb3Ig c2tpcCBzY2FucyAqLworCWJvb2wJCWluZGV4ZGlzdGluY3Q7IC8qIHdoZXRoZXIgb25seSBkaXN0 aW5jdCBrZXlzIGFyZSByZXF1ZXN0ZWQgKi8KIH0gSW5kZXhTY2FuOwogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCkBAIC00NTMsNiArNDU1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2Nhbgog CUxpc3QJICAgKmluZGV4b3JkZXJieTsJLyogbGlzdCBvZiBpbmRleCBPUkRFUiBCWSBleHBycyAq LwogCUxpc3QJICAgKmluZGV4dGxpc3Q7CQkvKiBUYXJnZXRFbnRyeSBsaXN0IGRlc2NyaWJpbmcg aW5kZXgncyBjb2xzICovCiAJU2NhbkRpcmVjdGlvbiBpbmRleG9yZGVyZGlyOwkvKiBmb3J3YXJk IG9yIGJhY2t3YXJkIG9yIGRvbid0IGNhcmUgKi8KKwlpbnQJCQlpbmRleHNraXBwcmVmaXhzaXpl OwkvKiB0aGUgc2l6ZSBvZiB0aGUgcHJlZml4IGZvciBza2lwIHNjYW5zICovCisJYm9vbAkJaW5k ZXhkaXN0aW5jdDsgLyogd2hldGhlciBvbmx5IGRpc3RpbmN0IGtleXMgYXJlIHJlcXVlc3RlZCAq LwogfSBJbmRleE9ubHlTY2FuOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00NzksNiArNDgz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuCiAJYm9vbAkJaXNzaGFyZWQ7CQkv KiBDcmVhdGUgc2hhcmVkIGJpdG1hcCBpZiBzZXQgKi8KIAlMaXN0CSAgICppbmRleHF1YWw7CQkv KiBsaXN0IG9mIGluZGV4IHF1YWxzIChPcEV4cHJzKSAqLwogCUxpc3QJICAgKmluZGV4cXVhbG9y aWc7CS8qIHRoZSBzYW1lIGluIG9yaWdpbmFsIGZvcm0gKi8KKwlpbnQJCQlpbmRleHNraXBwcmVm aXhzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgcHJlZml4IGZvciBza2lwIHNjYW5zICovCiB9IEJp dG1hcEluZGV4U2NhbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5k ZXggMzU2YTUxZjM3MC4uMDNkNTgxNmM4MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01MCw2ICs1 MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2lu ZGV4c2tpcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgZW5hYmxlX3NvcnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IGJiNmQ3 MzBlOTMuLjIyN2NkYTRiZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo bm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0yMTgsNiAr MjE4LDEwIEBAIGV4dGVybiBVcHBlclVuaXF1ZVBhdGggKmNyZWF0ZV91cHBlcl91bmlxdWVfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBQYXRoICpzdWJwYXRoLAogCQkJCQkJ CQkJCQkJIGludCBudW1Db2xzLAogCQkJCQkJCQkJCQkJIGRvdWJsZSBudW1Hcm91cHMpOworZXh0 ZXJuIEluZGV4UGF0aCAqY3JlYXRlX3NraXBzY2FuX3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCQkgIEluZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkJCQkJCSAgUGF0 aCAqc3VicGF0aCwKKwkJCQkJCQkJCQkJICBpbnQgcHJlZml4KTsKIGV4dGVybiBBZ2dQYXRoICpj cmVhdGVfYWdnX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCVJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJUGF0aCAqc3VicGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggMTZiYjVl MGVlYS4uMzZlOThiNjYwYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhz LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTIxMiw2ICsyMTIsMTAg QEAgZXh0ZXJuIFBhdGggKmdldF9jaGVhcGVzdF9mcmFjdGlvbmFsX3BhdGhfZm9yX3BhdGhrZXlz KExpc3QgKnBhdGhzLAogCQkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlciwKIAkJ CQkJCQkJCQkJCQkgICBkb3VibGUgZnJhY3Rpb24pOwogZXh0ZXJuIFBhdGggKmdldF9jaGVhcGVz dF9wYXJhbGxlbF9zYWZlX3RvdGFsX2lubmVyKExpc3QgKnBhdGhzKTsKK2V4dGVybiBpbnQgZmlu ZF9pbmRleF9wcmVmaXhfZm9yX3BhdGhrZXkoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSBJbmRl eE9wdEluZm8gKmluZGV4LAorCQkJCQkgU2NhbkRpcmVjdGlvbiBzY2FuZGlyLAorCQkJCQkgUGF0 aEtleSAqcGF0aGtleSk7CiBleHRlcm4gTGlzdCAqYnVpbGRfaW5kZXhfcGF0aGtleXMoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4T3B0SW5mbyAqaW5kZXgsCiAJCQkJCQkJCSAgU2NhbkRpcmVjdGlv biBzY2FuZGlyKTsKIGV4dGVybiBMaXN0ICpidWlsZF9wYXJ0aXRpb25fcGF0aGtleXMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcnRyZWwsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9lbmNuYW1lcy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZW5jbmFtZXMuYwpu ZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwLi5jYTc4NjE4YjU1Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZW5jbmFtZXMuYwpAQCAtMCwwICsxIEBA CisuLi8uLi8uLi9zcmMvYmFja2VuZC91dGlscy9tYi9lbmNuYW1lcy5jClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvd2NoYXIuYyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL3djaGFyLmMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXgg MDAwMDAwMDAwMC4uYTI3NTA4ZjcyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL3djaGFyLmMKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vc3JjL2JhY2tlbmQvdXRpbHMv bWIvd2NoYXIuYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dAppbmRleCA1ODEyMmM2Zjg4Li5lYzk4ZGJm NjNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5j dC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0 CkBAIC0zNzUsMyArMzc1LDYwMiBAQCBTRUxFQ1QgbnVsbCBJUyBOT1QgRElTVElOQ1QgRlJPTSBu dWxsIGFzICJ5ZXMiOwogIHQKICgxIHJvdykKIAorLS0gaW5kZXggb25seSBza2lwIHNjYW4KK0NS RUFURSBUQUJMRSBkaXN0aW5jdF9hIChhIGludCwgYiBpbnQsIGMgaW50KTsKK0lOU0VSVCBJTlRP IGRpc3RpbmN0X2EgKAorICAgIFNFTEVDVCBmaXZlLCB0ZW50aG91cywgMTAgRlJPTQorICAgIGdl bmVyYXRlX3NlcmllcygxLCA1KSBmaXZlLAorICAgIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkg dGVudGhvdXMKKyk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYSAoYSwgYik7CitBTkFMWVpF IGRpc3RpbmN0X2E7CitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2E7CisgYSAKKy0t LQorIDEKKyAyCisgMworIDQKKyA1CisoNSByb3dzKQorCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9N IGRpc3RpbmN0X2EgV0hFUkUgYSA9IDE7CisgYSAKKy0tLQorIDEKKygxIHJvdykKKworU0VMRUNU IERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGEgREVTQzsKKyBhIAorLS0tCisg NQorIDQKKyAzCisgMgorIDEKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBk aXN0aW5jdF9hX2FfYl9pZHggb24gZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiBEaXN0aW5jdCBv bmx5CisoMiByb3dzKQorCistLSB0ZXN0IGluZGV4IHNraXAgc2NhbiB3aXRoIGEgY29uZGl0aW9u IG9uIGEgbm9uIHVuaXF1ZSBmaWVsZAorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00g ZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKyBhIHwgYiAKKy0tLSstLS0KKyAxIHwgMgorIDIgfCAy CisgMyB8IDIKKyA0IHwgMgorIDUgfCAyCisoNSByb3dzKQorCistLSB0ZXN0IGluZGV4IHNraXAg c2NhbiBiYWNrd2FyZHMKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0 X2EgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyA1 IHwgMTAwMDAKKyA0IHwgMTAwMDAKKyAzIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAxIHwgMTAwMDAK Kyg1IHJvd3MpCisKKy0tIGNoZWNrIGNvbHVtcyBvcmRlcgorQ1JFQVRFIElOREVYIGRpc3RpbmN0 X2FfYl9hIG9uIGRpc3RpbmN0X2EgKGIsIGEpOworU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0 aW5jdF9hIFdIRVJFIGIgPSAyOworIGEgCistLS0KKyAxCisgMgorIDMKKyA0CisgNQorKDUgcm93 cykKKworU0VMRUNUIERJU1RJTkNUIG9uIChhLCBiKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVS RSBiID0gMjsKKyBhIHwgYiAKKy0tLSstLS0KKyAxIHwgMgorIDIgfCAyCisgMyB8IDIKKyA0IHwg MgorIDUgfCAyCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElO Q1QgYSBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDI7CisgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIGRpc3Rp bmN0X2FfYl9hIG9uIGRpc3RpbmN0X2EKKyAgIFNraXAgc2NhbjogRGlzdGluY3Qgb25seQorICAg SW5kZXggQ29uZDogKGIgPSAyKQorKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIERJU1RJTkNUIG9uIChhLCBiKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsK KyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBPbmx5IFNjYW4gdXNpbmcgZGlzdGluY3RfYV9iX2Egb24gZGlzdGluY3RfYQorICAgU2tpcCBz Y2FuOiBEaXN0aW5jdCBvbmx5CisgICBJbmRleCBDb25kOiAoYiA9IDIpCisoMyByb3dzKQorCitE Uk9QIElOREVYIGRpc3RpbmN0X2FfYl9hOworLS0gdGVzdCBvcHBvc2l0ZSBzY2FuL2luZGV4IGRp cmVjdGlvbnMgaW5zaWRlIGEgY3Vyc29yCistLSBmb3J3YXJkL2JhY2t3YXJkCitCRUdJTjsKK0RF Q0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIgRlJP TSBkaXN0aW5jdF9hIE9SREVSIEJZIGEsIGI7CitGRVRDSCBGUk9NIGM7CisgYSB8IGIgCistLS0r LS0tCisgMSB8IDEKKygxIHJvdykKKworRkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworIGEgfCBiIAor LS0tKy0tLQorKDAgcm93cykKKworRkVUQ0ggNiBGUk9NIGM7CisgYSB8IGIgCistLS0rLS0tCisg MSB8IDEKKyAyIHwgMQorIDMgfCAxCisgNCB8IDEKKyA1IHwgMQorKDUgcm93cykKKworRkVUQ0gg QkFDS1dBUkQgNiBGUk9NIGM7CisgYSB8IGIgCistLS0rLS0tCisgNSB8IDEKKyA0IHwgMQorIDMg fCAxCisgMiB8IDEKKyAxIHwgMQorKDUgcm93cykKKworRkVUQ0ggNiBGUk9NIGM7CisgYSB8IGIg CistLS0rLS0tCisgMSB8IDEKKyAyIHwgMQorIDMgfCAxCisgNCB8IDEKKyA1IHwgMQorKDUgcm93 cykKKworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisgYSB8IGIgCistLS0rLS0tCisgNSB8IDEK KyA0IHwgMQorIDMgfCAxCisgMiB8IDEKKyAxIHwgMQorKDUgcm93cykKKworRU5EOworLS0gYmFj a3dhcmQvZm9yd2FyZAorQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKK1NFTEVD VCBESVNUSU5DVCBPTiAoYSkgYSxiIEZST00gZGlzdGluY3RfYSBPUkRFUiBCWSBhIERFU0MsIGIg REVTQzsKK0ZFVENIIEZST00gYzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQorIDUgfCAxMDAw MAorKDEgcm93KQorCitGRVRDSCBCQUNLV0FSRCBGUk9NIGM7CisgYSB8IGIgCistLS0rLS0tCiso MCByb3dzKQorCitGRVRDSCA2IEZST00gYzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQorIDUg fCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAxMDAwMAorIDEgfCAxMDAwMAor KDUgcm93cykKKworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisgYSB8ICAgYiAgIAorLS0tKy0t LS0tLS0KKyAxIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAzIHwgMTAwMDAKKyA0IHwgMTAwMDAKKyA1 IHwgMTAwMDAKKyg1IHJvd3MpCisKK0ZFVENIIDYgRlJPTSBjOworIGEgfCAgIGIgICAKKy0tLSst LS0tLS0tCisgNSB8IDEwMDAwCisgNCB8IDEwMDAwCisgMyB8IDEwMDAwCisgMiB8IDEwMDAwCisg MSB8IDEwMDAwCisoNSByb3dzKQorCitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKyBhIHwgICBi ICAgCistLS0rLS0tLS0tLQorIDEgfCAxMDAwMAorIDIgfCAxMDAwMAorIDMgfCAxMDAwMAorIDQg fCAxMDAwMAorIDUgfCAxMDAwMAorKDUgcm93cykKKworRU5EOworLS0gdGVzdCBtaXNzaW5nIHZh bHVlcyBhbmQgc2tpcHBpbmcgZnJvbSB0aGUgZW5kCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfYWJj KGEgaW50LCBiIGludCwgYyBpbnQpOworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2FiYyhhLCBi LCBjKTsKK0lOU0VSVCBJTlRPIGRpc3RpbmN0X2FiYworCVZBTFVFUyAoMSwgMSwgMSksCisJCSAg ICgxLCAxLCAyKSwKKwkJICAgKDEsIDIsIDIpLAorCQkgICAoMSwgMiwgMyksCisJCSAgICgyLCAy LCAxKSwKKwkJICAgKDIsIDIsIDMpLAorCQkgICAoMywgMSwgMSksCisJCSAgICgzLCAxLCAyKSwK KwkJICAgKDMsIDIsIDIpLAorCQkgICAoMywgMiwgMyk7CitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjIEZST00gZGlzdGluY3RfYWJjIFdIRVJFIGMgPSAy OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIGRpc3RpbmN0X2FiY19hX2Jf Y19pZHggb24gZGlzdGluY3RfYWJjCisgICBTa2lwIHNjYW46IERpc3RpbmN0IG9ubHkKKyAgIElu ZGV4IENvbmQ6IChjID0gMikKKygzIHJvd3MpCisKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBD VVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjIEZST00gZGlzdGluY3RfYWJj IFdIRVJFIGMgPSAyOworRkVUQ0ggQUxMIEZST00gYzsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0t LQorIDEgfCAxIHwgMgorIDMgfCAxIHwgMgorKDIgcm93cykKKworRkVUQ0ggQkFDS1dBUkQgQUxM IEZST00gYzsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0tLQorIDMgfCAxIHwgMgorIDEgfCAxIHwg MgorKDIgcm93cykKKworRU5EOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMgorT1JERVIgQlkgYSBE RVNDLCBiIERFU0M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5 IFNjYW4gQmFja3dhcmQgdXNpbmcgZGlzdGluY3RfYWJjX2FfYl9jX2lkeCBvbiBkaXN0aW5jdF9h YmMKKyAgIFNraXAgc2NhbjogRGlzdGluY3Qgb25seQorICAgSW5kZXggQ29uZDogKGMgPSAyKQor KDMgcm93cykKKworQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKK1NFTEVDVCBE SVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDIKK09SREVS IEJZIGEgREVTQywgYiBERVNDOworRkVUQ0ggQUxMIEZST00gYzsKKyBhIHwgYiB8IGMgCistLS0r LS0tKy0tLQorIDMgfCAyIHwgMgorIDEgfCAyIHwgMgorKDIgcm93cykKKworRkVUQ0ggQkFDS1dB UkQgQUxMIEZST00gYzsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0tLQorIDEgfCAyIHwgMgorIDMg fCAyIHwgMgorKDIgcm93cykKKworRU5EOworRFJPUCBUQUJMRSBkaXN0aW5jdF9hYmM7CistLSBp bmRleCBza2lwIHNjYW4KK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwgYworRlJPTSBkaXN0 aW5jdF9hIE9SREVSIEJZIGE7CisgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tLQorIDEgfCAxIHwg MTAKKyAyIHwgMSB8IDEwCisgMyB8IDEgfCAxMAorIDQgfCAxIHwgMTAKKyA1IHwgMSB8IDEwCiso NSByb3dzKQorCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIsIGMKK0ZST00gZGlzdGluY3Rf YSBXSEVSRSBhID0gMSBPUkRFUiBCWSBhOworIGEgfCBiIHwgYyAgCistLS0rLS0tKy0tLS0KKyAx IHwgMSB8IDEwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5D VCBPTiAoYSkgYSwgYiwgYworRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGE7CisgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcg ZGlzdGluY3RfYV9hX2JfaWR4IG9uIGRpc3RpbmN0X2EKKyAgIFNraXAgc2NhbjogRGlzdGluY3Qg b25seQorKDIgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDEgT1JERVIgQlkgYTsKKyAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBkaXN0aW5jdF9hX2FfYl9pZHggb24gZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiBE aXN0aW5jdCBvbmx5CisgICBJbmRleCBDb25kOiAoYSA9IDEpCisoMyByb3dzKQorCistLSBjaGVj ayBjb2x1bXMgb3JkZXIKK1NFTEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBi ID0gMiBBTkQgYyA9IDEwOworIGEgCistLS0KKyAxCisgMgorIDMKKyA0CisgNQorKDUgcm93cykK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9h IFdIRVJFIGIgPSAyIEFORCBjID0gMTA7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZGlzdGluY3RfYV9hX2JfaWR4IG9u IGRpc3RpbmN0X2EKKyAgIFNraXAgc2NhbjogRGlzdGluY3Qgb25seQorICAgSW5kZXggQ29uZDog KGIgPSAyKQorICAgRmlsdGVyOiAoYyA9IDEwKQorKDQgcm93cykKKworLS0gY2hlY2sgcHJvamVj dGlvbiBjYXNlCitTRUxFQ1QgRElTVElOQ1QgYSwgYSBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9 IDI7CisgYSB8IGEgCistLS0rLS0tCisgMSB8IDEKKyAyIHwgMgorIDMgfCAzCisgNCB8IDQKKyA1 IHwgNQorKDUgcm93cykKKworU0VMRUNUIERJU1RJTkNUIGEsIDEgRlJPTSBkaXN0aW5jdF9hIFdI RVJFIGIgPSAyOworIGEgfCA/Y29sdW1uPyAKKy0tLSstLS0tLS0tLS0tCisgMSB8ICAgICAgICAx CisgMiB8ICAgICAgICAxCisgMyB8ICAgICAgICAxCisgNCB8ICAgICAgICAxCisgNSB8ICAgICAg ICAxCisoNSByb3dzKQorCistLSB0ZXN0IGN1cnNvciBmb3J3YXJkL2JhY2t3YXJkIG1vdmVtZW50 cworQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIERJU1RJTkNUIGEg RlJPTSBkaXN0aW5jdF9hOworRkVUQ0ggRlJPTSBjOworIGEgCistLS0KKyAxCisoMSByb3cpCisK K0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKyBhIAorLS0tCisoMCByb3dzKQorCitGRVRDSCA2IEZS T00gYzsKKyBhIAorLS0tCisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3MpCisKK0ZFVENIIEJB Q0tXQVJEIDYgRlJPTSBjOworIGEgCistLS0KKyA1CisgNAorIDMKKyAyCisgMQorKDUgcm93cykK KworRkVUQ0ggNiBGUk9NIGM7CisgYSAKKy0tLQorIDEKKyAyCisgMworIDQKKyA1CisoNSByb3dz KQorCitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKyBhIAorLS0tCisgNQorIDQKKyAzCisgMgor IDEKKyg1IHJvd3MpCisKK0VORDsKK0RST1AgVEFCTEUgZGlzdGluY3RfYTsKKy0tIHRlc3QgdHVw bGVzIHZpc2liaWxpdHkKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF92aXNpYmlsaXR5IChhIGludCwg YiBpbnQpOworSU5TRVJUIElOVE8gZGlzdGluY3RfdmlzaWJpbGl0eSAoc2VsZWN0IGEsIGIgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhLCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGIpOwor Q1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X3Zpc2liaWxpdHkgKGEsIGIpOworQU5BTFlaRSBkaXN0 aW5jdF92aXNpYmlsaXR5OworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGlu Y3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhLCBiOworIGEgfCBiIAorLS0tKy0tLQorIDEgfCAxCisg MiB8IDEKKyAzIHwgMQorIDQgfCAxCisgNSB8IDEKKyg1IHJvd3MpCisKK0RFTEVURSBGUk9NIGRp c3RpbmN0X3Zpc2liaWxpdHkgV0hFUkUgYSA9IDIgYW5kIGIgPSAxOworU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhLCBiOworIGEg fCBiIAorLS0tKy0tLQorIDEgfCAxCisgMiB8IDIKKyAzIHwgMQorIDQgfCAxCisgNSB8IDEKKyg1 IHJvd3MpCisKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X3Zpc2li aWxpdHkgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0K KyA1IHwgMTAwMDAKKyA0IHwgMTAwMDAKKyAzIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAxIHwgMTAw MDAKKyg1IHJvd3MpCisKK0RFTEVURSBGUk9NIGRpc3RpbmN0X3Zpc2liaWxpdHkgV0hFUkUgYSA9 IDIgYW5kIGIgPSAxMDAwMDsKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3Rp bmN0X3Zpc2liaWxpdHkgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisgYSB8ICAgYiAgIAorLS0t Ky0tLS0tLS0KKyA1IHwgMTAwMDAKKyA0IHwgMTAwMDAKKyAzIHwgMTAwMDAKKyAyIHwgIDk5OTkK KyAxIHwgMTAwMDAKKyg1IHJvd3MpCisKK0RST1AgVEFCTEUgZGlzdGluY3RfdmlzaWJpbGl0eTsK Ky0tIHRlc3QgcGFnZSBib3VuZGFyaWVzCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfYm91bmRhcmll cyBBUworICAgIFNFTEVDVCBhLCBiOjppbnQyIGIsIChiICUgMik6OmludDIgYyBGUk9NCisgICAg ICAgIGdlbmVyYXRlX3NlcmllcygxLCA1KSBhLAorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwz NjYpIGI7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYm91bmRhcmllcyAoYSwgYiwgYyk7CitB TkFMWVpFIGRpc3RpbmN0X2JvdW5kYXJpZXM7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg RElTVElOQ1QgT04gKGEpIGEsIGIsIGMgZnJvbSBkaXN0aW5jdF9ib3VuZGFyaWVzCitXSEVSRSBi ID49IDEgYW5kIGMgPSAwIE9SREVSIEJZIGEsIGI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIGRpc3RpbmN0X2JvdW5kYXJp ZXNfYV9iX2NfaWR4IG9uIGRpc3RpbmN0X2JvdW5kYXJpZXMKKyAgIFNraXAgc2NhbjogRGlzdGlu Y3Qgb25seQorICAgSW5kZXggQ29uZDogKChiID49IDEpIEFORCAoYyA9IDApKQorKDMgcm93cykK KworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiLCBjIGZyb20gZGlzdGluY3RfYm91bmRhcmll cworV0hFUkUgYiA+PSAxIGFuZCBjID0gMCBPUkRFUiBCWSBhLCBiOworIGEgfCBiIHwgYyAKKy0t LSstLS0rLS0tCisgMSB8IDIgfCAwCisgMiB8IDIgfCAwCisgMyB8IDIgfCAwCisgNCB8IDIgfCAw CisgNSB8IDIgfCAwCisoNSByb3dzKQorCitEUk9QIFRBQkxFIGRpc3RpbmN0X2JvdW5kYXJpZXM7 CistLSB0ZXN0IHR1cGxlIGtpbGxpbmcKKy0tIERFU0Mgb3JkZXJpbmcKK0NSRUFURSBUQUJMRSBk aXN0aW5jdF9raWxsZWQgQVMKKyAgICBTRUxFQ1QgYSwgYiwgYiAlIDIgQVMgYywgMTAgQVMgZAor ICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBhLAorICAgICAgICAgICAgIGdlbmVy YXRlX3NlcmllcygxLDEwMDApIGI7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3Rfa2lsbGVkIChh LCBiLCBjLCBkKTsKK0RFTEVURSBGUk9NIGRpc3RpbmN0X2tpbGxlZCB3aGVyZSBhID0gMzsKK0JF R0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorICAgIFNFTEVDVCBESVNUSU5D VCBPTiAoYSkgYSxiLGMsZAorICAgIEZST00gZGlzdGluY3Rfa2lsbGVkIE9SREVSIEJZIGEgREVT QywgYiBERVNDOworICAgIEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsKKyBhIHwgIGIgICB8IGMg fCBkICAKKy0tLSstLS0tLS0rLS0tKy0tLS0KKyA1IHwgMTAwMCB8IDAgfCAxMAorIDQgfCAxMDAw IHwgMCB8IDEwCisgMiB8IDEwMDAgfCAwIHwgMTAKKyAxIHwgMTAwMCB8IDAgfCAxMAorKDQgcm93 cykKKworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CisgYSB8ICBiICAgfCBjIHwgZCAg CistLS0rLS0tLS0tKy0tLSstLS0tCisgMSB8IDEwMDAgfCAwIHwgMTAKKyAyIHwgMTAwMCB8IDAg fCAxMAorIDQgfCAxMDAwIHwgMCB8IDEwCisgNSB8IDEwMDAgfCAwIHwgMTAKKyg0IHJvd3MpCisK K0NPTU1JVDsKK0RST1AgVEFCTEUgZGlzdGluY3Rfa2lsbGVkOworLS0gcmVndWxhciBvcmRlcmlu ZworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2tpbGxlZCBBUworICAgIFNFTEVDVCBhLCBiLCBiICUg MiBBUyBjLCAxMCBBUyBkCisgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGEsCisg ICAgICAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgYjsKK0NSRUFURSBJTkRFWCBPTiBk aXN0aW5jdF9raWxsZWQgKGEsIGIsIGMsIGQpOworREVMRVRFIEZST00gZGlzdGluY3Rfa2lsbGVk IHdoZXJlIGEgPSAzOworQkVHSU47CisgICAgREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCisg ICAgU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIsYyxkCisgICAgRlJPTSBkaXN0aW5jdF9raWxs ZWQgT1JERVIgQlkgYSwgYjsKKyAgICBGRVRDSCBGT1JXQVJEIEFMTCBGUk9NIGM7CisgYSB8IGIg fCBjIHwgZCAgCistLS0rLS0tKy0tLSstLS0tCisgMSB8IDEgfCAxIHwgMTAKKyAyIHwgMSB8IDEg fCAxMAorIDQgfCAxIHwgMSB8IDEwCisgNSB8IDEgfCAxIHwgMTAKKyg0IHJvd3MpCisKKyAgICBG RVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworIGEgfCBiIHwgYyB8IGQgIAorLS0tKy0tLSstLS0r LS0tLQorIDUgfCAxIHwgMSB8IDEwCisgNCB8IDEgfCAxIHwgMTAKKyAyIHwgMSB8IDEgfCAxMAor IDEgfCAxIHwgMSB8IDEwCisoNCByb3dzKQorCitDT01NSVQ7CitEUk9QIFRBQkxFIGRpc3RpbmN0 X2tpbGxlZDsKKy0tIHBhcnRpYWwgZGVsZXRlCitDUkVBVEUgVEFCTEUgZGlzdGluY3Rfa2lsbGVk IEFTCisgICAgU0VMRUNUIGEsIGIsIGIgJSAyIEFTIGMsIDEwIEFTIGQKKyAgICAgICAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgNSkgYSwKKyAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBiOworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2tpbGxlZCAoYSwgYiwgYywgZCk7CitE RUxFVEUgRlJPTSBkaXN0aW5jdF9raWxsZWQgV0hFUkUgYSA9IDMgQU5EIGIgPD0gOTk5OworQkVH SU47CisgICAgREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCisgICAgU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLGIsYyxkCisgICAgRlJPTSBkaXN0aW5jdF9raWxsZWQgT1JERVIgQlkgYSBERVND LCBiIERFU0M7CisgICAgRkVUQ0ggRk9SV0FSRCBBTEwgRlJPTSBjOworIGEgfCAgYiAgIHwgYyB8 IGQgIAorLS0tKy0tLS0tLSstLS0rLS0tLQorIDUgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAg fCAwIHwgMTAKKyAzIHwgMTAwMCB8IDAgfCAxMAorIDIgfCAxMDAwIHwgMCB8IDEwCisgMSB8IDEw MDAgfCAwIHwgMTAKKyg1IHJvd3MpCisKKyAgICBGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOwor IGEgfCAgYiAgIHwgYyB8IGQgIAorLS0tKy0tLS0tLSstLS0rLS0tLQorIDEgfCAxMDAwIHwgMCB8 IDEwCisgMiB8IDEwMDAgfCAwIHwgMTAKKyAzIHwgMTAwMCB8IDAgfCAxMAorIDQgfCAxMDAwIHwg MCB8IDEwCisgNSB8IDEwMDAgfCAwIHwgMTAKKyg1IHJvd3MpCisKK0NPTU1JVDsKK0RST1AgVEFC TEUgZGlzdGluY3Rfa2lsbGVkOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApp bmRleCAyMDg4ODU3NjE1Li5jZDU2NGIwMzE2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dApAQCAtMTEwLDYgKzExMCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20g cGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfaW5jcmVtZW50 YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAgICAgICB8IG9u CiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfaW5kZXhza2lw c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2lu ICAgICAgICAgICAgICAgfCBvbgpAQCAtMTIyLDcgKzEyMyw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf c2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMCByb3dz KQorKDIxIHJvd3MpCiAKIC0tIFRlc3QgdGhhdCB0aGUgcGdfdGltZXpvbmVfbmFtZXMgYW5kIHBn X3RpbWV6b25lX2FiYnJldnMgdmlld3MgYXJlCiAtLSBtb3JlLW9yLWxlc3Mgd29ya2luZy4gIFdl IGNhbid0IHRlc3QgdGhlaXIgY29udGVudHMgaW4gYW55IGdyZWF0IGRldGFpbApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKaW5kZXggMWJmZTU5YzI2Zi4uNzA4YWEyYTc0 NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsCkBAIC0xNzQsMyAr MTc0LDI1MSBAQCBTRUxFQ1QgMSBJUyBOT1QgRElTVElOQ1QgRlJPTSAyIGFzICJubyI7CiBTRUxF Q1QgMiBJUyBOT1QgRElTVElOQ1QgRlJPTSAyIGFzICJ5ZXMiOwogU0VMRUNUIDIgSVMgTk9UIERJ U1RJTkNUIEZST00gbnVsbCBhcyAibm8iOwogU0VMRUNUIG51bGwgSVMgTk9UIERJU1RJTkNUIEZS T00gbnVsbCBhcyAieWVzIjsKKworLS0gaW5kZXggb25seSBza2lwIHNjYW4KK0NSRUFURSBUQUJM RSBkaXN0aW5jdF9hIChhIGludCwgYiBpbnQsIGMgaW50KTsKK0lOU0VSVCBJTlRPIGRpc3RpbmN0 X2EgKAorICAgIFNFTEVDVCBmaXZlLCB0ZW50aG91cywgMTAgRlJPTQorICAgIGdlbmVyYXRlX3Nl cmllcygxLCA1KSBmaXZlLAorICAgIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgdGVudGhvdXMK Kyk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYSAoYSwgYik7CitBTkFMWVpFIGRpc3RpbmN0 X2E7CisKK1NFTEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYTsKK1NFTEVDVCBESVNUSU5D VCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBhID0gMTsKK1NFTEVDVCBESVNUSU5DVCBhIEZST00g ZGlzdGluY3RfYSBPUkRFUiBCWSBhIERFU0M7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYTsKKworLS0gdGVzdCBpbmRleCBza2lwIHNjYW4g d2l0aCBhIGNvbmRpdGlvbiBvbiBhIG5vbiB1bmlxdWUgZmllbGQKK1NFTEVDVCBESVNUSU5DVCBP TiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDI7CisKKy0tIHRlc3QgaW5kZXgg c2tpcCBzY2FuIGJhY2t3YXJkcworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlz dGluY3RfYSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKworLS0gY2hlY2sgY29sdW1zIG9yZGVy CitDUkVBVEUgSU5ERVggZGlzdGluY3RfYV9iX2Egb24gZGlzdGluY3RfYSAoYiwgYSk7CisKK1NF TEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKK1NFTEVDVCBESVNU SU5DVCBvbiAoYSwgYikgYSwgYiBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDI7CisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBi ID0gMjsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIG9uIChhLCBiKSBh LCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKworRFJPUCBJTkRFWCBkaXN0aW5jdF9h X2JfYTsKKworLS0gdGVzdCBvcHBvc2l0ZSBzY2FuL2luZGV4IGRpcmVjdGlvbnMgaW5zaWRlIGEg Y3Vyc29yCistLSBmb3J3YXJkL2JhY2t3YXJkCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VS U09SIEZPUgorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIgRlJPTSBkaXN0aW5jdF9hIE9SREVS IEJZIGEsIGI7CisKK0ZFVENIIEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKworRkVU Q0ggNiBGUk9NIGM7CitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKworRkVUQ0ggNiBGUk9NIGM7 CitGRVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKworRU5EOworCistLSBiYWNrd2FyZC9mb3J3YXJk CitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIERJU1RJTkNUIE9O IChhKSBhLGIgRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGEgREVTQywgYiBERVNDOworCitGRVRD SCBGUk9NIGM7CitGRVRDSCBCQUNLV0FSRCBGUk9NIGM7CisKK0ZFVENIIDYgRlJPTSBjOworRkVU Q0ggQkFDS1dBUkQgNiBGUk9NIGM7CisKK0ZFVENIIDYgRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQg NiBGUk9NIGM7CisKK0VORDsKKworLS0gdGVzdCBtaXNzaW5nIHZhbHVlcyBhbmQgc2tpcHBpbmcg ZnJvbSB0aGUgZW5kCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfYWJjKGEgaW50LCBiIGludCwgYyBp bnQpOworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2FiYyhhLCBiLCBjKTsKK0lOU0VSVCBJTlRP IGRpc3RpbmN0X2FiYworCVZBTFVFUyAoMSwgMSwgMSksCisJCSAgICgxLCAxLCAyKSwKKwkJICAg KDEsIDIsIDIpLAorCQkgICAoMSwgMiwgMyksCisJCSAgICgyLCAyLCAxKSwKKwkJICAgKDIsIDIs IDMpLAorCQkgICAoMywgMSwgMSksCisJCSAgICgzLCAxLCAyKSwKKwkJICAgKDMsIDIsIDIpLAor CQkgICAoMywgMiwgMyk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBP TiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDI7CisKK0JFR0lOOworREVD TEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjIEZS T00gZGlzdGluY3RfYWJjIFdIRVJFIGMgPSAyOworCitGRVRDSCBBTEwgRlJPTSBjOworRkVUQ0gg QkFDS1dBUkQgQUxMIEZST00gYzsKKworRU5EOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgRElTVElOQ1QgT04gKGEpIGEsYixjIEZST00gZGlzdGluY3RfYWJjIFdIRVJFIGMgPSAyCitP UkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKworQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNP UiBGT1IKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hF UkUgYyA9IDIKK09SREVSIEJZIGEgREVTQywgYiBERVNDOworCitGRVRDSCBBTEwgRlJPTSBjOwor RkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsKKworRU5EOworCitEUk9QIFRBQkxFIGRpc3RpbmN0 X2FiYzsKKworLS0gaW5kZXggc2tpcCBzY2FuCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIs IGMKK0ZST00gZGlzdGluY3RfYSBPUkRFUiBCWSBhOworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBh LCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDEgT1JERVIgQlkgYTsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiLCBjCitGUk9NIGRpc3Rp bmN0X2EgT1JERVIgQlkgYTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBP TiAoYSkgYSwgYiwgYworRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGEgPSAxIE9SREVSIEJZIGE7CisK Ky0tIGNoZWNrIGNvbHVtcyBvcmRlcgorU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9h IFdIRVJFIGIgPSAyIEFORCBjID0gMTA7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBE SVNUSU5DVCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMiBBTkQgYyA9IDEwOworCistLSBj aGVjayBwcm9qZWN0aW9uIGNhc2UKK1NFTEVDVCBESVNUSU5DVCBhLCBhIEZST00gZGlzdGluY3Rf YSBXSEVSRSBiID0gMjsKK1NFTEVDVCBESVNUSU5DVCBhLCAxIEZST00gZGlzdGluY3RfYSBXSEVS RSBiID0gMjsKKworLS0gdGVzdCBjdXJzb3IgZm9yd2FyZC9iYWNrd2FyZCBtb3ZlbWVudHMKK0JF R0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBESVNUSU5DVCBhIEZST00g ZGlzdGluY3RfYTsKKworRkVUQ0ggRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworCitG RVRDSCA2IEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitGRVRDSCA2IEZST00g YzsKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitFTkQ7CisKK0RST1AgVEFCTEUgZGlzdGlu Y3RfYTsKKworLS0gdGVzdCB0dXBsZXMgdmlzaWJpbGl0eQorQ1JFQVRFIFRBQkxFIGRpc3RpbmN0 X3Zpc2liaWxpdHkgKGEgaW50LCBiIGludCk7CitJTlNFUlQgSU5UTyBkaXN0aW5jdF92aXNpYmls aXR5IChzZWxlY3QgYSwgYiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGEsIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwMCkgYik7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfdmlzaWJpbGl0eSAo YSwgYik7CitBTkFMWVpFIGRpc3RpbmN0X3Zpc2liaWxpdHk7CisKK1NFTEVDVCBESVNUSU5DVCBP TiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X3Zpc2liaWxpdHkgT1JERVIgQlkgYSwgYjsKK0RFTEVU RSBGUk9NIGRpc3RpbmN0X3Zpc2liaWxpdHkgV0hFUkUgYSA9IDIgYW5kIGIgPSAxOworU0VMRUNU IERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBh LCBiOworCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmls aXR5IE9SREVSIEJZIGEgREVTQywgYiBERVNDOworREVMRVRFIEZST00gZGlzdGluY3RfdmlzaWJp bGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDEwMDAwOworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBh LCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKK0RS T1AgVEFCTEUgZGlzdGluY3RfdmlzaWJpbGl0eTsKKworLS0gdGVzdCBwYWdlIGJvdW5kYXJpZXMK K0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ib3VuZGFyaWVzIEFTCisgICAgU0VMRUNUIGEsIGI6Omlu dDIgYiwgKGIgJSAyKTo6aW50MiBjIEZST00KKyAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsIDUp IGEsCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDM2NikgYjsKKworQ1JFQVRFIElOREVYIE9O IGRpc3RpbmN0X2JvdW5kYXJpZXMgKGEsIGIsIGMpOworQU5BTFlaRSBkaXN0aW5jdF9ib3VuZGFy aWVzOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIs IGMgZnJvbSBkaXN0aW5jdF9ib3VuZGFyaWVzCitXSEVSRSBiID49IDEgYW5kIGMgPSAwIE9SREVS IEJZIGEsIGI7CisKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwgYyBmcm9tIGRpc3RpbmN0 X2JvdW5kYXJpZXMKK1dIRVJFIGIgPj0gMSBhbmQgYyA9IDAgT1JERVIgQlkgYSwgYjsKKworRFJP UCBUQUJMRSBkaXN0aW5jdF9ib3VuZGFyaWVzOworCistLSB0ZXN0IHR1cGxlIGtpbGxpbmcKKwor LS0gREVTQyBvcmRlcmluZworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2tpbGxlZCBBUworICAgIFNF TEVDVCBhLCBiLCBiICUgMiBBUyBjLCAxMCBBUyBkCisgICAgICAgIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUpIGEsCisgICAgICAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgYjsKKwor Q1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2tpbGxlZCAoYSwgYiwgYywgZCk7CisKK0RFTEVURSBG Uk9NIGRpc3RpbmN0X2tpbGxlZCB3aGVyZSBhID0gMzsKKworQkVHSU47CisgICAgREVDTEFSRSBj IFNDUk9MTCBDVVJTT1IgRk9SCisgICAgU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIsYyxkCisg ICAgRlJPTSBkaXN0aW5jdF9raWxsZWQgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisgICAgRkVU Q0ggRk9SV0FSRCBBTEwgRlJPTSBjOworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CitD T01NSVQ7CisKK0RST1AgVEFCTEUgZGlzdGluY3Rfa2lsbGVkOworCistLSByZWd1bGFyIG9yZGVy aW5nCitDUkVBVEUgVEFCTEUgZGlzdGluY3Rfa2lsbGVkIEFTCisgICAgU0VMRUNUIGEsIGIsIGIg JSAyIEFTIGMsIDEwIEFTIGQKKyAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgYSwK KyAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBiOworCitDUkVBVEUgSU5ERVgg T04gZGlzdGluY3Rfa2lsbGVkIChhLCBiLCBjLCBkKTsKKworREVMRVRFIEZST00gZGlzdGluY3Rf a2lsbGVkIHdoZXJlIGEgPSAzOworCitCRUdJTjsKKyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNP UiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQKKyAgICBGUk9NIGRpc3Rp bmN0X2tpbGxlZCBPUkRFUiBCWSBhLCBiOworICAgIEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsK KyAgICBGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworQ09NTUlUOworCitEUk9QIFRBQkxFIGRp c3RpbmN0X2tpbGxlZDsKKworLS0gcGFydGlhbCBkZWxldGUKK0NSRUFURSBUQUJMRSBkaXN0aW5j dF9raWxsZWQgQVMKKyAgICBTRUxFQ1QgYSwgYiwgYiAlIDIgQVMgYywgMTAgQVMgZAorICAgICAg ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBhLAorICAgICAgICAgICAgIGdlbmVyYXRlX3Nl cmllcygxLDEwMDApIGI7CisKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9raWxsZWQgKGEsIGIs IGMsIGQpOworCitERUxFVEUgRlJPTSBkaXN0aW5jdF9raWxsZWQgV0hFUkUgYSA9IDMgQU5EIGIg PD0gOTk5OworCitCRUdJTjsKKyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKKyAgICBT RUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQKKyAgICBGUk9NIGRpc3RpbmN0X2tpbGxlZCBP UkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyAgICBGRVRDSCBGT1JXQVJEIEFMTCBGUk9NIGM7Cisg ICAgRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsKK0NPTU1JVDsKKworRFJPUCBUQUJMRSBkaXN0 aW5jdF9raWxsZWQ7Ci0tIAoyLjMzLjEKCg== --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_ Content-Type: application/octet-stream; name="v3-0003-Support-skip-scan-for-non-distinct-scans.patch" Content-Description: v3-0003-Support-skip-scan-for-non-distinct-scans.patch Content-Disposition: attachment; filename="v3-0003-Support-skip-scan-for-non-distinct-scans.patch"; size=19299; creation-date="Thu, 13 Jan 2022 15:10:50 GMT"; modification-date="Thu, 13 Jan 2022 15:10:50 GMT" Content-Transfer-Encoding: base64 RnJvbSBkNDM2MGMwNDFiNjI1ZDMyYzFiMzdkOWQ5ZDI2ZTJlMDNiM2Q0YWQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaXMgdmFuIE5lZSA8ZmxvcmlzLnZhbm5lZUBnbWFpbC5j b20+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjAgMTA6Mjc6NDcgKzAxMDAKU3ViamVjdDogW1BBVENI IDUvNV0gU3VwcG9ydCBza2lwIHNjYW4gZm9yIG5vbi1kaXN0aW5jdCBzY2FucwoKQWRkcyBwbGFu bmVyIHN1cHBvcnQgdG8gY2hvb3NlIGEgc2tpcCBzY2FuIGZvciByZWd1bGFyCm5vbi1kaXN0aW5j dCBxdWVyaWVzIGxpa2U6ClNFTEVDVCAqIEZST00gdDEgV0hFUkUgYj0xICh3aXRoIGluZGV4IG9u IChhLGIpKQotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgfCAxODEg KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgfCAxNTMgKysr KysrKysrKysrKysrKysrKystLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAg ICB8ICAgMyArLQogNSBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGgu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggN2M4ODg5YTM1 MC4uNTUzOGUwMWMyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0x OTIsNiArMTkyLDE3IEBAIHN0YXRpYyBFeHByICptYXRjaF9jbGF1c2VfdG9fb3JkZXJpbmdfb3Ao SW5kZXhPcHRJbmZvICppbmRleCwKIHN0YXRpYyBib29sIGVjX21lbWJlcl9tYXRjaGVzX2luZGV4 Y29sKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgICBFcXVp dmFsZW5jZUNsYXNzICplYywgRXF1aXZhbGVuY2VNZW1iZXIgKmVtLAogCQkJCQkJCQkJICAgdm9p ZCAqYXJnKTsKK3N0YXRpYyBMaXN0KiBhZGRfcG9zc2libGVfaW5kZXhfc2tpcF9wYXRocyhMaXN0 KiByZXN1bHQsCisJCQkJCQkJCQkJICBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgIElu ZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkJCQkJICBMaXN0ICppbmRleGNsYXVzZXMsCisJCQkJ CQkJCQkJICBMaXN0ICppbmRleG9yZGVyYnlzLAorCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhvcmRl cmJ5Y29scywKKwkJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLAorCQkJCQkJCQkJCSAgU2NhbkRp cmVjdGlvbiBpbmRleHNjYW5kaXIsCisJCQkJCQkJCQkJICBib29sIGluZGV4b25seSwKKwkJCQkJ CQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRlciwKKwkJCQkJCQkJCQkgIGRvdWJsZSBsb29wX2Nv dW50KTsKIAogCiAvKgpAQCAtODIwLDYgKzgzMSwxMzYgQEAgZ2V0X2luZGV4X3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJfQogfQogCisvKgorICogRmluZCBhdmFp bGFibGUgaW5kZXggc2tpcCBwYXRocyBhbmQgYWRkIHRoZW0gdG8gdGhlIHBhdGggbGlzdAorICov CitzdGF0aWMgTGlzdCogYWRkX3Bvc3NpYmxlX2luZGV4X3NraXBfcGF0aHMoTGlzdCogcmVzdWx0 LAorCQkJCQkJCQkJCSAgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICBJbmRleE9wdElu Zm8gKmluZGV4LAorCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhjbGF1c2VzLAorCQkJCQkJCQkJCSAg TGlzdCAqaW5kZXhvcmRlcmJ5cywKKwkJCQkJCQkJCQkgIExpc3QgKmluZGV4b3JkZXJieWNvbHMs CisJCQkJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywKKwkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24g aW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCSAgYm9vbCBpbmRleG9ubHksCisJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCisJCQkJCQkJCQkJICBkb3VibGUgbG9vcF9jb3VudCkKK3sK KwlpbnQJCQlpbmRleGNvbDsKKwlib29sCQllcVF1YWxIZXJlOworCWJvb2wJCWVxUXVhbFByZXY7 CisJYm9vbAkJZXFTb0ZhcjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogV2UgbmVlZCB0 byBmaW5kIHBvc3NpYmxlIHByZWZpeGVzIHRvIHVzZSBmb3IgdGhlIHNraXAgc2NhbgorCSAqIEFu eSB1c2VmdWwgcHJlZml4IGlzIG9uZSBqdXN0IGJlZm9yZSBhbiBpbmRleCBjbGF1c2UsIHVubGVz cworCSAqIGFsbCBjbGF1c2VzIHNvIGZhciBoYXZlIGJlZW4gZXF1YWwuCisJICogRm9yIGV4YW1w bGUsIG9uIGFuIGluZGV4IChhLGIsYyksIHRoZSBxdWFsIGI9MSB3b3VsZAorCSAqIG1lYW4gdGhh dCBhbiBpbnRlcmVzdGluZyBza2lwIHByZWZpeCBjb3VsZCBiZSAxLgorCSAqIEZvciBxdWFsIGE9 MSBBTkQgYj0xLCBpdCBpcyBub3QgaW50ZXJlc3RpbmcgdG8gc2tpcCB3aXRoCisJICogcHJlZml4 IDEsIGJlY2F1c2UgdGhlIHZhbHVlIG9mIGEgaXMgZml4ZWQgYWxyZWFkeS4KKwkgKi8KKwlpbmRl eGNvbCA9IDA7CisJZXFRdWFsSGVyZSA9IGZhbHNlOworCWVxUXVhbFByZXYgPSBmYWxzZTsKKwll cVNvRmFyID0gdHJ1ZTsKKwlmb3JlYWNoKGxjLCBpbmRleGNsYXVzZXMpCisJeworCQlJbmRleENs YXVzZSAqaWNsYXVzZSA9IGxmaXJzdF9ub2RlKEluZGV4Q2xhdXNlLCBsYyk7CisJCUxpc3RDZWxs ICAgKmxjMjsKKworCQlpZiAoaW5kZXhjb2wgIT0gaWNsYXVzZS0+aW5kZXhjb2wpCisJCXsKKwkJ CWlmICghZXFRdWFsSGVyZSB8fCBpbmRleGNvbCAhPSBpY2xhdXNlLT5pbmRleGNvbCAtIDEpCisJ CQkJZXFTb0ZhciA9IGZhbHNlOworCisJCQkvKiBCZWdpbm5pbmcgb2YgYSBuZXcgY29sdW1uJ3Mg cXVhbHMgKi8KKwkJCWlmICghZXFRdWFsUHJldiAmJiAhZXFTb0ZhcikKKwkJCXsKKwkJCQkvKiBX ZSBoYXZlIGEgcXVhbCBvbiBjdXJyZW50IGNvbHVtbiwKKwkJCQkgKiB0aGVyZSBpcyBubyBlcXVh bGl0eSBxdWFsIG9uIHRoZSBwcmV2aW91cyBjb2x1bW4sCisJCQkJICogbm90IGFsbCBvZiB0aGUg cHJldmlvdXMgcXVhbHMgYXJlIGVxdWFsaXR5IHNvIGZhcgorCQkJCSAqIChsYXN0IG9uZSBpcyBz cGVjaWFsIGNhc2UgZm9yIHRoZSBmaXJzdCBjb2x1bW4gaW4gdGhlIGluZGV4KS4KKwkJCQkgKiBP cHRpbWFsIGNvbmRpdGlvbnMgdG8gdHJ5IGFuIGluZGV4IHNraXAgcGF0aC4KKwkJCQkgKi8KKwkJ CQlJbmRleFBhdGggKmlwYXRoID0gY3JlYXRlX2luZGV4X3BhdGgocm9vdCwgaW5kZXgsCisJCQkJ CQkJCQkJICBpbmRleGNsYXVzZXMsCisJCQkJCQkJCQkJICBpbmRleG9yZGVyYnlzLAorCQkJCQkJ CQkJCSAgaW5kZXhvcmRlcmJ5Y29scywKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLAorCQkJCQkJCQkJ CSAgaW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCSAgaW5kZXhvbmx5LAorCQkJCQkJCQkJCSAgcmVx dWlyZWRfb3V0ZXIsCisJCQkJCQkJCQkJICBsb29wX2NvdW50LAorCQkJCQkJCQkJCSAgZmFsc2Us CisJCQkJCQkJCQkJICBpY2xhdXNlLT5pbmRleGNvbCk7CisJCQkJcmVzdWx0ID0gbGFwcGVuZChy ZXN1bHQsIGlwYXRoKTsKKwkJCX0KKworCQkJZXFRdWFsUHJldiA9IGVxUXVhbEhlcmU7CisJCQll cVF1YWxIZXJlID0gZmFsc2U7CisJCQlpbmRleGNvbCsrOworCQkJLyogaWYgdGhlIGNsYXVzZSBp cyBub3QgZm9yIHRoaXMgaW5kZXggY29sLCBpbmNyZW1lbnQgdW50aWwgaXQgaXMgKi8KKwkJCXdo aWxlIChpbmRleGNvbCAhPSBpY2xhdXNlLT5pbmRleGNvbCkKKwkJCXsKKwkJCQllcVF1YWxQcmV2 ID0gZmFsc2U7CisJCQkJZXFTb0ZhciA9IGZhbHNlOworCQkJCWluZGV4Y29sKys7CisJCQl9CisJ CX0KKworCQkvKiBFeGFtaW5lIGVhY2ggaW5kZXhxdWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlu ZGV4IGNsYXVzZSAqLworCQlmb3JlYWNoKGxjMiwgaWNsYXVzZS0+aW5kZXhxdWFscykKKwkJewor CQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMyKTsK KwkJCUV4cHIJICAgKmNsYXVzZSA9IHJpbmZvLT5jbGF1c2U7CisJCQlPaWQJCQljbGF1c2Vfb3Ag PSBJbnZhbGlkT2lkOworCQkJaW50CQkJb3Bfc3RyYXRlZ3k7CisKKwkJCWlmIChJc0EoY2xhdXNl LCBPcEV4cHIpKQorCQkJeworCQkJCU9wRXhwcgkgICAqb3AgPSAoT3BFeHByICopIGNsYXVzZTsK KwkJCQljbGF1c2Vfb3AgPSBvcC0+b3BubzsKKwkJCX0KKwkJCWVsc2UgaWYgKElzQShjbGF1c2Us IFJvd0NvbXBhcmVFeHByKSkKKwkJCXsKKwkJCQlSb3dDb21wYXJlRXhwciAqcmMgPSAoUm93Q29t cGFyZUV4cHIgKikgY2xhdXNlOworCQkJCWNsYXVzZV9vcCA9IGxpbml0aWFsX29pZChyYy0+b3Bu b3MpOworCQkJfQorCQkJZWxzZSBpZiAoSXNBKGNsYXVzZSwgU2NhbGFyQXJyYXlPcEV4cHIpKQor CQkJeworCQkJCVNjYWxhckFycmF5T3BFeHByICpzYW9wID0gKFNjYWxhckFycmF5T3BFeHByICop IGNsYXVzZTsKKwkJCQljbGF1c2Vfb3AgPSBzYW9wLT5vcG5vOworCQkJfQorCQkJZWxzZSBpZiAo SXNBKGNsYXVzZSwgTnVsbFRlc3QpKQorCQkJeworCQkJCU51bGxUZXN0ICAgKm50ID0gKE51bGxU ZXN0ICopIGNsYXVzZTsKKworCQkJCWlmIChudC0+bnVsbHRlc3R0eXBlID09IElTX05VTEwpCisJ CQkJeworCQkJCQkvKiBJUyBOVUxMIGlzIGxpa2UgPSBmb3Igc2VsZWN0aXZpdHkgcHVycG9zZXMg Ki8KKwkJCQkJZXFRdWFsSGVyZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBpbmRleHF1YWwgdHlwZTogJWQiLAorCQkJCQkgKGludCkg bm9kZVRhZyhjbGF1c2UpKTsKKworCQkJLyogY2hlY2sgZm9yIGVxdWFsaXR5IG9wZXJhdG9yICov CisJCQlpZiAoT2lkSXNWYWxpZChjbGF1c2Vfb3ApKQorCQkJeworCQkJCW9wX3N0cmF0ZWd5ID0g Z2V0X29wX29wZmFtaWx5X3N0cmF0ZWd5KGNsYXVzZV9vcCwKKwkJCQkJCQkJCQkJCQkgICBpbmRl eC0+b3BmYW1pbHlbaW5kZXhjb2xdKTsKKwkJCQlBc3NlcnQob3Bfc3RyYXRlZ3kgIT0gMCk7CS8q IG5vdCBhIG1lbWJlciBvZiBvcGZhbWlseT8/ICovCisJCQkJaWYgKG9wX3N0cmF0ZWd5ID09IEJU RXF1YWxTdHJhdGVneU51bWJlcikKKwkJCQkJZXFRdWFsSGVyZSA9IHRydWU7CisJCQl9CisJCX0K Kwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIGJ1aWxkX2luZGV4X3BhdGhzCiAgKgkg IEdpdmVuIGFuIGluZGV4IGFuZCBhIHNldCBvZiBpbmRleCBjbGF1c2VzIGZvciBpdCwgY29uc3Ry dWN0IHplcm8KQEAgLTEwNTUsOSArMTE5NiwyNSBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwK IAkJCQkJCQkJICBvdXRlcl9yZWxpZHMsCiAJCQkJCQkJCSAgbG9vcF9jb3VudCwKLQkJCQkJCQkJ ICBmYWxzZSk7CisJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCSAgMCk7CiAJCXJlc3VsdCA9IGxh cHBlbmQocmVzdWx0LCBpcGF0aCk7CiAKKwkJaWYgKGNhbl9za2lwKQorCQl7CisJCQlyZXN1bHQg PSBhZGRfcG9zc2libGVfaW5kZXhfc2tpcF9wYXRocyhyZXN1bHQsIHJvb3QsIGluZGV4LAorCQkJ CQkJCQkJCQkJICAgaW5kZXhfY2xhdXNlcywKKwkJCQkJCQkJCQkJCSAgIG9yZGVyYnljbGF1c2Vz LAorCQkJCQkJCQkJCQkJICAgb3JkZXJieWNsYXVzZWNvbHMsCisJCQkJCQkJCQkJCQkgICB1c2Vm dWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkgICBpbmRleF9pc19vcmRlcmVkID8KKwkJCQkJCQkJ CQkJCSAgIEZvcndhcmRTY2FuRGlyZWN0aW9uIDoKKwkJCQkJCQkJCQkJCSAgIE5vTW92ZW1lbnRT Y2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICAgaW5kZXhfb25seV9zY2FuLAorCQkJCQkJCQkJ CQkJICAgb3V0ZXJfcmVsaWRzLAorCQkJCQkJCQkJCQkJICAgbG9vcF9jb3VudCk7CisJCX0KKwog CQkvKiBDb25zaWRlciBpbmRleCBza2lwIHNjYW4gYXMgd2VsbCAqLwogCQlpZiAocm9vdC0+cXVl cnlfdW5pcXVla2V5cyAhPSBOVUxMICYmIGNhbl9za2lwKQogCQl7CkBAIC0xMTA0LDcgKzEyNjEs OCBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQkJICBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkgIG91dGVyX3JlbGlkcywK IAkJCQkJCQkJCSAgbG9vcF9jb3VudCwKLQkJCQkJCQkJCSAgdHJ1ZSk7CisJCQkJCQkJCQkgIHRy dWUsCisJCQkJCQkJCQkgIDApOwogCiAJCQkvKgogCQkJICogaWYsIGFmdGVyIGNvc3RpbmcgdGhl IHBhdGgsIHdlIGZpbmQgdGhhdCBpdCdzIG5vdCB3b3J0aCB1c2luZwpAQCAtMTEzNyw5ICsxMjk1 LDIzIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCQkJCSAgb3V0ZXJfcmVsaWRz LAogCQkJCQkJCQkJICBsb29wX2NvdW50LAotCQkJCQkJCQkJICBmYWxzZSk7CisJCQkJCQkJCQkg IGZhbHNlLAorCQkJCQkJCQkJICAwKTsKIAkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpcGF0 aCk7CiAKKwkJCWlmIChjYW5fc2tpcCkKKwkJCXsKKwkJCQlyZXN1bHQgPSBhZGRfcG9zc2libGVf aW5kZXhfc2tpcF9wYXRocyhyZXN1bHQsIHJvb3QsIGluZGV4LAorCQkJCQkJCQkJCQkJCSAgIGlu ZGV4X2NsYXVzZXMsCisJCQkJCQkJCQkJCQkJICAgTklMLAorCQkJCQkJCQkJCQkJCSAgIE5JTCwK KwkJCQkJCQkJCQkJCQkgICB1c2VmdWxfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJICAgQmFja3dh cmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJ CQkJCQkJCQkgICBvdXRlcl9yZWxpZHMsCisJCQkJCQkJCQkJCQkJICAgbG9vcF9jb3VudCk7CisJ CQl9CisKIAkJCS8qIENvbnNpZGVyIGluZGV4IHNraXAgc2NhbiBhcyB3ZWxsICovCiAJCQlpZiAo cm9vdC0+cXVlcnlfdW5pcXVla2V5cyAhPSBOVUxMICYmIGNhbl9za2lwKQogCQkJewpAQCAtMTE4 MSw3ICsxMzUzLDggQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkJCQkgIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCQkJCQkgIG91 dGVyX3JlbGlkcywKIAkJCQkJCQkJCQkgIGxvb3BfY291bnQsCi0JCQkJCQkJCQkJICB0cnVlKTsK KwkJCQkJCQkJCQkgIHRydWUsCisJCQkJCQkJCQkJICAwKTsKIAogCQkJCS8qCiAJCQkJICogaWYs IGFmdGVyIGNvc3RpbmcgdGhlIHBhdGgsIHdlIGZpbmQgdGhhdCBpdCdzIG5vdCB3b3J0aApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDZhN2FjNDlkNmUuLjA1YjIwYjJhZjMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTYwMTMsNyArNjAxMyw3IEBA IHBsYW5fY2x1c3Rlcl91c2Vfc29ydChPaWQgdGFibGVPaWQsIE9pZCBpbmRleE9pZCkKIAlpbmRl eFNjYW5QYXRoID0gY3JlYXRlX2luZGV4X3BhdGgocm9vdCwgaW5kZXhJbmZvLAogCQkJCQkJCQkJ ICBOSUwsIE5JTCwgTklMLCBOSUwsCiAJCQkJCQkJCQkgIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBm YWxzZSwKLQkJCQkJCQkJCSAgTlVMTCwgMS4wLCBmYWxzZSk7CisJCQkJCQkJCQkgIE5VTEwsIDEu MCwgZmFsc2UsIDApOwogCiAJcmV0dXJuIChzZXFTY2FuQW5kU29ydFBhdGgudG90YWxfY29zdCA8 IGluZGV4U2NhblBhdGgtPnBhdGgudG90YWxfY29zdCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYwppbmRleCBhYzMyMWJmMzFkLi5hZmYwNTIxMDE1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTEwNTEsNyArMTA1MSw4IEBAIGNyZWF0ZV9pbmRl eF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgYm9vbCBpbmRleG9ubHksCiAJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJICBkb3VibGUgbG9vcF9jb3VudCwKLQkJCQkgIGJv b2wgcGFydGlhbF9wYXRoKQorCQkJCSAgYm9vbCBwYXJ0aWFsX3BhdGgsCisJCQkJICBpbnQgc2tp cF9wcmVmaXgpCiB7CiAJSW5kZXhQYXRoICAqcGF0aG5vZGUgPSBtYWtlTm9kZShJbmRleFBhdGgp OwogCVJlbE9wdEluZm8gKnJlbCA9IGluZGV4LT5yZWw7CkBAIC0xMDcxLDYgKzEwNzIsNyBAQCBj cmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+aW5kZXhvcmRl cmJ5cyA9IGluZGV4b3JkZXJieXM7CiAJcGF0aG5vZGUtPmluZGV4b3JkZXJieWNvbHMgPSBpbmRl eG9yZGVyYnljb2xzOwogCXBhdGhub2RlLT5pbmRleHNjYW5kaXIgPSBpbmRleHNjYW5kaXI7CisJ cGF0aG5vZGUtPmluZGV4c2tpcHByZWZpeCA9IHNraXBfcHJlZml4OwogCiAJY29zdF9pbmRleChw YXRobm9kZSwgcm9vdCwgbG9vcF9jb3VudCwgcGFydGlhbF9wYXRoKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwppbmRleCBhZmY3NDhkNjdiLi45N2RiNzRhZGY5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMjEwLDcgKzIxMCw5IEBAIHN0YXRpYyBib29sIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJCQkJCQkgTWVtb3J5Q29udGV4 dCBvdXRlcmNvbnRleHQsCiAJCQkJCQkJCQkJIERhdHVtICplbmRwb2ludERhdHVtKTsKIHN0YXRp YyBSZWxPcHRJbmZvICpmaW5kX2pvaW5faW5wdXRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKTsKLQorc3RhdGljIGRvdWJsZSBlc3RpbWF0ZV9udW1fZ3JvdXBzX2ludGVybmFs KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLAorCQkJCQkJCQkJZG91YmxlIGlu cHV0X3Jvd3MsIGRvdWJsZSByZWxfaW5wdXRfcm93cywKKwkJCQkJCQkJCUxpc3QgKipwZ3NldCwg RXN0aW1hdGlvbkluZm8gKmVzdGluZm8pOwogCiAvKgogICoJCWVxc2VsCQkJLSBTZWxlY3Rpdml0 eSBvZiAiPSIgZm9yIGFueSBkYXRhIHR5cGVzLgpAQCAtMzM2Nyw2ICszMzY5LDE5IEBAIGFkZF91 bmlxdWVfZ3JvdXBfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywKIGRvdWJs ZQogZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBy cywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkJCUxpc3QgKipwZ3NldCwgRXN0aW1hdGlvbkluZm8g KmVzdGluZm8pCit7CisJcmV0dXJuIGVzdGltYXRlX251bV9ncm91cHNfaW50ZXJuYWwocm9vdCwg Z3JvdXBFeHBycywgaW5wdXRfcm93cywgLTEsIHBnc2V0LCBlc3RpbmZvKTsKK30KKworLyoKKyAq IFNhbWUgYXMgZXN0aW1hdGVfbnVtX2dyb3VwcywgYnV0IHdpdGggYW4gZXh0cmEgYXJndW1lbnQg dG8gY29udHJvbAorICogdGhlIGVzdGltYXRpb24gdXNlZCBmb3IgdGhlIGlucHV0IHJvd3Mgb2Yg dGhlIHJlbGF0aW9uLiBJZgorICogcmVsX2lucHV0X3Jvd3MgPCAwLCBpdCB1c2VzIHRoZSB0aGUg b3JpZ2luYWwgcGxhbm5lciBlc3RpbWF0aW9uIGZvciB0aGUKKyAqIGluZGl2aWR1YWwgcmVscywg ZWxzZSBpZiB1c2VzIHRoZSBlc3RpbWF0aW9uIGFzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4K KyAqLworc3RhdGljIGRvdWJsZQorZXN0aW1hdGVfbnVtX2dyb3Vwc19pbnRlcm5hbChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsIGRvdWJsZSBy ZWxfaW5wdXRfcm93cywKKwkJCQkJTGlzdCAqKnBnc2V0LCBFc3RpbWF0aW9uSW5mbyAqZXN0aW5m bykKIHsKIAlMaXN0CSAgICp2YXJpbmZvcyA9IE5JTDsKIAlkb3VibGUJCXNyZl9tdWx0aXBsaWVy ID0gMS4wOwpAQCAtMzUzMyw2ICszNTQ4LDEyIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCQlpbnQJ CQlyZWx2YXJjb3VudCA9IDA7CiAJCUxpc3QJICAgKm5ld3ZhcmluZm9zID0gTklMOwogCQlMaXN0 CSAgICpyZWx2YXJpbmZvcyA9IE5JTDsKKwkJZG91YmxlIHRoaXNfcmVsX2lucHV0X3Jvd3M7CisK KwkJaWYgKHJlbF9pbnB1dF9yb3dzIDwgMC4wKQorCQkJdGhpc19yZWxfaW5wdXRfcm93cyA9IHJl bC0+cm93czsKKwkJZWxzZQorCQkJdGhpc19yZWxfaW5wdXRfcm93cyA9IHJlbF9pbnB1dF9yb3dz OwogCiAJCS8qCiAJCSAqIFNwbGl0IHRoZSBsaXN0IG9mIHZhcmluZm9zIGluIHR3byAtIG9uZSBm b3IgdGhlIGN1cnJlbnQgcmVsLCBvbmUKQEAgLTM2MzgsNyArMzY1OSw3IEBAIGVzdGltYXRlX251 bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1 dF9yb3dzLAogCQkJICogZ3VhcmRpbmcgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIHdoZW4gcmVs ZGlzdGluY3QgaXMgemVyby4KIAkJCSAqIEFsc28gc2tpcCB0aGlzIGlmIHdlIGtub3cgdGhhdCB3 ZSBhcmUgcmV0dXJuaW5nIGFsbCByb3dzLgogCQkJICovCi0JCQlpZiAocmVsZGlzdGluY3QgPiAw ICYmIHJlbC0+cm93cyA8IHJlbC0+dHVwbGVzKQorCQkJaWYgKHJlbGRpc3RpbmN0ID4gMCAmJiB0 aGlzX3JlbF9pbnB1dF9yb3dzIDwgcmVsLT50dXBsZXMpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBH aXZlbiBhIHRhYmxlIGNvbnRhaW5pbmcgTiByb3dzIHdpdGggbiBkaXN0aW5jdCB2YWx1ZXMgaW4g YQpAQCAtMzY3NSw3ICszNjk2LDcgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkJICogd29ya3Mg d2VsbCBldmVuIHdoZW4gbiBpcyBzbWFsbC4KIAkJCQkgKi8KIAkJCQlyZWxkaXN0aW5jdCAqPQot CQkJCQkoMSAtIHBvdygocmVsLT50dXBsZXMgLSByZWwtPnJvd3MpIC8gcmVsLT50dXBsZXMsCisJ CQkJCSgxIC0gcG93KChyZWwtPnR1cGxlcyAtIHRoaXNfcmVsX2lucHV0X3Jvd3MpIC8gcmVsLT50 dXBsZXMsCiAJCQkJCQkJIHJlbC0+dHVwbGVzIC8gcmVsZGlzdGluY3QpKTsKIAkJCX0KIAkJCXJl bGRpc3RpbmN0ID0gY2xhbXBfcm93X2VzdChyZWxkaXN0aW5jdCk7CkBAIC02NjIxLDggKzY2NDIs MTAgQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwg ZG91YmxlIGxvb3BfY291bnQsCiAJZG91YmxlCQludW1JbmRleFR1cGxlczsKIAlDb3N0CQlkZXNj ZW50Q29zdDsKIAlMaXN0CSAgICppbmRleEJvdW5kUXVhbHM7CisJTGlzdAkgICAqcHJlZml4Qm91 bmRRdWFsczsKIAlpbnQJCQlpbmRleGNvbDsKIAlib29sCQllcVF1YWxIZXJlOworCWJvb2wJCXN0 aWxsRXE7CiAJYm9vbAkJZm91bmRfc2FvcDsKIAlib29sCQlmb3VuZF9pc19udWxsX29wOwogCWRv dWJsZQkJbnVtX3NhX3NjYW5zOwpAQCAtNjY0Niw5ICs2NjY5LDExIEBAIGJ0Y29zdGVzdGltYXRl KFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAog CSAqIGNvbnNpZGVyZWQgdG8gYWN0IHRoZSBzYW1lIGFzIGl0IG5vcm1hbGx5IGRvZXMuCiAJICov CiAJaW5kZXhCb3VuZFF1YWxzID0gTklMOworCXByZWZpeEJvdW5kUXVhbHMgPSBOSUw7CiAJaW5k ZXhjb2wgPSAwOwogCWVxUXVhbEhlcmUgPSBmYWxzZTsKIAlmb3VuZF9zYW9wID0gZmFsc2U7CisJ c3RpbGxFcSA9IHRydWU7CiAJZm91bmRfaXNfbnVsbF9vcCA9IGZhbHNlOwogCW51bV9zYV9zY2Fu cyA9IDE7CiAJZm9yZWFjaChsYywgcGF0aC0+aW5kZXhjbGF1c2VzKQpAQCAtNjY2MCwxMSArNjY4 NSwxOCBAQCBidGNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRo LCBkb3VibGUgbG9vcF9jb3VudCwKIAkJewogCQkJLyogQmVnaW5uaW5nIG9mIGEgbmV3IGNvbHVt bidzIHF1YWxzICovCiAJCQlpZiAoIWVxUXVhbEhlcmUpCi0JCQkJYnJlYWs7CQkJLyogZG9uZSBp ZiBubyAnPScgcXVhbCBmb3IgaW5kZXhjb2wgKi8KKwkJCXsKKwkJCQlzdGlsbEVxID0gZmFsc2U7 CisJCQkJLyogZG9uZSBpZiBubyAnPScgcXVhbCBmb3IgaW5kZXhjb2wgYW5kIHdlJ3JlIHBhc3Qg dGhlIHNraXAgcHJlZml4ICovCisJCQkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA8PSBpbmRl eGNvbCkKKwkJCQkJYnJlYWs7CisJCQl9CiAJCQllcVF1YWxIZXJlID0gZmFsc2U7CiAJCQlpbmRl eGNvbCsrOworCQkJd2hpbGUgKGluZGV4Y29sICE9IGljbGF1c2UtPmluZGV4Y29sICYmIHBhdGgt PmluZGV4c2tpcHByZWZpeCA+IGluZGV4Y29sKQorCQkJCWluZGV4Y29sKys7CiAJCQlpZiAoaW5k ZXhjb2wgIT0gaWNsYXVzZS0+aW5kZXhjb2wpCi0JCQkJYnJlYWs7CQkJLyogbm8gcXVhbHMgYXQg YWxsIGZvciBpbmRleGNvbCAqLworCQkJCWJyZWFrOyAvKiBubyBxdWFscyBhdCBhbGwgZm9yIGlu ZGV4Y29sICovCiAJCX0KIAogCQkvKiBFeGFtaW5lIGVhY2ggaW5kZXhxdWFsIGFzc29jaWF0ZWQg d2l0aCB0aGlzIGluZGV4IGNsYXVzZSAqLwpAQCAtNjY5Niw3ICs2NzI4LDcgQEAgYnRjb3N0ZXN0 aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291 bnQsCiAJCQkJY2xhdXNlX29wID0gc2FvcC0+b3BubzsKIAkJCQlmb3VuZF9zYW9wID0gdHJ1ZTsK IAkJCQkvKiBjb3VudCBudW1iZXIgb2YgU0Egc2NhbnMgaW5kdWNlZCBieSBpbmRleEJvdW5kUXVh bHMgb25seSAqLwotCQkJCWlmIChhbGVuZ3RoID4gMSkKKwkJCQlpZiAoYWxlbmd0aCA+IDEgJiYg c3RpbGxFcSkKIAkJCQkJbnVtX3NhX3NjYW5zICo9IGFsZW5ndGg7CiAJCQl9CiAJCQllbHNlIGlm IChJc0EoY2xhdXNlLCBOdWxsVGVzdCkpCkBAIC02NzI0LDcgKzY3NTYsMTQgQEAgYnRjb3N0ZXN0 aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291 bnQsCiAJCQkJCWVxUXVhbEhlcmUgPSB0cnVlOwogCQkJfQogCi0JCQlpbmRleEJvdW5kUXVhbHMg PSBsYXBwZW5kKGluZGV4Qm91bmRRdWFscywgcmluZm8pOworCQkJLyogd2Uga2VlcCB0d28gbGlz dHMgaGVyZSwgb25lIHdpdGggYWxsIHF1YWxzIHVwIHVudGlsIHRoZSBwcmVmaXgKKwkJCSAqIGFu ZCBvbmUgd2l0aCBvbmx5IHRoZSBxdWFscyB1bnRpbCB0aGUgZmlyc3QgaW5lcXVhbGl0eS4KKwkJ CSAqIHdlIG5lZWQgdGhlIGxpc3Qgd2l0aCBwcmVmaXhlcyBsYXRlcgorCQkJICovCisJCQlpZiAo c3RpbGxFcSkKKwkJCQlpbmRleEJvdW5kUXVhbHMgPSBsYXBwZW5kKGluZGV4Qm91bmRRdWFscywg cmluZm8pOworCQkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJCQkJcHJlZml4Qm91 bmRRdWFscyA9IGxhcHBlbmQocHJlZml4Qm91bmRRdWFscywgcmluZm8pOwogCQl9CiAJfQogCkBA IC02NzUwLDcgKzY3ODksMTAgQEAgYnRjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJCSAqIGluZGV4LWJvdW5kIHF1YWxz IHRvIHByb2R1Y2UgYSBtb3JlIGFjY3VyYXRlIGlkZWEgb2YgdGhlIG51bWJlciBvZgogCQkgKiBy b3dzIGNvdmVyZWQgYnkgdGhlIGJvdW5kIGNvbmRpdGlvbnMuCiAJCSAqLwotCQlzZWxlY3Rpdml0 eVF1YWxzID0gYWRkX3ByZWRpY2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgaW5kZXhCb3VuZFF1 YWxzKTsKKwkJaWYgKHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJCQlzZWxlY3Rpdml0eVF1 YWxzID0gYWRkX3ByZWRpY2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgcHJlZml4Qm91bmRRdWFs cyk7CisJCWVsc2UKKwkJCXNlbGVjdGl2aXR5UXVhbHMgPSBhZGRfcHJlZGljYXRlX3RvX2luZGV4 X3F1YWxzKGluZGV4LCBpbmRleEJvdW5kUXVhbHMpOwogCiAJCWJ0cmVlU2VsZWN0aXZpdHkgPSBj bGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIHNlbGVjdGl2aXR5UXVhbHMsCiAJCQkJCQkJCQkJ CQkgIGluZGV4LT5yZWwtPnJlbGlkLApAQCAtNjc2MCw3ICs2ODAyLDcgQEAgYnRjb3N0ZXN0aW1h dGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAKIAkJLyoKIAkJICogQXMgaW4gZ2VuZXJpY2Nvc3Rlc3RpbWF0ZSgpLCB3ZSBoYXZlIHRvIGFk anVzdCBmb3IgYW55Ci0JCSAqIFNjYWxhckFycmF5T3BFeHByIHF1YWxzIGluY2x1ZGVkIGluIGlu ZGV4Qm91bmRRdWFscywgYW5kIHRoZW4gcm91bmQKKwkJICogU2NhbGFyQXJyYXlPcEV4cHIgcXVh bHMgaW5jbHVkZWQgaW4gcHJlZml4Qm91bmRRdWFscywgYW5kIHRoZW4gcm91bmQKIAkJICogdG8g aW50ZWdlci4KIAkJICovCiAJCW51bUluZGV4VHVwbGVzID0gcmludChudW1JbmRleFR1cGxlcyAv IG51bV9zYV9zY2Fucyk7CkBAIC02ODA2LDYgKzY4NDgsOTkgQEAgYnRjb3N0ZXN0aW1hdGUoUGxh bm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJY29z dHMuaW5kZXhTdGFydHVwQ29zdCArPSBkZXNjZW50Q29zdDsKIAljb3N0cy5pbmRleFRvdGFsQ29z dCArPSBjb3N0cy5udW1fc2Ffc2NhbnMgKiBkZXNjZW50Q29zdDsKIAorCS8qCisJICogQWRkIGV4 dHJhIGNvc3RzIGZvciB1c2luZyBhbiBpbmRleCBza2lwIHNjYW4uCisJICogVGhlIGluZGV4IHNr aXAgc2NhbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50bHkgbG93ZXIgY29zdCB1bnRpbCBub3csCisJ ICogZHVlIHRvIHRoZSBkaWZmZXJlbnQgcm93IGVzdGltYXRpb24gdXNlZCAoYWxsIHRoZSBxdWFs cyB1cCB0byBwcmVmaXgsCisJICogcmF0aGVyIHRoYW4gYWxsIHRoZSBxdWFscyB1cCB0byB0aGUg Zmlyc3Qgbm9uLWVxdWFsaXR5IG9wZXJhdG9yKS4KKwkgKiBIb3dldmVyLCB0aGVyZSBhcmUgZXh0 cmEgY29zdHMgaW5jdXJyZWQgZm9yCisJICogYSkgc2V0dGluZyB1cCB0aGUgc2NhbgorCSAqIGIp IGRvaW5nIGFkZGl0aW9uYWwgc2NhbnMgZnJvbSByb290CisJICogYykgc21hbGwgZXh0cmEgY29z dCBwZXIgdHVwbGUgY29tcGFyaXNvbgorCSAqIFdlIGFkZCB0aG9zZSBoZXJlCisJICovCisJaWYg KHBhdGgtPmluZGV4c2tpcHByZWZpeCA+IDApCisJeworCQlMaXN0ICpleHBybGlzdCA9IE5VTEw7 CisJCWRvdWJsZSBudW1ncm91cHNfZXN0aW1hdGU7CisJCWludCBpID0gMDsKKwkJTGlzdENlbGwg KmluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChwYXRoLT5pbmRleGluZm8tPmluZGV4cHJzKTsKKwkJ TGlzdAkgICAqc2VsZWN0aXZpdHlRdWFsczsKKwkJU2VsZWN0aXZpdHkgYnRyZWVTZWxlY3Rpdml0 eTsKKwkJZG91YmxlIGVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVmaXg7CisKKwkJLyogc29tZSBy YXRoZXIgYXJiaXRyYXJ5IGV4dHJhIGNvc3QgZm9yIHByZXByb2Nlc3Npbmcgc3RydWN0dXJlcyBu ZWVkZWQgZm9yIHNraXAgc2NhbiAqLworCQljb3N0cy5pbmRleFN0YXJ0dXBDb3N0ICs9IDIwMC4w ICogY3B1X29wZXJhdG9yX2Nvc3Q7CisJCWNvc3RzLmluZGV4VG90YWxDb3N0ICs9IDIwMC4wICog Y3B1X29wZXJhdG9yX2Nvc3Q7CisKKwkJLyoKKwkJICogSW4gb3JkZXIgdG8gcmVsaWFibHkgZ2V0 IGEgY29zdCBlc3RpbWF0aW9uIGZvciB0aGUgbnVtYmVyIG9mIHNjYW5zIHdlIGhhdmUgdG8gZG8g ZnJvbSByb290LAorCQkgKiB3ZSBuZWVkIHNvbWUgZXN0aW1hdGlvbiBvbiB0aGUgbnVtYmVyIG9m IGRpc3RpbmN0IHByZWZpeGVzIHRoYXQgZXhpc3QuIFRoZXJlZm9yZSwgd2UgbmVlZAorCQkgKiBh IGRpZmZlcmVudCBzZWxlY3Rpdml0eSBhcHByb3hpbWF0aW9uICh0aGlzIHRpbWUgd2UgZG8gbmVl ZCB0byB1c2UgdGhlIGNsYXVzZXMgdW50aWwgdGhlIGZpcnN0CisJCSAqIG5vbi1lcXVhbGl0eSBv cGVyYXRvcikuIFVzaW5nIHRoYXQsIHdlIGNhbiBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGdyb3Vw cworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBhdGgtPmluZGV4aW5mby0+bmtleWNvbHVtbnMg JiYgaSA8IHBhdGgtPmluZGV4c2tpcHByZWZpeDsgaSsrKQorCQl7CisJCQlFeHByICpleHByID0g TlVMTDsKKwkJCWludCBhdHRyID0gcGF0aC0+aW5kZXhpbmZvLT5pbmRleGtleXNbaV07CisJCQlp ZihhdHRyID4gMCkKKwkJCXsKKwkJCQlUYXJnZXRFbnRyeSAqdGVudHJ5ID0gZ2V0X3RsZV9ieV9y ZXNubyhwYXRoLT5pbmRleGluZm8tPmluZGV4dGxpc3QsIGkgKyAxKTsKKwkJCQlBc3NlcnQodGVu dHJ5ICE9IE5VTEwpOworCQkJCWV4cHIgPSB0ZW50cnktPmV4cHI7CisJCQl9CisJCQllbHNlIGlm IChhdHRyID09IDApCisJCQl7CisJCQkJLyogRXhwcmVzc2lvbiBpbmRleCAqLworCQkJCWV4cHIg PSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChwYXRoLT5p bmRleGluZm8tPmluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCQkJfQorCQkJZWxzZSAvKiBhdHRy IDwgMCAqLworCQkJeworCQkJCS8qIEluZGV4IG9uIHN5c3RlbSBjb2x1bW4gaXMgbm90IHN1cHBv cnRlZCAqLworCQkJCUFzc2VydChmYWxzZSk7CisJCQl9CisKKwkJCWV4cHJsaXN0ID0gbGFwcGVu ZChleHBybGlzdCwgZXhwcik7CisJCX0KKworCQlzZWxlY3Rpdml0eVF1YWxzID0gYWRkX3ByZWRp Y2F0ZV90b19pbmRleF9xdWFscyhpbmRleCwgaW5kZXhCb3VuZFF1YWxzKTsKKworCQlidHJlZVNl bGVjdGl2aXR5ID0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShyb290LCBzZWxlY3Rpdml0eVF1YWxz LAorCQkJCQkJCQkJCQkJICBpbmRleC0+cmVsLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSAgSk9JTl9J Tk5FUiwKKwkJCQkJCQkJCQkJCSAgTlVMTCk7CisJCWVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVm aXggPSBidHJlZVNlbGVjdGl2aXR5ICogaW5kZXgtPnJlbC0+dHVwbGVzOworCisJCS8qCisJCSAq IEFzIGluIGdlbmVyaWNjb3N0ZXN0aW1hdGUoKSwgd2UgaGF2ZSB0byBhZGp1c3QgZm9yIGFueQor CQkgKiBTY2FsYXJBcnJheU9wRXhwciBxdWFscyBpbmNsdWRlZCBpbiBwcmVmaXhCb3VuZFF1YWxz LCBhbmQgdGhlbiByb3VuZAorCQkgKiB0byBpbnRlZ2VyLgorCQkgKi8KKwkJZXN0aW1hdGVkSW5k ZXhUdXBsZXNOb1ByZWZpeCA9IHJpbnQoZXN0aW1hdGVkSW5kZXhUdXBsZXNOb1ByZWZpeCAvIG51 bV9zYV9zY2Fucyk7CisKKwkJbnVtZ3JvdXBzX2VzdGltYXRlID0gZXN0aW1hdGVfbnVtX2dyb3Vw c19pbnRlcm5hbCgKKwkJCQkJcm9vdCwgZXhwcmxpc3QsIGVzdGltYXRlZEluZGV4VHVwbGVzTm9Q cmVmaXgsCisJCQkJCWVzdGltYXRlZEluZGV4VHVwbGVzTm9QcmVmaXgsIE5VTEwsIE5VTEwpOwor CisJCS8qCisJCSAqIEZvciBlYWNoIGRpc3RpbmN0IHByZWZpeCB2YWx1ZSB3ZSBhZGQgZGVzY2Vu ZGluZyBjb3N0IGFzLgorCQkgKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHN0YXJ0dXAgY29zdCBj YWxjdWxhdGlvbiBmb3IgcmVndWxhciBzY2Fucy4KKwkJICogV2UgY2FuIGRvIGF0IG1vc3QgMiBz Y2FucyBmcm9tIHJvb3QgcGVyIGRpc3RpbmN0IHByZWZpeCwgc28gbXVsdGlwbHkgYnkgMi4KKwkJ ICogQWxzbyBhZGQgc29tZSBDUFUgcHJvY2Vzc2luZyBjb3N0IHBlciBwYWdlIHRoYXQgd2UgbmVl ZCB0byBwcm9jZXNzLCBwbHVzCisJCSAqIHNvbWUgYWRkaXRpb25hbCBvbmUtdGltZSBjb3N0IGZv ciBzY2FubmluZyB0aGUgbGVhZiBwYWdlLiBUaGlzIGlzIGEgbW9yZQorCQkgKiBleHBlbnNpdmUg ZXN0aW1hdGlvbiB0aGFuIHRoZSBwZXItcGFnZSBjcHUgY29zdCBmb3IgdGhlIHJlZ3VsYXIgaW5k ZXggc2Nhbi4KKwkJICogVGhpcyBpcyBpbnRlbnRpb25hbCwgYmVjYXVzZSB0aGUgaW5kZXggc2tp cCBzY2FuIGRvZXMgbW9yZSBwcm9jZXNzaW5nIG9uCisJCSAqIHRoZSBsZWFmIHBhZ2UuCisJCSAq LworCQlpZiAoaW5kZXgtPnR1cGxlcyA+IDApCisJCQlkZXNjZW50Q29zdCA9IGNlaWwobG9nKGlu ZGV4LT50dXBsZXMpIC8gbG9nKDIuMCkpICogY3B1X29wZXJhdG9yX2Nvc3QgKiAyOworCQllbHNl CisJCQlkZXNjZW50Q29zdCA9IDA7CisJCWRlc2NlbnRDb3N0ICs9IChpbmRleC0+dHJlZV9oZWln aHQgKyAxKSAqIDUwLjAgKiBjcHVfb3BlcmF0b3JfY29zdCAqIDIgKyAyMDAgKiBjcHVfb3BlcmF0 b3JfY29zdDsKKwkJY29zdHMuaW5kZXhUb3RhbENvc3QgKz0gY29zdHMubnVtX3NhX3NjYW5zICog ZGVzY2VudENvc3QgKiBudW1ncm91cHNfZXN0aW1hdGU7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBj YW4gZ2V0IGFuIGVzdGltYXRlIG9mIHRoZSBmaXJzdCBjb2x1bW4ncyBvcmRlcmluZyBjb3JyZWxh dGlvbiBDCiAJICogZnJvbSBwZ19zdGF0aXN0aWMsIGVzdGltYXRlIHRoZSBpbmRleCBjb3JyZWxh dGlvbiBhcyBDIGZvciBhCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDIyN2NkYTRiZDcu LmU2M2QwYWJkOTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o CisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC00OSw3ICs0OSw4IEBA IGV4dGVybiBJbmRleFBhdGggKmNyZWF0ZV9pbmRleF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJYm9vbCBpbmRleG9ubHksCiAJCQkJCQkJCQlSZWxpZHMgcmVxdWlyZWRfb3V0ZXIs CiAJCQkJCQkJCQlkb3VibGUgbG9vcF9jb3VudCwKLQkJCQkJCQkJCWJvb2wgcGFydGlhbF9wYXRo KTsKKwkJCQkJCQkJCWJvb2wgcGFydGlhbF9wYXRoLAorCQkJCQkJCQkJaW50IHNraXBfcHJlZml4 KTsKIGV4dGVybiBCaXRtYXBIZWFwUGF0aCAqY3JlYXRlX2JpdG1hcF9oZWFwX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJ ICAgUGF0aCAqYml0bWFwcXVhbCwKLS0gCjIuMzMuMQoK --_006_25e9af19f3374cb7ad05a692f616a3abopammb0562compoptiverco_--