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 1jubPl-0007Dx-2W for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Jul 2020 12:49:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jubPj-0006KS-3D for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Jul 2020 12:49:03 +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 1jubPi-0006KK-5g for pgsql-hackers@lists.postgresql.org; Sun, 12 Jul 2020 12:49:02 +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 1jubPe-0007WD-NI for pgsql-hackers@postgresql.org; Sun, 12 Jul 2020 12:49:01 +0000 Received: from pps.filterd (smtp03.optiver.com [127.0.0.1]) by smtp03.optiver.com (8.16.0.27/8.16.0.27) with SMTP id 06CCjvve002747; Sun, 12 Jul 2020 14:48:49 +0200 Received: from opammb0562.comp.optiver.com (opammb0562.comp.optiver.com [10.131.160.2]) by smtp03.optiver.com with ESMTP id 327314rb59-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2020 14:48:48 +0200 Received: from opammb0561.comp.optiver.com (10.131.160.1) by opammb0562.comp.optiver.com (10.131.160.2) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 12 Jul 2020 14:48:48 +0200 Received: from opammb0561.comp.optiver.com ([fe80::78c7:ae96:9b5c:c00]) by opammb0561.comp.optiver.com ([fe80::78c7:ae96:9b5c:c00%17]) with mapi id 15.00.1497.006; Sun, 12 Jul 2020 14:48:48 +0200 From: Floris Van Nee To: Dmitry Dolgov <9erthalion6@gmail.com> CC: Andy Fan , PostgreSQL-development , Jesper Pedersen , David Rowley , Kyotaro Horiguchi , Peter Geoghegan , Thomas Munro , Tomas Vondra , "Dilip Kumar" Thread-Topic: Index Skip Scan (new UniqueKeys) [External] Thread-Index: AQHWPkejvFmf8VE85UaktavhwXWuBqjS8neAgByLE4CAEbyf4IABZkuAgAFvkyA= Date: Sun, 12 Jul 2020 12:48:47 +0000 Message-ID: References: <20200609102247.jdlatmfyeecg52fi@localhost> <20200629120709.52w2zi36mtzyliv2@localhost> <20200711162103.hiygat3k6wu2d25p@localhost> In-Reply-To: <20200711162103.hiygat3k6wu2d25p@localhost> 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.1158-8.6.1012-25536.006 x-tm-as-result: No-10--9.328500-8.000000 x-tmase-matchedrid: byfwvk+IcRnuo96mfIBuopzEHTUOuMX33dCmvEa6IiFJkYDIfDuRnwQ9 n8U23GDfritgqDn1kA7ZLAoIw72C6L2HSVG3cP3Xb1yTm/5Rj0upXdWa4gU0SyNGK7UC7ElM8fN 7z08uSw1ZuHk21qKn/JVrxInxkspyRgc9kKi39Jhuh7qwx+D6T4ZS+fz1TDIShAGfvGH09D1nLm OIseD6Ck5u1DSc25B8rYsouuCrjctWeM2C2IocFA97mDMXdNW3pYXNuN0M8fUFf2cKXhyij9fXo 8fDl9r+OREa3LFkLiBU1Kh/P1Egnh4XhHarGUE9RwGuU/RcW5ZqYquCrLrVwrkiJ/BgvX6rF+j6 hUTY8i8wuKLAZ4WGNHyX4pLVqXX6rBQfAFELoV908zy97KsgJlzWPAcG6DFACV7Tls7S0dSDBxw kYuhaXxWahXyiVSBnawGoUBsEJrdzmSV5mnt+7jtL3sSJJZ3+Rv5OGnjUVquOsJP4iEGnzP+/vH 0yc6V2wL6SxPpr1/I= x-tm-as-user-approved-sender: Yes x-tm-as-user-blocked-sender: No x-tmase-result: 10--9.328500-8.000000 x-tmase-version: SMEX-14.0.0.1158-8.6.1012-25536.006 x-tm-snts-smtp: 5D7368C3630CAF161012465B5422F3C7CAEB033AF7E26C16A5DD1FE8797567EB2000:8 Content-Type: multipart/mixed; boundary="_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_" MIME-Version: 1.0 Subject: RE: Index Skip Scan (new UniqueKeys) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-07-12_04:2020-07-10,2020-07-12 signatures=0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable >=20 > Good point, thanks for looking at this. With the latest planner version t= here > are indeed more possibilities to use skipping. It never occured to me tha= t > some of those paths will still rely on index scan returning full data set= . I'll look > in details and add verification to prevent putting something like this on= top of > skip scan in the next version. I believe the required changes are something like in attached patch. There = were a few things I've changed: - build_uniquekeys was constructing the list incorrectly. For a DISTINCT a,= b, it would create two unique keys, one with a and one with b. However, it = should be one unique key with (a,b). - the uniquekeys that is built, still contains some redundant keys, that ar= e normally eliminated from the path keys lists. - the distinct_pathkeys may be NULL, even though there's a possibility for = skipping. But it wouldn't create the uniquekeys in this case. This makes th= e planner not choose skip scans even though it could. For example in querie= s that do SELECT DISTINCT ON (a) * FROM t1 WHERE a=3D1 ORDER BY a,b; Since = a is constant, it's eliminated from regular pathkeys. - to combat the issues mentioned earlier, there's now a check in build_inde= x_paths that checks if the query_pathkeys matches the useful_pathkeys. Note= that we have to use the path keys here rather than any of the unique keys.= The unique keys are only Expr nodes - they do not contain the necessary in= formation about ordering. Due to elimination of some constant path keys, we= have to search the attributes of the index to find the correct prefix to u= se in skipping. - creating the skip scan path did not actually fill the Path's unique keys.= It should just set this to query_uniquekeys. I've attached the first two unique-keys patches (v9, 0001, 0002)), your pat= ches, but rebased on v9 of unique keys (0003-0006) + a diff patch (0007) th= at applies my suggested changes on top of it. -Floris --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0001-Introduce-RelOptInfo-notnullattrs-attribute.patch" Content-Description: 0001-Introduce-RelOptInfo-notnullattrs-attribute.patch Content-Disposition: attachment; filename="0001-Introduce-RelOptInfo-notnullattrs-attribute.patch"; size=4939; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSBjNDZhMzMxN2VkNTNhZDhlMjRkMWVkMWY2Yjk1YjA2ODcwNzFmNmM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFN1biwgMyBNYXkgMjAyMCAyMjozNzo0NiArMDgw MApTdWJqZWN0OiBbUEFUQ0ggMS83XSBJbnRyb2R1Y2UgUmVsT3B0SW5mby0+bm90bnVsbGF0dHJz IGF0dHJpYnV0ZQoKVGhlIG5vdG51bGxhdHRycyBpcyBjYWxjdWxhdGVkIGZyb20gY2F0YWxvZyBh bmQgcnVuLXRpbWUgcXVlcnkuIFRoYXQKaW5mb21hdGlvbiBpcyB0cmFuc2xhdGVkIHRvIGNoaWxk IHJlbGF0aW9uIGFzIHdlbGwgZm9yIHBhcnRpdGlvbmVkCnRhYmxlLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIHwgMTAgKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICB8IDEwICsrKysrKysrKwog c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgMiArKwogNCBmaWxlcyBj aGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKaW5kZXggYzRlMTk2N2YxMi4uOWRhZGUwNjFjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBzZXRfYXBwZW5kX3JlbF9zaXplKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCVJlbE9wdEluZm8gKmNoaWxkcmVs OwogCQlMaXN0Q2VsbCAgICpwYXJlbnR2YXJzOwogCQlMaXN0Q2VsbCAgICpjaGlsZHZhcnM7CisJ CWludCBpID0gLTE7CiAKIAkJLyogYXBwZW5kX3JlbF9saXN0IGNvbnRhaW5zIGFsbCBhcHBlbmQg cmVsczsgaWdub3JlIG90aGVycyAqLwogCQlpZiAoYXBwaW5mby0+cGFyZW50X3JlbGlkICE9IHBh cmVudFJUaW5kZXgpCkBAIC0xMDYxLDYgKzEwNjIsMzYgQEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkgICAoTm9kZSAqKSBy ZWwtPnJlbHRhcmdldC0+ZXhwcnMsCiAJCQkJCQkJCSAgIDEsICZhcHBpbmZvKTsKIAorCQkvKiBD b3B5IG5vdG51bGxhdHRycy4gKi8KKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbC0+ bm90bnVsbGF0dHJzLCBpKSkgPiAwKQorCQl7CisJCQlBdHRyTnVtYmVyIGF0dG5vID0gaSArIEZp cnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCQlBdHRyTnVtYmVyIGNoaWxkX2F0 dG5vOworCQkJaWYgKGF0dG5vID09IDApCisJCQl7CisJCQkJLyogV2hvbGUgcm93IGlzIG5vdCBu dWxsLCBzbyBtdXN0IGJlIHNhbWUgZm9yIGNoaWxkICovCisJCQkJY2hpbGRyZWwtPm5vdG51bGxh dHRycyA9IGJtc19hZGRfbWVtYmVyKGNoaWxkcmVsLT5ub3RudWxsYXR0cnMsCisJCQkJCQkJCQkJ CQkJCWF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQkJYnJl YWs7CisJCQl9CisJCQlpZiAoYXR0bm8gPCAwICkKKwkJCQkvKiBubyBuZWVkIHRvIHRyYW5zbGF0 ZSBzeXN0ZW0gY29sdW1uICovCisJCQkJY2hpbGRfYXR0bm8gPSBhdHRubzsKKwkJCWVsc2UKKwkJ CXsKKwkJCQlOb2RlICogbm9kZSA9IGxpc3RfbnRoKGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycywg YXR0bm8gLSAxKTsKKwkJCQlpZiAoIUlzQShub2RlLCBWYXIpKQorCQkJCQkvKiBUaGlzIG1heSBo YXBwZW5zIGF0IFVOSU9OIGNhc2UsIGxpa2UgKFNFTEVDVCBhIEZST00gdDEgVU5JT04gU0VMRUNU IGEgKyAzCisJCQkJCSAqIEZST00gdDIpIHQgYW5kIHdlIGtub3cgdC5hIGlzIG5vdCBudWxsCisJ CQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQljaGlsZF9hdHRubyA9IGNhc3ROb2RlKFZhciwg bm9kZSktPnZhcmF0dG5vOworCQkJfQorCisJCQljaGlsZHJlbC0+bm90bnVsbGF0dHJzID0gYm1z X2FkZF9tZW1iZXIoY2hpbGRyZWwtPm5vdG51bGxhdHRycywKKwkJCQkJCQkJCQkJCQljaGlsZF9h dHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQl9CisKIAkJLyoK IAkJICogV2UgaGF2ZSB0byBtYWtlIGNoaWxkIGVudHJpZXMgaW4gdGhlIEVxdWl2YWxlbmNlQ2xh c3MgZGF0YQogCQkgKiBzdHJ1Y3R1cmVzIGFzIHdlbGwuICBUaGlzIGlzIG5lZWRlZCBlaXRoZXIg aWYgdGhlIHBhcmVudApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5p dHNwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCBl OTc4YjQ5MWY2Li45NWIxYjE0Y2QzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3Bs YW4uYwpAQCAtODMwLDYgKzgzMCwxNiBAQCBkZWNvbnN0cnVjdF9yZWN1cnNlKFBsYW5uZXJJbmZv ICpyb290LCBOb2RlICpqdG5vZGUsIGJvb2wgYmVsb3dfb3V0ZXJfam9pbiwKIAkJewogCQkJTm9k ZQkgICAqcXVhbCA9IChOb2RlICopIGxmaXJzdChsKTsKIAorCQkJLyogU2V0IHRoZSBub3QgbnVs bCBpbmZvIG5vdyAqLworCQkJTGlzdENlbGwJKmxjOworCQkJTGlzdAkJKm5vbl9udWxsYWJsZV92 YXJzID0gZmluZF9ub25udWxsYWJsZV92YXJzKHF1YWwpOworCQkJZm9yZWFjaChsYywgbm9uX251 bGxhYmxlX3ZhcnMpCisJCQl7CisJCQkJVmFyICp2YXIgPSBsZmlyc3Rfbm9kZShWYXIsIGxjKTsK KwkJCQlSZWxPcHRJbmZvICpyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3Zhci0+dmFybm9d OworCQkJCXJlbC0+bm90bnVsbGF0dHJzID0gYm1zX2FkZF9tZW1iZXIocmVsLT5ub3RudWxsYXR0 cnMsCisJCQkJCQkJCQkJCQkgICB2YXItPnZhcmF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0 dHJpYnV0ZU51bWJlcik7CisJCQl9CiAJCQlkaXN0cmlidXRlX3F1YWxfdG9fcmVscyhyb290LCBx dWFsLAogCQkJCQkJCQkJZmFsc2UsIGJlbG93X291dGVyX2pvaW4sIEpPSU5fSU5ORVIsCiAJCQkJ CQkJCQlyb290LT5xdWFsX3NlY3VyaXR5X2xldmVsLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxh bmNhdC5jCmluZGV4IDI1NTQ1MDI5ZDcuLjBiMmY5ZDM5OGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wbGFuY2F0LmMKQEAgLTExNyw2ICsxMTcsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFu bmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCVJl bGF0aW9uCXJlbGF0aW9uOwogCWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3Mg PSBOSUw7CisJaW50CQkJaTsKIAogCS8qCiAJICogV2UgbmVlZCBub3QgbG9jayB0aGUgcmVsYXRp b24gc2luY2UgaXQgd2FzIGFscmVhZHkgbG9ja2VkLCBlaXRoZXIgYnkKQEAgLTQ2Myw2ICs0NjQs MTUgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9i amVjdElkLCBib29sIGluaHBhcmVudCwKIAlpZiAoaW5ocGFyZW50ICYmIHJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKIAkJc2V0X3JlbGF0aW9u X3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOwogCisJQXNzZXJ0KHJlbC0+bm90 bnVsbGF0dHJzID09IE5VTEwpOworCWZvcihpID0gMDsgaSA8IHJlbGF0aW9uLT5yZF9hdHQtPm5h dHRzOyBpKyspCisJeworCQlGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgYXR0ciA9IHJlbGF0aW9uLT5y ZF9hdHQtPmF0dHJzW2ldOworCQlpZiAoYXR0ci5hdHRub3RudWxsKQorCQkJcmVsLT5ub3RudWxs YXR0cnMgPSBibXNfYWRkX21lbWJlcihyZWwtPm5vdG51bGxhdHRycywKKwkJCQkJCQkJCQkJICAg YXR0ci5hdHRudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwl9CisK IAl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDQ4NWQxYjA2YzkuLjllM2ViZDQ4OGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC03 MDksNiArNzA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCVBsYW5uZXJJbmZvICpz dWJyb290OwkJLyogaWYgc3VicXVlcnkgKi8KIAlMaXN0CSAgICpzdWJwbGFuX3BhcmFtczsgLyog aWYgc3VicXVlcnkgKi8KIAlpbnQJCQlyZWxfcGFyYWxsZWxfd29ya2VyczsJLyogd2FudGVkIG51 bWJlciBvZiBwYXJhbGxlbCB3b3JrZXJzICovCisJLyogTm90IG51bGwgYXR0cnMsIHN0YXJ0IGZy b20gLUZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIgKi8KKwlCaXRtYXBzZXQJCSpu b3RudWxsYXR0cnM7CiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCBmb3JlaWduIHRhYmxlcyBhbmQg Zm9yZWlnbiBqb2lucyAqLwogCU9pZAkJCXNlcnZlcmlkOwkJLyogaWRlbnRpZmllcyBzZXJ2ZXIg Zm9yIHRoZSB0YWJsZSBvciBqb2luICovCi0tIAoyLjI1LjAKCg== --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0002-Introduce-UniqueKey-attributes-on-RelOptInfo-struct.patch" Content-Description: 0002-Introduce-UniqueKey-attributes-on-RelOptInfo-struct.patch Content-Disposition: attachment; filename="0002-Introduce-UniqueKey-attributes-on-RelOptInfo-struct.patch"; size=60020; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSBiN2Y1NzhiNzAwOTU2Mzc0MzEyODg1ZmJjNTA2MGEyM2FiNjRkYTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUU0PUI4PTgwPUU2PThDPTgzPz0gPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IE1vbiwgMTEgTWF5IDIwMjAgMTU6NTA6NTIgKzA4 MDAKU3ViamVjdDogW1BBVENIIDIvN10gSW50cm9kdWNlIFVuaXF1ZUtleSBhdHRyaWJ1dGVzIG9u IFJlbE9wdEluZm8gc3RydWN0LgoKVW5pcXVlS2V5IGlzIGEgc2V0IG9mIGV4cHJzIG9uIFJlbE9w dEluZm8gd2hpY2ggcmVwcmVzZW50cyB0aGUgZXhwcnMKd2lsbCBiZSB1bmlxdWUgb24gdGhlIGdp dmVuIFJlbE9wdEluZm8uIFlvdSBjYW4gc2VlIFJFQURNRS51bmlxdWVrZXkKZm9yIG1vcmUgaW5m b3JtYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICAg ICB8ICAgMTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jICAgICAgICAgICAgICAgICAgICB8 ICAgMzEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAg MTMgKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgICAgICB8ICAgMTEg Kwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgMTAgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvTWFrZWZpbGUgICAgICAgICB8ICAgIDMgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkgfCAgMTMxICsrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICB8ICAgMTAgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgICAgIHwgMTEzMSArKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgIHwgICAxMyArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAgICB8ICAgIDIgKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jICAgICB8ICAgNDQgKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jICAgICAgICB8ICAgMTYgKy0KIHNyYy9pbmNs dWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRl L25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgfCAgIDI5ICstCiBzcmMvaW5jbHVkZS9ub2Rl cy9wZ19saXN0LmggICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvYXBwZW5kaW5mby5oICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmggICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCAgICAgICAgICAgICAgIHwgICA0MyArCiAyMyBmaWxlcyBjaGFuZ2VkLCAxNTAyIGluc2Vy dGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL1JFQURNRS51bmlxdWVrZXkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmlu ZGV4IGQ4Y2Y4N2U2ZDAuLmVmZTdjM2FlMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC0yMjcz LDYgKzIyNzMsMTYgQEAgX2NvcHlQYXRoS2V5KGNvbnN0IFBhdGhLZXkgKmZyb20pCiAJcmV0dXJu IG5ld25vZGU7CiB9CiAKK3N0YXRpYyBVbmlxdWVLZXkgKgorX2NvcHlVbmlxdWVLZXkoY29uc3Qg VW5pcXVlS2V5ICpmcm9tKQoreworCVVuaXF1ZUtleQkqbmV3bm9kZSA9IG1ha2VOb2RlKFVuaXF1 ZUtleSk7CisKKwlDT1BZX05PREVfRklFTEQoZXhwcnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG11 bHRpX251bGx2YWxzKTsKKworCXJldHVybiBuZXdub2RlOworfQogLyoKICAqIF9jb3B5UmVzdHJp Y3RJbmZvCiAgKi8KQEAgLTUxNTIsNiArNTE2Miw5IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZv aWQgKmZyb20pCiAJCWNhc2UgVF9QYXRoS2V5OgogCQkJcmV0dmFsID0gX2NvcHlQYXRoS2V5KGZy b20pOwogCQkJYnJlYWs7CisJCWNhc2UgVF9VbmlxdWVLZXk6CisJCQlyZXR2YWwgPSBfY29weVVu aXF1ZUtleShmcm9tKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfUmVzdHJpY3RJbmZvOgogCQkJcmV0 dmFsID0gX2NvcHlSZXN0cmljdEluZm8oZnJvbSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL2xpc3QuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYwppbmRleCA4 MGZhOGM4NGU0Li5hN2E5OWI3MGYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9saXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jCkBAIC02ODcsNiArNjg3LDM3IEBAIGxp c3RfbWVtYmVyX29pZChjb25zdCBMaXN0ICpsaXN0LCBPaWQgZGF0dW0pCiAJcmV0dXJuIGZhbHNl OwogfQogCisvKgorICogcmV0dXJuIHRydWUgaWZmIGV2ZXJ5IGVudHJ5IGluICJtZW1iZXJzIiBs aXN0IGlzIGFsc28gcHJlc2VudAorICogaW4gdGhlICJ0YXJnZXQiIGxpc3QuCisgKi8KK2Jvb2wK K2xpc3RfaXNfc3Vic2V0KGNvbnN0IExpc3QgKm1lbWJlcnMsIGNvbnN0IExpc3QgKnRhcmdldCkK K3sKKwljb25zdCBMaXN0Q2VsbAkqbGMxLCAqbGMyOworCisJQXNzZXJ0KElzUG9pbnRlckxpc3Qo bWVtYmVycykpOworCUFzc2VydChJc1BvaW50ZXJMaXN0KHRhcmdldCkpOworCWNoZWNrX2xpc3Rf aW52YXJpYW50cyhtZW1iZXJzKTsKKwljaGVja19saXN0X2ludmFyaWFudHModGFyZ2V0KTsKKwor CWZvcmVhY2gobGMxLCBtZW1iZXJzKQorCXsKKwkJYm9vbCBmb3VuZCA9IGZhbHNlOworCQlmb3Jl YWNoKGxjMiwgdGFyZ2V0KQorCQl7CisJCQlpZiAoZXF1YWwobGZpcnN0KGxjMSksIGxmaXJzdChs YzIpKSkKKwkJCXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ aWYgKCFmb3VuZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIC8q CiAgKiBEZWxldGUgdGhlIG4ndGggY2VsbCAoY291bnRpbmcgZnJvbSAwKSBpbiBsaXN0LgogICoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggNDlkZTI4NWYwMS4uNjQ2Y2Y3YzlhMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKQEAgLTgxNCwzICs4MTQsMTYgQEAgbWFrZVZhY3V1bVJlbGF0aW9uKFJhbmdl VmFyICpyZWxhdGlvbiwgT2lkIG9pZCwgTGlzdCAqdmFfY29scykKIAl2LT52YV9jb2xzID0gdmFf Y29sczsKIAlyZXR1cm4gdjsKIH0KKworCisvKgorICogbWFrZVVuaXF1ZUtleQorICovCitVbmlx dWVLZXkqCittYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251bGx2YWxzKQor eworCVVuaXF1ZUtleSAqIHVrZXkgPSBtYWtlTm9kZShVbmlxdWVLZXkpOworCXVrZXktPmV4cHJz ID0gZXhwcnM7CisJdWtleS0+bXVsdGlfbnVsbHZhbHMgPSBtdWx0aV9udWxsdmFsczsKKwlyZXR1 cm4gdWtleTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGUyZjE3NzUxNWQuLmMzYTk2MzI5OTIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMjQyOCw2ICsyNDI4LDE0IEBAIF9vdXRQYXRoS2V5KFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQYXRoS2V5ICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQocGtf bnVsbHNfZmlyc3QpOwogfQogCitzdGF0aWMgdm9pZAorX291dFVuaXF1ZUtleShTdHJpbmdJbmZv IHN0ciwgY29uc3QgVW5pcXVlS2V5ICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiVU5JUVVF S0VZIik7CisJV1JJVEVfTk9ERV9GSUVMRChleHBycyk7CisJV1JJVEVfQk9PTF9GSUVMRChtdWx0 aV9udWxsdmFscyk7Cit9CisKIHN0YXRpYyB2b2lkCiBfb3V0UGF0aFRhcmdldChTdHJpbmdJbmZv IHN0ciwgY29uc3QgUGF0aFRhcmdldCAqbm9kZSkKIHsKQEAgLTQxMjcsNiArNDEzNSw5IEBAIG91 dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QYXRoS2V5 OgogCQkJCV9vdXRQYXRoS2V5KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgVF9Vbmlx dWVLZXk6CisJCQkJX291dFVuaXF1ZUtleShzdHIsIG9iaik7CisJCQkJYnJlYWs7CiAJCQljYXNl IFRfUGF0aFRhcmdldDoKIAkJCQlfb3V0UGF0aFRhcmdldChzdHIsIG9iaik7CiAJCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDQyMDUwYWI3MTkuLjNhMTg1NzFkMGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L3JlYWRmdW5jcy5jCkBAIC00NTIsNiArNDUyLDE0IEBAIF9yZWFkU2V0T3BlcmF0aW9uU3RtdCh2 b2lkKQogCVJFQURfRE9ORSgpOwogfQogCitzdGF0aWMgVW5pcXVlS2V5ICoKK19yZWFkVW5pcXVl S2V5KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoVW5pcXVlS2V5KTsKKwlSRUFEX05PREVfRklFTEQo ZXhwcnMpOworCVJFQURfQk9PTF9GSUVMRChtdWx0aV9udWxsdmFscyk7CisJUkVBRF9ET05FKCk7 Cit9CiAKIC8qCiAgKglTdHVmZiBmcm9tIHByaW1ub2Rlcy5oLgpAQCAtMjY1Niw2ICsyNjY0LDgg 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 Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggOWRhZGUwNjFjOC4uYjU4 YmFjNjE3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC01NzksNiAr NTc5LDEyIEBAIHNldF9wbGFpbl9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLCBSYW5nZVRibEVudHJ5ICpydGUpCiAJICovCiAJY2hlY2tfaW5kZXhfcHJlZGljYXRl cyhyb290LCByZWwpOwogCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSd2ZSBtYXJrZWQgd2hpY2ggcGFy dGlhbCBpbmRleGVzIGFyZSBzdWl0YWJsZSwgd2UgY2FuIG5vdworCSAqIGJ1aWxkIHRoZSByZWxh dGlvbidzIHVuaXF1ZSBrZXlzLgorCSAqLworCXBvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5cyhy b290LCByZWwsIHJlbC0+aW5kZXhsaXN0KTsKKwogCS8qIE1hcmsgcmVsIHdpdGggZXN0aW1hdGVk IG91dHB1dCByb3dzLCB3aWR0aCwgZXRjICovCiAJc2V0X2Jhc2VyZWxfc2l6ZV9lc3RpbWF0ZXMo cm9vdCwgcmVsKTsKIH0KQEAgLTEzMTAsNiArMTMxNiw4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkvKiBBZGQgcGF0aHMg dG8gdGhlIGFwcGVuZCByZWxhdGlvbi4gKi8KIAlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290 LCByZWwsIGxpdmVfY2hpbGRyZWxzKTsKKwlpZiAoSVNfUEFSVElUSU9ORURfUkVMKHJlbCkpCisJ CXBvcHVsYXRlX3BhcnRpdGlvbmVkcmVsX3VuaXF1ZWtleXMocm9vdCwgcmVsLCBsaXZlX2NoaWxk cmVscyk7CiB9CiAKIApAQCAtMjM4Myw2ICsyMzkxLDggQEAgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJICBwYXRoa2V5 cywgcmVxdWlyZWRfb3V0ZXIpKTsKIAl9CiAKKwljb252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMo cm9vdCwgcmVsLCBzdWJfZmluYWxfcmVsKTsKKwogCS8qIElmIG91dGVyIHJlbCBhbGxvd3MgcGFy YWxsZWxpc20sIGRvIHNhbWUgZm9yIHBhcnRpYWwgcGF0aHMuICovCiAJaWYgKHJlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291dGVyKSkKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCBkYjU0YTZiYTJlLi5lZjBmZDJmYjBiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTcxLDEzICs3MSw2IEBAIHN0 YXRpYyB2b2lkIGNvbnNpZGVyX3BhcmFsbGVsX21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwK IHN0YXRpYyB2b2lkIGhhc2hfaW5uZXJfYW5kX291dGVyKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdElu Zm8gKmlubmVycmVsLAogCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsIEpvaW5QYXRoRXh0cmFE YXRhICpleHRyYSk7Ci1zdGF0aWMgTGlzdCAqc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5u ZXJJbmZvICpyb290LAotCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAotCQkJCQkJCQkJ ICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKLQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWws Ci0JCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKLQkJCQkJCQkJCSAgSm9pblR5cGUgam9p bnR5cGUsCi0JCQkJCQkJCQkgIGJvb2wgKm1lcmdlam9pbl9hbGxvd2VkKTsKIHN0YXRpYyB2b2lk IGdlbmVyYXRlX21lcmdlam9pbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBS ZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVycmVsLApAQCAt MTkyNyw3ICsxOTIwLDcgQEAgaGFzaF9pbm5lcl9hbmRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAgKiBpZiBpdCBpcyBtZXJnZWpvaW5hYmxlIGFuZCBpbnZvbHZlcyB2YXJzIGZyb20gdGhlIHR3 byBzdWItcmVsYXRpb25zCiAgKiBjdXJyZW50bHkgb2YgaW50ZXJlc3QuCiAgKi8KLXN0YXRpYyBM aXN0ICoKK0xpc3QgKgogc2VsZWN0X21lcmdlam9pbl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJy ZWwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyZDM0M2NkMjkzLi5i OTE2M2VlOGZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVs cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTkyNCw2 ICs5MjQsOCBAQCBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsCiAKIAkvKiBBcHBseSBwYXJ0aXRpb253aXNlIGpvaW4gdGVjaG5p cXVlLCBpZiBwb3NzaWJsZS4gKi8KIAl0cnlfcGFydGl0aW9ud2lzZV9qb2luKHJvb3QsIHJlbDEs IHJlbDIsIGpvaW5yZWwsIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCXBvcHVsYXRlX2pvaW5y ZWxfdW5pcXVla2V5cyhyb290LCBqb2lucmVsLCByZWwxLCByZWwyLCByZXN0cmljdGxpc3QsIHNq aW5mby0+am9pbnR5cGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5j CmluZGV4IGNlOWJmODdlOWIuLjdlNTk2ZDQxOTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL3BhdGhrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv cGF0aGtleXMuYwpAQCAtMzMsNyArMzMsNiBAQCBzdGF0aWMgYm9vbCBwYXRoa2V5X2lzX3JlZHVu ZGFudChQYXRoS2V5ICpuZXdfcGF0aGtleSwgTGlzdCAqcGF0aGtleXMpOwogc3RhdGljIGJvb2wg bWF0Y2hlc19ib29sZWFuX3BhcnRpdGlvbl9jbGF1c2UoUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKnBhcnRyZWwsCiAJCQkJCQkJCQkJCSBpbnQgcGFydGtleWNv bCk7Ci1zdGF0aWMgVmFyICpmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKFJlbE9wdEluZm8gKnJl bCwgVGFyZ2V0RW50cnkgKnRsZSk7CiBzdGF0aWMgYm9vbCByaWdodF9tZXJnZV9kaXJlY3Rpb24o UGxhbm5lckluZm8gKnJvb3QsIFBhdGhLZXkgKnBhdGhrZXkpOwogCiAKQEAgLTEwMzUsNyArMTAz NCw3IEBAIGNvbnZlcnRfc3VicXVlcnlfcGF0aGtleXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKICAqIFdlIG5lZWQgdGhpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1 cm4gcGF0aGtleXMgZGVzY3JpYmluZyB2YWx1ZXMKICAqIHRoYXQgYXJlIHVuYXZhaWxhYmxlIGFi b3ZlIHRoZSBsZXZlbCBvZiB0aGUgc3VicXVlcnkgc2Nhbi4KICAqLwotc3RhdGljIFZhciAqCitW YXIgKgogZmluZF92YXJfZm9yX3N1YnF1ZXJ5X3RsZShSZWxPcHRJbmZvICpyZWwsIFRhcmdldEVu dHJ5ICp0bGUpCiB7CiAJTGlzdENlbGwgICAqbGM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91 bmlxdWVrZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjMzYmNk MmYzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1 ZWtleXMuYwpAQCAtMCwwICsxLDExMzEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 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 a2V5KFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbDEsCisJ CQkJCQkJCQkgIFVuaXF1ZUtleSAqdWtleSk7CitzdGF0aWMgdm9pZCBhZGRfdW5pcXVla2V5X2Zv cl9vbmVyb3coUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyBib29sIGFkZF9jb21iaW5lZF91bmlx dWVrZXkoUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJf cmVsLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcl9yZWwsCisJCQkJCQkJCSAgIFVuaXF1 ZUtleSAqb3V0ZXJfdWtleSwKKwkJCQkJCQkJICAgVW5pcXVlS2V5ICppbm5lcl91a2V5LAorCQkJ CQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSk7CisKKy8qIFVzZWQgZm9yIHVuaXF1ZSBpbmRleGVz IGNoZWNraW5nIGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworc3RhdGljIGJvb2wgaW5kZXhfY29u c3RhaW5zX3BhcnRrZXkoUmVsT3B0SW5mbyAqcGFydHJlbCwgIEluZGV4T3B0SW5mbyAqaW5kKTsK K3N0YXRpYyBJbmRleE9wdEluZm8gKnNpbXBsZV9jb3B5X2luZGV4aW5mb190b19wYXJlbnQoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCQkJIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJ CQkJCQkJCQkJCQkgSW5kZXhPcHRJbmZvICpmcm9tKTsKK3N0YXRpYyBib29sIHNpbXBsZV9pbmRl eGluZm9fZXF1YWwoSW5kZXhPcHRJbmZvICppbmQxLCBJbmRleE9wdEluZm8gKmluZDIpOworc3Rh dGljIHZvaWQgYWRqdXN0X3BhcnRpdGlvbl91bmlxdWVfaW5kZXhsaXN0KFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJCQkJCQkJCQkJICBS ZWxPcHRJbmZvICpjaGlsZHJlbCwKKwkJCQkJCQkJCQkJICBMaXN0ICoqZ2xvYmFsX3VuaXF1ZV9p bmRleCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgZ3JvdXBlZCByZWxhdGlvbiBhbmQgZGlz dGluY3QgcmVsYXRpb24uICovCitzdGF0aWMgdm9pZCBhZGRfdW5pcXVla2V5X2Zyb21fc29ydGdy b3VwcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKnJlbCwKKwkJ CQkJCQkJCQkgIExpc3QgKnNvcnRncm91cHMpOworCisvKgorICogcG9wdWxhdGVfYmFzZXJlbF91 bmlxdWVrZXlzCisgKgkJUG9wdWxhdGUgJ2Jhc2VyZWwnIHVuaXF1ZWtleXMgbGlzdCBieSBsb29r aW5nIGF0IHRoZSByZWwncyB1bmlxdWUgaW5kZXgKKyAqIGFuZCBiYXNlcmVzdHJpY3RpbmZvCisg Ki8KK3ZvaWQKK3BvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQlSZWxPcHRJbmZvICpiYXNlcmVsLAorCQkJCQkJCUxpc3QgKmluZGV4bGlzdCkKK3sK KwlMaXN0Q2VsbCAqbGM7CisJTGlzdAkqbWF0Y2hlZF91bmlxX2luZGV4ZXMgPSBOSUw7CisKKwkv KiBBdHRycyBhcHBlYXJzIGluIHJlbC0+cmVsdGFyZ2V0LT5leHBycy4gKi8KKwlCaXRtYXBzZXQg KnVzZWRfYXR0cnMgPSBOVUxMOworCisJTGlzdAkqY29uc3RfZXhwcnMgPSBOSUw7CisJTGlzdAkq ZXhwcl9vcGZhbWlsaWVzID0gTklMOworCisJQXNzZXJ0KGJhc2VyZWwtPnJ0ZWtpbmQgPT0gUlRF X1JFTEFUSU9OKTsKKworCWZvcmVhY2gobGMsIGluZGV4bGlzdCkKKwl7CisJCUluZGV4T3B0SW5m byAqaW5kID0gKEluZGV4T3B0SW5mbyAqKSBsZmlyc3QobGMpOworCQlpZiAoIWluZC0+dW5pcXVl IHx8ICFpbmQtPmltbWVkaWF0ZSB8fAorCQkJKGluZC0+aW5kcHJlZCAhPSBOSUwgJiYgIWluZC0+ cHJlZE9LKSkKKwkJCWNvbnRpbnVlOworCQltYXRjaGVkX3VuaXFfaW5kZXhlcyA9IGxhcHBlbmQo bWF0Y2hlZF91bmlxX2luZGV4ZXMsIGluZCk7CisJfQorCisJaWYgKG1hdGNoZWRfdW5pcV9pbmRl eGVzICA9PSBOSUwpCisJCXJldHVybjsKKworCS8qIENoZWNrIHdoaWNoIGF0dHJzIGlzIHVzZWQg aW4gYmFzZXJlbC0+cmVsdGFyZ2V0ICovCisJcHVsbF92YXJhdHRub3MoKE5vZGUgKiliYXNlcmVs LT5yZWx0YXJnZXQtPmV4cHJzLCBiYXNlcmVsLT5yZWxpZCwgJnVzZWRfYXR0cnMpOworCisJLyog Q2hlY2sgd2hpY2ggYXR0cm5vIGlzIHVzZWQgYXQgYSBtZXJnZWFibGUgY29uc3QgZmlsdGVyICov CisJZm9yZWFjaChsYywgYmFzZXJlbC0+YmFzZXJlc3RyaWN0aW5mbykKKwl7CisJCVJlc3RyaWN0 SW5mbyAqcmluZm8gPSAoUmVzdHJpY3RJbmZvICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHJpbmZv LT5tZXJnZW9wZmFtaWxpZXMgPT0gTklMKQorCQkJY29udGludWU7CisKKwkJaWYgKGJtc19pc19l bXB0eShyaW5mby0+bGVmdF9yZWxpZHMpKQorCQl7CisJCQljb25zdF9leHBycyA9IGxhcHBlbmQo Y29uc3RfZXhwcnMsIGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2UpKTsKKwkJfQorCQllbHNlIGlm IChibXNfaXNfZW1wdHkocmluZm8tPnJpZ2h0X3JlbGlkcykpCisJCXsKKwkJCWNvbnN0X2V4cHJz ID0gbGFwcGVuZChjb25zdF9leHBycywgZ2V0X2xlZnRvcChyaW5mby0+Y2xhdXNlKSk7CisJCX0K KwkJZWxzZQorCQkJY29udGludWU7CisKKwkJZXhwcl9vcGZhbWlsaWVzID0gbGFwcGVuZChleHBy X29wZmFtaWxpZXMsIHJpbmZvLT5tZXJnZW9wZmFtaWxpZXMpOworCX0KKworCWZvcmVhY2gobGMs IG1hdGNoZWRfdW5pcV9pbmRleGVzKQorCXsKKwkJYm9vbAltdWx0aV9udWxsdmFscywgdXNlZnVs OworCQlMaXN0CSpleHBycyA9IGdldF9leHByc19mcm9tX3VuaXF1ZWluZGV4KGxmaXJzdF9ub2Rl KEluZGV4T3B0SW5mbywgbGMpLAorCQkJCQkJCQkJCQkJCWNvbnN0X2V4cHJzLAorCQkJCQkJCQkJ CQkJCWV4cHJfb3BmYW1pbGllcywKKwkJCQkJCQkJCQkJCQl1c2VkX2F0dHJzLAorCQkJCQkJCQkJ CQkJCSZ1c2VmdWwsCisJCQkJCQkJCQkJCQkJJm11bHRpX251bGx2YWxzKTsKKwkJaWYgKHVzZWZ1 bCkKKwkJeworCQkJaWYgKGV4cHJzID09IE5JTCkKKwkJCXsKKwkJCQkvKiBBbGwgdGhlIGNvbHVt bnMgaW4gVW5pcXVlIEluZGV4IG1hdGNoZWQgd2l0aCBhIHJlc3RyaWN0aW5mbyAqLworCQkJCWFk ZF91bmlxdWVrZXlfZm9yX29uZXJvdyhiYXNlcmVsKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQli YXNlcmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChiYXNlcmVsLT51bmlxdWVrZXlzLAorCQkJCQkJ CQkJCSAgbWFrZVVuaXF1ZUtleShleHBycywgbXVsdGlfbnVsbHZhbHMpKTsKKwkJfQorCX0KK30K KworCisvKgorICogcG9wdWxhdGVfcGFydGl0aW9uZWRyZWxfdW5pcXVla2V5cworICogVGhlIFVu aXF1ZUtleSBvbiBwYXJ0aXRpb25yZWwgY29tZXMgZnJvbSAyIGNhc2VzOgorICogMSkuIE9ubHkg b25lIHBhcnRpdGlvbiBpcyBpbnZvbHZlZCBpbiB0aGlzIHF1ZXJ5LCB0aGUgdW5pcXVlIGtleSBj YW4gYmUKKyAqIGNvcGllZCB0byBwYXJlbnQgcmVsIGZyb20gY2hpbGRyZWwuCisgKiAyKS4gVGhl cmUgYXJlIHNvbWUgdW5pcXVlIGluZGV4IHdoaWNoIGluY2x1ZGVzIHBhcnRpdGlvbiBrZXkgYW5k IGV4aXN0cworICogaW4gYWxsIHRoZSByZWxhdGVkIHBhcnRpdGlvbnMuCisgKiBXZSBuZXZlciBt aW5kIHJ1bGUgMiBpZiB3ZSBoaXQgcnVsZSAxLgorICovCisKK3ZvaWQKK3BvcHVsYXRlX3BhcnRp dGlvbmVkcmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIFJlbE9w dEluZm8gKnJlbCwKKwkJCQkJCQkJICAgTGlzdCAqY2hpbGRyZWxzKQoreworCUxpc3RDZWxsCSps YzsKKwlMaXN0CSpnbG9iYWxfdW5pcV9pbmRleGxpc3QgPSBOSUw7CisJUmVsT3B0SW5mbyAqY2hp bGRyZWw7CisJYm9vbCBpc19maXJzdCA9IHRydWU7CisKKwlBc3NlcnQoSVNfUEFSVElUSU9ORURf UkVMKHJlbCkpOworCisJaWYgKGNoaWxkcmVscyA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJ ICogSWYgdGhlcmUgaXMgb25seSBvbmUgcGFydGl0aW9uIHVzZWQgaW4gdGhpcyBxdWVyeSwgdGhl IFVuaXF1ZUtleSBpbiBjaGlsZHJlbCBpcworCSAqIHN0aWxsIHZhbGlkIGluIHBhcmVudCBsZXZl bCwgYnV0IHdlIG5lZWQgY29udmVydCB0aGUgZm9ybWF0IGZyb20gY2hpbGQgZXhwciB0bworCSAq IHBhcmVudCBleHByLgorCSAqLworCWlmIChsaXN0X2xlbmd0aChjaGlsZHJlbHMpID09IDEpCisJ eworCQkvKiBDaGVjayBmb3IgUnVsZSAxICovCisJCVJlbE9wdEluZm8gKmNoaWxkcmVsID0gbGlu aXRpYWxfbm9kZShSZWxPcHRJbmZvLCBjaGlsZHJlbHMpOworCQlMaXN0Q2VsbAkqbGM7CisJCUFz c2VydChjaGlsZHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfT1RIRVJfTUVNQkVSX1JFTCk7CisJ CWlmIChyZWxhdGlvbl9pc19vbmVyb3coY2hpbGRyZWwpKQorCQl7CisJCQlhZGRfdW5pcXVla2V5 X2Zvcl9vbmVyb3cocmVsKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvcmVhY2gobGMsIGNoaWxk cmVsLT51bmlxdWVrZXlzKQorCQl7CisJCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmlyc3Rfbm9kZShV bmlxdWVLZXksIGxjKTsKKwkJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBmaW5kX2FwcGluZm9f YnlfY2hpbGQocm9vdCwgY2hpbGRyZWwtPnJlbGlkKTsKKwkJCUxpc3QgKnBhcmVudF9leHBycyA9 IE5JTDsKKwkJCWJvb2wgY2FuX3JldXNlID0gdHJ1ZTsKKwkJCUxpc3RDZWxsCSpsYzI7CisJCQlm b3JlYWNoKGxjMiwgdWtleS0+ZXhwcnMpCisJCQl7CisJCQkJVmFyICp2YXIgPSAoVmFyICopbGZp cnN0KGxjMik7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgZXhwciBjb21lcyBmcm9tIGEgZXhwcmVz c2lvbiwgaXQgaXMgaGFyZCB0byBidWlsZCB0aGUgZXhwcmVzc2lvbgorCQkJCSAqIGluIHBhcmVu dCBzbyBpZ25vcmUgdGhhdCBjYXNlIGZvciBub3cuCisJCQkJICovCisJCQkJaWYoIUlzQSh2YXIs IFZhcikpCisJCQkJeworCQkJCQljYW5fcmV1c2UgPSBmYWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCS8qIENvbnZlcnQgaXQgdG8gcGFyZW50IHZhciAqLworCQkJCXBhcmVudF9leHBycyA9 IGxhcHBlbmQocGFyZW50X2V4cHJzLCBmaW5kX3BhcmVudF92YXIoYXBwaW5mbywgdmFyKSk7CisJ CQl9CisJCQlpZiAoY2FuX3JldXNlKQorCQkJCXJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQocmVs LT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShwYXJlbnRfZXhwcnMsCisJ CQkJCQkJCQkJCQkJCXVrZXktPm11bHRpX251bGx2YWxzKSk7CisJCX0KKwl9CisJZWxzZQorCXsK KwkJLyogQ2hlY2sgZm9yIHJ1bGUgMiAqLworCQljaGlsZHJlbCA9IGxpbml0aWFsX25vZGUoUmVs T3B0SW5mbywgY2hpbGRyZWxzKTsKKwkJZm9yZWFjaChsYywgY2hpbGRyZWwtPmluZGV4bGlzdCkK KwkJeworCQkJSW5kZXhPcHRJbmZvICppbmQgPSBsZmlyc3QobGMpOworCQkJSW5kZXhPcHRJbmZv ICptb2RpZmllZF9pbmRleDsKKwkJCWlmICghaW5kLT51bmlxdWUgfHwgIWluZC0+aW1tZWRpYXRl IHx8CisJCQkJKGluZC0+aW5kcHJlZCAhPSBOSUwgJiYgIWluZC0+cHJlZE9LKSkKKwkJCQljb250 aW51ZTsKKworCQkJLyoKKwkJCSAqIER1cmluZyBzaW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFy ZW50LCB3ZSBuZWVkIHRvIGNvbnZlcnQgdmFyIGZyb20KKwkJCSAqIGNoaWxkIHZhciB0byBwYXJl bnQgdmFyLCBpbmRleCBvbiBleHByZXNzaW9uIGlzIHRvbyBjb21wbGV4IHRvIGhhbmRsZS4KKwkJ CSAqIHNvIGlnbm9yZSBpdCBmb3Igbm93LgorCQkJICovCisJCQlpZiAoaW5kLT5pbmRleHBycyAh PSBOSUwpCisJCQkJY29udGludWU7CisKKwkJCW1vZGlmaWVkX2luZGV4ID0gc2ltcGxlX2NvcHlf aW5kZXhpbmZvX3RvX3BhcmVudChyb290LCByZWwsIGluZCk7CisJCQkvKgorCQkJICogSWYgdGhl IHVuaXF1ZSBpbmRleCBkb2Vzbid0IGNvbnRhaW4gcGFydGtleSwgdGhlbiBpdCBpcyB1bmlxdWUK KwkJCSAqIG9uIHRoaXMgcGFydGl0aW9uIG9ubHksIHNvIGl0IGlzIHVzZWxlc3MgZm9yIHVzLgor CQkJICovCisJCQlpZiAoIWluZGV4X2NvbnN0YWluc19wYXJ0a2V5KHJlbCwgbW9kaWZpZWRfaW5k ZXgpKQorCQkJCWNvbnRpbnVlOworCisJCQlnbG9iYWxfdW5pcV9pbmRleGxpc3QgPSBsYXBwZW5k KGdsb2JhbF91bmlxX2luZGV4bGlzdCwgIG1vZGlmaWVkX2luZGV4KTsKKwkJfQorCisJCWlmIChn bG9iYWxfdW5pcV9pbmRleGxpc3QgIT0gTklMKQorCQl7CisJCQlmb3JlYWNoKGxjLCBjaGlsZHJl bHMpCisJCQl7CisJCQkJUmVsT3B0SW5mbyAqY2hpbGQgPSBsZmlyc3QobGMpOworCQkJCWlmIChp c19maXJzdCkKKwkJCQl7CisJCQkJCWlzX2ZpcnN0ID0gZmFsc2U7CisJCQkJCWNvbnRpbnVlOwor CQkJCX0KKwkJCQlhZGp1c3RfcGFydGl0aW9uX3VuaXF1ZV9pbmRleGxpc3Qocm9vdCwgcmVsLCBj aGlsZCwgJmdsb2JhbF91bmlxX2luZGV4bGlzdCk7CisJCQl9CisJCQkvKiBOb3cgd2UgaGF2ZSBh IGxpc3Qgb2YgdW5pcXVlIGluZGV4IHdoaWNoIGFyZSBleGFjdGx5IHNhbWUgb24gYWxsIGNoaWxk cmVscywKKwkJCSAqIFNldCB0aGUgVW5pcXVlS2V5IGp1c3QgbGlrZSBpdCBpcyBub24tcGFydGl0 aW9uIHRhYmxlCisJCQkgKi8KKwkJCXBvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5cyhyb290LCBy ZWwsIGdsb2JhbF91bmlxX2luZGV4bGlzdCk7CisJCX0KKwl9Cit9CisKKworLyoKKyAqIHBvcHVs YXRlX2Rpc3RpbmN0cmVsX3VuaXF1ZWtleXMKKyAqLwordm9pZAorcG9wdWxhdGVfZGlzdGluY3Ry ZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJUmVsT3B0SW5mbyAqaW5w dXRyZWwsCisJCQkJCQkJCVJlbE9wdEluZm8gKmRpc3RpbmN0cmVsKQoreworCS8qIFRoZSB1bmlx dWUga2V5IGJlZm9yZSB0aGUgZGlzdGluY3QgaXMgc3RpbGwgdmFsaWQuICovCisJZGlzdGluY3Ry ZWwtPnVuaXF1ZWtleXMgPSBsaXN0X2NvcHkoaW5wdXRyZWwtPnVuaXF1ZWtleXMpOworCWFkZF91 bmlxdWVrZXlfZnJvbV9zb3J0Z3JvdXBzKHJvb3QsIGRpc3RpbmN0cmVsLCByb290LT5wYXJzZS0+ ZGlzdGluY3RDbGF1c2UpOworfQorCisvKgorICogcG9wdWxhdGVfZ3JvdXByZWxfdW5pcXVla2V5 cworICovCit2b2lkCitwb3B1bGF0ZV9ncm91cHJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCSBSZWxPcHRJbmZvICpncm91cHJlbCwKKwkJCQkJCQkgUmVsT3B0SW5mbyAq aW5wdXRyZWwpCisKK3sKKwlRdWVyeSAqcGFyc2UgPSByb290LT5wYXJzZTsKKwlib29sIGlucHV0 X3VrZXlfYWRkZWQgPSBmYWxzZTsKKwlMaXN0Q2VsbCAqbGM7CisKKwlpZiAocmVsYXRpb25faXNf b25lcm93KGlucHV0cmVsKSkKKwl7CisJCWFkZF91bmlxdWVrZXlfZm9yX29uZXJvdyhncm91cHJl bCk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnNlLT5ncm91cGluZ1NldHMpCisJCXJldHVybjsK KworCS8qIEEgTm9ybWFsIGdyb3VwIGJ5IHdpdGhvdXQgZ3JvdXBpbmcgc2V0LiAqLworCWlmIChw YXJzZS0+Z3JvdXBDbGF1c2UpCisJeworCQkvKgorCQkgKiBDdXJyZW50IGV2ZW4gdGhlIGdyb3Vw YnkgY2xhdXNlIGlzIFVuaXF1ZSBhbHJlYWR5LCBidXQgaWYgcXVlcnkgaGFzIGFnZ3JlZgorCQkg KiBXZSBoYXZlIHRvIGNyZWF0ZSBncm91cHJlbCBzdGlsbC4gVG8ga2VlcCB0aGUgVW5xaXVlS2V5 IHNob3J0LCB3ZSB3aWxsIGNoZWNrCisJCSAqIHRoZSBVbmlxdWVLZXkgb2YgaW5wdXRfcmVsIHN0 aWxsIHZhbGlkLCBpZiBzbyB3ZSByZXVzZSBpdC4KKwkJICovCisJCWZvcmVhY2gobGMsIGlucHV0 cmVsLT51bmlxdWVrZXlzKQorCQl7CisJCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmlyc3Rfbm9kZShV bmlxdWVLZXksIGxjKTsKKwkJCWlmIChsaXN0X2lzX3N1YnNldCh1a2V5LT5leHBycywgZ3JvdXBy ZWwtPnJlbHRhcmdldC0+ZXhwcnMpKQorCQkJeworCQkJCWdyb3VwcmVsLT51bmlxdWVrZXlzID0g bGFwcGVuZChncm91cHJlbC0+dW5pcXVla2V5cywKKwkJCQkJCQkJCQkJICAgdWtleSk7CisJCQkJ aW5wdXRfdWtleV9hZGRlZCA9IHRydWU7CisJCQl9CisJCX0KKwkJaWYgKCFpbnB1dF91a2V5X2Fk ZGVkKQorCQkJLyoKKwkJCSAqIGdyb3VwIGJ5IGNsYXVzZSBtdXN0IGJlIGEgc3VwZXItc2V0IG9m IGdyb3VwcmVsLT5yZWx0YXJnZXQtPmV4cHJzIGV4Y2VwdCB0aGUKKwkJCSAqIGFnZ3JlZ2F0aW9u IGV4cHIsIHNvIGlmIHN1Y2ggZXhwcnMgaXMgdW5pcXVlIGFscmVhZHksIG5vIGJvdGhlciB0byBn ZW5lcmF0ZQorCQkJICogbmV3IHVuaXF1ZWtleSBmb3IgZ3JvdXAgYnkgZXhwcnMuCisJCQkgKi8K KwkJCWFkZF91bmlxdWVrZXlfZnJvbV9zb3J0Z3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJICBncm91 cHJlbCwKKwkJCQkJCQkJCQkgIHJvb3QtPnBhcnNlLT5ncm91cENsYXVzZSk7CisJfQorCWVsc2UK KwkJLyogSXQgaGFzIGFnZ3JlZ2F0aW9uIGJ1dCB3aXRob3V0IGEgZ3JvdXAgYnksIHNvIG9ubHkg b25lIHJvdyByZXR1cm5lZCAqLworCQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coZ3JvdXByZWwp OworfQorCisvKgorICogc2ltcGxlX2NvcHlfdW5pcXVla2V5cworICogVXNpbmcgYSBmdW5jdGlv biBmb3IgdGhlIG9uZS1saW5lIGNvZGUgbWFrZXMgdXMgZWFzeSB0byBjaGVjayB3aGVyZSB3ZSBz aW1wbHkKKyAqIGNvcGllZCB0aGUgdW5pcXVla2V5LgorICovCit2b2lkCitzaW1wbGVfY29weV91 bmlxdWVrZXlzKFJlbE9wdEluZm8gKm9sZHJlbCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqbmV3cmVs KQoreworCW5ld3JlbC0+dW5pcXVla2V5cyA9IG9sZHJlbC0+dW5pcXVla2V5czsKK30KKworLyoK KyAqICBwb3B1bGF0ZV91bmlvbnJlbF91bmlxdWVrZXlzCisgKi8KK3ZvaWQKK3BvcHVsYXRlX3Vu aW9ucmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJICBSZWxPcHRJbmZv ICp1bmlvbnJlbCkKK3sKKwlMaXN0Q2VsbAkqbGM7CisJTGlzdAkqZXhwcnMgPSBOSUw7CisKKwlB c3NlcnQodW5pb25yZWwtPnVuaXF1ZWtleXMgPT0gTklMKTsKKworCWZvcmVhY2gobGMsIHVuaW9u cmVsLT5yZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBsZmly c3QobGMpKTsKKwl9CisKKwlpZiAoZXhwcnMgPT0gTklMKQorCQkvKiBTUUw6IHNlbGVjdCB1bmlv biBzZWxlY3Q7IGlzIHZhbGlkLCB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBoZXJlLiAqLworCQlhZGRf dW5pcXVla2V5X2Zvcl9vbmVyb3codW5pb25yZWwpOworCWVsc2UKKwkJdW5pb25yZWwtPnVuaXF1 ZWtleXMgPSBsYXBwZW5kKHVuaW9ucmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJICAgbWFrZVVu aXF1ZUtleShleHBycyxmYWxzZSkpOworCit9CisKKy8qCisgKiBwb3B1bGF0ZV9qb2lucmVsX3Vu aXF1ZWtleXMKKyAqCisgKiBwb3B1bGF0ZSB1bmlxdWVrZXlzIGZvciBqb2lucmVsLiBXZSB3aWxs IGNoZWNrIGVhY2ggcmVsYXRpb24gdG8gc2VlIGlmIGl0cworICogVW5pcXVlS2V5IGlzIHN0aWxs IHZhbGlkIHZpYSBpbm5lcnJlbF9rZWVwc191bmlxdWUsIGlmIHNvLCB3ZSBhZGQgaXQgdG8KKyAq IGpvaW5yZWwuICBUaGUgbXVsdGlfbnVsbHZhbHMgZmllbGQgd2lsbCBiZSBjaGFuZ2VkIHRvIHRy dWUgZm9yIHNvbWUgb3V0ZXIKKyAqIGpvaW4gY2FzZXMgYW5kIG9uZS1yb3cgVW5pcXVlS2V5IG5l ZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBub3JtYWwgVW5pcXVlS2V5CisgKiBmb3IgdGhlIHNhbWUg Y2FzZSBhcyB3ZWxsLgorICogRm9yIHRoZSB1bmlxdWVrZXkgaW4gZWl0aGVyIGJhc2VyZWwgd2hp Y2ggY2FuJ3QgYmUgdW5pcXVlIGFmdGVyIGpvaW4sIHdlIHN0aWxsCisgKiBjaGVjayB0byBzZWUg aWYgY29tYmluYXRpb24gb2YgVW5pcXVlS2V5cyBmcm9tIGJvdGggc2lkZSBpcyBzdGlsbCB1c2Vm dWwgZm9yIHVzLgorICogaWYgeWVzLCB3ZSBhZGQgaXQgdG8gam9pbnJlbCBhcyB3ZWxsLgorICov Cit2b2lkCitwb3B1bGF0ZV9qb2lucmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdElu Zm8gKmlubmVycmVsLAorCQkJCQkJCUxpc3QgKnJlc3RyaWN0bGlzdCwgSm9pblR5cGUgam9pbnR5 cGUpCit7CisJTGlzdENlbGwgKmxjLCAqbGMyOworCUxpc3QJKmNsYXVzZV9saXN0ID0gTklMOwor CUxpc3QJKm91dGVycmVsX3VrZXlfY3R4OworCUxpc3QJKmlubmVycmVsX3VrZXlfY3R4OworCWJv b2wJaW5uZXJfb25lcm93LCBvdXRlcl9vbmVyb3c7CisJYm9vbAltZXJnZWpvaW5fYWxsb3dlZDsK KworCS8qIENhcmUgYWJvdXQgdGhlIG91dGVycmVsIHJlbGF0aW9uIG9ubHkgZm9yIFNFTUkvQU5U SSBqb2luICovCisJaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSB8fCBqb2ludHlwZSA9PSBKT0lO X0FOVEkpCisJeworCQlmb3JlYWNoKGxjLCBvdXRlcnJlbC0+dW5pcXVla2V5cykKKwkJeworCQkJ VW5pcXVlS2V5CSp1bmlxdWVrZXkgPSBsZmlyc3Rfbm9kZShVbmlxdWVLZXksIGxjKTsKKwkJCWlm IChsaXN0X2lzX3N1YnNldCh1bmlxdWVrZXktPmV4cHJzLCBqb2lucmVsLT5yZWx0YXJnZXQtPmV4 cHJzKSkKKwkJCQlqb2lucmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChqb2lucmVsLT51bmlxdWVr ZXlzLCB1bmlxdWVrZXkpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlBc3NlcnQoam9pbnR5cGUg PT0gSk9JTl9MRUZUIHx8IGpvaW50eXBlID09IEpPSU5fRlVMTCB8fCBqb2ludHlwZSA9PSBKT0lO X0lOTkVSKTsKKworCS8qIEZhc3QgcGF0aCAqLworCWlmIChpbm5lcnJlbC0+dW5pcXVla2V5cyA9 PSBOSUwgfHwgb3V0ZXJyZWwtPnVuaXF1ZWtleXMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpbm5l cl9vbmVyb3cgPSByZWxhdGlvbl9pc19vbmVyb3coaW5uZXJyZWwpOworCW91dGVyX29uZXJvdyA9 IHJlbGF0aW9uX2lzX29uZXJvdyhvdXRlcnJlbCk7CisKKwlvdXRlcnJlbF91a2V5X2N0eCA9IGlu aXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChvdXRlcnJlbCk7CisJaW5uZXJyZWxf dWtleV9jdHggPSBpbml0aWxpbHplX3VuaXF1ZWNvbnRleHRfZm9yX2pvaW5yZWwoaW5uZXJyZWwp OworCisJY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMocm9vdCwgam9pbnJl bCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCQkJCSAgIHJlc3RyaWN0bGlzdCwgam9pbnR5 cGUsCisJCQkJCQkJCQkJICAgJm1lcmdlam9pbl9hbGxvd2VkKTsKKworCWlmIChpbm5lcnJlbF9r ZWVwc191bmlxdWUocm9vdCwgaW5uZXJyZWwsIG91dGVycmVsLCBjbGF1c2VfbGlzdCwgdHJ1ZSAv KiByZXZlcnNlICovKSkKKwl7CisJCWJvb2wgb3V0ZXJfaW1wYWN0ID0gam9pbnR5cGUgPT0gSk9J Tl9GVUxMOworCQlmb3JlYWNoKGxjLCBvdXRlcnJlbF91a2V5X2N0eCkKKwkJeworCQkJVW5pcXVl S2V5Q29udGV4dCBjdHggPSAoVW5pcXVlS2V5Q29udGV4dClsZmlyc3QobGMpOworCisJCQlpZiAo IWxpc3RfaXNfc3Vic2V0KGN0eC0+dW5pcXVla2V5LT5leHBycywgam9pbnJlbC0+cmVsdGFyZ2V0 LT5leHBycykpCisJCQl7CisJCQkJY3R4LT51c2VmdWwgPSBmYWxzZTsKKwkJCQljb250aW51ZTsK KwkJCX0KKworCQkJLyogT3V0ZXIgcmVsYXRpb24gaGFzIG9uZSByb3csIGFuZCB0aGUgdW5pcXVl IGtleSBpcyBub3QgZHVwbGljYXRlZCBhZnRlciBqb2luLAorCQkJICogdGhlIGpvaW5yZWwgd2ls bCBzdGlsbCBoYXMgb25lIHJvdyB1bmxlc3MgdGhlIGpvaW50eXBlID09IEpPSU5fRlVMTC4KKwkJ CSAqLworCQkJaWYgKG91dGVyX29uZXJvdyAmJiAhb3V0ZXJfaW1wYWN0KQorCQkJeworCQkJCWFk ZF91bmlxdWVrZXlfZm9yX29uZXJvdyhqb2lucmVsKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQll bHNlIGlmIChvdXRlcl9vbmVyb3cpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGUgb25lcm93IG91 dGVycmVsIGJlY29tZXMgbXVsdGkgcm93cyBhbmQgbXVsdGlfbnVsbHZhbHMKKwkJCQkgKiB3aWxs IGJlIGNoYW5nZWQgdG8gdHJ1ZS4gV2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgZXhwcnMgY29ycmVj dGx5IHNpbmNlIGl0CisJCQkJICogY2FuJ3QgYmUgTklMIGFueSBtb3JlLgorCQkJCSAqLworCQkJ CUxpc3RDZWxsICpsYzI7CisJCQkJZm9yZWFjaChsYzIsIGdldF9leHByc19mcm9tX3VuaXF1ZWtl eShqb2lucmVsLCBvdXRlcnJlbCwgTlVMTCkpCisJCQkJeworCQkJCQlqb2lucmVsLT51bmlxdWVr ZXlzID0gbGFwcGVuZChqb2lucmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkJICBtYWtlVW5p cXVlS2V5KGxmaXJzdChsYzIpLCB0cnVlKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJewor CQkJCWlmICghY3R4LT51bmlxdWVrZXktPm11bHRpX251bGx2YWxzICYmIG91dGVyX2ltcGFjdCkK KwkJCQkJLyogQ2hhbmdlIG11bHRpX251bGx2YWxzIHRvIHRydWUgZHVlIHRvIHRoZSBmdWxsIGpv aW4uICovCisJCQkJCWpvaW5yZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1 ZWtleXMsCisJCQkJCQkJCQkJCQkgIG1ha2VVbmlxdWVLZXkoY3R4LT51bmlxdWVrZXktPmV4cHJz LCB0cnVlKSk7CisJCQkJZWxzZQorCQkJCQkvKiBKdXN0IHJldXNlIGl0ICovCisJCQkJCWpvaW5y ZWwtPnVuaXF1ZWtleXMgPSBsYXBwZW5kKGpvaW5yZWwtPnVuaXF1ZWtleXMsCisJCQkJCQkJCQkJ CQkgIGN0eC0+dW5pcXVla2V5KTsKKwkJCX0KKwkJCWN0eC0+YWRkZWRfdG9fam9pbnJlbCA9IHRy dWU7CisJCX0KKwl9CisKKwlpZiAoaW5uZXJyZWxfa2VlcHNfdW5pcXVlKHJvb3QsIG91dGVycmVs LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QsIGZhbHNlKSkKKwl7CisJCWJvb2wgb3V0ZXJfaW1wYWN0 ID0gam9pbnR5cGUgPT0gSk9JTl9GVUxMIHx8IGpvaW50eXBlID09IEpPSU5fTEVGVDs7CisKKwkJ Zm9yZWFjaChsYywgaW5uZXJyZWxfdWtleV9jdHgpCisJCXsKKwkJCVVuaXF1ZUtleUNvbnRleHQg Y3R4ID0gKFVuaXF1ZUtleUNvbnRleHQpbGZpcnN0KGxjKTsKKworCQkJaWYgKCFsaXN0X2lzX3N1 YnNldChjdHgtPnVuaXF1ZWtleS0+ZXhwcnMsIGpvaW5yZWwtPnJlbHRhcmdldC0+ZXhwcnMpKQor CQkJeworCQkJCWN0eC0+dXNlZnVsID0gZmFsc2U7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJ CWlmIChpbm5lcl9vbmVyb3cgJiYgICFvdXRlcl9pbXBhY3QpCisJCQl7CisJCQkJYWRkX3VuaXF1 ZWtleV9mb3Jfb25lcm93KGpvaW5yZWwpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWVsc2UgaWYg KGlubmVyX29uZXJvdykKKwkJCXsKKwkJCQlMaXN0Q2VsbCAqbGMyOworCQkJCWZvcmVhY2gobGMy LCBnZXRfZXhwcnNfZnJvbV91bmlxdWVrZXkoam9pbnJlbCwgaW5uZXJyZWwsIE5VTEwpKQorCQkJ CXsKKwkJCQkJam9pbnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoam9pbnJlbC0+dW5pcXVla2V5 cywKKwkJCQkJCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShsZmlyc3QobGMyKSwgdHJ1ZSkpOworCQkJ CX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoIWN0eC0+dW5pcXVla2V5LT5tdWx0aV9u dWxsdmFscyAmJiBvdXRlcl9pbXBhY3QpCisJCQkJCS8qIE5lZWQgdG8gY2hhbmdlIG11bHRpX251 bGx2YWxzIHRvIHRydWUgZHVlIHRvIHRoZSBvdXRlciBqb2luLiAqLworCQkJCQlqb2lucmVsLT51 bmlxdWVrZXlzID0gbGFwcGVuZChqb2lucmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkJICBt YWtlVW5pcXVlS2V5KGN0eC0+dW5pcXVla2V5LT5leHBycywKKwkJCQkJCQkJCQkJCQkJCQl0cnVl KSk7CisJCQkJZWxzZQorCQkJCQlqb2lucmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChqb2lucmVs LT51bmlxdWVrZXlzLAorCQkJCQkJCQkJCQkJICBjdHgtPnVuaXF1ZWtleSk7CisKKwkJCX0KKwkJ CWN0eC0+YWRkZWRfdG9fam9pbnJlbCA9IHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBj b21iaW5hdGlvbiBvZiB0aGUgVW5pcXVlS2V5IGZyb20gYm90aCBzaWRlcyBpcyB1bmlxdWUgYXMg d2VsbCByZWdhcmRsZXNzCisJICogb2Ygam9pbiB0eXBlLCBidXQgbm8gYm90aGVyIHRvIGFkZCBp dCBpZiBpdHMgc3Vic2V0IGhhcyBiZWVuIGFkZGVkIHRvIGpvaW5yZWwKKwkgKiBhbHJlYWR5IG9y IGl0IGlzIG5vdCB1c2VmdWwgZm9yIHRoZSBqb2lucmVsLgorCSAqLworCWZvcmVhY2gobGMsIG91 dGVycmVsX3VrZXlfY3R4KQorCXsKKwkJVW5pcXVlS2V5Q29udGV4dCBjdHgxID0gKFVuaXF1ZUtl eUNvbnRleHQpIGxmaXJzdChsYyk7CisJCWlmIChjdHgxLT5hZGRlZF90b19qb2lucmVsIHx8ICFj dHgxLT51c2VmdWwpCisJCQljb250aW51ZTsKKwkJZm9yZWFjaChsYzIsIGlubmVycmVsX3VrZXlf Y3R4KQorCQl7CisJCQlVbmlxdWVLZXlDb250ZXh0IGN0eDIgPSAoVW5pcXVlS2V5Q29udGV4dCkg bGZpcnN0KGxjMik7CisJCQlpZiAoY3R4Mi0+YWRkZWRfdG9fam9pbnJlbCB8fCAhY3R4Mi0+dXNl ZnVsKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGFkZF9jb21iaW5lZF91bmlxdWVrZXkoam9pbnJl bCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCQkJICAgY3R4MS0+dW5pcXVla2V5LCBjdHgy LT51bmlxdWVrZXksCisJCQkJCQkJCQkgICBqb2ludHlwZSkpCisJCQkJLyogSWYgd2Ugc2V0IGEg b25lcm93IFVuaXF1ZUtleSB0byBqb2lucmVsLCB3ZSBkb24ndCBuZWVkIG90aGVyLiAqLworCQkJ CXJldHVybjsKKwkJfQorCX0KK30KKworCisvKgorICogY29udmVydF9zdWJxdWVyeV91bmlxdWVr ZXlzCisgKgorICogQ292ZXJ0IHRoZSBVbmlxdWVLZXkgaW4gc3VicXVlcnkgdG8gb3V0ZXIgcmVs YXRpb24uCisgKi8KK3ZvaWQgY29udmVydF9zdWJxdWVyeV91bmlxdWVrZXlzKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqY3VycmVsLAorCQkJCQkJCQkgUmVsT3B0SW5m byAqc3ViX2ZpbmFsX3JlbCkKK3sKKwlMaXN0Q2VsbAkqbGM7CisKKwlpZiAoc3ViX2ZpbmFsX3Jl bC0+dW5pcXVla2V5cyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChyZWxhdGlvbl9pc19vbmVy b3coc3ViX2ZpbmFsX3JlbCkpCisJeworCQlhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3coY3VycmVs KTsKKwkJcmV0dXJuOworCX0KKworCUFzc2VydChjdXJyZWwtPnN1YnJvb3QgIT0gTlVMTCk7CisK Kwlmb3JlYWNoKGxjLCBzdWJfZmluYWxfcmVsLT51bmlxdWVrZXlzKQorCXsKKwkJVW5pcXVlS2V5 ICp1a2V5ID0gbGZpcnN0X25vZGUoVW5pcXVlS2V5LCBsYyk7CisJCUxpc3RDZWxsCSpsYzsKKwkJ TGlzdAkqZXhwcnMgPSBOSUw7CisJCWJvb2wJdWtleV91c2VmdWwgPSB0cnVlOworCisJCS8qIE9u ZSByb3cgY2FzZSBpcyBoYW5kbGVkIGFib3ZlICovCisJCUFzc2VydCh1a2V5LT5leHBycyAhPSBO SUwpOworCQlmb3JlYWNoKGxjLCB1a2V5LT5leHBycykKKwkJeworCQkJVmFyICp2YXI7CisJCQlU YXJnZXRFbnRyeSAqdGxlID0gdGxpc3RfbWVtYmVyKGxmaXJzdChsYyksCisJCQkJCQkJCQkJCWN1 cnJlbC0+c3Vicm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJCWlmICh0bGUgPT0gTlVMTCkKKwkJ CXsKKwkJCQl1a2V5X3VzZWZ1bCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQkJdmFyID0g ZmluZF92YXJfZm9yX3N1YnF1ZXJ5X3RsZShjdXJyZWwsIHRsZSk7CisJCQlpZiAodmFyID09IE5V TEwpCisJCQl7CisJCQkJdWtleV91c2VmdWwgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWV4cHJzID0gbGFwcGVuZChleHBycywgdmFyKTsKKwkJfQorCisJCWlmICh1a2V5X3VzZWZ1bCkK KwkJCWN1cnJlbC0+dW5pcXVla2V5cyA9IGxhcHBlbmQoY3VycmVsLT51bmlxdWVrZXlzLAorCQkJ CQkJCQkJCSBtYWtlVW5pcXVlS2V5KGV4cHJzLAorCQkJCQkJCQkJCQkJCSAgIHVrZXktPm11bHRp X251bGx2YWxzKSk7CisKKwl9Cit9CisKKy8qCisgKiBpbm5lcnJlbF9rZWVwc191bmlxdWUKKyAq CisgKiBDaGVjayBpZiBVbmlxdWUga2V5IG9mIHRoZSBpbm5lcnJlbCBpcyB2YWxpZCBhZnRlciBq b2luLiBpbm5lcnJlbCdzIFVuaXF1ZUtleQorICogd2lsbCBiZSBzdGlsbCB2YWxpZCBpZiBpbm5l cnJlbCdzIGFueS1jb2x1bW4gbWVyZ2VvcCBvdXRyZXJlbCdzIHVuaXF1ZWtleQorICogZXhpc3Rz IGluIGNsYXVzZV9saXN0LgorICoKKyAqIE5vdGU6IHRoZSBjbGF1c2VfbGlzdCBtdXN0IGJlIGEg bGlzdCBvZiBtZXJnZWFibGUgcmVzdHJpY3RpbmZvIGFscmVhZHkuCisgKi8KK3N0YXRpYyBib29s Citpbm5lcnJlbF9rZWVwc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSAgUmVsT3B0 SW5mbyAqb3V0ZXJyZWwsCisJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSAgTGlz dCAqY2xhdXNlX2xpc3QsCisJCQkJCSAgYm9vbCByZXZlcnNlKQoreworCUxpc3RDZWxsCSpsYywg KmxjMiwgKmxjMzsKKworCWlmIChvdXRlcnJlbC0+dW5pcXVla2V5cyA9PSBOSUwgfHwgaW5uZXJy ZWwtPnVuaXF1ZWtleXMgPT0gTklMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDaGVjayBpZiB0 aGVyZSBpcyBvdXRlcnJlbCdzIHVuaXF1ZWtleSBpbiBtZXJnZWFibGUgY2xhdXNlLiAqLworCWZv cmVhY2gobGMsIG91dGVycmVsLT51bmlxdWVrZXlzKQorCXsKKwkJTGlzdAkqb3V0ZXJfdXFfZXhw cnMgPSBsZmlyc3Rfbm9kZShVbmlxdWVLZXksIGxjKS0+ZXhwcnM7CisJCWJvb2wgY2xhdXNlbGlz dF9tYXRjaHNfYWxsX2V4cHJzID0gdHJ1ZTsKKwkJZm9yZWFjaChsYzIsIG91dGVyX3VxX2V4cHJz KQorCQl7CisJCQlOb2RlICpvdXRlcl91cV9leHByID0gbGZpcnN0KGxjMik7CisJCQlib29sIGZp bmRfdXFfZXhwcl9pbl9jbGF1c2VsaXN0ID0gZmFsc2U7CisJCQlmb3JlYWNoKGxjMywgY2xhdXNl X2xpc3QpCisJCQl7CisJCQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3Ry aWN0SW5mbywgbGMzKTsKKwkJCQlOb2RlICpvdXRlcl9leHByOworCQkJCWlmIChyZXZlcnNlKQor CQkJCQlvdXRlcl9leHByID0gcmluZm8tPm91dGVyX2lzX2xlZnQgPyBnZXRfcmlnaHRvcChyaW5m by0+Y2xhdXNlKSA6IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7CisJCQkJZWxzZQorCQkJCQlv dXRlcl9leHByID0gcmluZm8tPm91dGVyX2lzX2xlZnQgPyBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1 c2UpIDogZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSk7CisJCQkJaWYgKGVxdWFsKG91dGVyX2V4 cHIsIG91dGVyX3VxX2V4cHIpKQorCQkJCXsKKwkJCQkJZmluZF91cV9leHByX2luX2NsYXVzZWxp c3QgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWZpbmRfdXFfZXhw cl9pbl9jbGF1c2VsaXN0KQorCQkJeworCQkJCS8qIE5vIG5lZWQgdG8gY2hlY2sgdGhlIG5leHQg ZXhwcnMgaW4gdGhlIGN1cnJlbnQgdW5pcXVla2V5ICovCisJCQkJY2xhdXNlbGlzdF9tYXRjaHNf YWxsX2V4cHJzID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoY2xhdXNl bGlzdF9tYXRjaHNfYWxsX2V4cHJzKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxz ZTsKK30KKworCisvKgorICogcmVsYXRpb25faXNfb25lcm93CisgKiBDaGVjayBpZiBpdCBpcyBh IG9uZS1yb3cgcmVsYXRpb24gYnkgY2hlY2tpbmcgVW5pcXVlS2V5LgorICovCitib29sCityZWxh dGlvbl9pc19vbmVyb3coUmVsT3B0SW5mbyAqcmVsKQoreworCVVuaXF1ZUtleSAqdWtleTsKKwlp ZiAocmVsLT51bmlxdWVrZXlzID09IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCXVrZXkgPSBsaW5p dGlhbF9ub2RlKFVuaXF1ZUtleSwgcmVsLT51bmlxdWVrZXlzKTsKKwlyZXR1cm4gdWtleS0+ZXhw cnMgPT0gTklMICYmIGxpc3RfbGVuZ3RoKHJlbC0+dW5pcXVla2V5cykgPT0gMTsKK30KKworLyoK KyAqIHJlbGF0aW9uX2hhc191bmlxdWVrZXlzX2ZvcgorICoJCVJldHVybnMgdHJ1ZSBpZiB3ZSBo YXZlIHByb29mcyB0aGF0ICdyZWwnIGNhbm5vdCByZXR1cm4gbXVsdGlwbGUgcm93cyB3aXRoCisg KgkJdGhlIHNhbWUgdmFsdWVzIGluIGVhY2ggb2YgJ2V4cHJzJy4gIE90aGVyd2lzZSByZXR1cm5z IGZhbHNlLgorICovCitib29sCityZWxhdGlvbl9oYXNfdW5pcXVla2V5c19mb3IoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQlMaXN0ICpleHBycywgYm9vbCBhbGxv d19tdWx0aW51bGxzKQoreworCUxpc3RDZWxsICpsYzsKKworCS8qCisJICogRm9yIFVuaXF1ZUtl eS0+b25lcm93IGNhc2UsIHRoZSB1bmlxdWVrZXktPmV4cHJzIGlzIGVtcHR5IGFzIHdlbGwKKwkg KiBzbyB3ZSBjYW4ndCByZWx5IG9uIGxpc3RfaXNfc3Vic2V0IHRvIGhhbmRsZSB0aGlzIHNwZWNp YWwgY2FzZXMKKwkgKi8KKwlpZiAoZXhwcnMgPT0gTklMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlm b3JlYWNoKGxjLCByZWwtPnVuaXF1ZWtleXMpCisJeworCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmly c3Rfbm9kZShVbmlxdWVLZXksIGxjKTsKKwkJaWYgKHVrZXktPm11bHRpX251bGx2YWxzICYmICFh bGxvd19tdWx0aW51bGxzKQorCQkJY29udGludWU7CisJCWlmIChsaXN0X2lzX3N1YnNldCh1a2V5 LT5leHBycywgZXhwcnMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30K KworCisvKgorICogZ2V0X2V4cHJzX2Zyb21fdW5pcXVlaW5kZXgKKyAqCisgKiBSZXR1cm4gYSBs aXN0IG9mIGV4cHJzIHdoaWNoIGlzIHVuaXF1ZS4gc2V0IHVzZWZ1bCB0byBmYWxzZSBpZiB0aGlz CisgKiB1bmlxdWUgaW5kZXggaXMgbm90IHVzZWZ1bCBmb3IgdXMuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK2dldF9leHByc19mcm9tX3VuaXF1ZWluZGV4KEluZGV4T3B0SW5mbyAqdW5pcXVlX2luZGV4 LAorCQkJCQkJICAgTGlzdCAqY29uc3RfZXhwcnMsCisJCQkJCQkgICBMaXN0ICpjb25zdF9leHBy X29wZmFtaWxpZXMsCisJCQkJCQkgICBCaXRtYXBzZXQgKnVzZWRfdmFyYXR0cnMsCisJCQkJCQkg ICBib29sICp1c2VmdWwsCisJCQkJCQkgICBib29sICptdWx0aV9udWxsdmFscykKK3sKKwlMaXN0 CSpleHBycyA9IE5JTDsKKwlMaXN0Q2VsbAkqaW5kZXhwcl9pdGVtOworCWludAljID0gMDsKKwor CSp1c2VmdWwgPSB0cnVlOworCSptdWx0aV9udWxsdmFscyA9IGZhbHNlOworCisJaW5kZXhwcl9p dGVtID0gbGlzdF9oZWFkKHVuaXF1ZV9pbmRleC0+aW5kZXhwcnMpOworCWZvcihjID0gMDsgYyA8 IHVuaXF1ZV9pbmRleC0+bmNvbHVtbnM7IGMrKykKKwl7CisJCWludCBhdHRyID0gdW5pcXVlX2lu ZGV4LT5pbmRleGtleXNbY107CisJCUV4cHIgKmV4cHI7CisJCWJvb2wJbWF0Y2hlZF9jb25zdCA9 IGZhbHNlOworCQlMaXN0Q2VsbAkqbGMxLCAqbGMyOworCisJCWlmKGF0dHIgPiAwKQorCQl7CisJ CQlleHByID0gbGlzdF9udGhfbm9kZShUYXJnZXRFbnRyeSwgdW5pcXVlX2luZGV4LT5pbmRleHRs aXN0LCBjKS0+ZXhwcjsKKwkJfQorCQllbHNlIGlmIChhdHRyID09IDApCisJCXsKKwkJCS8qIEV4 cHJlc3Npb24gaW5kZXggKi8KKwkJCWV4cHIgPSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWlu ZGV4cHJfaXRlbSA9IGxuZXh0KHVuaXF1ZV9pbmRleC0+aW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7 CisJCX0KKwkJZWxzZSAvKiBhdHRyIDwgMCAqLworCQl7CisJCQkvKiBJbmRleCBvbiBzeXN0ZW0g Y29sdW1uIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCX0KKworCQkv KgorCQkgKiBDaGVjayBpbmRleF9jb2wgPSBDb25zdCBjYXNlIHdpdGggcmVnYXJkaW5nIHRvIG9w ZmFtaWx5IGNoZWNraW5nCisJCSAqIElmIHdlIGNhbiByZW1vdmUgdGhlIGluZGV4X2NvbCBmcm9t IHRoZSBmaW5hbCBVbmlxdWVLZXktPmV4cHJzLgorCQkgKi8KKwkJZm9yYm90aChsYzEsIGNvbnN0 X2V4cHJzLCBsYzIsIGNvbnN0X2V4cHJfb3BmYW1pbGllcykKKwkJeworCQkJaWYgKGxpc3RfbWVt YmVyX29pZCgoTGlzdCAqKWxmaXJzdChsYzIpLCB1bmlxdWVfaW5kZXgtPm9wZmFtaWx5W2NdKQor CQkJCSYmIG1hdGNoX2luZGV4X3RvX29wZXJhbmQoKE5vZGUgKikgbGZpcnN0KGxjMSksIGMsIHVu aXF1ZV9pbmRleCkpCisJCQl7CisJCQkJbWF0Y2hlZF9jb25zdCA9IHRydWU7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hlZF9jb25zdCkKKwkJCWNvbnRpbnVlOworCisJCS8q IENoZWNrIGlmIHRoZSBpbmRleGVkIGV4cHIgaXMgdXNlZCBpbiByZWwgKi8KKwkJaWYgKGF0dHIg PiAwKQorCQl7CisJCQkvKgorCQkJICogTm9ybWFsIEluZGV4ZWQgY29sdW1uLCBpZiB0aGUgY29s IGlzIG5vdCB1c2VkLCB0aGVuIHRoZSBpbmRleCBpcyB1c2VsZXNzCisJCQkgKiBmb3IgdW5pcXVl a2V5LgorCQkJICovCisJCQlhdHRyIC09IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1i ZXI7CisKKwkJCWlmICghYm1zX2lzX21lbWJlcihhdHRyLCB1c2VkX3ZhcmF0dHJzKSkKKwkJCXsK KwkJCQkqdXNlZnVsID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAo IWxpc3RfbWVtYmVyKHVuaXF1ZV9pbmRleC0+cmVsLT5yZWx0YXJnZXQtPmV4cHJzLCBleHByKSkK KwkJeworCQkJLyogRXhwcmVzc2lvbiBpbmRleCBidXQgdGhlIGV4cHJlc3Npb24gaXMgbm90IHVz ZWQgaW4gcmVsICovCisJCQkqdXNlZnVsID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCisJCS8q IGNoZWNrIG5vdCBudWxsIHByb3BlcnR5LiAqLworCQlpZiAoYXR0ciA9PSAwKQorCQl7CisJCQkv KiBXZSBuZXZlciBrbm93IGlmIGEgZXhwcmVzc2lvbiB5aWVsZHMgbnVsbCBvciBub3QgKi8KKwkJ CSptdWx0aV9udWxsdmFscyA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoIWJtc19pc19tZW1iZXIo YXR0ciwgdW5pcXVlX2luZGV4LT5yZWwtPm5vdG51bGxhdHRycykKKwkJCQkgJiYgIWJtc19pc19t ZW1iZXIoMCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJCSAg IHVuaXF1ZV9pbmRleC0+cmVsLT5ub3RudWxsYXR0cnMpKQorCQl7CisJCQkqbXVsdGlfbnVsbHZh bHMgPSB0cnVlOworCQl9CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBleHByKTsKKwl9CisJ cmV0dXJuIGV4cHJzOworfQorCisKKy8qCisgKiBhZGRfdW5pcXVla2V5X2Zvcl9vbmVyb3cKKyAq IElmIHdlIGFyZSBzdXJlIHRoYXQgdGhlIHJlbGF0aW9uIG9ubHkgcmV0dXJucyBvbmUgcm93LCB0 aGVuIGFsbCB0aGUgY29sdW1ucworICogYXJlIHVuaXF1ZS4gSG93ZXZlciB3ZSBkb24ndCBuZWVk IHRvIGNyZWF0ZSBVbmlxdWVLZXkgZm9yIGV2ZXJ5IGNvbHVtbiwgd2UKKyAqIGp1c3Qgc2V0IGV4 cHJzID0gTklMIGFuZCBvdmVyd3JpdGVzIGFsbCB0aGUgb3RoZXIgVW5pcXVlS2V5IG9uIHRoaXMg UmVsT3B0SW5mbworICogc2luY2UgdGhpcyBvbmUgaGFzIHN0cm9uZ2VzdCBzZW1hbnRpY3MuCisg Ki8KK3ZvaWQKK2FkZF91bmlxdWVrZXlfZm9yX29uZXJvdyhSZWxPcHRJbmZvICpyZWwpCit7CisJ LyoKKwkgKiBXZSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIFVuaXF1ZUtleSBvbiBwdXJwb3NlIHNp bmNlIHRoaXMgb25lIGhhcyB0aGUKKwkgKiBzdHJvbmdlc3Qgc2VtYW50aWMuCisJICovCisJcmVs LT51bmlxdWVrZXlzID0gbGlzdF9tYWtlMShtYWtlVW5pcXVlS2V5KE5JTCwgZmFsc2UpKTsKK30K KworCisvKgorICogaW5pdGlsaWx6ZV91bmlxdWVjb250ZXh0X2Zvcl9qb2lucmVsCisgKiBSZXR1 cm4gYSBMaXN0IG9mIFVuaXF1ZUtleUNvbnRleHQgZm9yIGFuIGlucHV0cmVsCisgKi8KK3N0YXRp YyBMaXN0ICoKK2luaXRpbGlsemVfdW5pcXVlY29udGV4dF9mb3Jfam9pbnJlbChSZWxPcHRJbmZv ICppbnB1dHJlbCkKK3sKKwlMaXN0CSpyZXMgPSBOSUw7CisJTGlzdENlbGwgKmxjOworCWZvcmVh Y2gobGMsICBpbnB1dHJlbC0+dW5pcXVla2V5cykKKwl7CisJCVVuaXF1ZUtleUNvbnRleHQgY29u dGV4dDsKKwkJY29udGV4dCA9IHBhbGxvYyhzaXplb2Yoc3RydWN0IFVuaXF1ZUtleUNvbnRleHRE YXRhKSk7CisJCWNvbnRleHQtPnVuaXF1ZWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMp OworCQljb250ZXh0LT5hZGRlZF90b19qb2lucmVsID0gZmFsc2U7CisJCWNvbnRleHQtPnVzZWZ1 bCA9IHRydWU7CisJCXJlcyA9IGxhcHBlbmQocmVzLCBjb250ZXh0KTsKKwl9CisJcmV0dXJuIHJl czsKK30KKworCisvKgorICogZ2V0X2V4cHJzX2Zyb21fdW5pcXVla2V5CisgKglVbmlmeSB0aGUg d2F5IG9mIGdldCBMaXN0IG9mIGV4cHJzIGZyb20gYSBvbmUtcm93IFVuaXF1ZUtleSBvcgorICog bm9ybWFsIFVuaXF1ZUtleS4gZm9yIHRoZSBvbmVyb3cgY2FzZSwgZXZlcnkgZXhwciBpbiByZWwx IGlzIGEgdmFsaWQKKyAqIFVuaXF1ZUtleS4gUmV0dXJuIGEgTGlzdCBvZiBleHBycy4KKyAqCisg KiByZWwxOiBUaGUgcmVsYXRpb24gd2hpY2ggeW91IHdhbnQgdG8gZ2V0IHRoZSBleHBycy4KKyAq IHVrZXk6IFRoZSBVbmlxdWVLZXkgeW91IHdhbnQgdG8gZ2V0IHRoZSBleHBycy4KKyAqLworc3Rh dGljIExpc3QgKgorZ2V0X2V4cHJzX2Zyb21fdW5pcXVla2V5KFJlbE9wdEluZm8gKmpvaW5yZWws IFJlbE9wdEluZm8gKnJlbDEsIFVuaXF1ZUtleSAqdWtleSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisJ Ym9vbCBvbmVyb3cgPSByZWwxICE9IE5VTEwgJiYgcmVsYXRpb25faXNfb25lcm93KHJlbDEpOwor CisJTGlzdAkqcmVzID0gTklMOworCUFzc2VydChvbmVyb3cgfHwgdWtleSk7CisJaWYgKG9uZXJv dykKKwl7CisJCS8qIE9ubHkgY2FyZXMgYWJvdXQgdGhlIGV4cHJzIHN0aWxsIGV4aXN0IGluIGpv aW5yZWwgKi8KKwkJZm9yZWFjaChsYywgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwkJewor CQkJQml0bWFwc2V0ICpyZWxpZHMgPSBwdWxsX3Zhcm5vcyhsZmlyc3QobGMpKTsKKwkJCWlmIChi bXNfaXNfc3Vic2V0KHJlbGlkcywgcmVsMS0+cmVsaWRzKSkKKwkJCXsKKwkJCQlyZXMgPSBsYXBw ZW5kKHJlcywgbGlzdF9tYWtlMShsZmlyc3QobGMpKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQor CXsKKwkJcmVzID0gbGlzdF9tYWtlMSh1a2V5LT5leHBycyk7CisJfQorCXJldHVybiByZXM7Cit9 CisKKy8qCisgKiBQYXJ0aXRpb25lZCB0YWJsZSBVbmlxdWUgS2V5cy4KKyAqIFRoZSBwYXJ0aXRp b24gdGFibGUgdW5pcXVlIGtleSBpcyBtYWludGFpbmVkIGFzOgorICogMS4gVGhlIGluZGV4IG11 c3QgYmUgdW5pcXVlIGFzIHVzdWFsLgorICogMi4gVGhlIGluZGV4IG11c3QgY29udGFpbnMgcGFy dGl0aW9uIGtleS4KKyAqIDMuIFRoZSBpbmRleCBtdXN0IGV4aXN0IG9uIGFsbCB0aGUgY2hpbGQg cmVsLiBzZWUgc2ltcGxlX2luZGV4aW5mb19lcXVhbCBmb3IKKyAqICAgIGhvdyB3ZSBjb21wYXJl IGl0LgorICovCisKKy8qCisgKiBpbmRleF9jb25zdGFpbnNfcGFydGtleQorICogcmV0dXJuIHRy dWUgaWYgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBwYXJ0aXRvbiBrZXkuCisgKi8KK3N0YXRpYyBi b29sCitpbmRleF9jb25zdGFpbnNfcGFydGtleShSZWxPcHRJbmZvICpwYXJ0cmVsLCAgSW5kZXhP cHRJbmZvICppbmQpCit7CisJTGlzdENlbGwJKmxjOworCWludAlpOworCUFzc2VydChJU19QQVJU SVRJT05FRF9SRUwocGFydHJlbCkpOworCUFzc2VydChwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFy dG5hdHRzID4gMCk7CisKKwlmb3IoaSA9IDA7IGkgPCBwYXJ0cmVsLT5wYXJ0X3NjaGVtZS0+cGFy dG5hdHRzOyBpKyspCisJeworCQlOb2RlICpwYXJ0X2V4cHIgPSBsaW5pdGlhbChwYXJ0cmVsLT5w YXJ0ZXhwcnNbaV0pOworCQlib29sIGZvdW5kX2luX2luZGV4ID0gZmFsc2U7CisJCWZvcmVhY2go bGMsIGluZC0+aW5kZXh0bGlzdCkKKwkJeworCQkJRXhwciAqaW5kZXhfZXhwciA9IGxmaXJzdF9u b2RlKFRhcmdldEVudHJ5LCBsYyktPmV4cHI7CisJCQlpZiAoZXF1YWwoaW5kZXhfZXhwciwgcGFy dF9leHByKSkKKwkJCXsKKwkJCQlmb3VuZF9pbl9pbmRleCA9IHRydWU7CisJCQkJYnJlYWs7CisJ CQl9CisJCX0KKwkJaWYgKCFmb3VuZF9pbl9pbmRleCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBzaW1wbGVfaW5kZXhpbmZvX2VxdWFsCisgKgorICog VXNlZCB0byBjaGVjayBpZiB0aGUgMiBpbmRleCBpcyBzYW1lIGFzIGVhY2ggb3RoZXIuIFRoZSBp bmRleCBoZXJlCisgKiBpcyBDT1BJRUQgZnJvbSBjaGlsZHJlbCBhbmQgZGlkIHNvbWUgdGlueSBj aGFuZ2VzKHNlZQorICogc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCkKKyAqLworc3Rh dGljIGJvb2wKK3NpbXBsZV9pbmRleGluZm9fZXF1YWwoSW5kZXhPcHRJbmZvICppbmQxLCBJbmRl eE9wdEluZm8gKmluZDIpCit7CisJU2l6ZSBvaWRfY21wX2xlbiA9IHNpemVvZihPaWQpICogaW5k MS0+bmNvbHVtbnM7CisKKwlyZXR1cm4gaW5kMS0+bmNvbHVtbnMgPT0gaW5kMi0+bmNvbHVtbnMg JiYKKwkJaW5kMS0+dW5pcXVlID09IGluZDItPnVuaXF1ZSAmJgorCQltZW1jbXAoaW5kMS0+aW5k ZXhrZXlzLCBpbmQyLT5pbmRleGtleXMsIHNpemVvZihpbnQpICogaW5kMS0+bmNvbHVtbnMpID09 IDAgJiYKKwkJbWVtY21wKGluZDEtPm9wZmFtaWx5LCBpbmQyLT5vcGZhbWlseSwgb2lkX2NtcF9s ZW4pID09IDAgJiYKKwkJbWVtY21wKGluZDEtPm9wY2ludHlwZSwgaW5kMi0+b3BjaW50eXBlLCBv aWRfY21wX2xlbikgPT0gMCAmJgorCQltZW1jbXAoaW5kMS0+c29ydG9wZmFtaWx5LCBpbmQyLT5z b3J0b3BmYW1pbHksIG9pZF9jbXBfbGVuKSA9PSAwICYmCisJCWVxdWFsKGdldF90bGlzdF9leHBy cyhpbmQxLT5pbmRleHRsaXN0LCB0cnVlKSwKKwkJCSAgZ2V0X3RsaXN0X2V4cHJzKGluZDItPmlu ZGV4dGxpc3QsIHRydWUpKTsKK30KKworCisvKgorICogVGhlIGJlbG93IG1hY3JvcyBhcmUgdXNl ZCBmb3Igc2ltcGxlX2NvcHlfaW5kZXhpbmZvX3RvX3BhcmVudCB3aGljaCBpcyBzbworICogY3Vz dG9taXplZCB0aGF0IEkgZG9uJ3Qgd2FudCB0byBwdXQgaXQgdG8gY29weWZ1bmNzLmMuIFNvIGNv cHkgaXQgaGVyZS4KKyAqLworI2RlZmluZSBDT1BZX1BPSU5URVJfRklFTEQoZmxkbmFtZSwgc3op IFwKKwlkbyB7IFwKKwkJU2l6ZQlfc2l6ZSA9IChzeik7IFwKKwkJbmV3bm9kZS0+ZmxkbmFtZSA9 IHBhbGxvYyhfc2l6ZSk7IFwKKwkJbWVtY3B5KG5ld25vZGUtPmZsZG5hbWUsIGZyb20tPmZsZG5h bWUsIF9zaXplKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9OT0RFX0ZJRUxEKGZs ZG5hbWUpIFwKKwkobmV3bm9kZS0+ZmxkbmFtZSA9IGNvcHlPYmplY3RJbXBsKGZyb20tPmZsZG5h bWUpKQorCisjZGVmaW5lIENPUFlfU0NBTEFSX0ZJRUxEKGZsZG5hbWUpIFwKKwkobmV3bm9kZS0+ ZmxkbmFtZSA9IGZyb20tPmZsZG5hbWUpCisKKworLyoKKyAqIHNpbXBsZV9jb3B5X2luZGV4aW5m b190b19wYXJlbnQgKGZyb20gcGFydGl0aW9uKQorICogQ29weSB0aGUgSW5kZXhJbmZvIGZyb20g Y2hpbGQgcmVsYXRpb24gdG8gcGFyZW50IHJlbGF0aW9uIHdpdGggc29tZSBtb2RpZmljYXRpb24s CisgKiB3aGljaCBpcyB1c2VkIHRvIHRlc3Q6CisgKiAxLiBJZiB0aGUgc2FtZSBpbmRleCBleGlz dHMgaW4gYWxsIHRoZSBjaGlsZHJlbHMuCisgKiAyLiBJZiB0aGUgcGFyZW50cmVsLT5yZWx0YXJn ZXQvYmFzaWNyZXN0cmljdCBpbmZvIG1hdGNoZXMgdGhpcyBpbmRleC4KKyAqLworc3RhdGljIElu ZGV4T3B0SW5mbyAqCitzaW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJCQkJCQkJCUluZGV4T3B0 SW5mbyAqZnJvbSkKK3sKKwlJbmRleE9wdEluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShJbmRleE9w dEluZm8pOworCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBmaW5kX2FwcGluZm9fYnlfY2hpbGQo cm9vdCwgZnJvbS0+cmVsLT5yZWxpZCk7CisJTGlzdENlbGwJKmxjOworCWludAlpZHggPSAwOwor CisJQ09QWV9TQ0FMQVJfRklFTEQobmNvbHVtbnMpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5rZXlj b2x1bW5zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRCh1bmlxdWUpOworCUNPUFlfU0NBTEFSX0ZJRUxE KGltbWVkaWF0ZSk7CisJLyogV2UganVzdCBuZWVkIHRvIGtub3cgaWYgaXQgaXMgTklMIG9yIG5v dCAqLworCUNPUFlfU0NBTEFSX0ZJRUxEKGluZHByZWQpOworCUNPUFlfU0NBTEFSX0ZJRUxEKHBy ZWRPSyk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4a2V5cywgZnJvbS0+bmNvbHVtbnMgKiBz aXplb2YoaW50KSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKGluZGV4Y29sbGF0aW9ucywgZnJvbS0+ bmNvbHVtbnMgKiBzaXplb2YoT2lkKSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKG9wZmFtaWx5LCBm cm9tLT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQob3BjaW50 eXBlLCBmcm9tLT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQo c29ydG9wZmFtaWx5LCBmcm9tLT5uY29sdW1ucyAqIHNpemVvZihPaWQpKTsKKwlDT1BZX05PREVf RklFTEQoaW5kZXh0bGlzdCk7CisKKwkvKiBDb252ZXJ0IGluZGV4IGV4cHJzIG9uIGNoaWxkIGV4 cHIgdG8gZXhwciBvbiBwYXJlbnQgKi8KKwlmb3JlYWNoKGxjLCBuZXdub2RlLT5pbmRleHRsaXN0 KQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGxmaXJzdF9ub2RlKFRhcmdldEVudHJ5LCBsYyk7 CisJCS8qIEluZGV4IG9uIGV4cHJlc3Npb24gaXMgaWdub3JlZCAqLworCQlBc3NlcnQoSXNBKHRs ZS0+ZXhwciwgVmFyKSk7CisJCXRsZS0+ZXhwciA9IChFeHByICopIGZpbmRfcGFyZW50X3Zhcihh cHBpbmZvLCAoVmFyICopIHRsZS0+ZXhwcik7CisJCW5ld25vZGUtPmluZGV4a2V5c1tpZHhdID0g Y2FzdE5vZGUoVmFyLCB0bGUtPmV4cHIpLT52YXJhdHRubzsKKwkJaWR4Kys7CisJfQorCW5ld25v ZGUtPnJlbCA9IHBhcmVudHJlbDsKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworLyoKKyAqIGFkanVz dF9wYXJ0aXRpb25fdW5pcXVlX2luZGV4bGlzdAorICoKKyAqIGdsb2JhbF91bmlxdWVfaW5kZXhl czogQXQgdGhlIGJlZ2lubmluZywgaXQgY29udGFpbnMgdGhlIGNvcHkgJiBtb2RpZmllZAorICog dW5pcXVlIGluZGV4IGZyb20gdGhlIGZpcnN0IHBhcnRpdGlvbi4gQW5kIHRoZW4gY2hlY2sgaWYg ZWFjaCBpbmRleCBpbiBpdCBzdGlsbAorICogZXhpc3RzIGluIHRoZSBmb2xsb3dpbmcgcGFydGl0 aW9ucy4gSWYgbm8sIHJlbW92ZSBpdC4gYXQgbGFzdCwgaXQgaGFzIGFuCisgKiBpbmRleCBsaXN0 IHdoaWNoIGV4aXN0cyBpbiBhbGwgdGhlIHBhcnRpdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCith ZGp1c3RfcGFydGl0aW9uX3VuaXF1ZV9pbmRleGxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJ CQkJCSAgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJCQkgIFJlbE9wdEluZm8gKmNoaWxk cmVsLAorCQkJCQkJCQkgIExpc3QgKipnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCit7CisJTGlzdENl bGwJKmxjLCAqbGMyOworCWZvcmVhY2gobGMsICpnbG9iYWxfdW5pcXVlX2luZGV4ZXMpCisJewor CQlJbmRleE9wdEluZm8JKmdfaW5kID0gbGZpcnN0X25vZGUoSW5kZXhPcHRJbmZvLCBsYyk7CisJ CWJvb2wgZm91bmRfaW5fY2hpbGQgPSBmYWxzZTsKKworCQlmb3JlYWNoKGxjMiwgY2hpbGRyZWwt PmluZGV4bGlzdCkKKwkJeworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kID0gbGZpcnN0X25vZGUo SW5kZXhPcHRJbmZvLCBsYzIpOworCQkJSW5kZXhPcHRJbmZvICAgKnBfaW5kX2NvcHk7CisJCQlp ZiAoIXBfaW5kLT51bmlxdWUgfHwgIXBfaW5kLT5pbW1lZGlhdGUgfHwKKwkJCQkocF9pbmQtPmlu ZHByZWQgIT0gTklMICYmICFwX2luZC0+cHJlZE9LKSkKKwkJCQljb250aW51ZTsKKwkJCXBfaW5k X2NvcHkgPSBzaW1wbGVfY29weV9pbmRleGluZm9fdG9fcGFyZW50KHJvb3QsIHBhcmVudHJlbCwg cF9pbmQpOworCQkJaWYgKHNpbXBsZV9pbmRleGluZm9fZXF1YWwocF9pbmRfY29weSwgZ19pbmQp KQorCQkJeworCQkJCWZvdW5kX2luX2NoaWxkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCQlpZiAoIWZvdW5kX2luX2NoaWxkKQorCQkJLyogVGhlIGluZGV4IGRvZXNuJ3QgZXhpc3Qg aW4gY2hpbGRyZWwsIHJlbW92ZSBpdCBmcm9tIGdsb2JhbF91bmlxdWVfaW5kZXhlcyAqLworCQkJ Kmdsb2JhbF91bmlxdWVfaW5kZXhlcyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoKmdsb2JhbF91 bmlxdWVfaW5kZXhlcywgbGMpOworCX0KK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBncm91 cHJlcy9kaXN0aW5jdHJlbCAqLworc3RhdGljIHZvaWQKK2FkZF91bmlxdWVrZXlfZnJvbV9zb3J0 Z3JvdXBzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKnNvcnRncm91 cHMpCit7CisJUXVlcnkgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJTGlzdAkqZXhwcnM7CisKKwkv KgorCSAqIFhYWDogSWYgdGhlcmUgYXJlIHNvbWUgdmFycyB3aGljaCBpcyBub3QgaW4gY3VycmVu dCBsZXZlbHN1cCwgdGhlIHNlbWFudGljIGlzCisJICogaW1wcmVjaXNlLCBzaG91bGQgd2UgYXZv aWQgaXQgb3Igbm90PyBsZXZlbHN1cCA9IDEgaXMganVzdCBhIGRlbW8sIG1heWJlIHdlIG5lZWQg dG8KKwkgKiBjaGVjayBldmVyeSBsZXZlbCBvdGhlciB0aGFuIDAsIGlmIHNvLCBsb29rcyB3ZSBo YXZlIHRvIHdyaXRlIGFub3RoZXIKKwkgKiBwdWxsX3Zhcl93YWxrZXIuCisJICovCisJTGlzdAkq dXBwZXJfdmFycyA9IHB1bGxfdmFyc19vZl9sZXZlbCgoTm9kZSopc29ydGdyb3VwcywgMSk7CisK KwlpZiAodXBwZXJfdmFycyAhPSBOSUwpCisJCXJldHVybjsKKworCWV4cHJzID0gZ2V0X3NvcnRn cm91cGxpc3RfZXhwcnMoc29ydGdyb3VwcywgcGFyc2UtPnRhcmdldExpc3QpOworCXJlbC0+dW5p cXVla2V5cyA9IGxhcHBlbmQocmVsLT51bmlxdWVrZXlzLAorCQkJCQkJCSAgbWFrZVVuaXF1ZUtl eShleHBycywKKwkJCQkJCQkJCQkJZmFsc2UgLyogc29ydGdyb3VwY2xhdXNlIGNhbid0IGJlIG11 bHRpX251bGx2YWxzICovKSk7Cit9CisKKworLyoKKyAqIGFkZF9jb21iaW5lZF91bmlxdWVrZXkK KyAqIFRoZSBjb21iaW5hdGlvbiBvZiBib3RoIFVuaXF1ZUtleXMgaXMgYSB2YWxpZCBVbmlxdWVL ZXkgZm9yIGpvaW5yZWwgbm8gbWF0dGVyCisgKiB0aGUgam9pbnR5cGUuCisgKi8KK2Jvb2wKK2Fk ZF9jb21iaW5lZF91bmlxdWVrZXkoUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJICAgUmVsT3B0 SW5mbyAqb3V0ZXJfcmVsLAorCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcl9yZWwsCisJCQkJCSAg IFVuaXF1ZUtleSAqb3V0ZXJfdWtleSwKKwkJCQkJICAgVW5pcXVlS2V5ICppbm5lcl91a2V5LAor CQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSkKK3sKKworCUxpc3RDZWxsCSpsYzEsICpsYzI7CisK KwkvKiBFaXRoZXIgc2lkZSBoYXMgbXVsdGlfbnVsbHZhbHMgb3Igd2UgaGF2ZSBvdXRlciBqb2lu LAorCSAqIHRoZSBjb21iaW5lZCBVbmlxdWVLZXkgaGFzIG11bHRpX251bGx2YWxzICovCisJYm9v bCBtdWx0aV9udWxsdmFscyA9IG91dGVyX3VrZXktPm11bHRpX251bGx2YWxzIHx8CisJCWlubmVy X3VrZXktPm11bHRpX251bGx2YWxzIHx8IElTX09VVEVSX0pPSU4oam9pbnR5cGUpOworCisJLyog VGhlIG9ubHkgY2FzZSB3ZSBjYW4gZ2V0IG9uZXJvdyBqb2lucmVsIGFmdGVyIGpvaW4gKi8KKwlp ZiAgKHJlbGF0aW9uX2lzX29uZXJvdyhvdXRlcl9yZWwpCisJCSAmJiByZWxhdGlvbl9pc19vbmVy b3coaW5uZXJfcmVsKQorCQkgJiYgam9pbnR5cGUgPT0gSk9JTl9JTk5FUikKKwl7CisJCWFkZF91 bmlxdWVrZXlfZm9yX29uZXJvdyhqb2lucmVsKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJZm9y ZWFjaChsYzEsIGdldF9leHByc19mcm9tX3VuaXF1ZWtleShqb2lucmVsLCBvdXRlcl9yZWwsIG91 dGVyX3VrZXkpKQorCXsKKwkJZm9yZWFjaChsYzIsIGdldF9leHByc19mcm9tX3VuaXF1ZWtleShq b2lucmVsLCBpbm5lcl9yZWwsIGlubmVyX3VrZXkpKQorCQl7CisJCQlMaXN0ICpleHBycyA9IGxp c3RfY29uY2F0X2NvcHkobGZpcnN0X25vZGUoTGlzdCwgbGMxKSwgbGZpcnN0X25vZGUoTGlzdCwg bGMyKSk7CisJCQlqb2lucmVsLT51bmlxdWVrZXlzID0gbGFwcGVuZChqb2lucmVsLT51bmlxdWVr ZXlzLAorCQkJCQkJCQkJCSAgbWFrZVVuaXF1ZUtleShleHBycywKKwkJCQkJCQkJCQkJCQkJbXVs dGlfbnVsbHZhbHMpKTsKKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggYjQwNmQ0MWU5MS4uMDU1MWFlMDUxMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtMjM4OSw2ICsyMzg5LDggQEAgZ3JvdXBpbmdf cGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwgYm9vbCBpbmhlcml0YW5jZV91cGRhdGUsCiAJCWFk ZF9wYXRoKGZpbmFsX3JlbCwgcGF0aCk7CiAJfQogCisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhj dXJyZW50X3JlbCwgZmluYWxfcmVsKTsKKwogCS8qCiAJICogR2VuZXJhdGUgcGFydGlhbCBwYXRo cyBmb3IgZmluYWxfcmVsLCB0b28sIGlmIG91dGVyIHF1ZXJ5IGxldmVscyBtaWdodAogCSAqIGJl IGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlbS4KQEAgLTM4OTksNiArMzkwMSw4IEBAIGNyZWF0ZV9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiAKIAlzZXRfY2hlYXBlc3QoZ3Jv dXBlZF9yZWwpOworCisJcG9wdWxhdGVfZ3JvdXByZWxfdW5pcXVla2V5cyhyb290LCBncm91cGVk X3JlbCwgaW5wdXRfcmVsKTsKIAlyZXR1cm4gZ3JvdXBlZF9yZWw7CiB9CiAKQEAgLTQ2MTUsNyAr NDYxOSw3IEBAIGNyZWF0ZV93aW5kb3dfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKiBO b3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgocykgKi8KIAlzZXRfY2hlYXBlc3Qod2luZG93X3JlbCk7 Ci0KKwlzaW1wbGVfY29weV91bmlxdWVrZXlzKGlucHV0X3JlbCwgd2luZG93X3JlbCk7CiAJcmV0 dXJuIHdpbmRvd19yZWw7CiB9CiAKQEAgLTQ5MTEsNyArNDkxNSw3IEBAIGNyZWF0ZV9kaXN0aW5j dF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qIE5vdyBjaG9vc2UgdGhlIGJlc3QgcGF0 aChzKSAqLwogCXNldF9jaGVhcGVzdChkaXN0aW5jdF9yZWwpOwotCisJcG9wdWxhdGVfZGlzdGlu Y3RyZWxfdW5pcXVla2V5cyhyb290LCBpbnB1dF9yZWwsIGRpc3RpbmN0X3JlbCk7CiAJcmV0dXJu IGRpc3RpbmN0X3JlbDsKIH0KIApAQCAtNTE3Miw2ICs1MTc2LDggQEAgY3JlYXRlX29yZGVyZWRf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJQXNzZXJ0KG9yZGVyZWRfcmVsLT5wYXRo bGlzdCAhPSBOSUwpOwogCisJc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhpbnB1dF9yZWwsIG9yZGVy ZWRfcmVsKTsKKwogCXJldHVybiBvcmRlcmVkX3JlbDsKIH0KIApAQCAtNjA0OSw2ICs2MDU1LDkg QEAgYWRqdXN0X3BhdGhzX2Zvcl9zcmZzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJaWYgKGxpc3RfbGVuZ3RoKHRhcmdldHMpID09IDEpCiAJCXJldHVybjsKIAorCS8qIFVu aXF1ZUtleSBpcyBub3QgdmFsaWQgYWZ0ZXIgaGFuZGxpbmcgdGhlIFNSRi4gKi8KKwlyZWwtPnVu aXF1ZWtleXMgPSBOSUw7CisKIAkvKgogCSAqIFN0YWNrIFNSRi1ldmFsdWF0aW9uIG5vZGVzIGF0 b3AgZWFjaCBwYXRoIGZvciB0aGUgcmVsLgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXB1bmlvbi5jCmluZGV4IDk1MWFlZDgwZTcuLmU5NGU5MjkzN2MgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wcmVwL3ByZXB1bmlvbi5jCkBAIC02ODksNiArNjg5LDggQEAgZ2VuZXJhdGVfdW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCS8qIFVuZG8g ZWZmZWN0cyBvZiBwb3NzaWJseSBmb3JjaW5nIHR1cGxlX2ZyYWN0aW9uIHRvIDAgKi8KIAlyb290 LT50dXBsZV9mcmFjdGlvbiA9IHNhdmVfZnJhY3Rpb247CiAKKwkvKiBBZGQgdGhlIFVuaXF1ZUtl eXMgKi8KKwlwb3B1bGF0ZV91bmlvbnJlbF91bmlxdWVrZXlzKHJvb3QsIHJlc3VsdF9yZWwpOwog CXJldHVybiByZXN1bHRfcmVsOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9hcHBlbmRpbmZvLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRp bmZvLmMKaW5kZXggZDcyMjA2M2NmMy4uNDRjMzdlY2ZmYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2FwcGVuZGluZm8uYwpAQCAtNzQ2LDMgKzc0Niw0NyBAQCBmaW5kX2FwcGluZm9zX2J5 X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywgaW50ICpuYXBwaW5mb3Mp CiAJfQogCXJldHVybiBhcHBpbmZvczsKIH0KKworLyoKKyAqIGZpbmRfYXBwaW5mb19ieV9jaGls ZAorICoKKyAqLworQXBwZW5kUmVsSW5mbyAqCitmaW5kX2FwcGluZm9fYnlfY2hpbGQoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4IGNoaWxkX2luZGV4KQoreworCUxpc3RDZWxsCSpsYzsKKwlmb3Jl YWNoKGxjLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBp bmZvID0gbGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywgbGMpOworCQlpZiAoYXBwaW5mby0+Y2hp bGRfcmVsaWQgPT0gY2hpbGRfaW5kZXgpCisJCQlyZXR1cm4gYXBwaW5mbzsKKwl9CisJZWxvZyhF UlJPUiwgInBhcmVudCByZWxhdGlvbiBjYW50IGJlIGZvdW5kIik7CisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qCisgKiBmaW5kX3BhcmVudF92YXIKKyAqCisgKi8KK1ZhciAqCitmaW5kX3BhcmVudF92 YXIoQXBwZW5kUmVsSW5mbyAqYXBwaW5mbywgVmFyICpjaGlsZF92YXIpCit7CisJTGlzdENlbGwJ KmxjOworCVZhcgkqcmVzID0gTlVMTDsKKwlJbmRleCBhdHRubyA9IDE7CisJZm9yZWFjaChsYywg YXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKQorCXsKKwkJTm9kZSAqY2hpbGRfbm9kZSA9IGxmaXJz dChsYyk7CisJCWlmIChlcXVhbChjaGlsZF9ub2RlLCBjaGlsZF92YXIpKQorCQl7CisJCQlyZXMg PSBjb3B5T2JqZWN0KGNoaWxkX3Zhcik7CisJCQlyZXMtPnZhcmF0dG5vID0gYXR0bm87CisJCQly ZXMtPnZhcm5vID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCQl9CisJCWF0dG5vKys7CisJfQor CWlmIChyZXMgPT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwgInBhcmVudCB2YXIgY2FuJ3QgYmUgZm91 bmQuIik7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2luaGVyaXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2luaGVyaXQuYwpp bmRleCAzMTMyZmQzNWE1Li5kNjZiNDBlYzUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9pbmhlcml0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5o ZXJpdC5jCkBAIC03MzYsNiArNzM2LDcgQEAgYXBwbHlfY2hpbGRfYmFzZXF1YWxzKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXsKIAkJCU5vZGUJICAgKm9uZWNx ID0gKE5vZGUgKikgbGZpcnN0KGxjMik7CiAJCQlib29sCQlwc2V1ZG9jb25zdGFudDsKKwkJCVJl c3RyaWN0SW5mbwkqY2hpbGRfcmluZm87CiAKIAkJCS8qIGNoZWNrIGZvciBwc2V1ZG9jb25zdGFu dCAobm8gVmFycyBvciB2b2xhdGlsZSBmdW5jdGlvbnMpICovCiAJCQlwc2V1ZG9jb25zdGFudCA9 CkBAIC03NDcsMTMgKzc0OCwxNCBAQCBhcHBseV9jaGlsZF9iYXNlcXVhbHMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCQlyb290LT5oYXNQc2V1ZG9Db25zdGFu dFF1YWxzID0gdHJ1ZTsKIAkJCX0KIAkJCS8qIHJlY29uc3RpdHV0ZSBSZXN0cmljdEluZm8gd2l0 aCBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovCi0JCQljaGlsZHF1YWxzID0gbGFwcGVuZChjaGls ZHF1YWxzLAotCQkJCQkJCQkgbWFrZV9yZXN0cmljdGluZm8oKEV4cHIgKikgb25lY3EsCi0JCQkJ CQkJCQkJCQkgICByaW5mby0+aXNfcHVzaGVkX2Rvd24sCi0JCQkJCQkJCQkJCQkgICByaW5mby0+ b3V0ZXJqb2luX2RlbGF5ZWQsCi0JCQkJCQkJCQkJCQkgICBwc2V1ZG9jb25zdGFudCwKLQkJCQkJ CQkJCQkJCSAgIHJpbmZvLT5zZWN1cml0eV9sZXZlbCwKLQkJCQkJCQkJCQkJCSAgIE5VTEwsIE5V TEwsIE5VTEwpKTsKKwkJCWNoaWxkX3JpbmZvID0gIG1ha2VfcmVzdHJpY3RpbmZvKChFeHByICop IG9uZWNxLAorCQkJCQkJCQkJCQkgcmluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCQkJCQkJCQkg cmluZm8tPm91dGVyam9pbl9kZWxheWVkLAorCQkJCQkJCQkJCQkgcHNldWRvY29uc3RhbnQsCisJ CQkJCQkJCQkJCSByaW5mby0+c2VjdXJpdHlfbGV2ZWwsCisJCQkJCQkJCQkJCSBOVUxMLCBOVUxM LCBOVUxMKTsKKwkJCWNoaWxkX3JpbmZvLT5tZXJnZW9wZmFtaWxpZXMgPSByaW5mby0+bWVyZ2Vv cGZhbWlsaWVzOworCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywgY2hpbGRfcmlu Zm8pOwogCQkJLyogdHJhY2sgbWluaW11bSBzZWN1cml0eSBsZXZlbCBhbW9uZyBjaGlsZCBxdWFs cyAqLwogCQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgcmluZm8tPnNl Y3VyaXR5X2xldmVsKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1 bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCAzMWQ5YWVkZWViLi5j ODNmMTdhY2I3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5j bHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgor I2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCiAKIGV4dGVybiBBX0V4cHIgKm1ha2VBX0V4 cHIoQV9FeHByX0tpbmQga2luZCwgTGlzdCAqbmFtZSwKQEAgLTEwNSw0ICsxMDYsNiBAQCBleHRl cm4gR3JvdXBpbmdTZXQgKm1ha2VHcm91cGluZ1NldChHcm91cGluZ1NldEtpbmQga2luZCwgTGlz dCAqY29udGVudCwgaW50IGxvYwogCiBleHRlcm4gVmFjdXVtUmVsYXRpb24gKm1ha2VWYWN1dW1S ZWxhdGlvbihSYW5nZVZhciAqcmVsYXRpb24sIE9pZCBvaWQsIExpc3QgKnZhX2NvbHMpOwogCitl eHRlcm4gVW5pcXVlS2V5KiBtYWtlVW5pcXVlS2V5KExpc3QgKmV4cHJzLCBib29sIG11bHRpX251 bGx2YWxzKTsKKwogI2VuZGlmCQkJCQkJCS8qIE1BS0VGVU5DX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4 IDM4MWQ4NGI0ZTQuLjQxMTEwZWQ4ODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjY0LDYgKzI2NCw3IEBA IHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9FcXVpdmFsZW5jZU1lbWJlciwKIAlUX1BhdGhLZXks CiAJVF9QYXRoVGFyZ2V0LAorCVRfVW5pcXVlS2V5LAogCVRfUmVzdHJpY3RJbmZvLAogCVRfSW5k ZXhDbGF1c2UsCiAJVF9QbGFjZUhvbGRlclZhciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggOWUz ZWJkNDg4YS4uMDJlNDQ1OGJlZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTczMCw2ICs3MzAs NyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUXVhbENvc3QJYmFzZXJlc3RyaWN0Y29z dDsJLyogY29zdCBvZiBldmFsdWF0aW5nIHRoZSBhYm92ZSAqLwogCUluZGV4CQliYXNlcmVzdHJp Y3RfbWluX3NlY3VyaXR5OwkvKiBtaW4gc2VjdXJpdHlfbGV2ZWwgZm91bmQgaW4KIAkJCQkJCQkJ CQkJICogYmFzZXJlc3RyaWN0aW5mbyAqLworCUxpc3QJICAgKnVuaXF1ZWtleXM7CQkvKiBMaXN0 IG9mIFVuaXF1ZUtleSAqLwogCUxpc3QJICAgKmpvaW5pbmZvOwkJLyogUmVzdHJpY3RJbmZvIHN0 cnVjdHVyZXMgZm9yIGpvaW4gY2xhdXNlcwogCQkJCQkJCQkgKiBpbnZvbHZpbmcgdGhpcyByZWwg Ki8KIAlib29sCQloYXNfZWNsYXNzX2pvaW5zOwkvKiBUIG1lYW5zIGpvaW5pbmZvIGlzIGluY29t cGxldGUgKi8KQEAgLTEwNDcsNiArMTA0OCwyOCBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoS2V5CiB9 IFBhdGhLZXk7CiAKIAorLyoKKyAqIFVuaXF1ZUtleQorICoKKyAqIFJlcHJlc2VudHMgdGhlIHVu aXF1ZSBwcm9wZXJ0aWVzIGhlbGQgYnkgYSBSZWxPcHRJbmZvLgorICoKKyAqIGV4cHJzIGlzIGEg bGlzdCBvZiBleHBycyB3aGljaCBpcyB1bmlxdWUgb24gY3VycmVudCBSZWxPcHRJbmZvLiBleHBy cyA9IE5JTAorICogaXMgYSBzcGVjaWFsIGNhc2Ugb2YgVW5pcXVlS2V5LCB3aGljaCBtZWFucyB0 aGVyZSBpcyBvbmx5IDEgcm93IGluIHRoYXQKKyAqIHJlbGF0aW9uLgorICogbXVsdGlfbnVsbHZh bHM6IHRydWUgbWVhbnMgbXVsdGkgbnVsbCB2YWx1ZXMgbWF5IGV4aXN0IGluIHRoZXNlIGV4cHJz LCBzbyB0aGUKKyAqIHVuaXF1ZW5lc3MgaXMgbm90IGd1YXJhbnRlZWQgaW4gdGhpcyBjYXNlLiBU aGlzIGZpZWxkIGlzIG5lY2Vzc2FyeSBmb3IKKyAqIHJlbW92ZV91c2VsZXNzX2pvaW4gJiByZWR1 Y2VfdW5pcXVlX3NlbWlqb2lucyB3aGVyZSB3ZSBkb24ndCBtaW5kIHRoZXNlCisgKiBkdXBsaWNh dGVkIE5VTEwgdmFsdWVzLiBJdCBpcyBzZXQgdG8gdHJ1ZSBmb3IgMiBjYXNlcy4gT25lIGlzIGEg dW5pcXVlIGtleQorICogZnJvbSBhIHVuaXF1ZSBpbmRleCBidXQgdGhlIHJlbGF0ZWQgY29sdW1u IGlzIG51bGxhYmxlLiBUaGUgb3RoZXIgb25lIGlzIGZvcgorICogb3V0ZXIgam9pbi4gc2VlIHBv cHVsYXRlX2pvaW5yZWxfdW5pcXVla2V5cyBmb3IgZGV0YWlsLgorICovCit0eXBlZGVmIHN0cnVj dCBVbmlxdWVLZXkKK3sKKwlOb2RlVGFnCQl0eXBlOworCUxpc3QJICAgKmV4cHJzOworCWJvb2wJ CW11bHRpX251bGx2YWxzOworfSBVbmlxdWVLZXk7CisKIC8qCiAgKiBQYXRoVGFyZ2V0CiAgKgpA QCAtMjQ3Myw3ICsyNDk2LDcgQEAgdHlwZWRlZiBlbnVtCiAgKgogICogZmxhZ3MgaW5kaWNhdGlu ZyB3aGF0IGtpbmRzIG9mIGdyb3VwaW5nIGFyZSBwb3NzaWJsZS4KICAqIHBhcnRpYWxfY29zdHNf c2V0IGlzIHRydWUgaWYgdGhlIGFnZ19wYXJ0aWFsX2Nvc3RzIGFuZCBhZ2dfZmluYWxfY29zdHMK LSAqIAkJaGF2ZSBiZWVuIGluaXRpYWxpemVkLgorICoJCWhhdmUgYmVlbiBpbml0aWFsaXplZC4K ICAqIGFnZ19wYXJ0aWFsX2Nvc3RzIGdpdmVzIHBhcnRpYWwgYWdncmVnYXRpb24gY29zdHMuCiAg KiBhZ2dfZmluYWxfY29zdHMgZ2l2ZXMgZmluYWxpemF0aW9uIGNvc3RzLgogICogdGFyZ2V0X3Bh cmFsbGVsX3NhZmUgaXMgdHJ1ZSBpZiB0YXJnZXQgaXMgcGFyYWxsZWwgc2FmZS4KQEAgLTI1MDMs OCArMjUyNiw4IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBsaW1pdF90dXBsZXMgaXMgYW4gZXN0aW1h dGVkIGJvdW5kIG9uIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHR1cGxlcywKICAqCQlvciAtMSBpZiBu byBMSU1JVCBvciBjb3VsZG4ndCBlc3RpbWF0ZS4KICAqIGNvdW50X2VzdCBhbmQgb2Zmc2V0X2Vz dCBhcmUgdGhlIGVzdGltYXRlZCB2YWx1ZXMgb2YgdGhlIExJTUlUIGFuZCBPRkZTRVQKLSAqIAkJ ZXhwcmVzc2lvbnMgY29tcHV0ZWQgYnkgcHJlcHJvY2Vzc19saW1pdCgpIChzZWUgY29tbWVudHMg Zm9yCi0gKiAJCXByZXByb2Nlc3NfbGltaXQoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgKgkJ ZXhwcmVzc2lvbnMgY29tcHV0ZWQgYnkgcHJlcHJvY2Vzc19saW1pdCgpIChzZWUgY29tbWVudHMg Zm9yCisgKgkJcHJlcHJvY2Vzc19saW1pdCgpIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KICAqLwog dHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3Qu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaAppbmRleCAxNGVhMjc2NmFkLi42MjFmNTRh OWY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGdfbGlzdC5oCkBAIC01MjgsNiArNTI4LDggQEAgZXh0ZXJuIGJvb2wgbGlz dF9tZW1iZXJfcHRyKGNvbnN0IExpc3QgKmxpc3QsIGNvbnN0IHZvaWQgKmRhdHVtKTsKIGV4dGVy biBib29sIGxpc3RfbWVtYmVyX2ludChjb25zdCBMaXN0ICpsaXN0LCBpbnQgZGF0dW0pOwogZXh0 ZXJuIGJvb2wgbGlzdF9tZW1iZXJfb2lkKGNvbnN0IExpc3QgKmxpc3QsIE9pZCBkYXR1bSk7CiAK K2V4dGVybiBib29sIGxpc3RfaXNfc3Vic2V0KGNvbnN0IExpc3QgKm1lbWJlcnMsIGNvbnN0IExp c3QgKnRhcmdldCk7CisKIGV4dGVybiBMaXN0ICpsaXN0X2RlbGV0ZShMaXN0ICpsaXN0LCB2b2lk ICpkYXR1bSk7CiBleHRlcm4gTGlzdCAqbGlzdF9kZWxldGVfcHRyKExpc3QgKmxpc3QsIHZvaWQg KmRhdHVtKTsKIGV4dGVybiBMaXN0ICpsaXN0X2RlbGV0ZV9pbnQoTGlzdCAqbGlzdCwgaW50IGRh dHVtKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmggYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kaW5mby5oCmluZGV4IGQ2YTI3YTYwZGQuLmU4N2M5 MmEwNTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGluZm8uaApAQCAtMzIsNCArMzIsNyBAQCBl eHRlcm4gUmVsaWRzIGFkanVzdF9jaGlsZF9yZWxpZHNfbXVsdGlsZXZlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsaWRzIHJlbGlkcywKIGV4dGVybiBBcHBlbmRSZWxJbmZvICoqZmluZF9hcHBpbmZv c19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgIFJlbGlkcyByZWxp ZHMsIGludCAqbmFwcGluZm9zKTsKIAorZXh0ZXJuIEFwcGVuZFJlbEluZm8gKmZpbmRfYXBwaW5m b19ieV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggY2hpbGRfaW5kZXgpOworZXh0ZXJu IFZhciAqZmluZF9wYXJlbnRfdmFyKEFwcGVuZFJlbEluZm8gKmFwcGluZm8sIFZhciAqY2hpbGRf dmFyKTsKKwogI2VuZGlmCQkJCQkJCS8qIEFQUEVORElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29w dGltaXplci5oCmluZGV4IDNlNDE3MTA1NmUuLjk0NDUxNDEyNjMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv b3B0aW1pemVyLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgT1BUSU1JWkVSX0gKIAogI2lu Y2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIK IAogLyoKICAqIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBub2Rlcy9wYXRobm9kZXMuaCBoZXJl LCBiZWNhdXNlIG5vbi1wbGFubmVyCkBAIC0xNTYsNiArMTU3LDcgQEAgZXh0ZXJuIFRhcmdldEVu dHJ5ICpnZXRfc29ydGdyb3VwcmVmX3RsZShJbmRleCBzb3J0cmVmLAogCQkJCQkJCQkJCSBMaXN0 ICp0YXJnZXRMaXN0KTsKIGV4dGVybiBUYXJnZXRFbnRyeSAqZ2V0X3NvcnRncm91cGNsYXVzZV90 bGUoU29ydEdyb3VwQ2xhdXNlICpzZ0NsYXVzZSwKIAkJCQkJCQkJCQkJTGlzdCAqdGFyZ2V0TGlz dCk7CitleHRlcm4gVmFyICpmaW5kX3Zhcl9mb3Jfc3VicXVlcnlfdGxlKFJlbE9wdEluZm8gKnJl bCwgVGFyZ2V0RW50cnkgKnRsZSk7CiBleHRlcm4gTm9kZSAqZ2V0X3NvcnRncm91cGNsYXVzZV9l eHByKFNvcnRHcm91cENsYXVzZSAqc2dDbGF1c2UsCiAJCQkJCQkJCQkgIExpc3QgKnRhcmdldExp c3QpOwogZXh0ZXJuIExpc3QgKmdldF9zb3J0Z3JvdXBsaXN0X2V4cHJzKExpc3QgKnNnQ2xhdXNl cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggMTBiNmU4MTA3OS4uOTIxN2E4ZDZjNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmgKQEAgLTI0MCw1ICsyNDAsNDggQEAgZXh0ZXJuIFBhdGhLZXkgKm1ha2Vf Y2Fub25pY2FsX3BhdGhrZXkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBpbnQgc3Ry YXRlZ3ksIGJvb2wgbnVsbHNfZmlyc3QpOwogZXh0ZXJuIHZvaWQgYWRkX3BhdGhzX3RvX2FwcGVu ZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCUxpc3Qg KmxpdmVfY2hpbGRyZWxzKTsKK2V4dGVybiBMaXN0ICpzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMo UGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJ CQkJCQkgIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkJICBSZWxPcHRJbmZvICppbm5l cnJlbCwKKwkJCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkJICBKb2luVHlw ZSBqb2ludHlwZSwKKwkJCQkJCQkJCSAgYm9vbCAqbWVyZ2Vqb2luX2FsbG93ZWQpOworCisvKgor ICogdW5pcXVla2V5cy5jCisgKgkgIFV0aWxpdGllcyBmb3IgbWF0Y2hpbmcgYW5kIGJ1aWxkaW5n IHVuaXF1ZSBrZXlzCisgKi8KK2V4dGVybiB2b2lkIHBvcHVsYXRlX2Jhc2VyZWxfdW5pcXVla2V5 cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpiYXNlcmVsLAorCQkJ CQkJCQkJCUxpc3QqIHVuaXF1ZV9pbmRleF9saXN0KTsKK2V4dGVybiB2b2lkIHBvcHVsYXRlX3Bh cnRpdGlvbmVkcmVsX3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCQlS ZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJCQlMaXN0ICpjaGlsZHJlbHMpOworZXh0ZXJuIHZv aWQgcG9wdWxhdGVfZGlzdGluY3RyZWxfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJ CQkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRyZWwsCisJCQkJCQkJCQkJCVJlbE9wdEluZm8gKmRp c3RpbmN0cmVsKTsKK2V4dGVybiB2b2lkIHBvcHVsYXRlX2dyb3VwcmVsX3VuaXF1ZWtleXMoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKmdyb3VwcmVsLAorCQkJCQkJ CQkJCSBSZWxPcHRJbmZvICppbnB1dHJlbCk7CitleHRlcm4gdm9pZCBwb3B1bGF0ZV91bmlvbnJl bF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAq dW5pb25yZWwpOworZXh0ZXJuIHZvaWQgc2ltcGxlX2NvcHlfdW5pcXVla2V5cyhSZWxPcHRJbmZv ICpvbGRyZWwsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKm5ld3JlbCk7CitleHRlcm4gdm9pZCBj b252ZXJ0X3N1YnF1ZXJ5X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJ UmVsT3B0SW5mbyAqY3VycmVsLAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnN1Yl9maW5hbF9yZWwp OworZXh0ZXJuIHZvaWQgcG9wdWxhdGVfam9pbnJlbF91bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJUmVsT3B0SW5m byAqcmVsMSwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwyLAorCQkJCQkJCQkJCUxpc3QgKnJl c3RyaWN0bGlzdCwKKwkJCQkJCQkJCQlKb2luVHlwZSBqb2ludHlwZSk7CisKK2V4dGVybiBib29s IHJlbGF0aW9uX2hhc191bmlxdWVrZXlzX2ZvcihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJ CQlSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJTGlzdCAqZXhwcnMsCisJCQkJCQkJCQkJYm9v bCBhbGxvd19tdWx0aW51bGxzKTsKK2V4dGVybiBib29sIHJlbGF0aW9uX2lzX29uZXJvdyhSZWxP cHRJbmZvICpyZWwpOwogCiAjZW5kaWYJCQkJCQkJLyogUEFUSFNfSCAqLwotLSAKMi4yNS4wCgo= --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0003-Extend-UniqueKeys.patch" Content-Description: 0003-Extend-UniqueKeys.patch Content-Disposition: attachment; filename="0003-Extend-UniqueKeys.patch"; size=13328; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSA2NjQ3ZGExZjFjNjg4NmZiYTM5NmJhYmNhZmFkMmMzZjE5MmVhNjBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6MzM6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIIDMv N10gRXh0ZW5kIFVuaXF1ZUtleXMKClByZXBhcmVzIGluZGV4IHNraXAgc2NhbiBpbXBsZW1lbnRh dGlvbiB1c2luZyBVbmlxdWVLZXlzLiBBbGxvd3MgdG8Kc3BlY2lmeSB3aGF0IGFyZSB0aGUgInJl cXVlc3RlZCIga2V5cyB0aGF0IHNob3VsZCBiZSB1bmlxdWUsIGFuZCBhZGQKdGhlbSB0byBuZWNl c3NhcnkgUGF0aHMgdG8gbWFrZSB0aGVtIHVzZWZ1bCBsYXRlci4KClByb3Bvc2VkIGJ5IERhdmlk IFJvd2xleSwgY29udGFpbnMgZmV3IGJpdHMgb3V0IG9mIHByZXZpb3VzIHZlcnNpb24gZnJvbQpK ZXNwZXIgUGVkZXJzZW4uCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMu YyAgIHwgNTkgKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC91bmlxdWVrZXlzLmMgfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAzOCArKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgMzIgKysrKysrKysrLS0tCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgNSArKwogc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmggICAgICAgICAgIHwgIDggKysrCiA3IGZpbGVzIGNoYW5nZWQsIDIwMSBpbnNlcnRp b25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9wYXRoa2V5cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMu YwppbmRleCA3ZTU5NmQ0MTk0Li5hNGZjNGYyNTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L3BhdGhrZXlzLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKIAogCitzdGF0aWMgYm9vbCBwYXRoa2V5X2lzX3VuaXF1ZShQYXRoS2V5ICpuZXdfcGF0aGtl eSwgTGlzdCAqcGF0aGtleXMpOwogc3RhdGljIGJvb2wgcGF0aGtleV9pc19yZWR1bmRhbnQoUGF0 aEtleSAqbmV3X3BhdGhrZXksIExpc3QgKnBhdGhrZXlzKTsKIHN0YXRpYyBib29sIG1hdGNoZXNf Ym9vbGVhbl9wYXJ0aXRpb25fY2xhdXNlKFJlc3RyaWN0SW5mbyAqcmluZm8sCiAJCQkJCQkJCQkJ CSBSZWxPcHRJbmZvICpwYXJ0cmVsLApAQCAtOTUsNiArOTYsMjkgQEAgbWFrZV9jYW5vbmljYWxf cGF0aGtleShQbGFubmVySW5mbyAqcm9vdCwKIAlyZXR1cm4gcGs7CiB9CiAKKy8qCisgKiBwYXRo a2V5X2lzX3VuaXF1ZQorICoJICAgQ2hlY2tzIGlmIHRoZSBuZXcgcGF0aGtleSdzIGVxdWl2YWxl bmNlIGNsYXNzIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YKKyAqICAgICBhbnkgZXhpc3RpbmcgbWVt YmVyIG9mIHRoZSBwYXRoa2V5IGxpc3QuCisgKi8KK3N0YXRpYyBib29sCitwYXRoa2V5X2lzX3Vu aXF1ZShQYXRoS2V5ICpuZXdfcGF0aGtleSwgTGlzdCAqcGF0aGtleXMpCit7CisJRXF1aXZhbGVu Y2VDbGFzcyAqbmV3X2VjID0gbmV3X3BhdGhrZXktPnBrX2VjbGFzczsKKwlMaXN0Q2VsbCAgICps YzsKKworCS8qIElmIHNhbWUgRUMgYWxyZWFkeSBpcyBhbHJlYWR5IGluIHRoZSBsaXN0LCB0aGVu IG5vdCB1bmlxdWUgKi8KKwlmb3JlYWNoKGxjLCBwYXRoa2V5cykKKwl7CisJCVBhdGhLZXkgICAg Km9sZF9wYXRoa2V5ID0gKFBhdGhLZXkgKikgbGZpcnN0KGxjKTsKKworCQlpZiAobmV3X2VjID09 IG9sZF9wYXRoa2V5LT5wa19lY2xhc3MpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJu IHRydWU7Cit9CisKIC8qCiAgKiBwYXRoa2V5X2lzX3JlZHVuZGFudAogICoJICAgSXMgYSBwYXRo a2V5IHJlZHVuZGFudCB3aXRoIG9uZSBhbHJlYWR5IGluIHRoZSBnaXZlbiBsaXN0PwpAQCAtMTE1 MSw2ICsxMTc1LDQxIEBAIG1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKFBsYW5uZXJJbmZv ICpyb290LAogCXJldHVybiBwYXRoa2V5czsKIH0KIAorLyoKKyAqIG1ha2VfcGF0aGtleXNfZm9y X3VuaXF1ZWtleWNsYXVzZXMKKyAqCQlHZW5lcmF0ZSBhIHBhdGhrZXlzIGxpc3QgdG8gYmUgdXNl ZCBmb3IgdW5pcXVla2V5IGNsYXVzZXMKKyAqLworTGlzdCAqCittYWtlX3BhdGhrZXlzX2Zvcl91 bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCSBMaXN0ICpzb3J0Y2xhdXNlcywK KwkJCQkJCQkgTGlzdCAqdGxpc3QpCit7CisJTGlzdAkgICAqcGF0aGtleXMgPSBOSUw7CisJTGlz dENlbGwgICAqbDsKKworCWZvcmVhY2gobCwgc29ydGNsYXVzZXMpCisJeworCQlTb3J0R3JvdXBD bGF1c2UgKnNvcnRjbCA9IChTb3J0R3JvdXBDbGF1c2UgKikgbGZpcnN0KGwpOworCQlFeHByCSAg ICpzb3J0a2V5OworCQlQYXRoS2V5ICAgICpwYXRoa2V5OworCisJCXNvcnRrZXkgPSAoRXhwciAq KSBnZXRfc29ydGdyb3VwY2xhdXNlX2V4cHIoc29ydGNsLCB0bGlzdCk7CisJCUFzc2VydChPaWRJ c1ZhbGlkKHNvcnRjbC0+c29ydG9wKSk7CisJCXBhdGhrZXkgPSBtYWtlX3BhdGhrZXlfZnJvbV9z b3J0b3Aocm9vdCwKKwkJCQkJCQkJCQkgICBzb3J0a2V5LAorCQkJCQkJCQkJCSAgIHJvb3QtPm51 bGxhYmxlX2Jhc2VyZWxzLAorCQkJCQkJCQkJCSAgIHNvcnRjbC0+c29ydG9wLAorCQkJCQkJCQkJ CSAgIHNvcnRjbC0+bnVsbHNfZmlyc3QsCisJCQkJCQkJCQkJICAgc29ydGNsLT50bGVTb3J0R3Jv dXBSZWYsCisJCQkJCQkJCQkJICAgdHJ1ZSk7CisKKwkJaWYgKHBhdGhrZXlfaXNfdW5pcXVlKHBh dGhrZXksIHBhdGhrZXlzKSkKKwkJCXBhdGhrZXlzID0gbGFwcGVuZChwYXRoa2V5cywgcGF0aGtl eSk7CisJfQorCisJcmV0dXJuIHBhdGhrZXlzOworfQorCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog ICoJCVBBVEhLRVlTIEFORCBNRVJHRUNMQVVTRVMKICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5cy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5cy5jCmluZGV4IGIzM2JjZDJmMzIuLjdkOWMw YWVmYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKQEAgLTExMjks MyArMTEyOSw3MSBAQCBhZGRfY29tYmluZWRfdW5pcXVla2V5KFJlbE9wdEluZm8gKmpvaW5yZWws CiAJfQogCXJldHVybiBmYWxzZTsKIH0KKworTGlzdCoKK2J1aWxkX3VuaXF1ZWtleXMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKnNvcnRjbGF1c2VzKQoreworCUxpc3QgKnJlc3VsdCA9IE5JTDsK KwlMaXN0ICpzb3J0a2V5czsKKwlMaXN0Q2VsbCAqbDsKKworCXNvcnRrZXlzID0gbWFrZV9wYXRo a2V5c19mb3JfdW5pcXVla2V5cyhyb290LAorCQkJCQkJCQkJCQlzb3J0Y2xhdXNlcywKKwkJCQkJ CQkJCQkJcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKworCS8qIENyZWF0ZSBhIHVuaXF1ZWtleSBh bmQgYWRkIGl0IHRvIHRoZSBsaXN0ICovCisJZm9yZWFjaChsLCBzb3J0a2V5cykKKwl7CisJCVBh dGhLZXkgICAgKnBhdGhrZXkgPSAoUGF0aEtleSAqKSBsZmlyc3QobCk7CisJCUVxdWl2YWxlbmNl Q2xhc3MgKmVjID0gcGF0aGtleS0+cGtfZWNsYXNzOworCQlMaXN0Q2VsbCAgICprOworCQlMaXN0 ICpleHBycyA9IE5JTDsKKworCQlmb3JlYWNoKGssIGVjLT5lY19tZW1iZXJzKQorCQl7CisJCQlF cXVpdmFsZW5jZU1lbWJlciAqbWVtID0gKEVxdWl2YWxlbmNlTWVtYmVyICopIGxmaXJzdChrKTsK KwkJCWV4cHJzID0gbGFwcGVuZChleHBycywgbWVtLT5lbV9leHByKTsKKwkJfQorCisJCXJlc3Vs dCA9IGxhcHBlbmQocmVzdWx0LCBtYWtlVW5pcXVlS2V5KGV4cHJzLCBmYWxzZSwgZmFsc2UpKTsK Kwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitib29sCitxdWVyeV9oYXNfdW5pcXVla2V5c19m b3IoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnBhdGhrZXlzLAorCQkJCQkJIGJvb2wgYWxsb3df bXVsdGludWxscykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJTGlzdCAqZXhwcnMgPSBOSUw7CisKKwkv KiBGb3IgVW5pcXVlS2V5LT5vbmVyb3cgY2FzZSwgdGhlIHVuaXF1ZWtleS0+ZXhwcnMgaXMgZW1w dHkgYXMgd2VsbAorCSAqIHNvIHdlIGNhbid0IHJlbHkgb24gbGlzdF9pc19zdWJzZXQgdG8gaGFu ZGxlIHRoaXMgc3BlY2lhbCBjYXNlcworCSAqLworCWlmIChwYXRoa2V5cyA9PSBOSUwpCisJCXJl dHVybiBmYWxzZTsKKworCWZvcmVhY2gobGMsIHBhdGhrZXlzKQorCXsKKwkJUGF0aEtleSAgICAq cGF0aGtleSA9IChQYXRoS2V5ICopIGxmaXJzdChsYyk7CisJCUVxdWl2YWxlbmNlQ2xhc3MgKmVj ID0gcGF0aGtleS0+cGtfZWNsYXNzOworCQlMaXN0Q2VsbCAgICprOworCisJCWZvcmVhY2goaywg ZWMtPmVjX21lbWJlcnMpCisJCXsKKwkJCUVxdWl2YWxlbmNlTWVtYmVyICptZW0gPSAoRXF1aXZh bGVuY2VNZW1iZXIgKikgbGZpcnN0KGspOworCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBtZW0t PmVtX2V4cHIpOworCQl9CisJfQorCisJZm9yZWFjaChsYywgcm9vdC0+cXVlcnlfdW5pcXVla2V5 cykKKwl7CisJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMpOwor CQlpZiAodWtleS0+bXVsdGlfbnVsbHZhbHMgJiYgIWFsbG93X211bHRpbnVsbHMpCisJCQljb250 aW51ZTsKKwkJaWYgKGxpc3RfaXNfc3Vic2V0KHVrZXktPmV4cHJzLCBleHBycykpCisJCQlyZXR1 cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCmluZGV4IDA1NTFhZTA1MTIuLmE1ZjNjMjhmYjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubmVyLmMKQEAgLTM2NjMsOSArMzY2MywxNyBAQCBzdGFuZGFyZF9xcF9jYWxsYmFj ayhQbGFubmVySW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpCiAJCXJvb3QtPnF1ZXJ5X3BhdGhrZXlz ID0gcm9vdC0+d2luZG93X3BhdGhrZXlzOwogCWVsc2UgaWYgKGxpc3RfbGVuZ3RoKHJvb3QtPmRp c3RpbmN0X3BhdGhrZXlzKSA+CiAJCQkgbGlzdF9sZW5ndGgocm9vdC0+c29ydF9wYXRoa2V5cykp CisJewogCQlyb290LT5xdWVyeV9wYXRoa2V5cyA9IHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzOwor CQlyb290LT5xdWVyeV91bmlxdWVrZXlzID0gYnVpbGRfdW5pcXVla2V5cyhyb290LCBwYXJzZS0+ ZGlzdGluY3RDbGF1c2UpOworCX0KIAllbHNlIGlmIChyb290LT5zb3J0X3BhdGhrZXlzKQorCXsK IAkJcm9vdC0+cXVlcnlfcGF0aGtleXMgPSByb290LT5zb3J0X3BhdGhrZXlzOworCisJCWlmIChy b290LT5kaXN0aW5jdF9wYXRoa2V5cykKKwkJCXJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgPSBidWls ZF91bmlxdWVrZXlzKHJvb3QsIHBhcnNlLT5kaXN0aW5jdENsYXVzZSk7CisJfQogCWVsc2UKIAkJ cm9vdC0+cXVlcnlfcGF0aGtleXMgPSBOSUw7CiB9CkBAIC00ODE1LDEzICs0ODIzLDE5IEBAIGNy ZWF0ZV9kaXN0aW5jdF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCVBhdGgJICAgKnBhdGgg PSAoUGF0aCAqKSBsZmlyc3QobGMpOwogCiAJCQlpZiAocGF0aGtleXNfY29udGFpbmVkX2luKG5l ZWRlZF9wYXRoa2V5cywgcGF0aC0+cGF0aGtleXMpKQotCQkJewogCQkJCWFkZF9wYXRoKGRpc3Rp bmN0X3JlbCwgKFBhdGggKikKIAkJCQkJCSBjcmVhdGVfdXBwZXJfdW5pcXVlX3BhdGgocm9vdCwg ZGlzdGluY3RfcmVsLAogCQkJCQkJCQkJCQkJICBwYXRoLAogCQkJCQkJCQkJCQkJICBsaXN0X2xl bmd0aChyb290LT5kaXN0aW5jdF9wYXRoa2V5cyksCiAJCQkJCQkJCQkJCQkgIG51bURpc3RpbmN0 Um93cykpOwotCQkJfQorCQl9CisKKwkJZm9yZWFjaChsYywgaW5wdXRfcmVsLT51bmlxdWVfcGF0 aGxpc3QpCisJCXsKKwkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCisJ CQlpZiAocXVlcnlfaGFzX3VuaXF1ZWtleXNfZm9yKHJvb3QsIG5lZWRlZF9wYXRoa2V5cywgZmFs c2UpKQorCQkJCWFkZF9wYXRoKGRpc3RpbmN0X3JlbCwgcGF0aCk7CiAJCX0KIAogCQkvKiBGb3Ig ZXhwbGljaXQtc29ydCBjYXNlLCBhbHdheXMgdXNlIHRoZSBtb3JlIHJpZ29yb3VzIGNsYXVzZSAq LwpAQCAtNzUxNyw2ICs3NTMxLDI2IEBAIGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKIAkJfQogCX0KIAorCWZvcmVhY2gobGMsIHJlbC0+dW5pcXVlX3Bh dGhsaXN0KQorCXsKKwkJUGF0aAkgICAqc3VicGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisK KwkJLyogU2hvdWxkbid0IGhhdmUgYW55IHBhcmFtZXRlcml6ZWQgcGF0aHMgYW55bW9yZSAqLwor CQlBc3NlcnQoc3VicGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKKworCQlpZiAodGxpc3Rfc2Ft ZV9leHBycykKKwkJCXN1YnBhdGgtPnBhdGh0YXJnZXQtPnNvcnRncm91cHJlZnMgPQorCQkJCXNj YW5qb2luX3RhcmdldC0+c29ydGdyb3VwcmVmczsKKwkJZWxzZQorCQl7CisJCQlQYXRoCSAgICpu ZXdwYXRoOworCisJCQluZXdwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChy b290LCByZWwsIHN1YnBhdGgsCisJCQkJCQkJCQkJCQkJICBzY2Fuam9pbl90YXJnZXQpOworCQkJ bGZpcnN0KGxjKSA9IG5ld3BhdGg7CisJCX0KKwl9CisKIAkvKgogCSAqIE5vdywgaWYgZmluYWwg c2Nhbi9qb2luIHRhcmdldCBjb250YWlucyBTUkZzLCBpbnNlcnQgUHJvamVjdFNldFBhdGgocykK IAkgKiBhdG9wIGVhY2ggZXhpc3RpbmcgcGF0aC4gIChOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBk b2Vzbid0IGxvb2sgYXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRl eCBlODQ1YTRiMWFlLi42MDY1NmJkY2E1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhu b2RlLmMKQEAgLTQxNiwxMCArNDE2LDEwIEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJl bnRfcmVsKQogICogJ3BhcmVudF9yZWwnIGlzIHRoZSByZWxhdGlvbiBlbnRyeSB0byB3aGljaCB0 aGUgcGF0aCBjb3JyZXNwb25kcy4KICAqICduZXdfcGF0aCcgaXMgYSBwb3RlbnRpYWwgcGF0aCBm b3IgcGFyZW50X3JlbC4KICAqCi0gKiBSZXR1cm5zIG5vdGhpbmcsIGJ1dCBtb2RpZmllcyBwYXJl bnRfcmVsLT5wYXRobGlzdC4KKyAqIFJldHVybnMgbW9kaWZpZWQgcGF0aGxpc3QuCiAgKi8KLXZv aWQKLWFkZF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRoKQorc3Rh dGljIExpc3QgKgorYWRkX3BhdGhfdG8oUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgTGlzdCAqcGF0 aGxpc3QsIFBhdGggKm5ld19wYXRoKQogewogCWJvb2wJCWFjY2VwdF9uZXcgPSB0cnVlOwkvKiB1 bmxlc3Mgd2UgZmluZCBhIHN1cGVyaW9yIG9sZCBwYXRoICovCiAJaW50CQkJaW5zZXJ0X2F0ID0g MDsJLyogd2hlcmUgdG8gaW5zZXJ0IG5ldyBpdGVtICovCkBAIC00NDAsNyArNDQwLDcgQEAgYWRk X3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpCiAJICogZm9yIG1v cmUgdGhhbiBvbmUgb2xkIHBhdGggdG8gYmUgdG9zc2VkIG91dCBiZWNhdXNlIG5ld19wYXRoIGRv bWluYXRlcwogCSAqIGl0LgogCSAqLwotCWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhdGhsaXN0 KQorCWZvcmVhY2gocDEsIHBhdGhsaXN0KQogCXsKIAkJUGF0aAkgICAqb2xkX3BhdGggPSAoUGF0 aCAqKSBsZmlyc3QocDEpOwogCQlib29sCQlyZW1vdmVfb2xkID0gZmFsc2U7IC8qIHVubGVzcyBu ZXcgcHJvdmVzIHN1cGVyaW9yICovCkBAIC01ODQsOCArNTg0LDcgQEAgYWRkX3BhdGgoUmVsT3B0 SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpCiAJCSAqLwogCQlpZiAocmVtb3ZlX29s ZCkKIAkJewotCQkJcGFyZW50X3JlbC0+cGF0aGxpc3QgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50 KHBhcmVudF9yZWwtPnBhdGhsaXN0LAotCQkJCQkJCQkJCQkJCQkgIHAxKTsKKwkJCXBhdGhsaXN0 ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChwYXRobGlzdCwgcDEpOwogCiAJCQkvKgogCQkJICog RGVsZXRlIHRoZSBkYXRhIHBvaW50ZWQtdG8gYnkgdGhlIGRlbGV0ZWQgY2VsbCwgaWYgcG9zc2li bGUKQEAgLTYxMiw4ICs2MTEsNyBAQCBhZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQ YXRoICpuZXdfcGF0aCkKIAlpZiAoYWNjZXB0X25ldykKIAl7CiAJCS8qIEFjY2VwdCB0aGUgbmV3 IHBhdGg6IGluc2VydCBpdCBhdCBwcm9wZXIgcGxhY2UgaW4gcGF0aGxpc3QgKi8KLQkJcGFyZW50 X3JlbC0+cGF0aGxpc3QgPQotCQkJbGlzdF9pbnNlcnRfbnRoKHBhcmVudF9yZWwtPnBhdGhsaXN0 LCBpbnNlcnRfYXQsIG5ld19wYXRoKTsKKwkJcGF0aGxpc3QgPSBsaXN0X2luc2VydF9udGgocGF0 aGxpc3QsIGluc2VydF9hdCwgbmV3X3BhdGgpOwogCX0KIAllbHNlCiAJewpAQCAtNjIxLDYgKzYx OSwyMyBAQCBhZGRfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkK IAkJaWYgKCFJc0EobmV3X3BhdGgsIEluZGV4UGF0aCkpCiAJCQlwZnJlZShuZXdfcGF0aCk7CiAJ fQorCisJcmV0dXJuIHBhdGhsaXN0OworfQorCit2b2lkCithZGRfcGF0aChSZWxPcHRJbmZvICpw YXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkKK3sKKwlwYXJlbnRfcmVsLT5wYXRobGlzdCA9IGFk ZF9wYXRoX3RvKHBhcmVudF9yZWwsCisJCQkJCQkJCQkgICBwYXJlbnRfcmVsLT5wYXRobGlzdCwg bmV3X3BhdGgpOworfQorCit2b2lkCithZGRfdW5pcXVlX3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50 X3JlbCwgUGF0aCAqbmV3X3BhdGgpCit7CisJcGFyZW50X3JlbC0+dW5pcXVlX3BhdGhsaXN0ID0g YWRkX3BhdGhfdG8ocGFyZW50X3JlbCwKKwkJCQkJCQkJCQkJICBwYXJlbnRfcmVsLT51bmlxdWVf cGF0aGxpc3QsCisJCQkJCQkJCQkJCSAgbmV3X3BhdGgpOwogfQogCiAvKgpAQCAtMjUzOSw2ICsy NTU0LDcgQEAgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRo bm9kZS0+cGF0aC5wYXRoa2V5cyA9IHN1YnBhdGgtPnBhdGhrZXlzOwogCiAJcGF0aG5vZGUtPnN1 YnBhdGggPSBzdWJwYXRoOworCXBhdGhub2RlLT5wYXRoLnVuaXF1ZWtleXMgPSBzdWJwYXRoLT51 bmlxdWVrZXlzOwogCiAJLyoKIAkgKiBXZSBtaWdodCBub3QgbmVlZCBhIHNlcGFyYXRlIFJlc3Vs dCBub2RlLiAgSWYgdGhlIGlucHV0IHBsYW4gbm9kZSB0eXBlCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmlu ZGV4IDAyZTQ0NThiZWYuLmE1YzQwNmJkNGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yOTcs NiArMjk3LDcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAKIAlMaXN0CSAgICpxdWVyeV9wYXRoa2V5 czsgLyogZGVzaXJlZCBwYXRoa2V5cyBmb3IgcXVlcnlfcGxhbm5lcigpICovCiAKKwlMaXN0CSAg ICpxdWVyeV91bmlxdWVrZXlzOyAvKiB1bmlxdWUga2V5cyByZXF1aXJlZCBmb3IgdGhlIHF1ZXJ5 ICovCiAJTGlzdAkgICAqZ3JvdXBfcGF0aGtleXM7IC8qIGdyb3VwQ2xhdXNlIHBhdGhrZXlzLCBp ZiBhbnkgKi8KIAlMaXN0CSAgICp3aW5kb3dfcGF0aGtleXM7CS8qIHBhdGhrZXlzIG9mIGJvdHRv bSB3aW5kb3csIGlmIGFueSAqLwogCUxpc3QJICAgKmRpc3RpbmN0X3BhdGhrZXlzOwkvKiBkaXN0 aW5jdENsYXVzZSBwYXRoa2V5cywgaWYgYW55ICovCkBAIC02NzksNiArNjgwLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUxpc3QJICAgKnBhdGhsaXN0OwkJLyogUGF0aCBzdHJ1Y3R1 cmVzICovCiAJTGlzdAkgICAqcHBpbGlzdDsJCS8qIFBhcmFtUGF0aEluZm9zIHVzZWQgaW4gcGF0 aGxpc3QgKi8KIAlMaXN0CSAgICpwYXJ0aWFsX3BhdGhsaXN0OwkvKiBwYXJ0aWFsIFBhdGhzICov CisJTGlzdCAgICAgICAqdW5pcXVlX3BhdGhsaXN0OyAgICAvKiB1bmlxdWUgUGF0aHMgKi8KIAlz dHJ1Y3QgUGF0aCAqY2hlYXBlc3Rfc3RhcnR1cF9wYXRoOwogCXN0cnVjdCBQYXRoICpjaGVhcGVz dF90b3RhbF9wYXRoOwogCXN0cnVjdCBQYXRoICpjaGVhcGVzdF91bmlxdWVfcGF0aDsKQEAgLTg2 Niw2ICs4NjgsNyBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJYW1zZWFyY2hudWxsczsJ LyogY2FuIEFNIHNlYXJjaCBmb3IgTlVMTC9OT1QgTlVMTCBlbnRyaWVzPyAqLwogCWJvb2wJCWFt aGFzZ2V0dHVwbGU7CS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KIAli b29sCQlhbWhhc2dldGJpdG1hcDsgLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFj ZT8gKi8KKwlib29sCQlhbWNhbnNraXA7CQkvKiBjYW4gQU0gc2tpcCBkdXBsaWNhdGUgdmFsdWVz PyAqLwogCWJvb2wJCWFtY2FucGFyYWxsZWw7CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBz Y2FuPyAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJl IGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwogCXZvaWQJCSgqYW1jb3N0ZXN0aW1hdGUpICgp OwkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCkBAIC0xMTgyLDYgKzExODUsOCBAQCB0eXBlZGVm IHN0cnVjdCBQYXRoCiAKIAlMaXN0CSAgICpwYXRoa2V5czsJCS8qIHNvcnQgb3JkZXJpbmcgb2Yg cGF0aCdzIG91dHB1dCAqLwogCS8qIHBhdGhrZXlzIGlzIGEgTGlzdCBvZiBQYXRoS2V5IG5vZGVz OyBzZWUgYWJvdmUgKi8KKworCUxpc3QJICAgKnVuaXF1ZWtleXM7CS8qIHRoZSB1bmlxdWUga2V5 cywgb3IgTklMIGlmIG5vbmUgKi8KIH0gUGF0aDsKIAogLyogTWFjcm8gZm9yIGV4dHJhY3Rpbmcg YSBwYXRoJ3MgcGFyYW1ldGVyaXphdGlvbiByZWxpZHM7IGJld2FyZSBkb3VibGUgZXZhbCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA3MTVhMjRhZDI5Li42Nzk2YWQ4Y2I3IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gaW50CWNvbXBh cmVfZnJhY3Rpb25hbF9wYXRoX2Nvc3RzKFBhdGggKnBhdGgxLCBQYXRoICpwYXRoMiwKIAkJCQkJ CQkJCQkgIGRvdWJsZSBmcmFjdGlvbik7CiBleHRlcm4gdm9pZCBzZXRfY2hlYXBlc3QoUmVsT3B0 SW5mbyAqcGFyZW50X3JlbCk7CiBleHRlcm4gdm9pZCBhZGRfcGF0aChSZWxPcHRJbmZvICpwYXJl bnRfcmVsLCBQYXRoICpuZXdfcGF0aCk7CitleHRlcm4gdm9pZCBhZGRfdW5pcXVlX3BhdGgoUmVs T3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpOwogZXh0ZXJuIGJvb2wgYWRkX3Bh dGhfcHJlY2hlY2soUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwKIAkJCQkJCQkgIENvc3Qgc3RhcnR1 cF9jb3N0LCBDb3N0IHRvdGFsX2Nvc3QsCiAJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywgUmVsaWRz IHJlcXVpcmVkX291dGVyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggOTIxN2E4ZDZjNi4uMGNi ODAzMGUzMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIv c3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTIxNSw2ICsyMTUsOSBAQCBleHRlcm4g TGlzdCAqYnVpbGRfam9pbl9wYXRoa2V5cyhQbGFubmVySW5mbyAqcm9vdCwKIGV4dGVybiBMaXN0 ICptYWtlX3BhdGhrZXlzX2Zvcl9zb3J0Y2xhdXNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCQkgICBMaXN0ICpzb3J0Y2xhdXNlcywKIAkJCQkJCQkJCQkgICBMaXN0ICp0bGlzdCk7Citl eHRlcm4gTGlzdCAqbWFrZV9wYXRoa2V5c19mb3JfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCQkgIExpc3QgKnNvcnRjbGF1c2VzLAorCQkJCQkJCQkJCSAgTGlzdCAqdGxp c3QpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9tZXJnZWNsYXVzZV9lY2xhc3NlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJUmVzdHJpY3RJbmZvICpyZXN0cmljdGluZm8pOwogZXh0 ZXJuIHZvaWQgdXBkYXRlX21lcmdlY2xhdXNlX2VjbGFzc2VzKFBsYW5uZXJJbmZvICpyb290LApA QCAtMjgyLDYgKzI4NSwxMSBAQCBleHRlcm4gYm9vbCByZWxhdGlvbl9oYXNfdW5pcXVla2V5c19m b3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJ CQkJCUxpc3QgKmV4cHJzLAogCQkJCQkJCQkJCWJvb2wgYWxsb3dfbXVsdGludWxscyk7CitleHRl cm4gYm9vbCBxdWVyeV9oYXNfdW5pcXVla2V5c19mb3IoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJ CQkJCQkgTGlzdCAqZXhwcnMsCisJCQkJCQkJCQkgYm9vbCBhbGxvd19tdWx0aW51bGxzKTsKIGV4 dGVybiBib29sIHJlbGF0aW9uX2lzX29uZXJvdyhSZWxPcHRJbmZvICpyZWwpOwogCitleHRlcm4g TGlzdCAqYnVpbGRfdW5pcXVla2V5cyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqc29ydGNsYXVz ZXMpOworCiAjZW5kaWYJCQkJCQkJLyogUEFUSFNfSCAqLwotLSAKMi4yNS4wCgo= --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0004-Index-skip-scan.patch" Content-Description: 0004-Index-skip-scan.patch Content-Disposition: attachment; filename="0004-Index-skip-scan.patch"; size=39368; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSA5Yjg1M2I4MjdlOGMyN2Q1ZmJjODk2OTJiNjZmMDBiYTMyZmNkOGY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6Mzk6MTMgKzAyMDAKU3ViamVjdDogW1BBVENIIDQv N10gSW5kZXggc2tpcCBzY2FuCgpJbXBsZW1lbnRhdGlvbiBvZiBiYXNpYyBJbmRleCBTa2lwIFNj YW4gKHNlZSBMb29zZSBJbmRleCBTY2FuIGluIHRoZQp3aWtpIFsxXSkgaW5mcmFzdHJ1Y3R1cmUg b24gdG9wIG9mIEluZGV4T25seVNjYW4gYW5kIEluZGV4U2Nhbi4KSW50cm9kdWNlcyBhIG5ldyBp bmRleCBhbSBmdW5jdGlvbiBhbXNraXAgdG8gYWxsb3cgYWR2YW5jZSBwYXN0CmR1cGxpY2F0ZSBr ZXkgdmFsdWVzIGluIGEgc2Nhbi4gVGhpcyBpbm5vY2VudGx5IGxvb2tpbmcgZGVzY3JpcHRpb24K Y291bGQgYmUgYSBiaXQgdHJpY2t5IG9uIHRoZSBlZGdlIGJldHdlZW4gYW0gc3BlY2lmaWMgYW5k IGNvbW1vbiBwYXJ0cwpvZiB0aGUgaW1wbGVtZW50YXRpb24sIG1vc3RseSBkdWUgdG8gZGlmZmVy ZW50IGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdAplYWNoIGxldmVsLCBlLmcuIHZpc2liaWxpdHku IFRoaXMgbWVhbnMgdGhlIGNvbW1vbiBwYXJ0cyBzaG91bGQgYXBwbHkKc2tpcHBpbmcgbXVsdGlw bGUgdGltZXMgaWYgbmVjZXNzYXJ5LgoKT3JpZ2luYWwgcGF0Y2ggYW5kIGRlc2lnbiB3ZXJlIHBy b3Bvc2VkIGJ5IFRob21hcyBNdW5ybyBbMl0sIHJldml2ZWQgYW5kCmltcHJvdmVkIGJ5IERtaXRy eSBEb2xnb3YgYW5kIEplc3BlciBQZWRlcnNlbi4KClsxXSBodHRwczovL3dpa2kucG9zdGdyZXNx bC5vcmcvd2lraS9Mb29zZV9pbmRleHNjYW4KWzJdIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvZmxhdC9DQURMV21YWGJUU0J4UC1Nekp1UEFZU3NMXzJmMGlQbTVWV1BiQ3ZE YlZ2Zlg5M0ZLa3clNDBtYWlsLmdtYWlsLmNvbQoKQXV0aG9yOiBKZXNwZXIgUGVkZXJzZW4sIERt aXRyeSBEb2xnb3YKUmV2aWV3ZWQtYnk6IFRob21hcyBNdW5ybywgRGF2aWQgUm93bGV5LCBGbG9y aXMgVmFuIE5lZSwgS3lvdGFybyBIb3JpZ3VjaGksIFRvbWFzIFZvbmRyYSwgUGV0ZXIgR2VvZ2hl Z2FuCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwg IDEgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgIDEgKwogc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgMTggKysrKwogc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwgMjUgKysrKysKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICAgICB8IDk3ICsrKysrKysrKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8IDU2ICsr KysrKysrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAgICAgICAgICAg fCAgMiArCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgICAgICAgfCAg MiArCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgMiAr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgMSArCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCA5NiArKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAg ICB8IDIwICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAgICAg ICB8IDY0ICsrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j ICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAgICAg ICAgICAgIHwgIDkgKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAgICAgICAg ICB8ICA4ICsrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAg fCAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2Rpci5oICAgICAgICAgICAgICAgICAgICAgfCAg NyArKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgIDYg KysKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICA0ICsK IHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICAgICAgICB8ICA0ICsKIHNy Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9p bmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAgICAgICB8ICA0ICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAzICstCiAzMCBmaWxlcyBj aGFuZ2VkLCA0MjkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwppbmRleCBk M2JmODY2NWRmLi40ZWVjMjFiOTllIDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMu YworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTM0LDYgKzEzNCw3IEBAIGJsaGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gYmxidWxr ZGVsZXRlOwogCWFtcm91dGluZS0+YW12YWN1dW1jbGVhbnVwID0gYmx2YWN1dW1jbGVhbnVwOwog CWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1za2lwID0gTlVM TDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gYmxjb3N0ZXN0aW1hdGU7CiAJYW1yb3V0 aW5lLT5hbW9wdGlvbnMgPSBibG9wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVM TDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sCmluZGV4IGFmODdmMTcyYTcuLjhjNTUyYzIyYmQgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApA QCAtMTUwLDYgKzE1MCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1l bmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKICAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJr cG9zOyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1y ZXN0cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1za2lwX2Z1bmN0aW9uIGFtc2tp cDsgICAgICAgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5j dGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVw YXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJl IE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA3ZGIzYWU1ZWUwLi5lM2UwOWVmYTMx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0xMTUsNiArMTE1LDcgQEAgYnJpbmhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJyaW5idWxrZGVs ZXRlOwogCWFtcm91dGluZS0+YW12YWN1dW1jbGVhbnVwID0gYnJpbnZhY3V1bWNsZWFudXA7CiAJ YW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXNraXAgPSBOVUxM OwogCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBicmluY29zdGVzdGltYXRlOwogCWFtcm91 dGluZS0+YW1vcHRpb25zID0gYnJpbm9wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0g TlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggYTQwMGYxZmVkYi4uN2U4M2E4ZWU1 OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTY2LDYgKzY2LDcgQEAgZ2luaGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gZ2luYnVsa2Rl bGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGdpbnZhY3V1bWNsZWFudXA7CiAJ YW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXNraXAgPSBOVUxM OwogCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBnaW5jb3N0ZXN0aW1hdGU7CiAJYW1yb3V0 aW5lLT5hbW9wdGlvbnMgPSBnaW5vcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggNzlmZTZlYjhkNi4uNmZlOWY4ZjVhOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtODcsNiArODcsNyBAQCBnaXN0aGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gZ2lzdGJ1bGtkZWxldGU7CiAJ YW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBnaXN0dmFjdXVtY2xlYW51cDsKIAlhbXJvdXRp bmUtPmFtY2FucmV0dXJuID0gZ2lzdGNhbnJldHVybjsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IGdpc3Rjb3N0ZXN0aW1hdGU7CiAJYW1y b3V0aW5lLT5hbW9wdGlvbnMgPSBnaXN0b3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkg PSBnaXN0cHJvcGVydHk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggM2VjNmQ1MjhlNy4uODVk NDRlZTU4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtODQsNiArODQsNyBAQCBoYXNoaGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1idWxrZGVsZXRlID0gaGFzaGJ1 bGtkZWxldGU7CiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBoYXNodmFjdXVtY2xlYW51 cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtc2tpcCA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IGhhc2hjb3N0ZXN0aW1hdGU7CiAJ YW1yb3V0aW5lLT5hbW9wdGlvbnMgPSBoYXNob3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJvcGVy dHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNmI5NzUwYzI0NC4u YzdiNzA5OTdmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0zMyw2ICszMyw3 IEBACiAgKgkJaW5kZXhfY2FuX3JldHVybgktIGRvZXMgaW5kZXggc3VwcG9ydCBpbmRleC1vbmx5 IHNjYW5zPwogICoJCWluZGV4X2dldHByb2NpZCAtIGdldCBhIHN1cHBvcnQgcHJvY2VkdXJlIE9J RAogICoJCWluZGV4X2dldHByb2NpbmZvIC0gZ2V0IGEgc3VwcG9ydCBwcm9jZWR1cmUncyBsb29r dXAgaW5mbworICoJCWluZGV4X3NraXAJCS0gYWR2YW5jZSBwYXN0IGR1cGxpY2F0ZSBrZXkgdmFs dWVzIGluIGEgc2NhbgogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBp bmRleF8gcm91dGluZXMgd2hpY2ggdXNlZApAQCAtNzM2LDYgKzczNywyMyBAQCBpbmRleF9jYW5f cmV0dXJuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBhdHRubykKIAlyZXR1cm4gaW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtY2FucmV0dXJuKGluZGV4UmVsYXRpb24sIGF0dG5vKTsKIH0K IAorLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X3NraXAKKyAqCisgKgkJU2tpcCBwYXN0 IGFsbCB0dXBsZXMgd2hlcmUgdGhlIGZpcnN0ICdwcmVmaXgnIGNvbHVtbnMgaGF2ZSB0aGUKKyAq CQlzYW1lIHZhbHVlIGFzIHRoZSBsYXN0IHR1cGxlIHJldHVybmVkIGluIHRoZSBjdXJyZW50IHNj YW4uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK2Jvb2wKK2luZGV4X3NraXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJICAgU2NhbkRpcmVjdGlvbiBp bmRleGRpciwgYm9vbCBzY2Fuc3RhcnQsIGludCBwcmVmaXgpCit7CisJU0NBTl9DSEVDS1M7CisK KwlyZXR1cm4gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtc2tpcChzY2FuLCBkaXJl Y3Rpb24sCisJCQkJCQkJCQkJCQkgaW5kZXhkaXIsIHNjYW5zdGFydCwgcHJlZml4KTsKK30KKwog LyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldHByb2NpZAogICoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCAwZWZlMDVlNTUyLi4wNDkxZWExNzJhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC02OSw2ICs2OSw3IEBAIHNwZ2hhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IHNwZ2J1bGtkZWxl dGU7CiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBzcGd2YWN1dW1jbGVhbnVwOwogCWFt cm91dGluZS0+YW1jYW5yZXR1cm4gPSBzcGdjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5hbXNraXAg PSBOVUxMOwogCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzcGdjb3N0ZXN0aW1hdGU7CiAJ YW1yb3V0aW5lLT5hbW9wdGlvbnMgPSBzcGdvcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0 eSA9IHNwZ3Byb3BlcnR5OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGEyODNlNGQ0NWMuLjNj NjI1ODc2MWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTE0OCw2ICsxNDgsNyBAQCBzdGF0 aWMgdm9pZCBFeHBsYWluWE1MVGFnKGNvbnN0IGNoYXIgKnRhZ25hbWUsIGludCBmbGFncywgRXhw bGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBFeHBsYWluSW5kZW50VGV4dChFeHBsYWluU3Rh dGUgKmVzKTsKIHN0YXRpYyB2b2lkIEV4cGxhaW5KU09OTGluZUVuZGluZyhFeHBsYWluU3RhdGUg KmVzKTsKIHN0YXRpYyB2b2lkIEV4cGxhaW5ZQU1MTGluZVN0YXJ0aW5nKEV4cGxhaW5TdGF0ZSAq ZXMpOworc3RhdGljIHZvaWQgRXhwbGFpbkluZGV4U2tpcFNjYW5LZXlzKGludCBza2lwUHJlZml4 U2l6ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBlc2NhcGVfeWFtbChTdHJpbmdJ bmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKIAogCkBAIC0xMDk2LDYgKzEwOTcsMjIgQEAgRXhw bGFpblByZVNjYW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBCaXRtYXBzZXQgKipyZWxzX3Vz ZWQpCiAJcmV0dXJuIHBsYW5zdGF0ZV90cmVlX3dhbGtlcihwbGFuc3RhdGUsIEV4cGxhaW5QcmVT Y2FuTm9kZSwgcmVsc191c2VkKTsKIH0KIAorLyoKKyAqIEV4cGxhaW5JbmRleFNraXBTY2FuS2V5 cyAtCisgKgkgIEFwcGVuZCBpbmZvcm1hdGlvbiBhYm91dCBpbmRleCBza2lwIHNjYW4gdG8gZXMt PnN0ci4KKyAqCisgKiBDYW4gYmUgdXNlZCB0byBwcmludCB0aGUgc2tpcCBwcmVmaXggc2l6ZS4K KyAqLworc3RhdGljIHZvaWQKK0V4cGxhaW5JbmRleFNraXBTY2FuS2V5cyhpbnQgc2tpcFByZWZp eFNpemUsIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJaWYgKHNraXBQcmVmaXhTaXplID4gMCkKKwl7 CisJCWlmIChlcy0+Zm9ybWF0ICE9IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCQlFeHBsYWluUHJv cGVydHlJbnRlZ2VyKCJEaXN0aW5jdCBQcmVmaXgiLCBOVUxMLCBza2lwUHJlZml4U2l6ZSwgZXMp OworCX0KK30KKwogLyoKICAqIEV4cGxhaW5Ob2RlIC0KICAqCSAgQXBwZW5kcyBhIGRlc2NyaXB0 aW9uIG9mIGEgcGxhbiB0cmVlIHRvIGVzLT5zdHIKQEAgLTE0MzMsNiArMTQ1MCw4IEBAIEV4cGxh aW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQl7CiAJCQkJ SW5kZXhTY2FuICAqaW5kZXhzY2FuID0gKEluZGV4U2NhbiAqKSBwbGFuOwogCisJCQkJRXhwbGFp bkluZGV4U2tpcFNjYW5LZXlzKGluZGV4c2Nhbi0+aW5kZXhza2lwcHJlZml4c2l6ZSwgZXMpOwor CiAJCQkJRXhwbGFpbkluZGV4U2NhbkRldGFpbHMoaW5kZXhzY2FuLT5pbmRleGlkLAogCQkJCQkJ CQkJCWluZGV4c2Nhbi0+aW5kZXhvcmRlcmRpciwKIAkJCQkJCQkJCQllcyk7CkBAIC0xNDQzLDYg KzE0NjIsOCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCQkJewogCQkJCUluZGV4T25seVNjYW4gKmluZGV4b25seXNjYW4gPSAoSW5kZXhPbmx5 U2NhbiAqKSBwbGFuOwogCisJCQkJRXhwbGFpbkluZGV4U2tpcFNjYW5LZXlzKGluZGV4b25seXNj YW4tPmluZGV4c2tpcHByZWZpeHNpemUsIGVzKTsKKwogCQkJCUV4cGxhaW5JbmRleFNjYW5EZXRh aWxzKGluZGV4b25seXNjYW4tPmluZGV4aWQsCiAJCQkJCQkJCQkJaW5kZXhvbmx5c2Nhbi0+aW5k ZXhvcmRlcmRpciwKIAkJCQkJCQkJCQllcyk7CkBAIC0xNzAzLDYgKzE3MjQsOCBAQCBFeHBsYWlu Tm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCXN3aXRjaCAobm9k ZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9JbmRleFNjYW46CisJCQlpZiAoKChJbmRleFNjYW4g KikgcGxhbiktPmluZGV4c2tpcHByZWZpeHNpemUgPiAwKQorCQkJCUV4cGxhaW5Qcm9wZXJ0eUJv b2woIlNraXAgc2NhbiIsIHRydWUsIGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhTY2Fu ICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3Rh dGUsIGFuY2VzdG9ycywgZXMpOwogCQkJaWYgKCgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1 YWxvcmlnKQpAQCAtMTcxNiw2ICsxNzM5LDggQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFu c3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKIAkJ CWJyZWFrOwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCWlmICgoKEluZGV4T25seVNjYW4g KikgcGxhbiktPmluZGV4c2tpcHByZWZpeHNpemUgPiAwKQorCQkJCUV4cGxhaW5Qcm9wZXJ0eUJv b2woIlNraXAgc2NhbiIsIHRydWUsIGVzKTsKIAkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhPbmx5 U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3Rh dGUsIGFuY2VzdG9ycywgZXMpOwogCQkJaWYgKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5k ZXhxdWFsKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggNTYx N2FjMjllNy4uYzRlNGIwODdhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvaXRlbXB0ci5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTYyLDkgKzYzLDI2IEBAIEluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCUVTdGF0ZQkgICAqZXN0YXRlOwogCUV4cHJDb250 ZXh0ICplY29udGV4dDsKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKKwlTY2FuRGlyZWN0aW9u IHJlYWREaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKIAlJdGVtUG9pbnRlciB0aWQ7CisJSXRlbVBvaW50ZXJEYXRhIHN0YXJ0VGlkOwor CUluZGV4T25seVNjYW4gKmluZGV4b25seXNjYW4gPSAoSW5kZXhPbmx5U2NhbiAqKSBub2RlLT5z cy5wcy5wbGFuOworCisJLyoKKwkgKiBUZWxscyBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiB3YXMg cmVhY2hlZCB2aWEgc2tpcHBpbmcuIEluIHRoaXMgY2FzZQorCSAqIHRoZXJlIGlzIG5vIG5lYWQg Zm9yIHRoZSBpbmRleF9nZXRuZXh0X3RpZAorCSAqLworCWJvb2wgc2tpcHBlZCA9IGZhbHNlOwor CisJLyoKKwkgKiBJbmRleCBvbmx5IHNjYW4gbXVzdCBiZSBhd2FyZSB0aGF0IGluIGNhc2Ugb2Yg c2tpcHBpbmcgd2UgY2FuIHJldHVybiB0bworCSAqIHRoZSBzdGFydGluZyBwb2ludCBkdWUgdG8g dmlzaWJpbGl0eSBjaGVja3MuIEluIHRoaXMgc2l0dWF0aW9uIHdlIG5lZWQKKwkgKiB0byBqdW1w IGZ1cnRoZXIsIGFuZCBudW1iZXIgb2Ygc2tpcHBpbmcgYXR0ZW1wdHMgdGVsbCB1cyBob3cgZmFy IGRvIHdlCisJICogbmVlZCB0byBkbyBzby4KKwkgKi8KKwlpbnQgc2tpcEF0dGVtcHRzID0gMDsK IAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2Fu IG5vZGUKQEAgLTcyLDcgKzkwLDcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUpCiAJZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CiAJZGlyZWN0aW9uID0gZXN0YXRl LT5lc19kaXJlY3Rpb247CiAJLyogZmxpcCBkaXJlY3Rpb24gaWYgdGhpcyBpcyBhbiBvdmVyYWxs IGJhY2t3YXJkIHNjYW4gKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoKChJbmRleE9u bHlTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKSkKKwlpZiAoU2NhbkRp cmVjdGlvbklzQmFja3dhcmQoaW5kZXhvbmx5c2Nhbi0+aW5kZXhvcmRlcmRpcikpCiAJewogCQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQogCQkJZGlyZWN0aW9uID0gQmFj a3dhcmRTY2FuRGlyZWN0aW9uOwpAQCAtMTE0LDE2ICsxMzIsODcgQEAgSW5kZXhPbmx5TmV4dChJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkgbm9kZS0+aW9zc19PcmRlckJ5S2V5cywK IAkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAl9CisJZWxzZQorCXsKKwkJSXRl bVBvaW50ZXJDb3B5KCZzY2FuZGVzYy0+eHNfaGVhcHRpZCwgJnN0YXJ0VGlkKTsKKwl9CisKKwkv KgorCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2tpcCB0byB0aGUgbmV4dCBrZXkgcHJlZml4LCBi ZWNhdXNlIHdlJ3ZlIGJlZW4KKwkgKiBhc2tlZCB0byBpbXBsZW1lbnQgRElTVElOQ1QuCisJICoK KwkgKiBXaGVuIGZldGNoaW5nIGEgY3Vyc29yIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgdG8g YSBnZW5lcmFsIHNjYW4KKwkgKiBkaXJlY3Rpb24sIHRoZSByZXN1bHQgbXVzdCBiZSB3aGF0IG5v cm1hbCBmZXRjaGluZyBzaG91bGQgaGF2ZQorCSAqIHJldHVybmVkLCBidXQgaW4gcmV2ZXJzZWQg b3JkZXIuIEluIG90aGVyIHdvcmRzLCByZXR1cm4gdGhlIGxhc3Qgb3IKKwkgKiBmaXJzdCBzY2Fu bmVkIHR1cGxlIGluIGEgRElTVElOQ1Qgc2V0LCBkZXBlbmRpbmcgb24gYSBjdXJzb3IgZGlyZWN0 aW9uLgorCSAqIER1ZSB0byB0aGF0IHdlIHNraXAgYWxzbyB3aGVuIHRoZSBmaXJzdCB0dXBsZSB3 YXNuJ3QgZW1pdHRlZCB5ZXQsIGJ1dAorCSAqIHRoZSBkaXJlY3Rpb25zIGFyZSBvcHBvc2l0ZS4K KwkgKi8KKwlpZiAobm9kZS0+aW9zc19Ta2lwUHJlZml4U2l6ZSA+IDAgJiYKKwkJKG5vZGUtPmlv c3NfRmlyc3RUdXBsZUVtaXR0ZWQgfHwKKwkJIFNjYW5EaXJlY3Rpb25zQXJlT3Bwb3NpdGUoZGly ZWN0aW9uLCBpbmRleG9ubHlzY2FuLT5pbmRleG9yZGVyZGlyKSkpCisJeworCQlpZiAoIWluZGV4 X3NraXAoc2NhbmRlc2MsIGRpcmVjdGlvbiwgaW5kZXhvbmx5c2Nhbi0+aW5kZXhvcmRlcmRpciwK KwkJCQkJCSFub2RlLT5pb3NzX0ZpcnN0VHVwbGVFbWl0dGVkLCBub2RlLT5pb3NzX1NraXBQcmVm aXhTaXplKSkKKwkJeworCQkJLyoKKwkJCSAqIFJlYWNoZWQgZW5kIG9mIGluZGV4LiBBdCB0aGlz IHBvaW50IGN1cnJQb3MgaXMgaW52YWxpZGF0ZWQsIGFuZAorCQkJICogd2UgbmVlZCB0byByZXNl dCBpb3NzX0ZpcnN0VHVwbGVFbWl0dGVkLCBzaW5jZSBvdGhlcndpc2UgYWZ0ZXIKKwkJCSAqIGdv aW5nIGJhY2t3YXJkcywgcmVhY2hpbmcgdGhlIGVuZCBvZiBpbmRleCwgYW5kIGdvaW5nIGZvcndh cmQKKwkJCSAqIGFnYWluIHdlIGFwcGx5IHNraXAgYWdhaW4uIEl0IHdvdWxkIGJlIGluY29ycmVj dCBhbmQgbGVhZCB0byBhbgorCQkJICogZXh0cmEgc2tpcHBlZCBpdGVtLgorCQkJICovCisJCQlu b2RlLT5pb3NzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJCQlyZXR1cm4gRXhlY0NsZWFy VHVwbGUoc2xvdCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlza2lwQXR0ZW1wdHMgPSAxOworCQkJ c2tpcHBlZCA9IHRydWU7CisJCQl0aWQgPSAmc2NhbmRlc2MtPnhzX2hlYXB0aWQ7CisJCX0KKwl9 CisKKwlyZWFkRGlyZWN0aW9uID0gc2tpcHBlZCA/IGluZGV4b25seXNjYW4tPmluZGV4b3JkZXJk aXIgOiBkaXJlY3Rpb247CiAKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2Ug bmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9n ZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAoc2tpcHBl ZCB8fCAodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIHJlYWREaXJlY3Rpb24pKSAh PSBOVUxMKQogCXsKIAkJYm9vbAkJdHVwbGVfZnJvbV9oZWFwID0gZmFsc2U7CiAKIAkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKIAorCQkvKgorCQkgKiBXaGlsZSBkb2luZyBpbmRleCBvbmx5IHNr aXAgc2NhbiB3aXRoIGFkdmFuY2luZyBhbmQgcmVhZGluZyBpbgorCQkgKiBkaWZmZXJlbnQgZGly ZWN0aW9ucyB3ZSBjYW4gcmV0dXJuIHRvIHRoZSBzYW1lIHBvc2l0aW9uIHdoZXJlIHdlCisJCSAq IHN0YXJ0ZWQgYWZ0ZXIgdmlzaWJpbGl0eSBjaGVjay4gUmVjb2duaXplIHN1Y2ggc2l0dWF0aW9u cyBhbmQgc2tpcAorCQkgKiBtb3JlLgorCQkgKi8KKwkJaWYgKChyZWFkRGlyZWN0aW9uICE9IGRp cmVjdGlvbikgJiYKKwkJCUl0ZW1Qb2ludGVySXNWYWxpZCgmc3RhcnRUaWQpICYmIEl0ZW1Qb2lu dGVyRXF1YWxzKCZzdGFydFRpZCwgdGlkKSkKKwkJeworCQkJaW50IGk7CisJCQlza2lwQXR0ZW1w dHMgKz0gMTsKKworCQkJZm9yIChpID0gMDsgaSA8IHNraXBBdHRlbXB0czsgaSsrKQorCQkJewor CQkJCWlmICghaW5kZXhfc2tpcChzY2FuZGVzYywgZGlyZWN0aW9uLAorCQkJCQkJCQlpbmRleG9u bHlzY2FuLT5pbmRleG9yZGVyZGlyLAorCQkJCQkJCQkhbm9kZS0+aW9zc19GaXJzdFR1cGxlRW1p dHRlZCwKKwkJCQkJCQkJbm9kZS0+aW9zc19Ta2lwUHJlZml4U2l6ZSkpCisJCQkJeworCQkJCQlu b2RlLT5pb3NzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJCQkJCXJldHVybiBFeGVjQ2xl YXJUdXBsZShzbG90KTsKKwkJCQl9CisJCQl9CisKKwkJCXRpZCA9ICZzY2FuZGVzYy0+eHNfaGVh cHRpZDsKKwkJfQorCisJCXNraXBwZWQgPSBmYWxzZTsKKwogCQkvKgogCQkgKiBXZSBjYW4gc2tp cCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KIAkJ ICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBh bnkgY2FzZSwKQEAgLTI1MCw2ICszMzksOCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5T dGF0ZSAqbm9kZSkKIAkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKIAkJ CQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwogCisJCW5vZGUtPmlvc3NfRmlyc3RUdXBsZUVt aXR0ZWQgPSB0cnVlOworCiAJCXJldHVybiBzbG90OwogCX0KIApAQCAtNTA0LDYgKzU5NSw4IEBA IEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5zcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsK IAlpbmRleHN0YXRlLT5zcy5wcy5zdGF0ZSA9IGVzdGF0ZTsKIAlpbmRleHN0YXRlLT5zcy5wcy5F eGVjUHJvY05vZGUgPSBFeGVjSW5kZXhPbmx5U2NhbjsKKwlpbmRleHN0YXRlLT5pb3NzX1NraXBQ cmVmaXhTaXplID0gbm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZTsKKwlpbmRleHN0YXRlLT5pb3Nz X0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CiAKIAkvKgogCSAqIE1pc2NlbGxhbmVvdXMgaW5p dGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBkMGE5NmEz OGUwLi40NDlhYWVjM2FjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC04 NSw2ICs4NSwxMyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKKwlJbmRleFNjYW4gKmluZGV4c2NhbiA9IChJbmRleFNjYW4gKikgbm9kZS0+c3Mu cHMucGxhbjsKKworCS8qCisJICogdGVsbHMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2FzIHJl YWNoZWQgdmlhIHNraXBwaW5nLiBJbiB0aGlzIGNhc2UKKwkgKiB0aGVyZSBpcyBubyBuZWFkIGZv ciB0aGUgaW5kZXhfZ2V0bmV4dF90aWQKKwkgKi8KKwlib29sIHNraXBwZWQgPSBmYWxzZTsKIAog CS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5v ZGUKQEAgLTkyLDcgKzk5LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCWVz dGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwogCWRpcmVjdGlvbiA9IGVzdGF0ZS0+ZXNfZGlyZWN0 aW9uOwogCS8qIGZsaXAgZGlyZWN0aW9uIGlmIHRoaXMgaXMgYW4gb3ZlcmFsbCBiYWNrd2FyZCBz Y2FuICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKCgoSW5kZXhTY2FuICopIG5vZGUt PnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKSkKKwlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dh cmQoaW5kZXhzY2FuLT5pbmRleG9yZGVyZGlyKSkKIAl7CiAJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcmVjdGlvbikpCiAJCQlkaXJlY3Rpb24gPSBCYWNrd2FyZFNjYW5EaXJlY3Rpb247 CkBAIC0xMTcsNiArMTI0LDEyIEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAog CQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBJbmRleCBza2lwIHNjYW4g YXNzdW1lcyB4c193YW50X2l0dXAsIHNvIHNldCBpdCB0byB0cnVlICovCisJCWlmIChpbmRleHNj YW4tPmluZGV4c2tpcHByZWZpeHNpemUgPiAwKQorCQkJbm9kZS0+aXNzX1NjYW5EZXNjLT54c193 YW50X2l0dXAgPSB0cnVlOworCQllbHNlCisJCQlub2RlLT5pc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IGZhbHNlOworCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3Vs YXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFzcyB0aGUgc2Nhbmtl eXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtMTI3LDEyICsxNDAsNDggQEAgSW5kZXhOZXh0KEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkJCQkJIG5vZGUtPmlzc19PcmRlckJ5S2V5cywgbm9kZS0+aXNz X051bU9yZGVyQnlLZXlzKTsKIAl9CiAKKwkvKgorCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2tp cCB0byB0aGUgbmV4dCBrZXkgcHJlZml4LCBiZWNhdXNlIHdlJ3ZlIGJlZW4KKwkgKiBhc2tlZCB0 byBpbXBsZW1lbnQgRElTVElOQ1QuCisJICoKKwkgKiBXaGVuIGZldGNoaW5nIGEgY3Vyc29yIGlu IHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgdG8gYSBnZW5lcmFsIHNjYW4KKwkgKiBkaXJlY3Rpb24s IHRoZSByZXN1bHQgbXVzdCBiZSB3aGF0IG5vcm1hbCBmZXRjaGluZyBzaG91bGQgaGF2ZQorCSAq IHJldHVybmVkLCBidXQgaW4gcmV2ZXJzZWQgb3JkZXIuIEluIG90aGVyIHdvcmRzLCByZXR1cm4g dGhlIGxhc3Qgb3IKKwkgKiBmaXJzdCBzY2FubmVkIHR1cGxlIGluIGEgRElTVElOQ1Qgc2V0LCBk ZXBlbmRpbmcgb24gYSBjdXJzb3IgZGlyZWN0aW9uLgorCSAqIER1ZSB0byB0aGF0IHdlIHNraXAg YWxzbyB3aGVuIHRoZSBmaXJzdCB0dXBsZSB3YXNuJ3QgZW1pdHRlZCB5ZXQsIGJ1dAorCSAqIHRo ZSBkaXJlY3Rpb25zIGFyZSBvcHBvc2l0ZS4KKwkgKi8KKwlpZiAobm9kZS0+aXNzX1NraXBQcmVm aXhTaXplID4gMCAmJgorCQkobm9kZS0+aXNzX0ZpcnN0VHVwbGVFbWl0dGVkIHx8CisJCSBTY2Fu RGlyZWN0aW9uc0FyZU9wcG9zaXRlKGRpcmVjdGlvbiwgaW5kZXhzY2FuLT5pbmRleG9yZGVyZGly KSkpCisJeworCQlpZiAoIWluZGV4X3NraXAoc2NhbmRlc2MsIGRpcmVjdGlvbiwgaW5kZXhzY2Fu LT5pbmRleG9yZGVyZGlyLAorCQkJCQkgICAhbm9kZS0+aXNzX0ZpcnN0VHVwbGVFbWl0dGVkLCBu b2RlLT5pc3NfU2tpcFByZWZpeFNpemUpKQorCQl7CisJCQkvKgorCQkJICogUmVhY2hlZCBlbmQg b2YgaW5kZXguIEF0IHRoaXMgcG9pbnQgY3VyclBvcyBpcyBpbnZhbGlkYXRlZCwgYW5kCisJCQkg KiB3ZSBuZWVkIHRvIHJlc2V0IGlzc19GaXJzdFR1cGxlRW1pdHRlZCwgc2luY2Ugb3RoZXJ3aXNl IGFmdGVyCisJCQkgKiBnb2luZyBiYWNrd2FyZHMsIHJlYWNoaW5nIHRoZSBlbmQgb2YgaW5kZXgs IGFuZCBnb2luZyBmb3J3YXJkCisJCQkgKiBhZ2FpbiB3ZSBhcHBseSBza2lwIGFnYWluLiBJdCB3 b3VsZCBiZSBpbmNvcnJlY3QgYW5kIGxlYWQgdG8gYW4KKwkJCSAqIGV4dHJhIHNraXBwZWQgaXRl bS4KKwkJCSAqLworCQkJbm9kZS0+aXNzX0ZpcnN0VHVwbGVFbWl0dGVkID0gZmFsc2U7CisJCQly ZXR1cm4gRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlza2lwcGVk ID0gdHJ1ZTsKKwkJCWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIHNsb3QpOworCQl9CisJfQor CiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBu ZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRp cmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHNraXBwZWQgfHwgaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KwkJc2tpcHBlZCA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIElmIHRoZSBpbmRleCB3YXMgbG9zc3ks IHdlIGhhdmUgdG8gcmVjaGVjayB0aGUgaW5kZXggcXVhbHMgdXNpbmcKQEAgLTE0OSw2ICsxOTgs NyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCQl9CiAJCX0KIAorCQlub2Rl LT5pc3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSB0cnVlOwogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAg LTkxMCw2ICs5NjAsOCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPnNzLnBzLnBsYW4gPSAoUGxhbiAq KSBub2RlOwogCWluZGV4c3RhdGUtPnNzLnBzLnN0YXRlID0gZXN0YXRlOwogCWluZGV4c3RhdGUt PnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNJbmRleFNjYW47CisJaW5kZXhzdGF0ZS0+aXNzX1Nr aXBQcmVmaXhTaXplID0gbm9kZS0+aW5kZXhza2lwcHJlZml4c2l6ZTsKKwlpbmRleHN0YXRlLT5p c3NfRmlyc3RUdXBsZUVtaXR0ZWQgPSBmYWxzZTsKIAogCS8qCiAJICogTWlzY2VsbGFuZW91cyBp bml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBlZmU3YzNhZTEwLi4yMzZiYjE0 MzVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDkzLDYgKzQ5Myw3IEBAIF9jb3B5SW5kZXhT Y2FuKGNvbnN0IEluZGV4U2NhbiAqZnJvbSkKIAlDT1BZX05PREVfRklFTEQoaW5kZXhvcmRlcmJ5 b3JpZyk7CiAJQ09QWV9OT0RFX0ZJRUxEKGluZGV4b3JkZXJieW9wcyk7CiAJQ09QWV9TQ0FMQVJf RklFTEQoaW5kZXhvcmRlcmRpcik7CisJQ09QWV9TQ0FMQVJfRklFTEQoaW5kZXhza2lwcHJlZml4 c2l6ZSk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KQEAgLTUxOCw2ICs1MTksNyBAQCBfY29weUlu ZGV4T25seVNjYW4oY29uc3QgSW5kZXhPbmx5U2NhbiAqZnJvbSkKIAlDT1BZX05PREVfRklFTEQo aW5kZXhvcmRlcmJ5KTsKIAlDT1BZX05PREVfRklFTEQoaW5kZXh0bGlzdCk7CiAJQ09QWV9TQ0FM QVJfRklFTEQoaW5kZXhvcmRlcmRpcik7CisJQ09QWV9TQ0FMQVJfRklFTEQoaW5kZXhza2lwcHJl Zml4c2l6ZSk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGMz YTk2MzI5OTIuLjg4MjU0NDQ2Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtNTYyLDYgKzU2Miw3 IEBAIF9vdXRJbmRleFNjYW4oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEluZGV4U2NhbiAqbm9kZSkK IAlXUklURV9OT0RFX0ZJRUxEKGluZGV4b3JkZXJieW9yaWcpOwogCVdSSVRFX05PREVfRklFTEQo aW5kZXhvcmRlcmJ5b3BzKTsKIAlXUklURV9FTlVNX0ZJRUxEKGluZGV4b3JkZXJkaXIsIFNjYW5E aXJlY3Rpb24pOworCVdSSVRFX0lOVF9GSUVMRChpbmRleHNraXBwcmVmaXhzaXplKTsKIH0KIAog c3RhdGljIHZvaWQKQEAgLTU3Niw2ICs1NzcsNyBAQCBfb3V0SW5kZXhPbmx5U2NhbihTdHJpbmdJ bmZvIHN0ciwgY29uc3QgSW5kZXhPbmx5U2NhbiAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGlu ZGV4b3JkZXJieSk7CiAJV1JJVEVfTk9ERV9GSUVMRChpbmRleHRsaXN0KTsKIAlXUklURV9FTlVN X0ZJRUxEKGluZGV4b3JkZXJkaXIsIFNjYW5EaXJlY3Rpb24pOworCVdSSVRFX0lOVF9GSUVMRChp bmRleHNraXBwcmVmaXhzaXplKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMK aW5kZXggM2ExODU3MWQwYy4uOTc2NmZjMTFlZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTE4 MjksNiArMTgyOSw3IEBAIF9yZWFkSW5kZXhTY2FuKHZvaWQpCiAJUkVBRF9OT0RFX0ZJRUxEKGlu ZGV4b3JkZXJieW9yaWcpOwogCVJFQURfTk9ERV9GSUVMRChpbmRleG9yZGVyYnlvcHMpOwogCVJF QURfRU5VTV9GSUVMRChpbmRleG9yZGVyZGlyLCBTY2FuRGlyZWN0aW9uKTsKKwlSRUFEX0lOVF9G SUVMRChpbmRleHNraXBwcmVmaXhzaXplKTsKIAogCVJFQURfRE9ORSgpOwogfQpAQCAtMTg0OCw2 ICsxODQ5LDcgQEAgX3JlYWRJbmRleE9ubHlTY2FuKHZvaWQpCiAJUkVBRF9OT0RFX0ZJRUxEKGlu ZGV4b3JkZXJieSk7CiAJUkVBRF9OT0RFX0ZJRUxEKGluZGV4dGxpc3QpOwogCVJFQURfRU5VTV9G SUVMRChpbmRleG9yZGVyZGlyLCBTY2FuRGlyZWN0aW9uKTsKKwlSRUFEX0lOVF9GSUVMRChpbmRl eHNraXBwcmVmaXhzaXplKTsKIAogCVJFQURfRE9ORSgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMKaW5kZXggOTQ1YWE5MzM3NC4uZmU2ZWY2MmU4ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xMjUsNiArMTI1LDcgQEAgaW50CQkJbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRy dWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9u bHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNraXBzY2FuID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jCmluZGV4IDJhNTAyNzJkYTYuLjM0MGJiZmNiYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYwpAQCAtNzkwLDYgKzc5MCwxNiBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0g KEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwogCisJCS8qCisJCSAqIFRvIHByZXZlbnQgdW5pcXVl IHBhdGhzIGZyb20gaW5kZXggc2tpcCBzY2FucyBiZWluZyBwb3RlbnRpYWxseSB1c2VkCisJCSAq IHdoZW4gbm90IG5lZWRlZCBzY2FuIGtlZXAgdGhlbSBpbiBhIHNlcGFyYXRlIHBhdGhsaXN0Lgor CQkqLworCQlpZiAoaXBhdGgtPmluZGV4c2tpcHByZWZpeCAhPSAwKQorCQl7CisJCQlhZGRfdW5p cXVlX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlm IChpbmRleC0+YW1oYXNnZXR0dXBsZSkKIAkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgaXBhdGgp OwogCkBAIC04NzgsNiArODg4LDggQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAlib29sCQlwYXRoa2V5c19wb3NzaWJseV91c2VmdWw7CiAJ Ym9vbAkJaW5kZXhfaXNfb3JkZXJlZDsKIAlib29sCQlpbmRleF9vbmx5X3NjYW47CisJYm9vbAkJ bm90X2VtcHR5X3F1YWwgPSBmYWxzZTsKKwlib29sCQljYW5fc2tpcDsKIAlpbnQJCQlpbmRleGNv bDsKIAogCS8qCkBAIC0xMDI3LDYgKzEwMzksNjAgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlpbmRleF9vbmx5X3NjYW4gPSAoc2NhbnR5 cGUgIT0gU1RfQklUTUFQU0NBTiAmJgogCQkJCQkgICBjaGVja19pbmRleF9vbmx5KHJlbCwgaW5k ZXgpKTsKIAorCS8qIENoZWNrIGlmIGFuIGluZGV4IHNraXAgc2NhbiBpcyBwb3NzaWJsZS4gKi8K KwljYW5fc2tpcCA9IGVuYWJsZV9pbmRleHNraXBzY2FuICYgaW5kZXgtPmFtY2Fuc2tpcDsKKwor CS8qCisJICogU2tpcCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB0aGVyZSBhcmUgcXVhbCBj b25kaXRpb25zLCB3aGljaCBhcmUgbm90CisJICogY292ZXJlZCBieSBpbmRleC4gVGhlIHJlYXNv biBmb3IgdGhhdCBpcyB0aGF0IHRob3NlIGNvbmRpdGlvbnMgYXJlCisJICogZXZhbHVhdGVkIGxh dGVyLCBhbHJlYWR5IGFmdGVyIHNraXBwaW5nIHdhcyBhcHBsaWVkLgorCSAqCisJICogVE9ETzog VGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0b28gcmVzdHJpY3RpdmUsIGFuZCBkb2Vzbid0IGFsbG93 IGUuZy4KKwkgKiBpbmRleCBleHByZXNzaW9ucy4gRm9yIHRoYXQgd2UgbmVlZCB0byBleGFtaW5l IGluZGV4X2NsYXVzZXMgdG9vLgorCSAqLworCWlmIChjYW5fc2tpcCAmJiByb290LT5wYXJzZS0+ am9pbnRyZWUgIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQlmb3JlYWNoKGxjLCAo TGlzdCAqKXJvb3QtPnBhcnNlLT5qb2ludHJlZS0+cXVhbHMpCisJCXsKKwkJCU5vZGUgKmV4cHIs ICpxdWFsID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwkJCVZhciAqdmFyOworCQkJYm9vbCBmb3Vu ZCA9IGZhbHNlOworCisJCQlpZiAoIWlzX29wY2xhdXNlKHF1YWwpKQorCQkJeworCQkJCW5vdF9l bXB0eV9xdWFsID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZXhwciA9IGdldF9sZWZ0 b3AocXVhbCk7CisKKwkJCWlmICghSXNBKGV4cHIsIFZhcikpCisJCQl7CisJCQkJbm90X2VtcHR5 X3F1YWwgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCisJCQl2YXIgPSAoVmFyICopIGV4cHI7 CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgtPm5jb2x1bW5zOyBpKyspCisJCQl7CisJ CQkJaWYgKGluZGV4LT5pbmRleGtleXNbaV0gPT0gdmFyLT52YXJhdHRubykKKwkJCQl7CisJCQkJ CWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIWZvdW5k KQorCQkJeworCQkJCW5vdF9lbXB0eV9xdWFsID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKwogCS8qCiAJICogNC4gR2VuZXJhdGUgYW4gaW5kZXhzY2FuIHBhdGggaWYgdGhlcmUg YXJlIHJlbGV2YW50IHJlc3RyaWN0aW9uIGNsYXVzZXMKIAkgKiBpbiB0aGUgY3VycmVudCBjbGF1 c2VzLCBPUiB0aGUgaW5kZXggb3JkZXJpbmcgaXMgcG90ZW50aWFsbHkgdXNlZnVsIGZvcgpAQCAt MTA1MCw2ICsxMTE2LDIxIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCSAgZmFsc2UpOwogCQlyZXN1bHQgPSBsYXBwZW5kKHJl c3VsdCwgaXBhdGgpOwogCisJCS8qIENvbnNpZGVyIGluZGV4IHNraXAgc2NhbiBhcyB3ZWxsICov CisJCWlmIChyb290LT5xdWVyeV91bmlxdWVrZXlzICE9IE5VTEwgJiYgY2FuX3NraXAgJiYgIW5v dF9lbXB0eV9xdWFsKQorCQl7CisJCQlMaXN0Q2VsbCAgICpsYzsKKworCQkJZm9yZWFjaChsYywg cm9vdC0+cXVlcnlfdW5pcXVla2V5cykKKwkJCXsKKwkJCQlVbmlxdWVLZXkgKnVrZXkgPSBsZmly c3Rfbm9kZShVbmlxdWVLZXksIGxjKTsKKwkJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwKKwkJ CQkJCQkJIGNyZWF0ZV9za2lwc2Nhbl91bmlxdWVfcGF0aChyb290LCBpbmRleCwKKwkJCQkJCQkJ CQkJCQkJCSAoUGF0aCAqKSBpcGF0aCwKKwkJCQkJCQkJCQkJCQkJCSB1a2V5LT5leHBycykpOwor CQkJfQorCQl9CisKIAkJLyoKIAkJICogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVs IGluZGV4IHNjYW4uICBXZSBkb24ndCBhbGxvdwogCQkgKiBwYXJhbGxlbCBpbmRleCBzY2FuIGZv ciBiaXRtYXAgaW5kZXggc2NhbnMuCkBAIC0xMTA1LDYgKzExODYsMjEgQEAgYnVpbGRfaW5kZXhf cGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCSAgZmFs c2UpOwogCQkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGlwYXRoKTsKIAorCQkJLyogQ29uc2lk ZXIgaW5kZXggc2tpcCBzY2FuIGFzIHdlbGwgKi8KKwkJCWlmIChyb290LT5xdWVyeV91bmlxdWVr ZXlzICE9IE5VTEwgJiYgY2FuX3NraXAgJiYgIW5vdF9lbXB0eV9xdWFsKQorCQkJeworCQkJCUxp c3RDZWxsICAgKmxjOworCisJCQkJZm9yZWFjaChsYywgcm9vdC0+cXVlcnlfdW5pcXVla2V5cykK KwkJCQl7CisJCQkJCVVuaXF1ZUtleSAqdWtleSA9IGxmaXJzdF9ub2RlKFVuaXF1ZUtleSwgbGMp OworCQkJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwKKwkJCQkJCQkJCSBjcmVhdGVfc2tpcHNj YW5fdW5pcXVlX3BhdGgocm9vdCwgaW5kZXgsCisJCQkJCQkJCQkJCQkJCQkJIChQYXRoICopIGlw YXRoLAorCQkJCQkJCQkJCQkJCQkJCSB1a2V5LT5leHBycykpOworCQkJCX0KKwkJCX0KKwogCQkJ LyogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGluZGV4IHNjYW4gKi8KIAkJCWlm IChpbmRleC0+YW1jYW5wYXJhbGxlbCAmJgogCQkJCXJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYg b3V0ZXJfcmVsaWRzID09IE5VTEwgJiYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwppbmRleCBlYjk1NDNmNmFkLi41YjU5MTAzNmZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xNzcsMTIgKzE3NywxNCBAQCBzdGF0aWMgSW5kZXhTY2Fu ICptYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0ICpxcHF1YWwsIEluZGV4IHNjYW5y ZWxpZCwKIAkJCQkJCQkJIE9pZCBpbmRleGlkLCBMaXN0ICppbmRleHF1YWwsIExpc3QgKmluZGV4 cXVhbG9yaWcsCiAJCQkJCQkJCSBMaXN0ICppbmRleG9yZGVyYnksIExpc3QgKmluZGV4b3JkZXJi eW9yaWcsCiAJCQkJCQkJCSBMaXN0ICppbmRleG9yZGVyYnlvcHMsCi0JCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGluZGV4c2NhbmRpcik7CisJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGluZGV4c2NhbmRp ciwKKwkJCQkJCQkJIGludCBza2lwcHJlZml4KTsKIHN0YXRpYyBJbmRleE9ubHlTY2FuICptYWtl X2luZGV4b25seXNjYW4oTGlzdCAqcXB0bGlzdCwgTGlzdCAqcXBxdWFsLAogCQkJCQkJCQkJCSBJ bmRleCBzY2FucmVsaWQsIE9pZCBpbmRleGlkLAogCQkJCQkJCQkJCSBMaXN0ICppbmRleHF1YWws IExpc3QgKmluZGV4b3JkZXJieSwKIAkJCQkJCQkJCQkgTGlzdCAqaW5kZXh0bGlzdCwKLQkJCQkJ CQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleHNjYW5kaXIpOworCQkJCQkJCQkJCSBTY2FuRGlyZWN0 aW9uIGluZGV4c2NhbmRpciwKKwkJCQkJCQkJCQkgaW50IHNraXBwcmVmaXgpOwogc3RhdGljIEJp dG1hcEluZGV4U2NhbiAqbWFrZV9iaXRtYXBfaW5kZXhzY2FuKEluZGV4IHNjYW5yZWxpZCwgT2lk IGluZGV4aWQsCiAJCQkJCQkJCQkJCSAgTGlzdCAqaW5kZXhxdWFsLAogCQkJCQkJCQkJCQkgIExp c3QgKmluZGV4cXVhbG9yaWcpOwpAQCAtMzAwNSw3ICszMDA3LDggQEAgY3JlYXRlX2luZGV4c2Nh bl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJZml4ZWRfaW5kZXhxdWFscywK IAkJCQkJCQkJCQkJCWZpeGVkX2luZGV4b3JkZXJieXMsCiAJCQkJCQkJCQkJCQliZXN0X3BhdGgt PmluZGV4aW5mby0+aW5kZXh0bGlzdCwKLQkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2Fu ZGlyKTsKKwkJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCQkJ YmVzdF9wYXRoLT5pbmRleHNraXBwcmVmaXgpOwogCWVsc2UKIAkJc2Nhbl9wbGFuID0gKFNjYW4g KikgbWFrZV9pbmRleHNjYW4odGxpc3QsCiAJCQkJCQkJCQkJCXFwcXVhbCwKQEAgLTMwMTYsNyAr MzAxOSw4IEBAIGNyZWF0ZV9pbmRleHNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCQkJZml4ZWRfaW5kZXhvcmRlcmJ5cywKIAkJCQkJCQkJCQkJaW5kZXhvcmRlcmJ5cywKIAkJ CQkJCQkJCQkJaW5kZXhvcmRlcmJ5b3BzLAotCQkJCQkJCQkJCQliZXN0X3BhdGgtPmluZGV4c2Nh bmRpcik7CisJCQkJCQkJCQkJCWJlc3RfcGF0aC0+aW5kZXhzY2FuZGlyLAorCQkJCQkJCQkJCQli ZXN0X3BhdGgtPmluZGV4c2tpcHByZWZpeCk7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZz Y2FuX3BsYW4tPnBsYW4sICZiZXN0X3BhdGgtPnBhdGgpOwogCkBAIC01MjgzLDcgKzUyODcsOCBA QCBtYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LAogCQkJICAgTGlzdCAqaW5kZXhvcmRlcmJ5 LAogCQkJICAgTGlzdCAqaW5kZXhvcmRlcmJ5b3JpZywKIAkJCSAgIExpc3QgKmluZGV4b3JkZXJi eW9wcywKLQkJCSAgIFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyKQorCQkJICAgU2NhbkRpcmVj dGlvbiBpbmRleHNjYW5kaXIsCisJCQkgICBpbnQgc2tpcFByZWZpeFNpemUpCiB7CiAJSW5kZXhT Y2FuICAqbm9kZSA9IG1ha2VOb2RlKEluZGV4U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2Rl LT5zY2FuLnBsYW47CkBAIC01MzAwLDYgKzUzMDUsNyBAQCBtYWtlX2luZGV4c2NhbihMaXN0ICpx cHRsaXN0LAogCW5vZGUtPmluZGV4b3JkZXJieW9yaWcgPSBpbmRleG9yZGVyYnlvcmlnOwogCW5v ZGUtPmluZGV4b3JkZXJieW9wcyA9IGluZGV4b3JkZXJieW9wczsKIAlub2RlLT5pbmRleG9yZGVy ZGlyID0gaW5kZXhzY2FuZGlyOworCW5vZGUtPmluZGV4c2tpcHByZWZpeHNpemUgPSBza2lwUHJl Zml4U2l6ZTsKIAogCXJldHVybiBub2RlOwogfQpAQCAtNTMxMiw3ICs1MzE4LDggQEAgbWFrZV9p bmRleG9ubHlzY2FuKExpc3QgKnFwdGxpc3QsCiAJCQkJICAgTGlzdCAqaW5kZXhxdWFsLAogCQkJ CSAgIExpc3QgKmluZGV4b3JkZXJieSwKIAkJCQkgICBMaXN0ICppbmRleHRsaXN0LAotCQkJCSAg IFNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyKQorCQkJCSAgIFNjYW5EaXJlY3Rpb24gaW5kZXhz Y2FuZGlyLAorCQkJCSAgIGludCBza2lwUHJlZml4U2l6ZSkKIHsKIAlJbmRleE9ubHlTY2FuICpu b2RlID0gbWFrZU5vZGUoSW5kZXhPbmx5U2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5z Y2FuLnBsYW47CkBAIC01MzI3LDYgKzUzMzQsNyBAQCBtYWtlX2luZGV4b25seXNjYW4oTGlzdCAq cXB0bGlzdCwKIAlub2RlLT5pbmRleG9yZGVyYnkgPSBpbmRleG9yZGVyYnk7CiAJbm9kZS0+aW5k ZXh0bGlzdCA9IGluZGV4dGxpc3Q7CiAJbm9kZS0+aW5kZXhvcmRlcmRpciA9IGluZGV4c2NhbmRp cjsKKwlub2RlLT5pbmRleHNraXBwcmVmaXhzaXplID0gc2tpcFByZWZpeFNpemU7CiAKIAlyZXR1 cm4gbm9kZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhu b2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDYwNjU2 YmRjYTUuLmNhYzJjYTBiMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpA QCAtMjk3MSw2ICsyOTcxLDcwIEBAIGNyZWF0ZV91cHBlcl91bmlxdWVfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAlyZXR1cm4gcGF0aG5vZGU7CiB9CiAKKy8qCisgKiBjcmVhdGVfc2tpcHNjYW5f dW5pcXVlX3BhdGgKKyAqCSAgQ3JlYXRlcyBhIHBhdGhub2RlIHRoZSBzYW1lIGFzIGFuIGV4aXN0 aW5nIEluZGV4UGF0aCBleGNlcHQgYmFzZWQgb24KKyAqCSAgc2tpcHBpbmcgZHVwbGljYXRlIHZh bHVlcy4gIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgY2hlYXBlciB0aGFuIHVzaW5nCisgKgkgIGNy ZWF0ZV91cHBlcl91bmlxdWVfcGF0aC4KKyAqCisgKiBUaGUgaW5wdXQgcGF0aCBtdXN0IGJlIGFu IEluZGV4UGF0aCBmb3IgYW4gaW5kZXggdGhhdCBzdXBwb3J0cyBhbXNraXAuCisgKi8KK0luZGV4 UGF0aCAqCitjcmVhdGVfc2tpcHNjYW5fdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCQkJUGF0aCAqYmFzZXBhdGgsIExpc3QgKnVuaXF1ZV9l eHBycykKK3sKKwlJbmRleFBhdGggCSpwYXRobm9kZSA9IG1ha2VOb2RlKEluZGV4UGF0aCk7CisJ aW50IAkJbnVtRGlzdGluY3RSb3dzOworCWludCAJCWRpc3RpbmN0UHJlZml4S2V5czsKKwlMaXN0 Q2VsbCAJKmxjOworCUxpc3QgCSAgIAkqZXhwcnMgPSBOSUw7CisKKworCWRpc3RpbmN0UHJlZml4 S2V5cyA9IGxpc3RfbGVuZ3RoKHVuaXF1ZV9leHBycyk7CisKKwlBc3NlcnQoSXNBKGJhc2VwYXRo LCBJbmRleFBhdGgpKTsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IGJhc2VwYXRoLCBz byBtYWtlIGEgY29weS4gKi8KKwltZW1jcHkocGF0aG5vZGUsIGJhc2VwYXRoLCBzaXplb2YoSW5k ZXhQYXRoKSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIGNhbiB0aGluayBhYm91dCBkaXN0aW5j dFByZWZpeEtleXMgYXMganVzdAorCSAqIGEgbnVtYmVyIG9mIGRpc3RpbmN0IGtleXMuIEJ1dCBp ZiBsZXRzIHNheSB3ZSBoYXZlIGEKKwkgKiBkaXN0aW5jdCBrZXkgYSwgYW5kIHRoZSBpbmRleCBj b250YWlucyBiLCBhIGluIGV4YWN0bHkKKwkgKiB0aGlzIG9yZGVyLiBJbiBzdWNoIHNpdHVhdGlv biB3ZSBuZWVkIHRvIHVzZSBwb3NpdGlvbgorCSAqIG9mIGEgaW4gdGhlIGluZGV4IGFzIGRpc3Rp bmN0UHJlZml4S2V5cywgb3RoZXJ3aXNlIHNraXAKKwkgKiB3aWxsIGhhcHBlbiBvbmx5IGJ5IHRo ZSBmaXJzdCBjb2x1bW4uCisJICovCisJZm9yZWFjaChsYywgdW5pcXVlX2V4cHJzKQorCXsKKwkJ RXhwciAqdW5pcXVlX2V4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCQlWYXIgKnZhciA9IChW YXIgKikgdW5pcXVlX2V4cHI7CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB1bmlxdWVfZXhw cik7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRleC0+bmNvbHVtbnM7IGkrKykKKwkJewor CQkJaWYgKGluZGV4LT5pbmRleGtleXNbaV0gPT0gdmFyLT52YXJhdHRubykKKwkJCXsKKwkJCQlk aXN0aW5jdFByZWZpeEtleXMgPSBNYXgoaSArIDEsIGRpc3RpbmN0UHJlZml4S2V5cyk7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlBc3NlcnQoZGlzdGluY3RQcmVmaXhLZXlzID4gMCk7 CisJcGF0aG5vZGUtPmluZGV4c2tpcHByZWZpeCA9IGRpc3RpbmN0UHJlZml4S2V5czsKKworCW51 bURpc3RpbmN0Um93cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgZXhwcnMsCisJCQkJCQkJ CQkJICBwYXRobm9kZS0+cGF0aC5yb3dzLAorCQkJCQkJCQkJCSAgTlVMTCk7CisKKwlwYXRobm9k ZS0+cGF0aC50b3RhbF9jb3N0ID0gcGF0aG5vZGUtPnBhdGguc3RhcnR1cF9jb3N0ICogbnVtRGlz dGluY3RSb3dzOworCXBhdGhub2RlLT5wYXRoLnJvd3MgPSBudW1EaXN0aW5jdFJvd3M7CisKKwly ZXR1cm4gcGF0aG5vZGU7Cit9CisKIC8qCiAgKiBjcmVhdGVfYWdnX3BhdGgKICAqCSAgQ3JlYXRl cyBhIHBhdGhub2RlIHRoYXQgcmVwcmVzZW50cyBwZXJmb3JtaW5nIGFnZ3JlZ2F0aW9uL2dyb3Vw aW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggMGIyZjlkMzk4YS4uNmRh NzFlNTgyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMjcyLDYgKzI3 Miw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25P YmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQlpbmZvLT5hbW9wdGlvbmFsa2V5ID0gYW1yb3V0 aW5lLT5hbW9wdGlvbmFsa2V5OwogCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+ YW1zZWFyY2hhcnJheTsKIAkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRpbmUtPmFtc2Vh cmNobnVsbHM7CisJCQlpbmZvLT5hbWNhbnNraXAgPSAoYW1yb3V0aW5lLT5hbXNraXAgIT0gTlVM TCk7CiAJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwog CQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7 CiAJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVM TCAmJgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggMDMxY2EwMzI3Zi4uNTZiMmNlY2RmZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jCkBAIC05NTIsNiArOTUyLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2Jv b2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQl0cnVlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKKwl7CisJCXsiZW5hYmxlX2luZGV4c2tpcHNjYW4iLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVO SU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5lcidzIHVzZSBv ZiBpbmRleC1za2lwLXNjYW4gcGxhbnMuIiksCisJCQlOVUxMCisJCX0sCisJCSZlbmFibGVfaW5k ZXhza2lwc2NhbiwKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQl7ImVu YWJsZV9iaXRtYXBzY2FuIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQln ZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgYml0bWFwLXNjYW4gcGxh bnMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK aW5kZXggZTQzMGUzM2M3Yi4uOTVkZWY5YWEzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzU1LDYgKzM1NSw3IEBACiAjZW5hYmxlX2hh c2hqb2luID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2Nh biA9IG9uCisjZW5hYmxlX2luZGV4c2tpcHNjYW4gPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9u CiAjZW5hYmxlX21lcmdlam9pbiA9IG9uCiAjZW5hYmxlX25lc3Rsb29wID0gb24KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmgKaW5kZXggNDMyNWZhYTQ2MC4uODVjY2E0ZDUyMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTEzMCw2 ICsxMzAsMTMgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyogc2tp cCBwYXN0IGR1cGxpY2F0ZXMgaW4gYSBnaXZlbiBwcmVmaXggKi8KK3R5cGVkZWYgYm9vbCAoKmFt c2tpcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleGRpciwKKwkJCQkJCQkJIGJvb2wg c3RhcnQsCisJCQkJCQkJCSBpbnQgcHJlZml4KTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxl cyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVz YyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjMxLDYgKzIzOCw3IEBA IHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5k c2NhbjsKIAlhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAqLwog CWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXNr aXBfZnVuY3Rpb24gYW1za2lwOwkJCQkvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNl IGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0 ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUg TlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA5MzEyNTdiZDgxLi45NWNlNGE1ZDgwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaApAQCAtMTgwLDYgKzE4MCw4IEBAIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmluZGV4X3ZhY3V1bV9jbGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKIAkJCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpOwogZXh0ZXJu IGJvb2wgaW5kZXhfY2FuX3JldHVybihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgYXR0bm8p OworZXh0ZXJuIGJvb2wgaW5kZXhfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkgICBTY2FuRGlyZWN0aW9uIGluZGV4ZGlyLCBib29sIHN0YXJ0 LCBpbnQgcHJlZml4KTsKIGV4dGVybiBSZWdQcm9jZWR1cmUgaW5kZXhfZ2V0cHJvY2lkKFJlbGF0 aW9uIGlyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAogCQkJCQkJCQkJdWludDE2IHByb2NudW0pOwog ZXh0ZXJuIEZtZ3JJbmZvICppbmRleF9nZXRwcm9jaW5mbyhSZWxhdGlvbiBpcmVsLCBBdHRyTnVt YmVyIGF0dG51bSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zZGlyLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvc2Rpci5oCmluZGV4IDIzZmViOTA5ODYuLjA5NGExMjc0NjQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zZGlyLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3NkaXIuaApAQCAtNTUsNCArNTUsMTEgQEAgdHlwZWRlZiBlbnVtIFNjYW5EaXJlY3Rpb24KICNk ZWZpbmUgU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pIFwKIAkoKGJvb2wpICgoZGly ZWN0aW9uKSA9PSBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCiAKKy8qCisgKiBTY2FuRGlyZWN0aW9u c0FyZU9wcG9zaXRlCisgKgkJVHJ1ZSBpZmYgc2NhbiBkaXJlY3Rpb25zIGFyZSBiYWNrd2FyZC9m b3J3YXJkIG9yIGZvcndhcmQvYmFja3dhcmQuCisgKi8KKyNkZWZpbmUgU2NhbkRpcmVjdGlvbnNB cmVPcHBvc2l0ZShkaXJBLCBkaXJCKSBcCisJKChib29sKSAoZGlyQSAhPSBOb01vdmVtZW50U2Nh bkRpcmVjdGlvbiAmJiBkaXJBID09IC1kaXJCKSkKKwogI2VuZGlmCQkJCQkJCS8qIFNESVJfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAwMTg3OTg5ZmQxLi5jZjFlNzI5YmVjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaApAQCAtMTQyOSw2ICsxNDI5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaXNzX1J1bnRpbWVDb250ZXh0OwogCVJlbGF0aW9uCWlz c19SZWxhdGlvbkRlc2M7CiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppc3NfU2NhbkRlc2M7 CisJaW50ICAgICAgICAgaXNzX1NraXBQcmVmaXhTaXplOworCWJvb2wJCWlzc19GaXJzdFR1cGxl RW1pdHRlZDsKIAogCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHJlLWNoZWNraW5nIE9SREVSIEJZ IGV4cHIgb3JkZXJpbmcgKi8KIAlwYWlyaW5naGVhcCAqaXNzX1Jlb3JkZXJRdWV1ZTsKQEAgLTE0 NTgsNiArMTQ2MCw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJVGFibGVT bG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCiAg KgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFwIHRlc3Rpbmcs IGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2Nh biBkZXNjcmlwdG9yCisgKgkJU2tpcFByZWZpeFNpemUJICAgbnVtYmVyIG9mIGtleXMgZm9yIHNr aXAtYmFzZWQgRElTVElOQ1QKKyAqCQlGaXJzdFR1cGxlRW1pdHRlZCAgaGFzIHRoZSBmaXJzdCB0 dXBsZSBiZWVuIGVtaXR0ZWQKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xNDc2LDYgKzE0ODAsOCBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlvc3NfU2Nh bkRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwogCUJ1ZmZlcgkJaW9zc19W TUJ1ZmZlcjsKKwlpbnQgICAgICAgICBpb3NzX1NraXBQcmVmaXhTaXplOworCWJvb2wJCWlvc3Nf Rmlyc3RUdXBsZUVtaXR0ZWQ7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIH0gSW5kZXhPbmx5U2Nh blN0YXRlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGE1YzQwNmJkNGUuLjcyODc1OTQ1ODIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMjI5LDYgKzEyMjksOSBAQCB0eXBlZGVmIHN0cnVj dCBQYXRoCiAgKiB3ZSBuZWVkIG5vdCByZWNvbXB1dGUgdGhlbSB3aGVuIGNvbnNpZGVyaW5nIHVz aW5nIHRoZSBzYW1lIGluZGV4IGluIGEKICAqIGJpdG1hcCBpbmRleC9oZWFwIHNjYW4gKHNlZSBC aXRtYXBIZWFwUGF0aCkuICBUaGUgY29zdHMgb2YgdGhlIEluZGV4UGF0aAogICogaXRzZWxmIHJl cHJlc2VudCB0aGUgY29zdHMgb2YgYW4gSW5kZXhTY2FuIG9yIEluZGV4T25seVNjYW4gcGxhbiB0 eXBlLgorICoKKyAqICdpbmRleHNraXBwcmVmaXgnIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBj b2x1bW5zIHRvIGNvbnNpZGVyIGZvciBza2lwCisgKiBzY2Fucy4KICAqLS0tLS0tLS0tLQogICov CiB0eXBlZGVmIHN0cnVjdCBJbmRleFBhdGgKQEAgLTEyNDEsNiArMTI0NCw3IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4UGF0aAogCVNjYW5EaXJlY3Rpb24gaW5kZXhzY2FuZGlyOwogCUNvc3QJCWlu ZGV4dG90YWxjb3N0OwogCVNlbGVjdGl2aXR5IGluZGV4c2VsZWN0aXZpdHk7CisJaW50CQkJaW5k ZXhza2lwcHJlZml4OwogfSBJbmRleFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4 IDgzZTAxMDc0ZWQuLmVmYWZkZjkzNjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC00MDksNiAr NDA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuCiAJTGlzdAkgICAqaW5kZXhvcmRlcmJ5 b3JpZzsJLyogdGhlIHNhbWUgaW4gb3JpZ2luYWwgZm9ybSAqLwogCUxpc3QJICAgKmluZGV4b3Jk ZXJieW9wczsJLyogT0lEcyBvZiBzb3J0IG9wcyBmb3IgT1JERVIgQlkgZXhwcnMgKi8KIAlTY2Fu RGlyZWN0aW9uIGluZGV4b3JkZXJkaXI7CS8qIGZvcndhcmQgb3IgYmFja3dhcmQgb3IgZG9uJ3Qg Y2FyZSAqLworCWludAkJCWluZGV4c2tpcHByZWZpeHNpemU7CS8qIHRoZSBzaXplIG9mIHRoZSBw cmVmaXggZm9yIGRpc3RpbmN0CisJCQkJCQkJCQkJICogc2NhbnMgKi8KIH0gSW5kZXhTY2FuOwog CiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00MzYsNiArNDM4LDggQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhbgogCUxpc3QJICAgKmluZGV4b3JkZXJieTsJLyogbGlzdCBvZiBpbmRleCBP UkRFUiBCWSBleHBycyAqLwogCUxpc3QJICAgKmluZGV4dGxpc3Q7CQkvKiBUYXJnZXRFbnRyeSBs aXN0IGRlc2NyaWJpbmcgaW5kZXgncyBjb2xzICovCiAJU2NhbkRpcmVjdGlvbiBpbmRleG9yZGVy ZGlyOwkvKiBmb3J3YXJkIG9yIGJhY2t3YXJkIG9yIGRvbid0IGNhcmUgKi8KKwlpbnQJCQlpbmRl eHNraXBwcmVmaXhzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgcHJlZml4IGZvciBkaXN0aW5jdAor CQkJCQkJCQkJCSAqIHNjYW5zICovCiB9IEluZGV4T25seVNjYW47CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IDYxM2RiOGVhYjYuLmMwZjE3NmVhYWEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaApAQCAtNTAsNiArNTAsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBl bmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47 CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK2V4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNraXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf dGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAppbmRleCA2Nzk2YWQ4Y2I3Li43MDVkZWFmN2JkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtMjA3LDYgKzIwNywxMCBAQCBleHRlcm4gVXBwZXJVbmlxdWVQYXRo ICpjcmVhdGVfdXBwZXJfdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJ CQkgUGF0aCAqc3VicGF0aCwKIAkJCQkJCQkJCQkJCSBpbnQgbnVtQ29scywKIAkJCQkJCQkJCQkJ CSBkb3VibGUgbnVtR3JvdXBzKTsKK2V4dGVybiBJbmRleFBhdGggKmNyZWF0ZV9za2lwc2Nhbl91 bmlxdWVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICBJbmRleE9wdEluZm8g KmluZGV4LAorCQkJCQkJCQkJCQkgIFBhdGggKnN1YnBhdGgsCisJCQkJCQkJCQkJCSAgTGlzdCAq dW5pcXVlX2V4cHJzKTsKIGV4dGVybiBBZ2dQYXRoICpjcmVhdGVfYWdnX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJUGF0aCAqc3VicGF0 aCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMDZjNGMzZTQ3Ni4u NGRhOTU5NDkyNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTc5 LDYgKzc5LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBu YW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9u CiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2Fu ICAgICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9pbmRleHNraXBzY2FuICAgICAgICAgICB8IG9u CiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2lu ICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9uZXN0bG9vcCAgICAgICAgICAgICAgICB8IG9u CkBAIC05MCw3ICs5MSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mg d2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3Rp ZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgxOCByb3dzKQorKDIwIHJvd3MpCiAKIC0tIFRl c3QgdGhhdCB0aGUgcGdfdGltZXpvbmVfbmFtZXMgYW5kIHBnX3RpbWV6b25lX2FiYnJldnMgdmll d3MgYXJlCiAtLSBtb3JlLW9yLWxlc3Mgd29ya2luZy4gIFdlIGNhbid0IHRlc3QgdGhlaXIgY29u dGVudHMgaW4gYW55IGdyZWF0IGRldGFpbAotLSAKMi4yNS4wCgo= --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0005-Btree-implementation-of-skipping.patch" Content-Description: 0005-Btree-implementation-of-skipping.patch Content-Disposition: attachment; filename="0005-Btree-implementation-of-skipping.patch"; size=40953; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSA2NDU2ZjBmZjVlMWE4MGE3NDViZmIxZTc5ZWM5MDcyMWZmOTQ5NWQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6NDU6MDggKzAyMDAKU3ViamVjdDogW1BBVENIIDUv N10gQnRyZWUgaW1wbGVtZW50YXRpb24gb2Ygc2tpcHBpbmcKCkltcGxlbWVudGF0aW9uIG9mIElu ZGV4IFNraXAgU2NhbiBmb3IgQnRyZWUuIFRvIG1ha2UgaXQgc3VpdGFibGUgZm9yCmJvdGggc2l0 dWF0aW9ucyB3aGVuIHRoZXJlIGFyZSBzbWFsbCBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGFu ZApzaWduaWZpY2FudCBhbW91bnQgb2YgZGlzdGluY3QgdmFsdWVzIHRoZSBmb2xsb3dpbmcgYXBw cm9hY2ggaXMgdGFrZW4gLQppbnN0ZWFkIG9mIHNlYXJjaGluZyBmcm9tIHRoZSByb290IGZvciBl dmVyeSB2YWx1ZSB3ZSdyZSBzZWFyY2hpbmcgZm9yCnRoZW4gZmlyc3Qgb24gdGhlIGN1cnJlbnQg cGFnZSwgYW5kIHRoZW4gaWYgbm90IGZvdW5kIGNvbnRpbnVlIHNlYXJjaGluZwpmcm9tIHRoZSBy b290LgoKQXV0aG9yOiBKZXNwZXIgUGVkZXJzZW4sIERtaXRyeSBEb2xnb3YKUmV2aWV3ZWQtYnk6 IFRob21hcyBNdW5ybywgRGF2aWQgUm93bGV5LCBGbG9yaXMgVmFuIE5lZSwgS3lvdGFybyBIb3Jp Z3VjaGksIFRvbWFzIFZvbmRyYSwgUGV0ZXIgR2VvZ2hlZ2FuCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgIDEzICsKIHNyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8IDQ3MSArKysrKysrKysrKystCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dCB8IDYyMSArKysrKysrKysrKysrKysr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAgICAgICAgICAgICB8ICAgNSAr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsICAgICAgfCAyNTQgKysr KysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxMzczIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCBlOTQ3YWRkZWY2Li5mNWNhNzE1ODI3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTEzNiw2ICsxMzYsNyBAQCBidGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYnVsa2RlbGV0ZSA9IGJ0YnVs a2RlbGV0ZTsKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGJ0dmFjdXVtY2xlYW51cDsK IAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gYnRjYW5yZXR1cm47CisJYW1yb3V0aW5lLT5hbXNr aXAgPSBidHNraXA7CiAJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IGJ0Y29zdGVzdGltYXRl OwogCWFtcm91dGluZS0+YW1vcHRpb25zID0gYnRvcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9w ZXJ0eSA9IGJ0cHJvcGVydHk7CkBAIC0zODUsNiArMzg2LDggQEAgYnRiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJICovCiAJc28tPmN1cnJUdXBsZXMg PSBzby0+bWFya1R1cGxlcyA9IE5VTEw7CiAKKwlzby0+c2tpcFNjYW5LZXkgPSBOVUxMOworCiAJ c2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CiAKIAlzY2FuLT5vcGFx dWUgPSBzbzsKQEAgLTQ1Miw2ICs0NTUsMTYgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJX2J0X3ByZXByb2Nlc3NfYXJyYXlf a2V5cyhzY2FuKTsKIH0KIAorLyoKKyAqIGJ0c2tpcCgpIC0tIHNraXAgdG8gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgbmV4dCBrZXkgcHJlZml4CisgKi8KK2Jvb2wKK2J0c2tpcChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCSAgIFNjYW5EaXJlY3Rpb24gaW5kZXhk aXIsIGJvb2wgc3RhcnQsIGludCBwcmVmaXgpCit7CisJcmV0dXJuIF9idF9za2lwKHNjYW4sIGRp cmVjdGlvbiwgaW5kZXhkaXIsIHN0YXJ0LCBwcmVmaXgpOworfQorCiAvKgogICoJYnRlbmRzY2Fu KCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMKaW5kZXggZjIyOGM4N2EyYi4uYjAxNjJhMDYyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNlYXJjaC5jCkBAIC00NSw3ICs0NSwxMCBAQCBzdGF0aWMgYm9vbCBfYnRfcGFyYWxs ZWxfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIHN0YXRp YyBCdWZmZXIgX2J0X3dhbGtfbGVmdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIFNuYXBzaG90 IHNuYXBzaG90KTsKIHN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfaW5pdGlhbGl6ZV9t b3JlX2RhdGEoQlRTY2FuT3BhcXVlIHNvLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci0KK3N0YXRpYyBp bmxpbmUgdm9pZCBfYnRfdXBkYXRlX3NraXBfc2NhbmtleXMoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleFJlbCk7CitzdGF0aWMgaW5saW5lIGJvb2wgX2J0X3Nj YW5rZXlfd2l0aGluX3BhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5JbnNlcnQga2V5LAor CQkJCQkJCQkJCUJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyoKICAqCV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbigpCkBAIC0xNDgzLDYgKzE0ODYsNDE3IEBAIF9idF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcmV0dXJuIHRydWU7CiB9 CiAKKy8qCisgKiAgX2J0X3NraXAoKSAtLSBTa2lwIGl0ZW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBw cmVmaXggYXMgdGhlIG1vc3QgcmVjZW50bHkKKyAqIAkJCQkgIGZldGNoZWQgaW5kZXggdHVwbGUu CisgKgorICogCQlUaGUgY3VycmVudCBwb3NpdGlvbiBpcyBzZXQgc28gdGhhdCBhIHN1YnNlcXVl bnQgY2FsbCB0byBfYnRfbmV4dCB3aWxsCisgKiAJCWZldGNoIHRoZSBmaXJzdCB0dXBsZSB0aGF0 IGRpZmZlcnMgaW4gdGhlIGxlYWRpbmcgJ3ByZWZpeCcga2V5cy4KKyAqCisgKiAJCVRoZXJlIGFy ZSBmb3VyIGRpZmZlcmVudCBraW5kcyBvZiBza2lwcGluZyAoZGVwZW5kaW5nIG9uIGRpciBhbmQK KyAqIAkJaW5kZXhkaXIsIHRoYXQgYXJlIGltcG9ydGFudCB0byBkaXN0aW5ndWlzaCwgZXNwZWNp YWxseSBpbiB0aGUgcHJlc2Vuc2UKKyAqIAkJb2YgYW4gaW5kZXggY29uZGl0aW9uOgorICoKKyAq IAkJKiBBZHZhbmNpbmcgZm9yd2FyZCBhbmQgcmVhZGluZyBmb3J3YXJkCisgKiAJCQlzaW1wbGUg c2NhbgorICoKKyAqIAkJKiBBZHZhbmNpbmcgZm9yd2FyZCBhbmQgcmVhZGluZyBiYWNrd2FyZAor ICogCQkJc2NhbiBpbnNpZGUgYSBjdXJzb3IgZmV0Y2hpbmcgYmFja3dhcmQsIHdoZW4gc2tpcHBp bmcgaXMgbmVjZXNzYXJ5CisgKiAJCQlyaWdodCBmcm9tIHRoZSBzdGFydAorICoKKyAqIAkJKiBB ZHZhbmNpbmcgYmFja3dhcmQgYW5kIHJlYWRpbmcgZm9yd2FyZAorICogCQkJc2NhbiB3aXRoIG9y ZGVyIGJ5IGRlc2MgaW5zaWRlIGEgY3Vyc29yIGZldGNoaW5nIGZvcndhcmQsIHdoZW4KKyAqIAkJ CXNraXBwaW5nIGlzIG5lY2Vzc2FyeSByaWdodCBmcm9tIHRoZSBzdGFydAorICoKKyAqIAkJKiBB ZHZhbmNpbmcgYmFja3dhcmQgYW5kIHJlYWRpbmcgYmFja3dhcmQKKyAqIAkJCXNpbXBsZSBzY2Fu IHdpdGggb3JkZXIgYnkgZGVzYworICoKKyAqICAgICAgVGhlIGN1cnJlbnQgcGFnZSBpcyBzZWFy Y2hlZCBmb3IgdGhlIG5leHQgdW5pcXVlIHZhbHVlLiBJZiBub25lIGlzIGZvdW5kCisgKiAgICAg IHdlIHdpbGwgZG8gYSBzY2FuIGZyb20gdGhlIHJvb3QgaW4gb3JkZXIgdG8gZmluZCB0aGUgbmV4 dCBwYWdlIHdpdGgKKyAqICAgICAgYSB1bmlxdWUgdmFsdWUuCisgKi8KK2Jvb2wKK19idF9za2lw KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCSBTY2FuRGlyZWN0aW9u IGluZGV4ZGlyLCBib29sIHNjYW5zdGFydCwgaW50IHByZWZpeCkKK3sKKwlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTdGFjayBzdGFjazsKKwlCdWZm ZXIgYnVmOworCU9mZnNldE51bWJlciBvZmZudW07CisJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW07 CisJUmVsYXRpb24gCSBpbmRleFJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisKKwkvKiBXZSB3 YW50IHRvIHJldHVybiB0dXBsZXMsIGFuZCB3ZSBuZWVkIGEgc3RhcnRpbmcgcG9pbnQgKi8KKwlB c3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaXR1cCk7CisKKwlp ZiAoc28tPm51bUtpbGxlZCA+IDApCisJCV9idF9raWxsaXRlbXMoc2Nhbik7CisKKwkvKiBJZiBz a2lwU2NhbktleSBpcyBOVUxMIHRoZW4gd2UgaW5pdGlhbGl6ZSBpdCB3aXRoIF9idF9ta3NjYW5r ZXkgKi8KKwlpZiAoc28tPnNraXBTY2FuS2V5ID09IE5VTEwpCisJeworCQlzby0+c2tpcFNjYW5L ZXkgPSBfYnRfbWtzY2Fua2V5KGluZGV4UmVsLCBzY2FuLT54c19pdHVwKTsKKwkJc28tPnNraXBT Y2FuS2V5LT5rZXlzeiA9IHByZWZpeDsKKwkJc28tPnNraXBTY2FuS2V5LT5zY2FudGlkID0gTlVM TDsKKwl9CisJc28tPnNraXBTY2FuS2V5LT5uZXh0a2V5ID0gU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpOworCV9idF91cGRhdGVfc2tpcF9zY2Fua2V5cyhzY2FuLCBpbmRleFJlbCk7CisKKwkv KiBDaGVjayBpZiB0aGUgbmV4dCB1bmlxdWUga2V5IGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGN1 cnJlbnQgcGFnZS4KKwkgKiBTaW5jZSB3ZSBkbyBub3QgbG9jayB0aGUgY3VycmVudCBwYWdlIGJl dHdlZW4ganVtcHMsIGl0J3MgcG9zc2libGUKKwkgKiB0aGF0IGl0IHdhcyBzcGxpdHRlZCBzaW5j ZSB0aGUgbGFzdCB0aW1lIHdlIHNhdyBpdC4gVGhpcyBpcyBmaW5lIGluCisJICogY2FzZSBvZiBz Y2FubmluZyBmb3J3YXJkLCBzaW5jZSBwYWdlIHNwbGl0IHRvIHRoZSByaWdodCBhbmQgd2UgYXJl CisJICogc3RpbGwgb24gdGhlIGxlZnQgbW9zdCBwYWdlLiBJbiBjYXNlIG9mIHNjYW5uaW5nIGJh Y2t3YXJkcyBpdCdzCisJICogcG9zc2libGUgdG8gbG9vc2Ugc29tZSBwYWdlcyBhbmQgd2UgbmVl ZCB0byByZW1lbWJlciB0aGUgcHJldmlvdXMKKwkgKiBwYWdlLCBhbmQgdGhlbiBmb2xsb3cgdGhl IHJpZ2h0IGxpbmsgZnJvbSB0aGUgY3VycmVudCBwYWdlIHVudGlsIHdlCisJICogZmluZCB0aGUg b3JpZ2luYWwgb25lLgorCSAqCisJICogU2luY2UgdGhlIHdob2xlIGlkZWEgb2YgY2hlY2tpbmcg dGhlIGN1cnJlbnQgcGFnZSBpcyB0byBwcm90ZWN0CisJICogb3Vyc2VsdmVzIGFuZCBtYWtlIG1v cmUgcGVyZm9ybWFudCBzdGF0aXN0aWMgbWlzbWF0Y2ggY2FzZSB3aGVuCisJICogdGhlcmUgYXJl IHRvbyBtYW55IGRpc3RpbmN0IHZhbHVlcyBmb3IganVtcGluZywgaXQncyBub3QgY2xlYXIgaWYK KwkgKiB0aGUgY29tcGxleGl0eSBvZiB0aGlzIHNvbHV0aW9uIGluIGNhc2Ugb2YgYmFja3dhcmQg c2NhbiBpcworCSAqIGp1c3RpZmllZCwgc28gZm9yIG5vdyBqdXN0IGF2b2lkIGl0LgorCSAqLwor CWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikgJiYgU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQorCXsKKwkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOwor CisJCWlmIChfYnRfc2NhbmtleV93aXRoaW5fcGFnZShzY2FuLCBzby0+c2tpcFNjYW5LZXksIHNv LT5jdXJyUG9zLmJ1ZiwgZGlyKSkKKwkJeworCQkJYm9vbCBrZXlGb3VuZCA9IGZhbHNlOworCisJ CQlvZmZudW0gPSBfYnRfYmluc3JjaChzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+c2tpcFNjYW5L ZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisKKwkJCS8qIExvY2sgdGhlIHBhZ2UgZm9yIFNFUklBTEla QUJMRSB0cmFuc2FjdGlvbnMgKi8KKwkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmluZGV4UmVs YXRpb24sIEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1ZiksCisJCQkJCQkJICBz Y2FuLT54c19zbmFwc2hvdCk7CisKKwkJCS8qIFdlIGtub3cgaW4gd2hpY2ggZGlyZWN0aW9uIHRv IGxvb2sgKi8KKwkJCV9idF9pbml0aWFsaXplX21vcmVfZGF0YShzbywgZGlyKTsKKworCQkJLyog Tm93IHJlYWQgdGhlIGRhdGEgKi8KKwkJCWtleUZvdW5kID0gX2J0X3JlYWRwYWdlKHNjYW4sIGRp ciwgb2ZmbnVtKTsKKworCQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CisJCQlSZWxlYXNlQnVmZmVyKHNvLT5jdXJyUG9zLmJ1Zik7CisJCQlzby0+Y3Vy clBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCQlpZiAoa2V5Rm91bmQpCisJCQl7CisJCQkJ Lyogc2V0IEluZGV4VHVwbGUgKi8KKwkJCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tz by0+Y3VyclBvcy5pdGVtSW5kZXhdOworCQkJCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+ aGVhcFRpZDsKKwkJCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxl cyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0K KwkJZWxzZQorCQl7CisJCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tf VU5MT0NLKTsKKwkJfQorCX0KKworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1Zikp CisJeworCQlSZWxlYXNlQnVmZmVyKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXNvLT5jdXJyUG9zLmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlbid0IGZvdW5kIHNjYW4g a2V5IHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLCBzbyBsZXQncyBzY2FuIGZyb20KKwkgKiB0aGUg cm9vdC4gVXNlIF9idF9zZWFyY2ggYW5kIF9idF9iaW5zcmNoIHRvIGdldCB0aGUgYnVmZmVyIGFu ZCBvZmZzZXQKKwkgKiBudW1iZXIKKwkgKi8KKwlzdGFjayA9IF9idF9zZWFyY2goc2Nhbi0+aW5k ZXhSZWxhdGlvbiwgc28tPnNraXBTY2FuS2V5LAorCQkJCQkgICAmYnVmLCBCVF9SRUFELCBzY2Fu LT54c19zbmFwc2hvdCk7CisJX2J0X2ZyZWVzdGFjayhzdGFjayk7CisJc28tPmN1cnJQb3MuYnVm ID0gYnVmOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5z a2lwU2NhbktleSwgYnVmKTsKKworCS8qIExvY2sgdGhlIHBhZ2UgZm9yIFNFUklBTElaQUJMRSB0 cmFuc2FjdGlvbnMgKi8KKwlQcmVkaWNhdGVMb2NrUGFnZShzY2FuLT5pbmRleFJlbGF0aW9uLCBC dWZmZXJHZXRCbG9ja051bWJlcihidWYpLAorCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKwor CS8qIFdlIGtub3cgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIGxvb2sgKi8KKwlfYnRfaW5pdGlhbGl6 ZV9tb3JlX2RhdGEoc28sIGRpcik7CisKKwkvKgorCSAqIFNpbXBsZXN0IGNhc2UgaXMgd2hlbiBi b3RoIGRpcmVjdGlvbnMgYXJlIGZvcndhcmQsIHdoZW4gd2UgYXJlIGFscmVhZHkKKwkgKiBhdCB0 aGUgbmV4dCBkaXN0aW5jdCBrZXkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VyaWVzIChzbyBl dmVyeXRoaW5nCisJICogZWxzZSB3b3VsZCBiZSBkb25lIGluIF9idF9yZWFkcGFnZSkKKwkgKgor CSAqIFRoZSBjYXNlIHdoZW4gYm90aCBkaXJlY3Rpb25zIGFyZSBiYWNrd2FyZHMgaXMgYWxzbyBz aW1wbGUsIGJ1dCB3ZSBuZWVkCisJICogdG8gZ28gb25lIHN0ZXAgYmFjaywgc2luY2Ugd2UgbmVl ZCBhIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBwcmV2aW91cworCSAqIHNlcmllcy4KKwkgKi8KKwlp ZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJiBTY2FuRGlyZWN0aW9uSXNCYWNrd2Fy ZChpbmRleGRpcikpCisJCSBvZmZudW0gPSBPZmZzZXROdW1iZXJQcmV2KG9mZm51bSk7CisKKwkv KgorCSAqIEFuZHZhbmNlIGJhY2t3YXJkIGJ1dCByZWFkIGZvcndhcmQuIEF0IHRoaXMgbW9tZW50 IHdlIGFyZSBhdCB0aGUgbmV4dAorCSAqIGRpc3RpbmN0IGtleSBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBzZXJpZXMuIEluIGNhc2UgaWYgc2NhbiBqdXN0CisJICogc3RhcnRlZCwgd2UgY2FuIHJl YWQgZm9yd2FyZCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZQorCSAqIGZp bmQgcHJldmlvdXMgZGlzdGluY3Qga2V5IGFuZCB0aGUgYmVnaW5uaW5nIG9mIGl0J3Mgc2VyaWVz IGFuZCByZWFkCisJICogZm9yd2FyZCBmcm9tIHRoZXJlLiBUbyBkbyBzbywgZ28gYmFjayBvbmUg c3RlcCwgcGVyZm9ybSBiaW5hcnkgc2VhcmNoCisJICogdG8gZmluZCB0aGUgZmlyc3QgaXRlbSBp biB0aGUgc2VyaWVzIGFuZCBsZXQgX2J0X3JlYWRwYWdlIGRvIGV2ZXJ5dGhpbmcKKwkgKiBlbHNl LgorCSAqLworCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgJiYgU2NhbkRp cmVjdGlvbklzRm9yd2FyZChpbmRleGRpcikpCisJeworCQlpZiAoIXNjYW5zdGFydCkKKwkJewor CQkJLyogUmVhZGluZyBmb3J3YXJkIG1lYW5zIHdlIGV4cGVjdCB0byBzZWUgbW9yZSBkYXRhIG9u IHRoZSByaWdodCAqLworCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKworCQkJb2Zm bnVtID0gX2J0X2JpbnNyY2goc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPnNraXBTY2FuS2V5LCBi dWYpOworCisJCQkvKiBPbmUgc3RlcCBiYWNrIHRvIGZpbmQgYSBwcmV2aW91cyB2YWx1ZSAqLwor CQkJX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtKTsKKworCQkJTG9ja0J1ZmZlcihzby0+ Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCQlpZiAoX2J0X25leHQoc2Nhbiwg ZGlyKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCk7CisJ CQkJX2J0X3VwZGF0ZV9za2lwX3NjYW5rZXlzKHNjYW4sIGluZGV4UmVsKTsKKworCQkJCS8qCisJ CQkJICogQW5kIG5vdyBmaW5kIHRoZSBsYXN0IGl0ZW0gZnJvbSB0aGUgc2VxdWVuY2UgZm9yIHRo ZQorCQkJCSAqIGN1cnJlbnQsIHZhbHVlIHdpdGggdGhlIGludGVudGlvbiBkbyBPZmZzZXROdW1i ZXJOZXh0LiBBcyBhCisJCQkJICogcmVzdWx0IHdlIGVuZCB1cCBvbiBhIGZpcnN0IGVsZW1lbnQg ZnJvbSB0aGUgc2VxdWVuY2UuCisJCQkJICovCisJCQkJaWYgKF9idF9zY2Fua2V5X3dpdGhpbl9w YWdlKHNjYW4sIHNvLT5za2lwU2NhbktleSwgc28tPmN1cnJQb3MuYnVmLCBkaXIpKQorCQkJCQlv ZmZudW0gPSBfYnRfYmluc3JjaChzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+c2tpcFNjYW5LZXks IGJ1Zik7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQ b3MuYnVmKSkKKwkJCQkJeworCQkJCQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBk ZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLworCQkJCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQorCQkJCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7CisKKwkJCQkJCUxvY2tCdWZmZXIoc28tPmN1 cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCQkJUmVsZWFzZUJ1ZmZlcihzby0+ Y3VyclBvcy5idWYpOworCQkJCQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJ CQkJfQorCisJCQkJCXN0YWNrID0gX2J0X3NlYXJjaChzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+ c2tpcFNjYW5LZXksCisJCQkJCQkJCQkgICAmYnVmLCBCVF9SRUFELCBzY2FuLT54c19zbmFwc2hv dCk7CisJCQkJCV9idF9mcmVlc3RhY2soc3RhY2spOworCQkJCQlzby0+Y3VyclBvcy5idWYgPSBi dWY7CisJCQkJCW9mZm51bSA9IF9idF9iaW5zcmNoKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5z a2lwU2NhbktleSwgYnVmKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcGZyZWUo c28tPnNraXBTY2FuS2V5KTsKKwkJCQlzby0+c2tpcFNjYW5LZXkgPSBOVUxMOworCQkJCXJldHVy biBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogQWR2YW5jZSBmb3J3YXJkIGJ1dCBy ZWFkIGJhY2t3YXJkLiBBdCB0aGlzIG1vbWVudCB3ZSBhcmUgYXQgdGhlIG5leHQKKwkgKiBkaXN0 aW5jdCBrZXkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VyaWVzLiBJbiBjYXNlIGlmIHNjYW4g anVzdAorCSAqIHN0YXJ0ZWQsIHdlIGNhbiBnbyBvbmUgc3RlcCBiYWNrIGFuZCByZWFkIGZvcndh cmQgd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZSBmaW5kIHRoZSBu ZXh0IGRpc3RpbmN0IGtleSBhbmQgdGhlIGJlZ2lubmluZworCSAqIG9mIGl0J3Mgc2VyaWVzLCBn byBvbmUgc3RlcCBiYWNrIGFuZCByZWFkIGJhY2t3YXJkIGZyb20gdGhlcmUuCisJICoKKwkgKiBB biBpbnRlcmVzdGluZyBzaXR1YXRpb24gY2FuIGhhcHBlbiBpZiBvbmUgb2YgZGlzdGluY3Qga2V5 cyBkbyBub3QgcGFzcworCSAqIGEgY29ycmVzcG9uZGluZyBpbmRleCBjb25kaXRpb24gYXQgYWxs LiBJbiB0aGlzIGNhc2UgcmVhZGluZyBiYWNrd2FyZAorCSAqIGNhbiBsZWFkIHRvIGEgcHJldmlv dXMgZGlzdGluY3Qga2V5IGJlaW5nIGZvdW5kLCBjcmVhdGluZyBhIGxvb3AuIFRvCisJICogYXZv aWQgdGhhdCBjaGVjayB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQsIGFuZCBqdW1wIG9uZSBtb3Jl IHRpbWUgaWYKKwkgKiBpdCdzIHRoZSBzYW1lIGFzIGF0IHRoZSBiZWdpbm5pbmcuIE5vdGUgdGhh dCB3ZSBkbyBub3QgY2hlY2sgdmlzaWJpbGl0eQorCSAqIGhlcmUsIGFuZCBkZWFkIHR1cGxlcyBj b3VsZCBhbHNvIGxlYWQgdG8gdGhlIHNhbWUgc2l0dWF0aW9uLiBUaGlzIGhhcyB0bworCSAqIGJl IGNoZWNrZWQgb24gdGhlIGNhbGxlciBzaWRlLgorCSAqLworCWVsc2UgaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSAmJiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChpbmRleGRpcikpCisJ eworCQlpZiAoc2NhbnN0YXJ0KQorCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyUHJldihvZmZudW0p OworCQllbHNlCisJCXsKKwkJCU9mZnNldE51bWJlciBuZXh0T2Zmc2V0LAorCQkJCQkJc3RhcnRP ZmZzZXQsCisJCQkJCQlqdW1wT2Zmc2V0OworCisJCQlJbmRleFR1cGxlIHN0YXJ0SXR1cCA9IENv cHlJbmRleFR1cGxlKHNjYW4tPnhzX2l0dXApOworCQkJUGFnZSBwYWdlID0gQnVmZmVyR2V0UGFn ZShzby0+Y3VyclBvcy5idWYpOworCisJCQkvKiBXZSBhcmUgYXQgdGhlIGVuZCBhbmQgbmVlZCB0 byByZXR1cm4gKi8KKwkJCWlmICgob2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSkgJgorCQkJCShzby0+Y3VyclBvcy5uZXh0UGFnZSA9PSBQX05PTkUpKQorCQkJeworCQkJCUxv Y2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJCQkJQlRT Y2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJCQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7CisKKwkJCQlwZnJlZShzby0+c2tpcFNjYW5LZXkpOworCQkJCXNvLT5z a2lwU2NhbktleSA9IE5VTEw7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQluZXh0T2Zm c2V0ID0gc3RhcnRPZmZzZXQgPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmc2Nhbi0+eHNf aXR1cC0+dF90aWQpOworCisJCQkvKiBSZWFkaW5nIGJhY2t3YXJkcyBtZWFucyB3ZSBleHBlY3Qg dG8gc2VlIG1vcmUgZGF0YSBvbiB0aGUgbGVmdCAqLworCQkJc28tPmN1cnJQb3MubW9yZUxlZnQg PSB0cnVlOworCisJCQl3aGlsZSAobmV4dE9mZnNldCA9PSBzdGFydE9mZnNldCkKKwkJCXsKKwkJ CQlJbmRleFR1cGxlIGl0dXA7CisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJCS8q CisJCQkJICogRmluZCBhIG5leHQgaW5kZXggdHVwbGUgdG8gdXBkYXRlIHNjYW4ga2V5LiBJdCBj b3VsZCBiZSBhdAorCQkJCSAqIHRoZSBlbmQsIHNvIGNoZWNrIGZvciBtYXggb2Zmc2V0CisJCQkJ ICovCisJCQkJaWYgKCFfYnRfcmVhZHBhZ2Uoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG9m Zm51bSkpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNo aW5nIGRhdGEgb24gdGhpcyBwYWdlLiAgVHJ5IHRvCisJCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5l eHQgcGFnZS4gUmV0dXJuIGZhbHNlIGlmIHRoZXJlJ3Mgbm8KKwkJCQkJICogbWF0Y2hpbmcgZGF0 YSBhdCBhbGwuCisJCQkJCSAqLworCQkJCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVG RkVSX0xPQ0tfVU5MT0NLKTsKKwkJCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKKwkJ CQkJeworCQkJCQkJcGZyZWUoc28tPnNraXBTY2FuS2V5KTsKKwkJCQkJCXNvLT5za2lwU2Nhbktl eSA9IE5VTEw7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQkJTG9ja0J1ZmZlcihz by0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCQkJCX0KKworCQkJCWN1cnJJdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLmZpcnN0SXRlbV07CisJCQkJaXR1cCA9IChJbmRleFR1 cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOworCisJCQkJc2Nh bi0+eHNfaXR1cCA9IGl0dXA7CisKKwkJCQlfYnRfdXBkYXRlX3NraXBfc2NhbmtleXMoc2Nhbiwg aW5kZXhSZWwpOworCQkJCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJCQkJ eworCQkJCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2ls bGVkIGl0ZW1zICovCisJCQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKKwkJCQkJCV9idF9raWxs aXRlbXMoc2Nhbik7CisKKwkJCQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCQkJCVJlbGVhc2VCdWZmZXIoc28tPmN1cnJQb3MuYnVmKTsKKwkJCQkJ c28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJCQl9CisKKwkJCQlzdGFjayA9IF9i dF9zZWFyY2goc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPnNraXBTY2FuS2V5LAorCQkJCQkJCQkg ICAmYnVmLCBCVF9SRUFELCBzY2FuLT54c19zbmFwc2hvdCk7CisJCQkJX2J0X2ZyZWVzdGFjayhz dGFjayk7CisJCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJCWp1bXBPZmZzZXQgPSBvZmZu dW0gPSBfYnRfYmluc3JjaChzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+c2tpcFNjYW5LZXksIGJ1 Zik7CisJCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyUHJldihvZmZudW0pOworCisJCQkJaWYgKCFf YnRfcmVhZHBhZ2Uoc2NhbiwgaW5kZXhkaXIsIG9mZm51bSkpCisJCQkJeworCQkJCQkvKgorCQkJ CQkgKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhpcyBwYWdlLiAgVHJ5 IHRvCisJCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgcGFnZS4gUmV0dXJuIGZhbHNlIGlmIHRo ZXJlJ3Mgbm8KKwkJCQkJICogbWF0Y2hpbmcgZGF0YSBhdCBhbGwuCisJCQkJCSAqLworCQkJCQlM b2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCQkJaWYg KCFfYnRfc3RlcHBhZ2Uoc2NhbiwgaW5kZXhkaXIpKQorCQkJCQl7CisJCQkJCQlwZnJlZShzby0+ c2tpcFNjYW5LZXkpOworCQkJCQkJc28tPnNraXBTY2FuS2V5ID0gTlVMTDsKKwkJCQkJCXJldHVy biBmYWxzZTsKKwkJCQkJfQorCQkJCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVB RCk7CisJCQkJfQorCisJCQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQ b3MubGFzdEl0ZW1dOworCQkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsg Y3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKKwkJCQluZXh0T2Zmc2V0ID0gSXRlbVBvaW50ZXJHZXRP ZmZzZXROdW1iZXIoJml0dXAtPnRfdGlkKTsKKworCQkJCS8qCisJCQkJICogVG8gY2hlY2sgaWYg d2UgcmV0dXJuZWQgdGhlIHNhbWUgdHVwbGUsIHRyeSB0byBmaW5kIGEKKwkJCQkgKiBzdGFydEl0 dXAgb24gdGhlIGN1cnJlbnQgcGFnZS4gRm9yIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUKKwkJCQkg KiBzY2Fua2V5IHRvIG1hdGNoIHRoZSB3aG9sZSB0dXBsZSBhbmQgc2V0IG5leHRrZXkgdG8gcmV0 dXJuCisJCQkJICogYW4gZXhhY3QgdHVwbGUsIG5vdCB0aGUgbmV4dCBvbmUuIElmIHRoZSBuZXh0 T2Zmc2V0IGlzIHRoZQorCQkJCSAqIHNhbWUgYXMgYmVmb3JlLCBpdCBtZWFucyB3ZSBhcmUgaW4g dGhlIGxvb3AsIHJldHVybiBvZmZudW0KKwkJCQkgKiB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24g YW5kIGp1bXAgZnVydGhlcgorCQkJCSAqLworCQkJCXNjYW4tPnhzX2l0dXAgPSBzdGFydEl0dXA7 CisJCQkJX2J0X3VwZGF0ZV9za2lwX3NjYW5rZXlzKHNjYW4sIGluZGV4UmVsKTsKKworCQkJCXNv LT5za2lwU2NhbktleS0+a2V5c3ogPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1 dGVzKGluZGV4UmVsKTsKKwkJCQlzby0+c2tpcFNjYW5LZXktPm5leHRrZXkgPSBmYWxzZTsKKwor CQkJCWlmIChfYnRfc2NhbmtleV93aXRoaW5fcGFnZShzY2FuLCBzby0+c2tpcFNjYW5LZXksCisJ CQkJCQkJCQkJCXNvLT5jdXJyUG9zLmJ1ZiwgZGlyKSkKKwkJCQl7CisJCQkJCU9mZnNldE51bWJl ciBtYXhvZmY7CisJCQkJCXN0YXJ0T2Zmc2V0ID0gX2J0X2JpbnNyY2goc2Nhbi0+aW5kZXhSZWxh dGlvbiwKKwkJCQkJCQkJCQkJICBzby0+c2tpcFNjYW5LZXksCisJCQkJCQkJCQkJCSAgc28tPmN1 cnJQb3MuYnVmKTsKKworCQkJCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYp OworCQkJCQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJCQkJCWlm IChuZXh0T2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0KQorCQkJCQl7CisJCQkJCQlvZmZudW0gPSBqdW1w T2Zmc2V0OworCQkJCQkJbmV4dE9mZnNldCA9IHN0YXJ0T2Zmc2V0OworCQkJCQl9CisKKwkJCQkJ aWYgKChvZmZudW0gPiBtYXhvZmYpICYgKHNvLT5jdXJyUG9zLm5leHRQYWdlID09IFBfTk9ORSkp CisJCQkJCXsKKwkJCQkJCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19V TkxPQ0spOworCisJCQkJCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwkJ CQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOworCisJCQkJCQlwZnJlZShzby0+ c2tpcFNjYW5LZXkpOworCQkJCQkJc28tPnNraXBTY2FuS2V5ID0gTlVMTDsKKwkJCQkJCXJldHVy biBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIFJldHVybiBvcmlnaW5hbCBzY2Fua2V5 IG9wdGlvbnMgKi8KKwkJCQlzby0+c2tpcFNjYW5LZXktPmtleXN6ID0gcHJlZml4OworCQkJCXNv LT5za2lwU2NhbktleS0+bmV4dGtleSA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKTsKKwkJ CX0KKwkJfQorCX0KKworCS8qIE5vdyByZWFkIHRoZSBkYXRhICovCisJaWYgKCFfYnRfcmVhZHBh Z2Uoc2NhbiwgaW5kZXhkaXIsIG9mZm51bSkpCisJeworCQkvKgorCQkgKiBUaGVyZSdzIG5vIGFj dHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhpcyBwYWdlLiAgVHJ5IHRvIGFkdmFuY2UgdG8KKwkJ ICogdGhlIG5leHQgcGFnZS4gIFJldHVybiBmYWxzZSBpZiB0aGVyZSdzIG5vIG1hdGNoaW5nIGRh dGEgYXQgYWxsLgorCQkgKi8KKwkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCisJCXsKKwkJCXBm cmVlKHNvLT5za2lwU2NhbktleSk7CisJCQlzby0+c2tpcFNjYW5LZXkgPSBOVUxMOworCQkJcmV0 dXJuIGZhbHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIERyb3AgdGhlIGxvY2ssIGFuZCBt YXliZSB0aGUgcGluLCBvbiB0aGUgY3VycmVudCBwYWdlICovCisJCUxvY2tCdWZmZXIoc28tPmN1 cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCX0KKworCS8qIEFuZCBzZXQgSW5kZXhU dXBsZSAqLworCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1J bmRleF07CisJc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOworCXNjYW4tPnhz X2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zm c2V0KTsKKworCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+Y3VyclBvcy5tb3Jl UmlnaHQgPSB0cnVlOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKglfYnRfcmVhZHBhZ2Uo KSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcwog ICoKQEAgLTI0NzksMyArMjg5Myw1OCBAQCBfYnRfaW5pdGlhbGl6ZV9tb3JlX2RhdGEoQlRTY2Fu T3BhcXVlIHNvLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBq dXN0IHBhcmFub2lhICovCiAJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCiB9 CisKKy8qCisgKiBfYnRfdXBkYXRlX3NraXBfc2NhbmtleXMoKSAtLSBzZXQgdXAgYSBuZXcgdmFs dWVzIGZvciB0aGUgZXhpc3Rpbmcgc2NhbmtleXMKKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IGlu ZGV4IHR1cGxlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX2J0X3VwZGF0ZV9za2lwX3NjYW5r ZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgUmVsYXRpb24gaW5kZXhSZWwpCit7CisJVHVwbGVEZXNj CQlpdHVwZGVzYzsKKwlpbnQJCQlpbmRua2V5YXR0cywKKwkJCQlpOworCUJUU2Nhbk9wYXF1ZSAJ c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJU2NhbktleQkJCXNjYW5rZXlzID0g c28tPnNraXBTY2FuS2V5LT5zY2Fua2V5czsKKworCWl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihpbmRleFJlbCk7CisJaW5kbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlB dHRyaWJ1dGVzKGluZGV4UmVsKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5kbmtleWF0dHM7IGkrKykK Kwl7CisJCURhdHVtIGRhdHVtOworCQlib29sIG51bGw7CisJCWludCBmbGFnczsKKworCQlkYXR1 bSA9IGluZGV4X2dldGF0dHIoc2Nhbi0+eHNfaXR1cCwgaSArIDEsIGl0dXBkZXNjLCAmbnVsbCk7 CisJCWZsYWdzID0gKG51bGwgPyBTS19JU05VTEwgOiAwKSB8CisJCQkJKGluZGV4UmVsLT5yZF9p bmRvcHRpb25baV0gPDwgU0tfQlRfSU5ET1BUSU9OX1NISUZUKTsKKwkJc2NhbmtleXNbaV0uc2tf ZmxhZ3MgPSBmbGFnczsKKwkJc2NhbmtleXNbaV0uc2tfYXJndW1lbnQgPSBkYXR1bTsKKwl9Cit9 CisKKy8qCisgKiBfYnRfc2NhbmtleV93aXRoaW5fcGFnZSgpIC0tIGNoZWNrIGlmIHRoZSBwcm92 aWRlZCBzY2Fua2V5IGNvdWxkIGJlIGZvdW5kCisgKiB3aXRoaW4gYSBwYWdlLCBzcGVjaWZpZWQg YnkgdGhlIGJ1ZmZlci4KKyAqCisgKiBTY2Fua2V5IG5leHRrZXkgd2lsbCB0ZWxsIHVzIGlmIHdl IG5lZWQgdG8gZmluZCBhIGN1cnJlbnQga2V5IG9yIHRoZSBuZXh0CisgKiBvbmUsIHdoaWNoIGFm ZmVjdHMgd2hldGhlciBvciBub3QgaXQncyBvayB0byBiZSBlcXVhbCB0byB0aGUgcGFnZSBoaWdo a2V5LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK19idF9zY2Fua2V5X3dpdGhpbl9wYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuSW5zZXJ0IGtleSwKKwkJCQkJCUJ1ZmZlciBidWYsIFNj YW5EaXJlY3Rpb24gZGlyKQoreworCU9mZnNldE51bWJlciBsb3csIGhpZ2g7CisJUGFnZSBwYWdl ID0gQnVmZmVyR2V0UGFnZShidWYpOworCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSAoQlRQYWdlT3Bh cXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CisJaW50IGhpZ2hfY29tcGFyZSA9IGtl eS0+bmV4dGtleSA/IDAgOiAxOworCisJbG93ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwlo aWdoID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCWlmICh1bmxpa2VseShoaWdo IDwgbG93KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIChfYnRfY29tcGFyZShzY2FuLT5p bmRleFJlbGF0aW9uLCBrZXksIHBhZ2UsIGxvdykgPiAwICYmCisJCQlfYnRfY29tcGFyZShzY2Fu LT5pbmRleFJlbGF0aW9uLCBrZXksIHBhZ2UsIGhpZ2gpIDwgaGlnaF9jb21wYXJlKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaAppbmRleCA3OTUwNmM3NDhiLi5lZmQyN2M2MjYxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5o CkBAIC05MzgsNiArOTM4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCSAq LwogCWludAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZhbGlk ICovCiAKKwkvKiBXb3JrIHNwYWNlIGZvciBfYnRfc2tpcCAqLworCUJUU2Nhbkluc2VydAlza2lw U2NhbktleTsJLyogdXNlZCB0byBjb250cm9sIHNraXBwaW5nICovCisKIAkvKiBrZWVwIHRoZXNl IGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICovCiAJQlRTY2FuUG9zRGF0YSBjdXJyUG9z OwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiAJQlRTY2FuUG9zRGF0YSBtYXJrUG9zOwkJ LyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KQEAgLTEwOTUsNiArMTA5OCw4IEBAIGV4dGVy biBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRT dGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVs LCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwogZXh0 ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwogZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CitleHRlcm4gYm9vbCBfYnRfc2tpcChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAorCQkJCQkgU2NhbkRpcmVjdGlvbiBpbmRleGRpciwgYm9vbCBzdGFydCwgaW50 IHByZWZpeCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1 aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0LAogCQkJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90 KTsKIApAQCAtMTExOSw2ICsxMTI0LDggQEAgZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW1fY2Fs bGJhY2soaW50IGNvZGUsIERhdHVtIGFyZyk7CiBleHRlcm4gU2l6ZSBCVHJlZVNobWVtU2l6ZSh2 b2lkKTsKIGV4dGVybiB2b2lkIEJUcmVlU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIGJ5dGVhICpi dG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSk7CitleHRlcm4gYm9vbCBi dHNraXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkgICBTY2Fu RGlyZWN0aW9uIGluZGV4ZGlyLCBib29sIHN0YXJ0LCBpbnQgcHJlZml4KTsKIGV4dGVybiBib29s IGJ0cHJvcGVydHkoT2lkIGluZGV4X29pZCwgaW50IGF0dG5vLAogCQkJCQkgICBJbmRleEFNUHJv cGVydHkgcHJvcCwgY29uc3QgY2hhciAqcHJvcG5hbWUsCiAJCQkJCSAgIGJvb2wgKnJlcywgYm9v bCAqaXNudWxsKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IGE0NmIxNTczYmQu LmE0N2U5ZmFlZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtNDQyOSw2ICs0 NDI5LDggQEAgc2VsZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxlY3QgKiBmcm9tIGIgZ3Jv dXAgYnkgYi5pZCwgYi5jX2lkKSBzCiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAogKDggcm93 cykKIAorLS0gZGlzYWJsZSBpbmRleCBza2lwIHNjYW4gdG8gcHJldmVudCBpdCBpbnRlcmZlcmlu ZyB3aXRoIHRoZSBwbGFuCitzZXQgZW5hYmxlX2luZGV4c2tpcHNjYW4gdG8gb2ZmOwogLS0gc2lt aWxhcmx5LCBidXQga2V5aW5nIG9mZiBhIERJU1RJTkNUIGNsYXVzZQogZXhwbGFpbiAoY29zdHMg b2ZmKQogc2VsZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxlY3QgZGlzdGluY3QgKiBmcm9t IGIpIHMKQEAgLTQ0NDYsNiArNDQ0OCw3IEBAIHNlbGVjdCBkLiogZnJvbSBkIGxlZnQgam9pbiAo c2VsZWN0IGRpc3RpbmN0ICogZnJvbSBiKSBzCiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAog KDkgcm93cykKIAorc2V0IGVuYWJsZV9pbmRleHNraXBzY2FuIHRvIG9uOwogLS0gY2hlY2sgam9p biByZW1vdmFsIHdvcmtzIHdoZW4gdW5pcXVlbmVzcyBvZiB0aGUgam9pbiBjb25kaXRpb24gaXMg ZW5mb3JjZWQKIC0tIGJ5IGEgVU5JT04KIGV4cGxhaW4gKGNvc3RzIG9mZikKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dAppbmRleCAxMWM2ZjUwZmJmLi5i ODExZjdkN2ExIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9k aXN0aW5jdC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGlu Y3Qub3V0CkBAIC0zMDYsMyArMzA2LDYyNCBAQCBTRUxFQ1QgbnVsbCBJUyBOT1QgRElTVElOQ1Qg RlJPTSBudWxsIGFzICJ5ZXMiOwogIHQKICgxIHJvdykKIAorLS0gaW5kZXggb25seSBza2lwIHNj YW4KK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9hIChhIGludCwgYiBpbnQsIGMgaW50KTsKK0lOU0VS VCBJTlRPIGRpc3RpbmN0X2EgKAorICAgIFNFTEVDVCBmaXZlLCB0ZW50aG91cywgMTAgRlJPTQor ICAgIGdlbmVyYXRlX3NlcmllcygxLCA1KSBmaXZlLAorICAgIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwMCkgdGVudGhvdXMKKyk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYSAoYSwgYik7CitD UkVBVEUgSU5ERVggT04gZGlzdGluY3RfYSAoKGEgKyAxKSk7CitBTkFMWVpFIGRpc3RpbmN0X2E7 CitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2E7CisgYSAKKy0tLQorIDEKKyAyCisg MworIDQKKyA1CisoNSByb3dzKQorCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2Eg V0hFUkUgYSA9IDE7CisgYSAKKy0tLQorIDEKKygxIHJvdykKKworU0VMRUNUIERJU1RJTkNUIGEg RlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGEgREVTQzsKKyBhIAorLS0tCisgNQorIDQKKyAzCisg MgorIDEKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBh IEZST00gZGlzdGluY3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBkaXN0aW5jdF9hX2Ff Yl9pZHggb24gZGlzdGluY3RfYQorICAgU2tpcCBzY2FuOiB0cnVlCisoMiByb3dzKQorCistLSB0 ZXN0IGluZGV4IHNraXAgc2NhbiB3aXRoIGEgY29uZGl0aW9uIG9uIGEgbm9uIHVuaXF1ZSBmaWVs ZAorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0g MjsKKyBhIHwgYiAKKy0tLSstLS0KKyAxIHwgMgorIDIgfCAyCisgMyB8IDIKKyA0IHwgMgorIDUg fCAyCisoNSByb3dzKQorCistLSB0ZXN0IGluZGV4IHNraXAgc2NhbiBiYWNrd2FyZHMKK1NFTEVD VCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDLCBi IERFU0M7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyA1IHwgMTAwMDAKKyA0IHwgMTAwMDAK KyAzIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAxIHwgMTAwMDAKKyg1IHJvd3MpCisKKy0tIHRlc3Qg aW5kZXggc2tpcCBzY2FuIGZvciBleHByZXNzaW9ucworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIERJU1RJTkNUIChhICsgMSkgRlJPTSBkaXN0aW5jdF9hOworICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZGlzdGlu Y3RfYV9leHByX2lkeCBvbiBkaXN0aW5jdF9hCisgICBTa2lwIHNjYW46IHRydWUKKygyIHJvd3Mp CisKK1NFTEVDVCBESVNUSU5DVCAoYSArIDEpIEZST00gZGlzdGluY3RfYTsKKyA/Y29sdW1uPyAK Ky0tLS0tLS0tLS0KKyAgICAgICAgMgorICAgICAgICAzCisgICAgICAgIDQKKyAgICAgICAgNQor ICAgICAgICA2CisoNSByb3dzKQorCistLSBjaGVjayBjb2x1bXMgb3JkZXIKK0NSRUFURSBJTkRF WCBkaXN0aW5jdF9hX2JfYSBvbiBkaXN0aW5jdF9hIChiLCBhKTsKK1NFTEVDVCBESVNUSU5DVCBh IEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKyBhIAorLS0tCisgMQorIDIKKyAzCisgNAor IDUKKyg1IHJvd3MpCisKK1NFTEVDVCBESVNUSU5DVCBvbiAoYSwgYikgYSwgYiBGUk9NIGRpc3Rp bmN0X2EgV0hFUkUgYiA9IDI7CisgYSB8IGIgCistLS0rLS0tCisgMSB8IDIKKyAyIHwgMgorIDMg fCAyCisgNCB8IDIKKyA1IHwgMgorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOworICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBkaXN0aW5jdF9hX2JfYSBvbiBkaXN0aW5jdF9hCisgICBTa2lwIHNjYW46IHRydWUKKyAg IEluZGV4IENvbmQ6IChiID0gMikKKygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBESVNUSU5DVCBvbiAoYSwgYikgYSwgYiBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDI7 CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIGRpc3RpbmN0X2FfYl9hIG9uIGRpc3RpbmN0X2EKKyAgIFNraXAg c2NhbjogdHJ1ZQorICAgSW5kZXggQ29uZDogKGIgPSAyKQorKDMgcm93cykKKworRFJPUCBJTkRF WCBkaXN0aW5jdF9hX2JfYTsKKy0tIHRlc3Qgb3Bwb3NpdGUgc2Nhbi9pbmRleCBkaXJlY3Rpb25z IGluc2lkZSBhIGN1cnNvcgorLS0gZm9yd2FyZC9iYWNrd2FyZAorQkVHSU47CitERUNMQVJFIGMg U0NST0xMIENVUlNPUiBGT1IKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiIEZST00gZGlzdGlu Y3RfYSBPUkRFUiBCWSBhLCBiOworRkVUQ0ggRlJPTSBjOworIGEgfCBiIAorLS0tKy0tLQorIDEg fCAxCisoMSByb3cpCisKK0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKyBhIHwgYiAKKy0tLSstLS0K KygwIHJvd3MpCisKK0ZFVENIIDYgRlJPTSBjOworIGEgfCBiIAorLS0tKy0tLQorIDEgfCAxCisg MiB8IDEKKyAzIHwgMQorIDQgfCAxCisgNSB8IDEKKyg1IHJvd3MpCisKK0ZFVENIIEJBQ0tXQVJE IDYgRlJPTSBjOworIGEgfCBiIAorLS0tKy0tLQorIDUgfCAxCisgNCB8IDEKKyAzIHwgMQorIDIg fCAxCisgMSB8IDEKKyg1IHJvd3MpCisKK0ZFVENIIDYgRlJPTSBjOworIGEgfCBiIAorLS0tKy0t LQorIDEgfCAxCisgMiB8IDEKKyAzIHwgMQorIDQgfCAxCisgNSB8IDEKKyg1IHJvd3MpCisKK0ZF VENIIEJBQ0tXQVJEIDYgRlJPTSBjOworIGEgfCBiIAorLS0tKy0tLQorIDUgfCAxCisgNCB8IDEK KyAzIHwgMQorIDIgfCAxCisgMSB8IDEKKyg1IHJvd3MpCisKK0VORDsKKy0tIGJhY2t3YXJkL2Zv cndhcmQKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElO Q1QgT04gKGEpIGEsYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CitG RVRDSCBGUk9NIGM7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyA1IHwgMTAwMDAKKygxIHJv dykKKworRkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworIGEgfCBiIAorLS0tKy0tLQorKDAgcm93cykK KworRkVUQ0ggNiBGUk9NIGM7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyA1IHwgMTAwMDAK KyA0IHwgMTAwMDAKKyAzIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAxIHwgMTAwMDAKKyg1IHJvd3Mp CisKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworIGEgfCAgIGIgICAKKy0tLSstLS0tLS0tCisg MSB8IDEwMDAwCisgMiB8IDEwMDAwCisgMyB8IDEwMDAwCisgNCB8IDEwMDAwCisgNSB8IDEwMDAw CisoNSByb3dzKQorCitGRVRDSCA2IEZST00gYzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQor IDUgfCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAxMDAwMAorIDEgfCAxMDAw MAorKDUgcm93cykKKworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisgYSB8ICAgYiAgIAorLS0t Ky0tLS0tLS0KKyAxIHwgMTAwMDAKKyAyIHwgMTAwMDAKKyAzIHwgMTAwMDAKKyA0IHwgMTAwMDAK KyA1IHwgMTAwMDAKKyg1IHJvd3MpCisKK0VORDsKKy0tIHRlc3QgbWlzc2luZyB2YWx1ZXMgYW5k IHNraXBwaW5nIGZyb20gdGhlIGVuZAorQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2FiYyhhIGludCwg YiBpbnQsIGMgaW50KTsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9hYmMoYSwgYiwgYyk7CitJ TlNFUlQgSU5UTyBkaXN0aW5jdF9hYmMKKwlWQUxVRVMgKDEsIDEsIDEpLAorCQkgICAoMSwgMSwg MiksCisJCSAgICgxLCAyLCAyKSwKKwkJICAgKDEsIDIsIDMpLAorCQkgICAoMiwgMiwgMSksCisJ CSAgICgyLCAyLCAzKSwKKwkJICAgKDMsIDEsIDEpLAorCQkgICAoMywgMSwgMiksCisJCSAgICgz LCAyLCAyKSwKKwkJICAgKDMsIDIsIDMpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJ U1RJTkNUIE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMjsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBkaXN0aW5jdF9hYmNfYV9iX2NfaWR4IG9u IGRpc3RpbmN0X2FiYworICAgU2tpcCBzY2FuOiB0cnVlCisgICBJbmRleCBDb25kOiAoYyA9IDIp CisoMyByb3dzKQorCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNU IERJU1RJTkNUIE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMjsKK0ZF VENIIEFMTCBGUk9NIGM7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKyAxIHwgMSB8IDIKKyAz IHwgMSB8IDIKKygyIHJvd3MpCisKK0ZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CisgYSB8IGIg fCBjIAorLS0tKy0tLSstLS0KKyAzIHwgMSB8IDIKKyAxIHwgMSB8IDIKKygyIHJvd3MpCisKK0VO RDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJP TSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDIKK09SREVSIEJZIGEgREVTQywgYiBERVNDOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVz aW5nIGRpc3RpbmN0X2FiY19hX2JfY19pZHggb24gZGlzdGluY3RfYWJjCisgICBTa2lwIHNjYW46 IHRydWUKKyAgIEluZGV4IENvbmQ6IChjID0gMikKKygzIHJvd3MpCisKK0JFR0lOOworREVDTEFS RSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjIEZST00g ZGlzdGluY3RfYWJjIFdIRVJFIGMgPSAyCitPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKK0ZFVENI IEFMTCBGUk9NIGM7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKyAzIHwgMiB8IDIKKyAxIHwg MiB8IDIKKygyIHJvd3MpCisKK0ZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CisgYSB8IGIgfCBj IAorLS0tKy0tLSstLS0KKyAxIHwgMiB8IDIKKyAzIHwgMiB8IDIKKygyIHJvd3MpCisKK0VORDsK K0RST1AgVEFCTEUgZGlzdGluY3RfYWJjOworLS0gaW5kZXggc2tpcCBzY2FuCitTRUxFQ1QgRElT VElOQ1QgT04gKGEpIGEsIGIsIGMKK0ZST00gZGlzdGluY3RfYSBPUkRFUiBCWSBhOworIGEgfCBi IHwgYyAgCistLS0rLS0tKy0tLS0KKyAxIHwgMSB8IDEwCisgMiB8IDEgfCAxMAorIDMgfCAxIHwg MTAKKyA0IHwgMSB8IDEwCisgNSB8IDEgfCAxMAorKDUgcm93cykKKworU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDEgT1JERVIgQlkgYTsK KyBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0tCisgMSB8IDEgfCAxMAorKDEgcm93KQorCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIsIGMKK0ZST00gZGlz dGluY3RfYSBPUkRFUiBCWSBhOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGRpc3RpbmN0X2FfYV9iX2lkeCBvbiBkaXN0 aW5jdF9hCisgICBTa2lwIHNjYW46IHRydWUKKygyIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiwgYworRlJPTSBkaXN0aW5jdF9hIFdIRVJF IGEgPSAxIE9SREVSIEJZIGE7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIGRpc3Rp bmN0X2EKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKGEgPSAxKQorICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIGRpc3RpbmN0X2FfYV9iX2lkeAorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGEgPSAxKQorKDUgcm93cykKKworLS0gY2hlY2sgY29sdW1zIG9yZGVyCitTRUxFQ1Qg RElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDIgQU5EIGMgPSAxMDsKKyBhIAor LS0tCisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBESVNUSU5DVCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMiBBTkQgYyA9IDEw OworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGRpc3RpbmN0X2FfYV9iX2lk eCBvbiBkaXN0aW5jdF9hCisgICAgICAgICBJbmRleCBDb25kOiAoYiA9IDIpCisgICAgICAgICBG aWx0ZXI6IChjID0gMTApCisoNCByb3dzKQorCistLSBjaGVjayBwcm9qZWN0aW9uIGNhc2UKK1NF TEVDVCBESVNUSU5DVCBhLCBhIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKyBhIHwgYSAK Ky0tLSstLS0KKyAxIHwgMQorIDIgfCAyCisgMyB8IDMKKyA0IHwgNAorIDUgfCA1CisoNSByb3dz KQorCitTRUxFQ1QgRElTVElOQ1QgYSwgMSBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYiA9IDI7Cisg YSB8ID9jb2x1bW4/IAorLS0tKy0tLS0tLS0tLS0KKyAxIHwgICAgICAgIDEKKyAyIHwgICAgICAg IDEKKyAzIHwgICAgICAgIDEKKyA0IHwgICAgICAgIDEKKyA1IHwgICAgICAgIDEKKyg1IHJvd3Mp CisKKy0tIHRlc3QgY3Vyc29yIGZvcndhcmQvYmFja3dhcmQgbW92ZW1lbnRzCitCRUdJTjsKK0RF Q0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUiBTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0 X2E7CitGRVRDSCBGUk9NIGM7CisgYSAKKy0tLQorIDEKKygxIHJvdykKKworRkVUQ0ggQkFDS1dB UkQgRlJPTSBjOworIGEgCistLS0KKygwIHJvd3MpCisKK0ZFVENIIDYgRlJPTSBjOworIGEgCist LS0KKyAxCisgMgorIDMKKyA0CisgNQorKDUgcm93cykKKworRkVUQ0ggQkFDS1dBUkQgNiBGUk9N IGM7CisgYSAKKy0tLQorIDUKKyA0CisgMworIDIKKyAxCisoNSByb3dzKQorCitGRVRDSCA2IEZS T00gYzsKKyBhIAorLS0tCisgMQorIDIKKyAzCisgNAorIDUKKyg1IHJvd3MpCisKK0ZFVENIIEJB Q0tXQVJEIDYgRlJPTSBjOworIGEgCistLS0KKyA1CisgNAorIDMKKyAyCisgMQorKDUgcm93cykK KworRU5EOworRFJPUCBUQUJMRSBkaXN0aW5jdF9hOworLS0gdGVzdCB0dXBsZXMgdmlzaWJpbGl0 eQorQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X3Zpc2liaWxpdHkgKGEgaW50LCBiIGludCk7CitJTlNF UlQgSU5UTyBkaXN0aW5jdF92aXNpYmlsaXR5IChzZWxlY3QgYSwgYiBmcm9tIGdlbmVyYXRlX3Nl cmllcygxLDUpIGEsIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgYik7CitDUkVBVEUgSU5ERVgg T04gZGlzdGluY3RfdmlzaWJpbGl0eSAoYSwgYik7CitBTkFMWVpFIGRpc3RpbmN0X3Zpc2liaWxp dHk7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5 IE9SREVSIEJZIGEsIGI7CisgYSB8IGIgCistLS0rLS0tCisgMSB8IDEKKyAyIHwgMQorIDMgfCAx CisgNCB8IDEKKyA1IHwgMQorKDUgcm93cykKKworREVMRVRFIEZST00gZGlzdGluY3RfdmlzaWJp bGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDE7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIg RlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZIGEsIGI7CisgYSB8IGIgCistLS0rLS0t CisgMSB8IDEKKyAyIHwgMgorIDMgfCAxCisgNCB8IDEKKyA1IHwgMQorKDUgcm93cykKKworU0VM RUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBC WSBhIERFU0MsIGIgREVTQzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQorIDUgfCAxMDAwMAor IDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAxMDAwMAorIDEgfCAxMDAwMAorKDUgcm93cykK KworREVMRVRFIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDEw MDAwOworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0 eSBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyBhIHwgICBiICAgCistLS0rLS0tLS0tLQorIDUg fCAxMDAwMAorIDQgfCAxMDAwMAorIDMgfCAxMDAwMAorIDIgfCAgOTk5OQorIDEgfCAxMDAwMAor KDUgcm93cykKKworRFJPUCBUQUJMRSBkaXN0aW5jdF92aXNpYmlsaXR5OworLS0gdGVzdCBwYWdl IGJvdW5kYXJpZXMKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ib3VuZGFyaWVzIEFTCisgICAgU0VM RUNUIGEsIGI6OmludDIgYiwgKGIgJSAyKTo6aW50MiBjIEZST00KKyAgICAgICAgZ2VuZXJhdGVf c2VyaWVzKDEsIDUpIGEsCisgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDM2NikgYjsKK0NSRUFU RSBJTkRFWCBPTiBkaXN0aW5jdF9ib3VuZGFyaWVzIChhLCBiLCBjKTsKK0FOQUxZWkUgZGlzdGlu Y3RfYm91bmRhcmllczsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBPTiAo YSkgYSwgYiwgYyBmcm9tIGRpc3RpbmN0X2JvdW5kYXJpZXMKK1dIRVJFIGIgPj0gMSBhbmQgYyA9 IDAgT1JERVIgQlkgYSwgYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZGlzdGluY3RfYm91bmRhcmllc19hX2JfY19pZHgg b24gZGlzdGluY3RfYm91bmRhcmllcworICAgU2tpcCBzY2FuOiB0cnVlCisgICBJbmRleCBDb25k OiAoKGIgPj0gMSkgQU5EIChjID0gMCkpCisoMyByb3dzKQorCitTRUxFQ1QgRElTVElOQ1QgT04g KGEpIGEsIGIsIGMgZnJvbSBkaXN0aW5jdF9ib3VuZGFyaWVzCitXSEVSRSBiID49IDEgYW5kIGMg PSAwIE9SREVSIEJZIGEsIGI7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKyAxIHwgMiB8IDAK KyAyIHwgMiB8IDAKKyAzIHwgMiB8IDAKKyA0IHwgMiB8IDAKKyA1IHwgMiB8IDAKKyg1IHJvd3Mp CisKK0RST1AgVEFCTEUgZGlzdGluY3RfYm91bmRhcmllczsKKy0tIHRlc3QgdHVwbGUga2lsbGlu ZworLS0gREVTQyBvcmRlcmluZworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2tpbGxlZCBBUworICAg IFNFTEVDVCBhLCBiLCBiICUgMiBBUyBjLCAxMCBBUyBkCisgICAgICAgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDUpIGEsCisgICAgICAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgYjsK K0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF9raWxsZWQgKGEsIGIsIGMsIGQpOworREVMRVRFIEZS T00gZGlzdGluY3Rfa2lsbGVkIHdoZXJlIGEgPSAzOworQkVHSU47CisgICAgREVDTEFSRSBjIFND Uk9MTCBDVVJTT1IgRk9SCisgICAgU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIsYyxkCisgICAg RlJPTSBkaXN0aW5jdF9raWxsZWQgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisgICAgRkVUQ0gg Rk9SV0FSRCBBTEwgRlJPTSBjOworIGEgfCAgYiAgIHwgYyB8IGQgIAorLS0tKy0tLS0tLSstLS0r LS0tLQorIDUgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAgfCAwIHwgMTAKKyAyIHwgMTAwMCB8 IDAgfCAxMAorIDEgfCAxMDAwIHwgMCB8IDEwCisoNCByb3dzKQorCisgICAgRkVUQ0ggQkFDS1dB UkQgQUxMIEZST00gYzsKKyBhIHwgIGIgICB8IGMgfCBkICAKKy0tLSstLS0tLS0rLS0tKy0tLS0K KyAxIHwgMTAwMCB8IDAgfCAxMAorIDIgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAgfCAwIHwg MTAKKyA1IHwgMTAwMCB8IDAgfCAxMAorKDQgcm93cykKKworQ09NTUlUOworRFJPUCBUQUJMRSBk aXN0aW5jdF9raWxsZWQ7CistLSByZWd1bGFyIG9yZGVyaW5nCitDUkVBVEUgVEFCTEUgZGlzdGlu Y3Rfa2lsbGVkIEFTCisgICAgU0VMRUNUIGEsIGIsIGIgJSAyIEFTIGMsIDEwIEFTIGQKKyAgICAg ICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgYSwKKyAgICAgICAgICAgICBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwKSBiOworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2tpbGxlZCAoYSwgYiwg YywgZCk7CitERUxFVEUgRlJPTSBkaXN0aW5jdF9raWxsZWQgd2hlcmUgYSA9IDM7CitCRUdJTjsK KyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1QgT04g KGEpIGEsYixjLGQKKyAgICBGUk9NIGRpc3RpbmN0X2tpbGxlZCBPUkRFUiBCWSBhLCBiOworICAg IEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsKKyBhIHwgYiB8IGMgfCBkICAKKy0tLSstLS0rLS0t Ky0tLS0KKyAxIHwgMSB8IDEgfCAxMAorIDIgfCAxIHwgMSB8IDEwCisgNCB8IDEgfCAxIHwgMTAK KyA1IHwgMSB8IDEgfCAxMAorKDQgcm93cykKKworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9N IGM7CisgYSB8IGIgfCBjIHwgZCAgCistLS0rLS0tKy0tLSstLS0tCisgNSB8IDEgfCAxIHwgMTAK KyA0IHwgMSB8IDEgfCAxMAorIDIgfCAxIHwgMSB8IDEwCisgMSB8IDEgfCAxIHwgMTAKKyg0IHJv d3MpCisKK0NPTU1JVDsKK0RST1AgVEFCTEUgZGlzdGluY3Rfa2lsbGVkOworLS0gcGFydGlhbCBk ZWxldGUKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9raWxsZWQgQVMKKyAgICBTRUxFQ1QgYSwgYiwg YiAlIDIgQVMgYywgMTAgQVMgZAorICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBh LAorICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGI7CitDUkVBVEUgSU5ERVgg T04gZGlzdGluY3Rfa2lsbGVkIChhLCBiLCBjLCBkKTsKK0RFTEVURSBGUk9NIGRpc3RpbmN0X2tp bGxlZCBXSEVSRSBhID0gMyBBTkQgYiA8PSA5OTk7CitCRUdJTjsKKyAgICBERUNMQVJFIGMgU0NS T0xMIENVUlNPUiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQKKyAgICBG Uk9NIGRpc3RpbmN0X2tpbGxlZCBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyAgICBGRVRDSCBG T1JXQVJEIEFMTCBGUk9NIGM7CisgYSB8ICBiICAgfCBjIHwgZCAgCistLS0rLS0tLS0tKy0tLSst LS0tCisgNSB8IDEwMDAgfCAwIHwgMTAKKyA0IHwgMTAwMCB8IDAgfCAxMAorIDMgfCAxMDAwIHwg MCB8IDEwCisgMiB8IDEwMDAgfCAwIHwgMTAKKyAxIHwgMTAwMCB8IDAgfCAxMAorKDUgcm93cykK KworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CisgYSB8ICBiICAgfCBjIHwgZCAgCist LS0rLS0tLS0tKy0tLSstLS0tCisgMSB8IDEwMDAgfCAwIHwgMTAKKyAyIHwgMTAwMCB8IDAgfCAx MAorIDMgfCAxMDAwIHwgMCB8IDEwCisgNCB8IDEwMDAgfCAwIHwgMTAKKyA1IHwgMTAwMCB8IDAg fCAxMAorKDUgcm93cykKKworQ09NTUlUOworRFJPUCBUQUJMRSBkaXN0aW5jdF9raWxsZWQ7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pvaW4uc3FsCmluZGV4IDE0MDNlMGZmZTcuLjEzZTM1ZmRhODggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsCkBAIC0xNTE5LDExICsxNTE5LDE2IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNl bGVjdCBkLiogZnJvbSBkIGxlZnQgam9pbiAoc2VsZWN0ICogZnJvbSBiIGdyb3VwIGJ5IGIuaWQs IGIuY19pZCkgcwogICBvbiBkLmEgPSBzLmlkOwogCistLSBkaXNhYmxlIGluZGV4IHNraXAgc2Nh biB0byBwcmV2ZW50IGl0IGludGVyZmVyaW5nIHdpdGggdGhlIHBsYW4KK3NldCBlbmFibGVfaW5k ZXhza2lwc2NhbiB0byBvZmY7CisKIC0tIHNpbWlsYXJseSwgYnV0IGtleWluZyBvZmYgYSBESVNU SU5DVCBjbGF1c2UKIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBkLiogZnJvbSBkIGxlZnQg am9pbiAoc2VsZWN0IGRpc3RpbmN0ICogZnJvbSBiKSBzCiAgIG9uIGQuYSA9IHMuaWQ7CiAKK3Nl dCBlbmFibGVfaW5kZXhza2lwc2NhbiB0byBvbjsKKwogLS0gY2hlY2sgam9pbiByZW1vdmFsIHdv cmtzIHdoZW4gdW5pcXVlbmVzcyBvZiB0aGUgam9pbiBjb25kaXRpb24gaXMgZW5mb3JjZWQKIC0t IGJ5IGEgVU5JT04KIGV4cGxhaW4gKGNvc3RzIG9mZikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxl Y3RfZGlzdGluY3Quc3FsCmluZGV4IDMzMTAyNzQ0ZWIuLmRhMDc5ODhkMzUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbApAQCAtMTM1LDMgKzEzNSwyNTcgQEAgU0VM RUNUIDEgSVMgTk9UIERJU1RJTkNUIEZST00gMiBhcyAibm8iOwogU0VMRUNUIDIgSVMgTk9UIERJ U1RJTkNUIEZST00gMiBhcyAieWVzIjsKIFNFTEVDVCAyIElTIE5PVCBESVNUSU5DVCBGUk9NIG51 bGwgYXMgIm5vIjsKIFNFTEVDVCBudWxsIElTIE5PVCBESVNUSU5DVCBGUk9NIG51bGwgYXMgInll cyI7CisKKy0tIGluZGV4IG9ubHkgc2tpcCBzY2FuCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfYSAo YSBpbnQsIGIgaW50LCBjIGludCk7CitJTlNFUlQgSU5UTyBkaXN0aW5jdF9hICgKKyAgICBTRUxF Q1QgZml2ZSwgdGVudGhvdXMsIDEwIEZST00KKyAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgZml2 ZSwKKyAgICBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIHRlbnRob3VzCispOworQ1JFQVRFIElO REVYIE9OIGRpc3RpbmN0X2EgKGEsIGIpOworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2EgKChh ICsgMSkpOworQU5BTFlaRSBkaXN0aW5jdF9hOworCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRp c3RpbmN0X2E7CitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDE7 CitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDOworCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0X2E7CisK Ky0tIHRlc3QgaW5kZXggc2tpcCBzY2FuIHdpdGggYSBjb25kaXRpb24gb24gYSBub24gdW5pcXVl IGZpZWxkCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF9hIFdIRVJF IGIgPSAyOworCistLSB0ZXN0IGluZGV4IHNraXAgc2NhbiBiYWNrd2FyZHMKK1NFTEVDVCBESVNU SU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7 CisKKy0tIHRlc3QgaW5kZXggc2tpcCBzY2FuIGZvciBleHByZXNzaW9ucworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIChhICsgMSkgRlJPTSBkaXN0aW5jdF9hOworU0VMRUNU IERJU1RJTkNUIChhICsgMSkgRlJPTSBkaXN0aW5jdF9hOworCistLSBjaGVjayBjb2x1bXMgb3Jk ZXIKK0NSRUFURSBJTkRFWCBkaXN0aW5jdF9hX2JfYSBvbiBkaXN0aW5jdF9hIChiLCBhKTsKKwor U0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOworU0VMRUNUIERJ U1RJTkNUIG9uIChhLCBiKSBhLCBiIEZST00gZGlzdGluY3RfYSBXSEVSRSBiID0gMjsKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJF IGIgPSAyOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1Qgb24gKGEsIGIp IGEsIGIgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyOworCitEUk9QIElOREVYIGRpc3RpbmN0 X2FfYl9hOworCistLSB0ZXN0IG9wcG9zaXRlIHNjYW4vaW5kZXggZGlyZWN0aW9ucyBpbnNpZGUg YSBjdXJzb3IKKy0tIGZvcndhcmQvYmFja3dhcmQKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBD VVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYiBGUk9NIGRpc3RpbmN0X2EgT1JE RVIgQlkgYSwgYjsKKworRkVUQ0ggRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQgRlJPTSBjOworCitG RVRDSCA2IEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitGRVRDSCA2IEZST00g YzsKK0ZFVENIIEJBQ0tXQVJEIDYgRlJPTSBjOworCitFTkQ7CisKKy0tIGJhY2t3YXJkL2Zvcndh cmQKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgRElTVElOQ1Qg T04gKGEpIGEsYiBGUk9NIGRpc3RpbmN0X2EgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisKK0ZF VENIIEZST00gYzsKK0ZFVENIIEJBQ0tXQVJEIEZST00gYzsKKworRkVUQ0ggNiBGUk9NIGM7CitG RVRDSCBCQUNLV0FSRCA2IEZST00gYzsKKworRkVUQ0ggNiBGUk9NIGM7CitGRVRDSCBCQUNLV0FS RCA2IEZST00gYzsKKworRU5EOworCistLSB0ZXN0IG1pc3NpbmcgdmFsdWVzIGFuZCBza2lwcGlu ZyBmcm9tIHRoZSBlbmQKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9hYmMoYSBpbnQsIGIgaW50LCBj IGludCk7CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3RfYWJjKGEsIGIsIGMpOworSU5TRVJUIElO VE8gZGlzdGluY3RfYWJjCisJVkFMVUVTICgxLCAxLCAxKSwKKwkJICAgKDEsIDEsIDIpLAorCQkg ICAoMSwgMiwgMiksCisJCSAgICgxLCAyLCAzKSwKKwkJICAgKDIsIDIsIDEpLAorCQkgICAoMiwg MiwgMyksCisJCSAgICgzLCAxLCAxKSwKKwkJICAgKDMsIDEsIDIpLAorCQkgICAoMywgMiwgMiks CisJCSAgICgzLCAyLCAzKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBXSEVSRSBjID0gMjsKKworQkVHSU47CitE RUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMg RlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDI7CisKK0ZFVENIIEFMTCBGUk9NIGM7CitGRVRD SCBCQUNLV0FSRCBBTEwgRlJPTSBjOworCitFTkQ7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMgRlJPTSBkaXN0aW5jdF9hYmMgV0hFUkUgYyA9IDIK K09SREVSIEJZIGEgREVTQywgYiBERVNDOworCitCRUdJTjsKK0RFQ0xBUkUgYyBTQ1JPTEwgQ1VS U09SIEZPUgorU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLGIsYyBGUk9NIGRpc3RpbmN0X2FiYyBX SEVSRSBjID0gMgorT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CisKK0ZFVENIIEFMTCBGUk9NIGM7 CitGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworCitFTkQ7CisKK0RST1AgVEFCTEUgZGlzdGlu Y3RfYWJjOworCistLSBpbmRleCBza2lwIHNjYW4KK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwg YiwgYworRlJPTSBkaXN0aW5jdF9hIE9SREVSIEJZIGE7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEp IGEsIGIsIGMKK0ZST00gZGlzdGluY3RfYSBXSEVSRSBhID0gMSBPUkRFUiBCWSBhOworCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsIGIsIGMKK0ZST00gZGlz dGluY3RfYSBPUkRFUiBCWSBhOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLCBiLCBjCitGUk9NIGRpc3RpbmN0X2EgV0hFUkUgYSA9IDEgT1JERVIgQlkgYTsK KworLS0gY2hlY2sgY29sdW1zIG9yZGVyCitTRUxFQ1QgRElTVElOQ1QgYSBGUk9NIGRpc3RpbmN0 X2EgV0hFUkUgYiA9IDIgQU5EIGMgPSAxMDsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IERJU1RJTkNUIGEgRlJPTSBkaXN0aW5jdF9hIFdIRVJFIGIgPSAyIEFORCBjID0gMTA7CisKKy0t IGNoZWNrIHByb2plY3Rpb24gY2FzZQorU0VMRUNUIERJU1RJTkNUIGEsIGEgRlJPTSBkaXN0aW5j dF9hIFdIRVJFIGIgPSAyOworU0VMRUNUIERJU1RJTkNUIGEsIDEgRlJPTSBkaXN0aW5jdF9hIFdI RVJFIGIgPSAyOworCistLSB0ZXN0IGN1cnNvciBmb3J3YXJkL2JhY2t3YXJkIG1vdmVtZW50cwor QkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIERJU1RJTkNUIGEgRlJP TSBkaXN0aW5jdF9hOworCitGRVRDSCBGUk9NIGM7CitGRVRDSCBCQUNLV0FSRCBGUk9NIGM7CisK K0ZFVENIIDYgRlJPTSBjOworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisKK0ZFVENIIDYgRlJP TSBjOworRkVUQ0ggQkFDS1dBUkQgNiBGUk9NIGM7CisKK0VORDsKKworRFJPUCBUQUJMRSBkaXN0 aW5jdF9hOworCistLSB0ZXN0IHR1cGxlcyB2aXNpYmlsaXR5CitDUkVBVEUgVEFCTEUgZGlzdGlu Y3RfdmlzaWJpbGl0eSAoYSBpbnQsIGIgaW50KTsKK0lOU0VSVCBJTlRPIGRpc3RpbmN0X3Zpc2li aWxpdHkgKHNlbGVjdCBhLCBiIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgYSwgZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDAwKSBiKTsKK0NSRUFURSBJTkRFWCBPTiBkaXN0aW5jdF92aXNpYmlsaXR5 IChhLCBiKTsKK0FOQUxZWkUgZGlzdGluY3RfdmlzaWJpbGl0eTsKKworU0VMRUNUIERJU1RJTkNU IE9OIChhKSBhLCBiIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBPUkRFUiBCWSBhLCBiOworREVM RVRFIEZST00gZGlzdGluY3RfdmlzaWJpbGl0eSBXSEVSRSBhID0gMiBhbmQgYiA9IDE7CitTRUxF Q1QgRElTVElOQ1QgT04gKGEpIGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZ IGEsIGI7CisKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwgYiBGUk9NIGRpc3RpbmN0X3Zpc2li aWxpdHkgT1JERVIgQlkgYSBERVNDLCBiIERFU0M7CitERUxFVEUgRlJPTSBkaXN0aW5jdF92aXNp YmlsaXR5IFdIRVJFIGEgPSAyIGFuZCBiID0gMTAwMDA7CitTRUxFQ1QgRElTVElOQ1QgT04gKGEp IGEsIGIgRlJPTSBkaXN0aW5jdF92aXNpYmlsaXR5IE9SREVSIEJZIGEgREVTQywgYiBERVNDOwor RFJPUCBUQUJMRSBkaXN0aW5jdF92aXNpYmlsaXR5OworCistLSB0ZXN0IHBhZ2UgYm91bmRhcmll cworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2JvdW5kYXJpZXMgQVMKKyAgICBTRUxFQ1QgYSwgYjo6 aW50MiBiLCAoYiAlIDIpOjppbnQyIGMgRlJPTQorICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwg NSkgYSwKKyAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEsMzY2KSBiOworCitDUkVBVEUgSU5ERVgg T04gZGlzdGluY3RfYm91bmRhcmllcyAoYSwgYiwgYyk7CitBTkFMWVpFIGRpc3RpbmN0X2JvdW5k YXJpZXM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSwg YiwgYyBmcm9tIGRpc3RpbmN0X2JvdW5kYXJpZXMKK1dIRVJFIGIgPj0gMSBhbmQgYyA9IDAgT1JE RVIgQlkgYSwgYjsKKworU0VMRUNUIERJU1RJTkNUIE9OIChhKSBhLCBiLCBjIGZyb20gZGlzdGlu Y3RfYm91bmRhcmllcworV0hFUkUgYiA+PSAxIGFuZCBjID0gMCBPUkRFUiBCWSBhLCBiOworCitE Uk9QIFRBQkxFIGRpc3RpbmN0X2JvdW5kYXJpZXM7CisKKy0tIHRlc3QgdHVwbGUga2lsbGluZwor CistLSBERVNDIG9yZGVyaW5nCitDUkVBVEUgVEFCTEUgZGlzdGluY3Rfa2lsbGVkIEFTCisgICAg U0VMRUNUIGEsIGIsIGIgJSAyIEFTIGMsIDEwIEFTIGQKKyAgICAgICAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgNSkgYSwKKyAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBiOwor CitDUkVBVEUgSU5ERVggT04gZGlzdGluY3Rfa2lsbGVkIChhLCBiLCBjLCBkKTsKKworREVMRVRF IEZST00gZGlzdGluY3Rfa2lsbGVkIHdoZXJlIGEgPSAzOworCitCRUdJTjsKKyAgICBERUNMQVJF IGMgU0NST0xMIENVUlNPUiBGT1IKKyAgICBTRUxFQ1QgRElTVElOQ1QgT04gKGEpIGEsYixjLGQK KyAgICBGUk9NIGRpc3RpbmN0X2tpbGxlZCBPUkRFUiBCWSBhIERFU0MsIGIgREVTQzsKKyAgICBG RVRDSCBGT1JXQVJEIEFMTCBGUk9NIGM7CisgICAgRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsK K0NPTU1JVDsKKworRFJPUCBUQUJMRSBkaXN0aW5jdF9raWxsZWQ7CisKKy0tIHJlZ3VsYXIgb3Jk ZXJpbmcKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9raWxsZWQgQVMKKyAgICBTRUxFQ1QgYSwgYiwg YiAlIDIgQVMgYywgMTAgQVMgZAorICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1KSBh LAorICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGI7CisKK0NSRUFURSBJTkRF WCBPTiBkaXN0aW5jdF9raWxsZWQgKGEsIGIsIGMsIGQpOworCitERUxFVEUgRlJPTSBkaXN0aW5j dF9raWxsZWQgd2hlcmUgYSA9IDM7CisKK0JFR0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VS U09SIEZPUgorICAgIFNFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMsZAorICAgIEZST00gZGlz dGluY3Rfa2lsbGVkIE9SREVSIEJZIGEsIGI7CisgICAgRkVUQ0ggRk9SV0FSRCBBTEwgRlJPTSBj OworICAgIEZFVENIIEJBQ0tXQVJEIEFMTCBGUk9NIGM7CitDT01NSVQ7CisKK0RST1AgVEFCTEUg ZGlzdGluY3Rfa2lsbGVkOworCistLSBwYXJ0aWFsIGRlbGV0ZQorQ1JFQVRFIFRBQkxFIGRpc3Rp bmN0X2tpbGxlZCBBUworICAgIFNFTEVDVCBhLCBiLCBiICUgMiBBUyBjLCAxMCBBUyBkCisgICAg ICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUpIGEsCisgICAgICAgICAgICAgZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgYjsKKworQ1JFQVRFIElOREVYIE9OIGRpc3RpbmN0X2tpbGxlZCAoYSwg YiwgYywgZCk7CisKK0RFTEVURSBGUk9NIGRpc3RpbmN0X2tpbGxlZCBXSEVSRSBhID0gMyBBTkQg YiA8PSA5OTk7CisKK0JFR0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgorICAg IFNFTEVDVCBESVNUSU5DVCBPTiAoYSkgYSxiLGMsZAorICAgIEZST00gZGlzdGluY3Rfa2lsbGVk IE9SREVSIEJZIGEgREVTQywgYiBERVNDOworICAgIEZFVENIIEZPUldBUkQgQUxMIEZST00gYzsK KyAgICBGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworQ09NTUlUOworCitEUk9QIFRBQkxFIGRp c3RpbmN0X2tpbGxlZDsKLS0gCjIuMjUuMAoK --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0006-Index-skip-scan-documentation.patch" Content-Description: 0006-Index-skip-scan-documentation.patch Content-Disposition: attachment; filename="0006-Index-skip-scan-documentation.patch"; size=4731; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSAwYmVhNDBjYzdhYjU3ZmU1NTY4ZTg5MWE5ZTVlM2QyZDQ4MDU0MDY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEbWl0cmlpIERvbGdvdiA8OWVydGhhbGlvbjZAZ21haWwuY29t PgpEYXRlOiBNb24sIDggSnVuIDIwMjAgMjA6NDU6MjEgKzAyMDAKU3ViamVjdDogW1BBVENIIDYv N10gSW5kZXggc2tpcCBzY2FuIGRvY3VtZW50YXRpb24KCkNvdmVycyBhZGRlZCBHVUMgYW5kIHRo ZSBleHRlbmlvbiBvZiBpbmRleCBhbSBpbnRlcmZhY2UuCgpBdXRob3I6IEplc3BlciBQZWRlcnNl biwgRG1pdHJ5IERvbGdvdgpSZXZpZXdlZC1ieTogVGhvbWFzIE11bnJvLCBEYXZpZCBSb3dsZXks IEZsb3JpcyBWYW4gTmVlLCBLeW90YXJvIEhvcmlndWNoaSwgVG9tYXMgVm9uZHJhLCBQZXRlciBH ZW9naGVnYW4KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgIHwgMTUgKysrKysrKysrKwog ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZG9jL3NyYy9zZ21sL2luZGljZXMuc2dtbCB8IDIzICsrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBi MzUzYzYxNjgzLi5hYTg5ZTk2ZmMwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00NjIwLDYgKzQ2MjAsMjEgQEAg QU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlz dGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhza2lwc2Nh biIgeHJlZmxhYmVsPSJlbmFibGVfaW5kZXhza2lwc2NhbiI+CisgICAgICA8dGVybT48dmFybmFt ZT5lbmFibGVfaW5kZXhza2lwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhz a2lwc2NhbjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg ICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVz ZSBvZiBpbmRleC1za2lwLXNjYW4gcGxhbgorICAgICAgICB0eXBlcyAoc2VlIDx4cmVmIGxpbmtl bmQ9ImluZGV4ZXMtaW5kZXgtc2tpcC1zY2FucyIvPikuIFRoZSBkZWZhdWx0IGlzCisgICAgICAg IDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5h YmxlLW1hdGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVybT48 dmFybmFtZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikK ICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s IGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCA4YzU1MmMyMmJkLi5iM2NhOTEyMTFm IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9pbmRleGFtLnNnbWwKQEAgLTY5NCw2ICs2OTQsNjggQEAgYW1yZXN0cnBvcyAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KK2Jvb2wKK2Ftc2tpcCAo SW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAg ICAgICAgU2NhbkRpcmVjdGlvbiBpbmRleGRpciwKKyAgICAgICAgYm9vbCBzY2Fuc3RhcnQsCisg ICAgICAgIGludCBwcmVmaXgpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgU2tpcCBwYXN0IGFsbCB0 dXBsZXMgd2hlcmUgdGhlIGZpcnN0ICdwcmVmaXgnIGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSB2YWx1 ZSBhcworICB0aGUgbGFzdCB0dXBsZSByZXR1cm5lZCBpbiB0aGUgY3VycmVudCBzY2FuLiBUaGUg YXJndW1lbnRzIGFyZToKKworICAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5Pgor ICAgICA8dGVybT48cGFyYW1ldGVyPnNjYW48L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0 aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIEluZGV4IHNjYW4gaW5mb3JtYXRpb24KKyAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxwYXJhbWV0ZXI+ZGlyZWN0aW9uPC9wYXJhbWV0ZXI+ PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgZGlyZWN0 aW9uIGluIHdoaWNoIGRhdGEgaXMgYWR2YW5jaW5nLgorICAgICAgPC9wYXJhPgorICAgICA8L2xp c3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAg PHRlcm0+PHBhcmFtZXRlcj5pbmRleGRpcjwvcGFyYW1ldGVyPjwvdGVybT4KKyAgICAgPGxpc3Rp dGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBpbmRleCBkaXJlY3Rpb24sIGluIHdoaWNo IGRhdGEgbXVzdCBiZSByZWFkLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHBhcmFt ZXRlcj5zY2Fuc3RhcnQ8L3BhcmFtZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAg IDxwYXJhPgorICAgICAgICBXaGV0aGVyIG9yIG5vdCBpdCBpcyBhIHN0YXJ0IG9mIHRoZSBzY2Fu LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHBhcmFtZXRlcj5wcmVmaXg8L3BhcmFt ZXRlcj48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICBEaXN0 aW5jdCBwcmVmaXggc2l6ZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPC9wYXJhPgorCisgIDxw YXJhPgorPHByb2dyYW1saXN0aW5nPgogU2l6ZQogYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiAodm9p ZCk7CiA8L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGljZXMu c2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRpY2VzLnNnbWwKaW5kZXggMjhhZGFiYTcyZC4uMWNmODU1 MGUwYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGljZXMuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvaW5kaWNlcy5zZ21sCkBAIC0xMjgxLDYgKzEyODEsMjkgQEAgU0VMRUNUIHRhcmdldCBG Uk9NIHRlc3RzIFdIRVJFIHN1YmplY3QgPSAnc29tZS1zdWJqZWN0JyBBTkQgc3VjY2VzczsKICAg IGFuZCBsYXRlciB3aWxsIHJlY29nbml6ZSBzdWNoIGNhc2VzIGFuZCBhbGxvdyBpbmRleC1vbmx5 IHNjYW5zIHRvIGJlCiAgICBnZW5lcmF0ZWQsIGJ1dCBvbGRlciB2ZXJzaW9ucyB3aWxsIG5vdC4K ICAgPC9wYXJhPgorCisgIDxzZWN0MiBpZD0iaW5kZXhlcy1pbmRleC1za2lwLXNjYW5zIj4KKyAg ICA8dGl0bGU+SW5kZXggU2tpcCBTY2FuczwvdGl0bGU+CisKKyAgICA8aW5kZXh0ZXJtIHpvbmU9 ImluZGV4ZXMtaW5kZXgtc2tpcC1zY2FucyI+CisgICAgICA8cHJpbWFyeT5pbmRleDwvcHJpbWFy eT4KKyAgICAgIDxzZWNvbmRhcnk+aW5kZXgtc2tpcCBzY2Fuczwvc2Vjb25kYXJ5PgorICAgIDwv aW5kZXh0ZXJtPgorICAgIDxpbmRleHRlcm0gem9uZT0iaW5kZXhlcy1pbmRleC1za2lwLXNjYW5z Ij4KKyAgICAgIDxwcmltYXJ5PmluZGV4LXNraXAgc2NhbjwvcHJpbWFyeT4KKyAgICA8L2luZGV4 dGVybT4KKworICAgIDxwYXJhPgorICAgICBXaGVuIHRoZSByb3dzIHJldHJpZXZlZCBmcm9tIGFu IGluZGV4IHNjYW4gYXJlIHRoZW4gZGVkdXBsaWNhdGVkIGJ5CisgICAgIGVsaW1pbmF0aW5nIHJv d3MgbWF0Y2hpbmcgb24gYSBwcmVmaXggb2YgaW5kZXgga2V5cyAoZS5nLiB3aGVuIHVzaW5nCisg ICAgIDxsaXRlcmFsPlNFTEVDVCBESVNUSU5DVDwvbGl0ZXJhbD4pLCB0aGUgcGxhbm5lciB3aWxs IGNvbnNpZGVyCisgICAgIHNraXBwaW5nIGdyb3VwcyBvZiByb3dzIHdpdGggYSBtYXRjaGluZyBr ZXkgcHJlZml4LiBXaGVuIGEgcm93IHdpdGgKKyAgICAgYSBwYXJ0aWN1bGFyIHByZWZpeCBpcyBm b3VuZCwgcmVtYWluaW5nIHJvd3Mgd2l0aCB0aGUgc2FtZSBrZXkgcHJlZml4CisgICAgIGFyZSBz a2lwcGVkLiAgVGhlIGxhcmdlciB0aGUgbnVtYmVyIG9mIHJvd3Mgd2l0aCB0aGUgc2FtZSBrZXkg cHJlZml4CisgICAgIHJvd3MgKGkuZS4gdGhlIGxvd2VyIHRoZSBudW1iZXIgb2YgZGlzdGluY3Qg a2V5IHByZWZpeGVzIGluIHRoZSBpbmRleCksCisgICAgIHRoZSBtb3JlIGVmZmljaWVudCB0aGlz IGlzLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KICA8L3NlY3QxPgogCiAKLS0gCjIuMjUuMAoK --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_ Content-Type: application/octet-stream; name="0007-planner-fixes.patch" Content-Description: 0007-planner-fixes.patch Content-Disposition: attachment; filename="0007-planner-fixes.patch"; size=11433; creation-date="Sun, 12 Jul 2020 12:46:32 GMT"; modification-date="Sun, 12 Jul 2020 12:46:32 GMT" Content-Transfer-Encoding: base64 RnJvbSAwYmQxNzQ5Y2ZmYzM4OWZiMzgxMTE5MDNmMzhmMThlODQyMThlNWQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaXMgdmFuIE5lZSA8ZmxvcmlzdmFubmVlQG9wdGl2ZXIu Y29tPgpEYXRlOiBTdW4sIDEyIEp1bCAyMDIwIDEzOjM2OjI1ICswMjAwClN1YmplY3Q6IFtQQVRD SCA3LzddIHBsYW5uZXIgZml4ZXMKCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYyAgIHwgNDQgKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9wYXRoa2V5cy5jICAgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMgfCAxNyArKystLS0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8IDE0ICsrKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAzNiArKy0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aG5vZGUuaCAgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmggICAgICAgICAgIHwgIDQgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0ICB8ICAyICstCiA4IGZpbGVzIGNoYW5nZWQsIDEyOSBpbnNlcnRpb25zKCspLCA2MiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4 cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCAzNDBi YmZjYmIzLi45ZWZmNzFlNWQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMK QEAgLTExMTksMTUgKzExMTksMjcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJLyogQ29uc2lkZXIgaW5kZXggc2tpcCBzY2FuIGFzIHdl bGwgKi8KIAkJaWYgKHJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgIT0gTlVMTCAmJiBjYW5fc2tpcCAm JiAhbm90X2VtcHR5X3F1YWwpCiAJCXsKLQkJCUxpc3RDZWxsICAgKmxjOworCQkJaW50IG51bXVz ZWZ1bGtleXMgPSBsaXN0X2xlbmd0aCh1c2VmdWxfcGF0aGtleXMpOworCQkJaW50IG51bXNvcnRr ZXlzID0gbGlzdF9sZW5ndGgocm9vdC0+cXVlcnlfcGF0aGtleXMpOwogCi0JCQlmb3JlYWNoKGxj LCByb290LT5xdWVyeV91bmlxdWVrZXlzKQorCQkJaWYgKG51bXVzZWZ1bGtleXMgPT0gbnVtc29y dGtleXMpCiAJCQl7Ci0JCQkJVW5pcXVlS2V5ICp1a2V5ID0gbGZpcnN0X25vZGUoVW5pcXVlS2V5 LCBsYyk7CisJCQkJaW50IHByZWZpeDsKKwkJCQlpZiAobGlzdF9sZW5ndGgocm9vdC0+ZGlzdGlu Y3RfcGF0aGtleXMpID4gMCkKKwkJCQkJcHJlZml4ID0gZmluZF9pbmRleF9wcmVmaXhfZm9yX3Bh dGhrZXkocm9vdCwKKwkJCQkJCQkJCQkJCQkJICAgaW5kZXgsCisJCQkJCQkJCQkJCQkJCSAgIEZv cndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgICBsbGFzdF9ub2RlKFBhdGhLZXks CisJCQkJCQkJCQkJCQkJCSAgIHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzKSk7CisJCQkJZWxzZQor CQkJCQkvKiBhbGwgYXJlIGRpc3RpbmN0IGtleXMgYXJlIGNvbnN0YW50IGFuZCBvcHRpbWl6ZWQg YXdheS4KKwkJCQkJICogc2tpcHBpbmcgd2l0aCAxIGlzIHN1ZmZpY2llbnQgYXMgYWxsIGFyZSBj b25zdGFudCBhbnl3YXkKKwkJCQkJICovCisJCQkJCXByZWZpeCA9IDE7CisKIAkJCQlyZXN1bHQg PSBsYXBwZW5kKHJlc3VsdCwKIAkJCQkJCQkJIGNyZWF0ZV9za2lwc2Nhbl91bmlxdWVfcGF0aChy b290LCBpbmRleCwKLQkJCQkJCQkJCQkJCQkJCSAoUGF0aCAqKSBpcGF0aCwKLQkJCQkJCQkJCQkJ CQkJCSB1a2V5LT5leHBycykpOworCQkJCQkJCQkJCQkJCQkJIChQYXRoICopIGlwYXRoLCBwcmVm aXgpKTsKIAkJCX0KIAkJfQogCkBAIC0xMTg5LDE1ICsxMjAxLDI3IEBAIGJ1aWxkX2luZGV4X3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkvKiBDb25zaWRlciBp bmRleCBza2lwIHNjYW4gYXMgd2VsbCAqLwogCQkJaWYgKHJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMg IT0gTlVMTCAmJiBjYW5fc2tpcCAmJiAhbm90X2VtcHR5X3F1YWwpCiAJCQl7Ci0JCQkJTGlzdENl bGwgICAqbGM7CisJCQkJaW50IG51bXVzZWZ1bGtleXMgPSBsaXN0X2xlbmd0aCh1c2VmdWxfcGF0 aGtleXMpOworCQkJCWludCBudW1zb3J0a2V5cyA9IGxpc3RfbGVuZ3RoKHJvb3QtPnF1ZXJ5X3Bh dGhrZXlzKTsKIAotCQkJCWZvcmVhY2gobGMsIHJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMpCisJCQkJ aWYgKG51bXVzZWZ1bGtleXMgPT0gbnVtc29ydGtleXMpCiAJCQkJewotCQkJCQlVbmlxdWVLZXkg KnVrZXkgPSBsZmlyc3Rfbm9kZShVbmlxdWVLZXksIGxjKTsKKwkJCQkJaW50IHByZWZpeDsKKwkJ CQkJaWYgKGxpc3RfbGVuZ3RoKHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzKSA+IDApCisJCQkJCQlw cmVmaXggPSBmaW5kX2luZGV4X3ByZWZpeF9mb3JfcGF0aGtleShyb290LAorCQkJCQkJCQkJCQkJ CQkJICAgaW5kZXgsCisJCQkJCQkJCQkJCQkJCQkgICBCYWNrd2FyZFNjYW5EaXJlY3Rpb24sCisJ CQkJCQkJCQkJCQkJCQkgICBsbGFzdF9ub2RlKFBhdGhLZXksCisJCQkJCQkJCQkJCQkJCQkgICBy b290LT5kaXN0aW5jdF9wYXRoa2V5cykpOworCQkJCQllbHNlCisJCQkJCQkvKiBhbGwgYXJlIGRp c3RpbmN0IGtleXMgYXJlIGNvbnN0YW50IGFuZCBvcHRpbWl6ZWQgYXdheS4KKwkJCQkJCSAqIHNr aXBwaW5nIHdpdGggMSBpcyBzdWZmaWNpZW50IGFzIGFsbCBhcmUgY29uc3RhbnQgYW55d2F5CisJ CQkJCQkgKi8KKwkJCQkJCXByZWZpeCA9IDE7CisKIAkJCQkJcmVzdWx0ID0gbGFwcGVuZChyZXN1 bHQsCiAJCQkJCQkJCQkgY3JlYXRlX3NraXBzY2FuX3VuaXF1ZV9wYXRoKHJvb3QsIGluZGV4LAot CQkJCQkJCQkJCQkJCQkJCSAoUGF0aCAqKSBpcGF0aCwKLQkJCQkJCQkJCQkJCQkJCQkgdWtleS0+ ZXhwcnMpKTsKKwkJCQkJCQkJCQkJCQkJCQkgKFBhdGggKikgaXBhdGgsIHByZWZpeCkpOwogCQkJ CX0KIAkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtl eXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKaW5kZXggYTRmYzRm MjUyZC4uM2ZhNTMzYmU5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv cGF0aGtleXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCkBA IC01MjIsNiArNTIyLDc4IEBAIGdldF9jaGVhcGVzdF9wYXJhbGxlbF9zYWZlX3RvdGFsX2lubmVy KExpc3QgKnBhdGhzKQogICoJCU5FVyBQQVRIS0VZIEZPUk1BVElPTgogICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiAKKy8qCisgKiBGaW5kIHRoZSBwcmVmaXggc2l6ZSBmb3IgYSBzcGVjaWZpYyBwYXRo IGtleSBpbiBhbiBpbmRleC4KKyAqIEZvciBleGFtcGxlLCBhbiBpbmRleCB3aXRoIChhLGIsYykg ZmluZGluZyBwYXRoIGtleSBiIHdpbGwKKyAqIHJldHVybiBwcmVmaXggMi4KKyAqIFJldHVybnMg MCB3aGVuIG5vdCBmb3VuZC4KKyAqLworaW50CitmaW5kX2luZGV4X3ByZWZpeF9mb3JfcGF0aGtl eShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJIEluZGV4T3B0SW5mbyAqaW5kZXgsCisJCQkJCSBT Y2FuRGlyZWN0aW9uIHNjYW5kaXIsCisJCQkJCSBQYXRoS2V5ICpwYXRoa2V5KQoreworCUxpc3RD ZWxsICAgKmxjOworCWludAkJCWk7CisKKwlpID0gMDsKKwlmb3JlYWNoKGxjLCBpbmRleC0+aW5k ZXh0bGlzdCkKKwl7CisJCVRhcmdldEVudHJ5ICppbmRleHRsZSA9IChUYXJnZXRFbnRyeSAqKSBs Zmlyc3QobGMpOworCQlFeHByCSAgICppbmRleGtleTsKKwkJYm9vbAkJcmV2ZXJzZV9zb3J0Owor CQlib29sCQludWxsc19maXJzdDsKKwkJUGF0aEtleSAgICAqY3BhdGhrZXk7CisKKwkJLyoKKwkJ ICogSU5DTFVERSBjb2x1bW5zIGFyZSBzdG9yZWQgaW4gaW5kZXggdW5vcmRlcmVkLCBzbyB0aGV5 IGRvbid0CisJCSAqIHN1cHBvcnQgb3JkZXJlZCBpbmRleCBzY2FuLgorCQkgKi8KKwkJaWYgKGkg Pj0gaW5kZXgtPm5rZXljb2x1bW5zKQorCQkJYnJlYWs7CisKKwkJLyogV2UgYXNzdW1lIHdlIGRv bid0IG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIHRsaXN0IGl0ZW0gKi8KKwkJaW5kZXhrZXkg PSBpbmRleHRsZS0+ZXhwcjsKKworCQlpZiAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoc2NhbmRp cikpCisJCXsKKwkJCXJldmVyc2Vfc29ydCA9ICFpbmRleC0+cmV2ZXJzZV9zb3J0W2ldOworCQkJ bnVsbHNfZmlyc3QgPSAhaW5kZXgtPm51bGxzX2ZpcnN0W2ldOworCQl9CisJCWVsc2UKKwkJewor CQkJcmV2ZXJzZV9zb3J0ID0gaW5kZXgtPnJldmVyc2Vfc29ydFtpXTsKKwkJCW51bGxzX2ZpcnN0 ID0gaW5kZXgtPm51bGxzX2ZpcnN0W2ldOworCQl9CisKKwkJLyoKKwkJICogT0ssIHRyeSB0byBt YWtlIGEgY2Fub25pY2FsIHBhdGhrZXkgZm9yIHRoaXMgc29ydCBrZXkuICBOb3RlIHdlJ3JlCisJ CSAqIHVuZGVybmVhdGggYW55IG91dGVyIGpvaW5zLCBzbyBudWxsYWJsZV9yZWxpZHMgc2hvdWxk IGJlIE5VTEwuCisJCSAqLworCQljcGF0aGtleSA9IG1ha2VfcGF0aGtleV9mcm9tX3NvcnRpbmZv KHJvb3QsCisJCQkJCQkJCQkJCSAgaW5kZXhrZXksCisJCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJ CQkJCQkJICBpbmRleC0+c29ydG9wZmFtaWx5W2ldLAorCQkJCQkJCQkJCQkgIGluZGV4LT5vcGNp bnR5cGVbaV0sCisJCQkJCQkJCQkJCSAgaW5kZXgtPmluZGV4Y29sbGF0aW9uc1tpXSwKKwkJCQkJ CQkJCQkJICByZXZlcnNlX3NvcnQsCisJCQkJCQkJCQkJCSAgbnVsbHNfZmlyc3QsCisJCQkJCQkJ CQkJCSAgMCwKKwkJCQkJCQkJCQkJICBpbmRleC0+cmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCSAg ZmFsc2UpOworCisJCWlmIChjcGF0aGtleSA9PSBwYXRoa2V5KQorCQl7CisJCQlyZXR1cm4gaSAr IDE7CisJCX0KKworCQlpKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBidWlsZF9p bmRleF9wYXRoa2V5cwogICoJICBCdWlsZCBhIHBhdGhrZXlzIGxpc3QgdGhhdCBkZXNjcmliZXMg dGhlIG9yZGVyaW5nIGluZHVjZWQgYnkgYW4gaW5kZXgKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3VuaXF1ZWtleXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L3VuaXF1ZWtleXMuYwppbmRleCA3ZDljMGFlZmJmLi5jMDJhM2MwZWQ4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvdW5pcXVla2V5cy5jCkBAIC0xMTM2LDYgKzExMzYsNyBAQCBidWlsZF91 bmlxdWVrZXlzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpzb3J0Y2xhdXNlcykKIAlMaXN0ICpy ZXN1bHQgPSBOSUw7CiAJTGlzdCAqc29ydGtleXM7CiAJTGlzdENlbGwgKmw7CisJTGlzdCAqZXhw cnMgPSBOSUw7CiAKIAlzb3J0a2V5cyA9IG1ha2VfcGF0aGtleXNfZm9yX3VuaXF1ZWtleXMocm9v dCwKIAkJCQkJCQkJCQkJc29ydGNsYXVzZXMsCkBAIC0xMTQ2LDE4ICsxMTQ3LDE0IEBAIGJ1aWxk X3VuaXF1ZWtleXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnNvcnRjbGF1c2VzKQogCXsKIAkJ UGF0aEtleSAgICAqcGF0aGtleSA9IChQYXRoS2V5ICopIGxmaXJzdChsKTsKIAkJRXF1aXZhbGVu Y2VDbGFzcyAqZWMgPSBwYXRoa2V5LT5wa19lY2xhc3M7Ci0JCUxpc3RDZWxsICAgKms7Ci0JCUxp c3QgKmV4cHJzID0gTklMOwotCi0JCWZvcmVhY2goaywgZWMtPmVjX21lbWJlcnMpCi0JCXsKLQkJ CUVxdWl2YWxlbmNlTWVtYmVyICptZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIgKikgbGZpcnN0KGsp OwotCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBtZW0tPmVtX2V4cHIpOwotCQl9Ci0KLQkJcmVz dWx0ID0gbGFwcGVuZChyZXN1bHQsIG1ha2VVbmlxdWVLZXkoZXhwcnMsIGZhbHNlLCBmYWxzZSkp OworCQlFcXVpdmFsZW5jZU1lbWJlciAqbWVtID0gKEVxdWl2YWxlbmNlTWVtYmVyKikgbGZpcnN0 KGxpc3RfaGVhZChlYy0+ZWNfbWVtYmVycykpOworCQlpZiAoRUNfTVVTVF9CRV9SRURVTkRBTlQo ZWMpKQorCQkJY29udGludWU7CisJCWV4cHJzID0gbGFwcGVuZChleHBycywgbWVtLT5lbV9leHBy KTsKIAl9CiAKKwkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIG1ha2VVbmlxdWVLZXkoZXhwcnMs IGZhbHNlKSk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKaW5kZXggYTVmM2MyOGZiNS4uODBmYmFhZGQyMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYwpAQCAtMzYyNywxMiArMzYyNywxOCBAQCBzdGFuZGFyZF9xcF9jYWxs YmFjayhQbGFubmVySW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpCiAKIAlpZiAocGFyc2UtPmRpc3Rp bmN0Q2xhdXNlICYmCiAJCWdyb3VwaW5nX2lzX3NvcnRhYmxlKHBhcnNlLT5kaXN0aW5jdENsYXVz ZSkpCisJewogCQlyb290LT5kaXN0aW5jdF9wYXRoa2V5cyA9CiAJCQltYWtlX3BhdGhrZXlzX2Zv cl9zb3J0Y2xhdXNlcyhyb290LAogCQkJCQkJCQkJCSAgcGFyc2UtPmRpc3RpbmN0Q2xhdXNlLAog CQkJCQkJCQkJCSAgdGxpc3QpOworCQlyb290LT5xdWVyeV91bmlxdWVrZXlzID0gYnVpbGRfdW5p cXVla2V5cyhyb290LCBwYXJzZS0+ZGlzdGluY3RDbGF1c2UpOworCX0KIAllbHNlCisJewogCQly b290LT5kaXN0aW5jdF9wYXRoa2V5cyA9IE5JTDsKKwkJcm9vdC0+cXVlcnlfdW5pcXVla2V5cyA9 IE5JTDsKKwl9CiAKIAlyb290LT5zb3J0X3BhdGhrZXlzID0KIAkJbWFrZV9wYXRoa2V5c19mb3Jf c29ydGNsYXVzZXMocm9vdCwKQEAgLTM2NjMsMTcgKzM2NjksOSBAQCBzdGFuZGFyZF9xcF9jYWxs YmFjayhQbGFubmVySW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpCiAJCXJvb3QtPnF1ZXJ5X3BhdGhr ZXlzID0gcm9vdC0+d2luZG93X3BhdGhrZXlzOwogCWVsc2UgaWYgKGxpc3RfbGVuZ3RoKHJvb3Qt PmRpc3RpbmN0X3BhdGhrZXlzKSA+CiAJCQkgbGlzdF9sZW5ndGgocm9vdC0+c29ydF9wYXRoa2V5 cykpCi0JewogCQlyb290LT5xdWVyeV9wYXRoa2V5cyA9IHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlz OwotCQlyb290LT5xdWVyeV91bmlxdWVrZXlzID0gYnVpbGRfdW5pcXVla2V5cyhyb290LCBwYXJz ZS0+ZGlzdGluY3RDbGF1c2UpOwotCX0KIAllbHNlIGlmIChyb290LT5zb3J0X3BhdGhrZXlzKQot CXsKIAkJcm9vdC0+cXVlcnlfcGF0aGtleXMgPSByb290LT5zb3J0X3BhdGhrZXlzOwotCi0JCWlm IChyb290LT5kaXN0aW5jdF9wYXRoa2V5cykKLQkJCXJvb3QtPnF1ZXJ5X3VuaXF1ZWtleXMgPSBi dWlsZF91bmlxdWVrZXlzKHJvb3QsIHBhcnNlLT5kaXN0aW5jdENsYXVzZSk7Ci0JfQogCWVsc2UK IAkJcm9vdC0+cXVlcnlfcGF0aGtleXMgPSBOSUw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYwppbmRleCBjYWMyY2EwYjBmLi4zNDBlODM4NGU2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMKQEAgLTI5ODEsNDkgKzI5ODEsMjEgQEAgY3JlYXRlX3VwcGVy X3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogICovCiBJbmRleFBhdGggKgogY3JlYXRl X3NraXBzY2FuX3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBJbmRleE9wdEluZm8gKmlu ZGV4LAotCQkJCQkJCVBhdGggKmJhc2VwYXRoLCBMaXN0ICp1bmlxdWVfZXhwcnMpCisJCQkJCQkJ UGF0aCAqYmFzZXBhdGgsIGludCBwcmVmaXgpCiB7CiAJSW5kZXhQYXRoIAkqcGF0aG5vZGUgPSBt YWtlTm9kZShJbmRleFBhdGgpOwogCWludCAJCW51bURpc3RpbmN0Um93czsKLQlpbnQgCQlkaXN0 aW5jdFByZWZpeEtleXM7CiAJTGlzdENlbGwgCSpsYzsKIAlMaXN0IAkgICAJKmV4cHJzID0gTklM OwogCi0KLQlkaXN0aW5jdFByZWZpeEtleXMgPSBsaXN0X2xlbmd0aCh1bmlxdWVfZXhwcnMpOwot CiAJQXNzZXJ0KElzQShiYXNlcGF0aCwgSW5kZXhQYXRoKSk7CiAKIAkvKiBXZSBkb24ndCB3YW50 IHRvIG1vZGlmeSBiYXNlcGF0aCwgc28gbWFrZSBhIGNvcHkuICovCiAJbWVtY3B5KHBhdGhub2Rl LCBiYXNlcGF0aCwgc2l6ZW9mKEluZGV4UGF0aCkpOwogCi0JLyoKLQkgKiBOb3JtYWxseSB3ZSBj YW4gdGhpbmsgYWJvdXQgZGlzdGluY3RQcmVmaXhLZXlzIGFzIGp1c3QKLQkgKiBhIG51bWJlciBv ZiBkaXN0aW5jdCBrZXlzLiBCdXQgaWYgbGV0cyBzYXkgd2UgaGF2ZSBhCi0JICogZGlzdGluY3Qg a2V5IGEsIGFuZCB0aGUgaW5kZXggY29udGFpbnMgYiwgYSBpbiBleGFjdGx5Ci0JICogdGhpcyBv cmRlci4gSW4gc3VjaCBzaXR1YXRpb24gd2UgbmVlZCB0byB1c2UgcG9zaXRpb24KLQkgKiBvZiBh IGluIHRoZSBpbmRleCBhcyBkaXN0aW5jdFByZWZpeEtleXMsIG90aGVyd2lzZSBza2lwCi0JICog d2lsbCBoYXBwZW4gb25seSBieSB0aGUgZmlyc3QgY29sdW1uLgotCSAqLwotCWZvcmVhY2gobGMs IHVuaXF1ZV9leHBycykKLQl7Ci0JCUV4cHIgKnVuaXF1ZV9leHByID0gKEV4cHIgKikgbGZpcnN0 KGxjKTsKLQkJVmFyICp2YXIgPSAoVmFyICopIHVuaXF1ZV9leHByOwotCi0JCWV4cHJzID0gbGFw cGVuZChleHBycywgdW5pcXVlX2V4cHIpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgt Pm5jb2x1bW5zOyBpKyspCi0JCXsKLQkJCWlmIChpbmRleC0+aW5kZXhrZXlzW2ldID09IHZhci0+ dmFyYXR0bm8pCi0JCQl7Ci0JCQkJZGlzdGluY3RQcmVmaXhLZXlzID0gTWF4KGkgKyAxLCBkaXN0 aW5jdFByZWZpeEtleXMpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JQXNzZXJ0KGRp c3RpbmN0UHJlZml4S2V5cyA+IDApOwotCXBhdGhub2RlLT5pbmRleHNraXBwcmVmaXggPSBkaXN0 aW5jdFByZWZpeEtleXM7CisJQXNzZXJ0KHByZWZpeCA+IDApOworCXBhdGhub2RlLT5pbmRleHNr aXBwcmVmaXggPSBwcmVmaXg7CisJcGF0aG5vZGUtPnBhdGgudW5pcXVla2V5cyA9IHJvb3QtPnF1 ZXJ5X3VuaXF1ZWtleXM7CiAKIAludW1EaXN0aW5jdFJvd3MgPSBlc3RpbWF0ZV9udW1fZ3JvdXBz KHJvb3QsIGV4cHJzLAogCQkJCQkJCQkJCSAgcGF0aG5vZGUtPnBhdGgucm93cywKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKaW5kZXggNzA1ZGVhZjdiZC4uOGVjMTc4MGE1NiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKQEAgLTIxMCw3ICsyMTAsNyBAQCBleHRlcm4gVXBwZXJVbmlxdWVQYXRo ICpjcmVhdGVfdXBwZXJfdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiBleHRlcm4gSW5k ZXhQYXRoICpjcmVhdGVfc2tpcHNjYW5fdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQkJCQkJCQkJCSAgSW5kZXhPcHRJbmZvICppbmRleCwKIAkJCQkJCQkJCQkJICBQYXRoICpzdWJw YXRoLAotCQkJCQkJCQkJCQkgIExpc3QgKnVuaXF1ZV9leHBycyk7CisJCQkJCQkJCQkJCSAgaW50 IHByZWZpeCk7CiBleHRlcm4gQWdnUGF0aCAqY3JlYXRlX2FnZ19wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCVBhdGggKnN1YnBhdGgsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9wYXRocy5oCmluZGV4IDBjYjgwMzBlMzMuLmY5MzRmMDAxMWEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9wYXRocy5oCkBAIC0xOTgsNiArMTk4LDEwIEBAIGV4dGVybiBQYXRoICpnZXRfY2hlYXBlc3Rf ZnJhY3Rpb25hbF9wYXRoX2Zvcl9wYXRoa2V5cyhMaXN0ICpwYXRocywKIAkJCQkJCQkJCQkJCQkg ICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCQkJICAgZG91YmxlIGZyYWN0aW9u KTsKIGV4dGVybiBQYXRoICpnZXRfY2hlYXBlc3RfcGFyYWxsZWxfc2FmZV90b3RhbF9pbm5lcihM aXN0ICpwYXRocyk7CitleHRlcm4gaW50IGZpbmRfaW5kZXhfcHJlZml4X2Zvcl9wYXRoa2V5KFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkgSW5kZXhPcHRJbmZvICppbmRleCwKKwkJCQkJIFNjYW5E aXJlY3Rpb24gc2NhbmRpciwKKwkJCQkJIFBhdGhLZXkgKnBhdGhrZXkpOwogZXh0ZXJuIExpc3Qg KmJ1aWxkX2luZGV4X3BhdGhrZXlzKFBsYW5uZXJJbmZvICpyb290LCBJbmRleE9wdEluZm8gKmlu ZGV4LAogCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gc2NhbmRpcik7CiBleHRlcm4gTGlzdCAqYnVp bGRfcGFydGl0aW9uX3BhdGhrZXlzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJ0 cmVsLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCA0ZGE5NTk0OTI1 Li5lNjRlMjBhOGNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAt OTEsNyArOTEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJl IG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwg b24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2Fu ICAgICAgICAgICAgICAgICB8IG9uCi0oMjAgcm93cykKKygxOSByb3dzKQogCiAtLSBUZXN0IHRo YXQgdGhlIHBnX3RpbWV6b25lX25hbWVzIGFuZCBwZ190aW1lem9uZV9hYmJyZXZzIHZpZXdzIGFy ZQogLS0gbW9yZS1vci1sZXNzIHdvcmtpbmcuICBXZSBjYW4ndCB0ZXN0IHRoZWlyIGNvbnRlbnRz IGluIGFueSBncmVhdCBkZXRhaWwKLS0gCjIuMjUuMAoK --_008_ef9954d83a9e42fabfac235bdd87d05aopammb0561compoptiverco_--