Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1adfi4-0006qp-67 for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Mar 2016 15:07:36 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1adfi3-00015Z-Ds for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Mar 2016 15:07:35 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1adfe8-0005FY-H5 for pgsql-hackers@postgresql.org; Wed, 09 Mar 2016 15:03:33 +0000 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1adfdn-0006Vl-0u for pgsql-hackers@postgresql.org; Wed, 09 Mar 2016 15:03:31 +0000 Received: by mail-wm0-x22c.google.com with SMTP id l68so74931933wml.1 for ; Wed, 09 Mar 2016 07:03:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=GYFxGXyiKJq9sufPFmfz8B6/bGFTn98Z8/qB7HDDevI=; b=q9MTreCk1iXzu0V2QAR7U4a6tHb4ICrReOXEJ5yzyxikEe5+gDYgI642DS5c2k23R5 +1Hp0vCZu+lQMpfcsPdI2P+OIxeVshM4f99hiiHvl9Ia9LxLlmkR/fkk1eIfPMevAyIX xqdPJpe5kcHaqUIxeuFvQHAXs/2ZmakcywsIO81FQKoS/G4XDT4L657UDSiPVYb5eajN yIrlo+MR/mMDjPMrOrDfSUxNShfrGMEDN58trUGaXwdx63QB96PKcY2lj0S0m71g7HwH yFReu1UrmVyham4JGThr32ctuZ0v7gELxkHR6OxNMH3nfHEMdXN9wsWURjKj0ND3bqvW LHRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=GYFxGXyiKJq9sufPFmfz8B6/bGFTn98Z8/qB7HDDevI=; b=G0kZrx3mqKZeQTxwhghFXVcPt1JAFeWJZBIBZCU9M9+5PvtGySi1BGJLgMmc4heSyR VxmeuWjagjXld/ZWP8V3T+Si12igQnIda2thVBQB0lnX6TBYjaocXYNKWo8C156F7dED zfiOrBEUPv+bNj9vNPwKMnY2cFy0KKYxrsFHf4NgALwsUssEqqrWbHXYDOEZLSefl4ur dbroiE7g4qfdvuJHaibpt2kR5JGDowTR8ygCM/WlMRisK+Msd1ISKz4EnrvUJhyNugbb lgiA5sF2cvRzVNpHYDgVMDsGSoQJ3tIyKE/VHxtJu9z5u+juJZ+LiqNbCt9Aag7Xpwhc nFOg== X-Gm-Message-State: AD7BkJJwcJtvCziaihN9ZoXY8jSEmOz012k/JTnbYdkZCloiJZvTT3Y/CNt43lCn41eBvQoG X-Received: by 10.28.10.149 with SMTP id 143mr24841563wmk.38.1457535783805; Wed, 09 Mar 2016 07:03:03 -0800 (PST) Received: from development (ip-78-45-216-26.net.upcbroadband.cz. [78.45.216.26]) by smtp.gmail.com with ESMTPSA id up6sm8347711wjc.6.2016.03.09.07.03.00 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 09 Mar 2016 07:03:02 -0800 (PST) Message-ID: <1457535779.24545.71.camel@2ndquadrant.com> Subject: Re: multivariate statistics v14 From: Tomas Vondra To: Alvaro Herrera Cc: Jeff Janes , pgsql-hackers Date: Wed, 09 Mar 2016 16:02:59 +0100 In-Reply-To: <20160309122245.GA958049@alvherre.pgsql> References: <20160309122245.GA958049@alvherre.pgsql> Content-Type: multipart/mixed; boundary="=-6mteQXAxP083m83xNU1s" X-Mailer: Evolution 3.12.11 (3.12.11-1.fc21) Mime-Version: 1.0 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=-6mteQXAxP083m83xNU1s Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hi, thanks for the feedback. Attached is v14 of the patch series, fixing most of the points you've raised. On Wed, 2016-03-09 at 09:22 -0300, Alvaro Herrera wrote: > Hi, > > I gave a very quick skim to patch 0002. Not a real review yet. But > there are a few trivial points to fix: > > * You still have empty sections in the SGML docs (such as the EXAMPLES). > I suppose the syntax is now firm enough that we can get some. (I looked > at the other patches to see whether it was filled in, but couldn't find > any additional text there.) Yes, that's one of the items I plan to work on next. Until now the regression tests were a sufficient source of examples, but it's time to do the SGML piece. > > * check_object_ownership() needs to be filled in Done. I've added pg_statistics_ownercheck, which also required adding OID of the owner to the catalog. Initially the plan was to use the same owner as for the table, but now that we've switched to CREATE STATISTICS partially because it will allow multi-table stats, that does not make sense (multiple tables with different owners). This probably means we also need an 'ALTER STATISTICS ... OWNER TO' command, which does not exist at this point. > > * Since you're adding a new object type, please add a case to cover it > in the object_address.sql pg_regress test. Done. Apparently there was a bunch of missing pieces in objectaddress.c, so this adds them too. > > * in analyze.c (and elsewhere), please put new #include lines sorted. Done. I've also significantly reduced the excessive list of includes in statscmds.c. I expect the headers to require a bit more love, especially in the subsequent patches (MCV, histograms etc.). > > * I think the AT_PASS_ADD_STATS is a leftover which should be removed. Yeah. Now that we've invented CREATE TABLE, all the changes to tablecmds.c were just unnecessary leftovers. Removed. > > * The XXX comment in get_relation_info should probably be handled > differently (namely, in a way that makes the syscache not contain OIDs > of dropped stats) I believe that was actually an obsolete comment. Removed. > > * The README.dependencies has a lot of TODOs. Do we need to get them > done during the first cut? If not, I suggest creating a new section > "Future work" in the file. Right. Most of those TODOs are future work, or rather ideas (more or less crazy). The one thing I definitely want to address now is support for dependencies with multiple columns on the left side, because that requires changes to serialized format. I might also look at handling IS NULL clauses, but that may wait. > > * Please put the common.h header in src/include. Make sure not to > include "postgres.h" in it -- our policy is that postgres.h goes at the > top of every .c file and never in any .h file. Also please find a > better name for it; even mvstats_common.h would be a lot more > convincing. However: > > * ISTM that the code in common.c properly belongs in > src/backend/catalog/pg_mvstats.c instead (or more properly > catalog/pg_mv_statistics.c), which probably means the common.h file > should be named something else; perhaps some of it could become > pg_mv_statistic_fn.h, while the rest continues to be > src/include/utils/mvstats_common.h? Not sure. Hmmm, not sure either. The idea was that the "common.h" is pretty much just a private header with stuff that's not very useful anywhere else. No changes here, for now. > > * The version check in psql/describe.c uses 90500; should probably be > updated to 90600. Fixed. > > * _copyCreateStatsStmt is missing if_not_exists Fixed. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename*0=0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.patch"; charset="UTF-8" RnJvbSA1YzI4ZTVjYThmZWIyYzIwMTBkOThiYzY5ZGU5NTIzNTViZDZmM2E1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAx OTo1NjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS85XSB0ZWFjaCBwdWxs Xyh2YXJub3x2YXJhdHRubylfd2Fsa2VyIGFib3V0IFJlc3RyaWN0SW5mbwoK b3RoZXJ3aXNlIHB1bGxfdmFybm9zIGZhaWxzIHdoZW4gcHJvY2Vzc2luZyBP UiBjbGF1c2VzCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFy LmMgfCAxNiArKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTYg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3Zhci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv dmFyLmMKaW5kZXggZGZmNTJjNC4uODBkMDFiZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKQEAgLTE5Nyw2ICsxOTcsMTMgQEAg cHVsbF92YXJub3Nfd2Fsa2VyKE5vZGUgKm5vZGUsIHB1bGxfdmFybm9zX2Nv bnRleHQgKmNvbnRleHQpCiAJCWNvbnRleHQtPnN1YmxldmVsc191cC0tOwog CQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0 SW5mbykpCisJeworCQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0 SW5mbyopbm9kZTsKKwkJY29udGV4dC0+dmFybm9zID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPnZhcm5vcywKKwkJCQkJCQkJCQkgIHJpbmZvLT5jbGF1 c2VfcmVsaWRzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBwdWxsX3Zhcm5vc193YWxrZXIs CiAJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4dCk7CiB9CkBAIC0yNDUsNiAr MjUyLDE1IEBAIHB1bGxfdmFyYXR0bm9zX3dhbGtlcihOb2RlICpub2RlLCBw dWxsX3ZhcmF0dG5vc19jb250ZXh0ICpjb250ZXh0KQogCQlyZXR1cm4gZmFs c2U7CiAJfQogCisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKilub2Rl OworCisJCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKChOb2RlKily aW5mby0+Y2xhdXNlLAorCQkJCQkJCQkJICBwdWxsX3ZhcmF0dG5vc193YWxr ZXIsCisJCQkJCQkJCQkgICh2b2lkKikgY29udGV4dCk7CisJfQorCiAJLyog U2hvdWxkIG5vdCBmaW5kIGFuIHVucGxhbm5lZCBzdWJxdWVyeSAqLwogCUFz c2VydCghSXNBKG5vZGUsIFF1ZXJ5KSk7CiAKLS0gCjIuMS4wCgo= --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0002-shared-infrastructure-and-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0002-shared-infrastructure-and-functional-dependencies.patch"; charset="UTF-8" RnJvbSAxYzQyYTAyMTg5MDg4YmExOTRlMzBmNTg3OGJiNjdiYzYxOTUzYTEx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDE5OjUxOjQ4 ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzldIHNoYXJlZCBpbmZyYXN0cnVj dHVyZSBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkJhc2ljIGluZnJh c3RydWN0dXJlIHNoYXJlZCBieSBhbGwga2luZHMgb2YgbXVsdGl2YXJpYXRl IHN0YXRzLCBtb3N0CmltcG9ydGFudGx5OgoKLSBhZGRzIGEgbmV3IHN5c3Rl bSBjYXRhbG9nIChwZ19tdl9zdGF0aXN0aWMpCi0gQ1JFQVRFIFNUQVRJU1RJ Q1MgbmFtZSBPTiB0YWJsZSAoY29sdW1ucykgV0lUSCAob3B0aW9ucykKLSBE Uk9QIFNUQVRJU1RJQ1MgbmFtZQotIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzICh0aGUgc2ltcGxlc3QgdHlwZSBvZgogIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzKQotIGJ1aWxkaW5nIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGluIEFOQUxZWkUKLSB1cGRhdGVzIHJlZ3Jlc3Npb24g dGVzdHMgKG5ldyBjYXRhbG9nIGV0Yy4pCgpUaGlzIGRvZXMgbm90IGluY2x1 ZGUgYW55IGNoYW5nZXMgdG8gdGhlIG9wdGltaXplciwgaS5lLiBpdCBkb2Vz IG5vdAppbmZsdWVuY2UgdGhlIHF1ZXJ5IHBsYW5uaW5nIChzdWJqZWN0IHRv IGZvbGxvdy11cCBwYXRjaGVzKS4KClRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIGEgdmFsaWQgJ2x0b3ByJyBmb3IgdGhlIGNvbHVtbnMs IHNvCnRoYXQgd2UgY2FuIHNvcnQgdGhlIHNhbXBsZSByb3dzIGluIHZhcmlv dXMgd2F5cywgYm90aCBpbiB0aGlzIHBhdGNoCmFuZCBvdGhlciBraW5kcyBv ZiBzdGF0aXN0aWNzLiBNYXliZSB0aGlzIHJlc3RyaWN0aW9uIGNvdWxkIGJl IHJlbGF4ZWQKaW4gdGhlIGZ1dHVyZSwgcmVxdWlyaW5nIGp1c3QgJ2Vxb3By JyBpbiBjYXNlIG9mIHN0YXRzIG5vdCBzb3J0aW5nIHRoZQpkYXRhIChlLmcu IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGFuZCBNQ1YgbGlzdHMpLgoKTWF5 YmUgc29tZSBvZiB0aGUgc3RhdHMgKGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz IGFuZCBNQ1YgbGlzdCB3aXRoCmxpbWl0ZWQgZnVuY3Rpb25hbGl0eSkgbWln aHQgYmUgbWFkZSB0byB3b3JrIHdpdGggaGFzaGVzIG9mIHRoZSB2YWx1ZXMs CndoaWNoIGlzIHN1ZmZpY2llbnQgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25z LiBCdXQgdGhlIHF1ZXJpZXMgd291bGQKcmVxdWlyZSB0aGUgZXF1YWxpdHkg b3BlcmF0b3IgYW55d2F5LCBzbyBpdCdzIG5vdCByZWFsbHkgYSB3ZWFrZXIK cmVxdWlyZW1lbnQuIFRoZSBoYXNoZXMgbWlnaHQgcmVkdWNlIHNwYWNlIHJl cXVpcmVtZW50cywgdGhvdWdoLgoKVGhlIGFsZ29yaXRobSBkZXRlY3Rpbmcg dGhlIGRlcGVuZGVuY2llcyBpcyByYXRoZXIgc2ltcGxlIGFuZCBwcm9iYWJs eQpuZWVkcyBpbXByb3ZlbWVudHMsIHNvIHRoYXQgaXQgZGV0ZWN0cyBtb3Jl IGNvbXBsaWNhdGVkIGRlcGVuZGVuY2llcywKYW5kIGFsc28gdmFsaWRhdGlv biBvZiB0aGUgbWF0aC4KClRoZSBuYW1lICdmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcycgaXMgbW9yZSBjb3JyZWN0ICh0aGFuICdhc3NvY2lhdGlvbgpydWxl cycpIGFzIGl0J3MgZXhhY3RseSB0aGUgbmFtZSB1c2VkIGluIHJlbGF0aW9u YWwgdGhlb3J5IChlc3AuIE5vcm1hbApGb3JtcykgZm9yIHRyYWNraW5nIGNv bHVtbi1sZXZlbCBkZXBlbmRlbmNpZXMuCgpUaGUgbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBpbiB0d28gc2l0 dWF0aW9ucwoKIChhKSBhZnRlciBhIERST1AgVEFCTEUgKG9idmlvdXNseSkK CiAoYikgYWZ0ZXIgQUxURVIgVEFCTEUgLi4uIERST1AgQ09MVU1OLCBpZiB0 aGUgc3RhdGlzdGljcyB3b3VsZCBiZQogICAgIGRlZmluZWQgb24gbGVzcyB0 aGFuIDIgY29sdW1ucyAocmVtYWluaW5nKQoKSWYgdGhlcmUgYXJlIG1vcmUg YXQgbGVhc3QgdHdvIHJlbWFpbmluZyBjb2x1bW5zLCB3ZSBrZWVwIHRoZQpz dGF0aXN0aWNzIGJ1dCBwZXJmb3JtIGNsZWFudXAgb24gdGhlIG5leHQgQU5B TFlaRS4gVGhlIGRyb3BwZWQgY29sdW1ucwphcmUgcmVtb3ZlZCBmcm9tIHN0 YWtleXMsIGFuZCB0aGUgbmV3IHN0YXRpc3RpY3MgaXMgYnVpbHQgb24gdGhl CnNtYWxsZXIgc2V0LgoKV2UgY2FuJ3QgZG8gdGhpcyBhdCBEUk9QIENPTFVN TiwgYmVjYXVzZSB0aGF0J2QgbGVhdmUgdXMgd2l0aCBpbnZhbGlkCnN0YXRp c3RpY3MsIG9yIHdlJ2QgaGF2ZSB0byB0aHJvdyBpdCBhd2F5IGFsdGhvdWdo IHdlIGNhbiBzdGlsbCB1c2UgaXQuClRoaXMgbGF6eSBhcHByb2FjaCBsZXRz IHVzIHVzZSB0aGUgc3RhdGlzdGljcyBhbHRob3VnaCBzb21lIG9mIHRoZQpj b2x1bW5zIGFyZSBkZWFkLgoKVGhpcyBhbHNvIGFkZHMgYSBzaW1wbGUgbGlz dCBvZiBzdGF0aXN0aWNzIHRvIFxkIGluIHBzcWwuCgpUaGlzIG1lYW5zIHRo ZSBzdGF0aXN0aWNzIGFyZSBjcmVhdGVkIHdpdGhpbiBhIHNjaGVtYSBieSB1 c2luZyBhCnF1YWxpZmllZCBuYW1lIChvciB1c2luZyB0aGUgZGVmYXVsdCBz Y2hlbWEpCgogICBDUkVBVEUgU1RBVElTVElDUyBzY2hlbWEuc3RhdGlzdGlj cyBPTiAuLi4KCmFuZCB0aGVuIGRyb3BwZWQgYnkgc3BlY2lmeWluZyBxdWFs aWZpZWQgbmFtZQoKICAgRFJPUCBTVEFUSVNUSUNTIHNjaGVtYS5zdGF0aXN0 aWNzCgpvciBzZWFyY2hpbmcgdGhyb3VnaCBzZWFyY2hfcGF0aCAoanVzdCBs aWtlIHdpdGggb3RoZXIgb2JqZWN0cykuCgpUaGlzIGFsc28gZ2V0cyByaWQg b2YgdGhlICIob3B0XylzdGF0c19uYW1lIiBkZWZpbml0aW9ucyBpbiBncmFt LnkgYW5kCmluc3RlYWQgcmVwbGFjZXMgdGhlbSB3aXRoIGp1c3QgIm9wdF9h bnlfbmFtZSIsIGFsdGhvdWdoIHRoZSBvcHRpb25hbApjYXNlIGlzIG5vdCBy ZWFsbHkgaGFuZGxlZCBjdXJyZW50bHkgLSB0aGVyZSdzIG5vIGdlbmVyYXRl ZCBuYW1lIHlldAooc28gZWl0aGVyIHdlIHNob3VsZCBkcm9wIGl0IG9yIGlt cGxlbWVudCBpdCkuCgpJJ20gbm90IGVudGlyZWx5IHN1cmUgbWFraW5nIHN0 YXRpc3RpY3Mgc2NoZW1hLXNwZWNpZmljIGlzIHRoYXQgYSBncmVhdAppZGVh LiBNYXliZSBpdCBzaG91bGQgYmUgImdsb2JhbCIsIGJ1dCB0aGF0IGRvZXMg bm90IHNlZW0gcmlnaHQgKGUuZy4KaXQgbWFrZXMgbXVsdGktdGVuYW50IHN5 c3RlbXMgYmFzZWQgb24gc2NoZW1hcyBtb3JlIGRpZmZpY3VsdCB0bwptYW5h Z2UsIGJlY2F1c2UgdGVuYW50cyB3b3VsZCBpbnRlcmFjdCkuCi0tLQogZG9j L3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgICAgICAgIHwg ICAyICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dt bCAgICAgICB8IDE3NCArKysrKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmL2Ry b3Bfc3RhdGlzdGljcy5zZ21sICAgICAgICAgfCAgOTAgKysrKysrCiBkb2Mv c3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwgICAgICAgICAgICAgICAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMg ICAgICAgICAgICAgICAgICB8ICAyNyArKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9kZXBlbmRlbmN5LmMgICAgICAgICAgICAgIHwgIDExICstCiBzcmMvYmFj a2VuZC9jYXRhbG9nL2hlYXAuYyAgICAgICAgICAgICAgICAgICAgfCAxMDIg KysrKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL25hbWVzcGFjZS5jICAgICAg ICAgICAgICAgfCAgNTEgKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVj dGFkZHJlc3MuYyAgICAgICAgICAgfCAgNTQgKysrKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgIDExICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAgNiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAg ICAgICAgICAgIHwgIDIxICsrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kcm9w Y21kcy5jICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgICAgIHwgICAzICsKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jICAgICAgICAgICAgICB8IDI2 NiArKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVu Y3MuYyAgICAgICAgICAgICAgICAgfCAgMTcgKwogc3JjL2JhY2tlbmQvbm9k ZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgICAgICAgIHwgIDE4ICsrCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgfCAg NTkgKysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAg ICAgICAgICAgIHwgIDM0ICstCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHku YyAgICAgICAgICAgICAgICAgICAgfCAgMTEgKwogc3JjL2JhY2tlbmQvdXRp bHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAg NTkgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUuYyAg ICAgICAgICAgIHwgIDIzICsrCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L01ha2VmaWxlICAgICAgICAgICAgfCAgMTcgKwogc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzIHwgMjIyICsrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgICAg ICAgICAgICB8IDM1NiArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmggICAgICAgICAgICB8ICA3NSAr KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMu YyAgICAgIHwgNDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv YmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAg NDQgKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCAgICAg ICAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5o ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4aW5nLmggICAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaCAgICAgICAgICAgICAgIHwgICAy ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggICAg ICAgICB8ICA3NSArKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmggICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvdG9hc3RpbmcuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9jb21tYW5kcy9kZWZyZW0uaCAgICAgICAgICAgICAgICAgfCAgIDQg Kwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgICAg ICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAg ICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9yZWxh dGlvbi5oICAgICAgICAgICAgICAgICAgfCAgMjggKysKIHNyYy9pbmNsdWRl L3V0aWxzL2FjbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgICAgICAg fCAgNzAgKysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAg ICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxj YWNoZS5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUv dXRpbHMvc3lzY2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0ICB8 ICAgNyArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQg ICAgICAgICAgIHwgICA5ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c2FuaXR5X2NoZWNrLm91dCAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9vYmplY3RfYWRkcmVzcy5zcWwgICAgICAgfCAgIDQgKy0KIDUwIGZp bGVzIGNoYW5nZWQsIDI0MjkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3Ny Yy9zZ21sL3JlZi9kcm9wX3N0YXRpc3RpY3Muc2dtbAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9kZXBlbmRlbmNpZXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL2FsbGZpbGVzLnNnbWwKaW5kZXggYmY5NTQ1My4uYzBmNzY1MyAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbApAQCAtNzYsNiAr NzYsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVzYWJsZSBzZ21sIHNvdXJjZSBm aWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIGNyZWF0ZVNjaGVt YSAgICAgICBTWVNURU0gImNyZWF0ZV9zY2hlbWEuc2dtbCI+CiA8IUVOVElU WSBjcmVhdGVTZXF1ZW5jZSAgICAgU1lTVEVNICJjcmVhdGVfc2VxdWVuY2Uu c2dtbCI+CiA8IUVOVElUWSBjcmVhdGVTZXJ2ZXIgICAgICAgU1lTVEVNICJj cmVhdGVfc2VydmVyLnNnbWwiPgorPCFFTlRJVFkgY3JlYXRlU3RhdGlzdGlj cyAgIFNZU1RFTSAiY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCI+CiA8IUVOVElU WSBjcmVhdGVUYWJsZSAgICAgICAgU1lTVEVNICJjcmVhdGVfdGFibGUuc2dt bCI+CiA8IUVOVElUWSBjcmVhdGVUYWJsZUFzICAgICAgU1lTVEVNICJjcmVh dGVfdGFibGVfYXMuc2dtbCI+CiA8IUVOVElUWSBjcmVhdGVUYWJsZVNwYWNl ICAgU1lTVEVNICJjcmVhdGVfdGFibGVzcGFjZS5zZ21sIj4KQEAgLTExOSw2 ICsxMjAsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVzYWJsZSBzZ21sIHNvdXJj ZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIGRyb3BTY2hl bWEgICAgICAgICBTWVNURU0gImRyb3Bfc2NoZW1hLnNnbWwiPgogPCFFTlRJ VFkgZHJvcFNlcXVlbmNlICAgICAgIFNZU1RFTSAiZHJvcF9zZXF1ZW5jZS5z Z21sIj4KIDwhRU5USVRZIGRyb3BTZXJ2ZXIgICAgICAgICBTWVNURU0gImRy b3Bfc2VydmVyLnNnbWwiPgorPCFFTlRJVFkgZHJvcFN0YXRpc3RpY3MgICAg IFNZU1RFTSAiZHJvcF9zdGF0aXN0aWNzLnNnbWwiPgogPCFFTlRJVFkgZHJv cFRhYmxlICAgICAgICAgIFNZU1RFTSAiZHJvcF90YWJsZS5zZ21sIj4KIDwh RU5USVRZIGRyb3BUYWJsZVNwYWNlICAgICBTWVNURU0gImRyb3BfdGFibGVz cGFjZS5zZ21sIj4KIDwhRU5USVRZIGRyb3BUcmFuc2Zvcm0gICAgICBTWVNU RU0gImRyb3BfdHJhbnNmb3JtLnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmVhZTMKLS0tIC9kZXYvbnVsbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwK QEAgLTAsMCArMSwxNzQgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3N0YXRpc3RpY3Muc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CistLT4KKworPHJlZmVudHJ5IGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUyI+ CisgPGluZGV4dGVybSB6b25lPSJzcWwtY3JlYXRlc3RhdGlzdGljcyI+Cisg IDxwcmltYXJ5PkNSRUFURSBTVEFUSVNUSUNTPC9wcmltYXJ5PgorIDwvaW5k ZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPkNSRUFU RSBTVEFUSVNUSUNTPC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9sbnVtPjc8 L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1YWdlIFN0 YXRlbWVudHM8L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZu YW1lZGl2PgorICA8cmVmbmFtZT5DUkVBVEUgU1RBVElTVElDUzwvcmVmbmFt ZT4KKyAgPHJlZnB1cnBvc2U+ZGVmaW5lIGEgbmV3IHN0YXRpc3RpY3M8L3Jl ZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2 PgorPHN5bm9wc2lzPgorQ1JFQVRFIFNUQVRJU1RJQ1MgWyBJRiBOT1QgRVhJ U1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3Rp Y3NfbmFtZTwvcmVwbGFjZWFibGU+IE9OIDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gKCBbCisgIHsg PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbl9uYW1lPC9y ZXBsYWNlYWJsZT4gfSBdIFssIC4uLl0pCitbIFdJVEggKCA8cmVwbGFjZWFi bGUgY2xhc3M9IlBBUkFNRVRFUiI+c3RhdGlzdGljc19wYXJhbWV0ZXI8L3Jl cGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKQorPC9zeW5vcHNpcz4K KworIDwvcmVmc3lub3BzaXNkaXY+CisKKyA8cmVmc2VjdDEgaWQ9IlNRTC1D UkVBVEVTVEFUSVNUSUNTLWRlc2NyaXB0aW9uIj4KKyAgPHRpdGxlPkRlc2Ny aXB0aW9uPC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPkNSRUFU RSBTVEFUSVNUSUNTPC9jb21tYW5kPiB3aWxsIGNyZWF0ZSBhIG5ldyBtdWx0 aXZhcmlhdGUKKyAgIHN0YXRpc3RpY3Mgb24gdGhlIHRhYmxlLiBUaGUgc3Rh dGlzdGljcyB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGluIHRoZQorICAgY3Vy cmVudCBkYXRhYmFzZS4gVGhlIHN0YXRpc3RpY3Mgd2lsbCBiZSBvd25lZCBi eSB0aGUgdXNlciBpc3N1aW5nCisgICB0aGUgY29tbWFuZC4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgSWYgYSBzY2hlbWEgbmFtZSBpcyBnaXZlbiAo Zm9yIGV4YW1wbGUsIDxsaXRlcmFsPkNSRUFURSBTVEFUSVNUSUNTCisgICBt eXNjaGVtYS5teXN0YXQgLi4uPC8+KSB0aGVuIHRoZSBzdGF0aXN0aWNzIGlz IGNyZWF0ZWQgaW4gdGhlIHNwZWNpZmllZAorICAgc2NoZW1hLiAgT3RoZXJ3 aXNlIGl0IGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgc2NoZW1hLiAgVGhl IG5hbWUgb2YKKyAgIHRoZSB0YWJsZSBtdXN0IGJlIGRpc3RpbmN0IGZyb20g dGhlIG5hbWUgb2YgYW55IG90aGVyIHN0YXRpc3RpY3MgaW4gdGhlCisgICBz YW1lIHNjaGVtYS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gYmUg YWJsZSB0byBjcmVhdGUgYSB0YWJsZSwgeW91IG11c3QgaGF2ZSA8bGl0ZXJh bD5VU0FHRTwvbGl0ZXJhbD4KKyAgIHByaXZpbGVnZSBvbiBhbGwgY29sdW1u IHR5cGVzIG9yIHRoZSB0eXBlIGluIHRoZSA8bGl0ZXJhbD5PRjwvbGl0ZXJh bD4KKyAgIGNsYXVzZSwgcmVzcGVjdGl2ZWx5LgorICA8L3BhcmE+CisgPC9y ZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlBhcmFtZXRlcnM8 L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+SUYgTk9UIEVYSVNUUzwvPjwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRG8gbm90 IHRocm93IGFuIGVycm9yIGlmIGEgc3RhdGlzdGljcyB3aXRoIHRoZSBzYW1l IG5hbWUgYWxyZWFkeSBleGlzdHMuCisgICAgICBBIG5vdGljZSBpcyBpc3N1 ZWQgaW4gdGhpcyBjYXNlLiAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGd1YXJh bnRlZSB0aGF0CisgICAgICB0aGUgZXhpc3Rpbmcgc3RhdGlzdGljcyBpcyBh bnl0aGluZyBsaWtlIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAg ICAgIGNyZWF0ZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3Rp Y3NfbmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSAob3B0aW9uYWxseSBzY2hl bWEtcXVhbGlmaWVkKSBvZiB0aGUgc3RhdGlzdGljcyB0byBiZSBjcmVhdGVk LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxyZXBs YWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj50YWJsZV9uYW1lPC9yZXBsYWNl YWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIFRoZSBuYW1lIChvcHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIG9m IHRoZSB0YWJsZSB0aGUgc3RhdGlzdGljcyBzaG91bGQKKyAgICAgIGJlIGNy ZWF0ZWQgb24uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbl9uYW1l PC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIFRoZSBuYW1lIG9mIGEgY29sdW1uIHRvIGJlIGluY2x1 ZGVkIGluIHRoZSBzdGF0aXN0aWNzLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPldJVEggKCA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+c3RhdGlzdGljc19wYXJhbWV0ZXI8L3JlcGxh Y2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFs dWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIC4uLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxyZWZzZWN0MiBpZD0iU1FM LUNSRUFURVNUQVRJU1RJQ1MtcGFyYW1ldGVycyI+CisgICA8dGl0bGUgaWQ9 IlNRTC1DUkVBVEVTVEFUSVNUSUNTLXBhcmFtZXRlcnMtdGl0bGUiPlN0YXRp c3RpY3MgUGFyYW1ldGVyczwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9 InNxbC1jcmVhdGVzdGF0aXN0aWNzLXBhcmFtZXRlcnMiPgorICA8cHJpbWFy eT5zdGF0aXN0aWNzIHBhcmFtZXRlcnM8L3ByaW1hcnk+CisgPC9pbmRleHRl cm0+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8bGl0ZXJhbD5XSVRIPC8+IGNs YXVzZSBjYW4gc3BlY2lmeSA8Zmlyc3R0ZXJtPnN0YXRpc3RpY3MgcGFyYW1l dGVyczwvPgorICAgIGZvciBzdGF0aXN0aWNzLiBUaGUgY3VycmVudGx5IGF2 YWlsYWJsZSBwYXJhbWV0ZXJzIGFyZSBsaXN0ZWQgYmVsb3cuCisgICA8L3Bh cmE+CisKKyAgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+PGxpdGVyYWw+ZGVwZW5kZW5jaWVzPC8+ICg8dHlwZT5i b29sZWFuPC8+KTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgRW5hYmxlcyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBmb3Ig dGhlIHN0YXRpc3RpY3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDwvdmFyaWFibGVsaXN0Pgor CisgIDwvcmVmc2VjdDI+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MSBp ZD0iU1FMLUNSRUFURVNUQVRJU1RJQ1Mtbm90ZXMiPgorICA8dGl0bGU+Tm90 ZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgIC4uLgorICAgIDwvcGFy YT4KKworIDwvcmVmc2VjdDE+CisKKworIDxyZWZzZWN0MSBpZD0iU1FMLUNS RUFURVNUQVRJU1RJQ1MtZXhhbXBsZXMiPgorICA8dGl0bGU+RXhhbXBsZXM8 L3RpdGxlPgorCisgIDxwYXJhPgorICAgLi4uCisgIDwvcGFyYT4KKworIDwv cmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Db21wYXRpYmls aXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZXJlJ3Mgbm8gPGNvbW1h bmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IGNvbW1hbmQgaW4gdGhl IFNRTCBzdGFuZGFyZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8 cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNp bXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlu a2VuZD0ic3FsLWRyb3BzdGF0aXN0aWNzIj48L21lbWJlcj4KKyAgPC9zaW1w bGVsaXN0PgorIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3JlZi9kcm9wX3N0YXRpc3RpY3Muc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNnbWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMGI3MAotLS0gL2Rldi9u dWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNn bWwKQEAgLTAsMCArMSw5MCBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9k cm9wX3N0YXRpc3RpY3Muc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CistLT4KKworPHJlZmVudHJ5IGlkPSJTUUwtRFJPUFNUQVRJU1RJQ1MiPgor IDxpbmRleHRlcm0gem9uZT0ic3FsLWRyb3BzdGF0aXN0aWNzIj4KKyAgPHBy aW1hcnk+RFJPUCBTVEFUSVNUSUNTPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJt PgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPkRST1AgU1RBVElT VElDUzwvcmVmZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xu dW0+CisgIDxyZWZtaXNjaW5mbz5TUUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRz PC9yZWZtaXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4K KyAgPHJlZm5hbWU+RFJPUCBTVEFUSVNUSUNTPC9yZWZuYW1lPgorICA8cmVm cHVycG9zZT5yZW1vdmUgYSBzdGF0aXN0aWNzPC9yZWZwdXJwb3NlPgorIDwv cmVmbmFtZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4K K0RST1AgU1RBVElTVElDUyBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXQor PC9zeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3Qx PgorICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgIDxwYXJhPgor ICAgPGNvbW1hbmQ+RFJPUCBTVEFUSVNUSUNTPC9jb21tYW5kPiByZW1vdmVz IHN0YXRpc3RpY3MgZnJvbSB0aGUgZGF0YWJhc2UuCisgICBPbmx5IHRoZSBz dGF0aXN0aWNzIG93bmVyLCB0aGUgc2NoZW1hIG93bmVyLCBhbmQgc3VwZXJ1 c2VyIGNhbiBkcm9wIGEKKyAgIHN0YXRpc3RpY3MuCisgIDwvcGFyYT4KKwor IDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0 ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5JRiBFWElTVFM8L2xpdGVyYWw+ PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBE byBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHN0YXRpc3RpY3MgZG9lcyBu b3QgZXhpc3QuIEEgbm90aWNlIGlzCisgICAgICBpc3N1ZWQgaW4gdGhpcyBj YXNlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJs ZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IFRoZSBuYW1lIChvcHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIG9mIHRo ZSBzdGF0aXN0aWNzIHRvIGRyb3AuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxp c3Q+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4 YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIC4uLgorICA8L3BhcmE+ CisKKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+Q29t cGF0aWJpbGl0eTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVyZSdzIG5v IDxjb21tYW5kPkRST1AgU1RBVElTVElDUzwvY29tbWFuZD4gY29tbWFuZCBp biB0aGUgU1FMIHN0YW5kYXJkLgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4K KworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90aXRsZT4KKwor ICA8c2ltcGxlbGlzdCB0eXBlPSJpbmxpbmUiPgorICAgPG1lbWJlcj48eHJl ZiBsaW5rZW5kPSJzcWwtY3JlYXRlc3RhdGlzdGljcyI+PC9tZW1iZXI+Cisg IDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCis8L3JlZmVudHJ5Pgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IDAzMDIwZGYuLjJiMDdi MmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTEwNCw2ICsx MDQsNyBAQAogICAgJmNyZWF0ZVNjaGVtYTsKICAgICZjcmVhdGVTZXF1ZW5j ZTsKICAgICZjcmVhdGVTZXJ2ZXI7CisgICAmY3JlYXRlU3RhdGlzdGljczsK ICAgICZjcmVhdGVUYWJsZTsKICAgICZjcmVhdGVUYWJsZUFzOwogICAgJmNy ZWF0ZVRhYmxlU3BhY2U7CkBAIC0xNDcsNiArMTQ4LDcgQEAKICAgICZkcm9w U2NoZW1hOwogICAgJmRyb3BTZXF1ZW5jZTsKICAgICZkcm9wU2VydmVyOwor ICAgJmRyb3BTdGF0aXN0aWNzOwogICAgJmRyb3BUYWJsZTsKICAgICZkcm9w VGFibGVTcGFjZTsKICAgICZkcm9wVFNDb25maWc7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9NYWtlZmlsZQppbmRleCAyNTEzMGVjLi4wNThiOGE5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxlCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAgUE9T VEdSRVNfQktJX1NSQ1MgPSAkKGFkZHByZWZpeCAkKHRvcF9zcmNkaXIpL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvLFwKIAlwZ19hdHRyZGVmLmggcGdfY29uc3Ry YWludC5oIHBnX2luaGVyaXRzLmggcGdfaW5kZXguaCBwZ19vcGVyYXRvci5o IFwKIAlwZ19vcGZhbWlseS5oIHBnX29wY2xhc3MuaCBwZ19hbS5oIHBnX2Ft b3AuaCBwZ19hbXByb2MuaCBcCiAJcGdfbGFuZ3VhZ2UuaCBwZ19sYXJnZW9i amVjdF9tZXRhZGF0YS5oIHBnX2xhcmdlb2JqZWN0LmggcGdfYWdncmVnYXRl LmggXAorCXBnX212X3N0YXRpc3RpYy5oIFwKIAlwZ19zdGF0aXN0aWMuaCBw Z19yZXdyaXRlLmggcGdfdHJpZ2dlci5oIHBnX2V2ZW50X3RyaWdnZXIuaCBw Z19kZXNjcmlwdGlvbi5oIFwKIAlwZ19jYXN0LmggcGdfZW51bS5oIHBnX25h bWVzcGFjZS5oIHBnX2NvbnZlcnNpb24uaCBwZ19kZXBlbmQuaCBcCiAJcGdf ZGF0YWJhc2UuaCBwZ19kYl9yb2xlX3NldHRpbmcuaCBwZ190YWJsZXNwYWNl LmggcGdfcGx0ZW1wbGF0ZS5oIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNo ay5jCmluZGV4IDBmM2JjMDcuLmUyMWFhY2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9hY2xjaGsuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImNh dGFsb2cvcGdfbGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xh cmdlb2JqZWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVj dF9tZXRhZGF0YS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlz dGljLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX29wZXJhdG9yLmgiCkBAIC01MDIxLDYgKzUwMjIsMzIgQEAgcGdf ZXh0ZW5zaW9uX293bmVyY2hlY2soT2lkIGV4dF9vaWQsIE9pZCByb2xlaWQp CiB9CiAKIC8qCisgKiBPd25lcnNoaXAgY2hlY2sgZm9yIGEgbXVsdGl2YXJp YXRlIHN0YXRpc3RpY3MgKHNwZWNpZmllZCBieSBPSUQpLgorICovCitib29s CitwZ19zdGF0aXN0aWNzX293bmVyY2hlY2soT2lkIHN0YXRfb2lkLCBPaWQg cm9sZWlkKQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlPaWQJCQlvd25lcklk OworCisJLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hl Y2tpbmcuICovCisJaWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKKwkJcmV0 dXJuIHRydWU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShNVlNUQVRP SUQsIE9iamVjdElkR2V0RGF0dW0oc3RhdF9vaWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHVwbGUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1z Zygic3RhdGlzdGljcyB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHN0 YXRfb2lkKSkpOworCisJb3duZXJJZCA9ICgoRm9ybV9wZ19tdl9zdGF0aXN0 aWMpIEdFVFNUUlVDVCh0dXBsZSkpLT5zdGFvd25lcjsKKworCVJlbGVhc2VT eXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gaGFzX3ByaXZzX29mX3JvbGUo cm9sZWlkLCBvd25lcklkKTsKK30KKworLyoKICAqIENoZWNrIHdoZXRoZXIg c3BlY2lmaWVkIHJvbGUgaGFzIENSRUFURVJPTEUgcHJpdmlsZWdlIChvciBp cyBhIHN1cGVydXNlcikKICAqCiAgKiBOb3RlOiByb2xlcyBkbyBub3QgaGF2 ZSBvd25lcnMgcGVyIHNlOyBpbnN0ZWFkIHdlIHVzZSB0aGlzIHRlc3QgaW4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5j IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXggYzQ4 ZTM3Yi4uODIwMDQ1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9kZXBlbmRlbmN5LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBl bmRlbmN5LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJjYXRhbG9n L3BnX2ZvcmVpZ25fc2VydmVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YW5ndWFnZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3Qu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgpAQCAtMTYwLDcgKzE2MSw4IEBAIHN0YXRpYyBjb25zdCBPaWQg b2JqZWN0X2NsYXNzZXNbXSA9IHsKIAlFeHRlbnNpb25SZWxhdGlvbklkLAkJ LyogT0NMQVNTX0VYVEVOU0lPTiAqLwogCUV2ZW50VHJpZ2dlclJlbGF0aW9u SWQsCQkvKiBPQ0xBU1NfRVZFTlRfVFJJR0dFUiAqLwogCVBvbGljeVJlbGF0 aW9uSWQsCQkJLyogT0NMQVNTX1BPTElDWSAqLwotCVRyYW5zZm9ybVJlbGF0 aW9uSWQJCQkvKiBPQ0xBU1NfVFJBTlNGT1JNICovCisJVHJhbnNmb3JtUmVs YXRpb25JZCwJCS8qIE9DTEFTU19UUkFOU0ZPUk0gKi8KKwlNdlN0YXRpc3Rp Y1JlbGF0aW9uSWQJCS8qIE9DTEFTU19TVEFUSVNUSUNTICovCiB9OwogCiAK QEAgLTEyNzIsNiArMTI3NCwxMCBAQCBkb0RlbGV0aW9uKGNvbnN0IE9iamVj dEFkZHJlc3MgKm9iamVjdCwgaW50IGZsYWdzKQogCQkJRHJvcFRyYW5zZm9y bUJ5SWQob2JqZWN0LT5vYmplY3RJZCk7CiAJCQlicmVhazsKIAorCQljYXNl IE9DTEFTU19TVEFUSVNUSUNTOgorCQkJUmVtb3ZlU3RhdGlzdGljc0J5SWQo b2JqZWN0LT5vYmplY3RJZCk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgY2xhc3M6ICV1 IiwKIAkJCQkgb2JqZWN0LT5jbGFzc0lkKTsKQEAgLTI0MTUsNiArMjQyMSw5 IEBAIGdldE9iamVjdENsYXNzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVj dCkKIAogCQljYXNlIFRyYW5zZm9ybVJlbGF0aW9uSWQ6CiAJCQlyZXR1cm4g T0NMQVNTX1RSQU5TRk9STTsKKworCQljYXNlIE12U3RhdGlzdGljUmVsYXRp b25JZDoKKwkJCXJldHVybiBPQ0xBU1NfU1RBVElTVElDUzsKIAl9CiAKIAkv KiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvaGVhcC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFw LmMKaW5kZXggNmE0YTlkOS4uZTdkOWFhYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9oZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9oZWFwLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbnN0cmFpbnRfZm4uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Zv cmVpZ25fdGFibGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRz LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190 YWJsZXNwYWNlLmgiCkBAIC0xNjEzLDcgKzE2MTQsMTAgQEAgUmVtb3ZlQXR0 cmlidXRlQnlJZChPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKQogCWhl YXBfY2xvc2UoYXR0cl9yZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJaWYg KGF0dG51bSA+IDApCisJewogCQlSZW1vdmVTdGF0aXN0aWNzKHJlbGlkLCBh dHRudW0pOworCQlSZW1vdmVNVlN0YXRpc3RpY3MocmVsaWQsIGF0dG51bSk7 CisJfQogCiAJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOwogfQpAQCAt MTg0MSw2ICsxODQ1LDExIEBAIGhlYXBfZHJvcF93aXRoX2NhdGFsb2coT2lk IHJlbGlkKQogCVJlbW92ZVN0YXRpc3RpY3MocmVsaWQsIDApOwogCiAJLyoK KwkgKiBkZWxldGUgbXVsdGktdmFyaWF0ZSBzdGF0aXN0aWNzCisJICovCisJ UmVtb3ZlTVZTdGF0aXN0aWNzKHJlbGlkLCAwKTsKKworCS8qCiAJICogZGVs ZXRlIGF0dHJpYnV0ZSB0dXBsZXMKIAkgKi8KIAlEZWxldGVBdHRyaWJ1dGVU dXBsZXMocmVsaWQpOwpAQCAtMjY5Niw2ICsyNzA1LDk5IEBAIFJlbW92ZVN0 YXRpc3RpY3MoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSkKIAogCiAv KgorICogUmVtb3ZlTVZTdGF0aXN0aWNzIC0tLSByZW1vdmUgZW50cmllcyBp biBwZ19tdl9zdGF0aXN0aWMgZm9yIGEgcmVsCisgKgorICogSWYgYXR0bnVt IGlzIHplcm8sIHJlbW92ZSBhbGwgZW50cmllcyBmb3IgcmVsOyBlbHNlIHJl bW92ZSBvbmx5IHRoZSBvbmUocykKKyAqIGZvciB0aGF0IGNvbHVtbi4KKyAq Lwordm9pZAorUmVtb3ZlTVZTdGF0aXN0aWNzKE9pZCByZWxpZCwgQXR0ck51 bWJlciBhdHRudW0pCit7CisJUmVsYXRpb24JcGdtdnN0YXRpc3RpYzsKKwlU dXBsZURlc2MJdHVwZGVzYyA9IE5VTEw7CisJU3lzU2NhbkRlc2Mgc2NhbjsK KwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJLyoK KwkgKiBXaGVuIGRyb3BwaW5nIGEgY29sdW1uLCB3ZSdsbCBkcm9wIHN0YXRp c3RpY3Mgd2l0aCBhIHNpbmdsZQorCSAqIHJlbWFpbmluZyAodW5kcm9wcGVk IGNvbHVtbikuIFRvIGRvIHRoYXQsIHdlIG5lZWQgdGhlIHR1cGxlCisJICog ZGVzY3JpcHRvci4KKwkgKgorCSAqIFdlIGFscmVhZHkgaGF2ZSB0aGUgcmVs YXRpb24gbG9ja2VkIChhcyB3ZSdyZSBydW5uaW5nIEFMVEVSCisJICogVEFC TEUgLi4uIERST1AgQ09MVU1OKSwgc28gd2UnbGwganVzdCBnZXQgdGhlIGRl c2NyaXB0b3IgaGVyZS4KKwkgKi8KKwlpZiAoYXR0bnVtICE9IDApCisJewor CQlSZWxhdGlvbiByZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBOb0xvY2sp OworCisJCS8qIG11bHRpdmFyaWF0ZSBzdGF0cyBhcmUgc3VwcG9ydGVkIG9u IHRhYmxlcyBhbmQgbWF0dmlld3MgKi8KKwkJaWYgKHJlbC0+cmRfcmVsLT5y ZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gfHwKKwkJCXJlbC0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfTUFUVklFVykKKwkJCXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CisKKwkJcmVsYXRpb25fY2xvc2UocmVs LCBOb0xvY2spOworCX0KKworCWlmICh0dXBkZXNjID09IE5VTEwpCisJCXJl dHVybjsKKworCXBnbXZzdGF0aXN0aWMgPSBoZWFwX29wZW4oTXZTdGF0aXN0 aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJ bml0KCZrZXksCisJCQkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9i ZWdpbnNjYW4ocGdtdnN0YXRpc3RpYywKKwkJCQkJCQkgIE12U3RhdGlzdGlj UmVsaWRJbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7 CisKKwkvKiB3ZSBtdXN0IGxvb3AgZXZlbiB3aGVuIGF0dG51bSAhPSAwLCBp biBjYXNlIG9mIGluaGVyaXRlZCBzdGF0cyAqLworCXdoaWxlIChIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJ eworCQlib29sIGRlbGV0ZSA9IHRydWU7CisKKwkJaWYgKGF0dG51bSAhPSAw KQorCQl7CisJCQlEYXR1bQkJYWRhdHVtOworCQkJYm9vbAkJaXNudWxsOwor CQkJaW50CQkJaTsKKwkJCWludAkJCW5jb2x1bW5zID0gMDsKKwkJCUFycmF5 VHlwZSAgKmFycjsKKwkJCWludDE2CSAgICphdHRudW1zOworCisJCQkvKiBn ZXQgdGhlIGNvbHVtbnMgKi8KKwkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihNVlNUQVRPSUQsIHR1cGxlLAorCQkJCQkJCQkJIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWtleXMsICZpc251bGwpOworCQkJQXNzZXJ0KCFpc251bGwp OworCisJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoYWRhdHVtKTsKKwkJ CWF0dG51bXMgPSAoaW50MTYqKUFSUl9EQVRBX1BUUihhcnIpOworCisJCQlm b3IgKGkgPSAwOyBpIDwgQVJSX0RJTVMoYXJyKVswXTsgaSsrKQorCQkJewor CQkJCS8qIGNvdW50IHRoZSBjb2x1bW4gdW5sZXNzIGl0J3MgaGFzIGJlZW4g LyBpcyBiZWluZyBkcm9wcGVkICovCisJCQkJaWYgKCghIHR1cGRlc2MtPmF0 dHJzW2F0dG51bXNbaV0tMV0tPmF0dGlzZHJvcHBlZCkgJiYKKwkJCQkJKGF0 dG51bXNbaV0gIT0gYXR0bnVtKSkKKwkJCQkJbmNvbHVtbnMgKz0gMTsKKwkJ CX0KKworCQkJLyogZGVsZXRlIGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gdHdv IGF0dHJpYnV0ZXMgKi8KKwkJCWRlbGV0ZSA9IChuY29sdW1ucyA8IDIpOwor CQl9CisKKwkJaWYgKGRlbGV0ZSkKKwkJCXNpbXBsZV9oZWFwX2RlbGV0ZShw Z212c3RhdGlzdGljLCAmdHVwbGUtPnRfc2VsZik7CisJfQorCisJc3lzdGFi bGVfZW5kc2NhbihzY2FuKTsKKworCWhlYXBfY2xvc2UocGdtdnN0YXRpc3Rp YywgUm93RXhjbHVzaXZlTG9jayk7Cit9CisKKworLyoKICAqIFJlbGF0aW9u VHJ1bmNhdGVJbmRleGVzIC0gdHJ1bmNhdGUgYWxsIGluZGV4ZXMgYXNzb2Np YXRlZAogICogd2l0aCB0aGUgaGVhcCByZWxhdGlvbiB0byB6ZXJvIHR1cGxl cy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL25hbWVz cGFjZS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYwppbmRl eCA0NDZiMmFjLi5kZmQ1YmVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL25hbWVzcGFjZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv bmFtZXNwYWNlLmMKQEAgLTQyMDEsMyArNDIwMSw1NCBAQCBwZ19pc19vdGhl cl90ZW1wX3NjaGVtYShQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJO X0JPT0woaXNPdGhlclRlbXBOYW1lc3BhY2Uob2lkKSk7CiB9CisKK09pZAor Z2V0X3N0YXRpc3RpY3Nfb2lkKExpc3QgKm5hbWVzLCBib29sIG1pc3Npbmdf b2spCit7CisJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwljaGFyCSAgICpzdGF0 c19uYW1lOworCU9pZAkJCW5hbWVzcGFjZUlkOworCU9pZAkJCXN0YXRzX29p ZCA9IEludmFsaWRPaWQ7CisJTGlzdENlbGwgICAqbDsKKworCS8qIGRlY29u c3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwlEZWNvbnN0cnVjdFF1YWxpZmll ZE5hbWUobmFtZXMsICZzY2hlbWFuYW1lLCAmc3RhdHNfbmFtZSk7CisKKwlp ZiAoc2NoZW1hbmFtZSkKKwl7CisJCS8qIHVzZSBleGFjdCBzY2hlbWEgZ2l2 ZW4gKi8KKwkJbmFtZXNwYWNlSWQgPSBMb29rdXBFeHBsaWNpdE5hbWVzcGFj ZShzY2hlbWFuYW1lLCBtaXNzaW5nX29rKTsKKwkJaWYgKG1pc3Npbmdfb2sg JiYgIU9pZElzVmFsaWQobmFtZXNwYWNlSWQpKQorCQkJc3RhdHNfb2lkID0g SW52YWxpZE9pZDsKKwkJZWxzZQorCQkJc3RhdHNfb2lkID0gR2V0U3lzQ2Fj aGVPaWQyKE1WU1RBVE5BTUVOU1AsCisJCQkJCQkJCQkJUG9pbnRlckdldERh dHVtKHN0YXRzX25hbWUpLAorCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0o bmFtZXNwYWNlSWQpKTsKKwl9CisJZWxzZQorCXsKKwkJLyogc2VhcmNoIGZv ciBpdCBpbiBzZWFyY2ggcGF0aCAqLworCQlyZWNvbXB1dGVOYW1lc3BhY2VQ YXRoKCk7CisKKwkJZm9yZWFjaChsLCBhY3RpdmVTZWFyY2hQYXRoKQorCQl7 CisJCQluYW1lc3BhY2VJZCA9IGxmaXJzdF9vaWQobCk7CisKKwkJCWlmIChu YW1lc3BhY2VJZCA9PSBteVRlbXBOYW1lc3BhY2UpCisJCQkJY29udGludWU7 CQkvKiBkbyBub3QgbG9vayBpbiB0ZW1wIG5hbWVzcGFjZSAqLworCQkJc3Rh dHNfb2lkID0gR2V0U3lzQ2FjaGVPaWQyKE1WU1RBVE5BTUVOU1AsCisJCQkJ CQkJCQkgIFBvaW50ZXJHZXREYXR1bShzdGF0c19uYW1lKSwKKwkJCQkJCQkJ CSAgT2JqZWN0SWRHZXREYXR1bShuYW1lc3BhY2VJZCkpOworCQkJaWYgKE9p ZElzVmFsaWQoc3RhdHNfb2lkKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwor CWlmICghT2lkSXNWYWxpZChzdGF0c19vaWQpICYmICFtaXNzaW5nX29rKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJIGVycm1zZygic3RhdGlzdGljcyBcIiVzXCIg ZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJTmFtZUxpc3RUb1N0cmluZyhuYW1l cykpKSk7CisKKwlyZXR1cm4gc3RhdHNfb2lkOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwppbmRleCBkMmFhYTZkLi44 NTg0MWUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVj dGFkZHJlc3MuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFk ZHJlc3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImNhdGFsb2cv cGdfbGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2Jq ZWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdF9tZXRh ZGF0YS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZmFtaWx5LmgiCkBAIC00MzgsOSArNDM5LDIyIEBAIHN0YXRpYyBjb25z dCBPYmplY3RQcm9wZXJ0eVR5cGUgT2JqZWN0UHJvcGVydHlbXSA9CiAJCUFu dW1fcGdfdHlwZV90eXBhY2wsCiAJCUFDTF9LSU5EX1RZUEUsCiAJCXRydWUK Kwl9LAorCXsKKwkJTXZTdGF0aXN0aWNSZWxhdGlvbklkLAorCQlNdlN0YXRp c3RpY09pZEluZGV4SWQsCisJCU1WU1RBVE9JRCwKKwkJTVZTVEFUTkFNRU5T UCwKKwkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZSwKKwkJQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhbmFtZXNwYWNlLAorCQlJbnZhbGlkQXR0ck51 bWJlciwJCS8qIFhYWCBzYW1lIG93bmVyIGFzIHJlbGF0aW9uICovCisJCUlu dmFsaWRBdHRyTnVtYmVyLAkJLyogbm8gQUNMIChzYW1lIGFzIHJlbGF0aW9u KSAqLworCQktMSwJCQkJCQkvKiBubyBBQ0wgKi8KKwkJdHJ1ZQogCX0KIH07 CiAKKwogLyoKICAqIFRoaXMgc3RydWN0IG1hcHMgdGhlIHN0cmluZyBvYmpl Y3QgdHlwZXMgYXMgcmV0dXJuZWQgYnkKICAqIGdldE9iamVjdFR5cGVEZXNj cmlwdGlvbiBpbnRvIE9ialR5cGUgZW51bSB2YWx1ZXMuICBOb3RlIHRoYXQg c29tZSBlbnVtCkBAIC02NDAsNiArNjU0LDEwIEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2JqZWN0X3R5cGVfbWFwCiAJLyogT0NMQVNTX1RSQU5TRk9STSAq LwogCXsKIAkJInRyYW5zZm9ybSIsIE9CSkVDVF9UUkFOU0ZPUk0KKwl9LAor CS8qIE9CSkVDVF9TVEFUSVNUSUNTICovCisJeworCQkic3RhdGlzdGljcyIs IE9CSkVDVF9TVEFUSVNUSUNTCiAJfQogfTsKIApAQCAtOTEzLDYgKzkzMSwx MSBAQCBnZXRfb2JqZWN0X2FkZHJlc3MoT2JqZWN0VHlwZSBvYmp0eXBlLCBM aXN0ICpvYmpuYW1lLCBMaXN0ICpvYmphcmdzLAogCQkJCWFkZHJlc3MgPSBn ZXRfb2JqZWN0X2FkZHJlc3NfZGVmYWNsKG9iam5hbWUsIG9iamFyZ3MsCiAJ CQkJCQkJCQkJCQkJbWlzc2luZ19vayk7CiAJCQkJYnJlYWs7CisJCQljYXNl IE9CSkVDVF9TVEFUSVNUSUNTOgorCQkJCWFkZHJlc3MuY2xhc3NJZCA9IE12 U3RhdGlzdGljUmVsYXRpb25JZDsKKwkJCQlhZGRyZXNzLm9iamVjdElkID0g Z2V0X3N0YXRpc3RpY3Nfb2lkKG9iam5hbWUsIG1pc3Npbmdfb2spOworCQkJ CWFkZHJlc3Mub2JqZWN0U3ViSWQgPSAwOworCQkJCWJyZWFrOwogCQkJZGVm YXVsdDoKIAkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9ianR5cGU6 ICVkIiwgKGludCkgb2JqdHlwZSk7CiAJCQkJLyogcGxhY2F0ZSBjb21waWxl ciwgaW4gY2FzZSBpdCB0aGlua3MgZWxvZyBtaWdodCByZXR1cm4gKi8KQEAg LTIxODUsNiArMjIwOCwxMCBAQCBjaGVja19vYmplY3Rfb3duZXJzaGlwKE9p ZCByb2xlaWQsIE9iamVjdFR5cGUgb2JqdHlwZSwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRf UFJJVklMRUdFKSwKIAkJCQkJCSBlcnJtc2coIm11c3QgYmUgc3VwZXJ1c2Vy IikpKTsKIAkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNTOgor CQkJaWYgKCFwZ19zdGF0aXN0aWNzX293bmVyY2hlY2soYWRkcmVzcy5vYmpl Y3RJZCwgcm9sZWlkKSkKKwkJCQlhY2xjaGVja19lcnJvcl90eXBlKEFDTENI RUNLX05PVF9PV05FUiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQlicmVhazsK IAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2Jq ZWN0IHR5cGU6ICVkIiwKIAkJCQkgKGludCkgb2JqdHlwZSk7CkBAIC0zNjEw LDYgKzM2MzcsMTAgQEAgZ2V0T2JqZWN0VHlwZURlc2NyaXB0aW9uKGNvbnN0 IE9iamVjdEFkZHJlc3MgKm9iamVjdCkKIAkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmJ1ZmZlciwgInRyYW5zZm9ybSIpOwogCQkJYnJlYWs7CiAKKwkJ Y2FzZSBPQ0xBU1NfU1RBVElTVElDUzoKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmJ1ZmZlciwgInN0YXRpc3RpY3MiKTsKKwkJCWJyZWFrOworCiAJ CWRlZmF1bHQ6CiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJ1bnJl Y29nbml6ZWQgJXUiLCBvYmplY3QtPmNsYXNzSWQpOwogCQkJYnJlYWs7CkBA IC00NTY2LDYgKzQ1OTcsMjkgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhj b25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJCQl9CiAJCQlicmVhazsK IAorCQljYXNlIE9DTEFTU19TVEFUSVNUSUNTOgorCQkJeworCQkJCUhlYXBU dXBsZQl0dXA7CisJCQkJRm9ybV9wZ19tdl9zdGF0aXN0aWMgZm9ybVN0YXRp c3RpYzsKKwkJCQljaGFyCSAgICpzY2hlbWE7CisKKwkJCQl0dXAgPSBTZWFy Y2hTeXNDYWNoZTEoTVZTVEFUT0lELAorCQkJCQkJCQkJICBPYmplY3RJZEdl dERhdHVtKG9iamVjdC0+b2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHN0YXRpc3RpY3MgJXUiLAorCQkJCQkJIG9iamVjdC0+ b2JqZWN0SWQpOworCQkJCWZvcm1TdGF0aXN0aWMgPSAoRm9ybV9wZ19tdl9z dGF0aXN0aWMpIEdFVFNUUlVDVCh0dXApOworCQkJCXNjaGVtYSA9IGdldF9u YW1lc3BhY2VfbmFtZV9vcl90ZW1wKGZvcm1TdGF0aXN0aWMtPnN0YW5hbWVz cGFjZSk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmZmVyLAor CQkJCQkJCQkJICAgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoc2NoZW1h LAorCQkJCQkJCQkJCQkgICBOYW1lU3RyKGZvcm1TdGF0aXN0aWMtPnN0YW5h bWUpKSk7CisJCQkJaWYgKG9iam5hbWUpCisJCQkJCSpvYmpuYW1lID0gbGlz dF9tYWtlMihzY2hlbWEsCisJCQkJCQkJCQkgICBwc3RyZHVwKE5hbWVTdHIo Zm9ybVN0YXRpc3RpYy0+c3RhbmFtZSkpKTsKKwkJCQlSZWxlYXNlU3lzQ2Fj aGUodHVwKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQlkZWZhdWx0OgogCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAidW5yZWNvZ25pemVkIG9iamVj dCAldSAldSAlZCIsCiAJCQkJCQkJIG9iamVjdC0+Y2xhc3NJZCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCBh YmY5YTcwLi5iOGEyNjRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xNTgsNiArMTU4LDE3IEBAIENSRUFU RSBWSUVXIHBnX2luZGV4ZXMgQVMKICAgICAgICAgIExFRlQgSk9JTiBwZ190 YWJsZXNwYWNlIFQgT04gKFQub2lkID0gSS5yZWx0YWJsZXNwYWNlKQogICAg IFdIRVJFIEMucmVsa2luZCBJTiAoJ3InLCAnbScpIEFORCBJLnJlbGtpbmQg PSAnaSc7CiAKK0NSRUFURSBWSUVXIHBnX212X3N0YXRzIEFTCisgICAgU0VM RUNUCisgICAgICAgIE4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAorICAgICAg ICBDLnJlbG5hbWUgQVMgdGFibGVuYW1lLAorICAgICAgICBTLnN0YW5hbWUg QVMgc3RhbmFtZSwKKyAgICAgICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCisg ICAgICAgIGxlbmd0aChTLnN0YWRlcHMpIGFzIGRlcHNieXRlcywKKyAgICAg ICAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBh cyBkZXBzaW5mbworICAgIEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4g cGdfY2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0YXJlbGlkKSkKKyAgICAgICAg TEVGVCBKT0lOIHBnX25hbWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFt ZXNwYWNlKTsKKwogQ1JFQVRFIFZJRVcgcGdfc3RhdHMgV0lUSCAoc2VjdXJp dHlfYmFycmllcikgQVMKICAgICBTRUxFQ1QKICAgICAgICAgbnNwbmFtZSBB UyBzY2hlbWFuYW1lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpp bmRleCBiMWFjNzA0Li41MTUxMDAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQpAQCAtMTgsOCArMTgsOCBAQCBPQkpTID0gYWdncmVnYXRl Y21kcy5vIGFsdGVyLm8gYW5hbHl6ZS5vIGFzeW5jLm8gY2x1c3Rlci5vIGNv bW1lbnQubyAgXAogCWV2ZW50X3RyaWdnZXIubyBleHBsYWluLm8gZXh0ZW5z aW9uLm8gZm9yZWlnbmNtZHMubyBmdW5jdGlvbmNtZHMubyBcCiAJaW5kZXhj bWRzLm8gbG9ja2NtZHMubyBtYXR2aWV3Lm8gb3BlcmF0b3JjbWRzLm8gb3Bj bGFzc2NtZHMubyBcCiAJcG9saWN5Lm8gcG9ydGFsY21kcy5vIHByZXBhcmUu byBwcm9jbGFuZy5vIFwKLQlzY2hlbWFjbWRzLm8gc2VjbGFiZWwubyBzZXF1 ZW5jZS5vIHRhYmxlY21kcy5vIHRhYmxlc3BhY2UubyB0cmlnZ2VyLm8gXAot CXRzZWFyY2hjbWRzLm8gdHlwZWNtZHMubyB1c2VyLm8gdmFjdXVtLm8gdmFj dXVtbGF6eS5vIFwKLQl2YXJpYWJsZS5vIHZpZXcubworCXNjaGVtYWNtZHMu byBzZWNsYWJlbC5vIHNlcXVlbmNlLm8gc3RhdHNjbWRzLm8gXAorCXRhYmxl Y21kcy5vIHRhYmxlc3BhY2UubyB0cmlnZ2VyLm8gdHNlYXJjaGNtZHMubyB0 eXBlY21kcy5vIFwKKwl1c2VyLm8gdmFjdXVtLm8gdmFjdXVtbGF6eS5vIHZh cmlhYmxlLm8gdmlldy5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5 emUuYwppbmRleCA4YTVmMDdjLi45MDg3NTMyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvYW5hbHl6ZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVk ZSA8bWF0aC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgor I2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwY29udmVydC5oIgog I2luY2x1ZGUgImFjY2Vzcy90dXB0b2FzdGVyLmgiCkBAIC0yNyw2ICsyOCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19pbmhlcml0c19mbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3Rh dGlzdGljLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIK ICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvdGFibGVjbWRzLmgiCkBAIC00NSwxMCArNDcsMTMgQEAKICNp bmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxz L2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2F0dG9wdGNhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1 bS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAi dXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9t dnN0YXRzLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfcnVzYWdlLmgiCiAjaW5j bHVkZSAidXRpbHMvc2FtcGxpbmcuaCIKICNpbmNsdWRlICJ1dGlscy9zb3J0 c3VwcG9ydC5oIgpAQCAtNDYwLDYgKzQ2NSwxOSBAQCBkb19hbmFseXplX3Jl bChSZWxhdGlvbiBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMg KnBhcmFtcywKIAkgKiBhbGwgYW5hbHl6YWJsZSBjb2x1bW5zLiAgV2UgdXNl IGEgbG93ZXIgYm91bmQgb2YgMTAwIHJvd3MgdG8gYXZvaWQKIAkgKiBwb3Nz aWJsZSBvdmVyZmxvdyBpbiBWaXR0ZXIncyBhbGdvcml0aG0uICAoTm90ZTog dGhhdCB3aWxsIGFsc28gYmUgdGhlCiAJICogdGFyZ2V0IGluIHRoZSBjb3Ju ZXIgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gYW5hbHl6YWJsZSBjb2x1bW5z LikKKwkgKgorCSAqIEZJWE1FIFRoaXMgc2FtcGxlIHNpemluZyBpcyBtb3N0 bHkgT0sgd2hlbiBjb21wdXRpbmcgc3RhdHMgZm9yCisJICogICAgICAgaW5k aXZpZHVhbCBjb2x1bW5zLCBidXQgd2hlbiBjb21wdXRpbmcgbXVsdGktdmFy aWF0ZSBzdGF0cworCSAqICAgICAgIGZvciBtdWx0aXZhcmlhdGUgc3RhdHMg KGhpc3RvZ3JhbXMsIG1jdiwgLi4uKSBpdCdzIHJhdGhlcgorCSAqICAgICAg IGluc3VmZmljaWVudC4gRm9yIHN0YXRzIG9uIG11bHRpcGxlIGNvbHVtbnMg LyBjb21wbGV4IHN0YXRzCisJICogICAgICAgd2UgbmVlZCBsYXJnZXIgc2Ft cGxlIHNpemVzLCBiZWNhdXNlIHdlIG5lZWQgdG8gYnVpbGQgbW9yZQorCSAq ICAgICAgIGRldGFpbGVkIHN0YXRzIChtb3JlIE1DViBpdGVtcyAvIGhpc3Rv Z3JhbSBidWNrZXRzKSB0byBnZXQKKwkgKiAgICAgICBnb29kIGFjY3VyYWN5 LiBNYXliZSBpdCdkIGJlIGFwcHJvcHJpYXRlIHRvIHVzZSBzYW1wbGVzCisJ ICogICAgICAgcHJvcG9ydGlvbmFsIHRvIHRoZSB0YWJsZSAoc2F5LCAwLjUl IC0gMSUpIGluc3RlYWQgb2YgYQorCSAqICAgICAgIGZpeGVkIHNpemUgbWln aHQgYmUgbW9yZSBhcHByb3ByaWF0ZS4gQWxzbywgdGhpcyBzaG91bGQgYmUK KwkgKiAgICAgICBib3VuZCB0byB0aGUgcmVxdWVzdGVkIHN0YXRpc3RpY3Mg c2l6ZSAtIGUuZy4gbnVtYmVyIG9mIE1DVgorCSAqICAgICAgIGl0ZW1zIG9y IGhpc3RvZ3JhbSBidWNrZXRzIHNob3VsZCByZXF1aXJlIHNldmVyYWwgc2Ft cGxlCisJICogICAgICAgcm93cyBwZXIgaXRlbS9idWNrZXQgKHNvIHRoZSBz YW1wbGUgc2hvdWxkIGJlIGsqc2l6ZSkuCiAJICovCiAJdGFyZ3Jvd3MgPSAx MDA7CiAJZm9yIChpID0gMDsgaSA8IGF0dHJfY250OyBpKyspCkBAIC01NjIs NiArNTgwLDkgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBp bnQgb3B0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQl1cGRhdGVf YXR0c3RhdHMoUmVsYXRpb25HZXRSZWxpZChJcmVsW2luZF0pLCBmYWxzZSwK IAkJCQkJCQl0aGlzZGF0YS0+YXR0cl9jbnQsIHRoaXNkYXRhLT52YWNhdHRy c3RhdHMpOwogCQl9CisKKwkJLyogQnVpbGQgbXVsdGl2YXJpYXRlIHN0YXRz IChpZiB0aGVyZSBhcmUgYW55KS4gKi8KKwkJYnVpbGRfbXZfc3RhdHMob25l cmVsLCBudW1yb3dzLCByb3dzLCBhdHRyX2NudCwgdmFjYXR0cnN0YXRzKTsK IAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZHJvcGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ryb3BjbWRzLmMK aW5kZXggNTIyMDI3YS4uY2Q2NWI1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZHJvcGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kcm9wY21kcy5jCkBAIC0yOTIsNiArMjkyLDEwIEBAIGRvZXNfbm90 X2V4aXN0X3NraXBwaW5nKE9iamVjdFR5cGUgb2JqdHlwZSwgTGlzdCAqb2Jq bmFtZSwgTGlzdCAqb2JqYXJncykKIAkJCW1zZyA9IGdldHRleHRfbm9vcCgi c2NoZW1hIFwiJXNcIiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmciKTsKIAkJ CW5hbWUgPSBOYW1lTGlzdFRvU3RyaW5nKG9iam5hbWUpOwogCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CisJCQltc2cgPSBnZXR0ZXh0 X25vb3AoInN0YXRpc3RpY3MgXCIlc1wiIGRvZXMgbm90IGV4aXN0LCBza2lw cGluZyIpOworCQkJbmFtZSA9IE5hbWVMaXN0VG9TdHJpbmcob2JqbmFtZSk7 CisJCQlicmVhazsKIAkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CiAJCQlpZiAo IXNjaGVtYV9kb2VzX25vdF9leGlzdF9za2lwcGluZyhvYmpuYW1lLCAmbXNn LCAmbmFtZSkpCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMKaW5kZXggOWUzMmY4ZC4uMDkwNjFiYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAt MTEwLDYgKzExMCw3IEBAIHN0YXRpYyBldmVudF90cmlnZ2VyX3N1cHBvcnRf ZGF0YSBldmVudF90cmlnZ2VyX3N1cHBvcnRbXSA9IHsKIAl7IlNDSEVNQSIs IHRydWV9LAogCXsiU0VRVUVOQ0UiLCB0cnVlfSwKIAl7IlNFUlZFUiIsIHRy dWV9LAorCXsiU1RBVElTVElDUyIsIHRydWV9LAogCXsiVEFCTEUiLCB0cnVl fSwKIAl7IlRBQkxFU1BBQ0UiLCBmYWxzZX0sCiAJeyJUUkFOU0ZPUk0iLCB0 cnVlfSwKQEAgLTExMDYsNiArMTEwNyw3IEBAIEV2ZW50VHJpZ2dlclN1cHBv cnRzT2JqZWN0VHlwZShPYmplY3RUeXBlIG9idHlwZSkKIAkJY2FzZSBPQkpF Q1RfUlVMRToKIAkJY2FzZSBPQkpFQ1RfU0NIRU1BOgogCQljYXNlIE9CSkVD VF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDUzoKIAkJY2Fz ZSBPQkpFQ1RfVEFCQ09OU1RSQUlOVDoKIAkJY2FzZSBPQkpFQ1RfVEFCTEU6 CiAJCWNhc2UgT0JKRUNUX1RSQU5TRk9STToKQEAgLTExNjcsNiArMTE2OSw3 IEBAIEV2ZW50VHJpZ2dlclN1cHBvcnRzT2JqZWN0Q2xhc3MoT2JqZWN0Q2xh c3Mgb2JqY2xhc3MpCiAJCWNhc2UgT0NMQVNTX0RFRkFDTDoKIAkJY2FzZSBP Q0xBU1NfRVhURU5TSU9OOgogCQljYXNlIE9DTEFTU19QT0xJQ1k6CisJCWNh c2UgT0NMQVNTX1NUQVRJU1RJQ1M6CiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4OWJiZQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jCkBA IC0wLDAgKzEsMjY2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBzdGF0c2NtZHMuYworICoJICBDb21tYW5kcyBmb3IgY3Jl YXRpbmcgYW5kIGFsdGVyaW5nIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1h bmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvaW52YWwu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL212c3RhdHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisKKy8qIHVzZWQgZm9yIHNvcnRp bmcgdGhlIGF0dG51bXMgaW4gRXhlY0NyZWF0ZVN0YXRpc3RpY3MgKi8KK3N0 YXRpYyBpbnQgY29tcGFyZV9pbnQxNihjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiKQoreworCXJldHVybiBtZW1jbXAoYSwgYiwgc2l6ZW9mKGludDE2 KSk7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBDUkVBVEUgU1RBVElT VElDUyBuYW1lIE9OIHRhYmxlIChjb2x1bW5zKSBXSVRIIChvcHRpb25zKQor ICoKKyAqIFRPRE8gQ2hlY2sgdGhhdCB0aGUgdHlwZXMgc3VwcG9ydCBzb3J0 LCBhbHRob3VnaCBtYXliZSB3ZSBjYW4gbGl2ZQorICogICAgICB3aXRob3V0 IGl0IChhbmQgb25seSBidWlsZCBNQ1YgbGlzdCAvIGFzc29jaWF0aW9uIHJ1 bGVzKS4KKyAqCisgKiBUT0RPIFRoaXMgc2hvdWxkIHByb2JhYmx5IGNoZWNr IGZvciBkdXBsaWNhdGUgc3RhdHMgKGkuZS4gc2FtZQorICogICAgICBrZXlz LCBzYW1lIG9wdGlvbnMpLiBBbHRob3VnaCBtYXliZSBpdCdzIHVzZWZ1bCB0 byBoYXZlCisgKiAgICAgIG11bHRpcGxlIHN0YXRzIG9uIHRoZSBzYW1lIGNv bHVtbnMgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucworICogICAgICAoc2F5LCBh IGRldGFpbGVkIE1DVi1vbmx5IHN0YXRzIGZvciBzb21lIHF1ZXJpZXMsIGhp c3RvZ3JhbQorICogICAgICBmb3Igb3RoZXJzLCBldGMuKQorICovCitPYmpl Y3RBZGRyZXNzCitDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAq c3RtdCkKK3sKKwlpbnQJCQlpLCBqOworCUxpc3RDZWxsICAgKmw7CisJaW50 MTYJCWF0dG51bXNbSU5ERVhfTUFYX0tFWVNdOworCWludAkJCW51bWNvbHMg PSAwOworCU9iamVjdEFkZHJlc3MJYWRkcmVzcyA9IEludmFsaWRPYmplY3RB ZGRyZXNzOworCWNoYXIJICAgKm5hbWVzdHI7CisJTmFtZURhdGEJc3RhbmFt ZTsKKwlPaWQJCQlzdGF0b2lkOworCU9pZAkJCW5hbWVzcGFjZUlkOworCisJ SGVhcFR1cGxlCWh0dXA7CisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19tdl9z dGF0aXN0aWNdOworCWJvb2wJCW51bGxzW05hdHRzX3BnX212X3N0YXRpc3Rp Y107CisJaW50MnZlY3RvciAqc3Rha2V5czsKKwlSZWxhdGlvbgltdnN0YXRy ZWw7CisJUmVsYXRpb24JcmVsOworCU9iamVjdEFkZHJlc3MgcGFyZW50b2Jq ZWN0LCBjaGlsZG9iamVjdDsKKworCS8qIGJ5IGRlZmF1bHQgYnVpbGQgbm90 aGluZyAqLworCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2llcyA9IGZhbHNlOwor CisJQXNzZXJ0KElzQShzdG10LCBDcmVhdGVTdGF0c1N0bXQpKTsKKworCS8q IHJlc29sdmUgdGhlIHBpZWNlcyBvZiB0aGUgbmFtZSAobmFtZXNwYWNlIGV0 Yy4pICovCisJbmFtZXNwYWNlSWQgPSBRdWFsaWZpZWROYW1lR2V0Q3JlYXRp b25OYW1lc3BhY2Uoc3RtdC0+ZGVmbmFtZXMsICZuYW1lc3RyKTsKKwluYW1l c3RyY3B5KCZzdGFuYW1lLCBuYW1lc3RyKTsKKworCS8qCisJICogSWYgaWZf bm90X2V4aXN0cyB3YXMgZ2l2ZW4gYW5kIHRoZSBzdGF0aXN0aWNzIGFscmVh ZHkgZXhpc3RzLCBiYWlsIG91dC4KKwkgKi8KKwlpZiAoc3RtdC0+aWZfbm90 X2V4aXN0cyAmJgorCQlTZWFyY2hTeXNDYWNoZUV4aXN0czIoTVZTVEFUTkFN RU5TUCwKKwkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgmc3RhbmFtZSksCisJ CQkJCQkJICBPYmplY3RJZEdldERhdHVtKG5hbWVzcGFjZUlkKSkpCisJewor CQllcmVwb3J0KE5PVElDRSwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJ Q0FURV9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpY3MgXCIlc1wi IGFscmVhZHkgZXhpc3RzLCBza2lwcGluZyIsCisJCQkJCQluYW1lc3RyKSkp OworCQlyZXR1cm4gSW52YWxpZE9iamVjdEFkZHJlc3M7CisJfQorCisJcmVs ID0gaGVhcF9vcGVucnYoc3RtdC0+cmVsYXRpb24sIEFjY2Vzc0V4Y2x1c2l2 ZUxvY2spOworCisJLyogdHJhbnNmb3JtIHRoZSBjb2x1bW4gbmFtZXMgdG8g YXR0bnVtIHZhbHVlcyAqLworCisJZm9yZWFjaChsLCBzdG10LT5rZXlzKQor CXsKKwkJY2hhcgkgICAqYXR0bmFtZSA9IHN0clZhbChsZmlyc3QobCkpOwor CQlIZWFwVHVwbGUJYXR0dHVwbGU7CisKKwkJYXR0dHVwbGUgPSBTZWFyY2hT eXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRuYW1l KTsKKworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0dHVwbGUpKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfQ09MVU1OKSwKKwkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiByZWZl cmVuY2VkIGluIHN0YXRpc3RpY3MgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJ CWF0dG5hbWUpKSk7CisKKwkJLyogbW9yZSB0aGFuIE1WSElTVF9NQVhfRElN RU5TSU9OUyBjb2x1bW5zIG5vdCBhbGxvd2VkICovCisJCWlmIChudW1jb2xz ID49IE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5ZX0NPTFVNTlMpLAor CQkJCQkgZXJybXNnKCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJWQga2V5cyBp biBhIHN0YXRpc3RpY3MiLAorCQkJCQkJCU1WU1RBVFNfTUFYX0RJTUVOU0lP TlMpKSk7CisKKwkJYXR0bnVtc1tudW1jb2xzXSA9ICgoRm9ybV9wZ19hdHRy aWJ1dGUpIEdFVFNUUlVDVChhdHR0dXBsZSkpLT5hdHRudW07CisJCVJlbGVh c2VTeXNDYWNoZShhdHR0dXBsZSk7CisJCW51bWNvbHMrKzsKKwl9CisKKwkv KgorCSAqIENoZWNrIHRoZSBsb3dlciBib3VuZCAoYXQgbGVhc3QgMiBjb2x1 bW5zKSwgdGhlIHVwcGVyIGJvdW5kIHdhcworCSAqIGFscmVhZHkgY2hlY2tl ZCBpbiB0aGUgbG9vcC4KKwkgKi8KKwlpZiAobnVtY29scyA8IDIpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5Z X0NPTFVNTlMpLAorCQkJCQkgZXJybXNnKCJtdWx0aXZhcmlhdGUgc3RhdHMg cmVxdWlyZSAyIG9yIG1vcmUgY29sdW1ucyIpKSk7CisKKwkvKiBsb29rIGZv ciBkdXBsaWNpdGllcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1jb2xzOyBp KyspCisJCWZvciAoaiA9IDA7IGogPCBudW1jb2xzOyBqKyspCisJCQlpZiAo KGkgIT0gaikgJiYgKGF0dG51bXNbaV0gPT0gYXR0bnVtc1tqXSkpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX0NPTFVNTiksCisJCQkJCQkgZXJybXNnKCJkdXBsaWNhdGUgY29sdW1u IG5hbWUgaW4gc3RhdGlzdGljcyBkZWZpbml0aW9uIikpKTsKKworCS8qIHBh cnNlIHRoZSBzdGF0aXN0aWNzIG9wdGlvbnMgKi8KKwlmb3JlYWNoIChsLCBz dG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0q KWxmaXJzdChsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImRl cGVuZGVuY2llcyIpID09IDApCisJCQlidWlsZF9kZXBlbmRlbmNpZXMgPSBk ZWZHZXRCb29sZWFuKG9wdCk7CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJ IGVycm1zZygidW5yZWNvZ25pemVkIFNUQVRJU1RJQ1Mgb3B0aW9uIFwiJXNc IiIsCisJCQkJCQkJb3B0LT5kZWZuYW1lKSkpOworCX0KKworCS8qIGNoZWNr IHRoYXQgYXQgbGVhc3Qgc29tZSBzdGF0aXN0aWNzIHdlcmUgcmVxdWVzdGVk ICovCisJaWYgKCEgYnVpbGRfZGVwZW5kZW5jaWVzKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJ CQkgZXJybXNnKCJubyBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVuY2llcykg d2FzIHJlcXVlc3RlZCIpKSk7CisKKwkvKiBzb3J0IHRoZSBhdHRudW1zIGFu ZCBidWlsZCBpbnQydmVjdG9yICovCisJcXNvcnQoYXR0bnVtcywgbnVtY29s cywgc2l6ZW9mKGludDE2KSwgY29tcGFyZV9pbnQxNik7CisJc3Rha2V5cyA9 IGJ1aWxkaW50MnZlY3RvcihhdHRudW1zLCBudW1jb2xzKTsKKworCS8qCisJ ICogT2theSwgbGV0J3MgY3JlYXRlIHRoZSBwZ19tdl9zdGF0aXN0aWMgZW50 cnkuCisJICovCisJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykp OworCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOworCisJ Lyogbm8gc3RhdHMgY29sbGVjdGVkIHlldCwgc28ganVzdCB0aGUga2V5cyAq LworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZC0xXSA9 IE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwl2 YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZSAtMV0gPSBOYW1l R2V0RGF0dW0oJnN0YW5hbWUpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRp c3RpY19zdGFuYW1lc3BhY2UgLTFdID0gT2JqZWN0SWRHZXREYXR1bShuYW1l c3BhY2VJZCk7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW93 bmVyLTFdID0gT2JqZWN0SWRHZXREYXR1bShHZXRVc2VySWQoKSk7CisKKwl2 YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0gPSBQb2lu dGVyR2V0RGF0dW0oc3Rha2V5cyk7CisKKwl2YWx1ZXNbQW51bV9wZ19tdl9z dGF0aXN0aWNfZGVwc19lbmFibGVkIC0xXSA9IEJvb2xHZXREYXR1bShidWls ZF9kZXBlbmRlbmNpZXMpOworCisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhZGVwcyAgLTFdID0gdHJ1ZTsKKworCS8qIGluc2VydCB0aGUgdHVw bGUgaW50byBwZ19tdl9zdGF0aXN0aWMgKi8KKwltdnN0YXRyZWwgPSBoZWFw X29wZW4oTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKworCWh0dXAgPSBoZWFwX2Zvcm1fdHVwbGUobXZzdGF0cmVsLT5yZF9h dHQsIHZhbHVlcywgbnVsbHMpOworCisJc2ltcGxlX2hlYXBfaW5zZXJ0KG12 c3RhdHJlbCwgaHR1cCk7CisKKwlDYXRhbG9nVXBkYXRlSW5kZXhlcyhtdnN0 YXRyZWwsIGh0dXApOworCisJc3RhdG9pZCA9IEhlYXBUdXBsZUdldE9pZCho dHVwKTsKKworCWhlYXBfZnJlZXR1cGxlKGh0dXApOworCisKKwkvKgorCSAq IFN0b3JlIGEgZGVwZW5kZW5jeSB0b28sIHNvIHRoYXQgc3RhdGlzdGljcyBh cmUgZHJvcHBlZCBvbiBEUk9QIFRBQkxFCisJICovCisJcGFyZW50b2JqZWN0 LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJcGFyZW50b2JqZWN0 Lm9iamVjdElkID0gT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCXBhcmVudG9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJY2hp bGRvYmplY3QuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVsYXRpb25JZDsKKwlj aGlsZG9iamVjdC5vYmplY3RJZCA9IHN0YXRvaWQ7CisJY2hpbGRvYmplY3Qu b2JqZWN0U3ViSWQgPSAwOworCisJcmVjb3JkRGVwZW5kZW5jeU9uKCZjaGls ZG9iamVjdCwgJnBhcmVudG9iamVjdCwgREVQRU5ERU5DWV9BVVRPKTsKKwor CS8qCisJICogQWxzbyByZWNvcmQgZGVwZW5kZW5jeSBvbiB0aGUgc2NoZW1h ICh0byBkcm9wIHN0YXRpc3RpY3Mgb24gRFJPUCBTQ0hFTUEpCisJICovCisJ cGFyZW50b2JqZWN0LmNsYXNzSWQgPSBOYW1lc3BhY2VSZWxhdGlvbklkOwor CXBhcmVudG9iamVjdC5vYmplY3RJZCA9IE9iamVjdElkR2V0RGF0dW0obmFt ZXNwYWNlSWQpOworCXBhcmVudG9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJ Y2hpbGRvYmplY3QuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVsYXRpb25JZDsK KwljaGlsZG9iamVjdC5vYmplY3RJZCA9IHN0YXRvaWQ7CisJY2hpbGRvYmpl Y3Qub2JqZWN0U3ViSWQgPSAwOworCisJcmVjb3JkRGVwZW5kZW5jeU9uKCZj aGlsZG9iamVjdCwgJnBhcmVudG9iamVjdCwgREVQRU5ERU5DWV9BVVRPKTsK KworCisJaGVhcF9jbG9zZShtdnN0YXRyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJLyoKKwkg KiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgb3RoZXJzIHNlZSB0aGUg bmV3IHN0YXRpc3RpY3MuCisJICovCisJQ2FjaGVJbnZhbGlkYXRlUmVsY2Fj aGUocmVsKTsKKworCU9iamVjdEFkZHJlc3NTZXQoYWRkcmVzcywgTXZTdGF0 aXN0aWNSZWxhdGlvbklkLCBzdGF0b2lkKTsKKworCXJldHVybiBhZGRyZXNz OworfQorCisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBEUk9QIFNUQVRJU1RJ Q1MKKyAqCisgKiAgICAgRFJPUCBTVEFUSVNUSUNTIHN0YXRzX25hbWUgT04g dGFibGVfbmFtZQorICoKKyAqIFRoZSBmaXJzdCBvbmUgcmVxdWlyZXMgYW4g ZXhhY3QgbWF0Y2gsIHRoZSBzZWNvbmQgb25lIGp1c3QgZHJvcHMKKyAqIGFs bCB0aGUgc3RhdGlzdGljcyBvbiBhIHRhYmxlLgorICovCit2b2lkCitSZW1v dmVTdGF0aXN0aWNzQnlJZChPaWQgc3RhdHNPaWQpCit7CisJUmVsYXRpb24J cmVsYXRpb247CisJSGVhcFR1cGxlCXR1cDsKKworCS8qCisJICogRGVsZXRl IHRoZSBwZ19wcm9jIHR1cGxlLgorCSAqLworCXJlbGF0aW9uID0gaGVhcF9v cGVuKE12U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZTVEFUT0lELCBPYmplY3RJ ZEdldERhdHVtKHN0YXRzT2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cCkpIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0aWNzICV1Iiwgc3Rh dHNPaWQpOworCisJc2ltcGxlX2hlYXBfZGVsZXRlKHJlbGF0aW9uLCAmdHVw LT50X3NlbGYpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwloZWFw X2Nsb3NlKHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZGY3YzJmYS4uM2I3Yzg3 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTQxMjQs NiArNDEyNCwyMCBAQCBfY29weUFsdGVyUG9saWN5U3RtdChjb25zdCBBbHRl clBvbGljeVN0bXQgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKK3N0 YXRpYyBDcmVhdGVTdGF0c1N0bXQgKgorX2NvcHlDcmVhdGVTdGF0c1N0bXQo Y29uc3QgQ3JlYXRlU3RhdHNTdG10ICpmcm9tKQoreworCUNyZWF0ZVN0YXRz U3RtdCAgKm5ld25vZGUgPSBtYWtlTm9kZShDcmVhdGVTdGF0c1N0bXQpOwor CisJQ09QWV9OT0RFX0ZJRUxEKGRlZm5hbWVzKTsKKwlDT1BZX05PREVfRklF TEQocmVsYXRpb24pOworCUNPUFlfTk9ERV9GSUVMRChrZXlzKTsKKwlDT1BZ X05PREVfRklFTEQob3B0aW9ucyk7CisJQ09QWV9TQ0FMQVJfRklFTEQoaWZf bm90X2V4aXN0cyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogICoJCQkJCXBnX2xpc3QuaCBjb3B5IGZ1bmN0 aW9ucwogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDk5OSw2ICs1MDEz LDkgQEAgY29weU9iamVjdChjb25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRf Q29tbW9uVGFibGVFeHByOgogCQkJcmV0dmFsID0gX2NvcHlDb21tb25UYWJs ZUV4cHIoZnJvbSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX0NyZWF0ZVN0YXRz U3RtdDoKKwkJCXJldHZhbCA9IF9jb3B5Q3JlYXRlU3RhdHNTdG10KGZyb20p OworCQkJYnJlYWs7CiAJCWNhc2UgVF9GdW5jV2l0aEFyZ3M6CiAJCQlyZXR2 YWwgPSBfY29weUZ1bmNXaXRoQXJncyhmcm9tKTsKIAkJCWJyZWFrOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggZWIwZmMxZS4uMDcyMDZk NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwor KysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yMTUzLDYg KzIxNTMsMjEgQEAgX291dEluZGV4T3B0SW5mbyhTdHJpbmdJbmZvIHN0ciwg Y29uc3QgSW5kZXhPcHRJbmZvICpub2RlKQogfQogCiBzdGF0aWMgdm9pZAor X291dE1WU3RhdGlzdGljSW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgTVZT dGF0aXN0aWNJbmZvICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiTVZT VEFUSVNUSUNJTkZPIik7CisKKwkvKiBOQjogdGhpcyBpc24ndCBhIGNvbXBs ZXRlIHNldCBvZiBmaWVsZHMgKi8KKwlXUklURV9PSURfRklFTEQobXZvaWQp OworCisJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCisJV1JJVEVfQk9PTF9G SUVMRChkZXBzX2VuYWJsZWQpOworCisJLyogYnVpbHQvYXZhaWxhYmxlIHN0 YXRpc3RpY3MgKi8KKwlXUklURV9CT09MX0ZJRUxEKGRlcHNfYnVpbHQpOwor fQorCitzdGF0aWMgdm9pZAogX291dEVxdWl2YWxlbmNlQ2xhc3MoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IEVxdWl2YWxlbmNlQ2xhc3MgKm5vZGUpCiB7CiAJ LyoKQEAgLTM2MzYsNiArMzY1MSw5IEBAIF9vdXROb2RlKFN0cmluZ0luZm8g c3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNlIFRfUGxhbm5lclBhcmFt SXRlbToKIAkJCQlfb3V0UGxhbm5lclBhcmFtSXRlbShzdHIsIG9iaik7CiAJ CQkJYnJlYWs7CisJCQljYXNlIFRfTVZTdGF0aXN0aWNJbmZvOgorCQkJCV9v dXRNVlN0YXRpc3RpY0luZm8oc3RyLCBvYmopOworCQkJCWJyZWFrOwogCiAJ CQljYXNlIFRfRXh0ZW5zaWJsZU5vZGU6CiAJCQkJX291dEV4dGVuc2libGVO b2RlKHN0ciwgb2JqKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYwppbmRleCBhZDcxNWJiLi43ZmIyMDg4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0y OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5Lmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9oZWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGlj LmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKQEAg LTQwLDcgKzQxLDkgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKQEAgLTk0LDYgKzk3LDcgQEAg Z2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxh dGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAlSZWxhdGlvbglyZWxh dGlvbjsKIAlib29sCQloYXNpbmRleDsKIAlMaXN0CSAgICppbmRleGluZm9z ID0gTklMOworCUxpc3QJICAgKnN0YWluZm9zID0gTklMOwogCiAJLyoKIAkg KiBXZSBuZWVkIG5vdCBsb2NrIHRoZSByZWxhdGlvbiBzaW5jZSBpdCB3YXMg YWxyZWFkeSBsb2NrZWQsIGVpdGhlciBieQpAQCAtMzg3LDYgKzM5MSw2MSBA QCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJl bGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCiAJcmVsLT5pbmRl eGxpc3QgPSBpbmRleGluZm9zOwogCisJaWYgKHRydWUpCisJeworCQlMaXN0 CSAgICptdnN0YXRvaWRsaXN0OworCQlMaXN0Q2VsbCAgICpsOworCisJCW12 c3RhdG9pZGxpc3QgPSBSZWxhdGlvbkdldE1WU3RhdExpc3QocmVsYXRpb24p OworCisJCWZvcmVhY2gobCwgbXZzdGF0b2lkbGlzdCkKKwkJeworCQkJQXJy YXlUeXBlICAqYXJyOworCQkJRGF0dW0JCWFkYXR1bTsKKwkJCWJvb2wJCWlz bnVsbDsKKwkJCU9pZAkJCW12b2lkID0gbGZpcnN0X29pZChsKTsKKwkJCUZv cm1fcGdfbXZfc3RhdGlzdGljIG12c3RhdDsKKwkJCU1WU3RhdGlzdGljSW5m byAqaW5mbzsKKworCQkJSGVhcFR1cGxlCWh0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoTVZTVEFUT0lELCBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7CisKKwkJ CW12c3RhdCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0 dXApOworCisJCQkvKiB1bmF2YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVy ZXN0aW5nIGZvciB0aGUgcGxhbm5lciAqLworCQkJaWYgKG12c3RhdC0+ZGVw c19idWlsdCkKKwkJCXsKKwkJCQlpbmZvID0gbWFrZU5vZGUoTVZTdGF0aXN0 aWNJbmZvKTsKKworCQkJCWluZm8tPm12b2lkID0gbXZvaWQ7CisJCQkJaW5m by0+cmVsID0gcmVsOworCisJCQkJLyogZW5hYmxlZCBzdGF0aXN0aWNzICov CisJCQkJaW5mby0+ZGVwc19lbmFibGVkID0gbXZzdGF0LT5kZXBzX2VuYWJs ZWQ7CisKKwkJCQkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwor CQkJCWluZm8tPmRlcHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CisK KwkJCQkvKiBzdGFrZXlzICovCisJCQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCQkJCQkgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3Rha2V5cywgJmlzbnVsbCk7CisJCQkJQXNzZXJ0KCFpc251 bGwpOworCisJCQkJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7 CisKKwkJCQlpbmZvLT5zdGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKChpbnQx NiAqKSBBUlJfREFUQV9QVFIoYXJyKSwKKwkJCQkJCQkJCQkJCUFSUl9ESU1T KGFycilbMF0pOworCisJCQkJc3RhaW5mb3MgPSBsY29ucyhpbmZvLCBzdGFp bmZvcyk7CisJCQl9CisKKwkJCVJlbGVhc2VTeXNDYWNoZShodHVwKTsKKwkJ fQorCisJCWxpc3RfZnJlZShtdnN0YXRvaWRsaXN0KTsKKwl9CisKKwlyZWwt Pm12c3RhdGxpc3QgPSBzdGFpbmZvczsKKwogCS8qIEdyYWIgZm9yZWlnbi10 YWJsZSBpbmZvIHVzaW5nIHRoZSByZWxjYWNoZSwgd2hpbGUgd2UgaGF2ZSBp dCAqLwogCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfRk9SRUlHTl9UQUJMRSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpp bmRleCBiMzA3YjQ4Li4zYmUzZjAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywg Tm9kZSAqcXVlcnkpOwogCQlDb25zdHJhaW50c1NldFN0bXQgQ29weVN0bXQg Q3JlYXRlQXNTdG10IENyZWF0ZUNhc3RTdG10CiAJCUNyZWF0ZURvbWFpblN0 bXQgQ3JlYXRlRXh0ZW5zaW9uU3RtdCBDcmVhdGVHcm91cFN0bXQgQ3JlYXRl T3BDbGFzc1N0bXQKIAkJQ3JlYXRlT3BGYW1pbHlTdG10IEFsdGVyT3BGYW1p bHlTdG10IENyZWF0ZVBMYW5nU3RtdAotCQlDcmVhdGVTY2hlbWFTdG10IENy ZWF0ZVNlcVN0bXQgQ3JlYXRlU3RtdCBDcmVhdGVUYWJsZVNwYWNlU3RtdAor CQlDcmVhdGVTY2hlbWFTdG10IENyZWF0ZVNlcVN0bXQgQ3JlYXRlU3RtdCBD cmVhdGVTdGF0c1N0bXQgQ3JlYXRlVGFibGVTcGFjZVN0bXQKIAkJQ3JlYXRl RmR3U3RtdCBDcmVhdGVGb3JlaWduU2VydmVyU3RtdCBDcmVhdGVGb3JlaWdu VGFibGVTdG10CiAJCUNyZWF0ZUFzc2VydFN0bXQgQ3JlYXRlVHJhbnNmb3Jt U3RtdCBDcmVhdGVUcmlnU3RtdCBDcmVhdGVFdmVudFRyaWdTdG10CiAJCUNy ZWF0ZVVzZXJTdG10IENyZWF0ZVVzZXJNYXBwaW5nU3RtdCBDcmVhdGVSb2xl U3RtdCBDcmVhdGVQb2xpY3lTdG10CkBAIC04MDksNiArODA5LDcgQEAgc3Rt dCA6CiAJCQl8IENyZWF0ZVNjaGVtYVN0bXQKIAkJCXwgQ3JlYXRlU2VxU3Rt dAogCQkJfCBDcmVhdGVTdG10CisJCQl8IENyZWF0ZVN0YXRzU3RtdAogCQkJ fCBDcmVhdGVUYWJsZVNwYWNlU3RtdAogCQkJfCBDcmVhdGVUcmFuc2Zvcm1T dG10CiAJCQl8IENyZWF0ZVRyaWdTdG10CkBAIC0zNDM2LDYgKzM0MzcsMzYg QEAgT3B0Q29uc1RhYmxlU3BhY2U6ICAgVVNJTkcgSU5ERVggVEFCTEVTUEFD RSBuYW1lCXsgJCQgPSAkNDsgfQogRXhpc3RpbmdJbmRleDogICBVU0lORyBJ TkRFWCBpbmRleF9uYW1lCQkJCXsgJCQgPSAkMzsgfQogCQk7CiAKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQlRVUVSWSA6 CisgKgkJCQlDUkVBVEUgU1RBVElTVElDUyBzdGF0c19uYW1lIE9OIHJlbG5h bWUgKGNvbHVtbnMpIFdJVEggKG9wdGlvbnMpCisgKgorICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisKK0NyZWF0ZVN0YXRzU3RtdDoJ Q1JFQVRFIFNUQVRJU1RJQ1MgYW55X25hbWUgT04gcXVhbGlmaWVkX25hbWUg JygnIGNvbHVtbkxpc3QgJyknIG9wdF9yZWxvcHRpb25zCisJCQkJCQl7CisJ CQkJCQkJQ3JlYXRlU3RhdHNTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlU3Rh dHNTdG10KTsKKwkJCQkJCQluLT5kZWZuYW1lcyA9ICQzOworCQkJCQkJCW4t PnJlbGF0aW9uID0gJDU7CisJCQkJCQkJbi0+a2V5cyA9ICQ3OworCQkJCQkJ CW4tPm9wdGlvbnMgPSAkOTsKKwkJCQkJCQluLT5pZl9ub3RfZXhpc3RzID0g ZmFsc2U7CisJCQkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJCQl9CisJCQkJ CXwgQ1JFQVRFIFNUQVRJU1RJQ1MgSUZfUCBOT1QgRVhJU1RTIGFueV9uYW1l IE9OIHF1YWxpZmllZF9uYW1lICcoJyBjb2x1bW5MaXN0ICcpJyBvcHRfcmVs b3B0aW9ucworCQkJCQkJeworCQkJCQkJCUNyZWF0ZVN0YXRzU3RtdCAqbiA9 IG1ha2VOb2RlKENyZWF0ZVN0YXRzU3RtdCk7CisJCQkJCQkJbi0+ZGVmbmFt ZXMgPSAkNjsKKwkJCQkJCQluLT5yZWxhdGlvbiA9ICQ4OworCQkJCQkJCW4t PmtleXMgPSAkMTA7CisJCQkJCQkJbi0+b3B0aW9ucyA9ICQxMjsKKwkJCQkJ CQluLT5pZl9ub3RfZXhpc3RzID0gdHJ1ZTsKKwkJCQkJCQkkJCA9IChOb2Rl ICopbjsKKwkJCQkJCX0KKwkJCTsKKwogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKICAqCkBAIC01NjIxLDYgKzU2NTIsNyBAQCBkcm9w X3R5cGU6CVRBQkxFCQkJCQkJCQkJeyAkJCA9IE9CSkVDVF9UQUJMRTsgfQog CQkJfCBURVhUX1AgU0VBUkNIIERJQ1RJT05BUlkJCQkJeyAkJCA9IE9CSkVD VF9UU0RJQ1RJT05BUlk7IH0KIAkJCXwgVEVYVF9QIFNFQVJDSCBURU1QTEFU RQkJCQl7ICQkID0gT0JKRUNUX1RTVEVNUExBVEU7IH0KIAkJCXwgVEVYVF9Q IFNFQVJDSCBDT05GSUdVUkFUSU9OCQkJeyAkJCA9IE9CSkVDVF9UU0NPTkZJ R1VSQVRJT047IH0KKwkJCXwgU1RBVElTVElDUwkJCQkJCQl7ICQkID0gT0JK RUNUX1NUQVRJU1RJQ1M7IH0KIAkJOwogCiBhbnlfbmFtZV9saXN0OgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAwNDVmN2YwLi4yYmE4OGUyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTUyMCw2ICsxNTIwLDEw IEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhOb2RlICpwYXJzZXRyZWUsCiAJCQkJ YWRkcmVzcyA9IEV4ZWNTZWNMYWJlbFN0bXQoKFNlY0xhYmVsU3RtdCAqKSBw YXJzZXRyZWUpOwogCQkJCWJyZWFrOwogCisJCQljYXNlIFRfQ3JlYXRlU3Rh dHNTdG10OgkvKiBDUkVBVEUgU1RBVElTVElDUyAqLworCQkJCWFkZHJlc3Mg PSBDcmVhdGVTdGF0aXN0aWNzKChDcmVhdGVTdGF0c1N0bXQgKikgcGFyc2V0 cmVlKTsKKwkJCQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAkJCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAogCQkJCQkgKGlu dCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKQEAgLTIxNjAsNiArMjE2NCw5IEBA IENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKQogCQkJCWNhc2Ug T0JKRUNUX1RSQU5TRk9STToKIAkJCQkJdGFnID0gIkRST1AgVFJBTlNGT1JN IjsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSBPQkpFQ1RfU1RBVElTVElDUzoK KwkJCQkJdGFnID0gIkRST1AgU1RBVElTVElDUyI7CisJCQkJCWJyZWFrOwog CQkJCWRlZmF1bHQ6CiAJCQkJCXRhZyA9ICI/Pz8iOwogCQkJfQpAQCAtMjUy Nyw2ICsyNTM0LDEwIEBAIENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0 cmVlKQogCQkJdGFnID0gIkVYRUNVVEUiOwogCQkJYnJlYWs7CiAKKwkJY2Fz ZSBUX0NyZWF0ZVN0YXRzU3RtdDoKKwkJCXRhZyA9ICJDUkVBVEUgU1RBVElT VElDUyI7CisJCQlicmVhazsKKwogCQljYXNlIFRfRGVhbGxvY2F0ZVN0bXQ6 CiAJCQl7CiAJCQkJRGVhbGxvY2F0ZVN0bXQgKnN0bXQgPSAoRGVhbGxvY2F0 ZVN0bXQgKikgcGFyc2V0cmVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9NYWtlZmlsZQpp bmRleCA4Mzc0NTMzLi5lYmEwMzUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9NYWtl ZmlsZQpAQCAtOSw3ICs5LDcgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4K IGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwK IAogT0JKUyAgICAgICAgPSBmbWdydGFiLm8KLVNVQkRJUlMgICAgID0gYWR0 IGNhY2hlIGVycm9yIGZtZ3IgaGFzaCBpbml0IG1iIG1pc2MgbW1nciByZXNv d25lciBzb3J0IHRpbWUKK1NVQkRJUlMgICAgID0gYWR0IGNhY2hlIGVycm9y IGZtZ3IgaGFzaCBpbml0IG1iIG1pc2MgbW1nciBtdnN0YXRzIHJlc293bmVy IHNvcnQgdGltZQogCiAjIGxvY2F0aW9uIG9mIENhdGFsb2cucG0KIGNhdGFs b2dkaXIgID0gJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jYXRhbG9nCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAx MzBjMDZkLi4zYmM0YzhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3JlbGNhY2hlLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL3BnX2F1dGhfbWVtYmVycy5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJh c2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19w cm9jLmgiCkBAIC0zOTU2LDYgKzM5NTcsNjIgQEAgUmVsYXRpb25HZXRJbmRl eExpc3QoUmVsYXRpb24gcmVsYXRpb24pCiAJcmV0dXJuIHJlc3VsdDsKIH0K IAorCitMaXN0ICoKK1JlbGF0aW9uR2V0TVZTdGF0TGlzdChSZWxhdGlvbiBy ZWxhdGlvbikKK3sKKwlSZWxhdGlvbglpbmRyZWw7CisJU3lzU2NhbkRlc2Mg aW5kc2NhbjsKKwlTY2FuS2V5RGF0YSBza2V5OworCUhlYXBUdXBsZQlodHVw OworCUxpc3QJICAgKnJlc3VsdDsKKwlMaXN0CSAgICpvbGRsaXN0OworCU1l bW9yeUNvbnRleHQgb2xkY3h0OworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBh bHJlYWR5IGNvbXB1dGVkIHRoZSBsaXN0LiAqLworCWlmIChyZWxhdGlvbi0+ cmRfbXZzdGF0dmFsaWQgIT0gMCkKKwkJcmV0dXJuIGxpc3RfY29weShyZWxh dGlvbi0+cmRfbXZzdGF0bGlzdCk7CisKKwkvKgorCSAqIFdlIGJ1aWxkIHRo ZSBsaXN0IHdlIGludGVuZCB0byByZXR1cm4gKGluIHRoZSBjYWxsZXIncyBj b250ZXh0KSB3aGlsZQorCSAqIGRvaW5nIHRoZSBzY2FuLiAgQWZ0ZXIgc3Vj Y2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIHNjYW4sIHdlIGNvcHkgdGhhdAor CSAqIGxpc3QgaW50byB0aGUgcmVsY2FjaGUgZW50cnkuICBUaGlzIGF2b2lk cyBjYWNoZS1jb250ZXh0IG1lbW9yeSBsZWFrYWdlCisJICogaWYgd2UgZ2V0 IHNvbWUgc29ydCBvZiBlcnJvciBwYXJ0d2F5IHRocm91Z2guCisJICovCisJ cmVzdWx0ID0gTklMOworCisJLyogUHJlcGFyZSB0byBzY2FuIHBnX2luZGV4 IGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9IHRoaXMgcmVsLiAqLwor CVNjYW5LZXlJbml0KCZza2V5LAorCQkJCUFudW1fcGdfbXZfc3RhdGlzdGlj X3N0YXJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVs YXRpb24pKSk7CisKKwlpbmRyZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNS ZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWluZHNjYW4gPSBzeXN0 YWJsZV9iZWdpbnNjYW4oaW5kcmVsLCBNdlN0YXRpc3RpY1JlbGlkSW5kZXhJ ZCwgdHJ1ZSwKKwkJCQkJCQkJIE5VTEwsIDEsICZza2V5KTsKKworCXdoaWxl IChIZWFwVHVwbGVJc1ZhbGlkKGh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KGlu ZHNjYW4pKSkKKwkJLyogVE9ETyBtYXliZSBpbmNsdWRlIG9ubHkgYWxyZWFk eSBidWlsdCBzdGF0aXN0aWNzPyAqLworCQlyZXN1bHQgPSBpbnNlcnRfb3Jk ZXJlZF9vaWQocmVzdWx0LCBIZWFwVHVwbGVHZXRPaWQoaHR1cCkpOworCisJ c3lzdGFibGVfZW5kc2NhbihpbmRzY2FuKTsKKworCWhlYXBfY2xvc2UoaW5k cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogTm93IHNhdmUgYSBjb3B5 IG9mIHRoZSBjb21wbGV0ZWQgbGlzdCBpbiB0aGUgcmVsY2FjaGUgZW50cnku ICovCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVt b3J5Q29udGV4dCk7CisJb2xkbGlzdCA9IHJlbGF0aW9uLT5yZF9tdnN0YXRs aXN0OworCXJlbGF0aW9uLT5yZF9tdnN0YXRsaXN0ID0gbGlzdF9jb3B5KHJl c3VsdCk7CisKKwlyZWxhdGlvbi0+cmRfbXZzdGF0dmFsaWQgPSB0cnVlOwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJLyogRG9uJ3Qg bGVhayB0aGUgb2xkIGxpc3QsIGlmIHRoZXJlIGlzIG9uZSAqLworCWxpc3Rf ZnJlZShvbGRsaXN0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAg KiBpbnNlcnRfb3JkZXJlZF9vaWQKICAqCQlJbnNlcnQgYSBuZXcgT2lkIGlu dG8gYSBzb3J0ZWQgbGlzdCBvZiBPaWRzLCBwcmVzZXJ2aW5nIG9yZGVyaW5n CkBAIC00OTIwLDYgKzQ5NzcsOCBAQCBsb2FkX3JlbGNhY2hlX2luaXRfZmls ZShib29sIHNoYXJlZCkKIAkJcmVsLT5yZF9pbmRleGF0dHIgPSBOVUxMOwog CQlyZWwtPnJkX2tleWF0dHIgPSBOVUxMOwogCQlyZWwtPnJkX2lkYXR0ciA9 IE5VTEw7CisJCXJlbC0+cmRfbXZzdGF0dmFsaWQgPSBmYWxzZTsKKwkJcmVs LT5yZF9tdnN0YXRsaXN0ID0gTklMOwogCQlyZWwtPnJkX2NyZWF0ZVN1Ymlk ID0gSW52YWxpZFN1YlRyYW5zYWN0aW9uSWQ7CiAJCXJlbC0+cmRfbmV3UmVs ZmlsZW5vZGVTdWJpZCA9IEludmFsaWRTdWJUcmFuc2FjdGlvbklkOwogCQly ZWwtPnJkX2FtY2FjaGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3N5c2NhY2hlLmMKaW5kZXggNjVmZmU4NC4uM2MxYmM0YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9zeXNjYWNoZS5jCkBAIC00 NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3Nl cnZlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl90YWJsZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNs YXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgpAQCAt NTAyLDYgKzUwMywyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNhY2hlZGVz YyBjYWNoZWluZm9bXSA9IHsKIAkJfSwKIAkJNAogCX0sCisJe012U3RhdGlz dGljUmVsYXRpb25JZCwJCS8qIE1WU1RBVE5BTUVOU1AgKi8KKwkJTXZTdGF0 aXN0aWNOYW1lSW5kZXhJZCwKKwkJMiwKKwkJeworCQkJQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhbmFtZSwKKwkJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YW5hbWVzcGFjZSwKKwkJCTAsCisJCQkwCisJCX0sCisJCTQKKwl9LAorCXtN dlN0YXRpc3RpY1JlbGF0aW9uSWQsCQkvKiBNVlNUQVRPSUQgKi8KKwkJTXZT dGF0aXN0aWNPaWRJbmRleElkLAorCQkxLAorCQl7CisJCQlPYmplY3RJZEF0 dHJpYnV0ZU51bWJlciwKKwkJCTAsCisJCQkwLAorCQkJMAorCQl9LAorCQk0 CisJfSwKIAl7TmFtZXNwYWNlUmVsYXRpb25JZCwJCS8qIE5BTUVTUEFDRU5B TUUgKi8KIAkJTmFtZXNwYWNlTmFtZUluZGV4SWQsCiAJCTEsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlmMWVkCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpAQCAt MCwwICsxLDE3IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciB1dGlscy9tdnN0 YXRzCisjCisjIElERU5USUZJQ0FUSU9OCisjICAgIHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvTWFrZWZpbGUKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisKK3N1YmRpciA9IHNyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBjb21t b24ubyBkZXBlbmRlbmNpZXMubworCitpbmNsdWRlICQodG9wX3NyY2Rpcikv c3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL1JFQURNRS5kZXBlbmRlbmNpZXMgYi9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5kZXBlbmRlbmNpZXMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5NmZiYwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1F LmRlcGVuZGVuY2llcwpAQCAtMCwwICsxLDIyMiBAQAorU29mdCBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcworPT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorCitBIHR5cGUgb2YgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgdXNlZCB0 byBjYXB0dXJlIGNhc2VzIHdoZW4gb25lIGNvbHVtbiAob3IKK3Bvc3NpYmx5 IGEgY29tYmluYXRpb24gb2YgY29sdW1ucykgZGV0ZXJtaW5lcyB2YWx1ZXMg aW4gYW5vdGhlciBjb2x1bW4uIFdlIG1heQorYWxzbyBzYXkgdGhhdCBvbmUg Y29sdW1uIGltcGxpZXMgdGhlIG90aGVyIG9uZS4KKworQSBzaW1wbGUgYXJ0 aWZpY2lhbCBleGFtcGxlIG1heSBiZSBhIHRhYmxlIHdpdGggdHdvIGNvbHVt bnMsIGNyZWF0ZWQgbGlrZSB0aGlzCisKKyAgICBDUkVBVEUgVEFCTEUgdCAo YSBJTlQsIGIgSU5UKQorICAgICAgICBBUyBTRUxFQ1QgaSwgaS8xMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgcyhpKTsKKworQ2xlYXJseSwg b25jZSB3ZSBrbm93IHRoZSB2YWx1ZSBmb3IgY29sdW1uICdhJyB0aGUgdmFs dWUgZm9yICdiJyBpcyB0cml2aWFsbHkKK2RldGVybWluZWQsIGFzIGl0J3Mg c2ltcGx5IChhLzEwKS4gQSBtb3JlIHByYWN0aWNhbCBleGFtcGxlIG1heSBi ZSBhZGRyZXNzZXMsCit3aGVyZSAoWklQIGNvZGUgLT4gY2l0eSBuYW1lKSwg aS5lLiBvbmNlIHdlIGtub3cgdGhlIFpJUCwgd2UgcHJvYmFibHkga25vdyB0 aGUKK2NpdHkgaXQgYmVsb25ncyB0bywgYXMgWklQIGNvZGVzIGFyZSB1c3Vh bGx5IGFzc2lnbmVkIHRvIG9uZSBjaXR5LiBMYXJnZXIgY2l0aWVzCittYXkg aGF2ZSBtdWx0aXBsZSBaSVAgY29kZXMsIHNvIHRoZSBkZXBlbmRlbmN5IGNh bid0IGJlIHJldmVyc2VkLgorCitGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBh cmUgYSBjb25jZXB0IHdlbGwgZGVzY3JpYmVkIGluIHJlbGF0aW9uYWwgdGhl b3J5LAorcGFydGljdWxhcmx5IGluIGRlZmluaXRpb24gb2Ygbm9ybWFsaXph dGlvbiBhbmQgIm5vcm1hbCBmb3JtcyIuIFdpa2lwZWRpYSBoYXMgYQorbmlj ZSBkZWZpbml0aW9uIG9mIGEgZnVuY3Rpb25hbCBkZXBlbmRlbmN5IFsxXToK KworICAgIEluIGEgZ2l2ZW4gdGFibGUsIGFuIGF0dHJpYnV0ZSBZIGlzIHNh aWQgdG8gaGF2ZSBhIGZ1bmN0aW9uYWwgZGVwZW5kZW5jeSBvbgorICAgIGEg c2V0IG9mIGF0dHJpYnV0ZXMgWCAod3JpdHRlbiBYIC0+IFkpIGlmIGFuZCBv bmx5IGlmIGVhY2ggWCB2YWx1ZSBpcworICAgIGFzc29jaWF0ZWQgd2l0aCBw cmVjaXNlbHkgb25lIFkgdmFsdWUuIEZvciBleGFtcGxlLCBpbiBhbiAiRW1w bG95ZWUiIHRhYmxlCisgICAgdGhhdCBpbmNsdWRlcyB0aGUgYXR0cmlidXRl cyAiRW1wbG95ZWUgSUQiIGFuZCAiRW1wbG95ZWUgRGF0ZSBvZiBCaXJ0aCIs IHRoZQorICAgIGZ1bmN0aW9uYWwgZGVwZW5kZW5jeSB7RW1wbG95ZWUgSUR9 IC0+IHtFbXBsb3llZSBEYXRlIG9mIEJpcnRofSB3b3VsZCBob2xkLgorICAg IEl0IGZvbGxvd3MgZnJvbSB0aGUgcHJldmlvdXMgdHdvIHNlbnRlbmNlcyB0 aGF0IGVhY2gge0VtcGxveWVlIElEfSBpcworICAgIGFzc29jaWF0ZWQgd2l0 aCBwcmVjaXNlbHkgb25lIHtFbXBsb3llZSBEYXRlIG9mIEJpcnRofS4KKwor ICAgIFsxXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFiYXNl X25vcm1hbGl6YXRpb24KKworTWFueSBkYXRhc2V0cyBtaWdodCBiZSBub3Jt YWxpemVkIG5vdCB0byBjb250YWluIHN1Y2ggZGVwZW5kZW5jaWVzLCBidXQg b2Z0ZW4KK2l0J3Mgbm90IHByYWN0aWNhbCBmb3IgdmFyaW91cyByZWFzb25z LiBJbiBzb21lIGNhc2VzIGl0J3MgYWN0dWFsbHkgYSBjb25zY2lvdXMKK2Rl c2lnbiBjaG9pY2UgdG8gbW9kZWwgdGhlIGRhdGFzZXQgaW4gZGVub3JtYWxp emVkIHdheSwgZWl0aGVyIGJlY2F1c2Ugb2YKK3BlcmZvcm1hbmNlIG9yIHRv IG1ha2UgcXVlcnlpbmcgZWFzaWVyLgorCitUaGUgZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMgYXJlIGNhbGxlZCAnc29mdCcgYmVjYXVzZSB0aGUgaW1wbGVt ZW50YXRpb24gaXMKK21lYW50IHRvIGFsbG93IHNtYWxsIG51bWJlciBvZiBy b3dzIGNvbnRyYWRpY3RpbmcgdGhlIGRlcGVuZGVuY3kuIE1hbnkgYWN0dWFs CitkYXRhIHNldHMgY29udGFpbiBzb21lIHNvcnQgb2YgZXJyb3JzLCBlaXRo ZXIgYmVjYXVzZSBvZiBkYXRhIGVudHJ5IG1pc3Rha2VzCisodXNlciBtaXN0 eXBpbmcgdGhlIFpJUCBjb2RlKSBvciBpc3N1ZXMgaW4gZ2VuZXJhdGluZyB0 aGUgZGF0YSAoZS5nLiBhIFpJUCBjb2RlCittaXN0YWtlbmx5IGFzc2lnbmVk IHRvIHR3byBjaXRpZXMgaW4gZGlmZmVyZW50IHN0YXRlcykuIEEgc3RyaWN0 IGltcGxlbWVudGF0aW9uCit3b3VsZCBpZ25vcmUgZGVwZW5kZW5jaWVzIG9u IHN1Y2ggbm9pc3kgZGF0YSwgcmVuZGVyaW5nIHRoZSBhcHByb2FjaCB1bnVz YWJsZSBvbgorc3VjaCBkYXRhIHNldHMuCisKKworTWluaW5nIGRlcGVuZGVu Y2llcyAoQU5BTFlaRSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKK1RoZSBjdXJyZW50IGJ1aWxkIGFsZ29yaXRobSBpcyByYXRoZXIgc2lt cGxlIC0gZm9yIGVhY2ggcGFpciAoYSxiKSBvZiBjb2x1bW5zLAordGhlIGRh dGEgYXJlIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSAoZmlyc3QgYnkgJ2En LCB0aGVuIGJ5ICdiJykuIFRoZW4gZm9yIGVhY2gKK2dyb3VwIChyb3dzIHdp dGggdGhlIHNhbWUgJ2EnIHZhbHVlKSB3ZSBkZWNpZGUgd2hldGhlciB0aGUg Z3JvdXAgaXMgbmV1dHJhbCwKK3N1cHBvcnRpbmcgb3IgY29udHJhZGljdGlu ZyB0aGUgZGVwZW5kZW5jeSAoYS0+YikuCisKK0EgZ3JvdXAgaXMgY29uc2lk ZXJlZCBuZXV0cmFsIHdoZW4gaXQncyB0b28gc21hbGwgLSBlLmcuIHdoZW4g dGhlcmUncyBhIHNpbmdsZQorcm93IGluIHRoZSBncm91cCwgdGhlcmUgY2Fu J3QgcG9zc2libHkgYmUgbXVsdGlwbGUgdmFsdWVzIGluICdiJy4gRm9yIHRo aXMKK3JlYXNvbiB3ZSBpZ25vcmUgZ3JvdXBzIHNtYWxsZXIgdGhhbiBhIHRo cmVzaG9sZCAoY3VycmVudGx5IDMgcm93cykuCisKK0ZvciBzdWZmaWNpZW50 bHkgbGFyZ2UgZ3JvdXBzICgzIHJvd3Mgb3IgbW9yZSksIHdlIGNvdW50IHRo ZSBudW1iZXIgb2YgZGlzdGluY3QKK3ZhbHVlcyBpbiAnYicuIFdoZW4gdGhl cmUncyBhIHNpbmdsZSAnYicgdmFsdWUsIHRoZSBncm91cCBpcyBjb25zaWRl cmVkIHRvCitzdXBwb3J0IHRoZSBkZXBlbmRlbmN5IChhLT5iKSwgb3RoZXJ3 aXNlIGl0J3MgY29uZGlkZXJlZCBhcyBjb250cmFkaWN0aW5nIGl0LgorCitB dCB0aGUgZW5kLCB3ZSBjb21wYXJlIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBz dXBwb3J0aW5nIGFuZCBjb250cmFkaWN0aW5nIGdyb3VwcywKK2FuZCBpZiB0 aGVyZSBhcmUgYXQgbGVhc3QgMTB4IGFzIG1hbnkgc3VwcG9ydGluZyByb3dz LCB3ZSBjb25zaWRlciB0aGUKK2Z1bmN0aW9uYWwgZGVwZW5kZW5jeSB0byBi ZSB2YWxpZC4KKworCitUaGlzIGFwcHJvYWNoIGhhcyB0aGUgbmVnYXRpdmUg cHJvcGVydHkgdGhhdCB0aGUgYWxnb3JpdGhtIGlzIHRoYXQgaXQncyBhIGJp dAorZnJhZ2lsZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNhbXBsZSAtIHRoZXJl IG1heSBiZSBkYXRhIHNldHMgcHJvZHVjaW5nIHF1aXRlCitkaWZmZXJlbnQg cmVzdWx0cyBmb3IgZWFjaCBBTkFMWVpFIGV4ZWN1dGlvbiAoYXMgZXZlbiBh IHNpbmdsZSByb3cgbWF5IGNoYW5nZQordGhlIG91dGNvbWUgb2YgdGhlIGZp bmFsIDEweCB0ZXN0KS4KKworSXQgd2FzIHByb3Bvc2VkIHRvIG1ha2UgdGhl IGRlcGVuZGVuY2llcyAiZnV6enkiIC0gZS5nLiB0cmFjayBzb21lIGNvZWZm aWNpZW50CitiZXR3ZWVuIFswLDFdIGRldGVybWluaW5nIGhvdyBtdWNoIHRo ZSBkZXBlbmRlbmN5IGhvbGRzLiBUaGF0IHdvdWxkIGhvd2V2ZXIgbWVhbgor d2UgaGF2ZSB0byBrZWVwIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBhcyBlbGlt aW5hdGluZyB0aGVtIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZgordGhlIGNvZWZm aWNpZW50IChlLmcuIHRocm93IGF3YXkgZGVwZW5kZW5jaWVzIDw9IDAuNSkg d291bGQgcmVzdWx0IGluIGV4YWN0bHkKK3RoZSBzYW1lIGZyYWdpbGl0eSBp c3N1ZXMuIFRoaXMgd291bGQgYWxzbyBtYWtlIGl0IG1vcmUgY29tcGxpY2F0 ZWQgdG8gY29tYmluZQorZGVwZW5kZW5jaWVzLiBTbyB0aGlzIGRvZXMgbm90 IHNlZW0gbGlrZSBhIHByYWN0aWNhbCBhcHByb2FjaC4KKworQSBiZXR0ZXIg YXBwcm9hY2ggbWlnaHQgYmUgdG8gcmVwbGFjZSB0aGUgY29uc3RhbnRzICht aW5fZ3JvdXBfc2l6ZT0zIGFuZCAxMHgpCit3aXRoIHZhbHVlcyBzb21laG93 IHJlbGF0ZWQgdG8gdGhlIHBhcnRpY3VsYXIgZGF0YSBzZXQuCisKKworQ2xh dXNlIHJlZHVjdGlvbiAocGxhbm5lci9vcHRpbWl6ZXIpCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXBsbHlpbmcgdGhlIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGlzIHF1aXRlIHNpbXBsZSAtIGdpdmVu IGEgbGlzdCBvZiBlcXVhbGl0eQorY2xhdXNlcywgY2hlY2sgd2hpY2ggY2xh dXNlcyBhcmUgcmVkdW5kYW50IChpLmUuIGltcGxpZWQgYnkgc29tZSBvdGhl ciBjbGF1c2UpLgorRm9yIGV4YW1wbGUgZ2l2ZW4gY2xhdXNlIGxpc3QKKwor ICAgIChhID0gMikgQU5EIChiID0gMikgQU5EIChjID0gMykKKworYW5kIGRl cGVuZGVuY2llcyAoYS0+YikgYW5kIChhLT5kKSwgdGhlIGxpc3Qgb2YgY2xh dXNlcyBtYXkgYmUgc2ltcGxpZmllZCB0bworCisgICAgKGEgPSAxKSBBTkQg KGMgPSAzKQorCitGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBtYXkgb25seSBi ZSBhcHBsaWVkIHRvIGVxdWFsaXR5IGNsYXVzZXMsIGFsbCBvdGhlciB0eXBl cworb2YgY2xhdXNlcyBhcmUgaWdub3JlZC4gU2VlIGNsYXVzZWxpc3RfYXBw bHlfZGVwZW5kZW5jaWVzKCkgZm9yIG1vcmUgZGV0YWlscy4KKworCitDb21w YXRpYmlsaXR5IG9mIGNsYXVzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitUaGUgcmVkdWN0aW9uIGFzc3VtZXMgdGhlIGNsYXVzZXMgcmVhbGx5 IGFyZSByZWR1bmRhbnQsIGFuZCB0aGUgdmFsdWUgaW4gdGhlCityZWR1Y2Vk IGNsYXVzZSAoYj0yKSBpcyB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBieSAoYT0x KS4gSWYgdGhhdCdzIG5vdCB0aGUgY2FzZQorYW5kIHRoZSB2YWx1ZXMgYXJl ICJpbmNvbXBhdGlibGUiIHRoZSByZXN1bHQgd2lsbCBiZSBvdmVyLWVzdGlt YXRpb24uCisKK1RoaXMgbWF5IGhhcHBlbiBmb3IgZXhhbXBsZSB3aGVuIHVz aW5nIGNvbmRpdGlvbnMgb24gWklQIGFuZCBjaXR5IG5hbWUgd2l0aAorbWlz bWF0Y2hpbmcgdmFsdWVzIChaSVAgZm9yIGEgZGlmZmVyZW50IGNpdHkpLCBl dGMuIEluIHN1Y2ggY2FzZSB0aGUgcmVzdWx0CitzZXQgd2lsbCBiZSBlbXB0 eSwgYnV0IHdlJ2xsIGVzdGltYXRlIHRoZSBzZWxlY3Rpdml0eSB1c2luZyB0 aGUgWklQIGNvbmRpdGlvbi4KKworSW4gdGhpcyBjYXNlIHRoZSBkZWZhdWx0 IGVzdGltYXRpb24gYmFzZWQgb24gQVZJQSBwcmluY2lwbGUgaGFwcGVucyB0 byB3b3JrCitiZXR0ZXIsIGJ1dCBtb3N0bHkgYnkgY2hhbmNlLgorCisKK0Rl cGVuZGVuY2llcyB2cy4gTUNWL2hpc3RvZ3JhbQorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisKK0luIHNvbWUgY2FzZXMgdGhlICJjb21wYXRp YmlsaXR5IiBvZiB0aGUgY29uZGl0aW9ucyBtaWdodCBiZSB2ZXJpZmllZCB1 c2luZyB0aGUKK290aGVyIHR5cGVzIG9mIG11bHRpdmFyaWF0ZSBzdGF0cyAt IE1DViBsaXN0cyBhbmQgaGlzdG9ncmFtcy4KKworRm9yIE1DViBsaXN0cyB0 aGUgdmVyaWZpY2F0aW9uIG1pZ2h0IGJlIHZlcnkgc2ltcGxlIC0gcGVlayBp bnRvIHRoZSBsaXN0IGlmCit0aGVyZSBhcmUgYW55IGl0ZW1zIG1hdGNoaW5n IHRoZSBjbGF1c2Ugb24gdGhlICdhJyBjb2x1bW4gKGUuZy4gWklQIGNvZGUp LCBhbmQKK2lmIHN1Y2ggaXRlbSBpcyBmb3VuZCwgY2hlY2sgdGhhdCB0aGUg J2InIGNvbHVtbiBtYXRjaGVzIHRoZSBvdGhlciBjbGF1c2UuIElmIGl0Citk b2VzIG5vdCwgdGhlIGNsYXVzZXMgYXJlIGNvbnRyYWRpY3RvcnkuIFdlIGNh bid0IHJlYWxseSBzYXkgaWYgc3VjaCBpdGVtIHdhcworbm90IGZvdW5kLCBl eGNlcHQgbWF5YmUgcmVzdHJpY3RpbmcgdGhlIHNlbGVjdGl2aXR5IHVzaW5n IHRoZSBNQ1YgZGF0YSAoZS5nLgordXNpbmcgbWluL21heCBzZWxlY3Rpdml0 eSwgb3Igc29tZXRoaW5nKS4KKworV2l0aCBoaXN0b2dyYW1zLCBpdCBtaWdo dCB3b3JrIHNpbWlsYXJseSAtIHdlIGNhbid0IGNoZWNrIHRoZSB2YWx1ZXMg ZGlyZWN0bHkKKyhiZWNhdXNlIGhpc3RvZ3JhbXMgdXNlIGJ1Y2tldHMsIHVu bGlrZSBNQ1YgbGlzdHMsIHN0b3JpbmcgdGhlIGFjdHVhbCB2YWx1ZXMpLgor U28gd2UgY2FuIG9ubHkgb2JzZXJ2ZSB0aGUgYnVja2V0cyBtYXRjaGluZyB0 aGUgY2xhdXNlcyAtIGlmIHRob3NlIGJ1Y2tldHMgaGF2ZQordmVyeSBsb3cg ZnJlcXVlbmN5LCBpdCBwcm9iYWJseSBtZWFucyB0aGUgdHdvIGNsYXVzZXMg YXJlIGluY29tcGF0aWJsZS4KKworSXQncyB1bmNsZWFyIHdoYXQgJ2xvdyBm cmVxdWVuY3knIGlzLCBidXQgaWYgb25lIG9mIHRoZSBjbGF1c2VzIGlzIGlt cGxpZWQKKyhhdXRvbWF0aWNhbGx5IHRydWUgYmVjYXVzZSBvZiB0aGUgb3Ro ZXIgY2xhdXNlKSwgdGhlbgorCisgICAgc2VsZWN0aXZpdHlbY2xhdXNlKEEp XSA9IHNlbGVjdGl2aXR5W2NsYXVzZShBKSAmIGNsYXVzZShCKV0KKworU28g d2UgbWlnaHQgY29tcHV0ZSBzZWxlY3Rpdml0eSBvZiB0aGUgZmlyc3QgY2xh dXNlIC0gZm9yIGV4YW1wbGUgdXNpbmcgcmVndWxhcgorc3RhdGlzdGljcy4g QW5kIHRoZW4gY2hlY2sgaWYgdGhlIHNlbGVjdGl2aXR5IGNvbXB1dGVkIGZy b20gdGhlIGhpc3RvZ3JhbSBpcworYWJvdXQgdGhlIHNhbWUgKG9yIHNpZ25p ZmljYW50bHkgbG93ZXIpLgorCitUaGUgcHJvYmxlbSBpcyB0aGF0IGhpc3Rv Z3JhbXMgd29yayB3ZWxsIG9ubHkgd2hlbiB0aGUgZGF0YSBvcmRlcmluZyBt YXRjaGVzIHRoZQorbmF0dXJhbCBtZWFuaW5nLiBGb3IgdmFsdWVzIHRoYXQg c2VydmUgYXMgbGFiZWxzIC0gbGlrZSBjaXR5IG5hbWVzIG9yIFpJUCBjb2Rl cywKK29yIGV2ZW4gZ2VuZXJhdGVkIElEcywgaGlzdG9ncmFtcyByZWFsbHkg ZG9uJ3Qgd29yayBhbGwgdGhhdCB3ZWxsLiBGb3IgZXhhbXBsZQorc29ydGlu ZyBjaXRpZXMgYnkgbmFtZSB3b24ndCBtYXRjaCB0aGUgc29ydGluZyBvZiBa SVAgY29kZXMsIHJlbmRlcmluZyB0aGUKK2hpc3RvZ3JhbSB1bnVzYWJsZS4K KworU28gTUNWcyBhcmUgcHJvYmFibHkgZ29pbmcgdG8gd29yayBtdWNoIGJl dHRlciwgYmVjYXVzZSB0aGV5IGRvbid0IHJlYWxseSBhc3N1bWUKK2FueSBz b3J0IG9mIG9yZGVyaW5nLiBBbmQgaXQncyBwcm9iYWJseSBtb3JlIGFwcHJv cHJpYXRlIGZvciB0aGUgbGFiZWwtbGlrZSBkYXRhLgorCitBIGdvb2QgcXVl c3Rpb24gaG93ZXZlciBpcyB3aHkgZXZlbiB1c2UgZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMgaW4gc3VjaCBjYXNlcworYW5kIG5vdCBzaW1wbHkgdXNlIHRo ZSBNQ1YvaGlzdG9ncmFtIGluc3RlYWQuIE9uZSByZWFzb24gaXMgdGhhdCB0 aGUgZnVuY3Rpb25hbAorZGVwZW5kZW5jaWVzIGFsbG93IGZhbGxiYWNrIHRv IHJlZ3VsYXIgc3RhdHMsIGFuZCBvZnRlbiBwcm9kdWNlIG1vcmUgYWNjdXJh dGUKK2VzdGltYXRlcyAtIGVzcGVjaWFsbHkgY29tcGFyZWQgdG8gaGlzdG9n cmFtcywgdGhhdCBhcmUgcXVpdGUgYmFkIGluIGVzdGltYXRpbmcKK2VxdWFs aXR5IGNsYXVzZXMuCisKKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisK K0xldCdzIHNlZSB0aGUgbWFpbiBsaW1pbmF0aW9ucyBvZiBmdW5jdGlvbmFs IGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSB0aG9zZQorcmVsYXRlZCB0byB0 aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKworVGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gc3VwcG9ydHMgb25seSBkZXBlbmRlbmNpZXMgYmV0d2Vl biB0d28gY29sdW1ucywgYnV0Cit0aGlzIGlzIG1lcmVseSBhIHNpbXBsaWZp Y2F0aW9uIG9mIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLiBJdCdzIGNl cnRhaW5seQordXNlZnVsIHRvIG1pbmUgZm9yIGRlcGVuZGVuY2llcyBpbnZv bHZpbmcgbXVsdGlwbGUgY29sdW1ucyBvbiB0aGUgJ2xlZnQnIHNpZGUsCitp LmUuIGEgY29uZGl0aW9uIGZvciB0aGUgZGVwZW5kZW5jeS4gVGhhdCBpcyBk ZXBlbmRlbmNpZXMgbGlrZSAoYSxiIC0+IGMpLgorCitUaGUgaW1wbGVtZW50 YXRpb24gbWF5L3Nob3VsZCBiZSBzbWFydCBlbm91Z2ggbm90IHRvIG1pbmUg cmVkdW5kYW50IGNvbmRpdGlvbnMsCitlLmcuIChhLT5iKSBhbmQgKGEsYyAt PiBiKSwgYmVjYXVzZSB0aGUgbGF0dGVyIGlzIGEgdHJpdmlhbCBjb25zZXF1 ZW5jZSBvZiB0aGUKK2Zvcm1lciBvbmUgKGlmIHZhbHVlcyBvZiAnYScgZGV0 ZXJtaW5lICdiJywgYWRkaW5nIGFub3RoZXIgY29sdW1uIHdvbid0IGNoYW5n ZQordGhhdCByZWxhdGlvbnNoaXApLiBUaGUgQU5BTFlaRSBzaG91bGQgZmly c3QgYW5hbHl6ZSAxOjEgZGVwZW5kZW5jaWVzLCB0aGVuIDI6MQorZGVwZW5k ZW5jaWVzIChhbmQgc2tpcCB0aGUgYWxyZWFkeSBpZGVudGlmaWVkIG9uZXMp LCBldGMuCisKK0ZvciBleGFtcGxlIHRoZSBkZXBlbmRlbmN5CisKKyAgICAo Y2l0eSBuYW1lIC0+IHppcCBjb2RlKQorCitpcyBtdWNoIHN0cm9uZ2VyLCBp LmUuIHdoZW5ldmVyIGl0IGhvbGQsIHRoZW4KKworICAgIChjaXR5IG5hbWUs IHN0YXRlIG5hbWUgLT4gemlwIGNvZGUpCisKK2hvbGRzIHRvby4gQnV0IGlu IGNhc2UgdGhlcmUgYXJlIGNpdGllcyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4g ZGlmZmVyZW50IHN0YXRlcywKK3RoZW4gb25seSB0aGUgbGF0dGVyIGRlcGVu ZGVuY3kgd2lsbCBiZSB2YWxpZC4KKworT2YgY291cnNlLCB0aGVyZSBwcm9i YWJseSBhcmUgY2l0aWVzIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoaW4gYSBz aW5nbGUgc3RhdGUsCitidXQgaG9wZWZ1bGx5IHRoaXMgaXMgcmVsYXRpdmVs eSByYXJlIG9jY3VyZW5jZSAoYW5kIHRodXMgd2UnbGwgc3RpbGwgZGV0ZWN0 Cit0aGUgJ3NvZnQnIGRlcGVuZGVuY3kpLgorCitIYW5kbGluZyBtdWx0aXBs ZSBjb2x1bW5zIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBkZXBlbmRlbmN5 LCBpcyBub3QgbmVjZXNzYXJ5LAorYXMgdGhvc2UgZGVwZW5kZW5jaWVzIG1h eSBiZSBzaW1wbHkgZGVjb21wb3NlZCBpbnRvIGEgc2V0IG9mIGRlcGVuZGVu Y2llcyB3aXRoCit0aGUgc2FtZSBtZWFuaW5nLCBvbmUgZm9yIGVhY2ggY29s dW1uIG9uIHRoZSByaWdodCBzaWRlLiBGb3IgZXhhbXBsZQorCisgICAgKGEg LT4gYixjKQorCitpcyBleGFjdGx5IHRoZSBzYW1lIGFzCisKKyAgICAoYSAt PiBiKSAmIChhIC0+IGMpCisKK09mIGNvdXJzZSwgc3RvcmluZyB0aGUgZmly c3QgZm9ybSBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdGhhbnQgc3RvcmluZyBt dWx0aXBsZQorJ3NpbXBsZScgZGVwZW5kZW5jaWVzIHNlcGFyYXRlbHkuCisK KworVE9ETyBTdXBwb3J0IGRlcGVuZGVuY2llcyB3aXRoIG11bHRpcGxlIGNv bHVtbnMgb24gbGVmdC9yaWdodC4KKworVE9ETyBJbnZlc3RpZ2F0ZSB1c2lu ZyBoaXN0b2dyYW0gYW5kIE1DViBsaXN0IHRvIHZlcmlmeSB0aGUgZGVwZW5k ZW5jaWVzLgorCitUT0RPIEludmVzdGlnYXRlIHN0YXRpc3RpY2FsIHRlc3Rp bmcgb2YgdGhlIGRpc3RyaWJ1dGlvbiAodG8gZGVjaWRlIHdoZXRoZXIgaXQK KyAgICAgbWFrZXMgc2Vuc2UgdG8gYnVpbGQgdGhlIGhpc3RvZ3JhbS9NQ1Yg bGlzdCkuCisKK1RPRE8gVXNpbmcgYSBtaW4vbWF4IG9mIHNlbGVjdGl2aXRp ZXMgd291bGQgcHJvYmFibHkgbWFrZSBtb3JlIHNlbnNlIGZvciB0aGUKKyAg ICAgYXNzb2NpYXRlZCBjb2x1bW5zLgorCitUT0RPIENvbnNpZGVyIGVsaW1p bmF0aW5nIHRoZSBpbXBsaWVkIGNvbHVtbnMgZnJvbSB0aGUgaGlzdG9ncmFt IGFuZCBNQ1YgbGlzdHMKKyAgICAgKGJ1dCBtYXliZSB0aGF0J3Mgbm90IGEg Z29vZCBpZGVhLCBiZWNhdXNlIHRoYXQnZCBtYWtlIGl0IGltcG9zc2libGUg dG8gdXNlCisgICAgIHRoZXNlIHN0YXRzIGZvciBub24tZXF1YWxpdHkgY2xh dXNlcyBhbmQgYWxzbyBpdCB3b3VsZG4ndCBiZSBwb3NzaWJsZSB0bworICAg ICB1c2UgdGhlIHN0YXRzIGZvciB2ZXJpZmljYXRpb24gb2YgdGhlIGRlcGVu ZGVuY2llcykuCisKK1RPRE8gVGhlIHJlZHVjdGlvbiBwcm9iYWJseSBtaWdo dCBiZSBleHRlbmRlZCB0byBhbHNvIGhhbmRsZSBJUyBOVUxMIGNsYXVzZXMs CisgICAgIGFzc3VtaW5nIHdlIGZpeCB0aGUgQU5BTFlaRSB0byBwcm9wZXJs eSBoYW5kbGUgTlVMTCB2YWx1ZXMuIFdlIGhvd2V2ZXIKKyAgICAgd29uJ3Qg YmUgYWJsZSB0byByZWR1Y2UgSVMgTk9UIE5VTEwgKHVubGVzcyBJJ20gbWlz c2luZyBzb21ldGhpbmcpLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYTc1NWM0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbi5jCisg KgkgIFBPU1RHUkVTIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisgKgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJj b21tb24uaCIKKworc3RhdGljIFZhY0F0dHJTdGF0cyAqKiBsb29rdXBfdmFy X2F0dHJfc3RhdHMoaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCQkgIGlu dCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKKworc3Rh dGljIExpc3QqIGxpc3RfbXZfc3RhdHMoT2lkIHJlbGlkKTsKKworCisvKgor ICogQ29tcHV0ZSByZXF1ZXN0ZWQgbXVsdGl2YXJpYXRlIHN0YXRzLCB1c2lu ZyB0aGUgcm93cyBzYW1wbGVkIGZvciB0aGUKKyAqIHBsYWluIChzaW5nbGUt Y29sdW1uKSBzdGF0cy4KKyAqCisgKiBUaGlzIGZldGNoZXMgYSBsaXN0IG9m IHN0YXRzIGZyb20gcGdfbXZfc3RhdGlzdGljLCBjb21wdXRlcyB0aGUgc3Rh dHMKKyAqIGFuZCBzZXJpYWxpemVzIHRoZW0gYmFjayBpbnRvIHRoZSBjYXRh bG9nIChhcyBieXRlYSB2YWx1ZXMpLgorICovCit2b2lkCitidWlsZF9tdl9z dGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUg KnJvd3MsCisJCQkgICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0 dHJzdGF0cykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJTGlzdCAqbXZzdGF0czsK KworCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihvbmVy ZWwpOworCisJLyoKKwkgKiBGZXRjaCBkZWZpbmVkIE1WIGdyb3VwcyBmcm9t IHBnX212X3N0YXRpc3RpYywgYW5kIHRoZW4gY29tcHV0ZQorCSAqIHRoZSBN ViBzdGF0aXN0aWNzIChoaXN0b2dyYW1zIGZvciBub3cpLgorCSAqLworCW12 c3RhdHMgPSBsaXN0X212X3N0YXRzKFJlbGF0aW9uR2V0UmVsaWQob25lcmVs KSk7CisKKwlmb3JlYWNoIChsYywgbXZzdGF0cykKKwl7CisJCWludAkJCQlq OworCQlNVlN0YXRpc3RpY0luZm8gKnN0YXQgPSAoTVZTdGF0aXN0aWNJbmZv ICopbGZpcnN0KGxjKTsKKwkJTVZEZXBlbmRlbmNpZXMJZGVwcyAgPSBOVUxM OworCisJCVZhY0F0dHJTdGF0cyAgKipzdGF0cyAgPSBOVUxMOworCQlpbnQJ CQkJbnVtYXR0cyAgID0gMDsKKworCQkvKiBpbnQyIHZlY3RvciBvZiBhdHRu dW1zIHRoZSBzdGF0cyBzaG91bGQgYmUgY29tcHV0ZWQgb24gKi8KKwkJaW50 MnZlY3RvciAqIGF0dHJzID0gc3RhdC0+c3Rha2V5czsKKworCQkvKiBzZWUg aG93IG1hbnkgb2YgdGhlIGNvbHVtbnMgYXJlIG5vdCBkcm9wcGVkICovCisJ CWZvciAoaiA9IDA7IGogPCBhdHRycy0+ZGltMTsgaisrKQorCQkJaWYgKCEg dHVwZGVzYy0+YXR0cnNbYXR0cnMtPnZhbHVlc1tqXS0xXS0+YXR0aXNkcm9w cGVkKQorCQkJCW51bWF0dHMgKz0gMTsKKworCQkvKiBpZiB0aGVyZSBhcmUg ZHJvcHBlZCBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVkIGludDJ2ZWN0 b3IgKi8KKwkJaWYgKG51bWF0dHMgIT0gYXR0cnMtPmRpbTEpCisJCXsKKwkJ CWludDE2ICp0bXAgPSBwYWxsb2MwKG51bWF0dHMgKiBzaXplb2YoaW50MTYp KTsKKwkJCWludCBhdHRudW0gPSAwOworCisJCQlmb3IgKGogPSAwOyBqIDwg YXR0cnMtPmRpbTE7IGorKykKKwkJCQlpZiAoISB0dXBkZXNjLT5hdHRyc1th dHRycy0+dmFsdWVzW2pdLTFdLT5hdHRpc2Ryb3BwZWQpCisJCQkJCXRtcFth dHRudW0rK10gPSBhdHRycy0+dmFsdWVzW2pdOworCisJCQlwZnJlZShhdHRy cyk7CisJCQlhdHRycyA9IGJ1aWxkaW50MnZlY3Rvcih0bXAsIG51bWF0dHMp OworCQl9CisKKwkJLyogZmlsdGVyIG9ubHkgdGhlIGludGVyZXN0aW5nIHZh Y2F0dHJzdGF0cyByZWNvcmRzICovCisJCXN0YXRzID0gbG9va3VwX3Zhcl9h dHRyX3N0YXRzKGF0dHJzLCBuYXR0cywgdmFjYXR0cnN0YXRzKTsKKworCQkv KiBjaGVjayBhbGxvd2VkIG51bWJlciBvZiBkaW1lbnNpb25zICovCisJCUFz c2VydCgoYXR0cnMtPmRpbTEgPj0gMikgJiYgKGF0dHJzLT5kaW0xIDw9IE1W U1RBVFNfTUFYX0RJTUVOU0lPTlMpKTsKKworCQkvKgorCQkgKiBBbmFseXpl IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIG9mIGNvbHVtbnMuCisJCSAqLwor CQlkZXBzID0gYnVpbGRfbXZfZGVwZW5kZW5jaWVzKG51bXJvd3MsIHJvd3Ms IGF0dHJzLCBzdGF0cyk7CisKKwkJLyogc3RvcmUgdGhlIGhpc3RvZ3JhbSAv IE1DViBsaXN0IGluIHRoZSBjYXRhbG9nICovCisJCXVwZGF0ZV9tdl9zdGF0 cyhzdGF0LT5tdm9pZCwgZGVwcywgYXR0cnMpOworCX0KK30KKworLyoKKyAq IExvb2t1cCB0aGUgVmFjQXR0clN0YXRzIGluZm8gZm9yIHRoZSBzZWxlY3Rl ZCBjb2x1bW5zLCB3aXRoIGluZGV4ZXMKKyAqIG1hdGNoaW5nIHRoZSBhdHRy cyB2ZWN0b3IgKHRvIG1ha2UgaXQgZWFzeSB0byB3b3JrIHdpdGggd2hlbgor ICogY29tcHV0aW5nIG11bHRpdmFyaWF0ZSBzdGF0cykuCisgKi8KK3N0YXRp YyBWYWNBdHRyU3RhdHMgKioKK2xvb2t1cF92YXJfYXR0cl9zdGF0cyhpbnQy dmVjdG9yICphdHRycywgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNh dHRyc3RhdHMpCit7CisJaW50IGksIGo7CisJaW50IG51bWF0dHJzID0gYXR0 cnMtPmRpbTE7CisJVmFjQXR0clN0YXRzICoqc3RhdHMgPSAoVmFjQXR0clN0 YXRzKiopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihWYWNBdHRyU3RhdHMq KSk7CisKKwkvKiBsb29rdXAgVmFjQXR0clN0YXRzIGluZm8gZm9yIHRoZSBy ZXF1ZXN0ZWQgY29sdW1ucyAoc2FtZSBhdHRudW0pICovCisJZm9yIChpID0g MDsgaSA8IG51bWF0dHJzOyBpKyspCisJeworCQlzdGF0c1tpXSA9IE5VTEw7 CisJCWZvciAoaiA9IDA7IGogPCBuYXR0czsgaisrKQorCQl7CisJCQlpZiAo YXR0cnMtPnZhbHVlc1tpXSA9PSB2YWNhdHRyc3RhdHNbal0tPnR1cGF0dG51 bSkKKwkJCXsKKwkJCQlzdGF0c1tpXSA9IHZhY2F0dHJzdGF0c1tqXTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIENoZWNrIHRoYXQg d2UgZm91bmQgdGhlIGluZm8sIHRoYXQgdGhlIGF0dG51bSBtYXRjaGVzIGFu ZAorCQkgKiB0aGF0IHRoZXJlJ3MgdGhlIHJlcXVlc3RlZCAnbHQnIG9wZXJh dG9yIGFuZCB0aGF0IHRoZSB0eXBlCisJCSAqIGlzICdwYXNzZWQtYnktdmFs dWUnLgorCQkgKi8KKwkJQXNzZXJ0KHN0YXRzW2ldICE9IE5VTEwpOworCQlB c3NlcnQoc3RhdHNbaV0tPnR1cGF0dG51bSA9PSBhdHRycy0+dmFsdWVzW2ld KTsKKworCQkvKiBGSVhNRSBUaGlzIGlzIHJhdGhlciB1Z2x5IHdheSB0byBj aGVjayBmb3IgJ2x0b3ByJyAod2hpY2gKKwkJICogICAgICAgaXMgZGVmaW5l ZCBmb3IgJ3NjYWxhcicgYXR0cmlidXRlcykuCisJCSAqLworCQlBc3NlcnQo KChTdGRBbmFseXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhKS0+bHRv cHIgIT0gSW52YWxpZE9pZCk7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQor CisvKgorICogRmV0Y2ggbGlzdCBvZiBNViBzdGF0cyBkZWZpbmVkIG9uIGEg dGFibGUsIHdpdGhvdXQgdGhlIGFjdHVhbCBkYXRhCisgKiBmb3IgaGlzdG9n cmFtcywgTUNWIGxpc3RzIGV0Yy4KKyAqLworc3RhdGljIExpc3QqCitsaXN0 X212X3N0YXRzKE9pZCByZWxpZCkKK3sKKwlSZWxhdGlvbglpbmRyZWw7CisJ U3lzU2NhbkRlc2MgaW5kc2NhbjsKKwlTY2FuS2V5RGF0YSBza2V5OworCUhl YXBUdXBsZQlodHVwOworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKworCS8q IFByZXBhcmUgdG8gc2NhbiBwZ19tdl9zdGF0aXN0aWMgZm9yIGVudHJpZXMg aGF2aW5nIGluZHJlbGlkID0gdGhpcyByZWwuICovCisJU2NhbktleUluaXQo JnNrZXksCisJCQkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVj dElkR2V0RGF0dW0ocmVsaWQpKTsKKworCWluZHJlbCA9IGhlYXBfb3BlbihN dlN0YXRpc3RpY1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaW5k c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmRyZWwsIE12U3RhdGlzdGlj UmVsaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkp OworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoaHR1cCA9IHN5c3RhYmxl X2dldG5leHQoaW5kc2NhbikpKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZvICpp bmZvID0gbWFrZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKKwkJRm9ybV9wZ19t dl9zdGF0aXN0aWMgc3RhdHMgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdF VFNUUlVDVChodHVwKTsKKworCQlpbmZvLT5tdm9pZCA9IEhlYXBUdXBsZUdl dE9pZChodHVwKTsKKwkJaW5mby0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3Rv cihzdGF0cy0+c3Rha2V5cy52YWx1ZXMsIHN0YXRzLT5zdGFrZXlzLmRpbTEp OworCQlpbmZvLT5kZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7CisK KwkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOworCX0KKworCXN5 c3RhYmxlX2VuZHNjYW4oaW5kc2Nhbik7CisKKwloZWFwX2Nsb3NlKGluZHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIFRPRE8gbWF5YmUgc2F2ZSB0 aGUgbGlzdCBpbnRvIHJlbGNhY2hlLCBhcyBpbiBSZWxhdGlvbkdldEluZGV4 TGlzdAorCSAqICAgICAgKHdoaWNoIHdhcyB1c2VkIGFzIGFuIGluc3BpcmF0 aW9uIG9mIHRoaXMgb25lKT8uICovCisKKwlyZXR1cm4gcmVzdWx0OworfQor Cit2b2lkCit1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLCBNVkRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJzKQoreworCUhl YXBUdXBsZQlzdHVwLAorCQkJCW9sZHR1cDsKKwlEYXR1bQkJdmFsdWVzW05h dHRzX3BnX212X3N0YXRpc3RpY107CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdf bXZfc3RhdGlzdGljXTsKKwlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19tdl9z dGF0aXN0aWNdOworCisJUmVsYXRpb24Jc2QgPSBoZWFwX29wZW4oTXZTdGF0 aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCW1lbXNl dChudWxscywgICAgMSwgTmF0dHNfcGdfbXZfc3RhdGlzdGljICogc2l6ZW9m KGJvb2wpKTsKKwltZW1zZXQocmVwbGFjZXMsIDAsIE5hdHRzX3BnX212X3N0 YXRpc3RpYyAqIHNpemVvZihib29sKSk7CisJbWVtc2V0KHZhbHVlcywgICAw LCBOYXR0c19wZ19tdl9zdGF0aXN0aWMgKiBzaXplb2YoRGF0dW0pKTsKKwor CS8qCisJICogQ29uc3RydWN0IGEgbmV3IHBnX212X3N0YXRpc3RpYyB0dXBs ZSAtIHJlcGxhY2Ugb25seSB0aGUgaGlzdG9ncmFtCisJICogYW5kIE1DViBs aXN0LCBkZXBlbmRpbmcgd2hldGhlciBpdCBhY3R1YWxseSB3YXMgY29tcHV0 ZWQuCisJICovCisJaWYgKGRlcGVuZGVuY2llcyAhPSBOVUxMKQorCXsKKwkJ bnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVwcyAtMV0gICAgPSBm YWxzZTsKKwkJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMg IC0gMV0KKwkJCT0gUG9pbnRlckdldERhdHVtKHNlcmlhbGl6ZV9tdl9kZXBl bmRlbmNpZXMoZGVwZW5kZW5jaWVzKSk7CisJfQorCisJLyogYWx3YXlzIHJl cGxhY2UgdGhlIHZhbHVlIChlaXRoZXIgYnkgYnl0ZWEgb3IgTlVMTCkgKi8K KwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBzIC0xXSA9 IHRydWU7CisKKwkvKiBhbHdheXMgY2hhbmdlIHRoZSBhdmFpbGFiaWxpdHkg ZmxhZ3MgKi8KKwludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1 aWx0IC0xXSA9IGZhbHNlOworCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWtleXMtMV0gICAgID0gZmFsc2U7CisKKwkvKiB1c2UgdGhlIG5ldyBh dHRudW1zLCBpbiBjYXNlIHdlIHJlbW92ZWQgc29tZSBkcm9wcGVkIG9uZXMg Ki8KKwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0 LTFdID0gdHJ1ZTsKKwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFrZXlzIC0xXSAgICA9IHRydWU7CisKKwl2YWx1ZXNbQW51bV9wZ19tdl9z dGF0aXN0aWNfZGVwc19idWlsdC0xXSA9IEJvb2xHZXREYXR1bShkZXBlbmRl bmNpZXMgIT0gTlVMTCk7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YWtleXMgLTFdICAgID0gUG9pbnRlckdldERhdHVtKGF0dHJzKTsKKwor CS8qIElzIHRoZXJlIGFscmVhZHkgYSBwZ19tdl9zdGF0aXN0aWMgdHVwbGUg Zm9yIHRoaXMgYXR0cmlidXRlPyAqLworCW9sZHR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShNVlNUQVRPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0obXZv aWQpKTsKKworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKG9sZHR1cCkpCisJewor CQkvKiBZZXMsIHJlcGxhY2UgaXQgKi8KKwkJc3R1cCA9IGhlYXBfbW9kaWZ5 X3R1cGxlKG9sZHR1cCwKKwkJCQkJCQkJIFJlbGF0aW9uR2V0RGVzY3Ioc2Qp LAorCQkJCQkJCQkgdmFsdWVzLAorCQkJCQkJCQkgbnVsbHMsCisJCQkJCQkJ CSByZXBsYWNlcyk7CisJCVJlbGVhc2VTeXNDYWNoZShvbGR0dXApOworCQlz aW1wbGVfaGVhcF91cGRhdGUoc2QsICZzdHVwLT50X3NlbGYsIHN0dXApOwor CX0KKwllbHNlCisJCWVsb2coRVJST1IsICJpbnZhbGlkIHBnX212X3N0YXRp c3RpYyByZWNvcmQgKG9pZD0lZCkiLCBtdm9pZCk7CisKKwkvKiB1cGRhdGUg aW5kZXhlcyB0b28gKi8KKwlDYXRhbG9nVXBkYXRlSW5kZXhlcyhzZCwgc3R1 cCk7CisKKwloZWFwX2ZyZWV0dXBsZShzdHVwKTsKKworCWhlYXBfY2xvc2Uo c2QsIFJvd0V4Y2x1c2l2ZUxvY2spOworfQorCisvKiBtdWx0aS12YXJpYXRl IHN0YXRzIGNvbXBhcmF0b3IgKi8KKworLyoKKyAqIHFzb3J0X2FyZyBjb21w YXJhdG9yIGZvciBzb3J0aW5nIERhdHVtcyAoTVYgc3RhdHMpCisgKgorICog VGhpcyBkb2VzIG5vdCBtYWludGFpbiB0aGUgdHVwbm9MaW5rIGFycmF5Lgor ICovCitpbnQKK2NvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQoreworCURhdHVtCQlkYSA9 ICooRGF0dW0qKWE7CisJRGF0dW0JCWRiID0gKihEYXR1bSopYjsKKwlTb3J0 U3VwcG9ydCBzc3VwPSAoU29ydFN1cHBvcnQpIGFyZzsKKworCXJldHVybiBB cHBseVNvcnRDb21wYXJhdG9yKGRhLCBmYWxzZSwgZGIsIGZhbHNlLCBzc3Vw KTsKK30KKworLyoKKyAqIHFzb3J0X2FyZyBjb21wYXJhdG9yIGZvciBzb3J0 aW5nIGRhdGEgd2hlbiBwYXJ0aXRpb25pbmcgYSBNViBidWNrZXQKKyAqLwor aW50Citjb21wYXJlX3NjYWxhcnNfcGFydGl0aW9uKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykKK3sKKwlEYXR1bQkJZGEgPSAo KFNjYWxhckl0ZW0qKWEpLT52YWx1ZTsKKwlEYXR1bQkJZGIgPSAoKFNjYWxh ckl0ZW0qKWIpLT52YWx1ZTsKKwlTb3J0U3VwcG9ydCBzc3VwPSAoU29ydFN1 cHBvcnQpIGFyZzsKKworCXJldHVybiBBcHBseVNvcnRDb21wYXJhdG9yKGRh LCBmYWxzZSwgZGIsIGZhbHNlLCBzc3VwKTsKK30KKworLyogaW5pdGlhbGl6 ZSBtdWx0aS1kaW1lbnNpb25hbCBzb3J0ICovCitNdWx0aVNvcnRTdXBwb3J0 CittdWx0aV9zb3J0X2luaXQoaW50IG5kaW1zKQoreworCU11bHRpU29ydFN1 cHBvcnQgbXNzOworCisJQXNzZXJ0KG5kaW1zID49IDIpOworCisJbXNzID0g KE11bHRpU29ydFN1cHBvcnQpcGFsbG9jMChvZmZzZXRvZihNdWx0aVNvcnRT dXBwb3J0RGF0YSwgc3N1cCkKKwkJCQkJCQkJCSsgc2l6ZW9mKFNvcnRTdXBw b3J0RGF0YSkqbmRpbXMpOworCisJbXNzLT5uZGltcyA9IG5kaW1zOworCisJ cmV0dXJuIG1zczsKK30KKworLyoKKyAqIGFkZCBzb3J0IGludG8gZm9yIGRp bWVuc2lvbiAnZGltJyAoaW5kZXggaW50byB2YWNhdHRyc3RhdHMpIHRvIG1z cywKKyAqIGF0IHRoZSBwb3NpdGlvbiAnc29ydGF0dHInCisgKi8KK3ZvaWQK K211bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihNdWx0aVNvcnRTdXBwb3J0IG1z cywgaW50IHNvcnRkaW0sCisJCQkJCQlpbnQgZGltLCBWYWNBdHRyU3RhdHMg Kip2YWNhdHRyc3RhdHMpCit7CisJLyogZmlyc3QsIGxvb2t1cCBTdGRBbmFs eXplRGF0YSBmb3IgdGhlIGRpbWVuc2lvbiAoYXR0cmlidXRlKSAqLworCVNv cnRTdXBwb3J0RGF0YSBzc3VwOworCVN0ZEFuYWx5emVEYXRhICp0bXAgPSAo U3RkQW5hbHl6ZURhdGEgKil2YWNhdHRyc3RhdHNbZGltXS0+ZXh0cmFfZGF0 YTsKKworCUFzc2VydChtc3MgIT0gTlVMTCk7CisJQXNzZXJ0KHNvcnRkaW0g PCBtc3MtPm5kaW1zKTsKKworCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0 LCBldGMuICovCisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOwor CXNzdXAuc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8q IFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0 aXN0aWNzICovCisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09M TEFUSU9OX09JRDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsK KworCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKHRtcC0+bHRv cHIsICZzc3VwKTsKKworCW1zcy0+c3N1cFtzb3J0ZGltXSA9IHNzdXA7Cit9 CisKKy8qIGNvbXBhcmUgYWxsIHRoZSBkaW1lbnNpb25zIGluIHRoZSBzZWxl Y3RlZCBvcmRlciAqLworaW50CittdWx0aV9zb3J0X2NvbXBhcmUoY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQoreworCWludCBp OworCVNvcnRJdGVtICppYSA9IChTb3J0SXRlbSopYTsKKwlTb3J0SXRlbSAq aWIgPSAoU29ydEl0ZW0qKWI7CisKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9 IChNdWx0aVNvcnRTdXBwb3J0KWFyZzsKKworCWZvciAoaSA9IDA7IGkgPCBt c3MtPm5kaW1zOyBpKyspCisJeworCQlpbnQJY29tcGFyZTsKKworCQljb21w YXJlID0gQXBwbHlTb3J0Q29tcGFyYXRvcihpYS0+dmFsdWVzW2ldLCBpYS0+ aXNudWxsW2ldLAorCQkJCQkJCQkJICBpYi0+dmFsdWVzW2ldLCBpYi0+aXNu dWxsW2ldLAorCQkJCQkJCQkJICAmbXNzLT5zc3VwW2ldKTsKKworCQlpZiAo Y29tcGFyZSAhPSAwKQorCQkJcmV0dXJuIGNvbXBhcmU7CisKKwl9CisKKwkv KiBlcXVhbCBieSBkZWZhdWx0ICovCisJcmV0dXJuIDA7Cit9CisKKy8qIGNv bXBhcmUgc2VsZWN0ZWQgZGltZW5zaW9uICovCitpbnQKK211bHRpX3NvcnRf Y29tcGFyZV9kaW0oaW50IGRpbSwgY29uc3QgU29ydEl0ZW0gKmEsIGNvbnN0 IFNvcnRJdGVtICpiLAorCQkJCQkgICBNdWx0aVNvcnRTdXBwb3J0IG1zcykK K3sKKwlyZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihhLT52YWx1ZXNbZGlt XSwgYS0+aXNudWxsW2RpbV0sCisJCQkJCQkJICAgYi0+dmFsdWVzW2RpbV0s IGItPmlzbnVsbFtkaW1dLAorCQkJCQkJCSAgICZtc3MtPnNzdXBbZGltXSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2Nv bW1vbi5oIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTY0MjJkCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9j b21tb24uaApAQCAtMCwwICsxLDc1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb24uaAorICoJICBQT1NUR1JFUyBt dWx0aXZhcmlhdGUgc3RhdGlzdGljcworICoKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiYWNjZXNz L3R1cHRvYXN0ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgorI2luY2x1ZGUgImZvcmVp Z24vZmR3YXBpLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVt LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvbXZz dGF0cy5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCisjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworCisvKiBGSVhNRSBwcml2YXRl IHN0cnVjdHVyZSBjb3BpZWQgZnJvbSBhbmFseXplLmMgKi8KKwordHlwZWRl ZiBzdHJ1Y3QKK3sKKwlPaWQJCQllcW9wcjsJCQkvKiAnPScgb3BlcmF0b3Ig Zm9yIGRhdGF0eXBlLCBpZiBhbnkgKi8KKwlPaWQJCQllcWZ1bmM7CQkJLyog YW5kIGFzc29jaWF0ZWQgZnVuY3Rpb24gKi8KKwlPaWQJCQlsdG9wcjsJCQkv KiAnPCcgb3BlcmF0b3IgZm9yIGRhdGF0eXBlLCBpZiBhbnkgKi8KK30gU3Rk QW5hbHl6ZURhdGE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJRGF0dW0JCXZh bHVlOwkJCS8qIGEgZGF0YSB2YWx1ZSAqLworCWludAkJCXR1cG5vOwkJCS8q IHBvc2l0aW9uIGluZGV4IGZvciB0dXBsZSBpdCBjYW1lIGZyb20gKi8KK30g U2NhbGFySXRlbTsKKyAKKy8qIG11bHRpLXNvcnQgKi8KK3R5cGVkZWYgc3Ry dWN0IE11bHRpU29ydFN1cHBvcnREYXRhIHsKKwlpbnQJCQkJbmRpbXM7CQkv KiBudW1iZXIgb2YgZGltZW5zaW9ucyBzdXBwb3J0ZWQgYnkgdGhlICovCisJ U29ydFN1cHBvcnREYXRhCXNzdXBbMV07CS8qIHNvcnQgc3VwcG9ydCBkYXRh IGZvciBlYWNoIGRpbWVuc2lvbiAqLworfSBNdWx0aVNvcnRTdXBwb3J0RGF0 YTsKKwordHlwZWRlZiBNdWx0aVNvcnRTdXBwb3J0RGF0YSogTXVsdGlTb3J0 U3VwcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgU29ydEl0ZW0geworCURhdHVt ICAqdmFsdWVzOworCWJvb2wgICAqaXNudWxsOworfSBTb3J0SXRlbTsKKwor TXVsdGlTb3J0U3VwcG9ydCBtdWx0aV9zb3J0X2luaXQoaW50IG5kaW1zKTsK Kwordm9pZCBtdWx0aV9zb3J0X2FkZF9kaW1lbnNpb24oTXVsdGlTb3J0U3Vw cG9ydCBtc3MsIGludCBzb3J0ZGltLAorCQkJCQkJCSAgaW50IGRpbSwgVmFj QXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKKworaW50IG11bHRpX3NvcnRf Y29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICph cmcpOworCitpbnQgbXVsdGlfc29ydF9jb21wYXJlX2RpbShpbnQgZGltLCBj b25zdCBTb3J0SXRlbSAqYSwKKwkJCQkJCSAgIGNvbnN0IFNvcnRJdGVtICpi LCBNdWx0aVNvcnRTdXBwb3J0IG1zcyk7CisKKy8qIGNvbXBhcmF0b3JzLCB1 c2VkIHdoZW4gY29uc3RydWN0aW5nIG11bHRpdmFyaWF0ZSBzdGF0cyAqLwor aW50IGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgdm9pZCAqYXJnKTsKK2ludCBjb21wYXJlX3NjYWxhcnNf cGFydGl0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQg KmFyZyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2RlcGVuZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9k ZXBlbmRlbmNpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yYTA2NGEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMuYwpAQCAtMCwwICsxLDQzNyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGVw ZW5kZW5jaWVzLmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2YXJpYXRlIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9kZXBlbmRlbmNpZXMuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworLyoKKyAqIERldGVjdCBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGNvbHVtbnMuCisgKgor ICogVE9ETyBUaGlzIGJ1aWxkcyBhIGNvbXBsZXRlIHNldCBvZiBkZXBlbmRl bmNpZXMsIGkuZS4gaW5jbHVkaW5nIHRyYW5zaXRpdmUKKyAqICAgICAgZGVw ZW5kZW5jaWVzIC0gaWYgd2UgaWRlbnRpZnkgW0EgPT4gQl0gYW5kIFtCID0+ IENdLCB3ZSdyZSBsaWtlbHkgdG8KKyAqICAgICAgaWRlbnRpZnkgW0EgPT4g Q10gdG9vLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gIGtlZXAgb25seSB0aGUg bWluaW1hbCBzZXQKKyAqICAgICAgb2YgZGVwZW5kZW5jaWVzLCBpLmUuIHBy dW5lIGFsbCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgd2UgY2FuIHJlY3JlYXRl CisgKiAgICAgIGJ5IHRyYW5zaXZpdGl0eS4KKyAqIAorICogICAgICBUaGVy ZSBhcmUgdHdvIGNvbmNlcHR1YWwgd2F5cyB0byBkbyB0aGF0OgorICogCisg KiAgICAgIChhKSBnZW5lcmF0ZSBhbGwgdGhlIHJ1bGVzLCBhbmQgdGhlbiBw cnVuZSB0aGUgcnVsZXMgdGhhdCBtYXkgYmUKKyAqICAgICAgICAgIHJlY3Rl YXRlZCBieSBjb21iaW5pbmcgb3RoZXIgZGVwZW5kZW5jaWVzLCBvcgorICog CisgKiAgICAgIChiKSBwZXJmb3JtaW5nIHRoZSAnaXMgY29tYmluYXRpb24g b2Ygb3RoZXIgZGVwZW5kZW5jaWVzJyBjaGVjayBiZWZvcmUKKyAqICAgICAg ICAgIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrCisgKiAKKyAqICAgICAgVGhl IHNlY29uZCBvcHRpb24gaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB3ZSBkb24n dCByZWFsbHkgbmVlZCB0byBwZXJmb3JtCisgKiAgICAgIHRoZSBzb3J0L2Nv dW50LiBJdCdzIG5vdCBzdWZmaWNpZW50IGFsb25lLCB0aG91Z2gsIGJlY2F1 c2Ugd2UgbWF5CisgKiAgICAgIGRpc2NvdmVyIHRoZSBkZXBlbmRlbmNpZXMg aW4gdGhlIHdyb25nIG9yZGVyLiBGb3IgZXhhbXBsZSB3ZSBtYXkgZmluZAor ICoKKyAqICAgICAgICAgIChhIC0+IGIpLCAoYSAtPiBjKSBhbmQgdGhlbiAo YiAtPiBjKQorICoKKyAqICAgICAgTm9uZSBvZiB0aG9zZSBkZXBlbmRlbmNp ZXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYWxyZWFkeSBrbm93biBvbmVz LAorICogICAgICB5ZXQgKGEgLT4gQykgaXMgYSBjb21iaW5hdGlvbiBvZiAo YSAtPiBiKSBhbmQgKGIgLT4gYykuCisgKgorICogCisgKiBGSVhNRSBDdXJy ZW50bHkgd2Ugc2ltcGx5IHJlcGxhY2UgTlVMTCB2YWx1ZXMgd2l0aCAwIGFu ZCB0aGVuIGhhbmRsZSBpcyBhcworICogICAgICAgYSByZWd1bGFyIHZhbHVl LCBidXQgdGhhdCBncm91cHMgTlVMTCBhbmQgYWN0dWFsIDAgdmFsdWVzLiBU aGF0J3MKKyAqICAgICAgIGNsZWFybHkgaW5jb3JyZWN0IC0gd2UgbmVlZCB0 byBoYW5kbGUgTlVMTCB2YWx1ZXMgYXMgYSBzZXBhcmF0ZSB2YWx1ZS4KKyAq LworTVZEZXBlbmRlbmNpZXMKK2J1aWxkX212X2RlcGVuZGVuY2llcyhpbnQg bnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywK KwkJCQkJICBWYWNBdHRyU3RhdHMgKipzdGF0cykKK3sKKwlpbnQgaTsKKwlp bnQgbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKworCS8qIHJlc3VsdCAqLwor CWludCBuZGVwcyA9IDA7CisJTVZEZXBlbmRlbmNpZXMJZGVwZW5kZW5jaWVz ID0gTlVMTDsKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRf aW5pdCgyKTsJLyogMiBkaW1lbnNpb25zIGZvciBub3cgKi8KKworCS8qIFRP RE8gTWF5YmUgdGhpcyBzaG91bGQgYmUgc29tZWhvdyByZWxhdGVkIHRvIHRo ZSBudW1iZXIgb2YKKwkgKiAgICAgIGRpc3RpbmN0IHZhbHVlcyBpbiB0aGUg dHdvIGNvbHVtbnMgd2UncmUgY3VycmVudGx5IGFuYWx5emluZy4KKwkgKiAg ICAgIEFzc3VtaW5nIHRoZSBkaXN0cmlidXRpb24gaXMgdW5pZm9ybSwgd2Ug Y2FuIGVzdGltYXRlIHRoZQorCSAqICAgICAgYXZlcmFnZSBncm91cCBzaXpl IGFuZCB1c2UgaXQgYXMgYSB0aHJlc2hvbGQuIE9yIHNvbWV0aGluZworCSAq ICAgICAgbGlrZSB0aGF0LiBTZWVtcyBiZXR0ZXIgdGhhbiBhIHN0YXRpYyBh cHByb2FjaC4KKwkgKi8KKwlpbnQgbWluX2dyb3VwX3NpemUgPSAzOworCisJ LyogZGltZW5zaW9uIGluZGV4ZXMgd2UnbGwgY2hlY2sgZm9yIGFzc29jaWF0 aW9ucyBbYSA9PiBiXSAqLworCWludCBkaW1hLCBkaW1iOworCisJLyoKKwkg KiBXZSdsbCByZXVzZSB0aGUgc2FtZSBhcnJheSBmb3IgYWxsIHRoZSAyLWNv bHVtbiBjb21iaW5hdGlvbnMuCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRv IHNvcnQgdGhlIHNhbXBsZSByb3dzIGRpcmVjdGx5LCBidXQgdGhpcyBzZWVt ZWQKKwkgKiBzb21laG93IHNpbXBsZXMgLyBsZXNzIGVycm9yIHByb25lLiBB bm90aGVyIG9wdGlvbiB3b3VsZCBiZSB0bworCSAqIGFsbG9jYXRlIHRoZSBh cnJheXMgZm9yIGVhY2ggU29ydEl0ZW0gc2VwYXJhdGVseSwgYnV0IHRoYXQn ZCBiZQorCSAqIHNpZ25pZmljYW50IG92ZXJoZWFkIChub3QganVzdCBDUFUs IGJ1dCBlc3BlY2lhbGx5IG1lbW9yeSBibG9hdCkuCisJICovCisJU29ydEl0 ZW0gKiBpdGVtcyA9IChTb3J0SXRlbSopcGFsbG9jMChudW1yb3dzICogc2l6 ZW9mKFNvcnRJdGVtKSk7CisKKwlEYXR1bSAqdmFsdWVzID0gKERhdHVtKilw YWxsb2MwKHNpemVvZihEYXR1bSkgKiBudW1yb3dzICogMik7CisJYm9vbCAg KmlzbnVsbCA9IChib29sKilwYWxsb2MwKHNpemVvZihib29sKSAqIG51bXJv d3MgKiAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJ eworCQlpdGVtc1tpXS52YWx1ZXMgPSAmdmFsdWVzW2kgKiAyXTsKKwkJaXRl bXNbaV0uaXNudWxsID0gJmlzbnVsbFtpICogMl07CisJfQorCisJQXNzZXJ0 KG51bWF0dHJzID49IDIpOworCisJLyoKKwkgKiBFdmFsdWF0ZSBhbGwgcG9z c2libGUgY29tYmluYXRpb25zIG9mIFtBID0+IEJdLCB1c2luZyBhIHNpbXBs ZSBhbGdvcml0aG06CisJICoKKwkgKiAoYSkgc29ydCB0aGUgZGF0YSBieSBb QSxCXQorCSAqIChiKSBzcGxpdCB0aGUgZGF0YSBpbnRvIGdyb3VwcyBieSBB IChuZXcgZ3JvdXAgd2hlbmV2ZXIgYSB2YWx1ZSBjaGFuZ2VzKQorCSAqIChj KSBjb3VudCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBCIGNvbHVtbiAoYWdh aW4sIHZhbHVlIGNoYW5nZXMpCisJICoKKwkgKiBUT0RPIEl0IHNob3VsZCBi ZSByYXRoZXIgc2ltcGxlIHRvIG1lcmdlIFtBID0+IEJdIGFuZCBbQSA9PiBD XSBpbnRvCisJICogICAgICBbQSA9PiBCLENdLiBKdXN0IGtlZXAgQSBjb25z dGFudCwgY29sbGVjdCBhbGwgdGhlICJpbXBsaWVkIiBjb2x1bW5zCisJICog ICAgICBhbmQgeW91J3JlIGRvbmUuCisJICovCisJZm9yIChkaW1hID0gMDsg ZGltYSA8IG51bWF0dHJzOyBkaW1hKyspCisJeworCQkvKiBwcmVwYXJlIHRo ZSBzb3J0IGZ1bmN0aW9uIGZvciB0aGUgZmlyc3QgZGltZW5zaW9uICovCisJ CW11bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihtc3MsIDAsIGRpbWEsIHN0YXRz KTsKKworCQlmb3IgKGRpbWIgPSAwOyBkaW1iIDwgbnVtYXR0cnM7IGRpbWIr KykKKwkJeworCQkJU29ydEl0ZW0gY3VycmVudDsKKworCQkJLyogbnVtYmVy IG9mIGdyb3VwcyBzdXBwb3J0aW5nIC8gY29udHJhZGljdGluZyB0aGUgZGVw ZW5kZW5jeSAqLworCQkJaW50IG5fc3VwcG9ydGluZyA9IDA7CisJCQlpbnQg bl9jb250cmFkaWN0aW5nID0gMDsKKworCQkJLyogY291bnRlcnMgdmFsaWQg d2l0aGluIGEgZ3JvdXAgKi8KKwkJCWludCBncm91cF9zaXplID0gMDsKKwkJ CWludCBuX3Zpb2xhdGlvbnMgPSAwOworCisJCQlpbnQgbl9zdXBwb3J0aW5n X3Jvd3MgPSAwOworCQkJaW50IG5fY29udHJhZGljdGluZ19yb3dzID0gMDsK KworCQkJLyogbWFrZSBzdXJlIHRoZSBjb2x1bW5zIGFyZSBkaWZmZXJlbnQg KEEgPT4gQSkgKi8KKwkJCWlmIChkaW1hID09IGRpbWIpCisJCQkJY29udGlu dWU7CisKKwkJCS8qIHByZXBhcmUgdGhlIHNvcnQgZnVuY3Rpb24gZm9yIHRo ZSBzZWNvbmQgZGltZW5zaW9uICovCisJCQltdWx0aV9zb3J0X2FkZF9kaW1l bnNpb24obXNzLCAxLCBkaW1iLCBzdGF0cyk7CisKKwkJCS8qIHJlc2V0IHRo ZSB2YWx1ZXMgYW5kIGlzbnVsbCBmbGFncyAqLworCQkJbWVtc2V0KHZhbHVl cywgMCwgc2l6ZW9mKERhdHVtKSAqIG51bXJvd3MgKiAyKTsKKwkJCW1lbXNl dChpc251bGwsIDAsIHNpemVvZihib29sKSAgKiBudW1yb3dzICogMik7CisK KwkJCS8qIGFjY3VtdWxhdGUgYWxsIHRoZSBkYXRhIGZvciBib3RoIGNvbHVt bnMgaW50byBhbiBhcnJheSBhbmQgc29ydCBpdCAqLworCQkJZm9yIChpID0g MDsgaSA8IG51bXJvd3M7IGkrKykKKwkJCXsKKwkJCQlpdGVtc1tpXS52YWx1 ZXNbMF0KKwkJCQkJPSBoZWFwX2dldGF0dHIocm93c1tpXSwgYXR0cnMtPnZh bHVlc1tkaW1hXSwKKwkJCQkJCQkJCXN0YXRzW2RpbWFdLT50dXBEZXNjLCAm aXRlbXNbaV0uaXNudWxsWzBdKTsKKworCQkJCWl0ZW1zW2ldLnZhbHVlc1sx XQorCQkJCQk9IGhlYXBfZ2V0YXR0cihyb3dzW2ldLCBhdHRycy0+dmFsdWVz W2RpbWJdLAorCQkJCQkJCQkJc3RhdHNbZGltYl0tPnR1cERlc2MsICZpdGVt c1tpXS5pc251bGxbMV0pOworCQkJfQorCisJCQlxc29ydF9hcmcoKHZvaWQg KikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihTb3J0SXRlbSksCisJCQkJCSAg bXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOworCisJCQkvKgorCQkJICogV2Fs ayB0aHJvdWdoIHRoZSBhcnJheSwgc3BsaXQgaXQgaW50byByb3dzIGFjY29y ZGluZyB0bworCQkJICogdGhlIEEgdmFsdWUsIGFuZCBjb3VudCBkaXN0aW5j dCB2YWx1ZXMgaW4gdGhlIG90aGVyIG9uZS4KKwkJCSAqIElmIHRoZXJlJ3Mg YSBzaW5nbGUgQiB2YWx1ZSBmb3IgdGhlIHdob2xlIGdyb3VwLCB3ZSBjb3Vu dAorCQkJICogaXQgYXMgc3VwcG9ydGluZyB0aGUgYXNzb2NpYXRpb24sIG90 aGVyd2lzZSB3ZSBjb3VudCBpdAorCQkJICogYXMgY29udHJhZGljdGluZy4K KwkJCSAqCisJCQkgKiBGdXJ0aGVybW9yZSB3ZSByZXF1aXJlIGEgZ3JvdXAg dG8gaGF2ZSBhdCBsZWFzdCBhIGNlcnRhaW4KKwkJCSAqIG51bWJlciBvZiBy b3dzIHRvIGJlIGNvbnNpZGVyZWQgdXNlZnVsIGZvciBzdXBwb3J0aW5nIHRo ZQorCQkJICogZGVwZW5kZW5jeS4gQnV0IHdoZW4gaXQncyBjb250cmFkaWN0 aW5nLCB1c2UgaXQgYWx3YXlzIHVzZWZ1bC4KKwkJCSAqLworCisJCQkvKiBz dGFydCB3aXRoIHZhbHVlcyBmcm9tIHRoZSBmaXJzdCByb3cgKi8KKwkJCWN1 cnJlbnQgPSBpdGVtc1swXTsKKwkJCWdyb3VwX3NpemUgID0gMTsKKworCQkJ Zm9yIChpID0gMTsgaSA8IG51bXJvd3M7IGkrKykKKwkJCXsKKwkJCQkvKiBl bmQgb2YgdGhlIGdyb3VwICovCisJCQkJaWYgKG11bHRpX3NvcnRfY29tcGFy ZV9kaW0oMCwgJml0ZW1zW2ldLCAmY3VycmVudCwgbXNzKSAhPSAwKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhlcmUgYXJlIG5vIGNvbnRyYWRp Y3Rpbmcgcm93cywgY291bnQgaXQgYXMKKwkJCQkJICogc3VwcG9ydGluZyAo b3RoZXJ3aXNlIGNvbnRyYWRpY3RpbmcpLCBidXQgb25seSBpZgorCQkJCQkg KiB0aGUgZ3JvdXAgaXMgbGFyZ2UgZW5vdWdoLgorCQkJCQkgKgorCQkJCQkg KiBUaGUgcmVxdWlyZW1lbnQgb2YgYSBtaW5pbXVtIGdyb3VwIHNpemUgbWFr ZXMgaXQKKwkJCQkJICogaW1wb3NzaWJsZSB0byBpZGVudGlmeSBbdW5pcXVl LHVuaXF1ZV0gY2FzZXMsIGJ1dAorCQkJCQkgKiB0aGF0J3MgcHJvYmFibHkg YSBkaWZmZXJlbnQgY2FzZS4gVGhpcyBpcyBtb3JlCisJCQkJCSAqIGFib3V0 IFt6aXAgPT4gY2l0eV0gYXNzb2NpYXRpb25zIGV0Yy4KKwkJCQkJICoKKwkJ CQkJICogSWYgdGhlcmUgYXJlIHZpb2xhdGlvbnMsIGNvdW50IHRoZSBncm91 cC9yb3dzIGFzCisJCQkJCSAqIGEgdmlvbGF0aW9uLgorCQkJCQkgKgorCQkJ CQkgKiBJdCBtYXkgbmUgbmVpdGhlciwgaWYgdGhlIGdyb3VwIGlzIHRvbyBz bWFsbCAoZG9lcworCQkJCQkgKiBub3QgY29udGFpbiBhdCBsZWFzdCBtaW5f Z3JvdXBfc2l6ZSByb3dzKS4KKwkJCQkJICovCisJCQkJCWlmICgobl92aW9s YXRpb25zID09IDApICYmIChncm91cF9zaXplID49IG1pbl9ncm91cF9zaXpl KSkKKwkJCQkJeworCQkJCQkJbl9zdXBwb3J0aW5nICs9ICAxOworCQkJCQkJ bl9zdXBwb3J0aW5nX3Jvd3MgKz0gZ3JvdXBfc2l6ZTsKKwkJCQkJfQorCQkJ CQllbHNlIGlmIChuX3Zpb2xhdGlvbnMgPiAwKQorCQkJCQl7CisJCQkJCQlu X2NvbnRyYWRpY3RpbmcgKz0gIDE7CisJCQkJCQluX2NvbnRyYWRpY3Rpbmdf cm93cyArPSBncm91cF9zaXplOworCQkJCQl9CisKKwkJCQkJLyogY3VycmVu dCB2YWx1ZXMgc3RhcnQgYSBuZXcgZ3JvdXAgKi8KKwkJCQkJbl92aW9sYXRp b25zID0gMDsKKwkJCQkJZ3JvdXBfc2l6ZSA9IDA7CisJCQkJfQorCQkJCS8q IG1pc21hdGNoIG9mIGEgQiB2YWx1ZSBpcyBjb250cmFkaWN0aW5nICovCisJ CQkJZWxzZSBpZiAobXVsdGlfc29ydF9jb21wYXJlX2RpbSgxLCAmaXRlbXNb aV0sICZjdXJyZW50LCBtc3MpICE9IDApCisJCQkJeworCQkJCQluX3Zpb2xh dGlvbnMgKz0gMTsKKwkJCQl9CisKKwkJCQljdXJyZW50ID0gaXRlbXNbaV07 CisJCQkJZ3JvdXBfc2l6ZSArPSAxOworCQkJfQorCisJCQkvKiBoYW5kbGUg dGhlIGxhc3QgZ3JvdXAgKGp1c3QgbGlrZSBhYm92ZSkgKi8KKwkJCWlmICgo bl92aW9sYXRpb25zID09IDApICYmIChncm91cF9zaXplID49IG1pbl9ncm91 cF9zaXplKSkKKwkJCXsKKwkJCQluX3N1cHBvcnRpbmcgKz0gMTsKKwkJCQlu X3N1cHBvcnRpbmdfcm93cyArPSBncm91cF9zaXplOworCQkJfQorCQkJZWxz ZSBpZiAobl92aW9sYXRpb25zKQorCQkJeworCQkJCW5fY29udHJhZGljdGlu ZyArPSAxOworCQkJCW5fY29udHJhZGljdGluZ19yb3dzICs9IGdyb3VwX3Np emU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTZWUgaWYgdGhlIG51bWJlciBv ZiByb3dzIHN1cHBvcnRpbmcgdGhlIGFzc29jaWF0aW9uIGlzIGF0IGxlYXN0 CisJCQkgKiAxMHggdGhlIG51bWJlciBvZiByb3dzIHZpb2xhdGluZyB0aGUg aHlwb3RoZXRpY2FsIGRlcGVuZGVuY3kuCisJCQkgKgorCQkJICogVE9ETyBU aGlzIGlzIHJhdGhlciBhcmJpdHJhcnkgbGltaXQgLSBJIGd1ZXNzIGl0J3Mg cG9zc2libGUgdG8gZG8KKwkJCSAqICAgICAgc29tZSBtYXRoIHRvIGNvbWUg dXAgd2l0aCBhIGJldHRlciBydWxlIChlLmcuIHRlc3RpbmcgYSBoeXBvdGhl c2lzCisJCQkgKiAgICAgICd0aGlzIGlzIGR1ZSB0byByYW5kb21uZXNzJyku IFdlIGNhbiBjcmVhdGUgYSBjb250aW5nZW5jeSB0YWJsZQorCQkJICogICAg ICBmcm9tIHRoZSB2YWx1ZXMgYW5kIHVzZSBpdCBmb3IgdGVzdGluZy4gUG9z c2libHkgb25seSB3aGVuCisJCQkgKiAgICAgIHRoZXJlIGFyZSBubyBjb250 cmFkaWN0aW5nIHJvd3M/CisJCQkgKgorCQkJICogVE9ETyBBbHNvLCBpZiAo YSA9PiBiKSBhbmQgKGIgPT4gYSkgYXQgdGhlIHNhbWUgdGltZSwgaXQgcHJl dHR5IG11Y2gKKwkJCSAqICAgICAgbWVhbnMgdGhlcmUncyBhIDE6MSByZWxh dGlvbiAob3Igb25lIGlzIGEgJ2xhYmVsJyksIG1ha2luZyB0aGUKKwkJCSAq ICAgICAgY29uZGl0aW9ucyByYXRoZXIgcmVkdW5kYW50LiBBbHRob3VnaCBp dCdzIHBvc3NpYmxlIHRoYXQgdGhlCisJCQkgKiAgICAgIHF1ZXJ5IHVzZXMg aW5jb21wYXRpYmxlIGNvbWJpbmF0aW9uIG9mIHZhbHVlcy4KKwkJCSAqLwor CQkJaWYgKG5fc3VwcG9ydGluZ19yb3dzID4gKG5fY29udHJhZGljdGluZ19y b3dzICogMTApKQorCQkJeworCQkJCWlmIChkZXBlbmRlbmNpZXMgPT0gTlVM TCkKKwkJCQl7CisJCQkJCWRlcGVuZGVuY2llcyA9IChNVkRlcGVuZGVuY2ll cylwYWxsb2MwKHNpemVvZihNVkRlcGVuZGVuY2llc0RhdGEpKTsKKwkJCQkJ ZGVwZW5kZW5jaWVzLT5tYWdpYyA9IE1WU1RBVF9ERVBTX01BR0lDOworCQkJ CX0KKwkJCQllbHNlCisJCQkJCWRlcGVuZGVuY2llcyA9IHJlcGFsbG9jKGRl cGVuZGVuY2llcywgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBz KQorCQkJCQkJCQkJCQkrIHNpemVvZihNVkRlcGVuZGVuY3kpICogKGRlcGVu ZGVuY2llcy0+bmRlcHMgKyAxKSk7CisKKwkJCQkvKiB1cGRhdGUgdGhlICov CisJCQkJZGVwZW5kZW5jaWVzLT5kZXBzW25kZXBzXSA9IChNVkRlcGVuZGVu Y3kpcGFsbG9jMChzaXplb2YoTVZEZXBlbmRlbmN5RGF0YSkpOworCQkJCWRl cGVuZGVuY2llcy0+ZGVwc1tuZGVwc10tPmEgPSBhdHRycy0+dmFsdWVzW2Rp bWFdOworCQkJCWRlcGVuZGVuY2llcy0+ZGVwc1tuZGVwc10tPmIgPSBhdHRy cy0+dmFsdWVzW2RpbWJdOworCisJCQkJZGVwZW5kZW5jaWVzLT5uZGVwcyA9 ICgrK25kZXBzKTsKKwkJCX0KKwkJfQorCX0KKworCXBmcmVlKGl0ZW1zKTsK KwlwZnJlZSh2YWx1ZXMpOworCXBmcmVlKGlzbnVsbCk7CisJcGZyZWUoc3Rh dHMpOworCXBmcmVlKG1zcyk7CisKKwlyZXR1cm4gZGVwZW5kZW5jaWVzOwor fQorCisvKgorICogU3RvcmUgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGEgYnl0 ZWEsIHNvIHRoYXQgaXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUKKyAqIHBnX212 X3N0YXRpc3RpYyBjYXRhbG9nLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIG9u bHkgc3VwcG9ydHMgc2ltcGxlIHR3by1jb2x1bW4gcnVsZXMsIGFuZCBzdG9y ZXMgdGhlbQorICogYXMgYSBzZXF1ZW5jZSBvZiBhdHRudW0gcGFpcnMuIElu IHRoZSBmdXR1cmUsIHRoaXMgbmVlZHMgdG8gYmUgbWFkZQorICogbW9yZSBj b21wbGV4IHRvIHN1cHBvcnQgbXVsdGlwbGUgY29sdW1ucyBvbiBib3RoIHNp ZGVzIG9mIHRoZQorICogaW1wbGljYXRpb24gKHVzaW5nIEFORCBvbiBsZWZ0 LCBPUiBvbiByaWdodCkuCisgKi8KK2J5dGVhICoKK3NlcmlhbGl6ZV9tdl9k ZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKQorewor CWludCBpOworCisJLyogd2UgbmVlZCB0byBzdG9yZSBuZGVwcywgYW5kIGVh Y2ggbmVlZHMgMiAqIGludDE2ICovCisJU2l6ZSBsZW4gPSBWQVJIRFJTWiAr IG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcykKKwkJCQkrIGRl cGVuZGVuY2llcy0+bmRlcHMgKiAoc2l6ZW9mKGludDE2KSAqIDIpOworCisJ Ynl0ZWEgKiBvdXRwdXQgPSAoYnl0ZWEqKXBhbGxvYzAobGVuKTsKKworCWNo YXIgKiB0bXAgPSBWQVJEQVRBKG91dHB1dCk7CisKKwlTRVRfVkFSU0laRShv dXRwdXQsIGxlbik7CisKKwkvKiBmaXJzdCwgc3RvcmUgdGhlIG51bWJlciBv ZiBkaW1lbnNpb25zIC8gaXRlbXMgKi8KKwltZW1jcHkodG1wLCBkZXBlbmRl bmNpZXMsIG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcykpOwor CXRtcCArPSBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsIGRlcHMpOwor CisJLyogd2FsayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvcHkg Ym90aCBjb2x1bW5zIGludG8gdGhlIGJ5dGVhICovCisJZm9yIChpID0gMDsg aSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykKKwl7CisJCW1lbWNweSh0 bXAsICYoZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5hKSwgc2l6ZW9mKGludDE2 KSk7CisJCXRtcCArPSBzaXplb2YoaW50MTYpOworCisJCW1lbWNweSh0bXAs ICYoZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5iKSwgc2l6ZW9mKGludDE2KSk7 CisJCXRtcCArPSBzaXplb2YoaW50MTYpOworCX0KKworCXJldHVybiBvdXRw dXQ7Cit9CisKKy8qCisgKiBSZWFkcyBzZXJpYWxpemVkIGRlcGVuZGVuY2ll cyBpbnRvIE1WRGVwZW5kZW5jaWVzIHN0cnVjdHVyZS4KKyAqLworTVZEZXBl bmRlbmNpZXMKK2Rlc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAq IGRhdGEpCit7CisJaW50CQlpOworCVNpemUJZXhwZWN0ZWRfc2l6ZTsKKwlN VkRlcGVuZGVuY2llcwlkZXBlbmRlbmNpZXM7CisJY2hhciAgICp0bXA7CisK KwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChW QVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IG9mZnNldG9mKE1WRGVwZW5kZW5j aWVzRGF0YSxkZXBzKSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTVZEZXBl bmRlbmNpZXMgc2l6ZSAlbGQgKGV4cGVjdGVkIGF0IGxlYXN0ICVsZCkiLAor CQkJIFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpLCBvZmZzZXRvZihNVkRlcGVu ZGVuY2llc0RhdGEsZGVwcykpOworCisJLyogcmVhZCB0aGUgTVZEZXBlbmRl bmNpZXMgaGVhZGVyICovCisJZGVwZW5kZW5jaWVzID0gKE1WRGVwZW5kZW5j aWVzKXBhbGxvYzAoc2l6ZW9mKE1WRGVwZW5kZW5jaWVzRGF0YSkpOworCisJ LyogaW5pdGlhbGl6ZSBwb2ludGVyIHRvIHRoZSBkYXRhIHBhcnQgKHNraXAg dGhlIHZhcmxlbmEgaGVhZGVyKSAqLworCXRtcCA9IFZBUkRBVEEoZGF0YSk7 CisKKwkvKiBnZXQgdGhlIGhlYWRlciBhbmQgcGVyZm9ybSBiYXNpYyBzYW5p dHkgY2hlY2tzICovCisJbWVtY3B5KGRlcGVuZGVuY2llcywgdG1wLCBvZmZz ZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsIGRlcHMpKTsKKwl0bXAgKz0gb2Zm c2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKTsKKworCWlmIChkZXBl bmRlbmNpZXMtPm1hZ2ljICE9IE1WU1RBVF9ERVBTX01BR0lDKQorCXsKKwkJ cGZyZWUoZGVwZW5kZW5jaWVzKTsKKwkJZWxvZyhXQVJOSU5HLCAibm90IGEg TVYgRGVwZW5kZW5jaWVzIChtYWdpYyBudW1iZXIgbWlzbWF0Y2gpIik7CisJ CXJldHVybiBOVUxMOworCX0KKworCUFzc2VydChkZXBlbmRlbmNpZXMtPm5k ZXBzID4gMCk7CisKKwkvKiB3aGF0IGJ5dGVhIHNpemUgZG8gd2UgZXhwZWN0 IGZvciB0aG9zZSBwYXJhbWV0ZXJzICovCisJZXhwZWN0ZWRfc2l6ZSA9IG9m ZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSxkZXBzKSArCisJCQkJCWRlcGVu ZGVuY2llcy0+bmRlcHMgKiBzaXplb2YoaW50MTYpICogMjsKKworCWlmIChW QVJTSVpFX0FOWV9FWEhEUihkYXRhKSAhPSBleHBlY3RlZF9zaXplKQorCQll bG9nKEVSUk9SLCAiaW52YWxpZCBkZXBlbmRlbmNpZXMgc2l6ZSAlbGQgKGV4 cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpLCBl eHBlY3RlZF9zaXplKTsKKworCS8qIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUg TUNWIGl0ZW1zICovCisJZGVwZW5kZW5jaWVzID0gcmVwYWxsb2MoZGVwZW5k ZW5jaWVzLCBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsZGVwcykKKwkJ CQkJCQkrIChkZXBlbmRlbmNpZXMtPm5kZXBzICogc2l6ZW9mKE1WRGVwZW5k ZW5jeSkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMtPm5k ZXBzOyBpKyspCisJeworCQlkZXBlbmRlbmNpZXMtPmRlcHNbaV0gPSAoTVZE ZXBlbmRlbmN5KXBhbGxvYzAoc2l6ZW9mKE1WRGVwZW5kZW5jeURhdGEpKTsK KworCQltZW1jcHkoJihkZXBlbmRlbmNpZXMtPmRlcHNbaV0tPmEpLCB0bXAs IHNpemVvZihpbnQxNikpOworCQl0bXAgKz0gc2l6ZW9mKGludDE2KTsKKwor CQltZW1jcHkoJihkZXBlbmRlbmNpZXMtPmRlcHNbaV0tPmIpLCB0bXAsIHNp emVvZihpbnQxNikpOworCQl0bXAgKz0gc2l6ZW9mKGludDE2KTsKKwl9CisK KwlyZXR1cm4gZGVwZW5kZW5jaWVzOworfQorCisvKiBwcmludCBzb21lIGJh c2ljIGluZm8gYWJvdXQgZGVwZW5kZW5jaWVzIChudW1iZXIgb2YgZGVwZW5k ZW5jaWVzKSAqLworRGF0dW0KK3BnX212X3N0YXRzX2RlcGVuZGVuY2llc19p bmZvKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmRhdGEgPSBQ R19HRVRBUkdfQllURUFfUCgwKTsKKwljaGFyCSAgICpyZXN1bHQ7CisKKwlN VkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMgPSBkZXNlcmlhbGl6ZV9tdl9k ZXBlbmRlbmNpZXMoZGF0YSk7CisKKwlpZiAoZGVwZW5kZW5jaWVzID09IE5V TEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlyZXN1bHQgPSBwYWxsb2Mw KDEyOCk7CisJc25wcmludGYocmVzdWx0LCAxMjgsICJkZXBlbmRlbmNpZXM9 JWQiLCBkZXBlbmRlbmNpZXMtPm5kZXBzKTsKKworCS8qIEZJWE1FIGZyZWUg dGhlIGRlc2VyaWFsaXplZCBkYXRhIChwZnJlZSBpcyBub3QgZW5vdWdoKSAq LworCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQocmVzdWx0 KSk7Cit9CisKKy8qIHByaW50IHRoZSBkZXBlbmRlbmNpZXMKKyAqCisgKiBU T0RPICBXb3VsZCBiZSBuaWNlIGlmIHRoaXMga25ldyB0aGUgYWN0dWFsIGNv bHVtbiBuYW1lcyAoaW5zdGVhZCBvZgorICogICAgICAgdGhlIGF0dG51bXMp LgorICoKKyAqIEZJWE1FIFRoaXMgaXMgcmVhbGx5IHVnbHkgYW5kIGRvZXMg bm90IHJlYWxseSBjaGVjayB0aGUgbGVuZ3RocyBhbmQKKyAqICAgICAgIHN0 cmNweS9zbnByaW50ZiByZXR1cm4gdmFsdWVzIHByb3Blcmx5LiBOZWVkcyB0 byBiZSBmaXhlZC4KKyAqLworRGF0dW0KK3BnX212X3N0YXRzX2RlcGVuZGVu Y2llc19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50CQkJaSA9IDA7 CisJYnl0ZWEJICAgKmRhdGEgPSBQR19HRVRBUkdfQllURUFfUCgwKTsKKwlj aGFyCSAgICpyZXN1bHQgPSBOVUxMOworCWludAkJCWxlbiA9IDA7CisKKwlN VkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMgPSBkZXNlcmlhbGl6ZV9tdl9k ZXBlbmRlbmNpZXMoZGF0YSk7CisKKwlpZiAoZGVwZW5kZW5jaWVzID09IE5V TEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg ZGVwZW5kZW5jaWVzLT5uZGVwczsgaSsrKQorCXsKKwkJTVZEZXBlbmRlbmN5 IGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXMtPmRlcHNbaV07CisJCWNoYXIJ YnVmZmVyWzEyOF07CisKKwkJaW50CQl0bXAgPSBzbnByaW50ZihidWZmZXIs IDEyOCwgIiVzJWQgPT4gJWQiLAorCQkJCSgoaSA9PSAwKSA/ICIiIDogIiwg IiksIGRlcGVuZGVuY3ktPmEsIGRlcGVuZGVuY3ktPmIpOworCisJCWlmICh0 bXAgPCAxMjcpCisJCXsKKwkJCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJCQly ZXN1bHQgPSBwYWxsb2MwKGxlbiArIHRtcCArIDEpOworCQkJZWxzZQorCQkJ CXJlc3VsdCA9IHJlcGFsbG9jKHJlc3VsdCwgbGVuICsgdG1wICsgMSk7CisK KwkJCXN0cmNweShyZXN1bHQgKyBsZW4sIGJ1ZmZlcik7CisJCQlsZW4gKz0g dG1wOworCQl9CisJfQorCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3Rv X3RleHQocmVzdWx0KSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGZk OGRjOTEuLjhjZTljMGUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0yMTA0 LDYgKzIxMDQsNTAgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3Qg Y2hhciAqc2NoZW1hbmFtZSwKIAkJCVBRY2xlYXIocmVzdWx0KTsKIAkJfQog CisJCS8qIHByaW50IGFueSBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyAqLwor CQlpZiAocHNldC5zdmVyc2lvbiA+PSA5MDYwMCkKKwkJeworCQkJcHJpbnRm UFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgICJTRUxFQ1Qgb2lkLCBzdGFu YW1lc3BhY2U6OnJlZ25hbWVzcGFjZSBBUyBuc3AsIHN0YW5hbWUsIHN0YWtl eXMsXG4iCisJCQkJCQkgICAiICBkZXBzX2VuYWJsZWQsXG4iCisJCQkJCQkg ICAiICBkZXBzX2J1aWx0LFxuIgorCQkJCQkJICAgIiAgKFNFTEVDVCBzdHJp bmdfYWdnKGF0dG5hbWU6OnRleHQsJywgJylcbiIKKwkJCQkJCSAgICIgICAg RlJPTSAoKFNFTEVDVCB1bm5lc3Qoc3Rha2V5cykgQVMgYXR0bnVtKSBzXG4i CisJCQkJCQkgICAiICAgICAgICAgSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiAo c3RhcmVsaWQgPSBhLmF0dHJlbGlkIGFuZCBhLmF0dG51bSA9IHMuYXR0bnVt KSkpIEFTIGF0dG51bXNcbiIKKwkJCQkJCSAgICJGUk9NIHBnX212X3N0YXRp c3RpYyBzdGF0IFdIRVJFIHN0YXJlbGlkICA9ICclcycgT1JERVIgQlkgMTsi LAorCQkJCQkJCSAgb2lkKTsKKworCQkJcmVzdWx0ID0gUFNRTGV4ZWMoYnVm LmRhdGEpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZ290byBlcnJvcl9yZXR1 cm47CisJCQllbHNlCisJCQkJdHVwbGVzID0gUFFudHVwbGVzKHJlc3VsdCk7 CisKKwkJCWlmICh0dXBsZXMgPiAwKQorCQkJeworCQkJCXByaW50VGFibGVB ZGRGb290ZXIoJmNvbnQsIF8oIlN0YXRpc3RpY3M6IikpOworCQkJCWZvciAo aSA9IDA7IGkgPCB0dXBsZXM7IGkrKykKKwkJCQl7CisJCQkJCXByaW50ZlBR RXhwQnVmZmVyKCZidWYsICIgICAgIik7CisKKwkJCQkJLyogc3RhdGlzdGlj cyBuYW1lIChxdWFsaWZpZWQgd2l0aCBuYW1lc3BhY2UpICovCisJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsICJcIiVzLiVzXCIgIiwKKwkJCQkJCQkJ CSAgUFFnZXR2YWx1ZShyZXN1bHQsIGksIDEpLAorCQkJCQkJCQkJICBQUWdl dHZhbHVlKHJlc3VsdCwgaSwgMikpOworCisJCQkJCS8qICBvcHRpb25zICov CisJCQkJCWlmICghc3RyY21wKFBRZ2V0dmFsdWUocmVzdWx0LCBpLCA0KSwg InQiKSkKKwkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIoZGVwZW5k ZW5jaWVzKSIpOworCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIg T04gKCVzKSIsCisJCQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQsIGksIDYpKTsK KworCQkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7 CisJCQkJfQorCQkJfQorCQkJUFFjbGVhcihyZXN1bHQpOworCQl9CisKIAkJ LyogcHJpbnQgcnVsZXMgKi8KIAkJaWYgKHRhYmxlaW5mby5oYXNydWxlcyAm JiB0YWJsZWluZm8ucmVsa2luZCAhPSAnbScpCiAJCXsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKaW5kZXggMDQ5YmY5Zi4uMTIyMTFm ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5 LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAg LTE1MywxMCArMTUzLDExIEBAIHR5cGVkZWYgZW51bSBPYmplY3RDbGFzcwog CU9DTEFTU19FWFRFTlNJT04sCQkJLyogcGdfZXh0ZW5zaW9uICovCiAJT0NM QVNTX0VWRU5UX1RSSUdHRVIsCQkvKiBwZ19ldmVudF90cmlnZ2VyICovCiAJ T0NMQVNTX1BPTElDWSwJCQkJLyogcGdfcG9saWN5ICovCi0JT0NMQVNTX1RS QU5TRk9STQkJCS8qIHBnX3RyYW5zZm9ybSAqLworCU9DTEFTU19UUkFOU0ZP Uk0sCQkJLyogcGdfdHJhbnNmb3JtICovCisJT0NMQVNTX1NUQVRJU1RJQ1MJ CQkvKiBwZ19tdl9zdGF0aXN0aWNzICovCiB9IE9iamVjdENsYXNzOwogCi0j ZGVmaW5lIExBU1RfT0NMQVNTCQlPQ0xBU1NfVFJBTlNGT1JNCisjZGVmaW5l IExBU1RfT0NMQVNTCQlPQ0xBU1NfU1RBVElTVElDUwogCiAKIC8qIGluIGRl cGVuZGVuY3kuYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9oZWFwLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaAppbmRleCBi ODBkOGQ4Li41YWU0MmY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2hlYXAuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaApA QCAtMTE5LDYgKzExOSw3IEBAIGV4dGVybiB2b2lkIFJlbW92ZUF0dHJEZWZh dWx0KE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0sCiAJCQkJICBEcm9w QmVoYXZpb3IgYmVoYXZpb3IsIGJvb2wgY29tcGxhaW4sIGJvb2wgaW50ZXJu YWwpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlQXR0ckRlZmF1bHRCeUlkKE9pZCBh dHRyZGVmSWQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlU3RhdGlzdGljcyhPaWQg cmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKTsKK2V4dGVybiB2b2lkIFJlbW92 ZU1WU3RhdGlzdGljcyhPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKTsK IAogZXh0ZXJuIEZvcm1fcGdfYXR0cmlidXRlIFN5c3RlbUF0dHJpYnV0ZURl ZmluaXRpb24oQXR0ck51bWJlciBhdHRubywKIAkJCQkJCSAgYm9vbCByZWxo YXNvaWRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5k ZXhpbmcuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXhpbmcuaAppbmRl eCBhYjJjMWE4Li5hNzY4YmI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4aW5nLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleGluZy5oCkBAIC0xNzMsNiArMTczLDEzIEBAIERFQ0xBUkVfVU5JUVVF X0lOREVYKHBnX2xhcmdlb2JqZWN0X2xvaWRfcG5faW5kZXgsIDI2ODMsIG9u IHBnX2xhcmdlb2JqZWN0IHVzaW5nCiBERUNMQVJFX1VOSVFVRV9JTkRFWChw Z19sYXJnZW9iamVjdF9tZXRhZGF0YV9vaWRfaW5kZXgsIDI5OTYsIG9uIHBn X2xhcmdlb2JqZWN0X21ldGFkYXRhIHVzaW5nIGJ0cmVlKG9pZCBvaWRfb3Bz KSk7CiAjZGVmaW5lIExhcmdlT2JqZWN0TWV0YWRhdGFPaWRJbmRleElkCTI5 OTYKIAorREVDTEFSRV9VTklRVUVfSU5ERVgocGdfbXZfc3RhdGlzdGljX29p ZF9pbmRleCwgMzM4MCwgb24gcGdfbXZfc3RhdGlzdGljIHVzaW5nIGJ0cmVl KG9pZCBvaWRfb3BzKSk7CisjZGVmaW5lIE12U3RhdGlzdGljT2lkSW5kZXhJ ZCAgMzM4MAorREVDTEFSRV9VTklRVUVfSU5ERVgocGdfbXZfc3RhdGlzdGlj X25hbWVfaW5kZXgsIDM5OTcsIG9uIHBnX212X3N0YXRpc3RpYyB1c2luZyBi dHJlZShzdGFuYW1lIG5hbWVfb3BzLCBzdGFuYW1lc3BhY2Ugb2lkX29wcykp OworI2RlZmluZSBNdlN0YXRpc3RpY05hbWVJbmRleElkICAzOTk3CitERUNM QVJFX0lOREVYKHBnX212X3N0YXRpc3RpY19yZWxpZF9pbmRleCwgMzM3OSwg b24gcGdfbXZfc3RhdGlzdGljIHVzaW5nIGJ0cmVlKHN0YXJlbGlkIG9pZF9v cHMpKTsKKyNkZWZpbmUgTXZTdGF0aXN0aWNSZWxpZEluZGV4SWQJMzM3OQor CiBERUNMQVJFX1VOSVFVRV9JTkRFWChwZ19uYW1lc3BhY2VfbnNwbmFtZV9p bmRleCwgMjY4NCwgb24gcGdfbmFtZXNwYWNlIHVzaW5nIGJ0cmVlKG5zcG5h bWUgbmFtZV9vcHMpKTsKICNkZWZpbmUgTmFtZXNwYWNlTmFtZUluZGV4SWQg IDI2ODQKIERFQ0xBUkVfVU5JUVVFX0lOREVYKHBnX25hbWVzcGFjZV9vaWRf aW5kZXgsIDI2ODUsIG9uIHBnX25hbWVzcGFjZSB1c2luZyBidHJlZShvaWQg b2lkX29wcykpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9u YW1lc3BhY2UuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmgK aW5kZXggMmNjYjNhNy4uNDRjZjljNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL25hbWVzcGFjZS5oCkBAIC0xMzcsNiArMTM3LDggQEAgZXh0ZXJuIE9p ZAlnZXRfY29sbGF0aW9uX29pZChMaXN0ICpjb2xsbmFtZSwgYm9vbCBtaXNz aW5nX29rKTsKIGV4dGVybiBPaWQJZ2V0X2NvbnZlcnNpb25fb2lkKExpc3Qg KmNvbm5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4gT2lkCUZpbmRE ZWZhdWx0Q29udmVyc2lvblByb2MoaW50MzIgZm9yX2VuY29kaW5nLCBpbnQz MiB0b19lbmNvZGluZyk7CiAKK2V4dGVybiBPaWQJZ2V0X3N0YXRpc3RpY3Nf b2lkKExpc3QgKm5hbWVzLCBib29sIG1pc3Npbmdfb2spOworCiAvKiBpbml0 aWFsaXphdGlvbiAmIHRyYW5zYWN0aW9uIGNsZWFudXAgY29kZSAqLwogZXh0 ZXJuIHZvaWQgSW5pdGlhbGl6ZVNlYXJjaFBhdGgodm9pZCk7CiBleHRlcm4g dm9pZCBBdEVPWGFjdF9OYW1lc3BhY2UoYm9vbCBpc0NvbW1pdCwgYm9vbCBw YXJhbGxlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X212X3N0YXRpc3RpYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9z dGF0aXN0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5jNzRhZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19tdl9zdGF0aXN0aWMuaApAQCAtMCwwICsxLDc1IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19tdl9zdGF0 aXN0aWMuaAorICoJICBkZWZpbml0aW9uIG9mIHRoZSBzeXN0ZW0gIm11bHRp dmFyaWF0ZSBzdGF0aXN0aWMiIHJlbGF0aW9uIChwZ19tdl9zdGF0aXN0aWMp CisgKgkgIGFsb25nIHdpdGggdGhlIHJlbGF0aW9uJ3MgaW5pdGlhbCBjb250 ZW50cy4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMTQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKKyAqCisgKiBOT1RFUworICoJ ICB0aGUgZ2VuYmtpLnBsIHNjcmlwdCByZWFkcyB0aGlzIGZpbGUgYW5kIGdl bmVyYXRlcyAuYmtpCisgKgkgIGluZm9ybWF0aW9uIGZyb20gdGhlIERBVEEo KSBzdGF0ZW1lbnRzLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIFBHX01WX1NUQVRJU1RJQ19ICisjZGVmaW5l IFBHX01WX1NUQVRJU1RJQ19ICisKKyNpbmNsdWRlICJjYXRhbG9nL2dlbmJr aS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJcGdfbXZfc3RhdGlz dGljIGRlZmluaXRpb24uICBjcHAgdHVybnMgdGhpcyBpbnRvCisgKgkJdHlw ZWRlZiBzdHJ1Y3QgRm9ybURhdGFfcGdfbXZfc3RhdGlzdGljCisgKiAtLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgTXZTdGF0aXN0aWNSZWxhdGlv bklkICAzMzgxCisKK0NBVEFMT0cocGdfbXZfc3RhdGlzdGljLDMzODEpCit7 CisJLyogVGhlc2UgZmllbGRzIGZvcm0gdGhlIHVuaXF1ZSBrZXkgZm9yIHRo ZSBlbnRyeTogKi8KKwlPaWQJCQlzdGFyZWxpZDsJCQkvKiByZWxhdGlvbiBj b250YWluaW5nIGF0dHJpYnV0ZXMgKi8KKwlOYW1lRGF0YQlzdGFuYW1lOwkJ CS8qIHN0YXRpc3RpY3MgbmFtZSAqLworCU9pZAkJCXN0YW5hbWVzcGFjZTsJ CS8qIE9JRCBvZiBuYW1lc3BhY2UgY29udGFpbmluZyB0aGlzIHN0YXRpc3Rp Y3MgKi8KKwlPaWQJCQlzdGFvd25lcjsJCQkvKiBzdGF0aXN0aWNzIG93bmVy ICovCisKKwkvKiBzdGF0aXN0aWNzIHJlcXVlc3RlZCB0byBidWlsZCAqLwor CWJvb2wJCWRlcHNfZW5hYmxlZDsJCS8qIGFuYWx5emUgZGVwZW5kZW5jaWVz PyAqLworCisJLyogc3RhdGlzdGljcyB0aGF0IGFyZSBhdmFpbGFibGUgKGlm IHJlcXVlc3RlZCkgKi8KKwlib29sCQlkZXBzX2J1aWx0OwkJCS8qIGRlcGVu ZGVuY2llcyB3ZXJlIGJ1aWx0ICovCisKKwkvKiB2YXJpYWJsZS1sZW5ndGgg ZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNz IHRvIHN0YWtleXMgKi8KKwlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJy YXkgb2YgY29sdW1uIGtleXMgKi8KKworI2lmZGVmIENBVEFMT0dfVkFSTEVO CisJYnl0ZWEJCXN0YWRlcHM7CQkJLyogZGVwZW5kZW5jaWVzIChzZXJpYWxp emVkKSAqLworI2VuZGlmCisKK30gRm9ybURhdGFfcGdfbXZfc3RhdGlzdGlj OworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJRm9ybV9wZ19tdl9zdGF0 aXN0aWMgY29ycmVzcG9uZHMgdG8gYSBwb2ludGVyIHRvIGEgdHVwbGUgd2l0 aAorICoJCXRoZSBmb3JtYXQgb2YgcGdfbXZfc3RhdGlzdGljIHJlbGF0aW9u LgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIEZvcm1EYXRh X3BnX212X3N0YXRpc3RpYyAqRm9ybV9wZ19tdl9zdGF0aXN0aWM7CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqCQljb21waWxlciBjb25zdGFudHMgZm9y IHBnX212X3N0YXRpc3RpYworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisj ZGVmaW5lIE5hdHRzX3BnX212X3N0YXRpc3RpYwkJCQkJOAorI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZAkJCTEKKyNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZQkJCTIKKyNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhbmFtZXNwYWNlCQkzCisjZGVmaW5lIEFudW1f cGdfbXZfc3RhdGlzdGljX3N0YW93bmVyCQkJNAorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQJCTUKKyNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTYKKyNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJCTcKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcwkJCTgKKworI2VuZGlmICAgLyogUEdfTVZf U1RBVElTVElDX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgK aW5kZXggY2JiYjg4My4uZWVjY2U0MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmgKQEAgLTI2NjYsNiArMjY2NiwxMSBAQCBERVNDUigiY3Vy cmVudCB1c2VyIHByaXZpbGVnZSBvbiBhbnkgY29sdW1uIGJ5IHJlbCBuYW1l Iik7CiBEQVRBKGluc2VydCBPSUQgPSAzMDI5ICggIGhhc19hbnlfY29sdW1u X3ByaXZpbGVnZQkgICBQR05TUCBQR1VJRCAxMiAxMCAwIDAgMCBmIGYgZiBm IHQgZiBzIHMgMiAwIDE2ICIyNiAyNSIgX251bGxfIF9udWxsXyBfbnVsbF8g X251bGxfIF9udWxsXyBoYXNfYW55X2NvbHVtbl9wcml2aWxlZ2VfaWQgX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigiY3VycmVudCB1c2VyIHBy aXZpbGVnZSBvbiBhbnkgY29sdW1uIGJ5IHJlbCBvaWQiKTsKIAorREFUQShp bnNlcnQgT0lEID0gMzk5OCAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNf aW5mbyAgICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBp IHMgMSAwIDI1ICIxNyIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9u dWxsXyBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyBfbnVsbF8gX251 bGxfIF9udWxsXyApKTsKK0RFU0NSKCJtdWx0aXZhcmlhdGUgc3RhdHM6IGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGluZm8iKTsKK0RBVEEoaW5zZXJ0IE9J RCA9IDM5OTkgKCAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgICAg IFBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYgaSBzIDEgMCAy NSAiMTciIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGdf bXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgX251bGxfIF9udWxsXyBfbnVs bF8gKSk7CitERVNDUigibXVsdGl2YXJpYXRlIHN0YXRzOiBmdW5jdGlvbmFs IGRlcGVuZGVuY2llcyBzaG93Iik7CisKIERBVEEoaW5zZXJ0IE9JRCA9IDE5 MjggKCAgcGdfc3RhdF9nZXRfbnVtc2NhbnMJCQlQR05TUCBQR1VJRCAxMiAx IDAgMCAwIGYgZiBmIGYgdCBmIHMgciAxIDAgMjAgIjI2IiBfbnVsbF8gX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX3N0YXRfZ2V0X251bXNjYW5z IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInN0YXRpc3RpY3M6 IG51bWJlciBvZiBzY2FucyBkb25lIGZvciB0YWJsZS9pbmRleCIpOwogREFU QShpbnNlcnQgT0lEID0gMTkyOSAoICBwZ19zdGF0X2dldF90dXBsZXNfcmV0 dXJuZWQJUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIg MSAwIDIwICIyNiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxs XyBwZ19zdGF0X2dldF90dXBsZXNfcmV0dXJuZWQgX251bGxfIF9udWxsXyBf bnVsbF8gKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Rv YXN0aW5nLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3RvYXN0aW5nLmgKaW5k ZXggYjdhMzhjZS4uYTUyMDk2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy90b2FzdGluZy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv dG9hc3RpbmcuaApAQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9pZCBCb290 c3RyYXBUb2FzdFRhYmxlKGNoYXIgKnJlbE5hbWUsCiBERUNMQVJFX1RPQVNU KHBnX2F0dHJkZWYsIDI4MzAsIDI4MzEpOwogREVDTEFSRV9UT0FTVChwZ19j b25zdHJhaW50LCAyODMyLCAyODMzKTsKIERFQ0xBUkVfVE9BU1QocGdfZGVz Y3JpcHRpb24sIDI4MzQsIDI4MzUpOworREVDTEFSRV9UT0FTVChwZ19tdl9z dGF0aXN0aWMsIDM1NzcsIDM1NzgpOwogREVDTEFSRV9UT0FTVChwZ19wcm9j LCAyODM2LCAyODM3KTsKIERFQ0xBUkVfVE9BU1QocGdfcmV3cml0ZSwgMjgz OCwgMjgzOSk7CiBERUNMQVJFX1RPQVNUKHBnX3NlY2xhYmVsLCAzNTk4LCAz NTk5KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJl bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKaW5kZXggNTRm NjdlOS4uOTlhNmE2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZGVmcmVtLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVt LmgKQEAgLTc1LDYgKzc1LDEwIEBAIGV4dGVybiBPYmplY3RBZGRyZXNzIERl ZmluZU9wZXJhdG9yKExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzKTsK IGV4dGVybiB2b2lkIFJlbW92ZU9wZXJhdG9yQnlJZChPaWQgb3Blck9pZCk7 CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlck9wZXJhdG9yKEFsdGVyT3Bl cmF0b3JTdG10ICpzdG10KTsKIAorLyogY29tbWFuZHMvc3RhdHNjbWRzLmMg Ki8KK2V4dGVybiBPYmplY3RBZGRyZXNzIENyZWF0ZVN0YXRpc3RpY3MoQ3Jl YXRlU3RhdHNTdG10ICpzdG10KTsKK2V4dGVybiB2b2lkIFJlbW92ZVN0YXRp c3RpY3NCeUlkKE9pZCBzdGF0c09pZCk7CisKIC8qIGNvbW1hbmRzL2FnZ3Jl Z2F0ZWNtZHMuYyAqLwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQWdn cmVnYXRlKExpc3QgKm5hbWUsIExpc3QgKmFyZ3MsIGJvb2wgb2xkc3R5bGUs CiAJCQkJTGlzdCAqcGFyYW1ldGVycywgY29uc3QgY2hhciAqcXVlcnlTdHJp bmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggZmFkOTk4OC4uNTQ1 YjYyYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yNjYsNiArMjY2 LDcgQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX1BsYWNlSG9sZGVySW5m bywKIAlUX01pbk1heEFnZ0luZm8sCiAJVF9QbGFubmVyUGFyYW1JdGVtLAor CVRfTVZTdGF0aXN0aWNJbmZvLAogCiAJLyoKIAkgKiBUQUdTIEZPUiBNRU1P UlkgTk9ERVMgKG1lbW5vZGVzLmgpCkBAIC00MDEsNiArNDAyLDcgQEAgdHlw ZWRlZiBlbnVtIE5vZGVUYWcKIAlUX0NyZWF0ZVBvbGljeVN0bXQsCiAJVF9B bHRlclBvbGljeVN0bXQsCiAJVF9DcmVhdGVUcmFuc2Zvcm1TdG10LAorCVRf Q3JlYXRlU3RhdHNTdG10LAogCiAJLyoKIAkgKiBUQUdTIEZPUiBQQVJTRSBU UkVFIE5PREVTIChwYXJzZW5vZGVzLmgpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKaW5kZXggMmZkMDYyOS4uZTE4MDdmYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtNjAxLDYgKzYwMSwxNyBA QCB0eXBlZGVmIHN0cnVjdCBDb2x1bW5EZWYKIAlpbnQJCQlsb2NhdGlvbjsJ CS8qIHBhcnNlIGxvY2F0aW9uLCBvciAtMSBpZiBub25lL3Vua25vd24gKi8K IH0gQ29sdW1uRGVmOwogCit0eXBlZGVmIHN0cnVjdCBDcmVhdGVTdGF0c1N0 bXQKK3sKKwlOb2RlVGFnCQl0eXBlOworCUxpc3QJICAgKmRlZm5hbWVzOwkJ LyogcXVhbGlmaWVkIG5hbWUgKGxpc3Qgb2YgVmFsdWUgc3RyaW5ncykgKi8K KwlSYW5nZVZhciAgICpyZWxhdGlvbjsJCS8qIHJlbGF0aW9uIHRvIGJ1aWxk IHN0YXRpc3RpY3Mgb24gKi8KKwlMaXN0CSAgICprZXlzOwkJCS8qIFN0cmlu ZyBub2RlcyBuYW1pbmcgcmVmZXJlbmNlZCBjb2x1bW4ocykgKi8KKwlMaXN0 CSAgICpvcHRpb25zOwkJLyogbGlzdCBvZiBEZWZFbGVtIG5vZGVzICovCisJ Ym9vbAkJaWZfbm90X2V4aXN0czsJLyoganVzdCBkbyBub3RoaW5nIGlmIHN0 YXRpc3RpY3MgYWxyZWFkeSBleGlzdHM/ICovCit9IENyZWF0ZVN0YXRzU3Rt dDsKKworCiAvKgogICogVGFibGVMaWtlQ2xhdXNlIC0gQ1JFQVRFIFRBQkxF ICggLi4uIExJS0UgLi4uICkgY2xhdXNlCiAgKi8KQEAgLTE0MTAsNiArMTQy MSw3IEBAIHR5cGVkZWYgZW51bSBPYmplY3RUeXBlCiAJT0JKRUNUX1JVTEUs CiAJT0JKRUNUX1NDSEVNQSwKIAlPQkpFQ1RfU0VRVUVOQ0UsCisJT0JKRUNU X1NUQVRJU1RJQ1MsCiAJT0JKRUNUX1RBQkNPTlNUUkFJTlQsCiAJT0JKRUNU X1RBQkxFLAogCU9CSkVDVF9UQUJMRVNQQUNFLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCBiL3NyYy9pbmNsdWRlL25vZGVz L3JlbGF0aW9uLmgKaW5kZXggNjQxNzI4Yi4uZTEwZGNmMSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9yZWxhdGlvbi5oCkBAIC01MzksNiArNTM5LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUxpc3QJICAgKmxhdGVyYWxfdmFy czsJLyogTEFURVJBTCBWYXJzIGFuZCBQSFZzIHJlZmVyZW5jZWQgYnkgcmVs ICovCiAJUmVsaWRzCQlsYXRlcmFsX3JlZmVyZW5jZXJzOwkvKiByZWxzIHRo YXQgcmVmZXJlbmNlIG1lIGxhdGVyYWxseSAqLwogCUxpc3QJICAgKmluZGV4 bGlzdDsJCS8qIGxpc3Qgb2YgSW5kZXhPcHRJbmZvICovCisJTGlzdAkgICAq bXZzdGF0bGlzdDsJCS8qIGxpc3Qgb2YgTVZTdGF0aXN0aWNJbmZvICovCiAJ QmxvY2tOdW1iZXIgcGFnZXM7CQkJLyogc2l6ZSBlc3RpbWF0ZXMgZGVyaXZl ZCBmcm9tIHBnX2NsYXNzICovCiAJZG91YmxlCQl0dXBsZXM7CiAJZG91Ymxl CQlhbGx2aXNmcmFjOwpAQCAtNjM0LDYgKzYzNSwzMyBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleE9wdEluZm8KIAl2b2lkCQkoKmFtY29zdGVzdGltYXRlKSAo KTsJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogfSBJbmRleE9wdEluZm87 CiAKKy8qCisgKiBNVlN0YXRpc3RpY0luZm8KKyAqCQlJbmZvcm1hdGlvbiBh Ym91dCBtdWx0aXZhcmlhdGUgc3RhdHMgZm9yIHBsYW5uaW5nL29wdGltaXph dGlvbgorICoKKyAqIFRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQg d2hpY2ggY29sdW1ucyBhcmUgY292ZXJlZCBieSB0aGUKKyAqIHN0YXRpc3Rp Y3MgKHN0YWtleXMpLCB3aGljaCBvcHRpb25zIHdlcmUgcmVxdWVzdGVkIHdo aWxlIGFkZGluZyB0aGUKKyAqIHN0YXRpc3RpY3MgKCpfZW5hYmxlZCksIGFu ZCB3aGljaCBraW5kcyBvZiBzdGF0aXN0aWNzIHdlcmUgYWN0dWFsbHkKKyAq IGJ1aWx0IGFuZCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgb3B0aW1pemVyICgq X2J1aWx0KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTVZTdGF0aXN0aWNJbmZv Cit7CisJTm9kZVRhZwkJdHlwZTsKKworCU9pZAkJCW12b2lkOwkJCS8qIE9J RCBvZiB0aGUgc3RhdGlzdGljcyByb3cgKi8KKwlSZWxPcHRJbmZvICpyZWw7 CQkJLyogYmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUgKi8KKworCS8qIGVu YWJsZWQgc3RhdGlzdGljcyAqLworCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyog ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgZW5hYmxlZCAqLworCisJLyogYnVp bHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KKwlib29sCQlkZXBzX2J1aWx0 OwkJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KKworCS8q IGNvbHVtbnMgaW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMpICovCisJaW50 MnZlY3RvciAqc3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMg Y292ZXJlZCAqLworCit9IE1WU3RhdGlzdGljSW5mbzsKKwogCiAvKgogICog RXF1aXZhbGVuY2VDbGFzc2VzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCmluZGV4IDRl MTVhMTQuLjNlMTEyNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0zMzAs NiArMzMwLDcgQEAgZXh0ZXJuIGJvb2wgcGdfZm9yZWlnbl9kYXRhX3dyYXBw ZXJfb3duZXJjaGVjayhPaWQgc3J2X29pZCwgT2lkIHJvbGVpZCk7CiBleHRl cm4gYm9vbCBwZ19mb3JlaWduX3NlcnZlcl9vd25lcmNoZWNrKE9pZCBzcnZf b2lkLCBPaWQgcm9sZWlkKTsKIGV4dGVybiBib29sIHBnX2V2ZW50X3RyaWdn ZXJfb3duZXJjaGVjayhPaWQgZXRfb2lkLCBPaWQgcm9sZWlkKTsKIGV4dGVy biBib29sIHBnX2V4dGVuc2lvbl9vd25lcmNoZWNrKE9pZCBleHRfb2lkLCBP aWQgcm9sZWlkKTsKK2V4dGVybiBib29sIHBnX3N0YXRpc3RpY3Nfb3duZXJj aGVjayhPaWQgc3RhdF9vaWQsIE9pZCByb2xlaWQpOwogZXh0ZXJuIGJvb2wg aGFzX2NyZWF0ZXJvbGVfcHJpdmlsZWdlKE9pZCByb2xlaWQpOwogZXh0ZXJu IGJvb2wgaGFzX2J5cGFzc3Jsc19wcml2aWxlZ2UoT2lkIHJvbGVpZCk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi43ZWJkOTYxCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCkBAIC0wLDAgKzEsNzAgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG12c3Rh dHMuaAorICoJICBNdWx0aXZhcmlhdGUgc3RhdGlzdGljcyBhbmQgc2VsZWN0 aXZpdHkgZXN0aW1hdGlvbiBmdW5jdGlvbnMuCisgKgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE0LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBN VlNUQVRTX0gKKyNkZWZpbmUgTVZTVEFUU19ICisKKyNpbmNsdWRlICJmbWdy LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCisKKworI2RlZmlu ZSBNVlNUQVRTX01BWF9ESU1FTlNJT05TCTgJCS8qIG1heCBudW1iZXIgb2Yg YXR0cmlidXRlcyAqLworCisvKiBBbiBhc3NvY2lhdGl2ZSBydWxlLCB0cmFj a2luZyBbYSA9PiBiXSBkZXBlbmRlbmN5LgorICoKKyAqIFRPRE8gTWFrZSB0 aGlzIHdvcmsgd2l0aCBtdWx0aXBsZSBjb2x1bW5zIG9uIGJvdGggc2lkZXMu CisgKi8KK3R5cGVkZWYgc3RydWN0IE1WRGVwZW5kZW5jeURhdGEgeworCWlu dDE2CWE7CisJaW50MTYJYjsKK30gTVZEZXBlbmRlbmN5RGF0YTsKKwordHlw ZWRlZiBNVkRlcGVuZGVuY3lEYXRhKiBNVkRlcGVuZGVuY3k7CisKK3R5cGVk ZWYgc3RydWN0IE1WRGVwZW5kZW5jaWVzRGF0YSB7CisJdWludDMyCQkJbWFn aWM7CQkvKiBtYWdpYyBjb25zdGFudCBtYXJrZXIgKi8KKwlpbnQzMgkJCW5k ZXBzOwkJLyogbnVtYmVyIG9mIGRlcGVuZGVuY2llcyAqLworCU1WRGVwZW5k ZW5jeQlkZXBzWzFdOwkvKiBYWFggd2h5IG5vdCBhIHBvaW50ZXI/ICovCit9 IE1WRGVwZW5kZW5jaWVzRGF0YTsKKwordHlwZWRlZiBNVkRlcGVuZGVuY2ll c0RhdGEqIE1WRGVwZW5kZW5jaWVzOworCisjZGVmaW5lIE1WU1RBVF9ERVBT X01BR0lDCQkweEI0NTQ5QTJDCS8qIG1hcmtzIHNlcmlhbGl6ZWQgYnl0ZWEg Ki8KKyNkZWZpbmUgTVZTVEFUX0RFUFNfVFlQRV9CQVNJQwkxCQkJLyogYmFz aWMgZGVwZW5kZW5jaWVzIHR5cGUgKi8KKworLyoKKyAqIFRPRE8gTWF5YmUg ZmV0Y2hpbmcgdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCBzZXBhcmF0ZWx5IGlz IGluZWZmaWNpZW50PworICogICAgICBDb25zaWRlciBhZGRpbmcgYSBzaW5n bGUgYGZldGNoX3N0YXRzYCBtZXRob2QsIGZldGNoaW5nIGFsbAorICogICAg ICBzdGF0cyBzcGVjaWZpZWQgdXNpbmcgZmxhZ3MgKG9yIHNvbWV0aGluZyBs aWtlIHRoYXQpLgorICovCisKK2J5dGVhICogc2VyaWFsaXplX212X2RlcGVu ZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOworCisvKiBk ZXNlcmlhbGl6YXRpb24gb2Ygc3RhdHMgKHNlcmlhbGl6YXRpb24gaXMgcHJp dmF0ZSB0byBhbmFseXplKSAqLworTVZEZXBlbmRlbmNpZXMJZGVzZXJpYWxp emVfbXZfZGVwZW5kZW5jaWVzKGJ5dGVhICogZGF0YSk7CisKKy8qIEZJWE1F IHRoaXMgcHJvYmFibHkgYmVsb25ncyBzb21ld2hlcmUgZWxzZSAobm90IHRv IG9wZXJhdGlvbnMgc3RhdHMpICovCitleHRlcm4gRGF0dW0gcGdfbXZfc3Rh dHNfZGVwZW5kZW5jaWVzX2luZm8oUEdfRlVOQ1RJT05fQVJHUyk7CitleHRl cm4gRGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coUEdfRlVO Q1RJT05fQVJHUyk7CisKK01WRGVwZW5kZW5jaWVzCitidWlsZF9tdl9kZXBl bmRlbmNpZXMoaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKKwkJCQkJ CQkJICBpbnQydmVjdG9yICphdHRycywKKwkJCQkJCQkJICBWYWNBdHRyU3Rh dHMgKipzdGF0cyk7CisKK3ZvaWQgYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24g b25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAorCQkJCQkJ ICAgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwor Cit2b2lkIHVwZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcywgaW50MnZlY3RvciAqYXR0cnMpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggZjJiZWJmMi4uODc3MWY5YyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUmVsYXRpb25EYXRhCiAJYm9vbAkJcmRfaXN2YWxpZDsJCS8q IHJlbGNhY2hlIGVudHJ5IGlzIHZhbGlkICovCiAJY2hhcgkJcmRfaW5kZXh2 YWxpZDsJLyogc3RhdGUgb2YgcmRfaW5kZXhsaXN0OiAwID0gbm90IHZhbGlk LCAxID0KIAkJCQkJCQkJICogdmFsaWQsIDIgPSB0ZW1wb3JhcmlseSBmb3Jj ZWQgKi8KKwlib29sCQlyZF9tdnN0YXR2YWxpZDsJLyogc3RhdGUgb2YgcmRf bXZzdGF0bGlzdDogdHJ1ZS9mYWxzZSAqLwogCiAJLyoKIAkgKiByZF9jcmVh dGVTdWJpZCBpcyB0aGUgSUQgb2YgdGhlIGhpZ2hlc3Qgc3VidHJhbnNhY3Rp b24gdGhlIHJlbCBoYXMKQEAgLTkzLDYgKzk0LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUmVsYXRpb25EYXRhCiAJTGlzdAkgICAqcmRfaW5kZXhsaXN0OwkvKiBs aXN0IG9mIE9JRHMgb2YgaW5kZXhlcyBvbiByZWxhdGlvbiAqLwogCU9pZAkJ CXJkX29pZGluZGV4OwkvKiBPSUQgb2YgdW5pcXVlIGluZGV4IG9uIE9JRCwg aWYgYW55ICovCiAJT2lkCQkJcmRfcmVwbGlkaW5kZXg7IC8qIE9JRCBvZiBy ZXBsaWNhIGlkZW50aXR5IGluZGV4LCBpZiBhbnkgKi8KKyAKKwkvKiBkYXRh IG1hbmFnZWQgYnkgUmVsYXRpb25HZXRNVlN0YXRMaXN0OiAqLworCUxpc3QJ ICAgKnJkX212c3RhdGxpc3Q7CS8qIGxpc3Qgb2YgT0lEcyBvZiBtdWx0aXZh cmlhdGUgc3RhdHMgKi8KIAogCS8qIGRhdGEgbWFuYWdlZCBieSBSZWxhdGlv bkdldEluZGV4QXR0ckJpdG1hcDogKi8KIAlCaXRtYXBzZXQgICpyZF9pbmRl eGF0dHI7CS8qIGlkZW50aWZpZXMgY29sdW1ucyB1c2VkIGluIGluZGV4ZXMg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCmluZGV4IDFiNDgzMDQu LjlmMDNjOGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNh Y2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaApAQCAt MzgsNiArMzgsNyBAQCBleHRlcm4gdm9pZCBSZWxhdGlvbkNsb3NlKFJlbGF0 aW9uIHJlbGF0aW9uKTsKICAqIFJvdXRpbmVzIHRvIGNvbXB1dGUvcmV0cmll dmUgYWRkaXRpb25hbCBjYWNoZWQgaW5mb3JtYXRpb24KICAqLwogZXh0ZXJu IExpc3QgKlJlbGF0aW9uR2V0SW5kZXhMaXN0KFJlbGF0aW9uIHJlbGF0aW9u KTsKK2V4dGVybiBMaXN0ICpSZWxhdGlvbkdldE1WU3RhdExpc3QoUmVsYXRp b24gcmVsYXRpb24pOwogZXh0ZXJuIE9pZAlSZWxhdGlvbkdldE9pZEluZGV4 KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVybiBPaWQJUmVsYXRpb25HZXRS ZXBsaWNhSW5kZXgoUmVsYXRpb24gcmVsYXRpb24pOwogZXh0ZXJuIExpc3Qg KlJlbGF0aW9uR2V0SW5kZXhFeHByZXNzaW9ucyhSZWxhdGlvbiByZWxhdGlv bik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zeXNjYWNoZS5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvc3lzY2FjaGUuaAppbmRleCAyNTY2MTVi Li4wZTA2NThkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zeXNj YWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3N5c2NhY2hlLmgKQEAg LTY2LDYgKzY2LDggQEAgZW51bSBTeXNDYWNoZUlkZW50aWZpZXIKIAlJTkRF WFJFTElELAogCUxBTkdOQU1FLAogCUxBTkdPSUQsCisJTVZTVEFUTkFNRU5T UCwKKwlNVlNUQVRPSUQsCiAJTkFNRVNQQUNFTkFNRSwKIAlOQU1FU1BBQ0VP SUQsCiAJT1BFUk5BTUVOU1AsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4IDc1NzUx YmUuLmViNjA5NjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC0zNSw2ICszNSw3 IEBAIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBGT1IgUk9MRSByZWd0ZXN0 X2FkZHJfdXNlciBSRVZPS0UgREVMRVRFIE9OIFRBQkxFUyBGUk9NCiBDUkVB VEUgVFJBTlNGT1JNIEZPUiBpbnQgTEFOR1VBR0UgU1FMICgKIAlGUk9NIFNR TCBXSVRIIEZVTkNUSU9OIHZhcmNoYXJfdHJhbnNmb3JtKGludGVybmFsKSwK IAlUTyBTUUwgV0lUSCBGVU5DVElPTiBpbnQ0cmVjdihpbnRlcm5hbCkpOwor Q1JFQVRFIFNUQVRJU1RJQ1MgYWRkcl9uc3AuZ2VudGFibGVfc3RhdCBPTiBh ZGRyX25zcC5nZW50YWJsZShhLGIpIFdJVEggKGRlcGVuZGVuY2llcyk7CiAt LSB0ZXN0IHNvbWUgZXJyb3IgY2FzZXMKIFNFTEVDVCBwZ19nZXRfb2JqZWN0 X2FkZHJlc3MoJ3N0b25lJywgJ3t9JywgJ3t9Jyk7CiBFUlJPUjogIHVucmVj b2duaXplZCBvYmplY3QgdHlwZSAic3RvbmUiCkBAIC0zNzMsNyArMzc0LDgg QEAgV0lUSCBvYmplY3RzICh0eXBlLCBuYW1lLCBhcmdzKSBBUyAoVkFMVUVT CiAJCQkJLS0gZXh0ZW5zaW9uCiAJCQkJLS0gZXZlbnQgdHJpZ2dlcgogCQkJ CSgncG9saWN5JywgJ3thZGRyX25zcCwgZ2VudGFibGUsIGdlbnBvbH0nLCAn e30nKSwKLQkJCQkoJ3RyYW5zZm9ybScsICd7aW50fScsICd7c3FsfScpCisJ CQkJKCd0cmFuc2Zvcm0nLCAne2ludH0nLCAne3NxbH0nKSwKKwkJCQkoJ3N0 YXRpc3RpY3MnLCAne2FkZHJfbnNwLCBnZW50YWJsZV9zdGF0fScsICd7fScp CiAgICAgICAgICkKIFNFTEVDVCAocGdfaWRlbnRpZnlfb2JqZWN0KGFkZHIx LmNsYXNzaWQsIGFkZHIxLm9iamlkLCBhZGRyMS5zdWJvYmppZCkpLiosCiAJ LS0gdGVzdCByb3VuZHRyaXAgdGhyb3VnaCBwZ19pZGVudGlmeV9vYmplY3Rf YXNfYWRkcmVzcwpAQCAtNDIwLDEzICs0MjIsMTQgQEAgU0VMRUNUIChwZ19p ZGVudGlmeV9vYmplY3QoYWRkcjEuY2xhc3NpZCwgYWRkcjEub2JqaWQsIGFk ZHIxLnN1Ym9iamlkKSkuKiwKICB0cmlnZ2VyICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgdCBvbiBhZGRy X25zcC5nZW50YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCB0CiAgb3BlcmF0b3IgZmFtaWx5ICAgICAgICAg ICB8IHBnX2NhdGFsb2cgfCBpbnRlZ2VyX29wcyAgICAgICB8IHBnX2NhdGFs b2cuaW50ZWdlcl9vcHMgVVNJTkcgYnRyZWUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgdAogIHBvbGljeSAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBnZW5wb2wg b24gYWRkcl9uc3AuZ2VudGFibGUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IHQKKyBzdGF0aXN0aWNzICAgICAgICAgICAg ICAgIHwgYWRkcl9uc3AgICB8IGdlbnRhYmxlX3N0YXQgICAgIHwgYWRkcl9u c3AuZ2VudGFibGVfc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCB0CiAgY29sbGF0aW9uICAgICAgICAgICAg ICAgICB8IHBnX2NhdGFsb2cgfCAiZGVmYXVsdCIgICAgICAgICB8IHBnX2Nh dGFsb2cuImRlZmF1bHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgdAogIHRyYW5zZm9ybSAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3Ig aW50ZWdlciBvbiBsYW5ndWFnZSBzcWwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJjaCBkaWN0aW9u YXJ5ICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfZGljdCAgICAgIHwgYWRk cl9uc3AuYWRkcl90c19kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggcGFyc2Vy ICAgICAgICB8IGFkZHJfbnNwICAgfCBhZGRyX3RzX3BycyAgICAgICB8IGFk ZHJfbnNwLmFkZHJfdHNfcHJzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNoIGNvbmZp Z3VyYXRpb24gfCBhZGRyX25zcCAgIHwgYWRkcl90c19jb25mICAgICAgfCBh ZGRyX25zcC5hZGRyX3RzX2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJjaCB0ZW1w bGF0ZSAgICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfdGVtcCAgICAgIHwg YWRkcl9uc3AuYWRkcl90c190ZW1wICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCB0Ci0oNDEgcm93cykKKyg0MiBy b3dzKQogCiAtLS0KIC0tLSBDbGVhbnVwIHJlc291cmNlcwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCA4MWJjNWM5 Li44NGI0NDI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dApAQCAtMTM2OCw2ICsxMzY4LDE1IEBAIHBnX21hdHZpZXdz fCBTRUxFQ1Qgbi5uc3BuYW1lIEFTIHNjaGVtYW5hbWUsCiAgICAgIExFRlQg Sk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1lc3Bh Y2UpKSkKICAgICAgTEVGVCBKT0lOIHBnX3RhYmxlc3BhY2UgdCBPTiAoKHQu b2lkID0gYy5yZWx0YWJsZXNwYWNlKSkpCiAgIFdIRVJFIChjLnJlbGtpbmQg PSAnbSc6OiJjaGFyIik7CitwZ19tdl9zdGF0c3wgU0VMRUNUIG4ubnNwbmFt ZSBBUyBzY2hlbWFuYW1lLAorICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUs CisgICAgcy5zdGFuYW1lLAorICAgIHMuc3Rha2V5cyBBUyBhdHRudW1zLAor ICAgIGxlbmd0aChzLnN0YWRlcHMpIEFTIGRlcHNieXRlcywKKyAgICBwZ19t dl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhzLnN0YWRlcHMpIEFTIGRlcHNp bmZvCisgICBGUk9NICgocGdfbXZfc3RhdGlzdGljIHMKKyAgICAgSk9JTiBw Z19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCisgICAgIExF RlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1l c3BhY2UpKSk7CiBwZ19wb2xpY2llc3wgU0VMRUNUIG4ubnNwbmFtZSBBUyBz Y2hlbWFuYW1lLAogICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUsCiAgICAg cG9sLnBvbG5hbWUgQVMgcG9saWN5bmFtZSwKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dAppbmRleCBl YjBiYzg4Li45MmEwZDhhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zYW5pdHlfY2hlY2sub3V0CkBAIC0xMTMsNiArMTEz LDcgQEAgcGdfaW5oZXJpdHN8dAogcGdfbGFuZ3VhZ2V8dAogcGdfbGFyZ2Vv YmplY3R8dAogcGdfbGFyZ2VvYmplY3RfbWV0YWRhdGF8dAorcGdfbXZfc3Rh dGlzdGljfHQKIHBnX25hbWVzcGFjZXx0CiBwZ19vcGNsYXNzfHQKIHBnX29w ZXJhdG9yfHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29i amVjdF9hZGRyZXNzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29iamVj dF9hZGRyZXNzLnNxbAppbmRleCA2OGU3Y2IwLi4zNzc1YjI4IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9vYmplY3RfYWRkcmVzcy5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb2JqZWN0X2FkZHJlc3Muc3Fs CkBAIC0zOSw2ICszOSw3IEBAIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBG T1IgUk9MRSByZWd0ZXN0X2FkZHJfdXNlciBSRVZPS0UgREVMRVRFIE9OIFRB QkxFUyBGUk9NCiBDUkVBVEUgVFJBTlNGT1JNIEZPUiBpbnQgTEFOR1VBR0Ug U1FMICgKIAlGUk9NIFNRTCBXSVRIIEZVTkNUSU9OIHZhcmNoYXJfdHJhbnNm b3JtKGludGVybmFsKSwKIAlUTyBTUUwgV0lUSCBGVU5DVElPTiBpbnQ0cmVj dihpbnRlcm5hbCkpOworQ1JFQVRFIFNUQVRJU1RJQ1MgYWRkcl9uc3AuZ2Vu dGFibGVfc3RhdCBPTiBhZGRyX25zcC5nZW50YWJsZShhLGIpIFdJVEggKGRl cGVuZGVuY2llcyk7CiAKIC0tIHRlc3Qgc29tZSBlcnJvciBjYXNlcwogU0VM RUNUIHBnX2dldF9vYmplY3RfYWRkcmVzcygnc3RvbmUnLCAne30nLCAne30n KTsKQEAgLTE2Niw3ICsxNjcsOCBAQCBXSVRIIG9iamVjdHMgKHR5cGUsIG5h bWUsIGFyZ3MpIEFTIChWQUxVRVMKIAkJCQktLSBleHRlbnNpb24KIAkJCQkt LSBldmVudCB0cmlnZ2VyCiAJCQkJKCdwb2xpY3knLCAne2FkZHJfbnNwLCBn ZW50YWJsZSwgZ2VucG9sfScsICd7fScpLAotCQkJCSgndHJhbnNmb3JtJywg J3tpbnR9JywgJ3tzcWx9JykKKwkJCQkoJ3RyYW5zZm9ybScsICd7aW50fScs ICd7c3FsfScpLAorCQkJCSgnc3RhdGlzdGljcycsICd7YWRkcl9uc3AsIGdl bnRhYmxlX3N0YXR9JywgJ3t9JykKICAgICAgICAgKQogU0VMRUNUIChwZ19p ZGVudGlmeV9vYmplY3QoYWRkcjEuY2xhc3NpZCwgYWRkcjEub2JqaWQsIGFk ZHIxLnN1Ym9iamlkKSkuKiwKIAktLSB0ZXN0IHJvdW5kdHJpcCB0aHJvdWdo IHBnX2lkZW50aWZ5X29iamVjdF9hc19hZGRyZXNzCi0tIAoyLjEuMAoK --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0003-clause-reduction-using-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0003-clause-reduction-using-functional-dependencies.patch"; charset="UTF-8" RnJvbSAyNDMzYjViM2NiMjVhMDkzZjc4ODU3YWRiN2Y5YzBiMTJhYzg4OTY3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE5 OjQyOjE4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzldIGNsYXVzZSByZWR1 Y3Rpb24gdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkR1cmluZyBw bGFubmluZywgdXNlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIGRlY2lk ZSB3aGljaCBjbGF1c2VzIHRvCnNraXAgZHVyaW5nIGNhcmRpbmFsaXR5IGVz dGltYXRpb24uIEluaXRpYWwgYW5kIHJhdGhlciBzaW1wbGlzdGljCmltcGxl bWVudGF0aW9uLgoKVGhpcyBvbmx5IHdvcmtzIHdpdGggcmVndWxhciBXSEVS RSBjbGF1c2VzLCBub3QgY2xhdXNlcyB1c2VkIGZvciBqb2luCmNsYXVzZXMu CgpOb3RlOiBUaGUgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoKSBuZWVkcyB0 byBpZGVudGlmeSB0aGUgcmVsYXRpb24gKHNvCnRoYXQgd2UgY2FuIGZldGNo IHRoZSBsaXN0IG9mIG11bHRpdmFyaWF0ZSBzdGF0cyBieSBPSUQpLgpwbGFu bmVyX3J0X2ZldGNoKCkgc2VlbXMgbGlrZSB0aGUgYXBwcm9wcmlhdGUgd2F5 IHRvIGdldCB0aGUgcmVsYXRpb24KT0lELCBidXQgYXBwYXJlbnRseSBpdCBv bmx5IHdvcmtzIHdpdGggc2ltcGxlIHZhcnMuIE1heWJlCmV4YW1pbmVfdmFy aWFibGUoKSB3b3VsZCBtYWtlIHRoaXMgd29yayB3aXRoIG1vcmUgY29tcGxl eCB2YXJzIHRvbz8KCkluY2x1ZGVzIHJlZ3Jlc3Npb24gdGVzdHMgYW5hbHl6 aW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIChwYXJ0IG9mCkFOQUxZWkUp IG9uIHNldmVyYWwgZGF0YXNldHMgKG5vIGRlcGVuZGVuY2llcywgbm8gdHJh bnNpdGl2ZQpkZXBlbmRlbmNpZXMsIC4uLikuCgpDaGVja3MgdGhhdCBhIHF1 ZXJ5IHdpdGggY29uZGl0aW9ucyBvbiB0d28gY29sdW1ucywgd2hlcmUgb25l IChCKSBpcwpmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIHRoZSBvdGhlciBv bmUgKEEpLCBjb3JyZWN0bHkgaWdub3JlcyB0aGUKY2xhdXNlIG9uIChCKSBh bmQgY2hvb3NlcyBiaXRtYXAgaW5kZXggc2NhbiBpbnN0ZWFkIG9mIHBsYWlu IGluZGV4IHNjYW4KKHdoaWNoIGlzIHdoYXQgaGFwcGVucyBvdGhlcndpc2Us IHRoYW5rcyB0byBhc3N1bXB0aW9uIG9mCmluZGVwZW5kZW5jZSkuCgpOb3Rl OiBGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvbmx5IHdvcmsgd2l0aCBlcXVh bGl0eSBjbGF1c2VzLCBubwppbmVxdWFsaXRpZXMgZXRjLgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICAgICAgICB8IDg5 MSArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgICAgIHwgIDM2ICsrCiBzcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAgICAgICAgICAgfCAg IDUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVz LmMgICAgICB8ICAyNCArCiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgg ICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbXZfZGVwZW5kZW5jaWVzLm91dCB8IDE3MiArKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwg ICAzICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9kZXBl bmRlbmNpZXMuc3FsICAgICAgfCAxNTAgKysrKysKIDkgZmlsZXMgY2hhbmdl ZCwgMTI5MyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1F LnN0YXRzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0CiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNxbAoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMKaW5kZXggMDI2NjBjMi4uODA3MDhmZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTE0LDE0ICsx NCwxOSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1 ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9w dGltaXplci92YXIuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L212c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgorI2lu Y2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKIAogLyoKQEAgLTQxLDYgKzQ2 LDIzIEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlUXVlcnlDbGF1c2UKIHN0YXRp YyB2b2lkIGFkZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxp c3QsIE5vZGUgKmNsYXVzZSwKIAkJCSAgIGJvb2wgdmFyb25sZWZ0LCBib29s IGlzTFRzZWwsIFNlbGVjdGl2aXR5IHMyKTsKIAorI2RlZmluZQkJTVZfQ0xB VVNFX1RZUEVfRkRFUAkJMHgwMQorCitzdGF0aWMgYm9vbCBjbGF1c2VfaXNf bXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBBdHRy TnVtYmVyICphdHRudW0pOworCitzdGF0aWMgQml0bWFwc2V0ICAqY29sbGVj dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKKwor c3RhdGljIGludCBjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIElu ZGV4IHJlbGlkKTsKKworc3RhdGljIGludCBjb3VudF92YXJub3MoTGlzdCAq Y2xhdXNlcywgSW5kZXggKnJlbGlkKTsKKworc3RhdGljIExpc3QgKmNsYXVz ZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJSW5kZXggcmVsaWQsIExpc3QgKnN0 YXRzKTsKKworc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBp bnQgdHlwZSk7CisKK3N0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOworCiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgkJUk9VVElORVMgVE8gQ09NUFVURSBT RUxFQ1RJVklUSUVTCkBAIC02MCw3ICs4MiwxOSBAQCBzdGF0aWMgdm9pZCBh ZGRSYW5nZUNsYXVzZShSYW5nZVF1ZXJ5Q2xhdXNlICoqcnFsaXN0LCBOb2Rl ICpjbGF1c2UsCiAgKiBzdWJjbGF1c2VzLiAgSG93ZXZlciwgdGhhdCdzIG9u bHkgcmlnaHQgaWYgdGhlIHN1YmNsYXVzZXMgaGF2ZSBpbmRlcGVuZGVudAog ICogcHJvYmFiaWxpdGllcywgYW5kIGluIHJlYWxpdHkgdGhleSBhcmUgb2Z0 ZW4gTk9UIGluZGVwZW5kZW50LiAgU28sCiAgKiB3ZSB3YW50IHRvIGJlIHNt YXJ0ZXIgd2hlcmUgd2UgY2FuLgotCisgKgorICogVGhlIGZpcnN0IHRoaW5n IHdlIHRyeSB0byBkbyBpcyBhcHBseWluZyBtdWx0aXZhcmlhdGUgc3RhdGlz dGljcywgaW4gYSB3YXkKKyAqIHRoYXQgaW50ZW5kcyB0byBtaW5pbWl6ZSB0 aGUgb3ZlcmhlYWQgd2hlbiB0aGVyZSBhcmUgbm8gbXVsdGl2YXJpYXRlIHN0 YXRzCisgKiBvbiB0aGUgcmVsYXRpb24uIFRodXMgd2UgZG8gc2V2ZXJhbCBz aW1wbGUgKGFuZCBpbmV4cGVuc2l2ZSkgY2hlY2tzIGZpcnN0LAorICogdG8g dmVyaWZ5IHRoYXQgc3VpdGFibGUgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3Mg ZXhpc3QuCisgKgorICogSWYgd2UgaWRlbnRpZnkgc3VjaCBtdWx0aXZhcmlh dGUgc3RhdGlzdGljcyBhcHBseSwgd2UgdHJ5IHRvIGFwcGx5IHRoZW0uCisg KiBDdXJyZW50bHkgd2Ugb25seSBoYXZlIChzb2Z0KSBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcywgc28gd2UgdHJ5IHRvIHJlZHVjZQorICogdGhlIGxpc3Qg b2YgY2xhdXNlcy4KKyAqCisgKiBUaGVuIHdlIHJlbW92ZSB0aGUgY2xhdXNl cyBlc3RpbWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLCBhbmQgcHJv Y2VzcworICogdGhlIHJlc3Qgb2YgdGhlIGNsYXVzZXMgdXNpbmcgdGhlIHJl Z3VsYXIgcGVyLWNvbHVtbiBzdGF0cy4KKyAqCiAgKiBDdXJyZW50bHksIHRo ZSBvbmx5IGV4dHJhIHNtYXJ0cyB3ZSBoYXZlIGlzIHRvIHJlY29nbml6ZSAi cmFuZ2UgcXVlcmllcyIsCiAgKiBzdWNoIGFzICJ4ID4gMzQgQU5EIHggPCA0 MiIuICBDbGF1c2VzIGFyZSByZWNvZ25pemVkIGFzIHBvc3NpYmxlIHJhbmdl CiAgKiBxdWVyeSBjb21wb25lbnRzIGlmIHRoZXkgYXJlIHJlc3RyaWN0aW9u IG9wY2xhdXNlcyB3aG9zZSBvcGVyYXRvcnMgaGF2ZQpAQCAtOTksNiArMTMz LDIyIEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsCiAJUmFuZ2VRdWVyeUNsYXVzZSAqcnFsaXN0ID0gTlVMTDsKIAlMaXN0 Q2VsbCAgICpsOwogCisJLyogcHJvY2Vzc2luZyBtdiBzdGF0cyAqLworCU9p ZAkJCXJlbGlkID0gSW52YWxpZE9pZDsKKworCS8qIGxpc3Qgb2YgbXVsdGl2 YXJpYXRlIHN0YXRzIG9uIHRoZSByZWxhdGlvbiAqLworCUxpc3QJICAgKnN0 YXRzID0gTklMOworCisJLyoKKwkgKiBUbyBmZXRjaCB0aGUgc3RhdGlzdGlj cywgd2UgZmlyc3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlbC4gQ3VycmVu dGx5CisJICogcG9pbnQgd2Ugb25seSBzdXBwb3J0IGVzdGltYXRlcyBvZiBz aW1wbGUgcmVzdHJpY3Rpb25zIHdpdGggYWxsIFZhcnMKKwkgKiByZWZlcmVu Y2luZyBhIHNpbmdsZSBiYXNlcmVsLiBIb3dldmVyIHNldF9iYXNlcmVsX3Np emVfZXN0aW1hdGVzKCkgc2V0cworCSAqIHZhclJlbGlkPTAgc28gd2UgaGF2 ZSB0byBhY3R1YWxseSBpbnNwZWN0IHRoZSBjbGF1c2VzIGJ5IHB1bGxfdmFy bm9zCisJICogYW5kIHNlZSBpZiB0aGVyZSdzIGp1c3QgYSBzaW5nbGUgdmFy bm8gcmVmZXJlbmNlZC4KKwkgKi8KKwlpZiAoKGNvdW50X3Zhcm5vcyhjbGF1 c2VzLCAmcmVsaWQpID09IDEpICYmICgodmFyUmVsaWQgPT0gMCkgfHwgKHZh clJlbGlkID09IHJlbGlkKSkpCisJCXN0YXRzID0gZmluZF9zdGF0cyhyb290 LCByZWxpZCk7CisKIAkvKgogCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUg Y2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAgcGFp cnMsCiAJICogc28ganVzdCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2VsZWN0 aXZpdHkoKS4KQEAgLTEwOCw2ICsxNTgsMjQgQEAgY2xhdXNlbGlzdF9zZWxl Y3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICB2YXJSZWxp ZCwgam9pbnR5cGUsIHNqaW5mbyk7CiAKIAkvKgorCSAqIEFwcGx5IGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzLCBidXQgZmlyc3QgY2hlY2sgdGhhdCB0aGVy ZSBhcmUgc29tZSBzdGF0cworCSAqIHdpdGggZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgYnVpbHQgKGJ5IHNpbXBseSB3YWxraW5nIHRoZSBzdGF0cyBsaXN0 KSwKKwkgKiBhbmQgdGhhdCB0aGVyZSBhcmUgYXQgdHdvIG9yIG1vcmUgYXR0 cmlidXRlcyByZWZlcmVuY2VkIGJ5IGNsYXVzZXMgdGhhdAorCSAqIG1heSBi ZSByZWR1Y2VkIHVzaW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLgorCSAq CisJICogV2Ugd291bGQgZmluZCB0aGF0IGFueXdheSB3aGVuIHRyeWluZyB0 byBhY3R1YWxseSBhcHBseSB0aGUgZnVuY3Rpb25hbAorCSAqIGRlcGVuZGVu Y2llcywgYnV0IGxldCdzIGRvIHRoZSBjaGVhcCBjaGVja3MgZmlyc3QuCisJ ICoKKwkgKiBBZnRlciBhcHBseWluZyB0aGUgZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgd2UgZ2V0IHRoZSByZW1haW5pZyBjbGF1c2VzCisJICogdGhhdCBu ZWVkIHRvIGJlIGVzdGltYXRlZCBieSBvdGhlciB0eXBlcyBvZiBzdGF0cyAo TUNWLCBoaXN0b2dyYW1zIGV0YykuCisJICovCisJaWYgKGhhc19zdGF0cyhz dGF0cywgTVZfQ0xBVVNFX1RZUEVfRkRFUCkgJiYKKwkJKGNvdW50X212X2F0 dG51bXMoY2xhdXNlcywgcmVsaWQpID49IDIpKQorCXsKKwkJY2xhdXNlcyA9 IGNsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKHJvb3QsIGNsYXVzZXMs IHJlbGlkLCBzdGF0cyk7CisJfQorCisJLyoKIAkgKiBJbml0aWFsIHNjYW4g b3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhhdCBkb2Vzbid0IGxvb2sgbGlr ZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVlcnkgY2xhdXNlIGdldHMgbXVs dGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0ZW4uIEFueXRoaW5nIHRoYXQK IAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50byBhbiBycWxpc3QgZW50cnku CkBAIC03NjMsMyArODMxLDgyNCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxh bm5lckluZm8gKnJvb3QsCiAKIAlyZXR1cm4gczE7CiB9CisKKy8qCisgKiBQ dWxsIHZhcmF0dG5vcyBmcm9tIHRoZSBjbGF1c2VzLCBzaW1pbGFybHkgdG8g cHVsbF92YXJhdHRub3MoKSBidXQ6CisgKgorICogKGEpIG9ubHkgZ2V0IGF0 dHJpYnV0ZXMgZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiAocmVsaWQpCisg KiAoYikgaWdub3JlIHN5c3RlbSBhdHRyaWJ1dGVzICh3ZSBjYW4ndCBidWls ZCBzdGF0cyBvbiB0aGVtIGFueXdheSkKKyAqCisgKiBUaGlzIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIGRpcmVjdGx5IGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRo IGF0dG51bQorICogdmFsdWVzIGZyb20gcGdfYXR0cmlidXRlIGV0Yy4KKyAq Lworc3RhdGljIEJpdG1hcHNldCAqCitnZXRfdmFyYXR0bm9zKE5vZGUgKiBu b2RlLCBJbmRleCByZWxpZCkKK3sKKwlpbnQJCQlrOworCUJpdG1hcHNldCAg KnZhcmF0dG5vcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVM TDsKKworCS8qIGdldCB0aGUgdmFyYXR0bm9zICovCisJcHVsbF92YXJhdHRu b3Mobm9kZSwgcmVsaWQsICZ2YXJhdHRub3MpOworCisJayA9IC0xOworCXdo aWxlICgoayA9IGJtc19uZXh0X21lbWJlcih2YXJhdHRub3MsIGspKSA+PSAw KQorCXsKKwkJaWYgKGsgKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyID4gMCkKKwkJCXJlc3VsdAorCQkJCT0gYm1zX2FkZF9tZW1iZXIo cmVzdWx0LAorCQkJCQkJCQkgayArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXIpOworCX0KKworCWJtc19mcmVlKHZhcmF0dG5vcyk7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29sbGVjdCBhdHRyaWJ1 dGVzIGZyb20gbXYtY29tcGF0aWJsZSBjbGF1c2VzLgorICovCitzdGF0aWMg Qml0bWFwc2V0ICoKK2NvbGxlY3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2Vz LCBJbmRleCByZWxpZCkKK3sKKwlCaXRtYXBzZXQgICphdHRudW1zID0gTlVM TDsKKwlMaXN0Q2VsbCAgICpsOworCisJLyoKKwkgKiBXYWxrIHRocm91Z2gg dGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBlc3Rp bWF0ZQorCSAqIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJlbWVt YmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbAorCSAqIHRoZW4gY3Jvc3Mt Y2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkgaWYg bmVlZGVkCisJICogd2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMgaW50byBtdWx0 aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICoKKwkgKiBGb3Igbm93 IHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMg d2l0aCBuZXN0ZWQKKwkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBhIHJhbmdl IG9yIGVxdWFsaXR5LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJ eworCQlBdHRyTnVtYmVyIGF0dG51bTsKKwkJTm9kZQkgICAqY2xhdXNlID0g KE5vZGUgKikgbGZpcnN0KGwpOworCisJCS8qIGlnbm9yZSB0aGUgcmVzdWx0 IGZvciBub3cgLSB3ZSBvbmx5IG5lZWQgdGhlIGluZm8gKi8KKwkJaWYgKGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW0p KQorCQkJYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGF0dG51bXMsIGF0dG51 bSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm90IGF0IGxlYXN0 IHR3byBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgdGhlIGNsYXVzZShzKSwK KwkgKiB3ZSBjYW4gdGhyb3cgZXZlcnl0aGluZyBvdXQgKGFzIHdlJ2xsIHJl dmVydCB0byBzaW1wbGUgc3RhdHMpLgorCSAqLworCWlmIChibXNfbnVtX21l bWJlcnMoYXR0bnVtcykgPD0gMSkKKwl7CisJCWlmIChhdHRudW1zICE9IE5V TEwpCisJCQlwZnJlZShhdHRudW1zKTsKKwkJYXR0bnVtcyA9IE5VTEw7CisJ fQorCisJcmV0dXJuIGF0dG51bXM7Cit9CisKKy8qCisgKiBDb3VudCB0aGUg bnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gY2xhdXNlcyBjb21wYXRpYmxlIHdp dGggbXVsdGl2YXJpYXRlIHN0YXRzLgorICovCitzdGF0aWMgaW50Citjb3Vu dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKQorewor CWludCBjOworCUJpdG1hcHNldCAqYXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0 bnVtcyhjbGF1c2VzLCByZWxpZCk7CisKKwljID0gYm1zX251bV9tZW1iZXJz KGF0dG51bXMpOworCisJYm1zX2ZyZWUoYXR0bnVtcyk7CisKKwlyZXR1cm4g YzsKK30KKworLyoKKyAqIENvdW50IHZhcm5vcyByZWZlcmVuY2VkIGluIHRo ZSBjbGF1c2VzLCBhbmQgaWYgdGhlcmUncyBhIHNpbmdsZSB2YXJubyB0aGVu CisgKiByZXR1cm4gdGhlIGluZGV4IGluICdyZWxpZCcuCisgKi8KK3N0YXRp YyBpbnQKK2NvdW50X3Zhcm5vcyhMaXN0ICpjbGF1c2VzLCBJbmRleCAqcmVs aWQpCit7CisJaW50IGNudDsKKwlCaXRtYXBzZXQgKnZhcm5vcyA9IE5VTEw7 CisKKwl2YXJub3MgPSBwdWxsX3Zhcm5vcygoTm9kZSAqKSBjbGF1c2VzKTsK KwljbnQgPSBibXNfbnVtX21lbWJlcnModmFybm9zKTsKKworCS8qIGlmIHRo ZXJlJ3MgYSBzaW5nbGUgdmFybm8gaW4gdGhlIGNsYXVzZXMsIHJlbWVtYmVy IGl0ICovCisJaWYgKGJtc19udW1fbWVtYmVycyh2YXJub3MpID09IDEpCisJ CSpyZWxpZCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHZhcm5vcyk7CisKKwli bXNfZnJlZSh2YXJub3MpOworCisJcmV0dXJuIGNudDsKK30KKwordHlwZWRl ZiBzdHJ1Y3QKK3sKKwlJbmRleAkJdmFybm87CQkvKiByZWxpZCB3ZSdyZSBp bnRlcmVzdGVkIGluICovCisJQml0bWFwc2V0ICAqdmFyYXR0bm9zOwkvKiBh dHRudW1zIHJlZmVyZW5jZWQgYnkgdGhlIGNsYXVzZXMgKi8KK30gbXZfY29t cGF0aWJsZV9jb250ZXh0OworCisvKgorICogUmVjdXJzaXZlIHdhbGtlciB0 aGF0IGNoZWNrcyBjb21wYXRpYmlsaXR5IG9mIHRoZSBjbGF1c2Ugd2l0aCBt dWx0aXZhcmlhdGUKKyAqIHN0YXRpc3RpY3MsIGFuZCBjb2xsZWN0cyBhdHRu dW1zIGZyb20gdGhlIFZhcnMuCisgKgorICogWFhYIFRoZSBvcmlnaW5hbCBp ZGVhIHdhcyB0byBjb21iaW5lIHRoaXMgd2l0aCBleHByZXNzaW9uX3RyZWVf d2Fsa2VyLCBidXQKKyAqICAgICBJJ3ZlIGJlZW4gdW5hYmxlIHRvIG1ha2Ug dGhhdCB3b3JrIC0gc2VlbXMgdGhhdCBkb2VzIG5vdCBxdWl0ZSBhbGxvdwor ICogICAgIGNoZWNraW5nIHRoZSBzdHJ1Y3R1cmUuIEhlbmNlIHRoZSBleHBs aWNpdCBjYWxscyB0byB0aGUgd2Fsa2VyLgorICovCitzdGF0aWMgYm9vbAor bXZfY29tcGF0aWJsZV93YWxrZXIoTm9kZSAqbm9kZSwgbXZfY29tcGF0aWJs ZV9jb250ZXh0ICpjb250ZXh0KQoreworCWlmIChub2RlID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKyAKKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0SW5m bykpCisgCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdElu Zm8gKikgbm9kZTsKKyAKKyAJCS8qIFBzZXVkb2NvbnN0YW50cyBhcmUgbm90 IHJlYWxseSBpbnRlcmVzdGluZyBoZXJlLiAqLworIAkJaWYgKHJpbmZvLT5w c2V1ZG9jb25zdGFudCkKKwkJCXJldHVybiB0cnVlOworIAorCQkvKiBjbGF1 c2VzIHJlZmVyZW5jaW5nIG11bHRpcGxlIHZhcm5vcyBhcmUgaW5jb21wYXRp YmxlICovCisJCWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+Y2xhdXNlX3Jl bGlkcykgIT0gQk1TX1NJTkdMRVRPTikKKwkJCXJldHVybiB0cnVlOworIAor CQkvKiBjaGVjayB0aGUgY2xhdXNlIGluc2lkZSB0aGUgUmVzdHJpY3RJbmZv ICovCisJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtlcigoTm9kZSopcmlu Zm8tPmNsYXVzZSwgKHZvaWQgKikgY29udGV4dCk7CisgCX0KKworCWlmIChJ c0Eobm9kZSwgVmFyKSkKKwl7CisJCVZhciAqIHZhciA9IChWYXIqKW5vZGU7 CisKKwkJLyoKKwkJICogQWxzbywgdGhlIHZhcmlhYmxlIG5lZWRzIHRvIHJl ZmVyZW5jZSB0aGUgcmlnaHQgcmVsaWQgKHRoaXMgbWlnaHQgYmUKKwkJICog dW5uZWNlc3NhcnkgZ2l2ZW4gdGhlIG90aGVyIGNoZWNrcywgYnV0IGxldCdz IGJlIHN1cmUpLgorCQkgKi8KKwkJaWYgKHZhci0+dmFybm8gIT0gY29udGV4 dC0+dmFybm8pCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvKiBBbHNvIHNraXAg c3lzdGVtIGF0dHJpYnV0ZXMgKHdlIGRvbid0IGFsbG93IHN0YXRzIG9uIHRo b3NlKS4gKi8KKwkJaWYgKCEgQXR0ck51bWJlcklzRm9yVXNlckRlZmluZWRB dHRyKHZhci0+dmFyYXR0bm8pKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyog U2VlbXMgZmluZSwgc28gbGV0J3MgcmVtZW1iZXIgdGhlIGF0dG51bS4gKi8K KwkJY29udGV4dC0+dmFyYXR0bm9zID0gYm1zX2FkZF9tZW1iZXIoY29udGV4 dC0+dmFyYXR0bm9zLCB2YXItPnZhcmF0dG5vKTsKKworCQlyZXR1cm4gZmFs c2U7CisgCX0KKworCS8qCisJICogQW5kIGZpbmFsbHkgdGhlIG9wZXJhdG9y IGV4cHJlc3Npb25zIC0gd2Ugb25seSBhbGxvdyBzaW1wbGUgZXhwcmVzc2lv bnMKKwkgKiB3aXRoIHR3byBhcmd1bWVudHMsIHdoZXJlIG9uZSBpcyBhIFZh ciBhbmQgdGhlIG90aGVyIGlzIGEgY29uc3RhbnQsIGFuZAorCSAqIGl0J3Mg YSBzaW1wbGUgY29tcGFyaXNvbiAod2hpY2ggd2UgZGV0ZWN0IHVzaW5nIGVz dGltYXRvciBmdW5jdGlvbikuCisJICovCisJaWYgKGlzX29wY2xhdXNlKG5v ZGUpKQorIAl7CisJCU9wRXhwcgkgICAqZXhwciA9IChPcEV4cHIgKikgbm9k ZTsKKwkJVmFyCQkgICAqdmFyOworCQlib29sCQl2YXJvbmxlZnQgPSB0cnVl OworCQlib29sCQlvazsKKworIAkJLyoKKwkJICogT25seSBleHByZXNzaW9u cyB3aXRoIHR3byBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgY29tcGF0aWJs ZS4KKyAJCSAqCisJCSAqIFhYWCBQb3NzaWJseSB1bm5lY2Vzc2FyeSAoY2Fu IE9wRXhwciBoYXZlIGRpZmZlcmVudCBhcmcgY291bnQ/KS4KKyAJCSAqLwor CQlpZiAobGlzdF9sZW5ndGgoZXhwci0+YXJncykgIT0gMikKKwkJCXJldHVy biB0cnVlOworCisJCS8qIHNlZSBpZiBpdCBhY3R1YWxseSBoYXMgdGhlIHJp Z2h0ICovCisJCW9rID0gKE51bVJlbGlkcygoTm9kZSopZXhwcikgPT0gMSkg JiYKKwkJCQkoaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4 cHItPmFyZ3MpKSB8fAorCQkJCSh2YXJvbmxlZnQgPSBmYWxzZSwKKwkJCQkg aXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsaW5pdGlhbChleHByLT5hcmdz KSkpKTsKKworCQkvKiB1bnN1cHBvcnRlZCBzdHJ1Y3R1cmUgKHR3byB2YXJp YWJsZXMgb3Igc28pICovCisJCWlmICghIG9rKQorCQkJcmV0dXJuIHRydWU7 CisKKyAJCS8qCisJCSAqIElmIGl0J3Mgbm90IGEgIjwiIG9yICI+IiBvciAi PSIgb3BlcmF0b3IsIGp1c3QgaWdub3JlIHRoZSBjbGF1c2UuCisJCSAqIE90 aGVyd2lzZSBub3RlIHRoZSByZWxpZCBhbmQgYXR0bnVtIGZvciB0aGUgdmFy aWFibGUuIFRoaXMgdXNlcyB0aGUKKwkJICogZnVuY3Rpb24gZm9yIGVzdGlt YXRpbmcgc2VsZWN0aXZpdHksIG9udCB0aGUgb3BlcmF0b3IgZGlyZWN0bHkg KGEgYml0CisJCSAqIGF3a3dhcmQsIGJ1dCB3ZWxsIC4uLikuCisgCQkgKi8K KwkJc3dpdGNoIChnZXRfb3BycmVzdChleHByLT5vcG5vKSkKKwkJeworCQkJ Y2FzZSBGX0VRU0VMOgorCisJCQkJLyogZXF1YWxpdHkgY29uZGl0aW9ucyBh cmUgY29tcGF0aWJsZSB3aXRoIGFsbCBzdGF0aXN0aWNzICovCisJCQkJYnJl YWs7CisKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKiB1bmtub3duIGVzdGltYXRv ciAqLworCQkJCXJldHVybiB0cnVlOworIAkJfQorCisJCXZhciA9ICh2YXJv bmxlZnQpID8gbGluaXRpYWwoZXhwci0+YXJncykgOiBsc2Vjb25kKGV4cHIt PmFyZ3MpOworCisJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtlcigoTm9k ZSAqKSB2YXIsIGNvbnRleHQpOworIAl9CisKKwkvKiBOb2RlIG5vdCBleHBs aWNpdGx5IHN1cHBvcnRlZCwgc28gdGVybWluYXRlICovCisJcmV0dXJuIHRy dWU7Cit9CisgCisvKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjbGF1 c2UgaXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0cywKKyAq IGFuZCBpZiBpdCBpcywgcmV0dXJucyBzb21lIGFkZGl0aW9uYWwgaW5mb3Jt YXRpb24gLSB2YXJubyAoaW5kZXgKKyAqIGludG8gc2ltcGxlX3J0ZV9hcnJh eSkgYW5kIGEgYml0bWFwIG9mIGF0dHJpYnV0ZXMuIFRoaXMgaXMgdGhlbgor ICogdXNlZCB0byBmZXRjaCByZWxhdGVkIG11bHRpdmFyaWF0ZSBzdGF0aXN0 aWNzLgorICoKKyAqIEF0IHRoaXMgbW9tZW50IHdlIG9ubHkgc3VwcG9ydCBi YXNpYyBjb25kaXRpb25zIG9mIHRoZSBmb3JtCisgKgorICogICAgIHZhcmlh YmxlIE9QIGNvbnN0YW50CisgKgorICogd2hlcmUgT1AgaXMgb25lIG9mIFs9 LDwsPD0sPj0sPl0gKHdoaWNoIGlzIGhvd2V2ZXIgZGV0ZXJtaW5lZCBieQor ICogbG9va2luZyBhdCB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgZXN0 aW1hdGluZyBzZWxlY3Rpdml0eSwganVzdAorICogbGlrZSB3aXRoIHRoZSBz aW5nbGUtZGltZW5zaW9uYWwgY2FzZSkuCisgKgorICogVE9ETyBTdXBwb3J0 ICdPUiBjbGF1c2VzJyAtIHNob3VsZG4ndCBiZSBhbGwgdGhhdCBkaWZmaWN1 bHQgdG8KKyAqICAgICAgZXZhbHVhdGUgdGhlbSB1c2luZyBtdWx0aXZhcmlh dGUgc3RhdHMuCisgKi8KK3N0YXRpYyBib29sCitjbGF1c2VfaXNfbXZfY29t cGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBBdHRyTnVtYmVy ICphdHRudW0pCit7CisJbXZfY29tcGF0aWJsZV9jb250ZXh0IGNvbnRleHQ7 CisKKwljb250ZXh0LnZhcm5vID0gcmVsaWQ7CisJY29udGV4dC52YXJhdHRu b3MgPSBOVUxMOwkvKiBubyBhdHRudW1zICovCisKKwlpZiAobXZfY29tcGF0 aWJsZV93YWxrZXIoY2xhdXNlLCAodm9pZCAqKSAmY29udGV4dCkpCisJCXJl dHVybiBmYWxzZTsKKworCS8qIHJlbWVtYmVyIHRoZSBuZXdseSBjb2xsZWN0 ZWQgYXR0bnVtcyAqLworCSphdHRudW0gPSBibXNfc2luZ2xldG9uX21lbWJl cihjb250ZXh0LnZhcmF0dG5vcyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIGNvbGxlY3QgYXR0bnVtcyBmcm9tIGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzCisgKgorICogV2FsayB0aHJvdWdoIGFsbCBzdGF0aXN0aWNzIG9u IHRoZSByZWxhdGlvbiwgYW5kIGNvbGxlY3QgYXR0bnVtcyBjb3ZlcmVkCisg KiBieSB0aG9zZSB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLiBXZSBv bmx5IGxvb2sgYXQgY29sdW1ucyBzcGVjaWZpZWQKKyAqIHdoZW4gY3JlYXRp bmcgdGhlIHN0YXRpc3RpY3MsIG5vdCBhdCBjb2x1bW5zIGFjdHVhbGx5IHJl ZmVyZW5jZWQgYnkgdGhlCisgKiBkZXBlbmRlbmNpZXMgKHdoaWNoIG1heSBv bmx5IGJlIGEgc3Vic2V0IG9mIHRoZSBhdHRyaWJ1dGVzKS4KKyAqLworc3Rh dGljIEJpdG1hcHNldCoKK2ZkZXBzX2NvbGxlY3RfYXR0bnVtcyhMaXN0ICpz dGF0cykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJQml0bWFwc2V0ICphdHRudW1z ID0gTlVMTDsKKworCWZvcmVhY2ggKGxjLCBzdGF0cykKKwl7CisJCWludCBq OworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8gPSAoTVZTdGF0aXN0aWNJbmZv ICopbGZpcnN0KGxjKTsKKworCQlpbnQydmVjdG9yICpzdGFrZXlzID0gaW5m by0+c3Rha2V5czsKKworCQkvKiBza2lwIHN0YXRzIHdpdGhvdXQgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KKwkJaWYgKCEgaW5mby0+ZGVw c19idWlsdCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBz dGFrZXlzLT5kaW0xOyBqKyspCisJCQlhdHRudW1zID0gYm1zX2FkZF9tZW1i ZXIoYXR0bnVtcywgc3Rha2V5cy0+dmFsdWVzW2pdKTsKKwl9CisKKwlyZXR1 cm4gYXR0bnVtczsKK30KKworLyogdHJhbnNmb3JtcyBiaXRtYXBzZXQgaW50 byBhbiBhcnJheSAoaW5kZXggPT4gdmFsdWUpICovCitzdGF0aWMgaW50Kgor bWFrZV9pZHhfdG9fYXR0bnVtX21hcHBpbmcoQml0bWFwc2V0ICphdHRudW1z KQoreworCWludAkJYXR0aWR4ID0gMDsKKwlpbnQJCWF0dG51bTsKKworCWlu dAkgICAqbWFwcGluZyA9IChpbnQqKXBhbGxvYzAoYm1zX251bV9tZW1iZXJz KGF0dG51bXMpICogc2l6ZW9mKGludCkpOworCisJYXR0bnVtID0gLTE7CisJ d2hpbGUgKChhdHRudW0gPSBibXNfbmV4dF9tZW1iZXIoYXR0bnVtcywgYXR0 bnVtKSkgPj0gMCkKKwkJbWFwcGluZ1thdHRpZHgrK10gPSBhdHRudW07CisK KwlBc3NlcnQoYXR0aWR4ID09IGJtc19udW1fbWVtYmVycyhhdHRudW1zKSk7 CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKworLyogdHJhbnNmb3JtcyBiaXRt YXBzZXQgaW50byBhbiBhcnJheSAodmFsdWUgPT4gaW5kZXgpICovCitzdGF0 aWMgaW50KgorbWFrZV9hdHRudW1fdG9faWR4X21hcHBpbmcoQml0bWFwc2V0 ICphdHRudW1zKQoreworCWludAkJYXR0aWR4ID0gMDsKKwlpbnQJCWF0dG51 bTsKKwlpbnQJCW1heGF0dG51bSA9IC0xOworCWludAkgICAqbWFwcGluZzsK KworCWF0dG51bSA9IC0xOworCXdoaWxlICgoYXR0bnVtID0gYm1zX25leHRf bWVtYmVyKGF0dG51bXMsIGF0dG51bSkpID49IDApCisJCW1heGF0dG51bSA9 IGF0dG51bTsKKworCW1hcHBpbmcgPSAoaW50KilwYWxsb2MwKChtYXhhdHRu dW0rMSkgKiBzaXplb2YoaW50KSk7CisKKwlhdHRudW0gPSAtMTsKKwl3aGls ZSAoKGF0dG51bSA9IGJtc19uZXh0X21lbWJlcihhdHRudW1zLCBhdHRudW0p KSA+PSAwKQorCQltYXBwaW5nW2F0dG51bV0gPSBhdHRpZHgrKzsKKworCUFz c2VydChhdHRpZHggPT0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpKTsKKwor CXJldHVybiBtYXBwaW5nOworfQorCisvKiBidWlsZCBhZGphY2VuY3kgbWF0 cml4IGZvciB0aGUgZGVwZW5kZW5jaWVzICovCitzdGF0aWMgYm9vbCoKK2J1 aWxkX2FkamFjZW5jeV9tYXRyaXgoTGlzdCAqc3RhdHMsIEJpdG1hcHNldCAq YXR0bnVtcywKKwkJCQkJICAgaW50ICppZHhfdG9fYXR0bnVtLCBpbnQgKmF0 dG51bV90b19pZHgpCit7CisJTGlzdENlbGwgKmxjOworCWludAkJbmF0dHMg ID0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpOworCWJvb2wgICAqbWF0cml4 ID0gKGJvb2wqKXBhbGxvYzAobmF0dHMgKiBuYXR0cyAqIHNpemVvZihib29s KSk7CisKKwlmb3JlYWNoIChsYywgc3RhdHMpCisJeworCQlpbnQgajsKKwkJ TVZTdGF0aXN0aWNJbmZvICpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxm aXJzdChsYyk7CisJCU1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyA9IE5V TEw7CisKKwkJLyogc2tpcCBzdGF0cyB3aXRob3V0IGZ1bmN0aW9uYWwgZGVw ZW5kZW5jaWVzIGJ1aWx0ICovCisJCWlmICghIHN0YXQtPmRlcHNfYnVpbHQp CisJCQljb250aW51ZTsKKworCQkvKiBmZXRjaCBhbmQgZGVzZXJpYWxpemUg ZGVwZW5kZW5jaWVzICovCisJCWRlcGVuZGVuY2llcyA9IGxvYWRfbXZfZGVw ZW5kZW5jaWVzKHN0YXQtPm12b2lkKTsKKwkJaWYgKGRlcGVuZGVuY2llcyA9 PSBOVUxMKQorCQl7CisJCQllbG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gZGVz ZXJpYWxpemUgZnVuYyBkZXBzICVkIiwgc3RhdC0+bXZvaWQpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBzZXQgbWF0cml4W2EsYl0gdG8gJ3RydWUn IGlmICdhPT5iJyAqLworCQlmb3IgKGogPSAwOyBqIDwgZGVwZW5kZW5jaWVz LT5uZGVwczsgaisrKQorCQl7CisJCQlpbnQgYWlkeCA9IGF0dG51bV90b19p ZHhbZGVwZW5kZW5jaWVzLT5kZXBzW2pdLT5hXTsKKwkJCWludCBiaWR4ID0g YXR0bnVtX3RvX2lkeFtkZXBlbmRlbmNpZXMtPmRlcHNbal0tPmJdOworCisJ CQkvKiBhPT4gYiAqLworCQkJbWF0cml4W2FpZHggKiBuYXR0cyArIGJpZHhd ID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBtYXRyaXg7Cit9CisKKy8q CisgKiBtdWx0aXBseSB0aGUgYWRqYWNlbmN5IG1hdHJpeAorICoKKyAqIEJ5 IG11bHRpcGx5aW5nIHRoZSBhZGphY2VuY3kgbWF0cml4LCB3ZSBkZXJpdmUg ZGVwZW5kZW5jaWVzIGltcGxpZWQgYnkgdGhvc2UKKyAqIHN0b3JlZCBpbiB0 aGUgY2F0YWxvZyAoYnV0IHBvc3NpYmx5IGluIHNldmVyYWwgc2VwYXJhdGUg cm93cykuIFdlIG5lZWQgdG8KKyAqIHJlcGVhdCB0aGUgbXVsdGlwbGljYXRp b24gdW50aWwgbm8gbmV3IGRlcGVuZGVuY2llcyBhcmUgZGlzY292ZXJlZC4g VGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgaXMg ZXF1YWwgdG8gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLgorICoKKyAqIFRo aXMgaXMgYmFzZWQgb24gbW9kZWxpbmcgdGhlIGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzIGFzIGVkZ2VzIGluIGEgZGlyZWN0ZWQKKyAqIGdyYXBoIHdpdGgg YXR0cmlidXRlcyBhcyB2ZXJ0aWNlcy4KKyAqLworc3RhdGljIHZvaWQKK211 bHRpcGx5X2FkamFjZW5jeV9tYXRyaXgoYm9vbCAqbWF0cml4LCBpbnQgbmF0 dHMpCit7CisJaW50IGk7CisKKwkvKiByZXBlYXQgdGhlIG11bHRpcGxpY2F0 aW9uIHVwIHRvIG5hdHRzLXRpbWVzICovCisJZm9yIChpID0gMDsgaSA8IG5h dHRzOyBpKyspCisJeworCQlib29sIGNoYW5nZWQgPSBmYWxzZTsJLyogbm8g Y2hhbmdlcyBpbiB0aGlzIHJvdW5kICovCisJCWludCBrLCBsLCBtOworCisJ CS8qIGsgPT4gbCAqLworCQlmb3IgKGsgPSAwOyBrIDwgbmF0dHM7IGsrKykK KwkJeworCQkJZm9yIChsID0gMDsgbCA8IG5hdHRzOyBsKyspCisJCQl7CisJ CQkJLyogc2tpcCBhbHJlYWR5IGtub3duIGRlcGVuZGVuY2llcyAqLworCQkJ CWlmIChtYXRyaXhbayAqIG5hdHRzICsgbF0pCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBjb21wdXRlIChrLGwpIGluIHRoZSBtdWx0aXBs aWVkIG1hdHJpeAorCQkJCSAqCisJCQkJICogV2UgZG9uJ3QgcmVhbGx5IGNh cmUgYWJvdXQgdGhlIGV4YWN0IHZhbHVlLCBqdXN0IHRydWUvZmFsc2UsCisJ CQkJICogc28gdGVybWluYXRlIHRoZSBsb29wIG9uY2Ugd2UgZ2V0IGEgaGl0 LiBBbHNvLCB0aGlzIG1ha2VzIGl0CisJCQkJICogc2FmZSB0byBtb2RpZnkg dGhlIG1hdHJpeCBpbi1wbGFjZS4KKwkJCQkgKi8KKwkJCQlmb3IgKG0gPSAw OyBtIDwgbmF0dHM7IG0rKykKKwkJCQl7CisJCQkJCWlmIChtYXRyaXhbayAq IG5hdHRzICsgbV0gKiBtYXRyaXhbbSAqIG5hdHRzICsgbF0pCisJCQkJCXsK KwkJCQkJCW1hdHJpeFtrICogbmF0dHMgKyBsXSA9IHRydWU7CisJCQkJCQlj aGFuZ2VkID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQor CQkJfQorCQl9CisKKwkJLyogbm8gdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IGFk ZGVkIGluIHRoaXMgcm91bmQsIHNvIHRlcm1pbmF0ZSAqLworCQlpZiAoISBj aGFuZ2VkKQorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVkdWNlIGNs YXVzZXMgdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKKyAqCisgKiBX YWxrIHRocm91Z2ggY2xhdXNlcyBhbmQgZWxpbWluYXRlIHRoZSByZWR1bmRh bnQgb25lcyAoaW1wbGllZCBieSBvdGhlcgorICogY2xhdXNlcykuIFRoaXMg aXMgZG9uZSBieSBmaXJzdCBkZXJpdmluZyBhIHRyYW5zaXRpdmUgY2xvc3Vy ZSBvZiBhbGwgdGhlCisgKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAoYnkg bXVsdGlwbHlpbmcgdGhlIGFkamFjZW5jeSBtYXRyaXgpLgorICovCitzdGF0 aWMgTGlzdCoKK2ZkZXBzX3JlZHVjZV9jbGF1c2VzKExpc3QgKmNsYXVzZXMs IEJpdG1hcHNldCAqYXR0bnVtcywgYm9vbCAqbWF0cml4LAorCQkJCQlpbnQg KmlkeF90b19hdHRudW0sIGludCAqYXR0bnVtX3RvX2lkeCwgSW5kZXggcmVs aWQpCit7CisJaW50IGk7CisJTGlzdENlbGwgKmxjOworCUxpc3QgICAqcmVk dWNlZF9jbGF1c2VzID0gTklMOworCisJaW50CQkJbm12Y2xhdXNlczsJLyog c2l6ZSBvZiB0aGUgYXJyYXlzICovCisJYm9vbAkgICAqcmVkdWNlZDsKKwlB dHRyTnVtYmVyICptdmF0dG51bXM7CisJTm9kZQkgICoqbXZjbGF1c2VzOwor CisJaW50CQkJbmF0dHMgPSBibXNfbnVtX21lbWJlcnMoYXR0bnVtcyk7CisK KwkvKgorCSAqIFByZWFsbG9jYXRlIHNwYWNlIGZvciBhbGwgY2xhdXNlcyAo dGhlIGxpc3Qgb25seSBjb250YWluc3QKKwkgKiBjb21wYXRpYmxlIGNsYXVz ZXMgYXQgdGhpcyBwb2ludCkuIFRoaXMgbWFrZXMgaXQgc29tZXdoYXQgZWFz aWVyCisJICogdG8gYWNjZXNzIHRoZSBzdGF0cyAvIGF0dG51bXMgcmFuZG9t bHkuCisJICoKKwkgKiBYWFggVGhpcyBhc3N1bWVzIGVhY2ggY2xhdXNlIHJl ZmVyZW5jZXMgZXhhY3RseSBvbmUgVmFyLCBzbyB0aGUKKwkgKiAgICAgYXJy YXlzIGFyZSBzaXplZCBhY2NvcmRpbmdseSAtIGZvciBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcworCSAqICAgICB0aGlzIGlzIHNhZmUsIGJlY2F1c2UgaXQg b25seSB3b3JrcyB3aXRoIFZhcj1Db25zdC4KKwkgKi8KKwltdmNsYXVzZXMg PSAoTm9kZSoqKXBhbGxvYzAobGlzdF9sZW5ndGgoY2xhdXNlcykgKiBzaXpl b2YoTm9kZSopKTsKKwltdmF0dG51bXMgPSAoQXR0ck51bWJlciopcGFsbG9j MChsaXN0X2xlbmd0aChjbGF1c2VzKSAqIHNpemVvZihBdHRyTnVtYmVyKSk7 CisJcmVkdWNlZCA9IChib29sKilwYWxsb2MwKGxpc3RfbGVuZ3RoKGNsYXVz ZXMpICogc2l6ZW9mKGJvb2wpKTsKKworCS8qIGZpbGwgdGhlIGFycmF5cyAq LworCW5tdmNsYXVzZXMgPSAwOworCWZvcmVhY2ggKGxjLCBjbGF1c2VzKQor CXsKKwkJTm9kZSAqIGNsYXVzZSA9IChOb2RlKilsZmlyc3QobGMpOworCQlC aXRtYXBzZXQgKiBhdHRudW1zID0gZ2V0X3ZhcmF0dG5vcyhjbGF1c2UsIHJl bGlkKTsKKworCQltdmNsYXVzZXNbbm12Y2xhdXNlc10gPSBjbGF1c2U7CisJ CW12YXR0bnVtc1tubXZjbGF1c2VzXSA9IGJtc19zaW5nbGV0b25fbWVtYmVy KGF0dG51bXMpOworCQlubXZjbGF1c2VzKys7CisJfQorCisJQXNzZXJ0KG5t dmNsYXVzZXMgPT0gbGlzdF9sZW5ndGgoY2xhdXNlcykpOworCisJLyogbm93 IHRyeSB0byByZWR1Y2UgdGhlIGNsYXVzZXMgKHVzaW5nIHRoZSBkZXBlbmRl bmNpZXMpICovCisJZm9yIChpID0gMDsgaSA8IG5tdmNsYXVzZXM7IGkrKykK Kwl7CisJCWludCBqOworCisJCS8qIG5vdCBjb3ZlcmVkIGJ5IGRlcGVuZGVu Y2llcyAqLworCQlpZiAoISBibXNfaXNfbWVtYmVyKG12YXR0bnVtc1tpXSwg YXR0bnVtcykpCisJCQljb250aW51ZTsKKworCQkvKiB0aGlzIGNsYXVzZSB3 YXMgYWxyZWFkeSByZWR1Y2VkLCBzbyBsZXQncyBza2lwIGl0ICovCisJCWlm IChyZWR1Y2VkW2ldKQorCQkJY29udGludWU7CisKKwkJLyogd2FsayB0aGUg cG90ZW50aWFsbHkgJ2ltcGxpZWQnIGNsYXVzZXMgKi8KKwkJZm9yIChqID0g MDsgaiA8IG5tdmNsYXVzZXM7IGorKykKKwkJeworCQkJaW50IGFpZHgsIGJp ZHg7CisKKwkJCS8qIG5vdCBjb3ZlcmVkIGJ5IGRlcGVuZGVuY2llcyAqLwor CQkJaWYgKCEgYm1zX2lzX21lbWJlcihtdmF0dG51bXNbal0sIGF0dG51bXMp KQorCQkJCWNvbnRpbnVlOworCisJCQlhaWR4ID0gYXR0bnVtX3RvX2lkeFtt dmF0dG51bXNbaV1dOworCQkJYmlkeCA9IGF0dG51bV90b19pZHhbbXZhdHRu dW1zW2pdXTsKKworCQkJLyogY2FuJ3QgcmVkdWNlIHRoZSBjbGF1c2UgYnkg aXRzZWxmLCBvciBpZiBhbHJlYWR5IHJlZHVjZWQgKi8KKwkJCWlmICgoaSA9 PSBqKSB8fCByZWR1Y2VkW2pdKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBt YXJrIHRoZSBjbGF1c2UgYXMgcmVkdWNlZCAoaWYgYWlkeCA9PiBiaWR4KSAq LworCQkJcmVkdWNlZFtqXSA9IG1hdHJpeFthaWR4ICogbmF0dHMgKyBiaWR4 XTsKKwkJfQorCX0KKworCS8qIG5vdyB3YWxrIHRocm91Z2ggdGhlIGNsYXVz ZXMsIGFuZCBrZWVwIG9ubHkgdGhvc2Ugbm90IHJlZHVjZWQgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbm12Y2xhdXNlczsgaSsrKQorCQlpZiAoISByZWR1Y2Vk W2ldKQorCQkJcmVkdWNlZF9jbGF1c2VzID0gbGFwcGVuZChyZWR1Y2VkX2Ns YXVzZXMsIG12Y2xhdXNlc1tpXSk7CisKKwlwZnJlZShyZWR1Y2VkKTsKKwlw ZnJlZShtdmNsYXVzZXMpOworCXBmcmVlKG12YXR0bnVtcyk7CisKKwlyZXR1 cm4gcmVkdWNlZF9jbGF1c2VzOworfQorCisvKgorICogZmlsdGVyIGNsYXVz ZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcgZm9yIHRoZSByZWR1Y3Rpb24gc3Rl cAorICoKKyAqIEZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBvbmx5IHdv cmsgd2l0aCBlcXVhbGl0eSBjbGF1c2VzIHdpdGggYXR0cmlidXRlcworICog Y292ZXJlZCBieSBhdCBsZWFzdCBvbmUgb2YgdGhlIHN0YXRpc3RpY3MsIHNv IHdlIHdhbGsgdGhyb3VnaCB0aGUgY2xhdXNlcworICogYW5kIGNvcHkgdGhl IHVuaW50ZXJlc3Rpbmcgb25lcyBkaXJlY3RseSB0byB0aGUgcmVzdWx0IChy ZWR1Y2VkKSBjbGF1c2VzLgorICoKKyAqIFRoYXQgaW5jbHVkZXMgY2xhdXNl cyB0aGF0OgorICogICAgIChhKSBhcmUgbm90IG12LWNvbXBhdGlibGUKKyAq ICAgICAoYikgcmVmZXJlbmNlIG1vcmUgdGhhbiBhIHNpbmdsZSBhdHRudW0K KyAqICAgICAoYykgdXNlIGF0dG51bSBub3QgY292ZXJlZCBieSBmdW5jdGlv bmFsIGRlcGVuY2VuY2llcworICoKKyAqIFRoZSBjbGF1c2VzIGludGVyZXN0 aW5nIGZvciB0aGUgcmVkdWN0aW9uIHN0ZXAgYXJlIGNvcGllZCB0byBkZXBz X2NsYXVzZXMuCisgKgorICogcm9vdCAgICAgICAgICAgIC0gcGxhbm5lciBy b290CisgKiBjbGF1c2VzICAgICAgICAgLSBsaXN0IG9mIGNsYXVzZXMgKGlu cHV0KQorICogZGVwc19hdHRudW1zICAgIC0gYXR0cmlidXRlcyBjb3ZlcmVk IGJ5IGRlcGVuZGVuY2llcworICogcmVkdWNlZF9jbGF1c2VzIC0gcmVzdWx0 aW5nIGNsYXVzZXMgKG5vdCBzdWJqZWN0IHRvIHJlZHVjdGlvbiBzdGVwKQor ICogZGVwc19jbGF1c2VzICAgIC0gY2xhdXNlcyB0byBiZSBwcm9jZXNzZWQg YnkgcmVkdWN0aW9uCisgKiByZWxpZCAgICAgICAgICAgLSByZWxpZCBvZiB0 aGUgYmFzZXJlbAorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBiaXRt YXAgb2YgYXR0bnVtcyByZWZlcmVuY2VkIGJ5IGRlcHNfY2xhdXNlcy4KKyAq Lworc3RhdGljIEJpdG1hcHNldCAqCitmZGVwc19maWx0ZXJfY2xhdXNlcyhQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJIExpc3QgKmNsYXVzZXMsIEJpdG1h cHNldCAqZGVwc19hdHRudW1zLAorCQkJCQkgTGlzdCAqKnJlZHVjZWRfY2xh dXNlcywgTGlzdCAqKmRlcHNfY2xhdXNlcywKKwkJCQkJIEluZGV4IHJlbGlk KQoreworCUxpc3RDZWxsICpsYzsKKwlCaXRtYXBzZXQgKmNsYXVzZV9hdHRu dW1zID0gTlVMTDsKKworCWZvcmVhY2ggKGxjLCBjbGF1c2VzKQorCXsKKwkJ QXR0ck51bWJlcglhdHRudW07CisJCU5vZGUJICAgKmNsYXVzZSA9IChOb2Rl ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKCEgY2xhdXNlX2lzX212X2NvbXBh dGlibGUoY2xhdXNlLCByZWxpZCwgJmF0dG51bSkpCisKKwkJCS8qIGNsYXVz ZSBpbmNvbXBhdGlibGUgd2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAq LworCQkJKnJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xh dXNlcywgY2xhdXNlKTsKKworCQllbHNlIGlmICghIGJtc19pc19tZW1iZXIo YXR0bnVtLCBkZXBzX2F0dG51bXMpKQorCisJCQkvKiBjbGF1c2Ugbm90IGNv dmVyZWQgYnkgdGhlIGRlcGVuZGVuY2llcyAqLworCQkJKnJlZHVjZWRfY2xh dXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xhdXNlcywgY2xhdXNlKTsKKwor CQllbHNlCisJCXsKKwkJCSpkZXBzX2NsYXVzZXMgICA9IGxhcHBlbmQoKmRl cHNfY2xhdXNlcywgY2xhdXNlKTsKKwkJCWNsYXVzZV9hdHRudW1zID0gYm1z X2FkZF9tZW1iZXIoY2xhdXNlX2F0dG51bXMsIGF0dG51bSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gY2xhdXNlX2F0dG51bXM7Cit9CisKKy8qCisgKiByZWR1 Y2UgbGlzdCBvZiBlcXVhbGl0eSBjbGF1c2VzIHVzaW5nIHNvZnQgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMKKyAqCisgKiBXZSBzaW1wbHkgd2FsayB0aHJv dWdoIGxpc3Qgb2YgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBmb3Ig ZWFjaCBvbmUgd2UKKyAqIGNoZWNrIHdoZXRoZXIgdGhlIGRlcGVuZGVuY3kg J21hdGNoZXMnIHRoZSBjbGF1c2VzLCBpLmUuIGlmIHRoZXJlJ3MgYSBjbGF1 c2UKKyAqIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uIElmIHllcywgd2UgYXR0 ZW1wdCB0byByZW1vdmUgYWxsIGNsYXVzZXMgbWF0Y2hpbmcKKyAqIHRoZSBp bXBsaWVkIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgZnJvbSB0aGUgbGlzdC4K KyAqCisgKiBUaGlzIG9ubHkgcmVkdWNlcyBlcXVhbGl0eSBjbGF1c2VzLCBh bmQgaWdub3JlcyBhbGwgdGhlIG90aGVyIHR5cGVzLiBXZSBtaWdodAorICog ZXh0ZW5kIGl0IHRvIGhhbmRsZSBJUyBOVUxMIGNsYXVzZSwgaW4gdGhlIGZ1 dHVyZS4KKyAqCisgKiBXZSBhbHNvIGFzc3VtZSB0aGUgZXF1YWxpdHkgY2xh dXNlcyBhcmUgJ2NvbXBhdGlibGUnLiBGb3IgZXhhbXBsZSB3ZSBjYW4ndAor ICogaWRlbnRpZnkgd2hlbiB0aGUgY2xhdXNlcyB1c2UgYSBtaXNtYXRjaGlu ZyB6aXAgY29kZSBhbmQgY2l0eSBuYW1lLiBJbiBzdWNoCisgKiBjYXNlIHRo ZSB1c3VhbCBhcHByb2FjaCAocHJvZHVjdCBvZiBzZWxlY3Rpdml0aWVzKSB3 b3VsZCBwcm9kdWNlIGEgYmV0dGVyCisgKiBlc3RpbWF0ZSwgYWx0aG91Z2gg bW9zdGx5IGJ5IGNoYW5jZS4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24g bmVlZHMgdG8gYmUgY2FyZWZ1bCBhYm91dCBjeWNsaWMgZGVwZW5kZW5jaWVz LCBlLmcuIHdoZW4KKyAqCisgKiAgICAgKGEgLT4gYikgYW5kIChiIC0+IGEp CisgKgorICogYXQgdGhlIHNhbWUgdGltZSwgd2hpY2ggbWVhbnMgdGhlcmUn cyAxOjEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGUgY29sdW1ucy4KKyAqIElu IHRoaXMgY2FzZSB3ZSBtdXN0IG5vdCByZWR1Y2UgY2xhdXNlcyBvbiBib3Ro IGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZS4KKyAqCisgKiBUT0RPIEN1 cnJlbnRseSB3ZSBvbmx5IGFwcGx5IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz IGF0IHRoZSBzYW1lIGxldmVsLCBidXQKKyAqICAgICAgbWF5YmUgd2UgY291 bGQgdHJhbnNmZXIgdGhlIGNsYXVzZXMgZnJvbSB1cHBlciBsZXZlbHMgdG8g dGhlIHN1YnRyZWVzPworICogICAgICBGb3IgZXhhbXBsZSBsZXQncyBzYXkg d2UgaGF2ZSAoYS0+YikgZGVwZW5kZW5jeSwgYW5kIGNvbmRpdGlvbgorICoK KyAqICAgICAgICAgIChhPTEpIEFORCAoYj0yIE9SIGM9MykKKyAqCisgKiAg ICAgIEN1cnJlbnRseSwgd2Ugd29uJ3QgYmUgYWJsZSB0byBwZXJmb3JtIGFu eSByZWR1Y3Rpb24sIGJlY2F1c2Ugd2UnbGwKKyAqICAgICAgY29uc2lkZXIg KGE9MSkgYW5kIChiPTIgT1IgYz0zKSBpbmRlcGVuZGVudGx5LiBCdXQgbWF5 YmUgd2UgY291bGQgcGFzcworICogICAgICAoYT0xKSBpbnRvIHRoZSBvdGhl ciBleHByZXNzaW9uLCBhbmQgb25seSBjaGVjayBpdCBhZ2FpbnN0IGNvbmRp dGlvbnMKKyAqICAgICAgb2YgdGhlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz PworICoKKyAqICAgICAgSW4gdGhpcyBjYXNlIHdlJ2QgZW5kIHVwIHdpdGgK KyAqCisgKiAgICAgICAgIChhPTEpCisgKgorICogICAgICBhcyB3ZSdkIGNv bnNpZGVyIChiPTIpIGltcGxpZWQgdGhhbmtzIHRvIHRoZSBydWxlLCByZW5k ZXJpbmcgdGhlIHdob2xlCisgKiAgICAgIE9SIGNsYXVzZSB2YWxpZC4KKyAq Lworc3RhdGljIExpc3QgKgorY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRlbmNp ZXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCisJCQkJCQkJ ICBJbmRleCByZWxpZCwgTGlzdCAqc3RhdHMpCit7CisJTGlzdAkgICAqcmVk dWNlZF9jbGF1c2VzID0gTklMOworCisJLyoKKwkgKiBtYXRyaXggb2YgKG5h dHRzIHggbmF0dHMpLCAxIG1lYW5zIHg9PnkKKwkgKgorCSAqIFRoaXMgc2Vy dmVzIHR3byBwdXJwb3NlcyAtIGZpcnN0LCBpdCBtZXJnZXMgZGVwZW5kZW5j aWVzIGZyb20gYWxsCisJICogdGhlIHN0YXRpc3RpY3MsIHNlY29uZCBpdCBt YWtlcyBnZW5lcmF0aW5nIGFsbCB0aGUgdHJhbnNpdGl2ZQorCSAqIGRlcGVu ZGVuY2llcyBlYXNpZXIuCisJICoKKwkgKiBXZSBuZWVkIHRvIGJ1aWxkIHRo aXMgb25seSBmb3IgYXR0cmlidXRlcyBmcm9tIHRoZSBkZXBlbmRlbmNpZXMs CisJICogbm90IGZvciBhbGwgYXR0cmlidXRlcyBpbiB0aGUgdGFibGUuCisJ ICoKKwkgKiBXZSBjYW4ndCBkbyB0aGF0IG9ubHkgZm9yIGF0dHJpYnV0ZXMg ZnJvbSB0aGUgY2xhdXNlcywgYmVjYXVzZSB3ZQorCSAqIHdhbnQgdG8gYnVp bGQgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgKGluY2x1ZGluZyB0aG9zZSBn b2luZworCSAqIHRocm91Z2ggYXR0cmlidXRlcyBub3QgbGlzdGVkIGluIHRo ZSBzdGF0cykuCisJICoKKwkgKiBUaGlzIG9ubHkgd29ya3MgZm9yIEE9PkIg ZGVwZW5kZW5jaWVzLCBub3Qgc3VyZSBob3cgdG8gZG8gdGhhdAorCSAqIGZv ciBjb21wbGV4IGRlcGVuZGVuY2llcy4KKwkgKi8KKwlib29sICAgICAgICpk ZXBzX21hdHJpeDsKKwlpbnQJCQlkZXBzX25hdHRzOwkvKiBzaXplIG9mIHRo ZSBtYXRyaWMgKi8KKworCS8qIG1hcHBpbmcgYXR0bnVtIDw9PiBtYXRyaXgg aW5kZXggKi8KKwlpbnQJCSAgICpkZXBzX2lkeF90b19hdHRudW07CisJaW50 CQkgICAqZGVwc19hdHRudW1fdG9faWR4OworCisJLyogYXR0bnVtcyBpbiBk ZXBlbmRlbmNpZXMgYW5kIGNsYXVzZXMgKGFuZCBpbnRlcnNlY3Rpb24pICov CisJTGlzdAkgICAqZGVwc19jbGF1c2VzICAgPSBOSUw7CisJQml0bWFwc2V0 ICAqZGVwc19hdHRudW1zICAgPSBOVUxMOworCUJpdG1hcHNldCAgKmNsYXVz ZV9hdHRudW1zID0gTlVMTDsKKwlCaXRtYXBzZXQgICppbnRlcnNlY3RfYXR0 bnVtcyA9IE5VTEw7CisKKwkvKgorCSAqIElzIHRoZXJlIGF0IGxlYXN0IG9u ZSBzdGF0aXN0aWNzIHdpdGggZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXM/CisJ ICogSWYgbm90LCByZXR1cm4gdGhlIG9yaWdpbmFsIGNsYXVzZXMgcmlnaHQg YXdheS4KKwkgKgorCSAqIFhYWCBJc24ndCB0aGlzIHBvaW50bGVzcywgdGhh bmtzIHRvIGV4YWN0bHkgdGhlIHNhbWUgY2hlY2sgaW4KKwkgKiAgICAgY2xh dXNlbGlzdF9zZWxlY3Rpdml0eSgpPyBDYW4gd2UgdHJpZ2dlciB0aGUgY29u ZGl0aW9uIGhlcmU/CisJICovCisJaWYgKCEgaGFzX3N0YXRzKHN0YXRzLCBN Vl9DTEFVU0VfVFlQRV9GREVQKSkKKwkJcmV0dXJuIGNsYXVzZXM7CisKKwkv KgorCSAqIEJ1aWxkIHRoZSBkZXBlbmRlbmN5IG1hdHJpeCwgaS5lLiBhdHRy aWJ1dGUgYWRqYWNlbmN5IG1hdHJpeCwKKwkgKiB3aGVyZSAxIG1lYW5zIChh PT5iKS4gT25jZSB3ZSBoYXZlIHRoZSBhZGphY2VuY3kgbWF0cml4LCB3ZSds bAorCSAqIG11bHRpcGx5IGl0IGJ5IGl0c2VsZiwgdG8gZ2V0IHRyYW5zaXRp dmUgZGVwZW5kZW5jaWVzLgorCSAqCisJICogTm90ZTogVGhpcyBpcyBwcmV0 dHkgbXVjaCB0cmFuc2l0aXZlIGNsb3N1cmUgZnJvbSBncmFwaCB0aGVvcnku CisJICoKKwkgKiBGaXJzdCwgbGV0J3Mgc2VlIHdoYXQgYXR0cmlidXRlcyBh cmUgY292ZXJlZCBieSBmdW5jdGlvbmFsCisJICogZGVwZW5kZW5jaWVzIChz aWRlcyBvZiB0aGUgYWRqYWNlbmN5IG1hdHJpeCksIGFuZCBhbHNvIGEgbWF4 aW11bQorCSAqIGF0dHJpYnV0ZSAoc2l6ZSBvZiBtYXBwaW5nIHRvIHNpbXBs ZSBpbnRlZ2VyIGluZGV4ZXMpOworCSAqLworCWRlcHNfYXR0bnVtcyA9IGZk ZXBzX2NvbGxlY3RfYXR0bnVtcyhzdGF0cyk7CisKKwkvKgorCSAqIFdhbGsg dGhyb3VnaCB0aGUgY2xhdXNlcyAtIGNsYXVzZXMgdGhhdCBhcmUgKG9uZSBv ZikKKwkgKgorCSAqIChhKSBub3QgbXYtY29tcGF0aWJsZQorCSAqIChiKSBh cmUgdXNpbmcgbW9yZSB0aGFuIGEgc2luZ2xlIGF0dG51bQorCSAqIChjKSB1 c2luZyBhdHRudW0gbm90IGNvdmVyZWQgYnkgZnVuY3Rpb25hbCBkZXBlbmNl bmNpZXMKKwkgKgorCSAqIG1heSBiZSBjb3BpZWQgZGlyZWN0bHkgdG8gdGhl IHJlc3VsdC4gVGhlIGludGVyZXN0aW5nIGNsYXVzZXMgYXJlCisJICoga2Vw dCBpbiAnZGVwc19jbGF1c2VzJyBhbmQgd2lsbCBiZSBwcm9jZXNzZWQgbGF0 ZXIuCisJICovCisJY2xhdXNlX2F0dG51bXMgPSBmZGVwc19maWx0ZXJfY2xh dXNlcyhyb290LCBjbGF1c2VzLCBkZXBzX2F0dG51bXMsCisJCQkJCQkJCQkJ JnJlZHVjZWRfY2xhdXNlcywgJmRlcHNfY2xhdXNlcywgcmVsaWQpOworCisJ LyoKKwkgKiB3ZSBuZWVkIGF0IGxlYXN0IHR3byBjbGF1c2VzIHJlZmVyZW5j aW5nIHR3byBkaWZmZXJlbnQgYXR0cmlidXRlcworCSAqIHJlZmVyZW5jaW5n IHRvIGRvIHRoZSByZWR1Y3Rpb24KKwkgKi8KKwlpZiAoKGxpc3RfbGVuZ3Ro KGRlcHNfY2xhdXNlcykgPCAyKSB8fCAoYm1zX251bV9tZW1iZXJzKGNsYXVz ZV9hdHRudW1zKSA8IDIpKQorCXsKKwkJYm1zX2ZyZWUoY2xhdXNlX2F0dG51 bXMpOworCQlsaXN0X2ZyZWUocmVkdWNlZF9jbGF1c2VzKTsKKwkJbGlzdF9m cmVlKGRlcHNfY2xhdXNlcyk7CisKKwkJcmV0dXJuIGNsYXVzZXM7CisJfQor CisKKwkvKgorCSAqIFdlIG5lZWQgYXQgbGVhc3QgdHdvIG1hdGNoaW5nIGF0 dHJpYnV0ZXMgaW4gdGhlIGNsYXVzZXMgYW5kCisJICogZGVwZW5kZW5jaWVz LCBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVhbGx5IHJlZHVjZSBhbnl0aGluZy4K KwkgKi8KKwlpbnRlcnNlY3RfYXR0bnVtcyA9IGJtc19pbnRlcnNlY3QoY2xh dXNlX2F0dG51bXMsIGRlcHNfYXR0bnVtcyk7CisJaWYgKGJtc19udW1fbWVt YmVycyhpbnRlcnNlY3RfYXR0bnVtcykgPCAyKQorCXsKKwkJYm1zX2ZyZWUo Y2xhdXNlX2F0dG51bXMpOworCQlibXNfZnJlZShkZXBzX2F0dG51bXMpOwor CQlibXNfZnJlZShpbnRlcnNlY3RfYXR0bnVtcyk7CisKKwkJbGlzdF9mcmVl KGRlcHNfY2xhdXNlcyk7CisJCWxpc3RfZnJlZShyZWR1Y2VkX2NsYXVzZXMp OworCisJCXJldHVybiBjbGF1c2VzOworCX0KKworCS8qCisJICogQnVpbGQg bWFwcGluZyBiZXR3ZWVuIG1hdHJpeCBpbmRleGVzIGFuZCBhdHRudW1zLCBh bmQgdGhlbiB0aGUKKwkgKiBhZGphY2VuY3kgbWF0cml4IGl0c2VsZi4KKwkg Ki8KKwlkZXBzX2lkeF90b19hdHRudW0gPSBtYWtlX2lkeF90b19hdHRudW1f bWFwcGluZyhkZXBzX2F0dG51bXMpOworCWRlcHNfYXR0bnVtX3RvX2lkeCA9 IG1ha2VfYXR0bnVtX3RvX2lkeF9tYXBwaW5nKGRlcHNfYXR0bnVtcyk7CisK KwkvKiBidWlsZCB0aGUgYWRqYWNlbmN5IG1hdHJpeCAqLworCWRlcHNfbWF0 cml4ID0gYnVpbGRfYWRqYWNlbmN5X21hdHJpeChzdGF0cywgZGVwc19hdHRu dW1zLAorCQkJCQkJCQkJCSBkZXBzX2lkeF90b19hdHRudW0sCisJCQkJCQkJ CQkJIGRlcHNfYXR0bnVtX3RvX2lkeCk7CisKKwlkZXBzX25hdHRzID0gYm1z X251bV9tZW1iZXJzKGRlcHNfYXR0bnVtcyk7CisKKwkvKgorCSAqIE11bHRp cGx5IHRoZSBtYXRyaXggTi10aW1lcyAoTiA9IHNpemUgb2YgdGhlIG1hdHJp eCksIHNvIHRoYXQgd2UKKwkgKiBnZXQgYWxsIHRoZSB0cmFuc2l0aXZlIGRl cGVuZGVuY2llcy4gVGhhdCBtYWtlcyB0aGUgbmV4dCBzdGVwCisJICogbXVj aCBlYXNpZXIgYW5kIGZhc3Rlci4KKwkgKgorCSAqIFRoaXMgaXMgZXNzZW50 aWFsbHkgYW4gYWRqYWNlbmN5IG1hdHJpeCBmcm9tIGdyYXBoIHRoZW9yeSwg YW5kCisJICogYnkgbXVsdGlwbHlpbmcgaXQgd2UgZ2V0IHRyYW5zaXRpdmUg ZWRnZXMuIFdlIGRvbid0IHJlYWxseSBjYXJlCisJICogYWJvdXQgdGhlIGV4 YWN0IG51bWJlciAobnVtYmVyIG9mIHBhdGhzIGJldHdlZW4gdmVydGljZXMp IHRob3VnaCwKKwkgKiBzbyB3ZSBjYW4gZG8gdGhlIG11bHRpcGxpY2F0aW9u IGluLXBsYWNlICh3ZSBkb24ndCBjYXJlIHdoZXRoZXIKKwkgKiB3ZSBmb3Vu ZCB0aGUgZGVwZW5kZW5jeSBpbiB0aGlzIHJvdW5kIG9yIGluIHRoZSBwcmV2 aW91cyBvbmUpLgorCSAqCisJICogVHJhY2sgaG93IG1hbnkgbmV3IGRlcGVu ZGVuY2llcyB3ZXJlIGFkZGVkLCBhbmQgc3RvcCB3aGVuIDAsIGJ1dAorCSAq IHdlIGNhbid0IG11bHRpcGx5IG1vcmUgdGhhbiBOLXRpbWVzIChsb25nZXN0 IHBhdGggaW4gdGhlIGdyYXBoKS4KKwkgKi8KKwltdWx0aXBseV9hZGphY2Vu Y3lfbWF0cml4KGRlcHNfbWF0cml4LCBkZXBzX25hdHRzKTsKKworCS8qCisJ ICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2VzLCBhbmQgc2VlIHdoaWNoIG90 aGVyIGNsYXVzZXMgd2UgbWF5CisJICogcmVkdWNlLiBUaGUgbWF0cml4IGNv bnRhaW5zIGFsbCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcywgd2hpY2gKKwkg KiBtYWtlcyB0aGlzIHZlcnkgZmFzdC4KKwkgKgorCSAqIFdlIGhhdmUgdG8g YmUgY2FyZWZ1bCBub3QgdG8gcmVkdWNlIHRoZSBjbGF1c2UgdXNpbmcgaXRz ZWxmLCBvcgorCSAqIHJlZHVjaW5nIGFsbCBjbGF1c2VzIGZvcm1pbmcgYSBj eWNsZSAoc28gd2UgaGF2ZSB0byBza2lwIGFscmVhZHkKKwkgKiBlbGltaW5h dGVkIGNsYXVzZXMpLgorCSAqCisJICogSSdtIG5vdCBzdXJlIHdoZXRoZXIg dGhpcyBndWFyYW50ZWVzIGZpbmRpbmcgdGhlIGJlc3Qgc29sdXRpb24sCisJ ICogaS5lLiByZWR1Y2luZyB0aGUgbW9zdCBjbGF1c2VzLCBidXQgaXQgcHJv YmFibHkgZG9lcyAodGhhbmtzIHRvCisJICogaGF2aW5nIGFsbCB0aGUgdHJh bnNpdGl2ZSBkZXBlbmRlbmNpZXMpLgorCSAqLworCWRlcHNfY2xhdXNlcyA9 IGZkZXBzX3JlZHVjZV9jbGF1c2VzKGRlcHNfY2xhdXNlcywKKwkJCQkJCQkJ CQlkZXBzX2F0dG51bXMsIGRlcHNfbWF0cml4LAorCQkJCQkJCQkJCWRlcHNf aWR4X3RvX2F0dG51bSwKKwkJCQkJCQkJCQlkZXBzX2F0dG51bV90b19pZHgs IHJlbGlkKTsKKworCS8qIGpvaW4gdGhlIHR3byBsaXN0cyBvZiBjbGF1c2Vz ICovCisJcmVkdWNlZF9jbGF1c2VzID0gbGlzdF91bmlvbihyZWR1Y2VkX2Ns YXVzZXMsIGRlcHNfY2xhdXNlcyk7CisKKwlwZnJlZShkZXBzX21hdHJpeCk7 CisJcGZyZWUoZGVwc19pZHhfdG9fYXR0bnVtKTsKKwlwZnJlZShkZXBzX2F0 dG51bV90b19pZHgpOworCisJYm1zX2ZyZWUoZGVwc19hdHRudW1zKTsKKwli bXNfZnJlZShjbGF1c2VfYXR0bnVtcyk7CisJYm1zX2ZyZWUoaW50ZXJzZWN0 X2F0dG51bXMpOworCisJcmV0dXJuIHJlZHVjZWRfY2xhdXNlczsKK30KKwor LyoKKyAqIENoZWNrIHRoYXQgdGhlcmUgYXJlIHN0YXRzIHdpdGggYXQgbGVh c3Qgb25lIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZXMuCisgKi8KK3N0YXRpYyBi b29sCitoYXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQoreworCUxp c3RDZWxsICAgKnM7CisKKwlmb3JlYWNoIChzLCBzdGF0cykKKwl7CisJCU1W U3RhdGlzdGljSW5mbwkqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmly c3Qocyk7CisKKwkJaWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfRkRFUCkg JiYgc3RhdC0+ZGVwc19idWlsdCkKKwkJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIExvb2t1cHMgc3RhdHMgZm9y IGEgZ2l2ZW4gYmFzZXJlbC4KKyAqLworc3RhdGljIExpc3QgKgorZmluZF9z dGF0cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpCit7CisJQXNz ZXJ0KHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdICE9IE5VTEwpOwor CisJcmV0dXJuIHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdLT5tdnN0 YXRsaXN0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9SRUFETUUuc3RhdHMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L1JFQURNRS5zdGF0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hMzhlYTdiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMKQEAgLTAsMCArMSwzNiBAQAor TXVsdGl2YXJpYXRlIHN0YXRpc3Rpc3RpY3MKKz09PT09PT09PT09PT09PT09 PT09PT09PT09CisKK1doZW4gZXN0aW1hdGluZyB2YXJpb3VzIHF1YW50aXRp ZXMgKGUuZy4gY29uZGl0aW9uIHNlbGVjdGl2aXRpZXMpIHRoZSBkZWZhdWx0 CithcHByb2FjaCByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gb2YgaW5kZXBl bmRlbmNlLiBJbiBwcmFjdGljZSB0aGF0J3Mgb2Z0ZW4KK25vdCB0cnVlLCBy ZXN1bHRpbmcgaW4gZXN0aW1hdGlvbiBlcnJvcnMuCisKK011bHRpdmFyaWF0 ZSBzdGF0cyB0cmFjayBkaWZmZXJlbnQgdHlwZXMgb2YgZGVwZW5kZW5jaWVz IGJldHdlZW4gdGhlIGNvbHVtbnMsCitob3BlZnVsbHkgaW1wcm92aW5nIHRo ZSBlc3RpbWF0ZXMuCisKK0N1cnJlbnRseSB3ZSBvbmx5IGhhdmUgb25lIGtp bmQgb2YgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgLSBzb2Z0IGZ1bmN0aW9u YWwKK2RlcGVuZGVuY2llcywgYW5kIHdlIHVzZSBpdCB0byBpbXByb3ZlIGVz dGltYXRlcyBvZiBlcXVhbGl0eSBjbGF1c2VzLiBTZWUKK1JFQURNRS5kZXBl bmRlbmNpZXMgZm9yIGRldGFpbHMuCisKKworU2VsZWN0aXZpdHkgZXN0aW1h dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGVzdGltYXRp bmcgc2VsZWN0aXZpdHksIHdlIGFpbSB0byBhY2hpZXZlIHNldmVyYWwgdGhp bmdzOgorCisgICAgKGEpIG1heGltaXplIHRoZSBlc3RpbWF0ZSBhY2N1cmFj eQorCisgICAgKGIpIG1pbmltaXplIHRoZSBvdmVyaGVhZCwgZXNwZWNpYWxs eSB3aGVuIG5vIHN1aXRhYmxlIG11bHRpdmFyaWF0ZSBzdGF0cworICAgICAg ICBleGlzdCAoc28gaWYgeW91IGFyZSBub3QgdXNpbmcgbXVsdGl2YXJpYXRl IHN0YXRzLCB0aGVyZSdzIG5vIG92ZXJoZWFkKQorCitUaGlzIGNsYXVzZWxp c3Rfc2VsZWN0aXZpdHkoKSBwZXJmb3JtcyBzZXZlcmFsIGluZXhwZW5zaXZl IGNoZWNrcyBmaXJzdCwgYmVmb3JlCitldmVuIGF0dGVtcHRpbmcgdG8gZG8g dGhlIG1vcmUgZXhwZW5zaXZlIGVzdGltYXRpb24uCisKKyAgICAoMSkgY2hl Y2sgaWYgdGhlcmUgYXJlIG11bHRpdmFyaWF0ZSBzdGF0cyBvbiB0aGUgcmVs YXRpb24KKworICAgICgyKSBjaGVjayB0aGVyZSBhcmUgYXQgbGVhc3QgdHdv IGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBjbGF1c2VzIGNvbXBhdGlibGUK KyAgICAgICAgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyAoZXF1YWxp dHkgY2xhdXNlcyBmb3IgZnVuYy4gZGVwZW5kZW5jaWVzKQorCisgICAgKDMp IHBlcmZvcm0gcmVkdWN0aW9uIG9mIGVxdWFsaXR5IGNsYXVzZXMgdXNpbmcg ZnVuYy4gZGVwZW5kZW5jaWVzCisKKyAgICAoNCkgZXN0aW1hdGUgdGhlIHJl ZHVjZWQgbGlzdCBvZiBjbGF1c2VzIHVzaW5nIHJlZ3VsYXIgc3RhdGlzdGlj cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKaW5k ZXggYTc1NWM0OS4uYmQyMDBiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2NvbW1vbi5jCkBAIC04NCw3ICs4NCw4IEBAIGJ1aWxkX212 X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBs ZSAqcm93cywKIAkJLyoKIAkJICogQW5hbHl6ZSBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyBvZiBjb2x1bW5zLgogCQkgKi8KLQkJZGVwcyA9IGJ1aWxkX212 X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOwor CQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQorCQkJZGVwcyA9IGJ1aWxkX212 X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOwog CiAJCS8qIHN0b3JlIHRoZSBoaXN0b2dyYW0gLyBNQ1YgbGlzdCBpbiB0aGUg Y2F0YWxvZyAqLwogCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRl cHMsIGF0dHJzKTsKQEAgLTE2Myw2ICsxNjQsNyBAQCBsaXN0X212X3N0YXRz KE9pZCByZWxpZCkKIAogCQlpbmZvLT5tdm9pZCA9IEhlYXBUdXBsZUdldE9p ZChodHVwKTsKIAkJaW5mby0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3Rvcihz dGF0cy0+c3Rha2V5cy52YWx1ZXMsIHN0YXRzLT5zdGFrZXlzLmRpbTEpOwor CQlpbmZvLT5kZXBzX2VuYWJsZWQgPSBzdGF0cy0+ZGVwc19lbmFibGVkOwog CQlpbmZvLT5kZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7CiAKIAkJ cmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOwpAQCAtMjc0LDYgKzI3 Niw3IEBAIGNvbXBhcmVfc2NhbGFyc19wYXJ0aXRpb24oY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQogCXJldHVybiBBcHBseVNv cnRDb21wYXJhdG9yKGRhLCBmYWxzZSwgZGIsIGZhbHNlLCBzc3VwKTsKIH0K IAorCiAvKiBpbml0aWFsaXplIG11bHRpLWRpbWVuc2lvbmFsIHNvcnQgKi8K IE11bHRpU29ydFN1cHBvcnQKIG11bHRpX3NvcnRfaW5pdChpbnQgbmRpbXMp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVu ZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRl bmNpZXMuYwppbmRleCAyYTA2NGEwLi5jODBiYTMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVzLmMKQEAg LTQzNSwzICs0MzUsMjcgQEAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3No b3coUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9URVhUX1AoY3N0 cmluZ190b190ZXh0KHJlc3VsdCkpOwogfQorCitNVkRlcGVuZGVuY2llcwor bG9hZF9tdl9kZXBlbmRlbmNpZXMoT2lkIG12b2lkKQoreworCWJvb2wJCWlz bnVsbCA9IGZhbHNlOworCURhdHVtCQlkZXBzOworCisJLyogUHJlcGFyZSB0 byBzY2FuIHBnX212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5k cmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJj aFN5c0NhY2hlMShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQp KTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlGb3JtX3BnX212 X3N0YXRpc3RpYwltdnN0YXQgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdF VFNUUlVDVChodHVwKTsKKwlBc3NlcnQobXZzdGF0LT5kZXBzX2VuYWJsZWQg JiYgbXZzdGF0LT5kZXBzX2J1aWx0KTsKKyNlbmRpZgorCisJZGVwcyA9IFN5 c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVt X3BnX212X3N0YXRpc3RpY19zdGFkZXBzLCAmaXNudWxsKTsKKworCUFzc2Vy dCghaXNudWxsKTsKKworCVJlbGVhc2VTeXNDYWNoZShodHVwKTsKKworCXJl dHVybiBkZXNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoRGF0dW1HZXRCeXRl YVAoZGVwcykpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv bXZzdGF0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCmluZGV4 IDdlYmQ5NjEuLmNjNDNhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL212c3RhdHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmgKQEAgLTE3LDEyICsxNywyMCBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKIAorLyoKKyAqIERlZ3JlZSBv ZiBob3cgbXVjaCBNQ1YgaXRlbSAvIGhpc3RvZ3JhbSBidWNrZXQgbWF0Y2hl cyBhIGNsYXVzZS4KKyAqIFRoaXMgaXMgdGhlbiBjb25zaWRlcmVkIHdoZW4g Y29tcHV0aW5nIHRoZSBzZWxlY3Rpdml0eS4KKyAqLworI2RlZmluZSBNVlNU QVRTX01BVENIX05PTkUJCTAJCS8qIG5vIG1hdGNoIGF0IGFsbCAqLworI2Rl ZmluZSBNVlNUQVRTX01BVENIX1BBUlRJQUwJMQkJLyogcGFydGlhbCBtYXRj aCAqLworI2RlZmluZSBNVlNUQVRTX01BVENIX0ZVTEwJCTIJCS8qIGZ1bGwg bWF0Y2ggKi8KIAogI2RlZmluZSBNVlNUQVRTX01BWF9ESU1FTlNJT05TCTgJ CS8qIG1heCBudW1iZXIgb2YgYXR0cmlidXRlcyAqLwogCi0vKiBBbiBhc3Nv Y2lhdGl2ZSBydWxlLCB0cmFja2luZyBbYSA9PiBiXSBkZXBlbmRlbmN5Lgot ICoKLSAqIFRPRE8gTWFrZSB0aGlzIHdvcmsgd2l0aCBtdWx0aXBsZSBjb2x1 bW5zIG9uIGJvdGggc2lkZXMuCisKKy8qCisgKiBGdW5jdGlvbmFsIGRlcGVu ZGVuY2llcywgdHJhY2tpbmcgY29sdW1uLWxldmVsIHJlbGF0aW9uc2hpcHMg KHZhbHVlcworICogaW4gb25lIGNvbHVtbiBkZXRlcm1pbmUgdmFsdWVzIGlu IGFub3RoZXIgb25lKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgTVZEZXBlbmRl bmN5RGF0YSB7CiAJaW50MTYJYTsKQEAgLTQ4LDYgKzU2LDggQEAgdHlwZWRl ZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1WRGVwZW5kZW5jaWVzOwogICogICAg ICBzdGF0cyBzcGVjaWZpZWQgdXNpbmcgZmxhZ3MgKG9yIHNvbWV0aGluZyBs aWtlIHRoYXQpLgogICovCiAKK01WRGVwZW5kZW5jaWVzIGxvYWRfbXZfZGVw ZW5kZW5jaWVzKE9pZCBtdm9pZCk7CisKIGJ5dGVhICogc2VyaWFsaXplX212 X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOwog CiAvKiBkZXNlcmlhbGl6YXRpb24gb2Ygc3RhdHMgKHNlcmlhbGl6YXRpb24g aXMgcHJpdmF0ZSB0byBhbmFseXplKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTk5OTcKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2RlcGVuZGVuY2llcy5vdXQKQEAgLTAsMCArMSwxNzIgQEAKKy0tIGRhdGEg dHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAg YyBJTlQKKyk7CistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKHVua25vd25fY29s dW1uKSBXSVRIIChkZXBlbmRlbmNpZXMpOworRVJST1I6ICBjb2x1bW4gInVu a25vd25fY29sdW1uIiByZWZlcmVuY2VkIGluIHN0YXRpc3RpY3MgZG9lcyBu b3QgZXhpc3QKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNT IHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhKSBXSVRIIChkZXBl bmRlbmNpZXMpOworRVJST1I6ICBtdWx0aXZhcmlhdGUgc3RhdHMgcmVxdWly ZSAyIG9yIG1vcmUgY29sdW1ucworLS0gc2luZ2xlIGNvbHVtbiwgZHVwbGlj YXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgKGEsYSkgV0lUSCAoZGVwZW5kZW5jaWVzKTsKK0VSUk9SOiAg ZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlv bgorLS0gdHdvIGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RB VElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYSwg YikgV0lUSCAoZGVwZW5kZW5jaWVzKTsKK0VSUk9SOiAgZHVwbGljYXRlIGNv bHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlvbgorLS0gdW5rbm93 biBvcHRpb24KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIICh1bmtub3duX29wdGlvbik7 CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlvbiAidW5r bm93bl9vcHRpb24iCistLSBjb3JyZWN0IGNvbW1hbmQKK0NSRUFURSBTVEFU SVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBj KSBXSVRIIChkZXBlbmRlbmNpZXMpOworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2Qo aSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsK K1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRz X2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5j aWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8 IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgICAgfCBmICAgICAgICAgIHwgCisoMSByb3cpCisK K1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gYSA9PiBi LCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRl cHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRl cHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19l bmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0ICAg ICAgICAgIHwgMSA9PiAyLCAxID0+IDMsIDIgPT4gMworKDEgcm93KQorCitU UlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGEgPT4gYiwg YSA9PiBjCitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcwor ICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwg cGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQgfCBk ZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgCist LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQgICAgICAgICAgfCAx ID0+IDIsIDEgPT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llczsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRt YXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQg SU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8x MDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5ERVggZmRlcHNfaWR4IE9OIGZ1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiKTsKK0FOQUxZWkUgZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXM7CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBz X2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBz KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworIGRlcHNfZW5h YmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNf c2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdCAgICAg ICAgICB8IDEgPT4gMiwgMSA9PiAzLCAyID0+IDMKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMgV0hFUkUgYSA9IDEwIEFORCBiID0gNTsKKyAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0 bWFwIEhlYXAgU2NhbiBvbiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAg UmVjaGVjayBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gZmRlcHNfaWR4CisgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisoNCByb3dzKQorCitE Uk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gdmFybGVu YSB0eXBlICh0ZXh0KQorQ1JFQVRFIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzICgKKyAgICBhIFRFWFQsCisgICAgYiBURVhULAorICAgIGMgVEVY VAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHMyIE9OIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIIChkZXBlbmRlbmNpZXMpOworLS0g cmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5T RVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNU IG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNf YnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFi bGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19z aG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCBmICAgICAg ICAgIHwgCisoMSByb3cpCisKK1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzOworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElO VE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAs IGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVD VCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6 cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgICAgfCB0ICAgICAgICAgIHwgMSA9PiAyLCAxID0+IDMsIDIg PT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkv MjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFM WVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5h YmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3No b3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsK KyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX3Nob3cgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg ICB8IHQgICAgICAgICAgfCAxID0+IDIsIDEgPT4gMworKDEgcm93KQorCitU UlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGNoZWNrIGV4 cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGlu ZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cworICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5E RVggZmRlcHNfaWR4IE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBi KTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CitTRUxFQ1Qg ZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRl bmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJl Z2NsYXNzOworIGRlcHNfZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICAgIHwgdCAgICAgICAgICB8IDEgPT4gMiwgMSA9PiAzLCAyID0+ IDMKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAq IEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgYSA9ICcxMCcg QU5EIGIgPSAnNSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEJpdG1hcCBIZWFwIFNjYW4gb24gZnVuY3Rpb25hbF9kZXBlbmRlbmNp ZXMKKyAgIFJlY2hlY2sgQ29uZDogKChhID0gJzEwJzo6dGV4dCkgQU5EIChi ID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBm ZGVwc19pZHgKKyAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA9ICcxMCc6OnRl eHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisoNCByb3dzKQorCitEUk9QIFRB QkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gTlVMTCB2YWx1ZXMg KG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1ucykKK0NSRUFURSBUQUJMRSBm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBU RVhULAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKK0NSRUFURSBTVEFU SVNUSUNTIHMzIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBj LCBkKSBXSVRIIChkZXBlbmRlbmNpZXMpOworSU5TRVJUIElOVE8gZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUCisgICAgICAgICBtb2Qo aSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9kKGksIDIwMCkgPSAw IFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwKKyAgICAgICAgIG1v ZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMzAwKSA9 IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQpCisgICAgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVw c19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVw cykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn ZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2Vu YWJsZWQgfCBkZXBzX2J1aWx0IHwgICAgIHBnX212X3N0YXRzX2RlcGVuZGVu Y2llc19zaG93ICAgICAgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgICB8IHQgICAgICAgICAgfCAyID0+IDEsIDMgPT4gMSwgMyA9 PiAyLCA0ID0+IDEsIDQgPT4gMgorKDEgcm93KQorCitEUk9QIFRBQkxFIGZ1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggYmVjMDMxNi4uNGYyZmZiOCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0x MTAsMyArMTEwLDYgQEAgdGVzdDogZXZlbnRfdHJpZ2dlcgogCiAjIHJ1biBz dGF0cyBieSBpdHNlbGYgYmVjYXVzZSBpdHMgZGVsYXkgbWF5IGJlIGluc3Vm ZmljaWVudCB1bmRlciBoZWF2eSBsb2FkCiB0ZXN0OiBzdGF0cworCisjIHJ1 biB0ZXN0cyBvZiBtdWx0aXZhcmlhdGUgc3RhdHMKK3Rlc3Q6IG12X2RlcGVu ZGVuY2llcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQpp bmRleCA3ZTliMzE5Li4wOTdhMDRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NlcmlhbF9zY2hlZHVsZQpAQCAtMTYyLDMgKzE2Miw0IEBAIHRlc3Q6IHdp dGgKIHRlc3Q6IHhtbAogdGVzdDogZXZlbnRfdHJpZ2dlcgogdGVzdDogc3Rh dHMKK3Rlc3Q6IG12X2RlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL212X2RlcGVuZGVuY2llcy5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkZWE0ZAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2RlcGVuZGVuY2llcy5z cWwKQEAgLTAsMCArMSwxNTAgQEAKKy0tIGRhdGEgdHlwZSBwYXNzZWQgYnkg dmFsdWUKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAo CisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAgYyBJTlQKKyk7CisKKy0t IHVua25vd24gY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcyAodW5rbm93bl9jb2x1bW4pIFdJVEggKGRl cGVuZGVuY2llcyk7CisKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFU SVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhKSBXSVRI IChkZXBlbmRlbmNpZXMpOworCistLSBzaW5nbGUgY29sdW1uLCBkdXBsaWNh dGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyAoYSxhKSBXSVRIIChkZXBlbmRlbmNpZXMpOworCistLSB0d28g Y29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNUSUNTIHMx IE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBhLCBiKSBXSVRIIChk ZXBlbmRlbmNpZXMpOworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNU QVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsIGIs IGMpIFdJVEggKHVua25vd25fb3B0aW9uKTsKKworLS0gY29ycmVjdCBjb21t YW5kCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzKTsKKworLS0g cmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5T RVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNU IG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVO Q0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBh ID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVO Q0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBh ID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisg ICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXM7CisKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQs IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9u YWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSBjaGVjayBleHBsYWluIChleHBl Y3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQor SU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VM RUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIGZkZXBzX2lk eCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYik7CitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyBXSEVSRSBhID0gMTAgQU5EIGIgPSA1OworCitE Uk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSB2YXJs ZW5hIHR5cGUgKHRleHQpCitDUkVBVEUgVEFCTEUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgKAorICAgIGEgVEVYVCwKKyAgICBiIFRFWFQsCisgICAgYyBU RVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBzMiBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzKTsK KworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz KQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAg U0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9 PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9 PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzCisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXM7CisKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNf YnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAg ICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIGZk ZXBzX2lkeCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYik7CitB TkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVw c19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVS RSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2Ns YXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSBhID0gJzEwJyBBTkQgYiA9 ICc1JzsKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsK KworLS0gTlVMTCB2YWx1ZXMgKG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1u cykKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisg ICAgYSBJTlQsCisgICAgYiBURVhULAorICAgIGMgSU5ULAorICAgIGQgVEVY VAorKTsKKworQ1JFQVRFIFNUQVRJU1RJQ1MgczMgT04gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMgKGEsIGIsIGMsIGQpIFdJVEggKGRlcGVuZGVuY2llcyk7 CisKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAg IFNFTEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAoQ0FT RSBXSEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSwy MDApIEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAgIChD QVNFIFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChp LDYwMCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwor CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0 c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVu Y2llcyc6OnJlZ2NsYXNzOworCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOwotLSAKMi4xLjAKCg== --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0004-multivariate-MCV-lists.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0004-multivariate-MCV-lists.patch"; charset="UTF-8" RnJvbSAxMWUwOGY3YTBmZmMxODZkYmMyMzYwNWQ1MjJjMjc4ZTliMzkzZWE1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE2 OjUyOjE1ICswMjAwClN1YmplY3Q6IFtQQVRDSCA0LzldIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdHMKCi0gZXh0ZW5kcyB0aGUgcGdfbXZfc3RhdGlzdGljIGNh dGFsb2cgKGFkZCAnbWN2JyBmaWVsZHMpCi0gYnVpbGRpbmcgdGhlIE1DViBs aXN0cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxl IHBsYW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRl c3RzLCBtb3N0bHkgZXF1YWwgdG8gcmVncmVzc2lvbiB0ZXN0cyBmb3IKZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfc3RhdGlzdGljcy5zZ21sIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgfCAgICA0ICstCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgfCAgIDQ1ICstCiBz cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICB8 ICA4MjkgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICB8ICAgIDIgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLm1jdiAgICB8ICAxMzcg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMg IHwgICA4OSArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9u LmMgICAgICB8ICAxMDQgKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5oICAgICAgfCAgIDExICstCiBzcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL21jdi5jICAgICAgICAgfCAxMDk0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAg ICAgICAgICAgICB8ICAgMjUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf bXZfc3RhdGlzdGljLmggICB8ICAgMTggKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUv bm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5j bHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgfCAgIDY5ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQgICAgfCAgMjA3 ICsrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQg ICAgIHwgICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9tdl9tY3Yuc3FsICAgICAgICAgfCAgMTc4ICsrKysrCiAyMiBmaWxlcyBj aGFuZ2VkLCAyNzc2IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLm1jdgogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvbWN2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCmlu ZGV4IGE4NmVhZTMuLjE5M2U0YjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKQEAgLTEzMiw2ICsxMzIs MjQgQEAgQ1JFQVRFIFNUQVRJU1RJQ1MgWyBJRiBOT1QgRVhJU1RTIF0gPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3RpY3NfbmEKICAg ICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+bWF4X21jdl9pdGVtczwv PiAoPHR5cGU+aW50ZWdlcjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIE1DViBsaXN0 IGl0ZW1zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PjxsaXRlcmFsPm1jdjwvPiAoPHR5cGU+Ym9vbGVhbjwvPik8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgTUNW IGxpc3QgZm9yIHRoZSBzdGF0aXN0aWNzLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8L3Zhcmlh YmxlbGlzdD4KIAogICA8L3JlZnNlY3QyPgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGI4YTI2NGUuLjJkNTcw ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3Zp ZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKQEAgLTE2NSw3ICsxNjUsOSBAQCBDUkVBVEUgVklFVyBwZ19tdl9z dGF0cyBBUwogICAgICAgICBTLnN0YW5hbWUgQVMgc3RhbmFtZSwKICAgICAg ICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCiAgICAgICAgIGxlbmd0aChTLnN0 YWRlcHMpIGFzIGRlcHNieXRlcywKLSAgICAgICAgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBhcyBkZXBzaW5mbworICAgICAg ICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhTLnN0YWRlcHMpIGFz IGRlcHNpbmZvLAorICAgICAgICBsZW5ndGgoUy5zdGFtY3YpIEFTIG1jdmJ5 dGVzLAorICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oUy5zdGFt Y3YpIEFTIG1jdmluZm8KICAgICBGUk9NIChwZ19tdl9zdGF0aXN0aWMgUyBK T0lOIHBnX2NsYXNzIEMgT04gKEMub2lkID0gUy5zdGFyZWxpZCkpCiAgICAg ICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgTiBPTiAoTi5vaWQgPSBDLnJl bG5hbWVzcGFjZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3N0YXRzY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNj bWRzLmMKaW5kZXggMWI4OWJiZS4uYjA0YzU4MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKQEAgLTcwLDcgKzcwLDEzIEBAIENy ZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCU9iamVj dEFkZHJlc3MgcGFyZW50b2JqZWN0LCBjaGlsZG9iamVjdDsKIAogCS8qIGJ5 IGRlZmF1bHQgYnVpbGQgbm90aGluZyAqLwotCWJvb2wgCWJ1aWxkX2RlcGVu ZGVuY2llcyA9IGZhbHNlOworCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2llcyA9 IGZhbHNlLAorCQkJYnVpbGRfbWN2ID0gZmFsc2U7CisKKwlpbnQzMiAJbWF4 X21jdl9pdGVtcyA9IC0xOworCisJLyogb3B0aW9ucyByZXF1aXJlZCBiZWNh dXNlIG9mIG90aGVyIG9wdGlvbnMgKi8KKwlib29sCXJlcXVpcmVfbWN2ID0g ZmFsc2U7CiAKIAlBc3NlcnQoSXNBKHN0bXQsIENyZWF0ZVN0YXRzU3RtdCkp OwogCkBAIC0xNDYsNiArMTUyLDI5IEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3Jl YXRlU3RhdHNTdG10ICpzdG10KQogCiAJCWlmIChzdHJjbXAob3B0LT5kZWZu YW1lLCAiZGVwZW5kZW5jaWVzIikgPT0gMCkKIAkJCWJ1aWxkX2RlcGVuZGVu Y2llcyA9IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJZWxzZSBpZiAoc3RyY21w KG9wdC0+ZGVmbmFtZSwgIm1jdiIpID09IDApCisJCQlidWlsZF9tY3YgPSBk ZWZHZXRCb29sZWFuKG9wdCk7CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJtYXhfbWN2X2l0ZW1zIikgPT0gMCkKKwkJeworCQkJbWF4X21j dl9pdGVtcyA9IGRlZkdldEludDMyKG9wdCk7CisKKwkJCS8qIHRoaXMgb3B0 aW9uIHJlcXVpcmVzICdtY3YnIHRvIGJlIGVuYWJsZWQgKi8KKwkJCXJlcXVp cmVfbWN2ID0gdHJ1ZTsKKworCQkJLyogc2FuaXR5IGNoZWNrICovCisJCQlp ZiAobWF4X21jdl9pdGVtcyA8IE1WU1RBVF9NQ1ZMSVNUX01JTl9JVEVNUykK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygibWF4IG51bWJlciBvZiBN Q1YgaXRlbXMgbXVzdCBiZSBhdCBsZWFzdCAlZCIsCisJCQkJCQkJCU1WU1RB VF9NQ1ZMSVNUX01JTl9JVEVNUykpKTsKKworCQkJZWxzZSBpZiAobWF4X21j dl9pdGVtcyA+IE1WU1RBVF9NQ1ZMSVNUX01BWF9JVEVNUykKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAorCQkJCQkJIGVycm1zZygibWF4IG51bWJlciBvZiBNQ1YgaXRlbXMg aXMgJWQiLAorCQkJCQkJCQlNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMpKSk7 CisKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0xNTQsMTAgKzE4Mywx NiBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkK IAl9CiAKIAkvKiBjaGVjayB0aGF0IGF0IGxlYXN0IHNvbWUgc3RhdGlzdGlj cyB3ZXJlIHJlcXVlc3RlZCAqLwotCWlmICghIGJ1aWxkX2RlcGVuZGVuY2ll cykKKwlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVzIHx8IGJ1aWxkX21jdikp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlwZSAo ZGVwZW5kZW5jaWVzLCBtY3YpIHdhcyByZXF1ZXN0ZWQiKSkpOworCisJLyog bm93IGRvIHNvbWUgY2hlY2tpbmcgb2YgdGhlIG9wdGlvbnMgKi8KKwlpZiAo cmVxdWlyZV9tY3YgJiYgKCEgYnVpbGRfbWN2KSkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJ IGVycm1zZygibm8gc3RhdGlzdGljcyB0eXBlIChkZXBlbmRlbmNpZXMpIHdh cyByZXF1ZXN0ZWQiKSkpOworCQkJCSBlcnJtc2coIm9wdGlvbiAnbWN2JyBp cyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpIikpKTsKIAogCS8qIHNv cnQgdGhlIGF0dG51bXMgYW5kIGJ1aWxkIGludDJ2ZWN0b3IgKi8KIAlxc29y dChhdHRudW1zLCBudW1jb2xzLCBzaXplb2YoaW50MTYpLCBjb21wYXJlX2lu dDE2KTsKQEAgLTE3OCw4ICsyMTMsMTIgQEAgQ3JlYXRlU3RhdGlzdGljcyhD cmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJdmFsdWVzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWtleXMgLTFdID0gUG9pbnRlckdldERhdHVtKHN0YWtleXMp OwogCiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfZW5hYmxl ZCAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfZGVwZW5kZW5jaWVzKTsKKwl2 YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQgIC0xXSA9 IEJvb2xHZXREYXR1bShidWlsZF9tY3YpOworCisJdmFsdWVzW0FudW1fcGdf bXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMgICAgLTFdID0gSW50MzJHZXRE YXR1bShtYXhfbWN2X2l0ZW1zKTsKIAogCW51bGxzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CisJbnVsbHNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhbWN2ICAgLTFdID0gdHJ1ZTsKIAogCS8qIGluc2Vy dCB0aGUgdHVwbGUgaW50byBwZ19tdl9zdGF0aXN0aWMgKi8KIAltdnN0YXRy ZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4 IDA3MjA2ZDcuLjMzM2UyNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYwpAQCAtMjE2Miw5ICsyMTYyLDExIEBAIF9vdXRNVlN0YXRpc3RpY0lu Zm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1WU3RhdGlzdGljSW5mbyAqbm9k ZSkKIAogCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCVdSSVRFX0JPT0xf RklFTEQoZGVwc19lbmFibGVkKTsKKwlXUklURV9CT09MX0ZJRUxEKG1jdl9l bmFibGVkKTsKIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICov CiAJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2J1aWx0KTsKKwlXUklURV9CT09M X0ZJRUxEKG1jdl9idWlsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4 IDgwNzA4ZmUuLjk3N2Y4OGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2NsYXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2NsYXVzZXNlbC5jCkBAIC0xNSw2ICsxNSw3IEBACiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9zeXNh dHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMu aCIKQEAgLTQ3LDIzICs0OCw1MSBAQCBzdGF0aWMgdm9pZCBhZGRSYW5nZUNs YXVzZShSYW5nZVF1ZXJ5Q2xhdXNlICoqcnFsaXN0LCBOb2RlICpjbGF1c2Us CiAJCQkgICBib29sIHZhcm9ubGVmdCwgYm9vbCBpc0xUc2VsLCBTZWxlY3Rp dml0eSBzMik7CiAKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0ZERVAJCTB4 MDEKKyNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX01DVgkJMHgwMgogCi1zdGF0 aWMgYm9vbCBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2Us IEluZGV4IHJlbGlkLCBBdHRyTnVtYmVyICphdHRudW0pOworc3RhdGljIGJv b2wgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoTm9kZSAqY2xhdXNlLCBJbmRl eCByZWxpZCwgQml0bWFwc2V0ICoqYXR0bnVtcywKKwkJCQkJCQkgaW50IHR5 cGUpOwogCi1zdGF0aWMgQml0bWFwc2V0ICAqY29sbGVjdF9tdl9hdHRudW1z KExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKK3N0YXRpYyBCaXRtYXBz ZXQgICpjb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXgg cmVsaWQsIGludCB0eXBlKTsKIAotc3RhdGljIGludCBjb3VudF9tdl9hdHRu dW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKK3N0YXRpYyBpbnQg Y291bnRfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCwg aW50IHR5cGUpOwogCiBzdGF0aWMgaW50IGNvdW50X3Zhcm5vcyhMaXN0ICpj bGF1c2VzLCBJbmRleCAqcmVsaWQpOwogCiBzdGF0aWMgTGlzdCAqY2xhdXNl bGlzdF9hcHBseV9kZXBlbmRlbmNpZXMoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCiAJCQkJCQkJCQlJbmRleCByZWxpZCwgTGlzdCAqc3Rh dHMpOwogCitzdGF0aWMgTVZTdGF0aXN0aWNJbmZvICpjaG9vc2VfbXZfc3Rh dGlzdGljcyhMaXN0ICptdnN0YXRzLCBCaXRtYXBzZXQgKmF0dG51bXMpOwor CitzdGF0aWMgTGlzdCAqY2xhdXNlbGlzdF9tdl9zcGxpdChQbGFubmVySW5m byAqcm9vdCwgSW5kZXggcmVsaWQsCisJCQkJCQkJCSBMaXN0ICpjbGF1c2Vz LCBMaXN0ICoqbXZjbGF1c2VzLAorCQkJCQkJCQkgTVZTdGF0aXN0aWNJbmZv ICptdnN0YXRzLCBpbnQgdHlwZXMpOworCitzdGF0aWMgU2VsZWN0aXZpdHkg Y2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZz dGF0cyk7CisKK3N0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212X3Nl bGVjdGl2aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJ CQlMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCisJ CQkJCQkJCQlib29sICpmdWxsbWF0Y2gsIFNlbGVjdGl2aXR5ICpsb3dzZWwp OworCitzdGF0aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQ bGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCWlu dDJ2ZWN0b3IgKnN0YWtleXMsIE1DVkxpc3QgbWN2bGlzdCwKKwkJCQkJCQkJ CWludCBubWF0Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkJCQlTZWxl Y3Rpdml0eSAqbG93c2VsLCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkJCQli b29sIGlzX29yKTsKKwogc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0 YXRzLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwogCiAKKy8qIHVzZWQg Zm9yIG1lcmdpbmcgYml0bWFwcyAtIEFORCAobWluKSwgT1IgKG1heCkgKi8K KyNkZWZpbmUgTUFYKHgsIHkpICgoKHgpID4gKHkpKSA/ICh4KSA6ICh5KSkK KyNkZWZpbmUgTUlOKHgsIHkpICgoKHgpIDwgKHkpKSA/ICh4KSA6ICh5KSkK KworI2RlZmluZSBVUERBVEVfUkVTVUxUKG0scixpc29yKQlcCisJKG0pID0g KGlzb3IpID8gKE1BWChtLHIpKSA6IChNSU4obSxyKSkKKwogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICAqCQlST1VUSU5FUyBUTyBDT01Q VVRFIFNFTEVDVElWSVRJRVMKICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwpAQCAtODksMTEgKzExOCwxMyBAQCBzdGF0aWMgTGlzdCAqIGZp bmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKTsKICAq IHRvIHZlcmlmeSB0aGF0IHN1aXRhYmxlIG11bHRpdmFyaWF0ZSBzdGF0aXN0 aWNzIGV4aXN0LgogICoKICAqIElmIHdlIGlkZW50aWZ5IHN1Y2ggbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3MgYXBwbHksIHdlIHRyeSB0byBhcHBseSB0aGVt LgotICogQ3VycmVudGx5IHdlIG9ubHkgaGF2ZSAoc29mdCkgZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMsIHNvIHdlIHRyeSB0byByZWR1Y2UKLSAqIHRoZSBs aXN0IG9mIGNsYXVzZXMuCiAgKgotICogVGhlbiB3ZSByZW1vdmUgdGhlIGNs YXVzZXMgZXN0aW1hdGVkIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5k IHByb2Nlc3MKLSAqIHRoZSByZXN0IG9mIHRoZSBjbGF1c2VzIHVzaW5nIHRo ZSByZWd1bGFyIHBlci1jb2x1bW4gc3RhdHMuCisgKiBGaXJzdCB3ZSB0cnkg dG8gcmVkdWNlIHRoZSBsaXN0IG9mIGNsYXVzZXMgYnkgYXBwbHlpbmcgKHNv ZnQpIGZ1bmN0aW9uYWwKKyAqIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gd2Ug dHJ5IHRvIGVzdGltYXRlIHRoZSBzZWxlY3Rpdml0eSBvZiB0aGUgcmVkdWNl ZAorICogbGlzdCBvZiBjbGF1c2VzIHVzaW5nIHRoZSBtdWx0aXZhcmlhdGUg TUNWIGxpc3QuCisgKgorICogRmluYWxseSB3ZSByZW1vdmUgdGhlIHBvcnRp b24gb2YgY2xhdXNlcyBlc3RpbWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0 YXRzLAorICogYW5kIHByb2Nlc3MgdGhlIHJlc3Qgb2YgdGhlIGNsYXVzZXMg dXNpbmcgdGhlIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0cy4KICAqCiAgKiBD dXJyZW50bHksIHRoZSBvbmx5IGV4dHJhIHNtYXJ0cyB3ZSBoYXZlIGlzIHRv IHJlY29nbml6ZSAicmFuZ2UgcXVlcmllcyIsCiAgKiBzdWNoIGFzICJ4ID4g MzQgQU5EIHggPCA0MiIuICBDbGF1c2VzIGFyZSByZWNvZ25pemVkIGFzIHBv c3NpYmxlIHJhbmdlCkBAIC0xNzAsMTIgKzIwMSw0NiBAQCBjbGF1c2VsaXN0 X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCSAqIHRoYXQgbmVl ZCB0byBiZSBlc3RpbWF0ZWQgYnkgb3RoZXIgdHlwZXMgb2Ygc3RhdHMgKE1D ViwgaGlzdG9ncmFtcyBldGMpLgogCSAqLwogCWlmIChoYXNfc3RhdHMoc3Rh dHMsIE1WX0NMQVVTRV9UWVBFX0ZERVApICYmCi0JCShjb3VudF9tdl9hdHRu dW1zKGNsYXVzZXMsIHJlbGlkKSA+PSAyKSkKKwkJKGNvdW50X212X2F0dG51 bXMoY2xhdXNlcywgcmVsaWQsIE1WX0NMQVVTRV9UWVBFX0ZERVApID49IDIp KQogCXsKIAkJY2xhdXNlcyA9IGNsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5j aWVzKHJvb3QsIGNsYXVzZXMsIHJlbGlkLCBzdGF0cyk7CiAJfQogCiAJLyoK KwkgKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBzdGF0aXN0aWNzIHdpdGggTUNW IGxpc3Qgb3IgaGlzdG9ncmFtLCBhbmQgYWxzbyB0aGUKKwkgKiBudW1iZXIg b2YgYXR0cmlidXRlcyBjb3ZlcmVkIGJ5IHRoZXNlIHR5cGVzIG9mIHN0YXRp c3RpY3MuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gc3VjaCBzdGF0cyBv ciBub3QgZW5vdWdoIGF0dHJpYnV0ZXMsIGRvbid0IHdhc3RlIHRpbWUKKwkg KiB3aXRoIHRoZSBtdWx0aXZhcmlhdGUgY29kZSBhbmQgc2ltcGx5IHNraXAg dG8gZXN0aW1hdGlvbiB1c2luZyB0aGUKKwkgKiByZWd1bGFyIHBlci1jb2x1 bW4gc3RhdHMuCisJICovCisJaWYgKGhhc19zdGF0cyhzdGF0cywgTVZfQ0xB VVNFX1RZUEVfTUNWKSAmJgorCQkoY291bnRfbXZfYXR0bnVtcyhjbGF1c2Vz LCByZWxpZCwgTVZfQ0xBVVNFX1RZUEVfTUNWKSA+PSAyKSkKKwl7CisJCS8q IGNvbGxlY3QgYXR0cmlidXRlcyBmcm9tIHRoZSBjb21wYXRpYmxlIGNvbmRp dGlvbnMgKi8KKwkJQml0bWFwc2V0ICptdmF0dG51bXMgPSBjb2xsZWN0X212 X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsIE1WX0NMQVVTRV9UWVBFX01DVik7 CisKKwkJLyogYW5kIHNlYXJjaCBmb3IgdGhlIHN0YXRpc3RpYyBjb3Zlcmlu ZyB0aGUgbW9zdCBhdHRyaWJ1dGVzICovCisJCU1WU3RhdGlzdGljSW5mbyAq bXZzdGF0ID0gY2hvb3NlX212X3N0YXRpc3RpY3Moc3RhdHMsIG12YXR0bnVt cyk7CisKKwkJaWYgKG12c3RhdCAhPSBOVUxMKQkvKiB3ZSBoYXZlIGEgbWF0 Y2hpbmcgc3RhdHMgKi8KKwkJeworCQkJLyogY2xhdXNlcyBjb21wYXRpYmxl IHdpdGggbXVsdGktdmFyaWF0ZSBzdGF0cyAqLworCQkJTGlzdAkqbXZjbGF1 c2VzID0gTklMOworCisJCQkvKiBzcGxpdCB0aGUgY2xhdXNlbGlzdCBpbnRv IHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMgKi8KKwkJCWNsYXVzZXMgPSBjbGF1 c2VsaXN0X212X3NwbGl0KHJvb3QsIHJlbGlkLCBjbGF1c2VzLCAmbXZjbGF1 c2VzLAorCQkJCQkJCQkJCSAgbXZzdGF0LCBNVl9DTEFVU0VfVFlQRV9NQ1Yp OworCisJCQkvKiB3ZSd2ZSBjaG9zZW4gdGhlIGhpc3RvZ3JhbSB0byBtYXRj aCB0aGUgY2xhdXNlcyAqLworCQkJQXNzZXJ0KG12Y2xhdXNlcyAhPSBOSUwp OworCisJCQkvKiBjb21wdXRlIHRoZSBtdWx0aXZhcmlhdGUgc3RhdHMgKi8K KwkJCXMxICo9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkocm9vdCwgbXZj bGF1c2VzLCBtdnN0YXQpOworCQl9CisJfQorCisJLyoKIAkgKiBJbml0aWFs IHNjYW4gb3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhhdCBkb2Vzbid0IGxv b2sgbGlrZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVlcnkgY2xhdXNlIGdl dHMgbXVsdGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0ZW4uIEFueXRoaW5n IHRoYXQKIAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50byBhbiBycWxpc3Qg ZW50cnkuCkBAIC04MzIsNiArODk3LDY5IEBAIGNsYXVzZV9zZWxlY3Rpdml0 eShQbGFubmVySW5mbyAqcm9vdCwKIAlyZXR1cm4gczE7CiB9CiAKKworLyoK KyAqIGVzdGltYXRlIHNlbGVjdGl2aXR5IG9mIGNsYXVzZXMgdXNpbmcgbXVs dGl2YXJpYXRlIHN0YXRpc3RpYworICoKKyAqIFBlcmZvcm0gZXN0aW1hdGlv biBvZiB0aGUgY2xhdXNlcyB1c2luZyBhIE1DViBsaXN0LgorICoKKyAqIFRo aXMgYXNzdW1lcyBhbGwgdGhlIGNsYXVzZXMgYXJlIGNvbXBhdGlibGUgd2l0 aCB0aGUgc2VsZWN0ZWQgc3RhdGlzdGljcworICogKGUuZy4gb25seSByZWZl cmVuY2UgY29sdW1ucyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzLCB1c2Ug c3VwcG9ydGVkCisgKiBvcGVyYXRvciwgZXRjLikuCisgKgorICogVE9ETyBX ZSBtYXkgc3VwcG9ydCBzb21lIGFkZGl0aW9uYWwgY29uZGl0aW9ucywgbW9z dCBpbXBvcnRhbnRseSB0aG9zZQorICogICAgICBtYXRjaGluZyBtdWx0aXBs ZSBjb2x1bW5zIChlLmcuICJhID0gYiIgb3IgImEgPCBiIikuCisgKgorICog VE9ETyBDbGFtcCB0aGUgc2VsZWN0aXZpdHkgYnkgbWluIG9mIHRoZSBwZXIt Y2xhdXNlIHNlbGVjdGl2aXRpZXMgKGkuZS4gdGhlCisgKiAgICAgIHNlbGVj dGl2aXR5IG9mIHRoZSBtb3N0IHJlc3RyaWN0aXZlIGNsYXVzZSksIGJlY2F1 c2UgdGhhdCdzIHRoZSBtYXhpbXVtCisgKiAgICAgIHdlIGNhbiBldmVyIGdl dCBmcm9tIEFORGVkIGxpc3Qgb2YgY2xhdXNlcy4gVGhpcyBtYXkgcHJvYmFi bHkgcHJldmVudAorICogICAgICBpc3N1ZXMgd2l0aCBoaXR0aW5nIHRvbyBt YW55IGJ1Y2tldHMgYW5kIGxvdyBwcmVjaXNpb24gaGlzdG9ncmFtcy4KKyAq CisgKiBUT0RPIFdlIG1heSByZW1lbWJlciB0aGUgbG93ZXN0IGZyZXF1ZW5j eSBpbiB0aGUgTUNWIGxpc3QsIGFuZCB0aGVuIGxhdGVyIHVzZQorICogICAg ICBpdCBhcyBhIHVwcGVyIGJvdW5kYXJ5IGZvciB0aGUgc2VsZWN0aXZpdHkg KGhhZCB0aGVyZSBiZWVuIGEgbW9yZQorICogICAgICBmcmVxdWVudCBpdGVt LCBpdCdkIGJlIGluIHRoZSBNQ1YgbGlzdCkuIFRoaXMgbWlnaHQgaW1wcm92 ZSBjYXNlcyB3aXRoCisgKiAgICAgIGxvdy1kZXRhaWwgaGlzdG9ncmFtcy4K KyAqCisgKiBUT0RPIFdlIG1heSBhbHNvIGRlcml2ZSBzb21lIGFkZGl0aW9u YWwgYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGl2aXR5IGZyb20KKyAqICAg ICAgdGhlIE1DViBsaXN0LCBiZWNhdXNlCisgKgorICogICAgICAoYSkgaWYg d2UgaGF2ZSBhICJmdWxsIGVxdWFsaXR5IGNvbmRpdGlvbiIgKG9uZSBlcXVh bGl0eSBjb25kaXRpb24gb24KKyAqICAgICAgICAgIGVhY2ggY29sdW1uIG9m IHRoZSBzdGF0aXN0aWMpIGFuZCB3ZSBmb3VuZCBhIG1hdGNoIGluIHRoZSBN Q1YgbGlzdCwKKyAqICAgICAgICAgIHRoZW4gdGhpcyBpcyB0aGUgZmluYWwg c2VsZWN0aXZpdHkgKGFuZCBwcmV0dHkgYWNjdXJhdGUpLAorICoKKyAqICAg ICAgKGIpIGlmIHdlIGhhdmUgYSAiZnVsbCBlcXVhbGl0eSBjb25kaXRpb24i IGFuZCB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2gKKyAqICAgICAgICAgIGlu IHRoZSBNQ1YgbGlzdCwgdGhlbiB0aGUgc2VsZWN0aXZpdHkgaXMgYmVsb3cg dGhlIGxvd2VzdCBmcmVxdWVuY3kKKyAqICAgICAgICAgIGZvdW5kIGluIHRo ZSBNQ1YgbGlzdCwKKyAqCisgKiBUT0RPIFdoZW4gYXBwbHlpbmcgdGhlIGNs YXVzZXMgdG8gdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCwgd2UgY2FuIGRvCisg KiAgICAgIHRoYXQgZnJvbSB0aGUgbW9zdCBzZWxlY3RpdmUgY2xhdXNlcyBm aXJzdCwgYmVjYXVzZSB0aGF0J2xsCisgKiAgICAgIGVsaW1pbmF0ZSB0aGUg YnVja2V0cy9pdGVtcyBzb29uZXIgKHNvIHdlJ2xsIGJlIGFibGUgdG8gc2tp cAorICogICAgICB0aGVtIHdpdGhvdXQgaW5zcGVjdGlvbiwgd2hpY2ggaXMg bW9yZSBleHBlbnNpdmUpLiBCdXQgdGhpcworICogICAgICByZXF1aXJlcyBy ZWFsbHkga25vd2luZyB0aGUgcGVyLWNsYXVzZSBzZWxlY3Rpdml0aWVzIGlu IGFkdmFuY2UsCisgKiAgICAgIGFuZCB0aGF0J3Mgbm90IHdoYXQgd2UgZG8g bm93LgorICovCitzdGF0aWMgU2VsZWN0aXZpdHkKK2NsYXVzZWxpc3RfbXZf c2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMs IE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cykKK3sKKwlib29sIGZ1bGxtYXRj aCA9IGZhbHNlOworCisJLyoKKwkgKiBMb3dlc3QgZnJlcXVlbmN5IGluIHRo ZSBNQ1YgbGlzdCAobWF5IGJlIHVzZWQgYXMgYW4gdXBwZXIgYm91bmQKKwkg KiBmb3IgZnVsbCBlcXVhbGl0eSBjb25kaXRpb25zIHRoYXQgZGlkIG5vdCBt YXRjaCBhbnkgTUNWIGl0ZW0pLgorCSAqLworCVNlbGVjdGl2aXR5IG1jdl9s b3cgPSAwLjA7CisKKwkvKiBUT0RPIEV2YWx1YXRlIHNpbXBsZSAxRCBzZWxl Y3Rpdml0aWVzLCB1c2UgdGhlIHNtYWxsZXN0IG9uZSBhcworCSAqICAgICAg YW4gdXBwZXIgYm91bmQsIHByb2R1Y3QgYXMgbG93ZXIgYm91bmQsIGFuZCBz b3J0IHRoZQorCSAqICAgICAgY2xhdXNlcyBpbiBhc2NlbmRpbmcgb3JkZXIg Ynkgc2VsZWN0aXZpdHkgKHRvIG9wdGltaXplIHRoZQorCSAqICAgICAgTUNW L2hpc3RvZ3JhbSBldmFsdWF0aW9uKS4KKwkgKi8KKworCS8qIEV2YWx1YXRl IHRoZSBNQ1Ygc2VsZWN0aXZpdHkgKi8KKwlyZXR1cm4gY2xhdXNlbGlzdF9t dl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsIG12c3RhdHMs CisJCQkJCQkJCQkJICAgJmZ1bGxtYXRjaCwgJm1jdl9sb3cpOworfQorCiAv KgogICogUHVsbCB2YXJhdHRub3MgZnJvbSB0aGUgY2xhdXNlcywgc2ltaWxh cmx5IHRvIHB1bGxfdmFyYXR0bm9zKCkgYnV0OgogICoKQEAgLTg2OSwyOCAr OTk3LDI2IEBAIGdldF92YXJhdHRub3MoTm9kZSAqIG5vZGUsIEluZGV4IHJl bGlkKQogICogQ29sbGVjdCBhdHRyaWJ1dGVzIGZyb20gbXYtY29tcGF0aWJs ZSBjbGF1c2VzLgogICovCiBzdGF0aWMgQml0bWFwc2V0ICoKLWNvbGxlY3Rf bXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCkKK2NvbGxl Y3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCwgaW50 IHR5cGVzKQogewogCUJpdG1hcHNldCAgKmF0dG51bXMgPSBOVUxMOwogCUxp c3RDZWxsICAgKmw7CiAKIAkvKgotCSAqIFdhbGsgdGhyb3VnaCB0aGUgY2xh dXNlcyBhbmQgaWRlbnRpZnkgdGhlIG9uZXMgd2UgY2FuIGVzdGltYXRlCi0J ICogdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLCBhbmQgcmVtZW1iZXIgdGhl IHJlbGlkL2NvbHVtbnMuIFdlJ2xsCi0JICogdGhlbiBjcm9zcy1jaGVjayBp ZiB3ZSBoYXZlIHN1aXRhYmxlIHN0YXRzLCBhbmQgb25seSBpZiBuZWVkZWQK LQkgKiB3ZSdsbCBzcGxpdCB0aGUgY2xhdXNlcyBpbnRvIG11bHRpdmFyaWF0 ZSBhbmQgcmVndWxhciBsaXN0cy4KKwkgKiBXYWxrIHRocm91Z2ggdGhlIGNs YXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBlc3RpbWF0ZSB1 c2luZworCSAqIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJlbWVtYmVyIHRo ZSByZWxpZC9jb2x1bW5zLiBXZSdsbCB0aGVuCisJICogY3Jvc3MtY2hlY2sg aWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkgaWYgbmVlZGVk IHdlJ2xsIHNwbGl0CisJICogdGhlIGNsYXVzZXMgaW50byBtdWx0aXZhcmlh dGUgYW5kIHJlZ3VsYXIgbGlzdHMuCiAJICoKLQkgKiBGb3Igbm93IHdlJ3Jl IG9ubHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMgd2l0aCBu ZXN0ZWQKLQkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBhIHJhbmdlIG9yIGVx dWFsaXR5LgorCSAqIEZvciBub3cgd2UncmUgb25seSBpbnRlcmVzdGVkIGlu IFJlc3RyaWN0SW5mbyBub2RlcyB3aXRoIG5lc3RlZCBPcEV4cHIsCisJICog dXNpbmcgZWl0aGVyIGEgcmFuZ2Ugb3IgZXF1YWxpdHkuCiAJICovCiAJZm9y ZWFjaCAobCwgY2xhdXNlcykKIAl7Ci0JCUF0dHJOdW1iZXIgYXR0bnVtOwog CQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKLQkJ LyogaWdub3JlIHRoZSByZXN1bHQgZm9yIG5vdyAtIHdlIG9ubHkgbmVlZCB0 aGUgaW5mbyAqLwotCQlpZiAoY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xh dXNlLCByZWxpZCwgJmF0dG51bSkpCi0JCQlhdHRudW1zID0gYm1zX2FkZF9t ZW1iZXIoYXR0bnVtcywgYXR0bnVtKTsKKwkJLyogaWdub3JlIHRoZSByZXN1 bHQgaGVyZSAtIHdlIG9ubHkgbmVlZCB0aGUgYXR0bnVtcyAqLworCQljbGF1 c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywg dHlwZXMpOwogCX0KIAogCS8qCkBAIC05MTEsMTAgKzEwMzcsMTAgQEAgY29s bGVjdF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKQog ICogQ291bnQgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIGNsYXVzZXMg Y29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0cy4KICAqLwogc3Rh dGljIGludAotY291bnRfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRl eCByZWxpZCkKK2NvdW50X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5k ZXggcmVsaWQsIGludCB0eXBlKQogewogCWludCBjOwotCUJpdG1hcHNldCAq YXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCk7 CisJQml0bWFwc2V0ICphdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKGNs YXVzZXMsIHJlbGlkLCB0eXBlKTsKIAogCWMgPSBibXNfbnVtX21lbWJlcnMo YXR0bnVtcyk7CiAKQEAgLTk0NCw5ICsxMDcwLDE4MyBAQCBjb3VudF92YXJu b3MoTGlzdCAqY2xhdXNlcywgSW5kZXggKnJlbGlkKQogCiAJcmV0dXJuIGNu dDsKIH0KKyAKKy8qCisgKiBXZSdyZSBsb29raW5nIGZvciBzdGF0aXN0aWNz IG1hdGNoaW5nIGF0IGxlYXN0IDIgYXR0cmlidXRlcywgcmVmZXJlbmNlZCBp bgorICogY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MuIFRoZSBjdXJyZW50IHNlbGVjdGlvbgorICogY3JpdGVyaWEg aXMgdmVyeSBzaW1wbGUgLSB3ZSBjaG9vc2UgdGhlIHN0YXRpc3RpY3MgcmVm ZXJlbmNpbmcgdGhlIG1vc3QKKyAqIGF0dHJpYnV0ZXMuCisgKgorICogSWYg dGhlcmUgYXJlIG11bHRpcGxlIHN0YXRpc3RpY3MgcmVmZXJlbmNpbmcgdGhl IHNhbWUgbnVtYmVyIG9mIGNvbHVtbnMKKyAqIChmcm9tIHRoZSBjbGF1c2Vz KSwgdGhlIG9uZSB3aXRoIGxlc3Mgc291cmNlIGNvbHVtbnMgKGFzIGxpc3Rl ZCBpbiB0aGUKKyAqIEFERCBTVEFUSVNUSUNTIHdoZW4gY3JlYXRpbmcgdGhl IHN0YXRpc3RpY3MpIHdpbnMuIEVsc2UgdGhlIGZpcnN0IG9uZSB3aW5zLgor ICoKKyAqIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBjcml0ZXJpYSwgYW5kIGhh cyBzZXZlcmFsIHdlYWtuZXNzZXM6CisgKgorICogKGEpIGRvZXMgbm90IGNv bnNpZGVyIHRoZSBhY2N1cmFjeSBvZiB0aGUgc3RhdGlzdGljcworICoKKyAq ICAgICBJZiB0aGVyZSBhcmUgdHdvIGhpc3RvZ3JhbXMgYnVpbHQgb24gdGhl IHNhbWUgc2V0IG9mIGNvbHVtbnMsIGJ1dCBvbmUKKyAqICAgICBoYXMgMTAw IGJ1Y2tldHMgYW5kIHRoZSBvdGhlciBvbmUgaGFzIDEwMDAgYnVja2V0cyAo dGh1cyBsaWtlbHkKKyAqICAgICBwcm92aWRpbmcgYmV0dGVyIGVzdGltYXRl cyksIHRoaXMgaXMgbm90IGN1cnJlbnRseSBjb25zaWRlcmVkLgorICoKKyAq IChiKSBkb2VzIG5vdCBjb25zaWRlciB0aGUgdHlwZSBvZiBzdGF0aXN0aWNz CisgKgorICogICAgIElmIHRoZXJlIGFyZSB0aHJlZSBzdGF0aXN0aWNzIC0g b25lIGNvbnRhaW5pbmcganVzdCBhIE1DViBsaXN0LCBhbm90aGVyCisgKiAg ICAgb25lIHdpdGgganVzdCBhIGhpc3RvZ3JhbSBhbmQgYSB0aGlyZCBvbmUg d2l0aCBib3RoLCB3ZSB0cmVhdCB0aGVtIGVxdWFsbHkuCisgKgorICogKGMp IGRvZXMgbm90IGNvbnNpZGVyIHRoZSBudW1iZXIgb2YgY2xhdXNlcworICoK KyAqICAgICBBcyBleHBsYWluZWQsIG9ubHkgdGhlIG51bWJlciBvZiByZWZl cmVuY2VkIGF0dHJpYnV0ZXMgY291bnRzLCBzbyBpZgorICogICAgIHRoZXJl IGFyZSBtdWx0aXBsZSBjbGF1c2VzIG9uIGEgc2luZ2xlIGF0dHJpYnV0ZSwg dGhpcyBzdGlsbCBjb3VudHMgYXMKKyAqICAgICBhIHNpbmdsZSBhdHRyaWJ1 dGUuCisgKgorICogKGQpIGRvZXMgbm90IGNvbnNpZGVyIHR5cGUgb2YgY29u ZGl0aW9uCisgKgorICogICAgIFNvbWUgY2xhdXNlcyBtYXkgd29yayBiZXR0 ZXIgd2l0aCBzb21lIHN0YXRpc3RpY3MgLSBmb3IgZXhhbXBsZSBlcXVhbGl0 eQorICogICAgIGNsYXVzZXMgcHJvYmFibHkgd29yayBiZXR0ZXIgd2l0aCBN Q1YgbGlzdHMgdGhhbiB3aXRoIGhpc3RvZ3JhbXMuIEJ1dAorICogICAgIElT IFtOT1RdIE5VTEwgY29uZGl0aW9ucyBtYXkgb2Z0ZW4gd29yayBiZXR0ZXIg d2l0aCBoaXN0b2dyYW1zICh0aGFua3MKKyAqICAgICB0byBOVUxMLWJ1Y2tl dHMpLgorICoKKyAqIFNvIGZvciBleGFtcGxlIHdpdGggZml2ZSBXSEVSRSBj b25kaXRpb25zCisgKgorICogICAgIFdIRVJFIChhID0gMSkgQU5EIChiID0g MSkgQU5EIChjID0gMSkgQU5EIChkID0gMSkgQU5EIChlID0gMSkKKyAqCisg KiBhbmQgc3RhdGlzdGljcyBvbiAoYSxiKSwgKGEsYixlKSBhbmQgKGEsYixj LGQpLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSBzZWxlY3RlZAorICogYXMgaXQg cmVmZXJlbmNlcyB0aGUgbW9zdCBjb2x1bW5zLgorICoKKyAqIE9uY2Ugd2Ug aGF2ZSBzZWxlY3RlZCB0aGUgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MsIHdl IHNwbGl0IHRoZSBsaXN0IG9mCisgKiBjbGF1c2VzIGludG8gdHdvIHBhcnRz IC0gY29uZGl0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHNl bGVjdGVkCisgKiBzdGF0cywgYW5kIGNvbmRpdGlvbnMgYXJlIGVzdGltYXRl ZCB1c2luZyBzaW1wbGUgc3RhdGlzdGljcy4KKyAqCisgKiBGcm9tIHRoZSBl eGFtcGxlIGFib3ZlLCBjb25kaXRpb25zCisgKgorICogICAgIChhID0gMSkg QU5EIChiID0gMSkgQU5EIChjID0gMSkgQU5EIChkID0gMSkKKyAqCisgKiB3 aWxsIGJlIGVzdGltYXRlZCB1c2luZyB0aGUgbXVsdGl2YXJpYXRlIHN0YXRp c3RpY3MgKGEsYixjLGQpIHdoaWxlIHRoZSBsYXN0CisgKiBjb25kaXRpb24g KGUgPSAxKSB3aWxsIGdldCBlc3RpbWF0ZWQgdXNpbmcgdGhlIHJlZ3VsYXIg b25lcy4KKyAqCisgKiBUaGVyZSBhcmUgdmFyaW91cyBhbHRlcm5hdGl2ZSBz ZWxlY3Rpb24gY3JpdGVyaWEgKGUuZy4gY291bnRpbmcgY29uZGl0aW9ucwor ICogaW5zdGVhZCBvZiBqdXN0IHJlZmVyZW5jZWQgYXR0cmlidXRlcyksIGJ1 dCBldmVudHVhbGx5IHRoZSBiZXN0IG9wdGlvbiBzaG91bGQKKyAqIGJlIHRv IGNvbWJpbmUgbXVsdGlwbGUgc3RhdGlzdGljcy4gQnV0IHRoYXQncyBtdWNo IGhhcmRlciB0byBkbyBjb3JyZWN0bHkuCisgKgorICogVE9ETyBTZWxlY3Qg bXVsdGlwbGUgc3RhdGlzdGljcyBhbmQgY29tYmluZSB0aGVtIHdoZW4gY29t cHV0aW5nIHRoZSBlc3RpbWF0ZS4KKyAqCisgKiBUT0RPIFRoaXMgd2lsbCBw cm9iYWJseSBoYXZlIHRvIGNvbnNpZGVyIGNvbXBhdGliaWxpdHkgb2YgY2xh dXNlcywgYmVjYXVzZQorICogICAgICAnZGVwZW5kZW5jaWVzJyB3aWxsIHBy b2JhYmx5IHdvcmsgb25seSB3aXRoIGVxdWFsaXR5IGNsYXVzZXMuCisgKi8K K3N0YXRpYyBNVlN0YXRpc3RpY0luZm8gKgorY2hvb3NlX212X3N0YXRpc3Rp Y3MoTGlzdCAqc3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcykKK3sKKwlpbnQg aTsKKwlMaXN0Q2VsbCAgICpsYzsKKworCU1WU3RhdGlzdGljSW5mbyAqY2hv aWNlID0gTlVMTDsKKworCWludCBjdXJyZW50X21hdGNoZXMgPSAxOwkJCQkJ CS8qIGdvYWwgIzE6IG1heGltaXplICovCisJaW50IGN1cnJlbnRfZGltcyA9 IChNVlNUQVRTX01BWF9ESU1FTlNJT05TKzEpOwkvKiBnb2FsICMyOiBtaW5p bWl6ZSAqLworCisJLyoKKwkgKiBXYWxrIHRocm91Z2ggdGhlIHN0YXRpc3Rp Y3MgKHNpbXBsZSBhcnJheSB3aXRoIG5tdnN0YXRzIGVsZW1lbnRzKSBhbmQg Zm9yCisJICogZWFjaCBvbmUgY291bnQgdGhlIHJlZmVyZW5jZWQgYXR0cmli dXRlcyAoZW5jb2RlZCBpbiB0aGUgJ2F0dG51bXMnIGJpdG1hcCkuCisJICov CisJZm9yZWFjaCAobGMsIHN0YXRzKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZv ICppbmZvID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChsYyk7CisKKwkJ LyogY29sdW1ucyBtYXRjaGluZyB0aGlzIHN0YXRpc3RpY3MgKi8KKwkJaW50 IG1hdGNoZXMgPSAwOworCisJCWludDJ2ZWN0b3IgKiBhdHRycyA9IGluZm8t PnN0YWtleXM7CisJCWludAludW1hdHRycyA9IGF0dHJzLT5kaW0xOworCisJ CS8qIHNraXAgZGVwZW5kZW5jaWVzLW9ubHkgc3RhdHMgKi8KKwkJaWYgKCEg aW5mby0+bWN2X2J1aWx0KQorCQkJY29udGludWU7CisKKwkJLyogY291bnQg Y29sdW1ucyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0gKi8KKwkJZm9yIChp ID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJCQlpZiAoYm1zX2lzX21lbWJl cihhdHRycy0+dmFsdWVzW2ldLCBhdHRudW1zKSkKKwkJCQltYXRjaGVzKys7 CisKKwkJLyoKKwkJICogVXNlIHRoaXMgc3RhdGlzdGljcyB3aGVuIGl0IGlt cHJvdmVzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvcgorCQkgKiB3aGVuIGl0 IG1hdGNoZXMgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYnV0IGlz IHNtYWxsZXIuCisJCSAqLworCQlpZiAoKG1hdGNoZXMgPiBjdXJyZW50X21h dGNoZXMpIHx8CisJCQkoKG1hdGNoZXMgPT0gY3VycmVudF9tYXRjaGVzKSAm JiAoY3VycmVudF9kaW1zID4gbnVtYXR0cnMpKSkKKwkJeworCQkJY2hvaWNl ID0gaW5mbzsKKwkJCWN1cnJlbnRfbWF0Y2hlcyA9IG1hdGNoZXM7CisJCQlj dXJyZW50X2RpbXMgPSBudW1hdHRyczsKKwkJfQorCX0KKworCXJldHVybiBj aG9pY2U7Cit9CisKKworLyoKKyAqIFRoaXMgc3BsaXRzIHRoZSBjbGF1c2Vz IGxpc3QgaW50byB0d28gcGFydHMgLSBvbmUgY29udGFpbmluZyBjbGF1c2Vz IHRoYXQKKyAqIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBjaG9zZW4g c3RhdGlzdGljcywgYW5kIHRoZSByZW1haW5pbmcgY2xhdXNlcworICogKGVp dGhlciBub24tbXZjb21wYXRpYmxlLCBvciBub3QgcmVsYXRlZCB0byB0aGUg aGlzdG9ncmFtKS4KKyAqLworc3RhdGljIExpc3QgKgorY2xhdXNlbGlzdF9t dl9zcGxpdChQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQsCisJCQkJ CUxpc3QgKmNsYXVzZXMsIExpc3QgKiptdmNsYXVzZXMsCisJCQkJCU1WU3Rh dGlzdGljSW5mbyAqbXZzdGF0cywgaW50IHR5cGVzKQoreworCWludCBpOwor CUxpc3RDZWxsICpsOworCUxpc3QJICpub25fbXZjbGF1c2VzID0gTklMOwor CisJLyogRklYTUUgaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGdldCBpbmZv IG9uIGludDJ2ZWN0b3I/ICovCisJaW50MnZlY3RvciAqIGF0dHJzID0gbXZz dGF0cy0+c3Rha2V5czsKKwlpbnQJbnVtYXR0cnMgPSBtdnN0YXRzLT5zdGFr ZXlzLT5kaW0xOworCisJQml0bWFwc2V0ICptdmF0dG51bXMgPSBOVUxMOwor CisJLyogYnVpbGQgYml0bWFwIG9mIGF0dHJpYnV0ZXMsIHNvIHdlIGNhbiBk byBibXNfaXNfc3Vic2V0IGxhdGVyICovCisJZm9yIChpID0gMDsgaSA8IG51 bWF0dHJzOyBpKyspCisJCW12YXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKG12 YXR0bnVtcywgYXR0cnMtPnZhbHVlc1tpXSk7CisKKwkvKiBlcmFzZSB0aGUg bGlzdCBvZiBtdi1jb21wYXRpYmxlIGNsYXVzZXMgKi8KKwkqbXZjbGF1c2Vz ID0gTklMOworCisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwl7CisJCWJvb2wJ CW1hdGNoID0gZmFsc2U7CS8qIGJ5IGRlZmF1bHQgbm90IG12LWNvbXBhdGli bGUgKi8KKwkJQml0bWFwc2V0CSphdHRudW1zID0gTlVMTDsKKwkJTm9kZQkg ICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCWlmIChjbGF1 c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywg dHlwZXMpKQorCQl7CisJCQkvKiBhcmUgYWxsIHRoZSBhdHRyaWJ1dGVzIHBh cnQgb2YgdGhlIHNlbGVjdGVkIHN0YXRzPyAqLworCQkJaWYgKGJtc19pc19z dWJzZXQoYXR0bnVtcywgbXZhdHRudW1zKSkKKwkJCQltYXRjaCA9IHRydWU7 CisJCX0KKworCQkvKgorCQkgKiBUaGUgY2xhdXNlIG1hdGNoZXMgdGhlIHNl bGVjdGVkIHN0YXRzLCBzbyBwdXQgaXQgdG8gdGhlIGxpc3Qgb2YKKwkJICog bXYtY29tcGF0aWJsZSBjbGF1c2VzLiBPdGhlcndpc2UsIGtlZXAgaXQgaW4g dGhlIGxpc3Qgb2YgJ3JlZ3VsYXInCisJCSAqIGNsYXVzZXMgKHRoYXQgbWF5 IGJlIHNlbGVjdGVkIGxhdGVyKS4KKwkJICovCisJCWlmIChtYXRjaCkKKwkJ CSptdmNsYXVzZXMgPSBsYXBwZW5kKCptdmNsYXVzZXMsIGNsYXVzZSk7CisJ CWVsc2UKKwkJCW5vbl9tdmNsYXVzZXMgPSBsYXBwZW5kKG5vbl9tdmNsYXVz ZXMsIGNsYXVzZSk7CisJfQorCisJLyoKKwkgKiBQZXJmb3JtIHJlZ3VsYXIg ZXN0aW1hdGlvbiB1c2luZyB0aGUgY2xhdXNlcyBpbmNvbXBhdGlibGUgd2l0 aCB0aGUgY2hvc2VuCisJICogaGlzdG9ncmFtIChvciBNViBzdGF0cyBpbiBn ZW5lcmFsKS4KKwkgKi8KKwlyZXR1cm4gbm9uX212Y2xhdXNlczsKKworfQog CiB0eXBlZGVmIHN0cnVjdAogeworCWludAkJCXR5cGVzOwkJLyogdHlwZXMg b2Ygc3RhdGlzdGljcyA/ICovCiAJSW5kZXgJCXZhcm5vOwkJLyogcmVsaWQg d2UncmUgaW50ZXJlc3RlZCBpbiAqLwogCUJpdG1hcHNldCAgKnZhcmF0dG5v czsJLyogYXR0bnVtcyByZWZlcmVuY2VkIGJ5IHRoZSBjbGF1c2VzICovCiB9 IG12X2NvbXBhdGlibGVfY29udGV4dDsKQEAgLTk2NCwyMyArMTI2NCw2NiBA QCBtdl9jb21wYXRpYmxlX3dhbGtlcihOb2RlICpub2RlLCBtdl9jb21wYXRp YmxlX2NvbnRleHQgKmNvbnRleHQpCiB7CiAJaWYgKG5vZGUgPT0gTlVMTCkK IAkJcmV0dXJuIGZhbHNlOwotIAorCiAJaWYgKElzQShub2RlLCBSZXN0cmlj dEluZm8pKQogIAl7CiAJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJp Y3RJbmZvICopIG5vZGU7Ci0gCisKICAJCS8qIFBzZXVkb2NvbnN0YW50cyBh cmUgbm90IHJlYWxseSBpbnRlcmVzdGluZyBoZXJlLiAqLwogIAkJaWYgKHJp bmZvLT5wc2V1ZG9jb25zdGFudCkKIAkJCXJldHVybiB0cnVlOwotIAorCiAJ CS8qIGNsYXVzZXMgcmVmZXJlbmNpbmcgbXVsdGlwbGUgdmFybm9zIGFyZSBp bmNvbXBhdGlibGUgKi8KIAkJaWYgKGJtc19tZW1iZXJzaGlwKHJpbmZvLT5j bGF1c2VfcmVsaWRzKSAhPSBCTVNfU0lOR0xFVE9OKQogCQkJcmV0dXJuIHRy dWU7Ci0gCisKIAkJLyogY2hlY2sgdGhlIGNsYXVzZSBpbnNpZGUgdGhlIFJl c3RyaWN0SW5mbyAqLwogCQlyZXR1cm4gbXZfY29tcGF0aWJsZV93YWxrZXIo KE5vZGUqKXJpbmZvLT5jbGF1c2UsICh2b2lkICopIGNvbnRleHQpOwogIAl9 CiAKKwlpZiAob3JfY2xhdXNlKG5vZGUpIHx8IGFuZF9jbGF1c2Uobm9kZSkg fHwgbm90X2NsYXVzZShub2RlKSkKKyAJeworCQkvKgorCQkgKiBBTkQvT1Iv Tk9ULWNsYXVzZXMgYXJlIHN1cHBvcnRlZCBpZiBhbGwgc3ViLWNsYXVzZXMg YXJlIHN1cHBvcnRlZAorCQkgKgorCQkgKiBUT0RPIFdlIG1pZ2h0IHN1cHBv cnQgbWl4ZWQgY2FzZSwgd2hlcmUgc29tZSBvZiB0aGUgY2xhdXNlcyBhcmUK KwkJICogICAgICBzdXBwb3J0ZWQgYW5kIHNvbWUgYXJlIG5vdCwgYW5kIHRy ZWF0IGFsbCBzdXBwb3J0ZWQgc3ViY2xhdXNlcworCQkgKiAgICAgIGFzIGEg c2luZ2xlIGNsYXVzZSwgY29tcHV0ZSBpdCdzIHNlbGVjdGl2aXR5IHVzaW5n IG12IHN0YXRzLAorCQkgKiAgICAgIGFuZCBjb21wdXRlIHRoZSB0b3RhbCBz ZWxlY3Rpdml0eSB1c2luZyB0aGUgY3VycmVudCBhbGdvcml0aG0uCisJCSAq CisJCSAqIFRPRE8gRm9yIFJlc3RyaWN0SW5mbyBhYm92ZSBhbiBPUi1jbGF1 c2UsIHdlIG1pZ2h0IHVzZSB0aGUgb3JjbGF1c2UKKwkJICogICAgICB3aXRo IG5lc3RlZCBSZXN0cmljdEluZm8gLSB3ZSB3b24ndCBoYXZlIHRvIGNhbGwg cHVsbF92YXJub3MoKQorCQkgKiAgICAgIGZvciBlYWNoIGNsYXVzZSwgc2F2 aW5nIHRpbWUuCisJCSAqCisJCSAqIFRPRE8gUGVyaGFwcyB0aGlzIG5lZWRz IGEgYml0IG1vcmUgdGhvdWdodCBmb3IgZnVuY3Rpb25hbAorCQkgKiAgICAg IGRlcGVuZGVuY2llcz8gVGhvc2UgZG9uJ3QgcXVpdGUgd29yayBmb3IgTk9U IGNhc2VzLgorCQkgKi8KKwkJQm9vbEV4cHIgICAqZXhwciA9IChCb29sRXhw ciAqKSBub2RlOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlmb3JlYWNoIChs YywgZXhwci0+YXJncykKKwkJeworCQkJaWYgKG12X2NvbXBhdGlibGVfd2Fs a2VyKChOb2RlICopIGxmaXJzdChsYyksIGNvbnRleHQpKQorCQkJCXJldHVy biB0cnVlOworCQl9CisKKwkJcmV0dXJuIGZhbHNlOworIAl9CisKKwlpZiAo SXNBKG5vZGUsIE51bGxUZXN0KSkKKyAJeworCQlOdWxsVGVzdCogbnQgPSAo TnVsbFRlc3QqKW5vZGU7CisKKwkJLyoKKwkJICogT25seSBzaW1wbGUgKFZh ciBJUyBOVUxMKSBleHByZXNzaW9ucyBzdXBwb3J0ZWQgZm9yIG5vdy4gTWF5 YmUgd2UgY291bGQKKwkJICogdXNlIGV4YW1pbmVfdmFyaWFibGUgdG8gZml4 IHRoaXM/CisJCSAqLworCQlpZiAoISBJc0EobnQtPmFyZywgVmFyKSkKKwkJ CXJldHVybiB0cnVlOworCisJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtl cigoTm9kZSopKG50LT5hcmcpLCBjb250ZXh0KTsKKwl9CisKIAlpZiAoSXNB KG5vZGUsIFZhcikpCiAJewogCQlWYXIgKiB2YXIgPSAoVmFyKilub2RlOwpA QCAtMTAzMSw3ICsxMzc0LDcgQEAgbXZfY29tcGF0aWJsZV93YWxrZXIoTm9k ZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0ICpjb250ZXh0KQogCQkv KiB1bnN1cHBvcnRlZCBzdHJ1Y3R1cmUgKHR3byB2YXJpYWJsZXMgb3Igc28p ICovCiAJCWlmICghIG9rKQogCQkJcmV0dXJuIHRydWU7Ci0KKyAKICAJCS8q CiAJCSAqIElmIGl0J3Mgbm90IGEgIjwiIG9yICI+IiBvciAiPSIgb3BlcmF0 b3IsIGp1c3QgaWdub3JlIHRoZSBjbGF1c2UuCiAJCSAqIE90aGVyd2lzZSBu b3RlIHRoZSByZWxpZCBhbmQgYXR0bnVtIGZvciB0aGUgdmFyaWFibGUuIFRo aXMgdXNlcyB0aGUKQEAgLTEwNDEsMTAgKzEzODQsMTggQEAgbXZfY29tcGF0 aWJsZV93YWxrZXIoTm9kZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0 ICpjb250ZXh0KQogCQlzd2l0Y2ggKGdldF9vcHJyZXN0KGV4cHItPm9wbm8p KQogCQl7CiAJCQljYXNlIEZfRVFTRUw6Ci0KIAkJCQkvKiBlcXVhbGl0eSBj b25kaXRpb25zIGFyZSBjb21wYXRpYmxlIHdpdGggYWxsIHN0YXRpc3RpY3Mg Ki8KIAkJCQlicmVhazsKIAorCQkJY2FzZSBGX1NDQUxBUkxUU0VMOgorCQkJ Y2FzZSBGX1NDQUxBUkdUU0VMOgorCisJCQkJLyogbm90IGNvbXBhdGlibGUg d2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLworCQkJCWlmICghIChj b250ZXh0LT50eXBlcyAmIE1WX0NMQVVTRV9UWVBFX01DVikpCisJCQkJCXJl dHVybiB0cnVlOwkvKiB0ZXJtaW5hdGUgKi8KKyAKKwkJCQlicmVhazsKKwog CQkJZGVmYXVsdDoKIAogCQkJCS8qIHVua25vd24gZXN0aW1hdG9yICovCkBA IC0xMDU1LDExICsxNDA2LDExIEBAIG12X2NvbXBhdGlibGVfd2Fsa2VyKE5v ZGUgKm5vZGUsIG12X2NvbXBhdGlibGVfY29udGV4dCAqY29udGV4dCkKIAog CQlyZXR1cm4gbXZfY29tcGF0aWJsZV93YWxrZXIoKE5vZGUgKikgdmFyLCBj b250ZXh0KTsKICAJfQotCisgCiAJLyogTm9kZSBub3QgZXhwbGljaXRseSBz dXBwb3J0ZWQsIHNvIHRlcm1pbmF0ZSAqLwogCXJldHVybiB0cnVlOwogfQot IAorCiAvKgogICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjbGF1c2UgaXMg Y29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0cywKICAqIGFuZCBp ZiBpdCBpcywgcmV0dXJucyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g LSB2YXJubyAoaW5kZXgKQEAgLTEwNzgsMTAgKzE0MjksMTEgQEAgbXZfY29t cGF0aWJsZV93YWxrZXIoTm9kZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250 ZXh0ICpjb250ZXh0KQogICogICAgICBldmFsdWF0ZSB0aGVtIHVzaW5nIG11 bHRpdmFyaWF0ZSBzdGF0cy4KICAqLwogc3RhdGljIGJvb2wKLWNsYXVzZV9p c19tdl9jb21wYXRpYmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQsIEF0 dHJOdW1iZXIgKmF0dG51bSkKK2NsYXVzZV9pc19tdl9jb21wYXRpYmxlKE5v ZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQsIEJpdG1hcHNldCAqKmF0dG51bXMs IGludCB0eXBlcykKIHsKIAltdl9jb21wYXRpYmxlX2NvbnRleHQgY29udGV4 dDsKIAorCWNvbnRleHQudHlwZXMgPSB0eXBlczsKIAljb250ZXh0LnZhcm5v ID0gcmVsaWQ7CiAJY29udGV4dC52YXJhdHRub3MgPSBOVUxMOwkvKiBubyBh dHRudW1zICovCiAKQEAgLTEwODksNyArMTQ0MSw3IEBAIGNsYXVzZV9pc19t dl9jb21wYXRpYmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQsIEF0dHJO dW1iZXIgKmF0dG51bSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogcmVtZW1i ZXIgdGhlIG5ld2x5IGNvbGxlY3RlZCBhdHRudW1zICovCi0JKmF0dG51bSA9 IGJtc19zaW5nbGV0b25fbWVtYmVyKGNvbnRleHQudmFyYXR0bm9zKTsKKwkq YXR0bnVtcyA9IGJtc19hZGRfbWVtYmVycygqYXR0bnVtcywgY29udGV4dC52 YXJhdHRub3MpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMzk0LDI0ICsx NzQ2LDM5IEBAIGZkZXBzX2ZpbHRlcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpy b290LAogCiAJZm9yZWFjaCAobGMsIGNsYXVzZXMpCiAJewotCQlBdHRyTnVt YmVyCWF0dG51bTsKKwkJQml0bWFwc2V0ICphdHRudW1zID0gTlVMTDsKIAkJ Tm9kZQkgICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKIAotCQlp ZiAoISBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAm YXR0bnVtKSkKKwkJaWYgKCEgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xh dXNlLCByZWxpZCwgJmF0dG51bXMsCisJCQkJCQkJCQkgIE1WX0NMQVVTRV9U WVBFX0ZERVApKQogCiAJCQkvKiBjbGF1c2UgaW5jb21wYXRpYmxlIHdpdGgg ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgKi8KIAkJCSpyZWR1Y2VkX2NsYXVz ZXMgPSBsYXBwZW5kKCpyZWR1Y2VkX2NsYXVzZXMsIGNsYXVzZSk7CiAKLQkJ ZWxzZSBpZiAoISBibXNfaXNfbWVtYmVyKGF0dG51bSwgZGVwc19hdHRudW1z KSkKKwkJZWxzZSBpZiAoYm1zX251bV9tZW1iZXJzKGF0dG51bXMpID4gMSkK KworCQkJLyoKKwkJCSAqIGNsYXVzZSByZWZlcmVuY2luZyBtdWx0aXBsZSBh dHRyaWJ1dGVzIChzdHJhbmdlLCBzaG91bGQKKwkJCSAqIHRoaXMgYmUgaGFu ZGxlZCBieSBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZSBkaXJlY3RseSkKKwkJ CSAqLworCQkJKnJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRf Y2xhdXNlcywgY2xhdXNlKTsKKworCQllbHNlIGlmICghIGJtc19pc19tZW1i ZXIoYm1zX3NpbmdsZXRvbl9tZW1iZXIoYXR0bnVtcyksIGRlcHNfYXR0bnVt cykpCiAKIAkJCS8qIGNsYXVzZSBub3QgY292ZXJlZCBieSB0aGUgZGVwZW5k ZW5jaWVzICovCiAJCQkqcmVkdWNlZF9jbGF1c2VzID0gbGFwcGVuZCgqcmVk dWNlZF9jbGF1c2VzLCBjbGF1c2UpOwogCiAJCWVsc2UKIAkJeworCQkJLyog b2ssIGNsYXVzZSBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgZGVwZW5kZW5j aWVzICovCisJCQlBc3NlcnQoYm1zX251bV9tZW1iZXJzKGF0dG51bXMpID09 IDEpOworCiAJCQkqZGVwc19jbGF1c2VzICAgPSBsYXBwZW5kKCpkZXBzX2Ns YXVzZXMsIGNsYXVzZSk7Ci0JCQljbGF1c2VfYXR0bnVtcyA9IGJtc19hZGRf bWVtYmVyKGNsYXVzZV9hdHRudW1zLCBhdHRudW0pOworCQkJY2xhdXNlX2F0 dG51bXMgPSBibXNfYWRkX21lbWJlcihjbGF1c2VfYXR0bnVtcywKKwkJCQkJ CQkJCQlibXNfc2luZ2xldG9uX21lbWJlcihhdHRudW1zKSk7CiAJCX0KKwor CQlibXNfZnJlZShhdHRudW1zKTsKIAl9CiAKIAlyZXR1cm4gY2xhdXNlX2F0 dG51bXM7CkBAIC0xNjM3LDYgKzIwMDQsOSBAQCBoYXNfc3RhdHMoTGlzdCAq c3RhdHMsIGludCB0eXBlKQogCiAJCWlmICgodHlwZSAmIE1WX0NMQVVTRV9U WVBFX0ZERVApICYmIHN0YXQtPmRlcHNfYnVpbHQpCiAJCQlyZXR1cm4gdHJ1 ZTsKKworCQlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQRV9NQ1YpICYmIHN0 YXQtPm1jdl9idWlsdCkKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCXJldHVy biBmYWxzZTsKQEAgLTE2NTIsMyArMjAyMiwzOTIgQEAgZmluZF9zdGF0cyhQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpCiAKIAlyZXR1cm4gcm9v dC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0tPm12c3RhdGxpc3Q7CiB9CisK Ky8qCisgKiBFc3RpbWF0ZSBzZWxlY3Rpdml0eSBvZiBjbGF1c2VzIHVzaW5n IGEgTUNWIGxpc3QuCisgKgorICogSWYgdGhlcmUncyBubyBNQ1YgbGlzdCBm b3IgdGhlIHN0YXRzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLjAuCisgKgor ICogV2hpbGUgY29tcHV0aW5nIHRoZSBlc3RpbWF0ZSwgdGhlIGZ1bmN0aW9u IGNoZWNrcyB3aGV0aGVyIGFsbCB0aGUKKyAqIGNvbHVtbnMgd2VyZSBtYXRj aGVkIHdpdGggYW4gZXF1YWxpdHkgY29uZGl0aW9uLiBJZiB0aGF0J3MgdGhl IGNhc2UsCisgKiB3ZSBjYW4gc2tpcCBwcm9jZXNzaW5nIHRoZSBoaXN0b2dy YW0sIGFzIHRoZXJlIGNhbiBiZSBubyByb3dzIGluCisgKiBpdCB3aXRoIHRo ZSBzYW1lIHZhbHVlcyAtIGFsbCB0aGUgcm93cyBtYXRjaGluZyB0aGUgY29u ZGl0aW9uIGFyZQorICogcmVwcmVzZW50ZWQgYnkgdGhlIE1DViBpdGVtLiBU aGlzIGNhbiBvbmx5IGhhcHBlbiB3aXRoIGVxdWFsaXR5CisgKiBvbiBhbGwg dGhlIGF0dHJpYnV0ZXMuCisgKgorICogVGhlIGFsZ29yaXRobSB3b3JrcyBs aWtlIHRoaXM6CisgKgorICogICAxKSBtYXJrIGFsbCBpdGVtcyBhcyAnbWF0 Y2gnCisgKiAgIDIpIHdhbGsgdGhyb3VnaCBhbGwgdGhlIGNsYXVzZXMKKyAq ICAgMykgZm9yIGEgcGFydGljdWxhciBjbGF1c2UsIHdhbGsgdGhyb3VnaCBh bGwgdGhlIGl0ZW1zCisgKiAgIDQpIHNraXAgaXRlbXMgdGhhdCBhcmUgYWxy ZWFkeSAnbm8gbWF0Y2gnCisgKiAgIDUpIGNoZWNrIGNsYXVzZSBmb3IgaXRl bXMgdGhhdCBzdGlsbCBtYXRjaAorICogICA2KSBzdW0gZnJlcXVlbmNpZXMg Zm9yIGl0ZW1zIHRvIGdldCBzZWxlY3Rpdml0eQorICoKKyAqIFRoZSBmdW5j dGlvbiBhbHNvIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbGVhc3Qg ZnJlcXVlbnQgaXRlbQorICogb24gdGhlIE1DViBsaXN0LCB3aGljaCBtYXkg YmUgdXNlZnVsIGZvciBjbGFtcGluZyBlc3RpbWF0ZSBmcm9tIHRoZQorICog aGlzdG9ncmFtIChhbGwgaXRlbXMgbm90IHByZXNlbnQgaW4gdGhlIE1DViBs aXN0IGFyZSBsZXNzIGZyZXF1ZW50KS4KKyAqIFRoaXMgaG93ZXZlciBzZWVt cyB1c2VmdWwgb25seSBmb3IgY2FzZXMgd2l0aCBjb25kaXRpb25zIG9uIGFs bAorICogYXR0cmlidXRlcy4KKyAqCisgKiBUT0RPIFRoaXMgb25seSBoYW5k bGVzIEFORC1lZCBjbGF1c2VzLCBidXQgaXQgbWlnaHQgd29yayBmb3IgT1It ZWQKKyAqICAgICAgbGlzdHMgdG9vIC0gaXQganVzdCBuZWVkcyB0byByZXZl cnNlIHRoZSBsb2dpYyBhIGJpdC4gSS5lLiBzdGFydAorICogICAgICB3aXRo ICdubyBtYXRjaCcgZm9yIGFsbCBpdGVtcywgYW5kIG1hcmsgdGhlIGl0ZW1z IGFzIGEgbWF0Y2gKKyAqICAgICAgYXMgdGhlIGNsYXVzZXMgYXJlIHByb2Nl c3NlZCAoYW5kIHNraXAgaXRlbXMgdGhhdCBhcmUgJ21hdGNoJykuCisgKi8K K3N0YXRpYyBTZWxlY3Rpdml0eQorY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0 eV9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAor CQkJCQkJCQkgIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgYm9vbCAqZnVs bG1hdGNoLAorCQkJCQkJCQkgIFNlbGVjdGl2aXR5ICpsb3dzZWwpCit7CisJ aW50IGk7CisJU2VsZWN0aXZpdHkgcyA9IDAuMDsKKwlTZWxlY3Rpdml0eSB1 ID0gMC4wOworCisJTUNWTGlzdCBtY3ZsaXN0ID0gTlVMTDsKKwlpbnQJbm1h dGNoZXMgPSAwOworCisJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZvciBl YWNoIE1DViBpdGVtICovCisJY2hhciAqIG1hdGNoZXMgPSBOVUxMOworCisJ QXNzZXJ0KGNsYXVzZXMgIT0gTklMKTsKKwlBc3NlcnQobGlzdF9sZW5ndGgo Y2xhdXNlcykgPj0gMik7CisKKwkvKiB0aGVyZSdzIG5vIE1DViBsaXN0IGJ1 aWx0IHlldCAqLworCWlmICghIG12c3RhdHMtPm1jdl9idWlsdCkKKwkJcmV0 dXJuIDAuMDsKKworCW1jdmxpc3QgPSBsb2FkX212X21jdmxpc3QobXZzdGF0 cy0+bXZvaWQpOworCisJQXNzZXJ0KG1jdmxpc3QgIT0gTlVMTCk7CisJQXNz ZXJ0KG1jdmxpc3QtPm5pdGVtcyA+IDApOworCisJLyogYnkgZGVmYXVsdCBh bGwgdGhlIE1DViBpdGVtcyBtYXRjaCB0aGUgY2xhdXNlcyBmdWxseSAqLwor CW1hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG1jdmxpc3QtPm5p dGVtcyk7CisJbWVtc2V0KG1hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwg c2l6ZW9mKGNoYXIpKm1jdmxpc3QtPm5pdGVtcyk7CisKKwkvKiBudW1iZXIg b2YgbWF0Y2hpbmcgTUNWIGl0ZW1zICovCisJbm1hdGNoZXMgPSBtY3ZsaXN0 LT5uaXRlbXM7CisKKwlubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBf bWN2bGlzdChyb290LCBjbGF1c2VzLAorCQkJCQkJCQkJCSAgIG12c3RhdHMt PnN0YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJCQkJICAgbm1hdGNoZXMsIG1h dGNoZXMsCisJCQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0Y2gsIGZhbHNl KTsKKworCS8qIHN1bSBmcmVxdWVuY2llcyBmb3IgYWxsIHRoZSBtYXRjaGlu ZyBNQ1YgaXRlbXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0 ZW1zOyBpKyspCisJeworCQkvKiB1c2VkIHRvICdzY2FsZScgZm9yIE1DViBs aXN0cyBub3QgY292ZXJpbmcgYWxsIHR1cGxlcyAqLworCQl1ICs9IG1jdmxp c3QtPml0ZW1zW2ldLT5mcmVxdWVuY3k7CisKKwkJaWYgKG1hdGNoZXNbaV0g IT0gTVZTVEFUU19NQVRDSF9OT05FKQorCQkJcyArPSBtY3ZsaXN0LT5pdGVt c1tpXS0+ZnJlcXVlbmN5OworCX0KKworCXBmcmVlKG1hdGNoZXMpOworCXBm cmVlKG1jdmxpc3QpOworCisJcmV0dXJuIHMqdTsKK30KKworLyoKKyAqIEV2 YWx1YXRlIGNsYXVzZXMgdXNpbmcgdGhlIE1DViBsaXN0LCBhbmQgdXBkYXRl IHRoZSBtYXRjaCBiaXRtYXAuCisgKgorICogVGhlIGJpdG1hcCBtYXkgYmUg YWxyZWFkeSBwYXJ0aWFsbHkgc2V0LCBzbyB0aGlzIGlzIHJlYWxseSBhIHdh eSB0bworICogY29tYmluZSByZXN1bHRzIG9mIHNldmVyYWwgY2xhdXNlIGxp c3RzIC0gZWl0aGVyIHdoZW4gY29tcHV0aW5nCisgKiBjb25kaXRpb25hbCBw cm9iYWJpbGl0eSBQKEF8Qikgb3IgYSBjb21iaW5hdGlvbiBvZiBBTkQvT1Ig Y2xhdXNlcy4KKyAqCisgKiBUT0RPIFRoaXMgd29ya3Mgd2l0aCAnYml0bWFw JyB3aGVyZSBlYWNoIGJpdCBpcyByZXByZXNlbnRlZCBhcyBhIGNoYXIsCisg KiAgICAgIHdoaWNoIGlzIHNsaWdodGx5IHdhc3RlZnVsLiBJbnN0ZWFkLCB3 ZSBjb3VsZCB1c2UgYSByZWd1bGFyCisgKiAgICAgIGJpdG1hcCwgcmVkdWNp bmcgdGhlIHNpemUgdG8gfjEvOC4gQW5vdGhlciB0aGluZyBpcyBtZXJnaW5n IHRoZQorICogICAgICBiaXRtYXBzIHVzaW5nICYgYW5kIHwsIHdoaWNoIG1p Z2h0IGJlIGZhc3RlciB0aGFuIG1pbi9tYXguCisgKi8KK3N0YXRpYyBpbnQK K3VwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCSAgIGludDJ2ZWN0b3IgKnN0YWtl eXMsIE1DVkxpc3QgbWN2bGlzdCwKKwkJCQkJCSAgIGludCBubWF0Y2hlcywg Y2hhciAqIG1hdGNoZXMsCisJCQkJCQkgICBTZWxlY3Rpdml0eSAqbG93c2Vs LCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkgICBib29sIGlzX29yKQorewor CWludCBpOworCUxpc3RDZWxsICogbDsKKworCUJpdG1hcHNldCAqZXFtYXRj aGVzID0gTlVMTDsJLyogYXR0cmlidXRlcyB3aXRoIGVxdWFsaXR5IG1hdGNo ZXMgKi8KKworCS8qIFRoZSBiaXRtYXAgbWF5IGJlIHBhcnRpYWxseSBidWls dC4gKi8KKwlBc3NlcnQobm1hdGNoZXMgPj0gMCk7CisJQXNzZXJ0KG5tYXRj aGVzIDw9IG1jdmxpc3QtPm5pdGVtcyk7CisJQXNzZXJ0KGNsYXVzZXMgIT0g TklMKTsKKwlBc3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMSk7CisJ QXNzZXJ0KG1jdmxpc3QgIT0gTlVMTCk7CisJQXNzZXJ0KG1jdmxpc3QtPm5p dGVtcyA+IDApOworCisJLyogTm8gcG9zc2libGUgbWF0Y2hlcyAob25seSB3 b3JrcyBmb3IgQU5ELWRlZCBjbGF1c2VzKSAqLworCWlmICgoKG5tYXRjaGVz ID09IDApICYmICghIGlzX29yKSkgfHwKKwkJKChubWF0Y2hlcyA9PSBtY3Zs aXN0LT5uaXRlbXMpICYmIGlzX29yKSkKKwkJcmV0dXJuIG5tYXRjaGVzOwor CisJLyoKKwkgKiBmaW5kIHRoZSBsb3dlc3QgZnJlcXVlbmN5IGluIHRoZSBN Q1YgbGlzdAorCSAqCisJICogV2UgbmVlZCB0byBkbyB0aGF0IGhlcmUsIGJl Y2F1c2Ugd2UgZG8gdmFyaW91cyB0cmlja3MgaW4gdGhlIGZvbGxvd2luZwor CSAqIGNvZGUgLSBza2lwcGluZyBpdGVtcyBhbHJlYWR5IHJ1bGVkIG91dCwg ZXRjLgorCSAqCisJICogWFhYIEEgbG9vcCBpcyBuZWNlc3NhcnkgYmVjYXVz ZSB0aGUgTUNWIGxpc3QgaXMgbm90IHNvcnRlZCBieSBmcmVxdWVuY3kuCisJ ICovCisJKmxvd3NlbCA9IDEuMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWN2bGlz dC0+bml0ZW1zOyBpKyspCisJeworCQlNQ1ZJdGVtIGl0ZW0gPSBtY3ZsaXN0 LT5pdGVtc1tpXTsKKworCQlpZiAoaXRlbS0+ZnJlcXVlbmN5IDwgKmxvd3Nl bCkKKwkJCSpsb3dzZWwgPSBpdGVtLT5mcmVxdWVuY3k7CisJfQorCisJLyoK KwkgKiBMb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgY2xhdXNlcywgYW5kIGZv ciBlYWNoIG9mIHRoZW0gZXZhbHVhdGUKKwkgKiBhbGwgdGhlIE1DViBpdGVt cyBub3QgeWV0IGVsaW1pbmF0ZWQgYnkgdGhlIHByZWNlZGluZyBjbGF1c2Vz LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJeworCQlOb2RlICog Y2xhdXNlID0gKE5vZGUqKWxmaXJzdChsKTsKKworCQkvKiBpZiBpdCdzIGEg UmVzdHJpY3RJbmZvLCB0aGVuIGV4dHJhY3QgdGhlIGNsYXVzZSAqLworCQlp ZiAoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZvKSkKKwkJCWNsYXVzZSA9IChO b2RlKikoKFJlc3RyaWN0SW5mbyopY2xhdXNlKS0+Y2xhdXNlOworCisJCS8q IGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgbWF0Y2hlcyBwb3NzaWJsZSwg d2UgY2FuIHN0b3AgKi8KKwkJaWYgKCgobm1hdGNoZXMgPT0gMCkgJiYgKCEg aXNfb3IpKSB8fAorCQkJKChubWF0Y2hlcyA9PSBtY3ZsaXN0LT5uaXRlbXMp ICYmIGlzX29yKSkKKwkJCQlicmVhazsKKworCQkvKiBpdCdzIGVpdGhlciBP cENsYXVzZSwgb3IgTnVsbFRlc3QgKi8KKwkJaWYgKGlzX29wY2xhdXNlKGNs YXVzZSkpCisJCXsKKwkJCU9wRXhwcgkgICAqZXhwciA9IChPcEV4cHIqKWNs YXVzZTsKKwkJCWJvb2wJCXZhcm9ubGVmdCA9IHRydWU7CisJCQlib29sCQlv azsKKwkJCUZtZ3JJbmZvCW9wcHJvYzsKKworCQkJLyogZ2V0IHByb2NlZHVy ZSBjb21wdXRpbmcgb3BlcmF0b3Igc2VsZWN0aXZpdHkgKi8KKwkJCVJlZ1By b2NlZHVyZQlvcHJyZXN0ID0gZ2V0X29wcnJlc3QoZXhwci0+b3Bubyk7CisK KwkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9wbm8pLCAmb3Bwcm9j KTsKKworCQkJb2sgPSAoTnVtUmVsaWRzKGNsYXVzZSkgPT0gMSkgJiYKKwkJ CQkgKGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2UobHNlY29uZChleHByLT5h cmdzKSkgfHwKKwkJCQkgKHZhcm9ubGVmdCA9IGZhbHNlLAorCQkJCSAgaXNf cHNldWRvX2NvbnN0YW50X2NsYXVzZShsaW5pdGlhbChleHByLT5hcmdzKSkp KTsKKworCQkJaWYgKG9rKQorCQkJeworCisJCQkJRm1nckluZm8JZ3Rwcm9j OworCQkJCVZhciAqIHZhciA9ICh2YXJvbmxlZnQpID8gbGluaXRpYWwoZXhw ci0+YXJncykgOiBsc2Vjb25kKGV4cHItPmFyZ3MpOworCQkJCUNvbnN0ICog Y3N0ID0gKHZhcm9ubGVmdCkgPyBsc2Vjb25kKGV4cHItPmFyZ3MpIDogbGlu aXRpYWwoZXhwci0+YXJncyk7CisJCQkJYm9vbCBpc2d0ID0gKCEgdmFyb25s ZWZ0KTsKKworCQkJCVR5cGVDYWNoZUVudHJ5ICp0eXBlY2FjaGUKKwkJCQkJ CQkJPSBsb29rdXBfdHlwZV9jYWNoZSh2YXItPnZhcnR5cGUsIFRZUEVDQUNI RV9HVF9PUFIpOworCisJCQkJLyogRklYTUUgcHJvcGVyIG1hdGNoaW5nIGF0 dHJpYnV0ZSB0byBkaW1lbnNpb24gKi8KKwkJCQlpbnQgaWR4ID0gbXZfZ2V0 X2luZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtleXMpOworCisJCQkJZm1ncl9p bmZvKGdldF9vcGNvZGUodHlwZWNhY2hlLT5ndF9vcHIpLCAmZ3Rwcm9jKTsK KworCQkJCS8qCisJCQkJICogV2FsayB0aHJvdWdoIHRoZSBNQ1YgaXRlbXMg YW5kIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNsYXVzZS4gV2UgY2FuCisJCQkJ ICogc2tpcCBpdGVtcyB0aGF0IHdlcmUgYWxyZWFkeSBydWxlZCBvdXQsIGFu ZCB0ZXJtaW5hdGUgaWYgdGhlcmUgYXJlCisJCQkJICogbm8gcmVtYWluaW5n IE1DViBpdGVtcyB0aGF0IG1pZ2h0IHBvc3NpYmx5IG1hdGNoLgorCQkJCSAq LworCQkJCWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykK KwkJCQl7CisJCQkJCWJvb2wgbWlzbWF0Y2ggPSBmYWxzZTsKKwkJCQkJTUNW SXRlbSBpdGVtID0gbWN2bGlzdC0+aXRlbXNbaV07CisKKwkJCQkJLyoKKwkJ CQkJICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyAoQU5EKSBvciBu byByZW1haW5pbmcgdW5tYXRjaGVkCisJCQkJCSAqIGl0ZW1zIChPUiksIHdl IGNhbiBzdG9wIHByb2Nlc3NpbmcgdGhpcyBjbGF1c2UuCisJCQkJCSAqLwor CQkJCQlpZiAoKChubWF0Y2hlcyA9PSAwKSAmJiAoISBpc19vcikpIHx8CisJ CQkJCQkoKG5tYXRjaGVzID09IG1jdmxpc3QtPm5pdGVtcykgJiYgaXNfb3Ip KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLyoKKwkJCQkJICogRm9yIEFORC1s aXN0cywgd2UgY2FuIGFsc28gbWFyayBOVUxMIGl0ZW1zIGFzICdubyBtYXRj aCcgKGFuZAorCQkJCQkgKiB0aGVuIHNraXAgdGhlbSkuIEZvciBPUi1saXN0 cyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4KKwkJCQkJICovCisJCQkJCWlmICgo ISBpc19vcikgJiYgaXRlbS0+aXNudWxsW2lkeF0pCisJCQkJCQltYXRjaGVz W2ldID0gTVZTVEFUU19NQVRDSF9OT05FOworCisJCQkJCS8qIHNraXAgTUNW IGl0ZW1zIHRoYXQgd2VyZSBhbHJlYWR5IHJ1bGVkIG91dCAqLworCQkJCQlp ZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hf Tk9ORSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJZWxzZSBpZiAoaXNfb3Ig JiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9GVUxMKSkKKwkJCQkJ CWNvbnRpbnVlOworCisJCQkJCXN3aXRjaCAob3BycmVzdCkKKwkJCQkJewor CQkJCQkJY2FzZSBGX0VRU0VMOgorCQkJCQkJCS8qCisJCQkJCQkJICogV2Ug ZG9uJ3QgY2FyZSBhYm91dCBpc2d0IGluIGVxdWFsaXR5LCBiZWNhdXNlIGl0 IGRvZXMgbm90CisJCQkJCQkJICogbWF0dGVyIHdoZXRoZXIgaXQncyAodmFy ID0gY29uc3QpIG9yIChjb25zdCA9IHZhcikuCisJCQkJCQkJICovCisJCQkJ CQkJbWlzbWF0Y2ggPSAhIERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29s bCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCSBERUZBVUxUX0NPTExBVElP Tl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSwKKwkJ CQkJCQkJCQkJCQkJCQkgaXRlbS0+dmFsdWVzW2lkeF0pKTsKKworCQkJCQkJ CWlmICghIG1pc21hdGNoKQorCQkJCQkJCQllcW1hdGNoZXMgPSBibXNfYWRk X21lbWJlcihlcW1hdGNoZXMsIGlkeCk7CisKKwkJCQkJCQlicmVhazsKKwor CQkJCQkJY2FzZSBGX1NDQUxBUkxUU0VMOgkvKiBjb2x1bW4gPCBjb25zdGFu dCAqLworCQkJCQkJY2FzZSBGX1NDQUxBUkdUU0VMOiAvKiBjb2x1bW4gPiBj b25zdGFudCAqLworCisJCQkJCQkJLyoKKwkJCQkJCQkgKiBGaXJzdCBjaGVj ayB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBiZWxvdyB0aGUgbG93ZXIgYm91 bmRhcnkgKGluIHRoYXQKKwkJCQkJCQkgKiBjYXNlIHdlIGNhbiBza2lwIHRo ZSBidWNrZXQsIGJlY2F1c2UgdGhlcmUncyBubyBvdmVybGFwKS4KKwkJCQkJ CQkgKi8KKwkJCQkJCQltaXNtYXRjaCA9IERhdHVtR2V0Qm9vbChGdW5jdGlv bkNhbGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJCSBERUZBVUxU X0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJIGNzdC0+Y29uc3R2 YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCQkgaXRlbS0+dmFsdWVzW2lkeF0pKTsK KworCQkJCQkJCS8qIGludmVydCB0aGUgcmVzdWx0IGlmIGlzZ3Q9dHJ1ZSAq LworCQkJCQkJCW1pc21hdGNoID0gKGlzZ3QpID8gKCEgbWlzbWF0Y2gpIDog bWlzbWF0Y2g7CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQkvKiBY WFggVGhlIGNvbmRpdGlvbnMgb24gbWF0Y2hlc1tpXSBhcmUgbm90IG5lZWRl ZCwgYXMgd2UKKwkJCQkJICogICAgIHNraXAgTUNWIGl0ZW1zIHRoYXQgY2Fu J3QgYmVjb21lIHRydWUvZmFsc2UsIGRlcGVuZGluZworCQkJCQkgKiAgICAg b24gdGhlIGN1cnJlbnQgZmxhZy4gU2VlIGJlZ2lubmluZyBvZiB0aGUgbG9v cCBvdmVyCisJCQkJCSAqICAgICBNQ1YgaXRlbXMuCisJCQkJCSAqLworCisJ CQkJCWlmICgoaXNfb3IpICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFU Q0hfTk9ORSkgJiYgKCEgbWlzbWF0Y2gpKQorCQkJCQl7CisJCQkJCQkvKiBP UiAtIHdhcyBNQVRDSF9OT05FLCBidXQgd2lsbCBiZSBNQVRDSF9GVUxMICov CisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFUU19NQVRDSF9GVUxMOworCQkJ CQkJKytubWF0Y2hlczsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJ CWVsc2UgaWYgKCghIGlzX29yKSAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRT X01BVENIX0ZVTEwpICYmIG1pc21hdGNoKQorCQkJCQl7CisJCQkJCQkvKiBB TkQgLSB3YXMgTUFUQ19GVUxMLCBidXQgd2lsbCBiZSBNQVRDSF9OT05FICov CisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFUU19NQVRDSF9OT05FOworCQkJ CQkJLS1ubWF0Y2hlczsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJ CQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoSXNBKGNsYXVzZSwgTnVsbFRl c3QpKQorCQl7CisJCQlOdWxsVGVzdCAqIGV4cHIgPSAoTnVsbFRlc3QqKWNs YXVzZTsKKwkJCVZhciAqIHZhciA9IChWYXIqKShleHByLT5hcmcpOworCisJ CQkvKiBGSVhNRSBwcm9wZXIgbWF0Y2hpbmcgYXR0cmlidXRlIHRvIGRpbWVu c2lvbiAqLworCQkJaW50IGlkeCA9IG12X2dldF9pbmRleCh2YXItPnZhcmF0 dG5vLCBzdGFrZXlzKTsKKworCQkJLyoKKwkJCSAqIFdhbGsgdGhyb3VnaCB0 aGUgTUNWIGl0ZW1zIGFuZCBldmFsdWF0ZSB0aGUgY3VycmVudCBjbGF1c2Uu IFdlIGNhbgorCQkJICogc2tpcCBpdGVtcyB0aGF0IHdlcmUgYWxyZWFkeSBy dWxlZCBvdXQsIGFuZCB0ZXJtaW5hdGUgaWYgdGhlcmUgYXJlCisJCQkgKiBu byByZW1haW5pbmcgTUNWIGl0ZW1zIHRoYXQgbWlnaHQgcG9zc2libHkgbWF0 Y2guCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uaXRl bXM7IGkrKykKKwkJCXsKKwkJCQlNQ1ZJdGVtIGl0ZW0gPSBtY3ZsaXN0LT5p dGVtc1tpXTsKKworCQkJCS8qIGlmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNo ZXMsIHdlIGNhbiBzdG9wIHByb2Nlc3NpbmcgdGhpcyBjbGF1c2UgKi8KKwkJ CQlpZiAobm1hdGNoZXMgPT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBz a2lwIE1DViBpdGVtcyB0aGF0IHdlcmUgYWxyZWFkeSBydWxlZCBvdXQgKi8K KwkJCQlpZiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUpCisJ CQkJCWNvbnRpbnVlOworCisJCQkJLyogaWYgdGhlIGNsYXVzZSBtaXNtYXRj aGVzIHRoZSBNQ1YgaXRlbSwgc2V0IGl0IGFzIE1BVENIX05PTkUgKi8KKwkJ CQlpZiAoKChleHByLT5udWxsdGVzdHR5cGUgPT0gSVNfTlVMTCkgJiYgKCEg aXRlbS0+aXNudWxsW2lkeF0pKSB8fAorCQkJCQkoKGV4cHItPm51bGx0ZXN0 dHlwZSA9PSBJU19OT1RfTlVMTCkgJiYgKGl0ZW0tPmlzbnVsbFtpZHhdKSkp CisJCQkJeworCQkJCQkJbWF0Y2hlc1tpXSA9IE1WU1RBVFNfTUFUQ0hfTk9O RTsKKwkJCQkJCS0tbm1hdGNoZXM7CisJCQkJfQorCQkJfQorCQl9CisJCWVs c2UgaWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNl KSkKKwkJeworCQkJLyogQU5EL09SIGNsYXVzZSwgd2l0aCBhbGwgY2xhdXNl cyBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIE1WIHN0YXQgKi8KKwor CQkJaW50CQkJaTsKKwkJCUJvb2xFeHByICAgKm9yY2xhdXNlICA9ICgoQm9v bEV4cHIqKWNsYXVzZSk7CisJCQlMaXN0CSAgICpvcmNsYXVzZXMgPSBvcmNs YXVzZS0+YXJnczsKKworCQkJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZv ciBlYWNoIE1DViBpdGVtICovCisJCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOwor CQkJY2hhciAqIG9yX21hdGNoZXMgPSBOVUxMOworCisJCQlBc3NlcnQob3Jj bGF1c2VzICE9IE5JTCk7CisJCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1 c2VzKSA+PSAyKTsKKworCQkJLyogbnVtYmVyIG9mIG1hdGNoaW5nIE1DViBp dGVtcyAqLworCQkJb3Jfbm1hdGNoZXMgPSBtY3ZsaXN0LT5uaXRlbXM7CisK KwkJCS8qIGJ5IGRlZmF1bHQgbm9uZSBvZiB0aGUgTUNWIGl0ZW1zIG1hdGNo ZXMgdGhlIGNsYXVzZXMgKi8KKwkJCW9yX21hdGNoZXMgPSBwYWxsb2MwKHNp emVvZihjaGFyKSAqIG9yX25tYXRjaGVzKTsKKworCQkJaWYgKG9yX2NsYXVz ZShjbGF1c2UpKQorCQkJeworCQkJCS8qIE9SIGNsYXVzZXMgYXNzdW1lIG5v dGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCisJCQkJbWVtc2V0KG9yX21h dGNoZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6ZW9mKGNoYXIpKm9yX25t YXRjaGVzKTsKKwkJCQlvcl9ubWF0Y2hlcyA9IDA7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyogQU5EIGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0 Y2hlcywgaW5pdGlhbGx5ICovCisJCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1W U1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsK KwkJCX0KKworCQkJLyogYnVpbGQgdGhlIG1hdGNoIGJpdG1hcCBmb3IgdGhl IE9SLWNsYXVzZXMgKi8KKwkJCW9yX25tYXRjaGVzID0gdXBkYXRlX21hdGNo X2JpdG1hcF9tY3ZsaXN0KHJvb3QsIG9yY2xhdXNlcywKKwkJCQkJCQkJCSAg IHN0YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJCQkgICBvcl9ubWF0Y2hlcywg b3JfbWF0Y2hlcywKKwkJCQkJCQkJCSAgIGxvd3NlbCwgZnVsbG1hdGNoLCBv cl9jbGF1c2UoY2xhdXNlKSk7CisKKwkJCS8qIG1lcmdlIHRoZSBiaXRtYXAg aW50byB0aGUgZXhpc3Rpbmcgb25lKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBt Y3ZsaXN0LT5uaXRlbXM7IGkrKykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRv IEFORC1tZXJnZSB0aGUgYml0bWFwcywgYSBNSU4oKSBzZW1hbnRpY3MgaXMg dXNlZC4KKwkJCQkgKiBGb3IgT1ItbWVyZ2UsIHVzZSBNQVgoKS4KKwkJCQkg KgorCQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBub3QgZGVjcmVhc2UgdGhlIG51 bWJlciBvZiBtYXRjaGVzCisJCQkJICovCisJCQkJVVBEQVRFX1JFU1VMVCht YXRjaGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBpc19vcik7CisJCQl9CisKKwkJ CXBmcmVlKG9yX21hdGNoZXMpOworCisJCX0KKwkJZWxzZQorCQl7CisJCQll bG9nKEVSUk9SLCAidW5rbm93biBjbGF1c2UgdHlwZTogJWQiLCBjbGF1c2Ut PnR5cGUpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgdGhlIGNvbHVt bnMgd2VyZSBtYXRjaGVkIGJ5IGVxdWFsaXR5LCBpdCdzIGEgZnVsbCBtYXRj aC4KKwkgKiBJbiB0aGlzIGNhc2UgdGhlcmUgY2FuIGJlIGp1c3QgYSBzaW5n bGUgTUNWIGl0ZW0sIG1hdGNoaW5nIHRoZQorCSAqIGNsYXVzZSAoaWYgdGhl cmUgd2VyZSB0d28sIGJvdGggd291bGQgbWF0Y2ggdGhlIG90aGVyIG9uZSku CisJICovCisJKmZ1bGxtYXRjaCA9IChibXNfbnVtX21lbWJlcnMoZXFtYXRj aGVzKSA9PSBtY3ZsaXN0LT5uZGltZW5zaW9ucyk7CisKKwkvKiBmcmVlIHRo ZSBhbGxvY2F0ZWQgcGllY2VzICovCisJaWYgKGVxbWF0Y2hlcykKKwkJcGZy ZWUoZXFtYXRjaGVzKTsKKworCXJldHVybiBubWF0Y2hlczsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCA3 ZmIyMDg4Li44Mzk0MTExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jCkBAIC00MTIsNyArNDEyLDcgQEAgZ2V0X3Jl bGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9i amVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCW12c3RhdCA9IChGb3JtX3Bn X212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOwogCiAJCQkvKiB1bmF2 YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB0aGUgcGxh bm5lciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19idWlsdCkKKwkJCWlmICht dnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5tY3ZfYnVpbHQpCiAJCQl7 CiAJCQkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7CiAKQEAg LTQyMSw5ICs0MjEsMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lcklu Zm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVu dCwKIAogCQkJCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCQkJCWluZm8t PmRlcHNfZW5hYmxlZCA9IG12c3RhdC0+ZGVwc19lbmFibGVkOworCQkJCWlu Zm8tPm1jdl9lbmFibGVkICA9IG12c3RhdC0+bWN2X2VuYWJsZWQ7CiAKIAkJ CQkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCQkJCWluZm8t PmRlcHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CisJCQkJaW5mby0+ bWN2X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1aWx0OwogCiAJCQkJLyogc3Rh a2V5cyAqLwogCQkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRP SUQsIGh0dXAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtl ZmlsZQppbmRleCAwOTlmMWVkLi5mOWJmMTBjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDYgQEAg c3ViZGlyID0gc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cwogdG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3Ny Yy9NYWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9IGNvbW1vbi5vIGRlcGVuZGVu Y2llcy5vCitPQkpTID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gbWN2Lm8K IAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5t awpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFE TUUubWN2IGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUubWN2 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5M2NmZTQK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L1JFQURNRS5tY3YKQEAgLTAsMCArMSwxMzcgQEAKK01DViBsaXN0cworPT09 PT09PT09CisKK011bHRpdmFyaWF0ZSBNQ1YgKG1vc3QtY29tbW9uIHZhbHVl cykgbGlzdHMgYXJlIGEgc3RyYWlnaHRmb3J3YXJkIGV4dGVuc2lvbiBvZgor cmVndWxhciBNQ1YgbGlzdCwgdHJhY2tpbmcgbW9zdCBmcmVxdWVudCBjb21i aW5hdGlvbnMgb2YgdmFsdWVzIGZvciBhIGdyb3VwIG9mCithdHRyaWJ1dGVz LgorCitUaGlzIHdvcmtzIHBhcnRpY3VsYXJseSB3ZWxsIGZvciBjb2x1bW5z IHdpdGggYSBzbWFsbCBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzLAorYXMg dGhlIGxpc3QgbWF5IGluY2x1ZGUgYWxsIHRoZSBjb21iaW5hdGlvbnMgYW5k IGFwcHJveGltYXRlIHRoZSBkaXN0cmlidXRpb24KK3ZlcnkgYWNjdXJhdGVs eS4KKworRm9yIGNvbHVtbnMgd2l0aCBsYXJnZSBudW1iZXIgb2YgZGlzdGlu Y3QgdmFsdWVzIChlLmcuIHRob3NlIHdpdGggY29udGludW91cworZG9tYWlu cyksIHRoZSBsaXN0IHdpbGwgb25seSB0cmFjayB0aGUgbW9zdCBmcmVxdWVu dCBjb21iaW5hdGlvbnMuIElmIHRoZQorZGlzdHJpYnV0aW9uIGlzIG1vc3Rs eSB1bmlmb3JtIChhbGwgY29tYmluYXRpb25zIGFib3V0IGVxdWFsbHkgZnJl cXVlbnQpLCB0aGUKK01DViBsaXN0IHdpbGwgYmUgZW1wdHkuCisKK0VzdGlt YXRlcyBvZiBzb21lIGNsYXVzZXMgKGUuZy4gZXF1YWxpdHkpIGJhc2VkIG9u IE1DViBsaXN0cyBhcmUgbW9yZSBhY2N1cmF0ZQordGhhbiB3aGVuIHVzaW5n IGhpc3RvZ3JhbXMuCisKK0Fsc28sIE1DViBsaXN0cyBkb24ndCBuZWNlc3Nh cmlseSByZXF1aXJlIHNvcnRpbmcgb2YgdGhlIHZhbHVlcyAodGhlIGZhY3Qg dGhhdAord2UgdXNlIHNvcnRpbmcgd2hlbiBidWlsZGluZyB0aGVtIGlzIGlt cGxlbWVudGF0aW9uIGRldGFpbCksIGJ1dCBldmVuIG1vcmUKK2ltcG9ydGFu dGx5IHRoZSBvcmRlcmluZyBpcyBub3QgYnVpbHQgaW50byB0aGUgYXBwcm94 aW1hdGlvbiAod2hpbGUgaGlzdG9ncmFtcworYXJlIGJ1aWx0IG9uIG9yZGVy aW5nKS4gU28gTUNWIGxpc3RzIHdvcmsgd2VsbCBldmVuIGZvciBhdHRyaWJ1 dGVzIHdoZXJlIHRoZQorb3JkZXJpbmcgb2YgdGhlIGRhdGEgdHlwZSBpcyBk aXNjb25uZWN0ZWQgZnJvbSB0aGUgbWVhbmluZyBvZiB0aGUgZGF0YS4gRm9y CitleGFtcGxlIHdlIGtub3cgaG93IHRvIHNvcnQgc3RyaW5ncywgYnV0IGl0 J3MgdW5saWtlbHkgdG8gbWFrZSBtdWNoIHNlbnNlIGZvcgorY2l0eSBuYW1l cyAob3Igb3RoZXIgbGFiZWwtbGlrZSBhdHRyaWJ1dGVzKS4KKworCitTZWxl Y3Rpdml0eSBlc3RpbWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK K1RoZSBlc3RpbWF0aW9uLCBpbXBsZW1lbnRlZCBpbiBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5X21jdmxpc3QoKSwgaXMgcXVpdGUKK3NpbXBsZSBpbiBw cmluY2lwbGUgLSB3ZSBuZWVkIHRvIGlkZW50aWZ5IE1DViBpdGVtcyBtYXRj aGluZyBhbGwgdGhlIGNsYXVzZXMKK2FuZCBzdW0gZnJlcXVlbmNpZXMgb2Yg YWxsIHRob3NlIGl0ZW1zLgorCitDdXJyZW50bHkgTUNWIGxpc3RzIHN1cHBv cnQgZXN0aW1hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGNsYXVzZSB0eXBlczoK KworICAgIChhKSBlcXVhbGl0eSBjbGF1c2VzICAgIFdIRVJFIChhID0gMSkg QU5EIChiID0gMikKKyAgICAoYikgaW5lcXVhbGl0eSBjbGF1c2VzICBXSEVS RSAoYSA8IDEpIEFORCAoYiA+PSAyKQorICAgIChjKSBOVUxMIGNsYXVzZXMg ICAgICAgIFdIRVJFIChhIElTIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVMTCkK KyAgICAoZCkgT1IgY2xhdXNlcyAgICAgICAgICBXSEVSRSAoYSA8IDEpIE9S IChiID49IDIpCisKK0l0J3MgcG9zc2libGUgdG8gYWRkIHN1cHBvcnQgZm9y IGFkZGl0aW9uYWwgY2xhdXNlcywgZm9yIGV4YW1wbGU6CisKKyAgICAoZSkg bXVsdGktdmFyIGNsYXVzZXMgICBXSEVSRSAoYSA+IGIpCisKK2FuZCBwb3Nz aWJseSBvdGhlcnMuIFRoZXNlIGFyZSB0YXNrcyBmb3IgdGhlIGZ1dHVyZSwg bm90IHlldCBpbXBsZW1lbnRlZC4KKworCitFc3RpbWF0aW5nIGVxdWFsaXR5 IGNsYXVzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVu IGNvbXB1dGluZyBzZWxlY3Rpdml0eSBlc3RpbWF0ZSBmb3IgZXF1YWxpdHkg Y2xhdXNlcworCisgICAgKGEgPSAxKSBBTkQgKGIgPSAyKQorCit3ZSBjYW4g ZG8gdGhpcyBlc3RpbWF0ZSBwcmV0dHkgZXhhY3RseSBhc3N1bWluZyB0aGF0 IHR3byBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAoMSkgdGhlcmUncyBh biBlcXVhbGl0eSBjb25kaXRpb24gb24gYWxsIGF0dHJpYnV0ZXMgb2YgdGhl IHN0YXRpc3RpYworCisgICAgKDIpIHdlIGZpbmQgYSBtYXRjaGluZyBpdGVt IGluIHRoZSBNQ1YgbGlzdAorCitJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUg TUNWIGl0ZW0gcmVwcmVzZW50cyBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBj bGF1c2VzLAorYW5kIHRoZSBzZWxlY3Rpdml0eSBlc3RpbWF0ZSBpcyBjb21w bGV0ZSAoaS5lLiB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0KK2VzdGltYXRp b24gdXNpbmcgdGhlIGhpc3RvZ3JhbSkuIFRoaXMgaXMgd2hhdCB3ZSBjYWxs ICdmdWxsIG1hdGNoJy4KKworV2hlbiBvbmx5ICgxKSBob2xkcywgYnV0IHRo ZXJlJ3Mgbm8gbWF0Y2hpbmcgTUNWIGl0ZW0sIHdlIGRvbid0IGtub3cgd2hl dGhlcgordGhlcmUgYXJlIG5vIHN1Y2ggcm93cyBvciBqdXN0IGFyZSBub3Qg dmVyeSBmcmVxdWVudC4gV2UgY2FuIGhvd2V2ZXIgdXNlIHRoZQorZnJlcXVl bmN5IG9mIHRoZSBsZWFzdCBmcmVxdWVudCBNQ1YgaXRlbSBhcyBhbiB1cHBl ciBib3VuZCBmb3IgdGhlIHNlbGVjdGl2aXR5LgorCitGb3IgYSBjb21iaW5h dGlvbiBvZiBlcXVhbGl0eSBjb25kaXRpb25zIChub3QgZnVsbC1tYXRjaCBj YXNlKSB3ZSBjYW4gY2xhbXAgdGhlCitzZWxlY3Rpdml0eSBieSB0aGUgbWlu aW11bSBvZiBzZWxlY3Rpdml0aWVzIGZvciBlYWNoIGNvbmRpdGlvbi4gRm9y IGV4YW1wbGUgaWYKK3dlIGtub3cgdGhlIG51bWJlciBvZiBkaXN0aW5jdCB2 YWx1ZXMgZm9yIGVhY2ggY29sdW1uLCB3ZSBjYW4gdXNlIDEvbmRpc3RpbmN0 CithcyBhIHBlci1jb2x1bW4gZXN0aW1hdGUuIE9yIHJhdGhlciAxL25kaXN0 aW5jdCArIHNlbGVjdGl2aXR5IGRlcml2ZWQgZnJvbSB0aGUKK01DViBsaXN0 LgorCitXZSBzaG91bGQgYWxzbyBwcm9iYWJseSBvbmx5IHVzZSB0aGUgJ3Jl c2lkdWFsIG5kaXN0aW5jdCcgYnkgZXhsdWRpbmcgdGhlIGl0ZW1zCitpbmNs dWRlZCBpbiB0aGUgTUNWIGxpc3QgKGFuZCBhbHNvIHJlc2lkdWFsIGZyZXF1 ZW5jeSk6CisKKyAgICAgZiA9ICgxLjAgLSBzdW0oTUNWIGZyZXF1ZW5jaWVz KSkgLyAobmRpc3RpbmN0IC0gbmRpc3RpbmN0KE1DViBsaXN0KSkKKworYnV0 IGl0J3Mgd29ydGggcG9pbnRpbmcgb3V0IHRoZSBuZGlzdGluY3QgdmFsdWVz IGFyZSBtdWx0aS12YXJpYXRlIGZvciB0aGUKK2NvbHVtbnMgcmVmZXJlbmNl ZCBieSB0aGUgZXF1YWxpdHkgY29uZGl0aW9ucy4KKworTm90ZTogT25seSB0 aGUgImZ1bGwgbWF0Y2giIGxpbWl0IGlzIGN1cnJlbnRseSBpbXBsZW1lbnRl ZC4KKworCitIYXNoZWQgTUNWIChub3QgeWV0IGltcGxlbWVudGVkKQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVndWxhciBNQ1Yg bGlzdHMgaGF2ZSB0byBpbmNsdWRlIGFjdHVhbCB2YWx1ZXMgZm9yIGVhY2gg aXRlbSwgc28gaWYgdGhvc2UgaXRlbXMKK2FyZSBsYXJnZSB0aGUgbGlzdCBt YXkgYmUgcXVpdGUgbGFyZ2UuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZv ciBtdWx0aS12YXJpYXRlCitNQ1YgbGlzdHMsIGFsdGhvdWdoIHRoZSBjdXJy ZW50IGltcGxlbWVudGF0aW9uIHBhcnRpYWxseSBtaXRpZ2F0ZXMgdGhpcyBi eQorcGVyZm9ybWluZyBkZS1kdXBsaWNhdGluZyB0aGUgdmFsdWVzIGJlZm9y ZSBzdG9yaW5nIHRoZW0gb24gZGlzay4KKworSXQncyBwb3NzaWJsZSB0byBv bmx5IHN0b3JlIGhhc2hlcyAoMzItYml0IHZhbHVlcykgaW5zdGVhZCBvZiB0 aGUgYWN0dWFsIHZhbHVlcywKK3NpZ25pZmljYW50bHkgcmVkdWNpbmcgdGhl IHNwYWNlIHJlcXVpcmVtZW50cy4gT2J2aW91c2x5LCB0aGlzIHdvdWxkIG9u bHkgbWFrZQordGhlIE1DViBsaXN0cyB1c2VmdWwgZm9yIGVzdGltYXRpbmcg ZXF1YWxpdHkgY29uZGl0aW9ucyAoYXNzdW1pbmcgdGhlIDMyLWJpdAoraGFz aGVzIG1ha2UgdGhlIGNvbGxpc2lvbnMgcmFyZSBlbm91Z2gpLgorCitUaGlz IG1pZ2h0IGFsc28gY29tcGxpY2F0ZSBtYXRjaGluZyB0aGUgY29sdW1ucyB0 byBhdmFpbGFibGUgc3RhdHMuCisKKworVE9ETyBDb25zaWRlciBpbXBsZW1l bnRpbmcgaGFzaGVkIE1DViBsaXN0LCBzdG9yaW5nIGp1c3QgMzItYml0IGhh c2hlcyBpbnN0ZWFkCisgICAgIG9mIHRoZSBhY3R1YWwgdmFsdWVzLiBUaGlz IHR5cGUgb2YgTUNWIGxpc3Qgd2lsbCBiZSB1c2VmdWwgb25seSBmb3IKKyAg ICAgZXN0aW1hdGluZyBlcXVhbGl0eSBjbGF1c2VzLCBhbmQgd2lsbCByZWR1 Y2Ugc3BhY2UgcmVxdWlyZW1lbnRzIGZvciBsYXJnZQorICAgICB2YXJsZW5h IHR5cGVzIChpbiBzdWNoIGNhc2VzIHdlIHVzdWFsbHkgb25seSB3YW50IGVx dWFsaXR5IGFueXdheSkuCisKK1RPRE8gQ3VycmVudGx5IHRoZXJlJ3Mgbm8g bG9naWMgdG8gY29uc2lkZXIgYnVpbGRpbmcgb25seSBhIE1DViBsaXN0IChh bmQgbm90CisgICAgIGJ1aWxkaW5nIHRoZSBoaXN0b2dyYW0gYXQgYWxsKSwg ZXhjZXB0IGZvciBkb2luZyB0aGlzIGRlY2lzaW9uIG1hbnVhbGx5IGluCisg ICAgIEFERCBTVEFUSVNUSUNTLgorCisKK0luc3BlY3RpbmcgdGhlIE1DViBs aXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnNwZWN0aW5nIHRo ZSByZWd1bGFyIChwZXItYXR0cmlidXRlKSBNQ1YgbGlzdHMgaXMgdHJpdmlh bCwgYXMgaXQncyBlbm91Z2gKK3RvIHNlbGVjdCB0aGUgY29sdW1ucyBmcm9t IHBnX3N0YXRzIC0gdGhlIGRhdGEgaXMgZW5jb2RlZCBhcyBhbnlhcnJheXMs IHNvIHdlCitzaW1wbHkgZ2V0IHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9m IHRoZSBhcnJheXMuCisKK1dpdGggbXVsdGl2YXJpYXRlIE1DViBsaXRzIGl0 J3Mgbm90IHRoYXQgc2ltcGxlIGR1ZSB0byB0aGUgcG9zc2libGUgbWl4IG9m CitkYXRhIHR5cGVzLiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBwcm9kdWNl IHNpbWlsYXIgYXJyYXktbGlrZSByZXByZXNlbnRhdGlvbiwKK2J1dCB0aGF0 J2QgdW5uZWNlc3NhcmlseSBjb21wbGljYXRlIGZ1cnRoZXIgcHJvY2Vzc2lu ZyBhbmQgYW5hbHlzaXMgb2YgdGhlIE1DVgorbGlzdC4gSW5zdGVhZCwgdGhl cmUncyBhIFNSRiBmdW5jdGlvbiBwcm92aWRpbmcgdmFsdWVzLCBmcmVxdWVu Y2llcyBldGMuCisKKyAgICBTRUxFQ1QgKiBGUk9NIHBnX212X21jdl9pdGVt cygpOworCitJdCBoYXMgdHdvIGlucHV0IHBhcmFtZXRlcnM6CisKKyAgICBv aWQgICAtIE9JRCBvZiB0aGUgTUNWIGxpc3QgKHBnX212X3N0YXRpc3RpYy5z dGFvaWQpCisKK2FuZCBwcm9kdWNlcyBhIHRhYmxlIHdpdGggdGhlc2UgY29s dW1uczoKKworICAgIC0gaXRlbSBJRCAoMC4uLm5pdGVtcy0xKQorICAgIC0g dmFsdWVzIChzdHJpbmcgYXJyYXkpCisgICAgLSBudWxscyBvbmx5IChib29s ZWFuIGFycmF5KQorICAgIC0gZnJlcXVlbmN5IChkb3VibGUgcHJlY2lzaW9u KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFE TUUuc3RhdHMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5z dGF0cwppbmRleCBhMzhlYTdiLi41YzVjNTlhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cworKysgYi9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cwpAQCAtOCw5ICs4 LDUwIEBAIG5vdCB0cnVlLCByZXN1bHRpbmcgaW4gZXN0aW1hdGlvbiBlcnJv cnMuCiBNdWx0aXZhcmlhdGUgc3RhdHMgdHJhY2sgZGlmZmVyZW50IHR5cGVz IG9mIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBjb2x1bW5zLAogaG9wZWZ1 bGx5IGltcHJvdmluZyB0aGUgZXN0aW1hdGVzLgogCi1DdXJyZW50bHkgd2Ug b25seSBoYXZlIG9uZSBraW5kIG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNz IC0gc29mdCBmdW5jdGlvbmFsCi1kZXBlbmRlbmNpZXMsIGFuZCB3ZSB1c2Ug aXQgdG8gaW1wcm92ZSBlc3RpbWF0ZXMgb2YgZXF1YWxpdHkgY2xhdXNlcy4g U2VlCi1SRUFETUUuZGVwZW5kZW5jaWVzIGZvciBkZXRhaWxzLgorCitUeXBl cyBvZiBzdGF0aXN0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cnJl bnRseSB3ZSBvbmx5IGhhdmUgdHdvIGtpbmRzIG9mIG11bHRpdmFyaWF0ZSBz dGF0aXN0aWNzCisKKyAgICAoYSkgc29mdCBmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcyAoUkVBRE1FLmRlcGVuZGVuY2llcykKKworICAgIChiKSBNQ1YgbGlz dHMgKFJFQURNRS5tY3YpCisKKworQ29tcGF0aWJsZSBjbGF1c2UgdHlwZXMK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggdHlwZSBvZiBzdGF0 aXN0aWNzIG1heSBiZSB1c2VkIHRvIGVzdGltYXRlIHNvbWUgc3Vic2V0IG9m IGNsYXVzZSB0eXBlcy4KKworICAgIChhKSBmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcyAtIGVxdWFsaXR5IGNsYXVzZXMgKEFORCksIHBvc3NpYmx5IElTIE5V TEwKKworICAgIChiKSBNQ1YgbGlzdCAtIGVxdWFsaXR5IGFuZCBpbmVxdWFs aXR5IGNsYXVzZXMsIElTIFtOT1RdIE5VTEwsIEFORC9PUgorCitDdXJyZW50 bHkgb25seSBzaW1wbGUgb3BlcmF0b3IgY2xhdXNlcyAoVmFyIG9wIENvbnN0 KSBhcmUgc3VwcG9ydGVkLCBidXQgaXQncworcG9zc2libGUgdG8gc3VwcG9y dCBtb3JlIGNvbXBsZXggY2xhdXNlIHR5cGVzLCBlLmcuIChWYXIgb3AgVmFy KS4KKworCitDb21wbGV4IGNsYXVzZXMKKy0tLS0tLS0tLS0tLS0tLQorCitX ZSBhbHNvIHN1cHBvcnQgZXN0aW1hdGluZyBtb3JlIGNvbXBsZXggY2xhdXNl cyAtIGVzc2VudGlhbGx5IEFORC9PUiBjbGF1c2VzCit3aXRoIChWYXIgb3Ag Q29uc3QpIGFzIGxlYXZlcywgYXMgbG9uZyBhcyBhbGwgdGhlIHJlZmVyZW5j ZWQgYXR0cmlidXRlcyBhcmUKK2NvdmVyZWQgYnkgYSBzaW5nbGUgc3RhdGlz dGljcy4KKworRm9yIGV4YW1wbGUgdGhpcyBjb25kaXRpb24KKworICAgIChh PTEpIEFORCAoKGI9MikgT1IgKChjPTMpIEFORCAoZD00KSkpCisKK21heSBi ZSBlc3RpbWF0ZWQgdXNpbmcgc3RhdGlzdGljcyBvbiAoYSxiLGMsZCkuIElm IHdlIG9ubHkgaGF2ZSBzdGF0aXN0aWNzIG9uCisoYixjLGQpIHdlIG1heSBl c3RpbWF0ZSB0aGUgc2Vjb25kIHBhcnQsIGFuZCBlc3RpbWF0ZSAoYT0xKSB1 c2luZyBzaW1wbGUgc3RhdHMuCisKK0lmIHdlIG9ubHkgaGF2ZSBzdGF0aXN0 aWNzIG9uIChhLGIsYykgd2UgY2FuJ3QgYXBwbHkgaXQgYXQgYWxsIGF0IHRo aXMgcG9pbnQsCitidXQgaXQncyB3b3J0aCBwb2ludGluZyBvdXQgY2xhdXNl bGlzdF9zZWxlY3Rpdml0eSgpIHdvcmtzIHJlY3Vyc2l2ZWx5IGFuZCB3aGVu CitoYW5kbGluZyB0aGUgc2Vjb25kIHBhcnQgKHRoZSBPUi1jbGF1c2UpLCB3 ZSdsbCBiZSBhYmxlIHRvIGFwcGx5IHRoZSBzdGF0aXN0aWNzLgorCitOb3Rl OiBUaGUgbXVsdGktc3RhdGlzdGljcyBlc3RpbWF0aW9uIHBhdGNoIGFsc28g bWFrZXMgaXQgcG9zc2libGUgdG8gcGFzcyBzb21lCitjbGF1c2VzIGFzICdj b25kaXRpb25zJyBpbnRvIHRoZSBkZWVwZXIgcGFydHMgb2YgdGhlIGV4cHJl c3Npb24gdHJlZS4KIAogCiBTZWxlY3Rpdml0eSBlc3RpbWF0aW9uCkBAIC0y MywxNCArNjQsNDggQEAgV2hlbiBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5LCB3 ZSBhaW0gdG8gYWNoaWV2ZSBzZXZlcmFsIHRoaW5nczoKICAgICAoYikgbWlu aW1pemUgdGhlIG92ZXJoZWFkLCBlc3BlY2lhbGx5IHdoZW4gbm8gc3VpdGFi bGUgbXVsdGl2YXJpYXRlIHN0YXRzCiAgICAgICAgIGV4aXN0IChzbyBpZiB5 b3UgYXJlIG5vdCB1c2luZyBtdWx0aXZhcmlhdGUgc3RhdHMsIHRoZXJlJ3Mg bm8gb3ZlcmhlYWQpCiAKLVRoaXMgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eSgp IHBlcmZvcm1zIHNldmVyYWwgaW5leHBlbnNpdmUgY2hlY2tzIGZpcnN0LCBi ZWZvcmUKK1RodXMgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eSgpIHBlcmZvcm1z IHNldmVyYWwgaW5leHBlbnNpdmUgY2hlY2tzIGZpcnN0LCBiZWZvcmUKIGV2 ZW4gYXR0ZW1wdGluZyB0byBkbyB0aGUgbW9yZSBleHBlbnNpdmUgZXN0aW1h dGlvbi4KIAogICAgICgxKSBjaGVjayBpZiB0aGVyZSBhcmUgbXVsdGl2YXJp YXRlIHN0YXRzIG9uIHRoZSByZWxhdGlvbgogCi0gICAgKDIpIGNoZWNrIHRo ZXJlIGFyZSBhdCBsZWFzdCB0d28gYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5 IGNsYXVzZXMgY29tcGF0aWJsZQotICAgICAgICB3aXRoIG11bHRpdmFyaWF0 ZSBzdGF0aXN0aWNzIChlcXVhbGl0eSBjbGF1c2VzIGZvciBmdW5jLiBkZXBl bmRlbmNpZXMpCisgICAgKDIpIGNoZWNrIHRoYXQgdGhlcmUgYXJlIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzIG9uIHRoZSB0YWJsZSwgYW5kIHRoYXQKKyAg ICAgICAgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIHJlZmVy ZW5jZWQgYnkgY29tcGF0aWJsZSBjbGF1c2VzCisgICAgICAgIChlcXVhbGl0 eSBjbGF1c2VzIGZvciBmdW5jLiBkZXBlbmRlbmNpZXMpCiAKICAgICAoMykg cGVyZm9ybSByZWR1Y3Rpb24gb2YgZXF1YWxpdHkgY2xhdXNlcyB1c2luZyBm dW5jLiBkZXBlbmRlbmNpZXMKIAotICAgICg0KSBlc3RpbWF0ZSB0aGUgcmVk dWNlZCBsaXN0IG9mIGNsYXVzZXMgdXNpbmcgcmVndWxhciBzdGF0aXN0aWNz CisgICAgKDQpIGNoZWNrIHRoYXQgdGhlcmUgYXJlIG11bHRpdmFyaWF0ZSBN Q1YgbGlzdHMgb24gdGhlIHRhYmxlLCBhbmQgdGhhdAorICAgICAgICB0aGVy ZSBhcmUgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBj b21wYXRpYmxlIGNsYXVzZXMKKyAgICAgICAgKGVxdWFsaXRpZXMsIGluZXF1 YWxpdGllcywgZXRjLikKKworICAgICg1KSBmaW5kIHRoZSBiZXN0IG11bHRp dmFyaWF0ZSBzdGF0aXN0aWNzIChtYXRjaGluZyB0aGUgbW9zdCBjb25kaXRp b25zKQorICAgICAgICBhbmQgdXNlIGl0IHRvIGNvbXB1dGUgdGhlIGVzdGlt YXRlCisKKyAgICAoNikgZXN0aW1hdGUgdGhlIHJlbWFpbmluZyBjbGF1c2Vz IChub3QgZXN0aW1hdGVkIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cykKKyAg ICAgICAgdXNpbmcgdGhlIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0aXN0aWNz CisKK1doZW5ldmVyIHdlIGZpbmQgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIHN0 YXRzLCB3ZSBza2lwIHRoZSBleHBlbnNpdmUgc3RlcHMuCisKKworRnVydGhl ciAocG9zc2libHkgY3JhenkpIGlkZWFzCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworQ3VycmVudGx5IHRoZSBjbGF1c2VzIGFyZSBvbmx5 IGVzdGltYXRlZCB1c2luZyBhIHNpbmdsZSBzdGF0aXN0aWNzLCBldmVuIGlm Cit0aGVyZSBhcmUgbXVsdGlwbGUgY2FuZGlkYXRlIHN0YXRpc3RpY3MgLSBm b3IgZXhhbXBsZSBhc3N1bWUgd2UgaGF2ZSBzdGF0aXN0aWNzCitvbiAoYSxi LGMpIGFuZCAoYixjLGQpLCBhbmQgZXN0aW1hdGUgY29uZGl0aW9ucworCisg ICAgKGIgPSAxKSBBTkQgKGMgPSAyKQorCitUaGVuIGJvdGggc3RhdGlzdGlj cyBtYXkgYmUgdXNlZCwgYnV0IHdlIG9ubHkgdXNlIG9uZSBvZiB0aGVtLiBN YXliZSB3ZSBjb3VsZAordXNlIGNvbXB1dGUgZXN0aW1hdGVzIHVzaW5nIGFs bCBjYW5kaWRhdGUgc3RhdHMsIGFuZCBzb21laG93IGFnZ3JlZ2F0ZSB0aGVt CitpbnRvIHRoZSBmaW5hbCBlc3RpbWF0ZSBieSB1c2luZyBhdmVyYWdlIG9y IG1lZGlhbi4KKworU29tZSBzdGF0cyBtYXkgZ2l2ZSBiZXR0ZXIgZXN0aW1h dGVzIHRoYW4gb3RoZXJzLCBidXQgaXQncyB2ZXJ5IGRpZmZpY3VsdCB0byBz YXkKK2luIGFkdmFuY2Ugd2hpY2ggc3RhdHMgYXJlIHRoZSBiZXN0IChpdCBk ZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYnVja2V0cywgbnVtYmVyCitvZiBh ZGRpdGlvbmFsIGNvbHVtbnMgbm90IHJlZmVyZW5jZWQgaW4gdGhlIGNsYXVz ZXMsIHR5cGUgb2YgY29uZGl0aW9uIGV0Yy4pLgorCitCdXQgb2YgY291cnNl LCB0aGlzIG1heSByZXN1bHQgaW4gZXhwZW5zaXZlIGVzdGltYXRpb24gKENQ VS13aXNlKS4KKworU28gd2UgbWlnaHQgYWRkIGEgR1VDIHRvIGNob29zZSBi ZXR3ZWVuIGEgc2ltcGxlIChzaW5nbGUgc3RhdGlzdGljcykgYW5kIHRodXMK K211bHRpLXN0YXRpc3RpYyBlc3RpbWF0aW9uLCBwb3NzaWJseSB0YWJsZS1s ZXZlbCBwYXJhbWV0ZXIgKEFMVEVSIFRBQkxFIC4uLikuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwppbmRleCBiZDIwMGJjLi5k MWRhNzE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29t bW9uLmMKQEAgLTE2LDEyICsxNiwxNCBAQAogCiAjaW5jbHVkZSAiY29tbW9u LmgiCiAKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorCiBzdGF0aWMgVmFj QXR0clN0YXRzICoqIGxvb2t1cF92YXJfYXR0cl9zdGF0cyhpbnQydmVjdG9y ICphdHRycywKLQkJCQkJCQkJCSAgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMg Kip2YWNhdHRyc3RhdHMpOworCQkJCQkJCQkJCQkgaW50IG5hdHRzLAorCQkJ CQkJCQkJCQkgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKIAogc3Rh dGljIExpc3QqIGxpc3RfbXZfc3RhdHMoT2lkIHJlbGlkKTsKIAotCiAvKgog ICogQ29tcHV0ZSByZXF1ZXN0ZWQgbXVsdGl2YXJpYXRlIHN0YXRzLCB1c2lu ZyB0aGUgcm93cyBzYW1wbGVkIGZvciB0aGUKICAqIHBsYWluIChzaW5nbGUt Y29sdW1uKSBzdGF0cy4KQEAgLTQ5LDYgKzUxLDggQEAgYnVpbGRfbXZfc3Rh dHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpy b3dzLAogCQlpbnQJCQkJajsKIAkJTVZTdGF0aXN0aWNJbmZvICpzdGF0ID0g KE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChsYyk7CiAJCU1WRGVwZW5kZW5j aWVzCWRlcHMgID0gTlVMTDsKKwkJTUNWTGlzdAkJbWN2bGlzdCAgID0gTlVM TDsKKwkJaW50IG51bXJvd3NfZmlsdGVyZWQgID0gMDsKIAogCQlWYWNBdHRy U3RhdHMgICoqc3RhdHMgID0gTlVMTDsKIAkJaW50CQkJCW51bWF0dHMgICA9 IDA7CkBAIC04Nyw4ICs5MSwxMiBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlv biBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCWlm IChzdGF0LT5kZXBzX2VuYWJsZWQpCiAJCQlkZXBzID0gYnVpbGRfbXZfZGVw ZW5kZW5jaWVzKG51bXJvd3MsIHJvd3MsIGF0dHJzLCBzdGF0cyk7CiAKKwkJ LyogYnVpbGQgdGhlIE1DViBsaXN0ICovCisJCWlmIChzdGF0LT5tY3ZfZW5h YmxlZCkKKwkJCW1jdmxpc3QgPSBidWlsZF9tdl9tY3ZsaXN0KG51bXJvd3Ms IHJvd3MsIGF0dHJzLCBzdGF0cywgJm51bXJvd3NfZmlsdGVyZWQpOworCiAJ CS8qIHN0b3JlIHRoZSBoaXN0b2dyYW0gLyBNQ1YgbGlzdCBpbiB0aGUgY2F0 YWxvZyAqLwotCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMs IGF0dHJzKTsKKwkJdXBkYXRlX212X3N0YXRzKHN0YXQtPm12b2lkLCBkZXBz LCBtY3ZsaXN0LCBhdHRycywgc3RhdHMpOwogCX0KIH0KIApAQCAtMTY2LDYg KzE3NCw4IEBAIGxpc3RfbXZfc3RhdHMoT2lkIHJlbGlkKQogCQlpbmZvLT5z dGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKHN0YXRzLT5zdGFrZXlzLnZhbHVl cywgc3RhdHMtPnN0YWtleXMuZGltMSk7CiAJCWluZm8tPmRlcHNfZW5hYmxl ZCA9IHN0YXRzLT5kZXBzX2VuYWJsZWQ7CiAJCWluZm8tPmRlcHNfYnVpbHQg PSBzdGF0cy0+ZGVwc19idWlsdDsKKwkJaW5mby0+bWN2X2VuYWJsZWQgPSBz dGF0cy0+bWN2X2VuYWJsZWQ7CisJCWluZm8tPm1jdl9idWlsdCA9IHN0YXRz LT5tY3ZfYnVpbHQ7CiAKIAkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGlu Zm8pOwogCX0KQEAgLTE4MCw4ICsxOTAsNTYgQEAgbGlzdF9tdl9zdGF0cyhP aWQgcmVsaWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorCisvKgorICogRmlu ZCBhdHRuaW1zIG9mIE1WIHN0YXRzIHVzaW5nIHRoZSBtdm9pZC4KKyAqLwor aW50MnZlY3RvcioKK2ZpbmRfbXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9pZCAq cmVsaWQpCit7CisJQXJyYXlUeXBlICAqYXJyOworCURhdHVtCQlhZGF0dW07 CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQlodHVwOworCWludDJ2ZWN0 b3IgKmtleXM7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfbXZfc3RhdGlz dGljIGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9IHRoaXMgcmVsLiAq LworCWh0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZTVEFUT0lELAorCQkJCQkJ CSBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7CisKKwkvKiBYWFggc3lzY2Fj aGUgY29udGFpbnMgT0lEcyBvZiBkZWxldGVkIHN0YXRzIChub3QgaW52YWxp ZGF0ZWQpICovCisJaWYgKCEgSGVhcFR1cGxlSXNWYWxpZChodHVwKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBzdGFyZWxpZCAqLworCWFkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkJIEFudW1f cGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkLCAmaXNudWxsKTsKKwlBc3NlcnQo IWlzbnVsbCk7CisKKwkqcmVsaWQgPSBEYXR1bUdldE9iamVjdElkKGFkYXR1 bSk7CisKKwkvKiBzdGFrZXlzICovCisJYWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCQkgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3Rha2V5cywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOwor CisJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7CisKKwlrZXlz ID0gYnVpbGRpbnQydmVjdG9yKChpbnQxNiAqKSBBUlJfREFUQV9QVFIoYXJy KSwKKwkJCQkJCQlBUlJfRElNUyhhcnIpWzBdKTsKKwlSZWxlYXNlU3lzQ2Fj aGUoaHR1cCk7CisKKwkvKiBUT0RPIG1heWJlIHNhdmUgdGhlIGxpc3QgaW50 byByZWxjYWNoZSwgYXMgaW4gUmVsYXRpb25HZXRJbmRleExpc3QKKwkgKiAg ICAgICh3aGljaCB3YXMgdXNlZCBhcyBhbiBpbnNwaXJhdGlvbiBvZiB0aGlz IG9uZSk/LiAqLworCisJcmV0dXJuIGtleXM7Cit9CisKKwogdm9pZAotdXBk YXRlX212X3N0YXRzKE9pZCBtdm9pZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5k ZW5jaWVzLCBpbnQydmVjdG9yICphdHRycykKK3VwZGF0ZV9tdl9zdGF0cyhP aWQgbXZvaWQsCisJCQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBN Q1ZMaXN0IG1jdmxpc3QsCisJCQkJaW50MnZlY3RvciAqYXR0cnMsIFZhY0F0 dHJTdGF0cyAqKnN0YXRzKQogewogCUhlYXBUdXBsZQlzdHVwLAogCQkJCW9s ZHR1cDsKQEAgLTIwNiwxOCArMjY0LDI5IEBAIHVwZGF0ZV9tdl9zdGF0cyhP aWQgbXZvaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcywgaW50MnZl Y3RvciAqYXR0cnMpCiAJCQk9IFBvaW50ZXJHZXREYXR1bShzZXJpYWxpemVf bXZfZGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykpOwogCX0KIAorCWlmICht Y3ZsaXN0ICE9IE5VTEwpCisJeworCQlieXRlYSAqIGRhdGEgPSBzZXJpYWxp emVfbXZfbWN2bGlzdChtY3ZsaXN0LCBhdHRycywgc3RhdHMpOworCQludWxs c1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YgLTFdICAgID0gKGRhdGEg PT0gTlVMTCk7CisJCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFt Y3YgIC0gMV0gPSBQb2ludGVyR2V0RGF0dW0oZGF0YSk7CisJfQorCiAJLyog YWx3YXlzIHJlcGxhY2UgdGhlIHZhbHVlIChlaXRoZXIgYnkgYnl0ZWEgb3Ig TlVMTCkgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFk ZXBzIC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhbWN2IC0xXSA9IHRydWU7CiAKIAkvKiBhbHdheXMgY2hhbmdlIHRo ZSBhdmFpbGFiaWxpdHkgZmxhZ3MgKi8KIAludWxsc1tBbnVtX3BnX212X3N0 YXRpc3RpY19kZXBzX2J1aWx0IC0xXSA9IGZhbHNlOworCW51bGxzW0FudW1f cGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAtMV0gPSBmYWxzZTsKIAludWxs c1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzLTFdICAgICA9IGZhbHNl OwogCiAJLyogdXNlIHRoZSBuZXcgYXR0bnVtcywgaW4gY2FzZSB3ZSByZW1v dmVkIHNvbWUgZHJvcHBlZCBvbmVzICovCiAJcmVwbGFjZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfZGVwc19idWlsdC0xXSA9IHRydWU7CisJcmVwbGFjZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSB0cnVlOwog CXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMgLTFdICAg ID0gdHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBz X2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRlcGVuZGVuY2llcyAhPSBOVUxM KTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0ICAt MV0gPSBCb29sR2V0RGF0dW0obWN2bGlzdCAhPSBOVUxMKTsKIAl2YWx1ZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0gICAgPSBQb2ludGVy R2V0RGF0dW0oYXR0cnMpOwogCiAJLyogSXMgdGhlcmUgYWxyZWFkeSBhIHBn X212X3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovCkBA IC0yNDYsNiArMzE1LDIxIEBAIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQs IE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcywgaW50MnZlY3RvciAqYXR0 cnMpCiAJaGVhcF9jbG9zZShzZCwgUm93RXhjbHVzaXZlTG9jayk7CiB9CiAK KworaW50Cittdl9nZXRfaW5kZXgoQXR0ck51bWJlciB2YXJhdHRubywgaW50 MnZlY3RvciAqIHN0YWtleXMpCit7CisJaW50IGksIGlkeCA9IDA7CisJZm9y IChpID0gMDsgaSA8IHN0YWtleXMtPmRpbTE7IGkrKykKKwl7CisJCWlmIChz dGFrZXlzLT52YWx1ZXNbaV0gPCB2YXJhdHRubykKKwkJCWlkeCArPSAxOwor CQllbHNlCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGlkeDsKK30KKwogLyog bXVsdGktdmFyaWF0ZSBzdGF0cyBjb21wYXJhdG9yICovCiAKIC8qCkBAIC0y NTYsMTEgKzM0MCwxNSBAQCB1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLCBN VkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJz KQogaW50CiBjb21wYXJlX3NjYWxhcnNfc2ltcGxlKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykKIHsKLQlEYXR1bQkJZGEgPSAq KERhdHVtKilhOwotCURhdHVtCQlkYiA9ICooRGF0dW0qKWI7Ci0JU29ydFN1 cHBvcnQgc3N1cD0gKFNvcnRTdXBwb3J0KSBhcmc7CisJcmV0dXJuIGNvbXBh cmVfZGF0dW1zX3NpbXBsZSgqKERhdHVtKilhLAorCQkJCQkJCQkgKihEYXR1 bSopYiwKKwkJCQkJCQkJIChTb3J0U3VwcG9ydClhcmcpOworfQogCi0JcmV0 dXJuIEFwcGx5U29ydENvbXBhcmF0b3IoZGEsIGZhbHNlLCBkYiwgZmFsc2Us IHNzdXApOworaW50Citjb21wYXJlX2RhdHVtc19zaW1wbGUoRGF0dW0gYSwg RGF0dW0gYiwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4gQXBwbHlT b3J0Q29tcGFyYXRvcihhLCBmYWxzZSwgYiwgZmFsc2UsIHNzdXApOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9j b21tb24uaCBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmgK aW5kZXggZDk2NDIyZC4uOWYxYmQ1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9tdnN0YXRzL2NvbW1vbi5oCkBAIC00Niw3ICs0NiwxNSBAQCB0eXBl ZGVmIHN0cnVjdAogCURhdHVtCQl2YWx1ZTsJCQkvKiBhIGRhdGEgdmFsdWUg Ki8KIAlpbnQJCQl0dXBubzsJCQkvKiBwb3NpdGlvbiBpbmRleCBmb3IgdHVw bGUgaXQgY2FtZSBmcm9tICovCiB9IFNjYWxhckl0ZW07Ci0gCisKKy8qIChk ZSlzZXJpYWxpemF0aW9uIGluZm8gKi8KK3R5cGVkZWYgc3RydWN0IERpbWVu c2lvbkluZm8geworCWludAkJbnZhbHVlczsJLyogbnVtYmVyIG9mIGRlZHVw bGljYXRlZCB2YWx1ZXMgKi8KKwlpbnQJCW5ieXRlczsJCS8qIG51bWJlciBv ZiBieXRlcyAoc2VyaWFsaXplZCkgKi8KKwlpbnQJCXR5cGxlbjsJCS8qIHBn X3R5cGUudHlwbGVuICovCisJYm9vbAl0eXBieXZhbDsJLyogcGdfdHlwZS50 eXBieXZhbCAqLworfSBEaW1lbnNpb25JbmZvOworCiAvKiBtdWx0aS1zb3J0 ICovCiB0eXBlZGVmIHN0cnVjdCBNdWx0aVNvcnRTdXBwb3J0RGF0YSB7CiAJ aW50CQkJCW5kaW1zOwkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgc3VwcG9y dGVkIGJ5IHRoZSAqLwpAQCAtNzEsNSArNzksNiBAQCBpbnQgbXVsdGlfc29y dF9jb21wYXJlX2RpbShpbnQgZGltLCBjb25zdCBTb3J0SXRlbSAqYSwKIAkJ CQkJCSAgIGNvbnN0IFNvcnRJdGVtICpiLCBNdWx0aVNvcnRTdXBwb3J0IG1z cyk7CiAKIC8qIGNvbXBhcmF0b3JzLCB1c2VkIHdoZW4gY29uc3RydWN0aW5n IG11bHRpdmFyaWF0ZSBzdGF0cyAqLworaW50IGNvbXBhcmVfZGF0dW1zX3Np bXBsZShEYXR1bSBhLCBEYXR1bSBiLCBTb3J0U3VwcG9ydCBzc3VwKTsKIGlu dCBjb21wYXJlX3NjYWxhcnNfc2ltcGxlKGNvbnN0IHZvaWQgKmEsIGNvbnN0 IHZvaWQgKmIsIHZvaWQgKmFyZyk7CiBpbnQgY29tcGFyZV9zY2FsYXJzX3Bh cnRpdGlvbihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICph cmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9t Y3YuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvbWN2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxYzkzNAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvbWN2LmMK QEAgLTAsMCArMSwxMDk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBtY3YuYworICoJICBQT1NUR1JFUyBtdWx0aXZhcmlh dGUgTUNWIGxpc3RzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9tY3YuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZm1n ci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKworI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisg KiBFYWNoIHNlcmlhbGl6ZWQgaXRlbSBuZWVkcyB0byBzdG9yZSAoaW4gdGhp cyBvcmRlcik6CisgKgorICogLSBpbmRleGVzICAgICAgICAgICAgICAobmRp bSAqIHNpemVvZihpbnQzMikpCisgKiAtIG51bGwgZmxhZ3MgICAgICAgICAg IChuZGltICogc2l6ZW9mKGJvb2wpKQorICogLSBmcmVxdWVuY3kgICAgICAg ICAgICAoc2l6ZW9mKGRvdWJsZSkpCisgKgorICogU28gaW4gdG90YWw6Cisg KgorICogICBuZGltICogKHNpemVvZihpbnQzMikgKyBzaXplb2YoYm9vbCkp ICsgc2l6ZW9mKGRvdWJsZSkKKyAqLworI2RlZmluZSBJVEVNX1NJWkUobmRp bXMpCVwKKwkobmRpbXMgKiAoc2l6ZW9mKHVpbnQxNikgKyBzaXplb2YoYm9v bCkpICsgc2l6ZW9mKGRvdWJsZSkpCisKKy8qIHBvaW50ZXJzIGludG8gYSBm bGF0IHNlcmlhbGl6ZWQgaXRlbSBvZiBJVEVNX1NJWkUobikgYnl0ZXMgKi8K KyNkZWZpbmUgSVRFTV9JTkRFWEVTKGl0ZW0pCQkJKCh1aW50MTYqKWl0ZW0p CisjZGVmaW5lIElURU1fTlVMTFMoaXRlbSxuZGltcykJCSgoYm9vbCopKElU RU1fSU5ERVhFUyhpdGVtKSArIG5kaW1zKSkKKyNkZWZpbmUgSVRFTV9GUkVR VUVOQ1koaXRlbSxuZGltcykJKChkb3VibGUqKShJVEVNX05VTExTKGl0ZW0s bmRpbXMpICsgbmRpbXMpKQorCisvKgorICogQnVpbGRzIE1DViBsaXN0IGZy b20gc2FtcGxlIHJvd3MsIGFuZCByZW1vdmVzIHJvd3MgcmVwcmVzZW50ZWQg YnkKKyAqIHRoZSBNQ1YgbGlzdCBmcm9tIHRoZSBzYW1wbGUgKHRoZSBudW1i ZXIgb2YgcmVtYWluaW5nIHNhbXBsZSByb3dzIGlzCisgKiByZXR1cm5lZCBi eSB0aGUgbnVtcm93c19maWx0ZXJlZCBwYXJhbWV0ZXIpLgorICoKKyAqIFRo ZSBtZXRob2QgaXMgcXVpdGUgc2ltcGxlIC0gaW4gc2hvcnQgaXQgZG9lcyBh Ym91dCB0aGVzZSBzdGVwczoKKyAqCisgKiAgICAgICAoMSkgc29ydCB0aGUg ZGF0YSAoZGVmYXVsdCBjb2xsYXRpb24sICc8JyBmb3IgdGhlIGRhdGEgdHlw ZSkKKyAqCisgKiAgICAgICAoMikgY291bnQgZGlzdGluY3QgZ3JvdXBzLCBk ZWNpZGUgaG93IG1hbnkgdG8ga2VlcAorICoKKyAqICAgICAgICgzKSBidWls ZCB0aGUgTUNWIGxpc3QgdXNpbmcgdGhlIHRocmVzaG9sZCBkZXRlcm1pbmVk IGluICgyKQorICoKKyAqICAgICAgICg0KSByZW1vdmUgcm93cyByZXByZXNl bnRlZCBieSB0aGUgTUNWIGZyb20gdGhlIHNhbXBsZQorICoKKyAqIEZvciBt b3JlIGRldGFpbHMsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlIGNvZGUuCisg KgorICogRklYTUUgVXNlIG1heF9tY3ZfaXRlbXMgZnJvbSBBTFRFUiBUQUJM RSBBREQgU1RBVElTVElDUyBjb21tYW5kLgorICoKKyAqIEZJWE1FIFNpbmds ZS1kaW1lbnNpb25hbCBNQ1YgaXMgc29ydGVkIGJ5IGZyZXF1ZW5jeSAoZGVz Y2VuZGluZykuIFdlCisgKiAgICAgICBzaG91bGQgZG8gdGhhdCB0b28sIGJl Y2F1c2Ugd2hlbiB3YWxraW5nIHRocm91Z2ggdGhlIGxpc3Qgd2UKKyAqICAg ICAgIHdhbnQgdG8gY2hlY2sgdGhlIG1vc3QgZnJlcXVlbnQgaXRlbXMgZmly c3QuCisgKgorICogVE9ETyBXZSdyZSB1c2luZyBEYXR1bSAoOEIpLCBldmVu IGZvciBkYXRhIHR5cGVzIChlLmcuIGludDQgb3IKKyAqICAgICAgZmxvYXQ0 KS4gTWF5YmUgd2UgY291bGQgc2F2ZSBzb21lIHNwYWNlIGhlcmUsIGJ1dCB0 aGUgYnl0ZWEKKyAqICAgICAgY29tcHJlc3Npb24gc2hvdWxkIGhhbmRsZSBp dCBqdXN0IGZpbmUuCisgKgorICogVE9ETyBUaGlzIHByb2JhYmx5IHNob3Vs ZCBub3QgdXNlIHRoZSBuZGlzdGluY3QgZGlyZWN0bHkgKGFzIGNvbXB1dGVk CisgKiAgICAgIGZyb20gdGhlIHRhYmxlLCBidXQgcmF0aGVyIGVzdGltYXRl IHRoZSBudW1iZXIgb2YgZGlzdGluY3QKKyAqICAgICAgdmFsdWVzIGluIHRo ZSB0YWJsZSksIG5vPworICovCitNQ1ZMaXN0CitidWlsZF9tdl9tY3ZsaXN0 KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0 dHJzLAorCQkJCQkgIFZhY0F0dHJTdGF0cyAqKnN0YXRzLCBpbnQgKm51bXJv d3NfZmlsdGVyZWQpCit7CisJaW50IGksIGo7CisJaW50IG51bWF0dHJzID0g YXR0cnMtPmRpbTE7CisJaW50IG5kaXN0aW5jdCA9IDA7CisJaW50IG1jdl90 aHJlc2hvbGQgPSAwOworCWludCBjb3VudCA9IDA7CisJaW50IG5pdGVtcyA9 IDA7CisKKwlNQ1ZMaXN0CW1jdmxpc3QgPSBOVUxMOworCisJLyogU29ydCBi eSBtdWx0aXBsZSBjb2x1bW5zICh1c2luZyBhcnJheSBvZiBTb3J0U3VwcG9y dCkgKi8KKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRfaW5p dChudW1hdHRycyk7CisKKwkvKgorCSAqIFByZWFsbG9jYXRlIHNwYWNlIGZv ciBhbGwgdGhlIGl0ZW1zIGFzIGEgc2luZ2xlIGNodW5rLCBhbmQgcG9pbnQK KwkgKiB0aGUgaXRlbXMgdG8gdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRo ZSBhcnJheS4KKwkgKi8KKwlTb3J0SXRlbSAgICppdGVtcyAgPSAoU29ydEl0 ZW0qKXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihTb3J0SXRlbSkpOworCURh dHVtCSAgICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVt KSAqIG51bXJvd3MgKiBudW1hdHRycyk7CisJYm9vbAkgICAqaXNudWxsID0g KGJvb2wqKXBhbGxvYzAoc2l6ZW9mKGJvb2wpICogbnVtcm93cyAqIG51bWF0 dHJzKTsKKworCS8qIGtlZXAgYWxsIHRoZSByb3dzIGJ5IGRlZmF1bHQgKGFz IGlmIHRoZXJlIHdhcyBubyBNQ1YgbGlzdCkgKi8KKwkqbnVtcm93c19maWx0 ZXJlZCA9IG51bXJvd3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsg aSsrKQorCXsKKwkJaXRlbXNbaV0udmFsdWVzID0gJnZhbHVlc1tpICogbnVt YXR0cnNdOworCQlpdGVtc1tpXS5pc251bGwgPSAmaXNudWxsW2kgKiBudW1h dHRyc107CisJfQorCisJLyogbG9hZCB0aGUgdmFsdWVzL251bGwgZmxhZ3Mg ZnJvbSBzYW1wbGUgcm93cyAqLworCWZvciAoaiA9IDA7IGogPCBudW1yb3dz OyBqKyspCisJCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCQkJ aXRlbXNbal0udmFsdWVzW2ldID0gaGVhcF9nZXRhdHRyKHJvd3Nbal0sIGF0 dHJzLT52YWx1ZXNbaV0sCisJCQkJCQkJCXN0YXRzW2ldLT50dXBEZXNjLCAm aXRlbXNbal0uaXNudWxsW2ldKTsKKworCS8qIHByZXBhcmUgdGhlIHNvcnQg ZnVuY3Rpb25zIGZvciBhbGwgdGhlIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkg PSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJbXVsdGlfc29ydF9hZGRfZGlt ZW5zaW9uKG1zcywgaSwgaSwgc3RhdHMpOworCisJLyogZG8gdGhlIHNvcnQs IHVzaW5nIHRoZSBtdWx0aS1zb3J0ICovCisJcXNvcnRfYXJnKCh2b2lkICop IGl0ZW1zLCBudW1yb3dzLCBzaXplb2YoU29ydEl0ZW0pLAorCQkJCW11bHRp X3NvcnRfY29tcGFyZSwgbXNzKTsKKworCS8qCisJICogQ291bnQgdGhlIG51 bWJlciBvZiBkaXN0aW5jdCBncm91cHMgLSBqdXN0IHdhbGsgdGhyb3VnaCB0 aGUKKwkgKiBzb3J0ZWQgbGlzdCBhbmQgY291bnQgdGhlIG51bWJlciBvZiBr ZXkgY2hhbmdlcy4gV2UgdXNlIHRoaXMgdG8KKwkgKiBkZXRlcm1pbmUgdGhl IHRocmVzaG9sZCAoMTI1JSBvZiB0aGUgYXZlcmFnZSBmcmVxdWVuY3kpLgor CSAqLworCW5kaXN0aW5jdCA9IDE7CisJZm9yIChpID0gMTsgaSA8IG51bXJv d3M7IGkrKykKKwkJaWYgKG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNbaV0s ICZpdGVtc1tpLTFdLCBtc3MpICE9IDApCisJCQluZGlzdGluY3QgKz0gMTsK KworCS8qCisJICogRGV0ZXJtaW5lIGhvdyBtYW55IGdyb3VwcyBhY3R1YWxs eSBleGNlZWQgdGhlIHRocmVzaG9sZCwgYW5kIHRoZW4KKwkgKiB3YWxrIHRo ZSBhcnJheSBhZ2FpbiBhbmQgY29sbGVjdCB0aGVtIGludG8gYW4gYXJyYXku IFdlJ2xsIGFsd2F5cworCSAqIHJlcXVpcmUgYXQgbGVhc3QgNCByb3dzIHBl ciBncm91cC4KKwkgKgorCSAqIEJ1dCBpZiB3ZSBjYW4gZml0IGFsbCB0aGUg ZGlzdGluY3QgdmFsdWVzIGluIHRoZSBNQ1YgbGlzdCAoaS5lLgorCSAqIGlm IHRoZXJlIGFyZSBsZXNzIGRpc3RpbmN0IGdyb3VwcyB0aGFuIE1WU1RBVF9N Q1ZMSVNUX01BWF9JVEVNUyksCisJICogd2UnbGwgcmVxdWlyZSBvbmx5IDIg cm93cyBwZXIgZ3JvdXAuCisJICoKKwkgKiBUT0RPIEZvciBub3cgdGhlIHRo cmVzaG9sZCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgc2luZ2xlLWNvbHVtbgor CSAqICAgICAgY2FzZSAoYXZlcmFnZSArIDI1JSksIGJ1dCBtYXliZSB0aGF0 J3Mgd29ydGggcmV2aXNpdGluZworCSAqICAgICAgZm9yIHRoZSBtdWx0aXZh cmlhdGUgY2FzZS4KKwkgKgorCSAqIFRPRE8gV2UgY2FuIGRvIHRoaXMgb25s eSBpZiB3ZSBiZWxpZXZlIHdlIGdvdCBhbGwgdGhlIGRpc3RpbmN0CisJICog ICAgICB2YWx1ZXMgb2YgdGhlIHRhYmxlLgorCSAqCisJICogRklYTUUgVGhp cyBzaG91bGQgcmVhbGx5IHJlZmVyZW5jZSBtY3ZfbWF4X2l0ZW1zIChmcm9t IGNhdGFsb2cpCisJICogICAgICAgaW5zdGVhZCBvZiB0aGUgY29uc3RhbnQg TVZTVEFUX01DVkxJU1RfTUFYX0lURU1TLgorCSAqLworCW1jdl90aHJlc2hv bGQgPSAxLjI1ICogbnVtcm93cyAvIG5kaXN0aW5jdDsKKwltY3ZfdGhyZXNo b2xkID0gKG1jdl90aHJlc2hvbGQgPCA0KSA/IDQgIDogbWN2X3RocmVzaG9s ZDsKKworCWlmIChuZGlzdGluY3QgPD0gTVZTVEFUX01DVkxJU1RfTUFYX0lU RU1TKQorCQltY3ZfdGhyZXNob2xkID0gMjsKKworCS8qCisJICogV2FsayB0 aHJvdWdoIHRoZSBzb3J0ZWQgZGF0YSBhZ2FpbiwgYW5kIHNlZSBob3cgbWFu eSBncm91cHMKKwkgKiByZWFjaCB0aGUgbWN2X3RocmVzaG9sZCAoYW5kIGJl Y29tZSBhbiBpdGVtIGluIHRoZSBNQ1YgbGlzdCkuCisJICovCisJY291bnQg PSAxOworCWZvciAoaSA9IDE7IGkgPD0gbnVtcm93czsgaSsrKQorCXsKKwkJ LyogbGFzdCByb3cgb3IgbmV3IGdyb3VwLCBzbyBjaGVjayBpZiB3ZSBleGNl ZWQgIG1jdl90aHJlc2hvbGQgKi8KKwkJaWYgKChpID09IG51bXJvd3MpIHx8 IChtdWx0aV9zb3J0X2NvbXBhcmUoJml0ZW1zW2ldLCAmaXRlbXNbaS0xXSwg bXNzKSAhPSAwKSkKKwkJeworCQkJLyogZ3JvdXAgaGl0cyB0aGUgdGhyZXNo b2xkLCBjb3VudCB0aGUgZ3JvdXAgYXMgTUNWIGl0ZW0gKi8KKwkJCWlmIChj b3VudCA+PSBtY3ZfdGhyZXNob2xkKQorCQkJCW5pdGVtcyArPSAxOworCisJ CQljb3VudCA9IDE7CisJCX0KKwkJZWxzZQkvKiB3aXRoaW4gZ3JvdXAsIHNv IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgKi8KKwkJCWNvdW50ICs9 IDE7CisJfQorCisJLyogd2Uga25vdyB0aGUgbnVtYmVyIG9mIE1DViBsaXN0 IGl0ZW1zLCBzbyBsZXQncyBidWlsZCB0aGUgbGlzdCAqLworCWlmIChuaXRl bXMgPiAwKQorCXsKKwkJLyogYWxsb2NhdGUgdGhlIE1DViBsaXN0IHN0cnVj dHVyZSwgc2V0IHBhcmFtZXRlcnMgd2Uga25vdyAqLworCQltY3ZsaXN0ID0g KE1DVkxpc3QpcGFsbG9jMChzaXplb2YoTUNWTGlzdERhdGEpKTsKKworCQlt Y3ZsaXN0LT5tYWdpYyA9IE1WU1RBVF9NQ1ZfTUFHSUM7CisJCW1jdmxpc3Qt PnR5cGUgPSBNVlNUQVRfTUNWX1RZUEVfQkFTSUM7CisJCW1jdmxpc3QtPm5k aW1lbnNpb25zID0gbnVtYXR0cnM7CisJCW1jdmxpc3QtPm5pdGVtcyA9IG5p dGVtczsKKworCQkvKgorCQkgKiBQcmVhbGxvY2F0ZSBEYXR1bS9pc251bGwg YXJyYXlzIChub3QgYXMgYSBzaW5nbGUgY2h1bmssIGFzCisJCSAqIHdlJ2xs IHBhc3MgdGhpcyBvdXRzaWRlIHRoaXMgbWV0aG9kIGFuZCB0aHVzIGl0IG5l ZWRzIHRvIGJlCisJCSAqIGVhc3kgdG8gcGZyZWUoKSB0aGUgZGF0YSAoYW5k IHdlIHdvdWxkbid0IGtub3cgd2hlcmUgdGhlCisJCSAqIGFycmF5cyBzdGFy dCkuCisJCSAqCisJCSAqIFRPRE8gTWF5YmUgdGhlIHJlYXNvbmluZyB0aGF0 IHdlIGNhbid0IGFsbG9jYXRlIGEgc2luZ2xlCisJCSAqICAgICAgcGllY2Ug YmVjYXVzZSB3ZSdyZSBwYXNzaW5nIGl0IG91dCBpcyBib2d1cz8gV2hvJ2QK KwkJICogICAgICBmcmVlIGEgc2luZ2xlIGl0ZW0gb2YgdGhlIE1DViBsaXN0 LCBhbnl3YXk/CisJCSAqCisJCSAqIFRPRE8gTWF5YmUgd2l0aCBhIHByb3Bl ciBlbmNvZGluZyAoc3R1ZmZpbmcgYWxsIHRoZSB2YWx1ZXMKKwkJICogICAg ICBpbnRvIGEgbGlzdC1sZXZlbCBhcnJheSwgdGhpcyB3aWxsIGJlIHVudHJ1 ZSk/CisJCSAqLworCQltY3ZsaXN0LT5pdGVtcyA9IChNQ1ZJdGVtKilwYWxs b2MwKHNpemVvZihNQ1ZJdGVtKSpuaXRlbXMpOworCisJCWZvciAoaSA9IDA7 IGkgPCBuaXRlbXM7IGkrKykKKwkJeworCQkJbWN2bGlzdC0+aXRlbXNbaV0g PSAoTUNWSXRlbSlwYWxsb2MwKHNpemVvZihNQ1ZJdGVtRGF0YSkpOworCQkJ bWN2bGlzdC0+aXRlbXNbaV0tPnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChz aXplb2YoRGF0dW0pKm51bWF0dHJzKTsKKwkJCW1jdmxpc3QtPml0ZW1zW2ld LT5pc251bGwgPSAoYm9vbCopcGFsbG9jMChzaXplb2YoYm9vbCkqbnVtYXR0 cnMpOworCQl9CisKKwkJLyoKKwkJICogUmVwZWF0IHRoZSBzYW1lIGxvb3Ag YXMgYWJvdmUsIGJ1dCB0aGlzIHRpbWUgY29weSB0aGUgZGF0YQorCQkgKiBp bnRvIHRoZSBNQ1YgbGlzdCAoZm9yIGl0ZW1zIGV4Y2VlZGluZyB0aGUgdGhy ZXNob2xkKS4KKwkJICoKKwkJICogVE9ETyBNYXliZSB3ZSBjb3VsZCBzaW1w bHkgcmVtZW1iZXIgaW5kZXhlcyBvZiB0aGUgbGFzdCBpdGVtCisJCSAqICAg ICAgaW4gZWFjaCBncm91cCAoZnJvbSB0aGUgcHJldmlvdXMgbG9vcCk/CisJ CSAqLworCQljb3VudCA9IDE7CisJCW5pdGVtcyA9IDA7CisJCWZvciAoaSA9 IDE7IGkgPD0gbnVtcm93czsgaSsrKQorCQl7CisJCQkvKiBsYXN0IHJvdyBv ciBhIG5ldyBncm91cCAqLworCQkJaWYgKChpID09IG51bXJvd3MpIHx8ICht dWx0aV9zb3J0X2NvbXBhcmUoJml0ZW1zW2ldLCAmaXRlbXNbaS0xXSwgbXNz KSAhPSAwKSkKKwkJCXsKKwkJCQkvKiBjb3VudCB0aGUgTUNWIGl0ZW0gaWYg ZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgKGFuZCBjb3B5IGludG8gdGhlIGFy cmF5KSAqLworCQkJCWlmIChjb3VudCA+PSBtY3ZfdGhyZXNob2xkKQorCQkJ CXsKKwkJCQkJLyoganVzdCBwb2ludGVyIHRvIHRoZSBwcm9wZXIgcGxhY2Ug aW4gdGhlIGxpc3QgKi8KKwkJCQkJTUNWSXRlbSBpdGVtID0gbWN2bGlzdC0+ aXRlbXNbbml0ZW1zXTsKKworCQkJCQkvKiBjb3B5IHZhbHVlcyBmcm9tIHRo ZSBfcHJldmlvdXNfIGdyb3VwIChsYXN0IGl0ZW0gb2YpICovCisJCQkJCW1l bWNweShpdGVtLT52YWx1ZXMsIGl0ZW1zWyhpLTEpXS52YWx1ZXMsIHNpemVv ZihEYXR1bSkgKiBudW1hdHRycyk7CisJCQkJCW1lbWNweShpdGVtLT5pc251 bGwsIGl0ZW1zWyhpLTEpXS5pc251bGwsIHNpemVvZihib29sKSAgKiBudW1h dHRycyk7CisKKworCQkJCQkvKiBhbmQgZmluYWxseSB0aGUgZ3JvdXAgZnJl cXVlbmN5ICovCisJCQkJCWl0ZW0tPmZyZXF1ZW5jeSA9IChkb3VibGUpY291 bnQgLyBudW1yb3dzOworCisJCQkJCS8qIG5leHQgaXRlbSAqLworCQkJCQlu aXRlbXMgKz0gMTsKKwkJCQl9CisKKwkJCQljb3VudCA9IDE7CisJCQl9CisJ CQllbHNlCS8qIHNhbWUgZ3JvdXAsIGp1c3QgaW5jcmVhc2UgdGhlIG51bWJl ciBvZiBpdGVtcyAqLworCQkJCWNvdW50ICs9IDE7CisJCX0KKworCQkvKiBt YWtlIHN1cmUgdGhlIGxvb3BzIGFyZSBjb25zaXN0ZW50ICovCisJCUFzc2Vy dChuaXRlbXMgPT0gbWN2bGlzdC0+bml0ZW1zKTsKKworCQkvKgorCQkgKiBS ZW1vdmUgdGhlIHJvd3MgbWF0Y2hpbmcgdGhlIE1DViBsaXN0IChpLmUuIGtl ZXAgb25seSByb3dzCisJCSAqIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBi eSB0aGUgTUNWIGxpc3QpLgorCQkgKgorCQkgKiBGSVhNRSBUaGlzIGltcGxl bWVudGF0aW9uIGlzIHJhdGhlciBuYWl2ZSwgZWZmZWN0aXZlbHkgTyhOXjIp LgorCQkgKiAgICAgICBBcyB0aGUgTUNWIGxpc3QgZ3Jvd3MsIHRoZSBjaGVj ayB3aWxsIHRha2UgbG9uZ2VyIGFuZAorCQkgKiAgICAgICBsb25nZXIuIEFu ZCBhcyB0aGUgbnVtYmVyIG9mIHNhbXBsZWQgcm93cyBpbmNyZWFzZXMgKGJ5 CisJCSAqICAgICAgIGluY3JlYXNpbmcgc3RhdGlzdGljcyB0YXJnZXQpLCBp dCB3aWxsIHRha2UgbG9uZ2VyIGFuZAorCQkgKiAgICAgICBsb25nZXIuIE9u ZSBvcHRpb24gaXMgdG8gc29ydCB0aGUgTUNWIGl0ZW1zIGZpcnN0IGFuZAor CQkgKiAgICAgICB0aGVuIHBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoLgorCQkg KgorCQkgKiAgICAgICBBIGJldHRlciBvcHRpb24gd291bGQgYmUga2VlcGlu ZyB0aGUgSUQgb2YgdGhlIHJvdyBpbgorCQkgKiAgICAgICB0aGUgc29ydCBp dGVtLCBhbmQgdGhlbiBqdXN0IHdhbGsgdGhyb3VnaCB0aGUgaXRlbXMgYW5k CisJCSAqICAgICAgIG1hcmsgcm93cyB0byByZW1vdmUgKGluIGEgYml0bWFw IG9mIHRoZSBzYW1lIHNpemUpLgorCQkgKiAgICAgICBUaGVyZSdzIG5vdCBz cGFjZSBmb3IgdGhhdCBpbiBTb3J0SXRlbSBhdCB0aGlzIG1vbWVudCwKKwkJ ICogICAgICAgYnV0IGl0J3MgdHJpdmlhbCB0byBhZGQgJ3ByaXZhdGUnIHBv aW50ZXIsIG9yIGp1c3QKKwkJICogICAgICAgdXNpbmcgYW5vdGhlciBzdHJ1 Y3R1cmUgd2l0aCBleHRyYSBmaWVsZCAoc3RhcnRpbmcgd2l0aAorCQkgKiAg ICAgICBTb3J0SXRlbSwgc28gdGhhdCB0aGUgY29tcGFyYXRvcnMgZXRjLiBz dGlsbCB3b3JrKS4KKwkJICoKKwkJICogICAgICAgQW5vdGhlciBvcHRpb24g aXMgdG8gdXNlIHRoZSBzb3J0ZWQgYXJyYXkgb2YgaXRlbXMKKwkJICogICAg ICAgKGJlY2F1c2UgdGhhdCdzIGhvdyB3ZSBzb3J0ZWQgdGhlIHNvdXJjZSBk YXRhKSwgYW5kCisJCSAqICAgICAgIHNpbXBseSBkbyBhIGJzZWFyY2goKSBp bnRvIGl0LiBJZiB3ZSBmaW5kIGEgbWF0Y2hpbmcKKwkJICogICAgICAgaXRl bSwgdGhlIHJvdyBiZWxvbmdzIHRvIHRoZSBNQ1YgbGlzdC4KKwkJICovCisJ CWlmIChuaXRlbXMgPT0gbmRpc3RpbmN0KSAvKiBhbGwgcm93cyBhcmUgY292 ZXJlZCBieSBNQ1YgaXRlbXMgKi8KKwkJCSpudW1yb3dzX2ZpbHRlcmVkID0g MDsKKwkJZWxzZSAvKiAobml0ZW1zIDwgbmRpc3RpbmN0KSAmJiAobml0ZW1z ID4gMCkgKi8KKwkJeworCQkJaW50IG5maWx0ZXJlZCA9IDA7CisJCQlIZWFw VHVwbGUgKnJvd3NfZmlsdGVyZWQgPSAoSGVhcFR1cGxlKilwYWxsb2MwKHNp emVvZihIZWFwVHVwbGUpICogbnVtcm93cyk7CisKKwkJCS8qIHVzZWQgZm9y IHRoZSBzZWFyY2hlcyAqLworCQkJU29ydEl0ZW0gaXRlbSwgbWN2aXRlbTs7 CisKKwkJCWl0ZW0udmFsdWVzID0gKERhdHVtKilwYWxsb2MwKG51bWF0dHJz ICogc2l6ZW9mKERhdHVtKSk7CisJCQlpdGVtLmlzbnVsbCA9IChib29sKilw YWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKGJvb2wpKTsKKworCQkJLyoKKwkJ CSAqIEZJWE1FIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgdGhpcywgd2Ug Y2FuIHJlZmVyZW5jZQorCQkJICogICAgICAgdGhlIE1DViBpdGVtIGRpcmVj dGx5IC4uLgorCQkJICovCisJCQltY3ZpdGVtLnZhbHVlcyA9IChEYXR1bSop cGFsbG9jMChudW1hdHRycyAqIHNpemVvZihEYXR1bSkpOworCQkJbWN2aXRl bS5pc251bGwgPSAoYm9vbCopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihi b29sKSk7CisKKwkJCS8qIHdhbGsgdGhyb3VnaCB0aGUgdHVwbGVzLCBjb21w YXJlIHRoZSB2YWx1ZXMgdG8gTUNWIGl0ZW1zICovCisJCQlmb3IgKGkgPSAw OyBpIDwgbnVtcm93czsgaSsrKQorCQkJeworCQkJCWJvb2wJbWF0Y2ggPSBm YWxzZTsKKworCQkJCS8qIGNvbGxlY3QgdGhlIGtleSB2YWx1ZXMgZnJvbSB0 aGUgcm93ICovCisJCQkJZm9yIChqID0gMDsgaiA8IG51bWF0dHJzOyBqKysp CisJCQkJCWl0ZW0udmFsdWVzW2pdID0gaGVhcF9nZXRhdHRyKHJvd3NbaV0s IGF0dHJzLT52YWx1ZXNbal0sCisJCQkJCQkJCQkJc3RhdHNbal0tPnR1cERl c2MsICZpdGVtLmlzbnVsbFtqXSk7CisKKwkJCQkvKiBzY2FuIHRocm91Z2gg dGhlIE1DViBsaXN0IGZvciBtYXRjaGVzICovCisJCQkJZm9yIChqID0gMDsg aiA8IG1jdmxpc3QtPm5pdGVtczsgaisrKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogVE9ETyBDcmVhdGUgYSBTb3J0SXRlbS9NQ1ZJdGVtIGNvbXBhcmF0 b3Igc28gdGhhdAorCQkJCQkgKiAgICAgIHdlIGRvbid0IG5lZWQgdG8gZG8g bWVtY3B5KCkgbGlrZSBjcmF6eS4KKwkJCQkJICovCisJCQkJCW1lbWNweSht Y3ZpdGVtLnZhbHVlcywgbWN2bGlzdC0+aXRlbXNbal0tPnZhbHVlcywKKwkJ CQkJCQludW1hdHRycyAqIHNpemVvZihEYXR1bSkpOworCQkJCQltZW1jcHko bWN2aXRlbS5pc251bGwsIG1jdmxpc3QtPml0ZW1zW2pdLT5pc251bGwsCisJ CQkJCQkJbnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOworCisJCQkJCWlmICht dWx0aV9zb3J0X2NvbXBhcmUoJml0ZW0sICZtY3ZpdGVtLCBtc3MpID09IDAp CisJCQkJCXsKKwkJCQkJCW1hdGNoID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOwor CQkJCQl9CisJCQkJfQorCisJCQkJLyogaWYgbm8gbWF0Y2ggaW4gdGhlIE1D ViBsaXN0LCBjb3B5IHRoZSByb3cgaW50byB0aGUgZmlsdGVyZWQgb25lcyAq LworCQkJCWlmICghIG1hdGNoKQorCQkJCQltZW1jcHkoJnJvd3NfZmlsdGVy ZWRbbmZpbHRlcmVkKytdLCAmcm93c1tpXSwgc2l6ZW9mKEhlYXBUdXBsZSkp OworCQkJfQorCisJCQkvKiByZXBsYWNlIHRoZSByb3dzIGFuZCByZW1lbWJl ciBob3cgbWFueSByb3dzIHdlIGtlcHQgKi8KKwkJCW1lbWNweShyb3dzLCBy b3dzX2ZpbHRlcmVkLCBzaXplb2YoSGVhcFR1cGxlKSAqIG5maWx0ZXJlZCk7 CisJCQkqbnVtcm93c19maWx0ZXJlZCA9IG5maWx0ZXJlZDsKKworCQkJLyog ZnJlZSBhbGwgdGhlIGRhdGEgdXNlZCBoZXJlICovCisJCQlwZnJlZShyb3dz X2ZpbHRlcmVkKTsKKwkJCXBmcmVlKGl0ZW0udmFsdWVzKTsKKwkJCXBmcmVl KGl0ZW0uaXNudWxsKTsKKwkJCXBmcmVlKG1jdml0ZW0udmFsdWVzKTsKKwkJ CXBmcmVlKG1jdml0ZW0uaXNudWxsKTsKKwkJfQorCX0KKworCXBmcmVlKHZh bHVlcyk7CisJcGZyZWUoaXRlbXMpOworCXBmcmVlKGlzbnVsbCk7CisKKwly ZXR1cm4gbWN2bGlzdDsKK30KKworCisvKiBmZXRjaCB0aGUgTUNWIGxpc3Qg KGFzIGEgYnl0ZWEpIGZyb20gdGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9n ICovCitNQ1ZMaXN0Citsb2FkX212X21jdmxpc3QoT2lkIG12b2lkKQorewor CWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCURhdHVtCQltY3ZsaXN0OworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUZvcm1fcGdfbXZfc3RhdGlz dGljCW12c3RhdDsKKyNlbmRpZgorCisJLyogUHJlcGFyZSB0byBzY2FuIHBn X212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0 aGlzIHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0NhY2hl MShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworCWlm ICghIEhlYXBUdXBsZUlzVmFsaWQoaHR1cCkpCisJCXJldHVybiBOVUxMOwor CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCW12c3RhdCA9IChGb3Jt X3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOworCUFzc2VydCht dnN0YXQtPm1jdl9lbmFibGVkICYmIG12c3RhdC0+bWN2X2J1aWx0KTsKKyNl bmRpZgorCisJbWN2bGlzdCA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQs IGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3Ys ICZpc251bGwpOworCisJQXNzZXJ0KCFpc251bGwpOworCisJUmVsZWFzZVN5 c0NhY2hlKGh0dXApOworCisJcmV0dXJuIGRlc2VyaWFsaXplX212X21jdmxp c3QoRGF0dW1HZXRCeXRlYVAobWN2bGlzdCkpOworfQorCisvKiBwcmludCBz b21lIGJhc2ljIGluZm8gYWJvdXQgdGhlIE1DViBsaXN0CisgKgorICogVE9E TyBBZGQgaW5mbyBhYm91dCB3aGF0IHBhcnQgb2YgdGhlIHRhYmxlIHRoaXMg Y292ZXJzLgorICovCitEYXR1bQorcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZv KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmRhdGEgPSBQR19H RVRBUkdfQllURUFfUCgwKTsKKwljaGFyCSAgICpyZXN1bHQ7CisKKwlNQ1ZM aXN0CW1jdmxpc3QgPSBkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGRhdGEpOwor CisJcmVzdWx0ID0gcGFsbG9jMCgxMjgpOworCXNucHJpbnRmKHJlc3VsdCwg MTI4LCAibml0ZW1zPSVkIiwgbWN2bGlzdC0+bml0ZW1zKTsKKworCXBmcmVl KG1jdmxpc3QpOworCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3Rl eHQocmVzdWx0KSk7Cit9CisKKy8qIHVzZWQgdG8gcGFzcyBjb250ZXh0IGlu dG8gYnNlYXJjaCgpICovCitzdGF0aWMgU29ydFN1cHBvcnQgc3N1cF9wcml2 YXRlID0gTlVMTDsKKworc3RhdGljIGludCBic2VhcmNoX2NvbXBhcmF0b3Io Y29uc3Qgdm9pZCAqIGEsIGNvbnN0IHZvaWQgKiBiKTsKKworLyoKKyAqIFNl cmlhbGl6ZSBNQ1YgbGlzdCBpbnRvIGEgYnl0ZWEgdmFsdWUuIFRoZSBiYXNp YyBhbGdvcml0aG0gaXMgc2ltcGxlOgorICoKKyAqICgxKSBwZXJmb3JtIGRl ZHVwbGljYXRpb24gZm9yIGVhY2ggYXR0cmlidXRlIChzZXBhcmF0ZWx5KQor ICogICAgIChhKSBjb2xsZWN0IGFsbCAobm9uLU5VTEwpIGF0dHJpYnV0ZSB2 YWx1ZXMgZnJvbSBhbGwgTUNWIGl0ZW1zCisgKiAgICAgKGIpIHNvcnQgdGhl IGRhdGEgKHVzaW5nICdsdCcgZnJvbSBWYWNBdHRyU3RhdHMpCisgKiAgICAg KGMpIHJlbW92ZSBkdXBsaWNhdGUgdmFsdWVzIGZyb20gdGhlIGFycmF5Cisg KgorICogKDIpIHNlcmlhbGl6ZSB0aGUgYXJyYXlzIGludG8gYSBieXRlYSB2 YWx1ZQorICoKKyAqICgzKSBwcm9jZXNzIGFsbCBNQ1YgbGlzdCBpdGVtcwor ICogICAgIChhKSByZXBsYWNlIHZhbHVlcyB3aXRoIGluZGV4ZXMgaW50byB0 aGUgYXJyYXlzCisgKgorICogRWFjaCBhdHRyaWJ1dGUgaGFzIHRvIGJlIHBy b2Nlc3NlZCBzZXBhcmF0ZWx5LCBiZWNhdXNlIHdlJ3JlIG1peGluZworICog ZGlmZmVyZW50IGRhdGF0eXBlcywgYW5kIHdlIGRvbid0IGtub3cgd2hhdCBl cXVhbGl0eSBtZWFucyBmb3IgdGhlbS4KKyAqIFdlJ3JlIGFsc28gbWl4aW5n IHBhc3MtYnktdmFsdWUgYW5kIHBhc3MtYnktcmVmIHR5cGVzLCBhbmQgc28g b24uCisgKgorICogV2UnbGwgdXNlIHVpbnQxNiB2YWx1ZXMgZm9yIHRoZSBp bmRleGVzIGluIHN0ZXAgKDMpLCBhcyB3ZSBkb24ndAorICogYWxsb3cgbW9y ZSB0aGFuIDhrIE1DViBpdGVtcyAoc2VlIGxpc3QgbWF4X21jdl9pdGVtcyku IFdlIG1pZ2h0CisgKiBpbmNyZWFzZSB0aGlzIHRvIDY1ayBhbmQgc3RpbGwg Zml0IGludG8gdWludDE2LgorICoKKyAqIFdlIGRvbid0IHJlYWxseSBleHBl Y3QgdGhlIGhpZ2ggY29tcHJlc3Npb24gYXMgd2l0aCBoaXN0b2dyYW1zLAor ICogYmVjYXVzZSB3ZSdyZSBub3QgZG9pbmcgYW55IGJ1Y2tldCBzcGxpdHMg ZXRjLiAod2hpY2ggaXMgdGhlIHNvdXJjZQorICogb2YgaGlnaCByZWR1bmRh bmN5IHRoZXJlKSwgYnV0IHdlIG5lZWQgdG8gZG8gaXQgYW55d2F5IGFzIHdl IG5lZWQKKyAqIHRvIHNlcmlhbGl6ZSB2YXJsZW5hIHZhbHVlcyBldGMuIFdl IG1pZ2h0IGludmVudCBhbm90aGVyIHdheSB0bworICogc2VyaWFsaXplIE1D ViBsaXN0cywgYnV0IGxldCdzIGtlZXAgaXQgY29uc2lzdGVudC4KKyAqCisg KiBGSVhNRSBUaGlzIHByb2JhYmx5IGxlYWtzIG1lbW9yeSwgb3IgYXQgbGVh c3QgdXNlcyBpdCBpbmVmZmljaWVudGx5CisgKiAgICAgICAobWFueSBzbWFs bCBwYWxsb2MoKSBjYWxscyBpbnN0ZWFkIG9mIGEgbGFyZ2Ugb25lKS4KKyAq CisgKiBUT0RPIENvbnNpZGVyIHVzaW5nIDE2LWJpdCB2YWx1ZXMgZm9yIHRo ZSBpbmRleGVzIGluIHN0ZXAgKDMpLgorICoKKyAqIFRPRE8gQ29uc2lkZXIg cGFja2luZyBib29sZWFuIGZsYWdzIChOVUxMKSBmb3IgZWFjaCBpdGVtIGlu dG8gJ2NoYXInCisgKiAgICAgIG9yIGEgbG9uZ2VyIHR5cGUgKGluc3RlYWQg b2YgdXNpbmcgYW4gYXJyYXkgb2YgYm9vbCBpdGVtcykuCisgKi8KK2J5dGVh ICoKK3NlcmlhbGl6ZV9tdl9tY3ZsaXN0KE1DVkxpc3QgbWN2bGlzdCwgaW50 MnZlY3RvciAqYXR0cnMsCisJCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cykK K3sKKwlpbnQJaSwgajsKKwlpbnQJbmRpbXMgPSBtY3ZsaXN0LT5uZGltZW5z aW9uczsKKwlpbnQJaXRlbXNpemUgPSBJVEVNX1NJWkUobmRpbXMpOworCisJ U2l6ZQl0b3RhbF9sZW5ndGggPSAwOworCisJY2hhciAgICppdGVtID0gcGFs bG9jMChpdGVtc2l6ZSk7CisKKwkvKiBzZXJpYWxpemVkIGl0ZW1zIChpbmRl eGVzIGludG8gYXJyYXlzLCBldGMuKSAqLworCWJ5dGVhICAqb3V0cHV0Owor CWNoYXIgICAqZGF0YSA9IE5VTEw7CisKKwkvKiB2YWx1ZXMgcGVyIGRpbWVu c2lvbiAoYW5kIG51bWJlciBvZiBub24tTlVMTCB2YWx1ZXMpICovCisJRGF0 dW0gKip2YWx1ZXMgPSAoRGF0dW0qKilwYWxsb2MwKHNpemVvZihEYXR1bSop ICogbmRpbXMpOworCWludAkgICAqY291bnRzID0gKGludCopcGFsbG9jMChz aXplb2YoaW50KSAqIG5kaW1zKTsKKworCS8qIGluZm8gYWJvdXQgZGltZW5z aW9ucyAoZm9yIGRlc2VyaWFsaXplKSAqLworCURpbWVuc2lvbkluZm8gKiBp bmZvCisJCQkJPSAoRGltZW5zaW9uSW5mbyAqKXBhbGxvYzAoc2l6ZW9mKERp bWVuc2lvbkluZm8pKm5kaW1zKTsKKworCS8qIHNvcnQgc3VwcG9ydCBkYXRh ICovCisJU29ydFN1cHBvcnQJc3N1cCA9IChTb3J0U3VwcG9ydClwYWxsb2Mw KHNpemVvZihTb3J0U3VwcG9ydERhdGEpKm5kaW1zKTsKKworCS8qIGNvbGxl Y3QgYW5kIGRlZHVwbGljYXRlIHZhbHVlcyBmb3IgZWFjaCBkaW1lbnNpb24g Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7CisJCWludCBj b3VudDsKKwkJU3RkQW5hbHl6ZURhdGEgKnRtcCA9IChTdGRBbmFseXplRGF0 YSAqKXN0YXRzW2ldLT5leHRyYV9kYXRhOworCisJCS8qIGtlZXAgaW1wb3J0 YW50IGluZm8gYWJvdXQgdGhlIGRhdGEgdHlwZSAqLworCQlpbmZvW2ldLnR5 cGxlbiAgID0gc3RhdHNbaV0tPmF0dHJ0eXBlLT50eXBsZW47CisJCWluZm9b aV0udHlwYnl2YWwgPSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5cGJ5dmFsOwor CisJCS8qIGFsbG9jYXRlIHNwYWNlIGZvciBhbGwgdmFsdWVzLCBpbmNsdWRp bmcgTlVMTHMgKHdvbid0IHVzZSB0aGVtKSAqLworCQl2YWx1ZXNbaV0gPSAo RGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIG1jdmxpc3QtPm5pdGVt cyk7CisKKwkJZm9yIChqID0gMDsgaiA8IG1jdmxpc3QtPm5pdGVtczsgaisr KQorCQl7CisJCQlpZiAoISBtY3ZsaXN0LT5pdGVtc1tqXS0+aXNudWxsW2ld KQkvKiBza2lwIE5VTEwgdmFsdWVzICovCisJCQl7CisJCQkJdmFsdWVzW2ld W2NvdW50c1tpXV0gPSBtY3ZsaXN0LT5pdGVtc1tqXS0+dmFsdWVzW2ldOwor CQkJCWNvdW50c1tpXSArPSAxOworCQkJfQorCQl9CisKKwkJLyogdGhlcmUg YXJlIGp1c3QgTlVMTCB2YWx1ZXMgaW4gdGhpcyBkaW1lbnNpb24gKi8KKwkJ aWYgKGNvdW50c1tpXSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogc29y dCBhbmQgZGVkdXBsaWNhdGUgKi8KKwkJc3N1cFtpXS5zc3VwX2N4dCA9IEN1 cnJlbnRNZW1vcnlDb250ZXh0OworCQlzc3VwW2ldLnNzdXBfY29sbGF0aW9u ID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOworCQlzc3VwW2ldLnNzdXBfbnVs bHNfZmlyc3QgPSBmYWxzZTsKKworCQlQcmVwYXJlU29ydFN1cHBvcnRGcm9t T3JkZXJpbmdPcCh0bXAtPmx0b3ByLCAmc3N1cFtpXSk7CisKKwkJcXNvcnRf YXJnKHZhbHVlc1tpXSwgY291bnRzW2ldLCBzaXplb2YoRGF0dW0pLAorCQkJ CSAgY29tcGFyZV9zY2FsYXJzX3NpbXBsZSwgJnNzdXBbaV0pOworCisJCS8q CisJCSAqIFdhbGsgdGhyb3VnaCB0aGUgYXJyYXkgYW5kIGVsaW1pbmF0ZSBk dXBsaWNpdGF0ZSB2YWx1ZXMsIGJ1dAorCQkgKiBrZWVwIHRoZSBvcmRlcmlu ZyAoc28gdGhhdCB3ZSBjYW4gZG8gYnNlYXJjaCBsYXRlcikuIFdlIGtub3cK KwkJICogdGhlcmUncyBhdCBsZWFzdCAxIGl0ZW0sIHNvIHdlIGNhbiBza2lw IHRoZSBmaXJzdCBlbGVtZW50LgorCQkgKi8KKwkJY291bnQgPSAxOwkvKiBu dW1iZXIgb2YgZGVkdXBsaWNhdGVkIGl0ZW1zICovCisJCWZvciAoaiA9IDE7 IGogPCBjb3VudHNbaV07IGorKykKKwkJeworCQkJLyogaWYgaXQncyBkaWZm ZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgdmFsdWUsIHdlIG5lZWQgdG8ga2Vl cCBpdCAqLworCQkJaWYgKGNvbXBhcmVfZGF0dW1zX3NpbXBsZSh2YWx1ZXNb aV1bai0xXSwgdmFsdWVzW2ldW2pdLCAmc3N1cFtpXSkgIT0gMCkKKwkJCXsK KwkJCQkvKiBYWFg6IG5vdCBuZWVkZWQgaWYgKGNvdW50ID09IGopICovCisJ CQkJdmFsdWVzW2ldW2NvdW50XSA9IHZhbHVlc1tpXVtqXTsKKwkJCQljb3Vu dCArPSAxOworCQkJfQorCQl9CisKKwkJLyogZG8gbm90IGV4Y2VlZCBVSU5U MTZfTUFYICovCisJCUFzc2VydChjb3VudCA8PSBVSU5UMTZfTUFYKTsKKwor CQkvKiBrZWVwIGluZm8gYWJvdXQgdGhlIGRlZHVwbGljYXRlZCBjb3VudCAq LworCQlpbmZvW2ldLm52YWx1ZXMgPSBjb3VudDsKKworCQkvKiBjb21wdXRl IHNpemUgb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YSAqLworCQlpZiAoaW5mb1tp XS50eXBieXZhbCB8fCAoaW5mb1tpXS50eXBsZW4gPiAwKSkKKwkJCS8qIGJ5 IHZhbHVlIHBhc2VkIGJ5IHJlZmVyZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAq LworCQkJaW5mb1tpXS5uYnl0ZXMgPSBpbmZvW2ldLm52YWx1ZXMgKiBpbmZv W2ldLnR5cGxlbjsKKwkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEp CisJCQkvKiB2YXJsZW5hLCBzbyBqdXN0IHVzZSBWQVJTSVpFX0FOWSAqLwor CQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJ CWluZm9baV0ubmJ5dGVzICs9IFZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtqXSk7 CisJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0yKQorCQkJLyogY3N0 cmluZywgc28gc2ltcGx5IHN0cmxlbiAqLworCQkJZm9yIChqID0gMDsgaiA8 IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCWluZm9baV0ubmJ5dGVzICs9 IHN0cmxlbihEYXR1bUdldFBvaW50ZXIodmFsdWVzW2ldW2pdKSk7CisJCWVs c2UKKwkJCWVsb2coRVJST1IsICJ1bmtub3duIGRhdGEgdHlwZSB0eXBieXZh bD0lZCB0eXBsZW49JWQiLAorCQkJCWluZm9baV0udHlwYnl2YWwsIGluZm9b aV0udHlwbGVuKTsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBmaW5hbGx5IGtu b3cgaG93IG11Y2ggc3BhY2Ugd2UnbGwgbmVlZCBmb3IgdGhlIHNlcmlhbGl6 ZWQKKwkgKiBNQ1YgbGlzdCwgYXMgaXQgY29udGFpbnMgdGhlc2UgZmllbGRz OgorCSAqCisJICogLSBsZW5ndGggKDRCKSBmb3IgdmFybGVuYQorCSAqIC0g bWFnaWMgKDRCKQorCSAqIC0gdHlwZSAoNEIpCisJICogLSBuZGltZW5zaW9u cyAoNEIpCisJICogLSBuaXRlbXMgKDRCKQorCSAqIC0gaW5mbyAobmRpbSAq IHNpemVvZihEaW1lbnNpb25JbmZvKQorCSAqIC0gYXJyYXlzIG9mIHZhbHVl cyBmb3IgZWFjaCBkaW1lbnNpb24KKwkgKiAtIHNlcmlhbGl6ZWQgaXRlbXMg KG5pdGVtcyAqIGl0ZW1zaXplKQorCSAqCisJICogU28gdGhlICdoZWFkZXIn IHNpemUgaXMgMjBCICsgbmRpbSAqIHNpemVvZihEaW1lbnNpb25JbmZvKSBh bmQKKwkgKiB0aGVuIHdlJ2xsIHBsYWNlIHRoZSBkYXRhLgorCSAqLworCXRv dGFsX2xlbmd0aCA9IChzaXplb2YoaW50MzIpICsgb2Zmc2V0b2YoTUNWTGlz dERhdGEsIGl0ZW1zKQorCQkJCQkrIG5kaW1zICogc2l6ZW9mKERpbWVuc2lv bkluZm8pCisJCQkJCSsgbWN2bGlzdC0+bml0ZW1zICogaXRlbXNpemUpOwor CisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJCXRvdGFsX2xlbmd0 aCArPSBpbmZvW2ldLm5ieXRlczsKKworCS8qIGVuZm9yY2UgYXJiaXRyYXJ5 IGxpbWl0IG9mIDFNQiAqLworCWlmICh0b3RhbF9sZW5ndGggPiAxMDI0ICog MTAyNCkKKwkJZWxvZyhFUlJPUiwgInNlcmlhbGl6ZWQgTUNWIGV4Y2VlZHMg MU1CICglbGQpIiwgdG90YWxfbGVuZ3RoKTsKKworCS8qIGFsbG9jYXRlIHNw YWNlIGZvciB0aGUgc2VyaWFsaXplZCBNQ1YgbGlzdCwgc2V0IGhlYWRlciBm aWVsZHMgKi8KKwlvdXRwdXQgPSAoYnl0ZWEqKXBhbGxvYzAodG90YWxfbGVu Z3RoKTsKKwlTRVRfVkFSU0laRShvdXRwdXQsIHRvdGFsX2xlbmd0aCk7CisK KwkvKiB3ZSdsbCB1c2UgJ3B0cicgdG8ga2VlcCB0cmFjayBvZiB0aGUgcGxh Y2UgdG8gd3JpdGUgZGF0YSAqLworCWRhdGEgPSBWQVJEQVRBKG91dHB1dCk7 CisKKwltZW1jcHkoZGF0YSwgbWN2bGlzdCwgb2Zmc2V0b2YoTUNWTGlzdERh dGEsIGl0ZW1zKSk7CisJZGF0YSArPSBvZmZzZXRvZihNQ1ZMaXN0RGF0YSwg aXRlbXMpOworCisJbWVtY3B5KGRhdGEsIGluZm8sIHNpemVvZihEaW1lbnNp b25JbmZvKSAqIG5kaW1zKTsKKwlkYXRhICs9IHNpemVvZihEaW1lbnNpb25J bmZvKSAqIG5kaW1zOworCisJLyogdmFsdWUgYXJyYXkgZm9yIGVhY2ggZGlt ZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJewor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJY2hhciAqdG1wID0gZGF0 YTsKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVz OyBqKyspCisJCXsKKwkJCWlmIChpbmZvW2ldLnR5cGJ5dmFsKQorCQkJewor CQkJCS8qIHBhc3NlZCBieSB2YWx1ZSAvIERhdHVtICovCisJCQkJbWVtY3B5 KGRhdGEsICZ2YWx1ZXNbaV1bal0sIGluZm9baV0udHlwbGVuKTsKKwkJCQlk YXRhICs9IGluZm9baV0udHlwbGVuOworCQkJfQorCQkJZWxzZSBpZiAoaW5m b1tpXS50eXBsZW4gPiAwKQorCQkJeworCQkJCS8qIHBhc2VkIGJ5IHJlZmVy ZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4pICovCisJ CQkJbWVtY3B5KGRhdGEsICZ2YWx1ZXNbaV1bal0sIGluZm9baV0udHlwbGVu KTsKKwkJCQlkYXRhICs9IGluZm9baV0udHlwbGVuOworCQkJfQorCQkJZWxz ZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEpCisJCQl7CisJCQkJLyogdmFy bGVuYSAqLworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdldFBvaW50ZXIodmFs dWVzW2ldW2pdKSwKKwkJCQkJCQlWQVJTSVpFX0FOWSh2YWx1ZXNbaV1bal0p KTsKKwkJCQlkYXRhICs9IFZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtqXSk7CisJ CQl9CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMikKKwkJCXsK KwkJCQkvKiBjc3RyaW5nIChkb24ndCBmb3JnZXQgdGhlIFwwIHRlcm1pbmF0 b3IhKSAqLworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdldFBvaW50ZXIodmFs dWVzW2ldW2pdKSwKKwkJCQkJCQlzdHJsZW4oRGF0dW1HZXRQb2ludGVyKHZh bHVlc1tpXVtqXSkpICsgMSk7CisJCQkJZGF0YSArPSBzdHJsZW4oRGF0dW1H ZXRQb2ludGVyKHZhbHVlc1tpXVtqXSkpICsgMTsKKwkJCX0KKwkJfQorCQlB c3NlcnQoKGRhdGEgLSB0bXApID09IGluZm9baV0ubmJ5dGVzKTsKKwl9CisK KwkvKiBhbmQgZmluYWxseSwgdGhlIE1DViBpdGVtcyAqLworCWZvciAoaSA9 IDA7IGkgPCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykKKwl7CisJCS8qIGRvbid0 IHdyaXRlIGJleW9uZCB0aGUgYWxsb2NhdGVkIHNwYWNlICovCisJCUFzc2Vy dChkYXRhIDw9IChjaGFyKilvdXRwdXQgKyB0b3RhbF9sZW5ndGggLSBpdGVt c2l6ZSk7CisKKwkJLyogcmVzZXQgdGhlIHZhbHVlcyBmb3IgZWFjaCBpdGVt ICovCisJCW1lbXNldChpdGVtLCAwLCBpdGVtc2l6ZSk7CisKKwkJZm9yIChq ID0gMDsgaiA8IG5kaW1zOyBqKyspCisJCXsKKwkJCS8qIGRvIHRoZSBsb29r dXAgb25seSBmb3Igbm9uLU5VTEwgdmFsdWVzICovCisJCQlpZiAoISBtY3Zs aXN0LT5pdGVtc1tpXS0+aXNudWxsW2pdKQorCQkJeworCQkJCURhdHVtICog diA9IE5VTEw7CisJCQkJc3N1cF9wcml2YXRlID0gJnNzdXBbal07CisKKwkJ CQl2ID0gKERhdHVtKilic2VhcmNoKCZtY3ZsaXN0LT5pdGVtc1tpXS0+dmFs dWVzW2pdLAorCQkJCQkJCQl2YWx1ZXNbal0sIGluZm9bal0ubnZhbHVlcywg c2l6ZW9mKERhdHVtKSwKKwkJCQkJCQkJYnNlYXJjaF9jb21wYXJhdG9yKTsK KworCQkJCWlmICh2ID09IE5VTEwpCisJCQkJCWVsb2coRVJST1IsICJ2YWx1 ZSBmb3IgZGltICVkIG5vdCBmb3VuZCBpbiBhcnJheSIsIGopOworCisJCQkJ LyogY29tcHV0ZSBpbmRleCB3aXRoaW4gdGhlIGFycmF5ICovCisJCQkJSVRF TV9JTkRFWEVTKGl0ZW0pW2pdID0gKHYgLSB2YWx1ZXNbal0pOworCisJCQkJ LyogY2hlY2sgdGhlIGluZGV4IGlzIHdpdGhpbiBleHBlY3RlZCBib3VuZHMg Ki8KKwkJCQlBc3NlcnQoSVRFTV9JTkRFWEVTKGl0ZW0pW2pdID49IDApOwor CQkJCUFzc2VydChJVEVNX0lOREVYRVMoaXRlbSlbal0gPCBpbmZvW2pdLm52 YWx1ZXMpOworCQkJfQorCQl9CisKKwkJLyogY29weSBOVUxMIGFuZCBmcmVx dWVuY3kgZmxhZ3MgaW50byB0aGUgaXRlbSAqLworCQltZW1jcHkoSVRFTV9O VUxMUyhpdGVtLCBuZGltcyksCisJCQkJbWN2bGlzdC0+aXRlbXNbaV0tPmlz bnVsbCwgc2l6ZW9mKGJvb2wpICogbmRpbXMpOworCQltZW1jcHkoSVRFTV9G UkVRVUVOQ1koaXRlbSwgbmRpbXMpLAorCQkJCSZtY3ZsaXN0LT5pdGVtc1tp XS0+ZnJlcXVlbmN5LCBzaXplb2YoZG91YmxlKSk7CisKKwkJLyogY29weSB0 aGUgaXRlbSBpbnRvIHRoZSBhcnJheSAqLworCQltZW1jcHkoZGF0YSwgaXRl bSwgaXRlbXNpemUpOworCisJCWRhdGEgKz0gaXRlbXNpemU7CisJfQorCisJ LyogYXQgdGhpcyBwb2ludCB3ZSBleHBlY3QgdG8gbWF0Y2ggdGhlIHRvdGFs X2xlbmd0aCBleGFjdGx5ICovCisJQXNzZXJ0KChkYXRhIC0gKGNoYXIqKW91 dHB1dCkgPT0gdG90YWxfbGVuZ3RoKTsKKworCXJldHVybiBvdXRwdXQ7Cit9 CisKKy8qCisgKiBJbnZlcnNlIHRvIHNlcmlhbGl6ZV9tdl9tY3ZsaXN0KCkg LSBzZWUgdGhlIGNvbW1lbnQgdGhlcmUuCisgKgorICogV2UnbGwgZG8gZnVs bCBkZXNlcmlhbGl6YXRpb24sIGJlY2F1c2Ugd2UgZG9uJ3QgcmVhbGx5IGV4 cGVjdCBoaWdoCisgKiBkdXBsaWNhdGlvbiBvZiB2YWx1ZXMgc28gdGhlIGNh Y2hpbmcgbWF5IG5vdCBiZSBhcyBlZmZpY2llbnQgYXMgd2l0aAorICogaGlz dG9ncmFtcy4KKyAqLworTUNWTGlzdCBkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0 KGJ5dGVhICogZGF0YSkKK3sKKwlpbnQJCWksIGo7CisJU2l6ZQlleHBlY3Rl ZF9zaXplOworCU1DVkxpc3QgbWN2bGlzdDsKKwljaGFyICAgKnRtcDsKKwor CWludAkJbmRpbXMsIG5pdGVtcywgaXRlbXNpemU7CisJRGltZW5zaW9uSW5m byAqaW5mbyA9IE5VTEw7CisKKwl1aW50MTYgKmluZGV4ZXMgPSBOVUxMOwor CURhdHVtICoqdmFsdWVzID0gTlVMTDsKKworCS8qIGxvY2FsIGFsbG9jYXRp b24gYnVmZmVyICh1c2VkIG9ubHkgZm9yIGRlc2VyaWFsaXphdGlvbikgKi8K KwlpbnQJCWJ1ZmZsZW47CisJY2hhciAgICpidWZmOworCWNoYXIgICAqcHRy OworCisJLyogYnVmZmVyIHVzZWQgZm9yIHRoZSByZXN1bHQgKi8KKwlpbnQJ CXJidWZmbGVuOworCWNoYXIgICAqcmJ1ZmY7CisJY2hhciAgICpycHRyOwor CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAo VkFSU0laRV9BTllfRVhIRFIoZGF0YSkgPCBvZmZzZXRvZihNQ1ZMaXN0RGF0 YSxpdGVtcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1DViBTaXplICVs ZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIsCisJCQkgVkFSU0laRV9BTllf RVhIRFIoZGF0YSksIG9mZnNldG9mKE1DVkxpc3REYXRhLGl0ZW1zKSk7CisK KwkvKiByZWFkIHRoZSBNQ1YgbGlzdCBoZWFkZXIgKi8KKwltY3ZsaXN0ID0g KE1DVkxpc3QpcGFsbG9jMChzaXplb2YoTUNWTGlzdERhdGEpKTsKKworCS8q IGluaXRpYWxpemUgcG9pbnRlciB0byB0aGUgZGF0YSBwYXJ0IChza2lwIHRo ZSB2YXJsZW5hIGhlYWRlcikgKi8KKwl0bXAgPSBWQVJEQVRBKGRhdGEpOwor CisJLyogZ2V0IHRoZSBoZWFkZXIgYW5kIHBlcmZvcm0gYmFzaWMgc2FuaXR5 IGNoZWNrcyAqLworCW1lbWNweShtY3ZsaXN0LCB0bXAsIG9mZnNldG9mKE1D Vkxpc3REYXRhLGl0ZW1zKSk7CisJdG1wICs9IG9mZnNldG9mKE1DVkxpc3RE YXRhLGl0ZW1zKTsKKworCWlmIChtY3ZsaXN0LT5tYWdpYyAhPSBNVlNUQVRf TUNWX01BR0lDKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBNQ1YgbWFnaWMg JWQgKGV4cGVjdGVkICVkZCkiLAorCQkJIG1jdmxpc3QtPm1hZ2ljLCBNVlNU QVRfTUNWX01BR0lDKTsKKworCWlmIChtY3ZsaXN0LT50eXBlICE9IE1WU1RB VF9NQ1ZfVFlQRV9CQVNJQykKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTUNW IHR5cGUgJWQgKGV4cGVjdGVkICVkZCkiLAorCQkJIG1jdmxpc3QtPnR5cGUs IE1WU1RBVF9NQ1ZfVFlQRV9CQVNJQyk7CisKKwluaXRlbXMgPSBtY3ZsaXN0 LT5uaXRlbXM7CisJbmRpbXMgPSBtY3ZsaXN0LT5uZGltZW5zaW9uczsKKwlp dGVtc2l6ZSA9IElURU1fU0laRShuZGltcyk7CisKKwlBc3NlcnQobml0ZW1z ID4gMCk7CisJQXNzZXJ0KChuZGltcyA+PSAyKSAmJiAobmRpbXMgPD0gTVZT VEFUU19NQVhfRElNRU5TSU9OUykpOworCisJLyoKKwkgKiBXaGF0IHNpemUg ZG8gd2UgZXhwZWN0IHdpdGggdGhvc2UgcGFyYW1ldGVycyAoaXQncyBpbmNv bXBsZXRlLAorCSAqIGFzIHdlIHlldCBoYXZlIHRvIGNvdW50IHRoZSBhcnJh eSBzaXplcyAoZnJvbSBEaW1lbnNpb25JbmZvCisJICogcmVjb3JkcykuCisJ ICovCisJZXhwZWN0ZWRfc2l6ZSA9IG9mZnNldG9mKE1DVkxpc3REYXRhLGl0 ZW1zKSArCisJCQkJCW5kaW1zICogc2l6ZW9mKERpbWVuc2lvbkluZm8pICsK KwkJCQkJKG5pdGVtcyAqIGl0ZW1zaXplKTsKKworCS8qIGNoZWNrIHRoYXQg d2UgaGF2ZSBhdCBsZWFzdCB0aGUgRGltZW5zaW9uSW5mbyByZWNvcmRzICov CisJaWYgKFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpIDwgZXhwZWN0ZWRfc2l6 ZSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTUNWIFNpemUgJWxkIChleHBl Y3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgZXhw ZWN0ZWRfc2l6ZSk7CisKKwlpbmZvID0gKERpbWVuc2lvbkluZm8qKSh0bXAp OworCXRtcCArPSBuZGltcyAqIHNpemVvZihEaW1lbnNpb25JbmZvKTsKKwor CS8qIGFjY291bnQgZm9yIHRoZSB2YWx1ZSBhcnJheXMgKi8KKwlmb3IgKGkg PSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJZXhwZWN0ZWRfc2l6ZSArPSBpbmZv W2ldLm5ieXRlczsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSAh PSBleHBlY3RlZF9zaXplKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBNQ1Yg U2l6ZSAlbGQgKGV4cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJWkVfQU5ZX0VY SERSKGRhdGEpLCBleHBlY3RlZF9zaXplKTsKKworCS8qIGxvb2tzIE9LIC0g bm90IGNvcnJ1cHRlZCBvciBzb21ldGhpbmcgKi8KKworCS8qCisJICogV2Un bGwgYWxsb2NhdGUgb25lIGxhcmdlIGNodW5rIG9mIG1lbW9yeSBmb3IgdGhl IGludGVybWVkaWF0ZQorCSAqIGRhdGEsIG5lZWRlZCBvbmx5IGZvciBkZXNl cmlhbGl6aW5nIHRoZSBNQ1YgbGlzdCwgYW5kIHdlJ2xsIHBhY2sKKwkgKiB1 c2UgYSBsb2NhbCBkZW5zZSBhbGxvY2F0aW9uIHRvIG1pbmltaXplIHRoZSBw YWxsb2Mgb3ZlcmhlYWQuCisJICoKKwkgKiBMZXQncyBzZWUgaG93IG11Y2gg c3BhY2Ugd2UnbGwgYWN0dWFsbHkgbmVlZCwgYW5kIGFsc28gaW5jbHVkZQor CSAqIHNwYWNlIGZvciB0aGUgYXJyYXkgd2l0aCBwb2ludGVycy4KKwkgKi8K KwlidWZmbGVuID0gc2l6ZW9mKERhdHVtKikgKiBuZGltczsJCQkvKiBzcGFj ZSBmb3IgcG9pbnRlcnMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBuZGltczsg aSsrKQorCQkvKiBmb3IgZnVsbC1zaXplIGJ5dmFsIHR5cGVzLCB3ZSByZXVz ZSB0aGUgc2VyaWFsaXplZCB2YWx1ZSAqLworCQlpZiAoISAoaW5mb1tpXS50 eXBieXZhbCAmJiBpbmZvW2ldLnR5cGxlbiA9PSBzaXplb2YoRGF0dW0pKSkK KwkJCWJ1ZmZsZW4gKz0gKHNpemVvZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1 ZXMpOworCisJYnVmZiA9IHBhbGxvYzAoYnVmZmxlbik7CisJcHRyICA9IGJ1 ZmY7CisKKwl2YWx1ZXMgPSAoRGF0dW0qKilidWZmOworCXB0ciArPSAoc2l6 ZW9mKERhdHVtKikgKiBuZGltcyk7CisKKwkvKgorCSAqIEZJWE1FIFRoaXMg dXNlcyBwb2ludGVycyB0byB0aGUgb3JpZ2luYWwgZGF0YSBhcnJheSAodGhl IHR5cGVzCisJICogICAgICAgbm90IHBhc3NlZCBieSB2YWx1ZSksIHNvIHdo ZW4gc29tZW9uZSBmcmVlcyB0aGUgbWVtb3J5LAorCSAqICAgICAgIGUuZy4g YnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgdGhpczoKKwkgKgorCSAqICAgICAg ICAgICBieXRlYSAqIGRhdGEgPSAuLi4gZmV0Y2ggdGhlIGRhdGEgZnJvbSBj YXRhbG9nIC4uLgorCSAqICAgICAgICAgICBNQ1ZMaXN0IG1jdmxpc3QgPSBk ZXNlcmlhbGl6ZV9tY3ZfbGlzdChkYXRhKTsKKwkgKiAgICAgICAgICAgcGZy ZWUoZGF0YSk7CisJICoKKwkgKiAgICAgICB0aGVuICdtY3ZsaXN0JyByZWZl cmVuY2VzIHRoZSBmcmVlZCBtZW1vcnkuIFRoaXMgbmVlZHMgdG8KKwkgKiAg ICAgICBjb3B5IHRoZSBwaWVjZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8 IG5kaW1zOyBpKyspCisJeworCQlpZiAoaW5mb1tpXS50eXBieXZhbCkKKwkJ eworCQkJLyogcGFzc2VkIGJ5IHZhbHVlIC8gRGF0dW0gLSBzaW1wbHkgcmV1 c2UgdGhlIGFycmF5ICovCisJCQlpZiAoaW5mb1tpXS50eXBsZW4gPT0gc2l6 ZW9mKERhdHVtKSkKKwkJCXsKKwkJCQl2YWx1ZXNbaV0gPSAoRGF0dW0qKXRt cDsKKwkJCQl0bXAgKz0gaW5mb1tpXS5uYnl0ZXM7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJdmFsdWVzW2ldID0gKERhdHVtKilwdHI7CisJCQkJcHRy ICs9IChzaXplb2YoRGF0dW0pICogaW5mb1tpXS5udmFsdWVzKTsKKworCQkJ CWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7 CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJ bWVtY3B5KCZ2YWx1ZXNbaV1bal0sIHRtcCwgaW5mb1tpXS50eXBsZW4pOwor CQkJCQl0bXAgKz0gaW5mb1tpXS50eXBsZW47CisJCQkJfQorCQkJfQorCQl9 CisJCWVsc2UKKwkJeworCQkJLyogYWxsIHRoZSB2YXJsZW5hIGRhdGEgbmVl ZCBhIGNodW5rIGZyb20gdGhlIGJ1ZmZlciAqLworCQkJdmFsdWVzW2ldID0g KERhdHVtKilwdHI7CisJCQlwdHIgKz0gKHNpemVvZihEYXR1bSkgKiBpbmZv W2ldLm52YWx1ZXMpOworCisJCQkvKiBwYXNlZCBieSByZWZlcmVuY2UsIGJ1 dCBmaXhlZCBsZW5ndGggKG5hbWUsIHRpZCwgLi4uKSAqLworCQkJaWYgKGlu Zm9baV0udHlwbGVuID4gMCkKKwkJCXsKKwkJCQlmb3IgKGogPSAwOyBqIDwg aW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJeworCQkJCQkvKiBqdXN0IHBv aW50IGludG8gdGhlIGFycmF5ICovCisJCQkJCXZhbHVlc1tpXVtqXSA9IFBv aW50ZXJHZXREYXR1bSh0bXApOworCQkJCQl0bXAgKz0gaW5mb1tpXS50eXBs ZW47CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4g PT0gLTEpCisJCQl7CisJCQkJLyogdmFybGVuYSAqLworCQkJCWZvciAoaiA9 IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8q IGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJdmFsdWVzW2ld W2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7CisJCQkJCXRtcCArPSBWQVJT SVpFX0FOWSh0bXApOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGluZm9b aV0udHlwbGVuID09IC0yKQorCQkJeworCQkJCS8qIGNzdHJpbmcgKi8KKwkJ CQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJ eworCQkJCQkvKiBqdXN0IHBvaW50IGludG8gdGhlIGFycmF5ICovCisJCQkJ CXZhbHVlc1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1bSh0bXApOworCQkJCQl0 bXAgKz0gKHN0cmxlbih0bXApICsgMSk7IC8qIGRvbid0IGZvcmdldCB0aGUg XDAgKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiB3ZSBzaG91bGQg ZXhoYXVzdCB0aGUgYnVmZmVyIGV4YWN0bHkgKi8KKwlBc3NlcnQoKHB0ciAt IGJ1ZmYpID09IGJ1ZmZsZW4pOworCisJLyogYWxsb2NhdGUgc3BhY2UgZm9y IHRoZSBNQ1YgaXRlbXMgaW4gYSBzaW5nbGUgcGllY2UgKi8KKwlyYnVmZmxl biA9IChzaXplb2YoTUNWSXRlbSkgKyBzaXplb2YoTUNWSXRlbURhdGEpICsK KwkJCQlzaXplb2YoRGF0dW0pKm5kaW1zICsgc2l6ZW9mKGJvb2wpKm5kaW1z KSAqIG5pdGVtczsKKworCXJidWZmID0gcGFsbG9jKHJidWZmbGVuKTsKKwly cHRyICA9IHJidWZmOworCisJbWN2bGlzdC0+aXRlbXMgPSAoTUNWSXRlbSop cmJ1ZmY7CisJcnB0ciArPSAoc2l6ZW9mKE1DVkl0ZW0pICogbml0ZW1zKTsK KworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCU1DVkl0 ZW0gaXRlbSA9IChNQ1ZJdGVtKXJwdHI7CisJCXJwdHIgKz0gKHNpemVvZihN Q1ZJdGVtRGF0YSkpOworCisJCWl0ZW0tPnZhbHVlcyA9IChEYXR1bSopcnB0 cjsKKwkJcnB0ciArPSAoc2l6ZW9mKERhdHVtKSpuZGltcyk7CisKKwkJaXRl bS0+aXNudWxsID0gKGJvb2wqKXJwdHI7CisJCXJwdHIgKz0gKHNpemVvZihi b29sKSAqbmRpbXMpOworCisJCS8qIGp1c3QgcG9pbnQgdG8gdGhlIHJpZ2h0 IHBsYWNlICovCisJCWluZGV4ZXMgPSBJVEVNX0lOREVYRVModG1wKTsKKwor CQltZW1jcHkoaXRlbS0+aXNudWxsLCBJVEVNX05VTExTKHRtcCwgbmRpbXMp LCBzaXplb2YoYm9vbCkgKiBuZGltcyk7CisJCW1lbWNweSgmaXRlbS0+ZnJl cXVlbmN5LCBJVEVNX0ZSRVFVRU5DWSh0bXAsIG5kaW1zKSwgc2l6ZW9mKGRv dWJsZSkpOworCisjaWZkZWYgQVNTRVJUX0NIRUNLSU5HCisJCWZvciAoaiA9 IDA7IGogPCBuZGltczsgaisrKQorCQkJQXNzZXJ0KGluZGV4ZXNbal0gPD0g VUlOVDE2X01BWCk7CisjZW5kaWYKKworCQkvKiB0cmFuc2xhdGUgdGhlIHZh bHVlcyAqLworCQlmb3IgKGogPSAwOyBqIDwgbmRpbXM7IGorKykKKwkJCWlm ICghIGl0ZW0tPmlzbnVsbFtqXSkKKwkJCQlpdGVtLT52YWx1ZXNbal0gPSB2 YWx1ZXNbal1baW5kZXhlc1tqXV07CisKKwkJbWN2bGlzdC0+aXRlbXNbaV0g PSBpdGVtOworCisJCXRtcCArPSBJVEVNX1NJWkUobmRpbXMpOworCisJCUFz c2VydCh0bXAgPD0gKGNoYXIqKWRhdGEgKyBWQVJTSVpFX0FOWShkYXRhKSk7 CisJfQorCisJLyogY2hlY2sgdGhhdCB3ZSBwcm9jZXNzZWQgYWxsIHRoZSBk YXRhICovCisJQXNzZXJ0KHRtcCA9PSAoY2hhciopZGF0YSArIFZBUlNJWkVf QU5ZKGRhdGEpKTsKKworCS8qIHJlbGVhc2UgdGhlIHRlbXBvcmFyeSBidWZm ZXIgKi8KKwlwZnJlZShidWZmKTsKKworCXJldHVybiBtY3ZsaXN0OworfQor CisvKgorICogV2UgbmVlZCB0byBwYXNzIHRoZSBTb3J0U3VwcG9ydCB0byB0 aGUgY29tcGFyYXRvciwgYnV0IGJzZWFyY2goKQorICogaGFzIG5vICdjb250 ZXh0JyBwYXJhbWV0ZXIsIHNvIHdlIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSAo dWdseSkuCisgKi8KK3N0YXRpYyBpbnQKK2JzZWFyY2hfY29tcGFyYXRvcihj b25zdCB2b2lkICogYSwgY29uc3Qgdm9pZCAqIGIpCit7CisJQXNzZXJ0KHNz dXBfcHJpdmF0ZSAhPSBOVUxMKTsKKwlyZXR1cm4gY29tcGFyZV9zY2FsYXJz X3NpbXBsZShhLCBiLCAodm9pZCopc3N1cF9wcml2YXRlKTsKK30KKy8qCisg KiBTUkYgd2l0aCBkZXRhaWxzIGFib3V0IGJ1Y2tldHMgb2YgYSBoaXN0b2dy YW06CisgKgorICogLSBpdGVtIElEICgwLi4ubml0ZW1zKQorICogLSB2YWx1 ZXMgKHN0cmluZyBhcnJheSkKKyAqIC0gbnVsbHMgb25seSAoYm9vbGVhbiBh cnJheSkKKyAqIC0gZnJlcXVlbmN5IChkb3VibGUgcHJlY2lzaW9uKQorICoK KyAqIFRoZSBpbnB1dCBpcyB0aGUgT0lEIG9mIHRoZSBzdGF0aXN0aWNzLCBh bmQgdGhlcmUgYXJlIG5vIHJvd3MKKyAqIHJldHVybmVkIGlmIHRoZSBzdGF0 aXN0aWNzIGNvbnRhaW5zIG5vIGhpc3RvZ3JhbS4KKyAqLworUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19tdl9tY3ZfaXRlbXMpOworCitEYXR1bQorcGdfbXZf bWN2X2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250 ZXh0CSAgICpmdW5jY3R4OworCWludAkJCQkJY2FsbF9jbnRyOworCWludAkJ CQkJbWF4X2NhbGxzOworCVR1cGxlRGVzYwkJCXR1cGRlc2M7CisJQXR0SW5N ZXRhZGF0YQkgICAqYXR0aW5tZXRhOworCisJLyogc3R1ZmYgZG9uZSBvbmx5 IG9uIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLworCWlmIChT UkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0CW9sZGNv bnRleHQ7CisJCU1DVkxpc3QJCQltY3ZsaXN0OworCisJCS8qIGNyZWF0ZSBh IGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2Ug Ki8KKwkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8q IHN3aXRjaCB0byBtZW1vcnkgY29udGV4dCBhcHByb3ByaWF0ZSBmb3IgbXVs dGlwbGUgZnVuY3Rpb24gY2FsbHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9j dHgpOworCisJCW1jdmxpc3QgPSBsb2FkX212X21jdmxpc3QoUEdfR0VUQVJH X09JRCgwKSk7CisKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gbWN2bGlzdDsK KworCQkvKiB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIHRvIGJlIHJldHVybmVk ICovCisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IDA7CisJCWlmIChmdW5jY3R4 LT51c2VyX2ZjdHggIT0gTlVMTCkKKwkJCWZ1bmNjdHgtPm1heF9jYWxscyA9 IG1jdmxpc3QtPm5pdGVtczsKKworCQkvKiBCdWlsZCBhIHR1cGxlIGRlc2Ny aXB0b3IgZm9yIG91ciByZXN1bHQgdHlwZSAqLworCQlpZiAoZ2V0X2NhbGxf cmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZV TkNfQ09NUE9TSVRFKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJy bXNnKCJmdW5jdGlvbiByZXR1cm5pbmcgcmVjb3JkIGNhbGxlZCBpbiBjb250 ZXh0ICIKKwkJCQkJCQkidGhhdCBjYW5ub3QgYWNjZXB0IHR5cGUgcmVjb3Jk IikpKTsKKworCQkvKgorCQkgKiBnZW5lcmF0ZSBhdHRyaWJ1dGUgbWV0YWRh dGEgbmVlZGVkIGxhdGVyIHRvIHByb2R1Y2UgdHVwbGVzCisJCSAqIGZyb20g cmF3IEMgc3RyaW5ncworCQkgKi8KKwkJYXR0aW5tZXRhID0gVHVwbGVEZXNj R2V0QXR0SW5NZXRhZGF0YSh0dXBkZXNjKTsKKwkJZnVuY2N0eC0+YXR0aW5t ZXRhID0gYXR0aW5tZXRhOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwl9CisKKwkvKiBzdHVmZiBkb25lIG9uIGV2ZXJ5IGNh bGwgb2YgdGhlIGZ1bmN0aW9uICovCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxM X1NFVFVQKCk7CisKKwljYWxsX2NudHIgPSBmdW5jY3R4LT5jYWxsX2NudHI7 CisJbWF4X2NhbGxzID0gZnVuY2N0eC0+bWF4X2NhbGxzOworCWF0dGlubWV0 YSA9IGZ1bmNjdHgtPmF0dGlubWV0YTsKKworCWlmIChjYWxsX2NudHIgPCBt YXhfY2FsbHMpICAgIC8qIGRvIHdoZW4gdGhlcmUgaXMgbW9yZSBsZWZ0IHRv IHNlbmQgKi8KKwl7CisJCWNoYXIJICAqKnZhbHVlczsKKwkJSGVhcFR1cGxl CXR1cGxlOworCQlEYXR1bQkJcmVzdWx0OworCQlpbnQydmVjdG9yICpzdGFr ZXlzOworCQlPaWQJCQlyZWxpZDsKKworCQljaGFyICpidWZmID0gcGFsbG9j MCgxMDI0KTsKKwkJY2hhciAqZm9ybWF0OworCisJCWludAkJCWk7CisKKwkJ T2lkCQkgICAqb3V0ZnVuY3M7CisJCUZtZ3JJbmZvICAgKmZtZ3JpbmZvOwor CisJCU1DVkxpc3QJCW1jdmxpc3Q7CisJCU1DVkl0ZW0JCWl0ZW07CisKKwkJ bWN2bGlzdCA9IChNQ1ZMaXN0KWZ1bmNjdHgtPnVzZXJfZmN0eDsKKworCQlB c3NlcnQoY2FsbF9jbnRyIDwgbWN2bGlzdC0+bml0ZW1zKTsKKworCQlpdGVt ID0gbWN2bGlzdC0+aXRlbXNbY2FsbF9jbnRyXTsKKworCQlzdGFrZXlzID0g ZmluZF9tdl9hdHRudW1zKFBHX0dFVEFSR19PSUQoMCksICZyZWxpZCk7CisK KwkJLyoKKwkJICogUHJlcGFyZSBhIHZhbHVlcyBhcnJheSBmb3IgYnVpbGRp bmcgdGhlIHJldHVybmVkIHR1cGxlLgorCQkgKiBUaGlzIHNob3VsZCBiZSBh biBhcnJheSBvZiBDIHN0cmluZ3Mgd2hpY2ggd2lsbAorCQkgKiBiZSBwcm9j ZXNzZWQgbGF0ZXIgYnkgdGhlIHR5cGUgaW5wdXQgZnVuY3Rpb25zLgorCQkg Ki8KKwkJdmFsdWVzID0gKGNoYXIgKiopIHBhbGxvYyg0ICogc2l6ZW9mKGNo YXIgKikpOworCisJCXZhbHVlc1swXSA9IChjaGFyICopIHBhbGxvYyg2NCAq IHNpemVvZihjaGFyKSk7CisKKwkJLyogYXJyYXlzICovCisJCXZhbHVlc1sx XSA9IChjaGFyICopIHBhbGxvYzAoMTAyNCAqIHNpemVvZihjaGFyKSk7CisJ CXZhbHVlc1syXSA9IChjaGFyICopIHBhbGxvYzAoMTAyNCAqIHNpemVvZihj aGFyKSk7CisKKwkJLyogZnJlcXVlbmN5ICovCisJCXZhbHVlc1szXSA9IChj aGFyICopIHBhbGxvYyg2NCAqIHNpemVvZihjaGFyKSk7CisKKwkJb3V0ZnVu Y3MgPSAoT2lkKilwYWxsb2MwKHNpemVvZihPaWQpICogbWN2bGlzdC0+bmRp bWVuc2lvbnMpOworCQlmbWdyaW5mbyA9IChGbWdySW5mbyopcGFsbG9jMChz aXplb2YoRm1nckluZm8pICogbWN2bGlzdC0+bmRpbWVuc2lvbnMpOworCisJ CWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uZGltZW5zaW9uczsgaSsrKQor CQl7CisJCQlib29sIGlzdmFybGVuYTsKKworCQkJZ2V0VHlwZU91dHB1dElu Zm8oZ2V0X2F0dHR5cGUocmVsaWQsIHN0YWtleXMtPnZhbHVlc1tpXSksCisJ CQkJCQkJICAmb3V0ZnVuY3NbaV0sICZpc3ZhcmxlbmEpOworCisJCQlmbWdy X2luZm8ob3V0ZnVuY3NbaV0sICZmbWdyaW5mb1tpXSk7CisJCX0KKworCQlz bnByaW50Zih2YWx1ZXNbMF0sIDY0LCAiJWQiLCBjYWxsX2NudHIpOwkvKiBp dGVtIElEICovCisKKwkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5kaW1l bnNpb25zOyBpKyspCisJCXsKKwkJCURhdHVtIHZhbCwgdmFsb3V0OworCisJ CQlmb3JtYXQgPSAiJXMsICVzIjsKKwkJCWlmIChpID09IDApCisJCQkJZm9y bWF0ID0gInslcyVzIjsKKwkJCWVsc2UgaWYgKGkgPT0gbWN2bGlzdC0+bmRp bWVuc2lvbnMtMSkKKwkJCQlmb3JtYXQgPSAiJXMsICVzfSI7CisKKwkJCXZh bCA9IGl0ZW0tPnZhbHVlc1tpXTsKKwkJCXZhbG91dCA9IEZ1bmN0aW9uQ2Fs bDEoJmZtZ3JpbmZvW2ldLCB2YWwpOworCisJCQlzbnByaW50ZihidWZmLCAx MDI0LCBmb3JtYXQsIHZhbHVlc1sxXSwgRGF0dW1HZXRQb2ludGVyKHZhbG91 dCkpOworCQkJc3RybmNweSh2YWx1ZXNbMV0sIGJ1ZmYsIDEwMjMpOworCQkJ YnVmZlswXSA9ICdcMCc7CisKKwkJCXNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZv cm1hdCwgdmFsdWVzWzJdLCBpdGVtLT5pc251bGxbaV0gPyAidCIgOiAiZiIp OworCQkJc3RybmNweSh2YWx1ZXNbMl0sIGJ1ZmYsIDEwMjMpOworCQkJYnVm ZlswXSA9ICdcMCc7CisJCX0KKworCQlzbnByaW50Zih2YWx1ZXNbM10sIDY0 LCAiJWYiLCBpdGVtLT5mcmVxdWVuY3kpOwkvKiBmcmVxdWVuY3kgKi8KKwor CQkvKiBidWlsZCBhIHR1cGxlICovCisJCXR1cGxlID0gQnVpbGRUdXBsZUZy b21DU3RyaW5ncyhhdHRpbm1ldGEsIHZhbHVlcyk7CisKKwkJLyogbWFrZSB0 aGUgdHVwbGUgaW50byBhIGRhdHVtICovCisJCXJlc3VsdCA9IEhlYXBUdXBs ZUdldERhdHVtKHR1cGxlKTsKKworCQkvKiBjbGVhbiB1cCAodGhpcyBpcyBu b3QgcmVhbGx5IG5lY2Vzc2FyeSkgKi8KKwkJcGZyZWUodmFsdWVzWzBdKTsK KwkJcGZyZWUodmFsdWVzWzFdKTsKKwkJcGZyZWUodmFsdWVzWzJdKTsKKwkJ cGZyZWUodmFsdWVzWzNdKTsKKworCQlwZnJlZSh2YWx1ZXMpOworCisJCVNS Rl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKwllbHNlICAg IC8qIGRvIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBsZWZ0ICovCisJeworCQlT UkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3Jp YmUuYwppbmRleCA4Y2U5YzBlLi4yYzIyZDMxIDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3Jp YmUuYwpAQCAtMjEwOSw4ICsyMTA5LDkgQEAgZGVzY3JpYmVPbmVUYWJsZURl dGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJewogCQkJcHJpbnRm UFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgICJTRUxFQ1Qgb2lkLCBzdGFu YW1lc3BhY2U6OnJlZ25hbWVzcGFjZSBBUyBuc3AsIHN0YW5hbWUsIHN0YWtl eXMsXG4iCi0JCQkJCQkgICAiICBkZXBzX2VuYWJsZWQsXG4iCi0JCQkJCQkg ICAiICBkZXBzX2J1aWx0LFxuIgorCQkJCQkJICAgIiAgZGVwc19lbmFibGVk LCBtY3ZfZW5hYmxlZCxcbiIKKwkJCQkJCSAgICIgIGRlcHNfYnVpbHQsIG1j dl9idWlsdCxcbiIKKwkJCQkJCSAgICIgIG1jdl9tYXhfaXRlbXMsXG4iCiAJ CQkJCQkgICAiICAoU0VMRUNUIHN0cmluZ19hZ2coYXR0bmFtZTo6dGV4dCwn LCAnKVxuIgogCQkJCQkJICAgIiAgICBGUk9NICgoU0VMRUNUIHVubmVzdChz dGFrZXlzKSBBUyBhdHRudW0pIHNcbiIKIAkJCQkJCSAgICIgICAgICAgICBK T0lOIHBnX2F0dHJpYnV0ZSBhIE9OIChzdGFyZWxpZCA9IGEuYXR0cmVsaWQg YW5kIGEuYXR0bnVtID0gcy5hdHRudW0pKSkgQVMgYXR0bnVtc1xuIgpAQCAt MjEyOCw2ICsyMTI5LDggQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29u c3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmludFRhYmxlQWRkRm9vdGVy KCZjb250LCBfKCJTdGF0aXN0aWNzOiIpKTsKIAkJCQlmb3IgKGkgPSAwOyBp IDwgdHVwbGVzOyBpKyspCiAJCQkJeworCQkJCQlib29sIGZpcnN0ID0gdHJ1 ZTsKKwogCQkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgICIpOwog CiAJCQkJCS8qIHN0YXRpc3RpY3MgbmFtZSAocXVhbGlmaWVkIHdpdGggbmFt ZXNwYWNlKSAqLwpAQCAtMjEzNywxMCArMjE0MCwyMiBAQCBkZXNjcmliZU9u ZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCiAJCQkJ CS8qICBvcHRpb25zICovCiAJCQkJCWlmICghc3RyY21wKFBRZ2V0dmFsdWUo cmVzdWx0LCBpLCA0KSwgInQiKSkKLQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZidWYsICIoZGVwZW5kZW5jaWVzKSIpOworCQkJCQl7CisJCQkJCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLCAiKGRlcGVuZGVuY2llcyIpOworCQkJCQkJ Zmlyc3QgPSBmYWxzZTsKKwkJCQkJfQorCisJCQkJCWlmICghc3RyY21wKFBR Z2V0dmFsdWUocmVzdWx0LCBpLCA1KSwgInQiKSkKKwkJCQkJeworCQkJCQkJ aWYgKCEgZmlyc3QpCisJCQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1Ziwg IiwgbWN2Iik7CisJCQkJCQllbHNlCisJCQkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwgIihtY3YiKTsKKwkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJ CX0KIAotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiIE9OICglcyki LAotCQkJCQkJCVBRZ2V0dmFsdWUocmVzdWx0LCBpLCA2KSk7CisJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsICIpIE9OICglcykiLAorCQkJCQkJCVBR Z2V0dmFsdWUocmVzdWx0LCBpLCA5KSk7CiAKIAkJCQkJcHJpbnRUYWJsZUFk ZEZvb3RlcigmY29udCwgYnVmLmRhdGEpOwogCQkJCX0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oCmluZGV4IGM3NGFm NDcuLjM1MjliMDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfbXZfc3RhdGlzdGljLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19tdl9zdGF0aXN0aWMuaApAQCAtMzgsMTUgKzM4LDIxIEBAIENBVEFMT0co cGdfbXZfc3RhdGlzdGljLDMzODEpCiAKIAkvKiBzdGF0aXN0aWNzIHJlcXVl c3RlZCB0byBidWlsZCAqLwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJCS8qIGFu YWx5emUgZGVwZW5kZW5jaWVzPyAqLworCWJvb2wJCW1jdl9lbmFibGVkOwkJ LyogYnVpbGQgTUNWIGxpc3Q/ICovCisKKwkvKiBNQ1Ygc2l6ZSAqLworCWlu dDMyCQltY3ZfbWF4X2l0ZW1zOwkJLyogbWF4IE1DViBpdGVtcyAqLwogCiAJ Lyogc3RhdGlzdGljcyB0aGF0IGFyZSBhdmFpbGFibGUgKGlmIHJlcXVlc3Rl ZCkgKi8KIAlib29sCQlkZXBzX2J1aWx0OwkJCS8qIGRlcGVuZGVuY2llcyB3 ZXJlIGJ1aWx0ICovCisJYm9vbAkJbWN2X2J1aWx0OwkJCS8qIE1DViBsaXN0 IHdhcyBidWlsdCAqLwogCiAJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBz dGFydCBoZXJlLCBidXQgd2UgYWxsb3cgZGlyZWN0IGFjY2VzcyB0byBzdGFr ZXlzICovCiAJaW50MnZlY3RvcglzdGFrZXlzOwkJCS8qIGFycmF5IG9mIGNv bHVtbiBrZXlzICovCiAKICNpZmRlZiBDQVRBTE9HX1ZBUkxFTgogCWJ5dGVh CQlzdGFkZXBzOwkJCS8qIGRlcGVuZGVuY2llcyAoc2VyaWFsaXplZCkgKi8K KwlieXRlYQkJc3RhbWN2OwkJCQkvKiBNQ1YgbGlzdCAoc2VyaWFsaXplZCkg Ki8KICNlbmRpZgogCiB9IEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYzsKQEAg LTYyLDE0ICs2OCwxOCBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX212X3N0YXRp c3RpYyAqRm9ybV9wZ19tdl9zdGF0aXN0aWM7CiAgKgkJY29tcGlsZXIgY29u c3RhbnRzIGZvciBwZ19tdl9zdGF0aXN0aWMKICAqIC0tLS0tLS0tLS0tLS0t LS0KICAqLwotI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTgK KyNkZWZpbmUgTmF0dHNfcGdfbXZfc3RhdGlzdGljCQkJCQkxMgogI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZAkJCTEKICNkZWZpbmUg QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZQkJCTIKICNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZXNwYWNlCQkzCiAjZGVmaW5lIEFu dW1fcGdfbXZfc3RhdGlzdGljX3N0YW93bmVyCQkJNAogI2RlZmluZSBBbnVt X3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQJCTUKLSNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTYKLSNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJCTcKLSNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhZGVwcwkJCTgKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQJCTYKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcwkJNworI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0CQkJOAorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfYnVpbHQJCQk5CisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YWtleXMJCQkxMAorI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFkZXBzCQkJMTEKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhbWN2CQkJCTEyCiAKICNlbmRpZiAgIC8qIFBHX01WX1NU QVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmlu ZGV4IGVlY2NlNDAuLmIxNmVlYmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5oCkBAIC0yNjcwLDYgKzI2NzAsMTAgQEAgREFUQShpbnNlcnQg T0lEID0gMzk5OCAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyAg ICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAKIERFU0NSKCJtdWx0aXZhcmlhdGUg c3RhdHM6IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGluZm8iKTsKIERBVEEo aW5zZXJ0IE9JRCA9IDM5OTkgKCAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVz X3Nob3cgICAgIFBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYg aSBzIDEgMCAyNSAiMTciIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBf bnVsbF8gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgX251bGxfIF9u dWxsXyBfbnVsbF8gKSk7CiBERVNDUigibXVsdGl2YXJpYXRlIHN0YXRzOiBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcyBzaG93Iik7CitEQVRBKGluc2VydCBP SUQgPSAzMzc2ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbwlQR05TUCBQ R1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIGkgcyAxIDAgMjUgIjE3IiBf bnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX212X3N0YXRz X21jdmxpc3RfaW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NS KCJtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3M6IE1DViBsaXN0IGluZm8iKTsK K0RBVEEoaW5zZXJ0IE9JRCA9IDMzNzMgKCAgcGdfbXZfbWN2X2l0ZW1zIFBH TlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQgaSBzIDEgMCAy MjQ5ICIyNiIgInsyNiwyMywxMDA5LDEwMDAsNzAxfSIgIntpLG8sbyxvLG99 IiAie29pZCxpbmRleCx2YWx1ZXMsbnVsbHMsZnJlcXVlbmN5fSIgX251bGxf IF9udWxsXyBwZ19tdl9tY3ZfaXRlbXMgX251bGxfIF9udWxsXyBfbnVsbF8g KSk7CitERVNDUigiZGV0YWlscyBhYm91dCBNQ1YgbGlzdCBpdGVtcyIpOwog CiBEQVRBKGluc2VydCBPSUQgPSAxOTI4ICggIHBnX3N0YXRfZ2V0X251bXNj YW5zCQkJUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIg MSAwIDIwICIyNiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxs XyBwZ19zdGF0X2dldF9udW1zY2FucyBfbnVsbF8gX251bGxfIF9udWxsXyAp KTsKIERFU0NSKCJzdGF0aXN0aWNzOiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBm b3IgdGFibGUvaW5kZXgiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3JlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5o CmluZGV4IGUxMGRjZjEuLjJiY2Q1ODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cmVsYXRpb24uaApAQCAtNjUzLDkgKzY1MywxMSBAQCB0eXBlZGVmIHN0cnVj dCBNVlN0YXRpc3RpY0luZm8KIAogCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAq LwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgZW5hYmxlZCAqLworCWJvb2wJCW1jdl9lbmFibGVkOwkvKiBNQ1Yg bGlzdCBlbmFibGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlz dGljcyAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcyBidWlsdCAqLworCWJvb2wJCW1jdl9idWlsdDsJCS8qIE1D ViBsaXN0IGJ1aWx0ICovCiAKIAkvKiBjb2x1bW5zIGluIHRoZSBzdGF0aXN0 aWNzIChhdHRudW1zKSAqLwogCWludDJ2ZWN0b3IgKnN0YWtleXM7CQkvKiBh dHRudW1zIG9mIHRoZSBjb2x1bW5zIGNvdmVyZWQgKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL212c3RhdHMuaAppbmRleCBjYzQzYTc5Li40NTM1ZGI3IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvbXZzdGF0cy5oCkBAIC01MSwzMCArNTEsODkgQEAgdHlw ZWRlZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1WRGVwZW5kZW5jaWVzOwogI2Rl ZmluZSBNVlNUQVRfREVQU19UWVBFX0JBU0lDCTEJCQkvKiBiYXNpYyBkZXBl bmRlbmNpZXMgdHlwZSAqLwogCiAvKgorICogTXVsdGl2YXJpYXRlIE1DViAo bW9zdC1jb21tb24gdmFsdWUpIGxpc3RzCisgKgorICogQSBzdHJhaWdodC1m b3J3YXJkIGV4dGVuc2lvbiBvZiBNQ1YgaXRlbXMgLSBpLmUuIGEgbGlzdCAo YXJyYXkpIG9mCisgKiBjb21iaW5hdGlvbnMgb2YgYXR0cmlidXRlIHZhbHVl cywgdG9nZXRoZXIgd2l0aCBhIGZyZXF1ZW5jeSBhbmQKKyAqIG51bGwgZmxh Z3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IE1DVkl0ZW1EYXRhIHsKKwlkb3Vi bGUJCWZyZXF1ZW5jeTsJLyogZnJlcXVlbmN5IG9mIHRoaXMgY29tYmluYXRp b24gKi8KKwlib29sCSAgICppc251bGw7CQkvKiBsYWdzIG9mIE5VTEwgdmFs dWVzICh1cCB0byAzMiBjb2x1bW5zKSAqLworCURhdHVtCSAgICp2YWx1ZXM7 CQkvKiB2YXJpYWJsZS1sZW5ndGggKG5kaW1lbnNpb25zKSAqLworfSBNQ1ZJ dGVtRGF0YTsKKwordHlwZWRlZiBNQ1ZJdGVtRGF0YSAqTUNWSXRlbTsKKwor LyogbXVsdGl2YXJpYXRlIE1DViBsaXN0IC0gZXNzZW50YWxseSBhbiBhcnJh eSBvZiBNQ1YgaXRlbXMgKi8KK3R5cGVkZWYgc3RydWN0IE1DVkxpc3REYXRh IHsKKwl1aW50MzIJCW1hZ2ljOwkJCS8qIG1hZ2ljIGNvbnN0YW50IG1hcmtl ciAqLworCXVpbnQzMgkJdHlwZTsJCQkvKiB0eXBlIG9mIE1DViBsaXN0IChC QVNJQykgKi8KKwl1aW50MzIJCW5kaW1lbnNpb25zOwkvKiBudW1iZXIgb2Yg ZGltZW5zaW9ucyAqLworCXVpbnQzMgkJbml0ZW1zOwkJCS8qIG51bWJlciBv ZiBNQ1YgaXRlbXMgaW4gdGhlIGFycmF5ICovCisJTUNWSXRlbQkgICAqaXRl bXM7CQkJLyogYXJyYXkgb2YgTUNWIGl0ZW1zICovCit9IE1DVkxpc3REYXRh OworCit0eXBlZGVmIE1DVkxpc3REYXRhICpNQ1ZMaXN0OworCisvKiB1c2Vk IHRvIGZsYWcgc3RhdHMgc2VyaWFsaXplZCB0byBieXRlYSAqLworI2RlZmlu ZSBNVlNUQVRfTUNWX01BR0lDCQkweEUxQTY1MUMyCS8qIG1hcmtzIHNlcmlh bGl6ZWQgYnl0ZWEgKi8KKyNkZWZpbmUgTVZTVEFUX01DVl9UWVBFX0JBU0lD CTEJCQkvKiBiYXNpYyBNQ1YgbGlzdCB0eXBlICovCisKKy8qCisgKiBMaW1p dHMgdXNlZCBmb3IgbWN2X21heF9pdGVtcyBvcHRpb24sIGkuZS4gd2UncmUg YWx3YXlzIGd1YXJhbnRlZWQKKyAqIHRvIGhhdmUgc3BhY2UgZm9yIGF0IGxl YXN0IE1WU1RBVF9NQ1ZMSVNUX01JTl9JVEVNUywgYW5kIHdlIGNhbm5vdAor ICogaGF2ZSBtb3JlIHRoYW4gTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TIGl0 ZW1zLgorICoKKyAqIFRoaXMgaXMganVzdCBhIGJvdW5kYXJ5IGZvciB0aGUg J21heCcgdGhyZXNob2xkIC0gdGhlIGFjdHVhbCBsaXN0CisgKiBtYXkgb2Yg Y291cnNlIGNvbnRhaW4gbGVzcyBpdGVtcyB0aGFuIE1WU1RBVF9NQ1ZMSVNU X01JTl9JVEVNUy4KKyAqLworI2RlZmluZSBNVlNUQVRfTUNWTElTVF9NSU5f SVRFTVMJMTI4CQkvKiBtaW4gaXRlbXMgaW4gTUNWIGxpc3QgKi8KKyNkZWZp bmUgTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TCTgxOTIJLyogbWF4IGl0ZW1z IGluIE1DViBsaXN0ICovCisKKy8qCiAgKiBUT0RPIE1heWJlIGZldGNoaW5n IHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJhdGVseSBpcyBpbmVmZmlj aWVudD8KICAqICAgICAgQ29uc2lkZXIgYWRkaW5nIGEgc2luZ2xlIGBmZXRj aF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwKICAqICAgICAgc3RhdHMg c3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21ldGhpbmcgbGlrZSB0aGF0 KS4KICAqLwogCiBNVkRlcGVuZGVuY2llcyBsb2FkX212X2RlcGVuZGVuY2ll cyhPaWQgbXZvaWQpOworTUNWTGlzdCAgICAgICAgbG9hZF9tdl9tY3ZsaXN0 KE9pZCBtdm9pZCk7CiAKIGJ5dGVhICogc2VyaWFsaXplX212X2RlcGVuZGVu Y2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOworYnl0ZWEgKiBz ZXJpYWxpemVfbXZfbWN2bGlzdChNQ1ZMaXN0IG1jdmxpc3QsIGludDJ2ZWN0 b3IgKmF0dHJzLAorCQkJCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAK IC8qIGRlc2VyaWFsaXphdGlvbiBvZiBzdGF0cyAoc2VyaWFsaXphdGlvbiBp cyBwcml2YXRlIHRvIGFuYWx5emUpICovCiBNVkRlcGVuZGVuY2llcwlkZXNl cmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKTsKK01DVkxp c3QJCQlkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICogZGF0YSk7CisK Ky8qCisgKiBSZXR1cm5zIGluZGV4IG9mIHRoZSBhdHRyaWJ1dGUgbnVtYmVy IHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEKKyAqIGRpbWVuc2lvbiB3aXRo aW4gdGhlIHN0YXRzKS4KKyAqLworaW50IG12X2dldF9pbmRleChBdHRyTnVt YmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICogc3Rha2V5cyk7CisKK2ludDJ2 ZWN0b3IqIGZpbmRfbXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9pZCAqcmVsaWQp OwogCiAvKiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdoZXJl IGVsc2UgKG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLwogZXh0ZXJuIERh dHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBHX0ZVTkNUSU9O X0FSR1MpOwogZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0ZXJuIERhdHVtIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhQR19GVU5DVElPTl9BUkdTKTsKK2V4dGVy biBEYXR1bSBwZ19tdl9tY3ZsaXN0X2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1Mp OwogCiBNVkRlcGVuZGVuY2llcwotYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGlu dCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCi0JCQkJCQkJCSAgaW50MnZl Y3RvciAqYXR0cnMsCi0JCQkJCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMp OworYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBIZWFwVHVw bGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkgIFZhY0F0dHJT dGF0cyAqKnN0YXRzKTsKKworTUNWTGlzdAorYnVpbGRfbXZfbWN2bGlzdChp bnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRy cywKKwkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCAqbnVtcm93c19m aWx0ZXJlZCk7CiAKIHZvaWQgYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25l cmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAotCQkJCQkJICAg aW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOworCQkJ CQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CiAK LXZvaWQgdXBkYXRlX212X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBlbmRlbmNp ZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICphdHRycyk7Cit2b2lkIHVw ZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVu ZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCQkgaW50MnZlY3RvciAq YXR0cnMsIFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsKIAogI2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MzIwYgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZfbWN2 Lm91dApAQCAtMCwwICsxLDIwNyBAQAorLS0gZGF0YSB0eXBlIHBhc3NlZCBi eSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIElOVCwK KyAgICBiIElOVCwKKyAgICBjIElOVAorKTsKKy0tIHVua25vd24gY29sdW1u CitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAodW5rbm93bl9j b2x1bW4pIFdJVEggKG1jdik7CitFUlJPUjogIGNvbHVtbiAidW5rbm93bl9j b2x1bW4iIHJlZmVyZW5jZWQgaW4gc3RhdGlzdGljcyBkb2VzIG5vdCBleGlz dAorLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczQgT04g bWN2X2xpc3QgKGEpIFdJVEggKG1jdik7CitFUlJPUjogIG11bHRpdmFyaWF0 ZSBzdGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zCistLSBzaW5nbGUg Y29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBt Y3ZfbGlzdCAoYSwgYSkgV0lUSCAobWN2KTsKK0VSUk9SOiAgZHVwbGljYXRl IGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlvbgorLS0gdHdv IGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBz NCBPTiBtY3ZfbGlzdCAoYSwgYSwgYikgV0lUSCAobWN2KTsKK0VSUk9SOiAg ZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlv bgorLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBTVEFUSVNUSUNTIHM0IE9O IG1jdl9saXN0IChhLCBiLCBjKSBXSVRIICh1bmtub3duX29wdGlvbik7CitF UlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlvbiAidW5rbm93 bl9vcHRpb24iCistLSBtaXNzaW5nIE1DViBzdGF0aXN0aWNzCitDUkVBVEUg U1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAoZGVw ZW5kZW5jaWVzLCBtYXhfbWN2X2l0ZW1zPTIwMCk7CitFUlJPUjogIG9wdGlv biAnbWN2JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpCistLSBp bnZhbGlkIG1jdl9tYXhfaXRlbXMgdmFsdWUgLyB0b28gbG93CitDUkVBVEUg U1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2 LCBtYXhfbWN2X2l0ZW1zPTEwKTsKK0VSUk9SOiAgbWF4IG51bWJlciBvZiBN Q1YgaXRlbXMgbXVzdCBiZSBhdCBsZWFzdCAxMjgKKy0tIGludmFsaWQgbWN2 X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElTVElD UyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2LCBtYXhfbWN2 X2l0ZW1zPTEwMDAwKTsKK0VSUk9SOiAgbWF4IG51bWJlciBvZiBNQ1YgaXRl bXMgaXMgODE5MgorLS0gY29ycmVjdCBjb21tYW5kCitDUkVBVEUgU1RBVElT VElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2KTsKKy0t IHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxF Q1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG1jdl9s aXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0 YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7Cisg bWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0c19tY3ZsaXN0 X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCBmICAgICAgICAgfCAK KygxIHJvdykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBhID0+IGIsIGEg PT4gYywgYiA9PiBjCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxF Q1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMDApIHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9l bmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhz dGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlk ID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3Zf YnVpbHQgfCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAwMAorKDEgcm93 KQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwgYSA9PiBjCitJ TlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAs IGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVp bHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00g cGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6 cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9z dGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCB0 ICAgICAgICAgfCBuaXRlbXM9MTAwMAorKDEgcm93KQorCitUUlVOQ0FURSBt Y3ZfbGlzdDsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5k ZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBt Y3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAw MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVB VEUgSU5ERVggbWN2X2lkeCBPTiBtY3ZfbGlzdCAoYSwgYik7CitBTkFMWVpF IG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZf c3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xh c3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0c19t Y3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCB0ICAgICAg ICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIG9m ZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAxMCBBTkQg YiA9IDU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG1jdl9saXN0CisgICBS ZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkKKyAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRleCBD b25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisoNCByb3dzKQorCitEUk9Q IFRBQkxFIG1jdl9saXN0OworLS0gdmFybGVuYSB0eXBlICh0ZXh0KQorQ1JF QVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIFRFWFQsCisgICAgYiBURVhU LAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHM1IE9OIG1j dl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3YpOworLS0gcmFuZG9tIGRhdGEK K0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBtb2QoaSwgMTEx KSwgbW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1Qg bWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9p bmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8 IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgICB8IGYgICAgICAgICB8IAorKDEgcm93KQorCitU UlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMK K0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzEw MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsK K0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9i dWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3Qn OjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8 IHQgICAgICAgICB8IG5pdGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5DQVRF IG1jdl9saXN0OworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIG1j dl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xp c3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3Rh dHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0 aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBt Y3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3Rf aW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8IG5p dGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5DQVRFIG1jdl9saXN0OworLS0g Y2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3Qg cGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAg IFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBtY3Zf aWR4IE9OIG1jdl9saXN0IChhLCBiKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitT RUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2 bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hF UkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5h YmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAK Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0x MDAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAq IEZST00gbWN2X2xpc3QgV0hFUkUgYSA9ICcxMCcgQU5EIGIgPSAnNSc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFw IFNjYW4gb24gbWN2X2xpc3QKKyAgIFJlY2hlY2sgQ29uZDogKChhID0gJzEw Jzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRleCBDb25kOiAo KGEgPSAnMTAnOjp0ZXh0KSBBTkQgKGIgPSAnNSc6OnRleHQpKQorKDQgcm93 cykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBjaGVjayBleHBsYWluIChl eHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2Fu KSB3aXRoIE5VTExzCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxF Q1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRIRU4gTlVMTCBF TFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVOIGkvMjAwMDAg PSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAgICAgICAoQ0FT RSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvNDAwMDAgRU5E KQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7 CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3Zf YnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0 Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAg fCB0ICAgICAgICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEg SVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRt YXAgSGVhcCBTY2FuIG9uIG1jdl9saXN0CisgICBSZWNoZWNrIENvbmQ6ICgo YSBJUyBOVUxMKSBBTkQgKGIgSVMgTlVMTCkpCisgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gbWN2X2lkeAorICAgICAgICAgSW5kZXggQ29uZDogKChh IElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyg0IHJvd3MpCisKK0RST1Ag VEFCTEUgbWN2X2xpc3Q7CistLSBOVUxMIHZhbHVlcyAobWl4IG9mIGludCBh bmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAg ICBhIElOVCwKKyAgICBiIFRFWFQsCisgICAgYyBJTlQsCisgICAgZCBURVhU CispOworQ1JFQVRFIFNUQVRJU1RJQ1MgczYgT04gbWN2X2xpc3QgKGEsIGIs IGMsIGQpIFdJVEggKG1jdik7CitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAg ICBTRUxFQ1QKKyAgICAgICAgIG1vZChpLCAxMDApLAorICAgICAgICAgKENB U0UgV0hFTiBtb2QoaSwgMjAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGks MjAwKSBFTkQpLAorICAgICAgICAgbW9kKGksIDQwMCksCisgICAgICAgICAo Q0FTRSBXSEVOIG1vZChpLCAzMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2Qo aSw2MDApIEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJs ZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1j dikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWls dCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0xMjAwCisoMSByb3cpCisK K0RST1AgVEFCTEUgbWN2X2xpc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDg0YjQ0MjUuLjY2MDcxZDggMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBA IC0xMzczLDcgKzEzNzMsOSBAQCBwZ19tdl9zdGF0c3wgU0VMRUNUIG4ubnNw bmFtZSBBUyBzY2hlbWFuYW1lLAogICAgIHMuc3RhbmFtZSwKICAgICBzLnN0 YWtleXMgQVMgYXR0bnVtcywKICAgICBsZW5ndGgocy5zdGFkZXBzKSBBUyBk ZXBzYnl0ZXMsCi0gICAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8o cy5zdGFkZXBzKSBBUyBkZXBzaW5mbworICAgIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19pbmZvKHMuc3RhZGVwcykgQVMgZGVwc2luZm8sCisgICAgbGVu Z3RoKHMuc3RhbWN2KSBBUyBtY3ZieXRlcywKKyAgICBwZ19tdl9zdGF0c19t Y3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFTIG1jdmluZm8KICAgIEZST00gKChw Z19tdl9zdGF0aXN0aWMgcwogICAgICBKT0lOIHBnX2NsYXNzIGMgT04gKChj Lm9pZCA9IHMuc3RhcmVsaWQpKSkKICAgICAgTEVGVCBKT0lOIHBnX25hbWVz cGFjZSBuIE9OICgobi5vaWQgPSBjLnJlbG5hbWVzcGFjZSkpKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDRmMmZm YjguLjg1ZDk0ZjEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQpAQCAtMTEyLDQgKzExMiw0IEBAIHRlc3Q6IGV2ZW50X3Ry aWdnZXIKIHRlc3Q6IHN0YXRzCiAKICMgcnVuIHRlc3RzIG9mIG11bHRpdmFy aWF0ZSBzdGF0cwotdGVzdDogbXZfZGVwZW5kZW5jaWVzCit0ZXN0OiBtdl9k ZXBlbmRlbmNpZXMgbXZfbWN2CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NlcmlhbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFs X3NjaGVkdWxlCmluZGV4IDA5N2EwNGYuLjY1ODRkNzMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCkBAIC0xNjMsMyArMTYzLDQg QEAgdGVzdDogeG1sCiB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBzdGF0 cwogdGVzdDogbXZfZGVwZW5kZW5jaWVzCit0ZXN0OiBtdl9tY3YKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X21jdi5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmIzMWQzMmQKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCkBAIC0wLDAgKzEs MTc4IEBACistLSBkYXRhIHR5cGUgcGFzc2VkIGJ5IHZhbHVlCitDUkVBVEUg VEFCTEUgbWN2X2xpc3QgKAorICAgIGEgSU5ULAorICAgIGIgSU5ULAorICAg IGMgSU5UCispOworCistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJ U1RJQ1MgczQgT04gbWN2X2xpc3QgKHVua25vd25fY29sdW1uKSBXSVRIICht Y3YpOworCistLSBzaW5nbGUgY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBz NCBPTiBtY3ZfbGlzdCAoYSkgV0lUSCAobWN2KTsKKworLS0gc2luZ2xlIGNv bHVtbiwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczQgT04gbWN2 X2xpc3QgKGEsIGEpIFdJVEggKG1jdik7CisKKy0tIHR3byBjb2x1bW5zLCBv bmUgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczQgT04gbWN2X2xp c3QgKGEsIGEsIGIpIFdJVEggKG1jdik7CisKKy0tIHVua25vd24gb3B0aW9u CitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykg V0lUSCAodW5rbm93bl9vcHRpb24pOworCistLSBtaXNzaW5nIE1DViBzdGF0 aXN0aWNzCitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwg YiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfbWN2X2l0ZW1zPTIwMCk7 CisKKy0tIGludmFsaWQgbWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBsb3cK K0NSRUFURSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBjKSBX SVRIIChtY3YsIG1heF9tY3ZfaXRlbXM9MTApOworCistLSBpbnZhbGlkIG1j dl9tYXhfaXRlbXMgdmFsdWUgLyB0b28gaGlnaAorQ1JFQVRFIFNUQVRJU1RJ Q1MgczQgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4X21j dl9pdGVtcz0xMDAwMCk7CisKKy0tIGNvcnJlY3QgY29tbWFuZAorQ1JFQVRF IFNUQVRJU1RJQ1MgczQgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKG1j dik7CisKKy0tIHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwg MjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FO QUxZWkUgbWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1 aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9N IHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6 OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gYSA9PiBi LCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAg U0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxF Q1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlz dF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworVFJVTkNBVEUg bWN2X2xpc3Q7CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBt Y3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbWN2 X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNz OworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gY2hlY2sgZXhwbGFpbiAo ZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2Nh bikKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwMDAw LCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBtY3ZfaWR4IE9OIG1jdl9saXN0 IChhLCBiKTsKKworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9l bmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhz dGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlk ID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RTIG9m ZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAxMCBBTkQg YiA9IDU7CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CisKKy0tIHZhcmxlbmEg dHlwZSAodGV4dCkKK0NSRUFURSBUQUJMRSBtY3ZfbGlzdCAoCisgICAgYSBU RVhULAorICAgIGIgVEVYVCwKKyAgICBjIFRFWFQKKyk7CisKK0NSRUFURSBT VEFUSVNUSUNTIHM1IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3Yp OworCistLSByYW5kb20gZGF0YQorSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAg ICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIz KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFM WVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWls dCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBw Z19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpy ZWdjbGFzczsKKworVFJVTkNBVEUgbWN2X2xpc3Q7CisKKy0tIGEgPT4gYiwg YSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNF TEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNU IG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3Rf aW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG1j dl9saXN0OworCistLSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8gbWN2 X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtY3ZfbGlz dDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0 YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisK K1RSVU5DQVRFIG1jdl9saXN0OworCistLSBjaGVjayBleHBsYWluIChleHBl Y3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQor SU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkv MjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAw KSBzKGkpOworQ1JFQVRFIElOREVYIG1jdl9pZHggT04gbWN2X2xpc3QgKGEs IGIpOworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVk LCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3Yp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21j dl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RTIG9mZikKKyBT RUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAnMTAnIEFORCBiID0g JzUnOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gY2hlY2sgZXhwbGFp biAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXgg c2Nhbikgd2l0aCBOVUxMcworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAg U0VMRUNUCisgICAgICAgKENBU0UgV0hFTiBpLzEwMDAwID0gMCBUSEVOIE5V TEwgRUxTRSBpLzEwMDAwIEVORCksCisgICAgICAgKENBU0UgV0hFTiBpLzIw MDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzIwMDAwIEVORCksCisgICAgICAg KENBU0UgV0hFTiBpLzQwMDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzQwMDAw IEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBz KGkpOworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVk LCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3Yp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21j dl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RTIG9mZikKKyBT RUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgSVMgTlVMTCBBTkQgYiBJ UyBOVUxMOworCitEUk9QIFRBQkxFIG1jdl9saXN0OworCistLSBOVUxMIHZh bHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRB QkxFIG1jdl9saXN0ICgKKyAgICBhIElOVCwKKyAgICBiIFRFWFQsCisgICAg YyBJTlQsCisgICAgZCBURVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBz NiBPTiBtY3ZfbGlzdCAoYSwgYiwgYywgZCkgV0lUSCAobWN2KTsKKworSU5T RVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUCisgICAgICAgICBtb2Qo aSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9kKGksIDIwMCkgPSAw IFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwKKyAgICAgICAgIG1v ZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMzAwKSA9 IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQpCisgICAgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbWN2 X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNz OworCitEUk9QIFRBQkxFIG1jdl9saXN0OwotLSAKMi4xLjAKCg== --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0005-multivariate-histograms.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0005-multivariate-histograms.patch"; charset="UTF-8" RnJvbSBmZWE0MzdlZTM4Mzc2ZmRhNjdkMTc3Mjc2Y2U5ODEyZjJiMGU5ZDgx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDIwOjE4OjI0 ICswMTAwClN1YmplY3Q6IFtQQVRDSCA1LzldIG11bHRpdmFyaWF0ZSBoaXN0 b2dyYW1zCgotIGV4dGVuZHMgdGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9n IChhZGQgJ2hpc3QnIGZpZWxkcykKLSBidWlsZGluZyB0aGUgaGlzdG9ncmFt cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxlIHBs YW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRlc3Rz IG1vc3RseSBlcXVhbCB0byB0aG9zZSBmb3IgZnVuY3Rpb25hbApkZXBlbmRl bmNpZXMgLyBNQ1YgbGlzdHMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sICAgIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAgICA0ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgICAgfCAgIDQ0 ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jICAgICB8ICA1NzEgKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmhpc3RvZ3JhbSB8 ICAyODcgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUu c3RhdHMgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2hpc3RvZ3JhbS5jICAgICAgfCAyMDMyICsrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAg ICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8ICAgMjQgKy0KIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5oICAgICAgICAgICAgICB8ICAgIDQgKwog c3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAg ICAgICAgfCAgMTM2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2hpc3RvZ3JhbS5vdXQgfCAgMjA3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAgNCArLQogc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgIHwgICAgMiArLQog c3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgICAgICAgICAgIHwg ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9oaXN0b2dyYW0uc3Fs ICAgICAgfCAgMTc2ICsrKwogMjEgZmlsZXMgY2hhbmdlZCwgMzUzOCBpbnNl cnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2hpc3RvZ3JhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0ub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfaGlzdG9ncmFtLnNxbAoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3Rp Y3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Mu c2dtbAppbmRleCAxOTNlNGIwLi5mZDMzODJlIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xMzMs NiArMTMzLDI0IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNU UyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNz X25hCiAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT48bGl0ZXJhbD5oaXN0b2dyYW08Lz4gKDx0eXBlPmJvb2xl YW48Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBFbmFibGVzIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRpc3RpY3MuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+ bWF4X2J1Y2tldHM8Lz4gKDx0eXBlPmludGVnZXI8Lz4pPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJl ciBvZiBoaXN0b2dyYW0gYnVja2V0cy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5tYXhfbWN2X2l0ZW1zPC8+ICg8 dHlwZT5pbnRlZ2VyPC8+KTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAg IDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCmluZGV4IDJkNTcwZWUuLjZhZmRlZTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTE2Nyw3ICsx NjcsOSBAQCBDUkVBVEUgVklFVyBwZ19tdl9zdGF0cyBBUwogICAgICAgICBs ZW5ndGgoUy5zdGFkZXBzKSBhcyBkZXBzYnl0ZXMsCiAgICAgICAgIHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFMuc3RhZGVwcykgYXMgZGVwc2lu Zm8sCiAgICAgICAgIGxlbmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCi0g ICAgICAgIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMg bWN2aW5mbworICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oUy5z dGFtY3YpIEFTIG1jdmluZm8sCisgICAgICAgIGxlbmd0aChTLnN0YWhpc3Qp IEFTIGhpc3RieXRlcywKKyAgICAgICAgcGdfbXZfc3RhdHNfaGlzdG9ncmFt X2luZm8oUy5zdGFoaXN0KSBBUyBoaXN0aW5mbwogICAgIEZST00gKHBnX212 X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0 YXJlbGlkKSkKICAgICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBOIE9O IChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCBiMDRjNTgzLi5lMmYzZmYxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwpAQCAtNzEs MTIgKzcxLDE1IEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10 ICpzdG10KQogCiAJLyogYnkgZGVmYXVsdCBidWlsZCBub3RoaW5nICovCiAJ Ym9vbCAJYnVpbGRfZGVwZW5kZW5jaWVzID0gZmFsc2UsCi0JCQlidWlsZF9t Y3YgPSBmYWxzZTsKKwkJCWJ1aWxkX21jdiA9IGZhbHNlLAorCQkJYnVpbGRf aGlzdG9ncmFtID0gZmFsc2U7CiAKLQlpbnQzMiAJbWF4X21jdl9pdGVtcyA9 IC0xOworCWludDMyIAltYXhfYnVja2V0cyA9IC0xLAorCQkJbWF4X21jdl9p dGVtcyA9IC0xOwogCiAJLyogb3B0aW9ucyByZXF1aXJlZCBiZWNhdXNlIG9m IG90aGVyIG9wdGlvbnMgKi8KLQlib29sCXJlcXVpcmVfbWN2ID0gZmFsc2U7 CisJYm9vbAlyZXF1aXJlX21jdiA9IGZhbHNlLAorCQkJcmVxdWlyZV9oaXN0 b2dyYW0gPSBmYWxzZTsKIAogCUFzc2VydChJc0Eoc3RtdCwgQ3JlYXRlU3Rh dHNTdG10KSk7CiAKQEAgLTE3NSw2ICsxNzgsMjkgQEAgQ3JlYXRlU3RhdGlz dGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJCQkJCQkJCU1WU1RBVF9N Q1ZMSVNUX01BWF9JVEVNUykpKTsKIAogCQl9CisJCWVsc2UgaWYgKHN0cmNt cChvcHQtPmRlZm5hbWUsICJoaXN0b2dyYW0iKSA9PSAwKQorCQkJYnVpbGRf aGlzdG9ncmFtID0gZGVmR2V0Qm9vbGVhbihvcHQpOworCQllbHNlIGlmIChz dHJjbXAob3B0LT5kZWZuYW1lLCAibWF4X2J1Y2tldHMiKSA9PSAwKQorCQl7 CisJCQltYXhfYnVja2V0cyA9IGRlZkdldEludDMyKG9wdCk7CisKKwkJCS8q IHRoaXMgb3B0aW9uIHJlcXVpcmVzICdoaXN0b2dyYW0nIHRvIGJlIGVuYWJs ZWQgKi8KKwkJCXJlcXVpcmVfaGlzdG9ncmFtID0gdHJ1ZTsKKworCQkJLyog c2FuaXR5IGNoZWNrICovCisJCQlpZiAobWF4X2J1Y2tldHMgPCBNVlNUQVRf SElTVF9NSU5fQlVDS0VUUykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1z ZygibWluaW11bSBudW1iZXIgb2YgYnVja2V0cyBpcyAlZCIsCisJCQkJCQkJ CU1WU1RBVF9ISVNUX01JTl9CVUNLRVRTKSkpOworCisJCQllbHNlIGlmICht YXhfYnVja2V0cyA+IE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCisJCQkJCQkgZXJybXNnKCJtYXhpbXVtIG51bWJlciBvZiBidWNr ZXRzIGlzICVkIiwKKwkJCQkJCQkJTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMp KSk7CisKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0xODMsMTAgKzIw OSwxMCBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3Rt dCkKIAl9CiAKIAkvKiBjaGVjayB0aGF0IGF0IGxlYXN0IHNvbWUgc3RhdGlz dGljcyB3ZXJlIHJlcXVlc3RlZCAqLwotCWlmICghIChidWlsZF9kZXBlbmRl bmNpZXMgfHwgYnVpbGRfbWN2KSkKKwlpZiAoISAoYnVpbGRfZGVwZW5kZW5j aWVzIHx8IGJ1aWxkX21jdiB8fCBidWlsZF9oaXN0b2dyYW0pKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9S KSwKLQkJCQkgZXJybXNnKCJubyBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVu Y2llcywgbWN2KSB3YXMgcmVxdWVzdGVkIikpKTsKKwkJCQkgZXJybXNnKCJu byBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVuY2llcywgbWN2LCBoaXN0b2dy YW0pIHdhcyByZXF1ZXN0ZWQiKSkpOwogCiAJLyogbm93IGRvIHNvbWUgY2hl Y2tpbmcgb2YgdGhlIG9wdGlvbnMgKi8KIAlpZiAocmVxdWlyZV9tY3YgJiYg KCEgYnVpbGRfbWN2KSkKQEAgLTE5NCw2ICsyMjAsMTEgQEAgQ3JlYXRlU3Rh dGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coIm9wdGlvbiAn bWN2JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpIikpKTsKIAor CWlmIChyZXF1aXJlX2hpc3RvZ3JhbSAmJiAoISBidWlsZF9oaXN0b2dyYW0p KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJvcHRpb24gJ2hpc3RvZ3JhbScg aXMgcmVxdWlyZWQgYnkgb3RoZXIgb3B0aW9ucyhzKSIpKSk7CisKIAkvKiBz b3J0IHRoZSBhdHRudW1zIGFuZCBidWlsZCBpbnQydmVjdG9yICovCiAJcXNv cnQoYXR0bnVtcywgbnVtY29scywgc2l6ZW9mKGludDE2KSwgY29tcGFyZV9p bnQxNik7CiAJc3Rha2V5cyA9IGJ1aWxkaW50MnZlY3RvcihhdHRudW1zLCBu dW1jb2xzKTsKQEAgLTIxNCwxMSArMjQ1LDE0IEBAIENyZWF0ZVN0YXRpc3Rp Y3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCiAJdmFsdWVzW0FudW1fcGdf bXZfc3RhdGlzdGljX2RlcHNfZW5hYmxlZCAtMV0gPSBCb29sR2V0RGF0dW0o YnVpbGRfZGVwZW5kZW5jaWVzKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfbWN2X2VuYWJsZWQgIC0xXSA9IEJvb2xHZXREYXR1bShidWlsZF9t Y3YpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2VuYWJs ZWQgLTFdID0gQm9vbEdldERhdHVtKGJ1aWxkX2hpc3RvZ3JhbSk7CiAKIAl2 YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcyAgICAt MV0gPSBJbnQzMkdldERhdHVtKG1heF9tY3ZfaXRlbXMpOworCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19oaXN0X21heF9idWNrZXRzIC0xXSA9IElu dDMyR2V0RGF0dW0obWF4X2J1Y2tldHMpOwogCiAJbnVsbHNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcyAgLTFdID0gdHJ1ZTsKIAludWxsc1tBbnVt X3BnX212X3N0YXRpc3RpY19zdGFtY3YgICAtMV0gPSB0cnVlOworCW51bGxz W0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QgIC0xXSA9IHRydWU7CiAK IAkvKiBpbnNlcnQgdGhlIHR1cGxlIGludG8gcGdfbXZfc3RhdGlzdGljICov CiAJbXZzdGF0cmVsID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYwppbmRleCAzMzNlMjRiLi45MTcyZjIxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMKQEAgLTIxNjMsMTAgKzIxNjMsMTIgQEAgX291dE1W U3RhdGlzdGljSW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgTVZTdGF0aXN0 aWNJbmZvICpub2RlKQogCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCVdS SVRFX0JPT0xfRklFTEQoZGVwc19lbmFibGVkKTsKIAlXUklURV9CT09MX0ZJ RUxEKG1jdl9lbmFibGVkKTsKKwlXUklURV9CT09MX0ZJRUxEKGhpc3RfZW5h YmxlZCk7CiAKIAkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwog CVdSSVRFX0JPT0xfRklFTEQoZGVwc19idWlsdCk7CiAJV1JJVEVfQk9PTF9G SUVMRChtY3ZfYnVpbHQpOworCVdSSVRFX0JPT0xfRklFTEQoaGlzdF9idWls dCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IDk3N2Y4OGUuLjBkZTI0 MTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Ns YXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Ns YXVzZXNlbC5jCkBAIC00OSw2ICs0OSw3IEBAIHN0YXRpYyB2b2lkIGFkZFJh bmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxpc3QsIE5vZGUgKmNs YXVzZSwKIAogI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfRkRFUAkJMHgwMQog I2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfTUNWCQkweDAyCisjZGVmaW5lCQlN Vl9DTEFVU0VfVFlQRV9ISVNUCQkweDA0CiAKIHN0YXRpYyBib29sIGNsYXVz ZV9pc19tdl9jb21wYXRpYmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQs IEJpdG1hcHNldCAqKmF0dG51bXMsCiAJCQkJCQkJIGludCB0eXBlKTsKQEAg LTc0LDYgKzc1LDggQEAgc3RhdGljIFNlbGVjdGl2aXR5IGNsYXVzZWxpc3Rf bXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiBzdGF0aWMgU2Vs ZWN0aXZpdHkgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KFBs YW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZT dGF0aXN0aWNJbmZvICptdnN0YXRzLAogCQkJCQkJCQkJYm9vbCAqZnVsbG1h dGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKTsKK3N0YXRpYyBTZWxlY3Rpdml0 eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlz dGljSW5mbyAqbXZzdGF0cyk7CiAKIHN0YXRpYyBpbnQgdXBkYXRlX21hdGNo X2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1 c2VzLAogCQkJCQkJCQkJaW50MnZlY3RvciAqc3Rha2V5cywgTUNWTGlzdCBt Y3ZsaXN0LApAQCAtODEsNiArODQsMTIgQEAgc3RhdGljIGludCB1cGRhdGVf bWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCiAJCQkJCQkJCQlTZWxlY3Rpdml0eSAqbG93c2VsLCBib29s ICpmdWxsbWF0Y2gsCiAJCQkJCQkJCQlib29sIGlzX29yKTsKIAorc3RhdGlj IGludCB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShQbGFubmVySW5m byAqcm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCWludDJ2ZWN0b3Ig KnN0YWtleXMsCisJCQkJCQkJCQlNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZo aXN0LAorCQkJCQkJCQkJaW50IG5tYXRjaGVzLCBjaGFyICogbWF0Y2hlcywK KwkJCQkJCQkJCWJvb2wgaXNfb3IpOworCiBzdGF0aWMgYm9vbCBoYXNfc3Rh dHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKTsKIAogc3RhdGljIExpc3QgKiBm aW5kX3N0YXRzKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCk7CkBA IC05Myw2ICsxMDIsNyBAQCBzdGF0aWMgTGlzdCAqIGZpbmRfc3RhdHMoUGxh bm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKTsKICNkZWZpbmUgVVBEQVRF X1JFU1VMVChtLHIsaXNvcikJXAogCShtKSA9IChpc29yKSA/IChNQVgobSxy KSkgOiAoTUlOKG0scikpCiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKICAqCQlST1VUSU5FUyBUTyBDT01QVVRFIFNFTEVDVElWSVRJ RVMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTIx LDcgKzEzMSw3IEBAIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwogICoKICAqIEZpcnN0IHdlIHRy eSB0byByZWR1Y2UgdGhlIGxpc3Qgb2YgY2xhdXNlcyBieSBhcHBseWluZyAo c29mdCkgZnVuY3Rpb25hbAogICogZGVwZW5kZW5jaWVzLCBhbmQgdGhlbiB3 ZSB0cnkgdG8gZXN0aW1hdGUgdGhlIHNlbGVjdGl2aXR5IG9mIHRoZSByZWR1 Y2VkCi0gKiBsaXN0IG9mIGNsYXVzZXMgdXNpbmcgdGhlIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdC4KKyAqIGxpc3Qgb2YgY2xhdXNlcyB1c2luZyB0aGUgbXVs dGl2YXJpYXRlIE1DViBsaXN0IGFuZCBoaXN0b2dyYW1zLgogICoKICAqIEZp bmFsbHkgd2UgcmVtb3ZlIHRoZSBwb3J0aW9uIG9mIGNsYXVzZXMgZXN0aW1h dGVkIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywKICAqIGFuZCBwcm9jZXNz IHRoZSByZXN0IG9mIHRoZSBjbGF1c2VzIHVzaW5nIHRoZSByZWd1bGFyIHBl ci1jb2x1bW4gc3RhdHMuCkBAIC0yMTQsMTEgKzIyNCwxMyBAQCBjbGF1c2Vs aXN0X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCSAqIHdpdGgg dGhlIG11bHRpdmFyaWF0ZSBjb2RlIGFuZCBzaW1wbHkgc2tpcCB0byBlc3Rp bWF0aW9uIHVzaW5nIHRoZQogCSAqIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0 cy4KIAkgKi8KLQlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9DTEFVU0VfVFlQ RV9NQ1YpICYmCi0JCShjb3VudF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlk LCBNVl9DTEFVU0VfVFlQRV9NQ1YpID49IDIpKQorCWlmIChoYXNfc3RhdHMo c3RhdHMsIE1WX0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJ U1QpICYmCisJCShjb3VudF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLAor CQkJCQkJICBNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9I SVNUKSA+PSAyKSkKIAl7CiAJCS8qIGNvbGxlY3QgYXR0cmlidXRlcyBmcm9t IHRoZSBjb21wYXRpYmxlIGNvbmRpdGlvbnMgKi8KLQkJQml0bWFwc2V0ICpt dmF0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQs IE1WX0NMQVVTRV9UWVBFX01DVik7CisJCUJpdG1hcHNldCAqbXZhdHRudW1z ID0gY29sbGVjdF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLAorCQkJCQkJ CQkJCQlNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNU KTsKIAogCQkvKiBhbmQgc2VhcmNoIGZvciB0aGUgc3RhdGlzdGljIGNvdmVy aW5nIHRoZSBtb3N0IGF0dHJpYnV0ZXMgKi8KIAkJTVZTdGF0aXN0aWNJbmZv ICptdnN0YXQgPSBjaG9vc2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZhdHRu dW1zKTsKQEAgLTIzMCw3ICsyNDIsNyBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LAogCiAJCQkvKiBzcGxpdCB0aGUgY2xh dXNlbGlzdCBpbnRvIHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMgKi8KIAkJCWNs YXVzZXMgPSBjbGF1c2VsaXN0X212X3NwbGl0KHJvb3QsIHJlbGlkLCBjbGF1 c2VzLCAmbXZjbGF1c2VzLAotCQkJCQkJCQkJCSAgbXZzdGF0LCBNVl9DTEFV U0VfVFlQRV9NQ1YpOworCQkJCQkJCQkJCSAgbXZzdGF0LCBNVl9DTEFVU0Vf VFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKIAogCQkJLyogd2Un dmUgY2hvc2VuIHRoZSBoaXN0b2dyYW0gdG8gbWF0Y2ggdGhlIGNsYXVzZXMg Ki8KIAkJCUFzc2VydChtdmNsYXVzZXMgIT0gTklMKTsKQEAgLTk0Miw2ICs5 NTQsNyBAQCBzdGF0aWMgU2VsZWN0aXZpdHkKIGNsYXVzZWxpc3RfbXZfc2Vs ZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIE1W U3RhdGlzdGljSW5mbyAqbXZzdGF0cykKIHsKIAlib29sIGZ1bGxtYXRjaCA9 IGZhbHNlOworCVNlbGVjdGl2aXR5IHMxID0gMC4wLCBzMiA9IDAuMDsKIAog CS8qCiAJICogTG93ZXN0IGZyZXF1ZW5jeSBpbiB0aGUgTUNWIGxpc3QgKG1h eSBiZSB1c2VkIGFzIGFuIHVwcGVyIGJvdW5kCkBAIC05NTUsOSArOTY4LDI0 IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzCiAJICog ICAgICBNQ1YvaGlzdG9ncmFtIGV2YWx1YXRpb24pLgogCSAqLwogCi0JLyog RXZhbHVhdGUgdGhlIE1DViBzZWxlY3Rpdml0eSAqLwotCXJldHVybiBjbGF1 c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgY2xhdXNlcywg bXZzdGF0cywKKwkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZpcnN0LiAqLworCXMx ID0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNs YXVzZXMsIG12c3RhdHMsCiAJCQkJCQkJCQkJICAgJmZ1bGxtYXRjaCwgJm1j dl9sb3cpOworCisJLyoKKwkgKiBJZiB3ZSBnb3QgYSBmdWxsIGVxdWFsaXR5 IG1hdGNoIG9uIHRoZSBNQ1YgbGlzdCwgd2UncmUgZG9uZSAoYW5kCisJICog dGhlIGVzdGltYXRlIGlzIHByZXR0eSBnb29kKS4KKwkgKi8KKwlpZiAoZnVs bG1hdGNoICYmIChzMSA+IDAuMCkpCisJCXJldHVybiBzMTsKKworCS8qIFRP RE8gaWYgKGZ1bGxtYXRjaCkgd2l0aG91dCBtYXRjaGluZyBNQ1YgaXRlbSwg dXNlIHRoZSBtY3ZfbG93CisJICogICAgICBzZWxlY3Rpdml0eSBhcyB1cHBl ciBib3VuZCAqLworCisJczIgPSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5 X2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLCBtdnN0YXRzKTsKKworCS8qIFRP RE8gY2xhbXAgdG8gPD0gMS4wIChvciBtb3JlIHN0cmljdGx5LCB3aGVuIHBv c3NpYmxlKSAqLworCXJldHVybiBzMSArIHMyOwogfQogCiAvKgpAQCAtMTE2 MCw3ICsxMTg4LDcgQEAgY2hvb3NlX212X3N0YXRpc3RpY3MoTGlzdCAqc3Rh dHMsIEJpdG1hcHNldCAqYXR0bnVtcykKIAkJaW50CW51bWF0dHJzID0gYXR0 cnMtPmRpbTE7CiAKIAkJLyogc2tpcCBkZXBlbmRlbmNpZXMtb25seSBzdGF0 cyAqLwotCQlpZiAoISBpbmZvLT5tY3ZfYnVpbHQpCisJCWlmICghIChpbmZv LT5tY3ZfYnVpbHQgfHwgaW5mby0+aGlzdF9idWlsdCkpCiAJCQljb250aW51 ZTsKIAogCQkvKiBjb3VudCBjb2x1bW5zIGNvdmVyZWQgYnkgdGhlIGhpc3Rv Z3JhbSAqLwpAQCAtMTM5MSw3ICsxNDE5LDcgQEAgbXZfY29tcGF0aWJsZV93 YWxrZXIoTm9kZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0ICpjb250 ZXh0KQogCQkJY2FzZSBGX1NDQUxBUkdUU0VMOgogCiAJCQkJLyogbm90IGNv bXBhdGlibGUgd2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLwotCQkJ CWlmICghIChjb250ZXh0LT50eXBlcyAmIE1WX0NMQVVTRV9UWVBFX01DVikp CisJCQkJaWYgKCEgKGNvbnRleHQtPnR5cGVzICYgKE1WX0NMQVVTRV9UWVBF X01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpKSkKIAkJCQkJcmV0dXJuIHRy dWU7CS8qIHRlcm1pbmF0ZSAqLwogIAogCQkJCWJyZWFrOwpAQCAtMjAwNyw2 ICsyMDM1LDkgQEAgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQgdHlwZSkK IAogCQlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQRV9NQ1YpICYmIHN0YXQt Pm1jdl9idWlsdCkKIAkJCXJldHVybiB0cnVlOworCisJCWlmICgodHlwZSAm IE1WX0NMQVVTRV9UWVBFX0hJU1QpICYmIHN0YXQtPmhpc3RfYnVpbHQpCisJ CQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNDEx LDMgKzI0NDIsNTI1IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQ bGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAogCXJldHVybiBu bWF0Y2hlczsKIH0KKworLyoKKyAqIEVzdGltYXRlIHNlbGVjdGl2aXR5IG9m IGNsYXVzZXMgdXNpbmcgYSBoaXN0b2dyYW0uCisgKgorICogSWYgdGhlcmUn cyBubyBoaXN0b2dyYW0gZm9yIHRoZSBzdGF0cywgdGhlIGZ1bmN0aW9uIHJl dHVybnMgMC4wLgorICoKKyAqIFRoZSBnZW5lcmFsIGlkZWEgb2YgdGhpcyBt ZXRob2QgaXMgc2ltaWxhciB0byBob3cgTUNWIGxpc3RzIGFyZQorICogcHJv Y2Vzc2VkLCBleGNlcHQgdGhhdCB0aGlzIGludHJvZHVjZXMgdGhlIGNvbmNl cHQgb2YgYSBwYXJ0aWFsCisgKiBtYXRjaCAoTUNWIG9ubHkgd29ya3Mgd2l0 aCBmdWxsIG1hdGNoIC8gbWlzbWF0Y2gpLgorICoKKyAqIFRoZSBhbGdvcml0 aG0gd29ya3MgbGlrZSB0aGlzOgorICoKKyAqICAgMSkgbWFyayBhbGwgYnVj a2V0cyBhcyAnZnVsbCBtYXRjaCcKKyAqICAgMikgd2FsayB0aHJvdWdoIGFs bCB0aGUgY2xhdXNlcworICogICAzKSBmb3IgYSBwYXJ0aWN1bGFyIGNsYXVz ZSwgd2FsayB0aHJvdWdoIGFsbCB0aGUgYnVja2V0cworICogICA0KSBza2lw IGJ1Y2tldHMgdGhhdCBhcmUgYWxyZWFkeSAnbm8gbWF0Y2gnCisgKiAgIDUp IGNoZWNrIGNsYXVzZSBmb3IgYnVja2V0cyB0aGF0IHN0aWxsIG1hdGNoIChh dCBsZWFzdCBwYXJ0aWFsbHkpCisgKiAgIDYpIHN1bSBmcmVxdWVuY2llcyBm b3IgYnVja2V0cyB0byBnZXQgc2VsZWN0aXZpdHkKKyAqCisgKiBVbmxpa2Ug TUNWIGxpc3RzLCBoaXN0b2dyYW1zIGhhdmUgYSBjb25jZXB0IG9mIGEgcGFy dGlhbCBtYXRjaC4gSW4KKyAqIHRoYXQgY2FzZSB3ZSB1c2UgMS8yIHRoZSBi dWNrZXQsIHRvIG1pbmltaXplIHRoZSBhdmVyYWdlIGVycm9yLiBUaGUKKyAq IE1WIGhpc3RvZ3JhbXMgYXJlIHVzdWFsbHkgbGVzcyBkZXRhaWxlZCB0aGFu IHRoZSBwZXItY29sdW1uIG9uZXMsCisgKiBtZWFuaW5nIHRoZSBzdW0gaXMg b2Z0ZW4gcXVpdGUgaGlnaCAodGhhbmtzIHRvIGNvbWJpbmluZyBhIGxvdCBv ZgorICogInBhcnRpYWxseSBoaXQiIGJ1Y2tldHMpLgorICoKKyAqIE1heWJl IHdlIGNvdWxkIHVzZSBwZXItYnVja2V0IGluZm9ybWF0aW9uIHdpdGggbnVt YmVyIG9mIGRpc3RpbmN0CisgKiB2YWx1ZXMgaXQgY29udGFpbnMgKGZvciBl YWNoIGRpbWVuc2lvbiksIGFuZCB0aGVuIHVzZSB0aGF0IHRvIGNvcnJlY3QK KyAqIHRoZSBlc3RpbWF0ZSAoc28gd2l0aCAxMCBkaXN0aW5jdCB2YWx1ZXMs IHdlJ2QgdXNlIDEvMTAgb2YgdGhlIGJ1Y2tldAorICogZnJlcXVlbmN5KS4g V2UgbWlnaHQgYWxzbyBzY2FsZSB0aGUgdmFsdWUgZGVwZW5kaW5nIG9uIHRo ZSBhY3R1YWwKKyAqIG5kaXN0aW5jdCBlc3RpbWF0ZSAobm90IGp1c3QgdGhl IHZhbHVlcyBvYnNlcnZlZCBpbiB0aGUgc2FtcGxlKS4KKyAqCisgKiBBbm90 aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBtdWx0aXBseSB0aGUgc2VsZWN0aXZp dGllcywgaS5lLiBpZiB3ZSBnZXQKKyAqICdwYXJ0aWFsIG1hdGNoJyBmb3Ig YSBidWNrZXQgZm9yIG11bHRpcGxlIGNvbmRpdGlvbnMsIHdlIG1pZ2h0IHVz ZQorICogMC41XmsgKHdoZXJlIGsgaXMgdGhlIG51bWJlciBvZiBjb25kaXRp b25zKSwgaW5zdGVhZCBvZiAwLjUuIFRoaXMKKyAqIHByb2JhYmx5IGRvZXMg bm90IG1pbmltaXplIHRoZSBhdmVyYWdlIGVycm9yLCB0aG91Z2guCisgKgor ICogVE9ETyBUaGlzIG1pZ2h0IHVzZSBhIHNpbWlsYXIgc2hvcnRjdXQgdG8g TUNWIGxpc3RzIC0gY291bnQgYnVja2V0cworICogICAgICBtYXJrZWQgYXMg cGFydGlhbC9mdWxsIG1hdGNoLCBhbmQgdGVybWluYXRlIG9uY2UgdGhpcyBk cm9wIHRvIDAuCisgKiAgICAgIE5vdCBzdXJlIGlmIGl0J3MgcmVhbGx5IHdv cnRoIGl0IC0gZm9yIE1DViBsaXN0cyBhIHNpdHVhdGlvbiBsaWtlCisgKiAg ICAgIHRoaXMgaXMgbm90IHVuY29tbW9uLCBidXQgZm9yIGhpc3RvZ3JhbXMg aXQncyBub3QgdGhhdCBjbGVhci4KKyAqLworc3RhdGljIFNlbGVjdGl2aXR5 CitjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCU1WU3RhdGlz dGljSW5mbyAqbXZzdGF0cykKK3sKKwlpbnQgaTsKKwlTZWxlY3Rpdml0eSBz ID0gMC4wOworCVNlbGVjdGl2aXR5IHUgPSAwLjA7CisKKwlpbnQJCW5tYXRj aGVzID0gMDsKKwljaGFyICAgKm1hdGNoZXMgPSBOVUxMOworCisJTVZTZXJp YWxpemVkSGlzdG9ncmFtIG12aGlzdCA9IE5VTEw7CisKKwkvKiB0aGVyZSdz IG5vIGhpc3RvZ3JhbSAqLworCWlmICghIG12c3RhdHMtPmhpc3RfYnVpbHQp CisJCXJldHVybiAwLjA7CisKKwkvKiBUaGVyZSBtYXkgYmUgbm8gaGlzdG9n cmFtIGluIHRoZSBzdGF0cyAoY2hlY2sgaGlzdF9idWlsdCBmbGFnKSAqLwor CW12aGlzdCA9IGxvYWRfbXZfaGlzdG9ncmFtKG12c3RhdHMtPm12b2lkKTsK KworCUFzc2VydCAobXZoaXN0ICE9IE5VTEwpOworCUFzc2VydCAoY2xhdXNl cyAhPSBOSUwpOworCUFzc2VydCAobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0g Mik7CisKKwkvKgorCSAqIEJpdG1hcCBvZiBidWNrZXQgbWF0Y2hlcyAobWlz bWF0Y2gsIHBhcnRpYWwsIGZ1bGwpLiBieSBkZWZhdWx0CisJICogYWxsIGJ1 Y2tldHMgZnVsbHkgbWF0Y2ggKGFuZCB3ZSdsbCBlbGltaW5hdGUgdGhlbSku CisJICovCisJbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbXZo aXN0LT5uYnVja2V0cyk7CisJbWVtc2V0KG1hdGNoZXMsICBNVlNUQVRTX01B VENIX0ZVTEwsIHNpemVvZihjaGFyKSptdmhpc3QtPm5idWNrZXRzKTsKKwor CW5tYXRjaGVzID0gbXZoaXN0LT5uYnVja2V0czsKKworCS8qIGJ1aWxkIHRo ZSBtYXRjaCBiaXRtYXAgKi8KKwl1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3Rv Z3JhbShyb290LCBjbGF1c2VzLAorCQkJCQkJCQkgIG12c3RhdHMtPnN0YWtl eXMsIG12aGlzdCwKKwkJCQkJCQkJICBubWF0Y2hlcywgbWF0Y2hlcywgZmFs c2UpOworCisJLyogbm93LCB3YWxrIHRocm91Z2ggdGhlIGJ1Y2tldHMgYW5k IHN1bSB0aGUgc2VsZWN0aXZpdGllcyAqLworCWZvciAoaSA9IDA7IGkgPCBt dmhpc3QtPm5idWNrZXRzOyBpKyspCisJeworCQkvKgorCQkgKiBGaW5kIG91 dCB3aGF0IHBhcnQgb2YgdGhlIGRhdGEgaXMgY292ZXJlZCBieSB0aGUgaGlz dG9ncmFtLAorCQkgKiBzbyB0aGF0IHdlIGNhbiAnc2NhbGUnIHRoZSBzZWxl Y3Rpdml0eSBwcm9wZXJseSAoZS5nLiB3aGVuCisJCSAqIG9ubHkgNTAlIG9m IHRoZSBzYW1wbGUgZ290IGludG8gdGhlIGhpc3RvZ3JhbSwgYW5kIHRoZSBy ZXN0CisJCSAqIGlzIGluIGEgTUNWIGxpc3QpLgorCQkgKgorCQkgKiBUT0RP IFRoaXMgbWlnaHQgYmUgaGFuZGxlZCBieSBrZWVwaW5nIGEgZ2xvYmFsICJm cmVxdWVuY3kiCisJCSAqICAgICAgZm9yIHRoZSB3aG9sZSBoaXN0b2dyYW0s IHdoaWNoIG1pZ2h0IHNhdmUgdXMgc29tZSB0aW1lCisJCSAqICAgICAgc3Bl bnQgYWNjZXNzaW5nIHRoZSBub3QtbWF0Y2hpbmcgcGFydCBvZiB0aGUgaGlz dG9ncmFtLgorCQkgKiAgICAgIEFsdGhvdWdoIGl0J3MgbGlrZWx5IGluIGEg Y2FjaGUsIHNvIGl0J3MgdmVyeSBmYXN0LgorCQkgKi8KKwkJdSArPSBtdmhp c3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CisKKwkJaWYgKG1hdGNoZXNbaV0g PT0gTVZTVEFUU19NQVRDSF9GVUxMKQorCQkJcyArPSBtdmhpc3QtPmJ1Y2tl dHNbaV0tPm50dXBsZXM7CisJCWVsc2UgaWYgKG1hdGNoZXNbaV0gPT0gTVZT VEFUU19NQVRDSF9QQVJUSUFMKQorCQkJcyArPSAwLjUgKiBtdmhpc3QtPmJ1 Y2tldHNbaV0tPm50dXBsZXM7CisJfQorCisjaWZkZWYgREVCVUdfTVZISVNU CisJZGVidWdfaGlzdG9ncmFtX21hdGNoZXMobXZoaXN0LCBtYXRjaGVzKTsK KyNlbmRpZgorCisJLyogcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJpdG1hcCBh bmQgZGVzZXJpYWxpemVkIGhpc3RvZ3JhbSAqLworCXBmcmVlKG1hdGNoZXMp OworCXBmcmVlKG12aGlzdCk7CisKKwlyZXR1cm4gcyAqIHU7Cit9CisKKy8q IGNhY2hlZCByZXN1bHQgb2YgYnVja2V0IGJvdW5kYXJ5IGNvbXBhcmlzb24g Zm9yIGEgc2luZ2xlIGRpbWVuc2lvbiAqLworCisjZGVmaW5lIEhJU1RfQ0FD SEVfTk9UX0ZPVU5ECQkweDAwCisjZGVmaW5lIEhJU1RfQ0FDSEVfRkFMU0UJ CQkweDAxCisjZGVmaW5lIEhJU1RfQ0FDSEVfVFJVRQkJCQkweDAzCisjZGVm aW5lIEhJU1RfQ0FDSEVfTUFTSwkJCQkweDAyCisKK3N0YXRpYyBjaGFyCiti dWNrZXRfY29udGFpbnNfdmFsdWUoRm1nckluZm8gbHRwcm9jLCBEYXR1bSBj b25zdHZhbHVlLAorCQkJCQkgIERhdHVtIG1pbl92YWx1ZSwgICBEYXR1bSBt YXhfdmFsdWUsCisJCQkJCSAgaW50ICAgbWluX2luZGV4LCAgIGludCAgIG1h eF9pbmRleCwKKwkJCQkJICBib29sICBtaW5faW5jbHVkZSwgYm9vbCAgbWF4 X2luY2x1ZGUsCisJCQkJCSAgY2hhciAqIGNhbGxjYWNoZSkKK3sKKwlib29s IGEsIGI7CisKKwljaGFyIG1pbl9jYWNoZWQgPSBjYWxsY2FjaGVbbWluX2lu ZGV4XTsKKwljaGFyIG1heF9jYWNoZWQgPSBjYWxsY2FjaGVbbWF4X2luZGV4 XTsKKworCS8qCisJICogRmlyc3Qgc29tZSBxdWljayBjaGVja3Mgb24gZXF1 YWxpdHkgLSBpZiBhbnkgb2YgdGhlIGJvdW5kYXJpZXMgZXF1YWxzLAorCSAq IHdlIGhhdmUgYSBwYXJ0aWFsIG1hdGNoIChzbyBubyBuZWVkIHRvIGNhbGwg dGhlIGNvbXBhcmF0b3IpLgorCSAqLworCWlmICgoKG1pbl92YWx1ZSA9PSBj b25zdHZhbHVlKSAmJiAobWluX2luY2x1ZGUpKSB8fAorCQkoKG1heF92YWx1 ZSA9PSBjb25zdHZhbHVlKSAmJiAobWF4X2luY2x1ZGUpKSkKKwkJcmV0dXJu IE1WU1RBVFNfTUFUQ0hfUEFSVElBTDsKKworCS8qIEtlZXAgdGhlIHZhbHVl cyAwLzEgYmVjYXVzZSBvZiB0aGUgWE9SIGF0IHRoZSBlbmQuICovCisJYSA9 ICgobWluX2NhY2hlZCAmIEhJU1RfQ0FDSEVfTUFTSykgPj4gMSk7CisJYiA9 ICgobWF4X2NhY2hlZCAmIEhJU1RfQ0FDSEVfTUFTSykgPj4gMSk7CisKKwkv KgorCSAqIElmIHJlc3VsdCBmb3IgdGhlIGJ1Y2tldCBsb3dlciBib3VuZCBu b3QgaW4gY2FjaGUsIGV2YWx1YXRlIHRoZSBmdW5jdGlvbgorCSAqIGFuZCBz dG9yZSB0aGUgcmVzdWx0IGluIHRoZSBjYWNoZS4KKwkgKi8KKwlpZiAoISBt aW5fY2FjaGVkKQorCXsKKwkJYSA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNh bGwyQ29sbCgmbHRwcm9jLAorCQkJCQkJCQkJCSAgIERFRkFVTFRfQ09MTEFU SU9OX09JRCwKKwkJCQkJCQkJCQkgICBjb25zdHZhbHVlLCBtaW5fdmFsdWUp KTsKKwkJLyogcmVtZW1iZXIgdGhlIHJlc3VsdCAqLworCQljYWxsY2FjaGVb bWluX2luZGV4XSA9IChhKSA/IEhJU1RfQ0FDSEVfVFJVRSA6IEhJU1RfQ0FD SEVfRkFMU0U7CisJfQorCisJLyogQW5kIGRvIHRoZSBzYW1lIGZvciB0aGUg dXBwZXIgYm91bmQuICovCisJaWYgKCEgbWF4X2NhY2hlZCkKKwl7CisJCWIg PSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJmx0cHJvYywKKwkJ CQkJCQkJCQkgICBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJ ICAgY29uc3R2YWx1ZSwgbWF4X3ZhbHVlKSk7CisJCS8qIHJlbWVtYmVyIHRo ZSByZXN1bHQgKi8KKwkJY2FsbGNhY2hlW21heF9pbmRleF0gPSAoYikgPyBI SVNUX0NBQ0hFX1RSVUUgOiBISVNUX0NBQ0hFX0ZBTFNFOworCX0KKworCXJl dHVybiAoYSBeIGIpID8gTVZTVEFUU19NQVRDSF9QQVJUSUFMIDogTVZTVEFU U19NQVRDSF9OT05FOworfQorCitzdGF0aWMgY2hhcgorYnVja2V0X2lzX3Nt YWxsZXJfdGhhbl92YWx1ZShGbWdySW5mbyBvcHByb2MsIERhdHVtIGNvbnN0 dmFsdWUsCisJCQkJCSAgRGF0dW0gbWluX3ZhbHVlLCAgIERhdHVtIG1heF92 YWx1ZSwKKwkJCQkJICBpbnQgICBtaW5faW5kZXgsICAgaW50ICAgbWF4X2lu ZGV4LAorCQkJCQkgIGJvb2wgIG1pbl9pbmNsdWRlLCBib29sICBtYXhfaW5j bHVkZSwKKwkJCQkJICBjaGFyICogY2FsbGNhY2hlLCBib29sIGlzZ3QpCit7 CisJY2hhciBtaW5fY2FjaGVkID0gY2FsbGNhY2hlW21pbl9pbmRleF07CisJ Y2hhciBtYXhfY2FjaGVkID0gY2FsbGNhY2hlW21heF9pbmRleF07CisKKwkv KiBLZWVwIHRoZSB2YWx1ZXMgMC8xIGJlY2F1c2Ugb2YgdGhlIFhPUiBhdCB0 aGUgZW5kLiAqLworCWJvb2wgYSA9ICgobWluX2NhY2hlZCAmIEhJU1RfQ0FD SEVfTUFTSykgPj4gMSk7CisJYm9vbCBiID0gKChtYXhfY2FjaGVkICYgSElT VF9DQUNIRV9NQVNLKSA+PiAxKTsKKworCWlmICghIG1pbl9jYWNoZWQpCisJ eworCQlhID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHBy b2MsCisJCQkJCQkJCQkJICAgREVGQVVMVF9DT0xMQVRJT05fT0lELAorCQkJ CQkJCQkJCSAgIG1pbl92YWx1ZSwKKwkJCQkJCQkJCQkgICBjb25zdHZhbHVl KSk7CisJCS8qIHJlbWVtYmVyIHRoZSByZXN1bHQgKi8KKwkJY2FsbGNhY2hl W21pbl9pbmRleF0gPSAoYSkgPyBISVNUX0NBQ0hFX1RSVUUgOiBISVNUX0NB Q0hFX0ZBTFNFOworCX0KKworCWlmICghIG1heF9jYWNoZWQpCisJeworCQli ID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2MsCisJ CQkJCQkJCQkJICAgREVGQVVMVF9DT0xMQVRJT05fT0lELAorCQkJCQkJCQkJ CSAgIG1heF92YWx1ZSwKKwkJCQkJCQkJCQkgICBjb25zdHZhbHVlKSk7CisJ CS8qIHJlbWVtYmVyIHRoZSByZXN1bHQgKi8KKwkJY2FsbGNhY2hlW21heF9p bmRleF0gPSAoYikgPyBISVNUX0NBQ0hFX1RSVUUgOiBISVNUX0NBQ0hFX0ZB TFNFOworCX0KKworCS8qCisJICogTm93LCB3ZSBuZWVkIHRvIGNvbWJpbmUg Ym90aCByZXN1bHRzIGludG8gdGhlIGZpbmFsIGFuc3dlciwgYW5kIHdlIG5l ZWQKKwkgKiB0byBiZSBjYXJlZnVsIGFib3V0IHRoZSAnaXNndCcgdmFyaWFi bGUgd2hpY2gga2luZGEgaW52ZXJ0cyB0aGUgbWVhbmluZy4KKwkgKgorCSAq IEZpcnN0LCB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBlYWNoIGJvdW5kYXJ5 IHJldHVybnMgZGlmZmVyZW50IHJlc3VsdHMuCisJICogSW4gdGhhdCBjYXNl IHRoZSBvdXRjb21lIGNhbiBvbmx5IGJlICdwYXJ0aWFsJyBtYXRjaC4KKwkg Ki8KKwkgaWYgKGEgIT0gYikKKwkJcmV0dXJuIE1WU1RBVFNfTUFUQ0hfUEFS VElBTDsKKworCS8qCisJICogV2hlbiB0aGUgcmVzdWx0cyBhcmUgdGhlIHNh bWUsIHRoZW4gaXQgZGVwZW5kcyBvbiB0aGUgJ2lzZ3QnIHZhbHVlLiBUaGVy ZQorCSAqIGFyZSBmb3VyIG9wdGlvbnM6CisJICoKKwkgKiBpc2d0PWZhbHNl IGE9Yj10cnVlICA9PiBmdWxsIG1hdGNoCisJICogaXNndD1mYWxzZSBhPWI9 ZmFsc2UgPT4gZW1wdHkKKwkgKiBpc2d0PXRydWUgIGE9Yj10cnVlICA9PiBl bXB0eQorCSAqIGlzZ3Q9dHJ1ZSAgYT1iPWZhbHNlID0+IGZ1bGwgbWF0Y2gK KwkgKgorCSAqIFdlJ2xsIGNoZWF0IGEgYml0LCBiZWNhdXNlIHdlIGtub3cg dGhhdCAoYT1iKSBzbyB3ZSdsbCB1c2UganVzdCBvbmUgb2YgdGhlbS4KKwkg Ki8KKwlpZiAoaXNndCkKKwkJcmV0dXJuICghYSkgPyBNVlNUQVRTX01BVENI X0ZVTEwgOiBNVlNUQVRTX01BVENIX05PTkU7CisJZWxzZQorCQlyZXR1cm4g KCBhKSA/IE1WU1RBVFNfTUFUQ0hfRlVMTCA6IE1WU1RBVFNfTUFUQ0hfTk9O RTsKK30KKworLyoKKyAqIEV2YWx1YXRlIGNsYXVzZXMgdXNpbmcgdGhlIGhp c3RvZ3JhbSwgYW5kIHVwZGF0ZSB0aGUgbWF0Y2ggYml0bWFwLgorICoKKyAq IFRoZSBiaXRtYXAgbWF5IGJlIGFscmVhZHkgcGFydGlhbGx5IHNldCwgc28g dGhpcyBpcyByZWFsbHkgYSB3YXkgdG8KKyAqIGNvbWJpbmUgcmVzdWx0cyBv ZiBzZXZlcmFsIGNsYXVzZSBsaXN0cyAtIGVpdGhlciB3aGVuIGNvbXB1dGlu ZworICogY29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgUChBfEIpIG9yIGEgY29t YmluYXRpb24gb2YgQU5EL09SIGNsYXVzZXMuCisgKgorICogTm90ZTogVGhp cyBpcyBub3QgYSBzaW1wbGUgYml0bWFwIGluIHRoZSBzZW5zZSB0aGF0IHRo ZXJlIGFyZSBtb3JlCisgKiAgICAgICB0aGFuIHR3byBwb3NzaWJsZSB2YWx1 ZXMgZm9yIGVhY2ggaXRlbSAtIG5vIG1hdGNoLCBwYXJ0aWFsCisgKiAgICAg ICBtYXRjaCBhbmQgZnVsbCBtYXRjaC4gU28gd2UgbmVlZCAyIGJpdHMgcGVy IGl0ZW0uCisgKgorICogVE9ETyBUaGlzIHdvcmtzIHdpdGggJ2JpdG1hcCcg d2hlcmUgZWFjaCBpdGVtIGlzIHJlcHJlc2VudGVkIGFzIGEKKyAqICAgICAg Y2hhciwgd2hpY2ggaXMgc2xpZ2h0bHkgd2FzdGVmdWwuIEluc3RlYWQsIHdl IGNvdWxkIHVzZSBhIGJpdG1hcAorICogICAgICB3aXRoIDIgYml0cyBwZXIg aXRlbSwgcmVkdWNpbmcgdGhlIHNpemUgdG8gfjEvNC4gQnkgdXNpbmcgdmFs dWVzCisgKiAgICAgIDAsIDEgYW5kIDMgKGluc3RlYWQgb2YgMCwgMSBhbmQg MiksIHRoZSBvcGVyYXRpb25zIChtZXJnaW5nIGV0Yy4pCisgKiAgICAgIG1p Z2h0IGJlIHBlcmZvcm1lZCBqdXN0IGxpa2UgZm9yIHNpbXBsZSBiaXRtYXAg YnkgdXNpbmcgJiBhbmQgfCwKKyAqICAgICAgd2hpY2ggbWlnaHQgYmUgZmFz dGVyIHRoYW4gbWluL21heC4KKyAqLworc3RhdGljIGludAordXBkYXRlX21h dGNoX2JpdG1hcF9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCisJCQkJCQkJICBpbnQydmVjdG9yICpzdGFrZXlzLAorCQkJ CQkJCSAgTVZTZXJpYWxpemVkSGlzdG9ncmFtIG12aGlzdCwKKwkJCQkJCQkg IGludCBubWF0Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkJICBib29s IGlzX29yKQoreworCWludCBpOworCUxpc3RDZWxsICogbDsKKworCS8qCisJ ICogVXNlZCBmb3IgY2FjaGluZyBmdW5jdGlvbiBjYWxscywgb25seSBvbmNl IHBlciBkZWR1cGxpY2F0ZWQgdmFsdWUuCisJICoKKwkgKiBXZSBrbm93IG1h eSBoYXZlIHVwIHRvICgyICogbmJ1Y2tldHMpIHZhbHVlcyBwZXIgZGltZW5z aW9uLiBJdCdzCisJICogcHJvYmFibHkgb3ZlcmtpbGwsIGJ1dCBsZXQncyBh bGxvY2F0ZSB0aGF0IG9uY2UgZm9yIGFsbCBjbGF1c2VzLAorCSAqIHRvIG1p bmltaXplIG92ZXJoZWFkLgorCSAqCisJICogQWxzbywgd2Ugb25seSBuZWVk IHR3byBiaXRzIHBlciB2YWx1ZSwgYnV0IHRoaXMgYWxsb2NhdGVzIGJ5dGUK KwkgKiBwZXIgdmFsdWUuIE1pZ2h0IGJlIHdvcnRoIG9wdGltaXppbmcuCisJ ICoKKwkgKiAweDAwIC0gbm90IHlldCBjYWxsZWQKKwkgKiAweDAxIC0gY2Fs bGVkLCByZXN1bHQgaXMgJ2ZhbHNlJworCSAqIDB4MDMgLSBjYWxsZWQsIHJl c3VsdCBpcyAndHJ1ZScKKwkgKi8KKwljaGFyICpjYWxsY2FjaGUgPSBwYWxs b2MobXZoaXN0LT5uYnVja2V0cyk7CisKKwlBc3NlcnQobXZoaXN0ICE9IE5V TEwpOworCUFzc2VydChtdmhpc3QtPm5idWNrZXRzID4gMCk7CisJQXNzZXJ0 KG5tYXRjaGVzID49IDApOworCUFzc2VydChubWF0Y2hlcyA8PSBtdmhpc3Qt Pm5idWNrZXRzKTsKKworCUFzc2VydChjbGF1c2VzICE9IE5JTCk7CisJQXNz ZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDEpOworCisJLyogbG9vcCB0 aHJvdWdoIHRoZSBjbGF1c2VzIGFuZCBkbyB0aGUgZXN0aW1hdGlvbiAqLwor CWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJeworCQlOb2RlICogY2xhdXNlID0g KE5vZGUqKWxmaXJzdChsKTsKKworCQkvKiBpZiBpdCdzIGEgUmVzdHJpY3RJ bmZvLCB0aGVuIGV4dHJhY3QgdGhlIGNsYXVzZSAqLworCQlpZiAoSXNBKGNs YXVzZSwgUmVzdHJpY3RJbmZvKSkKKwkJCWNsYXVzZSA9IChOb2RlKikoKFJl c3RyaWN0SW5mbyopY2xhdXNlKS0+Y2xhdXNlOworCisJCS8qIGl0J3MgZWl0 aGVyIE9wQ2xhdXNlLCBvciBOdWxsVGVzdCAqLworCQlpZiAoaXNfb3BjbGF1 c2UoY2xhdXNlKSkKKwkJeworCQkJT3BFeHByICogZXhwciA9IChPcEV4cHIq KWNsYXVzZTsKKwkJCWJvb2wJCXZhcm9ubGVmdCA9IHRydWU7CisJCQlib29s CQlvazsKKworCQkJRm1nckluZm8Jb3Bwcm9jOwkJCS8qIG9wZXJhdG9yICov CisJCQlmbWdyX2luZm8oZ2V0X29wY29kZShleHByLT5vcG5vKSwgJm9wcHJv Yyk7CisKKwkJCS8qIHJlc2V0IHRoZSBjYWNoZSAocGVyIGNsYXVzZSkgKi8K KwkJCW1lbXNldChjYWxsY2FjaGUsIDAsIG12aGlzdC0+bmJ1Y2tldHMpOwor CisJCQlvayA9IChOdW1SZWxpZHMoY2xhdXNlKSA9PSAxKSAmJgorCQkJCSAo aXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4cHItPmFyZ3Mp KSB8fAorCQkJCSAodmFyb25sZWZ0ID0gZmFsc2UsCisJCQkJICBpc19wc2V1 ZG9fY29uc3RhbnRfY2xhdXNlKGxpbml0aWFsKGV4cHItPmFyZ3MpKSkpOwor CisJCQlpZiAob2spCisJCQl7CisJCQkJRm1nckluZm8JCWx0cHJvYzsKKwkJ CQlSZWdQcm9jZWR1cmUJb3BycmVzdCA9IGdldF9vcHJyZXN0KGV4cHItPm9w bm8pOworCisJCQkJVmFyICogdmFyID0gKHZhcm9ubGVmdCkgPyBsaW5pdGlh bChleHByLT5hcmdzKSA6IGxzZWNvbmQoZXhwci0+YXJncyk7CisJCQkJQ29u c3QgKiBjc3QgPSAodmFyb25sZWZ0KSA/IGxzZWNvbmQoZXhwci0+YXJncykg OiBsaW5pdGlhbChleHByLT5hcmdzKTsKKwkJCQlib29sIGlzZ3QgPSAoISB2 YXJvbmxlZnQpOworCisJCQkJVHlwZUNhY2hlRW50cnkgKnR5cGVjYWNoZQor CQkJCQkJCQk9IGxvb2t1cF90eXBlX2NhY2hlKHZhci0+dmFydHlwZSwgVFlQ RUNBQ0hFX0xUX09QUik7CisKKwkJCQkvKiBsb29rdXAgZGltZW5zaW9uIGZv ciB0aGUgYXR0cmlidXRlICovCisJCQkJaW50IGlkeCA9IG12X2dldF9pbmRl eCh2YXItPnZhcmF0dG5vLCBzdGFrZXlzKTsKKworCQkJCWZtZ3JfaW5mbyhn ZXRfb3Bjb2RlKHR5cGVjYWNoZS0+bHRfb3ByKSwgJmx0cHJvYyk7CisKKwkJ CQkvKgorCQkJCSAqIENoZWNrIHRoaXMgZm9yIGFsbCBidWNrZXRzIHRoYXQg c3RpbGwgaGF2ZSAidHJ1ZSIgaW4gdGhlIGJpdG1hcAorCQkJCSAqCisJCQkJ ICogV2UgYWxyZWFkeSBrbm93IHRoZSBjbGF1c2VzIHVzZSBzdWl0YWJsZSBv cGVyYXRvcnMgKGJlY2F1c2UgdGhhdCdzCisJCQkJICogaG93IHdlIGZpbHRl cmVkIHRoZW0pLgorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBtdmhp c3QtPm5idWNrZXRzOyBpKyspCisJCQkJeworCQkJCQljaGFyIHJlcyA9IE1W U1RBVFNfTUFUQ0hfTk9ORTsKKworCQkJCQlNVlNlcmlhbGl6ZWRCdWNrZXQg YnVja2V0ID0gbXZoaXN0LT5idWNrZXRzW2ldOworCisJCQkJCS8qIGhpc3Rv Z3JhbSBib3VuZGFyaWVzICovCisJCQkJCURhdHVtIG1pbnZhbCwgbWF4dmFs OworCQkJCQlib29sIG1pbmluY2x1ZGUsIG1heGluY2x1ZGU7CisJCQkJCWlu dCBtaW5pZHgsIG1heGlkeDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgQU5E LWxpc3RzLCB3ZSBjYW4gYWxzbyBtYXJrIE5VTEwgYnVja2V0cyBhcyAnbm8g bWF0Y2gnCisJCQkJCSAqIChhbmQgdGhlbiBza2lwIHRoZW0pLiBGb3IgT1It bGlzdHMgdGhpcyBpcyBub3QgcG9zc2libGUuCisJCQkJCSAqLworCQkJCQlp ZiAoKCEgaXNfb3IpICYmIGJ1Y2tldC0+bnVsbHNvbmx5W2lkeF0pCisJCQkJ CQltYXRjaGVzW2ldID0gTVZTVEFUU19NQVRDSF9OT05FOworCisJCQkJCS8q CisJCQkJCSAqIFNraXAgYnVja2V0cyB0aGF0IHdlcmUgYWxyZWFkeSBlbGlt aW5hdGVkIC0gdGhpcyBpcyBpbXBvdGFudAorCQkJCQkgKiBjb25zaWRlcmlu ZyBob3cgd2UgdXBkYXRlIHRoZSBpbmZvICh3ZSBvbmx5IGxvd2VyIHRoZSBt YXRjaCkuCisJCQkJCSAqIFdlIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyBh Ym91dCB0aGUgTUFUQ0hfUEFSVElBTCBidWNrZXRzLgorCQkJCQkgKi8KKwkJ CQkJaWYgKCghIGlzX29yKSAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01B VENIX05PTkUpKQorCQkJCQkJY29udGludWU7CisJCQkJCWVsc2UgaWYgKGlz X29yICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hfRlVMTCkpCisJ CQkJCQljb250aW51ZTsKKworCQkJCQkvKiBsb29rdXAgdGhlIHZhbHVlcyBh bmQgY2FjaGUgb2YgZnVuY3Rpb24gY2FsbHMgKi8KKwkJCQkJbWluaWR4ID0g YnVja2V0LT5taW5baWR4XTsKKwkJCQkJbWF4aWR4ID0gYnVja2V0LT5tYXhb aWR4XTsKKworCQkJCQltaW52YWwgPSBtdmhpc3QtPnZhbHVlc1tpZHhdW2J1 Y2tldC0+bWluW2lkeF1dOworCQkJCQltYXh2YWwgPSBtdmhpc3QtPnZhbHVl c1tpZHhdW2J1Y2tldC0+bWF4W2lkeF1dOworCisJCQkJCW1pbmluY2x1ZGUg PSBidWNrZXQtPm1pbl9pbmNsdXNpdmVbaWR4XTsKKwkJCQkJbWF4aW5jbHVk ZSA9IGJ1Y2tldC0+bWF4X2luY2x1c2l2ZVtpZHhdOworCisJCQkJCS8qCisJ CQkJCSAqIFRPRE8gTWF5YmUgaXQncyBwb3NzaWJsZSB0byBhZGQgaGVyZSBh IHNpbWlsYXIgb3B0aW1pemF0aW9uCisJCQkJCSAqICAgICAgYXMgZm9yIHRo ZSBNQ1YgbGlzdHM6CisJCQkJCSAqIAorCQkJCQkgKiAgICAgIChubWF0Y2hl cyA9PSAwKSAmJiBBTkQtbGlzdCA9PiBhbGwgZWxpbWluYXRlZCAoRkFMU0Up CisJCQkJCSAqICAgICAgKG5tYXRjaGVzID09IE4pICYmIE9SLWxpc3QgID0+ IGFsbCBlbGltaW5hdGVkIChUUlVFKQorCQkJCQkgKgorCQkJCQkgKiAgICAg IEJ1dCBpdCdzIG1vcmUgY29tcGxleCBiZWNhdXNlIG9mIHRoZSBwYXJ0aWFs IG1hdGNoZXMuCisJCQkJCSAqLworCisJCQkJCS8qCisJCQkJCSogSWYgaXQn cyBub3QgYSAiPCIgb3IgIj4iIG9yICI9IiBvcGVyYXRvciwganVzdCBpZ25v cmUgdGhlCisJCQkJCSogY2xhdXNlLiBPdGhlcndpc2Ugbm90ZSB0aGUgcmVs aWQgYW5kIGF0dG51bSBmb3IgdGhlIHZhcmlhYmxlLgorCQkJCQkqCisJCQkJ CSogVE9ETyBJJ20gcmVhbGx5IHVuc3VyZSB0aGUgaGFuZGxpbmcgb2YgJ2lz Z3QnIGZsYWcgKHRoYXQgaXMsIGNsYXVzZXMKKwkJCQkJKiAgICAgIHdpdGgg cmV2ZXJzZSBvcmRlciBvZiB2YXJpYWJsZS9jb25zdGFudCkgaXMgY29ycmVj dC4gSSB3b3VsZG4ndAorCQkJCQkqICAgICAgYmUgc3VycHJpc2VkIGlmIHRo ZXJlIHdhcyBzb21lIG1peHVwLiBVc2luZyB0aGUgbHQvZ3Qgb3BlcmF0b3Jz CisJCQkJCSogICAgICBpbnN0ZWFkIG9mIG1lc3Npbmcgd2l0aCB0aGUgb3Bw cm9jIGNvdWxkIG1ha2UgaXQgc2ltcGxlci4KKwkJCQkJKiAgICAgIEl0IHdv dWxkIGhvd2V2ZXIgYmUgdXNpbmcgYSBkaWZmZXJlbnQgb3BlcmF0b3IgdGhh biB0aGUgcXVlcnksCisJCQkJCSogICAgICBhbHRob3VnaCBpdCdzIG5vdCBh bnkgc2hhZGllciB0aGFuIHVzaW5nIHRoZSBzZWxlY3Rpdml0eSBmdW5jdGlv bgorCQkJCQkqICAgICAgYXMgaXMgZG9uZSBjdXJyZW50bHkuCisJCQkJCSov CisJCQkJCXN3aXRjaCAob3BycmVzdCkKKwkJCQkJeworCQkJCQkJY2FzZSBG X1NDQUxBUkxUU0VMOgkvKiBWYXIgPCBDb25zdCAqLworCQkJCQkJY2FzZSBG X1NDQUxBUkdUU0VMOgkvKiBWYXIgPiBDb25zdCAqLworCisJCQkJCQkJcmVz ID0gYnVja2V0X2lzX3NtYWxsZXJfdGhhbl92YWx1ZShvcHByb2MsIGNzdC0+ Y29uc3R2YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCSAgIG1pbnZhbCwgbWF4dmFs LAorCQkJCQkJCQkJCQkJCQkJICAgbWluaWR4LCBtYXhpZHgsCisJCQkJCQkJ CQkJCQkJCQkgICBtaW5pbmNsdWRlLCBtYXhpbmNsdWRlLAorCQkJCQkJCQkJ CQkJCQkJICAgY2FsbGNhY2hlLCBpc2d0KTsKKwkJCQkJCQlicmVhazsKKwor CQkJCQkJY2FzZSBGX0VRU0VMOgorCisJCQkJCQkJLyoKKwkJCQkJCQkgKiBX ZSBvbmx5IGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGlzIHdpdGhpbiB0aGUg YnVja2V0LCB1c2luZyB0aGUKKwkJCQkJCQkgKiBsdCBvcGVyYXRvciwgYW5k IHdlIGFsc28gY2hlY2sgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGJvdW5kYXJp ZXMuCisJCQkJCQkJICovCisKKwkJCQkJCQlyZXMgPSBidWNrZXRfY29udGFp bnNfdmFsdWUobHRwcm9jLCBjc3QtPmNvbnN0dmFsdWUsCisJCQkJCQkJCQkJ CQkJCW1pbnZhbCwgbWF4dmFsLAorCQkJCQkJCQkJCQkJCQltaW5pZHgsIG1h eGlkeCwKKwkJCQkJCQkJCQkJCQkJbWluaW5jbHVkZSwgbWF4aW5jbHVkZSwK KwkJCQkJCQkJCQkJCQkJY2FsbGNhY2hlKTsKKwkJCQkJCQlicmVhazsKKwkJ CQkJfQorCisJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgcmVzLCBp c19vcik7CisKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoSXNBKGNs YXVzZSwgTnVsbFRlc3QpKQorCQl7CisJCQlOdWxsVGVzdCAqIGV4cHIgPSAo TnVsbFRlc3QqKWNsYXVzZTsKKwkJCVZhciAqIHZhciA9IChWYXIqKShleHBy LT5hcmcpOworCisJCQkvKiBGSVhNRSBwcm9wZXIgbWF0Y2hpbmcgYXR0cmli dXRlIHRvIGRpbWVuc2lvbiAqLworCQkJaW50IGlkeCA9IG12X2dldF9pbmRl eCh2YXItPnZhcmF0dG5vLCBzdGFrZXlzKTsKKworCQkJLyoKKwkJCSAqIFdh bGsgdGhyb3VnaCB0aGUgYnVja2V0cyBhbmQgZXZhbHVhdGUgdGhlIGN1cnJl bnQgY2xhdXNlLiBXZSBjYW4KKwkJCSAqIHNraXAgaXRlbXMgdGhhdCB3ZXJl IGFscmVhZHkgcnVsZWQgb3V0LCBhbmQgdGVybWluYXRlIGlmIHRoZXJlIGFy ZQorCQkJICogbm8gcmVtYWluaW5nIGJ1Y2tldHMgdGhhdCBtaWdodCBwb3Nz aWJseSBtYXRjaC4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IG12aGlz dC0+bmJ1Y2tldHM7IGkrKykKKwkJCXsKKwkJCQlNVlNlcmlhbGl6ZWRCdWNr ZXQgYnVja2V0ID0gbXZoaXN0LT5idWNrZXRzW2ldOworCisJCQkJLyoKKwkJ CQkgKiBTa2lwIGJ1Y2tldHMgdGhhdCB3ZXJlIGFscmVhZHkgZWxpbWluYXRl ZCAtIHRoaXMgaXMgaW1wb3RhbnQKKwkJCQkgKiBjb25zaWRlcmluZyBob3cg d2UgdXBkYXRlIHRoZSBpbmZvICh3ZSBvbmx5IGxvd2VyIHRoZSBtYXRjaCkK KwkJCQkgKi8KKwkJCQlpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09 IE1WU1RBVFNfTUFUQ0hfTk9ORSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWVs c2UgaWYgKGlzX29yICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hf RlVMTCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogaWYgdGhlIGNsYXVz ZSBtaXNtYXRjaGVzIHRoZSBidWNrZXQsIHNldCBpdCBhcyBNQVRDSF9OT05F ICovCisJCQkJaWYgKChleHByLT5udWxsdGVzdHR5cGUgPT0gSVNfTlVMTCkK KwkJCQkJJiYgKCEgYnVja2V0LT5udWxsc29ubHlbaWR4XSkpCisJCQkJCVVQ REFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19NQVRDSF9OT05FLCBp c19vcik7CisKKwkJCQllbHNlIGlmICgoZXhwci0+bnVsbHRlc3R0eXBlID09 IElTX05PVF9OVUxMKSAmJgorCQkJCQkJIChidWNrZXQtPm51bGxzb25seVtp ZHhdKSkKKwkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBNVlNUQVRT X01BVENIX05PTkUsIGlzX29yKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChv cl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNsYXVzZSkpCisJCXsK KwkJCS8qIEFORC9PUiBjbGF1c2UsIHdpdGggYWxsIGNsYXVzZXMgY29tcGF0 aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBNViBzdGF0ICovCisKKwkJCWludAkJ CWk7CisJCQlCb29sRXhwciAgICpvcmNsYXVzZSAgPSAoKEJvb2xFeHByKilj bGF1c2UpOworCQkJTGlzdAkgICAqb3JjbGF1c2VzID0gb3JjbGF1c2UtPmFy Z3M7CisKKwkJCS8qIG1hdGNoL21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBi dWNrZXQgKi8KKwkJCWludAlvcl9ubWF0Y2hlcyA9IDA7CisJCQljaGFyICog b3JfbWF0Y2hlcyA9IE5VTEw7CisKKwkJCUFzc2VydChvcmNsYXVzZXMgIT0g TklMKTsKKwkJCUFzc2VydChsaXN0X2xlbmd0aChvcmNsYXVzZXMpID49IDIp OworCisJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgYnVja2V0cyAqLworCQkJ b3Jfbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCisJCQkvKiBieSBk ZWZhdWx0IG5vbmUgb2YgdGhlIGJ1Y2tldHMgbWF0Y2hlcyB0aGUgY2xhdXNl cyAqLworCQkJb3JfbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICog b3Jfbm1hdGNoZXMpOworCisJCQlpZiAob3JfY2xhdXNlKGNsYXVzZSkpCisJ CQl7CisJCQkJLyogT1IgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVz LCBpbml0aWFsbHkgKi8KKwkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFU U19NQVRDSF9OT05FLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOworCQkJ CW9yX25tYXRjaGVzID0gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkv KiBBTkQgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBtYXRjaGVzLCBpbml0aWFs bHkgKi8KKwkJCQltZW1zZXQob3JfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9G VUxMLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMpOworCQkJfQorCisJCQkv KiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgT1ItY2xhdXNlcyAq LworCQkJb3Jfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3Rv Z3JhbShyb290LCBvcmNsYXVzZXMsCisJCQkJCQkJCQkJc3Rha2V5cywgbXZo aXN0LAorCQkJCQkJCQkJCW9yX25tYXRjaGVzLCBvcl9tYXRjaGVzLCBvcl9j bGF1c2UoY2xhdXNlKSk7CisKKwkJCS8qIG1lcmdlIHRoZSBiaXRtYXAgaW50 byB0aGUgZXhpc3Rpbmcgb25lKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBtdmhp c3QtPm5idWNrZXRzOyBpKyspCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUbyBB TkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEgTUlOKCkgc2VtYW50aWNzIGlzIHVz ZWQuCisJCQkJICogRm9yIE9SLW1lcmdlLCB1c2UgTUFYKCkuCisJCQkJICoK KwkJCQkgKiBGSVhNRSB0aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRoZSBudW1i ZXIgb2YgbWF0Y2hlcworCQkJCSAqLworCQkJCVVQREFURV9SRVNVTFQobWF0 Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwgaXNfb3IpOworCQkJfQorCisJCQlw ZnJlZShvcl9tYXRjaGVzKTsKKworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJS T1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIsIGNsYXVzZS0+dHlwZSk7 CisJfQorCisJLyogZnJlZSB0aGUgY2FsbCBjYWNoZSAqLworCXBmcmVlKGNh bGxjYWNoZSk7CisKKwlyZXR1cm4gbm1hdGNoZXM7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggODM5NDEx MS4uMjUxOTI0OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYwpAQCAtNDEyLDcgKzQxMiw3IEBAIGdldF9yZWxhdGlv bl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQltdnN0YXQgPSAoRm9ybV9wZ19tdl9z dGF0aXN0aWMpIEdFVFNUUlVDVChodHVwKTsKIAogCQkJLyogdW5hdmFpbGFi bGUgc3RhdHMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdGhlIHBsYW5uZXIg Ki8KLQkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5tY3Zf YnVpbHQpCisJCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0IHx8IG12c3RhdC0+ bWN2X2J1aWx0IHx8IG12c3RhdC0+aGlzdF9idWlsdCkKIAkJCXsKIAkJCQlp bmZvID0gbWFrZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKIApAQCAtNDIyLDEw ICs0MjIsMTIgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJ CQkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KIAkJCQlpbmZvLT5kZXBzX2Vu YWJsZWQgPSBtdnN0YXQtPmRlcHNfZW5hYmxlZDsKIAkJCQlpbmZvLT5tY3Zf ZW5hYmxlZCAgPSBtdnN0YXQtPm1jdl9lbmFibGVkOworCQkJCWluZm8tPmhp c3RfZW5hYmxlZCA9IG12c3RhdC0+aGlzdF9lbmFibGVkOwogCiAJCQkJLyog YnVpbHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KIAkJCQlpbmZvLT5kZXBz X2J1aWx0ID0gbXZzdGF0LT5kZXBzX2J1aWx0OwogCQkJCWluZm8tPm1jdl9i dWlsdCAgPSBtdnN0YXQtPm1jdl9idWlsdDsKKwkJCQlpbmZvLT5oaXN0X2J1 aWx0ID0gbXZzdGF0LT5oaXN0X2J1aWx0OwogCiAJCQkJLyogc3Rha2V5cyAq LwogCQkJCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0 dXAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpp bmRleCBmOWJmMTBjLi45ZGJiM2I2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDYgQEAgc3ViZGly ID0gc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cwogdG9wX2J1aWxkZGlyID0g Li4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtl ZmlsZS5nbG9iYWwKIAotT0JKUyA9IGNvbW1vbi5vIGRlcGVuZGVuY2llcy5v IG1jdi5vCitPQkpTID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gaGlzdG9n cmFtLm8gbWN2Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNr ZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9SRUFETUUuaGlzdG9ncmFtIGIvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9SRUFETUUuaGlzdG9ncmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjgyMzRkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0KQEAg LTAsMCArMSwyODcgQEAKK011bHRpdmFyaWF0ZSBoaXN0b2dyYW1zCis9PT09 PT09PT09PT09PT09PT09PT09PQorCitIaXN0b2dyYW1zIG9uIGluZGl2aWR1 YWwgYXR0cmlidXRlcyBjb25zaXN0IG9mIGJ1Y2tldHMgcmVwcmVzZW50ZWQg YnkgcmFuZ2VzLAorY292ZXJpbmcgdGhlIGRvbWFpbiBvZiB0aGUgYXR0cmli dXRlLiBUaGF0IGlzLCBlYWNoIGJ1Y2tldCBpcyBhIFttaW4sbWF4XQoraW50 ZXJ2YWwsIGFuZCBjb250YWlucyBhbGwgdmFsdWVzIGluIHRoaXMgcmFuZ2Uu IFRoZSBoaXN0b2dyYW0gaXMgYnVpbHQgaW4gc3VjaAorYSB3YXkgdGhhdCBh bGwgYnVja2V0cyBoYXZlIGFib3V0IHRoZSBzYW1lIGZyZXF1ZW5jeS4KKwor TXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMgYXJlIGFuIGV4dGVuc2lvbiBpbnRv IG4tZGltZW5zaW9uYWwgc3BhY2UgLSB0aGUgYnVja2V0cworYXJlIG4tZGlt ZW5zaW9uYWwgaW50ZXJ2YWxzIChpLmUuIG4tZGltZW5zaW9uYWwgcmVjdGFn bGVzKSwgY292ZXJpbmcgdGhlIGRvbWFpbgorb2YgdGhlIGNvbWJpbmF0aW9u IG9mIGF0dHJpYnV0ZXMuIFRoYXQgaXMsIGVhY2ggYnVja2V0IGhhcyBhIHZl Y3RvciBvZiBsb3dlcgorYW5kIHVwcGVyIGJvdW5kYXJpZXMsIGRlbm90ZWQg bWluW2ldIGFuZCBtYXhbaV0gKHdoZXJlIGkgPSAxLi5uKS4KKworSW4gYWRk aXRpb24gdG8gdGhlIGJvdW5kYXJpZXMsIGVhY2ggYnVja2V0IHRyYWNrcyBh ZGRpdGlvbmFsIGluZm86CisKKyAgICAqIGZyZXF1ZW5jeSAoZnJhY3Rpb24g b2YgdHVwbGVzIGluIHRoZSBidWNrZXQpCisgICAgKiB3aGV0aGVyIHRoZSBi b3VuZGFyaWVzIGFyZSBpbmNsdXNpdmUgb3IgZXhjbHVzaXZlCisgICAgKiB3 aGV0aGVyIHRoZSBkaW1lbnNpb24gY29udGFpbnMgb25seSBOVUxMIHZhbHVl cworICAgICogbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbiBlYWNoIGRp bWVuc2lvbiAoZm9yIGJ1aWxkaW5nIG9ubHkpCisKK0l0J3MgcG9zc2libGUg dGhhdCBpbiB0aGUgZnV0dXJlIHdlJ2xsIG11bHRpcGxlIGhpc3RvZ3JhbSB0 eXBlcywgd2l0aCBkaWZmZXJlbnQKK2ZlYXR1cmVzLiBXZSBkbyBob3dldmVy IGV4cGVjdCBhbGwgdGhlIHR5cGVzIHRvIHNoYXJlIHRoZSBzYW1lIHJlcHJl c2VudGF0aW9uCisoYnVja2V0cyBhcyByYW5nZXMpIGFuZCBvbmx5IGRpZmZl ciBpbiBob3cgd2UgYnVpbGQgdGhlbS4KKworVGhlIGN1cnJlbnQgaW1wbGVt ZW50YXRpb24gYnVpbGRzIG5vbi1vdmVybGFwcGluZyBidWNrZXRzLCB0aGF0 IG1heSBub3QgYmUgdHJ1ZQorZm9yIHNvbWUgaGlzdG9ncmFtIHR5cGVzIGFu ZCB0aGUgY29kZSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyBhc3N1bXB0aW9u LiBUaGVyZQorYXJlIGludGVyZXN0aW5nIHR5cGVzIG9mIGhpc3RvZ3JhbXMg KG9yIGFsZ29yaXRobXMpIHdpdGggb3ZlcmxhcHBpbmcgYnVja2V0cy4KKwor V2hlbiB1c2VkIG9uIGxvdy1jYXJkaW5hbGl0eSBkYXRhLCBoaXN0b2dyYW1z IHVzdWFsbHkgcGVyZm9ybSBjb25zaWRlcmFibHkgd29yc2UKK3RoYW4gTUNW IGxpc3RzICh3aGljaCBhcmUgYSBnb29kIGZpdCBmb3IgdGhpcyBraW5kIG9m IGRhdGEpLiBUaGlzIGlzIGVzcGVjaWFsbHkKK3RydWUgb24gbGFiZWwtbGlr ZSB2YWx1ZXMsIHdoZXJlIG9yZGVyaW5nIG9mIHRoZSB2YWx1ZXMgaXMgbW9z dGx5IHVucmVsYXRlZCB0bworbWVhbmluZyBvZiB0aGUgZGF0YSwgYXMgcHJv cGVyIG9yZGVyaW5nIGlzIGNydWNpYWwgZm9yIGhpc3RvZ3JhbXMuCisKK09u IGhpZ2gtY2FyZGluYWxpdHkgZGF0YSB0aGUgaGlzdG9ncmFtcyBhcmUgdXN1 YWxseSBhIGJldHRlciBjaG9pY2UsIGJlY2F1c2UgTUNWCitsaXN0cyBjYW4n dCByZXByZXNlbnQgdGhlIGRpc3RyaWJ1dGlvbiBhY2N1cmF0ZWx5IGVub3Vn aC4KKworCitTZWxlY3Rpdml0eSBlc3RpbWF0aW9uCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisKK1RoZSBlc3RpbWF0aW9uIGlzIGltcGxlbWVudGVkIGlu IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKCksIGFuZAor d29ya3MgdmVyeSBzaW1pbGFybHkgdG8gY2xhdXNlbGlzdF9tdl9zZWxlY3Rp dml0eV9tY3ZsaXN0LgorCitUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQg d2hpbGUgTUNWIGxpc3RzIHN1cHBvcnQgZXhhY3QgbWF0Y2hlcywgaGlzdG9n cmFtcworb2Z0ZW4gcmVzdWx0IGluIGFwcHJveGltYXRlIG1hdGNoZXMgLSBl LmcuIHdpdGggZXF1YWxpdHkgd2UgY2FuIG9ubHkgc2F5IGlmCit0aGUgY29u c3RhbnQgd291bGQgYmUgcGFydCBvZiB0aGUgYnVja2V0LCBidXQgbm90IHdo ZXRoZXIgaXQgcmVhbGx5IGlzIHRoZXJlCitvciB3aGF0IGZyYWN0aW9uIG9m IHRoZSBidWNrZXQgaXQgY29ycmVzcG9uZHMgdG8uIEluIHRoaXMgY2FzZSB3 ZSByZWx5IG9uCitzb21lIGRlZmF1bHRzIGp1c3QgbGlrZSBpbiB0aGUgcGVy LWNvbHVtbiBoaXN0b2dyYW1zLgorCitUaGUgY3VycmVudCBpbXBsZW1lbnRh dGlvbiB1c2VzIGhpc3RvZ3JhbXMgdG8gZXN0aW1hdGVzIHRob3NlIHR5cGVz IG9mIGNsYXVzZXMKKyh0aGluayBvZiBXSEVSRSBjb25kaXRpb25zKToKKwor ICAgIChhKSBlcXVhbGl0eSBjbGF1c2VzICAgIFdIRVJFIChhID0gMSkgQU5E IChiID0gMikKKyAgICAoYikgaW5lcXVhbGl0eSBjbGF1c2VzICBXSEVSRSAo YSA8IDEpIEFORCAoYiA+PSAyKQorICAgIChjKSBOVUxMIGNsYXVzZXMgICAg ICAgIFdIRVJFIChhIElTIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVMTCkKKyAg ICAoZCkgT1ItY2xhdXNlcyAgICAgICAgICBXSEVSRSAoYSA9IDEpICBPUiAo YiA9IDIpCisKK1NpbWlsYXJseSB0byBNQ1YgbGlzdHMsIGl0J3MgcG9zc2li bGUgdG8gYWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdHlwZXMgb2YKK2Ns YXVzZXMsIGZvciBleGFtcGxlOgorCisgICAgKGUpIG11bHRpLXZhciBjbGF1 c2VzICAgV0hFUkUgKGEgPiBiKQorCithbmQgc28gb24uIFRoZXNlIGFyZSB0 YXNrcyBmb3IgdGhlIGZ1dHVyZSwgbm90IHlldCBpbXBsZW1lbnRlZC4KKwor CitXaGVuIGV2YWx1YXRpbmcgYSBjbGF1c2Ugb24gYSBidWNrZXQsIHdlIG1h eSBnZXQgb25lIG9mIHRocmVlIHJlc3VsdHM6CisKKyAgICAoYSkgRlVMTF9N QVRDSCAtIFRoZSBidWNrZXQgZGVmaW5pdGVseSBtYXRjaGVzIHRoZSBjbGF1 c2UuCisKKyAgICAoYikgUEFSVElBTF9NQVRDSCAtIFRoZSBidWNrZXQgbWF0 Y2hlcyB0aGUgY2xhdXNlLCBidXQgbm90IG5lY2Vzc2FyaWx5IGFsbAorICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIHR1cGxlcyBpdCByZXByZXNlbnRz LgorCisgICAgKGMpIE5PX01BVENIIC0gVGhlIGJ1Y2tldCBkZWZpbml0ZWx5 IGRvZXMgbm90IG1hdGNoIHRoZSBjbGF1c2UuCisKK1RoaXMgbWF5IGJlIGls bHVzdHJhdGVkIHVzaW5nIGEgcmFuZ2UgWzEsIDVdLCB3aGljaCBpcyBlc3Nl bnRpYWxseSBhIDEtRCBidWNrZXQuCitXaXRoIGNsYXVzZQorCisgICAgV0hF UkUgKGEgPCAxMCkgPT4gRlVMTF9NQVRDSCAoYWxsIHJhbmdlIHZhbHVlcyBh cmUgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAxMCwgc28gdGhlIHdo b2xlIGJ1Y2tldCBtYXRjaGVzKQorCisgICAgV0hFUkUgKGEgPCAzKSAgPT4g UEFSVElBTF9NQVRDSCAodGhlcmUgbWF5IGJlIHZhbHVlcyBtYXRjaGluZwor ICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbGF1c2UsIGJ1dCB3ZSBkb24n dCBrbm93IGhvdyBtYW55KQorCisgICAgV0hFUkUgKGEgPCAwKSAgPT4gTk9f TUFUQ0ggKHRoZSB3aG9sZSByYW5nZSBpcyBhYm92ZSAxLCBzbworICAgICAg ICAgICAgICAgICAgICAgIG5vIHZhbHVlcyBmcm9tIHRoZSBidWNrZXQgY2Fu IG1hdGNoKQorCitTb21lIGNsYXVzZXMgbWF5IHByb2R1Y2Ugb25seSBzb21l IG9mIHRob3NlIHJlc3VsdHMgLSBmb3IgZXhhbXBsZSBlcXVhbGl0eQorY2xh dXNlcyBtYXkgbmV2ZXIgcHJvZHVjZSBGVUxMX01BVENIIGFzIHdlIGFsd2F5 cyBoaXQgb25seSBwYXJ0IG9mIHRoZSBidWNrZXQKKyh3ZSBjYW4ndCBtYXRj aCBib3RoIGJvdW5kYXJpZXMgYXQgdGhlIHNhbWUgdGltZSkuIFRoaXMgcmVz dWx0cyBpbiBsZXNzIGFjY3VyYXRlCitlc3RpbWF0ZXMgY29tcGFyZWQgdG8g TUNWIGxpc3RzLCB3aGVyZSB3ZSBjYW4gaGl0IGEgTUNWIGl0ZW1zIGV4YWN0 bHkgKHRoZXJlJ3MKK25vIFBBUlRJQUwgbWF0Y2ggaW4gTUNWKS4KKworVGhl cmUgYXJlIGFsc28gY2xhdXNlcyB0aGF0IG1heSBub3QgcHJvZHVjZSBhbnkg UEFSVElBTF9NQVRDSCByZXN1bHRzLiBBIG5pY2UKK2V4YW1wbGUgb2YgdGhh dCBpcyAnSVMgW05PVF0gTlVMTCcgY2xhdXNlLCB3aGljaCBlaXRoZXIgbWF0 Y2hlcyB0aGUgYnVja2V0Citjb21wbGV0ZWx5IChGVUxMX01BVENIKSBvciBu b3QgYXQgYWxsIChOT19NQVRDSCksIHRoYW5rcyB0byBob3cgdGhlIE5VTEwt YnVja2V0cworYXJlIGNvbnN0cnVjdGVkLgorCitDb21wdXRpbmcgdGhlIHRv dGFsIHNlbGVjdGl2aXR5IGVzdGltYXRlIGlzIHRyaXZpYWwgLSBzaW1wbHkg c3VtIHNlbGVjdGl2aXRpZXMKK2Zyb20gYWxsIHRoZSBGVUxMX01BVENIIGFu ZCBQQVJUSUFMX01BVENIIGJ1Y2tldHMgKGJ1dCBmb3IgYnVja2V0cyBtYXJr ZWQgd2l0aAorUEFSVElBTF9NQVRDSCwgbXVsdGlwbHkgdGhlIGZyZXF1ZW5j eSBieSAwLjUgdG8gbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IpLgorCisK K0J1aWxkaW5nIGEgaGlzdG9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0K KworVGhlIGFsZ29yaXRobSBvZiBidWlsZGluZyBhIGhpc3RvZ3JhbSBpbiBn ZW5lcmFsIGlzIHF1aXRlIHNpbXBsZToKKworICAgIChhKSBjcmVhdGUgYW4g aW5pdGlhbCBidWNrZXQgKGNvbnRhaW5pbmcgYWxsIHNhbXBsZSByb3dzKQor CisgICAgKGIpIGNyZWF0ZSBOVUxMIGJ1Y2tldHMgKGJ5IHNwbGl0dGluZyB0 aGUgaW5pdGlhbCBidWNrZXQpCisKKyAgICAoYykgcmVwZWF0CisgICAgCisg ICAgICAgICgxKSBjaG9vc2UgYnVja2V0IHRvIHNwbGl0IG5leHQKKworICAg ICAgICAoMikgdGVybWluYXRlIGlmIG5vIGJ1Y2tldCB0aGF0IG1pZ2h0IGJl IHNwbGl0IGZvdW5kLCBvciBpZiB3ZSd2ZQorICAgICAgICAgICAgcmVhY2hl ZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnVja2V0cyAoMTYzODQpCisKKyAg ICAgICAgKDMpIGNob29zZSBkaW1lbnNpb24gdG8gcGFydGl0aW9uIHRoZSBi dWNrZXQgYnkKKworICAgICAgICAoNCkgcGFydGl0aW9uIHRoZSBidWNrZXQg YnkgdGhlIHNlbGVjdGVkIGRpbWVuc2lvbgorCitUaGUgbWFpbiBjb21wbGV4 aXR5IGlzIGhpZGRlbiBpbiBzdGVwcyAoYy4xKSBhbmQgKGMuMyksIGkuZS4g aG93IHdlIGNob29zZSB0aGUKK2J1Y2tldCBhbmQgZGltZW5zaW9uIGZvciB0 aGUgc3BsaXQuCisKK1NpbWlsYXJseSB0byBvbmUtZGltZW5zaW9uYWwgaGlz dG9ncmFtcywgd2Ugd2FudCB0byBwcm9kdWNlIGJ1Y2tldHMgd2l0aCByb3Vn aGx5Cit0aGUgc2FtZSBmcmVxdWVuY3kuIFdlIGFsc28gbmVlZCB0byBwcm9k dWNlICJyZWd1bGFyIiBidWNrZXRzLCBiZWNhdXNlIGJ1Y2tldHMKK3dpdGgg b25lICJzaWRlIiBtdWNoIGxvbmdlciB0aGFuIHRoZSBvdGhlcnMgYXJlIHZl cnkgbGlrZWx5IHRvIG1hdGNoIGEgbG90IG9mCitjb25kaXRpb25zICh3aGlj aCBpbmNyZWFzZXMgZXJyb3IsIGV2ZW4gaWYgdGhlIGJ1Y2tldCBmcmVxdWVu Y3kgaXMgdmVyeSBsb3cpLgorCitUbyBhY2hpZXZlIHRoaXMsIHdlIGNob29z ZSB0aGUgbGFyZ2VzdCBidWNrZXQgKGNvbnRhaW5pbmcgdGhlIG1vc3Qgc2Ft cGxlIHJvd3MpLAorYnV0IHdlIG9ubHkgY2hvb3NlIGJ1Y2tldHMgdGhhdCBj YW4gYWN0dWFsbHkgYmUgc3BsaXQgKGhhdmUgYXQgbGVhc3QgMyBkaWZmZXJl bnQKK2NvbWJpbmF0aW9ucyBvZiB2YWx1ZXMpLgorCitUaGVuIHdlIGNob29z ZSB0aGUgImxvbmdlc3QiIGRpbWVuc2lvbiBvZiB0aGUgYnVja2V0LCB3aGlj aCBpcyBjb21wdXRlZCBieSB1c2luZwordGhlIGRpc3RpbmN0IHZhbHVlcyBp biB0aGUgc2FtcGxlIGFzIGEgbWVhc3VyZS4KKworRm9yIGRldGFpbHMgc2Vl IGZ1bmN0aW9ucyBzZWxlY3RfYnVja2V0X3RvX3BhcnRpdGlvbigpIGFuZCBw YXJ0aXRpb25fYnVja2V0KCkuCisKK1RoZSBjdXJyZW50IGxpbWl0IG9uIG51 bWJlciBvZiBidWNrZXRzICgxNjM4NCkgaXMgbW9zdGx5IGFyYml0cmFyeSwg YnV0IGNob3Nlbgorc28gdGhhdCBpdCBndWFyYW50ZWVzIHdlIGRvbid0IGV4 Y2VlZCB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbmRleGFibGUg YnkKK3VpbnQxNiBpbiBhbnkgb2YgdGhlIGRpbWVuc2lvbnMuIEluIHByYWN0 aWNlIHdlIGNvdWxkIGhhbmRsZSBtb3JlIGJ1Y2tldHMgYXMgd2UKK2luZGV4 IGVhY2ggZGltZW5zaW9uIHNlcGFyYXRlbHkgYW5kIHRoZSBzcGxpdHMgc2hv dWxkIHVzZSB0aGUgZGltZW5zaW9ucyBldmVubHkuCisKK0Fsc28sIGhpc3Rv Z3JhbXMgdGhpcyBsYXJnZSAod2l0aCAxNmsgdmFsdWVzIGluIG11bHRpcGxl IGRpbWVuc2lvbnMpIHdvdWxkIGJlCitxdWl0ZSBleHBlbnNpdmUgdG8gYnVp bGQgYW5kIHByb2Nlc3MsIHNvIHRoZSAxNmsgbGltaXQgaXMgcmF0aGVyIHJl YXNvbmFibGUuCisKK1RoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1Y2tldHMgaXMg YWxzbyByZWxhdGVkIHRvIHN0YXRpc3RpY3MgdGFyZ2V0LCBiZWNhdXNlIHdl CityZXF1aXJlIE1JTl9CVUNLRVRfUk9XUyAoMTApIHR1cGxlcyBwZXIgYnVj a2V0IGJlZm9yZSBhIHNwbGl0LCBzbyB3ZSBjYW4ndCBoYXZlCittb3JlIHRo YW4gKDIgKiAzMDAgKiB0YXJnZXQgLyAxMCkgYnVja2V0cy4gRm9yIHRoZSBk ZWZhdWx0IHRhcmdldCAoMTAwKSB0aGlzCitldmFsdWF0ZXMgdG8gfjZrLgor CisKK05VTEwgaGFuZGxpbmcgKGNyZWF0ZV9udWxsX2J1Y2tldHMpCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGJ1aWxk aW5nIGhpc3RvZ3JhbXMgb24gYSBzaW5nbGUgYXR0cmlidXRlLCB3ZSBmaXJz dCBmaWx0ZXIgb3V0IE5VTEwgdmFsdWVzLgorSW4gdGhlIG11bHRpdmFyaWF0 ZSBjYXNlLCB3ZSBjYW4ndCByZWFsbHkgZG8gdGhhdCBiZWNhdXNlIHRoZSBy b3dzIG1heSBjb250YWluCithIG1peCBvZiBOVUxMIGFuZCBub24tTlVMTCB2 YWx1ZXMgaW4gZGlmZmVyZW50IGNvbHVtbnMgKHNvIHdlIGNhbid0IHNpbXBs eQorZmlsdGVyIGFsbCBvZiB0aGVtIG91dCkuCisKK0ZvciB0aGlzIHJlYXNv biwgdGhlIGhpc3RvZ3JhbXMgYXJlIGJ1aWx0IGluIGEgd2F5IHNvIHRoYXQg Zm9yIGVhY2ggYnVja2V0LCBlYWNoCitkaW1lbnNpb24gb25seSBjb250YWlu cyBvbmx5IE5VTEwgb3Igbm9uLU5VTEwgdmFsdWVzLiBCdWlsZGluZyB0aGUg TlVMTC1idWNrZXRzCitoYXBwZW5zIGFzIHRoZSBmaXJzdCBzdGVwIGluIHRo ZSBidWlsZCwgYnkgdGhlIGNyZWF0ZV9udWxsX2J1Y2tldHMoKSBmdW5jdGlv bi4KK1RoZSBudW1iZXIgb2YgTlVMTCBidWNrZXRzLCBhcyBwcm9kdWNlZCBi eSB0aGlzIGZ1bmN0aW9uLCBoYXMgYSBjbGVhciB1cHBlcgorYm91bmRhcnkg KDJeTikgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgKGF0 dHJpYnV0ZXMgdGhlIGhpc3RvZ3JhbSBpcworYnVpbHQgb24pLiBPciByYXRo ZXIgMl5LIHdoZXJlIEsgaXMgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIHRo YXQgYXJlIG5vdCBtYXJrZWQKK2FzIG5vdC1OVUxMLiAKKworVGhlIGJ1Y2tl dHMgd2l0aCBOVUxMIGRpbWVuc2lvbnMgYXJlIHRoZW4gc3ViamVjdCB0byB0 aGUgc2FtZSBidWlsZCBhbGdvcml0aG0KKyhpLmUuIG1heSBiZSBzcGxpdCBp bnRvIHNtYWxsZXIgYnVja2V0cykganVzdCBsaWtlIGFueSBvdGhlciBidWNr ZXQsIGJ1dCBtYXkKK29ubHkgYmUgc3BsaXQgYnkgbm9uLU5VTEwgZGltZW5z aW9uLgorCisKK1NlcmlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0KKworVG8g c3RvcmUgdGhlIGhpc3RvZ3JhbSBpbiBwZ19tdl9zdGF0aXN0aWMgdGFibGUs IGl0IGlzIHNlcmlhbGl6ZWQgaW50byBhIG1vcmUKK2VmZmljaWVudCBmb3Jt LiBXZSBhbHNvIHVzZSB0aGUgcmVwcmVzZW50YXRpb24gZm9yIGVzdGltYXRp b24sIGkuZS4gd2UgZG9uJ3QKK2Z1bGx5IGRlc2VyaWFsaXplIHRoZSBoaXN0 b2dyYW0uCisKK0ZvciBleGFtcGxlIHRoZSBib3VuZGFyeSB2YWx1ZXMgYXJl IGRlZHVwbGljYXRlZCB0byBtaW5pbWl6ZSB0aGUgcmVxdWlyZWQgc3BhY2Uu CitIb3cgbXVjaCByZWR1bmRhbmN5IGlzIHRoZXJlLCBhY3R1YWxseT8gTGV0 J3MgYXNzdW1lIHRoZXJlIGFyZSBubyBOVUxMIHZhbHVlcywKK3NvIHdlIHN0 YXJ0IHdpdGggYSBzaW5nbGUgYnVja2V0IC0gaW4gdGhhdCBjYXNlIHdlIGhh dmUgMipOIGJvdW5kYXJpZXMuIEVhY2gKK3RpbWUgd2Ugc3BsaXQgYSBidWNr ZXQgd2UgaW50cm9kdWNlIG9uZSBuZXcgdmFsdWUgKGluIHRoZSAibWlkZGxl IiBvZiBvbmUgb2YKK3RoZSBkaW1lbnNpb25zKSwgYW5kIGtlZXAgYm91bmRy aWVzIGZvciBhbGwgdGhlIG90aGVyIGRpbWVuc2lvbnMuIFNvIGFmdGVyIEsK K3NwbGl0cywgd2UgaGF2ZSB1cCB0bworCisgICAgMipOICsgSworCit1bmlx dWUgYm91bmRhcnkgdmFsdWVzICh3ZSBtYXkgaGF2ZSBmZXdlIHZhbHVlcywg aWYgdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IKK3NldmVyYWwgc3BsaXRz KS4gQnV0IGFmdGVyIEsgc3BsaXRzIHdlIGRvIGhhdmUgKEsrMSkgYnVja2V0 cywgc28KKworICAgIChLKzEpICogMiAqIE4KKworYm91bmRhcnkgdmFsdWVz LiBVc2luZyBlLmcuIE49NCBhbmQgSz05OTksIHdlIGFycml2ZSB0byB0aG9z ZSBudW1iZXJzOgorCisgICAgMipOICsgSyAgICAgICA9IDEwMDcKKyAgICAo SysxKSAqIDIgKiBOID0gODAwMAorCit3aWNoIG1lYW5zIGEgbG90IG9mIHJl ZHVuZGFuY3kuIEl0J3Mgc29tZXdoYXQgY291bnRlci1pbnR1aXRpdmUgdGhh dCB0aGUgbnVtYmVyCitvZiBkaXN0aW5jdCB2YWx1ZXMgZG9lcyBub3QgcmVh bGx5IGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgKGV4Y2Vw dAorZm9yIHRoZSBpbml0aWFsIGJ1Y2tldCwgYnV0IHRoYXQncyBuZWdsaWdp YmxlIGNvbXBhcmVkIHRvIHRoZSB0b3RhbCkuCisKK0J5IGRlZHVwbGljYXRp bmcgdGhlIHZhbHVlcyBhbmQgcmVwbGFjaW5nIHRoZW0gd2l0aCAxNi1iaXQg aW5kZXhlcyAodWludDE2KSwgd2UKK3JlZHVjZSB0aGUgcmVxdWlyZWQgc3Bh Y2UgdG8KKworICAgIDEwMDcgKiA4ICsgODAwMCAqIDIgfj0gMjRrQgorCit3 aGljaCBpcyBzaWduaWZpY2FudGx5IGxlc3MgdGhhbiA2NGtCIHJlcXVpcmVk IGZvciB0aGUgJ3JhdycgaGlzdG9ncmFtIChhc3N1bWluZwordGhlIHZhbHVl cyBhcmUgOEIpLgorCitXaGlsZSB0aGUgYnl0ZWEgY29tcHJlc3Npb24gKHBn bHopIG1pZ2h0IGFjaGlldmUgdGhlIHNhbWUgcmVkdWN0aW9uIG9mIHNwYWNl LAordGhlIGRlZHVwbGljYXRlZCByZXByZXNlbnRhdGlvbiBpcyB1c2VkIHRv IG9wdGltaXplIHRoZSBlc3RpbWF0aW9uIGJ5IGNhY2hpbmcKK3Jlc3VsdHMg b2YgZnVuY3Rpb24gY2FsbHMgZm9yIGFscmVhZHkgdmlzaXRlZCB2YWx1ZXMu IFRoaXMgc2lnbmlmaWNhbnRseQorcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNh bGxzIHRvIChvZnRlbiBxdWl0ZSBleHBlbnNpdmUpIG9wZXJhdG9ycy4KKwor Tm90ZTogT2YgY291cnNlLCB0aGlzIHJlYXNvbmluZyBvbmx5IGhvbGRzIGZv ciBoaXN0b2dyYW1zIGJ1aWx0IGJ5IHRoZSBhbGdvcml0aG0KK3RoYXQgc2lt cGx5IHNwbGl0cyB0aGUgYnVja2V0cyBpbiBoYWxmLiBPdGhlciBoaXN0b2dy YW1zIHR5cGVzIChlLmcuIGNvbnRhaW5pbmcKK292ZXJsYXBwaW5nIGJ1Y2tl dHMpIG1heSBiZWhhdmUgZGlmZmVyZW50bHkgYW5kIHJlcXVpcmUgZGlmZmVy ZW50IHNlcmlhbGl6YXRpb24uCisKK1NlcmlhbGl6ZWQgaGlzdG9ncmFtcyBh cmUgbWFya2VkIHdpdGggJ21hZ2ljJyBjb25zdGFudCwgdG8gbWFrZSBpdCBl YXNpZXIgdG8KK2NoZWNrIHRoZSBieXRlYSB2YWx1ZSByZWFsbHkgaXMgYSBz ZXJpYWxpemVkIGhpc3RvZ3JhbS4KKworCit2YXJsZW5hIGNvbXByZXNzaW9u CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VyaWFsaXphdGlvbiBt YXkgaG93ZXZlciBkaXNhYmxlIGF1dG9tYXRpYyB2YXJsZW5hIGNvbXByZXNz aW9uLCB0aGUgYXJyYXkKK29mIHVuaXF1ZSB2YWx1ZXMgaXMgcGxhY2VkIGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcmlhbGl6ZWQgZm9ybS4gV2hpY2gg aXMKK2V4YWN0bHkgdGhlIGNodW5rIHVzZWQgYnkgcGdseiB0byBjaGVjayBp ZiB0aGUgZGF0YSBpcyBjb21wcmVzc2libGUsIGFuZCBpdAord2lsbCBwcm9i YWJseSBkZWNpZGUgaXQncyBub3QgdmVyeSBjb21wcmVzc2libGUuIFRoaXMg aXMgc2ltaWxhciB0byB0aGUgaXNzdWUKK3dlIGhhZCB3aXRoIEpTT05CIGlu aXRpYWxseS4KKworTWF5YmUgc3RvcmluZyBidWNrZXRzIGZpcnN0IHdvdWxk IG1ha2UgaXQgd29yaywgYXMgdGhlIGJ1Y2tldHMgbWF5IGJlIGJldHRlcgor Y29tcHJlc3NpYmxlLgorCitPbiB0aGUgb3RoZXIgaGFuZCB0aGUgc2VyaWFs aXphdGlvbiBpcyBhY3R1YWxseSBhIGNvbnRleHQtYXdhcmUgY29tcHJlc3Np b24sCit1c3VhbGx5IGNvbXByZXNzaW5nIHRvIH4zMCUgKG9yIGV2ZW4gbGVz cywgd2l0aCBsYXJnZSBkYXRhIHR5cGVzKS4gU28gdGhlIGxhY2sKK29mIGFk ZGl0aW9uYWwgcGdseiBjb21wcmVzc2lvbiBtYXkgYmUgYWNjZXB0YWJsZS4K KworCitEZXNlcmlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLQorCitUaGUg ZGVzZXJpYWxpemF0aW9uIGlzIG5vdCBhIHBlcmZlY3QgaW52ZXJzZSBvZiB0 aGUgc2VyaWFsaXphdGlvbiwgYXMgd2Uga2VlcAordGhlIGRlZHVwbGljYXRl ZCBhcnJheXMuIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSBh bmQgYWxzbyBhbGxvd3MKK29wdGltaXphdGlvbnMgZHVyaW5nIGVzdGltYXRp b24gKGUuZy4gd2UgY2FuIGNhY2hlIHJlc3VsdHMgZm9yIHRoZSBkaXN0aW5j dAordmFsdWVzLCBzYXZpbmcgZXhwZW5zaXZlIGZ1bmN0aW9uIGNhbGxzKS4K KworCitJbnNwZWN0aW5nIHRoZSBoaXN0b2dyYW0KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCitJbnNwZWN0aW5nIHRoZSByZWd1bGFyIChwZXItYXR0 cmlidXRlKSBoaXN0b2dyYW1zIGlzIHRyaXZpYWwsIGFzIGl0J3MgZW5vdWdo Cit0byBzZWxlY3QgdGhlIGNvbHVtbnMgZnJvbSBwZ19zdGF0cyAtIHRoZSBk YXRhIGlzIGVuY29kZWQgYXMgYW55YXJyYXksIHNvIHdlCitzaW1wbHkgZ2V0 IHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcnJheS4KKworV2l0 aCBtdWx0aXZhcmlhdGUgaGlzdG9ncmFtcyBpdCdzIG5vdCB0aGF0IHNpbXBs ZSBkdWUgdG8gdGhlIHBvc3NpYmxlIG1peCBvZgorZGF0YSB0eXBlcyBpbiB0 aGUgaGlzdG9ncmFtLiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBwcm9kdWNl IHNpbWlsYXIgYXJyYXktbGlrZQordGV4dCByZXByZXNlbnRhdGlvbiwgYnV0 IHRoYXQnZCB1bm5lY2Vzc2FyaWx5IGNvbXBsaWNhdGUgZnVydGhlciBwcm9j ZXNzaW5nCithbmQgYW5hbHlzaXMgb2YgdGhlIGhpc3RvZ3JhbS4gSW5zdGVh ZCwgdGhlcmUncyBhIFNSRiBmdW5jdGlvbiB0aGF0IGFsbG93cworYWNjZXNz IHRvIGxvd2VyL3VwcGVyIGJvdW5kYXJpZXMsIGZyZXF1ZW5jaWVzIGV0Yy4K KworICAgIFNFTEVDVCAqIEZST00gcGdfbXZfaGlzdG9ncmFtX2J1Y2tldHMo KTsKKworSXQgaGFzIHR3byBpbnB1dCBwYXJhbWV0ZXJzOgorCisgICAgb2lk ICAgLSBPSUQgb2YgdGhlIGhpc3RvZ3JhbSAocGdfbXZfc3RhdGlzdGljLnN0 YW9pZCkKKyAgICBvdHlwZSAtIHR5cGUgb2Ygb3V0cHV0CisKK2FuZCBwcm9k dWNlcyBhIHRhYmxlIHdpdGggdGhlc2UgY29sdW1uczoKKworICAgIC0gYnVj a2V0IElEICAgICAgICAgICAgICAgICgwLi4ubmJ1Y2tldHMtMSkKKyAgICAt IGxvd2VyIGJ1Y2tldCBib3VuZGFyaWVzICAoc3RyaW5nIGFycmF5KQorICAg IC0gdXBwZXIgYnVja2V0IGJvdW5kYXJpZXMgIChzdHJpbmcgYXJyYXkpCisg ICAgLSBudWxscyBvbmx5IGRpbWVuc2lvbnMgICAgKGJvb2xlYW4gYXJyYXkp CisgICAgLSBsb3dlciBib3VuZGFyeSBpbmNsdXNpdmUgKGJvb2xlYW4gYXJy YXkpCisgICAgLSB1cHBlciBib3VuZGFyeSBpbmNsdWRpdmUgKGJvb2xlYW4g YXJyYXkpCisgICAgLSBmcmVxdWVuY3kgICAgICAgICAgICAgICAgKGRvdWJs ZSBwcmVjaXNpb24pCisKK1RoZSAnb3R5cGUnIGFjY2VwdHMgdGhyZWUgdmFs dWVzLCBkZXRlcm1pbmluZyB3aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhl Citsb3dlci91cHBlciBib3VuZGFyeSBhcnJheXM6CisKKyAgICAtIDAgLSB2 YWx1ZXMgc3RvcmVkIGluIHRoZSBoaXN0b2dyYW0sIGVuY29kZWQgYXMgdGV4 dAorICAgIC0gMSAtIGluZGV4ZXMgaW50byB0aGUgZGVkdXBsaWNhdGVkIGFy cmF5cworICAgIC0gMiAtIGlkbmV4ZXMgaW50byB0aGUgZGVkdXBsaWNhdGVk IGFycmF5cywgc2NhbGVkIHRvIFswLDFdCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cyBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCmluZGV4IDVjNWM1OWEuLjNl NGY0ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLnN0YXRzCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLnN0YXRzCkBAIC0xOCw2ICsxOCw4IEBAIEN1cnJlbnRseSB3ZSBv bmx5IGhhdmUgdHdvIGtpbmRzIG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNz CiAKICAgICAoYikgTUNWIGxpc3RzIChSRUFETUUubWN2KQogCisgICAgKGMp IG11bHRpdmFyaWF0ZSBoaXN0b2dyYW1zIChSRUFETUUuaGlzdG9ncmFtKQor CiAKIENvbXBhdGlibGUgY2xhdXNlIHR5cGVzCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9u LmMKaW5kZXggZDFkYTcxNC4uZmZiNzZmNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCkBAIC0xMywxMSArMTMsMTEgQEAK ICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIK IAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0jaW5jbHVkZSAidXRpbHMvYXJy YXkuaCIKLQogc3RhdGljIFZhY0F0dHJTdGF0cyAqKiBsb29rdXBfdmFyX2F0 dHJfc3RhdHMoaW50MnZlY3RvciAqYXR0cnMsCiAJCQkJCQkJCQkJCSBpbnQg bmF0dHMsCiAJCQkJCQkJCQkJCSBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3Rh dHMpOwpAQCAtNTIsNyArNTIsOCBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlv biBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCU1W U3RhdGlzdGljSW5mbyAqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmly c3QobGMpOwogCQlNVkRlcGVuZGVuY2llcwlkZXBzICA9IE5VTEw7CiAJCU1D Vkxpc3QJCW1jdmxpc3QgICA9IE5VTEw7Ci0JCWludCBudW1yb3dzX2ZpbHRl cmVkICA9IDA7CisJCU1WSGlzdG9ncmFtCWhpc3RvZ3JhbSA9IE5VTEw7CisJ CWludCBudW1yb3dzX2ZpbHRlcmVkICA9IG51bXJvd3M7CiAKIAkJVmFjQXR0 clN0YXRzICAqKnN0YXRzICA9IE5VTEw7CiAJCWludAkJCQludW1hdHRzICAg PSAwOwpAQCAtOTUsOCArOTYsMTIgQEAgYnVpbGRfbXZfc3RhdHMoUmVsYXRp b24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQlp ZiAoc3RhdC0+bWN2X2VuYWJsZWQpCiAJCQltY3ZsaXN0ID0gYnVpbGRfbXZf bWN2bGlzdChudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMsICZudW1yb3dz X2ZpbHRlcmVkKTsKIAorCQkvKiBidWlsZCBhIG11bHRpdmFyaWF0ZSBoaXN0 b2dyYW0gb24gdGhlIGNvbHVtbnMgKi8KKwkJaWYgKChudW1yb3dzX2ZpbHRl cmVkID4gMCkgJiYgKHN0YXQtPmhpc3RfZW5hYmxlZCkpCisJCQloaXN0b2dy YW0gPSBidWlsZF9tdl9oaXN0b2dyYW0obnVtcm93c19maWx0ZXJlZCwgcm93 cywgYXR0cnMsIHN0YXRzLCBudW1yb3dzKTsKKwogCQkvKiBzdG9yZSB0aGUg aGlzdG9ncmFtIC8gTUNWIGxpc3QgaW4gdGhlIGNhdGFsb2cgKi8KLQkJdXBk YXRlX212X3N0YXRzKHN0YXQtPm12b2lkLCBkZXBzLCBtY3ZsaXN0LCBhdHRy cywgc3RhdHMpOworCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRl cHMsIG1jdmxpc3QsIGhpc3RvZ3JhbSwgYXR0cnMsIHN0YXRzKTsKIAl9CiB9 CiAKQEAgLTE3Niw2ICsxODEsOCBAQCBsaXN0X212X3N0YXRzKE9pZCByZWxp ZCkKIAkJaW5mby0+ZGVwc19idWlsdCA9IHN0YXRzLT5kZXBzX2J1aWx0Owog CQlpbmZvLT5tY3ZfZW5hYmxlZCA9IHN0YXRzLT5tY3ZfZW5hYmxlZDsKIAkJ aW5mby0+bWN2X2J1aWx0ID0gc3RhdHMtPm1jdl9idWlsdDsKKwkJaW5mby0+ aGlzdF9lbmFibGVkID0gc3RhdHMtPmhpc3RfZW5hYmxlZDsKKwkJaW5mby0+ aGlzdF9idWlsdCA9IHN0YXRzLT5oaXN0X2J1aWx0OwogCiAJCXJlc3VsdCA9 IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKIAl9CkBAIC0xOTAsNyArMTk3LDYg QEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCiAJcmV0dXJuIHJlc3VsdDsK IH0KIAotCiAvKgogICogRmluZCBhdHRuaW1zIG9mIE1WIHN0YXRzIHVzaW5n IHRoZSBtdm9pZC4KICAqLwpAQCAtMjM2LDkgKzI0MiwxNiBAQCBmaW5kX212 X2F0dG51bXMoT2lkIG12b2lkLCBPaWQgKnJlbGlkKQogfQogCiAKKy8qCisg KiBGSVhNRSBUaGlzIGFkZHMgc3RhdGlzdGljcywgYnV0IHdlIG5lZWQgdG8g ZHJvcCBzdGF0aXN0aWNzIHdoZW4gdGhlCisgKiAgICAgICB0YWJsZSBpcyBk cm9wcGVkLiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdoZW4gYSBjb2x1bW4gaXMg ZHJvcHBlZC4KKyAqICAgICAgIEVpdGhlciB3ZSBjYW4gKGEpIHJlbW92ZSBh bGwgc3RhdHMgb24gdGhhdCBjb2x1bW4sIChiKSByZW1vdmUKKyAqICAgICAg IHRoZSBjb2x1bW4gZnJvbSBkZWZpbmVkIHN0YXRzIGFuZCBmb3JjZSByZWJ1 aWxkLCAoYykgcmVtb3ZlIHRoZQorICogICAgICAgY29sdW1uIG9uIG5leHQg QU5BTFlaRS4gT3IgbWF5YmUgc29tZXRoaW5nIGVsc2U/CisgKi8KIHZvaWQK IHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsCi0JCQkJTVZEZXBlbmRlbmNp ZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJTVZEZXBl bmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsIE1WSGlz dG9ncmFtIGhpc3RvZ3JhbSwKIAkJCQlpbnQydmVjdG9yICphdHRycywgVmFj QXR0clN0YXRzICoqc3RhdHMpCiB7CiAJSGVhcFR1cGxlCXN0dXAsCkBAIC0y NzEsMjIgKzI4NCwzNCBAQCB1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLAog CQl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2ICAtIDFdID0g UG9pbnRlckdldERhdHVtKGRhdGEpOwogCX0KIAorCWlmIChoaXN0b2dyYW0g IT0gTlVMTCkKKwl7CisJCWJ5dGVhICogZGF0YSA9IHNlcmlhbGl6ZV9tdl9o aXN0b2dyYW0oaGlzdG9ncmFtLCBhdHRycywgc3RhdHMpOworCQludWxsc1tB bnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0LTFdICAgID0gKGRhdGEgPT0g TlVMTCk7CisJCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0 IC0gMV0KKwkJCT0gUG9pbnRlckdldERhdHVtKGRhdGEpOworCX0KKwogCS8q IGFsd2F5cyByZXBsYWNlIHRoZSB2YWx1ZSAoZWl0aGVyIGJ5IGJ5dGVhIG9y IE5VTEwpICovCiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh ZGVwcyAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlz dGljX3N0YW1jdiAtMV0gPSB0cnVlOworCXJlcGxhY2VzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWhpc3QtMV0gPSB0cnVlOwogCiAJLyogYWx3YXlzIGNo YW5nZSB0aGUgYXZhaWxhYmlsaXR5IGZsYWdzICovCiAJbnVsbHNbQW51bV9w Z19tdl9zdGF0aXN0aWNfZGVwc19idWlsdCAtMV0gPSBmYWxzZTsKIAludWxs c1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQgLTFdID0gZmFsc2U7 CisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWlsdC0xXSA9 IGZhbHNlOwogCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMt MV0gICAgID0gZmFsc2U7CiAKIAkvKiB1c2UgdGhlIG5ldyBhdHRudW1zLCBp biBjYXNlIHdlIHJlbW92ZWQgc29tZSBkcm9wcGVkIG9uZXMgKi8KIAlyZXBs YWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gdHJ1 ZTsKIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQg IC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNf aGlzdF9idWlsdCAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWtleXMgLTFdICAgID0gdHJ1ZTsKIAogCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gQm9vbEdldERh dHVtKGRlcGVuZGVuY2llcyAhPSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSBCb29sR2V0RGF0dW0obWN2 bGlzdCAhPSBOVUxMKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNf aGlzdF9idWlsdCAtMV0gPSBCb29sR2V0RGF0dW0oaGlzdG9ncmFtICE9IE5V TEwpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0x XSAgICA9IFBvaW50ZXJHZXREYXR1bShhdHRycyk7CiAKIAkvKiBJcyB0aGVy ZSBhbHJlYWR5IGEgcGdfbXZfc3RhdGlzdGljIHR1cGxlIGZvciB0aGlzIGF0 dHJpYnV0ZT8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvaGlzdG9ncmFtLmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2hpc3RvZ3JhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjllNTYyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9tdnN0YXRzL2hpc3RvZ3JhbS5jCkBAIC0wLDAgKzEsMjAzMiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaGlzdG9n cmFtLmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMK KyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3JhbS5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisj aW5jbHVkZSAiZnVuY2FwaS5oIgorCisjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxtYXRo Lmg+CisKKworc3RhdGljIE1WQnVja2V0IGNyZWF0ZV9pbml0aWFsX212X2J1 Y2tldChpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAorCQkJCQkJCQkJ CSBpbnQydmVjdG9yICphdHRycywKKwkJCQkJCQkJCQkgVmFjQXR0clN0YXRz ICoqc3RhdHMpOworCitzdGF0aWMgTVZCdWNrZXQgc2VsZWN0X2J1Y2tldF90 b19wYXJ0aXRpb24oaW50IG5idWNrZXRzLCBNVkJ1Y2tldCAqIGJ1Y2tldHMp OworCitzdGF0aWMgTVZCdWNrZXQgcGFydGl0aW9uX2J1Y2tldChNVkJ1Y2tl dCBidWNrZXQsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJCQkgVmFjQXR0 clN0YXRzICoqc3RhdHMsCisJCQkJCQkJCSBpbnQgKm5kaXN0dmFsdWVzLCBE YXR1bSAqKmRpc3R2YWx1ZXMpOworCitzdGF0aWMgTVZCdWNrZXQgY29weV9t dl9idWNrZXQoTVZCdWNrZXQgYnVja2V0LCB1aW50MzIgbmRpbWVuc2lvbnMp OworCitzdGF0aWMgdm9pZCB1cGRhdGVfYnVja2V0X25kaXN0aW5jdChNVkJ1 Y2tldCBidWNrZXQsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJCQkJVmFj QXR0clN0YXRzICoqIHN0YXRzKTsKKworc3RhdGljIHZvaWQgdXBkYXRlX2Rp bWVuc2lvbl9uZGlzdGluY3QoTVZCdWNrZXQgYnVja2V0LCBpbnQgZGltZW5z aW9uLAorCQkJCQkJCQkJICAgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJ CQkgICBWYWNBdHRyU3RhdHMgKiogc3RhdHMsCisJCQkJCQkJCQkgICBib29s IHVwZGF0ZV9ib3VuZGFyaWVzKTsKKworc3RhdGljIHZvaWQgY3JlYXRlX251 bGxfYnVja2V0cyhNVkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludCBidWNrZXRf aWR4LAorCQkJCQkJCQlpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRz ICoqIHN0YXRzKTsKKworc3RhdGljIGludCBic2VhcmNoX2NvbXBhcmF0b3Io Y29uc3Qgdm9pZCAqIGEsIGNvbnN0IHZvaWQgKiBiKTsKKworLyoKKyAqIEVh Y2ggc2VyaWFsaXplZCBidWNrZXQgbmVlZHMgdG8gc3RvcmUgKGluIHRoaXMg b3JkZXIpOgorICoKKyAqIC0gbnVtYmVyIG9mIHR1cGxlcyAgICAgKGZsb2F0 KQorICogLSBudW1iZXIgb2YgZGlzdGluY3QgICAoZmxvYXQpCisgKiAtIG1p biBpbmNsdXNpdmUgZmxhZ3MgIChuZGltICogc2l6ZW9mKGJvb2wpKQorICog LSBtYXggaW5jbHVzaXZlIGZsYWdzICAobmRpbSAqIHNpemVvZihib29sKSkK KyAqIC0gbnVsbCBkaW1lbnNpb24gZmxhZ3MgKG5kaW0gKiBzaXplb2YoYm9v bCkpCisgKiAtIG1pbiBib3VuZGFyeSBpbmRleGVzICgyICogbmRpbSAqIHNp emVvZihpbnQzMikpCisgKiAtIG1heCBib3VuZGFyeSBpbmRleGVzICgyICog bmRpbSAqIHNpemVvZihpbnQzMikpCisgKgorICogU28gaW4gdG90YWw6Cisg KgorICogICBuZGltICogKDQgKiBzaXplb2YoaW50MzIpICsgMyAqIHNpemVv Zihib29sKSkgKworICogICAyICogc2l6ZW9mKGZsb2F0KQorICovCisjZGVm aW5lIEJVQ0tFVF9TSVpFKG5kaW1zKQlcCisJKG5kaW1zICogKDQgKiBzaXpl b2YodWludDE2KSArIDMgKiBzaXplb2YoYm9vbCkpICsgc2l6ZW9mKGZsb2F0 KSkKKworLyogcG9pbnRlcnMgaW50byBhIGZsYXQgc2VyaWFsaXplZCBidWNr ZXQgb2YgQlVDS0VUX1NJWkUobikgYnl0ZXMgKi8KKyNkZWZpbmUgQlVDS0VU X05UVVBMRVMoYikJCSgoZmxvYXQqKWIpCisjZGVmaW5lIEJVQ0tFVF9NSU5f SU5DTChiLG4pCSgoYm9vbCopKGIgKyBzaXplb2YoZmxvYXQpKSkKKyNkZWZp bmUgQlVDS0VUX01BWF9JTkNMKGIsbikJKEJVQ0tFVF9NSU5fSU5DTChiLG4p ICsgbikKKyNkZWZpbmUgQlVDS0VUX05VTExTX09OTFkoYixuKQkoQlVDS0VU X01BWF9JTkNMKGIsbikgKyBuKQorI2RlZmluZSBCVUNLRVRfTUlOX0lOREVY RVMoYixuKQkoKHVpbnQxNiopKEJVQ0tFVF9OVUxMU19PTkxZKGIsbikgKyBu KSkKKyNkZWZpbmUgQlVDS0VUX01BWF9JTkRFWEVTKGIsbikJKChCVUNLRVRf TUlOX0lOREVYRVMoYixuKSArIG4pKQorCisvKiBjYW4ndCBzcGxpdCBidWNr ZXQgd2l0aCBsZXNzIHRoYW4gMTAgcm93cyAqLworI2RlZmluZSBNSU5fQlVD S0VUX1JPV1MJCQkxMAorCisvKgorICogRGF0YSB1c2VkIHdoaWxlIGJ1aWxk aW5nIHRoZSBoaXN0b2dyYW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IEhpc3Rv Z3JhbUJ1aWxkRGF0YSB7CisKKwlmbG9hdAluZGlzdGluY3Q7CQkvKiBmcmVx dWVuY3kgb2YgZGlzdGluY3QgdmFsdWVzICovCisKKwlIZWFwVHVwbGUgICpy b3dzOwkJLyogYXJheSBvZiBzYW1wbGUgcm93cyAqLworCXVpbnQzMgkJbnVt cm93czsJLyogbnVtYmVyIG9mIHNhbXBsZSByb3dzIChhcnJheSBzaXplKSAq LworCisJLyoKKwkgKiBOdW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGluIGVh Y2ggZGltZW5zaW9uLiBUaGlzIGlzIHVzZWQgd2hlbgorCSAqIGJ1aWxkaW5n IHRoZSBoaXN0b2dyYW0gKGFuZCBpcyBub3Qgc2VyaWFsaXplZC9kZXNlcmlh bGl6ZWQpLgorCSAqLworCXVpbnQzMiAqbmRpc3RpbmN0czsKKworfSBIaXN0 b2dyYW1CdWlsZERhdGE7CisKK3R5cGVkZWYgSGlzdG9ncmFtQnVpbGREYXRh CSpIaXN0b2dyYW1CdWlsZDsKKworLyoKKyAqIEJ1aWxkaW5nIGEgbXVsdGl2 YXJpYXRlIGFsZ29yaXRobS4gSW4gc2hvcnQgaXQgZmlyc3QgY3JlYXRlcyBh IHNpbmdsZQorICogYnVja2V0IGNvbnRhaW5pbmcgYWxsIHRoZSByb3dzLCBh bmQgdGhlbiByZXBlYXRlZGx5IHNwbGl0IGlzIGJ5IGZpcnN0CisgKiBzZWFy Y2hpbmcgZm9yIHRoZSBidWNrZXQgLyBkaW1lbnNpb24gbW9zdCBpbiBuZWVk IG9mIGEgc3BsaXQuCisgKgorICogVGhlIGN1cnJlbnQgY3JpdGVyaWEgaXMg cmF0aGVyIHNpbXBsZSwgY2hvc2VuIHNvIHRoYXQgdGhlIGFsZ29yaXRobQor ICogcHJvZHVjZXMgYnVja2V0cyB3aXRoIGFib3V0IGVxdWFsIGZyZXF1ZW5j eSBhbmQgcmVndWxhciBzaXplLgorICoKKyAqIFNlZSB0aGUgZGlzY3Vzc2lv biBhdCBzZWxlY3RfYnVja2V0X3RvX3BhcnRpdGlvbiBhbmQgcGFydGl0aW9u X2J1Y2tldAorICogZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgYWxnb3Jp dGhtLgorICoKKyAqIFRoZSBjdXJyZW50IGFsZ29yaXRobSB3b3JrcyBsaWtl IHRoaXM6CisgKgorICogICAgIGJ1aWxkIE5VTEwtYnVja2V0cyAoY3JlYXRl X251bGxfYnVja2V0cykKKyAqCisgKiAgICAgd2hpbGUgW25vdCByZWFjaGlu ZyBtYXhpbXVtIG51bWJlciBvZiBidWNrZXRzXQorICoKKyAqICAgICAgICAg Y2hvb3NlIGJ1Y2tldCB0byBwYXJ0aXRpb24gKGxhcmdlc3QgYnVja2V0KQor ICogICAgICAgICAgICAgaWYgbm8gYnVja2V0IHRvIHBhcnRpdGlvbgorICog ICAgICAgICAgICAgICAgIHRlcm1pbmF0ZSB0aGUgYWxnb3JpdGhtCisgKgor ICogICAgICAgICBjaG9vc2UgYnVja2V0IGRpbWVuc2lvbiB0byBwYXJ0aXRp b24gKGxhcmdlc3QgZGltZW5zaW9uKQorICogICAgICAgICAgICAgc3BsaXQg dGhlIGJ1Y2tldCBpbnRvIHR3byBidWNrZXRzCisgKi8KK01WSGlzdG9ncmFt CitidWlsZF9tdl9oaXN0b2dyYW0oaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJICAgVmFjQXR0clN0YXRz ICoqc3RhdHMsIGludCBudW1yb3dzX3RvdGFsKQoreworCWludCBpOworCWlu dCBudW1hdHRycyA9IGF0dHJzLT5kaW0xOworCisJaW50CQkJICAgKm5kaXN0 dmFsdWVzOworCURhdHVtCQkgICoqZGlzdHZhbHVlczsKKworCU1WSGlzdG9n cmFtIGhpc3RvZ3JhbSA9IChNVkhpc3RvZ3JhbSlwYWxsb2MwKHNpemVvZihN Vkhpc3RvZ3JhbURhdGEpKTsKKworCUhlYXBUdXBsZSAqIHJvd3NfY29weSA9 IChIZWFwVHVwbGUqKXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihIZWFwVHVw bGUpKTsKKwltZW1jcHkocm93c19jb3B5LCByb3dzLCBzaXplb2YoSGVhcFR1 cGxlKSAqIG51bXJvd3MpOworCisJQXNzZXJ0KChudW1hdHRycyA+PSAyKSAm JiAobnVtYXR0cnMgPD0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykpOworCisJ aGlzdG9ncmFtLT5uZGltZW5zaW9ucyA9IG51bWF0dHJzOworCisJaGlzdG9n cmFtLT5tYWdpYyA9IE1WU1RBVF9ISVNUX01BR0lDOworCWhpc3RvZ3JhbS0+ dHlwZSAgPSBNVlNUQVRfSElTVF9UWVBFX0JBU0lDOworCWhpc3RvZ3JhbS0+ bmJ1Y2tldHMgPSAxOworCisJLyogY3JlYXRlIG1heCBidWNrZXRzIChiZXR0 ZXIgdGhhbiByZXBhbGxvYyBmb3Igc2hvcnQtbGl2ZWQgb2JqZWN0cykgKi8K KwloaXN0b2dyYW0tPmJ1Y2tldHMKKwkJPSAoTVZCdWNrZXQqKXBhbGxvYzAo TVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMgKiBzaXplb2YoTVZCdWNrZXQpKTsK KworCS8qIGNyZWF0ZSB0aGUgaW5pdGlhbCBidWNrZXQsIGNvdmVyaW5nIHRo ZSB3aG9sZSBzYW1wbGUgc2V0ICovCisJaGlzdG9ncmFtLT5idWNrZXRzWzBd CisJCT0gY3JlYXRlX2luaXRpYWxfbXZfYnVja2V0KG51bXJvd3MsIHJvd3Nf Y29weSwgYXR0cnMsIHN0YXRzKTsKKworCS8qCisJICogQ29sbGVjdCBpbmZv IG9uIGRpc3RpbmN0IHZhbHVlcyBpbiBlYWNoIGRpbWVuc2lvbiAodXNlZCBs YXRlcgorCSAqIHRvIHNlbGVjdCBkaW1lbnNpb24gdG8gcGFydGl0aW9uKS4K KwkgKi8KKwluZGlzdHZhbHVlcyA9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGlu dCkgKiBudW1hdHRycyk7CisJZGlzdHZhbHVlcyAgPSAoRGF0dW0qKilwYWxs b2MwKHNpemVvZihEYXR1bSopICogbnVtYXR0cnMpOworCisJZm9yIChpID0g MDsgaSA8IG51bWF0dHJzOyBpKyspCisJeworCQlpbnQJCQkJajsKKwkJaW50 CQkJCW52YWxzOworCQlEYXR1bQkJICAgKnRtcDsKKworCQlTb3J0U3VwcG9y dERhdGEJc3N1cDsKKwkJU3RkQW5hbHl6ZURhdGEgKm15c3RhdHMgPSAoU3Rk QW5hbHl6ZURhdGEgKikgc3RhdHNbaV0tPmV4dHJhX2RhdGE7CisKKwkJLyog aW5pdGlhbGl6ZSBzb3J0IHN1cHBvcnQsIGV0Yy4gKi8KKwkJbWVtc2V0KCZz c3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCQlzc3VwLnNzdXBfY3h0ID0gQ3Vy cmVudE1lbW9yeUNvbnRleHQ7CisKKwkJLyogV2UgYWx3YXlzIHVzZSB0aGUg ZGVmYXVsdCBjb2xsYXRpb24gZm9yIHN0YXRpc3RpY3MgKi8KKwkJc3N1cC5z c3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKwkJc3N1 cC5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7CisKKwkJUHJlcGFyZVNvcnRT dXBwb3J0RnJvbU9yZGVyaW5nT3AobXlzdGF0cy0+bHRvcHIsICZzc3VwKTsK KworCQludmFscyA9IDA7CisJCXRtcCA9IChEYXR1bSopcGFsbG9jMChzaXpl b2YoRGF0dW0pICogbnVtcm93cyk7CisKKwkJZm9yIChqID0gMDsgaiA8IG51 bXJvd3M7IGorKykKKwkJeworCQkJYm9vbAlpc251bGw7CisKKwkJCS8qIHJl bWVtYmVyIHRoZSBpbmRleCBvZiB0aGUgc2FtcGxlIHJvdywgdG8gbWFrZSB0 aGUgcGFydGl0aW9uaW5nIHNpbXBsZXIgKi8KKwkJCURhdHVtCXZhbHVlID0g aGVhcF9nZXRhdHRyKHJvd3Nbal0sIGF0dHJzLT52YWx1ZXNbaV0sCisJCQkJ CQkJCQkJIHN0YXRzW2ldLT50dXBEZXNjLCAmaXNudWxsKTsKKworCQkJaWYg KGlzbnVsbCkKKwkJCQljb250aW51ZTsKKworCQkJdG1wW252YWxzKytdID0g dmFsdWU7CisJCX0KKworCQkvKiBkbyB0aGUgc29ydCBhbmQgc3R1ZmYgb25s eSBpZiB0aGVyZSBhcmUgbm9uLU5VTEwgdmFsdWVzICovCisJCWlmIChudmFs cyA+IDApCisJCXsKKwkJCS8qIHNvcnQgdGhlIGFycmF5IG9mIHZhbHVlcyAq LworCQkJcXNvcnRfYXJnKCh2b2lkICopIHRtcCwgbnZhbHMsIHNpemVvZihE YXR1bSksCisJCQkJCSAgY29tcGFyZV9zY2FsYXJzX3NpbXBsZSwgKHZvaWQg KikgJnNzdXApOworCisJCQkvKiBjb3VudCBkaXN0aW5jdCB2YWx1ZXMgKi8K KwkJCW5kaXN0dmFsdWVzW2ldID0gMTsKKwkJCWZvciAoaiA9IDE7IGogPCBu dmFsczsgaisrKQorCQkJCWlmIChjb21wYXJlX3NjYWxhcnNfc2ltcGxlKCZ0 bXBbal0sICZ0bXBbai0xXSwgJnNzdXApICE9IDApCisJCQkJCW5kaXN0dmFs dWVzW2ldICs9IDE7CisKKwkJCS8qIEZJWE1FIGFsbG9jYXRlIG9ubHkgbmVl ZGVkIHNwYWNlIChjb3VudCBuZGlzdGluY3QgZmlyc3QpICovCisJCQlkaXN0 dmFsdWVzW2ldID0gKERhdHVtKilwYWxsb2MwKHNpemVvZihEYXR1bSkgKiBu ZGlzdHZhbHVlc1tpXSk7CisKKwkJCS8qIG5vdyBjb2xsZWN0IGRpc3RpbmN0 IHZhbHVlcyBpbnRvIHRoZSBhcnJheSAqLworCQkJZGlzdHZhbHVlc1tpXVsw XSA9IHRtcFswXTsKKwkJCW5kaXN0dmFsdWVzW2ldID0gMTsKKworCQkJZm9y IChqID0gMTsgaiA8IG52YWxzOyBqKyspCisJCQl7CisJCQkJaWYgKGNvbXBh cmVfc2NhbGFyc19zaW1wbGUoJnRtcFtqXSwgJnRtcFtqLTFdLCAmc3N1cCkg IT0gMCkKKwkJCQl7CisJCQkJCWRpc3R2YWx1ZXNbaV1bbmRpc3R2YWx1ZXNb aV1dID0gdG1wW2pdOworCQkJCQluZGlzdHZhbHVlc1tpXSArPSAxOworCQkJ CX0KKwkJCX0KKwkJfQorCisJCXBmcmVlKHRtcCk7CisJfQorCisJLyoKKwkg KiBUaGUgaW5pdGlhbCBidWNrZXQgbWF5IGNvbnRhaW4gTlVMTCB2YWx1ZXMs IHNvIHdlIGhhdmUgdG8gY3JlYXRlCisJICogYnVja2V0cyB3aXRoIE5VTEwt b25seSBkaW1lbnNpb25zLgorCSAqCisJICogRklYTUUgV2UgbWF5IG5lZWQg dXAgdG8gMl5uZGltcyBidWNrZXRzIC0gY2hlY2sgdGhhdCB0aGVyZSBhcmUK KwkgKiAgICAgICBlbm91Z2ggYnVja2V0cyAoTVZTVEFUX0hJU1RfTUFYX0JV Q0tFVFMgPj0gMl5uZGltcykuCisJICovCisJY3JlYXRlX251bGxfYnVja2V0 cyhoaXN0b2dyYW0sIDAsIGF0dHJzLCBzdGF0cyk7CisKKwl3aGlsZSAoaGlz dG9ncmFtLT5uYnVja2V0cyA8IE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTKQor CXsKKwkJTVZCdWNrZXQgYnVja2V0ID0gc2VsZWN0X2J1Y2tldF90b19wYXJ0 aXRpb24oaGlzdG9ncmFtLT5uYnVja2V0cywKKwkJCQkJCQkJCQkJCQkgaGlz dG9ncmFtLT5idWNrZXRzKTsKKworCQkvKiBubyBtb3JlIGJ1Y2tldHMgdG8g cGFydGl0aW9uICovCisJCWlmIChidWNrZXQgPT0gTlVMTCkKKwkJCWJyZWFr OworCisJCWhpc3RvZ3JhbS0+YnVja2V0c1toaXN0b2dyYW0tPm5idWNrZXRz XQorCQkJPSBwYXJ0aXRpb25fYnVja2V0KGJ1Y2tldCwgYXR0cnMsIHN0YXRz LAorCQkJCQkJCSAgIG5kaXN0dmFsdWVzLCBkaXN0dmFsdWVzKTsKKworCQlo aXN0b2dyYW0tPm5idWNrZXRzICs9IDE7CisJfQorCisJLyogZmluYWxpemUg dGhlIGZyZXF1ZW5jaWVzIGV0Yy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGlz dG9ncmFtLT5uYnVja2V0czsgaSsrKQorCXsKKwkJSGlzdG9ncmFtQnVpbGQg YnVpbGRfZGF0YQorCQkJPSAoKEhpc3RvZ3JhbUJ1aWxkKWhpc3RvZ3JhbS0+ YnVja2V0c1tpXS0+YnVpbGRfZGF0YSk7CisKKwkJLyoKKwkJICogVGhlIGZy ZXF1ZW5jeSBoYXMgdG8gYmUgY29tcHV0ZWQgZnJvbSB0aGUgd2hvbGUgc2Ft cGxlLCBpbgorCQkgKiBjYXNlIHNvbWUgb2YgdGhlIHJvd3Mgd2VyZSB1c2Vk IGZvciBNQ1YgKGFuZCB0aHVzIGFyZSBtaXNzaW5nCisJCSAqIGZyb20gdGhl IGhpc3RvZ3JhbSkuCisJCSAqLworCQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0t Pm50dXBsZXMKKwkJCT0gKGJ1aWxkX2RhdGEtPm51bXJvd3MgKiAxLjApIC8g bnVtcm93c190b3RhbDsKKwl9CisKKwlyZXR1cm4gaGlzdG9ncmFtOworfQor CisvKiBmZXRjaCB0aGUgaGlzdG9ncmFtIChhcyBhIGJ5dGVhKSBmcm9tIHRo ZSBwZ19tdl9zdGF0aXN0aWMgY2F0YWxvZyAqLworTVZTZXJpYWxpemVkSGlz dG9ncmFtCitsb2FkX212X2hpc3RvZ3JhbShPaWQgbXZvaWQpCit7CisJYm9v bAkJaXNudWxsID0gZmFsc2U7CisJRGF0dW0JCWhpc3RvZ3JhbTsKKworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlGb3JtX3BnX212X3N0YXRpc3Rp YwltdnN0YXQ7CisjZW5kaWYKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19t dl9zdGF0aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5nIGluZHJlbGlkID0gdGhp cyByZWwuICovCisJSGVhcFR1cGxlCWh0dXAgPSBTZWFyY2hTeXNDYWNoZTEo TVZTVEFUT0lELCBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7CisKKwlpZiAo ISBIZWFwVHVwbGVJc1ZhbGlkKGh0dXApKQorCQlyZXR1cm4gTlVMTDsKKwor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwltdnN0YXQgPSAoRm9ybV9w Z19tdl9zdGF0aXN0aWMpIEdFVFNUUlVDVChodHVwKTsKKwlBc3NlcnQobXZz dGF0LT5oaXN0X2VuYWJsZWQgJiYgbXZzdGF0LT5oaXN0X2J1aWx0KTsKKyNl bmRpZgorCisJaGlzdG9ncmFtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9J RCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhp c3QsICZpc251bGwpOworCisJQXNzZXJ0KCFpc251bGwpOworCisJUmVsZWFz ZVN5c0NhY2hlKGh0dXApOworCisJcmV0dXJuIGRlc2VyaWFsaXplX212X2hp c3RvZ3JhbShEYXR1bUdldEJ5dGVhUChoaXN0b2dyYW0pKTsKK30KKworLyog cHJpbnQgc29tZSBiYXNpYyBpbmZvIGFib3V0IHRoZSBoaXN0b2dyYW0gKi8K K0RhdHVtCitwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhQR19GVU5DVElP Tl9BUkdTKQoreworCWJ5dGVhCSAgICpkYXRhID0gUEdfR0VUQVJHX0JZVEVB X1AoMCk7CisJY2hhcgkgICAqcmVzdWx0OworCisJTVZTZXJpYWxpemVkSGlz dG9ncmFtIGhpc3QgPSBkZXNlcmlhbGl6ZV9tdl9oaXN0b2dyYW0oZGF0YSk7 CisKKwlyZXN1bHQgPSBwYWxsb2MwKDEyOCk7CisJc25wcmludGYocmVzdWx0 LCAxMjgsICJuYnVja2V0cz0lZCIsIGhpc3QtPm5idWNrZXRzKTsKKworCVBH X1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlc3VsdCkpOworfQor CisKKy8qIHVzZWQgdG8gcGFzcyBjb250ZXh0IGludG8gYnNlYXJjaCgpICov CitzdGF0aWMgU29ydFN1cHBvcnQgc3N1cF9wcml2YXRlID0gTlVMTDsKKwor LyoKKyAqIFNlcmlhbGl6ZSB0aGUgTVYgaGlzdG9ncmFtIGludG8gYSBieXRl YSB2YWx1ZS4gVGhlIGJhc2ljIGFsZ29yaXRobSBpcyBxdWl0ZQorICogc2lt cGxlLCBhbmQgbW9zdGx5IG1pbWluY3MgdGhlIE1DViBzZXJpYWxpemF0aW9u OgorICoKKyAqICgxKSBwZXJmb3JtIGRlZHVwbGljYXRpb24gZm9yIGVhY2gg YXR0cmlidXRlIChzZXBhcmF0ZWx5KQorICoKKyAqICAgICAoYSkgY29sbGVj dCBhbGwgKG5vbi1OVUxMKSBhdHRyaWJ1dGUgdmFsdWVzIGZyb20gYWxsIGJ1 Y2tldHMKKyAqICAgICAoYikgc29ydCB0aGUgZGF0YSAodXNpbmcgJ2x0JyBm cm9tIFZhY0F0dHJTdGF0cykKKyAqICAgICAoYykgcmVtb3ZlIGR1cGxpY2F0 ZSB2YWx1ZXMgZnJvbSB0aGUgYXJyYXkKKyAqCisgKiAoMikgc2VyaWFsaXpl IHRoZSBhcnJheXMgaW50byBhIGJ5dGVhIHZhbHVlCisgKgorICogKDMpIHBy b2Nlc3MgYWxsIGJ1Y2tldHMKKyAqCisgKiAgICAgKGEpIHJlcGxhY2UgbWlu L21heCB2YWx1ZXMgd2l0aCBpbmRleGVzIGludG8gdGhlIGFycmF5cworICoK KyAqIEVhY2ggYXR0cmlidXRlIGhhcyB0byBiZSBwcm9jZXNzZWQgc2VwYXJh dGVseSwgYXMgd2UncmUgbWl4aW5nIGRpZmZlcmVudAorICogZGF0YXR5cGVz LCBhbmQgd2Ugd2UgbmVlZCB0byB1c2UgdGhlIHJpZ2h0IG9wZXJhdG9ycyB0 byBjb21wYXJlL3NvcnQgdGhlbS4KKyAqIFdlJ3JlIGFsc28gbWl4aW5nIHBh c3MtYnktdmFsdWUgYW5kIHBhc3MtYnktcmVmIHR5cGVzLCBhbmQgc28gb24u CisgKgorICoKKyAqIEZJWE1FIFRoaXMgcHJvYmFibHkgbGVha3MgbWVtb3J5 LCBvciBhdCBsZWFzdCB1c2VzIGl0IGluZWZmaWNpZW50bHkKKyAqICAgICAg IChtYW55IHNtYWxsIHBhbGxvYygpIGNhbGxzIGluc3RlYWQgb2YgYSBsYXJn ZSBvbmUpLgorICoKKyAqIFRPRE8gQ29uc2lkZXIgcGFja2luZyBib29sZWFu IGZsYWdzIChOVUxMKSBmb3IgZWFjaCBpdGVtIGludG8gJ2NoYXInCisgKiAg ICAgIG9yIGEgbG9uZ2VyIHR5cGUgKGluc3RlYWQgb2YgdXNpbmcgYW4gYXJy YXkgb2YgYm9vbCBpdGVtcykuCisgKi8KK2J5dGVhICoKK3NlcmlhbGl6ZV9t dl9oaXN0b2dyYW0oTVZIaXN0b2dyYW0gaGlzdG9ncmFtLCBpbnQydmVjdG9y ICphdHRycywKKwkJCQkJICAgVmFjQXR0clN0YXRzICoqc3RhdHMpCit7CisJ aW50IGkgPSAwLCBqID0gMDsKKwlTaXplCXRvdGFsX2xlbmd0aCA9IDA7CisK KwlieXRlYSAgKm91dHB1dCA9IE5VTEw7CisJY2hhciAgICpkYXRhID0gTlVM TDsKKworCWludAkJbmJ1Y2tldHMgPSBoaXN0b2dyYW0tPm5idWNrZXRzOwor CWludAkJbmRpbXMgICAgPSBoaXN0b2dyYW0tPm5kaW1lbnNpb25zOworCisJ LyogYWxsb2NhdGVkIGZvciBzZXJpYWxpemVkIGJ1Y2tldCBkYXRhICovCisJ aW50CQlidWNrZXRzaXplID0gQlVDS0VUX1NJWkUobmRpbXMpOworCWNoYXIg ICAqYnVja2V0ID0gcGFsbG9jMChidWNrZXRzaXplKTsKKworCS8qIHZhbHVl cyBwZXIgZGltZW5zaW9uIChhbmQgbnVtYmVyIG9mIG5vbi1OVUxMIHZhbHVl cykgKi8KKwlEYXR1bSAqKnZhbHVlcyA9IChEYXR1bSoqKXBhbGxvYzAoc2l6 ZW9mKERhdHVtKikgKiBuZGltcyk7CisJaW50CSAgICpjb3VudHMgPSAoaW50 KilwYWxsb2MwKHNpemVvZihpbnQpICogbmRpbXMpOworCisJLyogaW5mbyBh Ym91dCBkaW1lbnNpb25zIChmb3IgZGVzZXJpYWxpemUpICovCisJRGltZW5z aW9uSW5mbyAqIGluZm8KKwkJCQk9IChEaW1lbnNpb25JbmZvICopcGFsbG9j MChzaXplb2YoRGltZW5zaW9uSW5mbykqbmRpbXMpOworCisJLyogc29ydCBz dXBwb3J0IGRhdGEgKi8KKwlTb3J0U3VwcG9ydAlzc3VwID0gKFNvcnRTdXBw b3J0KXBhbGxvYzAoc2l6ZW9mKFNvcnRTdXBwb3J0RGF0YSkqbmRpbXMpOwor CisJLyogY29sbGVjdCBhbmQgZGVkdXBsaWNhdGUgdmFsdWVzIGZvciBlYWNo IGRpbWVuc2lvbiBzZXBhcmF0ZWx5ICovCisJZm9yIChpID0gMDsgaSA8IG5k aW1zOyBpKyspCisJeworCQlpbnQgY291bnQ7CisJCVN0ZEFuYWx5emVEYXRh ICp0bXAgPSAoU3RkQW5hbHl6ZURhdGEgKilzdGF0c1tpXS0+ZXh0cmFfZGF0 YTsKKworCQkvKiBrZWVwIGltcG9ydGFudCBpbmZvIGFib3V0IHRoZSBkYXRh IHR5cGUgKi8KKwkJaW5mb1tpXS50eXBsZW4gICA9IHN0YXRzW2ldLT5hdHRy dHlwZS0+dHlwbGVuOworCQlpbmZvW2ldLnR5cGJ5dmFsID0gc3RhdHNbaV0t PmF0dHJ0eXBlLT50eXBieXZhbDsKKworCQkvKgorCQkgKiBBbGxvY2F0ZSBz cGFjZSBmb3IgYWxsIG1pbi9tYXggdmFsdWVzLCBpbmNsdWRpbmcgTlVMTHMK KwkJICogKHdlIHdvbid0IHVzZSB0aGVtLCBidXQgd2UgZG9uJ3Qga25vdyBo b3cgbWFueSBhcmUgdGhlcmUpLAorCQkgKiBhbmQgdGhlbiBjb2xsZWN0IGFs bCBub24tTlVMTCB2YWx1ZXMuCisJCSAqLworCQl2YWx1ZXNbaV0gPSAoRGF0 dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIG5idWNrZXRzICogMik7CisK KwkJZm9yIChqID0gMDsgaiA8IGhpc3RvZ3JhbS0+bmJ1Y2tldHM7IGorKykK KwkJeworCQkJLyogc2tpcCBidWNrZXRzIHdoZXJlIHRoaXMgZGltZW5zaW9u IGlzIE5VTEwtb25seSAqLworCQkJaWYgKCEgaGlzdG9ncmFtLT5idWNrZXRz W2pdLT5udWxsc29ubHlbaV0pCisJCQl7CisJCQkJdmFsdWVzW2ldW2NvdW50 c1tpXV0gPSBoaXN0b2dyYW0tPmJ1Y2tldHNbal0tPm1pbltpXTsKKwkJCQlj b3VudHNbaV0gKz0gMTsKKworCQkJCXZhbHVlc1tpXVtjb3VudHNbaV1dID0g aGlzdG9ncmFtLT5idWNrZXRzW2pdLT5tYXhbaV07CisJCQkJY291bnRzW2ld ICs9IDE7CisJCQl9CisJCX0KKworCQkvKiB0aGVyZSBhcmUganVzdCBOVUxM IHZhbHVlcyBpbiB0aGlzIGRpbWVuc2lvbiAqLworCQlpZiAoY291bnRzW2ld ID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBzb3J0IGFuZCBkZWR1cGxp Y2F0ZSAqLworCQlzc3VwW2ldLnNzdXBfY3h0ID0gQ3VycmVudE1lbW9yeUNv bnRleHQ7CisJCXNzdXBbaV0uc3N1cF9jb2xsYXRpb24gPSBERUZBVUxUX0NP TExBVElPTl9PSUQ7CisJCXNzdXBbaV0uc3N1cF9udWxsc19maXJzdCA9IGZh bHNlOworCisJCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKHRt cC0+bHRvcHIsICZzc3VwW2ldKTsKKworCQlxc29ydF9hcmcodmFsdWVzW2ld LCBjb3VudHNbaV0sIHNpemVvZihEYXR1bSksCisJCQkJCQkJCQkJY29tcGFy ZV9zY2FsYXJzX3NpbXBsZSwgJnNzdXBbaV0pOworCisJCS8qCisJCSAqIFdh bGsgdGhyb3VnaCB0aGUgYXJyYXkgYW5kIGVsaW1pbmF0ZSBkdXBsaWNpdGF0 ZSB2YWx1ZXMsIGJ1dAorCQkgKiBrZWVwIHRoZSBvcmRlcmluZyAoc28gdGhh dCB3ZSBjYW4gZG8gYnNlYXJjaCBsYXRlcikuIFdlIGtub3cKKwkJICogdGhl cmUncyBhdCBsZWFzdCAxIGl0ZW0sIHNvIHdlIGNhbiBza2lwIHRoZSBmaXJz dCBlbGVtZW50LgorCQkgKi8KKwkJY291bnQgPSAxOwkvKiBudW1iZXIgb2Yg ZGVkdXBsaWNhdGVkIGl0ZW1zICovCisJCWZvciAoaiA9IDE7IGogPCBjb3Vu dHNbaV07IGorKykKKwkJeworCQkJLyogaWYgaXQncyBkaWZmZXJlbnQgZnJv bSB0aGUgcHJldmlvdXMgdmFsdWUsIHdlIG5lZWQgdG8ga2VlcCBpdCAqLwor CQkJaWYgKGNvbXBhcmVfZGF0dW1zX3NpbXBsZSh2YWx1ZXNbaV1bai0xXSwg dmFsdWVzW2ldW2pdLCAmc3N1cFtpXSkgIT0gMCkKKwkJCXsKKwkJCQkvKiBY WFg6IG5vdCBuZWVkZWQgaWYgKGNvdW50ID09IGopICovCisJCQkJdmFsdWVz W2ldW2NvdW50XSA9IHZhbHVlc1tpXVtqXTsKKwkJCQljb3VudCArPSAxOwor CQkJfQorCQl9CisKKwkJLyogbWFrZSBzdXJlIHdlIGZpdCBpbnRvIHVpbnQx NiAqLworCQlBc3NlcnQoY291bnQgPD0gVUlOVDE2X01BWCk7CisKKwkJLyog a2VlcCBpbmZvIGFib3V0IHRoZSBkZWR1cGxpY2F0ZWQgY291bnQgKi8KKwkJ aW5mb1tpXS5udmFsdWVzID0gY291bnQ7CisKKwkJLyogY29tcHV0ZSBzaXpl IG9mIHRoZSBzZXJpYWxpemVkIGRhdGEgKi8KKwkJaWYgKGluZm9baV0udHlw bGVuID4gMCkKKwkJCS8qIGJ5dmFsIG9yIGJ5cmVmLCBidXQgd2l0aCBmaXhl ZCBsZW5ndGggKG5hbWUsIHRpZCwgLi4uKSAqLworCQkJaW5mb1tpXS5uYnl0 ZXMgPSBpbmZvW2ldLm52YWx1ZXMgKiBpbmZvW2ldLnR5cGxlbjsKKwkJZWxz ZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEpCisJCQkvKiB2YXJsZW5hLCBz byBqdXN0IHVzZSBWQVJTSVpFX0FOWSAqLworCQkJZm9yIChqID0gMDsgaiA8 IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCWluZm9baV0ubmJ5dGVzICs9 IFZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtqXSk7CisJCWVsc2UgaWYgKGluZm9b aV0udHlwbGVuID09IC0yKQorCQkJLyogY3N0cmluZywgc28gc2ltcGx5IHN0 cmxlbiAqLworCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsg aisrKQorCQkJCWluZm9baV0ubmJ5dGVzICs9IHN0cmxlbihEYXR1bUdldFBv aW50ZXIodmFsdWVzW2ldW2pdKSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1Is ICJ1bmtub3duIGRhdGEgdHlwZSB0eXBieXZhbD0lZCB0eXBsZW49JWQiLAor CQkJCWluZm9baV0udHlwYnl2YWwsIGluZm9baV0udHlwbGVuKTsKKwl9CisK KwkvKgorCSAqIE5vdyB3ZSBmaW5hbGx5IGtub3cgaG93IG11Y2ggc3BhY2Ug d2UnbGwgbmVlZCBmb3IgdGhlIHNlcmlhbGl6ZWQKKwkgKiBoaXN0b2dyYW0s IGFzIGl0IGNvbnRhaW5zIHRoZXNlIGZpZWxkczoKKwkgKgorCSAqIC0gbGVu Z3RoICg0QikgZm9yIHZhcmxlbmEKKwkgKiAtIG1hZ2ljICg0QikKKwkgKiAt IHR5cGUgKDRCKQorCSAqIC0gbmRpbWVuc2lvbnMgKDRCKQorCSAqIC0gbmJ1 Y2tldHMgKDRCKQorCSAqIC0gaW5mbyAobmRpbSAqIHNpemVvZihEaW1lbnNp b25JbmZvKQorCSAqIC0gYXJyYXlzIG9mIHZhbHVlcyBmb3IgZWFjaCBkaW1l bnNpb24KKwkgKiAtIHNlcmlhbGl6ZWQgYnVja2V0cyAobmJ1Y2tldHMgKiBi dWNrZXRzaXplKQorCSAqCisJICogU28gdGhlICdoZWFkZXInIHNpemUgaXMg MjBCICsgbmRpbSAqIHNpemVvZihEaW1lbnNpb25JbmZvKSBhbmQKKwkgKiB0 aGVuIHdlJ2xsIHBsYWNlIHRoZSBkYXRhIChhbmQgYnVja2V0cykuCisJICov CisJdG90YWxfbGVuZ3RoID0gKHNpemVvZihpbnQzMikgKyBvZmZzZXRvZihN Vkhpc3RvZ3JhbURhdGEsIGJ1Y2tldHMpCisJCQkJCSsgbmRpbXMgKiBzaXpl b2YoRGltZW5zaW9uSW5mbykKKwkJCQkJKyBuYnVja2V0cyAqIGJ1Y2tldHNp emUpOworCisJLyogYWNjb3VudCBmb3IgdGhlIGRlZHVwbGljYXRlZCBkYXRh ICovCisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJCXRvdGFsX2xl bmd0aCArPSBpbmZvW2ldLm5ieXRlczsKKworCS8qIGVuZm9yY2UgYXJiaXRy YXJ5IGxpbWl0IG9mIDFNQiAqLworCWlmICh0b3RhbF9sZW5ndGggPiAoMTAg KiAxMDI0ICogMTAyNCkpCisJCWVsb2coRVJST1IsICJzZXJpYWxpemVkIGhp c3RvZ3JhbSBleGNlZWRzIDEwTUIgKCVsZCA+ICVkKSIsCisJCQkJCXRvdGFs X2xlbmd0aCwgKDEwICogMTAyNCAqIDEwMjQpKTsKKworCS8qIGFsbG9jYXRl IHNwYWNlIGZvciB0aGUgc2VyaWFsaXplZCBoaXN0b2dyYW0gbGlzdCwgc2V0 IGhlYWRlciAqLworCW91dHB1dCA9IChieXRlYSopcGFsbG9jMCh0b3RhbF9s ZW5ndGgpOworCVNFVF9WQVJTSVpFKG91dHB1dCwgdG90YWxfbGVuZ3RoKTsK KworCS8qIHdlJ2xsIHVzZSAnZGF0YScgdG8ga2VlcCB0cmFjayBvZiB0aGUg cGxhY2UgdG8gd3JpdGUgZGF0YSAqLworCWRhdGEgPSBWQVJEQVRBKG91dHB1 dCk7CisKKwltZW1jcHkoZGF0YSwgaGlzdG9ncmFtLCBvZmZzZXRvZihNVkhp c3RvZ3JhbURhdGEsIGJ1Y2tldHMpKTsKKwlkYXRhICs9IG9mZnNldG9mKE1W SGlzdG9ncmFtRGF0YSwgYnVja2V0cyk7CisKKwltZW1jcHkoZGF0YSwgaW5m bywgc2l6ZW9mKERpbWVuc2lvbkluZm8pICogbmRpbXMpOworCWRhdGEgKz0g c2l6ZW9mKERpbWVuc2lvbkluZm8pICogbmRpbXM7CisKKwkvKiB2YWx1ZSBh cnJheSBmb3IgZWFjaCBkaW1lbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwg bmRpbXM7IGkrKykKKwl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CQljaGFyICp0bXAgPSBkYXRhOworI2VuZGlmCisJCWZvciAoaiA9IDA7IGog PCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJeworCQkJaWYgKGluZm9baV0u dHlwbGVuID4gMCkKKwkJCXsKKwkJCQkvKiBwYXNlZCBieSB2YWx1ZSBvciBy ZWZlcmVuY2UsIGJ1dCBmaXhlZCBsZW5ndGggKi8KKwkJCQltZW1jcHkoZGF0 YSwgJnZhbHVlc1tpXVtqXSwgaW5mb1tpXS50eXBsZW4pOworCQkJCWRhdGEg Kz0gaW5mb1tpXS50eXBsZW47CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ld LnR5cGxlbiA9PSAtMSkKKwkJCXsKKwkJCQkvKiB2YXJsZW5hICovCisJCQkJ bWVtY3B5KGRhdGEsIERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0pLAor CQkJCQkJCVZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtqXSkpOworCQkJCWRhdGEg Kz0gVkFSU0laRV9BTlkodmFsdWVzW2ldW2pdKTsKKwkJCX0KKwkJCWVsc2Ug aWYgKGluZm9baV0udHlwbGVuID09IC0yKQorCQkJeworCQkJCS8qIGNzdHJp bmcgKGRvbid0IGZvcmdldCB0aGUgXDAgdGVybWluYXRvciEpICovCisJCQkJ bWVtY3B5KGRhdGEsIERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0pLAor CQkJCQkJCXN0cmxlbihEYXR1bUdldFBvaW50ZXIodmFsdWVzW2ldW2pdKSkg KyAxKTsKKwkJCQlkYXRhICs9IHN0cmxlbihEYXR1bUdldFBvaW50ZXIodmFs dWVzW2ldW2pdKSkgKyAxOworCQkJfQorCQl9CisJCUFzc2VydCgoZGF0YSAt IHRtcCkgPT0gaW5mb1tpXS5uYnl0ZXMpOworCX0KKworCS8qIGFuZCBmaW5h bGx5LCB0aGUgaGlzdG9ncmFtIGJ1Y2tldHMgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbmJ1Y2tldHM7IGkrKykKKwl7CisJCS8qIGRvbid0IHdyaXRlIGJleW9u ZCB0aGUgYWxsb2NhdGVkIHNwYWNlICovCisJCUFzc2VydChkYXRhIDw9IChj aGFyKilvdXRwdXQgKyB0b3RhbF9sZW5ndGggLSBidWNrZXRzaXplKTsKKwor CQkvKiByZXNldCB0aGUgdmFsdWVzIGZvciBlYWNoIGl0ZW0gKi8KKwkJbWVt c2V0KGJ1Y2tldCwgMCwgYnVja2V0c2l6ZSk7CisKKwkJKkJVQ0tFVF9OVFVQ TEVTKGJ1Y2tldCkgICA9IGhpc3RvZ3JhbS0+YnVja2V0c1tpXS0+bnR1cGxl czsKKworCQlmb3IgKGogPSAwOyBqIDwgbmRpbXM7IGorKykKKwkJeworCQkJ LyogZG8gdGhlIGxvb2t1cCBvbmx5IGZvciBub24tTlVMTCB2YWx1ZXMgKi8K KwkJCWlmICghIGhpc3RvZ3JhbS0+YnVja2V0c1tpXS0+bnVsbHNvbmx5W2pd KQorCQkJeworCQkJCXVpbnQxNiBpZHg7CisJCQkJRGF0dW0gKiB2ID0gTlVM TDsKKwkJCQlzc3VwX3ByaXZhdGUgPSAmc3N1cFtqXTsKKworCQkJCS8qIG1p biBib3VuZGFyeSAqLworCQkJCXYgPSAoRGF0dW0qKWJzZWFyY2goJmhpc3Rv Z3JhbS0+YnVja2V0c1tpXS0+bWluW2pdLAorCQkJCQkJCQl2YWx1ZXNbal0s IGluZm9bal0ubnZhbHVlcywgc2l6ZW9mKERhdHVtKSwKKwkJCQkJCQkJYnNl YXJjaF9jb21wYXJhdG9yKTsKKworCQkJCWlmICh2ID09IE5VTEwpCisJCQkJ CWVsb2coRVJST1IsICJ2YWx1ZSBmb3IgZGltICVkIG5vdCBmb3VuZCBpbiBh cnJheSIsIGopOworCisJCQkJLyogY29tcHV0ZSBpbmRleCB3aXRoaW4gdGhl IGFycmF5ICovCisJCQkJaWR4ID0gKHYgLSB2YWx1ZXNbal0pOworCisJCQkJ QXNzZXJ0KChpZHggPj0gMCkgJiYgKGlkeCA8IGluZm9bal0ubnZhbHVlcykp OworCisJCQkJQlVDS0VUX01JTl9JTkRFWEVTKGJ1Y2tldCwgbmRpbXMpW2pd ID0gaWR4OworCisJCQkJLyogbWF4IGJvdW5kYXJ5ICovCisJCQkJdiA9IChE YXR1bSopYnNlYXJjaCgmaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5tYXhbal0s CisJCQkJCQkJCXZhbHVlc1tqXSwgaW5mb1tqXS5udmFsdWVzLCBzaXplb2Yo RGF0dW0pLAorCQkJCQkJCQlic2VhcmNoX2NvbXBhcmF0b3IpOworCisJCQkJ aWYgKHYgPT0gTlVMTCkKKwkJCQkJZWxvZyhFUlJPUiwgInZhbHVlIGZvciBk aW0gJWQgbm90IGZvdW5kIGluIGFycmF5Iiwgaik7CisKKwkJCQkvKiBjb21w dXRlIGluZGV4IHdpdGhpbiB0aGUgYXJyYXkgKi8KKwkJCQlpZHggPSAodiAt IHZhbHVlc1tqXSk7CisKKwkJCQlBc3NlcnQoKGlkeCA+PSAwKSAmJiAoaWR4 IDwgaW5mb1tqXS5udmFsdWVzKSk7CisKKwkJCQlCVUNLRVRfTUFYX0lOREVY RVMoYnVja2V0LCBuZGltcylbal0gPSBpZHg7CisJCQl9CisJCX0KKworCQkv KiBjb3B5IGZsYWdzIChudWxscywgbWluL21heCBpbmNsdXNpdmUpICovCisJ CW1lbWNweShCVUNLRVRfTlVMTFNfT05MWShidWNrZXQsIG5kaW1zKSwKKwkJ CQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm51bGxzb25seSwgc2l6ZW9mKGJv b2wpICogbmRpbXMpOworCisJCW1lbWNweShCVUNLRVRfTUlOX0lOQ0woYnVj a2V0LCBuZGltcyksCisJCQkJaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5taW5f aW5jbHVzaXZlLCBzaXplb2YoYm9vbCkgKiBuZGltcyk7CisKKwkJbWVtY3B5 KEJVQ0tFVF9NQVhfSU5DTChidWNrZXQsIG5kaW1zKSwKKwkJCQloaXN0b2dy YW0tPmJ1Y2tldHNbaV0tPm1heF9pbmNsdXNpdmUsIHNpemVvZihib29sKSAq IG5kaW1zKTsKKworCQkvKiBjb3B5IHRoZSBpdGVtIGludG8gdGhlIGFycmF5 ICovCisJCW1lbWNweShkYXRhLCBidWNrZXQsIGJ1Y2tldHNpemUpOworCisJ CWRhdGEgKz0gYnVja2V0c2l6ZTsKKwl9CisKKwkvKiBhdCB0aGlzIHBvaW50 IHdlIGV4cGVjdCB0byBtYXRjaCB0aGUgdG90YWxfbGVuZ3RoIGV4YWN0bHkg Ki8KKwlBc3NlcnQoKGRhdGEgLSAoY2hhciopb3V0cHV0KSA9PSB0b3RhbF9s ZW5ndGgpOworCisJLyogRklYTUUgZnJlZSB0aGUgdmFsdWVzL2NvdW50cyBh cnJheXMgaGVyZSAqLworCisJcmV0dXJuIG91dHB1dDsKK30KKworLyoKKyAq IFJldHVybnMgaGlzdG9ncmFtIGluIGEgcGFydGlhbGx5LXNlcmlhbGl6ZWQg Zm9ybSAoa2VlcHMgdGhlIGJvdW5kYXJ5CisgKiB2YWx1ZXMgZGVkdXBsaWNh dGVkLCBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8gb3B0aW1pemUgdGhlIGVz dGltYXRpb24KKyAqIHBhcnQgYnkgY2FjaGluZyBmdW5jdGlvbiBjYWxsIHJl c3VsdHMgYmV0d2VlbiBidWNrZXRzIGV0Yy4pLgorICovCitNVlNlcmlhbGl6 ZWRIaXN0b2dyYW0KK2Rlc2VyaWFsaXplX212X2hpc3RvZ3JhbShieXRlYSAq IGRhdGEpCit7CisJaW50IGkgPSAwLCBqID0gMDsKKworCVNpemUJZXhwZWN0 ZWRfc2l6ZTsKKwljaGFyICAgKnRtcCA9IE5VTEw7CisKKwlNVlNlcmlhbGl6 ZWRIaXN0b2dyYW0gaGlzdG9ncmFtOworCURpbWVuc2lvbkluZm8gKmluZm87 CisKKwlpbnQJCW5idWNrZXRzOworCWludAkJbmRpbXM7CisJaW50CQlidWNr ZXRzaXplOworCisJLyogdGVtcG9yYXJ5IGRlc2VyaWFsaXphdGlvbiBidWZm ZXIgKi8KKwlpbnQJCWJ1ZmZsZW47CisJY2hhciAgICpidWZmOworCWNoYXIg ICAqcHRyOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgPCBvZmZzZXRvZihN VlNlcmlhbGl6ZWRIaXN0b2dyYW1EYXRhLGJ1Y2tldHMpKQorCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBoaXN0b2dyYW0gc2l6ZSAlbGQgKGV4cGVjdGVkIGF0 IGxlYXN0ICVsZCkiLAorCQkJIFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpLCBv ZmZzZXRvZihNVlNlcmlhbGl6ZWRIaXN0b2dyYW1EYXRhLGJ1Y2tldHMpKTsK KworCS8qIHJlYWQgdGhlIGhpc3RvZ3JhbSBoZWFkZXIgKi8KKwloaXN0b2dy YW0KKwkJPSAoTVZTZXJpYWxpemVkSGlzdG9ncmFtKXBhbGxvYyhzaXplb2Yo TVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSkpOworCisJLyogaW5pdGlhbGl6 ZSBwb2ludGVyIHRvIHRoZSBkYXRhIHBhcnQgKHNraXAgdGhlIHZhcmxlbmEg aGVhZGVyKSAqLworCXRtcCA9IFZBUkRBVEEoZGF0YSk7CisKKwkvKiBnZXQg dGhlIGhlYWRlciBhbmQgcGVyZm9ybSBiYXNpYyBzYW5pdHkgY2hlY2tzICov CisJbWVtY3B5KGhpc3RvZ3JhbSwgdG1wLCBvZmZzZXRvZihNVlNlcmlhbGl6 ZWRIaXN0b2dyYW1EYXRhLCBidWNrZXRzKSk7CisJdG1wICs9IG9mZnNldG9m KE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEsIGJ1Y2tldHMpOworCisJaWYg KGhpc3RvZ3JhbS0+bWFnaWMgIT0gTVZTVEFUX0hJU1RfTUFHSUMpCisJCWVs b2coRVJST1IsICJpbnZhbGlkIGhpc3RvZ3JhbSBtYWdpYyAlZCAoZXhwZWN0 ZWQgJWRkKSIsCisJCQkgaGlzdG9ncmFtLT5tYWdpYywgTVZTVEFUX0hJU1Rf TUFHSUMpOworCisJaWYgKGhpc3RvZ3JhbS0+dHlwZSAhPSBNVlNUQVRfSElT VF9UWVBFX0JBU0lDKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBoaXN0b2dy YW0gdHlwZSAlZCAoZXhwZWN0ZWQgJWRkKSIsCisJCQkgaGlzdG9ncmFtLT50 eXBlLCBNVlNUQVRfSElTVF9UWVBFX0JBU0lDKTsKKworCW5idWNrZXRzID0g aGlzdG9ncmFtLT5uYnVja2V0czsKKwluZGltcyAgICA9IGhpc3RvZ3JhbS0+ bmRpbWVuc2lvbnM7CisJYnVja2V0c2l6ZSA9IEJVQ0tFVF9TSVpFKG5kaW1z KTsKKworCUFzc2VydCgobmJ1Y2tldHMgPiAwKSAmJiAobmJ1Y2tldHMgPD0g TVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMpKTsKKwlBc3NlcnQoKG5kaW1zID49 IDIpICYmIChuZGltcyA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisK KwkvKgorCSAqIFdoYXQgc2l6ZSBkbyB3ZSBleHBlY3Qgd2l0aCB0aG9zZSBw YXJhbWV0ZXJzIChpdCdzIGluY29tcGxldGUsCisJICogYXMgd2UgeWV0IGhh dmUgdG8gY291bnQgdGhlIGFycmF5IHNpemVzIChmcm9tIERpbWVuc2lvbklu Zm8KKwkgKiByZWNvcmRzKS4KKwkgKi8KKwlleHBlY3RlZF9zaXplID0gb2Zm c2V0b2YoTVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSxidWNrZXRzKSArCisJ CQkJCW5kaW1zICogc2l6ZW9mKERpbWVuc2lvbkluZm8pICsKKwkJCQkJKG5i dWNrZXRzICogYnVja2V0c2l6ZSk7CisKKwkvKiBjaGVjayB0aGF0IHdlIGhh dmUgYXQgbGVhc3QgdGhlIERpbWVuc2lvbkluZm8gcmVjb3JkcyAqLworCWlm IChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IGV4cGVjdGVkX3NpemUpCisJ CWVsb2coRVJST1IsICJpbnZhbGlkIGhpc3RvZ3JhbSBzaXplICVsZCAoZXhw ZWN0ZWQgJWxkKSIsCisJCQkgVkFSU0laRV9BTllfRVhIRFIoZGF0YSksIGV4 cGVjdGVkX3NpemUpOworCisJaW5mbyA9IChEaW1lbnNpb25JbmZvKikodG1w KTsKKwl0bXAgKz0gbmRpbXMgKiBzaXplb2YoRGltZW5zaW9uSW5mbyk7CisK KwkvKiBhY2NvdW50IGZvciB0aGUgdmFsdWUgYXJyYXlzICovCisJZm9yIChp ID0gMDsgaSA8IG5kaW1zOyBpKyspCisJCWV4cGVjdGVkX3NpemUgKz0gaW5m b1tpXS5uYnl0ZXM7CisKKwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkg IT0gZXhwZWN0ZWRfc2l6ZSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgaGlz dG9ncmFtIHNpemUgJWxkIChleHBlY3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpF X0FOWV9FWEhEUihkYXRhKSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwkvKiBsb29r cyBPSyAtIG5vdCBjb3JydXB0ZWQgb3Igc29tZXRoaW5nICovCisKKwkvKiBu b3cgbGV0J3MgYWxsb2NhdGUgYSBzaW5nbGUgYnVmZmVyIGZvciBhbGwgdGhl IHZhbHVlcyBhbmQgY291bnRzICovCisKKwlidWZmbGVuID0gKHNpemVvZihp bnQpICArIHNpemVvZihEYXR1bSopKSAqIG5kaW1zOworCWZvciAoaSA9IDA7 IGkgPCBuZGltczsgaSsrKQorCXsKKwkJLyogZG9uJ3QgYWxsb2NhdGUgc3Bh Y2UgZm9yIGJ5dmFsIHR5cGVzLCBtYXRjaGluZyBEYXR1bSAqLworCQlpZiAo ISAoaW5mb1tpXS50eXBieXZhbCAmJiAoaW5mb1tpXS50eXBsZW4gPT0gc2l6 ZW9mKERhdHVtKSkpKQorCQkJYnVmZmxlbiArPSAoc2l6ZW9mKERhdHVtKSAq IGluZm9baV0ubnZhbHVlcyk7CisJfQorCisJLyogYWxzbywgaW5jbHVkZSBz cGFjZSBmb3IgdGhlIHJlc3VsdCwgdHJhY2tpbmcgdGhlIGJ1Y2tldHMgKi8K KwlidWZmbGVuICs9IG5idWNrZXRzICogKAorCQkJCXNpemVvZihNVlNlcmlh bGl6ZWRCdWNrZXQpICsJCS8qIGJ1Y2tldCBwb2ludGVyICovCisJCQkJc2l6 ZW9mKE1WU2VyaWFsaXplZEJ1Y2tldERhdGEpKTsJLyogYnVja2V0IGRhdGEg Ki8KKworCWJ1ZmYgPSBwYWxsb2MwKGJ1ZmZsZW4pOworCXB0ciAgPSBidWZm OworCisJaGlzdG9ncmFtLT5udmFsdWVzID0gKGludCopcHRyOworCXB0ciAr PSAoc2l6ZW9mKGludCkgKiBuZGltcyk7CisKKwloaXN0b2dyYW0tPnZhbHVl cyA9IChEYXR1bSoqKXB0cjsKKwlwdHIgKz0gKHNpemVvZihEYXR1bSopICog bmRpbXMpOworCisJLyoKKwkgKiBGSVhNRSBUaGlzIHVzZXMgcG9pbnRlcnMg dG8gdGhlIG9yaWdpbmFsIGRhdGEgYXJyYXkgKHRoZSB0eXBlcworCSAqICAg ICAgIG5vdCBwYXNzZWQgYnkgdmFsdWUpLCBzbyB3aGVuIHNvbWVvbmUgZnJl ZXMgdGhlIG1lbW9yeSwKKwkgKiAgICAgICBlLmcuIGJ5IGRvaW5nIHNvbWV0 aGluZyBsaWtlIHRoaXM6CisJICoKKwkgKiAgICAgICAgICAgYnl0ZWEgKiBk YXRhID0gLi4uIGZldGNoIHRoZSBkYXRhIGZyb20gY2F0YWxvZyAuLi4KKwkg KiAgICAgICAgICAgTUNWTGlzdCBtY3ZsaXN0ID0gZGVzZXJpYWxpemVfbWN2 X2xpc3QoZGF0YSk7CisJICogICAgICAgICAgIHBmcmVlKGRhdGEpOworCSAq CisJICogICAgICAgdGhlbiAnbWN2bGlzdCcgcmVmZXJlbmNlcyB0aGUgZnJl ZWQgbWVtb3J5LiBUaGlzIG5lZWRzIHRvCisJICogICAgICAgY29weSB0aGUg cGllY2VzLgorCSAqCisJICogVE9ETyBzYW1lIGFzIGluIE1DViBkZXNlcmlh bGl6YXRpb24gLyBjb25zaWRlciBtb3ZpbmcgdG8gY29tbW9uLmMKKwkgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7CisJCWhpc3RvZ3Jh bS0+bnZhbHVlc1tpXSA9IGluZm9baV0ubnZhbHVlczsKKworCQlpZiAoaW5m b1tpXS50eXBieXZhbCAmJiBpbmZvW2ldLnR5cGxlbiA9PSBzaXplb2YoRGF0 dW0pKQorCQl7CisJCQkvKiBwYXNzZWQgYnkgdmFsdWUgLyBEYXR1bSAtIHNp bXBseSByZXVzZSB0aGUgYXJyYXkgKi8KKwkJCWhpc3RvZ3JhbS0+dmFsdWVz W2ldID0gKERhdHVtKil0bXA7CisJCQl0bXAgKz0gaW5mb1tpXS5uYnl0ZXM7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBhbGwgdGhlIHZhcmxlbmEgZGF0 YSBuZWVkIGEgY2h1bmsgZnJvbSB0aGUgYnVmZmVyICovCisJCQloaXN0b2dy YW0tPnZhbHVlc1tpXSA9IChEYXR1bSopcHRyOworCQkJcHRyICs9IChzaXpl b2YoRGF0dW0pICogaW5mb1tpXS5udmFsdWVzKTsKKworCQkJaWYgKGluZm9b aV0udHlwYnl2YWwpCisJCQl7CisJCQkJLyogcGFzZWQgYnkgdmFsdWUsIGJ1 dCBzbWFsbGVyIHRoYW4gRGF0dW0gKi8KKwkJCQlmb3IgKGogPSAwOyBqIDwg aW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJeworCQkJCQkvKiBqdXN0IHBv aW50IGludG8gdGhlIGFycmF5ICovCisJCQkJCW1lbWNweSgmaGlzdG9ncmFt LT52YWx1ZXNbaV1bal0sIHRtcCwgaW5mb1tpXS50eXBsZW4pOworCQkJCQl0 bXAgKz0gaW5mb1tpXS50eXBsZW47CisJCQkJfQorCQkJfQorCQkJZWxzZSBp ZiAoaW5mb1tpXS50eXBsZW4gPiAwKQorCQkJeworCQkJCS8qIHBhc2VkIGJ5 IHJlZmVyZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4p ICovCisJCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisr KQorCQkJCXsKKwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAq LworCQkJCQloaXN0b2dyYW0tPnZhbHVlc1tpXVtqXSA9IFBvaW50ZXJHZXRE YXR1bSh0bXApOworCQkJCQl0bXAgKz0gaW5mb1tpXS50eXBsZW47CisJCQkJ fQorCQkJfQorCQkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEpCisJ CQl7CisJCQkJLyogdmFybGVuYSAqLworCQkJCWZvciAoaiA9IDA7IGogPCBp bmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8qIGp1c3QgcG9p bnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJaGlzdG9ncmFtLT52YWx1ZXNb aV1bal0gPSBQb2ludGVyR2V0RGF0dW0odG1wKTsKKwkJCQkJdG1wICs9IFZB UlNJWkVfQU5ZKHRtcCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaW5m b1tpXS50eXBsZW4gPT0gLTIpCisJCQl7CisJCQkJLyogY3N0cmluZyAqLwor CQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJ CQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJ CQkJaGlzdG9ncmFtLT52YWx1ZXNbaV1bal0gPSBQb2ludGVyR2V0RGF0dW0o dG1wKTsKKwkJCQkJdG1wICs9IChzdHJsZW4odG1wKSArIDEpOyAvKiBkb24n dCBmb3JnZXQgdGhlIFwwICovCisJCQkJfQorCQkJfQorCQl9CisJfQorCisJ aGlzdG9ncmFtLT5idWNrZXRzID0gKE1WU2VyaWFsaXplZEJ1Y2tldCopcHRy OworCXB0ciArPSAoc2l6ZW9mKE1WU2VyaWFsaXplZEJ1Y2tldCkgKiBuYnVj a2V0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1Y2tldHM7IGkrKykKKwl7 CisJCU1WU2VyaWFsaXplZEJ1Y2tldCBidWNrZXQgPSAoTVZTZXJpYWxpemVk QnVja2V0KXB0cjsKKwkJcHRyICs9IHNpemVvZihNVlNlcmlhbGl6ZWRCdWNr ZXREYXRhKTsKKworCQlidWNrZXQtPm50dXBsZXMJCQk9ICpCVUNLRVRfTlRV UExFUyh0bXApOworCQlidWNrZXQtPm51bGxzb25seQkJPSBCVUNLRVRfTlVM TFNfT05MWSh0bXAsIG5kaW1zKTsKKwkJYnVja2V0LT5taW5faW5jbHVzaXZl CT0gQlVDS0VUX01JTl9JTkNMKHRtcCwgbmRpbXMpOworCQlidWNrZXQtPm1h eF9pbmNsdXNpdmUJPSBCVUNLRVRfTUFYX0lOQ0wodG1wLCBuZGltcyk7CisK KwkJYnVja2V0LT5taW4JCQkJPSBCVUNLRVRfTUlOX0lOREVYRVModG1wLCBu ZGltcyk7CisJCWJ1Y2tldC0+bWF4CQkJCT0gQlVDS0VUX01BWF9JTkRFWEVT KHRtcCwgbmRpbXMpOworCisJCWhpc3RvZ3JhbS0+YnVja2V0c1tpXSA9IGJ1 Y2tldDsKKworCQlBc3NlcnQodG1wIDw9IChjaGFyKilkYXRhICsgVkFSU0la RV9BTlkoZGF0YSkpOworCisJCXRtcCArPSBidWNrZXRzaXplOworCX0KKwor CS8qIGF0IHRoaXMgcG9pbnQgd2UgZXhwZWN0IHRvIG1hdGNoIHRoZSB0b3Rh bF9sZW5ndGggZXhhY3RseSAqLworCUFzc2VydCgodG1wIC0gVkFSREFUQShk YXRhKSkgPT0gZXhwZWN0ZWRfc2l6ZSk7CisKKwkvKiB3ZSBzaG91bGQgZXho YXVzdCB0aGUgb3V0cHV0IGJ1ZmZlciBleGFjdGx5ICovCisJQXNzZXJ0KChw dHIgLSBidWZmKSA9PSBidWZmbGVuKTsKKworCXJldHVybiBoaXN0b2dyYW07 Cit9CisKKy8qCisgKiBCdWlsZCB0aGUgaW5pdGlhbCBidWNrZXQsIHdoaWNo IHdpbGwgYmUgdGhlbiBzcGxpdCBpbnRvIHNtYWxsZXIgb25lcy4KKyAqLwor c3RhdGljIE1WQnVja2V0CitjcmVhdGVfaW5pdGlhbF9tdl9idWNrZXQoaW50 IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMs CisJCQkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMpCit7CisJaW50IGk7CisJ aW50CW51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisJSGlzdG9ncmFtQnVpbGQg ZGF0YSA9IE5VTEw7CisKKwkvKiBUT0RPIGFsbG9jYXRlIGJ1Y2tldCBhcyBh IHNpbmdsZSBwaWVjZSwgaW5jbHVkaW5nIGFsbCB0aGUgZmllbGRzLiAqLwor CU1WQnVja2V0IGJ1Y2tldCA9IChNVkJ1Y2tldClwYWxsb2MwKHNpemVvZihN VkJ1Y2tldERhdGEpKTsKKworCUFzc2VydChudW1yb3dzID4gMCk7CisJQXNz ZXJ0KHJvd3MgIT0gTlVMTCk7CisJQXNzZXJ0KChudW1hdHRycyA+PSAyKSAm JiAobnVtYXR0cnMgPD0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykpOworCisJ LyogYWxsb2NhdGUgdGhlIHBlci1kaW1lbnNpb24gYXJyYXlzICovCisKKwkv KiBmbGFncyBmb3IgbnVsbC1vbmx5IGRpbWVuc2lvbnMgKi8KKwlidWNrZXQt Pm51bGxzb25seSA9IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9m KGJvb2wpKTsKKworCS8qIGluY2x1c2l2ZW5lc3MgYm91bmRhcmllcyAtIGxv d2VyL3VwcGVyIGJvdW5kcyAqLworCWJ1Y2tldC0+bWluX2luY2x1c2l2ZSA9 IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKGJvb2wpKTsKKwli dWNrZXQtPm1heF9pbmNsdXNpdmUgPSAoYm9vbCopcGFsbG9jMChudW1hdHRy cyAqIHNpemVvZihib29sKSk7CisKKwkvKiBsb3dlci91cHBlciBib3VuZGFy aWVzICovCisJYnVja2V0LT5taW4gPSAoRGF0dW0qKXBhbGxvYzAobnVtYXR0 cnMgKiBzaXplb2YoRGF0dW0pKTsKKwlidWNrZXQtPm1heCA9IChEYXR1bSop cGFsbG9jMChudW1hdHRycyAqIHNpemVvZihEYXR1bSkpOworCisJLyogYnVp bGQtZGF0YSAqLworCWRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpcGFsbG9jMChz aXplb2YoSGlzdG9ncmFtQnVpbGREYXRhKSk7CisKKwkvKiBudW1iZXIgb2Yg ZGlzdGluY3QgdmFsdWVzIChwZXIgZGltZW5zaW9uKSAqLworCWRhdGEtPm5k aXN0aW5jdHMgPSAodWludDMyKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9m KHVpbnQzMikpOworCisJLyogYWxsIHRoZSBzYW1wbGUgcm93cyBmYWxsIGlu dG8gdGhlIGluaXRpYWwgYnVja2V0ICovCisJZGF0YS0+bnVtcm93cyA9IG51 bXJvd3M7CisJZGF0YS0+cm93cyA9IHJvd3M7CisKKwlidWNrZXQtPmJ1aWxk X2RhdGEgPSBkYXRhOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIG51bWJlciBv ZiBuZGlzdGluY3QgY29tYmluYXRpb25zIGluIHRoZSBidWNrZXQgKHdoaWNo CisJICogd2UgdXNlIHdoZW4gc2VsZWN0aW5nIGJ1Y2tldCB0byBwYXJ0aXRp b24pLCBhbmQgdGhlbiBudW1iZXIgb2YKKwkgKiBkaXN0aW5jdCB2YWx1ZXMg Zm9yIGVhY2ggcGFydGl0aW9uICh3aGljaCB3ZSB1c2Ugd2hlbiBjaG9vc2lu ZworCSAqIHdoaWNoIGRpbWVuc2lvbiB0byBzcGxpdCkuCisJICovCisJdXBk YXRlX2J1Y2tldF9uZGlzdGluY3QoYnVja2V0LCBhdHRycywgc3RhdHMpOwor CisJLyogVXBkYXRlIG5kaXN0aW5jdCAoYW5kIGFsc28gc2V0IG1pbi9tYXgp IGZvciBhbGwgZGltZW5zaW9ucy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVt YXR0cnM7IGkrKykKKwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QoYnVj a2V0LCBpLCBhdHRycywgc3RhdHMsIHRydWUpOworCisJcmV0dXJuIGJ1Y2tl dDsKK30KKworLyoKKyAqIENob29zZSB0aGUgYnVja2V0IHRvIHBhcnRpdGlv biBuZXh0LgorICoKKyAqIFRoZSBjdXJyZW50IGNyaXRlcmlhIGlzIHJhdGhl ciBzaW1wbGUsIGNob3NlbiBzbyB0aGF0IHRoZSBhbGdvcml0aG0KKyAqIHBy b2R1Y2VzIGJ1Y2tldHMgd2l0aCBhYm91dCBlcXVhbCBmcmVxdWVuY3kgYW5k IHJlZ3VsYXIgc2l6ZS4gV2UKKyAqIHNlbGVjdCB0aGUgYnVja2V0IHdpdGgg dGhlIGhpZ2hlc3QgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcywgYW5kCisg KiB0aGVuIHNwbGl0IGl0IGJ5IHRoZSBsb25nZXN0IGRpbWVuc2lvbi4KKyAq CisgKiBUaGUgZGlzdGluY3QgdmFsdWVzIGFyZSB1bmlmb3JtbHkgbWFwcGVk IHRvIFswLDFdIGludGVydmFsLCBhbmQgdGhpcworICogaXMgdXNlZCB0byBj b21wdXRlIGxlbmd0aCBvZiB0aGUgdmFsdWUgcmFuZ2UuCisgKgorICogTk9U RTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXJyYXkgdXNlZCBmb3IgZGVkdXBs aWNhdGlvbiwgYXMgdGhpcworICogICAgICAgY29udGFpbnMgdmFsdWVzIGZv ciBhbGwgdGhlIHR1cGxlcyBmcm9tIHRoZSBzYW1wbGUsIG5vdCBqdXN0Cisg KiAgICAgICB0aGUgYm91bmRhcnkgdmFsdWVzLgorICoKKyAqIFJldHVybnMg ZWl0aGVyIHBvaW50ZXIgdG8gdGhlIGJ1Y2tldCBzZWxlY3RlZCB0byBiZSBw YXJ0aXRpb25lZCwKKyAqIG9yIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGJ1Y2tl dHMgdGhhdCBtYXkgYmUgc3BsaXQgKGkuZS4gYWxsIGJ1Y2tldHMKKyAqIGNv bnRhaW4gYSBzaW5nbGUgZGlzdGluY3QgdmFsdWUpLgorICoKKyAqIFRPRE8g Q29uc2lkZXIgb3RoZXIgcGFydGl0aW9uaW5nIGNyaXRlcmlhICh2LW9wdGlt YWwsIG1heGRpZmYgZXRjLikuCisgKiAgICAgIEZvciBleGFtcGxlIHVzZSB0 aGUgImJ1Y2tldCB2b2x1bWUiIChwcm9kdWN0IG9mIGRpbWVuc2lvbgorICog ICAgICBsZW5ndGhzKSB0byBzZWxlY3QgdGhlIGJ1Y2tldC4KKyAqCisgKiAg ICAgIFdlIG5lZWQgYnVja2V0cyBjb250YWluaW5nIGFib3V0IHRoZSBzYW1l IG51bWJlciBvZiB0dXBsZXMgKHNvCisgKiAgICAgIGFib3V0IHRoZSBzYW1l IGZyZXF1ZW5jeSksIGFzIHRoYXQgbGltaXRzIHRoZSBlcnJvciB3aGVuIHdl CisgKiAgICAgIG1hdGNoIHRoZSBidWNrZXQgcGFydGlhbGx5IChpbiB0aGF0 IGNhc2UgdXNlIDEvMiB0aGUgYnVja2V0KS4KKyAqCisgKiAgICAgIFdlIGFs c28gbmVlZCBidWNrZXRzIHdpdGggInJlZ3VsYXIiIHNpemUsIGkuZS4gbm90 ICJuYXJyb3ciIGluCisgKiAgICAgIHNvbWUgZGltZW5zaW9ucyBhbmQgIndp ZGUiIGluIHRoZSBvdGhlcnMsIGJlY2F1c2UgdGhhdCBtYWtlcworICogICAg ICBwYXJ0aWFsIG1hdGNoZXMgbW9yZSBsaWtlbHkgYW5kIGluY3JlYXNlcyB0 aGUgZXN0aW1hdGlvbiBlcnJvciwKKyAqICAgICAgZXNwZWNpYWxseSB3aGVu IHRoZSBjbGF1c2VzIG1hdGNoIG1hbnkgYnVja2V0cyBwYXJ0aWFsbHkuIFRo aXMKKyAqICAgICAgaXMgZXNwZWNpYWxseSBzZXJpb3VzIGZvciBPUi1jbGF1 c2VzLCBiZWNhdXNlIGluIHRoYXQgY2FzZSBhbnkKKyAqICAgICAgb2YgdGhl bSBtYXkgYWRkIHRoZSBidWNrZXQgYXMgYSAocGFydGlhbCkgbWF0Y2guIFdp dGggQU5ELWNsYXVzZXMKKyAqICAgICAgYWxsIHRoZSBjbGF1c2VzIGhhdmUg dG8gbWF0Y2ggdGhlIGJ1Y2tldCwgd2hpY2ggbWFrZXMgdGhpcyBpc3N1ZQor ICogICAgICBzb21ld2hhdCBsZXNzIHByZXNzaW5nLgorICoKKyAqICAgICAg Rm9yIGV4YW1wbGUgdGhpcyB0YWJsZToKKyAqCisgKiAgICAgICAgICBDUkVB VEUgVEFCTEUgdCBBUyBTRUxFQ1QgaSBBUyBhLCBpIEFTIGIKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMDAwKSBzKGkpOworICogICAgICAgICAgQUxURVIgVEFCTEUgdCBB REQgU1RBVElTVElDUyAoaGlzdG9ncmFtKSBPTiAoYSxiKTsKKyAqICAgICAg ICAgIEFOQUxZWkUgdDsKKyAqCisgKiAgICAgIEl0J3MgYSB2ZXJ5IHNwZWNp ZmljIChhbmQgcGVyaGFwcyBhcnRpZmljaWFsKSBleGFtcGxlLCBiZWNhdXNl CisgKiAgICAgIGV2ZXJ5IGJ1Y2tldCBhbHdheXMgaGFzIGV4YWN0bHkgdGhl IHNhbWUgbnVtYmVyIG9mIGRpc3RpbmN0CisgKiAgICAgIHZhbHVlcyBpbiBh bGwgZGltZW5zaW9ucywgd2hpY2ggbWFrZXMgdGhlIHBhcnRpdGlvbmluZyB0 cmlja3kuCisgKgorICogICAgICBUaGVuOgorICoKKyAqICAgICAgICAgIFNF TEVDVCAqIEZST00gdCBXSEVSRSBhIDwgMTAgQU5EIGIgPCAxMDsKKyAqCisg KiAgICAgIGlzIGVzdGltYXRlZCB0byByZXR1cm4gfjEyMCByb3dzLCB3aGls ZSBpbiByZWFsaXR5IGl0IHJldHVybnMgOS4KKyAqCisgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCisgKiAgICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgIFNlcSBTY2FuIG9uIHQg IChjb3N0PTAuMDAuLjE5NDI1LjAwIHJvd3M9MTE3IHdpZHRoPTgpCisgKiAg ICAgICAgICAgICAgICAgICAgICAoYWN0dWFsIHRpbWU9MC4xODUuLjI3MC43 NzQgcm93cz05IGxvb3BzPTEpCisgKiAgICAgICAgIEZpbHRlcjogKChhIDwg MTApIEFORCAoYiA8IDEwKSkKKyAqICAgICAgICAgUm93cyBSZW1vdmVkIGJ5 IEZpbHRlcjogOTk5OTkxCisgKgorICogICAgICB3aGlsZSB0aGUgcXVlcnkg dXNpbmcgT1IgY2xhdXNlcyBpcyBlc3RpbWF0ZWQgbGlrZSB0aGlzOgorICoK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4KKyAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAg U2VxIFNjYW4gb24gdCAgKGNvc3Q9MC4wMC4uMTk0MjUuMDAgcm93cz04MTAw IHdpZHRoPTgpCisgKiAgICAgICAgICAgICAgICAgICAgICAoYWN0dWFsIHRp bWU9MC4xMTguLjE4OS45MTkgcm93cz05IGxvb3BzPTEpCisgKiAgICAgICAg IEZpbHRlcjogKChhIDwgMTApIE9SIChiIDwgMTApKQorICogICAgICAgICBS b3dzIFJlbW92ZWQgYnkgRmlsdGVyOiA5OTk5OTEKKyAqCisgKiAgICAgIHdo aWNoIGlzIGNsZWFybHkgbXVjaCB3b3JzZS4gVGhpcyBoYXBwZW5zIGJlY2F1 c2UgdGhlIGhpc3RvZ3JhbQorICogICAgICBjb250YWlucyBidWNrZXRzIGxp a2UgdGhpczoKKyAqCisgKiAgICAgICAgICBidWNrZXQgNTkyICBbMyAzMDMx MF0gWzMwMTM0IDMwNTkzXSA9PiBbMC4wMDAyMzNdCisgKgorICogICAgICBp LmUuIHRoZSBsZW5ndGggb2YgImEiIGRpbWVuc2lvbiBpcyAoMzAzMTAtMyk9 MzAzMDcsIHdoaWxlIHRoZQorICogICAgICBsZW5ndGggb2YgImIiIGlzICgz MDU5My0zMDEzNCk9NDU5LiBTbyB0aGUgImIiIGRpbWVuc2lvbiBpcyBtdWNo CisgKiAgICAgIG5hcnJvd2VyIHRoYW4gImEiLiBPZiBjb3Vyc2UsIHRoZXJl IGFyZSBidWNrZXRzIHdoZXJlICJiIiBpcyB0aGUKKyAqICAgICAgd2lkZXIg ZGltZW5zaW9uLgorICoKKyAqICAgICAgVGhpcyBpcyBwYXJ0aWFsbHkgbWl0 aWdhdGVkIGJ5IHNlbGVjdGluZyB0aGUgImxvbmdlc3QiIGRpbWVuc2lvbgor ICogICAgICBpbiBwYXJ0aXRpb25fYnVja2V0KCkgYnV0IHRoYXQgb25seSBo YXBwZW5zIGFmdGVyIHdlIGFscmVhZHkKKyAqICAgICAgc2VsZWN0ZWQgdGhl IGJ1Y2tldC4gU28gaWYgd2UgbmV2ZXIgc2VsZWN0IHRoZSBidWNrZXQsIHdl IGNhbid0CisgKiAgICAgIHJlYWxseSBmaXggaXQgdGhlcmUuCisgKgorICog ICAgICBUaGUgb3RoZXIgcmVhc29uIHdoeSB0aGlzIHBhcnRpY3VsYXIgZXhh bXBsZSBiZWhhdmVzIHNvIHBvb3JseQorICogICAgICBpcyBkdWUgdG8gdGhl IHdheSB3ZSBzcGxpdCB0aGUgcGFydGl0aW9uIGluIHBhcnRpdGlvbl9idWNr ZXQoKS4KKyAqICAgICAgQ3VycmVudGx5IHdlIGF0dGVtcHQgdG8gZGl2aWRl IHRoZSBidWNrZXQgaW50byB0d28gcGFydHMgd2l0aAorICogICAgICB0aGUg c2FtZSBudW1iZXIgb2Ygc2FtcGxlZCB0dXBsZXMgKGZyZXF1ZW5jeSksIGJ1 dCB0aGF0IGRvZXMgbm90CisgKiAgICAgIHdvcmsgd2VsbCB3aGVuIGFsbCB0 aGUgdHVwbGVzIGFyZSBzcXVhc2hlZCBvbiBvbmUgZW5kIG9mIHRoZQorICog ICAgICBidWNrZXQgKGUuZy4gZXhhY3RseSBhdCB0aGUgZGlhZ29uYWwsIGFz IGE9YikuIEluIHRoYXQgY2FzZSB3ZQorICogICAgICBzcGxpdCB0aGUgYnVj a2V0IGludG8gYSB0aW55IGJ1Y2tldCBvbiB0aGUgZGlhZ29uYWwsIGFuZCBh IGh1Z2UKKyAqICAgICAgcmVtYWluaW5nIHBhcnQgb2YgdGhlIGJ1Y2tldCwg d2hpY2ggaXMgc3RpbGwgZ29pbmcgdG8gYmUgbmFycm93CisgKiAgICAgIGFu ZCB3ZSdyZSB1bmxpa2VseSB0byBmaXggdGhhdC4KKyAqCisgKiAgICAgIFNv IHBlcmhhcHMgd2UgbmVlZCB0d28gcGFydGl0aW9uaW5nIHN0cmF0ZWdpZXMg LSBvbmUgYWltaW5nIHRvCisgKiAgICAgIHNwbGl0IGJ1Y2tldHMgd2l0aCBo aWdoIGZyZXF1ZW5jeSAobnVtYmVyIG9mIHNhbXBsZWQgcm93cyksIHRoZQor ICogICAgICBvdGhlciBhaW1pbmcgdG8gc3BsaXQgImxhcmdlIiBidWNrZXRz LiBBbmQgYWx0ZXJuYXRpbmcgYmV0d2VlbgorICogICAgICB0aGVtLCBzb21l aG93LgorICoKKyAqIFRPRE8gQWxsb3dpbmcgdGhlIGJ1Y2tldCB0byBkZWdl bmVyYXRlIHRvIGEgc2luZ2xlIGNvbWJpbmF0aW9uIG9mCisgKiAgICAgIHZh bHVlcyBtYWtlcyBpdCByYXRoZXIgc3RyYW5nZSBNQ1YgbGlzdC4gTWF5YmUg d2Ugc2hvdWxkIHVzZQorICogICAgICBoaWdoZXIgbG93ZXIgYm91bmRhcnks IG9yIG1heWJlIG1ha2UgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYQorICogICAg ICBtb3JlIGNvbXBsZXggKGUuZy4gY29uc2lkZXIgbnVtYmVyIG9mIHJvd3Mg aW4gdGhlIGJ1Y2tldCwgZXRjLikuCisgKgorICogICAgICBUaGF0IGhvd2V2 ZXIgaXMgZGlmZmVyZW50IGZyb20gYnVja2V0cyAnZGVnZW5lcmF0ZWQnIG9u bHkgZm9yCisgKiAgICAgIHNvbWUgZGltZW5zaW9ucyAoZS5nLiBoYWxmIG9m IHRoZW0pLCB3aGljaCBpcyBwZXJmZWN0bHkKKyAqICAgICAgYXBwcm9wcmlh dGUgZm9yIHN0YXRpc3RpY3Mgb24gYSBjb21iaW5hdGlvbiBvZiBsb3cgYW5k IGhpZ2gKKyAqICAgICAgY2FyZGluYWxpdHkgY29sdW1ucy4KKyAqCisgKiBU T0RPIENvbnNpZGVyIHVzaW5nIHNpbWlsYXIgbG93ZXIgYm91bmRhcnkgZm9y IHJvdyBjb3VudCBhcyBmb3Igc2ltcGxlCisgKiAgICAgIGhpc3RvZ3JhbXMs IGkuZS4gMzAwIHR1cGxlcyBwZXIgYnVja2V0LgorICovCitzdGF0aWMgTVZC dWNrZXQKK3NlbGVjdF9idWNrZXRfdG9fcGFydGl0aW9uKGludCBuYnVja2V0 cywgTVZCdWNrZXQgKiBidWNrZXRzKQoreworCWludCBpOworCWludCBudW1y b3dzID0gMDsKKwlNVkJ1Y2tldCBidWNrZXQgPSBOVUxMOworCisJZm9yIChp ID0gMDsgaSA8IG5idWNrZXRzOyBpKyspCisJeworCQlIaXN0b2dyYW1CdWls ZCBkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1Y2tldHNbaV0tPmJ1aWxkX2Rh dGE7CisJCS8qIGlmIHRoZSBudW1iZXIgb2Ygcm93cyBpcyBoaWdoZXIsIHVz ZSB0aGlzIGJ1Y2tldCAqLworCQlpZiAoKGRhdGEtPm5kaXN0aW5jdCA+IDIp ICYmCisJCQkoZGF0YS0+bnVtcm93cyA+IG51bXJvd3MpICYmCisJCQkoZGF0 YS0+bnVtcm93cyA+PSBNSU5fQlVDS0VUX1JPV1MpKSB7CisJCQlidWNrZXQg PSBidWNrZXRzW2ldOworCQkJbnVtcm93cyA9IGRhdGEtPm51bXJvd3M7CisJ CX0KKwl9CisKKwkvKiBtYXkgYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm90IGJ1 Y2tldHMgd2l0aCAobmRpc3RpbmN0PjEpICovCisJcmV0dXJuIGJ1Y2tldDsK K30KKworLyoKKyAqIEEgc2ltcGxlIGJ1Y2tldCBwYXJ0aXRpb25pbmcgaW1w bGVtZW50YXRpb24gLSB3ZSBjaG9vc2UgdGhlIGxvbmdlc3QKKyAqIGJ1Y2tl dCBkaW1lbnNpb24sIG1lYXN1cmVkIHVzaW5nIHRoZSBhcnJheSBvZiBkaXN0 aW5jdCB2YWx1ZXMgYnVpbHQKKyAqIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBv ZiB0aGUgYnVpbGQuCisgKgorICogV2UgbWFwIGFsbCB0aGUgZGlzdGluY3Qg dmFsdWVzIHRvIGEgWzAsMV0gaW50ZXJ2YWwsIHVuaWZvcm1seQorICogZGlz dHJpYnV0ZWQsIGFuZCB0aGVuIHVzZSB0aGlzIHRvIG1lYXN1cmUgbGVuZ3Ro LiBJdCdzIGVzc2VudGlhbGx5CisgKiBhIG51bWJlciBvZiBkaXN0aW5jdCB2 YWx1ZXMgd2l0aGluIHRoZSByYW5nZSwgbm9ybWFsaXplZCB0byBbMCwxXS4K KyAqCisgKiBUaGVuIHdlIGNob29zZSBhICdtaWRkbGUnIHZhbHVlIHNwbGl0 dGluZyB0aGUgYnVja2V0IGludG8gdHdvIHBhcnRzCisgKiB3aXRoIHJvdWdo bHkgdGhlIHNhbWUgZnJlcXVlbmN5LgorICoKKyAqIFRoaXMgc3BsaXRzIHRo ZSBidWNrZXQgYnkgdHdlYWtpbmcgdGhlIGV4aXN0aW5nIG9uZSwgYW5kIHJl dHVybmluZworICogdGhlIG5ldyBidWNrZXQgKGVzc2VudGlhbGx5IHNocmlu a2luZyB0aGUgZXhpc3Rpbmcgb25lIGluLXBsYWNlIGFuZAorICogcmV0dXJu aW5nIHRoZSBvdGhlciAiaGFsZiIgYXMgYSBuZXcgYnVja2V0KS4gVGhlIGNh bGxlciBpcyByZXNwb25zaWJsZQorICogZm9yIGFkZGluZyB0aGUgbmV3IGJ1 Y2tldCBpbnRvIHRoZSBsaXN0IG9mIGJ1Y2tldHMuCisgKgorICogVGhlcmUg YXJlIG11bHRpcGxlIGhpc3RvZ3JhbSBvcHRpb25zLCBjZW50ZXJlZCBhcm91 bmQgdGhlIHBhcnRpdGlvbmluZworICogY3JpdGVyaWEsIHNwZWNpZnlpbmcg Ym90aCBob3cgdG8gY2hvb3NlIGEgYnVja2V0IGFuZCB0aGUgZGltZW5zaW9u CisgKiBtb3N0IGluIG5lZWQgb2YgYSBzcGxpdC4gRm9yIGEgbmljZSBzdW1t YXJ5IGFuZCBnZW5lcmFsIG92ZXJ2aWV3LCBzZWUKKyAqICJySy1IaXN0IDog YW4gUi1UcmVlIGJhc2VkIGhpc3RvZ3JhbSBmb3IgbXVsdGktZGltZW5zaW9u YWwgc2VsZWN0aXZpdHkKKyAqIGVzdGltYXRpb24iIHRoZXNpcyBieSBKLiBB LiBMb3BleiwgQ29uY29yZGlhIFVuaXZlcnNpdHksIHAuMzQtMzcgKGFuZAor ICogcG9zc2libHkgcC4gMzItMzQgZm9yIGV4cGxhbmF0aW9uIG9mIHRoZSB0 ZXJtcykuCisgKgorICogVE9ETyBJdCByZXF1aXJlcyBjYXJlIHRvIHByZXZl bnQgc3BsaXR0aW5nIG9ubHkgb25lIGRpbWVuc2lvbiBhbmQgbm90CisgKiAg ICAgIHNwbGl0dGluZyBhbm90aGVyIG9uZSBhdCBhbGwgKHdoaWNoIG1pZ2h0 IGhhcHBlbiBlYXNpbHkgaW4gY2FzZQorICogICAgICBvZiBzdHJvbmdseSBk ZXBlbmRlbnQgY29sdW1ucyAtIGUuZy4geT14KS4gVGhlIGN1cnJlbnQgYWxn b3JpdGhtCisgKiAgICAgIG1pbmltaXplcyB0aGlzLCBidXQgbWF5IHN0aWxs IGhhcHBlbiBmb3IgcGVyZmVjdGx5IGRlcGVuZGVudAorICogICAgICBleGFt cGxlcyAod2hlbiBhbGwgdGhlIGRpbWVuc2lvbnMgaGF2ZSBlcXVhbCBsZW5n dGgsIHRoZSBmaXJzdAorICogICAgICBvbmUgd2lsbCBiZSBzZWxlY3RlZCku CisgKgorICogVE9ETyBTaG91bGQgcHJvYmFibHkgY29uc2lkZXIgc3RhdGlz dGljcyB0YXJnZXQgZm9yIHRoZSBjb2x1bW5zIChlLmcuCisgKiAgICAgIHRv IHNwbGl0IGRpbWVuc2lvbnMgd2l0aCBoaWdoZXIgc3RhdGlzdGljcyB0YXJn ZXQgbW9yZSBmcmVxdWVudGx5KS4KKyAqLworc3RhdGljIE1WQnVja2V0Citw YXJ0aXRpb25fYnVja2V0KE1WQnVja2V0IGJ1Y2tldCwgaW50MnZlY3RvciAq YXR0cnMsCisJCQkJIFZhY0F0dHJTdGF0cyAqKnN0YXRzLAorCQkJCSBpbnQg Km5kaXN0dmFsdWVzLCBEYXR1bSAqKmRpc3R2YWx1ZXMpCit7CisJaW50IGk7 CisJaW50IGRpbWVuc2lvbjsKKwlpbnQgbnVtYXR0cnMgPSBhdHRycy0+ZGlt MTsKKworCURhdHVtIHNwbGl0X3ZhbHVlOworCU1WQnVja2V0IG5ld19idWNr ZXQ7CisJSGlzdG9ncmFtQnVpbGQgbmV3X2RhdGE7CisKKwkvKiBuZWVkZWQg Zm9yIHNvcnQsIHdoZW4gbG9va2luZyBmb3IgdGhlIHNwbGl0IHZhbHVlICov CisJYm9vbCBpc051bGw7CisJaW50IG52YWx1ZXMgPSAwOworCUhpc3RvZ3Jh bUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpYnVja2V0LT5idWlsZF9k YXRhOworCVN0ZEFuYWx5emVEYXRhICogbXlzdGF0cyA9IE5VTEw7CisJU2Nh bGFySXRlbSAqIHZhbHVlcyA9IChTY2FsYXJJdGVtKilwYWxsb2MwKGRhdGEt Pm51bXJvd3MgKiBzaXplb2YoU2NhbGFySXRlbSkpOworCVNvcnRTdXBwb3J0 RGF0YSBzc3VwOworCisJLyogbG9va2luZyBmb3IgdGhlIHNwbGl0IHZhbHVl ICovCisJLy8gaW50IG5kaXN0aW5jdCA9IDE7CS8qIG51bWJlciBvZiBkaXN0 aW5jdCB2YWx1ZXMgYmVsb3cgY3VycmVudCB2YWx1ZSAqLworCWludCBucm93 cyA9IDE7CQkvKiBudW1iZXIgb2Ygcm93cyBiZWxvdyBjdXJyZW50IHZhbHVl ICovCisJZG91YmxlIGRlbHRhOworCisJLyogbmVlZGVkIHdoZW4gc3BsaXR0 aW5nIHRoZSB2YWx1ZXMgKi8KKwlIZWFwVHVwbGUgKiBvbGRyb3dzID0gZGF0 YS0+cm93czsKKwlpbnQgb2xkbnJvd3MgPSBkYXRhLT5udW1yb3dzOworCisJ LyoKKwkgKiBXZSBjYW4ndCBzcGxpdCBidWNrZXRzIHdpdGggYSBzaW5nbGUg ZGlzdGluY3QgdmFsdWUgKHRoaXMgYWxzbworCSAqIGRpc3F1YWxpZmllcyBO VUxMLW9ubHkgZGltZW5zaW9ucykuIEFsc28sIHRoZXJlIGhhcyB0byBiZSBt dWx0aXBsZQorCSAqIHNhbXBsZSByb3dzIChvdGhlcndpc2UsIGhvdyBjb3Vs ZCB0aGVyZSBiZSBtb3JlIGRpc3RpbmN0IHZhbHVlcykuCisJICovCisJQXNz ZXJ0KGRhdGEtPm5kaXN0aW5jdCA+IDEpOworCUFzc2VydChkYXRhLT5udW1y b3dzID4gMSk7CisJQXNzZXJ0KChudW1hdHRycyA+PSAyKSAmJiAobnVtYXR0 cnMgPD0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykpOworCisJLyoKKwkgKiBM b29rIGZvciB0aGUgbmV4dCBkaW1lbnNpb24gdG8gc3BsaXQuCisJICovCisJ ZGVsdGEgPSAwLjA7CisJZGltZW5zaW9uID0gLTE7CisKKwlmb3IgKGkgPSAw OyBpIDwgbnVtYXR0cnM7IGkrKykKKwl7CisJCURhdHVtICphLCAqYjsKKwor CQlteXN0YXRzID0gKFN0ZEFuYWx5emVEYXRhICopIHN0YXRzW2ldLT5leHRy YV9kYXRhOworCisJCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0LCBldGMu ICovCisJCW1lbXNldCgmc3N1cCwgMCwgc2l6ZW9mKHNzdXApKTsKKwkJc3N1 cC5zc3VwX2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJCS8qIFdl IGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0 aWNzICovCisJCXNzdXAuc3N1cF9jb2xsYXRpb24gPSBERUZBVUxUX0NPTExB VElPTl9PSUQ7CisJCXNzdXAuc3N1cF9udWxsc19maXJzdCA9IGZhbHNlOwor CisJCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMt Pmx0b3ByLCAmc3N1cCk7CisKKwkJLyogY2FuJ3Qgc3BsaXQgTlVMTC1vbmx5 IGRpbWVuc2lvbiAqLworCQlpZiAoYnVja2V0LT5udWxsc29ubHlbaV0pCisJ CQljb250aW51ZTsKKworCQkvKiBjYW4ndCBzcGxpdCBkaW1lbnNpb24gd2l0 aCBhIHNpbmdsZSBuZGlzdGluY3QgdmFsdWUgKi8KKwkJaWYgKGRhdGEtPm5k aXN0aW5jdHNbaV0gPD0gMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNvcnQg c3VwcG9ydCBmb3IgdGhlIGJzZWFyY2hfY29tcGFyYXRvciAqLworCQlzc3Vw X3ByaXZhdGUgPSAmc3N1cDsKKworCQkvKiBzZWFyY2ggZm9yIG1pbiBib3Vu ZGFyeSBpbiB0aGUgZGlzdGluY3QgbGlzdCAqLworCQlhID0gKERhdHVtKili c2VhcmNoKCZidWNrZXQtPm1pbltpXSwKKwkJCQkJCQlkaXN0dmFsdWVzW2ld LCBuZGlzdHZhbHVlc1tpXSwKKwkJCQkJCQlzaXplb2YoRGF0dW0pLCBic2Vh cmNoX2NvbXBhcmF0b3IpOworCisJCWIgPSAoRGF0dW0qKWJzZWFyY2goJmJ1 Y2tldC0+bWF4W2ldLAorCQkJCQkJCWRpc3R2YWx1ZXNbaV0sIG5kaXN0dmFs dWVzW2ldLAorCQkJCQkJCXNpemVvZihEYXR1bSksIGJzZWFyY2hfY29tcGFy YXRvcik7CisKKwkJLyogaWYgdGhpcyBkaW1lbnNpb24gaXMgJ2xhcmdlcicg dGhlbiBwYXJ0aXRpb24gYnkgaXQgKi8KKwkJaWYgKCgoYi1hKSoxLjAgLyBu ZGlzdHZhbHVlc1tpXSkgPiBkZWx0YSkKKwkJeworCQkJZGVsdGEgPSAoKGIt YSkqMS4wIC8gbmRpc3R2YWx1ZXNbaV0pOworCQkJZGltZW5zaW9uID0gaTsK KwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhIGRp bWVuc2lvbiBoZXJlLCB3ZSd2ZSBkb25lIHNvbWV0aGluZworCSAqIHdyb25n IGluIHNlbGVjdF9idWNrZXRfdG9fcGFydGl0aW9uLgorCSAqLworCUFzc2Vy dChkaW1lbnNpb24gIT0gLTEpOworCisJLyoKKwkgKiBXYWxrIHRocm91Z2gg dGhlIHNlbGVjdGVkIGRpbWVuc2lvbiwgY29sbGVjdCBhbmQgc29ydCB0aGUg dmFsdWVzCisJICogYW5kIHRoZW4gY2hvb3NlIHRoZSB2YWx1ZSB0byB1c2Ug YXMgdGhlIG5ldyBib3VuZGFyeS4KKwkgKi8KKwlteXN0YXRzID0gKFN0ZEFu YWx5emVEYXRhICopIHN0YXRzW2RpbWVuc2lvbl0tPmV4dHJhX2RhdGE7CisK KwkvKiBpbml0aWFsaXplIHNvcnQgc3VwcG9ydCwgZXRjLiAqLworCW1lbXNl dCgmc3N1cCwgMCwgc2l6ZW9mKHNzdXApKTsKKwlzc3VwLnNzdXBfY3h0ID0g Q3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkvKiBXZSBhbHdheXMgdXNlIHRo ZSBkZWZhdWx0IGNvbGxhdGlvbiBmb3Igc3RhdGlzdGljcyAqLworCXNzdXAu c3N1cF9jb2xsYXRpb24gPSBERUZBVUxUX0NPTExBVElPTl9PSUQ7CisJc3N1 cC5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7CisKKwlQcmVwYXJlU29ydFN1 cHBvcnRGcm9tT3JkZXJpbmdPcChteXN0YXRzLT5sdG9wciwgJnNzdXApOwor CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bXJvd3M7IGkrKykKKwl7CisJ CS8qIHJlbWVtYmVyIHRoZSBpbmRleCBvZiB0aGUgc2FtcGxlIHJvdywgdG8g bWFrZSB0aGUgcGFydGl0aW9uaW5nIHNpbXBsZXIgKi8KKwkJdmFsdWVzW252 YWx1ZXNdLnZhbHVlID0gaGVhcF9nZXRhdHRyKGRhdGEtPnJvd3NbaV0sIGF0 dHJzLT52YWx1ZXNbZGltZW5zaW9uXSwKKwkJCQkJCQkJCQkJIHN0YXRzW2Rp bWVuc2lvbl0tPnR1cERlc2MsICZpc051bGwpOworCQl2YWx1ZXNbbnZhbHVl c10udHVwbm8gPSBpOworCisJCS8qIG5vIE5VTEwgdmFsdWVzIGFsbG93ZWQg aGVyZSAod2UgZG9uJ3QgZG8gc3BsaXRzIGJ5IG51bGwtb25seSBkaW1lbnNp b25zKSAqLworCQlBc3NlcnQoIWlzTnVsbCk7CisKKwkJbnZhbHVlcysrOwor CX0KKworCS8qIHNvcnQgdGhlIGFycmF5IG9mIHZhbHVlcyAqLworCXFzb3J0 X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52YWx1ZXMsIHNpemVvZihTY2FsYXJJ dGVtKSwKKwkJCSAgY29tcGFyZV9zY2FsYXJzX3BhcnRpdGlvbiwgKHZvaWQg KikgJnNzdXApOworCisJLyoKKwkgKiBXZSBrbm93IHRoZXJlIGFyZSBidWNr ZXQtPm5kaXN0aW5jdHNbZGltZW5zaW9uXSBkaXN0aW5jdCB2YWx1ZXMKKwkg KiBpbiB0aGlzIGRpbWVuc2lvbiwgYW5kIHdlIHdhbnQgdG8gc3BsaXQgdGhp cyBpbnRvIGhhbGYsIHNvIHdhbGsKKwkgKiB0aHJvdWdoIHRoZSBhcnJheSBh bmQgc3RvcCBvbmNlIHdlIHNlZSAobmRpc3RpbmN0LzIpIHZhbHVlcy4KKwkg KgorCSAqIFdlIGFsd2F5cyBjaG9vc2UgdGhlICJuZXh0IiB2YWx1ZSwgaS5l LiAobi8yKzEpLXRoIGRpc3RpbmN0IHZhbHVlLAorCSAqIGFuZCB1c2UgaXQg YXMgYW4gZXhjbHVzaXZlIHVwcGVyIGJvdW5kYXJ5IChhbmQgaW5jbHVzaXZl IGxvd2VyCisJICogYm91bmRhcnkpLgorCSAqCisJICogVE9ETyBNYXliZSB3 ZSBzaG91bGQgdXNlICJhdmVyYWdlIiBvZiB0aGUgdHdvIG1pZGRsZSBkaXN0 aW5jdAorCSAqICAgICAgdmFsdWVzIChhdCBsZWFzdCBmb3IgZXZlbiBkaXN0 aW5jdCBjb3VudHMpLCBidXQgdGhhdCB3b3VsZAorCSAqICAgICAgcmVxdWly ZSBiZWluZyBhYmxlIHRvIGRvIGFuIGF2ZXJhZ2UgKHdoaWNoIGRvZXMgbm90 IHdvcmsKKwkgKiAgICAgIGZvciBub24tYXJpdGhtZXRpYyB0eXBlcykuCisJ ICoKKwkgKiBUT0RPIEFub3RoZXIgb3B0aW9uIGlzIHRvIGxvb2sgZm9yIGEg c3BsaXQgdGhhdCdkIGdpdmUgYWJvdXQKKwkgKiAgICAgIDUwJSB0dXBsZXMg KG5vdCBkaXN0aW5jdCB2YWx1ZXMpIGluIGVhY2ggcGFydGl0aW9uLiBUaGF0 CisJICogICAgICBtaWdodCB3b3JrIGJldHRlciB3aGVuIHRoZXJlIGFyZSBh IGZldyB2ZXJ5IGZyZXF1ZW50CisJICogICAgICB2YWx1ZXMsIGFuZCBtYW55 IHJhcmUgb25lcy4KKwkgKi8KKwlkZWx0YSA9IGZhYnMoZGF0YS0+bnVtcm93 cyk7CisJc3BsaXRfdmFsdWUgPSB2YWx1ZXNbMF0udmFsdWU7CisKKwlmb3Ig KGkgPSAxOyBpIDwgZGF0YS0+bnVtcm93czsgaSsrKQorCXsKKwkJaWYgKHZh bHVlc1tpXS52YWx1ZSAhPSB2YWx1ZXNbaS0xXS52YWx1ZSkKKwkJeworCQkJ LyogYXJlIHdlIGNsb3NlciB0byBzcGxpdHRpbmcgdGhlIGJ1Y2tldCBpbiBo YWxmPyAqLworCQkJaWYgKGZhYnMoaSAtIGRhdGEtPm51bXJvd3MvMi4wKSA8 IGRlbHRhKQorCQkJeworCQkJCS8qIGxldCdzIGFzc3VtZSB3ZSdsbCB1c2Ug dGhpcyB2YWx1ZSBmb3IgdGhlIHNwbGl0ICovCisJCQkJc3BsaXRfdmFsdWUg PSB2YWx1ZXNbaV0udmFsdWU7CisJCQkJZGVsdGEgPSBmYWJzKGkgLSBkYXRh LT5udW1yb3dzLzIuMCk7CisJCQkJbnJvd3MgPSBpOworCQkJfQorCQl9CisJ fQorCisJQXNzZXJ0KG5yb3dzID4gMCk7CisJQXNzZXJ0KG5yb3dzIDwgZGF0 YS0+bnVtcm93cyk7CisKKwkvKiBjcmVhdGUgdGhlIG5ldyBidWNrZXQgYXMg YSAoaW5jb21wbGV0ZSkgY29weSBvZiB0aGUgb25lIGJlaW5nIHBhcnRpdGlv bmVkLiAqLworCW5ld19idWNrZXQgPSBjb3B5X212X2J1Y2tldChidWNrZXQs IG51bWF0dHJzKTsKKwluZXdfZGF0YSA9IChIaXN0b2dyYW1CdWlsZCluZXdf YnVja2V0LT5idWlsZF9kYXRhOworCisJLyoKKwkqIERvIHRoZSBhY3R1YWwg c3BsaXQgb2YgdGhlIGNob3NlbiBkaW1lbnNpb24sIHVzaW5nIHRoZSBzcGxp dCB2YWx1ZSBhcyB0aGUKKwkqIHVwcGVyIGJvdW5kIGZvciB0aGUgZXhpc3Rp bmcgYnVja2V0LCBhbmQgbG93ZXIgYm91bmQgZm9yIHRoZSBuZXcgb25lLgor CSovCisJYnVja2V0LT5tYXhbZGltZW5zaW9uXSAgICAgPSBzcGxpdF92YWx1 ZTsKKwluZXdfYnVja2V0LT5taW5bZGltZW5zaW9uXSA9IHNwbGl0X3ZhbHVl OworCisJYnVja2V0LT5tYXhfaW5jbHVzaXZlW2RpbWVuc2lvbl0JCT0gZmFs c2U7CisJbmV3X2J1Y2tldC0+bWF4X2luY2x1c2l2ZVtkaW1lbnNpb25dCT0g dHJ1ZTsKKworCS8qCisJICogUmVkaXN0cmlidXRlIHRoZSBzYW1wbGUgdHVw bGVzIHVzaW5nIHRoZSAnU2NhbGFySXRlbS0+dHVwbm8nCisJICogaW5kZXgu IFdlIGtub3cgJ25yb3dzJyByb3dzIHNob3VsZCByZW1haW4gaW4gdGhlIG9y aWdpbmFsCisJICogYnVja2V0IGFuZCB0aGUgcmVzdCBnb2VzIHRvIHRoZSBu ZXcgb25lLgorCSAqLworCisJZGF0YS0+cm93cyAgICAgPSAoSGVhcFR1cGxl KilwYWxsb2MwKG5yb3dzICogc2l6ZW9mKEhlYXBUdXBsZSkpOworCW5ld19k YXRhLT5yb3dzID0gKEhlYXBUdXBsZSopcGFsbG9jMCgob2xkbnJvd3MgLSBu cm93cykgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisKKwlkYXRhLT5udW1yb3dz CSA9IG5yb3dzOworCW5ld19kYXRhLT5udW1yb3dzID0gKG9sZG5yb3dzIC0g bnJvd3MpOworCisJLyoKKwkgKiBUaGUgZmlyc3QgbnJvd3Mgc2hvdWxkIGdv IHRvIHRoZSBmaXJzdCBidWNrZXQsIHRoZSByZXN0IHNob3VsZAorCSAqIGdv IHRvIHRoZSBuZXcgb25lLiBVc2UgdGhlIHR1cG5vIGZpZWxkIHRvIGdldCB0 aGUgYWN0dWFsIEhlYXBUdXBsZQorCSAqIHJvdyBmcm9tIHRoZSBvcmlnaW5h bCBhcnJheSBvZiBzYW1wbGUgcm93cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbnJvd3M7IGkrKykKKwkJbWVtY3B5KCZkYXRhLT5yb3dzW2ldLCAmb2xk cm93c1t2YWx1ZXNbaV0udHVwbm9dLCBzaXplb2YoSGVhcFR1cGxlKSk7CisK Kwlmb3IgKGkgPSBucm93czsgaSA8IG9sZG5yb3dzOyBpKyspCisJCW1lbWNw eSgmbmV3X2RhdGEtPnJvd3NbaS1ucm93c10sICZvbGRyb3dzW3ZhbHVlc1tp XS50dXBub10sIHNpemVvZihIZWFwVHVwbGUpKTsKKworCS8qIHVwZGF0ZSBu ZGlzdGluY3QgdmFsdWVzIGZvciB0aGUgYnVja2V0cyAodG90YWwgYW5kIHBl ciBkaW1lbnNpb24pICovCisJdXBkYXRlX2J1Y2tldF9uZGlzdGluY3QoYnVj a2V0LCBhdHRycywgc3RhdHMpOworCXVwZGF0ZV9idWNrZXRfbmRpc3RpbmN0 KG5ld19idWNrZXQsIGF0dHJzLCBzdGF0cyk7CisKKwkvKgorCSAqIFRPRE8g V2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzIGZvciB0aGUgZGltZW5zaW9uIHdl IHVzZWQgZm9yIHNwbGl0LAorCSAqICAgICAgYmVjYXVzZSB3ZSBrbm93IGhv dyBtYW55IGRpc3RpbmN0IHZhbHVlcyB3ZW50IHRvIGVhY2ggcGFydGl0aW9u LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsK KwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QoYnVja2V0LCBpLCBhdHRy cywgc3RhdHMsIGZhbHNlKTsKKwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGlu Y3QobmV3X2J1Y2tldCwgaSwgYXR0cnMsIHN0YXRzLCBmYWxzZSk7CisJfQor CisJcGZyZWUob2xkcm93cyk7CisJcGZyZWUodmFsdWVzKTsKKworCXJldHVy biBuZXdfYnVja2V0OworfQorCisvKgorICogQ29weSBhIGhpc3RvZ3JhbSBi dWNrZXQuIFRoZSBjb3B5IGRvZXMgbm90IGluY2x1ZGUgdGhlIGJ1aWxkLXRp bWUKKyAqIGRhdGEsIGkuZS4gc2FtcGxlZCByb3dzIGV0Yy4KKyAqLworc3Rh dGljIE1WQnVja2V0Citjb3B5X212X2J1Y2tldChNVkJ1Y2tldCBidWNrZXQs IHVpbnQzMiBuZGltZW5zaW9ucykKK3sKKwkvKiBUT0RPIGFsbG9jYXRlIGFz IGEgc2luZ2xlIHBpZWNlIChpbmNsdWRpbmcgYWxsIHRoZSBmaWVsZHMpICov CisJTVZCdWNrZXQgbmV3X2J1Y2tldCA9IChNVkJ1Y2tldClwYWxsb2MwKHNp emVvZihNVkJ1Y2tldERhdGEpKTsKKwlIaXN0b2dyYW1CdWlsZCBkYXRhID0g KEhpc3RvZ3JhbUJ1aWxkKXBhbGxvYzAoc2l6ZW9mKEhpc3RvZ3JhbUJ1aWxk RGF0YSkpOworCisJLyogQ29weSBvbmx5IHRoZSBhdHRyaWJ1dGVzIHRoYXQg d2lsbCBzdGF5IHRoZSBzYW1lIGFmdGVyIHRoZSBzcGxpdCwgYW5kCisJICog d2UnbGwgcmVjb21wdXRlIHRoZSByZXN0IGFmdGVyIHRoZSBzcGxpdC4gKi8K KworCS8qIGFsbG9jYXRlIHRoZSBwZXItZGltZW5zaW9uIGFycmF5cyAqLwor CW5ld19idWNrZXQtPm51bGxzb25seSA9IChib29sKilwYWxsb2MwKG5kaW1l bnNpb25zICogc2l6ZW9mKGJvb2wpKTsKKworCS8qIGluY2x1c2l2ZW5lc3Mg Ym91bmRhcmllcyAtIGxvd2VyL3VwcGVyIGJvdW5kcyAqLworCW5ld19idWNr ZXQtPm1pbl9pbmNsdXNpdmUgPSAoYm9vbCopcGFsbG9jMChuZGltZW5zaW9u cyAqIHNpemVvZihib29sKSk7CisJbmV3X2J1Y2tldC0+bWF4X2luY2x1c2l2 ZSA9IChib29sKilwYWxsb2MwKG5kaW1lbnNpb25zICogc2l6ZW9mKGJvb2wp KTsKKworCS8qIGxvd2VyL3VwcGVyIGJvdW5kYXJpZXMgKi8KKwluZXdfYnVj a2V0LT5taW4gPSAoRGF0dW0qKXBhbGxvYzAobmRpbWVuc2lvbnMgKiBzaXpl b2YoRGF0dW0pKTsKKwluZXdfYnVja2V0LT5tYXggPSAoRGF0dW0qKXBhbGxv YzAobmRpbWVuc2lvbnMgKiBzaXplb2YoRGF0dW0pKTsKKworCS8qIGNvcHkg ZGF0YSAqLworCW1lbWNweShuZXdfYnVja2V0LT5udWxsc29ubHksIGJ1Y2tl dC0+bnVsbHNvbmx5LCBuZGltZW5zaW9ucyAqIHNpemVvZihib29sKSk7CisK KwltZW1jcHkobmV3X2J1Y2tldC0+bWluX2luY2x1c2l2ZSwgYnVja2V0LT5t aW5faW5jbHVzaXZlLCBuZGltZW5zaW9ucypzaXplb2YoYm9vbCkpOworCW1l bWNweShuZXdfYnVja2V0LT5taW4sIGJ1Y2tldC0+bWluLCBuZGltZW5zaW9u cypzaXplb2YoRGF0dW0pKTsKKworCW1lbWNweShuZXdfYnVja2V0LT5tYXhf aW5jbHVzaXZlLCBidWNrZXQtPm1heF9pbmNsdXNpdmUsIG5kaW1lbnNpb25z KnNpemVvZihib29sKSk7CisJbWVtY3B5KG5ld19idWNrZXQtPm1heCwgYnVj a2V0LT5tYXgsIG5kaW1lbnNpb25zKnNpemVvZihEYXR1bSkpOworCisJLyog YWxsb2NhdGUgYW5kIGNvcHkgdGhlIGludGVyZXN0aW5nIHBhcnQgb2YgdGhl IGJ1aWxkIGRhdGEgKi8KKwlkYXRhLT5uZGlzdGluY3RzID0gKHVpbnQzMiop cGFsbG9jMChuZGltZW5zaW9ucyAqIHNpemVvZih1aW50MzIpKTsKKworCW5l d19idWNrZXQtPmJ1aWxkX2RhdGEgPSBkYXRhOworCisJcmV0dXJuIG5ld19i dWNrZXQ7Cit9CisKKy8qCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBkaXN0 aW5jdCB2YWx1ZXMgaW4gdGhlIGJ1Y2tldC4gVGhpcyBqdXN0IGNvcGllcwor ICogdGhlIERhdHVtIHZhbHVlcyBpbnRvIGEgc2ltcGxlIGFycmF5LCBhbmQg c29ydHMgdGhlbSB1c2luZyBtZW1jbXAtYmFzZWQKKyAqIGNvbXBhcmF0b3Iu IFRoYXQgbWVhbnMgaXQgb25seSB3b3JrcyBmb3IgcGFzcy1ieS12YWx1ZSBk YXRhIHR5cGVzCisgKiAoYXNzdW1pbmcgdGhleSBkb24ndCB1c2UgY29sbGF0 aW9ucyBldGMuKQorICoKKyAqIFRPRE8gVGhpcyBtaWdodCBldmFsdWF0ZSBh bmQgc3RvcmUgdGhlIGRpc3RpbmN0IGNvdW50cyBmb3IgYWxsCisgKiAgICAg IHBvc3NpYmxlIGF0dHJpYnV0ZSBjb21iaW5hdGlvbnMuIFRoZSBhc3N1bXB0 aW9uIGlzIHRoaXMgbWlnaHQgYmUKKyAqICAgICAgdXNlZnVsIGZvciBlc3Rp bWF0aW5nIHRoaW5ncyBsaWtlIEdST1VQIEJZIGNhcmRpbmFsaXRpZXMgKGUu Zy4KKyAqICAgICAgaW4gY2FzZXMgd2hlbiBzb21lIGJ1Y2tldHMgY29udGFp biBhIGxvdCBvZiBsb3ctZnJlcXVlbmN5CisgKiAgICAgIGNvbWJpbmF0aW9u cywgYW5kIG90aGVyIGJ1Y2tldHMgY29udGFpbiBmZXcgaGlnaC1mcmVxdWVu Y3kgb25lcykuCisgKgorICogICAgICBCdXQgaXQncyB1bmNsZWFyIHdoZXRo ZXIgaXQncyB3b3J0aCB0aGUgcHJpY2UuIENvbXB1dGluZyB0aGlzCisgKiAg ICAgIGlzIGFjdHVhbGx5IHF1aXRlIGNoZWFwLCBiZWNhdXNlIGl0IG1heSBi ZSBldmFsdWF0ZWQgYXQgdGhlIHZlcnkKKyAqICAgICAgZW5kLCB3aGVuIHRo ZSBidWNrZXRzIGFyZSByYXRoZXIgc21hbGwgKHNvIHNvcnRpbmcgaXQgaW4g Ml5OIHdheXMKKyAqICAgICAgaXMgbm90IGEgYmlnIGRlYWwpLiBBc3N1bWlu ZyB0aGUgcGFydGl0aW9uaW5nIGFsZ29yaXRobSBkb2VzIG5vdAorICogICAg ICB1c2UgdGhlc2UgdmFsdWVzIHRvIGRvIHRoZSBkZWNpc2lvbnMsIG9mIGNv dXJzZSAodGhlIGN1cnJlbnQKKyAqICAgICAgYWxnb3JpdGhtIGRvZXMgbm90 KS4KKyAqCisgKiAgICAgIFRoZSBvdmVyaGVhZCB3aXRoIHN0b3JpbmcsIGZl dGNoaW5nIGFuZCBwYXJzaW5nIHRoZSBkYXRhIGlzIG1vcmUKKyAqICAgICAg Y29uY2VybmluZyAtIGFkZGluZyAyXk4gdmFsdWVzIHBlciBidWNrZXQgKGV2 ZW4gaWYgaXQncyBqdXN0CisgKiAgICAgIGEgMUIgb3IgMkIgdmFsdWUpIHdv dWxkIHNpZ25pZmljYW50bHkgYmxvYXQgdGhlIGhpc3RvZ3JhbSwgYW5kCisg KiAgICAgIHRodXMgdGhlIGltcGFjdCBvbiBvcHRpbWl6ZXIuIFdoaWNoIGlz IG5vdCByZWFsbHkgZGVzaXJhYmxlLgorICoKKyAqIFRPRE8gVGhpcyBvbmx5 IHVwZGF0ZXMgdGhlIG5kaXN0aW5jdCBmb3IgdGhlIHNhbXBsZSAob3IgYnVj a2V0KSwgYnV0CisgKiAgICAgIHdlIGV2ZW50dWFsbHkgbmVlZCBhbiBlc3Rp bWF0ZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGRpc3RpbmN0CisgKiAgICAg IHZhbHVlcyBpbiB0aGUgZGF0YXNldC4gSXQncyBwb3NzaWJsZSB0byBlaXRo ZXIgdXNlIHRoZSBjdXJyZW50CisgKiAgICAgIDFEIGFwcHJvYWNoIChpLmUu LCBpZiBpdCdzIG1vcmUgdGhhbiAxMCUgb2YgdGhlIHNhbXBsZSwgYXNzdW1l CisgKiAgICAgIGl0J3MgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Yg cm93cykuIE9yIGl0J3MgcG9zc2libGUgdG8KKyAqICAgICAgaW1wbGVtZW50 IHRoZSBlc3RpbWF0b3Igc3VnZ2VzdGVkIGluIHRoZSBhcnRpY2xlLCBzdXBw b3NlZGx5CisgKiAgICAgIGdpdmluZyAnb3B0aW1hbCcgZXN0aW1hdGVzICh3 LnIudC4gcHJvYmFiaWxpdHkgb2YgZXJyb3IpLgorICovCitzdGF0aWMgdm9p ZAordXBkYXRlX2J1Y2tldF9uZGlzdGluY3QoTVZCdWNrZXQgYnVja2V0LCBp bnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqIHN0YXRzKQorewor CWludCBpLCBqOworCWludCBudW1hdHRycyA9IGF0dHJzLT5kaW0xOworCisJ SGlzdG9ncmFtQnVpbGQgZGF0YSA9IChIaXN0b2dyYW1CdWlsZClidWNrZXQt PmJ1aWxkX2RhdGE7CisJaW50IG51bXJvd3MgPSBkYXRhLT5udW1yb3dzOwor CisJTXVsdGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0aV9zb3J0X2luaXQobnVt YXR0cnMpOworCisJLyoKKwkgKiBXZSBjb3VsZCBjb2xsZWN0IHRoaXMgd2hp bGUgd2Fsa2luZyB0aHJvdWdoIGFsbCB0aGUgYXR0cmlidXRlcworCSAqIGFi b3ZlICh0aGlzIHdheSB3ZSBoYXZlIHRvIGNhbGwgaGVhcF9nZXRhdHRyIHR3 aWNlKS4KKwkgKi8KKwlTb3J0SXRlbSAgICppdGVtcyAgPSAoU29ydEl0ZW0q KXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihTb3J0SXRlbSkpOworCURhdHVt CSAgICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAobnVtcm93cyAqIHNpemVv ZihEYXR1bSkgKiBudW1hdHRycyk7CisJYm9vbAkgICAqaXNudWxsID0gKGJv b2wqKXBhbGxvYzAobnVtcm93cyAqIHNpemVvZihib29sKSAqIG51bWF0dHJz KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJeworCQlp dGVtc1tpXS52YWx1ZXMgPSAmdmFsdWVzW2kgKiBudW1hdHRyc107CisJCWl0 ZW1zW2ldLmlzbnVsbCA9ICZpc251bGxbaSAqIG51bWF0dHJzXTsKKwl9CisK KwkvKiBwcmVwYXJlIHRoZSBzb3J0IGZ1bmN0aW9uIGZvciB0aGUgZmlyc3Qg ZGltZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKysp CisJCW11bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihtc3MsIGksIGksIHN0YXRz KTsKKworCS8qIGNvbGxlY3QgdGhlIHZhbHVlcyAqLworCWZvciAoaSA9IDA7 IGkgPCBudW1yb3dzOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBudW1hdHRy czsgaisrKQorCQkJaXRlbXNbaV0udmFsdWVzW2pdCisJCQkJPSBoZWFwX2dl dGF0dHIoZGF0YS0+cm93c1tpXSwgYXR0cnMtPnZhbHVlc1tqXSwKKwkJCQkJ CQkJc3RhdHNbal0tPnR1cERlc2MsICZpdGVtc1tpXS5pc251bGxbal0pOwor CisJcXNvcnRfYXJnKCh2b2lkICopIGl0ZW1zLCBudW1yb3dzLCBzaXplb2Yo U29ydEl0ZW0pLAorCQkJICBtdWx0aV9zb3J0X2NvbXBhcmUsIG1zcyk7CisK KwlkYXRhLT5uZGlzdGluY3QgPSAxOworCisJZm9yIChpID0gMTsgaSA8IG51 bXJvd3M7IGkrKykKKwkJaWYgKG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNb aV0sICZpdGVtc1tpLTFdLCBtc3MpICE9IDApCisJCQlkYXRhLT5uZGlzdGlu Y3QgKz0gMTsKKworCXBmcmVlKGl0ZW1zKTsKKwlwZnJlZSh2YWx1ZXMpOwor CXBmcmVlKGlzbnVsbCk7Cit9CisKKy8qCisgKiBDb3VudCBkaXN0aW5jdCB2 YWx1ZXMgcGVyIGJ1Y2tldCBkaW1lbnNpb24uCisgKi8KK3N0YXRpYyB2b2lk Cit1cGRhdGVfZGltZW5zaW9uX25kaXN0aW5jdChNVkJ1Y2tldCBidWNrZXQs IGludCBkaW1lbnNpb24sIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJICAg VmFjQXR0clN0YXRzICoqIHN0YXRzLCBib29sIHVwZGF0ZV9ib3VuZGFyaWVz KQoreworCWludCBqOworCWludCBudmFsdWVzID0gMDsKKwlib29sIGlzTnVs bDsKKwlIaXN0b2dyYW1CdWlsZCBkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1 Y2tldC0+YnVpbGRfZGF0YTsKKwlEYXR1bSAqIHZhbHVlcyA9IChEYXR1bSop cGFsbG9jMChkYXRhLT5udW1yb3dzICogc2l6ZW9mKERhdHVtKSk7CisJU29y dFN1cHBvcnREYXRhIHNzdXA7CisKKwlTdGRBbmFseXplRGF0YSAqIG15c3Rh dHMgPSAoU3RkQW5hbHl6ZURhdGEgKikgc3RhdHNbZGltZW5zaW9uXS0+ZXh0 cmFfZGF0YTsKKworCS8qIHdlIG1heSBhbHJlYWR5IGtub3cgdGhpcyBpcyBh IE5VTEwtb25seSBkaW1lbnNpb24gKi8KKwlpZiAoYnVja2V0LT5udWxsc29u bHlbZGltZW5zaW9uXSkKKwkJZGF0YS0+bmRpc3RpbmN0c1tkaW1lbnNpb25d ID0gMTsKKworCW1lbXNldCgmc3N1cCwgMCwgc2l6ZW9mKHNzdXApKTsKKwlz c3VwLnNzdXBfY3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkvKiBX ZSBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IGNvbGxhdGlvbiBmb3Igc3RhdGlz dGljcyAqLworCXNzdXAuc3N1cF9jb2xsYXRpb24gPSBERUZBVUxUX0NPTExB VElPTl9PSUQ7CisJc3N1cC5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7CisK KwlQcmVwYXJlU29ydFN1cHBvcnRGcm9tT3JkZXJpbmdPcChteXN0YXRzLT5s dG9wciwgJnNzdXApOworCisJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXJv d3M7IGorKykKKwl7CisJCXZhbHVlc1tudmFsdWVzXSA9IGhlYXBfZ2V0YXR0 cihkYXRhLT5yb3dzW2pdLCBhdHRycy0+dmFsdWVzW2RpbWVuc2lvbl0sCisJ CQkJCQkJCQkgICBzdGF0c1tkaW1lbnNpb25dLT50dXBEZXNjLCAmaXNOdWxs KTsKKworCQkvKiBpZ25vcmUgTlVMTCB2YWx1ZXMgKi8KKwkJaWYgKCEgaXNO dWxsKQorCQkJbnZhbHVlcysrOworCX0KKworCS8qIHRoZXJlJ3MgYWx3YXlz IGF0IGxlYXN0IDEgZGlzdGluY3QgdmFsdWUgKG1heSBiZSBOVUxMKSAqLwor CWRhdGEtPm5kaXN0aW5jdHNbZGltZW5zaW9uXSA9IDE7CisKKwkvKiBpZiB0 aGVyZSBhcmUgb25seSBOVUxMIHZhbHVlcyBpbiB0aGUgY29sdW1uLCBtYXJr IGl0IHNvIGFuZCBjb250aW51ZQorCSAqIHdpdGggdGhlIG5leHQgb25lICov CisJaWYgKG52YWx1ZXMgPT0gMCkKKwl7CisJCXBmcmVlKHZhbHVlcyk7CisJ CWJ1Y2tldC0+bnVsbHNvbmx5W2RpbWVuc2lvbl0gPSB0cnVlOworCQlyZXR1 cm47CisJfQorCisJLyogc29ydCB0aGUgYXJyYXkgKHBhc3MtYnktdmFsdWUg ZGF0dW0gKi8KKwlxc29ydF9hcmcoKHZvaWQgKikgdmFsdWVzLCBudmFsdWVz LCBzaXplb2YoRGF0dW0pLAorCQkJICBjb21wYXJlX3NjYWxhcnNfc2ltcGxl LCAodm9pZCAqKSAmc3N1cCk7CisKKwkvKgorCSAqIFVwZGF0ZSBtaW4vbWF4 IGJvdW5kYXJpZXMgdG8gdGhlIHNtYWxsZXN0IGJvdW5kaW5nIGJveC4gR2Vu ZXJhbGx5LCB0aGlzCisJICogbmVlZHMgdG8gYmUgZG9uZSBvbmx5IHdoZW4g Y29uc3RydWN0aW5nIHRoZSBpbml0aWFsIGJ1Y2tldC4KKwkgKi8KKwlpZiAo dXBkYXRlX2JvdW5kYXJpZXMpCisJeworCQkvKiBzdG9yZSB0aGUgbWluL21h eCB2YWx1ZXMgKi8KKwkJYnVja2V0LT5taW5bZGltZW5zaW9uXSA9IHZhbHVl c1swXTsKKwkJYnVja2V0LT5taW5faW5jbHVzaXZlW2RpbWVuc2lvbl0gPSB0 cnVlOworCisJCWJ1Y2tldC0+bWF4W2RpbWVuc2lvbl0gPSB2YWx1ZXNbbnZh bHVlcy0xXTsKKwkJYnVja2V0LT5tYXhfaW5jbHVzaXZlW2RpbWVuc2lvbl0g PSB0cnVlOworCX0KKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSBhcnJh eSBhbmQgY291bnQgZGlzdGluY3QgdmFsdWVzIGJ5IGNvbXBhcmluZworCSAq IHN1Y2NlZWRpbmcgdmFsdWVzLgorCSAqCisJICogRklYTUUgVGhpcyBvbmx5 IHdvcmtzIGZvciBwYXNzLWJ5LXZhbHVlIHR5cGVzIChpLmUuIG5vdCBWQVJD SEFScworCSAqICAgICAgIGV0Yy4pLiBBbHRob3VnaCB0aGFua3MgdG8gdGhl IGRlZHVwbGljYXRpb24gaXQgbWlnaHQgd29yaworCSAqICAgICAgIGV2ZW4g Zm9yIHRob3NlIHR5cGVzIChlcXVhbCB2YWx1ZXMgd2lsbCBnZXQgdGhlIHNh bWUgaXRlbQorCSAqICAgICAgIGluIHRoZSBkZWR1cGxpY2F0ZWQgYXJyYXkp LgorCSAqLworCWZvciAoaiA9IDE7IGogPCBudmFsdWVzOyBqKyspIHsKKwkJ aWYgKHZhbHVlc1tqXSAhPSB2YWx1ZXNbai0xXSkKKwkJCWRhdGEtPm5kaXN0 aW5jdHNbZGltZW5zaW9uXSArPSAxOworCX0KKworCXBmcmVlKHZhbHVlcyk7 Cit9CisKKy8qCisgKiBBIHByb3Blcmx5IGJ1aWx0IGhpc3RvZ3JhbSBtdXN0 IG5vdCBjb250YWluIGJ1Y2tldHMgbWl4aW5nIE5VTEwgYW5kCisgKiBub24t TlVMTCB2YWx1ZXMgaW4gYSBzaW5nbGUgZGltZW5zaW9uLiBFYWNoIGRpbWVu c2lvbiBtYXkgZWl0aGVyIGJlCisgKiBtYXJrZWQgYXMgJ251bGxzIG9ubHkn LCBhbmQgdGh1cyBjb250YWluaW5nIG9ubHkgTlVMTCB2YWx1ZXMsIG9yCisg KiBpdCBtdXN0IG5vdCBjb250YWluIGFueSBOVUxMIHZhbHVlcy4KKyAqCisg KiBUaGVyZWZvcmUsIGlmIHRoZSBzYW1wbGUgY29udGFpbnMgTlVMTCB2YWx1 ZXMgaW4gYW55IG9mIHRoZSBjb2x1bW5zLAorICogaXQncyBuZWNlc3Nhcnkg dG8gYnVpbGQgdGhvc2UgTlVMTC1idWNrZXRzLiBUaGlzIGlzIGRvbmUgaW4g YW4KKyAqIGl0ZXJhdGl2ZSB3YXkgdXNpbmcgdGhpcyBhbGdvcml0aG0sIG9w ZXJhdGluZyBvbiBhIHNpbmdsZSBidWNrZXQ6CisgKgorICogICAgICgxKSBD aGVjayB0aGF0IGFsbCBkaW1lbnNpb25zIGFyZSB3ZWxsLWZvcm1lZCAobm90 IG1peGluZyBOVUxMCisgKiAgICAgICAgIGFuZCBub24tTlVMTCB2YWx1ZXMp LgorICoKKyAqICAgICAoMikgSWYgYWxsIGRpbWVuc2lvbnMgYXJlIHdlbGwt Zm9ybWVkLCB0ZXJtaW5hdGUuCisgKgorICogICAgICgzKSBJZiB0aGUgZGlt ZW5zaW9uIGNvbnRhaW5zIG9ubHkgTlVMTCB2YWx1ZXMsIGJ1dCBpcyBub3QK KyAqICAgICAgICAgbWFya2VkIGFzIE5VTEwtb25seSwgbWFyayBpdCBhcyBO VUxMLW9ubHkgYW5kIHJ1biB0aGUKKyAqICAgICAgICAgYWxnb3JpdGhtIGFn YWluIChvbiB0aGlzIGJ1Y2tldCkuCisgKgorICogICAgICg0KSBJZiB0aGUg ZGltZW5zaW9uIG1peGVzIE5VTEwgYW5kIG5vbi1OVUxMIHZhbHVlcywgc3Bs aXQgdGhlCisgKiAgICAgICAgIGJ1Y2tldCBpbnRvIHR3byBwYXJ0cyAtIG9u ZSB3aXRoIE5VTEwgdmFsdWVzLCBvbmUgd2l0aAorICogICAgICAgICBub24t TlVMTCB2YWx1ZXMgKHJlcGxhY2luZyB0aGUgY3VycmVudCBvbmUpLiBUaGVu IHJ1bgorICogICAgICAgICB0aGUgYWxnb3JpdGhtIG9uIGJvdGggYnVja2V0 cy4KKyAqCisgKiBUaGlzIGlzIGV4ZWN1dGVkIGluIGEgcmVjdXJzaXZlIG1h bm5lciwgYnV0IHRoZSBudW1iZXIgb2YgZXhlY3V0aW9ucworICogc2hvdWxk IGJlIHF1aXRlIGxvdyAtIGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZiBOVUxM LWJ1Y2tldHMuIEFsc28sCisgKiBpbiBlYWNoIGJyYW5jaCB0aGUgbnVtYmVy IG9mIG5lc3RlZCBjYWxscyBpcyBsaW1pdGVkIGJ5IHRoZSBudW1iZXIKKyAq IG9mIGRpbWVuc2lvbnMgKGF0dHJpYnV0ZXMpIG9mIHRoZSBoaXN0b2dyYW0u CisgKgorICogQXQgdGhlIGVuZCwgdGhlcmUgc2hvdWxkIGJlIGJ1Y2tldHMg d2l0aCBubyBtaXhlZCBkaW1lbnNpb25zLiBUaGUKKyAqIG51bWJlciBvZiBi dWNrZXRzIHByb2R1Y2VkIGJ5IHRoaXMgYWxnb3JpdGhtIGlzIHJhdGhlciBs aW1pdGVkIC0gd2l0aAorICogTiBkaW1lbnNpb25zLCB0aGVyZSBtYXkgYmUg b25seSAyXk4gc3VjaCBidWNrZXRzIChlYWNoIGRpbWVuc2lvbiBtYXkKKyAq IGJlIGVpdGhlciBOVUxMIG9yIG5vbi1OVUxMKS4gU28gd2l0aCA4IGRpbWVu c2lvbnMgKGN1cnJlbnQgdmFsdWUgb2YKKyAqIE1WU1RBVFNfTUFYX0RJTUVO U0lPTlMpIHRoZXJlIG1heSBiZSBvbmx5IDI1NiBzdWNoIGJ1Y2tldHMuCisg KgorICogQWZ0ZXIgdGhpcywgYSAncmVndWxhcicgYnVja2V0LXNwbGl0IGFs Z29yaXRobSBzaGFsbCBydW4sIGZ1cnRoZXIKKyAqIG9wdGltaXppbmcgdGhl IGhpc3RvZ3JhbS4KKyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9udWxsX2J1 Y2tldHMoTVZIaXN0b2dyYW0gaGlzdG9ncmFtLCBpbnQgYnVja2V0X2lkeCwK KwkJCQkJaW50MnZlY3RvciAqYXR0cnMsIFZhY0F0dHJTdGF0cyAqKiBzdGF0 cykKK3sKKwlpbnQJCQlpLCBqOworCWludAkJCW51bGxfZGltID0gLTE7CisJ aW50CQkJbnVsbF9jb3VudCA9IDA7CisJYm9vbAkJbnVsbF9mb3VuZCA9IGZh bHNlOworCU1WQnVja2V0CWJ1Y2tldCwgbnVsbF9idWNrZXQ7CisJaW50CQkJ bnVsbF9pZHgsIGN1cnJfaWR4OworCUhpc3RvZ3JhbUJ1aWxkCWRhdGEsIG51 bGxfZGF0YTsKKworCS8qIHJlbWVtYmVyIG9yaWdpbmFsIHZhbHVlcyBmcm9t IHRoZSBidWNrZXQgKi8KKwlpbnQJCQludW1yb3dzOworCUhlYXBUdXBsZSAg Km9sZHJvd3MgPSBOVUxMOworCisJQXNzZXJ0KGJ1Y2tldF9pZHggPCBoaXN0 b2dyYW0tPm5idWNrZXRzKTsKKwlBc3NlcnQoaGlzdG9ncmFtLT5uZGltZW5z aW9ucyA9PSBhdHRycy0+ZGltMSk7CisKKwlidWNrZXQgPSBoaXN0b2dyYW0t PmJ1Y2tldHNbYnVja2V0X2lkeF07CisJZGF0YSA9IChIaXN0b2dyYW1CdWls ZClidWNrZXQtPmJ1aWxkX2RhdGE7CisKKwludW1yb3dzID0gZGF0YS0+bnVt cm93czsKKwlvbGRyb3dzID0gZGF0YS0+cm93czsKKworCS8qCisJICogV2Fs ayB0aHJvdWdoIGFsbCByb3dzIC8gZGltZW5zaW9ucywgYW5kIHN0b3Agb25j ZSB3ZSBmaW5kIE5VTEwKKwkgKiBpbiBhIGRpbWVuc2lvbiBub3QgeWV0IG1h cmtlZCBhcyBOVUxMLW9ubHkuCisJICovCisJZm9yIChpID0gMDsgaSA8IGRh dGEtPm51bXJvd3M7IGkrKykKKwl7CisJCS8qCisJCSAqIEZJWE1FIFdlIGRv bid0IG5lZWQgdG8gc3RhcnQgZnJvbSB0aGUgZmlyc3QgYXR0cmlidXRlCisJ CSAqICAgICAgIGhlcmUgLSB3ZSBjYW4gc3RhcnQgZnJvbSB0aGUgbGFzdCBr bm93biBkaW1lbnNpb24uCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgaGlz dG9ncmFtLT5uZGltZW5zaW9uczsgaisrKQorCQl7CisJCQkvKiBJcyB0aGlz IGEgTlVMTC1vbmx5IGRpbWVuc2lvbj8gSWYgeWVzLCBza2lwLiAqLworCQkJ aWYgKGJ1Y2tldC0+bnVsbHNvbmx5W2pdKQorCQkJCWNvbnRpbnVlOworCisJ CQkvKiBmb3VuZCBhIE5VTEwgaW4gdGhhdCBkaW1lbnNpb24/ICovCisJCQlp ZiAoaGVhcF9hdHRpc251bGwoZGF0YS0+cm93c1tpXSwgYXR0cnMtPnZhbHVl c1tqXSkpCisJCQl7CisJCQkJbnVsbF9mb3VuZCA9IHRydWU7CisJCQkJbnVs bF9kaW0gPSBqOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogdGVy bWluYXRlIGlmIHdlIGZvdW5kIGF0dHJpYnV0ZSB3aXRoIE5VTEwgdmFsdWVz ICovCisJCWlmIChudWxsX2ZvdW5kKQorCQkJYnJlYWs7CisJfQorCisJLyog bm8gcmVndWxhciBkaW1lbnNpb24gY29udGFpbnMgTlVMTCB2YWx1ZXMgPT4g d2UncmUgZG9uZSAqLworCWlmICghIG51bGxfZm91bmQpCisJCXJldHVybjsK KworCS8qIHdhbGsgdGhyb3VnaCB0aGUgcm93cyBhZ2FpbiwgY291bnQgTlVM TCB2YWx1ZXMgaW4gJ251bGxfZGltJyAqLworCWZvciAoaSA9IDA7IGkgPCBk YXRhLT5udW1yb3dzOyBpKyspCisJeworCQlpZiAoaGVhcF9hdHRpc251bGwo ZGF0YS0+cm93c1tpXSwgYXR0cnMtPnZhbHVlc1tudWxsX2RpbV0pKQorCQkJ bnVsbF9jb3VudCArPSAxOworCX0KKworCUFzc2VydChudWxsX2NvdW50IDw9 IGRhdGEtPm51bXJvd3MpOworCisJLyoKKwkgKiBJZiAobnVsbF9jb3VudCA9 PSBudW1yb3dzKSB0aGUgZGltZW5zaW9uIGFscmVhZHkgaXMgTlVMTC1vbmx5 LAorCSAqIGJ1dCBpcyBub3QgeWV0IG1hcmtlZCBsaWtlIHRoYXQuIEl0J3Mg ZW5vdWdoIHRvIG1hcmsgaXQgYW5kCisJICogcmVwZWF0IHRoZSBwcm9jZXNz IHJlY3Vyc2l2ZWx5ICh1bnRpbCB3ZSBydW4gb3V0IG9mIGRpbWVuc2lvbnMp LgorCSAqLworCWlmIChudWxsX2NvdW50ID09IGRhdGEtPm51bXJvd3MpCisJ eworCQlidWNrZXQtPm51bGxzb25seVtudWxsX2RpbV0gPSB0cnVlOworCQlj cmVhdGVfbnVsbF9idWNrZXRzKGhpc3RvZ3JhbSwgYnVja2V0X2lkeCwgYXR0 cnMsIHN0YXRzKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UgaGF2 ZSB0byBzcGxpdCB0aGUgYnVja2V0IGludG8gdHdvIC0gb25lIHdpdGggTlVM TCB2YWx1ZXMgaW4KKwkgKiB0aGUgZGltZW5zaW9uLCBvbmUgd2l0aCBub24t TlVMTCB2YWx1ZXMuIFdlIGRvbid0IG5lZWQgdG8gc29ydAorCSAqIHRoZSBk YXRhIG9yIGFueXRoaW5nLCBidXQgb3RoZXJ3aXNlIGl0J3Mgc2ltaWxhciB0 byB3aGF0J3MgZG9uZQorCSAqIGluIHBhcnRpdGlvbl9idWNrZXQoKS4KKwkg Ki8KKworCS8qIGNyZWF0ZSBidWNrZXQgd2l0aCBOVUxMLW9ubHkgZGltZW5z aW9uICdkaW0nICovCisJbnVsbF9idWNrZXQgPSBjb3B5X212X2J1Y2tldChi dWNrZXQsIGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMpOworCW51bGxfZGF0YSA9 IChIaXN0b2dyYW1CdWlsZCludWxsX2J1Y2tldC0+YnVpbGRfZGF0YTsKKwor CS8qIHJlbWVtYmVyIHRoZSBjdXJyZW50IGFycmF5IGluZm8gKi8KKwlvbGRy b3dzID0gZGF0YS0+cm93czsKKwludW1yb3dzID0gZGF0YS0+bnVtcm93czsK KworCS8qIHdlJ2xsIGtlZXAgbm9uLU5VTEwgdmFsdWVzIGluIHRoZSBjdXJy ZW50IGJ1Y2tldCAqLworCWRhdGEtPm51bXJvd3MgPSAobnVtcm93cyAtIG51 bGxfY291bnQpOworCWRhdGEtPnJvd3MKKwkJPSAoSGVhcFR1cGxlKilwYWxs b2MwKGRhdGEtPm51bXJvd3MgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisKKwkv KiBhbmQgdGhlIE5VTEwgdmFsdWVzIHdpbGwgZ28gdG8gdGhlIG5ldyBvbmUg Ki8KKwludWxsX2RhdGEtPm51bXJvd3MgPSBudWxsX2NvdW50OworCW51bGxf ZGF0YS0+cm93cworCQk9IChIZWFwVHVwbGUqKXBhbGxvYzAobnVsbF9kYXRh LT5udW1yb3dzICogc2l6ZW9mKEhlYXBUdXBsZSkpOworCisJLyogbWFyayB0 aGUgZGltZW5zaW9uIGFzIE5VTEwtb25seSAoaW4gdGhlIG5ldyBidWNrZXQp ICovCisJbnVsbF9idWNrZXQtPm51bGxzb25seVtudWxsX2RpbV0gPSB0cnVl OworCisJLyogd2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgcm93cyBhbmQgZGlz dHJpYnV0ZSB0aGVtIGFjY29yZGluZ2x5ICovCisJbnVsbF9pZHggPSAwOwor CWN1cnJfaWR4ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsr KQorCXsKKwkJaWYgKGhlYXBfYXR0aXNudWxsKG9sZHJvd3NbaV0sIGF0dHJz LT52YWx1ZXNbbnVsbF9kaW1dKSkKKwkJCS8qIE5VTEwgPT4gY29weSB0byB0 aGUgbmV3IGJ1Y2tldCAqLworCQkJbWVtY3B5KCZudWxsX2RhdGEtPnJvd3Nb bnVsbF9pZHgrK10sICZvbGRyb3dzW2ldLAorCQkJCQlzaXplb2YoSGVhcFR1 cGxlKSk7CisJCWVsc2UKKwkJCW1lbWNweSgmZGF0YS0+cm93c1tjdXJyX2lk eCsrXSwgJm9sZHJvd3NbaV0sCisJCQkJCXNpemVvZihIZWFwVHVwbGUpKTsK Kwl9CisKKwkvKiB1cGRhdGUgbmRpc3RpbmN0IHZhbHVlcyBmb3IgdGhlIGJ1 Y2tldHMgKHRvdGFsIGFuZCBwZXIgZGltZW5zaW9uKSAqLworCXVwZGF0ZV9i dWNrZXRfbmRpc3RpbmN0KGJ1Y2tldCwgYXR0cnMsIHN0YXRzKTsKKwl1cGRh dGVfYnVja2V0X25kaXN0aW5jdChudWxsX2J1Y2tldCwgYXR0cnMsIHN0YXRz KTsKKworCS8qCisJICogVE9ETyBXZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMg Zm9yIHRoZSBkaW1lbnNpb24gd2UgdXNlZCBmb3Igc3BsaXQsCisJICogICAg ICBiZWNhdXNlIHdlIGtub3cgaG93IG1hbnkgZGlzdGluY3QgdmFsdWVzIHdl bnQgdG8gZWFjaAorCSAqICAgICAgYnVja2V0IChOVUxMIGlzIG5vdCBhIHZh bHVlLCBzbyAwLCBhbmQgdGhlIG90aGVyIGJ1Y2tldCBnb3QKKwkgKiAgICAg IGFsbCB0aGUgbmRpc3RpbmN0IHZhbHVlcykuCisJICovCisJZm9yIChpID0g MDsgaSA8IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnM7IGkrKykKKwl7CisJCXVw ZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KGJ1Y2tldCwgaSwgYXR0cnMsIHN0 YXRzLCBmYWxzZSk7CisJCXVwZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KG51 bGxfYnVja2V0LCBpLCBhdHRycywgc3RhdHMsIGZhbHNlKTsKKwl9CisKKwlw ZnJlZShvbGRyb3dzKTsKKworCS8qIGFkZCB0aGUgTlVMTCBidWNrZXQgdG8g dGhlIGhpc3RvZ3JhbSAqLworCWhpc3RvZ3JhbS0+YnVja2V0c1toaXN0b2dy YW0tPm5idWNrZXRzKytdID0gbnVsbF9idWNrZXQ7CisKKwkvKgorCSAqIEFu ZCBub3cgcnVuIHRoZSBmdW5jdGlvbiByZWN1cnNpdmVseSBvbiBib3RoIGJ1 Y2tldHMgKHRoZSBuZXcKKwkgKiBvbmUgZmlyc3QsIGJlY2F1c2UgdGhlIGNh bGwgbWF5IGNoYW5nZSBudW1iZXIgb2YgYnVja2V0cywgYW5kCisJICogaXQn cyB1c2VkIGFzIGFuIGluZGV4KS4KKwkgKi8KKwljcmVhdGVfbnVsbF9idWNr ZXRzKGhpc3RvZ3JhbSwgKGhpc3RvZ3JhbS0+bmJ1Y2tldHMtMSksIGF0dHJz LCBzdGF0cyk7CisJY3JlYXRlX251bGxfYnVja2V0cyhoaXN0b2dyYW0sIGJ1 Y2tldF9pZHgsIGF0dHJzLCBzdGF0cyk7CisKK30KKworLyoKKyAqIFdlIG5l ZWQgdG8gcGFzcyB0aGUgU29ydFN1cHBvcnQgdG8gdGhlIGNvbXBhcmF0b3Is IGJ1dCBic2VhcmNoKCkKKyAqIGhhcyBubyAnY29udGV4dCcgcGFyYW1ldGVy LCBzbyB3ZSB1c2UgYSBnbG9iYWwgdmFyaWFibGUgKHVnbHkpLgorICovCitz dGF0aWMgaW50Citic2VhcmNoX2NvbXBhcmF0b3IoY29uc3Qgdm9pZCAqIGEs IGNvbnN0IHZvaWQgKiBiKQoreworCUFzc2VydChzc3VwX3ByaXZhdGUgIT0g TlVMTCk7CisJcmV0dXJuIGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoYSwgYiwg KHZvaWQqKXNzdXBfcHJpdmF0ZSk7Cit9CisKKy8qCisgKiBTUkYgd2l0aCBk ZXRhaWxzIGFib3V0IGJ1Y2tldHMgb2YgYSBoaXN0b2dyYW06CisgKgorICog LSBidWNrZXQgSUQgKDAuLi5uYnVja2V0cykKKyAqIC0gbWluIHZhbHVlcyAo c3RyaW5nIGFycmF5KQorICogLSBtYXggdmFsdWVzIChzdHJpbmcgYXJyYXkp CisgKiAtIG51bGxzIG9ubHkgKGJvb2xlYW4gYXJyYXkpCisgKiAtIG1pbiBp bmNsdXNpdmUgZmxhZ3MgKGJvb2xlYW4gYXJyYXkpCisgKiAtIG1heCBpbmNs dXNpdmUgZmxhZ3MgKGJvb2xlYW4gYXJyYXkpCisgKiAtIGZyZXF1ZW5jeSAo ZG91YmxlIHByZWNpc2lvbikKKyAqCisgKiBUaGUgaW5wdXQgaXMgdGhlIE9J RCBvZiB0aGUgc3RhdGlzdGljcywgYW5kIHRoZXJlIGFyZSBubyByb3dzCisg KiByZXR1cm5lZCBpZiB0aGUgc3RhdGlzdGljcyBjb250YWlucyBubyBoaXN0 b2dyYW0gKG9yIGlmIHRoZXJlJ3Mgbm8KKyAqIHN0YXRpc3RpY3MgZm9yIHRo ZSBPSUQpLgorICoKKyAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyICh0eXBlKSBk ZXRlcm1pbmVzIHdoYXQgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQKKyAqIGlu IHRoZSAobWludmFscyxtYXh2YWxzKS4gVGhlcmUgYXJlIHRocmVlIHBvc3Np YmxlIHZhbHVlczoKKyAqIAorICogMCAoYWN0dWFsIHZhbHVlcykKKyAqIC0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAtIHByaW50cyBhY3R1YWwgdmFsdWVz CisgKiAgICAtIHVzaW5nIHRoZSBvdXRwdXQgZnVuY3Rpb24gb2YgdGhlIGRh dGEgdHlwZSAoYXMgc3RyaW5nKQorICogICAgLSBoYW5keSBmb3IgaW52ZXN0 aWdhdGluZyB0aGUgaGlzdG9ncmFtCisgKgorICogMSAoZGlzdGluY3QgaW5k ZXgpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIC0gcHJpbnRzIGlu ZGV4IG9mIHRoZSBkaXN0aW5jdCB2YWx1ZSAoaW50byB0aGUgc2VyaWFsaXpl ZCBhcnJheSkKKyAqICAgIC0gbWFrZXMgaXQgZWFzaWVyIHRvIHNwb3QgbmVp Z2hib3IgYnVja2V0cywgZXRjLgorICogICAgLSBoYW5keSBmb3IgcGxvdHRp bmcgdGhlIGhpc3RvZ3JhbQorICoKKyAqIDIgKG5vcm1hbGl6ZWQgZGlzdGlu Y3QgaW5kZXgpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogICAgLSBwcmludHMgaW5kZXggb2YgdGhlIGRpc3RpbmN0IHZhbHVlLCBi dXQgbm9ybWFsaXplZCBpbnRvIFswLDFdCisgKiAgICAtIHNpbWlsYXIgdG8g MSwgYnV0IHNob3dzIGhvdyAnbG9uZycgdGhlIGJ1Y2tldCByYW5nZSBpcwor ICogICAgLSBoYW5keSBmb3IgcGxvdHRpbmcgdGhlIGhpc3RvZ3JhbQorICoK KyAqIFdoZW4gcGxvdHRpbmcgdGhlIGhpc3RvZ3JhbSwgYmUgY2FyZWZ1bCBh cyB0aGUgKDEpIGFuZCAoMikgb3B0aW9ucworICogc2tldyB0aGUgbGVuZ3Ro cyBieSBkaXN0cmlidXRpbmcgdGhlIGRpc3RpbmN0IHZhbHVlcyB1bmlmb3Jt bHkuIEZvcgorICogZGF0YSB0eXBlcyB3aXRob3V0IGEgY2xlYXIgbWVhbmlu ZyBvZiAnZGlzdGFuY2UnIChlLmcuIHN0cmluZ3MpIHRoYXQKKyAqIGlzIG5v dCBhIGJpZyBkZWFsLCBidXQgZm9yIG51bWJlcnMgaXQgbWF5IGJlIGNvbmZ1 c2luZy4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19tdl9oaXN0b2dy YW1fYnVja2V0cyk7CisKK0RhdHVtCitwZ19tdl9oaXN0b2dyYW1fYnVja2V0 cyhQR19GVU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dAkgICAq ZnVuY2N0eDsKKwlpbnQJCQkJCWNhbGxfY250cjsKKwlpbnQJCQkJCW1heF9j YWxsczsKKwlUdXBsZURlc2MJCQl0dXBkZXNjOworCUF0dEluTWV0YWRhdGEJ ICAgKmF0dGlubWV0YTsKKworCU9pZAkJCQkJbXZvaWQgPSBQR19HRVRBUkdf T0lEKDApOworCWludAkJCQkJb3R5cGUgPSBQR19HRVRBUkdfSU5UMzIoMSk7 CisKKwlpZiAoKG90eXBlIDwgMCkgfHwgKG90eXBlID4gMikpCisJCWVsb2co RVJST1IsICJpbnZhbGlkIG91dHB1dCB0eXBlIHNwZWNpZmllZCIpOworCisJ Lyogc3R1ZmYgZG9uZSBvbmx5IG9uIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBm dW5jdGlvbiAqLworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlN ZW1vcnlDb250ZXh0ICAgb2xkY29udGV4dDsKKwkJTVZTZXJpYWxpemVkSGlz dG9ncmFtIGhpc3RvZ3JhbTsKKworCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBj b250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1bmNj dHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBzd2l0Y2ggdG8g bWVtb3J5IGNvbnRleHQgYXBwcm9wcmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0 aW9uIGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlo aXN0b2dyYW0gPSBsb2FkX212X2hpc3RvZ3JhbShtdm9pZCk7CisKKwkJZnVu Y2N0eC0+dXNlcl9mY3R4ID0gaGlzdG9ncmFtOworCisJCS8qIHRvdGFsIG51 bWJlciBvZiB0dXBsZXMgdG8gYmUgcmV0dXJuZWQgKi8KKwkJZnVuY2N0eC0+ bWF4X2NhbGxzID0gMDsKKwkJaWYgKGZ1bmNjdHgtPnVzZXJfZmN0eCAhPSBO VUxMKQorCQkJZnVuY2N0eC0+bWF4X2NhbGxzID0gaGlzdG9ncmFtLT5uYnVj a2V0czsKKworCQkvKiBCdWlsZCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIG91 ciByZXN1bHQgdHlwZSAqLworCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUo ZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRF KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJybXNnKCJmdW5jdGlv biByZXR1cm5pbmcgcmVjb3JkIGNhbGxlZCBpbiBjb250ZXh0ICIKKwkJCQkJ CQkidGhhdCBjYW5ub3QgYWNjZXB0IHR5cGUgcmVjb3JkIikpKTsKKworCQkv KgorCQkgKiBnZW5lcmF0ZSBhdHRyaWJ1dGUgbWV0YWRhdGEgbmVlZGVkIGxh dGVyIHRvIHByb2R1Y2UgdHVwbGVzCisJCSAqIGZyb20gcmF3IEMgc3RyaW5n cworCQkgKi8KKwkJYXR0aW5tZXRhID0gVHVwbGVEZXNjR2V0QXR0SW5NZXRh ZGF0YSh0dXBkZXNjKTsKKwkJZnVuY2N0eC0+YXR0aW5tZXRhID0gYXR0aW5t ZXRhOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK Kwl9CisKKwkvKiBzdHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwgb2YgdGhlIGZ1 bmN0aW9uICovCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisK KwljYWxsX2NudHIgPSBmdW5jY3R4LT5jYWxsX2NudHI7CisJbWF4X2NhbGxz ID0gZnVuY2N0eC0+bWF4X2NhbGxzOworCWF0dGlubWV0YSA9IGZ1bmNjdHgt PmF0dGlubWV0YTsKKworCWlmIChjYWxsX2NudHIgPCBtYXhfY2FsbHMpICAg IC8qIGRvIHdoZW4gdGhlcmUgaXMgbW9yZSBsZWZ0IHRvIHNlbmQgKi8KKwl7 CisJCWNoYXIJICAqKnZhbHVlczsKKwkJSGVhcFR1cGxlCXR1cGxlOworCQlE YXR1bQkJcmVzdWx0OworCQlpbnQydmVjdG9yICpzdGFrZXlzOworCQlPaWQJ CQlyZWxpZDsKKwkJZG91YmxlCQlidWNrZXRfc2l6ZSA9IDEuMDsKKworCQlj aGFyICpidWZmID0gcGFsbG9jMCgxMDI0KTsKKwkJY2hhciAqZm9ybWF0Owor CisJCWludAkJCWk7CisKKwkJT2lkCQkgICAqb3V0ZnVuY3M7CisJCUZtZ3JJ bmZvICAgKmZtZ3JpbmZvOworCisJCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBo aXN0b2dyYW07CisJCU1WU2VyaWFsaXplZEJ1Y2tldCBidWNrZXQ7CisKKwkJ aGlzdG9ncmFtID0gKE1WU2VyaWFsaXplZEhpc3RvZ3JhbSlmdW5jY3R4LT51 c2VyX2ZjdHg7CisKKwkJQXNzZXJ0KGNhbGxfY250ciA8IGhpc3RvZ3JhbS0+ bmJ1Y2tldHMpOworCisJCWJ1Y2tldCA9IGhpc3RvZ3JhbS0+YnVja2V0c1tj YWxsX2NudHJdOworCisJCXN0YWtleXMgPSBmaW5kX212X2F0dG51bXMobXZv aWQsICZyZWxpZCk7CisKKwkJLyoKKwkJICogUHJlcGFyZSBhIHZhbHVlcyBh cnJheSBmb3IgYnVpbGRpbmcgdGhlIHJldHVybmVkIHR1cGxlLgorCQkgKiBU aGlzIHNob3VsZCBiZSBhbiBhcnJheSBvZiBDIHN0cmluZ3Mgd2hpY2ggd2ls bAorCQkgKiBiZSBwcm9jZXNzZWQgbGF0ZXIgYnkgdGhlIHR5cGUgaW5wdXQg ZnVuY3Rpb25zLgorCQkgKi8KKwkJdmFsdWVzID0gKGNoYXIgKiopIHBhbGxv Yyg5ICogc2l6ZW9mKGNoYXIgKikpOworCisJCXZhbHVlc1swXSA9IChjaGFy ICopIHBhbGxvYyg2NCAqIHNpemVvZihjaGFyKSk7CisKKwkJLyogYXJyYXlz ICovCisJCXZhbHVlc1sxXSA9IChjaGFyICopIHBhbGxvYzAoMTAyNCAqIHNp emVvZihjaGFyKSk7CisJCXZhbHVlc1syXSA9IChjaGFyICopIHBhbGxvYzAo MTAyNCAqIHNpemVvZihjaGFyKSk7CisJCXZhbHVlc1szXSA9IChjaGFyICop IHBhbGxvYzAoMTAyNCAqIHNpemVvZihjaGFyKSk7CisJCXZhbHVlc1s0XSA9 IChjaGFyICopIHBhbGxvYzAoMTAyNCAqIHNpemVvZihjaGFyKSk7CisJCXZh bHVlc1s1XSA9IChjaGFyICopIHBhbGxvYzAoMTAyNCAqIHNpemVvZihjaGFy KSk7CisKKwkJdmFsdWVzWzZdID0gKGNoYXIgKikgcGFsbG9jKDY0ICogc2l6 ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzddID0gKGNoYXIgKikgcGFsbG9jKDY0 ICogc2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzhdID0gKGNoYXIgKikgcGFs bG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiB3ZSBuZWVkIHRvIGRv IHRoaXMgb25seSB3aGVuIHByaW50aW5nIHRoZSBhY3R1YWwgdmFsdWVzICov CisJCW91dGZ1bmNzID0gKE9pZCopcGFsbG9jMChzaXplb2YoT2lkKSAqIGhp c3RvZ3JhbS0+bmRpbWVuc2lvbnMpOworCQlmbWdyaW5mbyA9IChGbWdySW5m byopcGFsbG9jMChzaXplb2YoRm1nckluZm8pICogaGlzdG9ncmFtLT5uZGlt ZW5zaW9ucyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGhpc3RvZ3JhbS0+bmRp bWVuc2lvbnM7IGkrKykKKwkJeworCQkJYm9vbCBpc3ZhcmxlbmE7CisKKwkJ CWdldFR5cGVPdXRwdXRJbmZvKGdldF9hdHR0eXBlKHJlbGlkLCBzdGFrZXlz LT52YWx1ZXNbaV0pLAorCQkJCQkJCSAgJm91dGZ1bmNzW2ldLCAmaXN2YXJs ZW5hKTsKKworCQkJZm1ncl9pbmZvKG91dGZ1bmNzW2ldLCAmZm1ncmluZm9b aV0pOworCQl9CisKKwkJc25wcmludGYodmFsdWVzWzBdLCA2NCwgIiVkIiwg Y2FsbF9jbnRyKTsJLyogYnVja2V0IElEICovCisKKwkJLyoKKwkJICogY3Vy cmVudGx5IHdlIG9ubHkgcHJpbnQgYXJyYXkgb2YgaW5kZXhlcywgYnV0IHRo ZSBkZWR1cGxpY2F0ZWQKKwkJICogdmFsdWVzIHNob3VsZCBiZSBzb3J0ZWQs IHNvIHRoaXMgaXMgYWN0dWFsbHkgcXVpdGUgdXNlZnVsCisJCSAqCisJCSAq IFRPRE8gcHJpbnQgdGhlIGFjdHVhbCBtaW4vbWF4IHZhbHVlcywgdXNpbmcg dGhlIG91dHB1dAorCQkgKiAgICAgIGZ1bmN0aW9uIG9mIHRoZSBhdHRyaWJ1 dGUgdHlwZQorCQkgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgaGlzdG9ncmFt LT5uZGltZW5zaW9uczsgaSsrKQorCQl7CisJCQlidWNrZXRfc2l6ZSAqPSAo YnVja2V0LT5tYXhbaV0gLSBidWNrZXQtPm1pbltpXSkgKiAxLjAKKwkJCQkJ CQkJCQkJLyAoaGlzdG9ncmFtLT5udmFsdWVzW2ldLTEpOworCisJCQkvKiBw cmludCB0aGUgYWN0dWFsIHZhbHVlcywgaS5lLiB1c2Ugb3V0cHV0IGZ1bmN0 aW9uIGV0Yy4gKi8KKwkJCWlmIChvdHlwZSA9PSAwKQorCQkJeworCQkJCURh dHVtIG1pbnZhbCwgbWF4dmFsOworCQkJCURhdHVtIG1pbm91dCwgbWF4b3V0 OworCisJCQkJZm9ybWF0ID0gIiVzLCAlcyI7CisJCQkJaWYgKGkgPT0gMCkK KwkJCQkJZm9ybWF0ID0gInslcyVzIjsKKwkJCQllbHNlIGlmIChpID09IGhp c3RvZ3JhbS0+bmRpbWVuc2lvbnMtMSkKKwkJCQkJZm9ybWF0ID0gIiVzLCAl c30iOworCisJCQkJbWludmFsID0gaGlzdG9ncmFtLT52YWx1ZXNbaV1bYnVj a2V0LT5taW5baV1dOworCQkJCW1pbm91dCA9IEZ1bmN0aW9uQ2FsbDEoJmZt Z3JpbmZvW2ldLCBtaW52YWwpOworCisJCQkJbWF4dmFsID0gaGlzdG9ncmFt LT52YWx1ZXNbaV1bYnVja2V0LT5tYXhbaV1dOworCQkJCW1heG91dCA9IEZ1 bmN0aW9uQ2FsbDEoJmZtZ3JpbmZvW2ldLCBtYXh2YWwpOworCisJCQkJLy8g c25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0LCB2YWx1ZXNbMV0sIGJ1Y2tl dC0+bWluW2ldKTsKKwkJCQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQs IHZhbHVlc1sxXSwgRGF0dW1HZXRQb2ludGVyKG1pbm91dCkpOworCQkJCXN0 cm5jcHkodmFsdWVzWzFdLCBidWZmLCAxMDIzKTsKKwkJCQlidWZmWzBdID0g J1wwJzsKKworCQkJCS8vIHNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZvcm1hdCwg dmFsdWVzWzJdLCBidWNrZXQtPm1heFtpXSk7CisJCQkJc25wcmludGYoYnVm ZiwgMTAyNCwgZm9ybWF0LCB2YWx1ZXNbMl0sIERhdHVtR2V0UG9pbnRlciht YXhvdXQpKTsKKwkJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAyMyk7 CisJCQkJYnVmZlswXSA9ICdcMCc7CisJCQl9CisJCQllbHNlIGlmIChvdHlw ZSA9PSAxKQorCQkJeworCQkJCWZvcm1hdCA9ICIlcywgJWQiOworCQkJCWlm IChpID09IDApCisJCQkJCWZvcm1hdCA9ICJ7JXMlZCI7CisJCQkJZWxzZSBp ZiAoaSA9PSBoaXN0b2dyYW0tPm5kaW1lbnNpb25zLTEpCisJCQkJCWZvcm1h dCA9ICIlcywgJWR9IjsKKworCQkJCXNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZv cm1hdCwgdmFsdWVzWzFdLCBidWNrZXQtPm1pbltpXSk7CisJCQkJc3RybmNw eSh2YWx1ZXNbMV0sIGJ1ZmYsIDEwMjMpOworCQkJCWJ1ZmZbMF0gPSAnXDAn OworCisJCQkJc25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0LCB2YWx1ZXNb Ml0sIGJ1Y2tldC0+bWF4W2ldKTsKKwkJCQlzdHJuY3B5KHZhbHVlc1syXSwg YnVmZiwgMTAyMyk7CisJCQkJYnVmZlswXSA9ICdcMCc7CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJZm9ybWF0ID0gIiVzLCAlZiI7CisJCQkJaWYgKGkg PT0gMCkKKwkJCQkJZm9ybWF0ID0gInslcyVmIjsKKwkJCQllbHNlIGlmIChp ID09IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMtMSkKKwkJCQkJZm9ybWF0ID0g IiVzLCAlZn0iOworCisJCQkJc25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0 LCB2YWx1ZXNbMV0sCisJCQkJCQkgYnVja2V0LT5taW5baV0gKiAxLjAgLyAo aGlzdG9ncmFtLT5udmFsdWVzW2ldLTEpKTsKKwkJCQlzdHJuY3B5KHZhbHVl c1sxXSwgYnVmZiwgMTAyMyk7CisJCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJ CQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1syXSwKKwkJ CQkJCWJ1Y2tldC0+bWF4W2ldICogMS4wIC8gKGhpc3RvZ3JhbS0+bnZhbHVl c1tpXS0xKSk7CisJCQkJc3RybmNweSh2YWx1ZXNbMl0sIGJ1ZmYsIDEwMjMp OworCQkJCWJ1ZmZbMF0gPSAnXDAnOworCQkJfQorCisJCQlmb3JtYXQgPSAi JXMsICVzIjsKKwkJCWlmIChpID09IDApCisJCQkJZm9ybWF0ID0gInslcyVz IjsKKwkJCWVsc2UgaWYgKGkgPT0gaGlzdG9ncmFtLT5uZGltZW5zaW9ucy0x KQorCQkJCWZvcm1hdCA9ICIlcywgJXN9IjsKKworCQkJc25wcmludGYoYnVm ZiwgMTAyNCwgZm9ybWF0LCB2YWx1ZXNbM10sIGJ1Y2tldC0+bnVsbHNvbmx5 W2ldID8gInQiIDogImYiKTsKKwkJCXN0cm5jcHkodmFsdWVzWzNdLCBidWZm LCAxMDIzKTsKKwkJCWJ1ZmZbMF0gPSAnXDAnOworCisJCQlzbnByaW50Zihi dWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1s0XSwgYnVja2V0LT5taW5faW5j bHVzaXZlW2ldID8gInQiIDogImYiKTsKKwkJCXN0cm5jcHkodmFsdWVzWzRd LCBidWZmLCAxMDIzKTsKKwkJCWJ1ZmZbMF0gPSAnXDAnOworCisJCQlzbnBy aW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1s1XSwgYnVja2V0LT5t YXhfaW5jbHVzaXZlW2ldID8gInQiIDogImYiKTsKKwkJCXN0cm5jcHkodmFs dWVzWzVdLCBidWZmLCAxMDIzKTsKKwkJCWJ1ZmZbMF0gPSAnXDAnOworCQl9 CisKKwkJc25wcmludGYodmFsdWVzWzZdLCA2NCwgIiVmIiwgYnVja2V0LT5u dHVwbGVzKTsJLyogZnJlcXVlbmN5ICovCisJCXNucHJpbnRmKHZhbHVlc1s3 XSwgNjQsICIlZiIsIGJ1Y2tldC0+bnR1cGxlcyAvIGJ1Y2tldF9zaXplKTsJ LyogZGVuc2l0eSAqLworCQlzbnByaW50Zih2YWx1ZXNbOF0sIDY0LCAiJWYi LCBidWNrZXRfc2l6ZSk7CS8qIGJ1Y2tldF9zaXplICovCisKKwkJLyogYnVp bGQgYSB0dXBsZSAqLworCQl0dXBsZSA9IEJ1aWxkVHVwbGVGcm9tQ1N0cmlu Z3MoYXR0aW5tZXRhLCB2YWx1ZXMpOworCisJCS8qIG1ha2UgdGhlIHR1cGxl IGludG8gYSBkYXR1bSAqLworCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1 bSh0dXBsZSk7CisKKwkJLyogY2xlYW4gdXAgKHRoaXMgaXMgbm90IHJlYWxs eSBuZWNlc3NhcnkpICovCisJCXBmcmVlKHZhbHVlc1swXSk7CisJCXBmcmVl KHZhbHVlc1sxXSk7CisJCXBmcmVlKHZhbHVlc1syXSk7CisJCXBmcmVlKHZh bHVlc1szXSk7CisJCXBmcmVlKHZhbHVlc1s0XSk7CisJCXBmcmVlKHZhbHVl c1s1XSk7CisJCXBmcmVlKHZhbHVlc1s2XSk7CisKKwkJcGZyZWUodmFsdWVz KTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgcmVzdWx0KTsKKwl9 CisJZWxzZSAgICAvKiBkbyB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgbGVmdCAq LworCXsKKwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworCX0KK30KKwor I2lmZGVmIERFQlVHX01WSElTVAorLyoKKyAqIHByaW50cyBkZWJ1Z2dpbmcg aW5mbyBhYm91dCBtYXRjaGVkIGhpc3RvZ3JhbSBidWNrZXRzIChmdWxsL3Bh cnRpYWwpCisgKgorICogWFhYIEN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciBJ TlQgZGF0YSB0eXBlLgorICovCit2b2lkCitkZWJ1Z19oaXN0b2dyYW1fbWF0 Y2hlcyhNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0LCBjaGFyICptYXRj aGVzKQoreworCWludCBpLCBqOworCisJZmxvYXQgZmZ1bGwgPSAwLCBmcGFy dGlhbCA9IDA7CisJaW50IG5mdWxsID0gMCwgbnBhcnRpYWwgPSAwOworCisJ Zm9yIChpID0gMDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwl7CisJ CU1WU2VyaWFsaXplZEJ1Y2tldCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tldHNb aV07CisKKwkJY2hhciByYW5nZXNbMTAyNF07CisKKwkJaWYgKCEgbWF0Y2hl c1tpXSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGluY3JlbWVudCB0aGUgY291 bnRlcnMgKi8KKwkJbmZ1bGwgKz0gKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19N QVRDSF9GVUxMKSA/IDEgOiAwOworCQlucGFydGlhbCArPSAobWF0Y2hlc1tp XSA9PSBNVlNUQVRTX01BVENIX1BBUlRJQUwpID8gMSA6IDA7CisKKwkJLyog YW5kIGFsc28gdXBkYXRlIHRoZSBmcmVxdWVuY2llcyAqLworCQlmZnVsbCAr PSAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpID8gYnVja2V0 LT5udHVwbGVzIDogMDsKKwkJZnBhcnRpYWwgKz0gKG1hdGNoZXNbaV0gPT0g TVZTVEFUU19NQVRDSF9QQVJUSUFMKSA/IGJ1Y2tldC0+bnR1cGxlcyA6IDA7 CisKKwkJbWVtc2V0KHJhbmdlcywgMCwgc2l6ZW9mKHJhbmdlcykpOworCisJ CS8qIGJ1aWxkIHJhbmdlcyBmb3IgYWxsIHRoZSBkaW1lbnRpb25zICovCisJ CWZvciAoaiA9IDA7IGogPCBtdmhpc3QtPm5kaW1lbnNpb25zOyBqKyspCisJ CXsKKwkJCXNwcmludGYocmFuZ2VzLCAiJXMgWyVkICVkXSIsIHJhbmdlcywK KwkJCQkJCQkJCQkgIERhdHVtR2V0SW50MzIobXZoaXN0LT52YWx1ZXNbal1b YnVja2V0LT5taW5bal1dKSwKKwkJCQkJCQkJCQkgIERhdHVtR2V0SW50MzIo bXZoaXN0LT52YWx1ZXNbal1bYnVja2V0LT5tYXhbal1dKSk7CisJCX0KKwor CQllbG9nKFdBUk5JTkcsICJidWNrZXQgJWQgJXMgPT4gJWQgWyVmXSIsIGks IHJhbmdlcywgbWF0Y2hlc1tpXSwgYnVja2V0LT5udHVwbGVzKTsKKwl9CisK KwllbG9nKFdBUk5JTkcsICJmdWxsPSVmIHBhcnRpYWw9JWYgKCVmKSIsIGZm dWxsLCBmcGFydGlhbCwgKGZmdWxsICsgMC41ICogZnBhcnRpYWwpKTsKK30K KyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMg Yi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCAyYzIyZDMxLi5iNjkz ZjM2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysg Yi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtMjEwOSw5ICsyMTA5LDkg QEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1h bmFtZSwKIAkJewogCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJ CSAgICJTRUxFQ1Qgb2lkLCBzdGFuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZSBB UyBuc3AsIHN0YW5hbWUsIHN0YWtleXMsXG4iCi0JCQkJCQkgICAiICBkZXBz X2VuYWJsZWQsIG1jdl9lbmFibGVkLFxuIgotCQkJCQkJICAgIiAgZGVwc19i dWlsdCwgbWN2X2J1aWx0LFxuIgotCQkJCQkJICAgIiAgbWN2X21heF9pdGVt cyxcbiIKKwkJCQkJCSAgICIgIGRlcHNfZW5hYmxlZCwgbWN2X2VuYWJsZWQs IGhpc3RfZW5hYmxlZCxcbiIKKwkJCQkJCSAgICIgIGRlcHNfYnVpbHQsIG1j dl9idWlsdCwgaGlzdF9idWlsdCxcbiIKKwkJCQkJCSAgICIgIG1jdl9tYXhf aXRlbXMsIGhpc3RfbWF4X2J1Y2tldHMsXG4iCiAJCQkJCQkgICAiICAoU0VM RUNUIHN0cmluZ19hZ2coYXR0bmFtZTo6dGV4dCwnLCAnKVxuIgogCQkJCQkJ ICAgIiAgICBGUk9NICgoU0VMRUNUIHVubmVzdChzdGFrZXlzKSBBUyBhdHRu dW0pIHNcbiIKIAkJCQkJCSAgICIgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0 ZSBhIE9OIChzdGFyZWxpZCA9IGEuYXR0cmVsaWQgYW5kIGEuYXR0bnVtID0g cy5hdHRudW0pKSkgQVMgYXR0bnVtc1xuIgpAQCAtMjE1NCw4ICsyMTU0LDE3 IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVt YW5hbWUsCiAJCQkJCQlmaXJzdCA9IGZhbHNlOwogCQkJCQl9CiAKKwkJCQkJ aWYgKCFzdHJjbXAoUFFnZXR2YWx1ZShyZXN1bHQsIGksIDYpLCAidCIpKQor CQkJCQl7CisJCQkJCQlpZiAoISBmaXJzdCkKKwkJCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLCAiLCBoaXN0b2dyYW0iKTsKKwkJCQkJCWVsc2UKKwkJ CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiKGhpc3RvZ3JhbSIpOwor CQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJfQorCiAJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsICIpIE9OICglcykiLAotCQkJCQkJCVBRZ2V0dmFs dWUocmVzdWx0LCBpLCA5KSk7CisJCQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQs IGksIDEyKSk7CiAKIAkJCQkJcHJpbnRUYWJsZUFkZEZvb3RlcigmY29udCwg YnVmLmRhdGEpOwogCQkJCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfbXZfc3RhdGlzdGljLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX212X3N0YXRpc3RpYy5oCmluZGV4IDM1MjliMDMuLjM3ZjQ3M2YgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGlj LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMu aApAQCAtMzksMTMgKzM5LDE2IEBAIENBVEFMT0cocGdfbXZfc3RhdGlzdGlj LDMzODEpCiAJLyogc3RhdGlzdGljcyByZXF1ZXN0ZWQgdG8gYnVpbGQgKi8K IAlib29sCQlkZXBzX2VuYWJsZWQ7CQkvKiBhbmFseXplIGRlcGVuZGVuY2ll cz8gKi8KIAlib29sCQltY3ZfZW5hYmxlZDsJCS8qIGJ1aWxkIE1DViBsaXN0 PyAqLworCWJvb2wJCWhpc3RfZW5hYmxlZDsJCS8qIGJ1aWxkIGhpc3RvZ3Jh bT8gKi8KIAotCS8qIE1DViBzaXplICovCisJLyogaGlzdG9ncmFtIC8gTUNW IHNpemUgKi8KIAlpbnQzMgkJbWN2X21heF9pdGVtczsJCS8qIG1heCBNQ1Yg aXRlbXMgKi8KKwlpbnQzMgkJaGlzdF9tYXhfYnVja2V0czsJLyogbWF4IGhp c3RvZ3JhbSBidWNrZXRzICovCiAKIAkvKiBzdGF0aXN0aWNzIHRoYXQgYXJl IGF2YWlsYWJsZSAoaWYgcmVxdWVzdGVkKSAqLwogCWJvb2wJCWRlcHNfYnVp bHQ7CQkJLyogZGVwZW5kZW5jaWVzIHdlcmUgYnVpbHQgKi8KIAlib29sCQlt Y3ZfYnVpbHQ7CQkJLyogTUNWIGxpc3Qgd2FzIGJ1aWx0ICovCisJYm9vbAkJ aGlzdF9idWlsdDsJCQkvKiBoaXN0b2dyYW0gd2FzIGJ1aWx0ICovCiAKIAkv KiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBh bGxvdyBkaXJlY3QgYWNjZXNzIHRvIHN0YWtleXMgKi8KIAlpbnQydmVjdG9y CXN0YWtleXM7CQkJLyogYXJyYXkgb2YgY29sdW1uIGtleXMgKi8KQEAgLTUz LDYgKzU2LDcgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKICNp ZmRlZiBDQVRBTE9HX1ZBUkxFTgogCWJ5dGVhCQlzdGFkZXBzOwkJCS8qIGRl cGVuZGVuY2llcyAoc2VyaWFsaXplZCkgKi8KIAlieXRlYQkJc3RhbWN2OwkJ CQkvKiBNQ1YgbGlzdCAoc2VyaWFsaXplZCkgKi8KKwlieXRlYQkJc3RhaGlz dDsJCQkvKiBNViBoaXN0b2dyYW0gKHNlcmlhbGl6ZWQpICovCiAjZW5kaWYK IAogfSBGb3JtRGF0YV9wZ19tdl9zdGF0aXN0aWM7CkBAIC02OCwxOCArNzIs MjIgQEAgdHlwZWRlZiBGb3JtRGF0YV9wZ19tdl9zdGF0aXN0aWMgKkZvcm1f cGdfbXZfc3RhdGlzdGljOwogICoJCWNvbXBpbGVyIGNvbnN0YW50cyBmb3Ig cGdfbXZfc3RhdGlzdGljCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KLSNk ZWZpbmUgTmF0dHNfcGdfbXZfc3RhdGlzdGljCQkJCQkxMgorI2RlZmluZSBO YXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTE1CiAjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YXJlbGlkCQkJMQogI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFuYW1lCQkJMgogI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFuYW1lc3BhY2UJCTMKICNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3Rhb3duZXIJCQk0CiAjZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX2RlcHNfZW5hYmxlZAkJNQogI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19tY3ZfZW5hYmxlZAkJNgotI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19tY3ZfbWF4X2l0ZW1zCQk3Ci0jZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfYnVpbHQJCQk4Ci0jZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX21jdl9idWlsdAkJCTkKLSNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3Rha2V5cwkJCTEwCi0jZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWRlcHMJCQkxMQotI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFtY3YJCQkJMTIKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfaGlzdF9lbmFibGVkCQk3CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX21jdl9tYXhfaXRlbXMJCTgKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfaGlzdF9tYXhfYnVja2V0cwk5CisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfYnVpbHQJCQkxMAorI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19tY3ZfYnVpbHQJCQkxMQorI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19oaXN0X2J1aWx0CQkJMTIKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3Rha2V5cwkJCTEzCisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMJCQkxNAorI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFtY3YJCQkJMTUKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhaGlzdAkJCTE2CiAKICNlbmRpZiAgIC8qIFBHX01WX1NUQVRJ U1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmluZGV4 IGIxNmVlYmMuLjE5YTQ5MGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5oCkBAIC0yNjc0LDYgKzI2NzQsMTAgQEAgREFUQShpbnNlcnQgT0lE ID0gMzM3NiAoICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8JUEdOU1AgUEdV SUQgMTIgMSAwIDAgMCBmIGYgZgogREVTQ1IoIm11bHRpLXZhcmlhdGUgc3Rh dGlzdGljczogTUNWIGxpc3QgaW5mbyIpOwogREFUQShpbnNlcnQgT0lEID0g MzM3MyAoICBwZ19tdl9tY3ZfaXRlbXMgUEdOU1AgUEdVSUQgMTIgMSAxMDAw IDAgMCBmIGYgZiBmIHQgdCBpIHMgMSAwIDIyNDkgIjI2IiAiezI2LDIzLDEw MDksMTAwMCw3MDF9IiAie2ksbyxvLG8sb30iICJ7b2lkLGluZGV4LHZhbHVl cyxudWxscyxmcmVxdWVuY3l9IiBfbnVsbF8gX251bGxfIHBnX212X21jdl9p dGVtcyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERFU0NSKCJkZXRhaWxz IGFib3V0IE1DViBsaXN0IGl0ZW1zIik7CitEQVRBKGluc2VydCBPSUQgPSAz Mzc1ICggIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvCVBHTlNQIFBHVUlE IDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYgaSBzIDEgMCAyNSAiMTciIF9udWxs XyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGdfbXZfc3RhdHNfaGlz dG9ncmFtX2luZm8gX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CitERVNDUigi bXVsdGktdmFyaWF0ZSBzdGF0aXN0aWNzOiBoaXN0b2dyYW0gaW5mbyIpOwor REFUQShpbnNlcnQgT0lEID0gMzM3NCAoICBwZ19tdl9oaXN0b2dyYW1fYnVj a2V0cyBQR05TUCBQR1VJRCAxMiAxIDEwMDAgMCAwIGYgZiBmIGYgdCB0IGkg cyAyIDAgMjI0OSAiMjYgMjMiICJ7MjYsMjMsMjMsMTAwOSwxMDA5LDEwMDAs MTAwMCwxMDAwLDcwMSw3MDEsNzAxfSIgIntpLGksbyxvLG8sbyxvLG8sbyxv LG99IiAie29pZCxvdHlwZSxpbmRleCxtaW52YWxzLG1heHZhbHMsbnVsbHNv bmx5LG1pbmluY2x1c2l2ZSxtYXhpbmNsdXNpdmUsZnJlcXVlbmN5LGRlbnNp dHksYnVja2V0X3NpemV9IiBfbnVsbF8gX251bGxfIHBnX212X2hpc3RvZ3Jh bV9idWNrZXRzIF9udWxsXyBfbnVsbF8gX251bGxfICkpOworREVTQ1IoImRl dGFpbHMgYWJvdXQgaGlzdG9ncmFtIGJ1Y2tldHMiKTsKIAogREFUQShpbnNl cnQgT0lEID0gMTkyOCAoICBwZ19zdGF0X2dldF9udW1zY2FucwkJCVBHTlNQ IFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYgcyByIDEgMCAyMCAiMjYi IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGdfc3RhdF9n ZXRfbnVtc2NhbnMgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigi c3RhdGlzdGljczogbnVtYmVyIG9mIHNjYW5zIGRvbmUgZm9yIHRhYmxlL2lu ZGV4Iik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlv bi5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAppbmRleCAyYmNk NTgyLi44YzUwYmZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9y ZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgK QEAgLTY1NCwxMCArNjU0LDEyIEBAIHR5cGVkZWYgc3RydWN0IE1WU3RhdGlz dGljSW5mbwogCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCWJvb2wJCWRl cHNfZW5hYmxlZDsJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgZW5hYmxl ZCAqLwogCWJvb2wJCW1jdl9lbmFibGVkOwkvKiBNQ1YgbGlzdCBlbmFibGVk ICovCisJYm9vbAkJaGlzdF9lbmFibGVkOwkvKiBoaXN0b2dyYW0gZW5hYmxl ZCAqLwogCiAJLyogYnVpbHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KIAli b29sCQlkZXBzX2J1aWx0OwkJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMg YnVpbHQgKi8KIAlib29sCQltY3ZfYnVpbHQ7CQkvKiBNQ1YgbGlzdCBidWls dCAqLworCWJvb2wJCWhpc3RfYnVpbHQ7CQkvKiBoaXN0b2dyYW0gYnVpbHQg Ki8KIAogCS8qIGNvbHVtbnMgaW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMp ICovCiAJaW50MnZlY3RvciAqc3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhl IGNvbHVtbnMgY292ZXJlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvbXZzdGF0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5o CmluZGV4IDQ1MzVkYjcuLmYwNWE1MTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL212c3RhdHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9t dnN0YXRzLmgKQEAgLTkyLDYgKzkyLDEyMyBAQCB0eXBlZGVmIE1DVkxpc3RE YXRhICpNQ1ZMaXN0OwogI2RlZmluZSBNVlNUQVRfTUNWTElTVF9NQVhfSVRF TVMJODE5MgkvKiBtYXggaXRlbXMgaW4gTUNWIGxpc3QgKi8KIAogLyoKKyAq IE11bHRpdmFyaWF0ZSBoaXN0b2dyYW1zCisgKi8KK3R5cGVkZWYgc3RydWN0 IE1WQnVja2V0RGF0YSB7CisKKwkvKiBGcmVxdWVuY2llcyBvZiB0aGlzIGJ1 Y2tldC4gKi8KKwlmbG9hdAludHVwbGVzOwkvKiBmcmVxdWVuY3kgb2YgdHVw bGVzIHR1cGxlcyAqLworCisJLyoKKwkgKiBJbmZvcm1hdGlvbiBhYm91dCBk aW1lbnNpb25zIGJlaW5nIE5VTEwtb25seS4gTm90IHlldCB1c2VkLgorCSAq LworCWJvb2wgICAqbnVsbHNvbmx5OworCisJLyogbG93ZXIgYm91bmRhcmll cyAtIHZhbHVlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGluZXF1YWxp dGllcyAqLworCURhdHVtICAqbWluOworCWJvb2wgICAqbWluX2luY2x1c2l2 ZTsKKworCS8qIHVwcGVyIGJvdW5kYXJpZXMgLSB2YWx1ZXMgYW5kIGluZm9y bWF0aW9uIGFib3V0IHRoZSBpbmVxdWFsaXRpZXMgKi8KKwlEYXR1bSAgKm1h eDsKKwlib29sICAgKm1heF9pbmNsdXNpdmU7CisKKwkvKiB1c2VkIHdoZW4g YnVpbGRpbmcgdGhlIGhpc3RvZ3JhbSAobm90IHNlcmlhbGl6ZWQvZGVzZXJp YWxpemVkKSAqLworCXZvaWQgICAqYnVpbGRfZGF0YTsKKworfSBNVkJ1Y2tl dERhdGE7CisKK3R5cGVkZWYgTVZCdWNrZXREYXRhCSpNVkJ1Y2tldDsKKwor Cit0eXBlZGVmIHN0cnVjdCBNVkhpc3RvZ3JhbURhdGEgeworCisJdWludDMy CQltYWdpYzsJCQkvKiBtYWdpYyBjb25zdGFudCBtYXJrZXIgKi8KKwl1aW50 MzIJCXR5cGU7CQkJLyogdHlwZSBvZiBoaXN0b2dyYW0gKEJBU0lDKSAqLwor CXVpbnQzMiAJCW5idWNrZXRzOwkJLyogbnVtYmVyIG9mIGJ1Y2tldHMgKGJ1 Y2tldHMgYXJyYXkpICovCisJdWludDMyCQluZGltZW5zaW9uczsJLyogbnVt YmVyIG9mIGRpbWVuc2lvbnMgKi8KKworCU1WQnVja2V0ICAgKmJ1Y2tldHM7 CQkvKiBhcnJheSBvZiBidWNrZXRzICovCisKK30gTVZIaXN0b2dyYW1EYXRh OworCit0eXBlZGVmIE1WSGlzdG9ncmFtRGF0YSAqTVZIaXN0b2dyYW07CisK Ky8qCisgKiBIaXN0b2dyYW0gaW4gYSBwYXJ0aWFsbHkgc2VyaWFsaXplZCBm b3JtLCB3aXRoIGRlZHVwbGljYXRlZCBib3VuZGFyeQorICogdmFsdWVzIGV0 Yy4KKyAqCisgKiBUT0RPIGFkZCBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9u IGhlcmUKKyAqLworCit0eXBlZGVmIHN0cnVjdCBNVlNlcmlhbGl6ZWRCdWNr ZXREYXRhIHsKKworCS8qIEZyZXF1ZW5jaWVzIG9mIHRoaXMgYnVja2V0LiAq LworCWZsb2F0CW50dXBsZXM7CS8qIGZyZXF1ZW5jeSBvZiB0dXBsZXMgdHVw bGVzICovCisKKwkvKgorCSAqIEluZm9ybWF0aW9uIGFib3V0IGRpbWVuc2lv bnMgYmVpbmcgTlVMTC1vbmx5LiBOb3QgeWV0IHVzZWQuCisJICovCisJYm9v bCAgICpudWxsc29ubHk7CisKKwkvKiBsb3dlciBib3VuZGFyaWVzIC0gdmFs dWVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5lcXVhbGl0aWVzICov CisJdWludDE2ICptaW47CisJYm9vbCAgICptaW5faW5jbHVzaXZlOworCisJ LyogaW5kZXhlcyBvZiB1cHBlciBib3VuZGFyaWVzIC0gdmFsdWVzIGFuZCBp bmZvcm1hdGlvbiBhYm91dCB0aGUKKwkgKiBpbmVxdWFsaXRpZXMgKGV4Y2x1 c2l2ZSB2cy4gaW5jbHVzaXZlKSAqLworCXVpbnQxNiAqbWF4OworCWJvb2wg ICAqbWF4X2luY2x1c2l2ZTsKKworfSBNVlNlcmlhbGl6ZWRCdWNrZXREYXRh OworCit0eXBlZGVmIE1WU2VyaWFsaXplZEJ1Y2tldERhdGEJKk1WU2VyaWFs aXplZEJ1Y2tldDsKKwordHlwZWRlZiBzdHJ1Y3QgTVZTZXJpYWxpemVkSGlz dG9ncmFtRGF0YSB7CisKKwl1aW50MzIJCW1hZ2ljOwkJCS8qIG1hZ2ljIGNv bnN0YW50IG1hcmtlciAqLworCXVpbnQzMgkJdHlwZTsJCQkvKiB0eXBlIG9m IGhpc3RvZ3JhbSAoQkFTSUMpICovCisJdWludDMyIAkJbmJ1Y2tldHM7CQkv KiBudW1iZXIgb2YgYnVja2V0cyAoYnVja2V0cyBhcnJheSkgKi8KKwl1aW50 MzIJCW5kaW1lbnNpb25zOwkvKiBudW1iZXIgb2YgZGltZW5zaW9ucyAqLwor CisJLyoKKwkgKiBrZWVwIHRoaXMgdGhlIHNhbWUgd2l0aCBNVkhpc3RvZ3Jh bURhdGEsIGJlY2F1c2Ugb2YKKwkgKiBkZXNlcmlhbGl6YXRpb24gKHNhbWUg b2Zmc2V0KQorCSAqLworCU1WU2VyaWFsaXplZEJ1Y2tldCAgICpidWNrZXRz OwkJLyogYXJyYXkgb2YgYnVja2V0cyAqLworCisJLyoKKwkgKiBzZXJpYWxp emVkIGJvdW5kYXJ5IHZhbHVlcywgb25lIGFycmF5IHBlciBkaW1lbnNpb24s IGRlZHVwbGljYXRlZAorCSAqICh0aGUgbWluL21heCBpbmRleGVzIHBvaW50 IGludG8gdGhlc2UgYXJyYXlzKQorCSAqLworCWludAkgICAqbnZhbHVlczsK KwlEYXR1bSAqKnZhbHVlczsKKworfSBNVlNlcmlhbGl6ZWRIaXN0b2dyYW1E YXRhOworCit0eXBlZGVmIE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEgKk1W U2VyaWFsaXplZEhpc3RvZ3JhbTsKKworCisvKiB1c2VkIHRvIGZsYWcgc3Rh dHMgc2VyaWFsaXplZCB0byBieXRlYSAqLworI2RlZmluZSBNVlNUQVRfSElT VF9NQUdJQwkJMHg3RjhDNTY3MAkvKiBtYXJrcyBzZXJpYWxpemVkIGJ5dGVh ICovCisjZGVmaW5lIE1WU1RBVF9ISVNUX1RZUEVfQkFTSUMJMQkJCS8qIGJh c2ljIGhpc3RvZ3JhbSB0eXBlICovCisKKy8qCisgKiBMaW1pdHMgdXNlZCBm b3IgbWF4X2J1Y2tldHMgb3B0aW9uLCBpLmUuIHdlJ3JlIGFsd2F5cyBndWFy YW50ZWVkCisgKiB0byBoYXZlIHNwYWNlIGZvciBhdCBsZWFzdCBNVlNUQVRf SElTVF9NSU5fQlVDS0VUUywgYW5kIHdlIGNhbm5vdAorICogaGF2ZSBtb3Jl IHRoYW4gTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMgYnVja2V0cy4KKyAqCisg KiBUaGlzIGlzIGp1c3QgYSBib3VuZGFyeSBmb3IgdGhlICdtYXgnIHRocmVz aG9sZCAtIHRoZSBhY3R1YWwKKyAqIGhpc3RvZ3JhbSBtYXkgdXNlIGxlc3Mg YnVja2V0cyB0aGFuIE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTLgorICoKKyAq IFRPRE8gVGhlIE1WU1RBVF9ISVNUX01JTl9CVUNLRVRTIHNob3VsZCBiZSBy ZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YKKyAqICAgICAgYXR0cmlidXRlcyAo TVZTVEFUU19NQVhfRElNRU5TSU9OUykgYmVjYXVzZSBvZiBOVUxMLWJ1Y2tl dHMuCisgKiAgICAgIFRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCAyXk4gYnVj a2V0cywgb3RoZXJ3aXNlIHdlIG1heSBiZSB1bmFibGUKKyAqICAgICAgdG8g YnVpbGQgdGhlIE5VTEwgYnVja2V0cy4KKyAqLworI2RlZmluZSBNVlNUQVRf SElTVF9NSU5fQlVDS0VUUwkxMjgJCQkvKiBtaW4gbnVtYmVyIG9mIGJ1Y2tl dHMgKi8KKyNkZWZpbmUgTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMJMTYzODQJ CS8qIG1heCBudW1iZXIgb2YgYnVja2V0cyAqLworCisvKgogICogVE9ETyBN YXliZSBmZXRjaGluZyB0aGUgaGlzdG9ncmFtL01DViBsaXN0IHNlcGFyYXRl bHkgaXMgaW5lZmZpY2llbnQ/CiAgKiAgICAgIENvbnNpZGVyIGFkZGluZyBh IHNpbmdsZSBgZmV0Y2hfc3RhdHNgIG1ldGhvZCwgZmV0Y2hpbmcgYWxsCiAg KiAgICAgIHN0YXRzIHNwZWNpZmllZCB1c2luZyBmbGFncyAob3Igc29tZXRo aW5nIGxpa2UgdGhhdCkuCkBAIC05OSwyMCArMjE2LDI1IEBAIHR5cGVkZWYg TUNWTGlzdERhdGEgKk1DVkxpc3Q7CiAKIE1WRGVwZW5kZW5jaWVzIGxvYWRf bXZfZGVwZW5kZW5jaWVzKE9pZCBtdm9pZCk7CiBNQ1ZMaXN0ICAgICAgICBs b2FkX212X21jdmxpc3QoT2lkIG12b2lkKTsKK01WU2VyaWFsaXplZEhpc3Rv Z3JhbSAgICBsb2FkX212X2hpc3RvZ3JhbShPaWQgbXZvaWQpOwogCiBieXRl YSAqIHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMg ZGVwZW5kZW5jaWVzKTsKIGJ5dGVhICogc2VyaWFsaXplX212X21jdmxpc3Qo TUNWTGlzdCBtY3ZsaXN0LCBpbnQydmVjdG9yICphdHRycywKIAkJCQkJCQkg VmFjQXR0clN0YXRzICoqc3RhdHMpOworYnl0ZWEgKiBzZXJpYWxpemVfbXZf aGlzdG9ncmFtKE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwgaW50MnZlY3RvciAq YXR0cnMsCisJCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMpOwogCiAvKiBk ZXNlcmlhbGl6YXRpb24gb2Ygc3RhdHMgKHNlcmlhbGl6YXRpb24gaXMgcHJp dmF0ZSB0byBhbmFseXplKSAqLwogTVZEZXBlbmRlbmNpZXMJZGVzZXJpYWxp emVfbXZfZGVwZW5kZW5jaWVzKGJ5dGVhICogZGF0YSk7CiBNQ1ZMaXN0CQkJ ZGVzZXJpYWxpemVfbXZfbWN2bGlzdChieXRlYSAqIGRhdGEpOworTVZTZXJp YWxpemVkSGlzdG9ncmFtCWRlc2VyaWFsaXplX212X2hpc3RvZ3JhbShieXRl YSAqIGRhdGEpOwogCiAvKgogICogUmV0dXJucyBpbmRleCBvZiB0aGUgYXR0 cmlidXRlIG51bWJlciB3aXRoaW4gdGhlIHZlY3RvciAoaS5lLiBhCiAgKiBk aW1lbnNpb24gd2l0aGluIHRoZSBzdGF0cykuCiAgKi8KIGludCBtdl9nZXRf aW5kZXgoQXR0ck51bWJlciB2YXJhdHRubywgaW50MnZlY3RvciAqIHN0YWtl eXMpOworaW50MnZlY3RvciogZmluZF9tdl9hdHRudW1zKE9pZCBtdm9pZCwg T2lkICpyZWxpZCk7CiAKIGludDJ2ZWN0b3IqIGZpbmRfbXZfYXR0bnVtcyhP aWQgbXZvaWQsIE9pZCAqcmVsaWQpOwogCkBAIC0xMjEsNiArMjQzLDggQEAg ZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBH X0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2Rl cGVuZGVuY2llc19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIERh dHVtIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhQR19GVU5DVElPTl9BUkdT KTsKIGV4dGVybiBEYXR1bSBwZ19tdl9tY3ZsaXN0X2l0ZW1zKFBHX0ZVTkNU SU9OX0FSR1MpOworZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2hpc3RvZ3Jh bV9pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0ZXJuIERhdHVtIHBnX212 X2hpc3RvZ3JhbV9idWNrZXRzKFBHX0ZVTkNUSU9OX0FSR1MpOwogCiBNVkRl cGVuZGVuY2llcwogYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLApAQCAtMTMw LDEwICsyNTQsMjAgQEAgTUNWTGlzdAogYnVpbGRfbXZfbWN2bGlzdChpbnQg bnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywK IAkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCAqbnVtcm93c19maWx0 ZXJlZCk7CiAKK01WSGlzdG9ncmFtCitidWlsZF9tdl9oaXN0b2dyYW0oaW50 IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMs CisJCQkJICAgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCBudW1yb3dzX3Rv dGFsKTsKKwogdm9pZCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWws IGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCQkJCWludCBuYXR0 cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsKIAotdm9pZCB1cGRh dGVfbXZfc3RhdHMoT2lkIHJlbGlkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRl bmNpZXMsIE1DVkxpc3QgbWN2bGlzdCwKK3ZvaWQgdXBkYXRlX212X3N0YXRz KE9pZCByZWxpZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLAorCQkJ CQkgTUNWTGlzdCBtY3ZsaXN0LCBNVkhpc3RvZ3JhbSBoaXN0b2dyYW0sCiAJ CQkJCSBpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMp OwogCisjaWZkZWYgREVCVUdfTVZISVNUCitleHRlcm4gdm9pZCBkZWJ1Z19o aXN0b2dyYW1fbWF0Y2hlcyhNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0 LCBjaGFyICptYXRjaGVzKTsKKyNlbmRpZgorCisKICNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0u b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzA4 MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL212X2hpc3RvZ3JhbS5vdXQKQEAgLTAsMCArMSwyMDcgQEAKKy0tIGRh dGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBtdl9oaXN0 b2dyYW0gKAorICAgIGEgSU5ULAorICAgIGIgSU5ULAorICAgIGMgSU5UCisp OworLS0gdW5rbm93biBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNTIHM3IE9O IG12X2hpc3RvZ3JhbSAodW5rbm93bl9jb2x1bW4pIFdJVEggKGhpc3RvZ3Jh bSk7CitFUlJPUjogIGNvbHVtbiAidW5rbm93bl9jb2x1bW4iIHJlZmVyZW5j ZWQgaW4gc3RhdGlzdGljcyBkb2VzIG5vdCBleGlzdAorLS0gc2luZ2xlIGNv bHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChh KSBXSVRIIChoaXN0b2dyYW0pOworRVJST1I6ICBtdWx0aXZhcmlhdGUgc3Rh dHMgcmVxdWlyZSAyIG9yIG1vcmUgY29sdW1ucworLS0gc2luZ2xlIGNvbHVt biwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlz dG9ncmFtIChhLCBhKSBXSVRIIChoaXN0b2dyYW0pOworRVJST1I6ICBkdXBs aWNhdGUgY29sdW1uIG5hbWUgaW4gc3RhdGlzdGljcyBkZWZpbml0aW9uCist LSB0d28gY29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNU SUNTIHM3IE9OIG12X2hpc3RvZ3JhbSAoYSwgYSwgYikgV0lUSCAoaGlzdG9n cmFtKTsKK0VSUk9SOiAgZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRp c3RpY3MgZGVmaW5pdGlvbgorLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBT VEFUSVNUSUNTIHM3IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykgV0lUSCAo dW5rbm93bl9vcHRpb24pOworRVJST1I6ICB1bnJlY29nbml6ZWQgU1RBVElT VElDUyBvcHRpb24gInVua25vd25fb3B0aW9uIgorLS0gbWlzc2luZyBoaXN0 b2dyYW0gc3RhdGlzdGljcworQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZf aGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIIChkZXBlbmRlbmNpZXMsIG1heF9i dWNrZXRzPTIwMCk7CitFUlJPUjogIG9wdGlvbiAnaGlzdG9ncmFtJyBpcyBy ZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpCistLSBpbnZhbGlkIG1heF9i dWNrZXRzIHZhbHVlIC8gdG9vIGxvdworQ1JFQVRFIFNUQVRJU1RJQ1Mgczcg T04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIIChtY3YsIG1heF9idWNr ZXRzPTEwKTsKK0VSUk9SOiAgbWluaW11bSBudW1iZXIgb2YgYnVja2V0cyBp cyAxMjgKKy0tIGludmFsaWQgbWF4X2J1Y2tldHMgdmFsdWUgLyB0b28gaGln aAorQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBi LCBjKSBXSVRIIChtY3YsIG1heF9idWNrZXRzPTEwMDAwMCk7CitFUlJPUjog IG1heGltdW0gbnVtYmVyIG9mIGJ1Y2tldHMgaXMgMTYzODQKKy0tIGNvcnJl Y3QgY29tbWFuZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9n cmFtIChhLCBiLCBjKSBXSVRIIChoaXN0b2dyYW0pOworLS0gcmFuZG9tIGRh dGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8g bXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwgbW9kKGks IDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3Rf ZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBo aXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitUUlVO Q0FURSBtdl9oaXN0b2dyYW07CistLSBhID0+IGIsIGEgPT4gYywgYiA9PiBj CitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAs IGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlzdF9lbmFi bGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworIGhpc3Rf ZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK1RSVU5DQVRF IG12X2hpc3RvZ3JhbTsKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5U TyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIw MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFla RSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1 aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworIGhpc3RfZW5hYmxlZCB8IGhp c3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgICAgfCB0CisoMSByb3cpCisKK1RSVU5DQVRFIG12X2hpc3RvZ3Jh bTsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nh biwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBtdl9oaXN0 b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRF IElOREVYIGhpc3RfaWR4IE9OIG12X2hpc3RvZ3JhbSAoYSwgYik7CitBTkFM WVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3Rf YnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwg aGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgICB8IHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9ncmFtIFdIRVJFIGEgPSAxMCBB TkQgYiA9IDU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG12X2hpc3RvZ3Jh bQorICAgUmVjaGVjayBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gaGlzdF9pZHgKKyAgICAgICAg IEluZGV4IENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkKKyg0IHJvd3Mp CisKK0RST1AgVEFCTEUgbXZfaGlzdG9ncmFtOworLS0gdmFybGVuYSB0eXBl ICh0ZXh0KQorQ1JFQVRFIFRBQkxFIG12X2hpc3RvZ3JhbSAoCisgICAgYSBU RVhULAorICAgIGIgVEVYVCwKKyAgICBjIFRFWFQKKyk7CitDUkVBVEUgU1RB VElTVElDUyBzOCBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhp c3RvZ3JhbSk7CistLSByYW5kb20gZGF0YSAobm8gZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMpCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VM RUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtdl9o aXN0b2dyYW07CitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0Cisg IEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hp c3RvZ3JhbSc6OnJlZ2NsYXNzOworIGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVp bHQgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg ICAgfCB0CisoMSByb3cpCisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0t IGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG12X2hpc3Rv Z3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3Rv Z3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9n cmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAK Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8 IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOworLS0gYSA9 PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBT RUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVD VCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xh c3M7CisgaGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykK KworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOworLS0gY2hlY2sgZXhwbGFpbiAo ZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2Nh bikKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8x MDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5ERVggaGlzdF9pZHggT04gbXZf aGlzdG9ncmFtIChhLCBiKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VM RUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdj bGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEgcm93 KQorCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9o aXN0b2dyYW0gV0hFUkUgYSA9ICcxMCcgQU5EIGIgPSAnNSc7CisgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4g b24gbXZfaGlzdG9ncmFtCisgICBSZWNoZWNrIENvbmQ6ICgoYSA9ICcxMCc6 OnRleHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gaGlzdF9pZHgKKyAgICAgICAgIEluZGV4IENvbmQ6ICgo YSA9ICcxMCc6OnRleHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisoNCByb3dz KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKSB3aXRoIE5VTExzCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAg ICAgU0VMRUNUCisgICAgICAgKENBU0UgV0hFTiBpLzEwMDAwID0gMCBUSEVO IE5VTEwgRUxTRSBpLzEwMDAwIEVORCksCisgICAgICAgKENBU0UgV0hFTiBp LzIwMDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzIwMDAwIEVORCksCisgICAg ICAgKENBU0UgV0hFTiBpLzQwMDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzQw MDAwIEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAw KSBzKGkpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlzdF9l bmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdI RVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworIGhp c3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG12X2hpc3RvZ3JhbSBX SEVSRSBhIElTIE5VTEwgQU5EIGIgSVMgTlVMTDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQml0bWFwIEhlYXAgU2NhbiBvbiBtdl9oaXN0b2dyYW0KKyAgIFJlY2hl Y2sgQ29uZDogKChhIElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAgICAgICAgSW5k ZXggQ29uZDogKChhIElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyg0IHJv d3MpCisKK0RST1AgVEFCTEUgbXZfaGlzdG9ncmFtOworLS0gTlVMTCB2YWx1 ZXMgKG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1ucykKK0NSRUFURSBUQUJM RSBtdl9oaXN0b2dyYW0gKAorICAgIGEgSU5ULAorICAgIGIgVEVYVCwKKyAg ICBjIElOVCwKKyAgICBkIFRFWFQKKyk7CitDUkVBVEUgU1RBVElTVElDUyBz OSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMsIGQpIFdJVEggKGhpc3RvZ3Jh bSk7CitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUCisg ICAgICAgICBtb2QoaSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9k KGksIDIwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwK KyAgICAgICAgIG1vZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBt b2QoaSwgMzAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQp CisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhp c3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVs aWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVk IHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSBtdl9o aXN0b2dyYW07CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CmluZGV4IDY2MDcxZDguLjFhMWE0Y2EgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0xMzc1LDcgKzEz NzUsOSBAQCBwZ19tdl9zdGF0c3wgU0VMRUNUIG4ubnNwbmFtZSBBUyBzY2hl bWFuYW1lLAogICAgIGxlbmd0aChzLnN0YWRlcHMpIEFTIGRlcHNieXRlcywK ICAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhzLnN0YWRlcHMp IEFTIGRlcHNpbmZvLAogICAgIGxlbmd0aChzLnN0YW1jdikgQVMgbWN2Ynl0 ZXMsCi0gICAgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHMuc3RhbWN2KSBB UyBtY3ZpbmZvCisgICAgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHMuc3Rh bWN2KSBBUyBtY3ZpbmZvLAorICAgIGxlbmd0aChzLnN0YWhpc3QpIEFTIGhp c3RieXRlcywKKyAgICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhzLnN0 YWhpc3QpIEFTIGhpc3RpbmZvCiAgICBGUk9NICgocGdfbXZfc3RhdGlzdGlj IHMKICAgICAgSk9JTiBwZ19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJl bGlkKSkpCiAgICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4u b2lkID0gYy5yZWxuYW1lc3BhY2UpKSk7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCA4NWQ5NGYxLi5hODg1MjM1IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxl CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAg LTExMiw0ICsxMTIsNCBAQCB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBz dGF0cwogCiAjIHJ1biB0ZXN0cyBvZiBtdWx0aXZhcmlhdGUgc3RhdHMKLXRl c3Q6IG12X2RlcGVuZGVuY2llcyBtdl9tY3YKK3Rlc3Q6IG12X2RlcGVuZGVu Y2llcyBtdl9tY3YgbXZfaGlzdG9ncmFtCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c2VyaWFsX3NjaGVkdWxlCmluZGV4IDY1ODRkNzMuLjJlZmRjZDcgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCkBAIC0xNjQsMyAr MTY0LDQgQEAgdGVzdDogZXZlbnRfdHJpZ2dlcgogdGVzdDogc3RhdHMKIHRl c3Q6IG12X2RlcGVuZGVuY2llcwogdGVzdDogbXZfbWN2Cit0ZXN0OiBtdl9o aXN0b2dyYW0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212 X2hpc3RvZ3JhbS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9oaXN0 b2dyYW0uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjI3YzI1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9tdl9oaXN0b2dyYW0uc3FsCkBAIC0wLDAgKzEsMTc2IEBACistLSBk YXRhIHR5cGUgcGFzc2VkIGJ5IHZhbHVlCitDUkVBVEUgVEFCTEUgbXZfaGlz dG9ncmFtICgKKyAgICBhIElOVCwKKyAgICBiIElOVCwKKyAgICBjIElOVAor KTsKKworLS0gdW5rbm93biBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNTIHM3 IE9OIG12X2hpc3RvZ3JhbSAodW5rbm93bl9jb2x1bW4pIFdJVEggKGhpc3Rv Z3JhbSk7CisKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNT IHM3IE9OIG12X2hpc3RvZ3JhbSAoYSkgV0lUSCAoaGlzdG9ncmFtKTsKKwor LS0gc2luZ2xlIGNvbHVtbiwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJ Q1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBhKSBXSVRIIChoaXN0b2dyYW0p OworCistLSB0d28gY29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBT VEFUSVNUSUNTIHM3IE9OIG12X2hpc3RvZ3JhbSAoYSwgYSwgYikgV0lUSCAo aGlzdG9ncmFtKTsKKworLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBTVEFU SVNUSUNTIHM3IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykgV0lUSCAodW5r bm93bl9vcHRpb24pOworCistLSBtaXNzaW5nIGhpc3RvZ3JhbSBzdGF0aXN0 aWNzCitDUkVBVEUgU1RBVElTVElDUyBzNyBPTiBtdl9oaXN0b2dyYW0gKGEs IGIsIGMpIFdJVEggKGRlcGVuZGVuY2llcywgbWF4X2J1Y2tldHM9MjAwKTsK KworLS0gaW52YWxpZCBtYXhfYnVja2V0cyB2YWx1ZSAvIHRvbyBsb3cKK0NS RUFURSBTVEFUSVNUSUNTIHM3IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykg V0lUSCAobWN2LCBtYXhfYnVja2V0cz0xMCk7CisKKy0tIGludmFsaWQgbWF4 X2J1Y2tldHMgdmFsdWUgLyB0b28gaGlnaAorQ1JFQVRFIFNUQVRJU1RJQ1Mg czcgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIIChtY3YsIG1heF9i dWNrZXRzPTEwMDAwMCk7CisKKy0tIGNvcnJlY3QgY29tbWFuZAorQ1JFQVRF IFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRI IChoaXN0b2dyYW0pOworCistLSByYW5kb20gZGF0YSAobm8gZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMpCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAg ICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIz KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFM WVpFIG12X2hpc3RvZ3JhbTsKKworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlz dF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxp ZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKworVFJVTkNBVEUgbXZf aGlzdG9ncmFtOworCistLSBhID0+IGIsIGEgPT4gYywgYiA9PiBjCitJTlNF UlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAw LCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOwor CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKKworU0VMRUNUIGhpc3RfZW5hYmxl ZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBz dGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKworVFJVTkNB VEUgbXZfaGlzdG9ncmFtOworCistLSBhID0+IGIsIGEgPT4gYworSU5TRVJU IElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwg aS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FO QUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBo aXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJl bGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBt dl9oaXN0b2dyYW07CisKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRt YXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQg SU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAw MDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBz KGkpOworQ1JFQVRFIElOREVYIGhpc3RfaWR4IE9OIG12X2hpc3RvZ3JhbSAo YSwgYik7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKKworU0VMRUNUIGhpc3Rf ZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKwor RVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9n cmFtIFdIRVJFIGEgPSAxMCBBTkQgYiA9IDU7CisKK0RST1AgVEFCTEUgbXZf aGlzdG9ncmFtOworCistLSB2YXJsZW5hIHR5cGUgKHRleHQpCitDUkVBVEUg VEFCTEUgbXZfaGlzdG9ncmFtICgKKyAgICBhIFRFWFQsCisgICAgYiBURVhU LAorICAgIGMgVEVYVAorKTsKKworQ1JFQVRFIFNUQVRJU1RJQ1MgczggT04g bXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIIChoaXN0b2dyYW0pOworCist LSByYW5kb20gZGF0YSAobm8gZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMpCitJ TlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIG1vZChpLCAx MTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG12X2hpc3RvZ3JhbTsK KworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBn X212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0n OjpyZWdjbGFzczsKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOworCistLSBh ID0+IGIsIGEgPT4gYywgYiA9PiBjCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dy YW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG12X2hpc3Rv Z3JhbTsKKworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBG Uk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0 b2dyYW0nOjpyZWdjbGFzczsKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOwor CistLSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFt CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFt OworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00g cGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3Jh bSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0t IGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90 IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0K KyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVY IGhpc3RfaWR4IE9OIG12X2hpc3RvZ3JhbSAoYSwgYik7CitBTkFMWVpFIG12 X2hpc3RvZ3JhbTsKKworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWls dAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdt dl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9ncmFtIFdIRVJFIGEgPSAnMTAn IEFORCBiID0gJzUnOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0t IGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90 IHBsYWluIGluZGV4IHNjYW4pIHdpdGggTlVMTHMKK0lOU0VSVCBJTlRPIG12 X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkv MTAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAg ICAoQ0FTRSBXSEVOIGkvMjAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAw MDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4g TlVMTCBFTFNFIGkvNDAwMDAgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsK KworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBn X212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0n OjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAq IEZST00gbXZfaGlzdG9ncmFtIFdIRVJFIGEgSVMgTlVMTCBBTkQgYiBJUyBO VUxMOworCitEUk9QIFRBQkxFIG12X2hpc3RvZ3JhbTsKKworLS0gTlVMTCB2 YWx1ZXMgKG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1ucykKK0NSRUFURSBU QUJMRSBtdl9oaXN0b2dyYW0gKAorICAgIGEgSU5ULAorICAgIGIgVEVYVCwK KyAgICBjIElOVCwKKyAgICBkIFRFWFQKKyk7CisKK0NSRUFURSBTVEFUSVNU SUNTIHM5IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYywgZCkgV0lUSCAoaGlz dG9ncmFtKTsKKworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNF TEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAoQ0FTRSBX SEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSwyMDAp IEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAgIChDQVNF IFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDYw MCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworCitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKKworU0VMRUNUIGhpc3Rf ZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKwor RFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07Ci0tIAoyLjEuMAoK --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0006-multi-statistics-estimation.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0006-multi-statistics-estimation.patch"; charset="UTF-8" RnJvbSAzYTU2NGRiZjlhYTJjNzM0ZDgwYzVlMzg1ZjEwNWNmOGE0OGRhMWY1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogRnJpLCA2IEZlYiAyMDE1IDAx OjQyOjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCA2LzldIG11bHRpLXN0YXRp c3RpY3MgZXN0aW1hdGlvbgoKVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IGEg cHJvYmFiaWxpdHkgKHdoaWNoIGlzIHdoYXQgc2VsZWN0aXZpdHkgaXMpCmNh biBiZSBzcGxpdCBpbnRvIGEgcHJvZHVjdCBvZiBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzIGxpa2UgdGhpczoKCiAgICBQKEEgJiBCICYgQykgPSBQKEEg JiBCKSAqIFAoQ3xBICYgQikKCklmIHdlIGFzc3VtZSB0aGF0IEMgYW5kIEIg YXJlIGluZGVwZW5kZW50LCB0aGUgbGFzdCBwYXJ0IG1heSBiZQpzaW1wbGlm aWVkIGxpa2UgdGhpcwoKICAgIFAoQSAmIEIgJiBDKSA9IFAoQSAmIEIpICog UChDfEEpCgp3ZSBvbmx5IG5lZWQgcHJvYmFiaWxpdGllcyBvbiBbQSxCXSBh bmQgW0MsQV0gdG8gY29tcHV0ZSB0aGUgb3JpZ2luYWwKcHJvYmFiaWxpdHku CgpUaGUgaW1wbGVtZW50YXRpb24gd29ya3MgaW4gdGhlIG90aGVyIGRpcmVj dGlvbiwgdGhvdWdoLiBXZSBrbm93IHdoYXQKcHJvYmFiaWxpdHkgUChBICYg QiAmIEMpIHdlIG5lZWQgdG8gY29tcHV0ZSwgYW5kIGFsc28gd2hhdCBzdGF0 aXN0aWNzCmFyZSBhdmFpbGFibGUuCgpTbyB3ZSBzZWFyY2ggZm9yIGEgY29t YmluYXRpb25zIG9mIHN0YXRpc3RpY3MsIGNvdmVyaW5nIHRoZSBjbGF1c2Vz IGluCmFuIG9wdGltYWwgd2F5IChtb3N0IGNsYXVzZXMgY292ZXJlZCwgbW9z dCBkZXBlbmRlbmNpZXMgZXhwbG9pdGVkKS4KClRoZXJlIGFyZSB0d28gcG9z c2libGUgYXBwcm9hY2hlcyAtIGV4aGF1c3RpdmUgYW5kIGdyZWVkeS4gVGhl CmV4aGF1c3RpdmUgb25lIHdhbGtzIHRocm91Z2ggYWxsIHBlcm11dGF0aW9u cyBvZiBzdGF0cyB1c2luZyBkeW5hbWljCnByb2dyYW1taW5nLCBzbyBpdCdz IGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgb3B0aW1hbCBzb2x1dGlvbiwgYnV0 IGl0CnNvb24gZ2V0cyB2ZXJ5IHNsb3cgYXMgaXQncyByb3VnaGx5IE8oTiEp LiBUaGUgZHluYW1pYyBwcm9ncmFtbWluZyBtYXkKaW1wcm92ZSB0aGF0IGEg Yml0LCBidXQgaXQncyBzdGlsbCBmYXIgdG9vIGV4cGVuc2l2ZSBmb3IgbGFy Z2UgbnVtYmVycwpvZiBzdGF0aXN0aWNzIChvbiBhIHNpbmdsZSB0YWJsZSku CgpUaGUgZ3JlZWR5IGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSAtIGluIGV2 ZXJ5IHN0ZXAgY2hvb3NlIHRoZSBiZXN0CnNvbHV0aW9uLiBUaGF0IG1heSBu b3QgZ3VhcmFudGVlIHRoZSBiZXN0IHNvbHV0aW9uIGdsb2JhbGx5IChidXQg bWF5YmUKaXQgZG9lcz8pLCBidXQgaXQgb25seSBuZWVkcyBOIHN0ZXBzIHRv IGZpbmQgdGhlIHNvbHV0aW9uLCBzbyBpdCdzIHZlcnkKZmFzdCAocHJvY2Vz c2luZyB0aGUgc2VsZWN0ZWQgc3RhdHMgaXMgdXN1YWxseSB3YXkgbW9yZSBl eHBlbnNpdmUpLgoKVGhlcmUncyBhIEdVQyBmb3Igc2VsZWN0aW5nIHRoZSBz ZWFyY2ggYWxnb3JpdGhtCgogICAgbXZzdGF0X3NlYXJjaCA9IHsnZ3JlZWR5 JywgJ2V4aGF1c3RpdmUnfQoKVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2dyZWVk eScgYXMgdGhhdCdzIG11Y2ggc2FmZXIgKHdpdGggcmVzcGVjdCB0bwpydW50 aW1lKS4gU2VlIGNob29zZV9tdl9zdGF0aXN0aWNzKCkuCgpPbmNlIHdlIGhh dmUgZm91bmQgYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzLCB3ZSBhcHBseSB0 aGVtIHRvIHRoZQpjbGF1c2VzIHVzaW5nIHRoZSBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzLiBXZSBwcm9jZXNzIHRoZSBzZWxlY3RlZApzdGF0cyBvbmUg Ynkgb25lLCBhbmQgZm9yIGVhY2ggd2Ugc2VsZWN0IHRoZSBlc3RpbWF0ZWQg Y2xhdXNlcyBhbmQKY29uZGl0aW9ucy4gU2VlIGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgoKTGltaXRhdGlvbnMKLS0tLS0t LS0tLS0KCkl0J3Mgc3RpbGwgdHJ1ZSB0aGF0IGVhY2ggY2xhdXNlIGF0IGEg Z2l2ZW4gbGV2ZWwgaGFzIHRvIGJlIGNvdmVyZWQgYnkKYSBzaW5nbGUgTVYg c3RhdGlzdGljcy4gU28gd2l0aCB0aGlzIHF1ZXJ5CgogICAgV0hFUkUgKGNs YXVzZTEpIEFORCAoY2xhdXNlMikgQU5EIChjbGF1c2UzIE9SIGNsYXVzZTQp CgplYWNoIHBhcmVudGhlc2l6ZWQgY2xhdXNlIGhhcyB0byBiZSBjb3ZlcmVk IGJ5IGEgc2luZ2xlIG11bHRpdmFyaWF0ZQpzdGF0aXN0aWNzLgoKQ2xhdXNl cyBub3QgY292ZXJlZCBieSBhIHNpbmdsZSBzdGF0aXN0aWNzIGF0IHRoaXMg bGV2ZWwgd2lsbCBiZSBwYXNzZWQKdG8gY2xhdXNlX3NlbGVjdGl2aXR5KCkg YnV0IHRoaXMgd2lsbCB0cmVhdCB0aGVtIGFzIGEgY29sbGVjdGlvbiBvZgpz aW1wbGVyIGNsYXVzZXMgKGNvbm5lY3RlZCBieSBBTkQgb3IgT1IpLCBhbmQg dGhlIGNsYXVzZXMgZnJvbSB0aGUKcHJldmlvdXMgbGV2ZWwgd2lsbCBiZSB1 c2VkIGFzIGNvbmRpdGlvbnMuCgpTbyB1c2luZyB0aGUgc2FtZSBleGFtcGxl LCB0aGUgbGFzdCBjbGF1c2Ugd2lsbCBiZSBwYXNzZWQgdG8KY2xhdXNlX3Nl bGVjdGl2aXR5KCkgd2l0aCAnY2xhdXNlMScgYW5kICdjbGF1c2UyJyBhcyBj b25kaXRpb25zLCBhbmQgaXQKd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgbXVs dGl2YXJpYXRlIHN0YXRzIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIGxpbWl0 YXRpb24gaXMgdGhhdCBhbGwgdGhlIGV4cHJlc3Npb25zIGhhdmUgdG8gYmUK bXYtY29tcGF0aWJsZSwgaS5lLiB0aGVyZSBjYW4ndCBiZSBhIG1peCBvZiBl eHByZXNzaW9ucy4gSWYgdGhpcyBpcwp2aW9sYXRlZCwgdGhlIGNsYXVzZSBt YXkgYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGxldmVsIChqdXN0IGxpa2Ugd2l0 aApsaXN0IG9mIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkgYSBzaW5nbGUgc3Rh dGlzdGljcyksIHdoaWNoIHNwbGl0cyB0aGF0CmludG8gY2xhdXNlcyBoYW5k bGVkIGJ5IG11bHRpdmFyaWF0ZSBzdGF0cyBhbmQgY2xhdXNlcyBoYW5kbGVy IGJ5CnJlZ3VsYXIgc3RhdGlzdGljcy4KCnJld29yayBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5X29yIHRvIGhhbmRsZSBPUi1jbGF1c2VzIGNvcnJlY3RseQoK V2UgbWlnaHQgaW52ZW50IGEgY29tcGxldGVseSBuZXcgc2V0IG9mIGZ1bmN0 aW9ucyBoZXJlLCByZXNlbWJsaW5nCmNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkg YnV0IGFkYXB0aW5nIHRoZSBpZGVhcyB0byBPUi1jbGF1c2VzLgoKQnV0IGx1 Y2tpbHkgd2Uga25vdyB0aGF0IGVhY2ggT1ItY2xhdXNlCgogICAgKGEgT1Ig YiBPUiBjKQoKbWF5IGJlIHJld3JpdHRlbiBhcyBhbiBlcXVpdmFsZW50IEFO RC1jbGF1c2UgdXNpbmcgbmVnYXRpb246CgogICAgTk9UICgoTk9UIGEpIEFO RCAoTk9UIGIpIEFORCAoTk9UIGMpKQoKQW5kIHRoYXQncyBzb21ldGhpbmcg d2UgY2FuIHBhc3MgdG8gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eS4KLS0tCiBj b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMgICAgICAgICAgICB8ICAgIDMg Ky0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgIHwg ICAxMSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMgfCAxOTkwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICB8ICAgMjMg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jIHwg ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAg ICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jICAg ICAgICAgICB8ICAgMjAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUuc3RhdHMgfCAgMTY2ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS91dGls cy9tdnN0YXRzLmggICAgICAgICAgICB8ICAgIDggKwogMTAgZmlsZXMgY2hh bmdlZCwgMTg5MCBpbnNlcnRpb25zKCspLCAzNTggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jIGIvY29u dHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCmluZGV4IGRjMDM1ZDcuLjhmMTFi N2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYwor KysgYi9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKQEAgLTk2OSw3ICs5 NjksOCBAQCBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpiYXNlcmVsLAogCQkJCQkJCSAgIGJhc2VyZWwtPmJhc2VyZXN0 cmljdGluZm8sCiAJCQkJCQkJICAgMCwKIAkJCQkJCQkgICBKT0lOX0lOTkVS LAotCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgTklMKTsKIAogCW5yb3dzID0gY2xhbXBfcm93X2VzdChucm93cyk7CiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5k ZXggNzZkMGUxNS4uZTc4ZjE0MCAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTQ5OCw3ICs0OTgsOCBAQCBwb3N0 Z3Jlc0dldEZvcmVpZ25SZWxTaXplKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCQkJCSBmcGluZm8tPmxvY2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJ CSBiYXNlcmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJCQkgSk9JTl9JTk5FUiwK LQkJCQkJCQkJCQkJCQkgTlVMTCk7CisJCQkJCQkJCQkJCQkJIE5VTEwsCisJ CQkJCQkJCQkJCQkJIE5JTCk7CiAKIAljb3N0X3F1YWxfZXZhbCgmZnBpbmZv LT5sb2NhbF9jb25kc19jb3N0LCBmcGluZm8tPmxvY2FsX2NvbmRzLCByb290 KTsKIApAQCAtMjE0OSw3ICsyMTUwLDggQEAgZXN0aW1hdGVfcGF0aF9jb3N0 X3NpemUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJICAgbG9jYWxf cGFyYW1fam9pbl9jb25kcywKIAkJCQkJCQkJCQkgICBmb3JlaWducmVsLT5y ZWxpZCwKIAkJCQkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCSAg IE5VTEwpOworCQkJCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJCQkJICAgTklM KTsKIAkJbG9jYWxfc2VsICo9IGZwaW5mby0+bG9jYWxfY29uZHNfc2VsOwog CiAJCXJvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3MgKiBsb2NhbF9zZWwpOwpA QCAtMzYxOCw3ICszNjIwLDggQEAgcG9zdGdyZXNHZXRGb3JlaWduSm9pblBh dGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCSBmcGluZm8t PmxvY2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJCSAwLAogCQkJCQkJCQkJCQkJ CSBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCQkJCSBOVUxMKTsKKwkJCQkJCQkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkJCQkJCQkgTklMKTsKIAljb3N0X3F1YWxf ZXZhbCgmZnBpbmZvLT5sb2NhbF9jb25kc19jb3N0LCBmcGluZm8tPmxvY2Fs X2NvbmRzLCByb290KTsKIAogCS8qCkBAIC0zNjM3LDcgKzM2NDAsNyBAQCBw b3N0Z3Jlc0dldEZvcmVpZ25Kb2luUGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCSAqLwogCQlmcGluZm8tPmpvaW5jbGF1c2Vfc2VsID0gY2xhdXNlbGlz dF9zZWxlY3Rpdml0eShyb290LCBmcGluZm8tPmpvaW5jbGF1c2VzLAogCQkJ CQkJCQkJCQkJCQkwLCBmcGluZm8tPmpvaW50eXBlLAotCQkJCQkJCQkJCQkJ CQlleHRyYS0+c2ppbmZvKTsKKwkJCQkJCQkJCQkJCQkJZXh0cmEtPnNqaW5m bywgTklMKTsKIAogCX0KIAlmcGluZm8tPnNlcnZlciA9IEdldEZvcmVpZ25T ZXJ2ZXIoam9pbnJlbC0+c2VydmVyaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCAwZGUyNDE4Li5j MWI4OTk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jbGF1c2VzZWwuYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgInV0 aWxzL3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK IAorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorCiAKIC8qCiAgKiBEYXRhIHN0 cnVjdHVyZSBmb3IgYWNjdW11bGF0aW5nIGluZm8gYWJvdXQgcG9zc2libGUg cmFuZ2UtcXVlcnkKQEAgLTQ0LDYgKzQ2LDEzIEBAIHR5cGVkZWYgc3RydWN0 IFJhbmdlUXVlcnlDbGF1c2UKIAlTZWxlY3Rpdml0eSBoaWJvdW5kOwkJLyog U2VsZWN0aXZpdHkgb2YgYSB2YXIgPCBzb21ldGhpbmcgY2xhdXNlICovCiB9 IFJhbmdlUXVlcnlDbGF1c2U7CiAKK3N0YXRpYyBTZWxlY3Rpdml0eSBjbGF1 c2VsaXN0X3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQkgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCQkJIGludCB2YXJS ZWxpZCwKKwkJCQkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJ CQkJCQkgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQkJCSBM aXN0ICpjb25kaXRpb25zKTsKKwogc3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1 c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAqY2xhdXNlLAog CQkJICAgYm9vbCB2YXJvbmxlZnQsIGJvb2wgaXNMVHNlbCwgU2VsZWN0aXZp dHkgczIpOwogCkBAIC02MCwyMyArNjksMjUgQEAgc3RhdGljIGludCBjb3Vu dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBpbnQg dHlwZSk7CiAKIHN0YXRpYyBpbnQgY291bnRfdmFybm9zKExpc3QgKmNsYXVz ZXMsIEluZGV4ICpyZWxpZCk7CiAKK3N0YXRpYyBMaXN0ICpjbGF1c2VzX21h dGNoaW5nX3N0YXRpc3RpYyhMaXN0ICoqY2xhdXNlcywgTVZTdGF0aXN0aWNJ bmZvICpzdGF0aXN0aWMsCisJCQkJCQkgICBJbmRleCByZWxpZCwgaW50IHR5 cGVzLCBib29sIHJlbW92ZSk7CisKIHN0YXRpYyBMaXN0ICpjbGF1c2VsaXN0 X2FwcGx5X2RlcGVuZGVuY2llcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq Y2xhdXNlcywKIAkJCQkJCQkJCUluZGV4IHJlbGlkLCBMaXN0ICpzdGF0cyk7 CiAKLXN0YXRpYyBNVlN0YXRpc3RpY0luZm8gKmNob29zZV9tdl9zdGF0aXN0 aWNzKExpc3QgKm12c3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcyk7Ci0KLXN0 YXRpYyBMaXN0ICpjbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpy b290LCBJbmRleCByZWxpZCwKLQkJCQkJCQkJIExpc3QgKmNsYXVzZXMsIExp c3QgKiptdmNsYXVzZXMsCi0JCQkJCQkJCSBNVlN0YXRpc3RpY0luZm8gKm12 c3RhdHMsIGludCB0eXBlcyk7Ci0KIHN0YXRpYyBTZWxlY3Rpdml0eSBjbGF1 c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAotCQkJ CQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRz KTsKKwkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgTGlzdCAq Y2xhdXNlcywKKwkJCQkJCQkJCUxpc3QgKmNvbmRpdGlvbnMsIGJvb2wgaXNf b3IpOwogCiBzdGF0aWMgU2VsZWN0aXZpdHkgY2xhdXNlbGlzdF9tdl9zZWxl Y3Rpdml0eV9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LAotCQkJCQkJCQkJ TGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLAotCQkJ CQkJCQkJYm9vbCAqZnVsbG1hdGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKTsK KwkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywKKwkJCQkJCQkJ CUxpc3QgKmNsYXVzZXMsIExpc3QgKmNvbmRpdGlvbnMsCisJCQkJCQkJCQli b29sIGlzX29yLCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkJCQlTZWxlY3Rp dml0eSAqbG93c2VsKTsKIHN0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9vdCwK LQkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZz dGF0cyk7CisJCQkJCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCisJ CQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zLAorCQkJ CQkJCQkJYm9vbCBpc19vcik7CiAKIHN0YXRpYyBpbnQgdXBkYXRlX21hdGNo X2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1 c2VzLAogCQkJCQkJCQkJaW50MnZlY3RvciAqc3Rha2V5cywgTUNWTGlzdCBt Y3ZsaXN0LApAQCAtOTAsMTAgKzEwMSwzMyBAQCBzdGF0aWMgaW50IHVwZGF0 ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLAogCQkJCQkJCQkJaW50IG5tYXRjaGVzLCBjaGFyICog bWF0Y2hlcywKIAkJCQkJCQkJCWJvb2wgaXNfb3IpOwogCisvKgorICogRGVz Y3JpYmVzIGEgY29tYmluYXRpb24gb2YgbXVsdGlwbGUgc3RhdGlzdGljcyB0 byBjb3ZlciBhdHRyaWJ1dGVzCisgKiByZWZlcmVuY2VkIGJ5IHRoZSBjbGF1 c2VzLiBUaGUgYXJyYXkgJ3N0YXRzJyAod2l0aCBuc3RhdHMgZWxlbWVudHMp CisgKiBsaXN0cyBhdHRyaWJ1dGVzIChpbiB0aGUgb3JkZXIgYXMgdGhleSBh cmUgYXBwbGllZCksIGFuZCBudW1iZXIgb2YKKyAqIGNsYXVzZSBhdHRyaWJ1 dGVzIGNvdmVyZWQgYnkgdGhpcyBzb2x1dGlvbi4KKyAqCisgKiBjaG9vc2Vf bXZfc3RhdGlzdGljc19leGhhdXN0aXZlKCkgdXNlcyB0aGlzIHRvIHRyYWNr IGJvdGggdGhlIGN1cnJlbnQKKyAqIGFuZCB0aGUgYmVzdCBzb2x1dGlvbnMs IHdoaWxlIHdhbGtpbmcgdGhyb3VnaCB0aGUgc3RhdGUgb2YgcG9zc2libGUK KyAqIGNvbWJpbmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBtdl9zb2x1 dGlvbl90IHsKKwlpbnQJCW5jbGF1c2VzOwkJLyogbnVtYmVyIG9mIGNsYXVz ZXMgY292ZXJlZCAqLworCWludAkJbmNvbmRpdGlvbnM7CS8qIG51bWJlciBv ZiBjb25kaXRpb25zIGNvdmVyZWQgKi8KKwlpbnQJCW5zdGF0czsJCQkvKiBu dW1iZXIgb2Ygc3RhdHMgYXBwbGllZCAqLworCWludAkgICAqc3RhdHM7CQkJ Lyogc3RhdHMgKGluIHRoZSBhcHBseSBvcmRlcikgKi8KK30gbXZfc29sdXRp b25fdDsKKworc3RhdGljIExpc3QgKmNob29zZV9tdl9zdGF0aXN0aWNzKFBs YW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJCQkJCQlMaXN0ICpt dnN0YXRzLCBMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zKTsKKwog c3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQgdHlwZSk7 CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVySW5mbyAqcm9v dCwgSW5kZXggcmVsaWQpOwogCitzdGF0aWMgYm9vbCBzdGF0c190eXBlX21h dGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0LCBpbnQgdHlwZSk7CisKK2lu dCBtdnN0YXRfc2VhcmNoX3R5cGUgPSBNVlNUQVRfU0VBUkNIX0dSRUVEWTsK IAogLyogdXNlZCBmb3IgbWVyZ2luZyBiaXRtYXBzIC0gQU5EIChtaW4pLCBP UiAobWF4KSAqLwogI2RlZmluZSBNQVgoeCwgeSkgKCgoeCkgPiAoeSkpID8g KHgpIDogKHkpKQpAQCAtMTY4LDE0ICsyMDIsMTUgQEAgY2xhdXNlbGlzdF9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICAgTGlzdCAq Y2xhdXNlcywKIAkJCQkJICAgaW50IHZhclJlbGlkLAogCQkJCQkgICBKb2lu VHlwZSBqb2ludHlwZSwKLQkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8pCisJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkg ICBMaXN0ICpjb25kaXRpb25zKQogewogCVNlbGVjdGl2aXR5IHMxID0gMS4w OwogCVJhbmdlUXVlcnlDbGF1c2UgKnJxbGlzdCA9IE5VTEw7CiAJTGlzdENl bGwgICAqbDsKIAogCS8qIHByb2Nlc3NpbmcgbXYgc3RhdHMgKi8KLQlPaWQJ CQlyZWxpZCA9IEludmFsaWRPaWQ7CisJSW5kZXgJCXJlbGlkID0gSW52YWxp ZE9pZDsKIAogCS8qIGxpc3Qgb2YgbXVsdGl2YXJpYXRlIHN0YXRzIG9uIHRo ZSByZWxhdGlvbiAqLwogCUxpc3QJICAgKnN0YXRzID0gTklMOwpAQCAtMTkx LDEyICsyMjYsMTMgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwKIAkJc3RhdHMgPSBmaW5kX3N0YXRzKHJvb3QsIHJlbGlk KTsKIAogCS8qCi0JICogSWYgdGhlcmUncyBleGFjdGx5IG9uZSBjbGF1c2Us IHRoZW4gbm8gdXNlIGluIHRyeWluZyB0byBtYXRjaCB1cCBwYWlycywKLQkg KiBzbyBqdXN0IGdvIGRpcmVjdGx5IHRvIGNsYXVzZV9zZWxlY3Rpdml0eSgp LgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xhdXNlLCB0aGVuIG5v IHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAKKwkgKiBwYWlycywgb3IgbWF0 Y2hpbmcgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MsIHNvIGp1c3QgZ28gZGly ZWN0bHkKKwkgKiB0byBjbGF1c2Vfc2VsZWN0aXZpdHkoKS4KIAkgKi8KIAlp ZiAobGlzdF9sZW5ndGgoY2xhdXNlcykgPT0gMSkKIAkJcmV0dXJuIGNsYXVz ZV9zZWxlY3Rpdml0eShyb290LCAoTm9kZSAqKSBsaW5pdGlhbChjbGF1c2Vz KSwKLQkJCQkJCQkJICB2YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbyk7CisJ CQkJCQkJCSAgdmFyUmVsaWQsIGpvaW50eXBlLCBzamluZm8sIGNvbmRpdGlv bnMpOwogCiAJLyoKIAkgKiBBcHBseSBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cywgYnV0IGZpcnN0IGNoZWNrIHRoYXQgdGhlcmUgYXJlIHNvbWUgc3RhdHMK QEAgLTIyOCwzMSArMjY0LDk2IEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko UGxhbm5lckluZm8gKnJvb3QsCiAJCShjb3VudF9tdl9hdHRudW1zKGNsYXVz ZXMsIHJlbGlkLAogCQkJCQkJICBNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9D TEFVU0VfVFlQRV9ISVNUKSA+PSAyKSkKIAl7Ci0JCS8qIGNvbGxlY3QgYXR0 cmlidXRlcyBmcm9tIHRoZSBjb21wYXRpYmxlIGNvbmRpdGlvbnMgKi8KLQkJ Qml0bWFwc2V0ICptdmF0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xh dXNlcywgcmVsaWQsCi0JCQkJCQkJCQkJCU1WX0NMQVVTRV9UWVBFX01DViB8 IE1WX0NMQVVTRV9UWVBFX0hJU1QpOworCQlMaXN0Q2VsbCAqczsKKworCQkv KgorCQkgKiBDb3B5IHRoZSBjb25kaXRpb25zIHdlIGdvdCBmcm9tIHRoZSB1 cHBlciBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKwkJICogc28gdGhh dCB3ZSBjYW4gYWRkIGxvY2FsIGNvbmRpdGlvbnMgdG8gaXQgKHdlIG5lZWQg dG8ga2VlcCB0aGUKKwkJICogb3JpZ2luYWwgbGlzdCBpbnRhY3QsIGZvciBz aWJsaW5nIGV4cHJlc3Npb25zIC0gb3RoZXIgZXhwcmVzc2lvbnMKKwkJICog YXQgdGhlIHNhbWUgbGV2ZWwpLgorCQkgKi8KKwkJTGlzdCAqY29uZGl0aW9u c19sb2NhbCA9IGxpc3RfY29weShjb25kaXRpb25zKTsKIAotCQkvKiBhbmQg c2VhcmNoIGZvciB0aGUgc3RhdGlzdGljIGNvdmVyaW5nIHRoZSBtb3N0IGF0 dHJpYnV0ZXMgKi8KLQkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXQgPSBjaG9v c2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZhdHRudW1zKTsKKwkJLyogZmlu ZCB0aGUgYmVzdCBjb21iaW5hdGlvbiBvZiBzdGF0aXN0aWNzICovCisJCUxp c3QgKnNvbHV0aW9uID0gY2hvb3NlX212X3N0YXRpc3RpY3Mocm9vdCwgcmVs aWQsIHN0YXRzLAorCQkJCQkJCQkJCQkgIGNsYXVzZXMsIGNvbmRpdGlvbnMp OwogCi0JCWlmIChtdnN0YXQgIT0gTlVMTCkJLyogd2UgaGF2ZSBhIG1hdGNo aW5nIHN0YXRzICovCisJCS8qCisJCSAqIFdlIGhhdmUgYSBnb29kIHNvbHV0 aW9uLCB3aGljaCBpcyBtZXJlbHkgYSBsaXN0IG9mIHN0YXRpc3RpY3MgdGhh dAorCQkgKiB3ZSBuZWVkIHRvIGFwcGx5LiBXZSdsbCBhcHBseSB0aGUgc3Rh dGlzdGljcyBvbmUgYnkgb25lIChpbiB0aGUgb3JkZXIKKwkJICogYXMgdGhl eSBhcHBlYXIgaW4gdGhlIGxpc3QpLCBhbmQgZm9yIGVhY2ggc3RhdGlzdGlj IHdlJ2xsCisJCSAqCisJCSAqICgxKSBmaW5kIGNsYXVzZXMgY29tcGF0aWJs ZSB3aXRoIHRoZSBzdGF0aXN0aWMgKGFuZCByZW1vdmUgdGhlbQorCQkgKiAg ICAgZnJvbSB0aGUgbGlzdCkKKwkJICoKKwkJICogKDIpIGZpbmQgbG9jYWwg Y29uZGl0aW9ucyBjb21wYXRpYmxlIHdpdGggdGhlIHN0YXRpc3RpYworCQkg KgorCQkgKiAoMykgZG8gdGhlIGVzdGltYXRpb24gUChjbGF1c2VzIHwgY29u ZGl0aW9ucykKKwkJICoKKwkJICogKDQpIGFwcGVuZCB0aGUgZXN0aW1hdGVk IGNsYXVzZXMgdG8gbG9jYWwgY29uZGl0aW9ucworCQkgKgorCQkgKiBjb250 aW51b3VzbHkgbW9kaWZ5IAorCQkgKi8KKwkJZm9yZWFjaCAocywgc29sdXRp b24pCiAJCXsKLQkJCS8qIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIG11bHRp LXZhcmlhdGUgc3RhdHMgKi8KLQkJCUxpc3QJKm12Y2xhdXNlcyA9IE5JTDsK KwkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0ID0gKE1WU3RhdGlzdGljSW5m byAqKWxmaXJzdChzKTsKIAotCQkJLyogc3BsaXQgdGhlIGNsYXVzZWxpc3Qg aW50byByZWd1bGFyIGFuZCBtdi1jbGF1c2VzICovCi0JCQljbGF1c2VzID0g Y2xhdXNlbGlzdF9tdl9zcGxpdChyb290LCByZWxpZCwgY2xhdXNlcywgJm12 Y2xhdXNlcywKLQkJCQkJCQkJCQkgIG12c3RhdCwgTVZfQ0xBVVNFX1RZUEVf TUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCk7CisJCQkvKiBjbGF1c2VzIGNv bXBhdGlibGUgd2l0aCB0aGUgc3RhdGlzdGljIHdlJ3JlIGFwcGx5aW5nIHJp Z2h0IG5vdyAqLworCQkJTGlzdAkqc3RhdF9jbGF1c2VzID0gTklMOworCQkJ TGlzdAkqc3RhdF9jb25kaXRpb25zID0gTklMOwogCi0JCQkvKiB3ZSd2ZSBj aG9zZW4gdGhlIGhpc3RvZ3JhbSB0byBtYXRjaCB0aGUgY2xhdXNlcyAqLwot CQkJQXNzZXJ0KG12Y2xhdXNlcyAhPSBOSUwpOworCQkJLyoKKwkJCSAqIEZp bmQgY2xhdXNlcyBhbmQgY29uZGl0aW9ucyBtYXRjaGluZyB0aGUgc3RhdGlz dGljIC0gdGhlIGNsYXVzZXMKKwkJCSAqIG5lZWQgdG8gYmUgcmVtb3ZlZCBm cm9tIHRoZSBsaXN0LCB3aGlsZSBjb25kaXRpb25zIHNob3VsZCByZW1haW4K KwkJCSAqIHRoZXJlIChzbyB0aGF0IHdlIGNhbiBhcHBseSB0aGVtIHJlcGVh dGVkbHkpLgorCQkJICovCisJCQlzdGF0X2NsYXVzZXMKKwkJCQk9IGNsYXVz ZXNfbWF0Y2hpbmdfc3RhdGlzdGljKCZjbGF1c2VzLCBtdnN0YXQsIHJlbGlk LAorCQkJCQkJCQkJCQkgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNF X1RZUEVfSElTVCwKKwkJCQkJCQkJCQkJIHRydWUpOworCisJCQlzdGF0X2Nv bmRpdGlvbnMKKwkJCQk9IGNsYXVzZXNfbWF0Y2hpbmdfc3RhdGlzdGljKCZj b25kaXRpb25zX2xvY2FsLCBtdnN0YXQsIHJlbGlkLAorCQkJCQkJCQkJCQkg TVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCwKKwkJ CQkJCQkJCQkJIGZhbHNlKTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGdvdCBu byBjbGF1c2VzIHRvIGVzdGltYXRlLCB3ZSd2ZSBkb25lIHNvbWV0aGluZyB3 cm9uZywKKwkJCSAqIGVpdGhlciBkdXJpbmcgdGhlIG9wdGltaXphdGlvbiwg ZGV0ZWN0aW5nIGNvbXBhdGlibGUgY2xhdXNlLCBvcgorCQkJICogc29tZXdo ZXJlIGVsc2UuCisJCQkgKgorCQkJICogQWxzbywgd2UgbmVlZCBhdCBsZWFz dCB0d28gYXR0cmlidXRlcyBpbiBjbGF1c2VzIGFuZCBjb25kaXRpb25zLgor CQkJICovCisJCQlBc3NlcnQoc3RhdF9jbGF1c2VzICE9IE5JTCk7CisJCQlB c3NlcnQoY291bnRfbXZfYXR0bnVtcyhsaXN0X3VuaW9uKHN0YXRfY2xhdXNl cywgc3RhdF9jb25kaXRpb25zKSwKKwkJCQkJCQkJcmVsaWQsIE1WX0NMQVVT RV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpID49IDIpOwogCiAJ CQkvKiBjb21wdXRlIHRoZSBtdWx0aXZhcmlhdGUgc3RhdHMgKi8KLQkJCXMx ICo9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkocm9vdCwgbXZjbGF1c2Vz LCBtdnN0YXQpOworCQkJczEgKj0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0 eShyb290LCBtdnN0YXQsCisJCQkJCQkJCQkJCXN0YXRfY2xhdXNlcywgc3Rh dF9jb25kaXRpb25zLAorCQkJCQkJCQkJCQlmYWxzZSk7IC8qIEFORCAqLwor CisJCQkvKgorCQkJICogQWRkIHRoZSBuZXcgY2xhdXNlcyB0byB0aGUgbG9j YWwgY29uZGl0aW9ucywgc28gdGhhdCB3ZSBjYW4gdXNlCisJCQkgKiB0aGVt IGZvciB0aGUgc3Vic2VxdWVudCBzdGF0aXN0aWNzLiBXZSBvbmx5IGFkZCB0 aGUgY2xhdXNlcywKKwkJCSAqIGJlY2F1c2UgdGhlIGNvbmRpdGlvbnMgYXJl IGFscmVhZHkgdGhlcmUgKG9yIHNob3VsZCBiZSkuCisJCQkgKi8KKwkJCWNv bmRpdGlvbnNfbG9jYWwgPSBsaXN0X2NvbmNhdChjb25kaXRpb25zX2xvY2Fs LCBzdGF0X2NsYXVzZXMpOwogCQl9CisKKwkJLyogZnJvbSBub3cgb24sIHdv cmsgb25seSB3aXRoIHRoZSAnbG9jYWwnIGxpc3Qgb2YgY29uZGl0aW9ucyAq LworCQljb25kaXRpb25zID0gY29uZGl0aW9uc19sb2NhbDsKIAl9CiAKIAkv KgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xhdXNlLCB0aGVuIG5v IHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAKKwkgKiBwYWlycywgc28ganVz dCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2VsZWN0aXZpdHkoKS4KKwkgKi8K KwlpZiAobGlzdF9sZW5ndGgoY2xhdXNlcykgPT0gMSkKKwkJcmV0dXJuIHMx ICogY2xhdXNlX3NlbGVjdGl2aXR5KHJvb3QsIChOb2RlICopIGxpbml0aWFs KGNsYXVzZXMpLAorCQkJCQkJCQkJICAgdmFyUmVsaWQsIGpvaW50eXBlLCBz amluZm8sIGNvbmRpdGlvbnMpOworCisJLyoKIAkgKiBJbml0aWFsIHNjYW4g b3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhhdCBkb2Vzbid0IGxvb2sgbGlr ZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVlcnkgY2xhdXNlIGdldHMgbXVs dGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0ZW4uIEFueXRoaW5nIHRoYXQK IAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50byBhbiBycWxpc3QgZW50cnku CkBAIC0yNjQsNyArMzY1LDggQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQ bGFubmVySW5mbyAqcm9vdCwKIAkJU2VsZWN0aXZpdHkgczI7CiAKIAkJLyog QWx3YXlzIGNvbXB1dGUgdGhlIHNlbGVjdGl2aXR5IHVzaW5nIGNsYXVzZV9z ZWxlY3Rpdml0eSAqLwotCQlzMiA9IGNsYXVzZV9zZWxlY3Rpdml0eShyb290 LCBjbGF1c2UsIHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvKTsKKwkJczIg PSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwgY2xhdXNlLCB2YXJSZWxpZCwg am9pbnR5cGUsIHNqaW5mbywKKwkJCQkJCQkJY29uZGl0aW9ucyk7CiAKIAkJ LyoKIAkJICogQ2hlY2sgZm9yIGJlaW5nIHBhc3NlZCBhIFJlc3RyaWN0SW5m by4KQEAgLTQyMyw2ICs1MjUsNTUgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0 eShQbGFubmVySW5mbyAqcm9vdCwKIH0KIAogLyoKKyAqIFNpbWlsYXIgdG8g Y2xhdXNlbGlzdF9zZWxlY3Rpdml0eSgpLCBidXQgZm9yIE9SLWNsYXVzZXMu IFdlIGNhbid0IHNpbXBseSB1c2UKKyAqIHRoZSBzYW1lIG11bHRpLXN0YXRp c3RpYyBlc3RpbWF0aW9uIGxvZ2ljIGZvciBBTkQtY2xhdXNlcywgYXQgbGVh c3Qgbm90CisgKiBkaXJlY3RseSwgYmVjYXVzZSB0aGVyZSBhcmUgYSBmZXcg a2V5IGRpZmZlcmVuY2VzOgorICoKKyAqICAgLSBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyBkb24ndCByZWFsbHkgYXBwbHkgdG8gT1ItY2xhdXNlcworICoK KyAqICAgLSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KCkgaXMgYmFzZWQgb24g ZGVjb21wb3NpbmcgdGhlIHNlbGVjdGl2aXR5IGludG8KKyAqICAgICBhIHNl cXVlbmNlIG9mIGNvbmRpdGlvbmFsIHByb2JhYmlsaXRpZXMgKHNlbGVjdGl2 aXRpZXMpLCBidXQgdGhhdCBjYW4KKyAqICAgICBiZSBkb25lIG9ubHkgZm9y IEFORC1jbGF1c2VzCisgKgorICogV2UgbWlnaHQgaW52ZW50IGEgc2ltaWxh ciBpbmZyYXN0cnVjdHVyZSBmb3Igb3B0aW1pemluZyBPUi1jbGF1c2VzLCBk b2luZworICogc29tZXRoaW5nIHNpbWlsYXIgdG8gd2hhdCBjbGF1c2Vfc2Vs ZWN0aXZpdHkgZG9lcyBmb3IgQU5ELWNsYXVzZXMsIGJ1dAorICogbHVja2ls eSB3ZSBrbm93IHRoYXQgZWFjaCBkaXNqdW5jdGl2ZSBub3JtYWwgZm9ybSAo YWthIE9SLWNsYXVzZSkKKyAqCisgKiAgICAgKGEgT1IgYiBPUiBjKQorICoK KyAqIG1heSBiZSByZXdyaXR0ZW4gYXMgYW4gZXF1aXZhbGVudCBjb25qdW5j dGl2ZSBub3JtYWwgZm9ybSAoYWthIEFORC1jbGF1c2UpCisgKiBieSB1c2lu ZyBuZWdhdGlvbjoKKyAqCisgKiAgICAgTk9UICgoTk9UIGEpIEFORCAoTk9U IGIpIEFORCAoTk9UIGMpKQorICoKKyAqIEFuZCB0aGF0J3Mgc29tZXRoaW5n IHdlIGNhbiBwYXNzIHRvIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkgYW5kIGxl dCBpdCBkbworICogYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLgorICovCitzdGF0 aWMgU2VsZWN0aXZpdHkKK2NsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3IoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCSAgIExpc3QgKmNsYXVzZXMsCisJCQkJ CSAgIGludCB2YXJSZWxpZCwKKwkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUs CisJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkgICBM aXN0ICpjb25kaXRpb25zKQoreworCUxpc3QJICAgKmFyZ3MgPSBOSUw7CisJ TGlzdENlbGwgICAqbDsKKwlFeHByCSAgICpleHByOworCisJLyogYnVpbGQg YXJndW1lbnRzIGZvciB0aGUgQU5ELWNsYXVzZSBieSBuZWdhdGluZyBhcmdz IG9mIHRoZSBPUi1jbGF1c2UgKi8KKwlmb3JlYWNoIChsLCBjbGF1c2VzKQor CQlhcmdzID0gbGFwcGVuZChhcmdzLCBtYWtlQm9vbEV4cHIoTk9UX0VYUFIs IGxpc3RfbWFrZTEobGZpcnN0KGwpKSwgLTEpKTsKKworCS8qIGFuZCB0aGVu IHRoZSBhY3R1YWwgT1ItY2xhdXNlIG9uIHRoZSBuZWdhdGVkIGFyZ3MgKi8K KwlleHByID0gbWFrZUJvb2xFeHByKEFORF9FWFBSLCBhcmdzLCAtMSk7CisK KwkvKiBpbnN0ZWFkIG9mIGNvbnN0cnVjdGluZyBOT1QgZXhwcmVzc2lvbiwg anVzdCBkbyAoMS4wIC0gcykgKi8KKwlyZXR1cm4gMS4wIC0gY2xhdXNlbGlz dF9zZWxlY3Rpdml0eShyb290LCBsaXN0X21ha2UxKGV4cHIpLCB2YXJSZWxp ZCwKKwkJCQkJCQkJCQlqb2ludHlwZSwgc2ppbmZvLCBjb25kaXRpb25zKTsK K30KKworLyoKICAqIGFkZFJhbmdlQ2xhdXNlIC0tLSBhZGQgYSBuZXcgcmFu Z2UgY2xhdXNlIGZvciBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5CiAgKgogICog SGVyZSBpcyB3aGVyZSB3ZSB0cnkgdG8gbWF0Y2ggdXAgcGFpcnMgb2YgcmFu Z2UtcXVlcnkgY2xhdXNlcwpAQCAtNjI5LDcgKzc4MCw4IEBAIGNsYXVzZV9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkgICBOb2RlICpj bGF1c2UsCiAJCQkJICAgaW50IHZhclJlbGlkLAogCQkJCSAgIEpvaW5UeXBl IGpvaW50eXBlLAotCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQor CQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCSAgIExpc3Qg KmNvbmRpdGlvbnMpCiB7CiAJU2VsZWN0aXZpdHkgczEgPSAwLjU7CQkvKiBk ZWZhdWx0IGZvciBhbnkgdW5oYW5kbGVkIGNsYXVzZSB0eXBlICovCiAJUmVz dHJpY3RJbmZvICpyaW5mbyA9IE5VTEw7CkBAIC03NDksNyArOTAxLDggQEAg Y2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkgIChOb2RlICopIGdldF9ub3RjbGF1c2VhcmcoKEV4cHIgKikgY2xhdXNl KSwKIAkJCQkJCQkJCSAgdmFyUmVsaWQsCiAJCQkJCQkJCQkgIGpvaW50eXBl LAotCQkJCQkJCQkJICBzamluZm8pOworCQkJCQkJCQkJICBzamluZm8sCisJ CQkJCQkJCQkgIGNvbmRpdGlvbnMpOwogCX0KIAllbHNlIGlmIChhbmRfY2xh dXNlKGNsYXVzZSkpCiAJewpAQCAtNzU4LDI5ICs5MTEsMTggQEAgY2xhdXNl X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJKChC b29sRXhwciAqKSBjbGF1c2UpLT5hcmdzLAogCQkJCQkJCQkJdmFyUmVsaWQs CiAJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCXNqaW5mbyk7CisJCQkJ CQkJCQlzamluZm8sCisJCQkJCQkJCQljb25kaXRpb25zKTsKIAl9CiAJZWxz ZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkpCiAJewotCQkvKgotCQkgKiBTZWxl Y3Rpdml0aWVzIGZvciBhbiBPUiBjbGF1c2UgYXJlIGNvbXB1dGVkIGFzIHMx K3MyIC0gczEqczIgdG8KLQkJICogYWNjb3VudCBmb3IgdGhlIHByb2JhYmxl IG92ZXJsYXAgb2Ygc2VsZWN0ZWQgdHVwbGUgc2V0cy4KLQkJICoKLQkJICog WFhYIGlzIHRoaXMgdG9vIGNvbnNlcnZhdGl2ZT8KLQkJICovCi0JCUxpc3RD ZWxsICAgKmFyZzsKLQotCQlzMSA9IDAuMDsKLQkJZm9yZWFjaChhcmcsICgo Qm9vbEV4cHIgKikgY2xhdXNlKS0+YXJncykKLQkJewotCQkJU2VsZWN0aXZp dHkgczIgPSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwKLQkJCQkJCQkJCQkJ CShOb2RlICopIGxmaXJzdChhcmcpLAotCQkJCQkJCQkJCQkJdmFyUmVsaWQs Ci0JCQkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCQkJCXNqaW5mbyk7 Ci0KLQkJCXMxID0gczEgKyBzMiAtIHMxICogczI7Ci0JCX0KKwkJLyoganVz dCBjYWxsIHRvIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3IoKSAqLworCQlz MSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfb3Iocm9vdCwKKwkJCQkJCQkJ CSgoQm9vbEV4cHIgKikgY2xhdXNlKS0+YXJncywKKwkJCQkJCQkJCXZhclJl bGlkLAorCQkJCQkJCQkJam9pbnR5cGUsCisJCQkJCQkJCQlzamluZm8sCisJ CQkJCQkJCQljb25kaXRpb25zKTsKIAl9CiAJZWxzZSBpZiAoaXNfb3BjbGF1 c2UoY2xhdXNlKSB8fCBJc0EoY2xhdXNlLCBEaXN0aW5jdEV4cHIpKQogCXsK QEAgLTg3MCw3ICsxMDEyLDggQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCQkoTm9kZSAqKSAoKFJlbGFiZWxUeXBl ICopIGNsYXVzZSktPmFyZywKIAkJCQkJCQkJdmFyUmVsaWQsCiAJCQkJCQkJ CWpvaW50eXBlLAotCQkJCQkJCQlzamluZm8pOworCQkJCQkJCQlzamluZm8s CisJCQkJCQkJCWNvbmRpdGlvbnMpOwogCX0KIAllbHNlIGlmIChJc0EoY2xh dXNlLCBDb2VyY2VUb0RvbWFpbikpCiAJewpAQCAtODc5LDcgKzEwMjIsOCBA QCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCShOb2RlICopICgoQ29lcmNlVG9Eb21haW4gKikgY2xhdXNlKS0+YXJn LAogCQkJCQkJCQl2YXJSZWxpZCwKIAkJCQkJCQkJam9pbnR5cGUsCi0JCQkJ CQkJCXNqaW5mbyk7CisJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJY29uZGl0 aW9ucyk7CiAJfQogCWVsc2UKIAl7CkBAIC05NDMsMTUgKzEwODcsMTYgQEAg Y2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogICogICAg ICAgICAgaW4gdGhlIE1DViBsaXN0LCB0aGVuIHRoZSBzZWxlY3Rpdml0eSBp cyBiZWxvdyB0aGUgbG93ZXN0IGZyZXF1ZW5jeQogICogICAgICAgICAgZm91 bmQgaW4gdGhlIE1DViBsaXN0LAogICoKLSAqIFRPRE8gV2hlbiBhcHBseWlu ZyB0aGUgY2xhdXNlcyB0byB0aGUgaGlzdG9ncmFtL01DViBsaXN0LCB3ZSBj YW4gZG8KLSAqICAgICAgdGhhdCBmcm9tIHRoZSBtb3N0IHNlbGVjdGl2ZSBj bGF1c2VzIGZpcnN0LCBiZWNhdXNlIHRoYXQnbGwKLSAqICAgICAgZWxpbWlu YXRlIHRoZSBidWNrZXRzL2l0ZW1zIHNvb25lciAoc28gd2UnbGwgYmUgYWJs ZSB0byBza2lwCi0gKiAgICAgIHRoZW0gd2l0aG91dCBpbnNwZWN0aW9uLCB3 aGljaCBpcyBtb3JlIGV4cGVuc2l2ZSkuIEJ1dCB0aGlzCi0gKiAgICAgIHJl cXVpcmVzIHJlYWxseSBrbm93aW5nIHRoZSBwZXItY2xhdXNlIHNlbGVjdGl2 aXRpZXMgaW4gYWR2YW5jZSwKLSAqICAgICAgYW5kIHRoYXQncyBub3Qgd2hh dCB3ZSBkbyBub3cuCisgKiBUT0RPIFdoZW4gYXBwbHlpbmcgdGhlIGNsYXVz ZXMgdG8gdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCwgd2UgY2FuIGRvIHRoYXQg ZnJvbQorICogICAgICB0aGUgbW9zdCBzZWxlY3RpdmUgY2xhdXNlcyBmaXJz dCwgYmVjYXVzZSB0aGF0J2xsIGVsaW1pbmF0ZSB0aGUKKyAqICAgICAgYnVj a2V0cy9pdGVtcyBzb29uZXIgKHNvIHdlJ2xsIGJlIGFibGUgdG8gc2tpcCB0 aGVtIHdpdGhvdXQgaW5zcGVjdGlvbiwKKyAqICAgICAgd2hpY2ggaXMgbW9y ZSBleHBlbnNpdmUpLiBCdXQgdGhpcyByZXF1aXJlcyByZWFsbHkga25vd2lu ZyB0aGUKKyAqICAgICAgcGVyLWNsYXVzZSBzZWxlY3Rpdml0aWVzIGluIGFk dmFuY2UsIGFuZCB0aGF0J3Mgbm90IHdoYXQgd2UgZG8gbm93LgorICoKICAq Lwogc3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1c2VsaXN0X212X3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBNVlN0YXRp c3RpY0luZm8gKm12c3RhdHMpCitjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5 KFBsYW5uZXJJbmZvICpyb290LCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMs CisJCQkJCQkgIExpc3QgKmNsYXVzZXMsIExpc3QgKmNvbmRpdGlvbnMsIGJv b2wgaXNfb3IpCiB7CiAJYm9vbCBmdWxsbWF0Y2ggPSBmYWxzZTsKIAlTZWxl Y3Rpdml0eSBzMSA9IDAuMCwgczIgPSAwLjA7CkBAIC05NjksNyArMTExNCw4 IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzCiAJICov CiAKIAkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZpcnN0LiAqLwotCXMxID0gY2xh dXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMs IG12c3RhdHMsCisJczEgPSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21j dmxpc3Qocm9vdCwgbXZzdGF0cywKKwkJCQkJCQkJCQkgICBjbGF1c2VzLCBj b25kaXRpb25zLCBpc19vciwKIAkJCQkJCQkJCQkgICAmZnVsbG1hdGNoLCAm bWN2X2xvdyk7CiAKIAkvKgpAQCAtOTgyLDcgKzExMjgsOCBAQCBjbGF1c2Vs aXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpj bGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12cwogCS8qIFRPRE8gaWYgKGZ1 bGxtYXRjaCkgd2l0aG91dCBtYXRjaGluZyBNQ1YgaXRlbSwgdXNlIHRoZSBt Y3ZfbG93CiAJICogICAgICBzZWxlY3Rpdml0eSBhcyB1cHBlciBib3VuZCAq LwogCi0JczIgPSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3Jh bShyb290LCBjbGF1c2VzLCBtdnN0YXRzKTsKKwlzMiA9IGNsYXVzZWxpc3Rf bXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKHJvb3QsIG12c3RhdHMsCisJCQkJ CQkJCQkJCSBjbGF1c2VzLCBjb25kaXRpb25zLCBpc19vcik7CiAKIAkvKiBU T0RPIGNsYW1wIHRvIDw9IDEuMCAob3IgbW9yZSBzdHJpY3RseSwgd2hlbiBw b3NzaWJsZSkgKi8KIAlyZXR1cm4gczEgKyBzMjsKQEAgLTEwMTYsMjYwICsx MTYzLDEzMjUgQEAgZ2V0X3ZhcmF0dG5vcyhOb2RlICogbm9kZSwgSW5kZXgg cmVsaWQpCiAJCQkJCQkJCSBrICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJp YnV0ZU51bWJlcik7CiAJfQogCi0JYm1zX2ZyZWUodmFyYXR0bm9zKTsKKwli bXNfZnJlZSh2YXJhdHRub3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIENvbGxlY3QgYXR0cmlidXRlcyBmcm9tIG12LWNvbXBhdGlibGUg Y2xhdXNlcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitjb2xsZWN0X212 X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVsaWQsIGludCB0eXBl cykKK3sKKwlCaXRtYXBzZXQgICphdHRudW1zID0gTlVMTDsKKwlMaXN0Q2Vs bCAgICpsOworCisJLyoKKwkgKiBXYWxrIHRocm91Z2ggdGhlIGNsYXVzZXMg YW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBlc3RpbWF0ZQorCSAqIHVz aW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJlbWVtYmVyIHRoZSByZWxp ZC9jb2x1bW5zLiBXZSdsbAorCSAqIHRoZW4gY3Jvc3MtY2hlY2sgaWYgd2Ug aGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkgaWYgbmVlZGVkCisJICog d2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMgaW50byBtdWx0aXZhcmlhdGUgYW5k IHJlZ3VsYXIgbGlzdHMuCisJICoKKwkgKiBGb3Igbm93IHdlJ3JlIG9ubHkg aW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMgd2l0aCBuZXN0ZWQK KwkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBhIHJhbmdlIG9yIGVxdWFsaXR5 LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJeworCQlOb2RlCSAg ICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobCk7CisKKwkJLyogaWdub3Jl IHRoZSByZXN1bHQgaGVyZSAtIHdlIG9ubHkgbmVlZCB0aGUgYXR0bnVtcyAq LworCQljbGF1c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAm YXR0bnVtcywgdHlwZXMpOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJl IG5vdCBhdCBsZWFzdCB0d28gYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IHRo ZSBjbGF1c2UocyksCisJICogd2UgY2FuIHRocm93IGV2ZXJ5dGhpbmcgb3V0 IChhcyB3ZSdsbCByZXZlcnQgdG8gc2ltcGxlIHN0YXRzKS4KKwkgKi8KKwlp ZiAoYm1zX251bV9tZW1iZXJzKGF0dG51bXMpIDw9IDEpCisJeworCQlibXNf ZnJlZShhdHRudW1zKTsKKwkJYXR0bnVtcyA9IE5VTEw7CisJfQorCisJcmV0 dXJuIGF0dG51bXM7Cit9CisKKy8qCisgKiBDb3VudCB0aGUgbnVtYmVyIG9m IGF0dHJpYnV0ZXMgaW4gY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggbXVsdGl2 YXJpYXRlIHN0YXRzLgorICovCitzdGF0aWMgaW50Citjb3VudF9tdl9hdHRu dW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBpbnQgdHlwZSkKK3sK KwlpbnQgYzsKKwlCaXRtYXBzZXQgKmF0dG51bXMgPSBjb2xsZWN0X212X2F0 dG51bXMoY2xhdXNlcywgcmVsaWQsIHR5cGUpOworCisJYyA9IGJtc19udW1f bWVtYmVycyhhdHRudW1zKTsKKworCWJtc19mcmVlKGF0dG51bXMpOworCisJ cmV0dXJuIGM7Cit9CisKKy8qCisgKiBDb3VudCB2YXJub3MgcmVmZXJlbmNl ZCBpbiB0aGUgY2xhdXNlcywgYW5kIGlmIHRoZXJlJ3MgYSBzaW5nbGUgdmFy bm8gdGhlbgorICogcmV0dXJuIHRoZSBpbmRleCBpbiAncmVsaWQnLgorICov CitzdGF0aWMgaW50Citjb3VudF92YXJub3MoTGlzdCAqY2xhdXNlcywgSW5k ZXggKnJlbGlkKQoreworCWludCBjbnQ7CisJQml0bWFwc2V0ICp2YXJub3Mg PSBOVUxMOworCisJdmFybm9zID0gcHVsbF92YXJub3MoKE5vZGUgKikgY2xh dXNlcyk7CisJY250ID0gYm1zX251bV9tZW1iZXJzKHZhcm5vcyk7CisKKwkv KiBpZiB0aGVyZSdzIGEgc2luZ2xlIHZhcm5vIGluIHRoZSBjbGF1c2VzLCBy ZW1lbWJlciBpdCAqLworCWlmIChibXNfbnVtX21lbWJlcnModmFybm9zKSA9 PSAxKQorCQkqcmVsaWQgPSBibXNfc2luZ2xldG9uX21lbWJlcih2YXJub3Mp OworCisJYm1zX2ZyZWUodmFybm9zKTsKKworCXJldHVybiBjbnQ7Cit9CisK K3N0YXRpYyBMaXN0ICoKK2NsYXVzZXNfbWF0Y2hpbmdfc3RhdGlzdGljKExp c3QgKipjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKnN0YXRpc3RpYywKKwkJ CQkJCSAgIEluZGV4IHJlbGlkLCBpbnQgdHlwZXMsIGJvb2wgcmVtb3ZlKQor eworCWludCBpOworCUJpdG1hcHNldCAgKnN0YXRfYXR0bnVtcyA9IE5VTEw7 CisJTGlzdAkgICAqbWF0Y2hpbmdfY2xhdXNlcyA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpsYzsKKworCS8qIGJ1aWxkIGF0dG51bSBiaXRtYXBzZXQgZm9yIHRo aXMgc3RhdGlzdGljcyAqLworCWZvciAoaSA9IDA7IGkgPCBzdGF0aXN0aWMt PnN0YWtleXMtPmRpbTE7IGkrKykKKwkJc3RhdF9hdHRudW1zID0gYm1zX2Fk ZF9tZW1iZXIoc3RhdF9hdHRudW1zLAorCQkJCQkJCQkJICBzdGF0aXN0aWMt PnN0YWtleXMtPnZhbHVlc1tpXSk7CisKKwkvKgorCSAqIFdlIGNhbid0IHVz ZSBmb3JlYWNoIGhlcmUsIGJlY2F1c2Ugd2UgbWF5IG5lZWQgdG8gcmVtb3Zl IHNvbWUgb2YgdGhlCisJICogY2xhdXNlcyBpZiAocmVtb3ZlPXRydWUpLgor CSAqLworCWxjID0gbGlzdF9oZWFkKCpjbGF1c2VzKTsKKwl3aGlsZSAobGMp CisJeworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGxjKTsKKwkJ Qml0bWFwc2V0ICphdHRudW1zID0gTlVMTDsKKworCQkvKiBtdXN0IGFkdmFu Y2UgbGMgYmVmb3JlIGxpc3RfZGVsZXRlIHBvc3NpYmx5IHBmcmVlJ3MgaXQg Ki8KKwkJbGMgPSBsbmV4dChsYyk7CisKKwkJLyoKKwkJICogc2tpcCBjbGF1 c2VzIHRoYXQgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggc3RhdHMgKGp1c3Qg bGVhdmUgdGhlbQorCQkgKiBpbiB0aGUgb3JpZ2luYWwgbGlzdCkKKwkJICoK KwkJICogWFhYIFBlcmhhcHMgdGhpcyBzaG91bGQgY2hlY2sgd2hhdCBzdGF0 cyBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlIGluCisJCSAqICAgICB0aGUgc3Rh dGlzdGljcyAobm90IGEgYmlnIGRlYWwgbm93LCBiZWNhdXNlIE1DViBhbmQg aGlzdG9ncmFtcworCQkgKiAgICAgaGFuZGxlIHRoZSBzYW1lIHR5cGVzIG9m IGNvbmRpdGlvbnMpLgorCQkgKi8KKwkJaWYgKCEgY2xhdXNlX2lzX212X2Nv bXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmF0dG51bXMsIHR5cGVzKSkKKwkJ eworCQkJYm1zX2ZyZWUoYXR0bnVtcyk7CisJCQljb250aW51ZTsKKwkJfQor CisJCS8qIGlmIHRoZSBjbGF1c2UgaXMgY292ZXJlZCBieSB0aGUgc3RhdGlz dGljLCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KKwkJaWYgKGJtc19pc19zdWJz ZXQoYXR0bnVtcywgc3RhdF9hdHRudW1zKSkKKwkJeworCQkJbWF0Y2hpbmdf Y2xhdXNlcyA9IGxhcHBlbmQobWF0Y2hpbmdfY2xhdXNlcywgY2xhdXNlKTsK KworCQkJLyogaWYgcmVtb3ZlPXRydWUsIHJlbW92ZSB0aGUgbWF0Y2hpbmcg aXRlbSBmcm9tIHRoZSBtYWluIGxpc3QgKi8KKwkJCWlmIChyZW1vdmUpCisJ CQkJKmNsYXVzZXMgPSBsaXN0X2RlbGV0ZV9wdHIoKmNsYXVzZXMsIGNsYXVz ZSk7CisJCX0KKworCQlibXNfZnJlZShhdHRudW1zKTsKKwl9CisKKwlibXNf ZnJlZShzdGF0X2F0dG51bXMpOworCisJcmV0dXJuIG1hdGNoaW5nX2NsYXVz ZXM7Cit9CisKKy8qCisgKiBTZWxlY3RzIHRoZSBiZXN0IGNvbWJpbmF0aW9u IG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLCBpbiBhbiBleGhhdXN0aXZl CisgKiB3YXksIHdoZXJlICdiZXN0JyBtZWFuczoKKyAqCisgKiAoYSkgY292 ZXJpbmcgdGhlIG1vc3QgYXR0cmlidXRlcyAocmVmZXJlbmNlZCBieSBjbGF1 c2VzKQorICogKGIpIHVzaW5nIHRoZSBsZWFzdCBudW1iZXIgb2YgbXVsdGl2 YXJpYXRlIHN0YXRzCisgKiAoYykgdXNpbmcgdGhlIG1vc3QgY29uZGl0aW9u cyB0byBleHBsb2l0IGRlcGVuZGVuY3kKKyAqCisgKiBEb24ndCBjYWxsIHRo aXMgZGlyZWN0bHkgYnV0IHRocm91Z2ggY2hvb3NlX212X3N0YXRpc3RpY3Mo KSwgd2hpY2ggZG9lcyBzb21lCisgKiBhZGRpdGlvbmFsIHRyaWNrcyB0byBt aW5pbWl6ZSB0aGUgcnVudGltZS4KKyAqCisgKgorICogQWxnb3JpdGhtCisg KiAtLS0tLS0tLS0KKyAqIFRoZSBhbGdvcml0aG0gaXMgYSByZWN1cnNpdmUg aW1wbGVtZW50YXRpb24gb2YgYmFja3RyYWNraW5nLCB3aXRoIG1heGltdW0K KyAqIGRlcHRoIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbXVsdGktdmFyaWF0 ZSBzdGF0aXN0aWNzIGF2YWlsYWJsZSBvbiB0aGUgdGFibGUuCisgKiBJdCBh Y3R1YWxseSBleHBsb3JlcyBhbGwgdmFsaWQgY29tYmluYXRpb25zIG9mIHN0 YXRzLgorICogCisgKiBXaGVuZXZlciBpdCBjb25zaWRlcnMgYWRkaW5nIHRo ZSBuZXh0IHN0YXRpc3RpY3MsIHRoZSBjbGF1c2VzIGl0IG1hdGNoZXMgYXJl CisgKiBkaXZpZGVkIGludG8gJ2NvbmRpdGlvbnMnIChjbGF1c2VzIGFscmVh ZHkgbWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUgcHJldmlvdXMKKyAqIHN0YXRp c3RpY3MpIGFuZCBjbGF1c2VzIHRoYXQgYXJlIGVzdGltYXRlZC4KKyAqCisg KiBUaGVuIHNldmVyYWwgY2hlY2tzIGFyZSBwZXJmb3JtZWQ6CisgKgorICog IChhKSBUaGUgc3RhdGlzdGljcyBjb3ZlcnMgYXQgbGVhc3QgMiBjb2x1bW5z LCByZWZlcmVuY2VkIGluIHRoZSBlc3RpbWF0ZWQKKyAqICAgICAgY2xhdXNl cyAob3RoZXJ3aXNlIG11bHRpLXZhcmlhdGUgc3RhdHMgYXJlIHVzZWxlc3Mp LgorICoKKyAqICAoYikgVGhlIHN0YXRpc3RpY3MgY292ZXJzIGF0IGxlYXN0 IDEgbmV3IGNvbHVtbiwgaS5lLiBjb2x1bW4gbm90IHJlZmVmZW5jZWQKKyAq ICAgICAgYnkgdGhlIGFscmVhZHkgdXNlZCBzdGF0cyAoYW5kIHRoZSBuZXcg Y29sdW1uIGhhcyB0byBiZSByZWZlcmVuY2VkIGJ5CisgKiAgICAgIHRoZSBj bGF1c2VzLCBvZiBjb3VzZSkuIE90aGVyd2lzZSB0aGUgc3RhdGlzdGljcyB3 b3VsZCBub3QgYWRkIGFueSBuZXcKKyAqICAgICAgaW5mb3JtYXRpb24uCisg KgorICogVGhlcmUgYXJlIHNvbWUgb3RoZXIgc2FuaXR5IGNoZWNrcyAoZS5n LiBzdGF0cyBtdXN0IG5vdCBiZSB1c2VkIHR3aWNlIGV0Yy4pLgorICoKKyAq CisgKiBXZWFrbmVzc2VzCisgKiAtLS0tLS0tLS0tCisgKiBUaGUgY3VycmVu dCBpbXBsZW1ldGF0aW9uIHVzZXMgYSByYXRoZXIgc2ltcGxlIG9wdGltYWxp dHkgY3JpdGVyaWEsIHNvIGl0IG1heQorICogbm90IGRvIHRoZSBiZXN0IGNo b2ljZSB3aGVuCisgKgorICogKGEpIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBz b2x1dGlvbnMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgY292ZXJlZAorICog ICAgIGF0dHJpYnV0ZXMgYW5kIG51bWJlciBvZiBzdGF0aXN0aWNzIChlLmcu IHRoZSBzYW1lIHNvbHV0aW9uIGJ1dCB3aXRoCisgKiAgICAgc3RhdGlzdGlj cyBpbiBhIGRpZmZlcmVudCBvcmRlcikuIEl0J3MgdW5jbGVhciB3aGljaCBz b2x1dGlvbiBpbiB0aGUgYmVzdAorICogICAgIG9uZSAtIGluIGEgc2Vuc2Ug YWxsIG9mIHRoZW0gYXJlIGVxdWFsLgorICoKKyAqIFRPRE8gSXQgbWlnaHQg YmUgcG9zc2libGUgdG8gY29tcHV0ZSBlc3RpbWF0ZSBmb3IgZWFjaCBvZiB0 aG9zZSBzb2x1dGlvbnMsCisgKiAgICAgIGFuZCB0aGVuIGNvbWJpbmUgdGhl bSB0byBnZXQgdGhlIGZpbmFsIGVzdGltYXRlIChlLmcuIGJ5IHVzaW5nIGF2 ZXJhZ2UKKyAqICAgICAgb3IgbWVkaWFuKS4KKyAqCisgKiAoYikgRG9lcyBu b3QgY29uc2lkZXIgdGhhdCBzb21lIHR5cGVzIG9mIHN0YXRzIGFyZSBhIGJl dHRlciBtYXRjaCBmb3Igc29tZQorICogICAgIHR5cGVzIG9mIGNsYXVzZXMg KGUuZy4gTUNWIGxpc3QgaXMgZ2VuZXJhbGx5IGEgYmV0dGVyIG1hdGNoIGZv ciBlcXVhbGl0eQorICogICAgIGNvbmRpdGlvbnMgdGhhbiBhIGhpc3RvZ3Jh bSkuCisgKgorICogICAgIEJ1dCBtYXliZSB0aGlzIGlzIHBvaW50bGVzcyAt IGdlbmVyYWxseSwgZWFjaCBjb2x1bW4gaXMgZWl0aGVyIGEgbGFiZWwKKyAq ICAgICAoaXQncyBub3QgaW1wb3J0YW50IHdoZXRoZXIgYmVjYXVzZSBvZiB0 aGUgZGF0YSB0eXBlIG9yIGhvdyBpdCdzIHVzZWQpLAorICogICAgIG9yIGEg dmFsdWUgd2l0aCBvcmRlcmluZyB0aGF0IG1ha2VzIHNlbnNlLiBTbyBlaXRo ZXIgYSBNQ1YgbGlzdCBpcyBtb3JlCisgKiAgICAgYXBwcm9wcmlhdGUgKGxh YmVscykgb3IgYSBoaXN0b2dyYW0gKHZhbHVlcyB3aXRoIG9yZGVyaW5ncyku CisgKgorICogICAgIE5vdyBzdXJlIHdoYXQgdG8gZG8gd2l0aCBzdGF0aXN0 aWNzIG9uIGNvbHVtbnMgbWl4aW5nIGJvdGggdHlwZXMgb2YgZGF0YQorICog ICAgIChzb21lIGNvbHVtbnMgd291bGQgd29yayBiZXN0IHdpdGggTUNWcywg c29tZSB3aXRoIGhpc3RvZ3JhbXMpLiBNYXliZSB3ZQorICogICAgIGNvdWxk IGludmVudCBhIG5ldyB0eXBlIG9mIHN0YXRpc3RpY3MgY29tYmluaW5nIE1D ViBsaXN0IGFuZCBoaXN0b2dyYW0KKyAqICAgICAoa2VlcGluZyBhIHNtYWxs IGhpc3RvZ3JhbSBmb3IgZWFjaCBNQ1YgaXRlbSwgYW5kIGEgc2VwYXJhdGUg aGlzdG9ncmFtCisgKiAgICAgZm9yIHZhbHVlcyBub3Qgb24gdGhlIE1DViBs aXN0KS4KKyAqCisgKiBUT0RPIFRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2Jh Ymx5IGNvdW50IG51bWJlciBvZiBWYXJzIChub3QganVzdCBhdHRudW1zKQor ICogICAgICB3aGVuIGNvbXB1dGluZyB0aGUgJ3Njb3JlJyBvZiBlYWNoIHNv bHV0aW9uLiBDb21wdXRpbmcgdGhlIHJhdGlvIG9mCisgKiAgICAgIChudW0g b2YgYWxsIHZhcnMpIC8gKG51bSBvZiBjb25kaXRpb24gdmFycykgYXMgYSBt ZWFzdXJlIG9mIGhvdyB3ZWxsCisgKiAgICAgIHRoZSBzb2x1dGlvbiB1c2Vz IGNvbmRpdGlvbnMgbWlnaHQgYmUgdXNlZnVsLgorICovCitzdGF0aWMgdm9p ZAorY2hvb3NlX212X3N0YXRpc3RpY3NfZXhoYXVzdGl2ZShQbGFubmVySW5m byAqcm9vdCwgaW50IHN0ZXAsCisJCQkJCWludCBubXZzdGF0cywgTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzLCBCaXRtYXBzZXQgKiogc3RhdHNfYXR0bnVt cywKKwkJCQkJaW50IG5jbGF1c2VzLCBOb2RlICoqIGNsYXVzZXMsIEJpdG1h cHNldCAqKiBjbGF1c2VzX2F0dG51bXMsCisJCQkJCWludCBuY29uZGl0aW9u cywgTm9kZSAqKiBjb25kaXRpb25zLCBCaXRtYXBzZXQgKiogY29uZGl0aW9u c19hdHRudW1zLAorCQkJCQlib29sICpjb3Zlcl9tYXAsIGJvb2wgKmNvbmRp dGlvbl9tYXAsIGludCAqcnVsZWRfb3V0LAorCQkJCQltdl9zb2x1dGlvbl90 ICpjdXJyZW50LCBtdl9zb2x1dGlvbl90ICoqYmVzdCkKK3sKKwlpbnQgaSwg ajsKKworCUFzc2VydChiZXN0ICE9IE5VTEwpOworCUFzc2VydCgoc3RlcCA9 PSAwICYmIGN1cnJlbnQgPT0gTlVMTCkgfHwgKHN0ZXAgPiAwICYmIGN1cnJl bnQgIT0gTlVMTCkpOworCisJLyogdGhpcyBtYXkgcnVuIGZvciBhIGxvbmcg c2ltZSwgc28gbGV0J3MgbWFrZSBpdCBpbnRlcnJ1cHRpYmxlICovCisJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCWlmIChjdXJyZW50ID09IE5VTEwp CisJeworCQljdXJyZW50ID0gKG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6 ZW9mKG12X3NvbHV0aW9uX3QpKTsKKwkJY3VycmVudC0+c3RhdHMgPSAoaW50 KilwYWxsb2MwKHNpemVvZihpbnQpKm5tdnN0YXRzKTsKKwkJY3VycmVudC0+ bnN0YXRzID0gMDsKKwkJY3VycmVudC0+bmNsYXVzZXMgPSAwOworCQljdXJy ZW50LT5uY29uZGl0aW9ucyA9IDA7CisJfQorCisJLyoKKwkgKiBOb3cgdHJ5 IHRvIGFwcGx5IGVhY2ggc3RhdGlzdGljcywgbWF0Y2hpbmcgYXQgbGVhc3Qg dHdvIGF0dHJpYnV0ZXMsCisJICogdW5sZXNzIGl0J3MgYWxyZWFkeSB1c2Vk IGluIG9uZSBvZiB0aGUgcHJldmlvdXMgc3RlcHMuCisJICovCisJZm9yIChp ID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJeworCQlpbnQgYzsKKworCQlp bnQgbmNvdmVyZWRfY2xhdXNlcyA9IDA7CQkvKiBudW1iZXIgb2YgY292ZXJl ZCBjbGF1c2VzICovCisJCWludCBuY292ZXJlZF9jb25kaXRpb25zID0gMDsJ LyogbnVtYmVyIG9mIGNvdmVyZWQgY29uZGl0aW9ucyAqLworCQlpbnQgbmF0 dG51bXMgPSAwOwkJLyogbnVtYmVyIG9mIGNvdmVyZWQgYXR0cmlidXRlcyAq LworCisJCUJpdG1hcHNldCAgKmFsbF9hdHRudW1zID0gTlVMTDsKKwkJQml0 bWFwc2V0ICAqbmV3X2F0dG51bXMgPSBOVUxMOworCisJCS8qIHNraXAgc3Rh dGlzdGljcyB0aGF0IHdlcmUgYWxyZWFkeSB1c2VkIG9yIGVsaW1pbmF0ZWQg Ki8KKwkJaWYgKHJ1bGVkX291dFtpXSAhPSAtMSkKKwkJCWNvbnRpbnVlOwor CisJCS8qCisJCSAqIFNlZSBpZiB3ZSBoYXZlIGNsYXVzZXMgY292ZXJlZCBi eSB0aGlzIHN0YXRpc3RpY3MsIGJ1dCBub3QKKwkJICogeWV0IGNvdmVyZWQg YnkgYW55IG9mIHRoZSBwcmVjZWRpbmcgb25jZXMuCisJCSAqLworCQlmb3Ig KGMgPSAwOyBjIDwgbmNsYXVzZXM7IGMrKykKKwkJeworCQkJYm9vbCBjb3Zl cmVkID0gZmFsc2U7CisJCQlCaXRtYXBzZXQgKmNsYXVzZV9hdHRudW1zID0g Y2xhdXNlc19hdHRudW1zW2NdOworCQkJQml0bWFwc2V0ICp0bXAgPSBOVUxM OworCisJCQkvKgorCQkJICogSWYgdGhpcyBjbGF1c2UgaXMgbm90IGNvdmVy ZWQgYnkgdGhpcyBzdGF0cywgd2UgY2FuJ3QKKwkJCSAqIHVzZSB0aGUgc3Rh dHMgdG8gZXN0aW1hdGUgdGhhdCBhdCBhbGwuCisJCQkgKi8KKwkJCWlmICgh IGNvdmVyX21hcFtpICogbmNsYXVzZXMgKyBjXSkKKwkJCQljb250aW51ZTsK KworCQkJLyoKKwkJCSAqIE5vdyB3ZSBrbm93IHdlJ2xsIHVzZSB0aGlzIGNs YXVzZSAtIGVpdGhlciBhcyBhIGNvbmRpdGlvbgorCQkJICogb3IgYXMgYSBu ZXcgY2xhdXNlICh0aGUgZXN0aW1hdGVkIG9uZSkuIFNvIGxldCdzIGFkZCB0 aGUKKwkJCSAqIGF0dHJpYnV0ZXMgdG8gdGhlIGF0dG51bXMgZnJvbSBhbGwg dGhlIGNsYXVzZXMgdXNhYmxlIHdpdGgKKwkJCSAqIHRoaXMgc3RhdGlzdGlj cy4KKwkJCSAqLworCQkJdG1wID0gYm1zX3VuaW9uKGFsbF9hdHRudW1zLCBj bGF1c2VfYXR0bnVtcyk7CisKKwkJCS8qIGZyZWUgdGhlIG9sZCBiaXRtYXAg Ki8KKwkJCWJtc19mcmVlKGFsbF9hdHRudW1zKTsKKwkJCWFsbF9hdHRudW1z ID0gdG1wOworCisJCQkvKiBsZXQncyBzZWUgaWYgaXQncyBjb3ZlcmVkIGJ5 IGFueSBvZiB0aGUgcHJldmlvdXMgc3RhdHMgKi8KKwkJCWZvciAoaiA9IDA7 IGogPCBzdGVwOyBqKyspCisJCQl7CisJCQkJLyogYWxyZWFkeSBjb3ZlcmVk IGJ5IHRoZSBwcmV2aW91cyBzdGF0cyAqLworCQkJCWlmIChjb3Zlcl9tYXBb Y3VycmVudC0+c3RhdHNbal0gKiBuY2xhdXNlcyArIGNdKQorCQkJCQljb3Zl cmVkID0gdHJ1ZTsKKworCQkJCWlmIChjb3ZlcmVkKQorCQkJCQlicmVhazsK KwkJCX0KKworCQkJLyogaWYgYWxyZWFkeSBjb3ZlcmVkLCBjb250aW51ZSB3 aXRoIHRoZSBuZXh0IGNsYXVzZSAqLworCQkJaWYgKGNvdmVyZWQpCisJCQl7 CisJCQkJbmNvdmVyZWRfY29uZGl0aW9ucyArPSAxOworCQkJCWNvbnRpbnVl OworCQkJfQorCisJCQkvKgorCQkJICogT0ssIHRoaXMgY2xhdXNlIGlzIGNv dmVyZWQgYnkgdGhpcyBzdGF0aXN0aWNzIChhbmQgbm90IGJ5CisJCQkgKiBh bnkgb2YgdGhlIHByZXZpb3VzIG9uZXMpCisJCQkgKi8KKwkJCW5jb3ZlcmVk X2NsYXVzZXMgKz0gMTsKKworCQkJLyogYWRkIHRoZSBhdHRudW1zIGludG8g YXR0bnVtcyBmcm9tICduZXcgY2xhdXNlcycgKi8KKwkJCS8vIG5ld19hdHRu dW1zID0gYm1zX3VuaW9uKG5ld19hdHRudW1zLCBjbGF1c2VfYXR0bnVtcyk7 CisJCX0KKworCQkvKiBjYW4ndCBoYXZlIG1vcmUgbmV3IGNsYXVzZXMgdGhh biBvcmlnaW5hbCBjbGF1c2VzICovCisJCUFzc2VydChuY2xhdXNlcyA+PSBu Y292ZXJlZF9jbGF1c2VzKTsKKwkJQXNzZXJ0KG5jb3ZlcmVkX2NsYXVzZXMg Pj0gMCk7CS8qIG1vc3RseSBwYXJhbm9pYSAqLworCisJCW5hdHRudW1zID0g Ym1zX251bV9tZW1iZXJzKGFsbF9hdHRudW1zKTsKKworCQkvKiBmcmVlIGFs bCB0aGUgYml0bWFwc2V0cyAtIHdlIGRvbid0IG5lZWQgdGhlbSBhbnltb3Jl ICovCisJCWJtc19mcmVlKGFsbF9hdHRudW1zKTsKKwkJYm1zX2ZyZWUobmV3 X2F0dG51bXMpOworCisJCWFsbF9hdHRudW1zID0gTlVMTDsKKwkJbmV3X2F0 dG51bXMgPSBOVUxMOworCisJCS8qCisJCSAqIFNlZSBpZiB3ZSBoYXZlIGNs YXVzZXMgY292ZXJlZCBieSB0aGlzIHN0YXRpc3RpY3MsIGJ1dCBub3QKKwkJ ICogeWV0IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBwcmVjZWRpbmcgb25jZXMu CisJCSAqLworCQlmb3IgKGMgPSAwOyBjIDwgbmNvbmRpdGlvbnM7IGMrKykK KwkJeworCQkJQml0bWFwc2V0ICpjbGF1c2VfYXR0bnVtcyA9IGNvbmRpdGlv bnNfYXR0bnVtc1tjXTsKKwkJCUJpdG1hcHNldCAqdG1wID0gTlVMTDsKKwor CQkJLyoKKwkJCSAqIElmIHRoaXMgY2xhdXNlIGlzIG5vdCBjb3ZlcmVkIGJ5 IHRoaXMgc3RhdHMsIHdlIGNhbid0CisJCQkgKiB1c2UgdGhlIHN0YXRzIHRv IGVzdGltYXRlIHRoYXQgYXQgYWxsLgorCQkJICovCisJCQlpZiAoISBjb25k aXRpb25fbWFwW2kgKiBuY29uZGl0aW9ucyArIGNdKQorCQkJCWNvbnRpbnVl OworCisJCQkvKiBjb3VudCB0aGlzIGFzIGEgY29uZGl0aW9uICovCisJCQlu Y292ZXJlZF9jb25kaXRpb25zICs9IDE7CisKKwkJCS8qCisJCQkgKiBOb3cg d2Uga25vdyB3ZSdsbCB1c2UgdGhpcyBjbGF1c2UgLSBlaXRoZXIgYXMgYSBj b25kaXRpb24KKwkJCSAqIG9yIGFzIGEgbmV3IGNsYXVzZSAodGhlIGVzdGlt YXRlZCBvbmUpLiBTbyBsZXQncyBhZGQgdGhlCisJCQkgKiBhdHRyaWJ1dGVz IHRvIHRoZSBhdHRudW1zIGZyb20gYWxsIHRoZSBjbGF1c2VzIHVzYWJsZSB3 aXRoCisJCQkgKiB0aGlzIHN0YXRpc3RpY3MuCisJCQkgKi8KKwkJCXRtcCA9 IGJtc191bmlvbihhbGxfYXR0bnVtcywgY2xhdXNlX2F0dG51bXMpOworCisJ CQkvKiBmcmVlIHRoZSBvbGQgYml0bWFwICovCisJCQlibXNfZnJlZShhbGxf YXR0bnVtcyk7CisJCQlhbGxfYXR0bnVtcyA9IHRtcDsKKwkJfQorCisJCS8q CisJCSAqIExldCdzIG1hcmsgdGhlIHN0YXRpc3RpY3MgYXMgJ3J1bGVkIG91 dCcgLSBlaXRoZXIgd2UnbGwgdXNlCisJCSAqIGl0IChhbmQgcHJvY2VlZCB0 byB0aGUgbmV4dCBzdGVwKSwgb3IgaXQncyBpbmNvbXBhdGlibGUuCisJCSAq LworCQlydWxlZF9vdXRbaV0gPSBzdGVwOworCisJCS8qCisJCSAqIFRoZXJl IGFyZSBubyBjbGF1c2VzIHVzYWJsZSB3aXRoIHRoaXMgc3RhdGlzdGljcyAo bm90IGFscmVhZHkKKwkJICogY292ZXJlZCBieSBhb21lIG9mIHRoZSBwcmV2 aW91cyBzdGF0cykuCisJCSAqCisJCSAqIFNpbWlsYXJseSwgaWYgdGhlIGNs YXVzZXMgb25seSB1c2UgYSBzaW5nbGUgYXR0cmlidXRlLCB3ZQorCQkgKiBj YW4ndCByZWFsbHkgdXNlIHRoYXQuCisJCSAqLworCQlpZiAoKG5jb3ZlcmVk X2NsYXVzZXMgPT0gMCkgfHwgKG5hdHRudW1zIDwgMikpCisJCQljb250aW51 ZTsKKworCQkvKgorCQkgKiBUT0RPIE5vdCBzdXJlIGlmIGl0J3MgcG9zc2li bGUgdG8gYWRkIGEgY2xhdXNlIHJlZmVyZW5jaW5nCisJCSAqICAgICAgb25s eSBhdHRyaWJ1dGVzIGFscmVhZHkgY292ZXJlZCBieSBwcmV2aW91cyBzdGF0 cz8KKwkJICogICAgICBJbnRyb2R1Y2luZyBvbmx5IHNvbWUgbmV3IGRlcGVu ZGVuY3ksIG5vdCBhIG5ldworCQkgKiAgICAgIGF0dHJpYnV0ZS4gQ291bGRu J3QgY29tZSB1cCB3aXRoIGFuIGV4YW1wbGUsIHRob3VnaC4KKwkJICogICAg ICBNaWdodCBiZSB3b3J0aCBhZGRpbmcgc29tZSBhc3NlcnQuCisJCSAqLwor CisJCS8qCisJCSAqIGdvdCBhIHN1aXRhYmxlIHN0YXRpc3RpY3MgLSBsZXQn cyB1cGRhdGUgdGhlIGN1cnJlbnQgc29sdXRpb24sCisJCSAqIG1heWJlIHVz ZSBpdCBhcyB0aGUgYmVzdCBzb2x1dGlvbgorCQkgKi8KKwkJY3VycmVudC0+ bmNsYXVzZXMgKz0gbmNvdmVyZWRfY2xhdXNlczsKKwkJY3VycmVudC0+bmNv bmRpdGlvbnMgKz0gbmNvdmVyZWRfY29uZGl0aW9uczsKKwkJY3VycmVudC0+ bnN0YXRzICs9IDE7CisJCWN1cnJlbnQtPnN0YXRzW3N0ZXBdID0gaTsKKwor CQkvKgorCQkgKiBXZSBjYW4gbmV2ZXIgY292ZXIgbW9yZSBjbGF1c2VzLCBv ciB1c2UgbW9yZSBzdGF0cyB0aGF0IHdlCisJCSAqIGFjdHVhbGx5IGhhdmUg YXQgdGhlIGJlZ2lubmluZy4KKwkJICovCisJCUFzc2VydChuY2xhdXNlcyA+ PSBjdXJyZW50LT5uY2xhdXNlcyk7CisJCUFzc2VydChubXZzdGF0cyA+PSBj dXJyZW50LT5uc3RhdHMpOworCQlBc3NlcnQoc3RlcCA8IG5tdnN0YXRzKTsK KworCQlpZiAoKmJlc3QgPT0gTlVMTCkKKwkJeworCQkJKmJlc3QgPSAobXZf c29sdXRpb25fdCopcGFsbG9jMChzaXplb2YobXZfc29sdXRpb25fdCkpOwor CQkJKCpiZXN0KS0+c3RhdHMgPSAoaW50KilwYWxsb2MwKHNpemVvZihpbnQp Km5tdnN0YXRzKTsKKwkJCSgqYmVzdCktPm5zdGF0cyA9IDA7CisJCQkoKmJl c3QpLT5uY2xhdXNlcyA9IDA7CisJCQkoKmJlc3QpLT5uY29uZGl0aW9ucyA9 IDA7CisJCX0KKworCQkvKiBzZWUgaWYgaXQncyBiZXR0ZXIgdGhhbiB0aGUg Y3VycmVudCAnYmVzdCcgc29sdXRpb24gKi8KKwkJaWYgKChjdXJyZW50LT5u Y2xhdXNlcyA+ICgqYmVzdCktPm5jbGF1c2VzKSB8fAorCQkJKChjdXJyZW50 LT5uY2xhdXNlcyA9PSAoKmJlc3QpLT5uY2xhdXNlcykgJiYKKwkJCSgoY3Vy cmVudC0+bnN0YXRzID4gKCpiZXN0KS0+bnN0YXRzKSkpKQorCQl7CisJCQko KmJlc3QpLT5uc3RhdHMgPSBjdXJyZW50LT5uc3RhdHM7CisJCQkoKmJlc3Qp LT5uY2xhdXNlcyA9IGN1cnJlbnQtPm5jbGF1c2VzOworCQkJKCpiZXN0KS0+ bmNvbmRpdGlvbnMgPSBjdXJyZW50LT5uY29uZGl0aW9uczsKKwkJCW1lbWNw eSgoKmJlc3QpLT5zdGF0cywgY3VycmVudC0+c3RhdHMsIG5tdnN0YXRzICog c2l6ZW9mKGludCkpOworCQl9CisKKwkJLyoKKwkJICogVGhlIHJlY3Vyc2lv biBvbmx5IG1ha2VzIHNlbnNlIGlmIHdlIGhhdmVuJ3QgY292ZXJlZCBhbGwg dGhlCisJCSAqIGF0dHJpYnV0ZXMgKHRoZW4gYWRkaW5nIHN0YXRzIGlzIG5v dCByZWFsbHkgcG9zc2libGUpLgorCQkgKi8KKwkJaWYgKChzdGVwICsgMSkg PCBubXZzdGF0cykKKwkJCWNob29zZV9tdl9zdGF0aXN0aWNzX2V4aGF1c3Rp dmUocm9vdCwgc3RlcCsxLAorCQkJCQkJCQkJbm12c3RhdHMsIG12c3RhdHMs IHN0YXRzX2F0dG51bXMsCisJCQkJCQkJCQluY2xhdXNlcywgY2xhdXNlcywg Y2xhdXNlc19hdHRudW1zLAorCQkJCQkJCQkJbmNvbmRpdGlvbnMsIGNvbmRp dGlvbnMsIGNvbmRpdGlvbnNfYXR0bnVtcywKKwkJCQkJCQkJCWNvdmVyX21h cCwgY29uZGl0aW9uX21hcCwgcnVsZWRfb3V0LAorCQkJCQkJCQkJY3VycmVu dCwgYmVzdCk7CisKKwkJLyogcmVzZXQgdGhlIGxhc3Qgc3RlcCAqLworCQlj dXJyZW50LT5uY2xhdXNlcyAtPSBuY292ZXJlZF9jbGF1c2VzOworCQljdXJy ZW50LT5uY29uZGl0aW9ucyAtPSBuY292ZXJlZF9jb25kaXRpb25zOworCQlj dXJyZW50LT5uc3RhdHMgLT0gMTsKKwkJY3VycmVudC0+c3RhdHNbc3RlcF0g PSAwOworCisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3MgYXMgdXNhYmxlIGFn YWluICovCisJCXJ1bGVkX291dFtpXSA9IC0xOworCisJCUFzc2VydChjdXJy ZW50LT5uY2xhdXNlcyA+PSAwKTsKKwkJQXNzZXJ0KGN1cnJlbnQtPm5zdGF0 cyA+PSAwKTsKKwl9CisKKwkvKiByZXNldCBhbGwgc3RhdGlzdGljcyBhcyAn aW5jb21wYXRpYmxlJyBpbiB0aGlzIHN0ZXAgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbm12c3RhdHM7IGkrKykKKwkJaWYgKHJ1bGVkX291dFtpXSA9PSBzdGVw KQorCQkJcnVsZWRfb3V0W2ldID0gLTE7CisKK30KKworLyoKKyAqIEdyZWVk eSBzZWFyY2ggZm9yIGEgbXVsdGl2YXJpYXRlIHNvbHV0aW9uIC0gYSBzZXF1 ZW5jZSBvZiBzdGF0aXN0aWNzIGNvdmVyaW5nCisgKiB0aGUgY2xhdXNlcy4g VGhpcyBjaG9vc2VzIHRoZSAiYmVzdCIgc3RhdGlzdGljcyBhdCBlYWNoIHN0 ZXAsIHNvIHRoZQorICogcmVzdWx0aW5nIHNvbHV0aW9uIG1heSBub3QgYmUg dGhlIGJlc3Qgc29sdXRpb24gZ2xvYmFsbHksIGJ1dCB0aGlzIHByb2R1Y2Vz CisgKiB0aGUgc29sdXRpb24gaW4gb25seSBOIHN0ZXBzICh3aGVyZSBOIGlz IHRoZSBudW1iZXIgb2Ygc3RhdGlzdGljcyksIHdoaWxlCisgKiB0aGUgZXho YXVzdGl2ZSBhcHByb2FjaCBtYXkgaGF2ZSB0byB3YWxrIHRocm91Z2ggfk4h IGNvbWJpbmF0aW9ucyAoYWx0aG91Z2gKKyAqIHNvbWUgb2YgdGhvc2UgYXJl IHRlcm1pbmF0ZWQgZWFybHkpLgorICoKKyAqIFNlZSB0aGUgY29tbWVudHMg YXQgY2hvb3NlX212X3N0YXRpc3RpY3NfZXhoYXVzdGl2ZSgpIGFzIHRoaXMg ZG9lcyB0aGUgc2FtZQorICogdGhpbmcgKGJ1dCBpbiBhIGRpZmZlcmVudCB3 YXkpLgorICoKKyAqIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseSwgYnV0IHRo cm91Z2ggY2hvb3NlX212X3N0YXRpc3RpY3MoKS4KKyAqCisgKiBUT0RPIFRo ZXJlIGFyZSBwcm9iYWJseSBvdGhlciBtZXRyaWNzIHdlIG1pZ2h0IHVzZSAt IGUuZy4gdXNpbmcgbnVtYmVyIG9mCisgKiAgICAgIGNvbHVtbnMgKG51bV9j b25kX2NvbHVtbnMgLyBudW1fY292X2NvbHVtbnMpLCB3aGljaCBtaWdodCB3 b3JrIGJldHRlcgorICogICAgICB3aXRoIGEgbWl4IG9mIHNpbXBsZSBhbmQg Y29tcGxleCBjbGF1c2VzLgorICoKKyAqIFRPRE8gQWxzbyB0aGUgY2hvaWNl IGF0IHRoZSB2ZXJ5IGZpcnN0IHN0ZXAgc2hvdWxkIGJlIGhhbmRsZWQgaW4g YSBzcGVjaWFsCisgKiAgICAgIHdheSwgYmVjYXVzZSB0aGVyZSB3aWxsIGJl IDAgY29uZGl0aW9ucyBhdCB0aGF0IG1vbWVudCwgc28gdGhlcmUgbmVlZHMK KyAqICAgICAgdG8gYmUgc29tZSBvdGhlciBjcml0ZXJpYSAtIGUuZy4gdXNp bmcgdGhlIHNpbXBsZXN0IChvciBtb3N0IGNvbXBsZXg/KQorICogICAgICBj bGF1c2UgbWlnaHQgYmUgYSBnb29kIGlkZWEuCisgKgorICogVE9ETyBXZSBt aWdodCBhbHNvIHNlbGVjdCBtdWx0aXBsZSBzdGF0cyB1c2luZyBkaWZmZXJl bnQgY3JpdGVyaWEsIGFuZCBicmFuY2gKKyAqICAgICAgdGhlIHNlYXJjaC4g VGhpcyBpcyBob3dldmVyIHRyaWNreSwgYmVjYXVzZSBpZiB3ZSBjaG9vc2Ug ayBzdGF0aXN0aWNzIGF0CisgKiAgICAgIGVhY2ggc3RlcCwgd2UgZ2V0IGte TiBicmFuY2hlcyB0byB3YWxrIHRocm91Z2ggKHdpdGggTiBzdGVwcykuIFRo YXQncworICogICAgICBub3QgcmVhbGx5IGdvb2Qgd2l0aCBsYXJnZSBudW1i ZXIgb2Ygc3RhdHMgKHlldCBiZXR0ZXIgdGhhbiBleGhhdXN0aXZlCisgKiAg ICAgIHNlYXJjaCkuCisgKi8KK3N0YXRpYyB2b2lkCitjaG9vc2VfbXZfc3Rh dGlzdGljc19ncmVlZHkoUGxhbm5lckluZm8gKnJvb3QsIGludCBzdGVwLAor CQkJCQlpbnQgbm12c3RhdHMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywg Qml0bWFwc2V0ICoqIHN0YXRzX2F0dG51bXMsCisJCQkJCWludCBuY2xhdXNl cywgTm9kZSAqKiBjbGF1c2VzLCBCaXRtYXBzZXQgKiogY2xhdXNlc19hdHRu dW1zLAorCQkJCQlpbnQgbmNvbmRpdGlvbnMsIE5vZGUgKiogY29uZGl0aW9u cywgQml0bWFwc2V0ICoqIGNvbmRpdGlvbnNfYXR0bnVtcywKKwkJCQkJYm9v bCAqY292ZXJfbWFwLCBib29sICpjb25kaXRpb25fbWFwLCBpbnQgKnJ1bGVk X291dCwKKwkJCQkJbXZfc29sdXRpb25fdCAqY3VycmVudCwgbXZfc29sdXRp b25fdCAqKmJlc3QpCit7CisJaW50IGksIGo7CisJaW50IGJlc3Rfc3RhdCA9 IC0xOworCWRvdWJsZSBnYWluLCBtYXhfZ2FpbiA9IC0xLjA7CisKKwkvKgor CSAqIEJpdG1hcCB0cmFja2luZyB3aGljaCBjbGF1c2VzIGFyZSBhbHJlYWR5 IGNvdmVyZWQgKGJ5IHRoZSBwcmV2aW91cworCSAqIHN0YXRpc3RpY3MpIGFu ZCBtYXkgdGh1cyBzZXJ2ZSBvbmx5IGFzIGEgY29uZGl0aW9uIGluIHRoaXMg c3RlcC4KKwkgKi8KKwlib29sICpjb3ZlcmVkX2NsYXVzZXMgPSAoYm9vbCop cGFsbG9jMChuY2xhdXNlcyk7CisKKwkvKgorCSAqIE51bWJlciBvZiBjbGF1 c2VzIGFuZCBjb2x1bW5zIGNvdmVyZWQgYnkgZWFjaCBzdGF0aXN0aWNzIC0g dGhpcworCSAqIGluY2x1ZGVzIGJvdGggY29uZGl0aW9ucyBhbmQgY2xhdXNl cyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzIGZvcgorCSAqIHRoZSBmaXJz dCB0aW1lLiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgbWF5IGNvdW50IHNvbWUg Y29sdW1ucworCSAqIHJlcGVhdGVkbHkgLSBpZiBhIGNvbHVtbiBpcyBzaGFy ZWQgYnkgbXVsdGlwbGUgY2xhdXNlcywgaXQgd2lsbAorCSAqIGJlIGNvdW50 ZWQgb25jZSBmb3IgZWFjaCBjbGF1c2UgKGNvdmVyZWQgYnkgdGhlIHN0YXRp c3RpY3MpLgorCSAqIFNvIHdpdGggdHdvIGNsYXVzZXMgWyhhPTEgT1IgYj0y KSwoYTwyIE9SIGM+MSldIHRoZSBjb2x1bW4gImEiCisJICogd2lsbCBiZSBj b3VudGVkIHR3aWNlIChpZiBib3RoIGNsYXVzZXMgYXJlIGNvdmVyZWQpLgor CSAqCisJICogVGhlIHZhbHVlcyBmb3IgcmVkdWRlZCBzdGF0aXN0aWNzICh0 aGF0IGNhbid0IGJlIGFwcGxpZWQpIGFyZQorCSAqIG5vdCBjb21wdXRlZCwg YmVjYXVzZSB0aGF0J2QgYmUgcG9pbnRsZXNzLgorCSAqLworCWludAkqbnVt X2Nvdl9jbGF1c2VzCT0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5t dnN0YXRzKTsKKwlpbnQJKm51bV9jb3ZfY29sdW1ucwk9IChpbnQqKXBhbGxv YzAoc2l6ZW9mKGludCkgKiBubXZzdGF0cyk7CisKKwkvKgorCSAqIFNhbWUg YXMgYWJvdmUsIGJ1dCB0aGlzIG9ubHkgaW5jbHVkZXMgY2xhdXNlcyB0aGF0 IGFyZSBhbHJlYWR5CisJICogY292ZXJlZCBieSB0aGUgcHJldmlvdXMgc3Rh dHMgKGFuZCB0aGUgY3VycmVudCBvbmUpLgorCSAqLworCWludAkqbnVtX2Nv bmRfY2xhdXNlcwk9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGludCkgKiBubXZz dGF0cyk7CisJaW50CSpudW1fY29uZF9jb2x1bW5zCT0gKGludCopcGFsbG9j MChzaXplb2YoaW50KSAqIG5tdnN0YXRzKTsKKworCS8qCisJICogTnVtYmVy IG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2ggY2xhdXNlLgorCSAqCisJICogVE9E TyBNaWdodCBiZSBjb21wdXRlZCBpbiBjaG9vc2VfbXZfc3RhdGlzdGljcygp IGFuZCB0aGVuIHBhc3NlZAorCSAqICAgICAgaGVyZSwgYnV0IHRoZW4gdGhl IGZ1bmN0aW9uIHdvdWxkIG5vdCBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZQor CSAqICAgICAgYXMgX2V4aGF1c3RpdmUoKS4KKwkgKi8KKwlpbnQgKmF0dG51 bV9jb3VudHMgPSAoaW50KilwYWxsb2MwKHNpemVvZihpbnQpICogbmNsYXVz ZXMpOworCWludCAqYXR0bnVtX2NvbmRfY291bnRzID0gKGludCopcGFsbG9j MChzaXplb2YoaW50KSAqIG5jb25kaXRpb25zKTsKKworCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CisKKwlBc3NlcnQoYmVzdCAhPSBOVUxMKTsKKwlBc3Nl cnQoKHN0ZXAgPT0gMCAmJiBjdXJyZW50ID09IE5VTEwpIHx8IChzdGVwID4g MCAmJiBjdXJyZW50ICE9IE5VTEwpKTsKKworCS8qIGNvbXB1dGUgYXR0cmli dXRlcyAoY29sdW1ucykgZm9yIGVhY2ggY2xhdXNlICovCisJZm9yIChpID0g MDsgaSA8IG5jbGF1c2VzOyBpKyspCisJCWF0dG51bV9jb3VudHNbaV0gPSBi bXNfbnVtX21lbWJlcnMoY2xhdXNlc19hdHRudW1zW2ldKTsKKworCS8qIGNv bXB1dGUgYXR0cmlidXRlcyAoY29sdW1ucykgZm9yIGVhY2ggY29uZGl0aW9u ICovCisJZm9yIChpID0gMDsgaSA8IG5jb25kaXRpb25zOyBpKyspCisJCWF0 dG51bV9jb25kX2NvdW50c1tpXSA9IGJtc19udW1fbWVtYmVycyhjb25kaXRp b25zX2F0dG51bXNbaV0pOworCisJLyogc2VlIHdoaWNoIGNsYXVzZXMgYXJl IGFscmVhZHkgY292ZXJlZCBhdCB0aGlzIHBvaW50IChieSBwcmV2aW91cyBz dGF0cykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RlcDsgaSsrKQorCQlmb3Ig KGogPSAwOyBqIDwgbmNsYXVzZXM7IGorKykKKwkJCWNvdmVyZWRfY2xhdXNl c1tqXSB8PSAoY292ZXJfbWFwW2N1cnJlbnQtPnN0YXRzW2ldICogbmNsYXVz ZXMgKyBqXSk7CisKKwkvKiB3aGljaCByZW1haW5pbmcgc3RhdGlzdGljcyBj b3ZlcnMgbW9zdCBjbGF1c2VzIC8gdXNlcyBtb3N0IGNvbmRpdGlvbnM/ICov CisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJeworCQlCaXRt YXBzZXQgKmF0dG51bXNfY292ZXJlZCA9IE5VTEw7CisJCUJpdG1hcHNldCAq YXR0bnVtc19jb25kaXRpb25zID0gTlVMTDsKKworCQkvKiBza2lwIHN0YXRz IHRoYXQgYXJlIGFscmVhZHkgcnVsZWQgb3V0IChlaXRoZXIgdXNlZCBvciBp bmFwcGxpY2FibGUpICovCisJCWlmIChydWxlZF9vdXRbaV0gIT0gLTEpCisJ CQljb250aW51ZTsKKworCQkvKiBjb3VudCBjb3ZlcmVkIGNsYXVzZXMgYW5k IGNvbmRpdGlvbnMgKGZvciB0aGUgc3RhdGlzdGljcykgKi8KKwkJZm9yIChq ID0gMDsgaiA8IG5jbGF1c2VzOyBqKyspCisJCXsKKwkJCWlmIChjb3Zlcl9t YXBbaSAqIG5jbGF1c2VzICsgal0pCisJCQl7CisJCQkJQml0bWFwc2V0ICph dHRudW1zX25ldworCQkJCQk9IGJtc191bmlvbihhdHRudW1zX2NvdmVyZWQs IGNsYXVzZXNfYXR0bnVtc1tqXSk7CisKKwkJCQkvKiBnZXQgcmlkIG9mIHRo ZSBvbGQgYml0bWFwIGFuZCBrZWVwIHRoZSB1bmlmaWVkIHJlc3VsdCAqLwor CQkJCWJtc19mcmVlKGF0dG51bXNfY292ZXJlZCk7CisJCQkJYXR0bnVtc19j b3ZlcmVkID0gYXR0bnVtc19uZXc7CisKKwkJCQludW1fY292X2NsYXVzZXNb aV0gKz0gMTsKKwkJCQludW1fY292X2NvbHVtbnNbaV0gKz0gYXR0bnVtX2Nv dW50c1tqXTsKKworCQkJCS8qIGlzIHRoZSBjbGF1c2UgYWxyZWFkeSBjb3Zl cmVkIChpLmUuIGEgY29uZGl0aW9uKT8gKi8KKwkJCQlpZiAoY292ZXJlZF9j bGF1c2VzW2pdKQorCQkJCXsKKwkJCQkJbnVtX2NvbmRfY2xhdXNlc1tpXSAr PSAxOworCQkJCQludW1fY29uZF9jb2x1bW5zW2ldICs9IGF0dG51bV9jb3Vu dHNbal07CisJCQkJCWF0dG51bXNfbmV3ID0gYm1zX3VuaW9uKGF0dG51bXNf Y29uZGl0aW9ucywKKwkJCQkJCQkJCQkJY2xhdXNlc19hdHRudW1zW2pdKTsK KworCQkJCQlibXNfZnJlZShhdHRudW1zX2NvbmRpdGlvbnMpOworCQkJCQlh dHRudW1zX2NvbmRpdGlvbnMgPSBhdHRudW1zX25ldzsKKwkJCQl9CisJCQl9 CisJCX0KKworCQkvKiBpZiBhbGwgY292ZXJlZCBjbGF1c2VzIGFyZSBjb3Zl cmVkIGJ5IHByZXYgc3RhdHMgKHRodXMgY29uZGl0aW9ucykgKi8KKwkJaWYg KG51bV9jb3ZfY2xhdXNlc1tpXSA9PSBudW1fY29uZF9jbGF1c2VzW2ldKQor CQkJcnVsZWRfb3V0W2ldID0gc3RlcDsKKworCQkvKiBzYW1lIGlmIHRoZXJl IGFyZSBubyBuZXcgYXR0cmlidXRlcyAqLworCQllbHNlIGlmIChibXNfbnVt X21lbWJlcnMoYXR0bnVtc19jb25kaXRpb25zKSA9PSBibXNfbnVtX21lbWJl cnMoYXR0bnVtc19jb3ZlcmVkKSkKKwkJCXJ1bGVkX291dFtpXSA9IHN0ZXA7 CisKKwkJYm1zX2ZyZWUoYXR0bnVtc19jb3ZlcmVkKTsKKwkJYm1zX2ZyZWUo YXR0bnVtc19jb25kaXRpb25zKTsKKworCQkvKiBpZiB0aGUgc3RhdGlzdGlj cyBpcyBpbmFwcGxpY2FibGUsIHRyeSB0aGUgbmV4dCBvbmUgKi8KKwkJaWYg KHJ1bGVkX291dFtpXSAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIG5v dyBsZXQncyB3YWxrIHRocm91Z2ggY29uZGl0aW9ucyBhbmQgY291bnQgdGhl IGNvdmVyZWQgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5jb25kaXRpb25zOyBq KyspCisJCXsKKwkJCWlmIChjb25kaXRpb25fbWFwW2kgKiBuY29uZGl0aW9u cyArIGpdKQorCQkJeworCQkJCW51bV9jb25kX2NsYXVzZXNbaV0gKz0gMTsK KwkJCQludW1fY29uZF9jb2x1bW5zW2ldICs9IGF0dG51bV9jb25kX2NvdW50 c1tqXTsKKwkJCX0KKwkJfQorCisJCS8qIG90aGVyd2lzZSBzZWUgaWYgdGhp cyBpbXByb3ZlcyB0aGUgaW50ZXJlc3RpbmcgbWV0cmljcyAqLworCQlnYWlu ID0gbnVtX2NvbmRfY29sdW1uc1tpXSAvIChkb3VibGUpbnVtX2Nvdl9jb2x1 bW5zW2ldOworCisJCWlmIChnYWluID4gbWF4X2dhaW4pCisJCXsKKwkJCW1h eF9nYWluID0gZ2FpbjsKKwkJCWJlc3Rfc3RhdCA9IGk7CisJCX0KKwl9CisK KwkvKgorCSAqIEhhdmUgd2UgZm91bmQgYSBzdWl0YWJsZSBzdGF0aXN0aWNz PyBBZGQgaXQgdG8gdGhlIHNvbHV0aW9uIGFuZAorCSAqIHRyeSBuZXh0IHN0 ZXAuCisJICovCisJaWYgKGJlc3Rfc3RhdCAhPSAtMSkKKwl7CisJCS8qIG1h cmsgdGhlIHN0YXRpc3RpY3MsIHNvIHRoYXQgd2Ugc2tpcCBpdCBpbiBuZXh0 IHN0ZXBzICovCisJCXJ1bGVkX291dFtiZXN0X3N0YXRdID0gc3RlcDsKKwor CQkvKiBhbGxvY2F0ZSBjdXJyZW50IHNvbHV0aW9uIGlmIG5lY2Vzc2FyeSAq LworCQlpZiAoY3VycmVudCA9PSBOVUxMKQorCQl7CisJCQljdXJyZW50ID0g KG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6ZW9mKG12X3NvbHV0aW9uX3Qp KTsKKwkJCWN1cnJlbnQtPnN0YXRzID0gKGludCopcGFsbG9jMChzaXplb2Yo aW50KSpubXZzdGF0cyk7CisJCQljdXJyZW50LT5uc3RhdHMgPSAwOworCQkJ Y3VycmVudC0+bmNsYXVzZXMgPSAwOworCQkJY3VycmVudC0+bmNvbmRpdGlv bnMgPSAwOworCQl9CisKKwkJY3VycmVudC0+bmNsYXVzZXMgKz0gbnVtX2Nv dl9jbGF1c2VzW2Jlc3Rfc3RhdF07CisJCWN1cnJlbnQtPm5jb25kaXRpb25z ICs9IG51bV9jb25kX2NsYXVzZXNbYmVzdF9zdGF0XTsKKwkJY3VycmVudC0+ c3RhdHNbc3RlcF0gPSBiZXN0X3N0YXQ7CisJCWN1cnJlbnQtPm5zdGF0cysr OworCisJCWlmICgqYmVzdCA9PSBOVUxMKQorCQl7CisJCQkoKmJlc3QpID0g KG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6ZW9mKG12X3NvbHV0aW9uX3Qp KTsKKwkJCSgqYmVzdCktPm5zdGF0cyA9IGN1cnJlbnQtPm5zdGF0czsKKwkJ CSgqYmVzdCktPm5jbGF1c2VzID0gY3VycmVudC0+bmNsYXVzZXM7CisJCQko KmJlc3QpLT5uY29uZGl0aW9ucyA9IGN1cnJlbnQtPm5jb25kaXRpb25zOwor CisJCQkoKmJlc3QpLT5zdGF0cyA9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGlu dCkqbm12c3RhdHMpOworCQkJbWVtY3B5KCgqYmVzdCktPnN0YXRzLCBjdXJy ZW50LT5zdGF0cywgbm12c3RhdHMgKiBzaXplb2YoaW50KSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKiBzZWUgaWYgdGhpcyBpcyBhIGJldHRlciBzb2x1 dGlvbiAqLworCQkJZG91YmxlIGN1cnJlbnRfZ2FpbiA9IChkb3VibGUpY3Vy cmVudC0+bmNvbmRpdGlvbnMgLyBjdXJyZW50LT5uY2xhdXNlczsKKwkJCWRv dWJsZSBiZXN0X2dhaW4gICAgPSAoZG91YmxlKSgqYmVzdCktPm5jb25kaXRp b25zIC8gKCpiZXN0KS0+bmNsYXVzZXM7CisKKwkJCWlmICgoY3VycmVudF9n YWluID4gYmVzdF9nYWluKSB8fAorCQkJCSgoY3VycmVudF9nYWluID09IGJl c3RfZ2FpbikgJiYgKGN1cnJlbnQtPm5zdGF0cyA8ICgqYmVzdCktPm5zdGF0 cykpKQorCQkJeworCQkJCSgqYmVzdCktPm5zdGF0cyA9IGN1cnJlbnQtPm5z dGF0czsKKwkJCQkoKmJlc3QpLT5uY2xhdXNlcyA9IGN1cnJlbnQtPm5jbGF1 c2VzOworCQkJCSgqYmVzdCktPm5jb25kaXRpb25zID0gY3VycmVudC0+bmNv bmRpdGlvbnM7CisJCQkJbWVtY3B5KCgqYmVzdCktPnN0YXRzLCBjdXJyZW50 LT5zdGF0cywgbm12c3RhdHMgKiBzaXplb2YoaW50KSk7CisJCQl9CisJCX0K KworCQkvKgorCQkgKiBUaGUgcmVjdXJzaW9uIG9ubHkgbWFrZXMgc2Vuc2Ug aWYgd2UgaGF2ZW4ndCBjb3ZlcmVkIGFsbCB0aGUKKwkJICogYXR0cmlidXRl cyAodGhlbiBhZGRpbmcgc3RhdHMgaXMgbm90IHJlYWxseSBwb3NzaWJsZSku CisJCSovCisJCWlmICgoc3RlcCArIDEpIDwgbm12c3RhdHMpCisJCQljaG9v c2VfbXZfc3RhdGlzdGljc19ncmVlZHkocm9vdCwgc3RlcCsxLAorCQkJCQkJ CQkJbm12c3RhdHMsIG12c3RhdHMsIHN0YXRzX2F0dG51bXMsCisJCQkJCQkJ CQluY2xhdXNlcywgY2xhdXNlcywgY2xhdXNlc19hdHRudW1zLAorCQkJCQkJ CQkJbmNvbmRpdGlvbnMsIGNvbmRpdGlvbnMsIGNvbmRpdGlvbnNfYXR0bnVt cywKKwkJCQkJCQkJCWNvdmVyX21hcCwgY29uZGl0aW9uX21hcCwgcnVsZWRf b3V0LAorCQkJCQkJCQkJY3VycmVudCwgYmVzdCk7CisKKwkJLyogcmVzZXQg dGhlIGxhc3Qgc3RlcCAqLworCQljdXJyZW50LT5uY2xhdXNlcyAtPSBudW1f Y292X2NsYXVzZXNbYmVzdF9zdGF0XTsKKwkJY3VycmVudC0+bmNvbmRpdGlv bnMgLT0gbnVtX2NvbmRfY2xhdXNlc1tiZXN0X3N0YXRdOworCQljdXJyZW50 LT5uc3RhdHMgLT0gMTsKKwkJY3VycmVudC0+c3RhdHNbc3RlcF0gPSAwOwor CisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3MgYXMgdXNhYmxlIGFnYWluICov CisJCXJ1bGVkX291dFtiZXN0X3N0YXRdID0gLTE7CisJfQorCisJLyogcmVz ZXQgYWxsIHN0YXRpc3RpY3MgZWxpbWluYXRlZCBpbiB0aGlzIHN0ZXAgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJaWYgKHJ1bGVk X291dFtpXSA9PSBzdGVwKQorCQkJcnVsZWRfb3V0W2ldID0gLTE7CisKKwkv KiBmcmVlIGV2ZXJ5dGhpbmcgYWxsb2NhdGVkIGluIHRoaXMgc3RlcCAqLwor CXBmcmVlKGNvdmVyZWRfY2xhdXNlcyk7CisJcGZyZWUoYXR0bnVtX2NvdW50 cyk7CisJcGZyZWUobnVtX2Nvdl9jbGF1c2VzKTsKKwlwZnJlZShudW1fY292 X2NvbHVtbnMpOworCXBmcmVlKG51bV9jb25kX2NsYXVzZXMpOworCXBmcmVl KG51bV9jb25kX2NvbHVtbnMpOworfQorCisvKgorICogUmVtb3ZlIGNsYXVz ZXMgbm90IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBhdmFpbGFibGUgc3RhdGlz dGljcworICoKKyAqIFRoaXMgaGVscHMgdXMgdG8gcmVkdWNlIHRoZSBhbW91 bnQgb2Ygd29yayBkb25lIGluIGNob29zZV9tdl9zdGF0aXN0aWNzKCkKKyAq IGJ5IG5vdCBoYXZpbmcgdG8gZGVhbCB3aXRoIGNsYXVzZXMgdGhhdCBjYW4n dCBwb3NzaWJseSBiZSB1c2VmdWwuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2Zp bHRlcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwg aW50IHR5cGUsCisJCQkgICBMaXN0ICpzdGF0cywgTGlzdCAqY2xhdXNlcywg Qml0bWFwc2V0ICoqYXR0bnVtcykKK3sKKwlMaXN0Q2VsbCAgICpjOworCUxp c3RDZWxsICAgKnM7CisKKwkvKiByZXN1bHRzIChsaXN0IG9mIGNvbXBhdGli bGUgY2xhdXNlcywgYXR0bnVtcykgKi8KKwlMaXN0CSAgICpyY2xhdXNlcyA9 IE5JTDsKKworCWZvcmVhY2ggKGMsIGNsYXVzZXMpCisJeworCQlOb2RlICpj bGF1c2UgPSAoTm9kZSopbGZpcnN0KGMpOworCQlCaXRtYXBzZXQgKmNsYXVz ZV9hdHRudW1zID0gTlVMTDsKKworCQkvKgorCQkgKiBXZSBkbyBhc3N1bWUg dGhhdCB0aGFua3MgdG8gcHJldmlvdXMgY2hlY2tzLCB3ZSBzaG91bGQgbm90 IHJ1biBpbnRvCisJCSAqIGNsYXVzZXMgdGhhdCBhcmUgaW5jb21wYXRpYmxl IHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzIGhlcmUuIFdlIGFsc28KKwkJICog bmVlZCB0byBjb2xsZWN0IHRoZSBhdHRudW1zIGZvciB0aGUgY2xhdXNlLgor CQkgKgorCQkgKiBYWFggTWF5YmUgdHVybiB0aGlzIGludG8gYW4gYXNzZXJ0 PworCQkgKi8KKwkJaWYgKCEgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xh dXNlLCByZWxpZCwgJmNsYXVzZV9hdHRudW1zLCB0eXBlKSkKKwkJCQllbG9n KEVSUk9SLCAic2hvdWxkIG5vdCBnZXQgbm9uLW12LWNvbXBhdGlibGUgY2x1 YXNlIik7CisKKwkJLyogSXMgdGhlcmUgYSBtdWx0aXZhcmlhdGUgc3RhdGlz dGljcyBjb3ZlcmluZyB0aGUgY2xhdXNlPyAqLworCQlmb3JlYWNoIChzLCBz dGF0cykKKwkJeworCQkJaW50IGssIG1hdGNoZXMgPSAwOworCQkJTVZTdGF0 aXN0aWNJbmZvCSpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChz KTsKKworCQkJLyogc2tpcCBzdGF0aXN0aWNzIG5vdCBtYXRjaGluZyB0aGUg cmVxdWlyZWQgdHlwZSAqLworCQkJaWYgKCEgc3RhdHNfdHlwZV9tYXRjaGVz KHN0YXQsIHR5cGUpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICog c2VlIGlmIGFsbCBjbGF1c2UgYXR0cmlidXRlcyBhcmUgY292ZXJlZCBieSB0 aGUgc3RhdGlzdGljCisJCQkgKgorCQkJICogV2UnbGwgZG8gdGhhdCBpbiB0 aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBpLmUuIHdlJ2xsIHNlZSBob3cgbWFu eQorCQkJICogYXR0cmlidXRlcyBvZiB0aGUgc3RhdGlzdGljIGFyZSByZWZl cmVuY2VkIGluIHRoZSBjbGF1c2UsIGFuZCB0aGVuCisJCQkgKiBjb21wYXJl IHRoZSBjb3VudHMuCisJCQkgKi8KKwkJCWZvciAoayA9IDA7IGsgPCBzdGF0 LT5zdGFrZXlzLT5kaW0xOyBrKyspCisJCQkJaWYgKGJtc19pc19tZW1iZXIo c3RhdC0+c3Rha2V5cy0+dmFsdWVzW2tdLCBjbGF1c2VfYXR0bnVtcykpCisJ CQkJCW1hdGNoZXMgKz0gMTsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBudW1i ZXIgb2YgbWF0Y2hlcyBpcyBlcXVhbCB0byBhdHRyaWJ1dGVzIHJlZmVyZW5j ZWQgYnkgdGhlCisJCQkgKiBjbGF1c2UsIHRoZW4gdGhlIGNsYXVzZSBpcyBj b3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWMuCisJCQkgKi8KKwkJCWlmIChibXNf bnVtX21lbWJlcnMoY2xhdXNlX2F0dG51bXMpID09IG1hdGNoZXMpCisJCQl7 CisJCQkJKmF0dG51bXMgPSBibXNfdW5pb24oKmF0dG51bXMsIGNsYXVzZV9h dHRudW1zKTsKKwkJCQlyY2xhdXNlcyA9IGxhcHBlbmQocmNsYXVzZXMsIGNs YXVzZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlibXNfZnJlZShj bGF1c2VfYXR0bnVtcyk7CisJfQorCisJLyogd2UgY2FuJ3QgaGF2ZSBtb3Jl IGNvbXBhdGlibGUgY29uZGl0aW9ucyB0aGFuIHNvdXJjZSBjb25kaXRpb25z ICovCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IGxpc3RfbGVu Z3RoKHJjbGF1c2VzKSk7CisKKwlyZXR1cm4gcmNsYXVzZXM7Cit9CisKKy8q CisgKiBSZW1vdmUgc3RhdGlzdGljcyBub3QgY292ZXJpbmcgYW55IG5ldyBj bGF1c2VzCisgKgorICogU3RhdGlzdGljcyBub3QgY292ZXJpbmcgYW55IG5l dyBjbGF1c2VzIChjb25kaXRpb25zIGRvbid0IGNvdW50KSBhcmUgbm90Cisg KiByZWFsbHkgdXNlZnVsLCBzbyBsZXQncyBpZ25vcmUgdGhlbS4gQWxzbywg d2UgbmVlZCB0aGUgc3RhdGlzdGljcyB0bworICogcmVmZXJlbmNlIGF0IGxl YXN0IHR3byBkaWZmZXJlbnQgYXR0cmlidXRlcyAoYm90aCBpbiBjb25kaXRp b25zIGFuZCBjbGF1c2VzCisgKiBjb21iaW5lZCksIGFuZCBhdCBsZWFzdCBv bmUgb2YgdGhlbSBpbiB0aGUgY2xhdXNlcyBhbG9uZS4KKyAqCisgKiBUaGlz IGNoZWNrIG1pZ2h0IGJlIG1hZGUgbW9yZSBzdHJpY3QgYnkgY2hlY2tpbmcg YWdhaW5zdCBpbmRpdmlkdWFsIGNsYXVzZXMsCisgKiBiZWNhdXNlIGJ5IHVz aW5nIHRoZSBiaXRtYXBzZXRzIG9mIGFsbCBhdHRudW1zIHdlIG1heSBhY3R1 YWxseSB1c2UgYXR0bnVtcworICogZnJvbSBjbGF1c2VzIHRoYXQgYXJlIG5v dCBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzLiBGb3IgZXhhbXBsZSwgd2Ug bWF5CisgKiBoYXZlIGEgY29uZGl0aW9uCisgKgorICogICAgKGE9MSBBTkQg Yj0yKQorICoKKyAqIGFuZCBhIG5ldyBjbGF1c2UKKyAqCisgKiAgICAoYz0x IEFORCBkPTEpCisgKgorICogV2l0aCBvbmx5IGJpdG1hcHNldHMsIHN0YXRp c3RpY3Mgb24gW2IsY10gd2lsbCBwYXNzIHRocm91Z2ggdGhpcyAoYXNzdW1p bmcKKyAqIHRoZXJlIGFyZSBzb21lIHN0YXRpc3RpY3MgY292ZXJpbmcgYm90 aCBjbGFzZXMpLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogICAgIHN0 YXRzICAgICAgIC0gbGlzdCBvZiBzdGF0aXN0aWNzIHRvIGZpbHRlcgorICog ICAgIG5ld19hdHRudW1zIC0gYXR0bnVtcyByZWZlcmVuY2VkIGluIG5ldyBj bGF1c2VzCisgKiAgICAgYWxsX2F0dG51bXMgLSBhdHRudW1zIHJlZmVyZW5j ZWQgYnkgY29udGlkaW9ucyBhbmQgbmV3IGNsYXVzZXMgY29tYmluZWQKKyAq CisgKiBSZXR1cm5zIGZpbHRlcmVkIGxpc3Qgb2Ygc3RhdGlzdGljcy4KKyAq CisgKiBUT0RPIERvIHRoZSBtb3JlIHN0cmljdCBjaGVjaywgaS5lLiB3YWxr IHRocm91Z2ggaW5kaXZpZHVhbCBjbGF1c2VzIGFuZAorICogICAgICBjb25k aXRpb25zIGFuZCBvbmx5IHVzZSB0aG9zZSBjb3ZlcmVkIGJ5IHRoZSBzdGF0 aXN0aWNzLgorICovCitzdGF0aWMgTGlzdCAqCitmaWx0ZXJfc3RhdHMoTGlz dCAqc3RhdHMsIEJpdG1hcHNldCAqbmV3X2F0dG51bXMsIEJpdG1hcHNldCAq YWxsX2F0dG51bXMpCit7CisJTGlzdENlbGwgICAqczsKKwlMaXN0CSAgICpz dGF0c19maWx0ZXJlZCA9IE5JTDsKKworCWZvcmVhY2ggKHMsIHN0YXRzKQor CXsKKwkJaW50IGs7CisJCWludCBtYXRjaGVzX25ldyA9IDAsCisJCQltYXRj aGVzX2FsbCA9IDA7CisKKwkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1W U3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsKKworCQkvKiBzZWUgaG93IG1h bnkgYXR0cmlidXRlcyB0aGUgc3RhdGlzdGljcyBjb3ZlcnMgKi8KKwkJZm9y IChrID0gMDsgayA8IHN0YXQtPnN0YWtleXMtPmRpbTE7IGsrKykKKwkJewor CQkJLyogYXR0cmlidXRlcyBmcm9tIG5ldyBjbGF1c2VzICovCisJCQlpZiAo Ym1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10sIG5ld19h dHRudW1zKSkKKwkJCQltYXRjaGVzX25ldyArPSAxOworCisJCQkvKiBhdHRy aWJ1dGVzIGZyb20gb25kaXRpb25zICovCisJCQlpZiAoYm1zX2lzX21lbWJl cihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10sIGFsbF9hdHRudW1zKSkKKwkJ CQltYXRjaGVzX2FsbCArPSAxOworCQl9CisKKwkJLyogY2hlY2sgd2UgaGF2 ZSBlbm91Z2ggYXR0cmlidXRlcyBmb3IgdGhpcyBzdGF0aXN0aWNzICovCisJ CWlmICgobWF0Y2hlc19uZXcgPj0gMSkgJiYgKG1hdGNoZXNfYWxsID49IDIp KQorCQkJc3RhdHNfZmlsdGVyZWQgPSBsYXBwZW5kKHN0YXRzX2ZpbHRlcmVk LCBzdGF0KTsKKwl9CisKKwkvKiB3ZSBjYW4ndCBoYXZlIG1vcmUgdXNlZnVs IHN0YXRzIHRoYW4gd2UgaGFkIG9yaWdpbmFsbHkgKi8KKwlBc3NlcnQobGlz dF9sZW5ndGgoc3RhdHMpID49IGxpc3RfbGVuZ3RoKHN0YXRzX2ZpbHRlcmVk KSk7CisKKwlyZXR1cm4gc3RhdHNfZmlsdGVyZWQ7Cit9CisKK3N0YXRpYyBN VlN0YXRpc3RpY0luZm8gKgorbWFrZV9zdGF0c19hcnJheShMaXN0ICpzdGF0 cywgaW50ICpubXZzdGF0cykKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAgICps OworCisJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzID0gTlVMTDsKKwkqbm12 c3RhdHMgPSBsaXN0X2xlbmd0aChzdGF0cyk7CisKKwltdnN0YXRzCisJCT0g KE1WU3RhdGlzdGljSW5mbyopcGFsbG9jMCgoKm5tdnN0YXRzKSAqIHNpemVv ZihNVlN0YXRpc3RpY0luZm8pKTsKKworCWkgPSAwOworCWZvcmVhY2ggKGws IHN0YXRzKQorCXsKKwkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1WU3Rh dGlzdGljSW5mbyAqKWxmaXJzdChsKTsKKwkJbWVtY3B5KCZtdnN0YXRzW2kr K10sIHN0YXQsIHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKwl9CisKKwly ZXR1cm4gbXZzdGF0czsKK30KKworc3RhdGljIEJpdG1hcHNldCAqKgorbWFr ZV9zdGF0c19hdHRudW1zKE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgaW50 IG5tdnN0YXRzKQoreworCWludAkJCWksIGo7CisJQml0bWFwc2V0ICoqc3Rh dHNfYXR0bnVtcyA9IE5VTEw7CisKKwlBc3NlcnQobm12c3RhdHMgPiAwKTsK IAotCXJldHVybiByZXN1bHQ7CisJLyogYnVpbGQgYml0bWFwcyBvZiBhdHRu dW1zIGZvciB0aGUgc3RhdHMgKGVhc2llciB0byBjb21wYXJlKSAqLworCXN0 YXRzX2F0dG51bXMgPSAoQml0bWFwc2V0ICoqKXBhbGxvYzAobm12c3RhdHMg KiBzaXplb2YoQml0bWFwc2V0KikpOworCisJZm9yIChpID0gMDsgaSA8IG5t dnN0YXRzOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBtdnN0YXRzW2ldLnN0 YWtleXMtPmRpbTE7IGorKykKKwkJCXN0YXRzX2F0dG51bXNbaV0KKwkJCQk9 IGJtc19hZGRfbWVtYmVyKHN0YXRzX2F0dG51bXNbaV0sCisJCQkJCQkJCSBt dnN0YXRzW2ldLnN0YWtleXMtPnZhbHVlc1tqXSk7CisKKwlyZXR1cm4gc3Rh dHNfYXR0bnVtczsKIH0KIAorCiAvKgotICogQ29sbGVjdCBhdHRyaWJ1dGVz IGZyb20gbXYtY29tcGF0aWJsZSBjbGF1c2VzLgorICogUmVtb3ZlIHJlZHVu ZGFudCBzdGF0aXN0aWNzCisgKgorICogSWYgdGhlcmUgYXJlIG11bHRpcGxl IHN0YXRpc3RpY3MgY292ZXJpbmcgdGhlIHNhbWUgc2V0IG9mIGNvbHVtbnMg KGNvdW50aW5nCisgKiBvbmx5IHRob3NlIHJlZmVyZW5jZWQgYnkgY2xhdXNl cyBhbmQgY29uZGl0aW9ucyksIHdlIGNhbiBhcHBseSBvbmUgb2YgdGhvc2UK KyAqIGFueXdheSBhbmQgZnVydGhlciByZWR1Y2UgdGhlIHNpemUgb2YgdGhl IG9wdGltaXphdGlvbiBwcm9ibGVtLgorICoKKyAqIFRodXMgd2hlbiByZWR1 bmRhbnQgc3RhdHMgYXJlIGRldGVjdGVkLCB3ZSBrZWVwIHRoZSBzbWFsbGVy IG9uZSAodGhlIG9uZSB3aXRoCisgKiBmZXdlciBjb2x1bW5zKSwgYmFzZWQg b24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCdzIG1vcmUgYWNjdXJhdGUgYW5k IGFsc28KKyAqIGZhc3RlciB0byBwcm9jZXNzLiBUaGF0IG1heSBiZSB1bnRy dWUgZm9yIHR3byByZWFzb25zIC0gZmlyc3QsIHRoZSBhY2N1cmFjeQorICog cmVhbGx5IGRlcGVuZHMgb24gbnVtYmVyIG9mIGJ1Y2tldHMvTUNWIGl0ZW1z LCBub3QgdGhlIG51bWJlciBvZiBjb2x1bW5zLgorICogU2Vjb25kLCBzb21l IHR5cGVzIG9mIHN0YXRpc3RpY3MgbWF5IHdvcmsgYmV0dGVyIGZvciBjZXJ0 YWluIHR5cGVzIG9mIGNsYXVzZXMKKyAqIChlLmcuIE1DViBsaXN0cyBmb3Ig ZXF1YWxpdHkgY29uZGl0aW9ucykgZXRjLgogICovCi1zdGF0aWMgQml0bWFw c2V0ICoKLWNvbGxlY3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRl eCByZWxpZCwgaW50IHR5cGVzKQorc3RhdGljIExpc3QqCitmaWx0ZXJfcmVk dW5kYW50X3N0YXRzKExpc3QgKnN0YXRzLCBMaXN0ICpjbGF1c2VzLCBMaXN0 ICpjb25kaXRpb25zKQogewotCUJpdG1hcHNldCAgKmF0dG51bXMgPSBOVUxM OwotCUxpc3RDZWxsICAgKmw7CisJaW50IGksIGosIG5tdnN0YXRzOworCisJ TVZTdGF0aXN0aWNJbmZvCSAgICptdnN0YXRzOworCWJvb2wJCQkgICAqcmVk dW5kYW50OworCUJpdG1hcHNldAkJICAqKnN0YXRzX2F0dG51bXM7CisJQml0 bWFwc2V0CQkgICAqdmFyYXR0bm9zOworCUluZGV4CQkJCXJlbGlkOworCisJ QXNzZXJ0KGxpc3RfbGVuZ3RoKHN0YXRzKSA+IDApOworCUFzc2VydChsaXN0 X2xlbmd0aChjbGF1c2VzKSA+IDApOwogCiAJLyoKLQkgKiBXYWxrIHRocm91 Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBl c3RpbWF0ZSB1c2luZwotCSAqIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJl bWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbCB0aGVuCi0JICogY3Jv c3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkg aWYgbmVlZGVkIHdlJ2xsIHNwbGl0Ci0JICogdGhlIGNsYXVzZXMgaW50byBt dWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICogV2UnbGwgY29u dmVydCB0aGUgbGlzdCBvZiBzdGF0aXN0aWNzIGludG8gYW4gYXJyYXkgbm93 LCBiZWNhdXNlCisJICogdGhlIHJlZHVjdGlvbiBvZiByZWR1bmRhbnQgc3Rh dGlzdGljcyBpcyBlYXNpZXIgdG8gZG8gdGhhdCB3YXkKKwkgKiAod2UgY2Fu IG1hcmsgcHJldmlvdXMgc3RhdHMgYXMgcmVkdW5kYW50LCBldGMuKS4KKwkg Ki8KKwltdnN0YXRzID0gbWFrZV9zdGF0c19hcnJheShzdGF0cywgJm5tdnN0 YXRzKTsKKwlzdGF0c19hdHRudW1zID0gbWFrZV9zdGF0c19hdHRudW1zKG12 c3RhdHMsIG5tdnN0YXRzKTsKKworCS8qIGJ5IGRlZmF1bHQsIG5vbmUgb2Yg dGhlIHN0YXRzIGlzIHJlZHVuZGFudCAoc28gcGFsbG9jMCkgKi8KKwlyZWR1 bmRhbnQgPSBwYWxsb2MwKG5tdnN0YXRzICogc2l6ZW9mKGJvb2wpKTsKKwor CS8qCisJICogV2Ugb25seSBleHBlY3QgYSBzaW5nbGUgcmVsaWQgaGVyZSwg YW5kIGFsc28gd2Ugc2hvdWxkIGdldCB0aGUKKwkgKiBzYW1lIHJlbGlkIGZy b20gY2xhdXNlcyBhbmQgY29uZGl0aW9ucyAoYnV0IHdlIGdldCBpdCBmcm9t CisJICogY2xhdXNlcywgYmVjYXVzZSB0aG9zZSBhcmUgY2VydGFpbmx5IG5v bi1lbXB0eSkuCisJICovCisJcmVsaWQgPSBibXNfc2luZ2xldG9uX21lbWJl cihwdWxsX3Zhcm5vcygoTm9kZSopY2xhdXNlcykpOworCisJLyoKKwkgKiBH ZXQgdGhlIHZhcmF0dG5vcyBmcm9tIGJvdGggY29uZGl0aW9ucyBhbmQgY2xh dXNlcy4KKwkgKgorCSAqIFRoaXMgc2tpcHMgc3lzdGVtIGF0dHJpYnV0ZXMs IGFsdGhvdWdoIHRoYXQgc2hvdWxkIGJlIGltcG9zc2libGUKKwkgKiB0aGFu a3MgdG8gcHJldmlvdXMgZmlsdGVyaW5nIG91dCBvZiBpbmNvbXBhdGlibGUg Y2xhdXNlcy4KIAkgKgotCSAqIEZvciBub3cgd2UncmUgb25seSBpbnRlcmVz dGVkIGluIFJlc3RyaWN0SW5mbyBub2RlcyB3aXRoIG5lc3RlZCBPcEV4cHIs Ci0JICogdXNpbmcgZWl0aGVyIGEgcmFuZ2Ugb3IgZXF1YWxpdHkuCisJICog WFhYIElzIHRoYXQgcmVhbGx5IHRydWU/CiAJICovCi0JZm9yZWFjaCAobCwg Y2xhdXNlcykKKwl2YXJhdHRub3MgPSBibXNfdW5pb24oZ2V0X3ZhcmF0dG5v cygoTm9kZSopY2xhdXNlcywgcmVsaWQpLAorCQkJCQkJICBnZXRfdmFyYXR0 bm9zKChOb2RlKiljb25kaXRpb25zLCByZWxpZCkpOworCisJZm9yIChpID0g MTsgaSA8IG5tdnN0YXRzOyBpKyspCiAJewotCQlOb2RlCSAgICpjbGF1c2Ug PSAoTm9kZSAqKSBsZmlyc3QobCk7CisJCS8qIGludGVyc2VjdCB3aXRoIGN1 cnJlbnQgc3RhdGlzdGljcyAqLworCQlCaXRtYXBzZXQgKmN1cnIgPSBibXNf aW50ZXJzZWN0KHN0YXRzX2F0dG51bXNbaV0sIHZhcmF0dG5vcyk7CiAKLQkJ LyogaWdub3JlIHRoZSByZXN1bHQgaGVyZSAtIHdlIG9ubHkgbmVlZCB0aGUg YXR0bnVtcyAqLwotCQljbGF1c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2Us IHJlbGlkLCAmYXR0bnVtcywgdHlwZXMpOworCQkvKiB3YWxrIHRocm91Z2gg J3ByZXZpb3VzJyBzdGF0cyBhbmQgY2hlY2sgcmVkdW5kYW5jeSAqLworCQlm b3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQl7CisJCQkvKiBpbnRlcnNlY3Qg d2l0aCBjdXJyZW50IHN0YXRpc3RpY3MgKi8KKwkJCUJpdG1hcHNldCAqcHJl djsKKworCQkJLyogc2tpcCBzdGF0cyBhbHJlYWR5IGlkZW50aWZpZWQgYXMg cmVkdW5kYW50ICovCisJCQlpZiAocmVkdW5kYW50W2pdKQorCQkJCWNvbnRp bnVlOworCisJCQlwcmV2ID0gYm1zX2ludGVyc2VjdChzdGF0c19hdHRudW1z W2pdLCB2YXJhdHRub3MpOworCisJCQlzd2l0Y2ggKGJtc19zdWJzZXRfY29t cGFyZShjdXJyLCBwcmV2KSkKKwkJCXsKKwkJCQljYXNlIEJNU19FUVVBTDoK KwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBzbWFsbGVyIG9uZSAoaG9wZWZ1 bGx5IG1vcmUgYWNjdXJhdGUpLgorCQkJCQkgKiBJZiBib3RoIGhhdmUgdGhl IHNhbWUgc2l6ZSwgdXNlIHRoZSBmaXJzdCBvbmUuCisJCQkJCSAqLworCQkJ CQlpZiAobXZzdGF0c1tpXS5zdGFrZXlzLT5kaW0xID49IG12c3RhdHNbal0u c3Rha2V5cy0+ZGltMSkKKwkJCQkJCXJlZHVuZGFudFtpXSA9IFRSVUU7CisJ CQkJCWVsc2UKKwkJCQkJCXJlZHVuZGFudFtqXSA9IFRSVUU7CisKKwkJCQkJ YnJlYWs7CisKKwkJCQljYXNlIEJNU19TVUJTRVQxOiAvKiBjdXJyIGlzIHN1 YnNldCBvZiBwcmV2ICovCisJCQkJCXJlZHVuZGFudFtpXSA9IFRSVUU7CisJ CQkJCWJyZWFrOworCisJCQkJY2FzZSBCTVNfU1VCU0VUMjogLyogcHJldiBp cyBzdWJzZXQgb2YgY3VyciAqLworCQkJCQlyZWR1bmRhbnRbal0gPSBUUlVF OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQk1TX0RJRkZFUkVOVDoKKwkJ CQkJLyogZG8gbm90aGluZyAtIGtlZXAgYm90aCBzdGF0cyAqLworCQkJCQli cmVhazsKKwkJCX0KKworCQkJYm1zX2ZyZWUocHJldik7CisJCX0KKworCQli bXNfZnJlZShjdXJyKTsKIAl9CiAKLQkvKgotCSAqIElmIHRoZXJlIGFyZSBu b3QgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSB0aGUg Y2xhdXNlKHMpLAotCSAqIHdlIGNhbiB0aHJvdyBldmVyeXRoaW5nIG91dCAo YXMgd2UnbGwgcmV2ZXJ0IHRvIHNpbXBsZSBzdGF0cykuCi0JICovCi0JaWYg KGJtc19udW1fbWVtYmVycyhhdHRudW1zKSA8PSAxKQorCS8qIGNhbid0IHJl ZHVjZSBhbGwgc3RhdGlzdGljcyAoYXQgbGVhc3Qgb25lIGhhcyB0byByZW1h aW4pICovCisJQXNzZXJ0KG5tdnN0YXRzID4gMCk7CisKKwkvKiBub3csIGxl dCdzIHJlbW92ZSB0aGUgcmVkdWNlZCBzdGF0aXN0aWNzIGZyb20gdGhlIGFy cmF5cyAqLworCWxpc3RfZnJlZShzdGF0cyk7CisJc3RhdHMgPSBOSUw7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKIAl7Ci0JCWlmIChh dHRudW1zICE9IE5VTEwpCi0JCQlwZnJlZShhdHRudW1zKTsKLQkJYXR0bnVt cyA9IE5VTEw7CisJCU1WU3RhdGlzdGljSW5mbyAqaW5mbzsKKworCQlwZnJl ZShzdGF0c19hdHRudW1zW2ldKTsKKworCQlpZiAocmVkdW5kYW50W2ldKQor CQkJY29udGludWU7CisKKwkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGlj SW5mbyk7CisJCW1lbWNweShpbmZvLCAmbXZzdGF0c1tpXSwgc2l6ZW9mKE1W U3RhdGlzdGljSW5mbykpOworCisJCXN0YXRzID0gbGFwcGVuZChzdGF0cywg aW5mbyk7CiAJfQogCi0JcmV0dXJuIGF0dG51bXM7CisJcGZyZWUobXZzdGF0 cyk7CisJcGZyZWUoc3RhdHNfYXR0bnVtcyk7CisJcGZyZWUocmVkdW5kYW50 KTsKKworCXJldHVybiBzdGF0czsKIH0KIAotLyoKLSAqIENvdW50IHRoZSBu dW1iZXIgb2YgYXR0cmlidXRlcyBpbiBjbGF1c2VzIGNvbXBhdGlibGUgd2l0 aCBtdWx0aXZhcmlhdGUgc3RhdHMuCi0gKi8KLXN0YXRpYyBpbnQKLWNvdW50 X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVsaWQsIGludCB0 eXBlKQorc3RhdGljIE5vZGUqKgorbWFrZV9jbGF1c2VzX2FycmF5KExpc3Qg KmNsYXVzZXMsIGludCAqbmNsYXVzZXMpCiB7Ci0JaW50IGM7Ci0JQml0bWFw c2V0ICphdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKGNsYXVzZXMsIHJl bGlkLCB0eXBlKTsKKwlpbnQgaTsKKwlMaXN0Q2VsbCAqbDsKIAotCWMgPSBi bXNfbnVtX21lbWJlcnMoYXR0bnVtcyk7CisJTm9kZSoqIGNsYXVzZXNfYXJy YXk7CiAKLQlibXNfZnJlZShhdHRudW1zKTsKKwkqbmNsYXVzZXMgPSBsaXN0 X2xlbmd0aChjbGF1c2VzKTsKKwljbGF1c2VzX2FycmF5ID0gKE5vZGUgKiop cGFsbG9jMCgoKm5jbGF1c2VzKSAqIHNpemVvZihOb2RlICopKTsKIAotCXJl dHVybiBjOworCWkgPSAwOworCWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJCWNs YXVzZXNfYXJyYXlbaSsrXSA9IChOb2RlICopbGZpcnN0KGwpOworCisJKm5j bGF1c2VzID0gaTsKKworCXJldHVybiBjbGF1c2VzX2FycmF5OwogfQogCi0v KgotICogQ291bnQgdmFybm9zIHJlZmVyZW5jZWQgaW4gdGhlIGNsYXVzZXMs IGFuZCBpZiB0aGVyZSdzIGEgc2luZ2xlIHZhcm5vIHRoZW4KLSAqIHJldHVy biB0aGUgaW5kZXggaW4gJ3JlbGlkJy4KLSAqLwotc3RhdGljIGludAotY291 bnRfdmFybm9zKExpc3QgKmNsYXVzZXMsIEluZGV4ICpyZWxpZCkKK3N0YXRp YyBCaXRtYXBzZXQgKioKK21ha2VfY2xhdXNlc19hdHRudW1zKFBsYW5uZXJJ bmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJCQkJIGludCB0eXBlLCBOb2Rl ICoqY2xhdXNlcywgaW50IG5jbGF1c2VzKQogewotCWludCBjbnQ7Ci0JQml0 bWFwc2V0ICp2YXJub3MgPSBOVUxMOworCWludAkJCWk7CisJQml0bWFwc2V0 ICoqY2xhdXNlc19hdHRudW1zCisJCT0gKEJpdG1hcHNldCAqKilwYWxsb2Mw KG5jbGF1c2VzICogc2l6ZW9mKEJpdG1hcHNldCAqKSk7CiAKLQl2YXJub3Mg PSBwdWxsX3Zhcm5vcygoTm9kZSAqKSBjbGF1c2VzKTsKLQljbnQgPSBibXNf bnVtX21lbWJlcnModmFybm9zKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmNsYXVz ZXM7IGkrKykKKwl7CisJCUJpdG1hcHNldCAqIGF0dG51bXMgPSBOVUxMOwog Ci0JLyogaWYgdGhlcmUncyBhIHNpbmdsZSB2YXJubyBpbiB0aGUgY2xhdXNl cywgcmVtZW1iZXIgaXQgKi8KLQlpZiAoYm1zX251bV9tZW1iZXJzKHZhcm5v cykgPT0gMSkKLQkJKnJlbGlkID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIodmFy bm9zKTsKKwkJaWYgKCEgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xhdXNl c1tpXSwgcmVsaWQsICZhdHRudW1zLCB0eXBlKSkKKwkJCWVsb2coRVJST1Is ICJzaG91bGQgbm90IGdldCBub24tbXYtY29tcGF0aWJsZSBjbGF1c2UiKTsK IAotCWJtc19mcmVlKHZhcm5vcyk7CisJCWNsYXVzZXNfYXR0bnVtc1tpXSA9 IGF0dG51bXM7CisJfQogCi0JcmV0dXJuIGNudDsKKwlyZXR1cm4gY2xhdXNl c19hdHRudW1zOwogfQotIAorCitzdGF0aWMgYm9vbCoKK21ha2VfY292ZXJf bWFwKEJpdG1hcHNldCAqKnN0YXRzX2F0dG51bXMsIGludCBubXZzdGF0cywK KwkJCSAgIEJpdG1hcHNldCAqKmNsYXVzZXNfYXR0bnVtcywgaW50IG5jbGF1 c2VzKQoreworCWludAkJaSwgajsKKwlib29sICAgKmNvdmVyX21hcAk9IChi b29sKilwYWxsb2MwKG5jbGF1c2VzICogbm12c3RhdHMpOworCisJZm9yIChp ID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBu Y2xhdXNlczsgaisrKQorCQkJY292ZXJfbWFwW2kgKiBuY2xhdXNlcyArIGpd CisJCQkJPSBibXNfaXNfc3Vic2V0KGNsYXVzZXNfYXR0bnVtc1tqXSwgc3Rh dHNfYXR0bnVtc1tpXSk7CisKKwlyZXR1cm4gY292ZXJfbWFwOworfQorCiAv KgotICogV2UncmUgbG9va2luZyBmb3Igc3RhdGlzdGljcyBtYXRjaGluZyBh dCBsZWFzdCAyIGF0dHJpYnV0ZXMsIHJlZmVyZW5jZWQgaW4KLSAqIGNsYXVz ZXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLiBU aGUgY3VycmVudCBzZWxlY3Rpb24KLSAqIGNyaXRlcmlhIGlzIHZlcnkgc2lt cGxlIC0gd2UgY2hvb3NlIHRoZSBzdGF0aXN0aWNzIHJlZmVyZW5jaW5nIHRo ZSBtb3N0Ci0gKiBhdHRyaWJ1dGVzLgotICoKLSAqIElmIHRoZXJlIGFyZSBt dWx0aXBsZSBzdGF0aXN0aWNzIHJlZmVyZW5jaW5nIHRoZSBzYW1lIG51bWJl ciBvZiBjb2x1bW5zCi0gKiAoZnJvbSB0aGUgY2xhdXNlcyksIHRoZSBvbmUg d2l0aCBsZXNzIHNvdXJjZSBjb2x1bW5zIChhcyBsaXN0ZWQgaW4gdGhlCi0g KiBBREQgU1RBVElTVElDUyB3aGVuIGNyZWF0aW5nIHRoZSBzdGF0aXN0aWNz KSB3aW5zLiBFbHNlIHRoZSBmaXJzdCBvbmUgd2lucy4KLSAqCi0gKiBUaGlz IGlzIGEgdmVyeSBzaW1wbGUgY3JpdGVyaWEsIGFuZCBoYXMgc2V2ZXJhbCB3 ZWFrbmVzc2VzOgotICoKLSAqIChhKSBkb2VzIG5vdCBjb25zaWRlciB0aGUg YWNjdXJhY3kgb2YgdGhlIHN0YXRpc3RpY3MKLSAqCi0gKiAgICAgSWYgdGhl cmUgYXJlIHR3byBoaXN0b2dyYW1zIGJ1aWx0IG9uIHRoZSBzYW1lIHNldCBv ZiBjb2x1bW5zLCBidXQgb25lCi0gKiAgICAgaGFzIDEwMCBidWNrZXRzIGFu ZCB0aGUgb3RoZXIgb25lIGhhcyAxMDAwIGJ1Y2tldHMgKHRodXMgbGlrZWx5 Ci0gKiAgICAgcHJvdmlkaW5nIGJldHRlciBlc3RpbWF0ZXMpLCB0aGlzIGlz IG5vdCBjdXJyZW50bHkgY29uc2lkZXJlZC4KLSAqCi0gKiAoYikgZG9lcyBu b3QgY29uc2lkZXIgdGhlIHR5cGUgb2Ygc3RhdGlzdGljcwotICoKLSAqICAg ICBJZiB0aGVyZSBhcmUgdGhyZWUgc3RhdGlzdGljcyAtIG9uZSBjb250YWlu aW5nIGp1c3QgYSBNQ1YgbGlzdCwgYW5vdGhlcgotICogICAgIG9uZSB3aXRo IGp1c3QgYSBoaXN0b2dyYW0gYW5kIGEgdGhpcmQgb25lIHdpdGggYm90aCwg d2UgdHJlYXQgdGhlbSBlcXVhbGx5LgorICogQ2hvb3NlcyB0aGUgY29tYmlu YXRpb24gb2Ygc3RhdGlzdGljcywgb3B0aW1hbCBmb3IgZXN0aW1hdGlvbiBv ZiBhIHBhcnRpY3VsYXIKKyAqIGNsYXVzZSBsaXN0LgogICoKLSAqIChjKSBk b2VzIG5vdCBjb25zaWRlciB0aGUgbnVtYmVyIG9mIGNsYXVzZXMKKyAqIFRo aXMgb25seSBoYW5kbGVzIGEgJ3ByZXBhcmF0aW9uJyBzaGFyZWQgYnkgdGhl IGV4aGF1c3RpdmUgYW5kIGdyZWVkeQorICogaW1wbGVtZW50YXRpb25zIChz ZWUgdGhlIHByZXZpb3VzIG1ldGhvZHMpLCBtb3N0bHkgdHJ5aW5nIHRvIHJl ZHVjZSB0aGUgc2l6ZQorICogb2YgdGhlIHByb2JsZW0gKGVsaW1pbmF0ZSBj bGF1c2VzL3N0YXRpc3RpY3MgdGhhdCBjYW4ndCBiZSByZWFsbHkgdXNlZCBp bgorICogdGhlIHNvbHV0aW9uKS4KICAqCi0gKiAgICAgQXMgZXhwbGFpbmVk LCBvbmx5IHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzIGNv dW50cywgc28gaWYKLSAqICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgY2xhdXNl cyBvbiBhIHNpbmdsZSBhdHRyaWJ1dGUsIHRoaXMgc3RpbGwgY291bnRzIGFz Ci0gKiAgICAgYSBzaW5nbGUgYXR0cmlidXRlLgorICogSXQgYWxzbyBwcmVj b21wdXRlcyBiaXRtYXBzIGZvciBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgY2xh dXNlcyBhbmQgc3RhdGlzdGljcywKKyAqIHNvIHRoYXQgd2UgZG9uJ3QgbmVl ZCB0byBkbyB0aGF0IG92ZXIgYW5kIG92ZXIgaW4gdGhlIGFjdHVhbCBvcHRp bWl6YXRpb25zCisgKiAoYXMgaXQncyBib3RoIENQVSBhbmQgbWVtb3J5IGlu dGVuc2l2ZSkuCiAgKgotICogKGQpIGRvZXMgbm90IGNvbnNpZGVyIHR5cGUg b2YgY29uZGl0aW9uCiAgKgotICogICAgIFNvbWUgY2xhdXNlcyBtYXkgd29y ayBiZXR0ZXIgd2l0aCBzb21lIHN0YXRpc3RpY3MgLSBmb3IgZXhhbXBsZSBl cXVhbGl0eQotICogICAgIGNsYXVzZXMgcHJvYmFibHkgd29yayBiZXR0ZXIg d2l0aCBNQ1YgbGlzdHMgdGhhbiB3aXRoIGhpc3RvZ3JhbXMuIEJ1dAotICog ICAgIElTIFtOT1RdIE5VTEwgY29uZGl0aW9ucyBtYXkgb2Z0ZW4gd29yayBi ZXR0ZXIgd2l0aCBoaXN0b2dyYW1zICh0aGFua3MKLSAqICAgICB0byBOVUxM LWJ1Y2tldHMpLgorICogVE9ETyBBbm90aGVyIHdheSB0byBtYWtlIHRoZSBv cHRpbWl6YXRpb24gcHJvYmxlbXMgc21hbGxlciBtaWdodCBiZSBzcGxpdHRp bmcKKyAqICAgICAgdGhlIHN0YXRpc3RpY3MgaW50byBzZXZlcmFsIGRpc2pv aW50IHN1YnNldHMsIGkuZS4gaWYgd2UgY2FuIHNwbGl0IHRoZQorICogICAg ICBncmFwaCBvZiBzdGF0aXN0aWNzIChhZnRlciB0aGUgZWxpbWluYXRpb24p IGludG8gbXVsdGlwbGUgY29tcG9uZW50cworICogICAgICAoc28gdGhhdCBz dGF0cyBpbiBkaWZmZXJlbnQgY29tcG9uZW50cyBzaGFyZSBubyBhdHRyaWJ1 dGVzKSwgd2UgY2FuIGRvCisgKiAgICAgIHRoZSBvcHRpbWl6YXRpb24gZm9y IGVhY2ggY29tcG9uZW50IHNlcGFyYXRlbHkuCiAgKgotICogU28gZm9yIGV4 YW1wbGUgd2l0aCBmaXZlIFdIRVJFIGNvbmRpdGlvbnMKLSAqCi0gKiAgICAg V0hFUkUgKGEgPSAxKSBBTkQgKGIgPSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQg PSAxKSBBTkQgKGUgPSAxKQotICoKLSAqIGFuZCBzdGF0aXN0aWNzIG9uIChh LGIpLCAoYSxiLGUpIGFuZCAoYSxiLGMsZCksIHRoZSBsYXN0IG9uZSB3aWxs IGJlIHNlbGVjdGVkCi0gKiBhcyBpdCByZWZlcmVuY2VzIHRoZSBtb3N0IGNv bHVtbnMuCi0gKgotICogT25jZSB3ZSBoYXZlIHNlbGVjdGVkIHRoZSBtdWx0 aXZhcmlhdGUgc3RhdGlzdGljcywgd2Ugc3BsaXQgdGhlIGxpc3Qgb2YKLSAq IGNsYXVzZXMgaW50byB0d28gcGFydHMgLSBjb25kaXRpb25zIHRoYXQgYXJl IGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQKLSAqIHN0YXRzLCBhbmQg Y29uZGl0aW9ucyBhcmUgZXN0aW1hdGVkIHVzaW5nIHNpbXBsZSBzdGF0aXN0 aWNzLgotICoKLSAqIEZyb20gdGhlIGV4YW1wbGUgYWJvdmUsIGNvbmRpdGlv bnMKLSAqCi0gKiAgICAgKGEgPSAxKSBBTkQgKGIgPSAxKSBBTkQgKGMgPSAx KSBBTkQgKGQgPSAxKQotICoKLSAqIHdpbGwgYmUgZXN0aW1hdGVkIHVzaW5n IHRoZSBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyAoYSxiLGMsZCkgd2hpbGUg dGhlIGxhc3QKLSAqIGNvbmRpdGlvbiAoZSA9IDEpIHdpbGwgZ2V0IGVzdGlt YXRlZCB1c2luZyB0aGUgcmVndWxhciBvbmVzLgotICoKLSAqIFRoZXJlIGFy ZSB2YXJpb3VzIGFsdGVybmF0aXZlIHNlbGVjdGlvbiBjcml0ZXJpYSAoZS5n LiBjb3VudGluZyBjb25kaXRpb25zCi0gKiBpbnN0ZWFkIG9mIGp1c3QgcmVm ZXJlbmNlZCBhdHRyaWJ1dGVzKSwgYnV0IGV2ZW50dWFsbHkgdGhlIGJlc3Qg b3B0aW9uIHNob3VsZAotICogYmUgdG8gY29tYmluZSBtdWx0aXBsZSBzdGF0 aXN0aWNzLiBCdXQgdGhhdCdzIG11Y2ggaGFyZGVyIHRvIGRvIGNvcnJlY3Rs eS4KLSAqCi0gKiBUT0RPIFNlbGVjdCBtdWx0aXBsZSBzdGF0aXN0aWNzIGFu ZCBjb21iaW5lIHRoZW0gd2hlbiBjb21wdXRpbmcgdGhlIGVzdGltYXRlLgot ICoKLSAqIFRPRE8gVGhpcyB3aWxsIHByb2JhYmx5IGhhdmUgdG8gY29uc2lk ZXIgY29tcGF0aWJpbGl0eSBvZiBjbGF1c2VzLCBiZWNhdXNlCi0gKiAgICAg ICdkZXBlbmRlbmNpZXMnIHdpbGwgcHJvYmFibHkgd29yayBvbmx5IHdpdGgg ZXF1YWxpdHkgY2xhdXNlcy4KKyAqIFRPRE8gSWYgd2UgY291bGQgY29tcHV0 ZSB3aGF0IGlzIGEgInBlcmZlY3Qgc29sdXRpb24iIG1heWJlIHdlIGNvdWxk CisgKiAgICAgIHRlcm1pbmF0ZSB0aGUgc2VhcmNoIGFmdGVyIHJlYWNoaW5n IH45MCUgb2YgaXQ/IFNheSwgaWYgd2Uga25ldyB0aGF0IHdlCisgKiAgICAg IGNhbiBjb3ZlciAxMCBjbGF1c2VzIGFuZCByZXVzZSA4IGRlcGVuZGVuY2ll cywgbWF5YmUgY292ZXJpbmcgOSBjbGF1c2VzCisgKiAgICAgIGFuZCA3IGRl cGVuZGVuY2llcyB3b3VsZCBiZSBPSz8KICAqLwotc3RhdGljIE1WU3RhdGlz dGljSW5mbyAqCi1jaG9vc2VfbXZfc3RhdGlzdGljcyhMaXN0ICpzdGF0cywg Qml0bWFwc2V0ICphdHRudW1zKQorc3RhdGljIExpc3QqCitjaG9vc2VfbXZf c3RhdGlzdGljcyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQsIExp c3QgKnN0YXRzLAorCQkJCQkgTGlzdCAqY2xhdXNlcywgTGlzdCAqY29uZGl0 aW9ucykKIHsKIAlpbnQgaTsKLQlMaXN0Q2VsbCAgICpsYzsKKwltdl9zb2x1 dGlvbl90ICpiZXN0ID0gTlVMTDsKKwlMaXN0ICpyZXN1bHQgPSBOSUw7CisK KwlpbnQgbm12c3RhdHM7CisJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzOwor CisJLyogd2Ugb25seSB3b3JrIHdpdGggTUNWIGxpc3RzIGFuZCBoaXN0b2dy YW1zIGhlcmUgKi8KKwlpbnQgdHlwZSA9IChNVl9DTEFVU0VfVFlQRV9NQ1Yg fCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKKworCWJvb2wgICAqY2xhdXNlX2Nv dmVyX21hcCA9IE5VTEwsCisJCSAgICpjb25kaXRpb25fY292ZXJfbWFwID0g TlVMTDsKKwlpbnQJICAgKnJ1bGVkX291dCA9IE5VTEw7CisKKwkvKiBidWls ZCBiaXRtYXBzZXRzIGZvciBhbGwgc3RhdHMgYW5kIGNsYXVzZXMgKi8KKwlC aXRtYXBzZXQgKipzdGF0c19hdHRudW1zOworCUJpdG1hcHNldCAqKmNsYXVz ZXNfYXR0bnVtczsKKwlCaXRtYXBzZXQgKipjb25kaXRpb25zX2F0dG51bXM7 CiAKLQlNVlN0YXRpc3RpY0luZm8gKmNob2ljZSA9IE5VTEw7CisJaW50IG5j bGF1c2VzLCBuY29uZGl0aW9uczsKKwlOb2RlICoqIGNsYXVzZXNfYXJyYXk7 CisJTm9kZSAqKiBjb25kaXRpb25zX2FycmF5OwogCi0JaW50IGN1cnJlbnRf bWF0Y2hlcyA9IDE7CQkJCQkJLyogZ29hbCAjMTogbWF4aW1pemUgKi8KLQlp bnQgY3VycmVudF9kaW1zID0gKE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMrMSk7 CS8qIGdvYWwgIzI6IG1pbmltaXplICovCisJLyogY29weSBsaXN0cywgc28g dGhhdCB3ZSBjYW4gZnJlZSB0aGVtIGR1cmluZyBlbGltaW5hdGlvbiBlYXNp bHkgKi8KKwljbGF1c2VzID0gbGlzdF9jb3B5KGNsYXVzZXMpOworCWNvbmRp dGlvbnMgPSBsaXN0X2NvcHkoY29uZGl0aW9ucyk7CisJc3RhdHMgPSBsaXN0 X2NvcHkoc3RhdHMpOwogCiAJLyoKLQkgKiBXYWxrIHRocm91Z2ggdGhlIHN0 YXRpc3RpY3MgKHNpbXBsZSBhcnJheSB3aXRoIG5tdnN0YXRzIGVsZW1lbnRz KSBhbmQgZm9yCi0JICogZWFjaCBvbmUgY291bnQgdGhlIHJlZmVyZW5jZWQg YXR0cmlidXRlcyAoZW5jb2RlZCBpbiB0aGUgJ2F0dG51bXMnIGJpdG1hcCku CisJICogUmVkdWNlIHRoZSBvcHRpbWl6YXRpb24gcHJvYmxlbSBzaXplIGFz IG11Y2ggYXMgcG9zc2libGUuCisJICoKKwkgKiBFbGltaW5hdGUgY2xhdXNl cyBhbmQgY29uZGl0aW9ucyBub3QgY292ZXJlZCBieSBhbnkgc3RhdGlzdGlj cywKKwkgKiBvciBzdGF0aXN0aWNzIG5vdCBtYXRjaGluZyBhdCBsZWFzdCB0 d28gYXR0cmlidXRlcyAob25lIG9mIHRoZW0KKwkgKiBoYXMgdG8gYmUgaW4g YSByZWd1bGFyIGNsYXVzZSkuCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRo YXQgcmVtb3ZpbmcgYSBzdGF0aXN0aWNzIGluIG9uZSBpdGVyYXRpb24KKwkg KiBlbGltaW5hdGVzIGNsYXVzZSBpbiB0aGUgbmV4dCBvbmUsIHNvIHdlJ2xs IHJlcGVhdCB0aGlzIHVudGlsIHdlCisJICogZWxpbWluYXRlIG5vIGNsYXVz ZXMvc3RhdHMgaW4gdGhhdCBpdGVyYXRpb24uCisJICoKKwkgKiBUaGlzIGNh biBvbmx5IGhhcHBlbiBhZnRlciBlbGltaW5hdGluZyBhIHN0YXRpc3RpY3Mg LSBjbGF1c2VzIGFyZQorCSAqIGVsaW1pbmF0ZWQgZmlyc3QsIHNvIHN0YXRp c3RpY3MgYWx3YXlzIHJlZmxlY3QgdGhhdC4KIAkgKi8KLQlmb3JlYWNoIChs Yywgc3RhdHMpCisJd2hpbGUgKHRydWUpCiAJewotCQlNVlN0YXRpc3RpY0lu Zm8gKmluZm8gPSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKLQot CQkvKiBjb2x1bW5zIG1hdGNoaW5nIHRoaXMgc3RhdGlzdGljcyAqLwotCQlp bnQgbWF0Y2hlcyA9IDA7CisJCUxpc3QJICAgKnRtcDsKIAotCQlpbnQydmVj dG9yICogYXR0cnMgPSBpbmZvLT5zdGFrZXlzOwotCQlpbnQJbnVtYXR0cnMg PSBhdHRycy0+ZGltMTsKKwkJQml0bWFwc2V0ICpjb21wYXRpYmxlX2F0dG51 bXMgPSBOVUxMOworCQlCaXRtYXBzZXQgKmNvbmRpdGlvbl9hdHRudW1zICA9 IE5VTEw7CisJCUJpdG1hcHNldCAqYWxsX2F0dG51bXMgPSBOVUxMOwogCi0J CS8qIHNraXAgZGVwZW5kZW5jaWVzLW9ubHkgc3RhdHMgKi8KLQkJaWYgKCEg KGluZm8tPm1jdl9idWlsdCB8fCBpbmZvLT5oaXN0X2J1aWx0KSkKLQkJCWNv bnRpbnVlOworCQkvKgorCQkgKiBDbGF1c2VzCisJCSAqCisJCSAqIFdhbGsg dGhyb3VnaCBjbGF1c2VzIGFuZCBrZWVwIG9ubHkgdGhvc2UgY292ZXJlZCBi eSBhdCBsZWFzdAorCQkgKiBvbmUgb2YgdGhlIHN0YXRpc3RpY3Mgd2Ugc3Rp bGwgaGF2ZS4gV2UnbGwgYWxzbyBrZWVwIGluZm8KKwkJICogYWJvdXQgYXR0 bnVtcyBpbiBjbGF1c2VzICh3aXRob3V0IGNvbmRpdGlvbnMpIHNvIHRoYXQg d2UgY2FuCisJCSAqIGlnbm9yZSBzdGF0cyBjb3ZlcmluZyBqdXN0IGNvbmRp dGlvbnMgKHdoaWNoIGlzIHBvaW50bGVzcykuCisJCSAqLworCQl0bXAgPSBm aWx0ZXJfY2xhdXNlcyhyb290LCByZWxpZCwgdHlwZSwKKwkJCQkJCQkgc3Rh dHMsIGNsYXVzZXMsICZjb21wYXRpYmxlX2F0dG51bXMpOwogCi0JCS8qIGNv dW50IGNvbHVtbnMgY292ZXJlZCBieSB0aGUgaGlzdG9ncmFtICovCi0JCWZv ciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQotCQkJaWYgKGJtc19pc19t ZW1iZXIoYXR0cnMtPnZhbHVlc1tpXSwgYXR0bnVtcykpCi0JCQkJbWF0Y2hl cysrOworCQkvKiBkaXNjYXJkIHRoZSBvcmlnaW5hbCBsaXN0ICovCisJCWxp c3RfZnJlZShjbGF1c2VzKTsKKwkJY2xhdXNlcyA9IHRtcDsKIAogCQkvKgot CQkgKiBVc2UgdGhpcyBzdGF0aXN0aWNzIHdoZW4gaXQgaW1wcm92ZXMgdGhl IG51bWJlciBvZiBtYXRjaGVzIG9yCi0JCSAqIHdoZW4gaXQgbWF0Y2hlcyB0 aGUgc2FtZSBudW1iZXIgb2YgYXR0cmlidXRlcyBidXQgaXMgc21hbGxlci4K KwkJICogQ29uZGl0aW9ucworCQkgKgorCQkgKiBXYWxrIHRocm91Z2ggY2xh dXNlcyBhbmQga2VlcCBvbmx5IHRob3NlIGNvdmVyZWQgYnkgYXQgbGVhc3QK KwkJICogb25lIG9mIHRoZSBzdGF0aXN0aWNzIHdlIHN0aWxsIGhhdmUuIEFs c28sIGNvbGxlY3QgYml0bWFwIG9mCisJCSAqIGF0dHJpYnV0ZXMgc28gdGhh dCB3ZSBjYW4gbWFrZSBzdXJlIHdlIGFkZCBhdCBsZWFzdCBvbmUgbmV3CisJ CSAqIGF0dHJpYnV0ZSAoYnkgY29tcGFyaW5nIHdpdGggY2xhdXNlcykuCiAJ CSAqLwotCQlpZiAoKG1hdGNoZXMgPiBjdXJyZW50X21hdGNoZXMpIHx8Ci0J CQkoKG1hdGNoZXMgPT0gY3VycmVudF9tYXRjaGVzKSAmJiAoY3VycmVudF9k aW1zID4gbnVtYXR0cnMpKSkKKwkJaWYgKGNvbmRpdGlvbnMgIT0gTklMKQog CQl7Ci0JCQljaG9pY2UgPSBpbmZvOwotCQkJY3VycmVudF9tYXRjaGVzID0g bWF0Y2hlczsKLQkJCWN1cnJlbnRfZGltcyA9IG51bWF0dHJzOworCQkJdG1w ID0gZmlsdGVyX2NsYXVzZXMocm9vdCwgcmVsaWQsIHR5cGUsCisJCQkJCQkJ CSBzdGF0cywgY29uZGl0aW9ucywgJmNvbmRpdGlvbl9hdHRudW1zKTsKKwor CQkJLyogZGlzY2FyZCB0aGUgb3JpZ2luYWwgbGlzdCAqLworCQkJbGlzdF9m cmVlKGNvbmRpdGlvbnMpOworCQkJY29uZGl0aW9ucyA9IHRtcDsKIAkJfQot CX0KIAotCXJldHVybiBjaG9pY2U7Ci19CisJCS8qIGdldCBhIHVuaW9uIG9m IGF0dG51bXMgKGZyb20gY29uZGl0aW9ucyBhbmQgbmV3IGNsYXVzZXMpICov CisJCWFsbF9hdHRudW1zID0gYm1zX3VuaW9uKGNvbXBhdGlibGVfYXR0bnVt cywgY29uZGl0aW9uX2F0dG51bXMpOworCisJCS8qCisJCSAqIFN0YXRpc2l0 aWNzCisJCSAqCisJCSAqIFdhbGsgdGhyb3VnaCBzdGF0aXN0aWNzIGFuZCBv bmx5IGtlZXAgdGhvc2UgY292ZXJpbmcgYXQgbGVhc3QKKwkJICogb25lIG5l dyBhdHRyaWJ1dGUgKGV4Y2x1ZGluZyBjb25kaXRpb25zKSBhbmQgYXQgdHdv IGF0dHJpYnV0ZXMKKwkJICogaW4gYm90aCBjbGF1c2VzIGFuZCBjb25kaXRp b25zLgorCQkgKi8KKwkJdG1wID0gZmlsdGVyX3N0YXRzKHN0YXRzLCBjb21w YXRpYmxlX2F0dG51bXMsIGFsbF9hdHRudW1zKTsKIAorCQkvKiBpZiB3ZSd2 ZSBub3QgZWxpbWluYXRlZCBhbnl0aGluZywgdGVybWluYXRlICovCisJCWlm IChsaXN0X2xlbmd0aChzdGF0cykgPT0gbGlzdF9sZW5ndGgodG1wKSkKKwkJ CWJyZWFrOwogCi0vKgotICogVGhpcyBzcGxpdHMgdGhlIGNsYXVzZXMgbGlz dCBpbnRvIHR3byBwYXJ0cyAtIG9uZSBjb250YWluaW5nIGNsYXVzZXMgdGhh dAotICogd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGNob3NlbiBzdGF0 aXN0aWNzLCBhbmQgdGhlIHJlbWFpbmluZyBjbGF1c2VzCi0gKiAoZWl0aGVy IG5vbi1tdmNvbXBhdGlibGUsIG9yIG5vdCByZWxhdGVkIHRvIHRoZSBoaXN0 b2dyYW0pLgotICovCi1zdGF0aWMgTGlzdCAqCi1jbGF1c2VsaXN0X212X3Nw bGl0KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKLQkJCQkJTGlz dCAqY2xhdXNlcywgTGlzdCAqKm12Y2xhdXNlcywKLQkJCQkJTVZTdGF0aXN0 aWNJbmZvICptdnN0YXRzLCBpbnQgdHlwZXMpCi17Ci0JaW50IGk7Ci0JTGlz dENlbGwgKmw7Ci0JTGlzdAkgKm5vbl9tdmNsYXVzZXMgPSBOSUw7CisJCS8q IHdvcmsgb25seSB3aXRoIGZpbHRlcmVkIHN0YXRpc3RpY3MgZnJvbSBub3cg Ki8KKwkJbGlzdF9mcmVlKHN0YXRzKTsKKwkJc3RhdHMgPSB0bXA7CisJfQog Ci0JLyogRklYTUUgaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGdldCBpbmZv IG9uIGludDJ2ZWN0b3I/ICovCi0JaW50MnZlY3RvciAqIGF0dHJzID0gbXZz dGF0cy0+c3Rha2V5czsKLQlpbnQJbnVtYXR0cnMgPSBtdnN0YXRzLT5zdGFr ZXlzLT5kaW0xOworCS8qIG9ubHkgZG8gdGhlIG9wdGltaXphdGlvbiBpZiB3 ZSBoYXZlIGNsYXVzZXMvc3RhdGlzdGljcyAqLworCWlmICgobGlzdF9sZW5n dGgoc3RhdHMpID09IDApIHx8IChsaXN0X2xlbmd0aChjbGF1c2VzKSA9PSAw KSkKKwkJcmV0dXJuIE5VTEw7CiAKLQlCaXRtYXBzZXQgKm12YXR0bnVtcyA9 IE5VTEw7CisJLyogcmVtb3ZlIHJlZHVuZGFudCBzdGF0cyAoc3RhdHMgY292 ZXJlZCBieSBhbm90aGVyIHN0YXRzKSAqLworCXN0YXRzID0gZmlsdGVyX3Jl ZHVuZGFudF9zdGF0cyhzdGF0cywgY2xhdXNlcywgY29uZGl0aW9ucyk7CiAK LQkvKiBidWlsZCBiaXRtYXAgb2YgYXR0cmlidXRlcywgc28gd2UgY2FuIGRv IGJtc19pc19zdWJzZXQgbGF0ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVt YXR0cnM7IGkrKykKLQkJbXZhdHRudW1zID0gYm1zX2FkZF9tZW1iZXIobXZh dHRudW1zLCBhdHRycy0+dmFsdWVzW2ldKTsKKwkvKgorCSAqIFRPRE8gV2Ug c2hvdWxkIHNvcnQgdGhlIHN0YXRzIHRvIG1ha2UgdGhlIG9yZGVyIGRldGVy bWluaXN0aWMsCisJICogICAgICBvdGhlcndpc2Ugd2UgbWF5IGdldCBkaWZm ZXJlbnQgZXN0aW1hdGVzIG9uIGRpZmZlcmVudAorCSAqICAgICAgZXhlY3V0 aW9ucyAtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSAiZXF1YWxseSBnb29kIiBz b2x1dGlvbnMsCisJICogICAgICB3ZSdsbCBrZWVwIHRoZSBmaXJzdCBzb2x1 dGlvbiB3ZSBzZWUuCisJICoKKwkgKiAgICAgIFNvcnRpbmcgYnkgT0lEIHBy b2JhYmx5IGlzIG5vdCB0aGUgcmlnaHQgc29sdXRpb24gdGhvdWdoLAorCSAq ICAgICAgYmVjYXVzZSB3ZSdkIGxpa2UgaXQgdG8gYmUgc29tZWhvdyByZXBy b2R1Y2libGUsCisJICogICAgICBpcnJlc3BlY3RlZGx5IG9mIHRoZSBvcmRl ciBvZiBBREQgU1RBVElTVElDUyBjb21tYW5kcy4KKwkgKiAgICAgIFNvIG1h eWJlIHN0YXRrZXlzPworCSAqLworCW12c3RhdHMgPSBtYWtlX3N0YXRzX2Fy cmF5KHN0YXRzLCAmbm12c3RhdHMpOworCXN0YXRzX2F0dG51bXMgPSBtYWtl X3N0YXRzX2F0dG51bXMobXZzdGF0cywgbm12c3RhdHMpOwogCi0JLyogZXJh c2UgdGhlIGxpc3Qgb2YgbXYtY29tcGF0aWJsZSBjbGF1c2VzICovCi0JKm12 Y2xhdXNlcyA9IE5JTDsKKwkvKiBjb2xsZWN0IGNsYXVzZXMgYW4gYml0bWFw IG9mIGF0dG51bXMgKi8KKwljbGF1c2VzX2FycmF5ID0gbWFrZV9jbGF1c2Vz X2FycmF5KGNsYXVzZXMsICZuY2xhdXNlcyk7CisJY2xhdXNlc19hdHRudW1z ID0gbWFrZV9jbGF1c2VzX2F0dG51bXMocm9vdCwgcmVsaWQsIHR5cGUsCisJ CQkJCQkJCQkJICAgY2xhdXNlc19hcnJheSwgbmNsYXVzZXMpOwogCi0JZm9y ZWFjaCAobCwgY2xhdXNlcykKLQl7Ci0JCWJvb2wJCW1hdGNoID0gZmFsc2U7 CS8qIGJ5IGRlZmF1bHQgbm90IG12LWNvbXBhdGlibGUgKi8KLQkJQml0bWFw c2V0CSphdHRudW1zID0gTlVMTDsKLQkJTm9kZQkgICAqY2xhdXNlID0gKE5v ZGUgKikgbGZpcnN0KGwpOworCS8qIGNvbGxlY3QgY29uZGl0aW9ucyBhbmQg Yml0bWFwIG9mIGF0dG51bXMgKi8KKwljb25kaXRpb25zX2FycmF5ID0gbWFr ZV9jbGF1c2VzX2FycmF5KGNvbmRpdGlvbnMsICZuY29uZGl0aW9ucyk7CisJ Y29uZGl0aW9uc19hdHRudW1zID0gbWFrZV9jbGF1c2VzX2F0dG51bXMocm9v dCwgcmVsaWQsIHR5cGUsCisJCQkJCQkJCQkJCSAgY29uZGl0aW9uc19hcnJh eSwgbmNvbmRpdGlvbnMpOwogCi0JCWlmIChjbGF1c2VfaXNfbXZfY29tcGF0 aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywgdHlwZXMpKQorCS8qCisJ ICogQnVpbGQgYml0bWFwcyB3aXRoIGluZm8gYWJvdXQgd2hpY2ggY2xhdXNl cy9jb25kaXRpb25zIGFyZQorCSAqIGNvdmVyZWQgYnkgZWFjaCBzdGF0aXN0 aWNzIChzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FsbCB0aGUKKwkgKiBi bXNfaXNfc3Vic2V0IG92ZXIgYW5kIG92ZXIgYWdhaW4pLgorCSAqLworCWNs YXVzZV9jb3Zlcl9tYXAgPSBtYWtlX2NvdmVyX21hcChzdGF0c19hdHRudW1z LCBubXZzdGF0cywKKwkJCQkJCQkJCSAgY2xhdXNlc19hdHRudW1zLCBuY2xh dXNlcyk7CisKKwljb25kaXRpb25fY292ZXJfbWFwCT0gbWFrZV9jb3Zlcl9t YXAoc3RhdHNfYXR0bnVtcywgbm12c3RhdHMsCisJCQkJCQkJCQkJIGNvbmRp dGlvbnNfYXR0bnVtcywgbmNvbmRpdGlvbnMpOworCisJcnVsZWRfb3V0ID0g IChpbnQqKXBhbGxvYzAobm12c3RhdHMgKiBzaXplb2YoaW50KSk7CisKKwkv KiBubyBzdGF0cyBhcmUgcnVsZWQgb3V0IGJ5IGRlZmF1bHQgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJcnVsZWRfb3V0W2ldID0g LTE7CisKKwkvKiBkbyB0aGUgb3B0aW1pemF0aW9uIGl0c2VsZiAqLworCWlm IChtdnN0YXRfc2VhcmNoX3R5cGUgPT0gTVZTVEFUX1NFQVJDSF9FWEhBVVNU SVZFKQorCQljaG9vc2VfbXZfc3RhdGlzdGljc19leGhhdXN0aXZlKHJvb3Qs IDAsCisJCQkJCQkJCQkgICBubXZzdGF0cywgbXZzdGF0cywgc3RhdHNfYXR0 bnVtcywKKwkJCQkJCQkJCSAgIG5jbGF1c2VzLCBjbGF1c2VzX2FycmF5LCBj bGF1c2VzX2F0dG51bXMsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29u ZGl0aW9uc19hcnJheSwgY29uZGl0aW9uc19hdHRudW1zLAorCQkJCQkJCQkJ ICAgY2xhdXNlX2NvdmVyX21hcCwgY29uZGl0aW9uX2NvdmVyX21hcCwKKwkJ CQkJCQkJCSAgIHJ1bGVkX291dCwgTlVMTCwgJmJlc3QpOworCWVsc2UKKwkJ Y2hvb3NlX212X3N0YXRpc3RpY3NfZ3JlZWR5KHJvb3QsIDAsCisJCQkJCQkJ CQkgICBubXZzdGF0cywgbXZzdGF0cywgc3RhdHNfYXR0bnVtcywKKwkJCQkJ CQkJCSAgIG5jbGF1c2VzLCBjbGF1c2VzX2FycmF5LCBjbGF1c2VzX2F0dG51 bXMsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29uZGl0aW9uc19hcnJh eSwgY29uZGl0aW9uc19hdHRudW1zLAorCQkJCQkJCQkJICAgY2xhdXNlX2Nv dmVyX21hcCwgY29uZGl0aW9uX2NvdmVyX21hcCwKKwkJCQkJCQkJCSAgIHJ1 bGVkX291dCwgTlVMTCwgJmJlc3QpOworCisJLyogY3JlYXRlIGEgbGlzdCBv ZiBzdGF0aXN0aWNzIGZyb20gdGhlIGFycmF5ICovCisJaWYgKGJlc3QgIT0g TlVMTCkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBiZXN0LT5uc3RhdHM7IGkr KykKIAkJewotCQkJLyogYXJlIGFsbCB0aGUgYXR0cmlidXRlcyBwYXJ0IG9m IHRoZSBzZWxlY3RlZCBzdGF0cz8gKi8KLQkJCWlmIChibXNfaXNfc3Vic2V0 KGF0dG51bXMsIG12YXR0bnVtcykpCi0JCQkJbWF0Y2ggPSB0cnVlOworCQkJ TVZTdGF0aXN0aWNJbmZvICppbmZvID0gbWFrZU5vZGUoTVZTdGF0aXN0aWNJ bmZvKTsKKwkJCW1lbWNweShpbmZvLCAmbXZzdGF0c1tiZXN0LT5zdGF0c1tp XV0sIHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKwkJCXJlc3VsdCA9IGxh cHBlbmQocmVzdWx0LCBpbmZvKTsKIAkJfQogCi0JCS8qCi0JCSAqIFRoZSBj bGF1c2UgbWF0Y2hlcyB0aGUgc2VsZWN0ZWQgc3RhdHMsIHNvIHB1dCBpdCB0 byB0aGUgbGlzdCBvZgotCQkgKiBtdi1jb21wYXRpYmxlIGNsYXVzZXMuIE90 aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgbGlzdCBvZiAncmVndWxhcicKLQkJ ICogY2xhdXNlcyAodGhhdCBtYXkgYmUgc2VsZWN0ZWQgbGF0ZXIpLgotCQkg Ki8KLQkJaWYgKG1hdGNoKQotCQkJKm12Y2xhdXNlcyA9IGxhcHBlbmQoKm12 Y2xhdXNlcywgY2xhdXNlKTsKLQkJZWxzZQotCQkJbm9uX212Y2xhdXNlcyA9 IGxhcHBlbmQobm9uX212Y2xhdXNlcywgY2xhdXNlKTsKKwkJcGZyZWUoYmVz dCk7CiAJfQogCi0JLyoKLQkgKiBQZXJmb3JtIHJlZ3VsYXIgZXN0aW1hdGlv biB1c2luZyB0aGUgY2xhdXNlcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY2hv c2VuCi0JICogaGlzdG9ncmFtIChvciBNViBzdGF0cyBpbiBnZW5lcmFsKS4K LQkgKi8KLQlyZXR1cm4gbm9uX212Y2xhdXNlczsKKwkvKiBjbGVhbnVwICht YXliZSBsZWF2ZSBpdCB1cCB0byB0aGUgbWVtb3J5IGNvbnRleHQ/KSAqLwor CWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCQlibXNfZnJlZShz dGF0c19hdHRudW1zW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY2xhdXNl czsgaSsrKQorCQlibXNfZnJlZShjbGF1c2VzX2F0dG51bXNbaV0pOworCisJ Zm9yIChpID0gMDsgaSA8IG5jb25kaXRpb25zOyBpKyspCisJCWJtc19mcmVl KGNvbmRpdGlvbnNfYXR0bnVtc1tpXSk7CisKKwlwZnJlZShzdGF0c19hdHRu dW1zKTsKKwlwZnJlZShjbGF1c2VzX2F0dG51bXMpOworCXBmcmVlKGNvbmRp dGlvbnNfYXR0bnVtcyk7CiAKKwlwZnJlZShjbGF1c2VzX2FycmF5KTsKKwlw ZnJlZShjb25kaXRpb25zX2FycmF5KTsKKwlwZnJlZShjbGF1c2VfY292ZXJf bWFwKTsKKwlwZnJlZShjb25kaXRpb25fY292ZXJfbWFwKTsKKwlwZnJlZShy dWxlZF9vdXQpOworCXBmcmVlKG12c3RhdHMpOworCisJbGlzdF9mcmVlKGNs YXVzZXMpOworCWxpc3RfZnJlZShjb25kaXRpb25zKTsKKwlsaXN0X2ZyZWUo c3RhdHMpOworCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogdHlwZWRlZiBzdHJ1 Y3QKQEAgLTE0NzQsNiArMjY4Niw3IEBAIGNsYXVzZV9pc19tdl9jb21wYXRp YmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQsIEJpdG1hcHNldCAqKmF0 dG51bXMsIGludCB0eXBlCiAJcmV0dXJuIHRydWU7CiB9CiAKKwogLyoKICAq IGNvbGxlY3QgYXR0bnVtcyBmcm9tIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz CiAgKgpAQCAtMjAyMiw2ICszMjM1LDI0IEBAIGNsYXVzZWxpc3RfYXBwbHlf ZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2Vz LAogICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUgc3RhdHMgd2l0aCBhdCBsZWFz dCBvbmUgb2YgdGhlIHJlcXVlc3RlZCB0eXBlcy4KICAqLwogc3RhdGljIGJv b2wKK3N0YXRzX3R5cGVfbWF0Y2hlcyhNVlN0YXRpc3RpY0luZm8gKnN0YXQs IGludCB0eXBlKQoreworCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX0ZE RVApICYmIHN0YXQtPmRlcHNfYnVpbHQpCisJCXJldHVybiB0cnVlOworCisJ aWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfTUNWKSAmJiBzdGF0LT5tY3Zf YnVpbHQpCisJCXJldHVybiB0cnVlOworCisJaWYgKCh0eXBlICYgTVZfQ0xB VVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlzdF9idWlsdCkKKwkJcmV0dXJu IHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBDaGVjayB0 aGF0IHRoZXJlIGFyZSBzdGF0cyB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUg cmVxdWVzdGVkIHR5cGVzLgorICovCitzdGF0aWMgYm9vbAogaGFzX3N0YXRz KExpc3QgKnN0YXRzLCBpbnQgdHlwZSkKIHsKIAlMaXN0Q2VsbCAgICpzOwpA QCAtMjAzMCwxMyArMzI2MSw4IEBAIGhhc19zdGF0cyhMaXN0ICpzdGF0cywg aW50IHR5cGUpCiAJewogCQlNVlN0YXRpc3RpY0luZm8JKnN0YXQgPSAoTVZT dGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOwogCi0JCWlmICgodHlwZSAmIE1W X0NMQVVTRV9UWVBFX0ZERVApICYmIHN0YXQtPmRlcHNfYnVpbHQpCi0JCQly ZXR1cm4gdHJ1ZTsKLQotCQlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQRV9N Q1YpICYmIHN0YXQtPm1jdl9idWlsdCkKLQkJCXJldHVybiB0cnVlOwotCi0J CWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX0hJU1QpICYmIHN0YXQtPmhp c3RfYnVpbHQpCisJCS8qIHRlcm1pbmF0ZSBpZiB3ZSd2ZSBmb3VuZCBhdCBs ZWFzdCBvbmUgbWF0Y2hpbmcgc3RhdGlzdGljcyAqLworCQlpZiAoc3RhdHNf dHlwZV9tYXRjaGVzKHN0YXQsIHR5cGUpKQogCQkJcmV0dXJuIHRydWU7CiAJ fQogCkBAIC0yMDg3LDIyICszMzEzLDI2IEBAIGZpbmRfc3RhdHMoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKQogICogICAgICBhcyB0aGUgY2xh dXNlcyBhcmUgcHJvY2Vzc2VkIChhbmQgc2tpcCBpdGVtcyB0aGF0IGFyZSAn bWF0Y2gnKS4KICAqLwogc3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCi0JCQkJCQkJCSAgTVZTdGF0aXN0aWNJbmZvICptdnN0 YXRzLCBib29sICpmdWxsbWF0Y2gsCi0JCQkJCQkJCSAgU2VsZWN0aXZpdHkg Kmxvd3NlbCkKK2NsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChQ bGFubmVySW5mbyAqcm9vdCwgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLAor CQkJCQkJCQkgIExpc3QgKmNsYXVzZXMsIExpc3QgKmNvbmRpdGlvbnMsIGJv b2wgaXNfb3IsCisJCQkJCQkJCSAgYm9vbCAqZnVsbG1hdGNoLCBTZWxlY3Rp dml0eSAqbG93c2VsKQogewogCWludCBpOwogCVNlbGVjdGl2aXR5IHMgPSAw LjA7CisJU2VsZWN0aXZpdHkgdCA9IDAuMDsKIAlTZWxlY3Rpdml0eSB1ID0g MC4wOwogCiAJTUNWTGlzdCBtY3ZsaXN0ID0gTlVMTDsKKwogCWludAlubWF0 Y2hlcyA9IDA7CisJaW50CW5jb25kaXRpb25zID0gMDsKIAogCS8qIG1hdGNo L21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBNQ1YgaXRlbSAqLwogCWNoYXIg KiBtYXRjaGVzID0gTlVMTDsKKwljaGFyICogY29uZGl0aW9uX21hdGNoZXMg PSBOVUxMOwogCiAJQXNzZXJ0KGNsYXVzZXMgIT0gTklMKTsKLQlBc3NlcnQo bGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMik7CisJQXNzZXJ0KGxpc3RfbGVu Z3RoKGNsYXVzZXMpID49IDEpOwogCiAJLyogdGhlcmUncyBubyBNQ1YgbGlz dCBidWlsdCB5ZXQgKi8KIAlpZiAoISBtdnN0YXRzLT5tY3ZfYnVpbHQpCkBA IC0yMTEzLDMyICszMzQzLDg1IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywK IAlBc3NlcnQobWN2bGlzdCAhPSBOVUxMKTsKIAlBc3NlcnQobWN2bGlzdC0+ bml0ZW1zID4gMCk7CiAKLQkvKiBieSBkZWZhdWx0IGFsbCB0aGUgTUNWIGl0 ZW1zIG1hdGNoIHRoZSBjbGF1c2VzIGZ1bGx5ICovCi0JbWF0Y2hlcyA9IHBh bGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+bml0ZW1zKTsKLQltZW1z ZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2YoY2hhcikq bWN2bGlzdC0+bml0ZW1zKTsKLQogCS8qIG51bWJlciBvZiBtYXRjaGluZyBN Q1YgaXRlbXMgKi8KIAlubWF0Y2hlcyA9IG1jdmxpc3QtPm5pdGVtczsKKwlu Y29uZGl0aW9ucyA9IG1jdmxpc3QtPm5pdGVtczsKKworCS8qCisJICogQml0 bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwgcGFydGlhbCwgZnVs bCkuCisJICoKKwkgKiBGb3IgQU5EIGNsYXVzZXMgYWxsIGJ1Y2tldHMgbWF0 Y2ggKGFuZCB3ZSdsbCBlbGltaW5hdGUgdGhlbSkuCisJICogRm9yIE9SICBj bGF1c2VzIG5vICBidWNrZXRzIG1hdGNoIChhbmQgd2UnbGwgYWRkIHRoZW0p LgorCSAqCisJICogV2Ugb25seSBuZWVkIHRvIGRvIHRoZSBtZW1zZXQgZm9y IEFORCBjbGF1c2VzIChmb3IgT1IgY2xhdXNlcworCSAqIGl0J3MgYWxyZWFk eSBzZXQgY29ycmVjdGx5IGJ5IHRoZSBwYWxsb2MwKS4KKwkgKi8KKwltYXRj aGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBubWF0Y2hlcyk7CisKKwlp ZiAoISBpc19vcikgLyogQU5ELWNsYXVzZSAqLworCQltZW1zZXQobWF0Y2hl cywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2YoY2hhcikqbm1hdGNoZXMp OwogCisJLyogQ29uZGl0aW9ucyBhcmUgdHJlYXRlZCBhcyBBTkQgY2xhdXNl LCBzbyBtYXRjaCBieSBkZWZhdWx0LiAqLworCWNvbmRpdGlvbl9tYXRjaGVz ID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBuY29uZGl0aW9ucyk7CisJbWVt c2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEwsIHNp emVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisKKwkvKgorCSAqIGJ1aWxkIHRo ZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBjb25kaXRpb25zIChjb25kaXRpb25z IGFyZSBhbHdheXMKKwkgKiBjb25uZWN0ZWQgYnkgQU5EKQorCSAqLworCWlm IChjb25kaXRpb25zICE9IE5JTCkKKwkJbmNvbmRpdGlvbnMgPSB1cGRhdGVf bWF0Y2hfYml0bWFwX21jdmxpc3Qocm9vdCwgY29uZGl0aW9ucywKKwkJCQkJ CQkJCSAgIG12c3RhdHMtPnN0YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJCQkg ICBuY29uZGl0aW9ucywgY29uZGl0aW9uX21hdGNoZXMsCisJCQkJCQkJCQkg ICBsb3dzZWwsIGZ1bGxtYXRjaCwgZmFsc2UpOworCisJLyoKKwkgKiBidWls ZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgZXN0aW1hdGVkIGNsYXVzZXMK KwkgKgorCSAqIFRPRE8gVGhpcyBldmFsdWF0ZXMgdGhlIGNsYXVzZXMgZm9y IGFsbCBNQ1YgaXRlbXMsIGV2ZW4gdGhvc2UKKwkgKiAgICAgIHJ1bGVkIG91 dCBieSB0aGUgY29uZGl0aW9ucy4gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQg YmUgdGhlCisJICogICAgICBzYW1lLCBidXQgaXQgbWlnaHQgYmUgZmFzdGVy LgorCSAqLwogCW5tYXRjaGVzID0gdXBkYXRlX21hdGNoX2JpdG1hcF9tY3Zs aXN0KHJvb3QsIGNsYXVzZXMsCiAJCQkJCQkJCQkJICAgbXZzdGF0cy0+c3Rh a2V5cywgbWN2bGlzdCwKLQkJCQkJCQkJCQkgICBubWF0Y2hlcywgbWF0Y2hl cywKLQkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgZmFsc2UpOwor CQkJCQkJCQkJCSAgICgoaXNfb3IpID8gMCA6IG5tYXRjaGVzKSwgbWF0Y2hl cywKKwkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgaXNfb3IpOwog CiAJLyogc3VtIGZyZXF1ZW5jaWVzIGZvciBhbGwgdGhlIG1hdGNoaW5nIE1D ViBpdGVtcyAqLwogCWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uaXRlbXM7 IGkrKykKIAl7Ci0JCS8qIHVzZWQgdG8gJ3NjYWxlJyBmb3IgTUNWIGxpc3Rz IG5vdCBjb3ZlcmluZyBhbGwgdHVwbGVzICovCisJCS8qCisJCSAqIEZpbmQg b3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBpcyBjb3ZlcmVkIGJ5IHRoZSBN Q1YgbGlzdCwKKwkJICogc28gdGhhdCB3ZSBjYW4gJ3NjYWxlJyB0aGUgc2Vs ZWN0aXZpdHkgcHJvcGVybHkgKGUuZy4gd2hlbgorCQkgKiBvbmx5IDUwJSBv ZiB0aGUgc2FtcGxlIGl0ZW1zIGdvdCBpbnRvIHRoZSBNQ1YsIGFuZCB0aGUg cmVzdAorCQkgKiBpcyBlaXRoZXIgaW4gYSBoaXN0b2dyYW0sIG9yIG5vdCBj b3ZlcmVkIGJ5IHN0YXRzKS4KKwkJICoKKwkJICogVE9ETyBUaGlzIG1pZ2h0 IGJlIGhhbmRsZWQgYnkga2VlcGluZyBhIGdsb2JhbCAiZnJlcXVlbmN5Igor CQkgKiAgICAgIGZvciB0aGUgd2hvbGUgbGlzdCwgd2hpY2ggbWlnaHQgc2F2 ZSB1cyBhIGJpdCBvZiB0aW1lCisJCSAqICAgICAgc3BlbnQgb24gYWNjZXNz aW5nIHRoZSBub3QtbWF0Y2hpbmcgcGFydCBvZiB0aGUgTUNWIGxpc3QuCisJ CSAqICAgICAgQWx0aG91Z2ggaXQncyBsaWtlbHkgaW4gYSBjYWNoZSwgc28g aXQncyB2ZXJ5IGZhc3QuCisJCSAqLwogCQl1ICs9IG1jdmxpc3QtPml0ZW1z W2ldLT5mcmVxdWVuY3k7CiAKKwkJLyogc2tpdCBNQ1YgaXRlbXMgbm90IG1h dGNoaW5nIHRoZSBjb25kaXRpb25zICovCisJCWlmIChjb25kaXRpb25fbWF0 Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUpCisJCQljb250aW51ZTsK KwogCQlpZiAobWF0Y2hlc1tpXSAhPSBNVlNUQVRTX01BVENIX05PTkUpCiAJ CQlzICs9IG1jdmxpc3QtPml0ZW1zW2ldLT5mcmVxdWVuY3k7CisKKwkJdCAr PSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVlbmN5OwogCX0KIAogCXBmcmVl KG1hdGNoZXMpOworCXBmcmVlKGNvbmRpdGlvbl9tYXRjaGVzKTsKIAlwZnJl ZShtY3ZsaXN0KTsKIAotCXJldHVybiBzKnU7CisJLyogbm8gY29uZGl0aW9u IG1hdGNoZXMgKi8KKwlpZiAodCA9PSAwLjApCisJCXJldHVybiAoU2VsZWN0 aXZpdHkpMC4wOworCisJcmV0dXJuIChzIC8gdCkgKiB1OwogfQogCiAvKgpA QCAtMjM2OSw2NCArMzY1Miw1NyBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX21j dmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJ fQogCQkJfQogCQl9Ci0JCWVsc2UgaWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8 IGFuZF9jbGF1c2UoY2xhdXNlKSkKKwkJZWxzZSBpZiAob3JfY2xhdXNlKGNs YXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2UpIHx8IG5vdF9jbGF1c2UoY2xh dXNlKSkKIAkJewogCQkJLyogQU5EL09SIGNsYXVzZSwgd2l0aCBhbGwgY2xh dXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIE1WIHN0YXQgKi8K IAogCQkJaW50CQkJaTsKLQkJCUJvb2xFeHByICAgKm9yY2xhdXNlICA9ICgo Qm9vbEV4cHIqKWNsYXVzZSk7Ci0JCQlMaXN0CSAgICpvcmNsYXVzZXMgPSBv cmNsYXVzZS0+YXJnczsKKwkJCUxpc3QJICAgKnRtcF9jbGF1c2VzID0gKChC b29sRXhwciopY2xhdXNlKS0+YXJnczsKIAogCQkJLyogbWF0Y2gvbWlzbWF0 Y2ggYml0bWFwIGZvciBlYWNoIE1DViBpdGVtICovCi0JCQlpbnQJb3Jfbm1h dGNoZXMgPSAwOwotCQkJY2hhciAqIG9yX21hdGNoZXMgPSBOVUxMOworCQkJ aW50CXRtcF9ubWF0Y2hlcyA9IDA7CisJCQljaGFyICogdG1wX21hdGNoZXMg PSBOVUxMOwogCi0JCQlBc3NlcnQob3JjbGF1c2VzICE9IE5JTCk7Ci0JCQlB c3NlcnQobGlzdF9sZW5ndGgob3JjbGF1c2VzKSA+PSAyKTsKKwkJCUFzc2Vy dCh0bXBfY2xhdXNlcyAhPSBOSUwpOworCQkJQXNzZXJ0KChsaXN0X2xlbmd0 aCh0bXBfY2xhdXNlcykgPj0gMikgfHwgKG5vdF9jbGF1c2UoY2xhdXNlKSAm JiAobGlzdF9sZW5ndGgodG1wX2NsYXVzZXMpPT0xKSkpOwogCiAJCQkvKiBu dW1iZXIgb2YgbWF0Y2hpbmcgTUNWIGl0ZW1zICovCi0JCQlvcl9ubWF0Y2hl cyA9IG1jdmxpc3QtPm5pdGVtczsKKwkJCXRtcF9ubWF0Y2hlcyA9IChvcl9j bGF1c2UoY2xhdXNlKSkgPyAwIDogbWN2bGlzdC0+bml0ZW1zOwogCiAJCQkv KiBieSBkZWZhdWx0IG5vbmUgb2YgdGhlIE1DViBpdGVtcyBtYXRjaGVzIHRo ZSBjbGF1c2VzICovCi0JCQlvcl9tYXRjaGVzID0gcGFsbG9jMChzaXplb2Yo Y2hhcikgKiBvcl9ubWF0Y2hlcyk7CisJCQl0bXBfbWF0Y2hlcyA9IHBhbGxv YzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+bml0ZW1zKTsKIAotCQkJaWYg KG9yX2NsYXVzZShjbGF1c2UpKQotCQkJewotCQkJCS8qIE9SIGNsYXVzZXMg YXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJbWVt c2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6ZW9mKGNo YXIpKm9yX25tYXRjaGVzKTsKLQkJCQlvcl9ubWF0Y2hlcyA9IDA7Ci0JCQl9 Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQU5EIGNsYXVzZXMgYXNzdW1lIG5v dGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJbWVtc2V0KG9yX21h dGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm9yX25t YXRjaGVzKTsKLQkJCX0KKwkJCS8qIEFORCAoYW5kIE5PVCkgY2xhdXNlcyBh c3N1bWUgZXZlcnl0aGluZyBtYXRjaGVzLCBpbml0aWFsbHkgKi8KKwkJCWlm ICghIG9yX2NsYXVzZShjbGF1c2UpKQorCQkJCW1lbXNldCh0bXBfbWF0Y2hl cywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2YoY2hhcikqbWN2bGlzdC0+ bml0ZW1zKTsKIAogCQkJLyogYnVpbGQgdGhlIG1hdGNoIGJpdG1hcCBmb3Ig dGhlIE9SLWNsYXVzZXMgKi8KLQkJCW9yX25tYXRjaGVzID0gdXBkYXRlX21h dGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIG9yY2xhdXNlcywKKwkJCXRtcF9u bWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChyb290LCB0 bXBfY2xhdXNlcywKIAkJCQkJCQkJCSAgIHN0YWtleXMsIG1jdmxpc3QsCi0J CQkJCQkJCQkgICBvcl9ubWF0Y2hlcywgb3JfbWF0Y2hlcywKKwkJCQkJCQkJ CSAgIHRtcF9ubWF0Y2hlcywgdG1wX21hdGNoZXMsCiAJCQkJCQkJCQkgICBs b3dzZWwsIGZ1bGxtYXRjaCwgb3JfY2xhdXNlKGNsYXVzZSkpOwogCiAJCQkv KiBtZXJnZSB0aGUgYml0bWFwIGludG8gdGhlIGV4aXN0aW5nIG9uZSovCiAJ CQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0ZW1zOyBpKyspCiAJCQl7 CisJCQkJLyogaWYgdGhpcyBpcyBhIE5PVCBjbGF1c2UsIHdlIG5lZWQgdG8g aW52ZXJ0IHRoZSByZXN1bHRzIGZpcnN0ICovCisJCQkJaWYgKG5vdF9jbGF1 c2UoY2xhdXNlKSkKKwkJCQkJdG1wX21hdGNoZXNbaV0gPSAoTVZTVEFUU19N QVRDSF9GVUxMIC0gdG1wX21hdGNoZXNbaV0pOworCiAJCQkJLyoKIAkJCQkg KiBUbyBBTkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEgTUlOKCkgc2VtYW50aWNz IGlzIHVzZWQuCiAJCQkJICogRm9yIE9SLW1lcmdlLCB1c2UgTUFYKCkuCiAJ CQkJICoKIAkJCQkgKiBGSVhNRSB0aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRo ZSBudW1iZXIgb2YgbWF0Y2hlcwogCQkJCSAqLwotCQkJCVVQREFURV9SRVNV TFQobWF0Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwgaXNfb3IpOworCQkJCVVQ REFURV9SRVNVTFQobWF0Y2hlc1tpXSwgdG1wX21hdGNoZXNbaV0sIGlzX29y KTsKIAkJCX0KIAotCQkJcGZyZWUob3JfbWF0Y2hlcyk7CisJCQlwZnJlZSh0 bXBfbWF0Y2hlcyk7CiAKIAkJfQogCQllbHNlCi0JCXsKIAkJCWVsb2coRVJS T1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIsIGNsYXVzZS0+dHlwZSk7 Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjQ4NCwxNSArMzc2MCwxOCBAQCB1cGRh dGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCiAgKiAgICAgIHRoaXMgaXMgbm90IHVuY29tbW9uLCBi dXQgZm9yIGhpc3RvZ3JhbXMgaXQncyBub3QgdGhhdCBjbGVhci4KICAqLwog c3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5 X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywK LQkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cykKK2NsYXVzZWxp c3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290 LCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCisJCQkJCQkJCQlMaXN0ICpj bGF1c2VzLCBMaXN0ICpjb25kaXRpb25zLCBib29sIGlzX29yKQogewogCWlu dCBpOwogCVNlbGVjdGl2aXR5IHMgPSAwLjA7CisJU2VsZWN0aXZpdHkgdCA9 IDAuMDsKIAlTZWxlY3Rpdml0eSB1ID0gMC4wOwogCiAJaW50CQlubWF0Y2hl cyA9IDA7CisJaW50CQluY29uZGl0aW9ucyA9IDA7CiAJY2hhciAgICptYXRj aGVzID0gTlVMTDsKKwljaGFyICAgKmNvbmRpdGlvbl9tYXRjaGVzID0gTlVM TDsKIAogCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBtdmhpc3QgPSBOVUxMOwog CkBAIC0yNTA1LDI1ICszNzg0LDU1IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0 aXZpdHlfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1 c2VzLAogCiAJQXNzZXJ0IChtdmhpc3QgIT0gTlVMTCk7CiAJQXNzZXJ0IChj bGF1c2VzICE9IE5JTCk7Ci0JQXNzZXJ0IChsaXN0X2xlbmd0aChjbGF1c2Vz KSA+PSAyKTsKKwlBc3NlcnQgKGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDEp OworCisJbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCW5jb25kaXRp b25zID0gbXZoaXN0LT5uYnVja2V0czsKIAogCS8qCi0JICogQml0bWFwIG9m IGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwgcGFydGlhbCwgZnVsbCkuIGJ5 IGRlZmF1bHQKLQkgKiBhbGwgYnVja2V0cyBmdWxseSBtYXRjaCAoYW5kIHdl J2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBCaXRtYXAgb2YgYnVja2V0IG1h dGNoZXMgKG1pc21hdGNoLCBwYXJ0aWFsLCBmdWxsKS4KKwkgKgorCSAqIEZv ciBBTkQgY2xhdXNlcyBhbGwgYnVja2V0cyBtYXRjaCAoYW5kIHdlJ2xsIGVs aW1pbmF0ZSB0aGVtKS4KKwkgKiBGb3IgT1IgIGNsYXVzZXMgbm8gIGJ1Y2tl dHMgbWF0Y2ggKGFuZCB3ZSdsbCBhZGQgdGhlbSkuCisJICoKKwkgKiBXZSBv bmx5IG5lZWQgdG8gZG8gdGhlIG1lbXNldCBmb3IgQU5EIGNsYXVzZXMgKGZv ciBPUiBjbGF1c2VzCisJICogaXQncyBhbHJlYWR5IHNldCBjb3JyZWN0bHkg YnkgdGhlIHBhbGxvYzApLgogCSAqLwotCW1hdGNoZXMgPSBwYWxsb2MwKHNp emVvZihjaGFyKSAqIG12aGlzdC0+bmJ1Y2tldHMpOwotCW1lbXNldChtYXRj aGVzLCAgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2YoY2hhcikqbXZoaXN0 LT5uYnVja2V0cyk7CisJbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIp ICogbm1hdGNoZXMpOwogCi0Jbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRz OworCWlmICghIGlzX29yKSAvKiBBTkQtY2xhdXNlICovCisJCW1lbXNldCht YXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpubWF0 Y2hlcyk7CisKKwkvKiBDb25kaXRpb25zIGFyZSB0cmVhdGVkIGFzIEFORCBj bGF1c2UsIHNvIG1hdGNoIGJ5IGRlZmF1bHQuICovCisJY29uZGl0aW9uX21h dGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisJ bWVtc2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEws IHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisKKwkvKgorCSAqIGJ1aWxk IHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBjb25kaXRpb25zIChjb25kaXRp b25zIGFyZSBhbHdheXMKKwkgKiBjb25uZWN0ZWQgYnkgQU5EKQorCSAqLwor CWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJdXBkYXRlX21hdGNoX2JpdG1h cF9oaXN0b2dyYW0ocm9vdCwgY29uZGl0aW9ucywKKwkJCQkJCQkJICBtdnN0 YXRzLT5zdGFrZXlzLCBtdmhpc3QsCisJCQkJCQkJCSAgbmNvbmRpdGlvbnMs IGNvbmRpdGlvbl9tYXRjaGVzLCBmYWxzZSk7CiAKLQkvKiBidWlsZCB0aGUg bWF0Y2ggYml0bWFwICovCisJLyoKKwkgKiBidWlsZCB0aGUgbWF0Y2ggYml0 bWFwIGZvciB0aGUgZXN0aW1hdGVkIGNsYXVzZXMKKwkgKgorCSAqIFRPRE8g VGhpcyBldmFsdWF0ZXMgdGhlIGNsYXVzZXMgZm9yIGFsbCBidWNrZXRzLCBl dmVuIHRob3NlCisJICogICAgICBydWxlZCBvdXQgYnkgdGhlIGNvbmRpdGlv bnMuIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlCisJICogICAgICB0aGUg c2FtZSwgYnV0IGl0IG1pZ2h0IGJlIGZhc3Rlci4KKwkgKi8KIAl1cGRhdGVf bWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLAogCQkJCQkJ CQkgIG12c3RhdHMtPnN0YWtleXMsIG12aGlzdCwKLQkJCQkJCQkJICBubWF0 Y2hlcywgbWF0Y2hlcywgZmFsc2UpOworCQkJCQkJCQkgICgoaXNfb3IpID8g MCA6IG5tYXRjaGVzKSwgbWF0Y2hlcywKKwkJCQkJCQkJICBpc19vcik7CiAK IAkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUgYnVja2V0cyBhbmQgc3VtIHRo ZSBzZWxlY3Rpdml0aWVzICovCiAJZm9yIChpID0gMDsgaSA8IG12aGlzdC0+ bmJ1Y2tldHM7IGkrKykKIAl7CisJCWZsb2F0IGNvZWZmID0gMS4wOworCiAJ CS8qCiAJCSAqIEZpbmQgb3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBpcyBj b3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0sCiAJCSAqIHNvIHRoYXQgd2UgY2Fu ICdzY2FsZScgdGhlIHNlbGVjdGl2aXR5IHByb3Blcmx5IChlLmcuIHdoZW4K QEAgLTI1MzcsMTAgKzM4NDYsMjMgQEAgY2xhdXNlbGlzdF9tdl9zZWxlY3Rp dml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVz ZXMsCiAJCSAqLwogCQl1ICs9IG12aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxl czsKIAorCQkvKiBza2lwIGJ1Y2tldHMgbm90IG1hdGNoaW5nIHRoZSBjb25k aXRpb25zICovCisJCWlmIChjb25kaXRpb25fbWF0Y2hlc1tpXSA9PSBNVlNU QVRTX01BVENIX05PTkUpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoY29u ZGl0aW9uX21hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9QQVJUSUFMKQor CQkJY29lZmYgPSAwLjU7CisKKwkJdCArPSBjb2VmZiAqIG12aGlzdC0+YnVj a2V0c1tpXS0+bnR1cGxlczsKKwogCQlpZiAobWF0Y2hlc1tpXSA9PSBNVlNU QVRTX01BVENIX0ZVTEwpCi0JCQlzICs9IG12aGlzdC0+YnVja2V0c1tpXS0+ bnR1cGxlczsKKwkJCXMgKz0gY29lZmYgKiBtdmhpc3QtPmJ1Y2tldHNbaV0t Pm50dXBsZXM7CiAJCWVsc2UgaWYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19N QVRDSF9QQVJUSUFMKQotCQkJcyArPSAwLjUgKiBtdmhpc3QtPmJ1Y2tldHNb aV0tPm50dXBsZXM7CisJCQkvKgorCQkJICogVE9ETyBJZiBib3RoIGNvbmRp dGlvbnMgYW5kIGNsYXVzZXMgbWF0Y2ggcGFydGlhbGx5LCB0aGlzCisJCQkg KiAgICAgIHdpbGwgdXNlIDAuMjUgbWF0Y2ggLSBub3Qgc3VyZSBpZiB0aGF0 J3MgdGhlIHJpZ2h0CisJCQkgKiAgICAgIHRoaW5nIHNvbHV0aW9uLCBidXQg c2VlbXMgYWJvdXQgcmlnaHQuCisJCQkgKi8KKwkJCXMgKz0gY29lZmYgKiAw LjUgKiBtdmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CiAJfQogCiAjaWZk ZWYgREVCVUdfTVZISVNUCkBAIC0yNTQ5LDkgKzM4NzEsMTQgQEAgY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsCiAKIAkvKiByZWxlYXNlIHRoZSBhbGxvY2F0 ZWQgYml0bWFwIGFuZCBkZXNlcmlhbGl6ZWQgaGlzdG9ncmFtICovCiAJcGZy ZWUobWF0Y2hlcyk7CisJcGZyZWUoY29uZGl0aW9uX21hdGNoZXMpOwogCXBm cmVlKG12aGlzdCk7CiAKLQlyZXR1cm4gcyAqIHU7CisJLyogbm8gY29uZGl0 aW9uIG1hdGNoZXMgKi8KKwlpZiAodCA9PSAwLjApCisJCXJldHVybiAoU2Vs ZWN0aXZpdHkpMC4wOworCisJcmV0dXJuIChzIC8gdCkgKiB1OwogfQogCiAv KiBjYWNoZWQgcmVzdWx0IG9mIGJ1Y2tldCBib3VuZGFyeSBjb21wYXJpc29u IGZvciBhIHNpbmdsZSBkaW1lbnNpb24gKi8KQEAgLTI2OTksNyArNDAyNiw3 IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpjbGF1c2VzLAogewogCWludCBpOwogCUxpc3RDZWxs ICogbDsKLQorIAogCS8qCiAJICogVXNlZCBmb3IgY2FjaGluZyBmdW5jdGlv biBjYWxscywgb25seSBvbmNlIHBlciBkZWR1cGxpY2F0ZWQgdmFsdWUuCiAJ ICoKQEAgLTI3NDIsNyArNDA2OSw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBf aGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAog CiAJCQlGbWdySW5mbwlvcHByb2M7CQkJLyogb3BlcmF0b3IgKi8KIAkJCWZt Z3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9wbm8pLCAmb3Bwcm9jKTsKLQor IAogCQkJLyogcmVzZXQgdGhlIGNhY2hlIChwZXIgY2xhdXNlKSAqLwogCQkJ bWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0LT5uYnVja2V0cyk7CiAKQEAg LTI5MDIsNjQgKzQyMjksNTcgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0 b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJ CVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZTVEFUU19NQVRDSF9OT05F LCBpc19vcik7CiAJCQl9CiAJCX0KLQkJZWxzZSBpZiAob3JfY2xhdXNlKGNs YXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2UpKQorCQllbHNlIGlmIChvcl9j bGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNsYXVzZSkgfHwgbm90X2Ns YXVzZShjbGF1c2UpKQogCQl7CiAJCQkvKiBBTkQvT1IgY2xhdXNlLCB3aXRo IGFsbCBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQgTVYg c3RhdCAqLwogCiAJCQlpbnQJCQlpOwotCQkJQm9vbEV4cHIgICAqb3JjbGF1 c2UgID0gKChCb29sRXhwciopY2xhdXNlKTsKLQkJCUxpc3QJICAgKm9yY2xh dXNlcyA9IG9yY2xhdXNlLT5hcmdzOworCQkJTGlzdAkgICAqdG1wX2NsYXVz ZXMgPSAoKEJvb2xFeHByKiljbGF1c2UpLT5hcmdzOwogCiAJCQkvKiBtYXRj aC9taXNtYXRjaCBiaXRtYXAgZm9yIGVhY2ggYnVja2V0ICovCi0JCQlpbnQJ b3Jfbm1hdGNoZXMgPSAwOwotCQkJY2hhciAqIG9yX21hdGNoZXMgPSBOVUxM OworCQkJaW50CXRtcF9ubWF0Y2hlcyA9IDA7CisJCQljaGFyICogdG1wX21h dGNoZXMgPSBOVUxMOwogCi0JCQlBc3NlcnQob3JjbGF1c2VzICE9IE5JTCk7 Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1c2VzKSA+PSAyKTsKKwkJ CUFzc2VydCh0bXBfY2xhdXNlcyAhPSBOSUwpOworCQkJQXNzZXJ0KChsaXN0 X2xlbmd0aCh0bXBfY2xhdXNlcykgPj0gMikgfHwgKG5vdF9jbGF1c2UoY2xh dXNlKSAmJiAobGlzdF9sZW5ndGgodG1wX2NsYXVzZXMpPT0xKSkpOwogCiAJ CQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgYnVja2V0cyAqLwotCQkJb3Jfbm1h dGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCQkJdG1wX25tYXRjaGVzID0g KG9yX2NsYXVzZShjbGF1c2UpKSA/IDAgOiBtdmhpc3QtPm5idWNrZXRzOwog Ci0JCQkvKiBieSBkZWZhdWx0IG5vbmUgb2YgdGhlIGJ1Y2tldHMgbWF0Y2hl cyB0aGUgY2xhdXNlcyAqLwotCQkJb3JfbWF0Y2hlcyA9IHBhbGxvYzAoc2l6 ZW9mKGNoYXIpICogb3Jfbm1hdGNoZXMpOworCQkJLyogYnkgZGVmYXVsdCBu b25lIG9mIHRoZSBidWNrZXRzIG1hdGNoZXMgdGhlIGNsYXVzZXMgKE9SIGNs YXVzZSkgKi8KKwkJCXRtcF9tYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hh cikgKiBtdmhpc3QtPm5idWNrZXRzKTsKIAotCQkJaWYgKG9yX2NsYXVzZShj bGF1c2UpKQotCQkJewotCQkJCS8qIE9SIGNsYXVzZXMgYXNzdW1lIG5vdGhp bmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJbWVtc2V0KG9yX21hdGNo ZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6ZW9mKGNoYXIpKm9yX25tYXRj aGVzKTsKLQkJCQlvcl9ubWF0Y2hlcyA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0J CQl7Ci0JCQkJLyogQU5EIGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hl cywgaW5pdGlhbGx5ICovCi0JCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RB VFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJ CX0KKwkJCS8qIGJ1dCBBTkQgKGFuZCBOT1QpIGNsYXVzZXMgYXNzdW1lIGV2 ZXJ5dGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCisJCQlpZiAoISBvcl9j bGF1c2UoY2xhdXNlKSkKKwkJCQltZW1zZXQodG1wX21hdGNoZXMsIE1WU1RB VFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm12aGlzdC0+bmJ1Y2tldHMp OwogCiAJCQkvKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgT1It Y2xhdXNlcyAqLwotCQkJb3Jfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0 bWFwX2hpc3RvZ3JhbShyb290LCBvcmNsYXVzZXMsCisJCQl0bXBfbm1hdGNo ZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCB0bXBf Y2xhdXNlcywKIAkJCQkJCQkJCQlzdGFrZXlzLCBtdmhpc3QsCi0JCQkJCQkJ CQkJb3Jfbm1hdGNoZXMsIG9yX21hdGNoZXMsIG9yX2NsYXVzZShjbGF1c2Up KTsKKwkJCQkJCQkJCQl0bXBfbm1hdGNoZXMsIHRtcF9tYXRjaGVzLCBvcl9j bGF1c2UoY2xhdXNlKSk7CiAKIAkJCS8qIG1lcmdlIHRoZSBiaXRtYXAgaW50 byB0aGUgZXhpc3Rpbmcgb25lKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBtdmhp c3QtPm5idWNrZXRzOyBpKyspCiAJCQl7CisJCQkJLyogaWYgdGhpcyBpcyBh IE5PVCBjbGF1c2UsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSByZXN1bHRzIGZp cnN0ICovCisJCQkJaWYgKG5vdF9jbGF1c2UoY2xhdXNlKSkKKwkJCQkJdG1w X21hdGNoZXNbaV0gPSAoTVZTVEFUU19NQVRDSF9GVUxMIC0gdG1wX21hdGNo ZXNbaV0pOworCiAJCQkJLyoKIAkJCQkgKiBUbyBBTkQtbWVyZ2UgdGhlIGJp dG1hcHMsIGEgTUlOKCkgc2VtYW50aWNzIGlzIHVzZWQuCiAJCQkJICogRm9y IE9SLW1lcmdlLCB1c2UgTUFYKCkuCiAJCQkJICoKIAkJCQkgKiBGSVhNRSB0 aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgbWF0Y2hlcwog CQkJCSAqLwotCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgb3JfbWF0 Y2hlc1tpXSwgaXNfb3IpOworCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tp XSwgdG1wX21hdGNoZXNbaV0sIGlzX29yKTsKIAkJCX0KIAotCQkJcGZyZWUo b3JfbWF0Y2hlcyk7Ci0KKwkJCXBmcmVlKHRtcF9tYXRjaGVzKTsKIAkJfQog CQllbHNlCiAJCQllbG9nKEVSUk9SLCAidW5rbm93biBjbGF1c2UgdHlwZTog JWQiLCBjbGF1c2UtPnR5cGUpOwogCX0KIAotCS8qIGZyZWUgdGhlIGNhbGwg Y2FjaGUgKi8KIAlwZnJlZShjYWxsY2FjaGUpOwogCiAJcmV0dXJuIG5tYXRj aGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKaW5kZXggNTM1MDMyOS4uNTcyMTRlMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0zNTE4LDcg KzM1MTgsOCBAQCBjb21wdXRlX3NlbWlfYW50aV9qb2luX2ZhY3RvcnMoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlqb2lucXVhbHMsCiAJCQkJCQkJ CQkwLAogCQkJCQkJCQkJam9pbnR5cGUsCi0JCQkJCQkJCQlzamluZm8pOwor CQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJTklMKTsKIAogCS8qCiAJICog QWxzbyBnZXQgdGhlIG5vcm1hbCBpbm5lci1qb2luIHNlbGVjdGl2aXR5IG9m IHRoZSBqb2luIGNsYXVzZXMuCkBAIC0zNTQxLDcgKzM1NDIsOCBAQCBjb21w dXRlX3NlbWlfYW50aV9qb2luX2ZhY3RvcnMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQlqb2lucXVhbHMsCiAJCQkJCQkJCQkwLAogCQkJCQkJCQkJ Sk9JTl9JTk5FUiwKLQkJCQkJCQkJCSZub3JtX3NqaW5mbyk7CisJCQkJCQkJ CQkmbm9ybV9zamluZm8sCisJCQkJCQkJCQlOSUwpOwogCiAJLyogQXZvaWQg bGVha2luZyBhIGxvdCBvZiBMaXN0Q2VsbHMgKi8KIAlpZiAoam9pbnR5cGUg PT0gSk9JTl9BTlRJKQpAQCAtMzcwOCw3ICszNzEwLDcgQEAgYXBwcm94X3R1 cGxlX2NvdW50KFBsYW5uZXJJbmZvICpyb290LCBKb2luUGF0aCAqcGF0aCwg TGlzdCAqcXVhbHMpCiAJCU5vZGUJICAgKnF1YWwgPSAoTm9kZSAqKSBsZmly c3QobCk7CiAKIAkJLyogTm90ZSB0aGF0IGNsYXVzZV9zZWxlY3Rpdml0eSB3 aWxsIGJlIGFibGUgdG8gY2FjaGUgaXRzIHJlc3VsdCAqLwotCQlzZWxlYyAq PSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwgcXVhbCwgMCwgSk9JTl9JTk5F UiwgJnNqaW5mbyk7CisJCXNlbGVjICo9IGNsYXVzZV9zZWxlY3Rpdml0eShy b290LCBxdWFsLCAwLCBKT0lOX0lOTkVSLCAmc2ppbmZvLCBOSUwpOwogCX0K IAogCS8qIEFwcGx5IGl0IHRvIHRoZSBpbnB1dCByZWxhdGlvbiBzaXplcyAq LwpAQCAtMzc0NCw3ICszNzQ2LDggQEAgc2V0X2Jhc2VyZWxfc2l6ZV9lc3Rp bWF0ZXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAkJ CQkJCQkgICByZWwtPmJhc2VyZXN0cmljdGluZm8sCiAJCQkJCQkJICAgMCwK IAkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJCSAgIE5VTEwpOworCQkJ CQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTklMKTsKIAogCXJlbC0+cm93cyA9 IGNsYW1wX3Jvd19lc3QobnJvd3MpOwogCkBAIC0zNzgxLDcgKzM3ODQsOCBA QCBnZXRfcGFyYW1ldGVyaXplZF9iYXNlcmVsX3NpemUoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkgICBhbGxjbGF1c2Vz LAogCQkJCQkJCSAgIHJlbC0+cmVsaWQsCQkvKiBkbyBub3QgdXNlIDAhICov CiAJCQkJCQkJICAgSk9JTl9JTk5FUiwKLQkJCQkJCQkgICBOVUxMKTsKKwkJ CQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5JTCk7CiAJbnJvd3MgPSBjbGFt cF9yb3dfZXN0KG5yb3dzKTsKIAkvKiBGb3Igc2FmZXR5LCBtYWtlIHN1cmUg cmVzdWx0IGlzIG5vdCBtb3JlIHRoYW4gdGhlIGJhc2UgZXN0aW1hdGUgKi8K IAlpZiAobnJvd3MgPiByZWwtPnJvd3MpCkBAIC0zOTE5LDEyICszOTIzLDE0 IEBAIGNhbGNfam9pbnJlbF9zaXplX2VzdGltYXRlKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCWpvaW5xdWFscywKIAkJCQkJCQkJCQkwLAogCQkJ CQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQkJCXNqaW5mbyk7CisJCQkJCQkJ CQkJc2ppbmZvLAorCQkJCQkJCQkJCU5JTCk7CiAJCXBzZWxlYyA9IGNsYXVz ZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwKIAkJCQkJCQkJCQlwdXNoZWRxdWFs cywKIAkJCQkJCQkJCQkwLAogCQkJCQkJCQkJCWpvaW50eXBlLAotCQkJCQkJ CQkJCXNqaW5mbyk7CisJCQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJCU5J TCk7CiAKIAkJLyogQXZvaWQgbGVha2luZyBhIGxvdCBvZiBMaXN0Q2VsbHMg Ki8KIAkJbGlzdF9mcmVlKGpvaW5xdWFscyk7CkBAIC0zOTM2LDcgKzM5NDIs OCBAQCBjYWxjX2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZShQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQlyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJMCwK IAkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJCQlzamluZm8pOworCQkJ CQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCQlOSUwpOwogCQlwc2VsZWMgPSAw LjA7CQkJLyogbm90IHVzZWQsIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAl9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29y Y2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1 c2VzLmMKaW5kZXggZWE4MzFmNS4uNjI5OWU3NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1c2VzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1c2VzLmMKQEAgLTI4MCw3 ICsyODAsNyBAQCBjb25zaWRlcl9uZXdfb3JfY2xhdXNlKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogc2F2aW5nIHdvcmsgbGF0 ZXIuKQogCSAqLwogCW9yX3NlbGVjID0gY2xhdXNlX3NlbGVjdGl2aXR5KHJv b3QsIChOb2RlICopIG9yX3JpbmZvLAotCQkJCQkJCQkgIDAsIEpPSU5fSU5O RVIsIE5VTEwpOworCQkJCQkJCQkgIDAsIEpPSU5fSU5ORVIsIE5VTEwsIE5J TCk7CiAKIAkvKgogCSAqIFRoZSBjbGF1c2UgaXMgb25seSB3b3J0aCBhZGRp bmcgdG8gdGhlIHF1ZXJ5IGlmIGl0IHJlamVjdHMgYSB1c2VmdWwKQEAgLTM0 Miw3ICszNDIsNyBAQCBjb25zaWRlcl9uZXdfb3JfY2xhdXNlKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkJLyogQ29tcHV0ZSBp bm5lci1qb2luIHNpemUgKi8KIAkJb3JpZ19zZWxlYyA9IGNsYXVzZV9zZWxl Y3Rpdml0eShyb290LCAoTm9kZSAqKSBqb2luX29yX3JpbmZvLAotCQkJCQkJ CQkJCTAsIEpPSU5fSU5ORVIsICZzamluZm8pOworCQkJCQkJCQkJCTAsIEpP SU5fSU5ORVIsICZzamluZm8sIE5JTCk7CiAKIAkJLyogQW5kIGhhY2sgY2Fj aGVkIHNlbGVjdGl2aXR5IHNvIGpvaW4gc2l6ZSByZW1haW5zIHRoZSBzYW1l ICovCiAJCWpvaW5fb3JfcmluZm8tPm5vcm1fc2VsZWMgPSBvcmlnX3NlbGVj IC8gb3Jfc2VsZWM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5j cy5jCmluZGV4IDQ2Yzk1YjAuLjdkMGEzYTEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xNjI3LDEzICsxNjI3LDE1IEBA IGJvb2x0ZXN0c2VsKFBsYW5uZXJJbmZvICpyb290LCBCb29sVGVzdFR5cGUg Ym9vbHRlc3R0eXBlLCBOb2RlICphcmcsCiAJCQljYXNlIElTX05PVF9GQUxT RToKIAkJCQlzZWxlYyA9IChkb3VibGUpIGNsYXVzZV9zZWxlY3Rpdml0eShy b290LCBhcmcsCiAJCQkJCQkJCQkJCQkJdmFyUmVsaWQsCi0JCQkJCQkJCQkJ CQkJam9pbnR5cGUsIHNqaW5mbyk7CisJCQkJCQkJCQkJCQkJam9pbnR5cGUs IHNqaW5mbywKKwkJCQkJCQkJCQkJCQlOSUwpOwogCQkJCWJyZWFrOwogCQkJ Y2FzZSBJU19GQUxTRToKIAkJCWNhc2UgSVNfTk9UX1RSVUU6CiAJCQkJc2Vs ZWMgPSAxLjAgLSAoZG91YmxlKSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwg YXJnLAogCQkJCQkJCQkJCQkJCQkgIHZhclJlbGlkLAotCQkJCQkJCQkJCQkJ CQkgIGpvaW50eXBlLCBzamluZm8pOworCQkJCQkJCQkJCQkJCQkgIGpvaW50 eXBlLCBzamluZm8sCisJCQkJCQkJCQkJCQkJCSAgTklMKTsKIAkJCQlicmVh azsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBib29sdGVzdHR5cGU6ICVkIiwKQEAgLTYyNTksNyArNjI2MSw4IEBAIGdl bmVyaWNjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsCiAJaW5kZXhT ZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwgc2Vs ZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJICBpbmRleC0+cmVsLT5yZWxp ZCwKIAkJCQkJCQkJCQkJICBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCQkgIE5V TEwpOworCQkJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkJCSAgTklMKTsK IAogCS8qCiAJICogSWYgY2FsbGVyIGRpZG4ndCBnaXZlIHVzIGFuIGVzdGlt YXRlLCBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGluZGV4CkBAIC02NTc5LDcg KzY1ODIsOCBAQCBidGNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwg SW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkJYnRyZWVT ZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwgc2Vs ZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJCSAgaW5kZXgtPnJlbC0+cmVs aWQsCiAJCQkJCQkJCQkJCQkgIEpPSU5fSU5ORVIsCi0JCQkJCQkJCQkJCQkg IE5VTEwpOworCQkJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCQkJICBO SUwpOwogCQludW1JbmRleFR1cGxlcyA9IGJ0cmVlU2VsZWN0aXZpdHkgKiBp bmRleC0+cmVsLT50dXBsZXM7CiAKIAkJLyoKQEAgLTczMzAsNyArNzMzNCw4 IEBAIGdpbmNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQ YXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwKIAkqaW5kZXhTZWxlY3Rp dml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwgc2VsZWN0aXZp dHlRdWFscywKIAkJCQkJCQkJCQkJICAgaW5kZXgtPnJlbC0+cmVsaWQsCiAJ CQkJCQkJCQkJCSAgIEpPSU5fSU5ORVIsCi0JCQkJCQkJCQkJCSAgIE5VTEwp OworCQkJCQkJCQkJCQkgICBOVUxMLAorCQkJCQkJCQkJCQkgICBOSUwpOwog CiAJLyogZmV0Y2ggZXN0aW1hdGVkIHBhZ2UgY29zdCBmb3IgdGFibGVzcGFj ZSBjb250YWluaW5nIGluZGV4ICovCiAJZ2V0X3RhYmxlc3BhY2VfcGFnZV9j b3N0cyhpbmRleC0+cmVsdGFibGVzcGFjZSwKQEAgLTc1NjAsNyArNzU2NSw3 IEBAIGJyaW5jb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4 UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJKmluZGV4U2VsZWN0 aXZpdHkgPQogCQljbGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIGluZGV4 UXVhbHMsCiAJCQkJCQkJICAgcGF0aC0+aW5kZXhpbmZvLT5yZWwtPnJlbGlk LAotCQkJCQkJCSAgIEpPSU5fSU5ORVIsIE5VTEwpOworCQkJCQkJCSAgIEpP SU5fSU5ORVIsIE5VTEwsIE5JTCk7CiAJKmluZGV4Q29ycmVsYXRpb24gPSAx OwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IGVh NWEwOWEuLjI3YThkZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMu YwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgInV0aWxzL2J5dGVhLmgi CiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvbXZzdGF0cy5oIgog I2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgogI2luY2x1ZGUgInV0aWxz L3BsYW5jYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3BvcnRhbC5oIgpAQCAt MzkzLDYgKzM5NCwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19l bnVtX2VudHJ5IGZvcmNlX3BhcmFsbGVsX21vZGVfb3B0aW9uc1tdID0gewog fTsKIAogLyoKKyAqIFNlYXJjaCBhbGdvcml0aG0gZm9yIG11bHRpdmFyaWF0 ZSBzdGF0cy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51 bV9lbnRyeSBtdnN0YXRfc2VhcmNoX29wdGlvbnNbXSA9IHsKKwl7ImdyZWVk eSIsIE1WU1RBVF9TRUFSQ0hfR1JFRURZLCBmYWxzZX0sCisJeyJleGhhdXN0 aXZlIiwgTVZTVEFUX1NFQVJDSF9FWEhBVVNUSVZFLCBmYWxzZX0sCisJe05V TEwsIDAsIGZhbHNlfQorfTsKKworLyoKICAqIE9wdGlvbnMgZm9yIGVudW0g dmFsdWVzIHN0b3JlZCBpbiBvdGhlciBtb2R1bGVzCiAgKi8KIGV4dGVybiBj b25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgd2FsX2xldmVsX29wdGlv bnNbXTsKQEAgLTM3MDcsNiArMzcxNywxNiBAQCBzdGF0aWMgc3RydWN0IGNv bmZpZ19lbnVtIENvbmZpZ3VyZU5hbWVzRW51bVtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKKwl7CisJCXsibXZzdGF0X3NlYXJjaCIsIFBHQ19V U0VSU0VULCBRVUVSWV9UVU5JTkdfT1RIRVIsCisJCQlnZXR0ZXh0X25vb3Ao IlNldHMgdGhlIGFsZ29yaXRobSB1c2VkIGZvciBjb21iaW5pbmcgbXVsdGl2 YXJpYXRlIHN0YXRzLiIpLAorCQkJTlVMTAorCQl9LAorCQkmbXZzdGF0X3Nl YXJjaF90eXBlLAorCQlNVlNUQVRfU0VBUkNIX0dSRUVEWSwgbXZzdGF0X3Nl YXJjaF9vcHRpb25zLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8q IEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsKIAkJe05VTEwsIDAsIDAsIE5V TEwsIE5VTEx9LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5z dGF0cyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRz CmluZGV4IDNlNGY0ZDEuLmQ0MDQ5MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCkBAIC05MCw2ICs5MCwx MzcgQEAgZXZlbiBhdHRlbXB0aW5nIHRvIGRvIHRoZSBtb3JlIGV4cGVuc2l2 ZSBlc3RpbWF0aW9uLgogV2hlbmV2ZXIgd2UgZmluZCB0aGVyZSBhcmUgbm8g c3VpdGFibGUgc3RhdHMsIHdlIHNraXAgdGhlIGV4cGVuc2l2ZSBzdGVwcy4K IAogCitDb21iaW5pbmcgbXVsdGlwbGUgc3RhdGlzdGljcworLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBlc3RpbWF0aW5nIHNlbGVj dGl2aXR5IG9mIGEgbGlzdCBvZiBjbGF1c2VzLCB0aGVyZSBtYXkgZXhpc3Qg bm8gc3RhdGlzdGljcworY292ZXJpbmcgYWxsIG9mIHRoZW0uIElmIHRoZXJl IGFyZSBtdWx0aXBsZSBzdGF0aXN0aWNzLCBlYWNoIGNvdmVyaW5nIHNvbWUK K3N1YnNldCBvZiB0aGUgYXR0cmlidXRlcywgdGhlIG9wdGltaXplciBuZWVk cyB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlCitzdGF0aXN0aWNzIHRv IGFwcGx5LgorCitXaGVuIHRoZSBzdGF0aXN0aWNzIGRvIG5vdCBvdmVybGFw LCB0aGUgc29sdXRpb24gaXMgdHJpdmlhbCAtIHdlIGNhbiBzaW1wbHkKK3Nw bGl0IHRoZSBncm91cHMgb2YgY29uZGl0aW9ucyBieSB0aGUgbWF0Y2hpbmcg c3RhdGlzdGljcywgYW5kIHRoZW4gbXVsdGlwbHkgdGhlCitzZWxlY3Rpdml0 aWVzLiBGb3IgZXhhbXBsZSBhc3N1bWUgbXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3Mgb24gKGIsYykgYW5kIChkLGUpLAorYW5kIGEgY29uZGl0aW9uIGxpa2Ug dGhpczoKKworICAgIChhPTEpIEFORCAoYj0yKSBBTkQgKGM9MykgQU5EIChk PTQpIEFORCAoZT01KQorCitUaGVuIChhPTEpIGlzIG5vdCBjb3ZlcmVkIGJ5 IGFueSBvZiB0aGUgc3RhdGlzdGljcywgc28gd2lsbCBiZSBlc3RpbWF0ZWQg dXNpbmcKK3RoZSByZWd1bGFyIHBlci1jb2x1bW4gc3RhdGlzdGljcy4gVGhl IHR3byBjb25kaXRpb25zICgoYj0yKSBBTkQgKGM9MykpIHdpbGwgYmUKK2Vz dGltYXRlZCB1c2luZyB0aGUgKGIsYykgc3RhdGlzdGljcywgYW5kICgoZD00 KSBBTkQgKGU9NSkpIHdpbGwgYmUgZXN0aW1hdGVkCit1c2luZyAoZCxlKSBz dGF0aXN0aWNzLiBBbmQgdGhlIHJlc3VsdGluZyBzZWxlY3Rpdml0aWVzIHdp bGwgYmUgZXN0aW1hdGVkLgorCitOb3csIHdoYXQgaWYgdGhlIHN0YXRpc3Rp Y3Mgb3ZlcmxhcD8gRm9yIGV4YW1wbGUgYXNzdW1lIHRoZSBzYW1lIGNvbmRp dGlvbiBhcworYWJvdmUsIGJ1dCBsZXQncyBzYXkgd2UgaGF2ZSBzdGF0aXN0 aWNzIG9uIChhLGIsYykgYW5kIChhLGMsZCxlKS4gV2hhdCB0aGVuPworCitB cyBzZWxlY3Rpdml0eSBpcyBqdXN0IGEgcHJvYmFiaWxpdHkgdGhhdCB0aGUg Y29uZGl0aW9uIGhvbGRzIGZvciBhIHJhbmRvbSByb3csCit3ZSBjYW4gd3Jp dGUgdGhlIHNlbGVjdGl2aXR5IGxpa2UgdGhpczoKKworICAgIFAoYT0xICYg Yj0yICYgYz0zICYgZD00ICYgZT01KQorCithbmQgd2UgY2FuIHJld3JpdGUg aXQgdXNpbmcgY29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgbGlrZSB0aGlzCisK KyAgICBQKGE9MSAmIGI9MiAmIGM9MykgKiBQKGQ9NCAmIGU9NSB8IGE9MSAm IGI9MiAmIGM9MykKKworTm90aWNlIHRoYXQgdGhlIGZpcnN0IHBhcnQgYWxy ZWFkeSBtYXRjaGVzIHRvIChhLGIsYykgc3RhdGlzdGljcy4gSWYgd2UgYXNz dW1lCit0aGF0IGNvbHVtbnMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkg dGhlIHNhbWUgc3RhdGlzdGljcyBhcmUgaW5kZXBlbmRlbnQsIHdlCittYXkg cmV3cml0ZSB0aGUgc2Vjb25kIGhhbGYgbGlrZSB0aGlzCisKKyAgICBQKGQ9 NCAmIGU9NSB8IGE9MSAmIGI9MiAmIGM9MykgPSBQKGQ9NCAmIGU9NSB8IGE9 MSAmIGM9MykKKword2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIHN0YXRpc3Rp Y3Mgb24gKGEsYyxkLGUpLgorCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3Rh dGlzdGljcyBkZWZpbmVkIG9uIGEgdGFibGUsIGl0J3Mgbm90IGRpZmZpY3Vs dCB0byBjb21lCit1cCB3aXRoIGV4YW1wbGVzIHdoZW4gdGhlcmUgYXJlIG11 bHRpcGxlIHdheXMgdG8gY29tYmluZSB0aGVtIHRvIGNvdmVyIGEgbGlzdCBv ZgorY2xhdXNlcy4gV2UgbmVlZCBhIHdheSB0byBmaW5kIHRoZSBiZXN0IGNv bWJpbmF0aW9uIG9mIHN0YXRpc3RpY3MuCisKK1RoaXMgaXMgdGhlIHB1cnBv c2Ugb2YgY2hvb3NlX212X3N0YXRpc3RpY3MoKS4gSXQgc2VhcmNoZXMgdGhy b3VnaCB0aGUgcG9zc2libGUKK2NvbWJpbmF0aW9ucyBvZiBzdGF0aXN0aWNz LCBhbmQgc2VhcmNoZXMgc3VjaCBjb21iaW5hdGlvbiB0aGF0CisKKyAgICAo YSkgY292ZXJzIHRoZSBtb3N0IGNsYXVzZXMgb2YgdGhlIGxpc3QKKworICAg IChiKSByZXVzZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNsYXVzZXMgYXMg Y29uZGl0aW9ucworICAgICAgICAoaW4gY29uZGl0aW9uYWwgcHJvYmFiaWxp dGllcykKKworV2hpbGUgKGEpIGNyaXRlcmlhIHNlZW1zIG5hdHVyYWwsIHRo ZSAoYikgbWF5IHNlZW0gYSBiaXQgYXdrd2FyZCBhdCBmaXJzdC4gVGhlCitp ZGVhIGlzIHRoYXQgY29uZGl0aW9ucyBpbiBhIHdheSBvZiB0cmFuc2Zlcmlu ZyBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMKK2JldHdlZW4gc3Rh dGlzdGljcy4KKworVGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZSBpbXBsZW1l bnRhdGlvbnMgb2YgY2hvb3NlX212X3N0YXRpc3RpY3MoKSAtIGdyZWVkeQor YW5kIGV4aGF1c3RpdmUuIEV4aGF1c3RpdmUgYWN0dWFsbHkgc2VhcmNoZXMg dGhyb3VnaCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zCitvZiBzdGF0aXN0 aWNzLCBhbmQgZm9yIGxhcmdlciBudW1iZXJzIG9mIHN0YXRpc3RpY3MgbWF5 IGdldCBxdWl0ZSBleHBlbnNpdmUKKyhhcyBpdCwgdW5zdXJwcmlzaW5nbHks IGhhcyBleHBvbmVudGlhbCBjb3N0KS4gR3JlZWR5IHRlcm1pbmF0ZXMgaW4g bGVzcyB0aGFuCitLIHN0ZXBzICh3aGVuIEsgaXMgdGhlIG51bWJlciBvZiBj bGF1c2VzKSwgYW5kIGluIGVhY2ggc3RlcCBjaG9vc2VzIHRoZSBiZXN0Citu ZXh0IHN0YXRpc3RpY3MuIEkndmUgYmVlbiB1bmFibGUgdG8gY29tZSB1cCB3 aXRoIGFuIGV4YW1wbGUgd2hlcmUgdGhvc2UgdHdvCithcHByb2FjaGVzIHdv dWxkIHByb2R1Y2UgZGlmZmVyZW50IGNvbWJpbmF0aW9ucy4KKworSXQncyBw b3NzaWJsZSB0byBjaG9vc2UgdGhlIG9wdGltaXphdGlvbiB1c2luZyBtdnN0 YXRfc2VhcmNoX3R5cGUsIHdpdGggZWl0aGVyCisnZ3JlZWR5JyBvciAnZXho YXVzdGl2ZScgdmFsdWVzIChkZWZhdWx0IGlzICdncmVlZHknKS4KKworICAg IFNFVCBtdnN0YXRfc2VhcmNoX3R5cGUgPSAnZXhoYXVzdGl2ZSc7CisKK05v dGU6IFRoaXMgaXMgbWVhbnQgbW9zdGx5IGZvciBleHBlcmltZW50YXRpb24u IEkgZG8gZXhwZWN0IHdlJ2xsIGNob29zZSBvbmUgb2YKK3RoZSBhbGdvcml0 aG1zIGFuZCByZW1vdmUgdGhlIEdVQyBiZWZvcmUgY29tbWl0LgorCisKK0xp bWl0YXRpb25zIG9mIGNvbWJpbmluZyBzdGF0aXN0aWNzCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBkZXNjcmliZWQgaW4g dGhlIHNlY3Rpb24gJ0NvbWJpbmluZyBtdWx0aXBsZSBzdGF0aXN0aWNzJywg dGhlIGN1cnJlbnQgYXBwb2FjaAoraXMgYmFzZWQgb24gdHJhbnNmZXJpbmcg aW5mb3JtYXRpb24gYmV0d2VlbiBzdGF0aXN0aWNzIGJ5IG1lYW5zIG9mIGNv bmRpdGlvbmFsCitwcm9iYWJpbGl0aWVzLiBUaGlzIGlzIGEgcmVsYXRpdmVs eSBjaGVhcCBhbmQgZWZmaWNpZW50IGFwcHJvYWNoLCBidXQgaXQgaXMKK2Jh c2VkIG9uIHR3byBhc3N1bXB0aW9uczoKKworICAgICgxKSBUaGUgb3Zlcmxh cCBiZXR3ZWVuIHRoZSBzdGF0aXN0aWNzIG5lZWRzIHRvIGJlIHN1ZmZpY2ll bnRseSBsYXJnZSwgaS5lLgorICAgICAgICB0aGVyZSBuZWVkcyB0byBiZSBl bm91Z2ggY29sdW1ucyBzaGFyZWQgYnkgdGhlIHN0YXRpc3RpY3MgdG8gdHJh bnNmZXIKKyAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jaWVz IGJldHdlZW4gdGhlIHJlbWFpbmluZyBjb2x1bW5zLgorCisgICAgKDIpIFRo ZSBxdWVyeSBuZWVkcyB0byBpbmNsdWRlIHN1ZmZpY2llbnQgY2xhdXNlcyBv biB0aGUgc2hhcmVkIGNvbHVtbnMuCisKK0hvdyBhIHZpb2xhdGlvbiBvZiB0 aG9zZSBhc3N1bXB0aW9ucyBtYXkgYmUgYSBwcm9ibGVtIGNhbiBiZSBpbGx1 c3RyYXRlZCBieQorYSBzaW1wbGUgZXhhbXBsZS4gQXNzdW1lIGEgdGFibGUg d2l0aCB0aHJlZSBjb2x1bW5zIChhLGIsYykgY29udGFpbmluZyBleGFjdGx5 Cit0aGUgc2FtZSB2YWx1ZXMsIGFuZCBzdGF0aXN0aWNzIG9uIChhLGIpIGFu ZCAoYixjKToKKworICAgIENSRUFURSBUQUJMRSB0ZXN0IEFTIFNFTEVDVCBp LCBpLCBpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDApOworCisgICAgQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gdGVzdCAoYSxiKSBXSVRIIChtY3YpOworICAgIENSRUFURSBTVEFU SVNUSUNTIHMyIE9OIHRlc3QgKGIsYykgV0lUSCAobWN2KTsKKworICAgIEFO QUxZWkUgdGVzdDsKKworRmlyc3QsIGxldCdzIGVzdGltYXRlIHRoaXMgcXVl cnk6CisKKyAgICBTRUxFQ1QgKiBGUk9NIHRlc3QgV0hFUkUgKGEgPCAxMCkg QU5EIChjIDwgMTApOworCitDbGVhcmx5LCB0aGVyZSBhcmUgbm8gY29uZGl0 aW9ucyBvbiAnYicgKHdoaWNoIGlzIHRoZSBvbmx5IGNvbHVtbiBzaGFyZWQg YnkgdGhlCit0d28gc3RhdGlzdGljcyksIHNvIHdlJ2xsIGVuZCB1cCB3aXRo IGFuIGVzdGltYXRlIGJhc2VkIG9uIGFzc3VtcHRpb24gb2YKK2luZGVwZW5k ZW5jZToKKworICAgIFAoYSA8IDEwKSAqIFAoYyA8IDEwKSA9IDAuMDEgKiAw LjAxID0gMC4wMDAxCisKK1doaWNoIGlzIGEgc2lnbmlmaWNhbnQgdW5kZXIt ZXN0aW1hdGUsIGFzIHRoZSBwcm9wZXIgc2VsZWN0aXZpdHkgaXMgMC4wMS4K KworQnV0IGxldCdzIGVzdGltYXRlIGFub3RoZXIgcXVlcnk6CisKKyAgICBT RUxFQ1QgKiBGUk9NIHRlc3QgV0hFUkUgKGEgPCAxMCkgQU5EIChiIDwgNTAw KSBBTkQgKGMgPCAxMCk7CisKK0luIHRoaXMgY2FzZSwgdGhlIGVzdGltYXRl IG1heSBiZSBjb21wdXRlZCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6CisKKyAg ICBQWyhhIDwgMTApICYgKGIgPCA1MDApICYgKGMgPCAxMCldCisgICAgICA9 IFBbKGEgPCAxMCkgJiAoYiA8IDUwMCldICogUFsoYyA8IDEwKSB8IChhIDwg MTApICYgKGIgPCA1MDApXQorICAgICAgPSBQWyhhIDwgMTApICYgKGIgPCA1 MDApXSAqIFBbKGMgPCAxMCkgfCAoYiA8IDUwMCldCisKK1RoZSB0cm91Ymxl IGlzIHRoZSBwcm9iYWJpbGl0eSBQKGMgPCAxMCB8IGIgPCA1MDApIGV2YWx1 YXRlcyB0byAwLjAyLCBiZWNhdXNlCit3ZSBoYXZlIGFzc3VtZWQgKGEpIGFu ZCAoYykgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgdGhlcmUgaXMgbm8gc3Rh dGlzdGljCitjb250YWluaW5nIGJvdGggdGhlc2UgY29sdW1ucywgYW5kIHRo ZSBjb25kaXRpb24gb24gKGIpIGRvZXMgbm90IHRyYW5zZmVyCitzdWZmaWNp ZW50IGFtb3VudCBvZiBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSB0d28gc3Rh dGlzdGljcy4KKworQ3VycmVudGx5LCB0aGUgb25seSBzb2x1dGlvbiBpcyB0 byBidWlsZCBzdGF0aXN0aWNzIG9uIGFsbCB0aHJlZSBjb2x1bW5zLCBidXQK K3NlZSB0aGUgJ2NvbWJpbmluZyBzdGF0aXN0aWNzIHVzaW5nIGNvbnZvbHV0 aW9uJyBzZWN0aW9uIGZvciBpZGVhcyBvbiBob3cgdG8KK2ltcHJvdmUgdGhp cy4KKworCiBGdXJ0aGVyIChwb3NzaWJseSBjcmF6eSkgaWRlYXMKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTEsMyArMjQyLDM4 IEBAIEJ1dCBvZiBjb3Vyc2UsIHRoaXMgbWF5IHJlc3VsdCBpbiBleHBlbnNp dmUgZXN0aW1hdGlvbiAoQ1BVLXdpc2UpLgogCiBTbyB3ZSBtaWdodCBhZGQg YSBHVUMgdG8gY2hvb3NlIGJldHdlZW4gYSBzaW1wbGUgKHNpbmdsZSBzdGF0 aXN0aWNzKSBhbmQgdGh1cwogbXVsdGktc3RhdGlzdGljIGVzdGltYXRpb24s IHBvc3NpYmx5IHRhYmxlLWxldmVsIHBhcmFtZXRlciAoQUxURVIgVEFCTEUg Li4uKS4KKworCitDb21iaW5pbmcgc3RhdHMgdXNpbmcgY29udm9sdXRpb24K Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSB0 aGUgY3VycmVudCBhcHByb2FjaCBmb3IgY29tYmluaW5nIHN0YXRpc3RpY3Mg aXMgYmFzZWQgb24gY29uZGl0aW9uYWwKK3Byb2JhYmlsaXRpZXMsIGFuZCB0 aHVzIG9ubHkgd29ya3Mgd2hlbiB0aGUgcXVlcnkgaW5jbHVkZXMgY29uZGl0 aW9ucyBvbiB0aGUKK292ZXJsYXBwaW5nIHBhcnRzIG9mIHRoZSBzdGF0aXN0 aWNzLiBCdXQgdGhlcmUgbWF5IGJlIG90aGVyIHdheXMgdG8gY29tYmluZQor c3RhdGlzdGljcywgcmVsYXhpbmcgdGhpcyByZXF1aXJlbWVudC4KKworTGV0 J3MgYXNzdW1lIHR3byBoaXN0b2dyYW1zIEgxIGFuZCBIMiAtIHRoZW4gY29t YmluaW5nIHRoZW0gbWlnaHQgd29yayBhYm91dAorbGlrZSB0aGlzOgorCisK KyAgICBmb3IgKGJ1Y2tldHMgb2YgSDEsIHNhdGlzZnlpbmcgbG9jYWwgY29u ZGl0aW9ucykKKyAgICB7CisgICAgICAgIGZvciAoYnVja2V0cyBvZiBIMiwg b3ZlcmxhcHBpbmcgd2l0aCBIMSBidWNrZXQpCisgICAgICAgIHsKKyAgICAg ICAgICAgIG1hcmsgSDIgYnVja2V0IGFzICd2YWxpZCcKKyAgICAgICAgfQor ICAgIH0KKworICAgIHMxID0gczIgPSAwLjAKKyAgICBmb3IgKGJ1Y2tldHMg b2YgSDIgbWFya2VkIGFzIHZhbGlkKQorICAgIHsKKyAgICAgICAgczEgKz0g ZnJlcXVlbmN5CisKKyAgICAgICAgaWYgKGJ1Y2tldCBzYXRpc3RpZmVzIGxv Y2FsIGNvbmRpdGlvbnMpCisgICAgICAgICAgICAgczIgKz0gZnJlcXVlbmN5 CisgICAgfQorCisgICAgcyA9IChzMiAvIHMxKSAvKiBmaW5hbCBzZWxlY3Rp dml0eSBlc3RpbWF0ZSAqLworCitIb3dldmVyIHRoaXMgbWF5IHF1aWNrbHkg Z2V0IG5vbi10cml2aWFsLCBlLmcuIHdoZW4gY29tYmluaW5nIHR3byBzdGF0 aXN0aWNzCitvZiBkaWZmZXJlbnQgdHlwZXMgKGhpc3RvZ3JhbSB2cy4gTUNW KS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0Lmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGZlYTJiYjcu LjMzZjVhMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9j b3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAt MTkyLDExICsxOTIsMTMgQEAgZXh0ZXJuIFNlbGVjdGl2aXR5IGNsYXVzZWxp c3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCSAgIExp c3QgKmNsYXVzZXMsCiAJCQkJCSAgIGludCB2YXJSZWxpZCwKIAkJCQkJICAg Sm9pblR5cGUgam9pbnR5cGUsCi0JCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvKTsKKwkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJ CQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpOwogZXh0ZXJuIFNlbGVjdGl2aXR5 IGNsYXVzZV9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkg ICBOb2RlICpjbGF1c2UsCiAJCQkJICAgaW50IHZhclJlbGlkLAogCQkJCSAg IEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvKTsKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJ CQkgICBMaXN0ICpjb25kaXRpb25zKTsKIAogI2VuZGlmICAgLyogQ09TVF9I ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKaW5kZXggZjA1YTUxNy4u MzViMmY4ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0 cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApAQCAtMTcs NiArMTcsMTQgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdmFjdXVtLmgiCiAKK3R5cGVkZWYgZW51bSBNVlN0YXRTZWFyY2hU eXBlCit7CisJTVZTVEFUX1NFQVJDSF9FWEhBVVNUSVZFLAkJLyogZXhoYXVz dGl2ZSBzZWFyY2ggKi8KKwlNVlNUQVRfU0VBUkNIX0dSRUVEWQkJCS8qIGdy ZWVkeSBzZWFyY2ggKi8KK30JTVZTdGF0U2VhcmNoVHlwZTsKKworZXh0ZXJu IGludCBtdnN0YXRfc2VhcmNoX3R5cGU7CisKIC8qCiAgKiBEZWdyZWUgb2Yg aG93IG11Y2ggTUNWIGl0ZW0gLyBoaXN0b2dyYW0gYnVja2V0IG1hdGNoZXMg YSBjbGF1c2UuCiAgKiBUaGlzIGlzIHRoZW4gY29uc2lkZXJlZCB3aGVuIGNv bXB1dGluZyB0aGUgc2VsZWN0aXZpdHkuCi0tIAoyLjEuMAoK --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename="0007-multivariate-ndistinct-coefficients.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0007-multivariate-ndistinct-coefficients.patch"; charset="UTF-8" RnJvbSBkOWIwYWZkNzVmMmY2NzgwNzlkNTBmM2Q1MjBiZGQ0NzhjNzViYzg5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogV2VkLCAyMyBEZWMgMjAxNSAw MjowNzo1OCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggNy85XSBtdWx0aXZhcmlh dGUgbmRpc3RpbmN0IGNvZWZmaWNpZW50cwoKLS0tCiBkb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwgICAgfCAgIDkgKysKIHNyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAg ICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICB8ICA5MyArKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxl ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLm5kaXN0aW5jdCB8ICA4MyArKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgICAgICAgICB8 ICAyMyArKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5j ICAgICAgICAgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8 ICAyNiArKystLQogc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aCAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAzICstCiAxNiBmaWxlcyBj aGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUubmRpc3RpbmN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbAppbmRleCBmZDMzODJl Li44MDM2MGE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xNjgsNiArMTY4LDE1IEBAIENSRUFU RSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hCiAgICAgPC9saXN0aXRl bT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPjxsaXRlcmFsPm5kaXN0aW5jdDwvPiAoPHR5cGU+Ym9vbGVh bjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIEVuYWJsZXMgbmRpc3RpbmN0IGNvZWZmaWNpZW50cyBmb3IgdGhlIHN0 YXRpc3RpY3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwv cmVmc2VjdDI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKaW5kZXggNmFmZGVlMC4uYTU1MDE0MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTY5LDcg KzE2OSw4IEBAIENSRUFURSBWSUVXIHBnX212X3N0YXRzIEFTCiAgICAgICAg IGxlbmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCiAgICAgICAgIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMgbWN2aW5mbywKICAg ICAgICAgbGVuZ3RoKFMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVzLAotICAgICAg ICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhTLnN0YWhpc3QpIEFTIGhp c3RpbmZvCisgICAgICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKFMu c3RhaGlzdCkgQVMgaGlzdGluZm8sCisgICAgICAgIHN0YW5kY29lZmYgQVMg bmRjb2VmZgogICAgIEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdf Y2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0YXJlbGlkKSkKICAgICAgICAgTEVG VCBKT0lOIHBnX25hbWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNw YWNlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5h bHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4 IDkwODc1MzIuLmMyOWYxYmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9h bmFseXplLmMKQEAgLTU4Miw3ICs1ODIsNyBAQCBkb19hbmFseXplX3JlbChS ZWxhdGlvbiBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkJfQogCiAJCS8qIEJ1aWxkIG11bHRpdmFyaWF0ZSBzdGF0cyAo aWYgdGhlcmUgYXJlIGFueSkuICovCi0JCWJ1aWxkX212X3N0YXRzKG9uZXJl bCwgbnVtcm93cywgcm93cywgYXR0cl9jbnQsIHZhY2F0dHJzdGF0cyk7CisJ CWJ1aWxkX212X3N0YXRzKG9uZXJlbCwgdG90YWxyb3dzLCBudW1yb3dzLCBy b3dzLCBhdHRyX2NudCwgdmFjYXR0cnN0YXRzKTsKIAl9CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCBlMmYzZmYx Li4xMWRlMWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9z dGF0c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2Nt ZHMuYwpAQCAtNzIsNyArNzIsOCBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0 ZVN0YXRzU3RtdCAqc3RtdCkKIAkvKiBieSBkZWZhdWx0IGJ1aWxkIG5vdGhp bmcgKi8KIAlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZSwKIAkJ CWJ1aWxkX21jdiA9IGZhbHNlLAotCQkJYnVpbGRfaGlzdG9ncmFtID0gZmFs c2U7CisJCQlidWlsZF9oaXN0b2dyYW0gPSBmYWxzZSwKKwkJCWJ1aWxkX25k aXN0aW5jdCA9IGZhbHNlOwogCiAJaW50MzIgCW1heF9idWNrZXRzID0gLTEs CiAJCQltYXhfbWN2X2l0ZW1zID0gLTE7CkBAIC0xNTUsNiArMTU2LDggQEAg Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAKIAkJ aWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJkZXBlbmRlbmNpZXMiKSA9PSAw KQogCQkJYnVpbGRfZGVwZW5kZW5jaWVzID0gZGVmR2V0Qm9vbGVhbihvcHQp OworCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmRpc3RpbmN0 IikgPT0gMCkKKwkJCWJ1aWxkX25kaXN0aW5jdCA9IGRlZkdldEJvb2xlYW4o b3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm1jdiIp ID09IDApCiAJCQlidWlsZF9tY3YgPSBkZWZHZXRCb29sZWFuKG9wdCk7CiAJ CWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJtYXhfbWN2X2l0ZW1z IikgPT0gMCkKQEAgLTIwOSwxMCArMjEyLDEwIEBAIENyZWF0ZVN0YXRpc3Rp Y3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCX0KIAogCS8qIGNoZWNrIHRo YXQgYXQgbGVhc3Qgc29tZSBzdGF0aXN0aWNzIHdlcmUgcmVxdWVzdGVkICov Ci0JaWYgKCEgKGJ1aWxkX2RlcGVuZGVuY2llcyB8fCBidWlsZF9tY3YgfHwg YnVpbGRfaGlzdG9ncmFtKSkKKwlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVz IHx8IGJ1aWxkX21jdiB8fCBidWlsZF9oaXN0b2dyYW0gfHwgYnVpbGRfbmRp c3RpbmN0KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJIGVycm1zZygibm8gc3RhdGlzdGlj cyB0eXBlIChkZXBlbmRlbmNpZXMsIG1jdiwgaGlzdG9ncmFtKSB3YXMgcmVx dWVzdGVkIikpKTsKKwkJCQkgZXJybXNnKCJubyBzdGF0aXN0aWNzIHR5cGUg KGRlcGVuZGVuY2llcywgbWN2LCBoaXN0b2dyYW0sIG5kaXN0aW5jdCkgd2Fz IHJlcXVlc3RlZCIpKSk7CiAKIAkvKiBub3cgZG8gc29tZSBjaGVja2luZyBv ZiB0aGUgb3B0aW9ucyAqLwogCWlmIChyZXF1aXJlX21jdiAmJiAoISBidWls ZF9tY3YpKQpAQCAtMjQ2LDYgKzI0OSw3IEBAIENyZWF0ZVN0YXRpc3RpY3Mo Q3JlYXRlU3RhdHNTdG10ICpzdG10KQogCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19kZXBzX2VuYWJsZWQgLTFdID0gQm9vbEdldERhdHVtKGJ1aWxk X2RlcGVuZGVuY2llcyk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGlj X21jdl9lbmFibGVkICAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfbWN2KTsK IAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9lbmFibGVkIC0x XSA9IEJvb2xHZXREYXR1bShidWlsZF9oaXN0b2dyYW0pOworCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9lbmFibGVkLTFdID0gQm9vbEdl dERhdHVtKGJ1aWxkX25kaXN0aW5jdCk7CiAKIAl2YWx1ZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcyAgICAtMV0gPSBJbnQzMkdldERh dHVtKG1heF9tY3ZfaXRlbXMpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRp c3RpY19oaXN0X21heF9idWNrZXRzIC0xXSA9IEludDMyR2V0RGF0dW0obWF4 X2J1Y2tldHMpOwpAQCAtMjUzLDYgKzI1Nyw3IEBAIENyZWF0ZVN0YXRpc3Rp Y3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCW51bGxzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CiAJbnVsbHNbQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhbWN2ICAgLTFdID0gdHJ1ZTsKIAludWxsc1tB bnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0ICAtMV0gPSB0cnVlOworCW51 bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5kaXN0IC0xXSA9IHRydWU7 CiAKIAkvKiBpbnNlcnQgdGhlIHR1cGxlIGludG8gcGdfbXZfc3RhdGlzdGlj ICovCiAJbXZzdGF0cmVsID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IGMxYjg5OTkuLjI1 NDBkYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jCkBAIC01OSw2ICs1OSw3IEBAIHN0YXRpYyB2b2lkIGFk ZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxpc3QsIE5vZGUg KmNsYXVzZSwKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0ZERVAJCTB4MDEK ICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX01DVgkJMHgwMgogI2RlZmluZQkJ TVZfQ0xBVVNFX1RZUEVfSElTVAkJMHgwNAorI2RlZmluZQkJTVZfQ0xBVVNF X1RZUEVfTkRJU1QJMHgwOAogCiBzdGF0aWMgYm9vbCBjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBCaXRtYXBz ZXQgKiphdHRudW1zLAogCQkJCQkJCSBpbnQgdHlwZSk7CkBAIC0zMjQ2LDYg KzMyNDcsOSBAQCBzdGF0c190eXBlX21hdGNoZXMoTVZTdGF0aXN0aWNJbmZv ICpzdGF0LCBpbnQgdHlwZSkKIAlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQ RV9ISVNUKSAmJiBzdGF0LT5oaXN0X2J1aWx0KQogCQlyZXR1cm4gdHJ1ZTsK IAorCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX05ESVNUKSAmJiBzdGF0 LT5uZGlzdF9idWlsdCkKKwkJcmV0dXJuIHRydWU7CisKIAlyZXR1cm4gZmFs c2U7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bs YW5jYXQuYwppbmRleCAyNTE5MjQ5Li4zNzQxYjdhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC00MTIsNyAr NDEyLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3Qs IE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCW12 c3RhdCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXAp OwogCiAJCQkvKiB1bmF2YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0 aW5nIGZvciB0aGUgcGxhbm5lciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19i dWlsdCB8fCBtdnN0YXQtPm1jdl9idWlsdCB8fCBtdnN0YXQtPmhpc3RfYnVp bHQpCisJCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0IHx8IG12c3RhdC0+bWN2 X2J1aWx0IHx8IG12c3RhdC0+aGlzdF9idWlsdCB8fCBtdnN0YXQtPm5kaXN0 X2J1aWx0KQogCQkJewogCQkJCWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3Rp Y0luZm8pOwogCkBAIC00MjMsMTEgKzQyMywxMyBAQCBnZXRfcmVsYXRpb25f aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmRlcHNfZW5hYmxlZCA9IG12 c3RhdC0+ZGVwc19lbmFibGVkOwogCQkJCWluZm8tPm1jdl9lbmFibGVkICA9 IG12c3RhdC0+bWN2X2VuYWJsZWQ7CiAJCQkJaW5mby0+aGlzdF9lbmFibGVk ID0gbXZzdGF0LT5oaXN0X2VuYWJsZWQ7CisJCQkJaW5mby0+bmRpc3RfZW5h YmxlZCA9IG12c3RhdC0+bmRpc3RfZW5hYmxlZDsKIAogCQkJCS8qIGJ1aWx0 L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCiAJCQkJaW5mby0+ZGVwc19idWls dCA9IG12c3RhdC0+ZGVwc19idWlsdDsKIAkJCQlpbmZvLT5tY3ZfYnVpbHQg ID0gbXZzdGF0LT5tY3ZfYnVpbHQ7CiAJCQkJaW5mby0+aGlzdF9idWlsdCA9 IG12c3RhdC0+aGlzdF9idWlsdDsKKwkJCQlpbmZvLT5uZGlzdF9idWlsdCA9 IG12c3RhdC0+bmRpc3RfYnVpbHQ7CiAKIAkJCQkvKiBzdGFrZXlzICovCiAJ CQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9JRCwgaHR1cCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggN2Qw YTNhMS4uYTg0ZGQyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogI2luY2x1ZGUgInV0aWxz L2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3Mu aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1 dGlscy9tdnN0YXRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbmFic3RpbWUuaCIK ICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKQEAgLTIwNiw2ICsyMDcsNyBAQCBzdGF0aWMgQ29uc3QgKnN0 cmluZ190b19jb25zdChjb25zdCBjaGFyICpzdHIsIE9pZCBkYXRhdHlwZSk7 CiBzdGF0aWMgQ29uc3QgKnN0cmluZ190b19ieXRlYV9jb25zdChjb25zdCBj aGFyICpzdHIsIHNpemVfdCBzdHJfbGVuKTsKIHN0YXRpYyBMaXN0ICphZGRf cHJlZGljYXRlX3RvX3F1YWxzKEluZGV4T3B0SW5mbyAqaW5kZXgsIExpc3Qg KmluZGV4UXVhbHMpOwogCitzdGF0aWMgT2lkIGZpbmRfbmRpc3RpbmN0X2Nv ZWZmKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3Qg KnZhcmluZm9zKTsKIAogLyoKICAqCQllcXNlbAkJCS0gU2VsZWN0aXZpdHkg b2YgIj0iIGZvciBhbnkgZGF0YSB0eXBlcy4KQEAgLTM0MjIsMTIgKzM0MjQs MjYgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkgKiBk b24ndCBrbm93IGJ5IGhvdyBtdWNoLiAgV2Ugc2hvdWxkIG5ldmVyIGNsYW1w IHRvIGxlc3MgdGhhbiB0aGUKIAkJCSAqIGxhcmdlc3QgbmRpc3RpbmN0IHZh bHVlIGZvciBhbnkgb2YgdGhlIFZhcnMsIHRob3VnaCwgc2luY2UKIAkJCSAq IHRoZXJlIHdpbGwgc3VyZWx5IGJlIGF0IGxlYXN0IHRoYXQgbWFueSBncm91 cHMuCisJCQkgKgorCQkJICogSG93ZXZlciB3ZSBkb24ndCBuZWVkIHRvIGRv IHRoaXMgaWYgd2UgaGF2ZSBuZGlzdGluY3Qgc3RhdHMgb24KKwkJCSAqIHRo ZSBjb2x1bW5zIC0gaW4gdGhhdCBjYXNlIHdlIGNhbiBzaW1wbHkgdXNlIHRo ZSBjb2VmZmljaWVudAorCQkJICogdG8gZ2V0IHRoZSAocHJvYmFibHkgd2F5 IG1vcmUgYWNjdXJhdGUpIGVzdGltYXRlLgorCQkJICoKKwkJCSAqIFhYWCBQ cm9iYWJseSBuZWVkcyByZWZhY3RvcmluZyAoZG9uJ3QgbGlrZSB0byBtaXgg d2l0aCBjbGFtcAorCQkJICogICAgIGFuZCBjb2VmZiBhdCB0aGUgc2FtZSB0 aW1lKS4KIAkJCSAqLwogCQkJZG91YmxlCQljbGFtcCA9IHJlbC0+dHVwbGVz OworCQkJZG91YmxlCQljb2VmZiA9IDEuMDsKIAogCQkJaWYgKHJlbHZhcmNv dW50ID4gMSkKIAkJCXsKLQkJCQljbGFtcCAqPSAwLjE7CisJCQkJT2lkIG9p ZCA9IGZpbmRfbmRpc3RpbmN0X2NvZWZmKHJvb3QsIHJlbCwgdmFyaW5mb3Mp OworCisJCQkJaWYgKG9pZCAhPSBJbnZhbGlkT2lkKQorCQkJCQljb2VmZiA9 IGxvYWRfbXZfbmRpc3RpbmN0KG9pZCk7CisJCQkJZWxzZQorCQkJCQljbGFt cCAqPSAwLjE7CisKIAkJCQlpZiAoY2xhbXAgPCByZWxtYXhuZGlzdGluY3Qp CiAJCQkJewogCQkJCQljbGFtcCA9IHJlbG1heG5kaXN0aW5jdDsKQEAgLTM0 MzYsNiArMzQ1MiwxMyBAQCBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93 cywKIAkJCQkJCWNsYW1wID0gcmVsLT50dXBsZXM7CiAJCQkJfQogCQkJfQor CisJCQkvKgorCQkJICogQXBwbHkgbmRpc3RpbmN0IGNvZWZmaWNpZW50IGZy b20gbXVsdGl2YXIgc3RhdHMgKHdlIG11c3QgZG8gdGhpcworCQkJICogYmVm b3JlIGNsYW1waW5nIHRoZSBlc3RpbWF0ZSBpbiBhbnkgd2F5LgorCQkJICov CisJCQlyZWxkaXN0aW5jdCAvPSBjb2VmZjsKKwogCQkJaWYgKHJlbGRpc3Rp bmN0ID4gY2xhbXApCiAJCQkJcmVsZGlzdGluY3QgPSBjbGFtcDsKIApAQCAt NzU4MiwzICs3NjA1LDcxIEBAIGJyaW5jb3N0ZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAKIAkvKiBYWFggd2hhdCBhYm91dCBwYWdlc19wZXJfcmFuZ2U/ICovCiB9 CisKKy8qCisgKiBGaW5kIGFwcGxpY2FibGUgbmRpc3RpbmN0IHN0YXRpc3Rp Y3MgYW5kIGNvbXB1dGUgdGhlIGNvZWZmaWNpZW50IHRvCisgKiBjb3JyZWN0 IHRoZSBlc3RpbWF0ZSAoc2ltcGx5IGEgcHJvZHVjdCBvZiBwZXItY29sdW1u IG5kaXN0aW5jdHMpLgorICoKKyAqIEN1cnJlbnRseSB3ZSBvbmx5IGxvb2sg Zm9yIGEgcGVyZmVjdCBtYXRjaCwgaS5lLiBhIHNpbmdsZSBuZGlzdGluY3QK KyAqIGVzdGltYXRlIGV4YWN0bHkgbWF0Y2hpbmcgYWxsIHRoZSBjb2x1bW5z IG9mIHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgT2lkCitmaW5kX25k aXN0aW5jdF9jb2VmZihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLCBMaXN0ICp2YXJpbmZvcykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJQml0 bWFwc2V0ICphdHRudW1zID0gTlVMTDsKKwlWYXJpYWJsZVN0YXREYXRhIHZh cmRhdGE7CisKKwlmb3JlYWNoKGxjLCB2YXJpbmZvcykKKwl7CisJCUdyb3Vw VmFySW5mbyAqdmFyaW5mbyA9IChHcm91cFZhckluZm8gKikgbGZpcnN0KGxj KTsKKworCQlpZiAodmFyaW5mby0+cmVsICE9IHJlbCkKKwkJCWNvbnRpbnVl OworCisJCS8qIEZJWE1FIGhhbmRsZSBleHByZXNzaW9ucyBpbiBnZW5lcmFs IG9ubHkgKi8KKworCQkvKgorCQkgKiBleGFtaW5lIHRoZSB2YXJpYWJsZSAo b3IgZXhwcmVzc2lvbikgc28gdGhhdCB3ZSBrbm93IHdoaWNoCisJCSAqIGF0 dHJpYnV0ZSB3ZSdyZSBkZWFsaW5nIHdpdGggLSB3ZSBuZWVkIHRoaXMgZm9y IG1hdGNoaW5nIHRoZQorCQkgKiBuZGlzdGluY3QgY29lZmZpY2llbnQKKwkJ ICoKKwkJICogRklYTUUgcHJvYmFibHkgbWlnaHQgcmVtZW1iZXIgdGhpcyBm cm9tIGVzdGltYXRlX251bV9ncm91cHMKKwkJICovCisJCWV4YW1pbmVfdmFy aWFibGUocm9vdCwgdmFyaW5mby0+dmFyLCAwLCAmdmFyZGF0YSk7CisKKwkJ aWYgKEhlYXBUdXBsZUlzVmFsaWQodmFyZGF0YS5zdGF0c1R1cGxlKSkKKwkJ eworCQkJRm9ybV9wZ19zdGF0aXN0aWMgc3RhdHMKKwkJCQk9IChGb3JtX3Bn X3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGEuc3RhdHNUdXBsZSk7CisK KwkJCWF0dG51bXMgPSBibXNfYWRkX21lbWJlcihhdHRudW1zLCBzdGF0cy0+ c3RhYXR0bnVtKTsKKworCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0 YSk7CisJCX0KKwl9CisKKwkvKiBsb29rIGZvciBhIG1hdGNoaW5nIG5kaXN0 aW5jdCBzdGF0aXN0aWNzICovCisJZm9yZWFjaCAobGMsIHJlbC0+bXZzdGF0 bGlzdCkKKwl7CisJCWludCBpOworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8g PSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKKworCQkvKiBza2lw IHN0YXRpc3RpY3Mgd2l0aG91dCBuZGlzdGluY3QgY29lZmZpY2llbnQgYnVp bHQgKi8KKwkJaWYgKCFpbmZvLT5uZGlzdF9idWlsdCkKKwkJCWNvbnRpbnVl OworCisJCS8qIG9ubHkgZXhhY3QgbWF0Y2hlcyBmb3Igbm93IChzYW1lIHNl dCBvZiBjb2x1bW5zKSAqLworCQlpZiAoYm1zX251bV9tZW1iZXJzKGF0dG51 bXMpICE9IGluZm8tPnN0YWtleXMtPmRpbTEpCisJCQljb250aW51ZTsKKwor CQkvKiBjaGVjayB0aGF0IHRoZSBjb2x1bW5zIG1hdGNoICovCisJCWZvciAo aSA9IDA7IGkgPCBpbmZvLT5zdGFrZXlzLT5kaW0xOyBpKyspCisJCQlpZiAo Ym1zX2lzX21lbWJlcihpbmZvLT5zdGFrZXlzLT52YWx1ZXNbaV0sIGF0dG51 bXMpKQorCQkJCWNvbnRpbnVlOworCisJCXJldHVybiBpbmZvLT5tdm9pZDsK Kwl9CisKKwlyZXR1cm4gSW52YWxpZE9pZDsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCmluZGV4IDlkYmIzYjYuLmQ0Yjg4 ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmls ZQpAQCAtMTIsNiArMTIsNiBAQCBzdWJkaXIgPSBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogaW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1PQkpT ID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gaGlzdG9ncmFtLm8gbWN2Lm8K K09CSlMgPSBjb21tb24ubyBkZXBlbmRlbmNpZXMubyBoaXN0b2dyYW0ubyBt Y3YubyBtdmRpc3QubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2Jh Y2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5uZGlzdGluY3QgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5uZGlzdGluY3QKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMzJkMTYyNAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLm5kaXN0aW5jdApA QCAtMCwwICsxLDgzIEBACituZGlzdGluY3QgY29lZmZpY2llbnRzCis9PT09 PT09PT09PT09PT09PT09PT09CisKK0VzdGltYXRpbmcgbnVtYmVyIG9mIGRp c3RpbmN0IGdyb3VwcyBpbiBhIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMgaXMg dHJpY2t5LAorYW5kIHRoZSBlc3RpbWF0aW9uIGVycm9yIGlzIG9mdGVuIHNp Z25pZmljYW50LiBCeSBuZGlzdGluY3QgY29lZmZpY2llbnQgd2UKK21lYW4g YSByYXRpbworCisgICAgcSA9IG5kaXN0aW5jdChhKSAqIG5kaXN0aW5jdChi KSAvIG5kaXN0aW5jdChhLGIpCisKK3doZXJlICdhJyBhbmQgJ2InIGFyZSBj b2x1bW5zLCBuZGlzdGluY3QoYSkgaXMgKGFuIGVzdGltYXRlIG9mKSBhIG51 bWJlciBvZgorZGlzdGluY3QgdmFsdWVzIGluIGNvbHVtbiAnYScuIEFuZCBu ZGlzdGluY3QoYSxiKSBpcyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCitwYWly IG9mIGNvbHVtbnMuCisKK1RoZSBtZWFuaW5nIG9mIHRoZSBjb2VmZmljaWVu dCBtYXkgYmUgaWxsdXN0cmF0ZWQgYnkgYW5zd2VyaW5nIHRoZSBmb2xsb3dp bmcKK3F1ZXN0aW9uOiBHaXZlbiBhIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMg KGEsYiksIGhvdyBtYW55IGRpc3RpbmN0IHZhbHVlcyBvZiAnYicKK21hdGNo ZXMgYSBjaG9zZW4gdmFsdWUgb2YgJ2EnIG9uIGF2ZXJhZ2U/CisKK0xldCdz IGFzc3VtZSB3ZSBrbm93IG5kaXN0aW5jdChhKSBhbmQgbmRpc3RpbmN0KGEs YikuIFRoZW4gdGhlIGFuc3dlciB0byB0aGUKK3F1ZXN0aW9uIGNsZWFybHkg aXMKKworICAgIG5kaXN0aW5jdChhLGIpIC8gbmRpc3RpbmN0KGEpCisKK2Fu ZCBieSB1c2luZyAncScgd2UgbWF5IHJld3JpdGUgdGhpcyBhcworCisgICAg bmRpc3RpbmN0KGIpIC8gcQorCitzbyAncScgbWF5IGJlIGNvbnNpZGVyZWQg YXMgYSBjb3JyZWN0aW9uIGZhY3RvciBvZiB0aGUgbmRpc3RpbmN0IGVzdGlt YXRlIGdpdmVuCithIGNvbmRpdGlvbiBvbiBvbmUgb2YgdGhlIGNvbHVtbnMu CisKK1RoaXMgbWF5IGJlIGdlbmVyYWxpemVkIHRvIGEgY29tYmluYXRpb24g b2YgJ24nIGNvbHVtbnMKKworICAgIFtuZGlzdGluY3QoYzEpICogLi4uICog bmRpc3RpbmN0KGNuKV0gLyBuZGlzdGluY3QoYzEsIC4uLiwgY24pCisKK2Fu ZCB0aGUgbWVhbmluZyBpcyB2ZXJ5IHNpbWlsYXIsIGV4Y2VwdCB0aGF0IHdl IG5lZWQgdG8gdXNlIGNvbmRpdGlvbnMgb24gKG4tMSkKK29mIHRoZSBjb2x1 bW5zLgorCisKK1NlbGVjdGl2aXR5IGVzdGltYXRpb24KKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworQXMgZXhwbGFpbmVkIGluIHRoZSBwcmV2aW91cyBw YXJhZ3JhcGgsIG5kaXN0aW5jdCBjb2VmZmljaWVudHMgbWF5IGJlIHVzZWQg dG8KK2VzdGltYXRlIGNhcmRpbmFsaXR5IG9mIGEgY29sdW1uLCBnaXZlbiBz b21lIGFwcmlvcmkga25vd2xlZGdlLiBMZXQncyBhc3N1bWUKK3dlIG5lZWQg dG8gZXN0aW1hdGUgc2VsZWN0aXZpdHkgb2YgYSBjb25kaXRpb24KKworICAg IChhPTEpIEFORCAoYj0yKQorCit3aGljaCB3ZSBjYW4gZXhwYW5kIGxpa2Ug dGhpcworCisgICAgUChhPTEgJiBiPTIpID0gUChhPTEpICogUChiPTIgfCBh PTEpCisKK0xldCdzIGFsc28gYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGlv biBvZiAnYicgaXMgdW5pZm9ybSwgaS5lLiB0aGF0CisKKyAgICBQKGE9MSkg PSAxL25kaXN0aW5jdChhKQorICAgIFAoYj0yKSA9IDEvbmRpc3RpbmN0KGIp CisgICAgUChhPTEgJiBiPTIpID0gMS9uZGlzdGluY3QoYSxiKQorCisgICAg UChiPTIgfCBhPTEpID0gbmRpc3RpbmN0KGEpIC8gbmRpc3RpbmN0KGEsYikK Kword2hpY2ggbWF5IGJlIHJld3JpdHRlbiBsaWtlCisKKyAgICBQKGI9MiB8 IGE9MSkKKyAgICAgICAgPSBuZGlzdGluY3QoYSxiKSAvIG5kaXN0aW5jdChh KQorICAgICAgICA9ICgxL25kaXN0aW5jdChiKSkgKiBbKG5kaXN0aW5jdChh KSAqIG5kaXN0aW5jdChiKSkgLyBuZGlzdGluY3QoYSxiKV0KKyAgICAgICAg PSAoMS9uZGlzdGluY3QoYikpICogcQorCithbmQgdGhlcmVmb3JlCisKKyAg ICBQKGE9MSAmIGI9MikgPSAoMS9uZGlzdGluY3QoYSkpICogKDEvbmRpc3Rp bmN0KGIpKSAqIHEKKworVGhpcyBhbHNvIGlsbHVzdHJhdGVzICdxJyBhcyBh IGNvcnJlY3Rpb24gY29lZmZpY2llbnQuCisKK0l0IGFsc28gZXhwbGFpbnMg d2h5IHdlIHN0b3JlIHRoZSBjb2VmZmljaWVudCBhbmQgbm90IHNpbXBseSBu ZGlzdGluY3QoYSxiKS4KK1RoaXMgd2F5IHdlIGNhbiBzaW1wbHkgZXN0aW1h dGUgaW5kaXZpZHVhbCBjbGF1c2VzIGFuZCB0aGVuIHNpbXBseSBjb3JyZWN0 Cit0aGUgZXN0aW1hdGUgYnkgbXVsdGlwbHlpbmcgdGhlIHJlc3VsdCB3aXRo ICdxJyAtIHdlIGRvbid0IGhhdmUgdG8gbWVzcyB3aXRoCituZGlzdGluY3Qg ZXN0aW1hdGVzIGF0IGFsbC4KKworTmF0dXJhbGx5LCBhcyB0aGUgY29lZmZp Y2llbnQgaXMgZGVyaXZlcyBmcm9tIG5kaXN0aW5jdChhLGIpLCBpdCBtYXkg YmUgYWxzbwordXNlZCB0byBlc3RpbWF0ZSBHUk9VUCBCWSBjbGF1c2VzIG9u IHRoZSBjb21iaW5hdGlvbiBvZiBjb2x1bW5zLCByZXBsYWNpbmcgdGhlCitl eGlzdGluZyBoZXVyaXN0aWNzIGluIGVzdGltYXRlX251bV9ncm91cHMoKS4K KworTm90ZTogQ3VycmVudGx5IG9ubHkgdGhlIEdST1VQIEJZIGVzdGltYXRp b24gaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBiaXQgdW5jbGVhcgoraG93IHRv IGltcGxlbWVudCB0aGUgY2xhdXNlIGVzdGltYXRpb24gd2hlbiB0aGVyZSBh cmUgb3RoZXIgc3RhdGlzdGljcyAoZXNwLgorTUNWIGxpc3RzIGFuZC9vciBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcykgYXZhaWxhYmxlLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgYi9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cwppbmRleCBk NDA0OTE0Li42ZDRiMDliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cworKysgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cwpAQCAtMjAsNiArMjAsOCBAQCBDdXJy ZW50bHkgd2Ugb25seSBoYXZlIHR3byBraW5kcyBvZiBtdWx0aXZhcmlhdGUg c3RhdGlzdGljcwogCiAgICAgKGMpIG11bHRpdmFyaWF0ZSBoaXN0b2dyYW1z IChSRUFETUUuaGlzdG9ncmFtKQogCisgICAgKGQpIG5kaXN0aW5jdCBjb2Vm ZmljaWVudHMKKwogCiBDb21wYXRpYmxlIGNsYXVzZSB0eXBlcwogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2NvbW1vbi5jCmluZGV4IGZmYjc2ZjQuLjJiZTk4MGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwpAQCAtMzIsNyAr MzIsOCBAQCBzdGF0aWMgTGlzdCogbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQp OwogICogYW5kIHNlcmlhbGl6ZXMgdGhlbSBiYWNrIGludG8gdGhlIGNhdGFs b2cgKGFzIGJ5dGVhIHZhbHVlcykuCiAgKi8KIHZvaWQKLWJ1aWxkX212X3N0 YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKK2J1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgZG91Ymxl IHRvdGFscm93cywKKwkJCSAgIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJv d3MsCiAJCQkgICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJz dGF0cykKIHsKIAlMaXN0Q2VsbCAqbGM7CkBAIC01Myw2ICs1NCw3IEBAIGJ1 aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhl YXBUdXBsZSAqcm93cywKIAkJTVZEZXBlbmRlbmNpZXMJZGVwcyAgPSBOVUxM OwogCQlNQ1ZMaXN0CQltY3ZsaXN0ICAgPSBOVUxMOwogCQlNVkhpc3RvZ3Jh bQloaXN0b2dyYW0gPSBOVUxMOworCQlkb3VibGUJCW5kaXN0CSAgPSAtMTsK IAkJaW50IG51bXJvd3NfZmlsdGVyZWQgID0gbnVtcm93czsKIAogCQlWYWNB dHRyU3RhdHMgICoqc3RhdHMgID0gTlVMTDsKQEAgLTkyLDYgKzk0LDkgQEAg YnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLAogCQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQog CQkJZGVwcyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dz LCBhdHRycywgc3RhdHMpOwogCisJCWlmIChzdGF0LT5uZGlzdF9lbmFibGVk KQorCQkJbmRpc3QgPSBidWlsZF9tdl9uZGlzdGluY3QodG90YWxyb3dzLCBu dW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOworCiAJCS8qIGJ1aWxkIHRo ZSBNQ1YgbGlzdCAqLwogCQlpZiAoc3RhdC0+bWN2X2VuYWJsZWQpCiAJCQlt Y3ZsaXN0ID0gYnVpbGRfbXZfbWN2bGlzdChudW1yb3dzLCByb3dzLCBhdHRy cywgc3RhdHMsICZudW1yb3dzX2ZpbHRlcmVkKTsKQEAgLTEwMSw3ICsxMDYs NyBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1y b3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCQloaXN0b2dyYW0gPSBidWlsZF9t dl9oaXN0b2dyYW0obnVtcm93c19maWx0ZXJlZCwgcm93cywgYXR0cnMsIHN0 YXRzLCBudW1yb3dzKTsKIAogCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFtIC8g TUNWIGxpc3QgaW4gdGhlIGNhdGFsb2cgKi8KLQkJdXBkYXRlX212X3N0YXRz KHN0YXQtPm12b2lkLCBkZXBzLCBtY3ZsaXN0LCBoaXN0b2dyYW0sIGF0dHJz LCBzdGF0cyk7CisJCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5tdm9pZCwgZGVw cywgbWN2bGlzdCwgaGlzdG9ncmFtLCBuZGlzdCwgYXR0cnMsIHN0YXRzKTsK IAl9CiB9CiAKQEAgLTE4Myw2ICsxODgsOCBAQCBsaXN0X212X3N0YXRzKE9p ZCByZWxpZCkKIAkJaW5mby0+bWN2X2J1aWx0ID0gc3RhdHMtPm1jdl9idWls dDsKIAkJaW5mby0+aGlzdF9lbmFibGVkID0gc3RhdHMtPmhpc3RfZW5hYmxl ZDsKIAkJaW5mby0+aGlzdF9idWlsdCA9IHN0YXRzLT5oaXN0X2J1aWx0Owor CQlpbmZvLT5uZGlzdF9lbmFibGVkID0gc3RhdHMtPm5kaXN0X2VuYWJsZWQ7 CisJCWluZm8tPm5kaXN0X2J1aWx0ID0gc3RhdHMtPm5kaXN0X2J1aWx0Owog CiAJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKIAl9CkBAIC0y NTIsNyArMjU5LDcgQEAgZmluZF9tdl9hdHRudW1zKE9pZCBtdm9pZCwgT2lk ICpyZWxpZCkKIHZvaWQKIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsCiAJ CQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxp c3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwKLQkJCQlpbnQydmVjdG9yICph dHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpCisJCQkJZG91YmxlIG5kaXN0 Y29lZmYsIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0 cykKIHsKIAlIZWFwVHVwbGUJc3R1cCwKIAkJCQlvbGR0dXA7CkBAIC0yOTIs MjYgKzI5OSwzNiBAQCB1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLAogCQkJ PSBQb2ludGVyR2V0RGF0dW0oZGF0YSk7CiAJfQogCisJaWYgKG5kaXN0Y29l ZmYgPiAxLjApCisJeworCQludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFuZGlzdCAtMV0gPSBmYWxzZTsKKwkJdmFsdWVzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW5kaXN0LTFdID0gRmxvYXQ4R2V0RGF0dW0obmRpc3Rjb2Vm Zik7CisJfQorCiAJLyogYWx3YXlzIHJlcGxhY2UgdGhlIHZhbHVlIChlaXRo ZXIgYnkgYnl0ZWEgb3IgTlVMTCkgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFkZXBzIC0xXSA9IHRydWU7CiAJcmVwbGFjZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2IC0xXSA9IHRydWU7CiAJcmVwbGFj ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdC0xXSA9IHRydWU7CisJ cmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmRpc3QtMV0gPSB0 cnVlOwogCiAJLyogYWx3YXlzIGNoYW5nZSB0aGUgYXZhaWxhYmlsaXR5IGZs YWdzICovCiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWls dCAtMV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19t Y3ZfYnVpbHQgLTFdID0gZmFsc2U7CiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfaGlzdF9idWlsdC0xXSA9IGZhbHNlOworCW51bGxzW0FudW1fcGdf bXZfc3RhdGlzdGljX25kaXN0X2J1aWx0LTFdID0gZmFsc2U7CiAJbnVsbHNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cy0xXSAgICAgPSBmYWxzZTsK IAogCS8qIHVzZSB0aGUgbmV3IGF0dG51bXMsIGluIGNhc2Ugd2UgcmVtb3Zl ZCBzb21lIGRyb3BwZWQgb25lcyAqLwogCXJlcGxhY2VzW0FudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0Fu dW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAgLTFdID0gdHJ1ZTsKKwly ZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9idWlsdC0xXSA9 IHRydWU7CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9i dWlsdCAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlz dGljX3N0YWtleXMgLTFdICAgID0gdHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRl cGVuZGVuY2llcyAhPSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSBCb29sR2V0RGF0dW0obWN2bGlzdCAh PSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9i dWlsdCAtMV0gPSBCb29sR2V0RGF0dW0oaGlzdG9ncmFtICE9IE5VTEwpOwor CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9idWlsdC0xXSA9 IEJvb2xHZXREYXR1bShuZGlzdGNvZWZmID4gMS4wKTsKIAl2YWx1ZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0gICAgPSBQb2ludGVyR2V0 RGF0dW0oYXR0cnMpOwogCiAJLyogSXMgdGhlcmUgYWxyZWFkeSBhIHBnX212 X3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI4MzU4Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwpA QCAtMCwwICsxLDE3MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogbXZkaXN0LmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2YXJp YXRlIGRpc3RpbmN0IGNvZWZmaWNpZW50cworICoKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvbXZkaXN0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisj aW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisKK3N0YXRpYyBkb3VibGUgZXN0aW1hdGVfbmRpc3RpbmN0KGRvdWJs ZSB0b3RhbHJvd3MsIGludCBudW1yb3dzLCBpbnQgZCwgaW50IGYxKTsKKwor LyoKKyAqIENvbXB1dGUgbmRpc3RpbmN0IGNvZWZmaWNpZW50IGZvciB0aGUg Y29tYmluYXRpb24gb2YgYXR0cmlidXRlcy4gVGhpcworICogY29tcHV0ZXMg dGhlIG5kaXN0aW5jdCBlc3RpbWF0ZSB1c2luZyB0aGUgc2FtZSBlc3RpbWF0 b3IgdXNlZCBpbiBhbmFseXplLmMKKyAqIGFuZCB0aGVuIGNvbXB1dGVzIHRo ZSBjb2VmZmljaWVudC4KKyAqLworZG91YmxlCitidWlsZF9tdl9uZGlzdGlu Y3QoZG91YmxlIHRvdGFscm93cywgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKKwkJCQkgICBpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRz ICoqc3RhdHMpCit7CisJaW50IGksIGo7CisJaW50IGYxLCBjbnQsIGQ7CisJ aW50IG5tdWx0aXBsZSwgc3VtbXVsdGlwbGU7CisJaW50IG51bWF0dHJzID0g YXR0cnMtPmRpbTE7CisJTXVsdGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0aV9z b3J0X2luaXQobnVtYXR0cnMpOworCWRvdWJsZSBuZGlzdGNvZWZmOworCisJ LyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRvIHNvcnQgdGhlIHNhbXBsZSByb3dz IGRpcmVjdGx5LCBidXQgdGhpcyBzZWVtZWQKKwkgKiBzb21laG93IHNpbXBs ZXIgLyBsZXNzIGVycm9yIHByb25lLiBBbm90aGVyIG9wdGlvbiB3b3VsZCBi ZSB0bworCSAqIGFsbG9jYXRlIHRoZSBhcnJheXMgZm9yIGVhY2ggU29ydEl0 ZW0gc2VwYXJhdGVseSwgYnV0IHRoYXQnZCBiZQorCSAqIHNpZ25pZmljYW50 IG92ZXJoZWFkIChub3QganVzdCBDUFUsIGJ1dCBlc3BlY2lhbGx5IG1lbW9y eSBibG9hdCkuCisJICovCisJU29ydEl0ZW0gKiBpdGVtcyA9IChTb3J0SXRl bSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisKKwlE YXR1bSAqdmFsdWVzID0gKERhdHVtKilwYWxsb2MwKHNpemVvZihEYXR1bSkg KiBudW1yb3dzICogbnVtYXR0cnMpOworCWJvb2wgICppc251bGwgPSAoYm9v bCopcGFsbG9jMChzaXplb2YoYm9vbCkgKiBudW1yb3dzICogbnVtYXR0cnMp OworCisJZm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWl0 ZW1zW2ldLnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIG51bWF0dHJzXTsKKwkJaXRl bXNbaV0uaXNudWxsID0gJmlzbnVsbFtpICogbnVtYXR0cnNdOworCX0KKwor CUFzc2VydChudW1hdHRycyA+PSAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBu dW1hdHRyczsgaSsrKQorCXsKKwkJLyogcHJlcGFyZSB0aGUgc29ydCBmdW5j dGlvbiBmb3IgdGhlIGZpcnN0IGRpbWVuc2lvbiAqLworCQltdWx0aV9zb3J0 X2FkZF9kaW1lbnNpb24obXNzLCBpLCBpLCBzdGF0cyk7CisKKwkJLyogYWNj dW11bGF0ZSBhbGwgdGhlIGRhdGEgaW50byB0aGUgYXJyYXkgYW5kIHNvcnQg aXQgKi8KKwkJZm9yIChqID0gMDsgaiA8IG51bXJvd3M7IGorKykKKwkJewor CQkJaXRlbXNbal0udmFsdWVzW2ldCisJCQkJPSBoZWFwX2dldGF0dHIocm93 c1tqXSwgYXR0cnMtPnZhbHVlc1tpXSwKKwkJCQkJCQkgICBzdGF0c1tpXS0+ dHVwRGVzYywgJml0ZW1zW2pdLmlzbnVsbFtpXSk7CisJCX0KKwl9CisKKwlx c29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihTb3J0 SXRlbSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsKKworCS8q IGNvdW50IG51bWJlciBvZiBkaXN0aW5jdCBjb21iaW5hdGlvbnMgKi8KKwor CWYxID0gMDsKKwljbnQgPSAxOworCWQgPSAxOworCWZvciAoaSA9IDE7IGkg PCBudW1yb3dzOyBpKyspCisJeworCQlpZiAobXVsdGlfc29ydF9jb21wYXJl KCZpdGVtc1tpXSwgJml0ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJeworCQkJ aWYgKGNudCA9PSAxKQorCQkJCWYxICs9IDE7CisJCQllbHNlCisJCQl7CisJ CQkJbm11bHRpcGxlICs9IDE7CisJCQkJc3VtbXVsdGlwbGUgKz0gY250Owor CQkJfQorCisJCQlkKys7CisJCQljbnQgPSAwOworCQl9CisKKwkJY250ICs9 IDE7CisJfQorCisJaWYgKGNudCA9PSAxKQorCQlmMSArPSAxOworCWVsc2UK Kwl7CisJCW5tdWx0aXBsZSArPSAxOworCQlzdW1tdWx0aXBsZSArPSBjbnQ7 CisJfQorCisJbmRpc3Rjb2VmZiA9IDEgLyBlc3RpbWF0ZV9uZGlzdGluY3Qo dG90YWxyb3dzLCBudW1yb3dzLCBkLCBmMSk7CisKKwkvKgorCSAqIG5vdyBj b3VudCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIGFuZCBp bmNyZW1lbnRhbGx5CisJICogY29tcHV0ZSBuZGlzdGluY3QoYSxiKSAvIChu ZGlzdGluY3QoYSkgKiBuZGlzdGluY3QoYikpCisJICoKKwkgKiBGSVhNRSBQ cm9iYWJseSBuZWVkIHRvIGhhbmRsZSBjYXNlcyB3aGVuIG9uZSBvZiB0aGUg bmRpc3RpbmN0CisJICogICAgICAgZXN0aW1hdGVzIGlzIG5lZ2F0aXZlLCBh bmQgYWxzbyBjaGVjayB0aGF0IHRoZSBjb21iaW5lZAorCSAqICAgICAgIG5k aXN0aW5jdCBpcyBncmVhdGVyIHRoYW4gYW55IG9mIHRob3NlIHBhcnRpYWwg dmFsdWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsr KQorCQluZGlzdGNvZWZmICo9IHN0YXRzW2ldLT5zdGFkaXN0aW5jdDsKKwor CXJldHVybiBuZGlzdGNvZWZmOworfQorCitkb3VibGUKK2xvYWRfbXZfbmRp c3RpbmN0KE9pZCBtdm9pZCkKK3sKKwlib29sCQlpc251bGwgPSBmYWxzZTsK KwlEYXR1bQkJZGVwczsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19tdl9z dGF0aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5nIGluZHJlbGlkID0gdGhpcyBy ZWwuICovCisJSGVhcFR1cGxlCWh0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZT VEFUT0lELCBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7CisKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJRm9ybV9wZ19tdl9zdGF0aXN0aWMJbXZz dGF0ID0gKEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7 CisJQXNzZXJ0KG12c3RhdC0+bmRpc3RfZW5hYmxlZCAmJiBtdnN0YXQtPm5k aXN0X2J1aWx0KTsKKyNlbmRpZgorCisJZGVwcyA9IFN5c0NhY2hlR2V0QXR0 cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFuZGlzdCwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoaHR1cCk7CisKKwlyZXR1cm4gRGF0dW1H ZXRGbG9hdDgoZGVwcyk7Cit9CisKKy8qIFRoZSBEdWoxIGVzdGltYXRvciAo YWxyZWFkeSB1c2VkIGluIGFuYWx5emUuYykuICovCitzdGF0aWMgZG91Ymxl Citlc3RpbWF0ZV9uZGlzdGluY3QoZG91YmxlIHRvdGFscm93cywgaW50IG51 bXJvd3MsIGludCBkLCBpbnQgZjEpCit7CisJZG91YmxlCW51bWVyLAorCQkJ ZGVub20sCisJCQluZGlzdGluY3Q7CisKKwludW1lciA9IChkb3VibGUpIG51 bXJvd3MgKihkb3VibGUpIGQ7CisKKwlkZW5vbSA9IChkb3VibGUpIChudW1y b3dzIC0gZjEpICsKKwkJCShkb3VibGUpIGYxICogKGRvdWJsZSkgbnVtcm93 cyAvIHRvdGFscm93czsKKworCW5kaXN0aW5jdCA9IG51bWVyIC8gZGVub207 CisKKwkvKiBDbGFtcCB0byBzYW5lIHJhbmdlIGluIGNhc2Ugb2Ygcm91bmRv ZmYgZXJyb3IgKi8KKwlpZiAobmRpc3RpbmN0IDwgKGRvdWJsZSkgZCkKKwkJ bmRpc3RpbmN0ID0gKGRvdWJsZSkgZDsKKworCWlmIChuZGlzdGluY3QgPiB0 b3RhbHJvd3MpCisJCW5kaXN0aW5jdCA9IHRvdGFscm93czsKKworCXJldHVy biBmbG9vcihuZGlzdGluY3QgKyAwLjUpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggMzdmNDczZi4u ZTQ2Y2M2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19t dl9zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212 X3N0YXRpc3RpYy5oCkBAIC00MCw2ICs0MCw3IEBAIENBVEFMT0cocGdfbXZf c3RhdGlzdGljLDMzODEpCiAJYm9vbAkJZGVwc19lbmFibGVkOwkJLyogYW5h bHl6ZSBkZXBlbmRlbmNpZXM/ICovCiAJYm9vbAkJbWN2X2VuYWJsZWQ7CQkv KiBidWlsZCBNQ1YgbGlzdD8gKi8KIAlib29sCQloaXN0X2VuYWJsZWQ7CQkv KiBidWlsZCBoaXN0b2dyYW0/ICovCisJYm9vbAkJbmRpc3RfZW5hYmxlZDsJ CS8qIGJ1aWxkIG5kaXN0IGNvZWZmaWNpZW50PyAqLwogCiAJLyogaGlzdG9n cmFtIC8gTUNWIHNpemUgKi8KIAlpbnQzMgkJbWN2X21heF9pdGVtczsJCS8q IG1heCBNQ1YgaXRlbXMgKi8KQEAgLTQ5LDYgKzUwLDcgQEAgQ0FUQUxPRyhw Z19tdl9zdGF0aXN0aWMsMzM4MSkKIAlib29sCQlkZXBzX2J1aWx0OwkJCS8q IGRlcGVuZGVuY2llcyB3ZXJlIGJ1aWx0ICovCiAJYm9vbAkJbWN2X2J1aWx0 OwkJCS8qIE1DViBsaXN0IHdhcyBidWlsdCAqLwogCWJvb2wJCWhpc3RfYnVp bHQ7CQkJLyogaGlzdG9ncmFtIHdhcyBidWlsdCAqLworCWJvb2wJCW5kaXN0 X2J1aWx0OwkJLyogbmRpc3RpbmN0IGNvZWZmIGJ1aWx0ICovCiAKIAkvKiB2 YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxv dyBkaXJlY3QgYWNjZXNzIHRvIHN0YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0 YWtleXM7CQkJLyogYXJyYXkgb2YgY29sdW1uIGtleXMgKi8KQEAgLTU3LDYg KzU5LDcgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKIAlieXRl YQkJc3RhZGVwczsJCQkvKiBkZXBlbmRlbmNpZXMgKHNlcmlhbGl6ZWQpICov CiAJYnl0ZWEJCXN0YW1jdjsJCQkJLyogTUNWIGxpc3QgKHNlcmlhbGl6ZWQp ICovCiAJYnl0ZWEJCXN0YWhpc3Q7CQkJLyogTVYgaGlzdG9ncmFtIChzZXJp YWxpemVkKSAqLworCWZsb2F0OAkJc3RhbmRjb2VmZjsJCQkvKiBuZGlzdGlu Y3QgY29lZmYgKHNlcmlhbGl6ZWQpICovCiAjZW5kaWYKIAogfSBGb3JtRGF0 YV9wZ19tdl9zdGF0aXN0aWM7CkBAIC03Miw3ICs3NSw3IEBAIHR5cGVkZWYg Rm9ybURhdGFfcGdfbXZfc3RhdGlzdGljICpGb3JtX3BnX212X3N0YXRpc3Rp YzsKICAqCQljb21waWxlciBjb25zdGFudHMgZm9yIHBnX212X3N0YXRpc3Rp YwogICogLS0tLS0tLS0tLS0tLS0tLQogICovCi0jZGVmaW5lIE5hdHRzX3Bn X212X3N0YXRpc3RpYwkJCQkJMTUKKyNkZWZpbmUgTmF0dHNfcGdfbXZfc3Rh dGlzdGljCQkJCQkxOQogI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19z dGFyZWxpZAkJCTEKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh bmFtZQkJCTIKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFt ZXNwYWNlCQkzCkBAIC04MCwxNCArODMsMTcgQEAgdHlwZWRlZiBGb3JtRGF0 YV9wZ19tdl9zdGF0aXN0aWMgKkZvcm1fcGdfbXZfc3RhdGlzdGljOwogI2Rl ZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQJCTUKICNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQJCTYKICNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9lbmFibGVkCQk3Ci0j ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMJCTgK LSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9tYXhfYnVja2V0 cwk5Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJ CQkxMAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQJ CQkxMQotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1aWx0 CQkJMTIKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJ CTEzCi0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQkx NAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YJCQkJMTUK LSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdAkJCTE2Cisj ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2VuYWJsZWQJCTgK KyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcwkJ OQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X21heF9idWNr ZXRzCTE5CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVp bHQJCQkxMQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVp bHQJCQkxMgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1 aWx0CQkJMTMKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbmRpc3Rf YnVpbHQJCTE0CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtl eXMJCQkxNQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBz CQkJMTYKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2CQkJ CTE3CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QJCQkx OAorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuZGlzdAkJCTE5 CiAKICNlbmRpZiAgIC8qIFBHX01WX1NUQVRJU1RJQ19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaAppbmRleCA4YzUwYmZiLi4xOTIzZjJiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKQEAgLTY1NSwxMSArNjU1 LDEzIEBAIHR5cGVkZWYgc3RydWN0IE1WU3RhdGlzdGljSW5mbwogCWJvb2wJ CWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgZW5h YmxlZCAqLwogCWJvb2wJCW1jdl9lbmFibGVkOwkvKiBNQ1YgbGlzdCBlbmFi bGVkICovCiAJYm9vbAkJaGlzdF9lbmFibGVkOwkvKiBoaXN0b2dyYW0gZW5h YmxlZCAqLworCWJvb2wJCW5kaXN0X2VuYWJsZWQ7CS8qIG5kaXN0aW5jdCBj b2VmZmljaWVudCBlbmFibGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFibGUg c3RhdGlzdGljcyAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcyBidWlsdCAqLwogCWJvb2wJCW1jdl9idWlsdDsJ CS8qIE1DViBsaXN0IGJ1aWx0ICovCiAJYm9vbAkJaGlzdF9idWlsdDsJCS8q IGhpc3RvZ3JhbSBidWlsdCAqLworCWJvb2wJCW5kaXN0X2J1aWx0OwkvKiBu ZGlzdGluY3QgY29lZmZpY2llbnQgYnVpbHQgKi8KIAogCS8qIGNvbHVtbnMg aW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMpICovCiAJaW50MnZlY3RvciAq c3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJlZCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCmluZGV4IDM1YjJmOGUuLmZi MmM1ZDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKQEAgLTIyNSw2 ICsyMjUsNyBAQCB0eXBlZGVmIE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEg Kk1WU2VyaWFsaXplZEhpc3RvZ3JhbTsKIE1WRGVwZW5kZW5jaWVzIGxvYWRf bXZfZGVwZW5kZW5jaWVzKE9pZCBtdm9pZCk7CiBNQ1ZMaXN0ICAgICAgICBs b2FkX212X21jdmxpc3QoT2lkIG12b2lkKTsKIE1WU2VyaWFsaXplZEhpc3Rv Z3JhbSAgICBsb2FkX212X2hpc3RvZ3JhbShPaWQgbXZvaWQpOworZG91Ymxl CQkgICBsb2FkX212X25kaXN0aW5jdChPaWQgbXZvaWQpOwogCiBieXRlYSAq IHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVw ZW5kZW5jaWVzKTsKIGJ5dGVhICogc2VyaWFsaXplX212X21jdmxpc3QoTUNW TGlzdCBtY3ZsaXN0LCBpbnQydmVjdG9yICphdHRycywKQEAgLTI2NiwxMSAr MjY3LDE3IEBAIE1WSGlzdG9ncmFtCiBidWlsZF9tdl9oaXN0b2dyYW0oaW50 IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMs CiAJCQkJICAgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCBudW1yb3dzX3Rv dGFsKTsKIAotdm9pZCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWws IGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCitkb3VibGUKK2J1aWxk X212X25kaXN0aW5jdChkb3VibGUgdG90YWxyb3dzLCBpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLAorCQkJCSAgIGludDJ2ZWN0b3IgKmF0dHJzLCBW YWNBdHRyU3RhdHMgKipzdGF0cyk7CisKK3ZvaWQgYnVpbGRfbXZfc3RhdHMo UmVsYXRpb24gb25lcmVsLCBkb3VibGUgdG90YWxyb3dzLAorCQkJCQlpbnQg bnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQkJCQlpbnQgbmF0dHMsIFZh Y0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CiAKIHZvaWQgdXBkYXRlX212 X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVz LAogCQkJCQkgTUNWTGlzdCBtY3ZsaXN0LCBNVkhpc3RvZ3JhbSBoaXN0b2dy YW0sCisJCQkJCSBkb3VibGUgbmRpc3Rjb2VmZiwKIAkJCQkJIGludDJ2ZWN0 b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAKICNpZmRlZiBE RUJVR19NVkhJU1QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKaW5kZXggMWExYTRjYS4uMGFkOTM1ZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNzcsNyAr MTM3Nyw4IEBAIHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5uc3BuYW1lIEFTIHNj aGVtYW5hbWUsCiAgICAgbGVuZ3RoKHMuc3RhbWN2KSBBUyBtY3ZieXRlcywK ICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFTIG1j dmluZm8sCiAgICAgbGVuZ3RoKHMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVzLAot ICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKHMuc3RhaGlzdCkgQVMg aGlzdGluZm8KKyAgICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhzLnN0 YWhpc3QpIEFTIGhpc3RpbmZvLAorICAgIHMuc3RhbmRjb2VmZiBBUyBuZGNv ZWZmCiAgICBGUk9NICgocGdfbXZfc3RhdGlzdGljIHMKICAgICAgSk9JTiBw Z19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCiAgICAgIExF RlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1l c3BhY2UpKSk7Ci0tIAoyLjEuMAoK --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename*0=0008-change-how-we-apply-selectivity-to-number-of-groups-.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0008-change-how-we-apply-selectivity-to-number-of-groups-.patch"; charset="UTF-8" RnJvbSAzZTYyMzhiMTY1MWIzN2MwZmMzZjFkYmFkNmJlM2M1YmRiYWU1YmU4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyNiBKYW4gMjAxNiAx ODoxNDozMyArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOC85XSBjaGFuZ2UgaG93 IHdlIGFwcGx5IHNlbGVjdGl2aXR5IHRvIG51bWJlciBvZiBncm91cHMKIGVz dGltYXRlCgpJbnN0ZWFkIG9mIHNpbXBseSBtdWx0aXBseWluZyB0aGUgbmRp c3RpbmN0IGVzdGltYXRlIHdpdGggc2VsZWN0aWNpdHksCndlIGluc3RlYWQg dXNlIHRoZSBmb3JtdWxhIGZvciB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGRp c3RpbmN0IHZhbHVlcwpvYnNlcnZlZCBpbiAnaycgcm93cyB3aGVuIHRoZXJl IGFyZSAnZCcgZGlzdGluY3QgdmFsdWVzIGluIHRoZSBiaW4KCiAgICBkICog KDEgLSAoKGQgLSAxKSAvIGQpXmspCgpUaGlzIGlzICd3aXRoIHJlcGxhY2Vt ZW50cycgd2hpY2ggc2VlbXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB1c2UsIGFu ZCBpdAptb3N0bHkgYXNzdW1lcyB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgZGlzdGluY3QgdmFsdWVzLiBTbyBpZiB0aGUKZGlzdHJpYnV0aW9uIGlz IG5vdCB1bmlmb3JtIChlLmcuIHRoZXJlIGFyZSB2ZXJ5IGZyZXF1ZW50IGdy b3VwcykgdGhpcwptYXkgYmUgbGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBjdXJy ZW50IGFsZ29yaXRobSBpbiBzb21lIGNhc2VzLCBnaXZpbmcKb3Zlci1lc3Rp bWF0ZXMuIEJ1dCB0aGF0J3MgcHJvYmFibHkgYmV0dGVyIHRoYW4gT09NLgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIHwgMiArLQog MSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBh ODRkZDJiLi5jZTNhZDE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMzQ2NSw3ICszNDY1LDcgQEAgZXN0aW1hdGVfbnVt X2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywg ZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkvKgogCQkJICogTXVsdGlwbHkgYnkg cmVzdHJpY3Rpb24gc2VsZWN0aXZpdHkuCiAJCQkgKi8KLQkJCXJlbGRpc3Rp bmN0ICo9IHJlbC0+cm93cyAvIHJlbC0+dHVwbGVzOworCQkJcmVsZGlzdGlu Y3QgPSByZWxkaXN0aW5jdCAqICgxIC0gcG93bCgocmVsZGlzdGluY3QgLSAx KSAvIHJlbGRpc3RpbmN0LHJlbC0+cm93cykpOwogCiAJCQkvKgogCQkJICog VXBkYXRlIGVzdGltYXRlIG9mIHRvdGFsIGRpc3RpbmN0IGdyb3Vwcy4KLS0g CjIuMS4wCgo= --=-6mteQXAxP083m83xNU1s Content-Disposition: attachment; filename*0=0009-fixup-of-regression-tests-plans-changes-by-group-by-.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0009-fixup-of-regression-tests-plans-changes-by-group-by-.patch"; charset="UTF-8" RnJvbSA4MjUxMGVlYzlhOThlMjRiYzg2ZGViMzEzZjNjMDMxZDU0NDIwOTk2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogU3VuLCAyOCBGZWIgMjAxNiAy MToxNjo0MCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOS85XSBmaXh1cCBvZiBy ZWdyZXNzaW9uIHRlc3RzIChwbGFucyBjaGFuZ2VzIGJ5IGdyb3VwIGJ5CiBl c3RpbWF0aW9uKQoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0ICAgICAgfCAxOCArKysrKysrKysrLS0tLS0tLS0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCB8IDI1ICsrKysrKysr KysrLS0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dW5pb24ub3V0ICAgICB8IDE2ICsrKysrKysrLS0tLS0tLS0KIDMgZmlsZXMg Y2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXgg Y2FmYmM1ZS4uMTUxNDAyZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pvaW4ub3V0CkBAIC0zOTY1LDE4ICszOTY1LDIwIEBAIHNlbGVj dCBkLiogZnJvbSBkIGxlZnQgam9pbiAoc2VsZWN0ICogZnJvbSBiIGdyb3Vw IGJ5IGIuaWQsIGIuY19pZCkgcwogZXhwbGFpbiAoY29zdHMgb2ZmKQogc2Vs ZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxlY3QgZGlzdGluY3QgKiBm cm9tIGIpIHMKICAgb24gZC5hID0gcy5pZDsKLSAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICBNZXJnZSBSaWdodCBKb2luCi0gICBN ZXJnZSBDb25kOiAoYi5pZCA9IGQuYSkKLSAgIC0+ICBVbmlxdWUKLSAgICAg ICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogYi5pZCwg Yi5jX2lkCi0gICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAg TWVyZ2UgQ29uZDogKHMuaWQgPSBkLmEpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IHMuaWQKKyAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2Fu IG9uIHMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuaWQsIGIuY19pZAorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIKICAgIC0+ICBT b3J0CiAgICAgICAgICBTb3J0IEtleTogZC5hCiAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZAotKDkgcm93cykKKygxMSByb3dzKQogCiAtLSBjaGVjayBq b2luIHJlbW92YWwgd29ya3Mgd2hlbiB1bmlxdWVuZXNzIG9mIHRoZSBqb2lu IGNvbmRpdGlvbiBpcyBlbmZvcmNlZAogLS0gYnkgYSBVTklPTgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0Cmlu ZGV4IGRlNjRjYTcuLjBmYzkzZDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTgwNywyNyArODA3 LDI0IEBAIHNlbGVjdCAqIGZyb20gaW50NF90Ymwgd2hlcmUKIGV4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gaW50NF90Ymwg byB3aGVyZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0ZV9z ZXJpZXMoMSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5IGYx KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFNlbWkgSm9pbgogICAgT3V0 cHV0OiBvLmYxCiAgICBIYXNoIENvbmQ6IChvLmYxID0gIkFOWV9zdWJxdWVy eSIuZjEpCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmludDRfdGJsIG8K ICAgICAgICAgIE91dHB1dDogby5mMQogICAgLT4gIEhhc2gKICAgICAgICAg IE91dHB1dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcK LSAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiAiQU5ZX3N1YnF1ZXJ5IgogICAgICAgICAgICAgICAg T3V0cHV0OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwgIkFOWV9zdWJxdWVyeSIuZwot ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwg IkFOWV9zdWJxdWVyeSIuZwotICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gIkFOWV9zdWJxdWVyeSIKLSAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcK LSAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKCJBTllfc3VicXVlcnki LmYxID0gIkFOWV9zdWJxdWVyeSIuZykKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoQWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IGkuZjEsIChnZW5lcmF0ZV9zZXJpZXMoMSwgMikgLyAxMCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogaS5mMQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5pbnQ0X3RibCBpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGkuZjEKLSgxOCByb3dzKQorICAgICAgICAgICAgICAg RmlsdGVyOiAoIkFOWV9zdWJxdWVyeSIuZjEgPSAiQU5ZX3N1YnF1ZXJ5Ii5n KQorICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogaS5mMSwgKGdlbmVyYXRlX3Nlcmllcygx LCAyKSAvIDEwKQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBp LmYxCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmludDRfdGJsIGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogaS5mMQorKDE1IHJvd3MpCiAKIHNlbGVjdCAqIGZyb20gaW50NF90 YmwgbyB3aGVyZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0 ZV9zZXJpZXMoMSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5 IGYxKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dW5pb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5v dXQKaW5kZXggMDE2NTcxYi4uZjJlMjk3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKQEAgLTI2MywxNiArMjYzLDE2 IEBAIE9SREVSIEJZIDE7CiBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBJTlRF UlNFQ1QgU0VMRUNUIHExIEZST00gaW50OF90Ymw7CiAgICAgICAgIHEyICAg ICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLQotIDQ1Njc4OTAxMjM0NTY3ODkK ICAgICAgICAgICAgICAgMTIzCisgNDU2Nzg5MDEyMzQ1Njc4OQogKDIgcm93 cykKIAogU0VMRUNUIHEyIEZST00gaW50OF90YmwgSU5URVJTRUNUIEFMTCBT RUxFQ1QgcTEgRlJPTSBpbnQ4X3RibDsKICAgICAgICAgcTIgICAgICAgIAog LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIDEyMwogIDQ1Njc4 OTAxMjM0NTY3ODkKICA0NTY3ODkwMTIzNDU2Nzg5Ci0gICAgICAgICAgICAg IDEyMwogKDMgcm93cykKIAogU0VMRUNUIHEyIEZST00gaW50OF90YmwgRVhD RVBUIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIE9SREVSIEJZIDE7CkBAIC0z MDUsMTYgKzMwNSwxNiBAQCBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENF UFQgU0VMRUNUIHEyIEZST00gaW50OF90Ymw7CiBTRUxFQ1QgcTEgRlJPTSBp bnQ4X3RibCBFWENFUFQgQUxMIFNFTEVDVCBxMiBGUk9NIGludDhfdGJsOwog ICAgICAgICBxMSAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0KLSA0NTY3 ODkwMTIzNDU2Nzg5CiAgICAgICAgICAgICAgIDEyMworIDQ1Njc4OTAxMjM0 NTY3ODkKICgyIHJvd3MpCiAKIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIEVY Q0VQVCBBTEwgU0VMRUNUIERJU1RJTkNUIHEyIEZST00gaW50OF90Ymw7CiAg ICAgICAgIHExICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAxMjMKICA0NTY3ODkwMTIzNDU2Nzg5CiAgNDU2Nzg5MDEyMzQ1 Njc4OQotICAgICAgICAgICAgICAxMjMKICgzIHJvd3MpCiAKIFNFTEVDVCBx MSBGUk9NIGludDhfdGJsIEVYQ0VQVCBBTEwgU0VMRUNUIHExIEZST00gaW50 OF90YmwgRk9SIE5PIEtFWSBVUERBVEU7CkBAIC0zNDMsOCArMzQzLDggQEAg U0VMRUNUIGYxIEZST00gZmxvYXQ4X3RibCBFWENFUFQgU0VMRUNUIGYxIEZS T00gaW50NF90YmwgT1JERVIgQlkgMTsKIFNFTEVDVCBxMSBGUk9NIGludDhf dGJsIElOVEVSU0VDVCBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBVTklPTiBB TEwgU0VMRUNUIHEyIEZST00gaW50OF90Ymw7CiAgICAgICAgIHExICAgICAg ICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDQ1Njc4OTAxMjM0NTY3ODkK ICAgICAgICAgICAgICAgIDEyMworICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAg ICAgICAgICAgICA0NTYKICAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAg ICAgICAgMTIzCkBAIC0zNTUsMTUgKzM1NSwxNSBAQCBTRUxFQ1QgcTEgRlJP TSBpbnQ4X3RibCBJTlRFUlNFQ1QgU0VMRUNUIHEyIEZST00gaW50OF90Ymwg VU5JT04gQUxMIFNFTEVDVCBxMiBGUgogU0VMRUNUIHExIEZST00gaW50OF90 YmwgSU5URVJTRUNUICgoKFNFTEVDVCBxMiBGUk9NIGludDhfdGJsIFVOSU9O IEFMTCBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCkpKTsKICAgICAgICAgcTEg ICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tCi0gNDU2Nzg5MDEyMzQ1Njc4 OQogICAgICAgICAgICAgICAxMjMKKyA0NTY3ODkwMTIzNDU2Nzg5CiAoMiBy b3dzKQogCiAoKChTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBJTlRFUlNFQ1Qg U0VMRUNUIHEyIEZST00gaW50OF90YmwpKSkgVU5JT04gQUxMIFNFTEVDVCBx MiBGUk9NIGludDhfdGJsOwogICAgICAgICBxMSAgICAgICAgIAogLS0tLS0t LS0tLS0tLS0tLS0tLQotICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgICAg ICAgICAxMjMKKyAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAg NDU2CiAgIDQ1Njc4OTAxMjM0NTY3ODkKICAgICAgICAgICAgICAgIDEyMwpA QCAtNDE5LDggKzQxOSw4IEBAIEhJTlQ6ICBUaGVyZSBpcyBhIGNvbHVtbiBu YW1lZCAicTIiIGluIHRhYmxlICIqU0VMRUNUKiAyIiwgYnV0IGl0IGNhbm5v dCBiZSByZWZlCiBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENFUFQgKCgo U0VMRUNUIHEyIEZST00gaW50OF90YmwgT1JERVIgQlkgcTIgTElNSVQgMSkp KTsKICAgICAgICAgcTEgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tCi0g NDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAxMjMKKyA0NTY3ODkw MTIzNDU2Nzg5CiAoMiByb3dzKQogCiAtLQotLSAKMi4xLjAKCg== --=-6mteQXAxP083m83xNU1s Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=-6mteQXAxP083m83xNU1s--