Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwTFC-002oYt-5F for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Sep 2025 22:24:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uwTFA-003oYU-CB for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Sep 2025 22:24:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwTF9-003oYL-C2 for pgsql-hackers@lists.postgresql.org; Wed, 10 Sep 2025 22:24:48 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwTF4-00054h-2Z for pgsql-hackers@lists.postgresql.org; Wed, 10 Sep 2025 22:24:47 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-45dd505a1dfso544695e9.2 for ; Wed, 10 Sep 2025 15:24:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1757543083; x=1758147883; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MeyZ2M+R7FsOyfcuTo1YV774mMrhzfYv6jFc3kSTBs4=; b=FCiRawsgV3EqTqbLLFJV2MuA89bIO4l/R7KiaaOktMa7h5WwMh7Q9bE6JGqqowYSHf hE7PEUpZQdOLR5soJZmjWKgneFF2s48Iui1DDgUSiTJKlqSU8rz/M68TjoiAYQGz9Pzv u957LrHgtpqEscP7N7+SbFhPVSf/AO/Erl3VtIAHOZvw3yIqZBSKniTW6qN3km1YUgjr Cg6WB+ItNFxexMxOrTlHE/yMGH4l2U2N3H3OdT6RtTpOmvrfqzXUBgVtnfSOO2ROA2Xp TBF7n0JvRksEpYlcXvKPpKmRvfjLnmWuSkGHy/Da6a7NoLu7k8TdIeV1UKqL2R55UYaA votA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757543083; x=1758147883; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MeyZ2M+R7FsOyfcuTo1YV774mMrhzfYv6jFc3kSTBs4=; b=nCHsksVlKUsI8aiCWRZc5log4dnkxH9QFKG363CQiq/cJg5zQdVPuRX6QQvlCxRZoR qKmoQNEGoEXhYuxtxxvNyHidY7OQH2/0u/2LVZ+oe6IssJ5SNPRYTElvFavsdXJHosk/ rIzaG6v8wRii6Q32Gozzbn/M1JGH/5QNE2eVz6ORMWlPOQlh6x7dX0dZqqp5b+iZvTD/ yAZYuvjp+QNfyHHcUoAubFrubfd1CSWqmtC25ggGZYjIv5v/YcuqHi0m5pfNoPR1l8TD wUaHPsAgUnygIspFJ2XeeeTRdEo/HwMP3/e+nGGbUt4Qb3vy0CAB8exWPHkUeW5Ka7ZM rjYQ== X-Forwarded-Encrypted: i=1; AJvYcCU0QQoHXZzAQIND4SzWrvX1Rmac22nSS0863hmvOF1tH4rASo5uVD8nkIgj1rcefn4yjx0hOrBpSRX0JmAi@lists.postgresql.org X-Gm-Message-State: AOJu0Yx9bHwlUqu0D9Wan1p4lLe0kJJowXTqTQPSknQzfsITTwbpEM64 CrbNyTW9494cYuULJRqy+YimxB1/bJQttS7xg72G3a2nTJrAR/ZuJ1hUiGhokY0VIacZVzzCWeq OwlGBD3fiuS1KBM8W0R/AXnmr/jcExawtOM1YJRIvcQ== X-Gm-Gg: ASbGncvW/E/2J2/Otcws88X8napenTH94t/nvBN+YSl0e9qYJ6xhMc12nb4qyu2FLDT IHpszdIbctlVQDzdmsY4xj/Z7gqZyr1puuhlz9+IvVC+UFjSZ2Ob38uN9BQ/FaNwAuiaS7Cg31D u5TneNjddGVrNaVSX4oTDKIS1uv6NawXq66pVUoIXfSs45/wbStm1BXzwK061hyNmUIX5w6JKk1 BsBuTE= X-Google-Smtp-Source: AGHT+IGtiYq7hggQlxz43jVf+plLtNohEs03GrfEdk4n59fSA7EJJYQQTg1ZNiX0CyW3I4Srm86iAd4GoJn+WnX6kcU= X-Received: by 2002:a05:6000:1449:b0:3e4:ea11:f7df with SMTP id ffacd0b85a97d-3e64392b8c4mr17003234f8f.40.1757543082890; Wed, 10 Sep 2025 15:24:42 -0700 (PDT) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Wed, 10 Sep 2025 18:24:16 -0400 X-Gm-Features: AS18NWBj8Qh5ldb85eYKCRanMcP8rSU5_Cyu-zjqNL0eF0gC2A2RVSGL6GKklVw Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000022789c063e79e31e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000022789c063e79e31e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Sep 4, 2025 at 2:55=E2=80=AFPM Tomas Vondra wrote= : > Aren't plenty of real-world data sets correlated, but not perfectly? Attached is the latest revision of the prefetching patch, taken from the shared branch that Tomas and I have been working on for some weeks. This revision is the first "official revision" that uses the complex approach, which we agreed was the best approach right before we started collaborating through this shared branch. While Tomas and I have posted versions of this "complex" approach at various times, those were "unofficial" previews of different approaches. Whereas this is the latest official patch revision of record, that should be tested by CFTester for the prefetch patch's CF entry, etc. We haven't done a good job of maintaining an unambiguous, easy to test "official" CF entry patch before now. That's why I'm being explicit about what this patch revision represents. It's the shared work of Tomas and I; it isn't some short-term experimental fork. Future revisions will be incremental improvements on what I'm posting now. Our focus has been on fixing a variety of regressions that came to light following testing by Tomas. There are a few bigger changes that are intended to fix these regressions, plus lots of small changes. There's too many small changes to list. But the bigger changes are: * We're now carrying Andres' patch [1] that deals with inefficiencies on the read stream side [2]. We need this to get decent performance with certain kinds of index scans where the same heap page buffer needs to be read multiple times in close succession. * We now delay prefetching/creating a new read stream until after we've already read one index batch, with the goal of avoiding regressions on cheap, selective queries (e.g., pgbench SELECT). This optimization has been referred to as the "priorbatch" optimization earlier in this thread. * The third patch is a new one, authored by Tomas. It aims to ameliorate nestloop join regressions by caching memory used to store batches across rescans. This is still experimental. * The regression that we were concerned about most recently [3][4] is fixed by a new mechanism that sometimes disables prefetching/the read stream some time prefetching begins, having already read a small number of batches with prefetching -- the INDEX_SCAN_MIN_TUPLE_DISTANCE optimization. This is also experimental. But it does fully fix the problem at hand, without any read stream changes. (This is part of the main prefetching patch.) This works like the "priorbatch" optimization, but in reverse. We *unset* the scan's read stream when our INDEX_SCAN_MIN_TUPLE_DISTANCE test shows that prefetching hasn't worked out (as opposed to delaying starting it up until it starts to look like prefetching might help). Like the "priorbatch" optimization, this optimization is concerned with fixed prefetching costs that cannot possibly pay for themselves. Note that we originally believed that the regression in question [3][4] necessitated more work on the read stream side, to directly account for the way that we saw prefetch distance collapse to 2.0 for the entire scan. But our current thinking is that the regression in question occurs with scans where wholly avoiding prefetching is the right goal. Which is why, tentatively, we're addressing the problem within indexam.c itself (not in the read stream), by adding this new INDEX_SCAN_MIN_TUPLE_DISTANCE test to the read stream callback. This means that various experimental read stream distance patches [3][5] that initially seemed relevant no longer appear necessary (and so aren't included in this new revision at all). Much cleanup work remains to get the changes I just described in proper shape (to say nothing about open items that we haven't made a start on yet, like moving the read stream out of indexam.c and into heapam). But it has been too long since the last revision. I'd like to establish a regular cadence for posting new revisions of the patch set. [1] https://postgr.es/m/6butbqln6ewi5kuxz3kfv2mwomnlgtate4mb4lpa7gb2l63j4t@= stlwbi2dvvev [2] https://postgr.es/m/kvyser45imw3xmisfvpeoshisswazlzw35el3fq5zg73zblpql@= f56enfj45nf7 [3] https://postgr.es/m/8f5d66cf-44e9-40e0-8349-d5590ba8efb4@vondra.me [4] https://github.com/tvondra/postgres/blob/index-prefetch-master/microben= chmarks/tomas-weird-issue-readstream.sql [5] https://postgr.es/m/CA+hUKG+9Qp=3DE5XWE+_1UPCxULLXz6JrAY=3D83pmnJ5ifup= H-NSA@mail.gmail.com -- Peter Geoghegan --00000000000022789c063e79e31e Content-Type: application/x-patch; name="v20250910-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Disposition: attachment; filename="v20250910-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfeigsmt0 RnJvbSBkOWY3ZDZiODI2ZjQ1MWVmOWU1NzExZjc0OTZhMDk3YjZjYmE2YjI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1 MDkxMCAxLzNdIGJ1Zm1ncjogYWlvOiBQcm90b3R5cGUgZm9yIG5vdCB3YWl0aW5nIGZvcgogYWxy ZWFkeS1pbi1wcm9ncmVzcyBJTwoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS82YnV0YnFsbjZld2k1a3V4ejNrZnYybXdvbW5sZ3RhdGU0bWI0bHBh N2diMmw2M2o0dEBzdGx3YmkyZHZ2ZXYKQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIHwgMTMzICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMTI1IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5k ZXggNDFmZGMxZTc2Li43ZGRiODY3YmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTM3LDYgKzEz Nyw3IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2 CQluYmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQ Z0Fpb1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBmZTQ3MGRlNjMuLjE4NjBjMzA0YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE1NTcsNiArMTU1Nyw0MSBAQCBSZWFkQnVm ZmVyc0NhblN0YXJ0SU9PbmNlKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0KQogCQlyZXR1cm4g U3RhcnRCdWZmZXJJTyhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dh aXQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK1JlYWRCdWZmZXJzSU9BbHJlYWR5SW5Qcm9n cmVzcyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBCdWZmZXIgYnVmZmVyKQorewor CUJ1ZmZlckRlc2MgKmRlc2M7CisJdWludDMyCQlidWZfc3RhdGU7CisJUGdBaW9XYWl0UmVmIGlv dzsKKworCXBnYWlvX3dyZWZfY2xlYXIoJmlvdyk7CisKKwlpZiAoQnVmZmVySXNMb2NhbChidWZm ZXIpKQorCXsKKwkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7 CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQlpZiAo YnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOwor CX0KKwllbHNlCisJeworCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsK KwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKworCQlpZiAoYnVmX3N0YXRlICYgQk1f SU9fSU5fUFJPR1JFU1MpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxvY2tCdWZIZHIo ZGVzYywgYnVmX3N0YXRlKTsKKwl9CisKKwlpZiAocGdhaW9fd3JlZl92YWxpZCgmaW93KSkKKwl7 CisJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGlvdzsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCiAvKgogICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQg dHJpZXMgdG8gZ2V0IHRoZSBidWZmZXIgcmVhZHkgZm9yIElPLgogICovCkBAIC0xNjg5LDcgKzE3 MjQsNyBAQCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikK IAkJCSAqCiAJCQkgKiB3ZSBmaXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlz IGNvbXBsZXRlLgogCQkJICovCi0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJ T19SU19VTktOT1dOICYmCisJCQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0 LT5yZXN1bHQuc3RhdHVzID09IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZf Y2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlv X3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTcw OCwxMSArMTc0MywzOCBAQCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbikKIAkJCQlBc3NlcnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlv X3dyZWYpKTsKIAkJCX0KIAotCQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29t cGxldGVkLiBDaGVjayB0aGUgcmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5n IG9uIGVycm9ycyBpZiB0aGVyZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZm ZXJzUmVzdWx0KG9wZXJhdGlvbik7CisJCQlpZiAob3BlcmF0aW9uLT5mb3JlaWduX2lvKQorCQkJ eworCQkJCUJ1ZmZlcgkJYnVmZmVyID0gb3BlcmF0aW9uLT5idWZmZXJzW29wZXJhdGlvbi0+bmJs b2Nrc19kb25lXTsKKwkJCQlCdWZmZXJEZXNjICpkZXNjOworCQkJCXVpbnQzMgkJYnVmX3N0YXRl OworCisJCQkJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJCQl7CisJCQkJCWRlc2MgPSBH ZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpOworCQkJCQlidWZfc3RhdGUgPSBw Z19hdG9taWNfcmVhZF91MzIoJmRlc2MtPnN0YXRlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsK KwkJCQkJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7CisJCQkJCVVubG9ja0J1ZkhkcihkZXNjLCBidWZfc3Rh dGUpOworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJ CW9wZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5i bG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTc5OCw2ICsxODYwLDU2IEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICoKKwkgKiBJ ZiB3ZSBkbyBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQg dXAgYSAxLWJsb2NrCisJICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gdGhhdCBXYWl0UmVhZEJ1ZmZl cnMgdGhlbiBjYW4gd2FpdCBvbi4KKwkgKi8KKwlpZiAoMSAmJiBSZWFkQnVmZmVyc0lPQWxyZWFk eUluUHJvZ3Jlc3Mob3BlcmF0aW9uLCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKQorCXsKKwkJLyog RklYTUU6IHByb2JhYmx5IG5lZWQgdG8gd2FpdCBpZiBpb19tZXRob2QgPT0gc3luYz8gKi8KKwor CQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWRpZF9zdGFydF9pbyA9IHRydWU7CisJCW9wZXJh dGlvbi0+Zm9yZWlnbl9pbyA9IHRydWU7CisKKwkJaWYgKDApCisJCQllbG9nKExPRywgInVzaW5n IGZvcmVpZ24gSU8gcGF0aCIpOworCisJCS8qIEZJWE1FOiB0cmFjZSBwb2ludCAqLworCisJCS8q CisJCSAqIEZJWE1FOiBob3cgc2hvdWxkIHRoaXMgYmUgYWNjb3VudGVkIGZvciBpbiBzdGF0cz8g QWNjb3VudCBhcyBhIGhpdAorCQkgKiBmb3Igbm93LCBxdWl0ZSBsaWtlbHkgKndlKiBzdGFydGVk IHRoaXMgSU8uCisJCSAqLworCQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVN UCkKKwkJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwkJZWxzZQorCQkJcGdC dWZmZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQgKz0gMTsKKworCQlpZiAob3BlcmF0aW9uLT5yZWwp CisJCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChvcGVyYXRpb24tPnJlbCk7CisJCXBnc3RhdF9j b3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKKwkJaWYg KFZhY3V1bUNvc3RBY3RpdmUpCisJCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFn ZUhpdDsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdlZF9w YWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJICog ZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFtYWdl ZF9wYWdlcyBpc24ndApAQCAtMTg1NSw5ICsxOTY3LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJLyoK IAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQgYnVm ZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5vdGhl ciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhlciBk b25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5LgorCSAq IElmIGEgc3luY2hyb25vdXMgSS9PIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2VuZCAoaXQg Y2FuJ3QgYmUgdGhpcworCSAqIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRoZSBvdXRj b21lOiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nCisJICogd2VudCB3cm9uZyBhbmQgd2Ugd2ls bCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKIAl7CkBAIC0xOTcwLDYgKzIwODIsNyBAQCBBc3luY1JlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVz cykKIAkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCiAJCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1 dW1Db3N0UGFnZU1pc3MgKiBpb19idWZmZXJzX2xlbjsKIAorCQlvcGVyYXRpb24tPmZvcmVpZ25f aW8gPSBmYWxzZTsKIAkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKIAkJZGlk X3N0YXJ0X2lvID0gdHJ1ZTsKIAl9CkBAIC01OTYzLDYgKzYwNzYsOCBAQCBXYWl0SU8oQnVmZmVy RGVzYyAqYnVmKQogCQkgKi8KIAkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCiAJCXsKKwkJ CWlmICgwKQorCQkJCWVsb2coTE9HLCAiZm9yZWlnbiB3YWl0Iik7CiAJCQlwZ2Fpb193cmVmX3dh aXQoJmlvdyk7CiAKIAkJCS8qCi0tIAoyLjUxLjAKCg== --00000000000022789c063e79e31e Content-Type: application/x-patch; name="v20250910-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Disposition: attachment; filename="v20250910-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfeigsmz1 RnJvbSBjZDU1YmZhNDQ0Y2VhYmI3NjRjNjg4NTZmZTNlODIxYzFlMmRjNDNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMTAgU2VwIDIwMjUgMTY6NTQ6NTAgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1MDkxMCAz LzNdIFJlZHVjZSBtYWxsb2MvZnJlZSB0cmFmZmljIGJ5IGNhY2hpbmcgYmF0Y2hlcwoKSW5zdGVh ZCBvZiBpbW1lZGlhdGVseSBmcmVlaW5nIGEgYmF0Y2gsIHN0YXNoIGl0IGluIGEgY2FjaGUgKGEg c21hbGwKZml4ZWQtc2l6ZSBhcnJheSksIGZvciByZXVzZSBieSB0aGUgc2FtZSBzY2FuLgoKVGhl cmUncyByb29tIGZvciBpbXByb3ZlbWVudDoKCi0gS2VlcGluZyBzb21lIG9mIHRoZSBiYXRjaCBw aWVjZXMgKGtpbGxJdGVtcywgaXRlbXN2aXNpYmlsaXR5LCAuLi4pCiAgaW5zdGVhZCBvZiBmcmVl aW5nIHRoZW0gaW4gaW5kZXhfYmF0Y2hfcmVsZWFzZS4KCi0gQWxsb2NhdGluZyBvbmx5IHNwYWNl IHdlIG5lZWQgKGJvdGggaW5kZXhfYmF0Y2hfYWxsb2MgY2FsbHMgdXNlCiAgTWF4VElEc1BlckJU cmVlUGFnZSwgYW5kIHRodXMgbWFsbG9jIC0gYmVjYXVzZSBvZiBBTExPQ19DSFVOS19MSU1JVCku Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgIHwgMTczICsrKysrKysrKysrKysrKysrKysrKysrLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgIHwgIDE1ICstLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAgNCArLQogNSBmaWxlcyBjaGFuZ2Vk LCAxNzYgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCAz OTM4MmQ4ZTAuLjFiYjRkMjljNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTIzMyw3ICsyMzMsOCBAQCBl eHRlcm4gdm9pZCBpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5jZXMoSW5kZXhTY2Fu RGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJIGJvb2wgcmVjaGVja09yZGVyQnkpOwogZXh0ZXJuIGJ5 dGVhICppbmRleF9vcGNsYXNzX29wdGlvbnMoUmVsYXRpb24gaW5kcmVsLCBBdHRyTnVtYmVyIGF0 dG51bSwKIAkJCQkJCQkJCURhdHVtIGF0dG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJu IEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKGludCBtYXhpdGVtcywgYm9vbCB3YW50 X2l0dXApOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKEluZGV4U2Nh bkRlc2Mgc2NhbiwgaW50IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOwogZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfdW5sb2NrKFJlbGF0aW9uIHJlbCwgYm9vbCBk cm9wUGluLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXgg NTU0OTViMGUzLi42ZTUxMWYxYzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTg3LDYgKzE4Nyw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqLwogCWNoYXIJICAgKml0 ZW1zdmlzaWJpbGl0eTsJLyogSW5kZXgtb25seSBzY2FuIHZpc2liaWxpdHkgY2FjaGUgKi8KIAor CWludAkJCW1heGl0ZW1zOwogCUluZGV4U2NhbkJhdGNoUG9zSXRlbSBpdGVtc1tGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBJbmRleFNjYW5CYXRjaERhdGE7CiAKQEAgLTI2Niw2ICsyNjcsMTAg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hTdGF0ZQogCWludAkJCWZpcnN0QmF0Y2g7 CQkvKiBmaXJzdCB1c2VkIGJhdGNoIHNsb3QgKi8KIAlpbnQJCQluZXh0QmF0Y2g7CQkvKiBuZXh0 IGVtcHR5IGJhdGNoIHNsb3QgKi8KIAorCS8qIHNtYWxsIGNhY2hlIG9mIHVudXNlZCBiYXRjaGVz LCB0byByZWR1Y2UgbWFsbG9jL2ZyZWUgdHJhZmZpYyAqLworCWludAkJCWJhdGNoZXNDYWNoZVNp emU7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICoqYmF0Y2hlc0NhY2hlOworCiAJSW5kZXhTY2FuQmF0 Y2hEYXRhICoqYmF0Y2hlczsKIAogCS8qIGNhbGxiYWNrIHRvIHNraXAgcHJlZmV0Y2hpbmcgaW4g SU9TIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDI3NDY4N2NjMS4u NDdmOTgyN2MwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTIxOTcsNiArMjE5 NywxMCBAQCBpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5iYXRj aFN0YXRlLT5maXJzdEJhdGNoID0gMDsJLyogZmlyc3QgYmF0Y2ggKi8KIAlzY2FuLT5iYXRjaFN0 YXRlLT5uZXh0QmF0Y2ggPSAwOwkvKiBmaXJzdCBiYXRjaCBpcyBlbXB0eSAqLwogCisJLyogWFhY IGluaXQgdGhlIGNhY2hlIG9mIGJhdGNoZXMsIGNhcGFjaXR5IDE2IGlzIGFyYml0cmFyeSAqLwor CXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVNpemUgPSAxNjsKKwlzY2FuLT5iYXRjaFN0 YXRlLT5iYXRjaGVzQ2FjaGUgPSBOVUxMOworCiAJc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlcyA9 CiAJCXBhbGxvYyhzaXplb2YoSW5kZXhTY2FuQmF0Y2hEYXRhICopICogc2Nhbi0+YmF0Y2hTdGF0 ZS0+bWF4QmF0Y2hlcyk7CiAKQEAgLTIzMjksMzQgKzIzMzMsMTAyIEBAIHN0YXRpYyB2b2lkCiBp bmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCWluZGV4X2JhdGNoX3Jlc2V0 KHNjYW4sIHRydWUpOworCisJaWYgKHNjYW4tPmJhdGNoU3RhdGUpCisJeworCQlpZiAoc2Nhbi0+ YmF0Y2hTdGF0ZS0+YmF0Y2hlcykKKwkJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXMp OworCisJCWlmIChzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGUpCisJCXsKKwkJCWZvciAo aW50IGkgPSAwOyBpIDwgc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlU2l6ZTsgaSsrKQor CQkJeworCQkJCWlmIChzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVbaV0gPT0gTlVMTCkK KwkJCQkJY29udGludWU7CisKKwkJCQlwZnJlZShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2Fj aGVbaV0pOworCQkJfQorCisJCQlwZnJlZShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGUp OworCQl9CisJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUpOworCX0KIH0KIAogLyoKICAqIFhYWCBC b3RoIGluZGV4X2JhdGNoX2FsbG9jKCkgY2FsbHMgaW4gYnRyZWUgdXNlIE1heFRJRHNQZXJCVHJl ZVBhZ2UsCiAgKiB3aGljaCBzZWVtcyB1bmZvcnR1bmF0ZSAtIGl0IGluY3JlYXNlcyB0aGUgYWxs b2NhdGlvbiBzaXplcywgZXZlbiBpZgotICogdGhlIGluZGV4IHdvdWxkIGJlIGZpbmUgd2l0aCBz bWFsbGVyIGFycmF5cy4gVGhpcyBtZWFucyBhbGwgYmF0Y2hlcyBleGNlZWQKLSAqIEFMTE9DX0NI VU5LX0xJTUlULCBmb3JjaW5nIGEgc2VwYXJhdGUgbWFsbG9jIChleHBlbnNpdmUpLgorICogdGhl IGluZGV4IHdvdWxkIGJlIGZpbmUgd2l0aCBzbWFsbGVyIGFycmF5cy4gVGhpcyBtZWFucyBhbGwg YmF0Y2hlcworICogZXhjZWVkIEFMTE9DX0NIVU5LX0xJTUlULCBmb3JjaW5nIGEgc2VwYXJhdGUg bWFsbG9jIChleHBlbnNpdmUpLiBUaGUKKyAqIGNhY2hlIGhlbHBzIGZvciBsb25nZXIgcXVlcmll cywgbm90IGZvciBxdWVyaWVzIHRoYXQgb25seSBjcmVhdGUgYQorICogc2luZ2xlIGJhdGNoLCBl dGMuCiAgKi8KIEluZGV4U2NhbkJhdGNoCi1pbmRleF9iYXRjaF9hbGxvYyhpbnQgbWF4aXRlbXMs IGJvb2wgd2FudF9pdHVwKQoraW5kZXhfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuLCBp bnQgbWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKQogewotCUluZGV4U2NhbkJhdGNoIGJhdGNoID0g cGFsbG9jKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKLQkJCQkJCQkJICBz aXplb2YoSW5kZXhTY2FuQmF0Y2hQb3NJdGVtKSAqIG1heGl0ZW1zKTsKKwlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IE5VTEw7CiAKKwkvKgorCSAqIHRyeSB0byBmaW5kIGEgYmF0Y2ggaW4gdGhlIGNh Y2hlCisJICoKKwkgKiBYWFggV2UgY2FuIGdldCBoZXJlIHdpdGggYmF0Y2hTdGF0ZT09TlVMTCBm b3IgYml0bWFwc2NhbnMuIENvdWxkIHRoYXQKKwkgKiBtZWFuIGJpdG1hcHNjYW5zIGhhdmUgaXNz dWVzIHdpdGggbWFsbG9jL2ZyZWUgb24gYmF0Y2hlcyB0b28/IEJ1dCB0aGUKKwkgKiBjYWNoZSBj YW4ndCBoZWxwIHdpdGggdGhhdCwgd2hlbiBpdCdzIGluIGJhdGNoU3RhdGUuCisJICovCisJaWYg KChzY2FuLT5iYXRjaFN0YXRlICE9IE5VTEwpICYmCisJCShzY2FuLT5iYXRjaFN0YXRlLT5iYXRj aGVzQ2FjaGUgIT0gTlVMTCkpCisJeworCQkvKgorCQkgKiB0cnkgdG8gZmluZCBhIGJhdGNoIGlu IHRoZSBjYWNoZSwgd2l0aCBtYXhpdGVtcyBoaWdoIGVub3VnaAorCQkgKgorCQkgKiBYWFggTWF5 YmUgc2hvdWxkIGxvb2sgZm9yIGEgYmF0Y2ggd2l0aCBsb3dlc3QgbWF4aXRlbXM/IFRoYXQgc2hv dWxkCisJCSAqIGluY3JlYXNlIHByb2JhYmlsaXR5IG9mIGNhY2hlIGhpdHMgaW4gdGhlIGZ1dHVy ZT8KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hl c0NhY2hlU2l6ZTsgaSsrKQorCQl7CisJCQlpZiAoKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXND YWNoZVtpXSAhPSBOVUxMKSAmJgorCQkJCShzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVb aV0tPm1heGl0ZW1zID49IG1heGl0ZW1zKSkKKwkJCXsKKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNo U3RhdGUtPmJhdGNoZXNDYWNoZVtpXTsKKwkJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2Fj aGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogZm91bmQgYSBi YXRjaCBpbiB0aGUgY2FjaGU/ICovCisJaWYgKGJhdGNoKQorCXsKKwkJLyogZm9yIElPUywgd2Ug ZXhwZWN0IHRvIGFscmVhZHkgaGF2ZSB0aGUgY3VyclR1cGxlcyAqLworCQlBc3NlcnQoISh3YW50 X2l0dXAgJiYgKGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpKSk7CisKKwkJLyogWFhYIG1heWJl IHdlIGNvdWxkIGtlZXAgdGhlc2UgYWxsb2NhdGlvbnMgdG9vICovCisJCUFzc2VydChiYXRjaC0+ cG9zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9PSBOVUxMKTsK Kwl9CisJZWxzZQorCXsKKwkJYmF0Y2ggPSBwYWxsb2Mob2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hE YXRhLCBpdGVtcykgKworCQkJCQkgICBzaXplb2YoSW5kZXhTY2FuQmF0Y2hQb3NJdGVtKSAqIG1h eGl0ZW1zKTsKKworCQliYXRjaC0+bWF4aXRlbXMgPSBtYXhpdGVtczsKKworCQkvKgorCQkgKiBJ ZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBuZWVkIGEgdHVwbGUgc3RvcmFn ZQorCQkgKiB3b3Jrc3BhY2UuIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhpcywgd2hpY2ggc2hv dWxkIGFsd2F5cyBnaXZlCisJCSAqIHRoZSBpbmRleCBBTSBlbm91Z2ggc3BhY2UgdG8gZml0IGEg ZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVwbGVzLgorCQkgKi8KKwkJYmF0Y2gtPmN1cnJUdXBsZXMg PSBOVUxMOworCQlpZiAod2FudF9pdHVwKQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBwYWxsb2Mo QkxDS1NaKTsKKwl9CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24gKi8KIAliYXRjaC0+Zmly c3RJdGVtID0gLTE7CiAJYmF0Y2gtPmxhc3RJdGVtID0gLTE7CiAJYmF0Y2gtPmtpbGxlZEl0ZW1z ID0gTlVMTDsKIAliYXRjaC0+bnVtS2lsbGVkID0gMDsKIAotCS8qCi0JICogSWYgd2UgYXJlIGRv aW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNl LgotCSAqIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhpcywgd2hpY2ggc2hvdWxkIGFsd2F5cyBn aXZlIHRoZSBpbmRleCBBTQotCSAqIGVub3VnaCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3 b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxMOwotCWlmICh3 YW50X2l0dXApCi0JCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFsbG9jKEJMQ0tTWik7Ci0KIAliYXRj aC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAliYXRjaC0+cG9zID0gTlVMTDsKIAliYXRjaC0+aXRl bXN2aXNpYmlsaXR5ID0gTlVMTDsJLyogcGVyLWJhdGNoIElPUyB2aXNpYmlsaXR5ICovCkBAIC0y Mzk3LDMgKzI0NjksNzYgQEAgaW5kZXhfYmF0Y2hfdW5sb2NrKFJlbGF0aW9uIHJlbCwgYm9vbCBk cm9wUGluLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIAlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYp OwogCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOyAvKiBkZWZlbnNpdmUgKi8KIH0KKworLyog YWRkIHRoZSBidWZmZXIgdG8gdGhlIGNhY2hlLCBvciBmcmVlIGl0ICovCit2b2lkCitpbmRleF9i YXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7 CisJLyoKKwkgKiBmaXJzdCBmcmVlIHNvbWUgYWxsb2NhdGlvbnMKKwkgKgorCSAqIFhYWCBXZSBj b3VsZCBrZWVwL3JldXNlIHNvbWUgb2YgdGhvc2UuCisJICovCisKKwlpZiAoYmF0Y2gtPmtpbGxl ZEl0ZW1zICE9IE5VTEwpCisJeworCQlwZnJlZShiYXRjaC0+a2lsbGVkSXRlbXMpOworCQliYXRj aC0+a2lsbGVkSXRlbXMgPSBOVUxMOworCX0KKworCWlmIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5 ICE9IE5VTEwpCisJeworCQlwZnJlZShiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KTsKKwkJYmF0Y2gt Pml0ZW1zdmlzaWJpbGl0eSA9IE5VTEw7CisJfQorCisJLyogWFhYIGEgYml0IHVuY2xlYXIgd2hh dCdzIHJlbGVhc2UgYnkgQU0gdnMuIGluZGV4YW0gKi8KKwlBc3NlcnQoYmF0Y2gtPnBvcyA9PSBO VUxMKTsKKworCS8qCisJICogdHJ5IGFkZGluZyBpdCB0byB0aGUgY2FjaGUgLSBmaW5kcyBhIHNs b3QgdGhhdCdzIGVpdGhlciBlbXB0eSBvciBoYXMgYQorCSAqIGxvd2VyIG1heGl0ZW1zIHZhbHVl IChhbmQgcmVwbGFjZSB0aGF0IGJhdGNoKQorCSAqCisJICogWFhYIG1heWJlIHdlIHNob3VsZCB0 cmFjayB0aGUgbnVtYmVyIG9mIGVtcHR5IHNsb3RzLCBhbmQgbWluaW11bSB2YWx1ZQorCSAqIG9m IG1heGl0ZW1zLCBzbyB0aGF0IHdlIGNhbiBza2lwIHBvaW50bGVzcyBzZWFyY2hlcz8KKwkgKgor CSAqIFhYWCBpZ25vcmVzIGNhc2VzIHdpdGggYmF0Y2hTdGF0ZT1OVUxMIChjYW4gd2UgZ2V0IGhl cmUgd2l0aCBiaXRtYXAKKwkgKiBzY2Fucz8pCisJICovCisJaWYgKHNjYW4tPmJhdGNoU3RhdGUg IT0gTlVMTCkKKwl7CisJCS8qIGxvd2VzdCBtYXhpdGVtcyB3ZSBmb3VuZCBpbiB0aGUgY2FjaGUg KHRvIHJlcGxhY2Ugd2l0aCBiYXRjaCkgKi8KKwkJaW50CQkJbWF4aXRlbXMgPSBiYXRjaC0+bWF4 aXRlbXM7CisJCWludAkJCXNsb3QgPSBzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVTaXpl OworCisJCS8qIGZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgKi8KKwkJ aWYgKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZSA9PSBOVUxMKQorCQkJc2Nhbi0+YmF0 Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlCisJCQkJPSBwYWxsb2MwX2FycmF5KEluZGV4U2NhbkJhdGNo LAorCQkJCQkJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVTaXplKTsKKworCQlmb3Ig KGludCBpID0gMDsgaSA8IHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVNpemU7IGkrKykK KwkJeworCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLworCQkJaWYgKHNjYW4t PmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXSA9PSBOVUxMKQorCQkJeworCQkJCXNjYW4tPmJh dGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXSA9IGJhdGNoOworCQkJCXJldHVybjsKKwkJCX0KKwor CQkJLyogdXBkYXRlIGxvd2VzdCBtYXhpdGVtcz8gKi8KKwkJCWlmIChzY2FuLT5iYXRjaFN0YXRl LT5iYXRjaGVzQ2FjaGVbaV0tPm1heGl0ZW1zIDwgbWF4aXRlbXMpCisJCQl7CisJCQkJbWF4aXRl bXMgPSBzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVbaV0tPm1heGl0ZW1zOworCQkJCXNs b3QgPSBpOworCQkJfQorCQl9CisKKwkJLyogZm91bmQgYSBiYXRjaCB0byByZXBsYWNlPyAqLwor CQlpZiAobWF4aXRlbXMgPCBiYXRjaC0+bWF4aXRlbXMpCisJCXsKKwkJCXBmcmVlKHNjYW4tPmJh dGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtzbG90XSk7CisJCQlzY2FuLT5iYXRjaFN0YXRlLT5iYXRj aGVzQ2FjaGVbc2xvdF0gPSBiYXRjaDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlZS5jCmluZGV4IGZiYTU2MmRmOC4uMThjNzM0YzRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKQEAgLTM4MiwyMSArMzgyLDIyIEBAIGJ0ZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQog CQlfYnRfa2lsbGl0ZW1zKHNjYW4sIGJhdGNoKTsKIAotCWlmIChiYXRjaC0+aXRlbXN2aXNpYmls aXR5KQotCQlwZnJlZShiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KTsKLQotCWlmIChiYXRjaC0+Y3Vy clR1cGxlcykKLQkJcGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOwotCiAJaWYgKGJhdGNoLT5wb3Mp CiAJewogCQlpZiAoIXNjYW4tPmJhdGNoU3RhdGUgfHwgIXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQ aW4pCiAJCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOwogCiAJCXBmcmVlKGJhdGNoLT5wb3Mp OworCisJCS8qIFhYWCBtYXliZSBzaG91bGQgYmUgZG9uZSBpbiBpbmRleF9iYXRjaF9mcmVlPyAq LworCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJYmF0Y2gtPnBvcyA9IE5VTEw7CiAJ fQogCi0JcGZyZWUoYmF0Y2gpOworCS8qIFhYWCBrZWVwIGl0ZW1zdmlzaWJpbGl0eSwga2lsbEl0 ZW1zIGFuZCBjdXJyVHVwbGVzICovCisKKwkvKiBmcmVlIHRoZSBiYXRjaCAob3IgY2FjaGUgaXQg Zm9yIHJldXNlKSAqLworCWluZGV4X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggNjIxMWU5NTQ4Li4wZTlm OGJkYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMTIwMCw3ICsx MjAwLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJfQogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCi0JZmlyc3RiYXRj aCA9IGluZGV4X2JhdGNoX2FsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRf aXR1cCk7CisJZmlyc3RiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKHNjYW4sIE1heFRJRHNQZXJC VHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAJZmlyc3RiYXRjaC0+cG9zID0gcGFsbG9j KHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CiAKIAkvKgpAQCAtMjIzNyw3ICsyMjM3LDcgQEAgX2J0 X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCUJU U2NhblBvcwluZXdwb3M7CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLwot CW5ld2JhdGNoID0gaW5kZXhfYmF0Y2hfYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSwgc2Nhbi0+ eHNfd2FudF9pdHVwKTsKKwluZXdiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKHNjYW4sIE1heFRJ RHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAJbmV3YmF0Y2gtPnBvcyA9IHBh bGxvYyhzaXplb2YoQlRTY2FuUG9zRGF0YSkpOwogCW5ld3BvcyA9IG5ld2JhdGNoLT5wb3M7CiAK LS0gCjIuNTEuMAoK --00000000000022789c063e79e31e Content-Type: application/x-patch; name="v20250910-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Disposition: attachment; filename="v20250910-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfeigsn22 RnJvbSAxNTUwNTRlNGQ0MTAzMjIzZTcyYTgwOGNhNDUwYjg0YzQxMmJiMWVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjUwOTEwIDIv M10gQWRkIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGZvciBpbmRleCBzY2FuCiBwcmVmZXRjaGluZy4K CkFsbG93cyB0aGUgaW5kZXggQU0gdG8gcHJvdmlkZSBpdGVtcyAoVElEcyBhbmQgdHVwbGVzKSBp biBiYXRjaGVzLCB3aGljaAppcyB0aGVuIHVzZWQgdG8gaW1wbGVtZW50IHByZWZldGNoaW5nIG9m IGhlYXAgdHVwbGVzIGluIGluZGV4IHNjYW5zCihpbmNsdWRpbmcgaW5kZXgtb25seSBzY2Fucyku IFRoaXMgaXMgc2ltaWxhciB0byBwcmVmZXRjaGluZyBhbHJlYWR5CmRvbmUgaW4gYml0bWFwIHNj YW5zLCBhbmQgY2FuIHJlc3VsdCBpbiBzaWduaWZpY2FudCBzcGVlZHVwcy4KClRoZSBpbmRleCBB TSBtYXkgaW1wbGVtZW50IGFuIG9wdGlvbmFsICJhbWdldGJhdGNoIiBjYWxsYmFjaywgcmV0dXJu aW5nCmEgYmF0Y2ggb2YgaXRlbXMuIFRoZSBpbmRleGFtLmMgY29kZSB0aGVuIGhhbmRsZXMgdGhp cyB0cmFuc3BhcmVudGx5CnRocm91Z2ggdGhlIGV4aXN0aW5nICJnZXRuZXh0IiBpbnRlcmZhY2Uu Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgICAy MiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgICAg NCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8ICAxMDAg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAxNTAg KysKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICA0MyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgICAgMSAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAxMzI4ICsr KysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAg ICAgICAgfCAgMzIxICsrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg ICAgICAgICB8ICA3MTcgKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgICAgICAgICAgfCAgIDczICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YyAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMg ICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jICAgICAgfCAgMTAxICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVsYXRpb24uYyAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3Ry ZWFtLmMgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMg ICAgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0ICAgICB8ICAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlIHwgICAgMSArCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAzICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAg ICAgICAgICAgICAgfCAgIDQwICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jICAgfCAgICAzICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCAgICAgICAgfCAgICAzICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgICA4ICstCiAzMyBmaWxlcyBjaGFuZ2VkLCAyMTEwIGluc2VydGlvbnMo KyksIDg2NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDcwOTQ5ZGU1Ni4uMjFjNmM2 YjYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk2LDYgKzE5NiwxNSBAQCB0eXBlZGVmIHZvaWQgKCph bXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFt Z2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwor dHlwZWRlZiBJbmRleFNjYW5CYXRjaCgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qIHJlbGVhc2UgYmF0Y2ggb2YgdmFsaWQg dHVwbGVzICovCit0eXBlZGVmIHZvaWQgKCphbWZyZWViYXRjaF9mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAvKiBmZXRj aCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBA IC0yMDMsMTEgKzIxMiw5IEBAIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2NhbiwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQg KCphbWVuZHNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0vKiBtYXJrIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlv biAqLwotdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mg c2Nhbik7CisvKiBpbnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0 cmFja3Mgc2NhbidzIHBvc2l0aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0X2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwg aW5kZXggc2NhbnMuCkBAIC0zMDcsMTAgKzMxNCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1 bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2Fu IGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBO VUxMICovCisJYW1mcmVlYmF0Y2hfZnVuY3Rpb24gYW1mcmVlYmF0Y2g7CS8qIGNhbiBiZSBOVUxM ICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBOVUxMICov CiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3NfZnVuY3Rpb24gYW1t YXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBv czsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8q IGNhbiBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFy YWxsZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4 IDViMmFiMTgxYi4uMzkzODJkOGUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2Vu YW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTUsNiArMTUsNyBAQAog I2RlZmluZSBHRU5BTV9ICiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgorI2luY2x1ZGUgImFj Y2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJhY2Nlc3Mv c2tleS5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgpAQCAtMTExLDYgKzExMiw3IEBA IHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRl bXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJl bHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRl c2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwog dHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpA QCAtMjMxLDYgKzIzMyw4IEBAIGV4dGVybiB2b2lkIGluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5 X2Rpc3RhbmNlcyhJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkgYm9vbCByZWNoZWNr T3JkZXJCeSk7CiBleHRlcm4gYnl0ZWEgKmluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBp bmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAogCQkJCQkJCQkJRGF0dW0gYXR0b3B0aW9ucywgYm9v bCB2YWxpZGF0ZSk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5kZXhfYmF0Y2hfYWxsb2MoaW50 IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaF91bmxv Y2soUmVsYXRpb24gcmVsLCBib29sIGRyb3BQaW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGEyYmQ1YTg5Ny4uYjAwZjFmNzU5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCkBAIC0xMTYsNiArMTE2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaEhlYXBE YXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSB4c19iYXNlOwkvKiBBTSBpbmRlcGVuZGVudCBwYXJ0 IG9mIHRoZSBkZXNjcmlwdG9yICovCiAKIAlCdWZmZXIJCXhzX2NidWY7CQkvKiBjdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4sIGlmIGFueSAqLworCUJsb2NrTnVtYmVyIHhzX2JsazsJCQkvKiB4 c19jYnVmJ3MgYmxvY2sgbnVtYmVyLCBpZiBhbnkgKi8KIAkvKiBOQjogaWYgeHNfY2J1ZiBpcyBu b3QgSW52YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlciAqLwogfSBJbmRl eEZldGNoSGVhcERhdGE7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCA5YWI0NjdjYjguLjU1OWNmNDlk OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTM4LDEwICs5MzgsMTAgQEAgdHlwZWRlZiBCVFZhY3V1 bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAgKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHBy b2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCiAgKiBk cm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJl dHVybmVkIGl0ZW1zLgogICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUg cGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdo ZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICog KHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5k IHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMg c2libGluZyBwYWdlLgorICogV2UgZHJvcCB0aGUgcGluICh3aGVuIGRyb3BQaW4gaXMgc2V0IGlu IGJhdGNoIHN0YXRlKSB0byBhdm9pZCBibG9ja2luZworICogcHJvZ3Jlc3MgYnkgVkFDVVVNIChz ZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJyZW50IFRJRAorICog cmVjeWNsaW5nIHNhZmUpLiAgV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQg dGhlIHBpbiBvbiB0aGUKKyAqIGN1cnJlbnQgcGFnZSBiZWZvcmUgbW92aW5nIG9uIHRvIGl0cyBz aWJsaW5nIHBhZ2UuCiAgKgogICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwg d2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKICAqIG1hdGNoZWQgaXRlbSwg b3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMg Z28KQEAgLTk2MCw3NCArOTYwLDI1IEBAIHR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0JLyog d2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCiAKIHR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKIHsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KIAkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KIAlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwogCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KIAlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwogCiAJLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCiAJU2NhbkRpcmVj dGlvbiBkaXI7CiAKLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQogCS8qCiAJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwogCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KIAkgKi8K IAlib29sCQltb3JlTGVmdDsKIAlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwogfSBCVFNjYW5Qb3NEYXRhOwogCiB0eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKIAotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBC VFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3Vy clBhZ2UpCiAKIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUg U0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZv CkBAIC0xMDY1LDMyICsxMDE2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQog CUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10 eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9j cyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250 ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGlu Zm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZl ciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4 ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1 cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBp biBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3 b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNo IGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxs IHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8q IHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBv c2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBk b24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBt YXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0 aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBh IG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3Mu Ci0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3Qg dmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kg Ki8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8K LQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwor CUJUU2NhblBvcwlwb3M7CiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3Bh cXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE5MCwxNCArMTExNiwxNSBAQCBleHRlcm4gYm9v bCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFy YWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0 Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2Nh bktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGZyZWViYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0 cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRl c2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg bWFya2JhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywK QEAgLTEzMDUsOCArMTIzMiw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24g cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIg KmJ1ZlAsIGludCBhY2Nlc3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNl cnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQz MiBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwg T2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZm ZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdo dG1vc3QpOwogCiAvKgpAQCAtMTMyNiw3ICsxMjU0LDcgQEAgZXh0ZXJuIGJvb2wgX2J0X2NoZWNr a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFy cmEKIGV4dGVybiBib29sIF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwog ZXh0ZXJuIHZvaWQgX2J0X3NldF9zdGFydGlrZXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQ YWdlU3RhdGUgKnBzdGF0ZSk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2Nhbik7CitleHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xl aWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxh dGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCmluZGV4IGI1ZTBmYjM4Ni4uNTU0OTViMGUzIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKQEAgLTE2LDkgKzE2LDExIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2lu Y2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtMTIxLDEwICsxMjMsMTU2IEBA IHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxl bEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0 YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3RyZWFtICpyczsKIH0gSW5kZXhGZXRjaFRhYmxl RGF0YTsKIAogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAorLyogRm9yd2FyZCBk ZWNsYXJhdGlvbiwgdGhlIHByZWZldGNoIGNhbGxiYWNrIG5lZWRzIEluZGV4U2NhbkRlc2NEYXRh LiAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhIEluZGV4U2NhbkJhdGNoRGF0 YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hQb3NJdGVtCS8qIHdoYXQgd2UgcmVt ZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLworeworCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkv KiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5kZXhPZmZz ZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0aW9uSW5k ZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBh bnkgKi8KK30gSW5kZXhTY2FuQmF0Y2hQb3NJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUg YmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGluZGV4IEFNCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1 ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAod2hlbiBkcm9wUGluKSAqLworCisJLyoKKwkgKiBBTS1zcGVjaWZpYyBzdGF0 ZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHNjYW4gd2l0aGluCisJ ICogdGhlIGluZGV4CisJICovCisJdm9pZAkgICAqcG9zOworCisJLyoKKwkgKiBUaGUgaXRlbXMg YXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCisJ ICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVu dCB0byBmaWxsIHRoZQorCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRo ZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgorCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBh IGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKi8K KwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJ aW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8q IGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBu ZXZlciB1c2VkKSAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBpbmRleGVzIG9mIGtpbGxl ZCBpdGVtcyAqLworCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3Rv cmVkIGl0ZW1zICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNj YW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBt YXRjaGluZyB0dXBsZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICog aXMgb2Ygc2l6ZSBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZgorCSAqIHR1cGxlcy4KKwkgKgorCSAqIFhYWCBtYXliZSBjdXJyVHVwbGVzIHNo b3VsZCBiZSBwYXJ0IG9mIHRoZSBhbS1zcGVjaWZpYyBwZXItYmF0Y2ggc3RhdGUKKwkgKiBzdG9y ZWQgaW4gInBvc2l0aW9uIiBmaWVsZD8KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCisJLyoKKwkgKiBiYXRjaCBjb250ZW50cyAo VElEcywgaW5kZXggdHVwbGVzLCBraWxsIGJpdG1hcCwgLi4uKQorCSAqCisJICogWFhYIFNob3Vs ZG4ndCB0aGlzIGJlIHBhcnQgb2YgdGhlICJJbmRleFNjYW5CYXRjaFBvc0l0ZW0iIHN0cnVjdD8g VG8KKwkgKiBrZWVwIGV2ZXJ5dGhpbmcgaW4gb25lIHBsYWNlPyBPciB3aHkgc2hvdWxkIHdlIGhh dmUgc2VwYXJhdGUgYXJyYXlzPworCSAqIE9uZSBhZHZhbnRhZ2UgaXMgdGhhdCB3ZSBkb24ndCBu ZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQKKwkgKiB3ZSBkb24ndCBuZWVk IC4uLiBlLmcuIGlmIHdlIGRvbid0IG5lZWQgaGVhcCB0dXBsZXMsIHdlIGRvbid0IGFsbG9jYXRl CisJICogdGhhdC4gV2UgY291bGRuJ3QgZG8gdGhhdCB3aXRoIGV2ZXJ5dGhpbmcgaW4gb25lIHN0 cnVjdC4KKwkgKi8KKwljaGFyCSAgICppdGVtc3Zpc2liaWxpdHk7CS8qIEluZGV4LW9ubHkgc2Nh biB2aXNpYmlsaXR5IGNhY2hlICovCisKKwlJbmRleFNjYW5CYXRjaFBvc0l0ZW0gaXRlbXNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30gSW5kZXhTY2FuQmF0Y2hEYXRhOworCisvKgorICogUG9z aXRpb24gaW4gdGhlIHF1ZXVlIG9mIGJhdGNoZXMgLSBpbmRleCBvZiBhIGJhdGNoLCBpbmRleCBv ZiBpdGVtIGluIGEgYmF0Y2guCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoUG9z Cit7CisJaW50CQkJYmF0Y2g7CisJaW50CQkJaW5kZXg7Cit9IEluZGV4U2NhbkJhdGNoUG9zOwor Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSBJbmRleFNjYW5EZXNjRGF0YTsKK3R5 cGVkZWYgYm9vbCAoKkluZGV4UHJlZmV0Y2hDYWxsYmFjaykgKEluZGV4U2NhbkRlc2NEYXRhICog c2NhbiwKKwkJCQkJCQkJCSAgIHZvaWQgKmFyZywKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNo UG9zICpwb3MpOworCisvKgorICogU3RhdGUgdXNlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcywg d2hpY2ggbWFuYWdlIHBlci1wYWdlIGJhdGNoZXMgb2YgaXRlbXMKKyAqIHdpdGggbWF0Y2hpbmcg aW5kZXggdHVwbGVzIHVzaW5nIGEgY2lyY3VsYXIgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkJhdGNoU3RhdGUKK3sKKwkvKiBJbmRleCBBTSBkcm9wcyBsZWFmIHBpbiBiZWZv cmUgYW1nZXRiYXRjaCByZXR1cm5zPyAqLworCWJvb2wJCWRyb3BQaW47CisKKwkvKgorCSAqIERp ZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPyBUaGUgYmF0 Y2hlcyBtYXkgYmUKKwkgKiBsb2FkZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGFuZCB3ZSBuZWVk IHRvIHJlbWVtYmVyIHdoZW4gd2UgZmFpbCB0bworCSAqIGxvYWQgdGhlIG5leHQgYmF0Y2ggaW4g YSBnaXZlbiBzY2FuICh3aGljaCBtZWFucyAibm8gbW9yZSBiYXRjaGVzIikuCisJICogYW1nZXRi YXRjaCBtYXkgcmVzdGFydCB0aGUgc2NhbiBvbiB0aGUgZ2V0IGNhbGwsIHNvIHdlIG5lZWQgdG8g cmVtZW1iZXIKKwkgKiBpdCdzIG92ZXIuCisJICovCisJYm9vbAkJZmluaXNoZWQ7CisJYm9vbAkJ cmVzZXQ7CisKKwkvKgorCSAqIERpZCB3ZSBkaXNhYmxlIHByZWZldGNoaW5nL3VzZSBvZiBhIHJl YWQgc3RyZWFtIGJlY2F1c2UgaXQgZGlkbid0IHBheQorCSAqIGZvciBpdHNlbGY/CisJICovCisJ Ym9vbAkJcHJlZmV0Y2hpbmdMb2NrZWRJbjsKKwlib29sCQlkaXNhYmxlZDsKKworCS8qCisJICog RHVyaW5nIHByZWZldGNoaW5nLCBjdXJyZW50UHJlZmV0Y2hCbG9jayBpcyB0aGUgdGFibGUgQU0g YmxvY2sgbnVtYmVyCisJICogdGhhdCB3YXMgcmV0dXJuZWQgYnkgb3VyIHJlYWQgc3RyZWFtIGNh bGxiYWNrIG1vc3QgcmVjZW50bHkuICBVc2VkIHRvCisJICogc3VwcHJlc3MgZHVwbGljYXRlIHN1 Y2Nlc3NpdmUgcmVhZCBzdHJlYW0gYmxvY2sgcmVxdWVzdHMuCisJICoKKwkgKiBQcmVmZXRjaGlu ZyBjYW4gc3RpbGwgcGVyZm9ybSBub24tc3VjY2Vzc2l2ZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUK KwkgKiBibG9jayBudW1iZXIgKGluIGdlbmVyYWwgd2UncmUgcHJlZmV0Y2hpbmcgaW4gZXhhY3Rs eSB0aGUgc2FtZSBvcmRlcgorCSAqIHRoYXQgdGhlIHNjYW4gd2lsbCByZXR1cm4gdGFibGUgQU0g VElEcyBpbikuICBXZSBuZWVkIHRvIGF2b2lkCisJICogZHVwbGljYXRlIHN1Y2Nlc3NpdmUgcmVx dWVzdHMgYmVjYXVzZSB0YWJsZSBBTXMgZXhwZWN0IHRvIGJlIGFibGUgdG8KKwkgKiBoYW5nIG9u IHRvIGJ1ZmZlciBwaW5zIGFjcm9zcyB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSBjYWxscy4KKwkg Ki8KKwlCbG9ja051bWJlciBjdXJyZW50UHJlZmV0Y2hCbG9jazsKKworCS8qCisJICogQ3VycmVu dCBzY2FuIGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMuIFRoaXMg aXMgdXNlZAorCSAqIHRvIGxvYWQgZGF0YSBpbiB0aGUgcmVhZCBzdHJlYW0gQVBJIGNhbGxiYWNr LCBldGMuCisJICovCisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CisKKwkvKiBwb3NpdGlvbnMg aW4gdGhlIHF1ZXVlIG9mIGJhdGNoZXMgKGJhdGNoICsgaXRlbSkgKi8KKwlJbmRleFNjYW5CYXRj aFBvcyByZWFkUG9zOwkvKiByZWFkIHBvc2l0aW9uICovCisJSW5kZXhTY2FuQmF0Y2hQb3Mgc3Ry ZWFtUG9zOwkvKiBwcmVmZXRjaCBwb3NpdGlvbiAoZm9yIHJlYWQgc3RyZWFtIEFQSSkgKi8KKwlJ bmRleFNjYW5CYXRjaFBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKwor CUluZGV4U2NhbkJhdGNoRGF0YSAqbWFya0JhdGNoOworCisJLyoKKwkgKiBBcnJheSBvZiBiYXRj aGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhlIGFycmF5IGhhcyBhIGNhcGFjaXR5IChidXQgY2Fu CisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQpLiBUaGUgZmlyc3RCYXRjaCBpcyBhbiBpbmRleCBv ZiB0aGUgZmlyc3QgYmF0Y2gsCisJICogYnV0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYnkgKG1v ZHVsbyBtYXhCYXRjaGVzKSBpbnRvIGluZGV4IGluIHRoZQorCSAqIGJhdGNoZXMgYXJyYXkuCisJ ICovCisJaW50CQkJbWF4QmF0Y2hlczsJCS8qIHNpemUgb2YgdGhlIGJhdGNoZXMgYXJyYXkgKi8K KwlpbnQJCQlmaXJzdEJhdGNoOwkJLyogZmlyc3QgdXNlZCBiYXRjaCBzbG90ICovCisJaW50CQkJ bmV4dEJhdGNoOwkJLyogbmV4dCBlbXB0eSBiYXRjaCBzbG90ICovCisKKwlJbmRleFNjYW5CYXRj aERhdGEgKipiYXRjaGVzOworCisJLyogY2FsbGJhY2sgdG8gc2tpcCBwcmVmZXRjaGluZyBpbiBJ T1MgZXRjLiAqLworCUluZGV4UHJlZmV0Y2hDYWxsYmFjayBwcmVmZXRjaDsKKwl2b2lkCSAgICpw cmVmZXRjaEFyZzsKK30JCQlJbmRleFNjYW5CYXRjaFN0YXRlOworCiAvKgogICogV2UgdXNlIHRo ZSBzYW1lIEluZGV4U2NhbkRlc2NEYXRhIHN0cnVjdHVyZSBmb3IgYm90aCBhbWdldHR1cGxlLWJh c2VkCiAgKiBhbmQgYW1nZXRiaXRtYXAtYmFzZWQgaW5kZXggc2NhbnMuICBTb21lIGZpZWxkcyBh cmUgb25seSByZWxldmFudCBpbgpAQCAtMTM4LDYgKzI4Niw4IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IFNuYXBzaG90RGF0YSAqeHNfc25hcHNob3Q7CS8qIHNu YXBzaG90IHRvIHNlZSAqLwogCWludAkJCW51bWJlck9mS2V5czsJLyogbnVtYmVyIG9mIGluZGV4 IHF1YWxpZmllciBjb25kaXRpb25zICovCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVt YmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNo U3RhdGU7CS8qIGFtZ2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAqLworCiAJc3RydWN0IFNjYW5LZXlE YXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8K IAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmluZyBv cCBkZXNjcmlwdG9ycyAqLwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3Rz IGluZGV4IHR1cGxlcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA0YTkwM2QxZWMuLmEyYjVk ZTViYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEyNjUsNyArMTI2NSw3IEBAIHN0cnVjdCBJ bmRleE9wdEluZm8KIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwog CWJvb2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJCWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBB TSBoYXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICovCisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVz IHRvIHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNv c3QgZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdl IGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRl eCBiNTIzYmNkYTguLjAwZjRjM2QwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01MSw2ICs1MSw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBDb3N0IGRpc2FibGVfY29zdDsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElN UE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X2luZGV4c2NhbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJl ZmV0Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKIGV4 dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv YnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggN2ZmNzQ2 N2U0Li4zY2E0NmI5MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5Niw4ICsyOTYsNyBA QCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXA7CiAJYW1yb3V0 aW5lLT5hbWVuZHNjYW4gPSBicmluZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5V TEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVz ZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJh bGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmluZGV4IDc4ZjdiN2Ey NC4uYzlkZTNkMTIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtODQsOCArODQsNyBA QCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwOwogCWFtcm91dGlu ZS0+YW1lbmRzY2FuID0gZ2luZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7 Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQg PSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1y b3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxl bHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggYTk2Nzk2ZDVjLi45MTBk NzM2YTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwNSw4ICsxMDUsNyBAQCBnaXN0aGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGdpc3RnZXR0 dXBsZTsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRp bmUtPmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFs bGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA1MzA2MWM4MTkuLmIz ZDdmODI1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTA0LDggKzEwNCw3IEBAIGhhc2ho YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gaGFzaGdl dHR1cGxlOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwOwogCWFtcm91 dGluZS0+YW1lbmRzY2FuID0gaGFzaGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBO VUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jl c2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwog CWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKaW5kZXggYmNiYWM4NDRiLi42YzQxYjMxMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwpAQCAtODQsNyArODQsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oUmVsYXRpb24gcmVsKQogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwKHNp emVvZihJbmRleEZldGNoSGVhcERhdGEpKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsK Kwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5VTEw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAlyZXR1cm4gJmhz Y2FuLT54c19iYXNlOwogfQpAQCAtOTQsMTAgKzk2LDE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwlpZiAoc2Nhbi0+cnMpCisJ CXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnJzKTsKKwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2Fu LT54c19jYnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nh bi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAJfQogfQogCkBAIC0xMDgsNiArMTE0LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNo X2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9lbmQoc2Nhbi0+cnMp OworCiAJcGZyZWUoaHNjYW4pOwogfQogCkBAIC0xMjQsMjMgKzEzMywzNyBAQCBoZWFwYW1faW5k ZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAKIAlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKIAotCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEq Y2FsbF9hZ2FpbikKKwkvKgorCSAqIFN3aXRjaCB0byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBkb24n dCBoYXZlIGl0IGFscmVhZHkgKHdlIGNhbiBza2lwIHRoaXMKKwkgKiBpZiB3ZSdyZSBpbiBtaWQt SE9UIGNoYWluKQorCSAqLworCWlmICghKmNhbGxfYWdhaW4gJiYgaHNjYW4tPnhzX2JsayAhPSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVj dCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9i dWYgPSBoc2Nhbi0+eHNfY2J1ZjsKKwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBu dW1iZXIgZm9yIG5leHQgdGltZSAqLworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZm ZXIoaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAotCQkJ CQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJCWlmIChCdWZmZXJJ c1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYp OwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFk eSBvbiB0aGlzIHBhZ2UKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFt IHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0 aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCiAJCSAqLwotCQlp ZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhz Y2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOworCQlpZiAoc2Nhbi0+cnMpCisJCQlo c2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHNjYW4tPnJzLCBOVUxMKTsK KwkJZWxzZQorCQkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJl bCwgaHNjYW4tPnhzX2Jsayk7CisKKwkJLyoKKwkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBp bm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKKwkJICovCisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNj YW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCisJLyogQXNzZXJ0IHRoYXQg dGhlIFRJRCdzIGJsb2NrIG51bWJlcidzIGJ1ZmZlciBpcyBub3cgcGlubmVkICovCisJQXNzZXJ0 KEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tO dW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19ibGspOworCiAJLyogT2J0YWluIHNo YXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICovCiAJ TG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9oZWFw X3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5h bS5jCmluZGV4IDBjYjI3YWYxMy4uNTVlNjBjOWZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0u YwpAQCAtODksNiArODksNyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJl bGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJ bnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4t Pm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJi eXM7CisJc2Nhbi0+YmF0Y2hTdGF0ZSA9IE5VTEw7CS8qIHVzZWQgYnkgYW1nZXRiYXRjaCBpbmRl eCBBTXMgKi8KIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQg aXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhhbS5jCmluZGV4IDg2ZDExZjRlYy4uMjc0Njg3Y2MxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5j bHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgkJLyogWFhY IGZvciBNYXhUSURzUGVyQlRyZWVQYWdlIChzaG91bGQgcmVtb3ZlKSAqLwogI2luY2x1ZGUgImFj Y2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3JlbHNjYW4uaCIKQEAgLTUxLDkgKzUyLDExIEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9pbmRleC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgIm5vZGVz L2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3J1 bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9z eXNjYWNoZS5oIgpAQCAtMTA3LDggKzExMCwxNDYgQEAgZG8geyBcCiBzdGF0aWMgSW5kZXhTY2Fu RGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJ CQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90LAog CQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAp Oworc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworc3RhdGljIEl0ZW1Qb2ludGVyIGlu ZGV4X3JldGFpbF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9yZWxhdGlvbl9raW5kKFJl bGF0aW9uIHIpOwogCisvKiBpbmRleCBiYXRjaGluZyAqLworc3RhdGljIHZvaWQgaW5kZXhfYmF0 Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGljIHZvaWQgaW5kZXhfYmF0Y2hfcmVz ZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGluZGV4 X2JhdGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGljIGJvb2wgaW5kZXhfYmF0Y2hf Z2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKK3N0 YXRpYyB2b2lkIGluZGV4X2JhdGNoX2ZyZWUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CisKK3N0YXRpYyBCbG9ja051bWJlciBpbmRleF9zY2FuX3N0cmVhbV9yZWFk X25leHQoUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkJCQkgICB2b2lkICpjYWxsYmFja19w cml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCSAgIHZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CisKK3N0 YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGluZGV4X2JhdGNoX3Bvc19hZHZh bmNlKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNo UG9zICpwb3MsCisJCQkJCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Citz dGF0aWMgdm9pZCBpbmRleF9iYXRjaF9wb3NfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaFBvcyAqcG9zKTsKK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX2tpbGxfaXRlbShJ bmRleFNjYW5EZXNjIHNjYW4pOworCitzdGF0aWMgdm9pZCBBc3NlcnRDaGVja0JhdGNoUG9zVmFs aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaFBvcyAqcG9zKTsKK3N0YXRpYyB2 b2lkIEFzc2VydENoZWNrQmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCk7CitzdGF0aWMgdm9pZCBBc3NlcnRDaGVja0JhdGNoZXMoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKKworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2Ug Y2FuIGtlZXAgaW4gbWVtb3J5LgorICoKKyAqIFRoZSB2YWx1ZSA2NCB2YWx1ZSBpcyBhcmJpdHJh cnksIGl0J3MgYWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IgcGFnZXMKKyAqICg1MTJrQiBmb3Ig cGFnZXMsIGFuZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkg bmVlZAorICogdGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVh ZCBzdHJlYW0gbG9va3MgYWhlYWQganVzdAorICogZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3Ms IGFkanVzdGluZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dCB1bHRpbWF0ZWx5CisgKiB0aGUgbnVt YmVyIG9mIGZ1dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCisgKgorICogSW4gbW9zdCBjYXNl cyBhbiBpbmRleCBsZWFmIHBhZ2UgaGFzIG1hbnkgKGh1bmRyZWRzKSBpbmRleCB0dXBsZXMsIGFu ZAorICogaXQncyBlbm91Z2ggdG8gcmVhZCBvbmUgb3IgbWF5YmUgdHdvIGxlYWYgcGFnZXMgYWhl YWQgdG8gc2F0aXNmeSB0aGUKKyAqIGRpc3RhbmNlLgorICoKKyAqIEJ1dCB0aGVyZSBhcmUgY2Fz ZXMgd2hlcmUgdGhpcyBtYXkgbm90IHF1aXRlIHdvcmssIGZvciBleGFtcGxlOgorICoKKyAqIGEp IGJsb2F0ZWQgaW5kZXggLSBtYW55IHBhZ2VzIG9ubHkgaGF2ZSBhIHNpbmdsZSBpbmRleCBpdGVt LCBzbyB0aGF0CisgKiAgICBhY2hpZXZpbmcgdGhlIGRpc3RhbmNlIHJlcXVpcmVzIHRvbyBtYW55 IGxlYWYgcGFnZXMKKyAqCisgKiBiKSBjb3JyZWxhdGVkIGluZGV4IC0gZHVwbGljYXRlIGJsb2Nr cyBhcmUgc2tpcHBlZCAodGhlIGNhbGxiYWNrIGRvZXMgbm90CisgKiAgICBldmVuIHJldHVybiB0 aG9zZSwgdGhhbmtzIHRvIGN1cnJlbnRQcmVmZXRjaEJsb2NrIG9wdGltaXphdGlvbiksIGFuZCBh cmUKKyAqICAgIG1vc3RseSBpZ25vcmVkIGluIHRoZSBkaXN0YW5jZSBoZXVyaXN0aWNzIChyZWFk IHN0cmVhbSBkb2VzIG5vdCBldmVuIHNlZQorICogICAgdGhvc2UgVElEcywgYW5kIHRoZXJlJ3Mg bm8gSS9PIGVpdGhlcikKKyAqCisgKiBjKSBpbmRleC1vbmx5IHNjYW4gLSB0aGUgY2FsbGJhY2sg c2tpcHMgVElEcyBmcm9tIGFsbC12aXNpYmxlIGJsb2NrcyAobm90CisgKiAgICByZWFkaW5nIHRo b3NlIGlzIHRoZSB3aG9sZSBwb2ludCBvZiBpbmRleC1vbmx5IHNjYW5zKSwgYW5kIHNvIGl0J3MK KyAqICAgIGludmlzaWJsZSB0byB0aGUgZGlzdGFuY2UgLyBJTyBoZXVyaXN0aWNzIChzaW1pbGFy bHkgdG8gZHVwbGljYXRlcykKKyAqCisgKiBJbiB0aGVzZSBjYXNlcyB3ZSBtaWdodCBuZWVkIHRv IHJlYWQgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgYmF0Y2hlcyB0bworICogZmluZCB0aGUgZmly c3QgYmxvY2sgdG8gcmV0dXJuIHRvIHRoZSByZWFkIHN0cmVhbS4gSXQncyBub3QgY2xlYXIgaWYK KyAqIGxvb2tpbmcgdGhpcyBmYXIgYWhlYWQgaXMgd29ydGggaXQgLSBpdCdzIGEgbG90IG9mIHdv cmsgLyBzeW5jaHJvbm91cworICogSS9PLCBhbmQgdGhlIHF1ZXJ5IG1heSB0ZXJtaW5hdGUgYmVm b3JlIHJlYWNoaW5nIHRob3NlIFRJRHMgKGUuZy4gZHVlIHRvCisgKiBhIExJTUlUIGNsYXVzZSku CisgKgorICogQ3VycmVudGx5LCB0aGVyZSdzIG5vIHdheSB0byAicGF1c2UiIGEgcmVhZCBzdHJl YW0gLSBzdG9wIGxvb2tpbmcgYWhlYWQKKyAqIGZvciBhIHdoaWxlLCBidXQgdGhlbiByZXN1bWUg dGhlIHdvcmsgd2hlbiBhIGJhdGNoIGdldHMgZnJlZWQuIFRvIHNpbXVsYXRlCisgKiB0aGlzLCB0 aGUgcmVhZCBzdHJlYW0gaXMgdGVybWluYXRlZCAoYXMgaWYgdGhlcmUgd2VyZSBubyBtb3JlIGRh dGEpLCBhbmQKKyAqIHRoZW4gcmVzZXQgYWZ0ZXIgZHJhaW5pbmcgYWxsIHRoZSBxdWV1ZWQgYmxv Y2tzIGluIG9yZGVyIHRvIHJlc3VtZSB3b3JrLgorICogVGhpcyB3b3JrcywgYnV0IGl0ICJzdGFs bHMiIHRoZSBJL08gcXVldWUuIElmIGl0IGhhcHBlbnMgdmVyeSBvZnRlbiwgaXQKKyAqIGNhbiBi ZSBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KKworICogWFhYIE1heWJlIDY0IGlz IHRvbyBoaWdoPyBJdCBhbHNvIGRlZmluZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG92ZXJoZWFk CisgKiBhbGxvd2VkLiBJbiB0aGUgd29yc3QgY2FzZSwgcmVhZGluZyBhIHNpbmdsZSByb3cgbWln aHQgdHJpZ2dlciByZWFkaW5nIHRoaXMKKyAqIG1hbnkgbGVhZiBwYWdlcyAoZS5nLiB3aXRoIElP UywgaWYgbW9zdCBwYWdlcyBhcmUgYWxsLXZpc2libGUpLiBXaGljaCBtaWdodAorICogYmUgYW4g aXNzdWUgd2l0aCBMSU1JVCBxdWVyaWVzLCB3aGVuIHdlIGFjdHVhbGx5IHdvbid0IGdldCB0aGF0 IGZhci4KKyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCTY0CisKKy8qCisgKiBU aHJlc2hvbGRzIGNvbnRyb2xsaW5nIHdoZW4gd2UgY2FuY2VsIHVzZSBvZiBhIHJlYWQgc3RyZWFt IHRvIGRvCisgKiBwcmVmZXRjaGluZworICovCisjZGVmaW5lIElOREVYX1NDQU5fTUlOX0RJU1RB TkNFX05CQVRDSEVTCTIwCisjZGVmaW5lIElOREVYX1NDQU5fTUlOX1RVUExFX0RJU1RBTkNFCQk3 CisKKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSBcCisJKChzY2FuKS0+YmF0 Y2hTdGF0ZS0+bmV4dEJhdGNoIC0gKHNjYW4pLT5iYXRjaFN0YXRlLT5maXJzdEJhdGNoKQorCisv KiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRleD8gKi8K Ky8qIFhYWCBzaG91bGRuJ3QgdGhpcyBhbHNvIGNvbXBhcmUgZmlyc3RCYXRjaD8gbWF5YmUgdGhl IGJhdGNoIHdhcyBmcmVlZD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQoc2Nh biwgaWR4KSBcCisJKChpZHgpIDwgKHNjYW4pLT5iYXRjaFN0YXRlLT5uZXh0QmF0Y2gpCisKKy8q IEhhdmUgd2UgbG9hZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPyAqLworI2RlZmlu ZSBJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikgXAorCShJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pID09IHNjYW4tPmJhdGNoU3RhdGUtPm1heEJhdGNoZXMpCisKKy8qIFJldHVybiBiYXRj aCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LiAqLworLyogWFhYIFNob3VsZCB0aGlzIGhhdmUgYW4g YXNzZXJ0IHRvIGVuZm9yY2UgdGhlIGJhdGNoIGlzIGxvYWRlZD8gTWF5YmUgdGhlCisgKiBpbmRl eCBpcyB0b28gZmFyIGJhY2ssIGJ1dCB0aGVyZSBoYXBwZW5zIHRvIGJlIGEgYmF0Y2ggaW4gdGhl IHJpZ2h0IHNsb3Q/CisgKiBDb3VsZCBlYXNpbHkgaGFwcGVuIGlmIHdlIGhhdmUgdG8ga2VlcCBt YW55IGJhdGNoZXMgYXJvdW5kLgorICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0goc2Nhbiwg aWR4KQlcCisJCSgoc2NhbiktPmJhdGNoU3RhdGUtPmJhdGNoZXNbKGlkeCkgJSBJTkRFWF9TQ0FO X01BWF9CQVRDSEVTXSkKKworLyogSXMgdGhlIHBvc2l0aW9uIGludmFsaWQvdW5kZWZpbmVkPyAq LworI2RlZmluZSBJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykgXAorCQkoKChwb3MpLT5iYXRj aCA9PSAtMSkgJiYgKChwb3MpLT5pbmRleCA9PSAtMSkpCisKKyNpZmRlZiBJTkRFWEFNX0RFQlVH CisjZGVmaW5lIERFQlVHX0xPRyguLi4pIGVsb2coQW1SZWd1bGFyQmFja2VuZFByb2Nlc3MoKSA/ IE5PVElDRSA6IERFQlVHMiwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBERUJVR19MT0co Li4uKQorI2VuZGlmCisKKy8qIGRlYnVnOiBwcmludCBpbmZvIGFib3V0IGN1cnJlbnQgYmF0Y2hl cyAqLworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNoX3ByaW50KGNvbnN0IGNoYXIgKmxhYmVsLCBJ bmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgSU5ERVhBTV9ERUJVRworCUluZGV4U2NhbkJh dGNoU3RhdGUgKmJhdGNoZXMgPSBzY2FuLT5iYXRjaFN0YXRlOworCisJaWYgKCFzY2FuLT5iYXRj aFN0YXRlKQorCQlyZXR1cm47CisKKwlpZiAoIUFtUmVndWxhckJhY2tlbmRQcm9jZXNzKCkpCisJ CXJldHVybjsKKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24oc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJ CXJldHVybjsKKworCURFQlVHX0xPRygiJXM6IGJhdGNoZXMgZmlyc3RCYXRjaCAlZCBuZXh0QmF0 Y2ggJWQgbWF4QmF0Y2hlcyAlZCIsCisJCQkgIGxhYmVsLAorCQkJICBiYXRjaGVzLT5maXJzdEJh dGNoLCBiYXRjaGVzLT5uZXh0QmF0Y2gsIGJhdGNoZXMtPm1heEJhdGNoZXMpOworCisJZm9yIChp bnQgaSA9IGJhdGNoZXMtPmZpcnN0QmF0Y2g7IGkgPCBiYXRjaGVzLT5uZXh0QmF0Y2g7IGkrKykK Kwl7CisJCUluZGV4U2NhbkJhdGNoRGF0YSAqYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4s IGkpOworCQlCVFNjYW5Qb3MJcG9zID0gKEJUU2NhblBvcykgYmF0Y2gtPnBvczsKKworCQlERUJV R19MT0coIiAgICBiYXRjaCAlZCBjdXJyUGFnZSAldSAlcCBmaXJzdCAlZCBsYXN0ICVkIGtpbGxl ZCAlZCIsCisJCQkJICBpLCBwb3MtPmN1cnJQYWdlLCBiYXRjaCwgYmF0Y2gtPmZpcnN0SXRlbSwg YmF0Y2gtPmxhc3RJdGVtLAorCQkJCSAgYmF0Y2gtPm51bUtpbGxlZCk7CisJfQorI2VuZGlmCit9 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqCQkJCSAgIGluZGV4XyBpbnRlcmZhY2UgZnVuY3Rpb25zCkBAIC0y ODMsNiArNDI0LDkgQEAgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlz Y2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVt ZW50OwogCisJaWYgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp CisJCWluZGV4X2JhdGNoX2luaXQoc2Nhbik7CisKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4 IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbik7CiAKQEAgLTM4MCw2ICs1MjQsMTIgQEAgaW5kZXhf cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFs c2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAK KwkvKgorCSAqIFJlc2V0IHRoZSBiYXRjaGluZy4gVGhpcyBtYWtlcyBpdCBsb29rIGxpa2UgdGhl cmUgYXJlIG5vIGJhdGNoZXMsCisJICogZGlzY2FyZHMgcmVhZHMgYWxyZWFkeSBzY2hlZHVsZWQg d2l0aGluIHRoZSByZWFkIHN0cmVhbSwgZXRjLgorCSAqLworCWluZGV4X2JhdGNoX3Jlc2V0KHNj YW4sIHRydWUpOworCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNj YW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKIH0KQEAg LTM5NCw2ICs1NDQsOSBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FO X0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4pOwogCisJLyogQ2xlYW51 cCBiYXRjaGluZywgc28gdGhhdCB0aGUgQU0gY2FuIHJlbGVhc2UgcGlucyBhbmQgc28gb24uICov CisJaW5kZXhfYmF0Y2hfZW5kKHNjYW4pOworCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2Ug YnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQogCXsKQEAgLTQyMSwxMCArNTc0LDQzIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQogdm9pZAogaW5kZXhfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0JU0NB Tl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1tYXJrcG9zKTsKKwlJbmRleFNjYW5C YXRjaFN0YXRlICpiYXRjaFN0YXRlID0gc2Nhbi0+YmF0Y2hTdGF0ZTsKKwlJbmRleFNjYW5CYXRj aFBvcyAqbWFya1BvcyA9ICZiYXRjaFN0YXRlLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoRGF0 YSAqbWFya0JhdGNoID0gYmF0Y2hTdGF0ZS0+bWFya0JhdGNoOwogCi0Jc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKKwlTQ0FOX0NIRUNLUzsKKworCS8qCisJ ICogRklYTUUgdGhpcyBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlcmUgYWN0dWFsbHkgaXMgYSBi YXRjaCBzdGF0ZS4gRm9yCisJICogbm93IGl0IHdvcmtzIHRoZSBvbmx5IEFNIHdpdGggbWFyay9y ZXN0b3JlIHN1cHBvcnQgaXMgYnRyZWUsIGFuZCB0aGF0CisJICogaGFzIGJhdGNoaW5nLiBCdXQg d2Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoYXQsIHJpZ2h0PworCSAqLworCisJLyoKKwkgKiBGcmVl IHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpLCBidXQgb25seSBpZiB0aGUgYmF0Y2gg aXMgbm8KKwkgKiBsb25nZXIgdmFsaWQgKGluIHRoZSBjdXJyZW50IGZpcnN0L25leHQgcmFuZ2Up LiBUaGlzIG1lYW5zIHRoYXQgaWYKKwkgKiB3ZSdyZSBtYXJraW5nIHRoZSBzYW1lIGJhdGNoIChk aWZmZXJlbnQgaXRlbSksIHdlIGRvbid0IHJlYWxseSBkbworCSAqIGFueXRoaW5nLgorCSAqCisJ ICogWFhYIFNob3VsZCBoYXZlIHNvbWUgbWFjcm8gZm9yIHRoaXMgY2hlY2ssIEkgZ3Vlc3MuCisJ ICovCisJaWYgKG1hcmtCYXRjaCAhPSBOVUxMICYmIChtYXJrUG9zLT5iYXRjaCA8IGJhdGNoU3Rh dGUtPmZpcnN0QmF0Y2ggfHwKKwkJCQkJCQkgIG1hcmtQb3MtPmJhdGNoID49IGJhdGNoU3RhdGUt Pm5leHRCYXRjaCkpCisJeworCQliYXRjaFN0YXRlLT5tYXJrQmF0Y2ggPSBOVUxMOworCQlpbmRl eF9iYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJLyoganVzdCBjb3B5IHRoZSBy ZWFkIHBvc2l0aW9uICh3aGljaCBoYXMgdG8gYmUgdmFsaWQpICovCisJYmF0Y2hTdGF0ZS0+bWFy a1BvcyA9IGJhdGNoU3RhdGUtPnJlYWRQb3M7CisJYmF0Y2hTdGF0ZS0+bWFya0JhdGNoID0gSU5E RVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaFN0YXRlLT5tYXJrUG9zLmJhdGNoKTsKKworCS8qCisJ ICogRklYTUUgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJhdGNoIGRvZXMgbm90IGdldCBmcmVl ZCBkdXJpbmcgdGhlCisJICogcmVndWxhciBhZHZhbmNlcy4KKwkgKi8KKworCUFzc2VydENoZWNr QmF0Y2hQb3NWYWxpZChzY2FuLCAmYmF0Y2hTdGF0ZS0+bWFya1Bvcyk7CiB9CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0KQEAgLTQ0NSwxOSArNjMxLDYwIEBAIGluZGV4X21hcmtwb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKQogdm9pZAogaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewor CUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGU7CisJSW5kZXhTY2FuQmF0Y2hQb3MgKm1h cmtQb3M7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICptYXJrQmF0Y2g7CisKIAlBc3NlcnQoSXNNVkND U25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1ND QU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0 Y2gpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0JLyogcmVsZWFzZSBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKgor CSAqIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vz c2VzCisJICoKKwkgKiBYWFg6IEN1cnJlbnRseSwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyByZW1l bWJlcmVkIGFjcm9zcyBhbnkKKwkgKiByZWFkX3N0cmVhbV9yZXNldCBjYWxscyAodG8gd29yayBh cm91bmQgdGhlIHNjYW4tPmJhdGNoU3RhdGUtPnJlc2V0CisJICogYmVoYXZpb3Igb2YgcmVzZXR0 aW5nIHRoZSBzdHJlYW0gdG8gZGVhbCB3aXRoIHJ1bm5pbmcgb3V0IG9mIGJhdGNoZXMpLgorCSAq IFdlIHByb2JhYmx5IF9zaG91bGRfIGJlIGZvcmdldHRpbmcgdGhlIGRpc3RhbmNlIHdoZW4gd2Ug cmVzZXQgdGhlCisJICogc3RyZWFtIGhlcmUgKHRocm91Z2ggb3VyIHRhYmxlX2luZGV4X2ZldGNo X3Jlc2V0IGNhbGwpLCB0aG91Z2guCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJ dGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAogCXNjYW4tPmtp bGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBf Y29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJl c3RycG9zKHNjYW4pOworCS8qCisJICogRklYTUUgdGhpcyBzaG91bGQgcHJvYmFibHkgY2hlY2sg dGhlcmUgYWN0dWFsbHkgaXMgYSBiYXRjaCBzdGF0ZS4gRm9yCisJICogbm93IGl0IHdvcmtzIHRo ZSBvbmx5IEFNIHdpdGggbWFyay9yZXN0b3JlIHN1cHBvcnQgaXMgYnRyZWUsIGFuZCB0aGF0CisJ ICogaGFzIGJhdGNoaW5nLiBCdXQgd2Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoYXQsIHJpZ2h0Pwor CSAqLworCisJYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisJbWFya1BvcyA9ICZiYXRj aFN0YXRlLT5tYXJrUG9zOworCW1hcmtCYXRjaCA9IHNjYW4tPmJhdGNoU3RhdGUtPm1hcmtCYXRj aDsKKworCS8qCisJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGlu dmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKwkgKiB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tz IHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBSZXNldCB0aGUgYmF0 Y2hpbmcgc3RhdGUsIGV4Y2VwdCBmb3IgdGhlIG1hcmtlZCBiYXRjaCwgYW5kIG1ha2UgaXQgbG9v aworCSAqIGxpa2Ugd2UgaGF2ZSBhIHNpbmdsZSBiYXRjaCAtLSB0aGUgbWFya2VkIG9uZS4KKwkg Ki8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCBmYWxzZSk7CisKKwliYXRjaFN0YXRlLT5tYXJr UG9zID0gKm1hcmtQb3M7CisJYmF0Y2hTdGF0ZS0+cmVhZFBvcyA9ICptYXJrUG9zOworCWJhdGNo U3RhdGUtPmZpcnN0QmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwliYXRjaFN0YXRlLT5uZXh0QmF0 Y2ggPSAoYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCArIDEpOworCisJSU5ERVhfU0NBTl9CQVRDSChz Y2FuLCBiYXRjaFN0YXRlLT5tYXJrUG9zLmJhdGNoKSA9IG1hcmtCYXRjaDsKKwliYXRjaFN0YXRl LT5tYXJrQmF0Y2ggPSBtYXJrQmF0Y2g7CS8qIGFsc28gcmVtZW1iZXIgdGhpcyAqLwogfQogCiAv KgpAQCAtNTc5LDYgKzgwNiwxNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAorCS8qCisJICogUmVzZXQgdGhlIGJhdGNoaW5nLiBU aGlzIG1ha2VzIGl0IGxvb2sgbGlrZSB0aGVyZSBhcmUgbm8gYmF0Y2hlcywKKwkgKiBkaXNjYXJk cyByZWFkcyBhbHJlYWR5IHNjaGVkdWxlZCB0byB0aGUgcmVhZCBzdHJlYW0sIGV0Yy4KKwkgKgor CSAqIFhYWCBXZSBkbyB0aGlzIGJlZm9yZSBjYWxsaW5nIGFtcGFyYWxsZWxyZXNjYW4sIHNvIHRo YXQgaXQgY291bGQKKwkgKiByZWluaXRpYWxpemUgZXZlcnl0aGluZyAodGhpcyBwcm9iYWJseSBk b2VzIG5vdCBtYXR0ZXIgdmVyeSBtdWNoLCBub3cKKwkgKiB0aGF0IHdlJ3ZlIG1vdmVkIGFsbCB0 aGUgYmF0Y2hpbmcgbG9naWMgdG8gaW5kZXhhbS5jLCBpdCB3YXMgbW9yZQorCSAqIGltcG9ydGFu dCB3aGVuIHRoZSBpbmRleCBBTSB3YXMgcmVzcG9uc2libGUgZm9yIG1vcmUgb2YgaXQpLgorCSAq LworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIHRydWUpOworCiAJLyogYW1wYXJhbGxlbHJlc2Nh biBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwogCWlm IChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBOVUxM KQogCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbihzY2Fu KTsKQEAgLTYxNCw2ICs4NTIsOSBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24g aGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hv dDsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAorCWlmIChpbmRleHJlbC0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hfaW5pdChzY2FuKTsKKwog CS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+ eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CiAKQEAgLTYz MCwxNCArODcxLDI4NiBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJl bCwgUmVsYXRpb24gaW5kZXhyZWwsCiBJdGVtUG9pbnRlcgogaW5kZXhfZ2V0bmV4dF90aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlib29sCQlmb3Vu ZDsKLQogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0dHVwbGUpOwog CiAJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3Ig cmVnaXN0ZXJlZCAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7 CiAKKwkvKgorCSAqIEluZGV4IEFNcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVz dCBwcm92aWRlIGV4YWN0bHkgb25lIG9mCisJICogZWl0aGVyIHRoZSBhbWdldGJhdGNoIG9yIGFt Z2V0dHVwbGUgY2FsbGJhY2tzCisJICovCisJQXNzZXJ0KCEoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCAmJgorCQkJIHNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpKTsKKworCWlmIChzY2FuLT5iYXRjaFN0YXRl ICE9IE5VTEwpCisJCXJldHVybiBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rp b24pOworCWVsc2UKKwkJcmV0dXJuIGluZGV4X3JldGFpbF9nZXRuZXh0X3RpZChzY2FuLCBkaXJl Y3Rpb24pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfZ2V0bmV4dF9iYXRj aF90aWQgLSBhbWJhdGNoIGluZGV4X2dldG5leHRfdGlkIGltcGxlbWVudGF0aW9uCisgKgorICog SWYgd2UgYWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCwgd2UgcmVsZWFzZSB0aGUgcHJldmlvdXMg b25lICh1bmxlc3MgaXQncworICogdHJhY2tlZCBmb3IgbWFyay9yZXN0b3JlKS4KKyAqCisgKiBJ ZiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcywgd2UgcmVsZWFzZSBhbGwgYmF0Y2hlcyBleGNl cHQgdGhlIGN1cnJlbnQKKyAqIG9uZSAocGVyIHJlYWRQb3MpLCB0byBtYWtlIGl0IGxvb2sgaXQn cyB0aGUgb25seSBiYXRjaCB3ZSBsb2FkZWQuCisgKgorICogUmV0dXJucyB0aGUgZmlyc3QvbmV4 dCBUSUQsIG9yIE5VTEwgaWYgbm8gbW9yZSBpdGVtcy4KKyAqCisgKiBGSVhNRSBUaGlzIG9ubHkg c2V0cyB4c19oZWFwdGlkIGFuZCB4c19pdHVwIChpZiByZXF1ZXN0ZWQpLiBOb3Qgc3VyZSBpZgor ICogd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB4c19oaXR1cC4gU2hvdWxkIHRoaXMgc2V0 IHhzX2hpdHVwPworICoKKyAqIFhYWCBNYXliZSBpZiB3ZSBhZHZhbmNlIHRoZSBwb3NpdGlvbiB0 byB0aGUgbmV4dCBiYXRjaCwgd2UgY291bGQga2VlcCB0aGUKKyAqIGJhdGNoIGZvciBhIGJpdCBt b3JlLCBpbiBjYXNlIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIChhcyBsb25nIGFzIGl0Cisg KiBmaXRzIGludG8gbWF4QmF0Y2hlcyk/IEJ1dCBtYXliZSB0aGF0J3MgdW5uZWNlc3NhcnkgY29t cGxleGl0eSBmb3IgdG9vCisgKiBsaXR0bGUgZ2Fpbiwgd2UnZCBuZWVkIHRvIGJlIGNhcmVmdWwg YWJvdXQgcmVsZWFzaW5nIHRoZSBiYXRjaGVzIGxhemlseS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0K KyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitpbmRleF9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUluZGV4U2NhbkJhdGNo U3RhdGUgKmJhdGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCUluZGV4U2NhbkJhdGNoUG9z ICpyZWFkUG9zOworCisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CisKKwkvKiBz aG91bGRuJ3QgZ2V0IGhlcmUgd2l0aG91dCBiYXRjaGluZyAqLworCUFzc2VydENoZWNrQmF0Y2hl cyhzY2FuKTsKKworCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KKwlp ZiAoYmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQli YXRjaFN0YXRlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwkvKgorCSAqIEhhbmRsZSBjYW5j ZWxsaW5nIHRoZSB1c2Ugb2YgdGhlIHJlYWQgc3RyZWFtIGZvciBwcmVmZXRjaGluZworCSAqLwor CWVsc2UgaWYgKHVubGlrZWx5KGJhdGNoU3RhdGUtPmRpc2FibGVkICYmIHNjYW4tPnhzX2hlYXBm ZXRjaC0+cnMpKQorCXsKKwkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZiYXRjaFN0YXRl LT5zdHJlYW1Qb3MpOworCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+ cnMpOworCQlzY2FuLT54c19oZWFwZmV0Y2gtPnJzID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIEhh bmRsZSBjaGFuZ2Ugb2Ygc2NhbiBkaXJlY3Rpb24gKHJlc2V0IHN0cmVhbSwgLi4uKS4KKwkgKgor CSAqIFJlbGVhc2UgZnV0dXJlIGJhdGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtl IHRoZSBjdXJyZW50IGJhdGNoCisJICogaXMgdGhlIG9ubHkgb25lIHdlIGxvYWRlZC4gQWxzbyBy ZXNldCB0aGUgc3RyZWFtIHBvc2l0aW9uLCBhcyBpZiB3ZSBhcmUKKwkgKiBqdXN0IHN0YXJ0aW5n IHRoZSBzY2FuLgorCSAqLworCWVsc2UgaWYgKHVubGlrZWx5KGJhdGNoU3RhdGUtPmRpcmVjdGlv biAhPSBkaXJlY3Rpb24pKQorCXsKKwkJLyogcmVsZWFzZSAiZnV0dXJlIiBiYXRjaGVzIGluIHRo ZSB3cm9uZyBkaXJlY3Rpb24gKi8KKwkJd2hpbGUgKGJhdGNoU3RhdGUtPm5leHRCYXRjaCA+IGJh dGNoU3RhdGUtPmZpcnN0QmF0Y2ggKyAxKQorCQl7CisJCQlJbmRleFNjYW5CYXRjaCBmYmF0Y2g7 CisKKwkJCWJhdGNoU3RhdGUtPm5leHRCYXRjaC0tOworCQkJZmJhdGNoID0gSU5ERVhfU0NBTl9C QVRDSChzY2FuLCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpOworCQkJaW5kZXhfYmF0Y2hfZnJlZShz Y2FuLCBmYmF0Y2gpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG5ldyBkaXJlY3Rp b24sIGFuZCBtYWtlIHN1cmUgdGhlIHNjYW4gaXMgbm90IG1hcmtlZCBhcworCQkgKiAiZmluaXNo ZWQiICh3ZSBtaWdodCBoYXZlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCBiYXRjaCwgYnV0IG5vdyB3 ZQorCQkgKiBuZWVkIHRvIHN0YXJ0IG92ZXIpLiBEbyB0aGlzIGJlZm9yZSByZXNldHRpbmcgdGhl IHN0cmVhbSAtIGl0CisJCSAqIHNob3VsZCBub3QgaW52b2tlIHRoZSBjYWxsYmFjayB1bnRpbCB0 aGUgZmlyc3QgcmVhZCwgYnV0IGl0IG1heQorCQkgKiBzZWVtIGEgYml0IGNvbmZ1c2luZyBvdGhl cndpc2UuCisJCSAqLworCQliYXRjaFN0YXRlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJCWJh dGNoU3RhdGUtPmZpbmlzaGVkID0gZmFsc2U7CisJCWJhdGNoU3RhdGUtPmN1cnJlbnRQcmVmZXRj aEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJCWluZGV4X2JhdGNoX3Bvc19yZXNldChz Y2FuLCAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zKTsKKwkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaC0+ cnMpCisJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwl9CisK KwkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24sIGZvciBjb252ZW5pZW5jZSAqLwor CXJlYWRQb3MgPSAmYmF0Y2hTdGF0ZS0+cmVhZFBvczsKKworCURFQlVHX0xPRygiaW5kZXhfYmF0 Y2hfZ2V0bmV4dF90aWQgcmVhZFBvcyAlZCAlZCBkaXJlY3Rpb24gJWQiLAorCQkJICByZWFkUG9z LT5iYXRjaCwgcmVhZFBvcy0+aW5kZXgsIGRpcmVjdGlvbik7CisKKwkvKgorCSAqIFRyeSBhZHZh bmNpbmcgdGhlIGJhdGNoIHBvc2l0aW9uLiBJZiB0aGF0IGRvZXNuJ3Qgc3VjY2VlZCwgaXQgbWVh bnMgd2UKKwkgKiBkb24ndCBoYXZlIG1vcmUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIGFu ZCB0aGVyZSdzIG5vIGZ1dHVyZSBiYXRjaAorCSAqIGxvYWRlZC4gU28gdHJ5IGxvYWRpbmcgYW5v dGhlciBiYXRjaCwgYW5kIG1heWJlIHJldHJ5LgorCSAqCisJICogRklYTUUgVGhpcyBsb29wIHNo b3VsZG4ndCBoYXBwZW4gbW9yZSB0aGFuIHR3aWNlLiBNYXliZSB3ZSBzaG91bGQgaGF2ZQorCSAq IHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IGluZmluaXRlIGxvb3BzPyBUbyBkZXRlY3QgY2FzZXMg d2hlbiB0aGUKKwkgKiBhZHZhbmNlL2dldG5leHQgZnVuY3Rpb25zIGdldCB0byBkaXNhZ3JlZT8K KwkgKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJCS8qCisJCSAqIElmIHdlIG1hbmFnZSB0byBhZHZh bmNlIHRvIHRoZSBuZXh0IGl0ZW1zLCByZXR1cm4gaXQgYW5kIHdlJ3JlCisJCSAqIGRvbmUuIE90 aGVyd2lzZSB0cnkgbG9hZGluZyBhbm90aGVyIGJhdGNoLgorCQkgKi8KKwkJaWYgKGluZGV4X2Jh dGNoX3Bvc19hZHZhbmNlKHNjYW4sIHJlYWRQb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCUluZGV4 U2NhbkJhdGNoRGF0YSAqcmVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByZWFkUG9z LT5iYXRjaCk7CisKKwkJCS8qIHNldCB0aGUgVElEIC8gaXR1cCBmb3IgdGhlIHNjYW4gKi8KKwkJ CXNjYW4tPnhzX2hlYXB0aWQgPSByZWFkQmF0Y2gtPml0ZW1zW3JlYWRQb3MtPmluZGV4XS5oZWFw VGlkOworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQlzY2FuLT54c19pdHVwID0KKwkJ CQkJKEluZGV4VHVwbGUpIChyZWFkQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkgIHJlYWRC YXRjaC0+aXRlbXNbcmVhZFBvcy0+aW5kZXhdLnR1cGxlT2Zmc2V0KTsKKworCQkJREVCVUdfTE9H KCJyZWFkQmF0Y2ggJXAgZmlyc3QgJWQgbGFzdCAlZCByZWFkUG9zICVkLyVkIFRJRCAoJXUsJXUp IiwKKwkJCQkJICByZWFkQmF0Y2gsIHJlYWRCYXRjaC0+Zmlyc3RJdGVtLCByZWFkQmF0Y2gtPmxh c3RJdGVtLAorCQkJCQkgIHJlYWRQb3MtPmJhdGNoLCByZWFkUG9zLT5pbmRleCwKKwkJCQkJICBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZzY2FuLT54c19oZWFwdGlkKSwKKwkJCQkJICBJdGVt UG9pbnRlckdldE9mZnNldE51bWJlcigmc2Nhbi0+eHNfaGVhcHRpZCkpOworCisJCQkvKgorCQkJ ICogSWYgd2UgYWR2YW5jZWQgdG8gdGhlIG5leHQgYmF0Y2gsIHJlbGVhc2UgdGhlIGJhdGNoIHdl IG5vCisJCQkgKiBsb25nZXIgbmVlZC4gVGhlIHBvc2l0aW9ucyBpcyB0aGUgInJlYWQiIHBvc2l0 aW9uLCBhbmQgd2UgY2FuCisJCQkgKiBjb21wYXJlIGl0IHRvIGZpcnN0QmF0Y2guCisJCQkgKi8K KwkJCWlmICh1bmxpa2VseShyZWFkUG9zLT5iYXRjaCAhPSBiYXRjaFN0YXRlLT5maXJzdEJhdGNo KSkKKwkJCXsKKwkJCQlJbmRleFNjYW5CYXRjaERhdGEgKmZpcnN0QmF0Y2ggPSBJTkRFWF9TQ0FO X0JBVENIKHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJICBiYXRjaFN0YXRlLT5maXJzdEJhdGNoKTsK KworCQkJCS8qCisJCQkJICogWFhYIFdoZW4gYWR2YW5jaW5nIHJlYWRQb3MsIHRoZSBzdHJlYW1Q b3MgbWF5IGdldCBiZWhpbmQgYXMKKwkJCQkgKiB3ZSdyZSBvbmx5IGFkdmFuY2luZyBpdCB3aGVu IGFjdHVhbGx5IHJlcXVlc3RpbmcgaGVhcAorCQkJCSAqIGJsb2Nrcy4gQnV0IHdlIG1heSBub3Qg ZG8gdGhhdCBvZnRlbiBlbm91Z2ggLSBlLmcuIElPUyBtYXkKKwkJCQkgKiBub3QgbmVlZCB0byBh Y2Nlc3MgYWxsLXZpc2libGUgaGVhcCBibG9ja3MsIHNvIHRoZQorCQkJCSAqIHJlYWRfbmV4dCBj YWxsYmFjayBkb2VzIG5vdCBnZXQgaW52b2tlZCBmb3IgYSBsb25nIHRpbWUuCisJCQkJICogSXQn cyBwb3NzaWJsZSB0aGUgc3RyZWFtIGdldHMgc28gbXVjdSBiZWhpbmQgdGhlIHBvc2l0aW9uCisJ CQkJICogZ2V0cyBpbnZhbGlkLCBhcyB3ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGJhdGNoLiBCdXQg dGhhdAorCQkJCSAqIG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGhlYXAgYmxvY2tzIHVudGlsIHRo ZSBjdXJyZW50IHJlYWQKKwkJCQkgKiBwb3NpdGlvbiAtIGlmIHdlIGRpZCwgd2Ugd291bGQgbm90 IGJlIGluIHRoaXMgc2l0dWF0aW9uIChvcgorCQkJCSAqIGl0J3MgYSBzaWduIG9mIGEgYnVnLCBh cyB0aG9zZSB0d28gcGxhY2VzIGFyZSBleHBlY3RlZCB0bworCQkJCSAqIGJlIGluIHN5bmMpLiBT byBpZiB0aGUgc3RyZWFtUG9zIHN0aWxsIHBvaW50cyBhdCB0aGUgYmF0Y2gKKwkJCQkgKiB3ZSdy ZSBhYm91dCB0byBmcmVlLCBqdXN0IHJlc2V0IHRoZSBwb3NpdGlvbiAtIHdlJ2xsIHNldCBpdAor CQkJCSAqIHRvIHJlYWRQb3MgaW4gdGhlIHJlYWRfbmV4dCBjYWxsYmFjayBsYXRlci4KKwkJCQkg KgorCQkJCSAqIFhYWCBUaGlzIGNhbiBoYXBwZW4gYWZ0ZXIgdGhlIHF1ZXVlIGdldHMgZnVsbCwg d2UgInBhdXNlIgorCQkJCSAqIHRoZSBzdHJlYW0sIGFuZCB0aGVuIHJlc2V0IGl0IHRvIGNvbnRp bnVlLiBCdXQgSSB0aGluayB0aGF0CisJCQkJICoganVzdCBpbmNyZWFzZXMgdGhlIHByb2JhYmls aXR5IG9mIGhpdHRpbmcgdGhlIGlzc3VlLCBpdCdzCisJCQkJICoganVzdCBtb3JlIGNoYW5jZSB0 byB0byBub3QgYWR2YW5jZSB0aGUgc3RyZWFtUG9zLCB3aGljaAorCQkJCSAqIGRlcGVuZHMgb24g d2hlbiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGZpcnN0IGhlYXAgYmxvY2sgYWZ0ZXIKKwkJCQkgKiBj YWxsaW5nIHJlYWRfc3RyZWFtX3Jlc2V0KCkuCisJCQkJICoKKwkJCQkgKiBGSVhNRSBTaW1wbGlm eS9jbGFyaWZ5L3Nob3J0ZW4gdGhpcyBjb21tZW50LiBDYW4gaXQKKwkJCQkgKiBhY3R1YWxseSBo YXBwZW4sIGlmIHdlIG5ldmVyIHB1bGwgZnJvbSB0aGUgc3RyZWFtIGluIElPUz8KKwkJCQkgKiBX ZSBwcm9iYWJseSBkb24ndCBsb29rIGFoZWFkIGZvciB0aGUgZmlyc3QgY2FsbC4KKwkJCQkgKi8K KwkJCQlpZiAodW5saWtlbHkoYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zLmJhdGNoID09IGJhdGNoU3Rh dGUtPmZpcnN0QmF0Y2gpKQorCQkJCXsKKwkJCQkJREVCVUdfTE9HKCJpbmRleF9iYXRjaF9wb3Nf cmVzZXQgY2FsbGVkIGVhcmx5IChzdHJlYW1Qb3MuYmF0Y2ggPT0gZmlyc3RCYXRjaCkiKTsKKwkJ CQkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZiYXRjaFN0YXRlLT5zdHJlYW1Qb3MpOwor CQkJCX0KKworCQkJCURFQlVHX0xPRygiaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQgZnJlZSBmaXJz dEJhdGNoICVwIGZpcnN0QmF0Y2ggJWQgbmV4dEJhdGNoICVkIiwKKwkJCQkJCSAgZmlyc3RCYXRj aCwgYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoKTsKKworCQkJ CS8qIEZyZWUgdGhlIGZpcnN0IGJhdGNoIChleGNlcHQgd2hlbiBpdCdzIG1hcmtCYXRjaCkgKi8K KwkJCQlpbmRleF9iYXRjaF9mcmVlKHNjYW4sIGZpcnN0QmF0Y2gpOworCisJCQkJLyoKKwkJCQkg KiBJbiBhbnkgY2FzZSwgcmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByZWd1bGFyIHF1ZXVlLCBl dmVuCisJCQkJICogaWYgd2Uga2VwdCBpdCBmb3IgbWFyL3Jlc3RvcmUuCisJCQkJICovCisJCQkJ YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCsrOworCisJCQkJREVCVUdfTE9HKCJpbmRleF9iYXRjaF9n ZXRuZXh0X3RpZCBiYXRjaCBmcmVlZCBmaXJzdEJhdGNoICVkIG5leHRCYXRjaCAlZCIsCisJCQkJ CQkgIGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2gsIGJhdGNoU3RhdGUtPm5leHRCYXRjaCk7CisKKwkJ CQlpbmRleF9iYXRjaF9wcmludCgiaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQgLyBmcmVlIG9sZCBi YXRjaCIsIHNjYW4pOworCisJCQkJLyogd2UgY2FuJ3Qgc2tpcCBhbnkgYmF0Y2hlcyAqLworCQkJ CUFzc2VydChiYXRjaFN0YXRlLT5maXJzdEJhdGNoID09IHJlYWRQb3MtPmJhdGNoKTsKKwkJCX0K KworCQkJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsK KwkJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJfQorCisJCS8qCisJCSAqIFdlIGZhaWxl ZCB0byBhZHZhbmNlLCBpLmUuIHdlIHJhbiBvdXQgb2YgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVz LgorCQkgKiBTbyBpZiB3ZSBmaWxsZWQgdGhlIHF1ZXVlLCB0aGlzIGlzIGEgZ29vZCB0aW1lIHRv IHJlc2V0IHRoZSBzdHJlYW0KKwkJICogKGJlZm9yZSB3ZSB0cnkgbG9hZGluZyB0aGUgbmV4dCBi YXRjaCkuCisJCSAqLworCQlpZiAodW5saWtlbHkoYmF0Y2hTdGF0ZS0+cmVzZXQpKQorCQl7CisJ CQlERUJVR19MT0coInJlc2V0dGluZyByZWFkIHN0cmVhbSByZWFkUG9zICVkLCVkIiwKKwkJCQkJ ICByZWFkUG9zLT5iYXRjaCwgcmVhZFBvcy0+aW5kZXgpOworCisJCQliYXRjaFN0YXRlLT5yZXNl dCA9IGZhbHNlOworCQkJYmF0Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlk QmxvY2tOdW1iZXI7CisKKwkJCS8qCisJCQkgKiBOZWVkIHRvIHJlc2V0IHRoZSBzdHJlYW0gcG9z aXRpb24sIGl0IG1pZ2h0IGJlIHRvbyBmYXIgYmVoaW5kLgorCQkJICogVWx0aW1hdGVseSB3ZSB3 YW50IHRvIHNldCBpdCB0byByZWFkUG9zLCBidXQgd2UgY2FuJ3QgZG8gdGhhdAorCQkJICogeWV0 IC0gcmVhZFBvcyBzdGlsbCBwb2ludCBzYXQgdGhlIG9sZCBiYXRjaCwgc28ganVzdCByZXNldCBp dAorCQkJICogYW5kIHdlJ2xsIGluaXQgaXQgdG8gcmVhZFBvcyBsYXRlciBpbiB0aGUgY2FsbGJh Y2suCisJCQkgKi8KKwkJCWluZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmYmF0Y2hTdGF0ZS0+ c3RyZWFtUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCQkJcmVhZF9z dHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyk7CisJCX0KKworCQkvKgorCQkgKiBG YWlsZWQgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb3NpdGlvbiwgc28gdHJ5IHJlYWRpbmcgdGhlIG5l eHQgYmF0Y2guCisJCSAqIElmIHRoaXMgZmFpbHMsIHdlJ3JlIGRvbmUgLSB0aGVyZSdzIG5vdGhp bmcgbW9yZSB0byBsb2FkLgorCQkgKgorCQkgKiBNb3N0IG9mIHRoZSBiYXRjaGVzIHNob3VsZCBi ZSBsb2FkZWQgZnJvbSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciwKKwkJICogYnV0IHdlIG5lZWQg dG8gY2FsbCBpbmRleF9iYXRjaF9nZXRuZXh0IGhlcmUgdG9vLCBmb3IgdHdvIHJlYXNvbnMuCisJ CSAqIEZpcnN0LCB0aGUgcmVhZF9zdHJlYW0gb25seSBnZXRzIHdvcmtpbmcgYWZ0ZXIgd2UgdHJ5 IGZldGNoaW5nIHRoZQorCQkgKiBmaXJzdCBoZWFwIHR1cGxlLCBzbyB3ZSBuZWVkIHRvIGxvYWQg dGhlIGZpcnN0IGJhdGNoIGZyb20gaGVyZS4KKwkJICogU2Vjb25kLCB3aGlsZSBtb3N0IGJhdGNo ZXMgd2lsbCBiZSBwcmVsb2FkZWQgYnkgdGhlIHN0cmVhbSB0aGFua3MKKwkJICogdG8gcHJlZmV0 Y2hpbmcsIGl0J3MgcG9zc2libGUgdG8gc2V0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeT0wLAor CQkgKiBhbmQgaW4gdGhhdCBjYXNlIGFsbCB0aGUgYmF0Y2hlcyBnZXQgbG9hZGVkIGZyb20gaGVy ZS4KKwkJICovCisJCWlmICghaW5kZXhfYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24pKQor CQkJYnJlYWs7CisKKwkJREVCVUdfTE9HKCJsb2FkZWQgbmV4dCBiYXRjaCwgcmV0cnkgdG8gYWR2 YW5jZSBwb3NpdGlvbiIpOworCX0KKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUsIHdlIGZhaWxl ZCB0byBhZHZhbmNlIHRoZSBwb3NpdGlvbiBhbmQgdGhlcmUgYXJlIG5vIG1vcmUKKwkgKiBiYXRj aGVzLCBzbyB3ZSdyZSBkb25lLgorCSAqLworCURFQlVHX0xPRygibm8gbW9yZSBiYXRjaGVzIHRv IHByb2Nlc3MiKTsKKworCS8qCisJICogUmVzZXQgdGhlIHBvc2l0aW9uIC0gd2UgbXVzdCBub3Qg a2VlcCB0aGUgbGFzdCB2YWxpZCBwb3NpdGlvbiwgaW4gY2FzZQorCSAqIHdlIGNoYW5nZSBkaXJl Y3Rpb24gb2YgdGhlIHNjYW4gYW5kIHN0YXJ0IHNjYW5uaW5nIGFnYWluLiBJZiB3ZSBrZXB0CisJ ICogdGhlIHBvc2l0aW9uLCB3ZSdkIHNraXAgdGhlIGZpcnN0IGl0ZW0uCisJICoKKwkgKiBYWFgg VGhpcyBpcyBhIGJpdCBzdHJhbmdlLiBEbyB3ZSByZWFsbHkgbmVlZCB0byByZXNldCB0aGUgcG9z aXRpb24KKwkgKiBhZnRlciByZXR1cm5pbmcgdGhlIGxhc3QgaXRlbT8gSSB3b25kZXIgaWYgaXQg bWVhbnMgdGhlIEFQSSBpcyBub3QKKwkgKiBxdWl0ZSByaWdodC4KKwkgKi8KKwlpbmRleF9iYXRj aF9wb3NfcmVzZXQoc2NhbiwgcmVhZFBvcyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLQorICoJCWluZGV4X3JldGFpbF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUg aW5kZXhfZ2V0bmV4dF90aWQgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBmaXJz dC9uZXh0IFRJRCwgb3IgTlVMTCBpZiBubyBtb3JlIGl0ZW1zLgorICogLS0tLS0tLS0tLS0tLS0t LQorICovCitzdGF0aWMgSXRlbVBvaW50ZXIKK2luZGV4X3JldGFpbF9nZXRuZXh0X3RpZChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWJvb2wJCWZvdW5k OworCisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXR0dXBsZSk7CisKIAkvKgogCSAqIFRoZSBB TSdzIGFtZ2V0dHVwbGUgcHJvYyBmaW5kcyB0aGUgbmV4dCBpbmRleCBlbnRyeSBtYXRjaGluZyB0 aGUgc2NhbgogCSAqIGtleXMsIGFuZCBwdXRzIHRoZSBUSUQgaW50byBzY2FuLT54c19oZWFwdGlk LiAgSXQgc2hvdWxkIGFsc28gc2V0CkBAIC03MDQsOSArMTIxNywxOCBAQCBpbmRleF9mZXRjaF9o ZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJICogYW1nZXR0 dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVu IGluCiAJICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAg U2VlIGNvbW1lbnRzIGluCiAJICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKgorCSAqIFhY WCBGb3Igc2NhbnMgdXNpbmcgYmF0Y2hpbmcsIHJlY29yZCB0aGUgZmxhZyBpbiB0aGUgYmF0Y2gg KHdlIHdpbGwKKwkgKiBwYXNzIGl0IHRvIHRoZSBBTSBsYXRlciwgd2hlbiBmcmVlaW5nIGl0KS4g T3RoZXJ3aXNlIGp1c3QgcGFzcyBpdCB0bworCSAqIHRoZSBBTSB1c2luZyB0aGUga2lsbF9wcmlv cl90dXBsZSBmaWVsZC4KIAkgKi8KIAlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkK LQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOworCXsKKwkJaWYgKHNjYW4tPmJh dGNoU3RhdGUgPT0gTlVMTCkKKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsK KwkJZWxzZSBpZiAoYWxsX2RlYWQpCisJCQlpbmRleF9iYXRjaF9raWxsX2l0ZW0oc2Nhbik7CisJ fQogCiAJcmV0dXJuIGZvdW5kOwogfQpAQCAtMTA4OSwzICsxNjExLDc4OSBAQCBpbmRleF9vcGNs YXNzX29wdGlvbnMoUmVsYXRpb24gaW5kcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgRGF0dW0gYXR0 b3B0aW9ucywKIAogCXJldHVybiBidWlsZF9sb2NhbF9yZWxvcHRpb25zKCZyZWxvcHRzLCBhdHRv cHRpb25zLCB2YWxpZGF0ZSk7CiB9CisKKy8qCisgKiBDaGVjayB0aGF0IGEgcG9zaXRpb24gKGJh dGNoLGl0ZW0pIGlzIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0aGUgYmF0Y2hlcyB3ZQorICogaGF2 ZSBjdXJyZW50bHkgbG9hZGVkLgorICoKKyAqIFhYWCBUaGUgIm1hcmtlZCIgYmF0Y2ggaXMgYW4g ZXhjZXB0aW9uLiBUaGUgbWFya2VkIGJhdGNoIG1heSBnZXQgb3V0c2lkZQorICogdGhlIHJhbmdl IG9mIGN1cnJlbnQgYmF0Y2hlcywgc28gbWFrZSBzdXJlIHRvIG5ldmVyIGNoZWNrIHRoZSBwb3Np dGlvbgorICogZm9yIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0JhdGNoUG9z VmFsaWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaFBvcyAqcG9zKQoreworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlJbmRleFNjYW5CYXRjaFN0YXRlICpiYXRjaFN0YXRl ID0gc2Nhbi0+YmF0Y2hTdGF0ZTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcG9zaXRpb24gaXMgdmFs aWQgZm9yIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCUFzc2VydChwb3MtPmJhdGNoID49 IGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2gpOworCUFzc2VydChwb3MtPmJhdGNoIDwgYmF0Y2hTdGF0 ZS0+bmV4dEJhdGNoKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hlY2sgYSBzaW5nbGUgYmF0Y2gg aXMgdmFsaWQuCisgKi8KK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0JhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCS8qIHRoZXJlIG11c3QgYmUgdmFsaWQgcmFuZ2Ugb2YgaXRlbXMgKi8KKwlBc3NlcnQo YmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCUFzc2VydChiYXRjaC0+Zmly c3RJdGVtID49IDApOworCisJLyogd2Ugc2hvdWxkIGhhdmUgaXRlbXMgKGJ1ZmZlciBhbmQgcG9p bnRlcnMpICovCisJQXNzZXJ0KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsKKworCS8qCisJICogVGhl IG51bWJlciBvZiBraWxsZWQgaXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5kIHRoZXJlIG11c3QgYmUg YW4gYXJyYXkgb2YKKwkgKiBpbmRleGVzIGlmIHRoZXJlIGFyZSBpdGVtcy4KKwkgKi8KKwlBc3Nl cnQoYmF0Y2gtPm51bUtpbGxlZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRjaC0+bnVtS2lsbGVkID4g MCAmJiBiYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkpOworCisJLyogWFhYIGNhbiB3ZSBjaGVj ayBzb21lIG9mIHRoZSBvdGhlciBiYXRjaCBmaWVsZHM/ICovCisjZW5kaWYKK30KKworLyoKKyAq IENoZWNrIGludmFyaWFudHMgb24gY3VycmVudCBiYXRjaGVzCisgKgorICogTWFrZXMgc3VyZSB0 aGUgaW5kZXhlcyBhcmUgc2V0IGFzIGV4cGVjdGVkLCB0aGUgYnVmZmVyIHNpemUgaXMgd2l0aGlu CisgKiBsaW1pdHMsIGFuZCBzbyBvbi4KKyAqLworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQmF0 Y2hlcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCisJ Lyogd2Ugc2hvdWxkIGhhdmUgYmF0Y2hlcyBpbml0aWFsaXplZCAqLworCUFzc2VydChiYXRjaFN0 YXRlICE9IE5VTEwpOworCisJLyogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvbyBtYW55IGJhdGNoZXMu ICovCisJQXNzZXJ0KGJhdGNoU3RhdGUtPm1heEJhdGNoZXMgPiAwICYmCisJCSAgIGJhdGNoU3Rh dGUtPm1heEJhdGNoZXMgPD0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyk7CisKKwkvKgorCSAqIFRo ZSBmaXJzdC9uZXh0IGluZGV4ZXMgc2hvdWxkIGRlZmluZSBhIHZhbGlkIHJhbmdlIChpbiB0aGUg Y3ljbGljCisJICogYnVmZmVyLCBhbmQgc2hvdWxkIG5vdCBvdmVyZmxvdyBtYXhCYXRjaGVzLgor CSAqLworCUFzc2VydChiYXRjaFN0YXRlLT5maXJzdEJhdGNoID49IDAgJiYKKwkJICAgYmF0Y2hT dGF0ZS0+Zmlyc3RCYXRjaCA8PSBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpOworCUFzc2VydChiYXRj aFN0YXRlLT5uZXh0QmF0Y2ggLSBiYXRjaFN0YXRlLT5maXJzdEJhdGNoIDw9CisJCSAgIGJhdGNo U3RhdGUtPm1heEJhdGNoZXMpOworCisJLyogQ2hlY2sgYWxsIGN1cnJlbnQgYmF0Y2hlcyAqLwor CWZvciAoaW50IGkgPSBiYXRjaFN0YXRlLT5maXJzdEJhdGNoOyBpIDwgYmF0Y2hTdGF0ZS0+bmV4 dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IElOREVYX1NDQU5fQkFU Q0goc2NhbiwgaSk7CisKKwkJQXNzZXJ0Q2hlY2tCYXRjaChzY2FuLCBiYXRjaCk7CisJfQorI2Vu ZGlmCit9CisKKy8qCisgKiBpbmRleF9iYXRjaF9wb3NfYWR2YW5jZQorICoJCUFkdmFuY2UgdGhl IHBvc2l0aW9uIHRvIHRoZSBuZXh0IGl0ZW0sIGRlcGVuZGluZyBvbiBzY2FuIGRpcmVjdGlvbi4K KyAqCisgKiBBZHZhbmNlIHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBlaXRoZXIgaW4g dGhlIHNhbWUgYmF0Y2ggb3IgdGhlCisgKiBmb2xsb3dpbmcgb25lIChpZiBhbHJlYWR5IGF2YWls YWJsZSkuCisgKgorICogV2UgY2FuIGFkdmFuY2Ugb25seSBpZiB3ZSBhbHJlYWR5IGhhdmUgc29t ZSBiYXRjaGVzIGxvYWRlZCwgYW5kIHRoZXJlJ3MKKyAqIGVpdGhlciBlbm91Z2ggaXRlbXMgaW4g dGhlIGN1cnJlbnQgYmF0Y2gsIG9yIHNvbWUgbW9yZSBpdGVtcyBpbiB0aGUKKyAqIHN1YnNlcXVl bnQgYmF0Y2hlcy4KKyAqCisgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZHZhbmNlLCByaWdodCBh ZnRlciBsb2FkaW5nIHRoZSBmaXJzdCBiYXRjaCwgdGhlCisgKiBwb3NpdGlvbiBpcyBzdGlsbCB1 bmRlZmluZWQuIE90aGVyd2lzZSB3ZSBleHBlY3QgdGhlIHBvc2l0aW9uIHRvIGJlCisgKiB2YWxp ZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIHdhcyBhZHZhbmNlZCwgZmFs c2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBwb3NpdGlvbiBpcyBndWFyYW50ZWVkIHRvIGJlIHZh bGlkIG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGFkdmFuY2UuCisgKiBJZiBhbiBhZHZhbmNlIGZh aWxzIChmYWxzZSByZXR1cm5lZCksIHRoZSBwb3NpdGlvbiBjYW4gYmUgaW52YWxpZC4KKyAqCisg KiBYWFggVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBlbmZvcmNlIHNvbWUgImludmFy aWFudHMiLCBlLmcuCisgKiB0aGF0IHRoZSBwb3NpdGlvbnMgYXJlIGFsd2F5cyB2YWxpZC4gV2Ug c2hvdWxkIG5ldmVyIGdldCBoZXJlIHdpdGgKKyAqIGludmFsaWQgcG9zaXRpb24gKHNvIHByb2Jh Ymx5IHNob3VsZCBiZSBpbml0aWFsaXplZCBhcyBwYXJ0IG9mIGxvYWRpbmcKKyAqIHRoZSBmaXJz dCBiYXRjaCksIGFuZCB0aGVuIGludmFsaWRhdGVkIGlmIGFkdmFuY2UgZmFpbHMuIENvdWxkIGJl IHRyaWNreQorICogZm9yIHRoZSBzdHJlYW0gcG9zaXRpb24sIHRob3VnaCwgYmVjYXVzZSBpdCBj YW4gZ2V0ICJsYWciIGZvciBJT1MgZXRjLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5 c19pbmxpbmUgYm9vbAoraW5kZXhfYmF0Y2hfcG9zX2FkdmFuY2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaFBvcyAqcG9zLAorCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Cit7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICpiYXRjaDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBoYXZl IGJhdGNoaW5nIGluaXRpYWxpemVkIGFuZCBjb25zaXN0ZW50ICovCisJQXNzZXJ0Q2hlY2tCYXRj aGVzKHNjYW4pOworCisJLyogc2hvdWxkIGtub3cgZGlyZWN0aW9uIGJ5IG5vdyAqLworCUFzc2Vy dChkaXJlY3Rpb24gPT0gc2Nhbi0+YmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uKTsKKwlBc3NlcnQoZGly ZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qIFdlIGNhbid0IGFkdmFu Y2UgaWYgdGhlcmUgYXJlIG5vIGJhdGNoZXMgYXZhaWxhYmxlLiAqLworCWlmIChJTkRFWF9TQ0FO X0JBVENIX0NPVU5UKHNjYW4pID09IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYg dGhlIHBvc2l0aW9uIGhhcyBub3QgYmVlbiBhZHZhbmNlZCB5ZXQsIGl0IGhhcyB0byBiZSByaWdo dCBhZnRlciB3ZQorCSAqIGxvYWRlZCB0aGUgZmlyc3QgYmF0Y2guIEluIHRoYXQgY2FzZSBqdXN0 IGluaXRpYWxpemUgaXQgdG8gdGhlIGZpcnN0CisJICogaXRlbSBpbiB0aGUgYmF0Y2ggKG9yIGxh c3QgaXRlbSwgaWYgaXQncyBhIGJhY2t3YXJkcyBzY2FuKS4KKwkgKgorCSAqIFhYWCBNYXliZSB3 ZSBzaG91bGQganVzdCBleHBsaWNpdGx5IGluaXRpYWxpemUgdGhlIHBvc3RpdGlvbiBhZnRlcgor CSAqIGxvYWRpbmcgdGhlIGZpcnN0IGJhdGNoLCB3aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdo IHRoZSBhZHZhbmNlLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykpCisJ eworCQkvKgorCQkgKiBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGhlIHZlcnkgZmlyc3QgYmF0Y2gs IG9yIG1heWJlIHdlIGhhdmUKKwkJICogY2hhbmdlZCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2Fu IGFmdGVyIHNjYW5uaW5nIGFsbCB0aGUgd2F5IHRvIHRoZQorCQkgKiBlbmQgKGluIHdoaWNoIGNh c2UgdGhlIHBvc2l0aW9uIGlzIGludmFsaWQsIGFuZCB3ZSBtYWtlIGl0IGxvb2sKKwkJICogbGlr ZSB0aGVyZSBpcyBqdXN0IG9uZSBiYXRjaCkuIFdlIHNob3VsZCBoYXZlIGp1c3Qgb25lIGJhdGNo LAorCQkgKiB0aG91Z2guCisJCSAqCisJCSAqIFhYWCBBY3R1YWxseSwgY291bGQgdGhlcmUgYmUg bW9yZSBiYXRjaGVzPyBNYXliZSB3ZSBwcmVmZXRjaGVkIG1vcmUKKwkJICogYmF0Y2hlcyByaWdo dCBhd2F5PyBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdWJzdGFudGlhbCBpbnZhcmlhbnQuCisJ CSAqLworCQlBc3NlcnQoSU5ERVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSA9PSAxKTsKKworCQkv KgorCQkgKiBHZXQgdGhlIGZpcnN0IGJhdGNoLCBhbmQgaW5pdGlhbGl6ZSB0aGUgcG9zaXRpb24g dG8gdGhlIGZpcnN0L2xhc3QKKwkJICogaXRlbSBpbiB0aGUgYmF0Y2gsIGRlcGVuZGluZyBvbiB0 aGUgc2NhbiBkaXJlY3Rpb24uCisJCSAqLworCQliYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nh biwgc2Nhbi0+YmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCk7CisKKwkJcG9zLT5iYXRjaCA9IHNjYW4t PmJhdGNoU3RhdGUtPmZpcnN0QmF0Y2g7CisKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyZWN0aW9uKSkKKwkJCXBvcy0+aW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQllbHNlCisJ CQlwb3MtPmluZGV4ID0gYmF0Y2gtPmxhc3RJdGVtOworCisJCUFzc2VydENoZWNrQmF0Y2hQb3NW YWxpZChzY2FuLCBwb3MpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIHBv c2l0aW9uIGlzIGFscmVhZHkgZGVmaW5lZCwgc28gd2Ugc2hvdWxkIGhhdmUgc29tZSBiYXRjaGVz IGxvYWRlZAorCSAqIGFuZCB0aGUgcG9zaXRpb24gaGFzIHRvIGJlIHZhbGlkIHdpdGggcmVzcGVj dCB0byB0aG9zZS4KKwkgKi8KKwlBc3NlcnRDaGVja0JhdGNoUG9zVmFsaWQoc2NhbiwgcG9zKTsK KworCS8qCisJICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzYW1lIGJhdGNoLCBp ZiB0aGVyZSBhcmUgbW9yZSBpdGVtcy4gSWYKKwkgKiB3ZSdyZSBhdCB0aGUgbGFzdCBpdGVtLCB3 ZSdsbCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGJhdGNoIGxhdGVyLgorCSAqLworCWJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKworCWlmIChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3MtPmluZGV4IDw9IGJhdGNo LT5sYXN0SXRlbSkKKwkJeworCQkJQXNzZXJ0Q2hlY2tCYXRjaFBvc1ZhbGlkKHNjYW4sIHBvcyk7 CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9u SXNCYWNrd2FyZCAqLworCXsKKwkJaWYgKC0tcG9zLT5pbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVt KQorCQl7CisJCQlBc3NlcnRDaGVja0JhdGNoUG9zVmFsaWQoc2NhbiwgcG9zKTsKKworCQkJcmV0 dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNvdWxkbid0IGFkdmFuY2Ugd2l0aGlu IHRoZSBzYW1lIGJhdGNoLCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0CisJICogYmF0Y2gsIGlm IGl0J3MgYWxyZWFkeSBsb2FkZWQuCisJICovCisJaWYgKElOREVYX1NDQU5fQkFUQ0hfTE9BREVE KHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgYmF0 Y2ggKi8KKwkJcG9zLT5iYXRjaCsrOworCisJCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2Fu LCBwb3MtPmJhdGNoKTsKKwkJQXNzZXJ0KGJhdGNoICE9IE5VTEwpOworCisJCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQlwb3MtPmluZGV4ID0gYmF0Y2gtPmZpcnN0 SXRlbTsKKwkJZWxzZQorCQkJcG9zLT5pbmRleCA9IGJhdGNoLT5sYXN0SXRlbTsKKworCQlBc3Nl cnRDaGVja0JhdGNoUG9zVmFsaWQoc2NhbiwgcG9zKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwkvKiBjYW4ndCBhZHZhbmNlICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogaW5kZXhf YmF0Y2hfcG9zX3Jlc2V0CisgKgkJUmVzZXQgdGhlIHBvc2l0aW9uLCBzbyB0aGF0IGl0IGxvb2tz IGFzIGlmIG5ldmVyIGFkdmFuY2VkLgorICovCitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfcG9z X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2hQb3MgKnBvcykKK3sKKwlw b3MtPmJhdGNoID0gLTE7CisJcG9zLT5pbmRleCA9IC0xOworfQorCisvKgorICogaW5kZXhfc2Nh bl9zdHJlYW1fcmVhZF9uZXh0CisgKgkJcmV0dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHBhc3MgdG8g dGhlIHJlYWQgc3RyZWFtCisgKgorICogVGhpcyBhc3N1bWVzIHRoZSAiY3VycmVudCIgc2NhbiBk aXJlY3Rpb24sIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIElmIHRoZSBkaXJlY3Rp b24gY2hhbmdlcyBiZWZvcmUgY29uc3VtaW5nIGFsbCBibG9ja3MsIHdlJ2xsIHJlc2V0IHRoZSBz dHJlYW0KKyAqIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2guIFRoZSBzY2FuIGRpcmVjdGlvbiBjaGFu Z2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuIEhlcmUKKyAqIHdlIHJlbHkgb24gaGF2aW5nIHRoZSBj b3JyZWN0IHZhbHVlIGluIGJhdGNoU3RhdGUtPmRpcmVjdGlvbi4KKyAqCisgKiBUaGUgcG9zaXRp b24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBzdHJlYW1Qb3MsIHdoaWNoIG1heSBi ZSBhaGVhZCBvZgorICogdGhlIGN1cnJlbnQgcmVhZFBvcyAod2hpY2ggaXMgd2hhdCBnb3QgY29u c3VtZWQgYnkgdGhlIHNjYW4pLgorICoKKyAqIFRoZSBzdHJlYW1Qb3MgY2FuIGhvd2V2ZXIgYWxz byBnZXQgYmVoaW5kIHJlYWRQb3MgdG9vLCB3aGVuIHNvbWUgYmxvY2tzIGFyZQorICogc2tpcHBl ZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSByZWFkX3N0cmVhbS4gQW4gZXhhbXBsZSBpcyBhbiBp bmRleCBzY2FuIG9uCisgKiBhIGNvcnJlbGF0ZWQgaW5kZXgsIHdpdGggbWFueSBkdXBsaWNhdGUg YmxvY2tzIGFyZSBza2lwcGVkLCBvciBhbiBJT1Mgd2hlcmUKKyAqIGFsbC12aXNpYmxlIGJsb2Nr cyBhcmUgc2tpcHBlZC4KKyAqCisgKiBUaGUgZmlyc3QgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBm cm9tIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKCkuIFdlIGRvbid0IGdldAorICogaGVyZSB1bnRp bCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoKSBjYWxsLCB3aGVuIHB1bGxpbmcg dGhlIGZpcnN0CisgKiBoZWFwIHR1cGxlIGZyb20gdGhlIHN0cmVhbS4gQWZ0ZXIgdGhhdCwgbW9z dCBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQgYnkgdGhpcworICogY2FsbGJhY2ssIGRyaXZlbiBi eSB0aGUgcmVhZF9zdHJlYW0gbG9vay1haGVhZCBkaXN0YW5jZS4gSG93ZXZlciwgd2l0aAorICog ZGlzYWJsZWQgcHJlZmV0Y2hpbmcgKHRoYXQgaXMsIHdpdGggZWZmZWN0aXZlX2lvX2NvbmN1cnJl bmN5PTApLCBhbGwgYmF0Y2hlcworICogd2lsbCBiZSBsb2FkZWQgaW4gaW5kZXhfYmF0Y2hfZ2V0 bmV4dF90aWQuCisgKgorICogSXQncyBwb3NzaWJsZSB3ZSBnb3QgaGVyZSBvbmx5IGZhaXJseSBs YXRlIGluIHRoZSBzY2FuLCBlLmcuIGlmIG1hbnkgdHVwbGVzCisgKiBnb3Qgc2tpcHBlZCBpbiB0 aGUgaW5kZXgtb25seSBzY2FuLCBldGMuIEluIHRoaXMgY2FzZSBqdXN0IHVzZSB0aGUgcmVhZAor ICogcG9zaXRpb24gYXMgYSBzdHJlYW1Qb3Mgc3RhcnRpbmcgcG9pbnQuCisgKgorICogWFhYIEl0 IHNlZW1zIHRoZSByZWFkUG9zL3N0cmVhbVBvcyBjb21tZW50cyBzaG91bGQgYmUgcGxhY2VkIGVs c2V3aGVyZS4gVGhlCisgKiByZWFkX3N0cmVhbSBjYWxsYmFjayBkb2VzIG5vdCBzZWVtIGxpa2Ug dGhlIHJpZ2h0IHBsYWNlLgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2luZGV4X3NjYW5fc3Ry ZWFtX3JlYWRfbmV4dChSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJdm9pZCAqY2FsbGJhY2tf cHJpdmF0ZV9kYXRhLAorCQkJCQkJCXZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNj YW5EZXNjIHNjYW4gPSAoSW5kZXhTY2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUlu ZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCUluZGV4 U2NhbkJhdGNoUG9zICpzdHJlYW1Qb3MgPSAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zOworCVNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uID0gYmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uOworCisJLyogQnkgbm93 IHdlIHNob3VsZCBrbm93IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW4uICovCisJQXNzZXJ0KGRp cmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIFRoZSByZWFk IHBvc2l0aW9uIChyZWFkUG9zKSBoYXMgdG8gYmUgdmFsaWQuCisJICoKKwkgKiBXZSBpbml0aWFs aXplL2FkdmFuY2UgaXQgYmVmb3JlIGV2ZW4gYXR0ZW1wdGluZyB0byByZWFkIHRoZSBoZWFwIHR1 cGxlLAorCSAqIGFuZCBpdCBnZXRzIGludmFsaWRhdGVkIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBv ZiB0aGUgc2NhbiAoYnV0IHRoZW4gd2UKKwkgKiBkb24ndCBpbnZva2UgdGhlIGNhbGxiYWNrIGFn YWluKS4KKwkgKgorCSAqIFhYWCBUaGlzIGFwcGxpZXMgdG8gdGhlIHJlYWRQb3MuIFdlJ2xsIHVz ZSBzdHJlYW1Qb3MgdG8gZGV0ZXJtaW5lIHdoaWNoCisJICogYmxvY2tzIHRvIHBhc3MgdG8gdGhl IHN0cmVhbSwgYW5kIHJlYWRQb3MgbWF5IGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBpdC4KKwkgKi8K KwlBc3NlcnRDaGVja0JhdGNoUG9zVmFsaWQoc2NhbiwgJmJhdGNoU3RhdGUtPnJlYWRQb3MpOwor CisJLyoKKwkgKiBUcnkgdG8gYWR2YW5jZSB0aGUgc3RyZWFtUG9zIHRvIHRoZSBuZXh0IGl0ZW0s IGFuZCBpZiB0aGF0IGRvZXNuJ3QKKwkgKiBzdWNjZWVkIChpZiB0aGVyZSBhcmUgbm8gbW9yZSBp dGVtcyBpbiBsb2FkZWQgYmF0Y2hlcyksIHRyeSBsb2FkaW5nIHRoZQorCSAqIG5leHQgb25lLgor CSAqCisJICogRklYTUUgVW5saWtlIGluZGV4X2JhdGNoX2dldG5leHRfdGlkLCB0aGlzIGNhbiBs b29wIG1vcmUgdGhhbiB0d2ljZS4gSWYKKwkgKiBtYW55IGJsb2NrcyBnZXQgc2tpcHBlZCBkdWUg dG8gY3VycmVudFByZWZldGNoQmxvY2sgb3IgYWxsLXZpc2liaWxpdHkKKwkgKiAocGVyIHRoZSAi cHJlZmV0Y2giIGNhbGxiYWNrKSwgd2UgZ2V0IHRvIGxvYWQgYWRkaXRpb25hbCBiYXRjaGVzLiBJ bgorCSAqIHRoZSB3b3JzdCBjYXNlIHdlIGhpdCB0aGUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBs aW1pdCBhbmQgaGF2ZSB0bworCSAqICJwYXVzZSIgdGhlIHN0cmVhbS4KKwkgKi8KKwl3aGlsZSAo dHJ1ZSkKKwl7CisJCWJvb2wJCWFkdmFuY2VkID0gZmFsc2U7CisKKwkJLyoKKwkJICogSWYgdGhl IHN0cmVhbSBwb3NpdGlvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBzZXQgaXQgdG8g dGhlCisJCSAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4gVGhpcyBpcyB0aGUgaXRlbSB0aGUgY2Fs bGVyIGlzIHRyaW5nIHRvCisJCSAqIHJlYWQsIHNvIGl0J3Mgd2hhdCB3ZSBzaG91bGQgcmV0dXJu IHRvIHRoZSBzdHJlYW0uCisJCSAqLworCQlpZiAoSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChzdHJl YW1Qb3MpKQorCQl7CisJCQkqc3RyZWFtUG9zID0gYmF0Y2hTdGF0ZS0+cmVhZFBvczsKKwkJCWFk dmFuY2VkID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmIChpbmRleF9iYXRjaF9wb3NfYWR2YW5jZShz Y2FuLCBzdHJlYW1Qb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCWFkdmFuY2VkID0gdHJ1ZTsKKwkJ fQorCisJCS8qCisJCSAqIEZJWE1FIE1heWJlIGNoZWNrIHRoZSBzdHJlYW1Qb3MgaXMgbm90IGJl aGluZCByZWFkUG9zPworCQkgKgorCQkgKiBGSVhNRSBBY3R1YWxseSwgY291bGQgc3RyZWFtUG9z IGdldCBzdGFsZS9sYWdnaW5nIGJlaGluZCByZWFkUG9zLAorCQkgKiBhbmQgaWYgeWVzIGhvdyBt dWNoLiBDb3VsZCBpdCBnZXQgc28gZmFyIGJlaGluZCB0byBub3QgYmUgdmFsaWQsCisJCSAqIHBv aW50aW5nIGF0IGEgZnJlZWQgYmF0Y2g/IEluIHRoYXQgY2FzZSB3ZSBjYW4ndCBldmVuIGFkdmFu Y2UgaXQsCisJCSAqIGFuZCB3ZSBzaG91bGQganVzdCBpbml0aWFsaXplIGl0IHRvIHJlYWRQb3Mu IFdlIG1pZ2h0IGRvIHRoYXQKKwkJICogYW55d2F5LCBJIGd1ZXNzLCBqdXN0IHRvIHNhdmUgb24g InBvaW50bGVzcyIgYWR2YW5jZXMgKGl0IG11c3QKKwkJICogYWdyZWUgd2l0aCByZWFkUG9zLCB3 ZSBjYW4ndCBhbGxvdyAicmV0cm9hY3RpdmVseSIgY2hhbmdpbmcgdGhlCisJCSAqIGJsb2NrIHNl cXVlbmNlKS4KKwkJICovCisKKwkJLyoKKwkJICogSWYgd2UgYWR2YW5jZWQgdGhlIHBvc2l0aW9u LCBlaXRoZXIgcmV0dXJuIHRoZSBibG9jayBmb3IgdGhlIFRJRCwKKwkJICogb3Igc2tpcCBpdCAo YW5kIHRoZW4gdHJ5IGFkdmFuY2luZyBhZ2FpbikuCisJCSAqCisJCSAqIFRoZSBibG9jayBtYXkg YmUgInNraXBwZWQiIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIHRoZSBjYWxsZXIgbWF5CisJCSAq IGRlZmluZSBhICJwcmVmZXRjaCIgY2FsbGJhY2sgdGhhdCB0ZWxscyB1cyB0byBza2lwIGl0ZW1z IChJT1MgZG9lcworCQkgKiB0aGlzIHRvIHNraXAgYWxsLXZpc2libGUgcGFnZXMpLiBTZWNvbmQs IGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzCisJCSAqIHVzZWQgdG8gc2tpcCBkdXBsaWNhdGUgYmxv Y2sgbnVtYmVycyAoYSBzZXF1ZW5jZSBvZiBUSURTIGZvciB0aGUKKwkJICogc2FtZSBibG9jayku CisJCSAqLworCQlpZiAoYWR2YW5jZWQpCisJCXsKKwkJCUluZGV4U2NhbkJhdGNoIHN0cmVhbUJh dGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzdHJlYW1Qb3MtPmJhdGNoKTsKKwkJCUl0ZW1Q b2ludGVyIHRpZCA9ICZzdHJlYW1CYXRjaC0+aXRlbXNbc3RyZWFtUG9zLT5pbmRleF0uaGVhcFRp ZDsKKworCQkJREVCVUdfTE9HKCJpbmRleF9zY2FuX3N0cmVhbV9yZWFkX25leHQ6IGluZGV4ICVk IFRJRCAoJXUsJXUpIiwKKwkJCQkJICBzdHJlYW1Qb3MtPmluZGV4LAorCQkJCQkgIEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJICBJdGVtUG9pbnRlckdldE9mZnNldE51bWJl cih0aWQpKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlJ3MgYSBwcmVmZXRjaCBjYWxsYmFjaywg dXNlIGl0IHRvIGRlY2lkZSBpZiB3ZSBuZWVkIHRvCisJCQkgKiByZWFkIHRoZSBuZXh0IGJsb2Nr LgorCQkJICoKKwkJCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgY2hlY2tpbmcgY3VycmVu dFByZWZldGNoQmxvY2s7IGl0J3MKKwkJCSAqIGVzc2VudGlhbCB0aGF0IHRoZSBWTSBjYWNoZSB1 c2VkIGJ5IGluZGV4LW9ubHkgc2NhbnMgaXMKKwkJCSAqIGludGlhbGl6ZWQgaGVyZS4KKwkJCSAq LworCQkJaWYgKGJhdGNoU3RhdGUtPnByZWZldGNoICYmCisJCQkJIWJhdGNoU3RhdGUtPnByZWZl dGNoKHNjYW4sIGJhdGNoU3RhdGUtPnByZWZldGNoQXJnLCBzdHJlYW1Qb3MpKQorCQkJeworCQkJ CURFQlVHX0xPRygiaW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9uZXh0OiBza2lwIGJsb2NrIChjYWxs YmFjaykiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogc2FtZSBibG9jayBhcyBiZWZv cmUsIGRvbid0IG5lZWQgdG8gcmVhZCBpdCAqLworCQkJaWYgKGJhdGNoU3RhdGUtPmN1cnJlbnRQ cmVmZXRjaEJsb2NrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKKwkJCXsKKwkJ CQlERUJVR19MT0coImluZGV4X3NjYW5fc3RyZWFtX3JlYWRfbmV4dDogc2tpcCBibG9jayAoY3Vy cmVudFByZWZldGNoQmxvY2spIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJhdGNoU3Rh dGUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQp OworCisJCQlyZXR1cm4gYmF0Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2s7CisJCX0KKwor CQkvKgorCQkgKiBDb3VsZG4ndCBhZHZhbmNlIHRoZSBwb3NpdGlvbiwgbm8gbW9yZSBpdGVtcyBp biB0aGUgbG9hZGVkIGJhdGNoZXMuCisJCSAqIFRyeSBsb2FkaW5nIHRoZSBuZXh0IGJhdGNoIC0g aWYgdGhhdCBzdWNjZWVkcywgdHJ5IGFkdmFuY2luZyBhZ2FpbgorCQkgKiAodGhpcyB0aW1lIHRo ZSBhZHZhbmNlIHNob3VsZCB3b3JrLCBidXQgd2UgbWF5IHNraXAgYWxsIHRoZSBpdGVtcykuCisJ CSAqCisJCSAqIElmIHdlIGZhaWwgdG8gbG9hZCB0aGUgbmV4dCBiYXRjaCwgd2UncmUgZG9uZS4K KwkJICovCisJCWlmICghaW5kZXhfYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24pKQorCQkJ YnJlYWs7CisKKwkJLyoKKwkJICogQ29uc2lkZXIgZGlzYWJsaW5nIHByZWZldGNoaW5nIHdoZW4g d2UgY2FuJ3Qga2VlcCBhIHN1ZmZpY2llbnRseQorCQkgKiBsYXJnZSAiaW5kZXggdHVwbGUgZGlz dGFuY2UiIGJldHdlZW4gcmVhZFBvcyBhbmQgc3RyZWFtUG9zLgorCQkgKgorCQkgKiBPbmx5IGNv bnNpZGVyIGRvaW5nIHRoaXMgd2hlbiB3ZSdyZSBub3Qgb24gdGhlIHZlcnkgZmlyc3QgYmF0Y2gs CisJCSAqIHdoZW4gcmVhZFBvcyBhbmQgc3RyZWFtUG9zIHNoYXJlIHRoZSBzYW1lIGJhdGNoLgor CQkgKi8KKwkJaWYgKCFiYXRjaFN0YXRlLT5maW5pc2hlZCAmJiAhYmF0Y2hTdGF0ZS0+cHJlZmV0 Y2hpbmdMb2NrZWRJbikKKwkJeworCQkJaW50CQkJaW5kZXhkaWZmOworCisJCQlpZiAoc3RyZWFt UG9zLT5iYXRjaCA8PSBJTkRFWF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFUQ0hFUykKKwkJCXsKKwkJ CQkvKiBUb28gZWFybHkgdG8gY2hlY2sgaWYgcHJlZmV0Y2hpbmcgc2hvdWxkIGJlIGRpc2FibGVk ICovCisJCQl9CisJCQllbHNlIGlmIChiYXRjaFN0YXRlLT5yZWFkUG9zLmJhdGNoID09IHN0cmVh bVBvcy0+YmF0Y2gpCisJCQl7CisJCQkJSW5kZXhTY2FuQmF0Y2hQb3MgKnJlYWRQb3MgPSAmYmF0 Y2hTdGF0ZS0+cmVhZFBvczsKKworCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVj dGlvbikpCisJCQkJCWluZGV4ZGlmZiA9IHN0cmVhbVBvcy0+aW5kZXggLSByZWFkUG9zLT5pbmRl eDsKKwkJCQllbHNlCisJCQkJeworCQkJCQlJbmRleFNjYW5CYXRjaCByZWFkQmF0Y2ggPQorCQkJ CQkJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwkJCQkJaW5kZXhk aWZmID0gKHJlYWRQb3MtPmluZGV4IC0gcmVhZEJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJCQkJCShz dHJlYW1Qb3MtPmluZGV4IC0gcmVhZEJhdGNoLT5maXJzdEl0ZW0pOworCQkJCX0KKworCQkJCWlm IChpbmRleGRpZmYgPCBJTkRFWF9TQ0FOX01JTl9UVVBMRV9ESVNUQU5DRSkKKwkJCQl7CisJCQkJ CWJhdGNoU3RhdGUtPmRpc2FibGVkID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIEludmFsaWRCbG9ja051 bWJlcjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJYmF0Y2hTdGF0ZS0+cHJlZmV0Y2hp bmdMb2NrZWRJbiA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCWJhdGNoU3RhdGUt PnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQl9CisJfQorCisJLyogbm8gbW9yZSBpdGVt cyBpbiB0aGlzIHNjYW4gKi8KKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfZ2V0bmV4dCAtIGdldCB0aGUgbmV4dCBi YXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdlIG1hbmFn ZWQgdG8gcmVhZCBhIGJhdGNoIG9mIFRJRHMsIG9yIGZhbHNlIGlmIHRoZXJlIGFyZSBubworICog bW9yZSBUSURzIGluIHRoZSBzY2FuLiBUaGUgbG9hZCBtYXkgYWxzbyByZXR1cm4gZmFsc2UgaWYg d2UgdXNlZCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGJhdGNoZXMgKElOREVYX1NDQU5fTUFY X0JBVENIRVMpLCBpbiB3aGljaCBjYXNlIHdlJ2xsIHJlc2V0IHRoZQorICogc3RyZWFtIGFuZCBj b250aW51ZSB0aGUgc2NhbiBsYXRlci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJhdGNo IHdhcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhpcyBv bmx5IGxvYWRzIHRoZSBUSURzIGFuZCByZXNldHMgdGhlIHZhcmlvdXMgYmF0Y2ggZmllbGRzIHRv IGZyZXNoCisgKiBzdGF0ZS4gSXQgZG9lcyBub3Qgc2V0IHhzX2hlYXB0aWQveHNfaXR1cC94c19o aXR1cCwgdGhhdCdzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGZvbGxvd2luZyBpbmRl eF9iYXRjaF9nZXRuZXh0X3RpZCgpIGNhbGxzLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitz dGF0aWMgYm9vbAoraW5kZXhfYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUg PSBzY2FuLT5iYXRjaFN0YXRlOworCUluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2ggPSBOVUxMLAor CQkJCWJhdGNoID0gTlVMTDsKKworCVNDQU5fQ0hFQ0tTOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtZ2V0YmF0Y2gpOworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hv dCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZChSZWNlbnRYbWluKSk7CisKKwkvKiBEaWQgd2UgYWxyZWFkeSByZWFkIHRoZSBsYXN0IGJhdGNo IGZvciB0aGlzIHNjYW4/ICovCisJaWYgKGJhdGNoU3RhdGUtPmZpbmlzaGVkKQorCQlyZXR1cm4g TlVMTDsKKworCS8qCisJICogSWYgd2UgYWxyZWFkeSB1c2VkIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBiYXRjaCBzbG90cyBhdmFpbGFibGUsIGl0J3MKKwkgKiBwb2ludGxlc3MgdG8gdHJ5IGxvYWRp bmcgYW5vdGhlciBvbmUuIFRoaXMgY2FuIGhhcHBlbiBmb3IgdmFyaW91cworCSAqIHJlYXNvbnMs IGUuZy4gZm9yIGluZGV4LW9ubHkgc2NhbnMgb24gYWxsLXZpc2libGUgdGFibGUsIG9yIHNraXBw aW5nCisJICogZHVwbGljYXRlIGJsb2NrcyBvbiBwZXJmZWN0bHkgY29ycmVsYXRlZCBpbmRleGVz LCBldGMuCisJICoKKwkgKiBXZSBjb3VsZCBlbmxhcmdlIHRoZSBhcnJheSB0byBhbGxvdyBtb3Jl IGJhdGNoZXMsIGJ1dCB0aGF0J3MgZnV0aWxlLCB3ZQorCSAqIGNhbiBhbHdheXMgY29uc3RydWN0 IGEgY2FzZSB1c2luZyBtb3JlIG1lbW9yeS4gTm90IG9ubHkgaXQgd291bGQgcmlzaworCSAqIE9P TSwgaXQnZCBhbHNvIGJlIGluZWZmaWNpZW50IGJlY2F1c2UgdGhpcyBoYXBwZW5zIGVhcmx5IGlu IHRoZSBzY2FuCisJICogKHNvIGl0J2QgaW50ZXJmZXJlIHdpdGggTElNSVQgcXVlcmllcykuCisJ ICovCisJaWYgKElOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2FuKSkKKwl7CisJCURFQlVHX0xPRygi aW5kZXhfYmF0Y2hfZ2V0bmV4dDogcmFuIG91dCBvZiBzcGFjZSBmb3IgYmF0Y2hlcyIpOworCQlz Y2FuLT5iYXRjaFN0YXRlLT5yZXNldCA9IHRydWU7CisJCXJldHVybiBOVUxMOworCX0KKworCWlu ZGV4X2JhdGNoX3ByaW50KCJpbmRleF9iYXRjaF9nZXRuZXh0IC8gc3RhcnQiLCBzY2FuKTsKKwor CS8qCisJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBiYXRjaCB0aGF0IGFtZ2V0YmF0 Y2ggaGFzIHRvIHBpY2sgdGhpbmdzCisJICogdXAgZnJvbQorCSAqLworCWlmIChiYXRjaFN0YXRl LT5maXJzdEJhdGNoIDwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoKQorCQlwcmlvcmJhdGNoID0gSU5E RVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2ggLSAxKTsKKworCWJhdGNo ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3Ji YXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoICE9IE5VTEwpCisJ eworCQkvKgorCQkgKiBXZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIEFNLCBidXQgd2UgbmVlZCB0 byBhZGQgaXQgdG8gdGhlIHF1ZXVlLgorCQkgKiBNYXliZSB0aGF0IHNob3VsZCBiZSBwYXJ0IG9m IHRoZSAiYmF0Y2ggYWxsb2NhdGlvbiIgdGhhdCBoYXBwZW5zIGluCisJCSAqIHRoZSBBTT8KKwkJ ICovCisJCWludAkJCWJhdGNoSW5kZXggPSBiYXRjaFN0YXRlLT5uZXh0QmF0Y2g7CisKKwkJSU5E RVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaEluZGV4KSA9IGJhdGNoOworCisJCWJhdGNoU3RhdGUt Pm5leHRCYXRjaCsrOworCisJCURFQlVHX0xPRygiaW5kZXhfYmF0Y2hfZ2V0bmV4dCBmaXJzdEJh dGNoICVkIG5leHRCYXRjaCAlZCBiYXRjaCAlcCIsCisJCQkJICBiYXRjaFN0YXRlLT5maXJzdEJh dGNoLCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gsIGJhdGNoKTsKKworCQkvKiBEZWxheSBpbml0aWFs aXppbmcgc3RyZWFtIHVudGlsIHJlYWRpbmcgZnJvbSBzY2FuJ3Mgc2Vjb25kIGJhdGNoICovCisJ CWlmIChwcmlvcmJhdGNoICYmICFzY2FuLT54c19oZWFwZmV0Y2gtPnJzICYmICFiYXRjaFN0YXRl LT5kaXNhYmxlZCAmJgorCQkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJCXNjYW4tPnhz X2hlYXBmZXRjaC0+cnMgPQorCQkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RS RUFNX0RFRkFVTFQsIE5VTEwsCisJCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlO X0ZPUktOVU0sCisJCQkJCQkJCQkJICAgaW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9uZXh0LCBzY2Fu LCAwKTsKKwl9CisJZWxzZQorCQliYXRjaFN0YXRlLT5maW5pc2hlZCA9IHRydWU7CisKKwlBc3Nl cnRDaGVja0JhdGNoZXMoc2Nhbik7CisKKwlpbmRleF9iYXRjaF9wcmludCgiaW5kZXhfYmF0Y2hf Z2V0bmV4dCAvIGVuZCIsIHNjYW4pOworCisJcmV0dXJuIChiYXRjaCAhPSBOVUxMKTsKK30KKwor LyoKKyAqIGluZGV4X2JhdGNoX2luaXQKKyAqCQlJbml0aWFsaXplIHZhcmlvdXMgZmllbGRzIC8g YXJyYXlzIG5lZWRlZCBieSBiYXRjaGluZy4KKyAqCisgKiBGSVhNRSBUaGlzIGlzIGEgYml0IGFk LWhvYyBob2RnZSBwb2RnZSwgZHVlIHRvIGhvdyBJIHdhcyBhZGRpbmcgbW9yZSBhbmQKKyAqIG1v cmUgcGllY2VzLiBTb21lIG9mIHRoZSBmaWVsZHMgbWF5IGJlIG5vdCBxdWl0ZSBuZWNlc3Nhcnks IG5lZWRzIGNsZWFudXAuCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9pbml0KEluZGV4 U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBpbml0IGJhdGNoaW5nIGluZm8gKi8KKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0 KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWZyZWViYXRjaCAhPSBOVUxMKTsKKwor CXNjYW4tPmJhdGNoU3RhdGUgPSBwYWxsb2Moc2l6ZW9mKEluZGV4U2NhbkJhdGNoU3RhdGUpKTsK KworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgYmF0Y2guCisJICoKKwkgKiBXZSBwcmVmZXIgdG8g ZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJ ICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxv Y2sgb24gdGhlIHBhZ2UuCisJICoKKwkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdl IHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlv biBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgor CSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9u LU1WQ0Mgc25hcHNob3QuCisJICoKKwkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUg bWVjaGFuaXNtIHRoYXQgbWFya3MgaW5kZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8g ZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkg KiB1c2VkIHRvIGRldGVjdCB1bnNhZmUgVElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nh bm5pbmcgdW5sb2dnZWQKKwkgKiByZWxhdGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBh biBhZmZlY3RlZCBwYWdlJ3MgTFNOKS4gIE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBp bmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+ YmF0Y2hTdGF0ZS0+ZHJvcFBpbiA9CisJCSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1Nu YXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgorCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5p bmRleFJlbGF0aW9uKSk7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwlz Y2FuLT5iYXRjaFN0YXRlLT5yZXNldCA9IGZhbHNlOworCXNjYW4tPmJhdGNoU3RhdGUtPnByZWZl dGNoaW5nTG9ja2VkSW4gPSBmYWxzZTsKKwlzY2FuLT5iYXRjaFN0YXRlLT5kaXNhYmxlZCA9IGZh bHNlOworCXNjYW4tPmJhdGNoU3RhdGUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJs b2NrTnVtYmVyOworCXNjYW4tPmJhdGNoU3RhdGUtPmRpcmVjdGlvbiA9IE5vTW92ZW1lbnRTY2Fu RGlyZWN0aW9uOworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVldWUgb2YgYmF0Y2hlcyAqLworCWlu ZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmc2Nhbi0+YmF0Y2hTdGF0ZS0+cmVhZFBvcyk7CisJ aW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZzY2FuLT5iYXRjaFN0YXRlLT5zdHJlYW1Qb3Mp OworCWluZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmc2Nhbi0+YmF0Y2hTdGF0ZS0+bWFya1Bv cyk7CisKKwlzY2FuLT5iYXRjaFN0YXRlLT5tYXJrQmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNo U3RhdGUtPm1heEJhdGNoZXMgPSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTOworCXNjYW4tPmJhdGNo U3RhdGUtPmZpcnN0QmF0Y2ggPSAwOwkvKiBmaXJzdCBiYXRjaCAqLworCXNjYW4tPmJhdGNoU3Rh dGUtPm5leHRCYXRjaCA9IDA7CS8qIGZpcnN0IGJhdGNoIGlzIGVtcHR5ICovCisKKwlzY2FuLT5i YXRjaFN0YXRlLT5iYXRjaGVzID0KKwkJcGFsbG9jKHNpemVvZihJbmRleFNjYW5CYXRjaERhdGEg KikgKiBzY2FuLT5iYXRjaFN0YXRlLT5tYXhCYXRjaGVzKTsKKworCXNjYW4tPmJhdGNoU3RhdGUt PnByZWZldGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaFN0YXRlLT5wcmVmZXRjaEFyZyA9IE5VTEw7 Cit9CisKKy8qCisgKiBpbmRleF9iYXRjaF9yZXNldAorICoJCVJlc2V0IHRoZSBiYXRjaCBiZWZv cmUgcmVhZGluZyB0aGUgbmV4dCBjaHVuayBvZiBkYXRhLgorICoKKyAqIGNvbXBsZXRlIC0gdHJ1 ZSBtZWFucyB3ZSByZXNldCBldmVuIG1hcmtlZCBiYXRjaAorICoKKyAgKiBYWFggU2hvdWxkIHRo aXMgcmVzZXQgdGhlIGJhdGNoIG1lbW9yeSBjb250ZXh0LCB4c19pdHVwLCB4c19oaXR1cCwgZXRj PworICovCitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBib29sIGNvbXBsZXRlKQoreworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUgPSBz Y2FuLT5iYXRjaFN0YXRlOworCisJLyogYmFpbCBvdXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQg Ki8KKwlpZiAoIWJhdGNoU3RhdGUpCisJCXJldHVybjsKKworCUFzc2VydENoZWNrQmF0Y2hlcyhz Y2FuKTsKKworCWluZGV4X2JhdGNoX3ByaW50KCJpbmRleF9iYXRjaF9yZXNldCIsIHNjYW4pOwor CisJLyogV2l0aCBiYXRjaGluZyBlbmFibGVkLCB3ZSBzaG91bGQgaGF2ZSBhIHJlYWQgc3RyZWFt LiBSZXNldCBpdC4gKi8KKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoLT5ycykKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNo LT5ycyk7CisKKwkvKiByZXNldCB0aGUgcG9zaXRpb25zICovCisJaW5kZXhfYmF0Y2hfcG9zX3Jl c2V0KHNjYW4sICZiYXRjaFN0YXRlLT5yZWFkUG9zKTsKKwlpbmRleF9iYXRjaF9wb3NfcmVzZXQo c2NhbiwgJmJhdGNoU3RhdGUtPnN0cmVhbVBvcyk7CisKKwkvKgorCSAqIFdpdGggImNvbXBsZXRl IiByZXNldCwgbWFrZSBzdXJlIHRvIGFsc28gZnJlZSB0aGUgbWFya2VkIGJhdGNoLCBlaXRoZXIK KwkgKiBieSBqdXN0IGZvcmdldHRpbmcgaXQgKGlmIGl0J3Mgc3RpbGwgaW4gdGhlIHF1ZXVlKSwg b3IgYnkgZXhwbGljaXRseQorCSAqIGZyZWVpbmcgaXQuCisJICoKKwkgKiBYWFggRG8gdGhpcyBi ZWZvcmUgdGhlIGxvb3AsIHNvIHRoYXQgaXQgY2FsbHMgdGhlIGFtZnJlZWJhdGNoKCkuCisJICov CisJaWYgKGNvbXBsZXRlICYmIHVubGlrZWx5KGJhdGNoU3RhdGUtPm1hcmtCYXRjaCAhPSBOVUxM KSkKKwl7CisJCUluZGV4U2NhbkJhdGNoUG9zICptYXJrUG9zID0gJmJhdGNoU3RhdGUtPm1hcmtQ b3M7CisJCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNoU3RhdGUtPm1hcmtCYXRjaDsK KworCQkvKiBhbHdheXMgcmVzZXQgdGhlIHBvc2l0aW9uLCBmb3JnZXQgdGhlIG1hcmtlZCBiYXRj aCAqLworCQliYXRjaFN0YXRlLT5tYXJrQmF0Y2ggPSBOVUxMOworCisJCS8qCisJCSAqIElmIHdl J3ZlIGFscmVhZHkgbW92ZWQgcGFzdCB0aGUgbWFya2VkIGJhdGNoIChpdCdzIG5vdCBpbiB0aGUK KwkJICogY3VycmVudCBxdWV1ZSksIGZyZWUgaXQgZXhwbGljaXRseS4gT3RoZXJ3aXNlIGl0J2xs IGJlIGluIHRoZSBmcmVlZAorCQkgKiBsYXRlci4KKwkJICovCisJCWlmIChtYXJrUG9zLT5iYXRj aCA8IGJhdGNoU3RhdGUtPmZpcnN0QmF0Y2ggfHwKKwkJCW1hcmtQb3MtPmJhdGNoID49IGJhdGNo U3RhdGUtPm5leHRCYXRjaCkKKwkJCWluZGV4X2JhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsK KworCQkvKiByZXNldCBwb3NpdGlvbiBvbmx5IGFmdGVyIHRoZSBxdWV1ZSByYW5nZSBjaGVjayAq LworCQlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJmJhdGNoU3RhdGUtPm1hcmtQb3MpOwor CX0KKworCS8qIHJlbGVhc2UgYWxsIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCXdoaWxl IChiYXRjaFN0YXRlLT5maXJzdEJhdGNoIDwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoKQorCXsKKwkJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNoU3RhdGUt PmZpcnN0QmF0Y2gpOworCisJCURFQlVHX0xPRygiZnJlZWluZyBiYXRjaCAlZCAlcCIsIGJhdGNo U3RhdGUtPmZpcnN0QmF0Y2gsIGJhdGNoKTsKKworCQlpbmRleF9iYXRjaF9mcmVlKHNjYW4sIGJh dGNoKTsKKworCQkvKiB1cGRhdGUgdGhlIHZhbGlkIHJhbmdlLCBzbyB0aGF0IGFzc2VydHMgLyBk ZWJ1Z2dpbmcgd29ya3MgKi8KKwkJYmF0Y2hTdGF0ZS0+Zmlyc3RCYXRjaCsrOworCX0KKworCS8q IHJlc2V0IHJlbGV2YW50IGJhdGNoIHN0YXRlIGZpZWxkcyAqLworCUFzc2VydChiYXRjaFN0YXRl LT5tYXhCYXRjaGVzID09IElOREVYX1NDQU5fTUFYX0JBVENIRVMpOworCWJhdGNoU3RhdGUtPmZp cnN0QmF0Y2ggPSAwOyAvKiBmaXJzdCBiYXRjaCAqLworCWJhdGNoU3RhdGUtPm5leHRCYXRjaCA9 IDA7CS8qIGZpcnN0IGJhdGNoIGlzIGVtcHR5ICovCisKKwliYXRjaFN0YXRlLT5maW5pc2hlZCA9 IGZhbHNlOworCWJhdGNoU3RhdGUtPnJlc2V0ID0gZmFsc2U7CisJYmF0Y2hTdGF0ZS0+Y3VycmVu dFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwlBc3NlcnRDaGVja0JhdGNo ZXMoc2Nhbik7Cit9CisKK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9raWxsX2l0ZW0oSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoUG9zICpyZWFkUG9zID0gJnNjYW4tPmJh dGNoU3RhdGUtPnJlYWRQb3M7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICpyZWFkQmF0Y2ggPSBJTkRF WF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCUFzc2VydENoZWNrQmF0Y2hQ b3NWYWxpZChzY2FuLCByZWFkUG9zKTsKKworCS8qCisJICogWFhYIE1heWJlIHdlIGNhbiBtb3Zl IHRoZSBzdGF0ZSB0aGF0IGluZGljYXRlcyBpZiBhbiBpdGVtIGhhcyBiZWVuCisJICoga2lsbGVk IGludG8gSW5kZXhTY2FuQmF0Y2hEYXRhLml0ZW1zW10gYXJyYXkuCisJICoKKwkgKiBTZWU6CisJ ICogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bkxON1AwaTItWUVudjNRR21lQTVBTWpkY2pr cmFPX256M0gyVmExVjFXT0FAbWFpbC5nbWFpbC5jb20KKwkgKi8KKwlpZiAocmVhZEJhdGNoLT5r aWxsZWRJdGVtcyA9PSBOVUxMKQorCQlyZWFkQmF0Y2gtPmtpbGxlZEl0ZW1zID0gKGludCAqKQor CQkJcGFsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UgKiBzaXplb2YoaW50KSk7CisJaWYgKHJlYWRC YXRjaC0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKKwkJcmVhZEJhdGNoLT5raWxs ZWRJdGVtc1tyZWFkQmF0Y2gtPm51bUtpbGxlZCsrXSA9IHJlYWRQb3MtPmluZGV4OworfQorCitz dGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCVNDQU5fQ0hFQ0tTOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFt ZnJlZWJhdGNoKTsKKworCUFzc2VydENoZWNrQmF0Y2goc2NhbiwgYmF0Y2gpOworCisJLyogZG9u J3QgZnJlZSB0aGUgYmF0Y2ggdGhhdCBpcyBtYXJrZWQgKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+ YmF0Y2hTdGF0ZS0+bWFya0JhdGNoKQorCQlyZXR1cm47CisKKwlzY2FuLT5pbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW1mcmVlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQorCisvKiAqLworc3RhdGlj IHZvaWQKK2luZGV4X2JhdGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJaW5kZXhfYmF0 Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7Cit9CisKKy8qCisgKiBYWFggQm90aCBpbmRleF9iYXRjaF9h bGxvYygpIGNhbGxzIGluIGJ0cmVlIHVzZSBNYXhUSURzUGVyQlRyZWVQYWdlLAorICogd2hpY2gg c2VlbXMgdW5mb3J0dW5hdGUgLSBpdCBpbmNyZWFzZXMgdGhlIGFsbG9jYXRpb24gc2l6ZXMsIGV2 ZW4gaWYKKyAqIHRoZSBpbmRleCB3b3VsZCBiZSBmaW5lIHdpdGggc21hbGxlciBhcnJheXMuIFRo aXMgbWVhbnMgYWxsIGJhdGNoZXMgZXhjZWVkCisgKiBBTExPQ19DSFVOS19MSU1JVCwgZm9yY2lu ZyBhIHNlcGFyYXRlIG1hbGxvYyAoZXhwZW5zaXZlKS4KKyAqLworSW5kZXhTY2FuQmF0Y2gKK2lu ZGV4X2JhdGNoX2FsbG9jKGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0dXApCit7CisJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2ggPSBwYWxsb2Mob2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVt cykgKworCQkJCQkJCQkgIHNpemVvZihJbmRleFNjYW5CYXRjaFBvc0l0ZW0pICogbWF4aXRlbXMp OworCisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJh dGNoLT5raWxsZWRJdGVtcyA9IE5VTEw7CisJYmF0Y2gtPm51bUtpbGxlZCA9IDA7CisKKwkvKgor CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIG5lZWQgYSB0dXBsZSBz dG9yYWdlIHdvcmtzcGFjZS4KKwkgKiBXZSBhbGxvY2F0ZSBCTENLU1ogZm9yIHRoaXMsIHdoaWNo IHNob3VsZCBhbHdheXMgZ2l2ZSB0aGUgaW5kZXggQU0KKwkgKiBlbm91Z2ggc3BhY2UgdG8gZml0 IGEgZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVwbGVzLgorCSAqLworCWJhdGNoLT5jdXJyVHVwbGVz ID0gTlVMTDsKKwlpZiAod2FudF9pdHVwKQorCQliYXRjaC0+Y3VyclR1cGxlcyA9IHBhbGxvYyhC TENLU1opOworCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJYmF0Y2gtPnBvcyA9IE5V TEw7CisJYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9IE5VTEw7CS8qIHBlci1iYXRjaCBJT1Mgdmlz aWJpbGl0eSAqLworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogVW5sb2NrIGJhdGNoLT5i dWYuICBJZiBiYXRjaCBzY2FuIGlzIGRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLiAgRHJvcHBp bmcKKyAqIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5n IGEgY2xlYW51cCBsb2NrLgorICovCit2b2lkCitpbmRleF9iYXRjaF91bmxvY2soUmVsYXRpb24g cmVsLCBib29sIGRyb3BQaW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCWlmICghZHJvcFBp bikKKwl7CisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJCQlWQUxHUklO RF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1opOwor CisJCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCisJCUxvY2tCdWZmZXIo YmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJ ICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgorCSAqCisJICogSGF2ZSB0byBzZXQg YmF0Y2gtPmxzbiBzbyB0aGF0IGFtZnJlZWJhdGNoIGhhcyBhIHdheSB0byBkZXRlY3Qgd2hlbgor CSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRh a2VuIHBsYWNlLiAgSXQnbGwKKwkgKiBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBs ZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04KKwkgKiBoYXNuJ3QgYWR2YW5jZWQuCisJ ICovCisJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7CisJYmF0Y2gtPmxzbiA9IEJ1ZmZl ckdldExTTkF0b21pYyhiYXRjaC0+YnVmKTsKKwlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZF Ul9MT0NLX1VOTE9DSyk7CisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJ VkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxD S1NaKTsKKwlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCWJhdGNoLT5idWYgPSBJbnZhbGlk QnVmZmVyOyAvKiBkZWZlbnNpdmUgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmlu ZGV4IGZkZmY5NjBjMS4uZmJhNTYyZGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMK QEAgLTE1OCwxMSArMTU4LDEyIEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91 dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gYnRhZGp1c3RtZW1iZXJzOwogCWFtcm91dGluZS0+YW1i ZWdpbnNjYW4gPSBidGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnRyZXNjYW47 Ci0JYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gYnRnZXR0dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0 dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2g7CisJYW1y b3V0aW5lLT5hbWZyZWViYXRjaCA9IGJ0ZnJlZWJhdGNoOwogCWFtcm91dGluZS0+YW1nZXRiaXRt YXAgPSBidGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbjsKLQlh bXJvdXRpbmUtPmFtbWFya3BvcyA9IGJ0bWFya3BvczsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3Mg PSBidHJlc3RycG9zOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQ7CiAJYW1y b3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbjsK IAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbjsKIAlh bXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuOwpAQCAtMjIwLDEz ICsyMjEsMTIgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpp c251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGlu IHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiB0dXBs ZXMgaW4gdGhlIHNjYW4uCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQly ZXM7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDEsNDQg KzI0MSwxOCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUg c28geWV0LCB3ZSBjYWxsCiAJCSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBp biB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJ CQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkg KiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0 dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJ LyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBh bGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBp bmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5v dCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9u IGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVu dGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9w dGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBq dXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxs ZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSAoaW50ICopCi0JCQkJCQlw YWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihpbnQpKTsKLQkJCQlpZiAoc28tPm51 bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+ bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBf YnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0 aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0J CS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkv KiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJ YnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRp dmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0 X3ByaW1fc2NhbihzY2FuLCBkaXIpKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwog fQogCiAvKgpAQCAtMjg4LDYgKzI2Miw3IEBAIGludDY0CiBidGdldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRp ZHMgPSAwOwogCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CiAKQEAgLTI5NiwyOSArMjcxLDMzIEBAIGJ0 Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJLyogRWFjaCBs b29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJ ZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJaWYgKF9idF9m aXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRoZSBmaXJzdCBi YXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAq LwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOworCQkJaW50CQkJaXRlbUluZGV4ID0g MDsKKworCQkJLyogU2F2ZSBmaXJzdCB0dXBsZSdzIFRJRCAqLworCQkJaGVhcFRpZCA9ICZiYXRj aC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFw VGlkLCAxLCBmYWxzZSk7CiAJCQludGlkcysrOwogCiAJCQlmb3IgKDs7KQogCQkJewotCQkJCS8q Ci0JCQkJICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIHdpdGhpbiBwYWdlLiAgVGhpcyBpcyB0aGUg c2FtZSBhcyB0aGUKLQkJCQkgKiBlYXN5IGNhc2UgaW4gX2J0X25leHQoKS4KLQkJCQkgKi8KLQkJ CQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKKwkJ CQkvKiBBZHZhbmNlIHRvIG5leHQgVElEIHdpdGhpbiBwYWdlLXNpemVkIGJhdGNoICovCisJCQkJ aWYgKCsraXRlbUluZGV4ID4gYmF0Y2gtPmxhc3RJdGVtKQogCQkJCXsKKwkJCQkJLyogYnRmcmVl YmF0Y2ggd29uJ3QgYmUgY2FsbGVkICovCisJCQkJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7 CisKIAkJCQkJLyogbGV0IF9idF9uZXh0IGRvIHRoZSBoZWF2eSBsaWZ0aW5nICovCi0JCQkJCWlm ICghX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQorCQkJCQlpdGVtSW5kZXgg PSAwOworCQkJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBi YXRjaCk7CisJCQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQkvKiBT YXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNv LT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKKwkJCQloZWFw VGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQkJdGJtX2FkZF90dXBs ZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJCX0KQEAgLTM0Niw4 ICszMjUsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cykKIAogCS8qIGFsbG9jYXRlIHByaXZhdGUgd29ya3NwYWNlICovCiAJc28gPSAoQlRTY2Fu T3BhcXVlKSBwYWxsb2Moc2l6ZW9mKEJUU2Nhbk9wYXF1ZURhdGEpKTsKLQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsK IAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkg cGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UK QEAgLTM2MSwxNiArMzM4LDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpCiAJc28tPm9yZGVyUHJvY3MgPSBOVUxMOwogCXNvLT5hcnJheUNvbnRl eHQgPSBOVUxMOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsJCS8qIHVudGlsIG5lZWRlZCAq LwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBkb24ndCBrbm93IHlldCB3aGV0 aGVyIHRoZSBzY2FuIHdpbGwgYmUgaW5kZXgtb25seSwgc28gd2UgZG8gbm90Ci0JICogYWxsb2Nh dGUgdGhlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMgdW50aWwgYnRyZXNjYW4uICBIb3dldmVyLCB3 ZSBzZXQgdXAKLQkgKiBzY2FuLT54c19pdHVwZGVzYyB3aGV0aGVyIHdlJ2xsIG5lZWQgaXQgb3Ig bm90LCBzaW5jZSB0aGF0J3Mgc28gY2hlYXAuCi0JICovCi0Jc28tPmN1cnJUdXBsZXMgPSBzby0+ bWFya1R1cGxlcyA9IE5VTEw7Ci0KIAlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsKTsKIAogCXNjYW4tPm9wYXF1ZSA9IHNvOwpAQCAtMzg3LDgyICszNTQsNTEgQEAgYnRy ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMs CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0J Lyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBw aW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVm b3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwot CQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShz by0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxl YWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9pZHMg bWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2Uu Ci0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGlu ZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFD VVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxzbyB1 bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3Qu Ci0JICoKLQkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQg bWFya3Mgc28tPmtpbGxlZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8g ZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1l IHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2Fu bmluZwotCSAqIHVubG9nZ2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFu IGFmZmVjdGVkIHBhZ2UncyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5n IGR1cmluZyB1bmxvZ2dlZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJl ZmVyYWJsZSB0byBvcHRpbmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5n KS4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdl cmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9y ZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXksIHNv IHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2Ug TFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4gc2hv dWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9ICgh c2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25h cHNob3QpICYmCi0JCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAm JgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUlu ZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0g ZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsK LQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZv ciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZp b3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3 b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0J ICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICoKLQkgKiBOT1RFOiB0aGlz IGRhdGEgc3RydWN0dXJlIGFsc28gbWFrZXMgaXQgc2FmZSB0byByZXR1cm4gZGF0YSBmcm9tIGEK LQkgKiAibmFtZSIgY29sdW1uLCBldmVuIHRob3VnaCBidHJlZSBuYW1lX29wcyB1c2VzIGFuIHVu ZGVybHlpbmcgc3RvcmFnZQotCSAqIGRhdGF0eXBlIG9mIGNzdHJpbmcuICBUaGUgcmlzayB0aGVy ZSBpcyB0aGF0ICJuYW1lIiBpcyBzdXBwb3NlZCB0byBiZQotCSAqIHBhZGRlZCB0byBOQU1FREFU QUxFTiwgYnV0IHRoZSBhY3R1YWwgaW5kZXggdHVwbGUgaXMgcHJvYmFibHkgc2hvcnRlci4KLQkg KiBIb3dldmVyLCBzaW5jZSB3ZSBvbmx5IHJldHVybiBkYXRhIG91dCBvZiB0dXBsZXMgc2l0dGlu ZyBpbiB0aGUKLQkgKiBjdXJyVHVwbGVzIGFycmF5LCBhIGZldGNoIG9mIE5BTUVEQVRBTEVOIGJ5 dGVzIGNhbiBhdCB3b3JzdCBwdWxsIHNvbWUKLQkgKiBkYXRhIG91dCBvZiB0aGUgbWFya1R1cGxl cyBhcnJheSAtLS0gcnVubmluZyBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgZm9yCi0JICogYSBTSUdT RUdWIGlzIG5vdCBwb3NzaWJsZS4gIFllYWgsIHRoaXMgaXMgdWdseSBhcyBzaW4sIGJ1dCBpdCBi ZWF0cwotCSAqIGFkZGluZyBzcGVjaWFsLWNhc2UgdHJlYXRtZW50IGZvciBuYW1lX29wcyBlbHNl d2hlcmUuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9 PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICog Mik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJ LyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+ bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4t Pm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4g PSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNr ID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vz c19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9 CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2gsIHJlbGVhc2luZyBpdHMgYnVm ZmVyIHBpbgorICoKKyAqIFhYWCBTaG91bGQgd2UgcmVhbGx5IGJlIGZyZWVpbmcgbWVtb3J5IGxp a2UgdGhpcz8gV2hhdCBpZiB3ZSB3ZXJlIHRvIGp1c3QKKyAqIHJldXNlIG1vc3QgbWVtb3J5IGFj cm9zcyBkaXN0aW5jdCBwYWdlcywgYXZvaWRpbmcgcGZyZWUvcGFsbG9jIGN5Y2xlcz8KKyAqLwor dm9pZAorYnRmcmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCkKK3sKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIGFyZSB0dXBsZXMgdG8ga2lsbCBmcm9tIHRo aXMgYmF0Y2ggKHRoYXQgd2VyZW4ndCBhbHJlYWR5CisJICoga2lsbGVkIGVhcmxpZXIgb24pCisJ ICovCisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfYnRfa2lsbGl0ZW1zKHNjYW4sIGJh dGNoKTsKKworCWlmIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KQorCQlwZnJlZShiYXRjaC0+aXRl bXN2aXNpYmlsaXR5KTsKKworCWlmIChiYXRjaC0+Y3VyclR1cGxlcykKKwkJcGZyZWUoYmF0Y2gt PmN1cnJUdXBsZXMpOworCisJaWYgKGJhdGNoLT5wb3MpCisJeworCQlpZiAoIXNjYW4tPmJhdGNo U3RhdGUgfHwgIXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4pCisJCQlSZWxlYXNlQnVmZmVyKGJh dGNoLT5idWYpOworCisJCXBmcmVlKGJhdGNoLT5wb3MpOworCX0KKworCXBmcmVlKGJhdGNoKTsK K30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ3 MSwxMTYgKzQwNyw1MCBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nh bk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4n dCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlm IChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5n IGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52 YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkv KiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUo c28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBp biBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1v cnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMg IT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMg IT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNo b3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAv KgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9z cmVzZXQoKSAtLSBpbnZhbGlkYXRlIHNjYW4ncyBhcnJheSBrZXlzCiAgKi8KIHZvaWQKLWJ0bWFy a3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggbWFya2JhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNjYW5Qb3MJcG9zOwogCi0JLyogVGhlcmUgbWF5IGJl IGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVy bjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2Ug bGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQg cG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJy UG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlz IG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRv IHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byByZXN0b3JlIGEgbWFyayBh c3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQgYmF0Y2guICBSZXNldCB0 aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJICovCi0JaWYgKEJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1JbmRleCA9IHNvLT5jdXJy UG9zLml0ZW1JbmRleDsKKwlwb3MgPSAoQlRTY2FuUG9zKSBtYXJrYmF0Y2gtPnBvczsKKwlfYnRf c3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBwb3MtPmRpcik7CisKKwkvKgorCSAqIENvcmUgc3lzdGVt IHdpbGwgaW52YWxpZGF0ZSBhbGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgorCSAqIERlYWwgd2l0aCB0 aGlzIGJ5IHVuc2V0dGluZyBuZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFz CisJICogd2VsbCBhcyBtb3JlTGVmdCwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3 YXksIHRoZSBuZXh0IHRpbWUKKwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRv IHRoZSByaWdodCAob3IgdG8gdGhlIGxlZnQpLiAgQXQgdGhhdAorCSAqIHBvaW50IF9idF9yZWFk cGFnZSB3aWxsIHJlc3RvcmUgdGhlIHNjYW4ncyBhcnJheXMgdG8gZWxlbWVudHMgdGhhdAorCSAq IGNvcnJlY3RseSB0cmFjayB0aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24gaW4gdGhlIGluZGV4J3Mg a2V5IHNwYWNlLgorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHBvcy0+ZGlyKSkK KwkJcG9zLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRh dGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoK LSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgot ICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVt SW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBh IG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0 ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBh bnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNv LT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0Jewot CQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBv ciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBw YWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdy ZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3 ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFu eSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2ls bGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0J CX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1 bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICov Ci0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJS ZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5t YXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJ ICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYg KHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBs ZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0 aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlm IChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4s IHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQot CQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJ cG9zLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5z Y2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAog LyoKQEAgLTgyNywxNSArNjk3LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9t b3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdl IHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0 aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNz IHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3Jl YWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC05ODUsOCArODQ2LDYgQEAgX2J0 X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBi dHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJh bGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IGQ2OTc5ODc5NS4uNjIxMWU5NTQ4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTI1LDYyICsyNSwzMyBA QAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJv cF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOwogc3Rh dGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRT dGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0 X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0 YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2Us CiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0pOwotc3RhdGljIGJvb2wgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVt YmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOwotc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJU U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVt LCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorc3RhdGljIGJvb2wgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2Up Oworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQg aXRlbUluZGV4LAorCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCwK KwkJCQkJCSBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIEl0ZW1Qb2ludGVyIGhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhU dXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nh bk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGlu dCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0o SW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCQkgICBPZmZz ZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1 cGxlT2Zmc2V0KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5E ZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVh ZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJ CQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVy IGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7 CisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCk7CitzdGF0 aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBC bG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIs IGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xl ZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotCi0KLS8qCi0gKglfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9jayBzby0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlz IHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJl dmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgot ICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxh dGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKLXsKLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJ LyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBpbikgKi8KLQkJX2J0X3VubG9ja2J1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIERyb3AgYm90 aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgotCSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9z LmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFzIGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4g Y29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4g cGxhY2UuCi0JICovCi0JQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0Jc28tPmN1cnJQ b3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1 ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZl cjsKLX0KK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggZmlyc3Ri YXRjaCk7CiAKIC8qCiAgKglfYnRfc2VhcmNoKCkgLS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBh cnRpY3VsYXIgc2NhbmtleSwKQEAgLTg3MCwyMCArODQxLDE2IEBAIF9idF9jb21wYXJlKFJlbGF0 aW9uIHJlbCwKICAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5k IHRoZSBmaXJzdCBpdGVtIChvciwKICAqCQlpZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRl bSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCiAgKgkJcXVhbGlmaWNhdGlvbnMgaW4g dGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNo aW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9z LiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2Un cyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBk cm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0 aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQltYXRj aGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byB0aGUgcmV0dXJu ZWQgYmF0Y2guCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBp bmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBz by0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNo aW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3Rl IHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWls dCBmcm9tIGl0LAogICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUv UkVBRE1FIGZvciBtb3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2Ug YnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxv Y2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRj aAogX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Nyw4ICs4NjQsNyBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVn eU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsKIAlCbG9ja051bWJlciBibGtu byA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KCFC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRj aDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlzIGFuZCBlbGltaW5hdGUgYW55IHJl ZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MjMsNyArODg5LDcgQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4t PnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgogCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZi bGtubywgJmxhc3RjdXJyYmxrbm8sIHRydWUpKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBm YWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5uZWVkUHJpbXNjYW4gaXMgdW5zZXQpICov CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05NDAsMTQgKzkwNiw4IEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKiBfYnRfcmVhZG5leHRw YWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAobm90IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJ ICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwpOwotCQlBc3NlcnQoIXNv LT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9i dF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0J CQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4g dHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxr bm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTEyMzksNiArMTE5OSwxMCBAQCBfYnRfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJfQogCX0KIAorCS8q IEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleF9i YXRjaF9hbGxvYyhNYXhUSURzUGVyQlRyZWVQYWdlLCBzY2FuLT54c193YW50X2l0dXApOworCWZp cnN0YmF0Y2gtPnBvcyA9IHBhbGxvYyhzaXplb2YoQlRTY2FuUG9zRGF0YSkpOworCiAJLyoKIAkg KiBJZiB3ZSBmb3VuZCBubyB1c2FibGUgYm91bmRhcnkga2V5cywgd2UgaGF2ZSB0byBzdGFydCBm cm9tIG9uZSBlbmQgb2YKIAkgKiB0aGUgdHJlZS4gIFdhbGsgZG93biB0aGF0IGVkZ2UgdG8gdGhl IGZpcnN0IG9yIGxhc3Qga2V5LCBhbmQgc2NhbiBmcm9tCkBAIC0xMjQ3LDcgKzEyMTEsNyBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3Rl OiBjYWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJh bGxlbCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50 KHNjYW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNo KTsKIAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGlu IHRoZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUxMywxMiArMTQ3NywxMiBAQCBfYnRfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJz ZWx2ZXMgb24gdGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlzdGFjayA9IF9idF9zZWFy Y2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFEKTsKKwlzdGFj ayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVmLCBCVF9S RUFEKTsKIAogCS8qIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgc3RhY2sgYXJvdW5kLi4uICovCiAJ X2J0X2ZyZWVzdGFjayhzdGFjayk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3Mu YnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCUFzc2Vy dCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAgLTE1MzQsMTEgKzE0OTgsMTEgQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25J c1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2Fu LT54c19zbmFwc2hvdCk7Ci0JCQlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5 LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFEKTsKKwkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWws IE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCQkJX2J0X2ZyZWVz dGFjayhzdGFjayk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVm KSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtMTU0NiwxMSArMTUxMCwx MSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl9 CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51 bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgZmlyc3RiYXRjaC0+YnVmKTsKIAogCS8qCiAJ ICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuICh1c3VhbGx5 IHRoZSBwYWdlCi0JICogY3VycmVudGx5IGluIHNvLT5jdXJyUG9zLmJ1ZikuCisJICogY3VycmVu dGx5IGluIGZpcnN0YmF0Y2guYnVmKS4KIAkgKgogCSAqIElmIGluc2tleS5uZXh0a2V5ID0gZmFs c2UgYW5kIGluc2tleS5iYWNrd2FyZCA9IGZhbHNlLCBvZmZudW0gaXMKIAkgKiBwb3NpdGlvbmVk IGF0IHRoZSBmaXJzdCBub24tcGl2b3QgdHVwbGUgPj0gaW5za2V5LnNjYW5rZXlzLgpAQCAtMTU2 OCw2OSArMTUzMiw3OSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMg Ym90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9u LXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICgh X2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0K LQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9y ZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKICAq CV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgogICoKLSAqCQlPbiBl bnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBi ZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRl eCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAq CQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3Qg cmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdz IHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIHBhZ2UgdG8gcmVh ZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQg YXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0ZW0gdG8g cmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KKyAqCQlPbiBz dWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxl YXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3 ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUg dHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwgYmUg cG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0 aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhh dCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyks IHdlIHJldHVybiBOVUxMLiAgSXQnbGwgc3RpbGwgYmUKKyAqCQlwb3NzaWJsZSBmb3IgdGhlIHNj YW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sIHRob3VnaAorICoJCXdl J2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4K ICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKK0luZGV4U2NhbkJhdGNoCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9ja051bWJlciBibGtubywKKwkJ CQlsYXN0Y3VycmJsa25vOworCUJUU2NhblBvcwlwcmlvcnBvcyA9IChCVFNjYW5Qb3MpIHByaW9y YmF0Y2gtPnBvczsKIAotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJ QXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoKnByaW9ycG9zKSk7CisKKwkvKiBXYWxrIHRvIHRoZSBu ZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK KwkJYmxrbm8gPSBwcmlvcnBvcy0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IHByaW9ycG9z LT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gcHJpb3Jwb3MtPmN1cnJQYWdlOwogCiAJLyoK LQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdz IG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCisJ ICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4g dGhlIGNhbGwgdG8KKwkgKiBfYnRfcmVhZHBhZ2UgZm9yIHBvcyBoYXBwZW5lZCB0byB1c2UgdGhl IG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lCisJICogdGhhdCB3ZSdyZSBzdGVwcGluZyBp biBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cworCSAqIGFz LWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQogCSAq LwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJaWYgKHByaW9ycG9zLT5kaXIg IT0gZGlyKQorCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisKKwlpZiAoYmxrbm8gPT0gUF9O T05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIXByaW9ycG9zLT5t b3JlUmlnaHQgOiAhcHJpb3Jwb3MtPm1vcmVMZWZ0KSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0Jewot CQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0J CXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwot CQl9CisJCS8qCisJCSAqIHByaW9ycG9zIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4g dGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkgKiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQg dGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlfYnRfcGFyYWxs ZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JX2J0X3JldHVybml0ZW0oc2Nh biwgc28pOwotCXJldHVybiB0cnVlOworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUg c2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5V TEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25v LCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4g d2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0g TG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9i dF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5l d2JhdGNoLgogICoKLSAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBz by0+Y3VyclBvcy5idWY7IHRoZSBidWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVy ZS4gIEFsc28sIGN1cnJQb3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwot ICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Yg c28tPmN1cnJQb3MgYXJlCi0gKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KKyAqIENh bGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRoZSBi dWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIHBvcy5tb3JlTGVm dCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7IHRoZXkgYXJlCisgKiB1cGRhdGVkIGFzIGFw cHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBuZXdiYXRjaCBhcmUgaW5pdGlhbGl6ZWQg ZnJvbQorICogc2NyYXRjaCBoZXJlLgogICoKICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBz dGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmluZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rp b24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3Vy clBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBr ZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5pdGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdo dCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFyZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAg KiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVu dCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxkIGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1p dGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBoYXMgYXJyYXlzKS4KQEAgLTE2NDIsOCArMTYxNiw4 IEBAIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiBS ZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxz ZSBpZiBub25lLgogICovCiBzdGF0aWMgYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBm aXJzdHBhZ2UpCitfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBuZXdiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwg Ym9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK IAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC0xNjU0 LDM3ICsxNjI4LDM1IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCUJUUmVhZFBhZ2VTdGF0ZSBwc3RhdGU7 CiAJYm9vbAkJYXJyYXlLZXlzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9 IDAsCiAJCQkJaW5kbmF0dHM7CisJQlRTY2FuUG9zCXBvcyA9IG5ld2JhdGNoLT5wb3M7CiAKIAkv KiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxp bmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9w YXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9f cHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRl bGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJl X3BpbiAqLwotCXNvLT5jdXJyUG9zLmRpciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVP ZmZzZXQgPSAwOworCXBvcy0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRj aC0+YnVmKTsKKwlwb3MtPnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7CisJcG9zLT5uZXh0 UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OworCXBvcy0+ZGlyID0gZGlyOworCisJc28tPnBvcyA9 IHBvczsJCQkJLyogX2J0X2NoZWNra2V5cyBuZWVkcyB0aGlzICovCiAKIAkvKiBlaXRoZXIgbW9y ZVJpZ2h0IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIp ICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1v cmVSaWdodCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8gcG9zLT5tb3JlUmlnaHQgOiBwb3MtPm1vcmVMZWZ0KTsKIAlB c3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKIAlpZiAoc2Nhbi0+cGFy YWxsZWxfc2NhbikKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkg b3RoZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQ YWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3Jl bGVhc2Uoc2NhbiwgcG9zLT5uZXh0UGFnZSwgcG9zLT5jdXJyUGFnZSk7CiAJCWVsc2UKLQkJCV9i dF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAotCQkJCQkJCQkg c28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgcG9z LT5wcmV2UGFnZSwgcG9zLT5jdXJyUGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVs LCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxv Y2tQYWdlKHJlbCwgcG9zLT5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOwogCiAJLyogaW5p dGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KIAlpbmRuYXR0cyA9IEluZGV4UmVsYXRpb25HZXRO dW1iZXJPZkF0dHJpYnV0ZXMocmVsKTsKQEAgLTE3MjIsMTEgKzE2OTQsMTAgQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUu ZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5k ZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7 CisJCQkJCXBvcy0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0 cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9w cmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQ YWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwb3MtPmN1 cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTE3OTAsMjggKzE3 NjEsMjggQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0 dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsr OwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJ aW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKgogCQkJCQkgKiBTZXQgdXAgc3RhdGUgdG8gcmV0 dXJuIHBvc3RpbmcgbGlzdCwgYW5kIHJlbWVtYmVyIGZpcnN0CiAJCQkJCSAqIFRJRAogCQkJCQkg Ki8KLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBp dGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0 aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVl VHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJ CQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJLyogUmVt ZW1iZXIgYWRkaXRpb25hbCBUSURzICovCiAJCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVU dXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKLQkJCQkJCV9idF9zYXZlcG9zdGlu Z2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShu ZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0 aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNl T2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJCQkJfQpAQCAtMTg1MSwxMiAr MTgyMiwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVl c2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJcG9zLT5tb3JlUmln aHQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2Up OwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9 IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNo LT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwog CX0KIAllbHNlCiAJewpAQCAtMTg3MywxMSArMTg0MywxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJ CQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkp CiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFm dGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQlwb3Mt Pm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlp ZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hl ZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJ CV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwb3MtPmN1cnJQYWdlKTsKIAkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTE5NzgsMTEgKzE5NDcsMTEgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qCiAJCQkJCSAqIFNldCB1cCBzdGF0 ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmlyc3QKQEAgLTE5OTUsMTcg KzE5NjQsMTcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUg c2FtZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAJCQkJCSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJ CQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5k ZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVH ZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBp dHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQkvKiBSZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8K IAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkr KykKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0 Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04o aXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNl dCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC0yMDIxLDEyICsxOTkwLDExIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGlu dWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCXBvcy0+bW9yZUxl ZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwotCQlzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4VElEc1Bl ckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1heFRJRHNQZXJCVHJl ZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQluZXdiYXRj aC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9CiAKIAkvKgpAQCAtMjA0 MywyMDIgKzIwMTEsOTUgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUu Zm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBz by0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5l d2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5l d2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCkKK19idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50 IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGlu dCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQ b3MuaXRlbXNbaXRlbUluZGV4XTsKLQogCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkg JiYgIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBp dHVwLT50X3RpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5j dXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVsYXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJh eSAqLworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQgPSBpdHVwLT50X3RpZDsK KwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlm IChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVT aXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRU dXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1 cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQg Kz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVP ZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0 dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0 dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZy b20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0 ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICog cmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBv c3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5n aXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1J bmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25k IG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICog YnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZz ZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQg aWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVw bGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVk ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCSAgSXRlbVBvaW50 ZXIgaGVhcFRpZCwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4 U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAor CQkJCQkgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9m ZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tp dGVtSW5kZXhdOworCUluZGV4U2NhbkJhdGNoUG9zSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRl bXNbaXRlbUluZGV4XTsKIAogCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAot CWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0g b2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwkvKiBjb3B5IHRoZSBwb3B1bGF0ZWQgcGFy dCBvZiB0aGUgaXRlbXMgYXJyYXkgKi8KKwlpdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJaXRl bS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJ ewogCQkvKiBTYXZlIGJhc2UgSW5kZXhUdXBsZSAodHJ1bmNhdGUgcG9zdGluZyBsaXN0KSAqLwog CQlJbmRleFR1cGxlCWJhc2U7CiAJCVNpemUJCWl0dXBzeiA9IEJUcmVlVHVwbGVHZXRQb3N0aW5n T2Zmc2V0KGl0dXApOwogCiAJCWl0dXBzeiA9IE1BWEFMSUdOKGl0dXBzeik7Ci0JCWN1cnJJdGVt LT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJYmFzZSA9IChJ bmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQp OworCQlpdGVtLT50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJYmFzZSA9IChJbmRleFR1 cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQpOwogCQltZW1jcHkoYmFz ZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyogRGVmZW5zaXZlbHkgcmVkdWNlIHdvcmsgYXJlYSBpbmRl eCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwogCQliYXNlLT50X2luZm8gJj0gfklOREVYX1NJWkVfTUFT SzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0dXBzejsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zm c2V0ICs9IGl0dXBzejsKKwkJKnR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKIAotCQlyZXR1cm4gY3Vy ckl0ZW0tPnR1cGxlT2Zmc2V0OworCQlyZXR1cm4gaXRlbS0+dHVwbGVPZmZzZXQ7CiAJfQogCiAJ cmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIFNhdmUgYW4gaW5kZXgg aXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwog ICogdHVwbGUuCiAgKgogICogQXNzdW1lcyB0aGF0IF9idF9zZXR1cHBvc3RpbmdpdGVtcygpIGhh cyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBjdXJyZW50Ci0gKiBwb3N0aW5nIGxpc3QgdHVwbGUu ICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgdHVwbGVPZmZzZXQuCisgKiBwb3N0 aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgYmFzZU9m ZnNldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nh bk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJSXRl bVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KQorX2J0X3NhdmVwb3N0aW5naXRlbShJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKKwkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2Fu UG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlJbmRl eFNjYW5CYXRjaFBvc0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAK LQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9 IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNh bWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJv bSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1 cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OwotfQotCi0vKgotICogUmV0dXJuIHRo ZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4 XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGlu IGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQK LV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewot CUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9z Lml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1 Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNz ZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFz c2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0J LyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54 c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlz Y2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50 dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQg cGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9i dF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQg cGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBi dWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHks IHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhv dWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxv Y2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCbG9ja051bWJlciBibGtubywKLQkJCQlsYXN0Y3VycmJs a25vOwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJl Zm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8K LQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgot CSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0 YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRpb24gdGhhdCBuZWVkcyBpdC4KLQkgKi8K LQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJl bnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1cnJQ b3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAgb2Zm c2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJ dGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJ bWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3VyclBv cy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0 ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3ZSdy ZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAq IChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRzIHRv IHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBt b3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJy ZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRha2Vu IHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAotCQkg KiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlz IGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJrUG9z IHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtlIHRo aXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1h cmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVyIG1p Z2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhl IHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICogSW4g ZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0aGUg Zmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQg aGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0J CXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJ c28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bvcy5t b3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBi eSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwotCX0K LQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCi0JLyogV2FsayB0byB0 aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCi0JCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JZWxzZQotCQlibGtubyA9IHNv LT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFn ZTsKLQotCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2No ZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFw cGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQg d2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFy cmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2 YW5jZSB0aGVtLikKLQkgKi8KLQlpZiAoc28tPmN1cnJQb3MuZGlyICE9IGRpcikKLQkJc28tPm5l ZWRQcmltU2NhbiA9IGZhbHNlOwotCi0JcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxl cykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAvKgpAQCAtMjI1Myw3 MyArMjExNCw5NiBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKICAqIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tl eXMgYWdhaW5zdCB0aGUgaGlnaCBrZXkuICBTZWUKICAqIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBk ZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQg bG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2gg bXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxs aW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9z IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRh dGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVs IHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xs IGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3Ri YXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxh c3RjdXJyYmxrbm87CisJQlRTY2FuUG9zCWZpcnN0cG9zID0gZmlyc3RiYXRjaC0+cG9zOwogCi0J c28tPm51bUtpbGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUlu ZGV4ID0gLTE7CQkvKiBkaXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3Ig dGhlIGZpcnN0IHBhZ2UgKHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxp emUgZmlyc3RiYXRjaCdzIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+ bmVlZFByaW1TY2FuKQogCXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5j dXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK KwkJZmlyc3Rwb3MtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3Rwb3MtPm1vcmVSaWdodCA9IHRy dWU7CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsK LQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3Rwb3MtPm1vcmVMZWZ0ID0g ZmFsc2U7CisJCWZpcnN0cG9zLT5tb3JlUmlnaHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlz by0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZh bHNlOworCQlmaXJzdHBvcy0+bW9yZUxlZnQgPSB0cnVlOworCQlmaXJzdHBvcy0+bW9yZVJpZ2h0 ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVz IGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdp bGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUg dGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNo IGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChl dmVuIHdoZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2Fu LCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNo LCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwotCi0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBs b2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBh cmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQo QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5 YmVfcGluKHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHN1Y2Nl ZWRlZCAqLworCQlpbmRleF9iYXRjaF91bmxvY2socmVsLCBzY2FuLT5iYXRjaFN0YXRlICYmIHNj YW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4sCisJCQkJCQkgICBmaXJzdGJhdGNoKTsKKwkJcmV0dXJu IGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRh IG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxvY2tidWYoc2Nhbi0+ aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5 LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gZmlyc3RiYXRjaC0+YnVmICovCisJX2J0X3Jl bGJ1ZihyZWwsIGZpcnN0YmF0Y2gtPmJ1Zik7CisJZmlyc3RiYXRjaC0+YnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdl IHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQly ZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJsa25vID0gZmlyc3Rwb3MtPm5leHRQ YWdlOworCWVsc2UKKwkJYmxrbm8gPSBmaXJzdHBvcy0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtu byA9IGZpcnN0cG9zLT5jdXJyUGFnZTsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRlciBw YWdlIChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOworCUFz c2VydChmaXJzdHBvcy0+ZGlyID09IGRpcik7CisKKwkvKiBmaXJzdGJhdGNoIHdpbGwgbmV2ZXIg YmUgcmV0dXJuZWQgdG8gc2Nhbiwgc28gZnJlZSBpdCBvdXRzZWx2ZXMgKi8KKwlwZnJlZShmaXJz dGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSA/CisJCSAhZmlyc3Rwb3MtPm1vcmVSaWdodCA6ICFmaXJzdHBvcy0+bW9yZUxl ZnQpKQorCXsKKwkJLyoKKwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBz Y2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3 YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJcGZy ZWUoZmlyc3Rwb3MpOworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJcGZyZWUoZmlyc3Rwb3MpOworCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXpl IHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4g IT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJy Ymxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmlt U2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtu bywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0yMzI5LDEwMiArMjIx Myw3MCBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZlZCByaWdodCBs aW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhhdAogICogd2Fz IGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBzYXZlZCwgd2hp Y2ggd2UgdXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9wYWdl IGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNvbW1vbiBjYXNl IHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9zLm5leHRQYWdl Ci0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgc28tPmN1 cnJQb3MuY3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3Igc2NhbiBwb3NpdGlvbidzIG5l eHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gc2NhbgorICogZGlyZWN0aW9uKSwgYW5k IGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIHBvc2l0aW9uJ3MgY3VyclBhZ2UuCiAgKgotICog T24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2NrZWQgYnkgY2FsbGVyLiAgc28t PmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIvdW5waW5uZWQgYXMgbmVlZGVk IGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAqIHdvbid0IG5lZWQgdG8gYmUg cmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFsbGVsIHNjYW4gY2FsbGVycwot ICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZSBzaG91bGQgcGFzcyBz ZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBhbmQgbGFzdGN1cnJibGtubyBh cmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAqIHNlaXplZD1mYWxzZSBjYWxs ZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtubyB0YWtlbiBmcm9tIHRoZWly Ci0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28tPmN1cnJQb3MgaXRzZWxmKSBj YW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3Mg Ymxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBhZ2UKLSAqIHRoYXQgbXVzdCBi ZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhvdWdoLiAgV2UgbXVzdCBmaWd1 cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBzZWl6aW5nIHRoZSBzY2FuICh0 aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVhZHkgYmUgYmV5b25kIHRoZSBz ZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwKLSAqIHVu bGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3VyclBvcy5wcmV2UGFnZSBpcyBh bHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBvcy5tb3JlUmlnaHQvc28tPmN1 cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBPbiBlbnRyeSwgbm8gcGFnZSBz aG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBzdWNjZXNzIGV4aXQsIHNvLT5j dXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20gdGhlIG5leHQKLSAqIGludGVy ZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1 ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5nIHNvLT5kcm9wUGluIGluZGV4 IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJseSB0byBhdm9pZCBibG9ja2lu ZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHNjYW4gYmF0Y2ggY29udGFp bmluZyBkYXRhIGZyb20gdGhlIG5leHQKKyAqIGludGVyZXN0aW5nIHBhZ2UuICBXZSBob2xkIGEg cGluIG9uIHRoZSBidWZmZXIgb24gc3VjY2VzcyBleGl0IChleGNlcHQKKyAqIGR1cmluZyBkcm9w UGluIHBsYWluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbiBlYWdlcmx5IHRvIGF2 b2lkCisgKiBibG9ja2luZyBWQUNVVU0pLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcg cmVjb3JkcyBpbiB0aGUgZ2l2ZW4KKyAqIGRpcmVjdGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4K ICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRzIGluIHRoZSBnaXZl biBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJyUG9zICh3aGlsZSBlbnN1cmlu ZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0dXJuIGZhbHNlLgotICoKLSAq IFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCBy ZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFs bGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBhcmFsbGVsIHNjYW4gY2FsbGVy cyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBibGtubyBhbmQKKyAq IGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uICBXZSdsbCBy ZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9v bAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8s IFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1 cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIG5ld2JhdGNoOworCUJUU2NhblBv cwluZXdwb3M7CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtu byB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJsa25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlB c3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3Bh Y2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKE1heFRJ RHNQZXJCVHJlZVBhZ2UsIHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJbmV3YmF0Y2gtPnBvcyA9IHBh bGxvYyhzaXplb2YoQlRTY2FuUG9zRGF0YSkpOworCW5ld3BvcyA9IG5ld2JhdGNoLT5wb3M7CiAK IAkvKgotCSAqIFJlbWVtYmVyIHRoYXQgdGhlIHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxr bm8sIGEgcGFnZSB0byB0aGUgbGVmdAotCSAqIG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5n IGEgcGFnZSB0byB0aGUgcmlnaHQsIGZvciBiYWNrd2FyZHMgc2NhbnMpCisJICogcG9zIGlzIHRo ZSBmaXJzdCB2YWxpZCBwYWdlIHRvIHRoZSByaWdodCAob3IgdG8gdGhlIGxlZnQpIG9mCisJICog bGFzdGN1cnJibGtuby4gIEFsc28gcHJvdmlzaW9uYWxseSBhc3N1bWUgdGhhdCB0aGVyZSdsbCBi ZSBhbm90aGVyIHBhZ2UKKwkgKiB3ZSdsbCBuZWVkIHRvIHRoZSByaWdodCAob3IgdG8gdGhlIGxl ZnQpIGFoZWFkIG9mIF9idF9yZWFkcGFnZSBjYWxsLgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0J CXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJbmV3cG9zLT5tb3JlTGVmdCA9IHRydWU7 CisJbmV3cG9zLT5tb3JlUmlnaHQgPSB0cnVlOwogCiAJZm9yICg7OykKIAl7CiAJCVBhZ2UJCXBh Z2U7CiAJCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAKLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAot CQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVS aWdodCA6ICFzby0+Y3VyclBvcy5tb3JlTGVmdCkpCi0JCXsKLQkJCS8qIG1vc3QgcmVjZW50IF9i dF9yZWFkcGFnZSBjYWxsIChmb3IgbGFzdGN1cnJibGtubykgZW5kZWQgc2NhbiAqLwotCQkJQXNz ZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0J CQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCV9idF9wYXJhbGxlbF9kb25l KHNjYW4pOwkvKiBpZmYgIXNvLT5uZWVkUHJpbVNjYW4gKi8KLQkJCXJldHVybiBmYWxzZTsKLQkJ fQotCi0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBt dXN0IG5ldmVyIGFjdHVhbGx5IHZpc2l0IHNvLT5jdXJyUG9zIGJsa25vICovCi0JCWlmICghc2Vp emVkICYmIHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgotCQkJIV9idF9wYXJhbGxlbF9z ZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdo b2xlIHNjYW4gaXMgbm93IGRvbmUgKG9yIGFub3RoZXIgcHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQp ICovCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQorCQlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJp bVNjYW4pOworCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9O T05FKTsKIAogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQl7CiAJCQkvKiBy ZWFkIGJsa25vLCBidXQgY2hlY2sgZm9yIGludGVycnVwdHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxr bm8sIEJUX1JFQUQpOworCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywg QlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyBy YWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAotCQkJCQkJCQkJCQkJCQkg bGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IEludmFsaWRCdWZmZXIp CisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxr bm8sCisJCQkJCQkJCQkJCQkJICAgbGFzdGN1cnJibGtubyk7CisJCQlpZiAobmV3YmF0Y2gtPmJ1 ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3QgaGF2ZSBiZWVuIGEgY29uY3Vy cmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCQkJcmV0dXJu IGZhbHNlOworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gt PmJ1Zik7CiAJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtu byA9IGJsa25vOwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTI0MzIsMTcg KzIyODQsMTcgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBh Z2UgKi8KIAkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyog bm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2Vp emVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJ CSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQli bGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gbmV3cG9zLT5uZXh0UGFn ZTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFy IG1vcmVMZWZ0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBk aXIsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9y ZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51 bWJlcihwYWdlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5wcmV2UGFnZTsKKwkJCQlibGtubyA9IG5ld3Bvcy0+cHJldlBhZ2U7CiAJCQl9CiAJCX0K IAkJZWxzZQpAQCAtMjQ1NywxOSArMjMwOSwzNiBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0 dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYp OwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5 IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0Y2gtPmJ1Zik7CisJCW5ld2JhdGNoLT5i dWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGly ZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8KKwkJCSAhbmV3cG9zLT5tb3JlUmlnaHQgOiAhbmV3cG9zLT5tb3JlTGVm dCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2Fu IGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNjYW4gd2Fz IHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLworCQkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFs bGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAo c2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNj YW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJCXJldHVybiBOVUxMOwkJLyog ZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwkJZmlyc3RwYWdlID0g ZmFsc2U7CQkvKiBuZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBf YnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4p IG9uCi0JICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJl dHVybmluZyB0dXBsZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJs a25vKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJv cF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHN1Y2NlZWRl ZCAqLworCUFzc2VydChuZXdwb3MtPmN1cnJQYWdlID09IGJsa25vKTsKKwlpbmRleF9iYXRjaF91 bmxvY2socmVsLCBzY2FuLT5iYXRjaFN0YXRlICYmIHNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4s CisJCQkJCSAgIG5ld2JhdGNoKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBuZXdiYXRjaDsK IH0KIAogLyoKQEAgLTI2OTIsMjUgKzI1NjEsMjMgQEAgX2J0X2dldF9lbmRwb2ludChSZWxhdGlv biByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBzY2FuIGNh bGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICog RXhpdCBjb25kaXRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAgKi8KLXN0 YXRpYyBib29sCi1fYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUg b3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNzZXJ0KCEo KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKIAogCS8qCiAJICog U2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3QgbGVhZiBwYWdlLiAgVGhpcyBp cyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9zZWFyY2goKS4KIAkgKi8KLQlzby0+ Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQoZGlyKSk7CisJZmlyc3RiYXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAs IFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNv LT5jdXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1ZikpCiAJ ewogCQkvKgogCQkgKiBFbXB0eSBpbmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5v dGhpbmcgZmluZXIgdG8gbG9jawpAQCAtMjcyMSw3ICsyNTg4LDcgQEAgX2J0X2VuZHBvaW50KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCXJldHVybiBmYWxzZTsKIAl9 CiAKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKGZpcnN0YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBh Z2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUpKTsKIApAQCAtMjc0Nyw5ICsyNjE0LDUgQEAg X2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJLyoK IAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4uCiAJICov Ci0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBzdGFydCwgZGlyKSkKLQkJcmV0dXJuIGZh bHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCXJldHVy biBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBzdGFydCwgZGlyKTsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCBlZGZlYTJhY2EuLmE5MmJkNzg3YSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMTAyMSwxNCArMTAyMSw2IEBA IF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgc3RhdGUg dGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAqIHdlcmUgY2FsbGVkLiAgVGhp cyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBpbiB0aGUKIAkgKiBj dXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlzLCBzY2FucyBjb3Vs ZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBn ZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQgb2YgaXRlbXMgdG8K LQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVwYXJlcyBhbGwgdGhl IGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28tPmN1cnJQb3MuICBX aGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNhbCBmb3Igc28tPmN1 cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5hbGx5Ci0JICogcmV0 dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0aGUgc2NhbidzIGFy cmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91Z2ggLS0gYW5kIGlu IGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlfYnRfc3RhcnRfYXJyYXlfa2V5 cyhzY2FuLCAtZGlyKTsKIApAQCAtMTM5NSw3ICsxMzg3LDcgQEAgX2J0X2FkdmFuY2VfYXJyYXlf a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLAogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCVNjYW5EaXJlY3Rpb24gZGlyID0gc28tPmN1cnJQ b3MuZGlyOworCVNjYW5EaXJlY3Rpb24gZGlyID0gc28tPnBvcy0+ZGlyOwogCWludAkJCWFycmF5 aWR4ID0gMDsKIAlib29sCQliZXlvbmRfZW5kX2FkdmFuY2UgPSBmYWxzZSwKIAkJCQlza2lwX2Fy cmF5X2FkdmFuY2VkID0gZmFsc2UsCkBAIC0yMDM0LDEzICsyMDI2LDEzIEBAIG5ld19wcmltX3Nj YW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50 IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9uZXh0LCB3 aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJdCBpcyB1cCB0byBf YnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkg KiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBj dXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVj dGlvbiBvcHBvc2l0ZSBwb3MtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZh bHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmlt U2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJaWYgKHNj YW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2Fu LCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBzby0+cG9zLT5jdXJyUGFnZSk7CiAKIAkvKiBDYWxsZXIncyB0dXBsZSBkb2Vzbid0 IG1hdGNoIHRoZSBuZXcgcXVhbCAqLwogCXJldHVybiBmYWxzZTsKQEAgLTIxNTMsNyArMjE0NSw3 IEBAIF9idF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBz dGF0ZSwgYm9vbCBhcnJheUtleXMsCiB7CiAJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlTY2FuRGlyZWN0aW9uIGRpciA9IHNvLT5jdXJyUG9zLmRp cjsKKwlTY2FuRGlyZWN0aW9uIGRpciA9IHNvLT5wb3MtPmRpcjsKIAlpbnQJCQlpa2V5ID0gcHN0 YXRlLT5zdGFydGlrZXk7CiAJYm9vbAkJcmVzOwogCkBAIC0zMTYwLDcgKzMxNTIsNyBAQCBfYnRf Y2hlY2trZXlzX2xvb2tfYWhlYWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUg KnBzdGF0ZSwKIAkJCQkJCSBpbnQgdHVwbmF0dHMsIFR1cGxlRGVzYyB0dXBkZXNjKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlTY2FuRGlyZWN0 aW9uIGRpciA9IHNvLT5jdXJyUG9zLmRpcjsKKwlTY2FuRGlyZWN0aW9uIGRpciA9IHNvLT5wb3Mt PmRpcjsKIAlPZmZzZXROdW1iZXIgYWhlYWRvZmZudW07CiAJSW5kZXhUdXBsZQlhaGVhZDsKIApA QCAtMzIzNCw3MCArMzIyNiw2OCBAQCBfYnRfY2hlY2trZXlzX2xvb2tfYWhlYWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwKICAqIGN1cnJlbnQgcGFnZSBhbmQg a2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKICAq IGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCiAgKgotICogQ2FsbGVyIHNob3VsZCBub3Qg aGF2ZSBhIGxvY2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQotICog YnVmZmVyIHBpbiB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3 b24ndCBiZSBsb2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMg d2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZl IGEgbG9jayBvbiB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBob2xkIGEKKyAq IGJ1ZmZlciBwaW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24n dCBiZSBsb2NrZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdl cmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKICAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhl YXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKICAq IExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24g dGhlIHRhcmdldCBwYWdlCiAgKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0 aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNv LT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24g dGhlCisgKiAoaWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRl bGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQogICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0 IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKICAqIHRoYXQgd2Un bGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNs ZWQgVElECiAgKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRo YXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKICAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0 aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5k cm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RF QUQgYml0cyBvbgorICogKGkuZS4gZHJvcFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBj b25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KICAqIHRoZSBwYWdlIExTTiBoYXZpbmcg bm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9idF9yZWFkcGFnZSBzYXcgdGhlIHBhZ2UuCiAg KiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFn ZSBMU04gY2hhbmdlZC4KICAqCi0gKiBXZSBnaXZlIHVwIG11Y2ggbGVzcyBvZnRlbiBkdXJpbmcg IXNvLT5kcm9wUGluIHNjYW5zLCBidXQgaXQgc3RpbGwgaGFwcGVucy4KKyAqIFdlIHRlbmQgdG8g Z2l2ZSB1cCBsZXNzIG9mdGVuIGR1cmluZyAhZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhh cHBlbnMuCiAgKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdo dCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCiAgKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1 cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0CiAgKiBhbmQg anVzdCBnaXZlIHVwIG9uIGl0LgogICovCiB2b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbikKK19idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nh bk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNjYW5Qb3MJcG9z ID0gKEJUU2NhblBvcykgYmF0Y2gtPnBvczsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBv cGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWlu dAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7CisJaW50CQkJbnVtS2lsbGVkID0gYmF0Y2gt Pm51bUtpbGxlZDsKIAlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKIAlCdWZmZXIJCWJ1 ZjsKIAogCUFzc2VydChudW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpOworCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKCpwb3MpKTsKIAlBc3NlcnQo c2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBz Y2FuICovCiAKLQkvKiBBbHdheXMgaW52YWxpZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUg bGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5udW1LaWxsZWQgPSAwOworCS8qIEFsd2F5cyBp bnZhbGlkYXRlIGJhdGNoLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBmcmVlaW5nIGJhdGNoICovCisJ YmF0Y2gtPm51bUtpbGxlZCA9IDA7CiAKLQlpZiAoIXNvLT5kcm9wUGluKQorCWlmICghc2Nhbi0+ YmF0Y2hTdGF0ZS0+ZHJvcFBpbikKIAl7CiAJCS8qCiAJCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGlu IG9uIHRoaXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCiAJCSAqIHNvIGFs bCB3ZSBuZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQK IAkJICogY29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBv biB0aGUgcGFnZS4KIAkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykpOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7CisJCWJ1ZiA9IGJhdGNoLT5idWY7CiAJCV9i dF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKIAl9CiAJZWxzZQogCXsKIAkJWExvZ1JlY1B0 cglsYXRlc3Rsc247CiAKLQkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykp OwogCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKLQkJYnVmID0gX2J0X2dldGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKKwkJYnVmID0gX2J0X2dldGJ1Zihy ZWwsIHBvcy0+Y3VyclBhZ2UsIEJUX1JFQUQpOwogCiAJCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExT TkF0b21pYyhidWYpOwotCQlBc3NlcnQoIVhMb2dSZWNQdHJJc0ludmFsaWQoc28tPmN1cnJQb3Mu bHNuKSk7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNv LT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCisJCUFzc2VydCghWExvZ1JlY1B0cklzSW52YWxp ZChiYXRjaC0+bHNuKSk7CisJCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJCWlm IChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKIAkJewogCQkJLyogTW9kaWZpZWQsIGdpdmUgdXAg b24gaGludGluZyAqLwogCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CkBAIC0zMzE0LDEyICszMzA0 LDEyIEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJZm9yIChpbnQgaSA9 IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKIAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxs ZWRJdGVtc1tpXTsKLQkJQlRTY2FuUG9zSXRlbSAqa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XTsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmtpbGxlZEl0ZW1zW2ldOwor CQlJbmRleFNjYW5CYXRjaFBvc0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhd OwogCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwogCi0JCUFzc2Vy dChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXgg PD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5m aXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCQlpZiAo b2ZmbnVtIDwgbWlub2ZmKQogCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLwogCQl3 aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKQEAgLTMzNDQsNyArMzMzNCw3IEBAIF9idF9raWxsaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCSAqIGNvcnJlY3RuZXNzLgogCQkJCSAqCiAJCQkJ ICogTm90ZSB0aGF0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFu eSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGlu IGNhc2UpLCBzbyBpdCdzCisJCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFk cm9wUGluIGNhc2UpLCBzbyBpdCdzCiAJCQkJICogcG9zc2libGUgdGhhdCB0aGlzIHBvc3Rpbmcg bGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxpc3QKIAkJCQkgKiB0dXBsZSB3aGVuIHdlIGZp cnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMuCiAJCQkJICovCkBAIC0zMzYwLDcgKzMzNTAs OCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkJICogdGhvdWdoIG9u bHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0CiAJCQkJCSAqIGhhdmUg YmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKIAkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+ aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7CisJCQkJCUFzc2VydChraXRl bS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8CisJCQkJCQkgICAhc2Nhbi0+YmF0Y2hTdGF0ZS0+ ZHJvcFBpbik7CiAKIAkJCQkJLyoKIAkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMg aGVyZS4KQEAgLTMzNzcsNyArMzM2OCw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxl ZCkuCiAJCQkJCSAqLwogCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0JCQkJCQlraXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOworCQkJCQkJa2l0ZW0gPSAm YmF0Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1twaSsrXV07CiAJCQkJfQogCiAJCQkJLyoK QEAgLTM0MjcsNyArMzQxOCw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQog CQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKCFzby0+ZHJvcFBp bikKKwlpZiAoIXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4pCiAJCV9idF91bmxvY2tidWYocmVs LCBidWYpOwogCWVsc2UKIAkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMKaW5kZXggOWI4NmMwMTZhLi5jNmFhOTljYTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTkwLDggKzkwLDcgQEAgc3BnaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IHNwZ2dldHR1cGxlOwogCWFtcm91 dGluZS0+YW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4g PSBzcGdlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUt PmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1y b3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVM TDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggY2EyYmRlNjJlLi43MTQxMjQzYTMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODAsNyArODgwLDcgQEAgRGVmaW5lSW5kZXgo T2lkIHRhYmxlSWQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVs dGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNs dXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAm JiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2gg PT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBu b3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmlu ZGV4IDFkMGU4YWQ1Ny4uYWMzMzdkOTAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00Mjgs NyArNDI4LDcgQEAgRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNh c2UgVF9JbmRleE9ubHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBz dXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCBy ZXN0b3JpbmcgYSBtYXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBh dGhub2RlKS0+aW5kZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGY0NjRjY2E5NS4uNWU3YmFmZTA3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTQ5LDcgKzQ5LDEzIEBACiBzdGF0 aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KTsKIHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCUluZGV4VHVwbGUgaXR1cCwgVHVwbGVEZXNj IGl0dXBkZXNjKTsKK3N0YXRpYyBib29sIGlvc19wcmVmZXRjaF9ibG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIHZvaWQgKmFyZywKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRjaFBvcyAqcG9zKTsKIAor LyogdmFsdWVzIHN0b3JlZCBpbiBpb3NfcHJlZmV0Y2hfYmxvY2sgaW4gdGhlIGJhdGNoIGNhY2hl ICovCisjZGVmaW5lCQlJT1NfVU5LTk9XTl9WSVNJQklMSVRZCQkwCS8qIGRlZmF1bHQgdmFsdWUg Ki8KKyNkZWZpbmUJCUlPU19BTExfVklTSUJMRQkJCQkxCisjZGVmaW5lCQlJT1NfTk9UX0FMTF9W SVNJQkxFCQkJMgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJSW5kZXhPbmx5TmV4dApAQCAtMTAzLDYgKzEw OSwxNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJbm9kZS0+ aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAkJbm9kZS0+aW9zc19WTUJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7CiAKKwkJLyoKKwkJICogU2V0IHRoZSBwcmVmZXRjaCBjYWxsYmFj ayBpbmZvLCBpZiB0aGUgc2NhbiBoYXMgYmF0Y2hpbmcgZW5hYmxlZAorCQkgKiAod2Ugb25seSBr bm93IHdoYXQgYWZ0ZXIgaW5kZXhfYmVnaW5zY2FuLCB3aGljaCBhbHNvIGNoZWNrcyB3aGljaAor CQkgKiBjYWxsYmFja3MgYXJlIGRlZmluZWQgZm9yIHRoZSBBTS4KKwkJICovCisJCWlmIChzY2Fu ZGVzYy0+YmF0Y2hTdGF0ZSAhPSBOVUxMKQorCQl7CisJCQlzY2FuZGVzYy0+YmF0Y2hTdGF0ZS0+ cHJlZmV0Y2ggPSBpb3NfcHJlZmV0Y2hfYmxvY2s7CisJCQlzY2FuZGVzYy0+YmF0Y2hTdGF0ZS0+ cHJlZmV0Y2hBcmcgPSAodm9pZCAqKSBub2RlOworCQl9CisKIAkJLyoKIAkJICogSWYgbm8gcnVu LXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZAog CQkgKiBwYXNzIHRoZSBzY2Fua2V5cyB0byB0aGUgaW5kZXggQU0uCkBAIC0xMjAsMTAgKzEzNyw0 MiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkgKi8KIAl3aGls ZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxM KQogCXsKKwkJYm9vbAkJYWxsX3Zpc2libGU7CiAJCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZh bHNlOwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKKwkJLyoKKwkJICogV2l0aG91dCBi YXRjaGluZywgaW5zcGVjdCB0aGUgVk0gZGlyZWN0bHkuIFdpdGggYmF0Y2hpbmcsIHdlIG5lZWQK KwkJICogdG8gcmV0cmlldmUgdGhlIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gc2VlbiBieSB0aGUg cmVhZF9zdHJlYW0KKwkJICogY2FsbGJhY2sgKG9yIHJhdGhlciBieSBpb3NfcHJlZmV0Y2hfYmxv Y2spLCBvdGhlcndpc2UgdGhlCisJCSAqIHJlYWRfc3RyZWFtIG1pZ2h0IGdldCBvdXQgb2Ygc3lu YyAoaWYgdGhlIFZNIGdvdCB1cGRhdGVkIHNpbmNlCisJCSAqIHRoZW4pLgorCQkgKi8KKwkJaWYg KHNjYW5kZXNjLT5iYXRjaFN0YXRlID09IE5VTEwpCisJCXsKKwkJCWFsbF92aXNpYmxlID0gVk1f QUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkgSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkJCSAmbm9kZS0+aW9zc19WTUJ1ZmZlcik7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogUmV1c2UgdGhlIHByZXZpb3VzbHkgZGV0 ZXJtaW5lZCBwYWdlIHZpc2liaWxpdHkgaW5mbywgb3IKKwkJCSAqIGNhbGN1bGF0ZSBpdCBub3cu IElmIHdlIGRlY2lkZWQgbm90IHRvIHByZWZldGNoIHRoZSBibG9jaywgdGhlCisJCQkgKiBwYWdl IGhhZCB0byBiZSBhbGwtdmlzaWJsZSBhdCB0aGF0IHBvaW50LiBUaGUgVk0gYml0IG1pZ2h0IGhh dmUKKwkJCSAqIGNoYW5nZWQgc2luY2UgdGhlbiwgYnV0IHRoZSB0dXBsZSB2aXNpYmlsaXR5IGNv dWxkIG5vdCBoYXZlLgorCQkJICoKKwkJCSAqIFhYWCBJdCdzIGEgYml0IHdlaXJkIHdlIHVzZSB0 aGUgdmlzaWJpbGl0eSB0byBkZWNpZGUgaWYgd2UKKwkJCSAqIHNob3VsZCBza2lwIHByZWZldGNo aW5nIHRoZSBibG9jaywgYW5kIHRoZW4gZGVkdWNlIHRoZQorCQkJICogdmlzaWJpbGl0eSBmcm9t IHRoYXQgKGV2ZW4gaWYgaXQgbWF0Y2hlcyBwcmV0dHkgY2xlYXJseSkuIEJ1dAorCQkJICogbWF5 YmUgd2UgY291bGQvc2hvdWxkIGhhdmUgYSBtb3JlIGRpcmVjdCB3YXkgdG8gcmVhZCB0aGUKKwkJ CSAqIHByaXZhdGUgc3RhdGU/CisJCQkgKi8KKwkJCWFsbF92aXNpYmxlID0gIWlvc19wcmVmZXRj aF9ibG9jayhzY2FuZGVzYywgbm9kZSwKKwkJCQkJCQkJCQkJICAmc2NhbmRlc2MtPmJhdGNoU3Rh dGUtPnJlYWRQb3MpOworCQl9CisKIAkJLyoKIAkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCiAJCSAqIHdoaWNoIGFsbCB0 dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCkBAIC0x NTgsOSArMjA3LDcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJ CSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVl ZGluZyB0byBsb2NrCiAJCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25p ZmljYW50IGNvbnRlbnRpb24uCiAJCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNj LT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAot CQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKKwkJaWYgKCFhbGxfdmlzaWJsZSkKIAkJewog CQkJLyoKIAkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eS4KQEAgLTg4OSwzICs5MzYsNTEgQEAgRXhlY0luZGV4T25seVNjYW5SZXRyaWV2ZUlu c3RydW1lbnRhdGlvbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJbm9kZS0+aW9zc19TaGFy ZWRJbmZvID0gcGFsbG9jKHNpemUpOwogCW1lbWNweShub2RlLT5pb3NzX1NoYXJlZEluZm8sIFNo YXJlZEluZm8sIHNpemUpOwogfQorCisvKiBGSVhNRSBkdXBsaWNhdGUgZnJvbSBpbmRleGFtLmMg Ki8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0 Y2hTdGF0ZS0+YmF0Y2hlc1soaWR4KSAlIChzY2FuKS0+YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlc10p CisKKy8qCisgKiBpb3NfcHJlZmV0Y2hfYmxvY2sKKyAqCQlDYWxsYmFjayB0byBvbmx5IHByZWZl dGNoIGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUuCisgKgorICogV2UgZG9uJ3Qgd2Fu dCB0byBpbnNwZWN0IHRoZSB2aXNpYmlsaXR5IG1hcCByZXBlYXRlZGx5LCBzbyB0aGUgcmVzdWx0 IG9mCisgKiBWTV9BTExfVklTSUJMRSBpcyBzdG9yZWQgaW4gdGhlIGJhdGNoIHByaXZhdGUgZGF0 YS4gVGhlIHZhbHVlcyBhcmUgc2V0CisgKiB0byAwIGJ5IGRlZmF1bHQsIHNvIHdlIHVzZSB0d28g Y29uc3RhbnRzIHRvIHJlbWVtYmVyIGlmIGFsbC12aXNpYmxlIG9yCisgKiBub3QgYWxsLXZpc2li bGUuCisgKgorICogSG93ZXZlciwgdGhpcyBpcyBub3QgbWVyZWx5IGEgcXVlc3Rpb24gb2YgcGVy Zm9ybWFuY2UuIFRoZSBWTSBtYXkgZ2V0CisgKiBtb2RpZmllZCBkdXJpbmcgdGhlIHNjYW4sIGFu ZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHdvIHBsYWNlcyAodGhlCisgKiByZWFkX25leHQg Y2FsbGJhY2sgYW5kIHRoZSBpbmRleF9mZXRjaF9oZWFwIGhlcmUpIG1ha2UgdGhlIHNhbWUgZGVj aXNpb24sCisgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIHN0 cmVhbS4gRm9yIGV4YW1wbGUsIHRoZQorICogY2FsbGJhY2sgbWlnaHQgZmluZCBhIHBhZ2UgaXMg YWxsLXZpc2libGUgKGFuZCBza2lwcyByZWFkaW5nIHRoZSBibG9jayksCisgKiBhbmQgdGhlbiBz b21lb25lIG1pZ2h0IHVwZGF0ZSB0aGUgcGFnZSwgcmVzZXR0aW5nIHRoZSBWTSBiaXQuIElmIHRo aXMKKyAqIHBsYWNlIGF0dGVtcHRzIHRvIHJlYWQgdGhlIHBhZ2UgZnJvbSB0aGUgc3RyZWFtLCBp dCdsbCBmYWlsIGJlY2F1c2UgaXQKKyAqIHdpbGwgcHJvYmFibHkgcmVjZWl2ZSBhbiBlbnRpcmVs eSBkaWZmZXJlbnQgcGFnZS4KKyAqLworc3RhdGljIGJvb2wKK2lvc19wcmVmZXRjaF9ibG9jayhJ bmRleFNjYW5EZXNjIHNjYW4sIHZvaWQgKmFyZywgSW5kZXhTY2FuQmF0Y2hQb3MgKnBvcykKK3sK KwlJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUgPSAoSW5kZXhPbmx5U2NhblN0YXRlICopIGFyZzsK KwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgcG9zLT5iYXRj aCk7CisKKwlpZiAoYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9PSBOVUxMKQorCQliYXRjaC0+aXRl bXN2aXNpYmlsaXR5ID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiAoYmF0Y2gtPmxhc3RJdGVtICsg MSkpOworCisJaWYgKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHlbcG9zLT5pbmRleF0gPT0gSU9TX1VO S05PV05fVklTSUJJTElUWSkKKwl7CisJCWJvb2wJCWFsbF92aXNpYmxlOworCQlJdGVtUG9pbnRl ciB0aWQgPSAmYmF0Y2gtPml0ZW1zW3Bvcy0+aW5kZXhdLmhlYXBUaWQ7CisKKwkJYWxsX3Zpc2li bGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkgSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkJICZub2RlLT5pb3NzX1ZNQnVmZmVy KTsKKworCQliYXRjaC0+aXRlbXN2aXNpYmlsaXR5W3Bvcy0+aW5kZXhdID0KKwkJCWFsbF92aXNp YmxlID8gSU9TX0FMTF9WSVNJQkxFIDogSU9TX05PVF9BTExfVklTSUJMRTsKKwl9CisKKwkvKiBw cmVmZXRjaCBvbmx5IGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUgKi8KKwlyZXR1cm4g KGJhdGNoLT5pdGVtc3Zpc2liaWxpdHlbcG9zLT5pbmRleF0gPT0gSU9TX05PVF9BTExfVklTSUJM RSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCA5NDA3N2U2YTAu LmFiMjc1NmQ0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDQs NiArMTQ0LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiAK IGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0 cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQllbmFi bGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7 CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFu Y2F0LmMKaW5kZXggNDUzNmJkZDZjLi5kZDk3NTI0NWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMKQEAgLTMxMiwxMSArMzEyLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5u ZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJ aW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZv LT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFt Y2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNn ZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1o YXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCQkJ ICAgYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0 bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5y ZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1j YW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAg YW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9 IGFtcm91dGluZS0+YW1wb3NyZXNldCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRl ID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0 aW1hdGUgIT0gTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRp b24uYwppbmRleCBmNTkwNDZhZDYuLjlmZWE2OGE5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODc2LDcgKzg3Niw4IEBAIElzSW5kZXhVc2FibGVG b3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkK IAkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0 dXBsZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMu ICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRl eEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBs ZSA9PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+ cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmCisJCUdldEluZGV4QW1Sb3V0aW5l QnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldGJhdGNoID09IE5VTEwp CiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMKaW5kZXggMDMxZmRlOWY0Li5lMzRlNjAwNjAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQog CWludDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50 MTYJCWRpc3RhbmNlOworCWludDE2CQlkaXN0YW5jZV9vbGQ7CiAJaW50MTYJCWluaXRpYWxpemVk X2J1ZmZlcnM7CiAJaW50CQkJcmVhZF9idWZmZXJzX2ZsYWdzOwogCWJvb2wJCXN5bmNfbW9kZTsJ CS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCkBAIC00NjQsNiArNDY1LDcgQEAgcmVhZF9zdHJl YW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJCWlmIChibG9ja251bSA9PSBJbnZh bGlkQmxvY2tOdW1iZXIpCiAJCXsKIAkJCS8qIEVuZCBvZiBzdHJlYW0uICovCisJCQlzdHJlYW0t PmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFuY2U7CiAJCQlzdHJlYW0tPmRpc3RhbmNlID0g MDsKIAkJCWJyZWFrOwogCQl9CkBAIC04NjIsNiArODY0LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNl CiAJCXsKIAkJCS8qIE5vIG1vcmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLworCQkJc3RyZWFt LT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJc3RyZWFtLT5kaXN0YW5jZSA9 IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVy X2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9IDA7CkBAIC0xMDQ2LDYgKzEwNDks OSBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJaW50MTYJCWluZGV4 OwogCUJ1ZmZlcgkJYnVmZmVyOwogCisJLyogcmVtZW1iZXIgdGhlIG9sZCBkaXN0YW5jZSAoaWYg d2UgcmVzZXQgYmVmb3JlIGVuZCBvZiB0aGUgc3RyZWFtKSAqLworCXN0cmVhbS0+ZGlzdGFuY2Vf b2xkID0gTWF4KHN0cmVhbS0+ZGlzdGFuY2UsIHN0cmVhbS0+ZGlzdGFuY2Vfb2xkKTsKKwogCS8q IFN0b3AgbG9va2luZyBhaGVhZC4gKi8KIAlzdHJlYW0tPmRpc3RhbmNlID0gMDsKIApAQCAtMTA3 OCw4ICsxMDg0LDEyIEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlB c3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAwKTsKIAlBc3NlcnQoc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MgPT0gMCk7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgZGF0YSBpcyBjYWNo ZWQuICovCi0Jc3RyZWFtLT5kaXN0YW5jZSA9IDE7CisJLyoKKwkgKiBSZXN0b3JlIHRoZSBvbGQg ZGlzdGFuY2UsIGlmIHdlIGhhdmUgb25lLiBPdGhlcndpc2Ugc3RhcnQgYXNzdW1pbmcgZGF0YQor CSAqIGlzIGNhY2hlZC4KKwkgKi8KKwlzdHJlYW0tPmRpc3RhbmNlID0gTWF4KDEsIHN0cmVhbS0+ ZGlzdGFuY2Vfb2xkKTsKKwlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IDA7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2FtdXRpbHMuYwppbmRleCAwYWYyNmQ2YWMuLjFlYmUwYTc2YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvYW11dGlscy5jCkBAIC0zNjMsNyArMzYzLDcgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJh YmxlKTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWdldHR1cGxlIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggPyB0cnVlIDogZmFsc2Up OwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CkBAIC0zOTIsNyArMzkyLDcgQEAgaW5k ZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgot CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJ CQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlIHx8IHJvdXRpbmUtPmFtZ2V0YmF0 Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdf UkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGRhMDE2MjdjLi41MjE4ZDE1OGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC01NCw2ICs1NCwxMyBAQAog ICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5f cHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJl ZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5LXNjYW5zLicsCisgIGZsYWdz ID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfYml0 bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3Vw ID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUg cGxhbm5lclwncyB1c2Ugb2YgYml0bWFwLXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dVQ19F WFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQppbmRleCAyNmMwODY5MzUuLjMwNTE2NzgxYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDEyLDYgKzQxMiw3IEBACiAjZW5hYmxlX2lu Y3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRl eG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVf bWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0g b24KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9i bHV0aWxzLmMKaW5kZXggMmMwZTcxZWVkLi4zZTAwMTQ5MzAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv Ymxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDgsOCAr MTQ4LDcgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1 cGxlID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYmxnZXRiaXRtYXA7CiAJYW1y b3V0aW5lLT5hbWVuZHNjYW4gPSBibGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBO VUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jl c2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwog CWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggNjNkN2UzNzZmLi5lMzY1MTlhYjcg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbApAQCAtMTYzLDggKzE2Myw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1S b3V0aW5lCiAgICAgYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJl IE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4g YmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJr cG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJl c3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFt cG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8q IGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwog ICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc4OSwzMiArNzg4LDI1IEBAIGFtZW5kc2NhbiAo SW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1h bW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNj IHNjYW4pOwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9u LiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVk IHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3RpZnkgaW5kZXggQU0gdGhhdCBjb3JlIGNv ZGUgd2lsbCBjaGFuZ2UgdGhlIHNjYW4ncyBwb3NpdGlvbiB0byBhbiBpdGVtCisgICByZXR1cm5l ZCBhcyBwYXJ0IG9mIGFuIGVhcmxpZXIgYmF0Y2guICBUaGUgaW5kZXggQU0gbXVzdCB0aGVyZWZv cmUKKyAgIGludmFsaWRhdGUgYW55IHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhl IHNjYW4ncyBwcm9ncmVzcworICAgKGUuZy4sIGFycmF5IGtleXMgdXNlZCB3aXRoIGEgU2NhbGFy QXJyYXlPcEV4cHIgcXVhbCkuICBDYWxsZWQgYnkgdGhlIGNvcmUKKyAgIHN5c3RlbSB3aGVuIGl0 IGlzIGFib3V0IHRvIHJlc3RvcmUgYSBtYXJrLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBU aGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBw cm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4g IElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0Zmll bGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4K LSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLTxw cm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08 L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRs eSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rp b24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBp ZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRv ZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVs ZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1 Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5j dGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKKyAgIG1l dGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZS4gIElmIGl0IGRvZXNuJ3QsIHRoZSA8c3RydWN0 ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IGZpZWxkCisgICBpbiBpdHMgPHN0cnVjdG5h bWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBzaG91bGQgYmUgc2V0IHRvCisg ICBOVUxMLiAgSW5kZXggQU1zIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0 IG1pZ2h0IG5lZWQgdG8gYmUKKyAgIGludmFsaWRhdGVkIG1pZ2h0IHN0aWxsIGZpbmQgaXQgdXNl ZnVsIHRvIHByb3ZpZGUgYW4gZW1wdHkKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1 Y3RmaWVsZD4gZnVuY3Rpb247IGlmIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAg IGlzIHNldCB0byBOVUxMLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBhc3N1bWUgdGhhdCBpdCBpcyB1 bnNhZmUgdG8gcmVzdG9yZSBhCisgICBtYXJrZWQgcG9zaXRpb24uCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhf YW0uYwppbmRleCA5NGVmNjM5YjYuLmJlMWIwZjU1YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzE5LDggKzMxOSw3IEBAIGRp aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7 CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4g PSBkaWVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+ YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0 cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxM OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCA4MzIyOGNmY2EuLjNh NzYwM2IyNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1OCw2 ICsxNTgsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5h bWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24K ICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4g ICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24K ICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24K QEAgLTE3Miw3ICsxNzMsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90 aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjQgcm93cykKKygyNSByb3dzKQogCiAtLSBU aGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVz LiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5n IG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCBhMTNlODE2MjguLmRjNTc0MDNjMyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTE5Miw2ICsxOTIsOCBAQCBCT09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJ bmZvCitCVEJhdGNoSW5mbworQlRCYXRjaFNjYW5Qb3NEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2Fs bGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0xMjY1LDYgKzEyNjcsMTAgQEAgSW5kZXhPcmRlckJ5 RGlzdGFuY2UKIEluZGV4UGF0aAogSW5kZXhSdW50aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRl eFNjYW5CYXRjaERhdGEKK0luZGV4U2NhbkJhdGNoUG9zCitJbmRleFNjYW5CYXRjaFBvc0l0ZW0K K0luZGV4U2NhbkJhdGNoZXMKIEluZGV4U2NhbkRlc2MKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlv bgogSW5kZXhTY2FuU3RhdGUKQEAgLTM0MTUsMTAgKzM0MjEsMTAgQEAgYW1lc3RpbWF0ZXBhcmFs bGVsc2Nhbl9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9m dW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1pbml0 cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVw X2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJh bGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgotLSAKMi41MS4wCgo= --00000000000022789c063e79e31e--