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 1vFhqA-00H0z4-76 for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Nov 2025 23:50:30 +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 1vFhq8-00FAiD-Bd for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Nov 2025 23:50:27 +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 1vFhq7-00FAi5-Ku for pgsql-hackers@lists.postgresql.org; Sun, 02 Nov 2025 23:50:26 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFhq3-005eSW-1U for pgsql-hackers@lists.postgresql.org; Sun, 02 Nov 2025 23:50:26 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3ee64bc6b90so3120260f8f.0 for ; Sun, 02 Nov 2025 15:50:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1762127421; x=1762732221; 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=xUAyYPHcDVeo55m8JxAVBRiBsUJY5u9oeD/GFIDUOdc=; b=eec663jwPidZANZEmvnNi646iS8YWMHSkBMm3jmnjk/WHrcinxzqgehVzWJtcrM9Va K3B37DeO7czFI4Uxgr02h4PZde7nfP/25eny1hK+fZ/AG8D/UzmFgpGZxxIUVoCJwPJd /jjfjalT63IasC71uoC++y/olS87sNIrfqJsaNeO9M7ij0DhGn3mDdRQkmi8tCoFBJas 0A8+psaBOC4sfl1AdHWJut+lifLKxZ9h3WfDLZBDVUpA+QGaR+q5kHshw75mBDFcBn2G OgtaQYuHUMdtMijaXhcHha0x8+6PoE8lx+6RsxBL3yPCOzquifYhp8Lv7PviNOMDgN8m yJDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762127421; x=1762732221; 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=xUAyYPHcDVeo55m8JxAVBRiBsUJY5u9oeD/GFIDUOdc=; b=gEtiudqdyYfLtyUrFiMJEX37f/YEq386dH5TUjJ2CNSNRd1qKDkmAlqwxpQTkhVxsZ 7RLW2q1fxioLO1f378k5hNshVVsb4LaS5VyNuxf1juNOWERHT697dhYNDcOA1HYiC3ee AD/g1wn2gDLtf9/Hgp3/RT8lQv9p6gDcOc0rkYIwRiZ6Xlar6sIG2hb1aDrSFsOlWR0A O/P7rPkF+GW44DMb1ohkYm9mffcSROKvsxmbExUc63CVVQss+lGeAH1BQI1PAM1RMQ5P rArLmnAGo+yw+CKb6TlUih91EB5Y+vkdaw0NCeFEuV2LUh/WllXU9vSfNzEW/QDfLdTM zBUA== X-Forwarded-Encrypted: i=1; AJvYcCUkqXvsgaU99zQemWfJBdoWdFWui2a8dYbpUOwFbshgR+cataQfsWicjgkVlWmx9QMdoZWvwF+0YBbUTsTY@lists.postgresql.org X-Gm-Message-State: AOJu0YxgLFV/KeKofsi8sZV50UlcCaQiypi3owMbyrcNlz6Fp+HQHBmT 0vPPUs4XDAE0EJmRSLlPTU3NRSBn2MpN0rBVjyg70Nl9Q0ojTXS3OnEcRgTCJPv0PXLEM/TpWsC NTv+dUv8U7EAAx4BQdV+kFUAKOctXPecbh96uENhLDg== X-Gm-Gg: ASbGnct0nb9EajJPc2B1Sw5zg/lP1mPZDAzmmizPo9qb+nUk6OZFVeWnGt9+6aKxO81 QN0gDLE3HZx8CveRHlOHuSf84lA0IrtXe7G6A0Xv+ec58qcU6gMZakT8x81EGTj5518gwvxBpn3 b0V+C9/X3UjpMrmKcQuTxGvEUYmkn6lvptTZ62eFgQ9Icg68ukfdhf0noY7EON4739/4OqUFVp/ gPxz38u//L9M19qu+VqmW8XEN9FqYEyKuAVxTYs8iFUAkXknDff162GT1EVyBuKH7BV3Z4= X-Google-Smtp-Source: AGHT+IEfyFkR5HNnM/P7m5KQHVoMpPcDYN0pnO4kro2Y70e7Ik38lsD/I7AO//7UyggDlk4iykpyeURRnc2K+epqRD0= X-Received: by 2002:a05:6000:2207:b0:429:7693:884f with SMTP id ffacd0b85a97d-429bd6725bbmr10103685f8f.5.1762127420499; Sun, 02 Nov 2025 15:50:20 -0800 (PST) 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: Sun, 2 Nov 2025 18:49:53 -0500 X-Gm-Features: AWmQ_bkMpFgrJ8bSHnYOa-JklEi1-gYv0B6TLnL2bWSZDtuKZBDJBXRX9vCz4ZY 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="000000000000f2d8e40642a54242" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f2d8e40642a54242 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Oct 12, 2025 at 2:52=E2=80=AFPM Peter Geoghegan wrote: > Attached in a new revision, mostly just to keep CFBot happy following > a recent trivial conflict introduced on master. Attached is another revision, also just to keep CFBot happy following a conflict introduced on master. Nothing really new here (I've been working on batching on the table AM side, but nothing to show on that just yet). One minor thing to note about this revision: I added a comment to selfuncs.c's that notes that there's an unfixed bug there. That code more or less copies the approach used by nodeIndexonlyscan.c, but neglects to take the same precautions around the read stream/prefetching see different pages as all-visible that the view seen on the consumer side. ISTM that the right fix there is to totally rethink the interface such that the read stream is directly owned by the table AM. That way we won't have to work around inconsistent ideas around which heap pages are all-visible because there'll only be one view of that, in a single place. We won't have to do anything special in either selfuncs.c or in nodeIndexonlyscan.c. --=20 Peter Geoghegan --000000000000f2d8e40642a54242 Content-Type: application/octet-stream; name="v20251102-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Disposition: attachment; filename="v20251102-0001-bufmgr-aio-Prototype-for-not-waiting-for-a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhicvu4j0 RnJvbSBjM2Q4MmZkMTFhYjZjODdlZDJkNzRmMThkN2NiNDQ2ZWZiYzdkNjY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1 MTEwMiAxLzNdIGJ1Zm1ncjogYWlvOiBQcm90b3R5cGUgZm9yIG5vdCB3YWl0aW5nIGZvcgogYWxy ZWFkeS1pbi1wcm9ncmVzcyBJTwoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS96bGplcmd3ZXF0aTd4NjdsZzVpamUycnpqdXNpZTM3bnNsc25ramtr Ynk0bGFxcWJmd0AzcDN6dTUyMnl5a3YKQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIHwgMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMTQyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5k ZXggYjVmOGYzYzVkLi4xMzk0OTkxMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0 Nyw3IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2 CQluYmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQ Z0Fpb1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBlODU0NGFjYjcuLmFiMDQ0YjA1ZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE1MzgsNiArMTUzOCw0NiBAQCBSZWFkQnVm ZmVyc0NhblN0YXJ0SU9PbmNlKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0KQogCQlyZXR1cm4g U3RhcnRCdWZmZXJJTyhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dh aXQpOwogfQogCisvKgorICogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IHVuZGVyZ29p bmcgcmVhZCBBSU8uIElmIGl0IGlzLCBhc3NpZ24gdGhlCisgKiBJTydzIHdhaXQgcmVmZXJlbmNl IHRvIG9wZXJhdGlvbi0+aW9fd3JlZiwgdGhlcmVieSBhbGxvd2luZyB0aGUgY2FsbGVyIHRvCisg KiB3YWl0IGZvciB0aGF0IElPLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1JlYWRCdWZmZXJz SU9BbHJlYWR5SW5Qcm9ncmVzcyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBCdWZm ZXIgYnVmZmVyKQoreworCUJ1ZmZlckRlc2MgKmRlc2M7CisJdWludDMyCQlidWZfc3RhdGU7CisJ UGdBaW9XYWl0UmVmIGlvdzsKKworCXBnYWlvX3dyZWZfY2xlYXIoJmlvdyk7CisKKwlpZiAoQnVm ZmVySXNMb2NhbChidWZmZXIpKQorCXsKKwkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRv cigtYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+ c3RhdGUpOworCQlpZiAoKGJ1Zl9zdGF0ZSAmIEJNX0lPX0lOX1BST0dSRVNTKSAmJiAhKGJ1Zl9z dGF0ZSAmIEJNX1ZBTElEKSkKKwkJCWlvdyA9IGRlc2MtPmlvX3dyZWY7CisJfQorCWVsc2UKKwl7 CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQlidWZfc3RhdGUg PSBMb2NrQnVmSGRyKGRlc2MpOworCisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JF U1MpICYmICEoYnVmX3N0YXRlICYgQk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsK KwkJVW5sb2NrQnVmSGRyKGRlc2MsIGJ1Zl9zdGF0ZSk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZf dmFsaWQoJmlvdykpCisJeworCQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNS ZWFkQnVmZmVycyB0aGF0IHRyaWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAq LwpAQCAtMTY3MCw3ICsxNzEwLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0 aW9uICpvcGVyYXRpb24pCiAJCQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFk eSBrbm93IHRoZSBJTyBpcyBjb21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3Vs dC5zdGF0dXMgPT0gUEdBSU9fUlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVp Z25faW8gfHwgYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgog CQkJCSFwZ2Fpb193cmVmX2NoZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJ CQkJaW5zdHJfdGltZQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9f dGltaW5nKTsKQEAgLTE2ODksMTEgKzE3MjksNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZm ZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9u ZSgmb3BlcmF0aW9uLT5pb193cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJl IHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGlu Y2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJ CVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9w ZXJhdGlvbi0+Zm9yZWlnbl9pbykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRp b24tPmJ1ZmZlcnNbb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRl c2M7CisJCQkJdWludDMyCQlidWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZm ZXIpKQorCQkJCXsKKwkJCQkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVy IC0gMSk7CisJCQkJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUp OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRv cihidWZmZXIgLSAxKTsKKwkJCQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJ VW5sb2NrQnVmSGRyKGRlc2MsIGJ1Zl9zdGF0ZSk7CisJCQkJfQorCisJCQkJaWYgKGJ1Zl9zdGF0 ZSAmIEJNX1ZBTElEKQorCQkJCXsKKwkJCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsK KwkJCQkJQXNzZXJ0KG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIDw9IG9wZXJhdGlvbi0+bmJsb2Nr cyk7CisKKwkJCQkJLyoKKwkJCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcg Zm9yIHRoaXMgYmFja2VuZCwgZXZlbgorCQkJCQkgKiB0aG91Z2ggaXQgbXVzdCBoYXZlIHN0YXJ0 ZWQgb3V0IGFzIGEgbWlzcyBpbgorCQkJCQkgKiBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3Ro ZXIgYmFja2VuZCAob3Igb3Vyc2VsdmVzLAorCQkJCQkgKiBhcyBwYXJ0IG9mIGEgcmVhZCBzdGFy dGVkIGVhcmxpZXIpIHdpbGwgdHJhY2sgdGhpcyBhcyBhCisJCQkJCSAqICdyZWFkJy4KKwkJCQkJ ICovCisJCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShvcGVyYXRpb24tPmZv cmtudW0sCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPmJsb2NrbnVtICsgb3BlcmF0aW9uLT5u YmxvY2tzX2RvbmUsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCQkJCQkgIG9wZXJhdGlv bi0+c21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSk7CisK KwkJCQkJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJCQkJCXBnQnVmZmVyVXNhZ2UubG9j YWxfYmxrc19oaXQgKz0gMTsKKwkJCQkJZWxzZQorCQkJCQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRf Ymxrc19oaXQgKz0gMTsKKworCQkJCQlpZiAob3BlcmF0aW9uLT5yZWwpCisJCQkJCQlwZ3N0YXRf Y291bnRfYnVmZmVyX2hpdChvcGVyYXRpb24tPnJlbCk7CisKKwkJCQkJcGdzdGF0X2NvdW50X2lv X29wKGlvX29iamVjdCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJCQkJCWlmIChW YWN1dW1Db3N0QWN0aXZlKQorCQkJCQkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VIaXQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2Ugbm93 IGFyZSBzdXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlzCisJCQkJ ICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVyZSB3ZXJlIGFueS4KKwkJCQkg Ki8KKwkJCQlQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCX0KIAkJfQog CiAJCS8qCkBAIC0xNzc5LDYgKzE4NzQsNDMgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJCWlvX29iamVj dCA9IElPT0JKRUNUX1JFTEFUSU9OOwogCX0KIAorCS8qCisJICogSWYgQUlPIGlzIGluIHByb2dy ZXNzLCBiZSBpdCBpbiB0aGlzIGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZQorCSAqIGp1 c3QgYXNzb2NpYXRlIHRoZSB3YWl0IHJlZmVyZW5jZSB3aXRoIHRoZSBvcGVyYXRpb24gYW5kIHdh aXQgaW4KKwkgKiBXYWl0UmVhZEJ1ZmZlcnMoKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgaW1wb3J0 YW50IGZvciBwZXJmb3JtYW5jZSBpbgorCSAqIHR3byB3b3JrbG9hZHM6CisJICoKKwkgKiAxKSBB IHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJlYWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGlt ZXMgd2l0aGluCisJICogdGhlIHJlYWRhaGVhZCBkaXN0YW5jZS4gVGhpcyBjYW4gaGFwcGVuIGUu Zy4gZm9yIHRoZSB0YWJsZSBhY2Nlc3NlcyBvZgorCSAqIGFuIGluZGV4IHNjYW4uCisJICoKKwkg KiAyKSBDb25jdXJyZW50IHNjYW5zIGJ5IG11bHRpcGxlIGJhY2tlbmRzIG9uIHRoZSBzYW1lIHJl bGF0aW9uLgorCSAqCisJICogSWYgd2Ugd2VyZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRo ZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3QgYmUKKwkgKiBhYmxlIHRvIGtlZXAgZW5vdWdoIEkv TyBpbiBmbGlnaHQuCisJICoKKwkgKiBJZiB3ZSBkbyBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9P IGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAxLWJsb2NrCisJICogUmVhZEJ1ZmZlcnNPcGVy YXRpb24gdGhhdCBXYWl0UmVhZEJ1ZmZlcnMgdGhlbiBjYW4gd2FpdCBvbi4KKwkgKgorCSAqIEl0 J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQgc3RhcnRzIElPIG9uIHRoZSBidWZmZXIg YmV0d2VlbiB0aGlzCisJICogY2hlY2sgYW5kIHRoZSBSZWFkQnVmZmVyc0NhblN0YXJ0SU8obm93 YWl0ID0gZmFsc2UpIGJlbG93LiBJbiB0aGF0IGNhc2UKKwkgKiB3ZSB3aWxsIHN5bmNocm9ub3Vz bHkgd2FpdCBmb3IgdGhlIElPIGJlbG93LCBidXQgdGhlIHdpbmRvdyBmb3IgdGhhdCBpcworCSAq IHNtYWxsIGVub3VnaCB0aGF0IGl0IHdvbid0IGhhcHBlbiBvZnRlbiBlbm91Z2ggdG8gaGF2ZSBh IHNpZ25pZmljYW50CisJICogcGVyZm9ybWFuY2UgaW1wYWN0LgorCSAqLworCWlmIChSZWFkQnVm ZmVyc0lPQWxyZWFkeUluUHJvZ3Jlc3Mob3BlcmF0aW9uLCBidWZmZXJzW25ibG9ja3NfZG9uZV0p KQorCXsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOworCQlvcGVyYXRpb24tPmZvcmVpZ25faW8g PSB0cnVlOworCisJCUNoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24ob3BlcmF0aW9uLCBmYWxzZSk7 CisKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxz ZTsKKwogCS8qCiAJICogSWYgemVyb19kYW1hZ2VkX3BhZ2VzIGlzIGVuYWJsZWQsIGFkZCB0aGUg UkVBRF9CVUZGRVJTX1pFUk9fT05fRVJST1IKIAkgKiBmbGFnLiBUaGUgcmVhc29uIGZvciB0aGF0 IGlzIHRoYXQsIGhvcGVmdWxseSwgemVyb19kYW1hZ2VkX3BhZ2VzIGlzbid0CkBAIC0xODM2LDkg KzE5NjgsOSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRp b24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkvKgogCSAqIENoZWNrIGlmIHdlIGNhbiBzdGFy dCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBidWZmZXIuCiAJICoKLQkgKiBJZiBhbiBJL08g aXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBpbiBhbm90aGVyIGJhY2tlbmQsIHdlIHdhbnQgdG8gd2Fp dAotCSAqIGZvciB0aGUgb3V0Y29tZTogZWl0aGVyIGRvbmUsIG9yIHNvbWV0aGluZyB3ZW50IHdy b25nIGFuZCB3ZSB3aWxsCi0JICogcmV0cnkuCisJICogSWYgYSBzeW5jaHJvbm91cyBJL08gaXMg aW4gcHJvZ3Jlc3MgaW4gYW5vdGhlciBiYWNrZW5kIChpdCBjYW4ndCBiZQorCSAqIHRoaXMgYmFj a2VuZCksIHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhlIG91dGNvbWU6IGVpdGhlciBkb25lLCBvcgor CSAqIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3aWxsIHJldHJ5LgogCSAqLwogCWlmICgh UmVhZEJ1ZmZlcnNDYW5TdGFydElPKGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSwgZmFsc2UpKQogCXsK LS0gCjIuNTEuMAoK --000000000000f2d8e40642a54242 Content-Type: application/octet-stream; name="v20251102-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Disposition: attachment; filename="v20251102-0003-Reduce-malloc-free-traffic-by-caching-batc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhicvu4n1 RnJvbSBkNWYwZTliMGVkNmYyYTJjNzI4NGNiNzJlYmFkYjMzNzM2ODdiNWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMTAgU2VwIDIwMjUgMTY6NTQ6NTAgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMDI1MTEwMiAz LzNdIFJlZHVjZSBtYWxsb2MvZnJlZSB0cmFmZmljIGJ5IGNhY2hpbmcgYmF0Y2hlcwoKSW5zdGVh ZCBvZiBpbW1lZGlhdGVseSBmcmVlaW5nIGEgYmF0Y2gsIHN0YXNoIGl0IGluIGEgY2FjaGUgKGEg c21hbGwKZml4ZWQtc2l6ZSBhcnJheSksIGZvciByZXVzZSBieSB0aGUgc2FtZSBzY2FuLgoKVGhl cmUncyByb29tIGZvciBpbXByb3ZlbWVudDoKCi0gS2VlcGluZyBzb21lIG9mIHRoZSBiYXRjaCBw aWVjZXMgKGtpbGxJdGVtcywgaXRlbXN2aXNpYmlsaXR5LCAuLi4pCiAgaW5zdGVhZCBvZiBmcmVl aW5nIHRoZW0gaW4gaW5kZXhfYmF0Y2hfcmVsZWFzZS4KCi0gQWxsb2NhdGluZyBvbmx5IHNwYWNl IHdlIG5lZWQgKGJvdGggaW5kZXhfYmF0Y2hfYWxsb2MgY2FsbHMgdXNlCiAgTWF4VElEc1BlckJU cmVlUGFnZSwgYW5kIHRodXMgbWFsbG9jIC0gYmVjYXVzZSBvZiBBTExPQ19DSFVOS19MSU1JVCku Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgIHwgMTczICsrKysrKysrKysrKysrKysrKysrKysrLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgIHwgIDE1ICstLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAgNCArLQogNSBmaWxlcyBjaGFuZ2Vk LCAxNzYgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA3 Njc1MDNiYjYuLjkxMzk0NWM0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTIzMCw3ICsyMzAsOCBAQCBl eHRlcm4gdm9pZCBpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5jZXMoSW5kZXhTY2Fu RGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJIGJvb2wgcmVjaGVja09yZGVyQnkpOwogZXh0ZXJuIGJ5 dGVhICppbmRleF9vcGNsYXNzX29wdGlvbnMoUmVsYXRpb24gaW5kcmVsLCBBdHRyTnVtYmVyIGF0 dG51bSwKIAkJCQkJCQkJCURhdHVtIGF0dG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJu IEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKGludCBtYXhpdGVtcywgYm9vbCB3YW50 X2l0dXApOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4X2JhdGNoX2FsbG9jKEluZGV4U2Nh bkRlc2Mgc2NhbiwgaW50IG1heGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOwogZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfdW5sb2NrKFJlbGF0aW9uIHJlbCwgYm9vbCBk cm9wUGluLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXgg NmY4N2M2YjMxLi5lYjMwNmE5ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTg3LDYgKzE4Nyw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqLwogCWNoYXIJICAgKml0 ZW1zdmlzaWJpbGl0eTsJLyogSW5kZXgtb25seSBzY2FuIHZpc2liaWxpdHkgY2FjaGUgKi8KIAor CWludAkJCW1heGl0ZW1zOwogCUluZGV4U2NhbkJhdGNoUG9zSXRlbSBpdGVtc1tGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBJbmRleFNjYW5CYXRjaERhdGE7CiAKQEAgLTI2Niw2ICsyNjcsMTAg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hTdGF0ZQogCWludAkJCWhlYWRCYXRjaDsJ CS8qIGhlYWQgYmF0Y2ggc2xvdCAqLwogCWludAkJCW5leHRCYXRjaDsJCS8qIG5leHQgZW1wdHkg YmF0Y2ggc2xvdCAqLwogCisJLyogc21hbGwgY2FjaGUgb2YgdW51c2VkIGJhdGNoZXMsIHRvIHJl ZHVjZSBtYWxsb2MvZnJlZSB0cmFmZmljICovCisJaW50CQkJYmF0Y2hlc0NhY2hlU2l6ZTsKKwlJ bmRleFNjYW5CYXRjaERhdGEgKipiYXRjaGVzQ2FjaGU7CisKIAlJbmRleFNjYW5CYXRjaERhdGEg KipiYXRjaGVzOwogCiAJLyogY2FsbGJhY2sgdG8gc2tpcCBwcmVmZXRjaGluZyBpbiBJT1MgZXRj LiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZmQzZmZhMjIyLi4wZTA4OTAw MWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjE5Niw2ICsyMTk2LDEwIEBA IGluZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmJhdGNoU3RhdGUt PmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwogCXNjYW4tPmJhdGNoU3Rh dGUtPm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCiAKKwkv KiBYWFggaW5pdCB0aGUgY2FjaGUgb2YgYmF0Y2hlcywgY2FwYWNpdHkgMTYgaXMgYXJiaXRyYXJ5 ICovCisJc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlU2l6ZSA9IDE2OworCXNjYW4tPmJh dGNoU3RhdGUtPmJhdGNoZXNDYWNoZSA9IE5VTEw7CisKIAlzY2FuLT5iYXRjaFN0YXRlLT5iYXRj aGVzID0KIAkJcGFsbG9jKHNpemVvZihJbmRleFNjYW5CYXRjaERhdGEgKikgKiBzY2FuLT5iYXRj aFN0YXRlLT5tYXhCYXRjaGVzKTsKIApAQCAtMjMyOCwzNCArMjMzMiwxMDIgQEAgc3RhdGljIHZv aWQKIGluZGV4X2JhdGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJaW5kZXhfYmF0Y2hf cmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwlpZiAoc2Nhbi0+YmF0Y2hTdGF0ZSkKKwl7CisJCWlmIChz Y2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzKQorCQkJcGZyZWUoc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0 Y2hlcyk7CisKKwkJaWYgKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZSkKKwkJeworCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBzY2FuLT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGVTaXplOyBp KyspCisJCQl7CisJCQkJaWYgKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXSA9PSBO VUxMKQorCQkJCQljb250aW51ZTsKKworCQkJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNo ZXNDYWNoZVtpXSk7CisJCQl9CisKKwkJCXBmcmVlKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXND YWNoZSk7CisJCX0KKwkJcGZyZWUoc2Nhbi0+YmF0Y2hTdGF0ZSk7CisJfQogfQogCiAvKgogICog WFhYIEJvdGggaW5kZXhfYmF0Y2hfYWxsb2MoKSBjYWxscyBpbiBidHJlZSB1c2UgTWF4VElEc1Bl ckJUcmVlUGFnZSwKICAqIHdoaWNoIHNlZW1zIHVuZm9ydHVuYXRlIC0gaXQgaW5jcmVhc2VzIHRo ZSBhbGxvY2F0aW9uIHNpemVzLCBldmVuIGlmCi0gKiB0aGUgaW5kZXggd291bGQgYmUgZmluZSB3 aXRoIHNtYWxsZXIgYXJyYXlzLiBUaGlzIG1lYW5zIGFsbCBiYXRjaGVzIGV4Y2VlZAotICogQUxM T0NfQ0hVTktfTElNSVQsIGZvcmNpbmcgYSBzZXBhcmF0ZSBtYWxsb2MgKGV4cGVuc2l2ZSkuCisg KiB0aGUgaW5kZXggd291bGQgYmUgZmluZSB3aXRoIHNtYWxsZXIgYXJyYXlzLiBUaGlzIG1lYW5z IGFsbCBiYXRjaGVzCisgKiBleGNlZWQgQUxMT0NfQ0hVTktfTElNSVQsIGZvcmNpbmcgYSBzZXBh cmF0ZSBtYWxsb2MgKGV4cGVuc2l2ZSkuIFRoZQorICogY2FjaGUgaGVscHMgZm9yIGxvbmdlciBx dWVyaWVzLCBub3QgZm9yIHF1ZXJpZXMgdGhhdCBvbmx5IGNyZWF0ZSBhCisgKiBzaW5nbGUgYmF0 Y2gsIGV0Yy4KICAqLwogSW5kZXhTY2FuQmF0Y2gKLWluZGV4X2JhdGNoX2FsbG9jKGludCBtYXhp dGVtcywgYm9vbCB3YW50X2l0dXApCitpbmRleF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNj YW4sIGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0dXApCiB7Ci0JSW5kZXhTY2FuQmF0Y2ggYmF0 Y2ggPSBwYWxsb2Mob2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKwotCQkJCQkJ CQkgIHNpemVvZihJbmRleFNjYW5CYXRjaFBvc0l0ZW0pICogbWF4aXRlbXMpOworCUluZGV4U2Nh bkJhdGNoIGJhdGNoID0gTlVMTDsKIAorCS8qCisJICogdHJ5IHRvIGZpbmQgYSBiYXRjaCBpbiB0 aGUgY2FjaGUKKwkgKgorCSAqIFhYWCBXZSBjYW4gZ2V0IGhlcmUgd2l0aCBiYXRjaFN0YXRlPT1O VUxMIGZvciBiaXRtYXBzY2Fucy4gQ291bGQgdGhhdAorCSAqIG1lYW4gYml0bWFwc2NhbnMgaGF2 ZSBpc3N1ZXMgd2l0aCBtYWxsb2MvZnJlZSBvbiBiYXRjaGVzIHRvbz8gQnV0IHRoZQorCSAqIGNh Y2hlIGNhbid0IGhlbHAgd2l0aCB0aGF0LCB3aGVuIGl0J3MgaW4gYmF0Y2hTdGF0ZS4KKwkgKi8K KwlpZiAoKHNjYW4tPmJhdGNoU3RhdGUgIT0gTlVMTCkgJiYKKwkJKHNjYW4tPmJhdGNoU3RhdGUt PmJhdGNoZXNDYWNoZSAhPSBOVUxMKSkKKwl7CisJCS8qCisJCSAqIHRyeSB0byBmaW5kIGEgYmF0 Y2ggaW4gdGhlIGNhY2hlLCB3aXRoIG1heGl0ZW1zIGhpZ2ggZW5vdWdoCisJCSAqCisJCSAqIFhY WCBNYXliZSBzaG91bGQgbG9vayBmb3IgYSBiYXRjaCB3aXRoIGxvd2VzdCBtYXhpdGVtcz8gVGhh dCBzaG91bGQKKwkJICogaW5jcmVhc2UgcHJvYmFiaWxpdHkgb2YgY2FjaGUgaGl0cyBpbiB0aGUg ZnV0dXJlPworCQkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FuLT5iYXRjaFN0YXRlLT5i YXRjaGVzQ2FjaGVTaXplOyBpKyspCisJCXsKKwkJCWlmICgoc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0 Y2hlc0NhY2hlW2ldICE9IE5VTEwpICYmCisJCQkJKHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXND YWNoZVtpXS0+bWF4aXRlbXMgPj0gbWF4aXRlbXMpKQorCQkJeworCQkJCWJhdGNoID0gc2Nhbi0+ YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNo ZXNDYWNoZVtpXSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBmb3Vu ZCBhIGJhdGNoIGluIHRoZSBjYWNoZT8gKi8KKwlpZiAoYmF0Y2gpCisJeworCQkvKiBmb3IgSU9T LCB3ZSBleHBlY3QgdG8gYWxyZWFkeSBoYXZlIHRoZSBjdXJyVHVwbGVzICovCisJCUFzc2VydCgh KHdhbnRfaXR1cCAmJiAoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpKTsKKworCQkvKiBYWFgg bWF5YmUgd2UgY291bGQga2VlcCB0aGVzZSBhbGxvY2F0aW9ucyB0b28gKi8KKwkJQXNzZXJ0KGJh dGNoLT5wb3MgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5ID09IE5V TEwpOworCX0KKwllbHNlCisJeworCQliYXRjaCA9IHBhbGxvYyhvZmZzZXRvZihJbmRleFNjYW5C YXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCSAgIHNpemVvZihJbmRleFNjYW5CYXRjaFBvc0l0ZW0p ICogbWF4aXRlbXMpOworCisJCWJhdGNoLT5tYXhpdGVtcyA9IG1heGl0ZW1zOworCisJCS8qCisJ CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIG5lZWQgYSB0dXBsZSBz dG9yYWdlCisJCSAqIHdvcmtzcGFjZS4gV2UgYWxsb2NhdGUgQkxDS1NaIGZvciB0aGlzLCB3aGlj aCBzaG91bGQgYWx3YXlzIGdpdmUKKwkJICogdGhlIGluZGV4IEFNIGVub3VnaCBzcGFjZSB0byBm aXQgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCisJCSAqLworCQliYXRjaC0+Y3VyclR1 cGxlcyA9IE5VTEw7CisJCWlmICh3YW50X2l0dXApCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IHBh bGxvYyhCTENLU1opOworCX0KKworCS8qIHNoYXJlZCBpbml0aWFsaXphdGlvbiAqLwogCWJhdGNo LT5maXJzdEl0ZW0gPSAtMTsKIAliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKIAliYXRjaC0+a2lsbGVk SXRlbXMgPSBOVUxMOwogCWJhdGNoLT5udW1LaWxsZWQgPSAwOwogCi0JLyoKLQkgKiBJZiB3ZSBh cmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBuZWVkIGEgdHVwbGUgc3RvcmFnZSB3b3Jr c3BhY2UuCi0JICogV2UgYWxsb2NhdGUgQkxDS1NaIGZvciB0aGlzLCB3aGljaCBzaG91bGQgYWx3 YXlzIGdpdmUgdGhlIGluZGV4IEFNCi0JICogZW5vdWdoIHNwYWNlIHRvIGZpdCBhIGZ1bGwgcGFn ZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7Ci0J aWYgKHdhbnRfaXR1cCkKLQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBwYWxsb2MoQkxDS1NaKTsKLQog CWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCWJhdGNoLT5wb3MgPSBOVUxMOwogCWJhdGNo LT5pdGVtc3Zpc2liaWxpdHkgPSBOVUxMOwkvKiBwZXItYmF0Y2ggSU9TIHZpc2liaWxpdHkgKi8K QEAgLTIzOTYsMyArMjQ2OCw3NiBAQCBpbmRleF9iYXRjaF91bmxvY2soUmVsYXRpb24gcmVsLCBi b29sIGRyb3BQaW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogCVJlbGVhc2VCdWZmZXIoYmF0Y2gt PmJ1Zik7CiAJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7IC8qIGRlZmVuc2l2ZSAqLwogfQor CisvKiBhZGQgdGhlIGJ1ZmZlciB0byB0aGUgY2FjaGUsIG9yIGZyZWUgaXQgKi8KK3ZvaWQKK2lu ZGV4X2JhdGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCkKK3sKKwkvKgorCSAqIGZpcnN0IGZyZWUgc29tZSBhbGxvY2F0aW9ucworCSAqCisJICogWFhY IFdlIGNvdWxkIGtlZXAvcmV1c2Ugc29tZSBvZiB0aG9zZS4KKwkgKi8KKworCWlmIChiYXRjaC0+ a2lsbGVkSXRlbXMgIT0gTlVMTCkKKwl7CisJCXBmcmVlKGJhdGNoLT5raWxsZWRJdGVtcyk7CisJ CWJhdGNoLT5raWxsZWRJdGVtcyA9IE5VTEw7CisJfQorCisJaWYgKGJhdGNoLT5pdGVtc3Zpc2li aWxpdHkgIT0gTlVMTCkKKwl7CisJCXBmcmVlKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHkpOworCQli YXRjaC0+aXRlbXN2aXNpYmlsaXR5ID0gTlVMTDsKKwl9CisKKwkvKiBYWFggYSBiaXQgdW5jbGVh ciB3aGF0J3MgcmVsZWFzZSBieSBBTSB2cy4gaW5kZXhhbSAqLworCUFzc2VydChiYXRjaC0+cG9z ID09IE5VTEwpOworCisJLyoKKwkgKiB0cnkgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZSAtIGZpbmRz IGEgc2xvdCB0aGF0J3MgZWl0aGVyIGVtcHR5IG9yIGhhcyBhCisJICogbG93ZXIgbWF4aXRlbXMg dmFsdWUgKGFuZCByZXBsYWNlIHRoYXQgYmF0Y2gpCisJICoKKwkgKiBYWFggbWF5YmUgd2Ugc2hv dWxkIHRyYWNrIHRoZSBudW1iZXIgb2YgZW1wdHkgc2xvdHMsIGFuZCBtaW5pbXVtIHZhbHVlCisJ ICogb2YgbWF4aXRlbXMsIHNvIHRoYXQgd2UgY2FuIHNraXAgcG9pbnRsZXNzIHNlYXJjaGVzPwor CSAqCisJICogWFhYIGlnbm9yZXMgY2FzZXMgd2l0aCBiYXRjaFN0YXRlPU5VTEwgKGNhbiB3ZSBn ZXQgaGVyZSB3aXRoIGJpdG1hcAorCSAqIHNjYW5zPykKKwkgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hT dGF0ZSAhPSBOVUxMKQorCXsKKwkJLyogbG93ZXN0IG1heGl0ZW1zIHdlIGZvdW5kIGluIHRoZSBj YWNoZSAodG8gcmVwbGFjZSB3aXRoIGJhdGNoKSAqLworCQlpbnQJCQltYXhpdGVtcyA9IGJhdGNo LT5tYXhpdGVtczsKKwkJaW50CQkJc2xvdCA9IHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNo ZVNpemU7CisKKwkJLyogZmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIHRoZSBjYWNoZSAq LworCQlpZiAoc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlID09IE5VTEwpCisJCQlzY2Fu LT5iYXRjaFN0YXRlLT5iYXRjaGVzQ2FjaGUKKwkJCQk9IHBhbGxvYzBfYXJyYXkoSW5kZXhTY2Fu QmF0Y2gsCisJCQkJCQkJCXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVNpemUpOworCisJ CWZvciAoaW50IGkgPSAwOyBpIDwgc2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlU2l6ZTsg aSsrKQorCQl7CisJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICovCisJCQlpZiAo c2Nhbi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlW2ldID09IE5VTEwpCisJCQl7CisJCQkJc2Nh bi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlW2ldID0gYmF0Y2g7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQkvKiB1cGRhdGUgbG93ZXN0IG1heGl0ZW1zPyAqLworCQkJaWYgKHNjYW4tPmJhdGNo U3RhdGUtPmJhdGNoZXNDYWNoZVtpXS0+bWF4aXRlbXMgPCBtYXhpdGVtcykKKwkJCXsKKwkJCQlt YXhpdGVtcyA9IHNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXNDYWNoZVtpXS0+bWF4aXRlbXM7CisJ CQkJc2xvdCA9IGk7CisJCQl9CisJCX0KKworCQkvKiBmb3VuZCBhIGJhdGNoIHRvIHJlcGxhY2U/ ICovCisJCWlmIChtYXhpdGVtcyA8IGJhdGNoLT5tYXhpdGVtcykKKwkJeworCQkJcGZyZWUoc2Nh bi0+YmF0Y2hTdGF0ZS0+YmF0Y2hlc0NhY2hlW3Nsb3RdKTsKKwkJCXNjYW4tPmJhdGNoU3RhdGUt PmJhdGNoZXNDYWNoZVtzbG90XSA9IGJhdGNoOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMKaW5kZXggZmJhNTYyZGY4Li4xOGM3MzRjNGEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYwpAQCAtMzgyLDIxICszODIsMjIgQEAgYnRmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIAlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+ IDApCiAJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOwogCi0JaWYgKGJhdGNoLT5pdGVtc3Zp c2liaWxpdHkpCi0JCXBmcmVlKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHkpOwotCi0JaWYgKGJhdGNo LT5jdXJyVHVwbGVzKQotCQlwZnJlZShiYXRjaC0+Y3VyclR1cGxlcyk7Ci0KIAlpZiAoYmF0Y2gt PnBvcykKIAl7CiAJCWlmICghc2Nhbi0+YmF0Y2hTdGF0ZSB8fCAhc2Nhbi0+YmF0Y2hTdGF0ZS0+ ZHJvcFBpbikKIAkJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CiAKIAkJcGZyZWUoYmF0Y2gt PnBvcyk7CisKKwkJLyogWFhYIG1heWJlIHNob3VsZCBiZSBkb25lIGluIGluZGV4X2JhdGNoX2Zy ZWU/ICovCisJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCQliYXRjaC0+cG9zID0gTlVM TDsKIAl9CiAKLQlwZnJlZShiYXRjaCk7CisJLyogWFhYIGtlZXAgaXRlbXN2aXNpYmlsaXR5LCBr aWxsSXRlbXMgYW5kIGN1cnJUdXBsZXMgKi8KKworCS8qIGZyZWUgdGhlIGJhdGNoIChvciBjYWNo ZSBpdCBmb3IgcmV1c2UpICovCisJaW5kZXhfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCA1NGE3NjdhNGYu LmIwMTljMTlmOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xMjAw LDcgKzEyMDAsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIAl9CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KLQlmaXJz dGJhdGNoID0gaW5kZXhfYmF0Y2hfYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSwgc2Nhbi0+eHNf d2FudF9pdHVwKTsKKwlmaXJzdGJhdGNoID0gaW5kZXhfYmF0Y2hfYWxsb2Moc2NhbiwgTWF4VElE c1BlckJUcmVlUGFnZSwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAlmaXJzdGJhdGNoLT5wb3MgPSBw YWxsb2Moc2l6ZW9mKEJUU2NhblBvc0RhdGEpKTsKIAogCS8qCkBAIC0yMjM3LDcgKzIyMzcsNyBA QCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8s CiAJQlRTY2FuUG9zCW5ld3BvczsKIAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNo ICovCi0JbmV3YmF0Y2ggPSBpbmRleF9iYXRjaF9hbGxvYyhNYXhUSURzUGVyQlRyZWVQYWdlLCBz Y2FuLT54c193YW50X2l0dXApOworCW5ld2JhdGNoID0gaW5kZXhfYmF0Y2hfYWxsb2Moc2Nhbiwg TWF4VElEc1BlckJUcmVlUGFnZSwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAluZXdiYXRjaC0+cG9z ID0gcGFsbG9jKHNpemVvZihCVFNjYW5Qb3NEYXRhKSk7CiAJbmV3cG9zID0gbmV3YmF0Y2gtPnBv czsKIAotLSAKMi41MS4wCgo= --000000000000f2d8e40642a54242 Content-Type: application/octet-stream; name="v20251102-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Disposition: attachment; filename="v20251102-0002-Add-amgetbatch-interface-for-index-scan-pr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhicvu4p2 RnJvbSA1ZWQxOTFhN2VlMjNlYTUwZWY1MTFjMjA1MDFhNzBlY2NkYmYwZDM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjUxMTAyIDIv M10gQWRkIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGZvciBpbmRleCBzY2FuCiBwcmVmZXRjaGluZy4K CkFsbG93cyB0aGUgaW5kZXggQU0gdG8gcHJvdmlkZSBpdGVtcyAoVElEcyBhbmQgdHVwbGVzKSBp biBiYXRjaGVzLCB3aGljaAppcyB0aGVuIHVzZWQgdG8gaW1wbGVtZW50IHByZWZldGNoaW5nIG9m IGhlYXAgdHVwbGVzIGluIGluZGV4IHNjYW5zCihpbmNsdWRpbmcgaW5kZXgtb25seSBzY2Fucyku IFRoaXMgaXMgc2ltaWxhciB0byBwcmVmZXRjaGluZyBhbHJlYWR5CmRvbmUgaW4gYml0bWFwIHNj YW5zLCBhbmQgY2FuIHJlc3VsdCBpbiBzaWduaWZpY2FudCBzcGVlZHVwcy4KClRoZSBpbmRleCBB TSBtYXkgaW1wbGVtZW50IGFuIG9wdGlvbmFsICJhbWdldGJhdGNoIiBjYWxsYmFjaywgcmV0dXJu aW5nCmEgYmF0Y2ggb2YgaXRlbXMuIFRoZSBpbmRleGFtLmMgY29kZSB0aGVuIGhhbmRsZXMgdGhp cyB0cmFuc3BhcmVudGx5CnRocm91Z2ggdGhlIGV4aXN0aW5nICJnZXRuZXh0IiBpbnRlcmZhY2Uu Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgICAy MiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgICAg NCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8ICAxMDAg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAxNTAg KysKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICAgMyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICA0MyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgICAgMSAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAxMzI3ICsr KysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAg ICAgICAgfCAgMzIxICsrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg ICAgICAgICB8ICA3MTggKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgICAgICAgICAgfCAgIDcwICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YyAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMg ICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jICAgICAgfCAgMTAxICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVsYXRpb24uYyAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3Ry ZWFtLmMgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMg ICAgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j ICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgICAgIHwgICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUgfCAgICAxICsKIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDMgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAg ICAgICAgICAgICB8ICAgNDAgKy0KIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2lu ZGV4X2FtLmMgICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0ICAgICAgICB8ICAgIDMgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgICAgICB8ICAgIDggKy0KIDM0IGZpbGVzIGNoYW5nZWQsIDIxMTIgaW5zZXJ0aW9ucygr KSwgODY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmLi4zYTY1MTc0 NGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFt cmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1n ZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0 eXBlZGVmIEluZGV4U2NhbkJhdGNoKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJCQkg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyogcmVsZWFzZSBiYXRjaCBvZiB2YWxpZCB0 dXBsZXMgKi8KK3R5cGVkZWYgdm9pZCAoKmFtZnJlZWJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKIC8qIGZldGNo IGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAg LTIwNSwxMSArMjE0LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAo SW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAo KmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8qIG1hcmsgY3Vy cmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2FuIHBvc2l0aW9u ICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRy YWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVzZXRfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBwYXJhbGxlbCBp bmRleCBzY2Fucy4KQEAgLTMwOSwxMCArMzE2LDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1S b3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5fZnVu Y3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAvKiBjYW4g YmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5V TEwgKi8KKwlhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRjaDsJLyogY2FuIGJlIE5VTEwg Ki8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8K IAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1h cmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9z OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyog Y2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJh bGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1l c3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXgg OTIwMGEyMmJkLi43Njc1MDNiYjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5h bS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xNSw2ICsxNSw3IEBACiAj ZGVmaW5lIEdFTkFNX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCisjaW5jbHVkZSAiYWNj ZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy9z a2V5LmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCkBAIC0xMTUsNiArMTE2LDcgQEAg dHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVt cHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVs c2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVz YzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0 eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBA IC0yMjgsNiArMjMwLDggQEAgZXh0ZXJuIHZvaWQgaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlf ZGlzdGFuY2VzKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCSBib29sIHJlY2hlY2tP cmRlckJ5KTsKIGV4dGVybiBieXRlYSAqaW5kZXhfb3BjbGFzc19vcHRpb25zKFJlbGF0aW9uIGlu ZHJlbCwgQXR0ck51bWJlciBhdHRudW0sCiAJCQkJCQkJCQlEYXR1bSBhdHRvcHRpb25zLCBib29s IHZhbGlkYXRlKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBpbmRleF9iYXRjaF9hbGxvYyhpbnQg bWF4aXRlbXMsIGJvb2wgd2FudF9pdHVwKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX3VubG9j ayhSZWxhdGlvbiByZWwsIGJvb2wgZHJvcFBpbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggOTA5ZGI3M2I3Li43NDRhZDJmYWMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERh dGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFNIGluZGVwZW5kZW50IHBhcnQg b2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1cnJlbnQgaGVh cCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1iZXIgeHNfYmxrOwkJCS8qIHhz X2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5COiBpZiB4c19jYnVmIGlzIG5v dCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICovCiB9IEluZGV4 RmV0Y2hIZWFwRGF0YTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDE2YmU1YzdhOS4uMTE5NzA1ZjY0 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL25idHJlZS5oCkBAIC05MzksMTAgKzkzOSwxMCBAQCB0eXBlZGVmIEJUVmFjdXVt UG9zdGluZ0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKICAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJv YWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKICAqIGRy b3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0 dXJuZWQgaXRlbXMuCiAgKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBw aW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hl biBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAo c2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVj eWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQg dGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBz aWJsaW5nIHBhZ2UuCisgKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4gZHJvcFBpbiBpcyBzZXQgaW4g YmF0Y2ggc3RhdGUpIHRvIGF2b2lkIGJsb2NraW5nCisgKiBwcm9ncmVzcyBieSBWQUNVVU0gKHNl ZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElECisgKiBy ZWN5Y2xpbmcgc2FmZSkuICBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRoZSBsb2NrIGFuZCB0 aGUgcGluIG9uIHRoZQorICogY3VycmVudCBwYWdlIGJlZm9yZSBtb3Zpbmcgb24gdG8gaXRzIHNp YmxpbmcgcGFnZS4KICAqCiAgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3 ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAogICogbWF0Y2hlZCBpdGVtLCBv dGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJbmRleFR1cGxlcyBn bwpAQCAtOTYxLDc0ICs5NjEsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3 aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KIAogdHlwZWRlZiBzdHJ1Y3QgQlRT Y2FuUG9zRGF0YQogewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBt ZWFucyB1bnBpbm5lZCkgKi8KLQogCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9z aXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwogCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJ LyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCiAJQmxvY2tOdW1iZXIgcHJldlBh Z2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwogCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJ LyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyogY3VyclBh Z2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCiAKIAkvKiBzY2FuIGRpcmVjdGlvbiBmb3Ig dGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KIAlTY2FuRGlyZWN0 aW9uIGRpcjsKIAotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwg bmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4gdGhlIGFz c29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4dFR1cGxl T2Zmc2V0OwotCiAJLyoKIAkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIg d2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCiAJICogaW5kZXggZW50cmllcyB0byB0aGUg bGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5LgogCSAqLwog CWJvb2wJCW1vcmVMZWZ0OwogCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhlIGl0ZW1z IGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwot CSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmll bnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0 aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGgg YSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICog aXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJu ZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGlu ZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRl bXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyog TVVTVCBCRSBMQVNUICovCiB9IEJUU2NhblBvc0RhdGE7CiAKIHR5cGVkZWYgQlRTY2FuUG9zRGF0 YSAqQlRTY2FuUG9zOwogCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpIFwKLSgg XAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8 IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlk KChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBvcykgXAot CWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2FucG9zKS5i dWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5w aW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChz Y2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxlICgwKQot Ci0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8o QmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJ c1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcyku Y3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0J ZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5j dXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIEJU U2NhblBvc0lzVmFsaWQoc2NhbnBvcykgQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJy UGFnZSkKIAogLyogV2UgbmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlwZSBT S19TRUFSQ0hBUlJBWSBzY2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8K QEAgLTEwNjYsMzIgKzEwMTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJ QlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNoIGVxdWFsaXR5LXR5 cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8qIE9SREVSIHByb2Nz IGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4dCBhcnJheUNvbnRl eHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAqLwotCi0JLyogaW5m byBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVy IHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhl cyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3Vy cmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBkcm9wIGxlYWYgcGlu IGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2lu ZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQotCSAqIHdv cmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4gIEVhY2gg aXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwg cGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtUdXBsZXM7CQkvKiB0 dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRoZSBtYXJrZWQgcG9z aXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9uLCB3ZQotCSAqIGRv bid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRlbUluZGV4IGluIG1h cmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMgdmFsaWQgZm9yIHRo ZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEg bWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0JICogbWFya1Bvcy4K LQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2 YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAq LwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwot CUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55ICovCisJ QlRTY2FuUG9zCXBvczsKIH0gQlRTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFx dWVEYXRhICpCVFNjYW5PcGFxdWU7CkBAIC0xMTkxLDE0ICsxMTE3LDE1IEBAIGV4dGVybiBib29s IGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogZXh0 ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwogZXh0ZXJuIFNpemUgYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihSZWxhdGlv biByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBidGluaXRwYXJh bGxlbHNjYW4odm9pZCAqdGFyZ2V0KTsKLWV4dGVybiBib29sIGJ0Z2V0dHVwbGUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggYnRn ZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJ CQkgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2Fu S2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0ZnJlZWJhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgYnRw YXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgYnRlbmRzY2Fu KEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4 dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBt YXJrYmF0Y2gpOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRlKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KnN0YXRzLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApA QCAtMTMwNiw4ICsxMjMzLDkgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxhdGlvbiBy ZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZlciAq YnVmUCwgaW50IGFjY2Vzcyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2Vy dChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMy IF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBP ZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJ bmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZl ciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0 bW9zdCk7CiAKIC8qCkBAIC0xMzI3LDcgKzEyNTUsNyBAQCBleHRlcm4gYm9vbCBfYnRfY2hlY2tr ZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJy YQogZXh0ZXJuIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBl eHRlcm4gdm9pZCBfYnRfc2V0X3N0YXJ0aWtleShJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBh Z2VTdGF0ZSAqcHN0YXRlKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVp ZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0 aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggYjVlMGZiMzg2Li42Zjg3YzZiMzEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMTYsOSArMTYsMTEgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIK ICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5j bHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bp bi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjEsMTAgKzEyMywxNTYgQEAg dHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVs QmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh CiB7CiAJUmVsYXRpb24JcmVsOworCVJlYWRTdHJlYW0gKnJzOwogfSBJbmRleEZldGNoVGFibGVE YXRhOwogCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCisvKiBGb3J3YXJkIGRl Y2xhcmF0aW9uLCB0aGUgcHJlZmV0Y2ggY2FsbGJhY2sgbmVlZHMgSW5kZXhTY2FuRGVzY0RhdGEu ICovCit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgSW5kZXhTY2FuQmF0Y2hEYXRh OworCit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaFBvc0l0ZW0JLyogd2hhdCB3ZSByZW1l bWJlciBhYm91dCBlYWNoIG1hdGNoICovCit7CisJSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8q IFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRleE9mZnNl dDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRpb25JbmRl eCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlmIGFu eSAqLworfSBJbmRleFNjYW5CYXRjaFBvc0l0ZW07CisKKy8qCisgKiBEYXRhIGFib3V0IG9uZSBi YXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSB0aGUgaW5kZXggQU0KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVm IChpbnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLworCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIGRyb3BQaW4pICovCisKKwkvKgorCSAqIEFNLXNwZWNpZmljIHN0YXRl IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgc2NhbiB3aXRoaW4KKwkg KiB0aGUgaW5kZXgKKwkgKi8KKwl2b2lkCSAgICpwb3M7CisKKwkvKgorCSAqIFRoZSBpdGVtcyBh cnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKKwkg KiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50 IHRvIGZpbGwgdGhlCisJICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhl IGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCisJICogSGVuY2Ugd2UgbmVlZCBib3RoIGEg Zmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgorCSAqLwor CWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlp bnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyog aW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5l dmVyIHVzZWQpICovCisJaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGluZGV4ZXMgb2Yga2lsbGVk IGl0ZW1zICovCisJaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9y ZWQgaXRlbXMgKi8KKworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nh biwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCisJICogd29ya3NwYWNlcyBmb3IgdGhlIG1h dGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuIEVhY2gKKwkgKiBp cyBvZiBzaXplIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdz IHdvcnRoIG9mCisJICogdHVwbGVzLgorCSAqCisJICogWFhYIG1heWJlIGN1cnJUdXBsZXMgc2hv dWxkIGJlIHBhcnQgb2YgdGhlIGFtLXNwZWNpZmljIHBlci1iYXRjaCBzdGF0ZQorCSAqIHN0b3Jl ZCBpbiAicG9zaXRpb24iIGZpZWxkPworCSAqLworCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0 dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisKKwkvKgorCSAqIGJhdGNoIGNvbnRlbnRzIChU SURzLCBpbmRleCB0dXBsZXMsIGtpbGwgYml0bWFwLCAuLi4pCisJICoKKwkgKiBYWFggU2hvdWxk bid0IHRoaXMgYmUgcGFydCBvZiB0aGUgIkluZGV4U2NhbkJhdGNoUG9zSXRlbSIgc3RydWN0PyBU bworCSAqIGtlZXAgZXZlcnl0aGluZyBpbiBvbmUgcGxhY2U/IE9yIHdoeSBzaG91bGQgd2UgaGF2 ZSBzZXBhcmF0ZSBhcnJheXM/CisJICogT25lIGFkdmFudGFnZSBpcyB0aGF0IHdlIGRvbid0IG5l ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhcnJheXMgdGhhdAorCSAqIHdlIGRvbid0IG5lZWQg Li4uIGUuZy4gaWYgd2UgZG9uJ3QgbmVlZCBoZWFwIHR1cGxlcywgd2UgZG9uJ3QgYWxsb2NhdGUK KwkgKiB0aGF0LiBXZSBjb3VsZG4ndCBkbyB0aGF0IHdpdGggZXZlcnl0aGluZyBpbiBvbmUgc3Ry dWN0LgorCSAqLworCWNoYXIJICAgKml0ZW1zdmlzaWJpbGl0eTsJLyogSW5kZXgtb25seSBzY2Fu IHZpc2liaWxpdHkgY2FjaGUgKi8KKworCUluZGV4U2NhbkJhdGNoUG9zSXRlbSBpdGVtc1tGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOworfSBJbmRleFNjYW5CYXRjaERhdGE7CisKKy8qCisgKiBQb3Np dGlvbiBpbiB0aGUgcXVldWUgb2YgYmF0Y2hlcyAtIGluZGV4IG9mIGEgYmF0Y2gsIGluZGV4IG9m IGl0ZW0gaW4gYSBiYXRjaC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hQb3MK K3sKKwlpbnQJCQliYXRjaDsKKwlpbnQJCQlpbmRleDsKK30gSW5kZXhTY2FuQmF0Y2hQb3M7CisK K3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhIEluZGV4U2NhbkRlc2NEYXRhOwordHlw ZWRlZiBib29sICgqSW5kZXhQcmVmZXRjaENhbGxiYWNrKSAoSW5kZXhTY2FuRGVzY0RhdGEgKiBz Y2FuLAorCQkJCQkJCQkJICAgdm9pZCAqYXJnLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2hQ b3MgKnBvcyk7CisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zLCB3 aGljaCBtYW5hZ2UgcGVyLXBhZ2UgYmF0Y2hlcyBvZiBpdGVtcworICogd2l0aCBtYXRjaGluZyBp bmRleCB0dXBsZXMgdXNpbmcgYSBjaXJjdWxhciBidWZmZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuQmF0Y2hTdGF0ZQoreworCS8qIEluZGV4IEFNIGRyb3BzIGxlYWYgcGluIGJlZm9y ZSBhbWdldGJhdGNoIHJldHVybnM/ICovCisJYm9vbAkJZHJvcFBpbjsKKworCS8qCisJICogRGlk IHdlIHJlYWQgdGhlIGZpbmFsIGJhdGNoIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24/IFRoZSBiYXRj aGVzIG1heSBiZQorCSAqIGxvYWRlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgYW5kIHdlIG5lZWQg dG8gcmVtZW1iZXIgd2hlbiB3ZSBmYWlsIHRvCisJICogbG9hZCB0aGUgbmV4dCBiYXRjaCBpbiBh IGdpdmVuIHNjYW4gKHdoaWNoIG1lYW5zICJubyBtb3JlIGJhdGNoZXMiKS4KKwkgKiBhbWdldGJh dGNoIG1heSByZXN0YXJ0IHRoZSBzY2FuIG9uIHRoZSBnZXQgY2FsbCwgc28gd2UgbmVlZCB0byBy ZW1lbWJlcgorCSAqIGl0J3Mgb3Zlci4KKwkgKi8KKwlib29sCQlmaW5pc2hlZDsKKwlib29sCQly ZXNldDsKKworCS8qCisJICogRGlkIHdlIGRpc2FibGUgcHJlZmV0Y2hpbmcvdXNlIG9mIGEgcmVh ZCBzdHJlYW0gYmVjYXVzZSBpdCBkaWRuJ3QgcGF5CisJICogZm9yIGl0c2VsZj8KKwkgKi8KKwli b29sCQlwcmVmZXRjaGluZ0xvY2tlZEluOworCWJvb2wJCWRpc2FibGVkOworCisJLyoKKwkgKiBE dXJpbmcgcHJlZmV0Y2hpbmcsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBi bG9jayBudW1iZXIKKwkgKiB0aGF0IHdhcyByZXR1cm5lZCBieSBvdXIgcmVhZCBzdHJlYW0gY2Fs bGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8KKwkgKiBzdXBwcmVzcyBkdXBsaWNhdGUgc3Vj Y2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1ZXN0cy4KKwkgKgorCSAqIFByZWZldGNoaW5n IGNhbiBzdGlsbCBwZXJmb3JtIG5vbi1zdWNjZXNzaXZlIHJlcXVlc3RzIGZvciB0aGUgc2FtZQor CSAqIGJsb2NrIG51bWJlciAoaW4gZ2VuZXJhbCB3ZSdyZSBwcmVmZXRjaGluZyBpbiBleGFjdGx5 IHRoZSBzYW1lIG9yZGVyCisJICogdGhhdCB0aGUgc2NhbiB3aWxsIHJldHVybiB0YWJsZSBBTSBU SURzIGluKS4gIFdlIG5lZWQgdG8gYXZvaWQKKwkgKiBkdXBsaWNhdGUgc3VjY2Vzc2l2ZSByZXF1 ZXN0cyBiZWNhdXNlIHRhYmxlIEFNcyBleHBlY3QgdG8gYmUgYWJsZSB0bworCSAqIGhhbmcgb24g dG8gYnVmZmVyIHBpbnMgYWNyb3NzIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGNhbGxzLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJlbnRQcmVmZXRjaEJsb2NrOworCisJLyoKKwkgKiBDdXJyZW50 IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcy4gVGhpcyBp cyB1c2VkCisJICogdG8gbG9hZCBkYXRhIGluIHRoZSByZWFkIHN0cmVhbSBBUEkgY2FsbGJhY2ss IGV0Yy4KKwkgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKKworCS8qIHBvc2l0aW9ucyBp biB0aGUgcXVldWUgb2YgYmF0Y2hlcyAoYmF0Y2ggKyBpdGVtKSAqLworCUluZGV4U2NhbkJhdGNo UG9zIHJlYWRQb3M7CS8qIHJlYWQgcG9zaXRpb24gKi8KKwlJbmRleFNjYW5CYXRjaFBvcyBzdHJl YW1Qb3M7CS8qIHByZWZldGNoIHBvc2l0aW9uIChmb3IgcmVhZCBzdHJlYW0gQVBJKSAqLworCUlu ZGV4U2NhbkJhdGNoUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJ SW5kZXhTY2FuQmF0Y2hEYXRhICptYXJrQmF0Y2g7CisKKwkvKgorCSAqIEFycmF5IG9mIGJhdGNo ZXMgcmV0dXJuZWQgYnkgdGhlIEFNLiBUaGUgYXJyYXkgaGFzIGEgY2FwYWNpdHkgKGJ1dCBjYW4K KwkgKiBiZSByZXNpemVkIGlmIG5lZWRlZCkuIFRoZSBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggb2Yg dGhlIGJhdGNoIHdlJ3JlCisJICogY3VycmVudGx5IHJlYWRpbmcgZnJvbSAodGhpcyBuZWVkcyB0 byBiZSB0cmFuc2xhdGVkIGJ5IG1vZHVsbworCSAqIG1heEJhdGNoZXMgaW50byBpbmRleCBpbiB0 aGUgYmF0Y2hlcyBhcnJheSkuCisJICovCisJaW50CQkJbWF4QmF0Y2hlczsJCS8qIHNpemUgb2Yg dGhlIGJhdGNoZXMgYXJyYXkgKi8KKwlpbnQJCQloZWFkQmF0Y2g7CQkvKiBoZWFkIGJhdGNoIHNs b3QgKi8KKwlpbnQJCQluZXh0QmF0Y2g7CQkvKiBuZXh0IGVtcHR5IGJhdGNoIHNsb3QgKi8KKwor CUluZGV4U2NhbkJhdGNoRGF0YSAqKmJhdGNoZXM7CisKKwkvKiBjYWxsYmFjayB0byBza2lwIHBy ZWZldGNoaW5nIGluIElPUyBldGMuICovCisJSW5kZXhQcmVmZXRjaENhbGxiYWNrIHByZWZldGNo OworCXZvaWQJICAgKnByZWZldGNoQXJnOworfQkJCUluZGV4U2NhbkJhdGNoU3RhdGU7CisKIC8q CiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3Ro IGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4g IFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCkBAIC0xMzgsNiArMjg2LDggQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgU25hcHNob3REYXRhICp4c19z bmFwc2hvdDsJLyogc25hcHNob3QgdG8gc2VlICovCiAJaW50CQkJbnVtYmVyT2ZLZXlzOwkvKiBu dW1iZXIgb2YgaW5kZXggcXVhbGlmaWVyIGNvbmRpdGlvbnMgKi8KIAlpbnQJCQludW1iZXJPZk9y ZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCisJSW5kZXhTY2FuQmF0 Y2hTdGF0ZSAqYmF0Y2hTdGF0ZTsJLyogYW1nZXRiYXRjaCByZWxhdGVkIHN0YXRlICovCisKIAlz dHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBk ZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5 IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBj YWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDMw ZDg4OWI1NC4uNjg3OWZlOTliIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0Myw3ICsxMzQz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0 Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNh bnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8q IGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNh bm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGlu Y2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4Li4wMGY0YzNkMDAgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgQ29zdCBkaXNhYmxl X2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFw c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbi5jCmluZGV4IDJmN2QxNDM3OS4uNjQ3MjAxM2FlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJp bi5jCkBAIC0yOTYsOCArMjk2LDcgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlh bXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBi cmluZ2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnJpbmVuZHNjYW47Ci0JYW1y b3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7 CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVw YXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwppbmRleCA3OGY3YjdhMjQuLmM5ZGUzZDEyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51 dGlsLmMKQEAgLTg0LDggKzg0LDcgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGdp bmdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdpbmVuZHNjYW47Ci0JYW1yb3V0 aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5j CmluZGV4IDUyMTNjZDcxZS4uZDgwNjU0NDIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0x MDUsOCArMTA1LDcgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGU7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGdp c3RnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbjsKLQlhbXJv dXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM OwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMKaW5kZXggNTMwNjFjODE5Li5iM2Q3ZjgyNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAg LTEwNCw4ICsxMDQsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGlu ZS0+YW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZTsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0g aGFzaGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwotCWFt cm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxM OworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRl cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGJjYmFjODQ0Yi4uNmM0MWIzMTE5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTg0LDcgKzg0LDkgQEAg aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAlJbmRleEZldGNoSGVhcERh dGEgKmhzY2FuID0gcGFsbG9jMChzaXplb2YoSW5kZXhGZXRjaEhlYXBEYXRhKSk7CiAKIAloc2Nh bi0+eHNfYmFzZS5yZWwgPSByZWw7CisJaHNjYW4tPnhzX2Jhc2UucnMgPSBOVUxMOwogCWhzY2Fu LT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2Nr TnVtYmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk0LDEwICs5NiwxNCBA QCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsK IAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2Fu OwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT5ycyk7CisKIAlp ZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhz Y2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCQloc2Nh bi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCX0KIH0KIApAQCAtMTA4LDYgKzExNCw5 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAog CWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAorCWlmIChzY2FuLT5ycykKKwkJcmVh ZF9zdHJlYW1fZW5kKHNjYW4tPnJzKTsKKwogCXBmcmVlKGhzY2FuKTsKIH0KIApAQCAtMTI0LDIz ICsxMzMsMzcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkv KiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQt SE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxfYWdhaW4pCisJLyoKKwkgKiBTd2l0Y2ggdG8gY29y cmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICh3ZSBjYW4gc2tpcCB0aGlz CisJICogaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbikKKwkgKi8KKwlpZiAoISpjYWxsX2FnYWlu ICYmIGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQogCXsK LQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFk eSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CisJCS8qIFJlbWVtYmVy IHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4tPnhz X2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKIAotCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhzY2FuLT54c19jYnVmLAotCQkJCQkJCQkJCQkgIGhz Y2FuLT54c19iYXNlLnJlbCwKLQkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KHRpZCkpOworCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNl QnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25s eSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCisJCSAqIFdoZW4gdXNpbmcgYSBy ZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25vdyB3aGljaCBibG9jaworCQkg KiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1h dGNoIGJlbG93KQogCQkgKi8KLQkJaWYgKHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJ aGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsK KwkJaWYgKHNjYW4tPnJzKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcihzY2FuLT5ycywgTlVMTCk7CisJCWVsc2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1 ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOworCisJCS8qCisJCSAqIFBy dW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCisJCSAqLworCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOwog CX0KIAorCS8qIEFzc2VydCB0aGF0IHRoZSBUSUQncyBibG9jayBudW1iZXIncyBidWZmZXIgaXMg bm93IHBpbm5lZCAqLworCUFzc2VydChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSk7CisJ QXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNf YmxrKTsKKwogCS8qIE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4 YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9M T0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlk LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAwY2IyN2FmMTMuLjU1ZTYwYzlmZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDcgQEAgUmVsYXRpb25HZXRJbmRl eFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQog CXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0 aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1i ZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4tPmJhdGNoU3RhdGUgPSBOVUxMOwkvKiB1 c2VkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zICovCiAKIAkvKgogCSAqIFdlIGFsbG9jYXRlIGtl eSB3b3Jrc3BhY2UgaGVyZSwgYnV0IGl0IHdvbid0IGdldCBmaWxsZWQgdW50aWwgYW1yZXNjYW4u CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCAwNDkyZDkyZDIuLmZkM2ZmYTIyMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVk ZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFj Y2Vzcy9uYnRyZWUuaCIJCS8qIFhYWCBmb3IgTWF4VElEc1BlckJUcmVlUGFnZSAoc2hvdWxkIHJl bW92ZSkgKi8KICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3Mv cmVsb3B0aW9ucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCkBAIC01MSw5ICs1Miwx MSBAQAogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv Y29zdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcu aCIKICNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdy LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTEwNyw4ICsxMTAsMTQ2IEBAIGRv IHsgXAogc3RhdGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz LCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2Mg cHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRpYyBJdGVtUG9pbnRlciBpbmRleF9iYXRjaF9n ZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsK K3N0YXRpYyBJdGVtUG9pbnRlciBpbmRleF9yZXRhaWxfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFs aWRhdGVfcmVsYXRpb25fa2luZChSZWxhdGlvbiByKTsKIAorLyogaW5kZXggYmF0Y2hpbmcgKi8K K3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK3N0YXRp YyB2b2lkIGluZGV4X2JhdGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0 ZSk7CitzdGF0aWMgdm9pZCBpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK3N0 YXRpYyBib29sIGluZGV4X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgdm9pZCBpbmRleF9iYXRjaF9mcmVlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCitzdGF0aWMgQmxvY2tOdW1iZXIg aW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9uZXh0KFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJ CQkJICAgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCQkgICB2b2lkICpw ZXJfYnVmZmVyX2RhdGEpOworCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9v bCBpbmRleF9iYXRjaF9wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CQkJCQkgICBJbmRleFNjYW5CYXRjaFBvcyAqcG9zLAorCQkJCQkJCQkJCQkJCQkJICAgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pOworc3RhdGljIHZvaWQgaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2hQb3MgKnBvcyk7CitzdGF0aWMgdm9pZCBp bmRleF9iYXRjaF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworc3RhdGljIHZvaWQg QXNzZXJ0Q2hlY2tCYXRjaFBvc1ZhbGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2hQb3MgKnBvcyk7CitzdGF0aWMgdm9pZCBBc3NlcnRDaGVja0JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3RhdGljIHZvaWQgQXNzZXJ0Q2hlY2tCYXRj aGVzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJh dGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4KKyAqCisgKiBUaGUgdmFs dWUgNjQgdmFsdWUgaXMgYXJiaXRyYXJ5LCBpdCdzIGFib3V0IDFNQiBvZiBkYXRhIHdpdGggOEtC IHBhZ2VzCisgKiAoNTEya0IgZm9yIHBhZ2VzLCBhbmQgdGhlbiBhIGJpdCBvZiBvdmVyaGVhZCku IFdlIHNob3VsZCBub3QgcmVhbGx5IG5lZWQKKyAqIHRoaXMgbWFueSBiYXRjaGVzIGluIG1vc3Qg Y2FzZXMsIHRob3VnaC4gVGhlIHJlYWQgc3RyZWFtIGxvb2tzIGFoZWFkIGp1c3QKKyAqIGVub3Vn aCB0byBxdWV1ZSBlbm91Z2ggSU9zLCBhZGp1c3RpbmcgdGhlIGRpc3RhbmNlIChUSURzLCBidXQg dWx0aW1hdGVseQorICogdGhlIG51bWJlciBvZiBmdXR1cmUgYmF0Y2hlcykgdG8gbWVldCB0aGF0 LgorICoKKyAqIEluIG1vc3QgY2FzZXMgYW4gaW5kZXggbGVhZiBwYWdlIGhhcyBtYW55IChodW5k cmVkcykgaW5kZXggdHVwbGVzLCBhbmQKKyAqIGl0J3MgZW5vdWdoIHRvIHJlYWQgb25lIG9yIG1h eWJlIHR3byBsZWFmIHBhZ2VzIGFoZWFkIHRvIHNhdGlzZnkgdGhlCisgKiBkaXN0YW5jZS4KKyAq CisgKiBCdXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMgbWF5IG5vdCBxdWl0ZSB3b3JrLCBm b3IgZXhhbXBsZToKKyAqCisgKiBhKSBibG9hdGVkIGluZGV4IC0gbWFueSBwYWdlcyBvbmx5IGhh dmUgYSBzaW5nbGUgaW5kZXggaXRlbSwgc28gdGhhdAorICogICAgYWNoaWV2aW5nIHRoZSBkaXN0 YW5jZSByZXF1aXJlcyB0b28gbWFueSBsZWFmIHBhZ2VzCisgKgorICogYikgY29ycmVsYXRlZCBp bmRleCAtIGR1cGxpY2F0ZSBibG9ja3MgYXJlIHNraXBwZWQgKHRoZSBjYWxsYmFjayBkb2VzIG5v dAorICogICAgZXZlbiByZXR1cm4gdGhvc2UsIHRoYW5rcyB0byBjdXJyZW50UHJlZmV0Y2hCbG9j ayBvcHRpbWl6YXRpb24pLCBhbmQgYXJlCisgKiAgICBtb3N0bHkgaWdub3JlZCBpbiB0aGUgZGlz dGFuY2UgaGV1cmlzdGljcyAocmVhZCBzdHJlYW0gZG9lcyBub3QgZXZlbiBzZWUKKyAqICAgIHRo b3NlIFRJRHMsIGFuZCB0aGVyZSdzIG5vIEkvTyBlaXRoZXIpCisgKgorICogYykgaW5kZXgtb25s eSBzY2FuIC0gdGhlIGNhbGxiYWNrIHNraXBzIFRJRHMgZnJvbSBhbGwtdmlzaWJsZSBibG9ja3Mg KG5vdAorICogICAgcmVhZGluZyB0aG9zZSBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgaW5kZXgtb25s eSBzY2FucyksIGFuZCBzbyBpdCdzCisgKiAgICBpbnZpc2libGUgdG8gdGhlIGRpc3RhbmNlIC8g SU8gaGV1cmlzdGljcyAoc2ltaWxhcmx5IHRvIGR1cGxpY2F0ZXMpCisgKgorICogSW4gdGhlc2Ug Y2FzZXMgd2UgbWlnaHQgbmVlZCB0byByZWFkIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGJhdGNo ZXMgdG8KKyAqIGZpbmQgdGhlIGZpcnN0IGJsb2NrIHRvIHJldHVybiB0byB0aGUgcmVhZCBzdHJl YW0uIEl0J3Mgbm90IGNsZWFyIGlmCisgKiBsb29raW5nIHRoaXMgZmFyIGFoZWFkIGlzIHdvcnRo IGl0IC0gaXQncyBhIGxvdCBvZiB3b3JrIC8gc3luY2hyb25vdXMKKyAqIEkvTywgYW5kIHRoZSBx dWVyeSBtYXkgdGVybWluYXRlIGJlZm9yZSByZWFjaGluZyB0aG9zZSBUSURzIChlLmcuIGR1ZSB0 bworICogYSBMSU1JVCBjbGF1c2UpLgorICoKKyAqIEN1cnJlbnRseSwgdGhlcmUncyBubyB3YXkg dG8gInBhdXNlIiBhIHJlYWQgc3RyZWFtIC0gc3RvcCBsb29raW5nIGFoZWFkCisgKiBmb3IgYSB3 aGlsZSwgYnV0IHRoZW4gcmVzdW1lIHRoZSB3b3JrIHdoZW4gYSBiYXRjaCBnZXRzIGZyZWVkLiBU byBzaW11bGF0ZQorICogdGhpcywgdGhlIHJlYWQgc3RyZWFtIGlzIHRlcm1pbmF0ZWQgKGFzIGlm IHRoZXJlIHdlcmUgbm8gbW9yZSBkYXRhKSwgYW5kCisgKiB0aGVuIHJlc2V0IGFmdGVyIGRyYWlu aW5nIGFsbCB0aGUgcXVldWVkIGJsb2NrcyBpbiBvcmRlciB0byByZXN1bWUgd29yay4KKyAqIFRo aXMgd29ya3MsIGJ1dCBpdCAic3RhbGxzIiB0aGUgSS9PIHF1ZXVlLiBJZiBpdCBoYXBwZW5zIHZl cnkgb2Z0ZW4sIGl0CisgKiBjYW4gYmUgYSBzZXJpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2su CisKKyAqIFhYWCBNYXliZSA2NCBpcyB0b28gaGlnaD8gSXQgYWxzbyBkZWZpbmVzIHRoZSBtYXhp bXVtIGFtb3VudCBvZiBvdmVyaGVhZAorICogYWxsb3dlZC4gSW4gdGhlIHdvcnN0IGNhc2UsIHJl YWRpbmcgYSBzaW5nbGUgcm93IG1pZ2h0IHRyaWdnZXIgcmVhZGluZyB0aGlzCisgKiBtYW55IGxl YWYgcGFnZXMgKGUuZy4gd2l0aCBJT1MsIGlmIG1vc3QgcGFnZXMgYXJlIGFsbC12aXNpYmxlKS4g V2hpY2ggbWlnaHQKKyAqIGJlIGFuIGlzc3VlIHdpdGggTElNSVQgcXVlcmllcywgd2hlbiB3ZSBh Y3R1YWxseSB3b24ndCBnZXQgdGhhdCBmYXIuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUwk2NAorCisvKgorICogVGhyZXNob2xkcyBjb250cm9sbGluZyB3aGVuIHdlIGNhbmNl bCB1c2Ugb2YgYSByZWFkIHN0cmVhbSB0byBkbworICogcHJlZmV0Y2hpbmcKKyAqLworI2RlZmlu ZSBJTkRFWF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFUQ0hFUwkyMAorI2RlZmluZSBJTkRFWF9TQ0FO X01JTl9UVVBMRV9ESVNUQU5DRQkJNworCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfQ09VTlQo c2NhbikgXAorCSgoc2NhbiktPmJhdGNoU3RhdGUtPm5leHRCYXRjaCAtIChzY2FuKS0+YmF0Y2hT dGF0ZS0+aGVhZEJhdGNoKQorCisvKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhl IHJlcXVlc3RlZCBpbmRleD8gKi8KKy8qIFhYWCBzaG91bGRuJ3QgdGhpcyBhbHNvIGNvbXBhcmUg aGVhZEJhdGNoPyBtYXliZSB0aGUgYmF0Y2ggd2FzIGZyZWVkPyAqLworI2RlZmluZSBJTkRFWF9T Q0FOX0JBVENIX0xPQURFRChzY2FuLCBpZHgpIFwKKwkoKGlkeCkgPCAoc2NhbiktPmJhdGNoU3Rh dGUtPm5leHRCYXRjaCkKKworLyogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9m IGJhdGNoZXM/ICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2FuKSBcCisJKElO REVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPT0gc2Nhbi0+YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hl cykKKworLyogUmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguICovCisvKiBYWFgg U2hvdWxkIHRoaXMgaGF2ZSBhbiBhc3NlcnQgdG8gZW5mb3JjZSB0aGUgYmF0Y2ggaXMgbG9hZGVk PyBNYXliZSB0aGUKKyAqIGluZGV4IGlzIHRvbyBmYXIgYmFjaywgYnV0IHRoZXJlIGhhcHBlbnMg dG8gYmUgYSBiYXRjaCBpbiB0aGUgcmlnaHQgc2xvdD8KKyAqIENvdWxkIGVhc2lseSBoYXBwZW4g aWYgd2UgaGF2ZSB0byBrZWVwIG1hbnkgYmF0Y2hlcyBhcm91bmQuCisgKi8KKyNkZWZpbmUgSU5E RVhfU0NBTl9CQVRDSChzY2FuLCBpZHgpCVwKKwkJKChzY2FuKS0+YmF0Y2hTdGF0ZS0+YmF0Y2hl c1soaWR4KSAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNdKQorCisvKiBJcyB0aGUgcG9zaXRpb24g aW52YWxpZC91bmRlZmluZWQ/ICovCisjZGVmaW5lIElOREVYX1NDQU5fUE9TX0lOVkFMSUQocG9z KSBcCisJCSgoKHBvcyktPmJhdGNoID09IC0xKSAmJiAoKHBvcyktPmluZGV4ID09IC0xKSkKKwor I2lmZGVmIElOREVYQU1fREVCVUcKKyNkZWZpbmUgREVCVUdfTE9HKC4uLikgZWxvZyhBbVJlZ3Vs YXJCYWNrZW5kUHJvY2VzcygpID8gTk9USUNFIDogREVCVUcyLCBfX1ZBX0FSR1NfXykKKyNlbHNl CisjZGVmaW5lIERFQlVHX0xPRyguLi4pCisjZW5kaWYKKworLyogZGVidWc6IHByaW50IGluZm8g YWJvdXQgY3VycmVudCBiYXRjaGVzICovCitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfcHJpbnQo Y29uc3QgY2hhciAqbGFiZWwsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBJTkRFWEFN X0RFQlVHCisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hlcyA9IHNjYW4tPmJhdGNoU3RhdGU7 CisKKwlpZiAoIXNjYW4tPmJhdGNoU3RhdGUpCisJCXJldHVybjsKKworCWlmICghQW1SZWd1bGFy QmFja2VuZFByb2Nlc3MoKSkKKwkJcmV0dXJuOworCWlmIChJc0NhdGFsb2dSZWxhdGlvbihzY2Fu LT5pbmRleFJlbGF0aW9uKSkKKwkJcmV0dXJuOworCisJREVCVUdfTE9HKCIlczogYmF0Y2hlcyBo ZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIG1heEJhdGNoZXMgJWQiLAorCQkJICBsYWJlbCwKKwkJ CSAgYmF0Y2hlcy0+aGVhZEJhdGNoLCBiYXRjaGVzLT5uZXh0QmF0Y2gsIGJhdGNoZXMtPm1heEJh dGNoZXMpOworCisJZm9yIChpbnQgaSA9IGJhdGNoZXMtPmhlYWRCYXRjaDsgaSA8IGJhdGNoZXMt Pm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2hEYXRhICpiYXRjaCA9IElOREVY X1NDQU5fQkFUQ0goc2NhbiwgaSk7CisJCUJUU2NhblBvcwlwb3MgPSAoQlRTY2FuUG9zKSBiYXRj aC0+cG9zOworCisJCURFQlVHX0xPRygiICAgIGJhdGNoICVkIGN1cnJQYWdlICV1ICVwIGZpcnN0 SXRlbSAlZCBsYXN0SXRlbSAlZCBraWxsZWQgJWQiLAorCQkJCSAgaSwgcG9zLT5jdXJyUGFnZSwg YmF0Y2gsIGJhdGNoLT5maXJzdEl0ZW0sIGJhdGNoLT5sYXN0SXRlbSwKKwkJCQkgIGJhdGNoLT5u dW1LaWxsZWQpOworCX0KKyNlbmRpZgorfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQkgICBpbmRleF8g aW50ZXJmYWNlIGZ1bmN0aW9ucwpAQCAtMjgzLDYgKzQyNCw5IEBAIGluZGV4X2JlZ2luc2NhbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKIAlz Y2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAorCWlmIChpbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaF9pbml0KHNjYW4pOworCiAJ LyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KIAlzY2FuLT54 c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24pOwogCkBA IC0zODAsNiArNTI0LDEyIEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNf aGVhcF9jb250aW51ZSA9IGZhbHNlOwogCisJLyoKKwkgKiBSZXNldCB0aGUgYmF0Y2hpbmcuIFRo aXMgbWFrZXMgaXQgbG9vayBsaWtlIHRoZXJlIGFyZSBubyBiYXRjaGVzLAorCSAqIGRpc2NhcmRz IHJlYWRzIGFscmVhZHkgc2NoZWR1bGVkIHdpdGhpbiB0aGUgcmVhZCBzdHJlYW0sIGV0Yy4KKwkg Ki8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0cnVlKTsKKwogCXNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3Jk ZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQsNiArNTQ0LDkgQEAgaW5kZXhfZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAgYmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiBy ZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWluZGV4X2JhdGNoX2VuZChzY2FuKTsKKwogCS8q IFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2Vz ICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00MjEsMTAgKzU3NCw0MiBAQCBp bmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIHZvaWQKIGluZGV4X21hcmtwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQogewotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtbWFya3Bvcyk7CisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJh dGNoU3RhdGU7CisJSW5kZXhTY2FuQmF0Y2hQb3MgKm1hcmtQb3MgPSAmYmF0Y2hTdGF0ZS0+bWFy a1BvczsKKwlJbmRleFNjYW5CYXRjaERhdGEgKm1hcmtCYXRjaCA9IGJhdGNoU3RhdGUtPm1hcmtC YXRjaDsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbW1hcmtwb3Moc2Nhbik7 CisJU0NBTl9DSEVDS1M7CisKKwkvKgorCSAqIEZJWE1FIHRoaXMgc2hvdWxkIHByb2JhYmx5IGNo ZWNrIHRoZXJlIGFjdHVhbGx5IGlzIGEgYmF0Y2ggc3RhdGUuIEZvcgorCSAqIG5vdyBpdCB3b3Jr cyB0aGUgb25seSBBTSB3aXRoIG1hcmsvcmVzdG9yZSBzdXBwb3J0IGlzIGJ0cmVlLCBhbmQgdGhh dAorCSAqIGhhcyBiYXRjaGluZy4gQnV0IHdlIHNob3VsZCBub3QgcmVseSBvbiB0aGF0LCByaWdo dD8KKwkgKi8KKworCS8qCisJICogRnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55 KSwgYnV0IG9ubHkgaWYgdGhlIGJhdGNoIGlzIG5vCisJICogbG9uZ2VyIHZhbGlkIChpbiB0aGUg Y3VycmVudCBoZWFkL25leHQgcmFuZ2UpLiBUaGlzIG1lYW5zIHRoYXQgaWYgd2UncmUKKwkgKiBt YXJraW5nIHRoZSBzYW1lIGJhdGNoIChkaWZmZXJlbnQgaXRlbSksIHdlIGRvbid0IHJlYWxseSBk byBhbnl0aGluZy4KKwkgKgorCSAqIFhYWCBTaG91bGQgaGF2ZSBzb21lIG1hY3JvIGZvciB0aGlz IGNoZWNrLCBJIGd1ZXNzLgorCSAqLworCWlmIChtYXJrQmF0Y2ggIT0gTlVMTCAmJiAobWFya1Bv cy0+YmF0Y2ggPCBiYXRjaFN0YXRlLT5oZWFkQmF0Y2ggfHwKKwkJCQkJCQkgIG1hcmtQb3MtPmJh dGNoID49IGJhdGNoU3RhdGUtPm5leHRCYXRjaCkpCisJeworCQliYXRjaFN0YXRlLT5tYXJrQmF0 Y2ggPSBOVUxMOworCQlpbmRleF9iYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJ LyoganVzdCBjb3B5IHRoZSByZWFkIHBvc2l0aW9uICh3aGljaCBoYXMgdG8gYmUgdmFsaWQpICov CisJYmF0Y2hTdGF0ZS0+bWFya1BvcyA9IGJhdGNoU3RhdGUtPnJlYWRQb3M7CisJYmF0Y2hTdGF0 ZS0+bWFya0JhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaFN0YXRlLT5tYXJrUG9z LmJhdGNoKTsKKworCS8qCisJICogRklYTUUgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJhdGNo IGRvZXMgbm90IGdldCBmcmVlZCBkdXJpbmcgdGhlCisJICogcmVndWxhciBhZHZhbmNlcy4KKwkg Ki8KKworCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCAmYmF0Y2hTdGF0ZS0+bWFya1Bv cyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0NSwxOSArNjMwLDYwIEBAIGluZGV4 X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogdm9pZAogaW5kZXhfcmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogeworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGU7CisJSW5k ZXhTY2FuQmF0Y2hQb3MgKm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICptYXJrQmF0Y2g7 CisKIAlBc3NlcnQoSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5f Q0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5f UFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQp OwogCi0JLyogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUg YWNjZXNzZXMgKi8KKwkvKgorCSAqIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5z KSBmcm9tIHRhYmxlIGFjY2Vzc2VzCisJICoKKwkgKiBYWFg6IEN1cnJlbnRseSwgdGhlIGRpc3Rh bmNlIGlzIGFsd2F5cyByZW1lbWJlcmVkIGFjcm9zcyBhbnkKKwkgKiByZWFkX3N0cmVhbV9yZXNl dCBjYWxscyAodG8gd29yayBhcm91bmQgdGhlIHNjYW4tPmJhdGNoU3RhdGUtPnJlc2V0CisJICog YmVoYXZpb3Igb2YgcmVzZXR0aW5nIHRoZSBzdHJlYW0gdG8gZGVhbCB3aXRoIHJ1bm5pbmcgb3V0 IG9mIGJhdGNoZXMpLgorCSAqIFdlIHByb2JhYmx5IF9zaG91bGRfIGJlIGZvcmdldHRpbmcgdGhl IGRpc3RhbmNlIHdoZW4gd2UgcmVzZXQgdGhlCisJICogc3RyZWFtIGhlcmUgKHRocm91Z2ggb3Vy IHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0IGNhbGwpLCB0aG91Z2guCisJICovCiAJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZl dGNoKTsKIAogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAq LwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCS8qCisJICogRklYTUUgdGhpcyBzaG91 bGQgcHJvYmFibHkgY2hlY2sgdGhlcmUgYWN0dWFsbHkgaXMgYSBiYXRjaCBzdGF0ZS4gRm9yCisJ ICogbm93IGl0IHdvcmtzIHRoZSBvbmx5IEFNIHdpdGggbWFyay9yZXN0b3JlIHN1cHBvcnQgaXMg YnRyZWUsIGFuZCB0aGF0CisJICogaGFzIGJhdGNoaW5nLiBCdXQgd2Ugc2hvdWxkIG5vdCByZWx5 IG9uIHRoYXQsIHJpZ2h0PworCSAqLworCisJYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7 CisJbWFya1BvcyA9ICZiYXRjaFN0YXRlLT5tYXJrUG9zOworCW1hcmtCYXRjaCA9IHNjYW4tPmJh dGNoU3RhdGUtPm1hcmtCYXRjaDsKKworCS8qCisJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBp bmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKwkgKiB0aGF0IGlu ZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoK KwkgKiBSZXNldCB0aGUgYmF0Y2hpbmcgc3RhdGUsIGV4Y2VwdCBmb3IgdGhlIG1hcmtlZCBiYXRj aCwgYW5kIG1ha2UgaXQgbG9vaworCSAqIGxpa2Ugd2UgaGF2ZSBhIHNpbmdsZSBiYXRjaCAtLSB0 aGUgbWFya2VkIG9uZS4KKwkgKi8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCBmYWxzZSk7CisK KwliYXRjaFN0YXRlLT5tYXJrUG9zID0gKm1hcmtQb3M7CisJYmF0Y2hTdGF0ZS0+cmVhZFBvcyA9 ICptYXJrUG9zOworCWJhdGNoU3RhdGUtPmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWJh dGNoU3RhdGUtPm5leHRCYXRjaCA9IChiYXRjaFN0YXRlLT5oZWFkQmF0Y2ggKyAxKTsKKworCUlO REVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hTdGF0ZS0+bWFya1Bvcy5iYXRjaCkgPSBtYXJrQmF0 Y2g7CisJYmF0Y2hTdGF0ZS0+bWFya0JhdGNoID0gbWFya0JhdGNoOwkvKiBhbHNvIHJlbWVtYmVy IHRoaXMgKi8KIH0KIAogLyoKQEAgLTU3OSw2ICs4MDUsMTcgQEAgaW5kZXhfcGFyYWxsZWxyZXNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxl X2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKKwkvKgorCSAqIFJlc2V0 IHRoZSBiYXRjaGluZy4gVGhpcyBtYWtlcyBpdCBsb29rIGxpa2UgdGhlcmUgYXJlIG5vIGJhdGNo ZXMsCisJICogZGlzY2FyZHMgcmVhZHMgYWxyZWFkeSBzY2hlZHVsZWQgdG8gdGhlIHJlYWQgc3Ry ZWFtLCBldGMuCisJICoKKwkgKiBYWFggV2UgZG8gdGhpcyBiZWZvcmUgY2FsbGluZyBhbXBhcmFs bGVscmVzY2FuLCBzbyB0aGF0IGl0IGNvdWxkCisJICogcmVpbml0aWFsaXplIGV2ZXJ5dGhpbmcg KHRoaXMgcHJvYmFibHkgZG9lcyBub3QgbWF0dGVyIHZlcnkgbXVjaCwgbm93CisJICogdGhhdCB3 ZSd2ZSBtb3ZlZCBhbGwgdGhlIGJhdGNoaW5nIGxvZ2ljIHRvIGluZGV4YW0uYywgaXQgd2FzIG1v cmUKKwkgKiBpbXBvcnRhbnQgd2hlbiB0aGUgaW5kZXggQU0gd2FzIHJlc3BvbnNpYmxlIGZvciBt b3JlIG9mIGl0KS4KKwkgKi8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0cnVlKTsKKwogCS8q IGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlk ZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxs ZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFy YWxsZWxyZXNjYW4oc2Nhbik7CkBAIC02MTQsNiArODUxLDkgQEAgaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCXNjYW4tPnhzX3Nu YXBzaG90ID0gc25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKKwlp ZiAoaW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNo X2luaXQoc2Nhbik7CisKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0 YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhl YXByZWwpOwogCkBAIC02MzAsMTQgKzg3MCwyODYgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVs KFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogSXRlbVBvaW50ZXIKIGluZGV4 X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p CiB7Ci0JYm9vbAkJZm91bmQ7Ci0KIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVS RShhbWdldHR1cGxlKTsKIAogCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNo b3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFs aWQoUmVjZW50WG1pbikpOwogCisJLyoKKwkgKiBJbmRleCBBTXMgdGhhdCBzdXBwb3J0IHBsYWlu IGluZGV4IHNjYW5zIG11c3QgcHJvdmlkZSBleGFjdGx5IG9uZSBvZgorCSAqIGVpdGhlciB0aGUg YW1nZXRiYXRjaCBvciBhbWdldHR1cGxlIGNhbGxiYWNrcworCSAqLworCUFzc2VydCghKHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwgJiYKKwkJCSBzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKSk7CisKKwlpZiAo c2Nhbi0+YmF0Y2hTdGF0ZSAhPSBOVUxMKQorCQlyZXR1cm4gaW5kZXhfYmF0Y2hfZ2V0bmV4dF90 aWQoc2NhbiwgZGlyZWN0aW9uKTsKKwllbHNlCisJCXJldHVybiBpbmRleF9yZXRhaWxfZ2V0bmV4 dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWlu ZGV4X2dldG5leHRfYmF0Y2hfdGlkIC0gYW1iYXRjaCBpbmRleF9nZXRuZXh0X3RpZCBpbXBsZW1l bnRhdGlvbgorICoKKyAqIElmIHdlIGFkdmFuY2UgdG8gdGhlIG5leHQgYmF0Y2gsIHdlIHJlbGVh c2UgdGhlIHByZXZpb3VzIG9uZSAodW5sZXNzIGl0J3MKKyAqIHRyYWNrZWQgZm9yIG1hcmsvcmVz dG9yZSkuCisgKgorICogSWYgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMsIHdlIHJlbGVhc2Ug YWxsIGJhdGNoZXMgZXhjZXB0IHRoZSBjdXJyZW50CisgKiBvbmUgKHBlciByZWFkUG9zKSwgdG8g bWFrZSBpdCBsb29rIGl0J3MgdGhlIG9ubHkgYmF0Y2ggd2UgbG9hZGVkLgorICoKKyAqIFJldHVy bnMgdGhlIGZpcnN0L25leHQgVElELCBvciBOVUxMIGlmIG5vIG1vcmUgaXRlbXMuCisgKgorICog RklYTUUgVGhpcyBvbmx5IHNldHMgeHNfaGVhcHRpZCBhbmQgeHNfaXR1cCAoaWYgcmVxdWVzdGVk KS4gTm90IHN1cmUgaWYKKyAqIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIHdpdGggeHNfaGl0dXAu IFNob3VsZCB0aGlzIHNldCB4c19oaXR1cD8KKyAqCisgKiBYWFggTWF5YmUgaWYgd2UgYWR2YW5j ZSB0aGUgcG9zaXRpb24gdG8gdGhlIG5leHQgYmF0Y2gsIHdlIGNvdWxkIGtlZXAgdGhlCisgKiBi YXRjaCBmb3IgYSBiaXQgbW9yZSwgaW4gY2FzZSB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAo YXMgbG9uZyBhcyBpdAorICogZml0cyBpbnRvIG1heEJhdGNoZXMpPyBCdXQgbWF5YmUgdGhhdCdz IHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgZm9yIHRvbworICogbGl0dGxlIGdhaW4sIHdlJ2QgbmVl ZCB0byBiZSBjYXJlZnVsIGFib3V0IHJlbGVhc2luZyB0aGUgYmF0Y2hlcyBsYXppbHkuCisgKiAt LS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5kZXhfYmF0Y2hfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sK KwlJbmRleFNjYW5CYXRjaFN0YXRlICpiYXRjaFN0YXRlID0gc2Nhbi0+YmF0Y2hTdGF0ZTsKKwlJ bmRleFNjYW5CYXRjaFBvcyAqcmVhZFBvczsKKworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0 YmF0Y2gpOworCisJLyogc2hvdWxkbid0IGdldCBoZXJlIHdpdGhvdXQgYmF0Y2hpbmcgKi8KKwlB c3NlcnRDaGVja0JhdGNoZXMoc2Nhbik7CisKKwkvKiBJbml0aWFsaXplIGRpcmVjdGlvbiBvbiBm aXJzdCBjYWxsICovCisJaWYgKGJhdGNoU3RhdGUtPmRpcmVjdGlvbiA9PSBOb01vdmVtZW50U2Nh bkRpcmVjdGlvbikKKwkJYmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCisJLyoK KwkgKiBIYW5kbGUgY2FuY2VsbGluZyB0aGUgdXNlIG9mIHRoZSByZWFkIHN0cmVhbSBmb3IgcHJl ZmV0Y2hpbmcKKwkgKi8KKwllbHNlIGlmICh1bmxpa2VseShiYXRjaFN0YXRlLT5kaXNhYmxlZCAm JiBzY2FuLT54c19oZWFwZmV0Y2gtPnJzKSkKKwl7CisJCWluZGV4X2JhdGNoX3Bvc19yZXNldChz Y2FuLCAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zKTsKKworCQlyZWFkX3N0cmVhbV9yZXNldChzY2Fu LT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9IE5VTEw7CisJ fQorCisJLyoKKwkgKiBIYW5kbGUgY2hhbmdlIG9mIHNjYW4gZGlyZWN0aW9uIChyZXNldCBzdHJl YW0sIC4uLikuCisJICoKKwkgKiBSZWxlYXNlIGZ1dHVyZSBiYXRjaGVzIHByb3Blcmx5LCB0byBt YWtlIGl0IGxvb2sgbGlrZSB0aGUgY3VycmVudCBiYXRjaAorCSAqIGlzIHRoZSBvbmx5IG9uZSB3 ZSBsb2FkZWQuIEFsc28gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgYXMgaWYgd2UgYXJlCisJ ICoganVzdCBzdGFydGluZyB0aGUgc2Nhbi4KKwkgKi8KKwllbHNlIGlmICh1bmxpa2VseShiYXRj aFN0YXRlLT5kaXJlY3Rpb24gIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qIHJlbGVhc2UgImZ1dHVy ZSIgYmF0Y2hlcyBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uICovCisJCXdoaWxlIChiYXRjaFN0YXRl LT5uZXh0QmF0Y2ggPiBiYXRjaFN0YXRlLT5oZWFkQmF0Y2ggKyAxKQorCQl7CisJCQlJbmRleFNj YW5CYXRjaCBmYmF0Y2g7CisKKwkJCWJhdGNoU3RhdGUtPm5leHRCYXRjaC0tOworCQkJZmJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpOworCQkJaW5k ZXhfYmF0Y2hfZnJlZShzY2FuLCBmYmF0Y2gpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIg dGhlIG5ldyBkaXJlY3Rpb24sIGFuZCBtYWtlIHN1cmUgdGhlIHNjYW4gaXMgbm90IG1hcmtlZCBh cworCQkgKiAiZmluaXNoZWQiICh3ZSBtaWdodCBoYXZlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCBi YXRjaCwgYnV0IG5vdyB3ZQorCQkgKiBuZWVkIHRvIHN0YXJ0IG92ZXIpLiBEbyB0aGlzIGJlZm9y ZSByZXNldHRpbmcgdGhlIHN0cmVhbSAtIGl0CisJCSAqIHNob3VsZCBub3QgaW52b2tlIHRoZSBj YWxsYmFjayB1bnRpbCB0aGUgZmlyc3QgcmVhZCwgYnV0IGl0IG1heQorCQkgKiBzZWVtIGEgYml0 IGNvbmZ1c2luZyBvdGhlcndpc2UuCisJCSAqLworCQliYXRjaFN0YXRlLT5kaXJlY3Rpb24gPSBk aXJlY3Rpb247CisJCWJhdGNoU3RhdGUtPmZpbmlzaGVkID0gZmFsc2U7CisJCWJhdGNoU3RhdGUt PmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJCWluZGV4X2Jh dGNoX3Bvc19yZXNldChzY2FuLCAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zKTsKKwkJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaC0+cnMpCisJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0 Y2gtPnJzKTsKKwl9CisKKwkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24sIGZvciBj b252ZW5pZW5jZSAqLworCXJlYWRQb3MgPSAmYmF0Y2hTdGF0ZS0+cmVhZFBvczsKKworCURFQlVH X0xPRygiaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQgcmVhZFBvcyAlZCAlZCBkaXJlY3Rpb24gJWQi LAorCQkJICByZWFkUG9zLT5iYXRjaCwgcmVhZFBvcy0+aW5kZXgsIGRpcmVjdGlvbik7CisKKwkv KgorCSAqIFRyeSBhZHZhbmNpbmcgdGhlIGJhdGNoIHBvc2l0aW9uLiBJZiB0aGF0IGRvZXNuJ3Qg c3VjY2VlZCwgaXQgbWVhbnMgd2UKKwkgKiBkb24ndCBoYXZlIG1vcmUgaXRlbXMgaW4gdGhlIGN1 cnJlbnQgYmF0Y2gsIGFuZCB0aGVyZSdzIG5vIGZ1dHVyZSBiYXRjaAorCSAqIGxvYWRlZC4gU28g dHJ5IGxvYWRpbmcgYW5vdGhlciBiYXRjaCwgYW5kIG1heWJlIHJldHJ5LgorCSAqCisJICogRklY TUUgVGhpcyBsb29wIHNob3VsZG4ndCBoYXBwZW4gbW9yZSB0aGFuIHR3aWNlLiBNYXliZSB3ZSBz aG91bGQgaGF2ZQorCSAqIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IGluZmluaXRlIGxvb3BzPyBU byBkZXRlY3QgY2FzZXMgd2hlbiB0aGUKKwkgKiBhZHZhbmNlL2dldG5leHQgZnVuY3Rpb25zIGdl dCB0byBkaXNhZ3JlZT8KKwkgKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJCS8qCisJCSAqIElmIHdl IG1hbmFnZSB0byBhZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW1zLCByZXR1cm4gaXQgYW5kIHdlJ3Jl CisJCSAqIGRvbmUuIE90aGVyd2lzZSB0cnkgbG9hZGluZyBhbm90aGVyIGJhdGNoLgorCQkgKi8K KwkJaWYgKGluZGV4X2JhdGNoX3Bvc19hZHZhbmNlKHNjYW4sIHJlYWRQb3MsIGRpcmVjdGlvbikp CisJCXsKKwkJCUluZGV4U2NhbkJhdGNoRGF0YSAqcmVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRD SChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwkJCS8qIHNldCB0aGUgVElEIC8gaXR1cCBmb3Ig dGhlIHNjYW4gKi8KKwkJCXNjYW4tPnhzX2hlYXB0aWQgPSByZWFkQmF0Y2gtPml0ZW1zW3JlYWRQ b3MtPmluZGV4XS5oZWFwVGlkOworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQlzY2Fu LT54c19pdHVwID0KKwkJCQkJKEluZGV4VHVwbGUpIChyZWFkQmF0Y2gtPmN1cnJUdXBsZXMgKwor CQkJCQkJCQkgIHJlYWRCYXRjaC0+aXRlbXNbcmVhZFBvcy0+aW5kZXhdLnR1cGxlT2Zmc2V0KTsK KworCQkJREVCVUdfTE9HKCJyZWFkQmF0Y2ggJXAgZmlyc3RJdGVtICVkIGxhc3RJdGVtICVkIHJl YWRQb3MgJWQvJWQgVElEICgldSwldSkiLAorCQkJCQkgIHJlYWRCYXRjaCwgcmVhZEJhdGNoLT5m aXJzdEl0ZW0sIHJlYWRCYXRjaC0+bGFzdEl0ZW0sCisJCQkJCSAgcmVhZFBvcy0+YmF0Y2gsIHJl YWRQb3MtPmluZGV4LAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhz X2hlYXB0aWQpLAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZzY2FuLT54c19o ZWFwdGlkKSk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBiYXRj aCwgcmVsZWFzZSB0aGUgYmF0Y2ggd2Ugbm8KKwkJCSAqIGxvbmdlciBuZWVkLiBUaGUgcG9zaXRp b25zIGlzIHRoZSAicmVhZCIgcG9zaXRpb24sIGFuZCB3ZSBjYW4KKwkJCSAqIGNvbXBhcmUgaXQg dG8gaGVhZEJhdGNoLgorCQkJICovCisJCQlpZiAodW5saWtlbHkocmVhZFBvcy0+YmF0Y2ggIT0g YmF0Y2hTdGF0ZS0+aGVhZEJhdGNoKSkKKwkJCXsKKwkJCQlJbmRleFNjYW5CYXRjaERhdGEgKmhl YWRCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkgYmF0Y2hT dGF0ZS0+aGVhZEJhdGNoKTsKKworCQkJCS8qCisJCQkJICogWFhYIFdoZW4gYWR2YW5jaW5nIHJl YWRQb3MsIHRoZSBzdHJlYW1Qb3MgbWF5IGdldCBiZWhpbmQgYXMKKwkJCQkgKiB3ZSdyZSBvbmx5 IGFkdmFuY2luZyBpdCB3aGVuIGFjdHVhbGx5IHJlcXVlc3RpbmcgaGVhcAorCQkJCSAqIGJsb2Nr cy4gQnV0IHdlIG1heSBub3QgZG8gdGhhdCBvZnRlbiBlbm91Z2ggLSBlLmcuIElPUyBtYXkKKwkJ CQkgKiBub3QgbmVlZCB0byBhY2Nlc3MgYWxsLXZpc2libGUgaGVhcCBibG9ja3MsIHNvIHRoZQor CQkJCSAqIHJlYWRfbmV4dCBjYWxsYmFjayBkb2VzIG5vdCBnZXQgaW52b2tlZCBmb3IgYSBsb25n IHRpbWUuCisJCQkJICogSXQncyBwb3NzaWJsZSB0aGUgc3RyZWFtIGdldHMgc28gbXVjdSBiZWhp bmQgdGhlIHBvc2l0aW9uCisJCQkJICogZ2V0cyBpbnZhbGlkLCBhcyB3ZSBhbHJlYWR5IHJlbW92 ZWQgdGhlIGJhdGNoLiBCdXQgdGhhdAorCQkJCSAqIG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGhl YXAgYmxvY2tzIHVudGlsIHRoZSBjdXJyZW50IHJlYWQKKwkJCQkgKiBwb3NpdGlvbiAtIGlmIHdl IGRpZCwgd2Ugd291bGQgbm90IGJlIGluIHRoaXMgc2l0dWF0aW9uIChvcgorCQkJCSAqIGl0J3Mg YSBzaWduIG9mIGEgYnVnLCBhcyB0aG9zZSB0d28gcGxhY2VzIGFyZSBleHBlY3RlZCB0bworCQkJ CSAqIGJlIGluIHN5bmMpLiBTbyBpZiB0aGUgc3RyZWFtUG9zIHN0aWxsIHBvaW50cyBhdCB0aGUg YmF0Y2gKKwkJCQkgKiB3ZSdyZSBhYm91dCB0byBmcmVlLCBqdXN0IHJlc2V0IHRoZSBwb3NpdGlv biAtIHdlJ2xsIHNldCBpdAorCQkJCSAqIHRvIHJlYWRQb3MgaW4gdGhlIHJlYWRfbmV4dCBjYWxs YmFjayBsYXRlci4KKwkJCQkgKgorCQkJCSAqIFhYWCBUaGlzIGNhbiBoYXBwZW4gYWZ0ZXIgdGhl IHF1ZXVlIGdldHMgZnVsbCwgd2UgInBhdXNlIgorCQkJCSAqIHRoZSBzdHJlYW0sIGFuZCB0aGVu IHJlc2V0IGl0IHRvIGNvbnRpbnVlLiBCdXQgSSB0aGluayB0aGF0CisJCQkJICoganVzdCBpbmNy ZWFzZXMgdGhlIHByb2JhYmlsaXR5IG9mIGhpdHRpbmcgdGhlIGlzc3VlLCBpdCdzCisJCQkJICog anVzdCBtb3JlIGNoYW5jZSB0byB0byBub3QgYWR2YW5jZSB0aGUgc3RyZWFtUG9zLCB3aGljaAor CQkJCSAqIGRlcGVuZHMgb24gd2hlbiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGZpcnN0IGhlYXAgYmxv Y2sgYWZ0ZXIKKwkJCQkgKiBjYWxsaW5nIHJlYWRfc3RyZWFtX3Jlc2V0KCkuCisJCQkJICoKKwkJ CQkgKiBGSVhNRSBTaW1wbGlmeS9jbGFyaWZ5L3Nob3J0ZW4gdGhpcyBjb21tZW50LiBDYW4gaXQK KwkJCQkgKiBhY3R1YWxseSBoYXBwZW4sIGlmIHdlIG5ldmVyIHB1bGwgZnJvbSB0aGUgc3RyZWFt IGluIElPUz8KKwkJCQkgKiBXZSBwcm9iYWJseSBkb24ndCBsb29rIGFoZWFkIGZvciB0aGUgZmly c3QgY2FsbC4KKwkJCQkgKi8KKwkJCQlpZiAodW5saWtlbHkoYmF0Y2hTdGF0ZS0+c3RyZWFtUG9z LmJhdGNoID09IGJhdGNoU3RhdGUtPmhlYWRCYXRjaCkpCisJCQkJeworCQkJCQlERUJVR19MT0co ImluZGV4X2JhdGNoX3Bvc19yZXNldCBjYWxsZWQgZWFybHkgKHN0cmVhbVBvcy5iYXRjaCA9PSBo ZWFkQmF0Y2gpIik7CisJCQkJCWluZGV4X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmYmF0Y2hTdGF0 ZS0+c3RyZWFtUG9zKTsKKwkJCQl9CisKKwkJCQlERUJVR19MT0coImluZGV4X2JhdGNoX2dldG5l eHRfdGlkIGZyZWUgaGVhZEJhdGNoICVwIGhlYWRCYXRjaCAlZCBuZXh0QmF0Y2ggJWQiLAorCQkJ CQkJICBoZWFkQmF0Y2gsIGJhdGNoU3RhdGUtPmhlYWRCYXRjaCwgYmF0Y2hTdGF0ZS0+bmV4dEJh dGNoKTsKKworCQkJCS8qIEZyZWUgdGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3MgbWFy a0JhdGNoKSAqLworCQkJCWluZGV4X2JhdGNoX2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsKKworCQkJ CS8qCisJCQkJICogSW4gYW55IGNhc2UsIHJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmVndWxh ciBxdWV1ZSwgZXZlbgorCQkJCSAqIGlmIHdlIGtlcHQgaXQgZm9yIG1hcmsvcmVzdG9yZS4KKwkJ CQkgKi8KKwkJCQliYXRjaFN0YXRlLT5oZWFkQmF0Y2grKzsKKworCQkJCURFQlVHX0xPRygiaW5k ZXhfYmF0Y2hfZ2V0bmV4dF90aWQgYmF0Y2ggZnJlZWQgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAl ZCIsCisJCQkJCQkgIGJhdGNoU3RhdGUtPmhlYWRCYXRjaCwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNo KTsKKworCQkJCWluZGV4X2JhdGNoX3ByaW50KCJpbmRleF9iYXRjaF9nZXRuZXh0X3RpZCAvIGZy ZWUgb2xkIGJhdGNoIiwgc2Nhbik7CisKKwkJCQkvKiB3ZSBjYW4ndCBza2lwIGFueSBiYXRjaGVz ICovCisJCQkJQXNzZXJ0KGJhdGNoU3RhdGUtPmhlYWRCYXRjaCA9PSByZWFkUG9zLT5iYXRjaCk7 CisJCQl9CisKKwkJCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlv biwgMSk7CisJCQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CisJCX0KKworCQkvKgorCQkgKiBX ZSBmYWlsZWQgdG8gYWR2YW5jZSwgaS5lLiB3ZSByYW4gb3V0IG9mIGN1cnJlbnRseSBsb2FkZWQg YmF0Y2hlcy4KKwkJICogU28gaWYgd2UgZmlsbGVkIHRoZSBxdWV1ZSwgdGhpcyBpcyBhIGdvb2Qg dGltZSB0byByZXNldCB0aGUgc3RyZWFtCisJCSAqIChiZWZvcmUgd2UgdHJ5IGxvYWRpbmcgdGhl IG5leHQgYmF0Y2gpLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGJhdGNoU3RhdGUtPnJlc2V0KSkK KwkJeworCQkJREVCVUdfTE9HKCJyZXNldHRpbmcgcmVhZCBzdHJlYW0gcmVhZFBvcyAlZCwlZCIs CisJCQkJCSAgcmVhZFBvcy0+YmF0Y2gsIHJlYWRQb3MtPmluZGV4KTsKKworCQkJYmF0Y2hTdGF0 ZS0+cmVzZXQgPSBmYWxzZTsKKwkJCWJhdGNoU3RhdGUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0g SW52YWxpZEJsb2NrTnVtYmVyOworCisJCQkvKgorCQkJICogTmVlZCB0byByZXNldCB0aGUgc3Ry ZWFtIHBvc2l0aW9uLCBpdCBtaWdodCBiZSB0b28gZmFyIGJlaGluZC4KKwkJCSAqIFVsdGltYXRl bHkgd2Ugd2FudCB0byBzZXQgaXQgdG8gcmVhZFBvcywgYnV0IHdlIGNhbid0IGRvIHRoYXQKKwkJ CSAqIHlldCAtIHJlYWRQb3Mgc3RpbGwgcG9pbnQgc2F0IHRoZSBvbGQgYmF0Y2gsIHNvIGp1c3Qg cmVzZXQgaXQKKwkJCSAqIGFuZCB3ZSdsbCBpbml0IGl0IHRvIHJlYWRQb3MgbGF0ZXIgaW4gdGhl IGNhbGxiYWNrLgorCQkJICovCisJCQlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJmJhdGNo U3RhdGUtPnN0cmVhbVBvcyk7CisKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQkJ CXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQl9CisKKwkJLyoK KwkJICogRmFpbGVkIHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9zaXRpb24sIHNvIHRyeSByZWFkaW5n IHRoZSBuZXh0IGJhdGNoLgorCQkgKiBJZiB0aGlzIGZhaWxzLCB3ZSdyZSBkb25lIC0gdGhlcmUn cyBub3RoaW5nIG1vcmUgdG8gbG9hZC4KKwkJICoKKwkJICogTW9zdCBvZiB0aGUgYmF0Y2hlcyBz aG91bGQgYmUgbG9hZGVkIGZyb20gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIsCisJCSAqIGJ1dCB3 ZSBuZWVkIHRvIGNhbGwgaW5kZXhfYmF0Y2hfZ2V0bmV4dCBoZXJlIHRvbywgZm9yIHR3byByZWFz b25zLgorCQkgKiBGaXJzdCwgdGhlIHJlYWRfc3RyZWFtIG9ubHkgZ2V0cyB3b3JraW5nIGFmdGVy IHdlIHRyeSBmZXRjaGluZyB0aGUKKwkJICogZmlyc3QgaGVhcCB0dXBsZSwgc28gd2UgbmVlZCB0 byBsb2FkIHRoZSBpbml0aWFsIGJhdGNoICh0aGUgaGVhZCkuCisJCSAqIFNlY29uZCwgd2hpbGUg bW9zdCBiYXRjaGVzIHdpbGwgYmUgcHJlbG9hZGVkIGJ5IHRoZSBzdHJlYW0gdGhhbmtzCisJCSAq IHRvIHByZWZldGNoaW5nLCBpdCdzIHBvc3NpYmxlIHRvIHNldCBlZmZlY3RpdmVfaW9fY29uY3Vy cmVuY3k9MCwKKwkJICogYW5kIGluIHRoYXQgY2FzZSBhbGwgdGhlIGJhdGNoZXMgZ2V0IGxvYWRl ZCBmcm9tIGhlcmUuCisJCSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2dldG5leHQoc2NhbiwgZGly ZWN0aW9uKSkKKwkJCWJyZWFrOworCisJCURFQlVHX0xPRygibG9hZGVkIG5leHQgYmF0Y2gsIHJl dHJ5IHRvIGFkdmFuY2UgcG9zaXRpb24iKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJl LCB3ZSBmYWlsZWQgdG8gYWR2YW5jZSB0aGUgcG9zaXRpb24gYW5kIHRoZXJlIGFyZSBubyBtb3Jl CisJICogYmF0Y2hlcywgc28gd2UncmUgZG9uZS4KKwkgKi8KKwlERUJVR19MT0coIm5vIG1vcmUg YmF0Y2hlcyB0byBwcm9jZXNzIik7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBwb3NpdGlvbiAtIHdl IG11c3Qgbm90IGtlZXAgdGhlIGxhc3QgdmFsaWQgcG9zaXRpb24sIGluIGNhc2UKKwkgKiB3ZSBj aGFuZ2UgZGlyZWN0aW9uIG9mIHRoZSBzY2FuIGFuZCBzdGFydCBzY2FubmluZyBhZ2Fpbi4gSWYg d2Uga2VwdAorCSAqIHRoZSBwb3NpdGlvbiwgd2UnZCBza2lwIHRoZSBmaXJzdCBpdGVtLgorCSAq CisJICogWFhYIFRoaXMgaXMgYSBiaXQgc3RyYW5nZS4gRG8gd2UgcmVhbGx5IG5lZWQgdG8gcmVz ZXQgdGhlIHBvc2l0aW9uCisJICogYWZ0ZXIgcmV0dXJuaW5nIHRoZSBsYXN0IGl0ZW0/IEkgd29u ZGVyIGlmIGl0IG1lYW5zIHRoZSBBUEkgaXMgbm90CisJICogcXVpdGUgcmlnaHQuCisJICovCisJ aW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sIHJlYWRQb3MpOworCisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9yZXRhaWxfZ2V0bmV4dF90aWQgLSBh bWdldHR1cGxlIGluZGV4X2dldG5leHRfdGlkIGltcGxlbWVudGF0aW9uCisgKgorICogUmV0dXJu cyB0aGUgZmlyc3QvbmV4dCBUSUQsIG9yIE5VTEwgaWYgbm8gbW9yZSBpdGVtcy4KKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitpbmRleF9yZXRhaWxfZ2V0bmV4 dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwli b29sCQlmb3VuZDsKKworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0dHVwbGUpOworCiAJLyoK IAkgKiBUaGUgQU0ncyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5kZXggZW50cnkg bWF0Y2hpbmcgdGhlIHNjYW4KIAkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElEIGludG8gc2Nhbi0+ eHNfaGVhcHRpZC4gIEl0IHNob3VsZCBhbHNvIHNldApAQCAtNzA0LDkgKzEyMTYsMTggQEAgaW5k ZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQog CSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRv IHRoaXMgd2hlbiBpbgogCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0 byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgogCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJ ICoKKwkgKiBYWFggRm9yIHNjYW5zIHVzaW5nIGJhdGNoaW5nLCByZWNvcmQgdGhlIGZsYWcgaW4g dGhlIGJhdGNoICh3ZSB3aWxsCisJICogcGFzcyBpdCB0byB0aGUgQU0gbGF0ZXIsIHdoZW4gZnJl ZWluZyBpdCkuIE90aGVyd2lzZSBqdXN0IHBhc3MgaXQgdG8KKwkgKiB0aGUgQU0gdXNpbmcgdGhl IGtpbGxfcHJpb3JfdHVwbGUgZmllbGQuCiAJICovCiAJaWYgKCFzY2FuLT54YWN0U3RhcnRlZElu UmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwl7CisJCWlm IChzY2FuLT5iYXRjaFN0YXRlID09IE5VTEwpCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0g YWxsX2RlYWQ7CisJCWVsc2UgaWYgKGFsbF9kZWFkKQorCQkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVt KHNjYW4pOworCX0KIAogCXJldHVybiBmb3VuZDsKIH0KQEAgLTEwODksMyArMTYxMCw3ODkgQEAg aW5kZXhfb3BjbGFzc19vcHRpb25zKFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0s IERhdHVtIGF0dG9wdGlvbnMsCiAKIAlyZXR1cm4gYnVpbGRfbG9jYWxfcmVsb3B0aW9ucygmcmVs b3B0cywgYXR0b3B0aW9ucywgdmFsaWRhdGUpOwogfQorCisvKgorICogQ2hlY2sgdGhhdCBhIHBv c2l0aW9uIChiYXRjaCxpdGVtKSBpcyB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJhdGNoZXMg d2UKKyAqIGhhdmUgY3VycmVudGx5IGxvYWRlZC4KKyAqCisgKiBYWFggVGhlICJtYXJrZWQiIGJh dGNoIGlzIGFuIGV4Y2VwdGlvbi4gVGhlIG1hcmtlZCBiYXRjaCBtYXkgZ2V0IG91dHNpZGUKKyAq IHRoZSByYW5nZSBvZiBjdXJyZW50IGJhdGNoZXMsIHNvIG1ha2Ugc3VyZSB0byBuZXZlciBjaGVj ayB0aGUgcG9zaXRpb24KKyAqIGZvciB0aGF0LgorICovCitzdGF0aWMgdm9pZAorQXNzZXJ0Q2hl Y2tCYXRjaFBvc1ZhbGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2hQb3MgKnBv cykKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJSW5kZXhTY2FuQmF0Y2hTdGF0ZSAq YmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHBvc2l0 aW9uIGlzIHZhbGlkIGZvciBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KKwlBc3NlcnQocG9z LT5iYXRjaCA+PSBiYXRjaFN0YXRlLT5oZWFkQmF0Y2gpOworCUFzc2VydChwb3MtPmJhdGNoIDwg YmF0Y2hTdGF0ZS0+bmV4dEJhdGNoKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hlY2sgYSBzaW5n bGUgYmF0Y2ggaXMgdmFsaWQuCisgKi8KK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisjaWZkZWYgVVNFX0FT U0VSVF9DSEVDS0lORworCS8qIHRoZXJlIG11c3QgYmUgdmFsaWQgcmFuZ2Ugb2YgaXRlbXMgKi8K KwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCUFzc2VydChi YXRjaC0+Zmlyc3RJdGVtID49IDApOworCisJLyogd2Ugc2hvdWxkIGhhdmUgaXRlbXMgKGJ1ZmZl ciBhbmQgcG9pbnRlcnMpICovCisJQXNzZXJ0KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsKKworCS8q CisJICogVGhlIG51bWJlciBvZiBraWxsZWQgaXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5kIHRoZXJl IG11c3QgYmUgYW4gYXJyYXkgb2YKKwkgKiBpbmRleGVzIGlmIHRoZXJlIGFyZSBpdGVtcy4KKwkg Ki8KKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRjaC0+bnVt S2lsbGVkID4gMCAmJiBiYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkpOworCisJLyogWFhYIGNh biB3ZSBjaGVjayBzb21lIG9mIHRoZSBvdGhlciBiYXRjaCBmaWVsZHM/ICovCisjZW5kaWYKK30K KworLyoKKyAqIENoZWNrIGludmFyaWFudHMgb24gY3VycmVudCBiYXRjaGVzCisgKgorICogTWFr ZXMgc3VyZSB0aGUgaW5kZXhlcyBhcmUgc2V0IGFzIGV4cGVjdGVkLCB0aGUgYnVmZmVyIHNpemUg aXMgd2l0aGluCisgKiBsaW1pdHMsIGFuZCBzbyBvbi4KKyAqLworc3RhdGljIHZvaWQKK0Fzc2Vy dENoZWNrQmF0Y2hlcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNoU3RhdGUgPSBzY2FuLT5iYXRjaFN0 YXRlOworCisJLyogd2Ugc2hvdWxkIGhhdmUgYmF0Y2hlcyBpbml0aWFsaXplZCAqLworCUFzc2Vy dChiYXRjaFN0YXRlICE9IE5VTEwpOworCisJLyogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvbyBtYW55 IGJhdGNoZXMuICovCisJQXNzZXJ0KGJhdGNoU3RhdGUtPm1heEJhdGNoZXMgPiAwICYmCisJCSAg IGJhdGNoU3RhdGUtPm1heEJhdGNoZXMgPD0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyk7CisKKwkv KgorCSAqIFRoZSBoZWFkL25leHQgaW5kZXhlcyBzaG91bGQgZGVmaW5lIGEgdmFsaWQgcmFuZ2Ug KGluIHRoZSBjeWNsaWMKKwkgKiBidWZmZXIsIGFuZCBzaG91bGQgbm90IG92ZXJmbG93IG1heEJh dGNoZXMuCisJICovCisJQXNzZXJ0KGJhdGNoU3RhdGUtPmhlYWRCYXRjaCA+PSAwICYmCisJCSAg IGJhdGNoU3RhdGUtPmhlYWRCYXRjaCA8PSBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpOworCUFzc2Vy dChiYXRjaFN0YXRlLT5uZXh0QmF0Y2ggLSBiYXRjaFN0YXRlLT5oZWFkQmF0Y2ggPD0KKwkJICAg YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyk7CisKKwkvKiBDaGVjayBhbGwgY3VycmVudCBiYXRjaGVz ICovCisJZm9yIChpbnQgaSA9IGJhdGNoU3RhdGUtPmhlYWRCYXRjaDsgaSA8IGJhdGNoU3RhdGUt Pm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBJTkRFWF9TQ0FO X0JBVENIKHNjYW4sIGkpOworCisJCUFzc2VydENoZWNrQmF0Y2goc2NhbiwgYmF0Y2gpOworCX0K KyNlbmRpZgorfQorCisvKgorICogaW5kZXhfYmF0Y2hfcG9zX2FkdmFuY2UKKyAqCQlBZHZhbmNl IHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBkZXBlbmRpbmcgb24gc2NhbiBkaXJlY3Rp b24uCisgKgorICogQWR2YW5jZSB0aGUgcG9zaXRpb24gdG8gdGhlIG5leHQgaXRlbSwgZWl0aGVy IGluIHRoZSBzYW1lIGJhdGNoIG9yIHRoZQorICogZm9sbG93aW5nIG9uZSAoaWYgYWxyZWFkeSBh dmFpbGFibGUpLgorICoKKyAqIFdlIGNhbiBhZHZhbmNlIG9ubHkgaWYgd2UgYWxyZWFkeSBoYXZl IHNvbWUgYmF0Y2hlcyBsb2FkZWQsIGFuZCB0aGVyZSdzCisgKiBlaXRoZXIgZW5vdWdoIGl0ZW1z IGluIHRoZSBjdXJyZW50IGJhdGNoLCBvciBzb21lIG1vcmUgaXRlbXMgaW4gdGhlCisgKiBzdWJz ZXF1ZW50IGJhdGNoZXMuCisgKgorICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWR2YW5jZSAocmln aHQgYWZ0ZXIgbG9hZGluZyB0aGUgaW5pdGlhbC9oZWFkIGJhdGNoKSwKKyAqIHBvc2l0aW9uIGlz IHN0aWxsIHVuZGVmaW5lZC4gT3RoZXJ3aXNlIHdlIGV4cGVjdCB0aGUgcG9zaXRpb24gdG8gYmUg dmFsaWQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiB3YXMgYWR2YW5jZWQs IGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gaXMgZ3VhcmFudGVlZCB0byBi ZSB2YWxpZCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBhZHZhbmNlLgorICogSWYgYW4gYWR2YW5j ZSBmYWlscyAoZmFsc2UgcmV0dXJuZWQpLCB0aGUgcG9zaXRpb24gY2FuIGJlIGludmFsaWQuCisg KgorICogWFhYIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gZW5mb3JjZSBzb21lICJp bnZhcmlhbnRzIiwgZS5nLgorICogdGhhdCB0aGUgcG9zaXRpb25zIGFyZSBhbHdheXMgdmFsaWQu IFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSB3aXRoCisgKiBpbnZhbGlkIHBvc2l0aW9uIChzbyBw cm9iYWJseSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXMgcGFydCBvZiBsb2FkaW5nIHRoZQorICog aW5pdGlhbC9oZWFkIGJhdGNoKSwgYW5kIHRoZW4gaW52YWxpZGF0ZWQgaWYgYWR2YW5jZSBmYWls cy4gQ291bGQgYmUgdHJpY2t5CisgKiBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbiwgdGhvdWdoLCBi ZWNhdXNlIGl0IGNhbiBnZXQgImxhZyIgZm9yIElPUyBldGMuCisgKi8KK3N0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBib29sCitpbmRleF9iYXRjaF9wb3NfYWR2YW5jZShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoUG9zICpwb3MsCisJCQkJCQlTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbikKK3sKKwlJbmRleFNjYW5CYXRjaERhdGEgKmJhdGNoOworCisJLyogbWFrZSBz dXJlIHdlIGhhdmUgYmF0Y2hpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbnNpc3RlbnQgKi8KKwlBc3Nl cnRDaGVja0JhdGNoZXMoc2Nhbik7CisKKwkvKiBzaG91bGQga25vdyBkaXJlY3Rpb24gYnkgbm93 ICovCisJQXNzZXJ0KGRpcmVjdGlvbiA9PSBzY2FuLT5iYXRjaFN0YXRlLT5kaXJlY3Rpb24pOwor CUFzc2VydChkaXJlY3Rpb24gIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyogV2Ug Y2FuJ3QgYWR2YW5jZSBpZiB0aGVyZSBhcmUgbm8gYmF0Y2hlcyBhdmFpbGFibGUuICovCisJaWYg KElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBJZiB0aGUgcG9zaXRpb24gaGFzIG5vdCBiZWVuIGFkdmFuY2VkIHlldCwgaXQgaGFz IHRvIGJlIHJpZ2h0IGFmdGVyIHdlCisJICogbG9hZGVkIHRoZSBpbml0aWFsIGJhdGNoIChtdXN0 IGJlIHRoZSBoZWFkIGJhdGNoKS4gSW4gdGhhdCBjYXNlIGp1c3QKKwkgKiBpbml0aWFsaXplIGl0 IHRvIHRoZSBiYXRjaCdzIGZpcnN0IGl0ZW0gKG9yIGl0cyBsYXN0IGl0ZW0sIHdoZW4KKwkgKiBz Y2FubmluZyBiYWNrd2FyZHMpLgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBqdXN0IGV4 cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgcG9zdGl0aW9uIGFmdGVyCisJICogbG9hZGluZyB0aGUg aW5pdGlhbCBiYXRjaCwgd2l0aG91dCBoYXZpbmcgdG8gZ28gdGhyb3VnaCB0aGUgYWR2YW5jZS4K KwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwb3MpKQorCXsKKwkJLyoKKwkJICog V2Ugc2hvdWxkIGhhdmUgbG9hZGVkIHRoZSBzY2FuJ3MgaW5pdGlhbCBiYXRjaCwgb3IgbWF5YmUg d2UgaGF2ZQorCQkgKiBjaGFuZ2VkIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW4gYWZ0ZXIgc2Nh bm5pbmcgYWxsIHRoZSB3YXkgdG8gdGhlCisJCSAqIGVuZCAoaW4gd2hpY2ggY2FzZSB0aGUgcG9z aXRpb24gaXMgaW52YWxpZCwgYW5kIHdlIG1ha2UgaXQgbG9vaworCQkgKiBsaWtlIHRoZXJlIGlz IGp1c3Qgb25lIGJhdGNoKS4gV2Ugc2hvdWxkIGhhdmUganVzdCBvbmUgYmF0Y2gsCisJCSAqIHRo b3VnaC4KKwkJICoKKwkJICogWFhYIEFjdHVhbGx5LCBjb3VsZCB0aGVyZSBiZSBtb3JlIGJhdGNo ZXM/IE1heWJlIHdlIHByZWZldGNoZWQgbW9yZQorCQkgKiBiYXRjaGVzIHJpZ2h0IGF3YXk/IEl0 IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN1YnN0YW50aWFsIGludmFyaWFudC4KKwkJICovCisJCUFz c2VydChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IDEpOworCisJCS8qCisJCSAqIEdl dCB0aGUgaW5pdGlhbCBiYXRjaCAod2hpY2ggbXVzdCBiZSB0aGUgaGVhZCksIGFuZCBpbml0aWFs aXplIHRoZQorCQkgKiBwb3NpdGlvbiB0byB0aGUgYXBwcm9wcmlhdGUgaXRlbSBmb3IgdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24KKwkJICovCisJCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChz Y2FuLCBzY2FuLT5iYXRjaFN0YXRlLT5oZWFkQmF0Y2gpOworCisJCXBvcy0+YmF0Y2ggPSBzY2Fu LT5iYXRjaFN0YXRlLT5oZWFkQmF0Y2g7CisKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo 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 cyBhcmUgc2tpcHBlZC4KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVk IGZyb20gaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQoKS4gV2UgZG9uJ3QKKyAqIGdldCBoZXJlIHVu dGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNhbGwsIHdoZW4gcHVsbGlu ZyB0aGUKKyAqIGZpcnN0IGhlYXAgdHVwbGUgZnJvbSB0aGUgc3RyZWFtLiBBZnRlciB0aGF0LCBt b3N0IGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZAorICogYnkgdGhpcyBjYWxsYmFjaywgZHJpdmVu IGJ5IHRoZSByZWFkX3N0cmVhbSBsb29rLWFoZWFkIGRpc3RhbmNlLiBIb3dldmVyLAorICogd2l0 aCBkaXNhYmxlZCBwcmVmZXRjaGluZyAodGhhdCBpcywgd2l0aCBlZmZlY3RpdmVfaW9fY29uY3Vy cmVuY3k9MCksIGFsbAorICogYmF0Y2hlcyB3aWxsIGJlIGxvYWRlZCBpbiBpbmRleF9iYXRjaF9n ZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdvdCBoZXJlIG9ubHkgZmFpcmx5 IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMKKyAqIGdvdCBza2lwcGVkIGlu IHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNlIGp1c3QgdXNlIHRoZSByZWFk CisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBwb2ludC4KKyAqCisgKiBYWFgg SXQgc2VlbXMgdGhlIHJlYWRQb3Mvc3RyZWFtUG9zIGNvbW1lbnRzIHNob3VsZCBiZSBwbGFjZWQg ZWxzZXdoZXJlLiBUaGUKKyAqIHJlYWRfc3RyZWFtIGNhbGxiYWNrIGRvZXMgbm90IHNlZW0gbGlr ZSB0aGUgcmlnaHQgcGxhY2UuCisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraW5kZXhfc2Nhbl9z dHJlYW1fcmVhZF9uZXh0KFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQl2b2lkICpjYWxsYmFj a19wcml2YXRlX2RhdGEsCisJCQkJCQkJdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4 U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJ SW5kZXhTY2FuQmF0Y2hTdGF0ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisJSW5k ZXhTY2FuQmF0Y2hQb3MgKnN0cmVhbVBvcyA9ICZiYXRjaFN0YXRlLT5zdHJlYW1Qb3M7CisJU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaFN0YXRlLT5kaXJlY3Rpb247CisKKwkvKiBCeSBu b3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nhbi4gKi8KKwlBc3NlcnQo ZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogVGhlIHJl YWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxpZC4KKwkgKgorCSAqIFdlIGluaXRp YWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIGhlYXAg dHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQgd2hlbiB3ZSByZWFjaCB0aGUgZW5k IG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0IGludm9rZSB0aGUgY2FsbGJhY2sg YWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0byB0aGUgcmVhZFBvcy4gV2UnbGwg dXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiBibG9ja3MgdG8gcGFzcyB0byB0 aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0byBpbml0aWFsaXplIGl0LgorCSAq LworCUFzc2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCAmYmF0Y2hTdGF0ZS0+cmVhZFBvcyk7 CisKKwkvKgorCSAqIFRyeSB0byBhZHZhbmNlIHRoZSBzdHJlYW1Qb3MgdG8gdGhlIG5leHQgaXRl bSwgYW5kIGlmIHRoYXQgZG9lc24ndAorCSAqIHN1Y2NlZWQgKGlmIHRoZXJlIGFyZSBubyBtb3Jl IGl0ZW1zIGluIGxvYWRlZCBiYXRjaGVzKSwgdHJ5IGxvYWRpbmcgdGhlCisJICogbmV4dCBvbmUu CisJICoKKwkgKiBGSVhNRSBVbmxpa2UgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQsIHRoaXMgY2Fu IGxvb3AgbW9yZSB0aGFuIHR3aWNlLiBJZgorCSAqIG1hbnkgYmxvY2tzIGdldCBza2lwcGVkIGR1 ZSB0byBjdXJyZW50UHJlZmV0Y2hCbG9jayBvciBhbGwtdmlzaWJpbGl0eQorCSAqIChwZXIgdGhl ICJwcmVmZXRjaCIgY2FsbGJhY2spLCB3ZSBnZXQgdG8gbG9hZCBhZGRpdGlvbmFsIGJhdGNoZXMu IEluCisJICogdGhlIHdvcnN0IGNhc2Ugd2UgaGl0IHRoZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVT IGxpbWl0IGFuZCBoYXZlIHRvCisJICogInBhdXNlIiB0aGUgc3RyZWFtLgorCSAqLworCXdoaWxl ICh0cnVlKQorCXsKKwkJYm9vbAkJYWR2YW5jZWQgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQsIHNldCBpdCB0 byB0aGUKKwkJICogY3VycmVudCByZWFkIHBvc2l0aW9uLiBUaGlzIGlzIHRoZSBpdGVtIHRoZSBj YWxsZXIgaXMgdHJpbmcgdG8KKwkJICogcmVhZCwgc28gaXQncyB3aGF0IHdlIHNob3VsZCByZXR1 cm4gdG8gdGhlIHN0cmVhbS4KKwkJICovCisJCWlmIChJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHN0 cmVhbVBvcykpCisJCXsKKwkJCSpzdHJlYW1Qb3MgPSBiYXRjaFN0YXRlLT5yZWFkUG9zOworCQkJ YWR2YW5jZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGluZGV4X2JhdGNoX3Bvc19hZHZhbmNl KHNjYW4sIHN0cmVhbVBvcywgZGlyZWN0aW9uKSkKKwkJeworCQkJYWR2YW5jZWQgPSB0cnVlOwor CQl9CisKKwkJLyoKKwkJICogRklYTUUgTWF5YmUgY2hlY2sgdGhlIHN0cmVhbVBvcyBpcyBub3Qg YmVoaW5kIHJlYWRQb3M/CisJCSAqCisJCSAqIEZJWE1FIEFjdHVhbGx5LCBjb3VsZCBzdHJlYW1Q b3MgZ2V0IHN0YWxlL2xhZ2dpbmcgYmVoaW5kIHJlYWRQb3MsCisJCSAqIGFuZCBpZiB5ZXMgaG93 IG11Y2guIENvdWxkIGl0IGdldCBzbyBmYXIgYmVoaW5kIHRvIG5vdCBiZSB2YWxpZCwKKwkJICog cG9pbnRpbmcgYXQgYSBmcmVlZCBiYXRjaD8gSW4gdGhhdCBjYXNlIHdlIGNhbid0IGV2ZW4gYWR2 YW5jZSBpdCwKKwkJICogYW5kIHdlIHNob3VsZCBqdXN0IGluaXRpYWxpemUgaXQgdG8gcmVhZFBv cy4gV2UgbWlnaHQgZG8gdGhhdAorCQkgKiBhbnl3YXksIEkgZ3Vlc3MsIGp1c3QgdG8gc2F2ZSBv biAicG9pbnRsZXNzIiBhZHZhbmNlcyAoaXQgbXVzdAorCQkgKiBhZ3JlZSB3aXRoIHJlYWRQb3Ms IHdlIGNhbid0IGFsbG93ICJyZXRyb2FjdGl2ZWx5IiBjaGFuZ2luZyB0aGUKKwkJICogYmxvY2sg c2VxdWVuY2UpLgorCQkgKi8KKworCQkvKgorCQkgKiBJZiB3ZSBhZHZhbmNlZCB0aGUgcG9zaXRp b24sIGVpdGhlciByZXR1cm4gdGhlIGJsb2NrIGZvciB0aGUgVElELAorCQkgKiBvciBza2lwIGl0 IChhbmQgdGhlbiB0cnkgYWR2YW5jaW5nIGFnYWluKS4KKwkJICoKKwkJICogVGhlIGJsb2NrIG1h eSBiZSAic2tpcHBlZCIgZm9yIHR3byByZWFzb25zLiBGaXJzdCwgdGhlIGNhbGxlciBtYXkKKwkJ ICogZGVmaW5lIGEgInByZWZldGNoIiBjYWxsYmFjayB0aGF0IHRlbGxzIHVzIHRvIHNraXAgaXRl bXMgKElPUyBkb2VzCisJCSAqIHRoaXMgdG8gc2tpcCBhbGwtdmlzaWJsZSBwYWdlcykuIFNlY29u ZCwgY3VycmVudFByZWZldGNoQmxvY2sgaXMKKwkJICogdXNlZCB0byBza2lwIGR1cGxpY2F0ZSBi bG9jayBudW1iZXJzIChhIHNlcXVlbmNlIG9mIFRJRFMgZm9yIHRoZQorCQkgKiBzYW1lIGJsb2Nr KS4KKwkJICovCisJCWlmIChhZHZhbmNlZCkKKwkJeworCQkJSW5kZXhTY2FuQmF0Y2ggc3RyZWFt QmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHN0cmVhbVBvcy0+YmF0Y2gpOworCQkJSXRl bVBvaW50ZXIgdGlkID0gJnN0cmVhbUJhdGNoLT5pdGVtc1tzdHJlYW1Qb3MtPmluZGV4XS5oZWFw VGlkOworCisJCQlERUJVR19MT0coImluZGV4X3NjYW5fc3RyZWFtX3JlYWRfbmV4dDogaW5kZXgg JWQgVElEICgldSwldSkiLAorCQkJCQkgIHN0cmVhbVBvcy0+aW5kZXgsCisJCQkJCSAgSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt YmVyKHRpZCkpOworCisJCQkvKgorCQkJICogSWYgdGhlcmUncyBhIHByZWZldGNoIGNhbGxiYWNr LCB1c2UgaXQgdG8gZGVjaWRlIGlmIHdlIG5lZWQgdG8KKwkJCSAqIHJlYWQgdGhlIG5leHQgYmxv Y2suCisJCQkgKgorCQkJICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBjaGVja2luZyBjdXJy ZW50UHJlZmV0Y2hCbG9jazsgaXQncworCQkJICogZXNzZW50aWFsIHRoYXQgdGhlIFZNIGNhY2hl IHVzZWQgYnkgaW5kZXgtb25seSBzY2FucyBpcworCQkJICogaW50aWFsaXplZCBoZXJlLgorCQkJ ICovCisJCQlpZiAoYmF0Y2hTdGF0ZS0+cHJlZmV0Y2ggJiYKKwkJCQkhYmF0Y2hTdGF0ZS0+cHJl ZmV0Y2goc2NhbiwgYmF0Y2hTdGF0ZS0+cHJlZmV0Y2hBcmcsIHN0cmVhbVBvcykpCisJCQl7CisJ CQkJREVCVUdfTE9HKCJpbmRleF9zY2FuX3N0cmVhbV9yZWFkX25leHQ6IHNraXAgYmxvY2sgKGNh bGxiYWNrKSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBzYW1lIGJsb2NrIGFzIGJl Zm9yZSwgZG9uJ3QgbmVlZCB0byByZWFkIGl0ICovCisJCQlpZiAoYmF0Y2hTdGF0ZS0+Y3VycmVu dFByZWZldGNoQmxvY2sgPT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQorCQkJewor CQkJCURFQlVHX0xPRygiaW5kZXhfc2Nhbl9zdHJlYW1fcmVhZF9uZXh0OiBza2lwIGJsb2NrIChj dXJyZW50UHJlZmV0Y2hCbG9jaykiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYmF0Y2hT dGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCk7CisKKwkJCXJldHVybiBiYXRjaFN0YXRlLT5jdXJyZW50UHJlZmV0Y2hCbG9jazsKKwkJfQor CisJCS8qCisJCSAqIENvdWxkbid0IGFkdmFuY2UgdGhlIHBvc2l0aW9uLCBubyBtb3JlIGl0ZW1z IGluIHRoZSBsb2FkZWQgYmF0Y2hlcy4KKwkJICogVHJ5IGxvYWRpbmcgdGhlIG5leHQgYmF0Y2gg LSBpZiB0aGF0IHN1Y2NlZWRzLCB0cnkgYWR2YW5jaW5nIGFnYWluCisJCSAqICh0aGlzIHRpbWUg dGhlIGFkdmFuY2Ugc2hvdWxkIHdvcmssIGJ1dCB3ZSBtYXkgc2tpcCBhbGwgdGhlIGl0ZW1zKS4K KwkJICoKKwkJICogSWYgd2UgZmFpbCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoLCB3ZSdyZSBkb25l LgorCQkgKi8KKwkJaWYgKCFpbmRleF9iYXRjaF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlvbikpCisJ CQlicmVhazsKKworCQkvKgorCQkgKiBDb25zaWRlciBkaXNhYmxpbmcgcHJlZmV0Y2hpbmcgd2hl biB3ZSBjYW4ndCBrZWVwIGEgc3VmZmljaWVudGx5CisJCSAqIGxhcmdlICJpbmRleCB0dXBsZSBk aXN0YW5jZSIgYmV0d2VlbiByZWFkUG9zIGFuZCBzdHJlYW1Qb3MuCisJCSAqCisJCSAqIE9ubHkg Y29uc2lkZXIgZG9pbmcgdGhpcyB3aGVuIHdlJ3JlIG5vdCBvbiB0aGUgc2NhbidzIGluaXRpYWwK KwkJICogYmF0Y2gsIHdoZW4gcmVhZFBvcyBhbmQgc3RyZWFtUG9zIHNoYXJlIHRoZSBzYW1lIGJh dGNoLgorCQkgKi8KKwkJaWYgKCFiYXRjaFN0YXRlLT5maW5pc2hlZCAmJiAhYmF0Y2hTdGF0ZS0+ cHJlZmV0Y2hpbmdMb2NrZWRJbikKKwkJeworCQkJaW50CQkJaW5kZXhkaWZmOworCisJCQlpZiAo c3RyZWFtUG9zLT5iYXRjaCA8PSBJTkRFWF9TQ0FOX01JTl9ESVNUQU5DRV9OQkFUQ0hFUykKKwkJ CXsKKwkJCQkvKiBUb28gZWFybHkgdG8gY2hlY2sgaWYgcHJlZmV0Y2hpbmcgc2hvdWxkIGJlIGRp c2FibGVkICovCisJCQl9CisJCQllbHNlIGlmIChiYXRjaFN0YXRlLT5yZWFkUG9zLmJhdGNoID09 IHN0cmVhbVBvcy0+YmF0Y2gpCisJCQl7CisJCQkJSW5kZXhTY2FuQmF0Y2hQb3MgKnJlYWRQb3Mg PSAmYmF0Y2hTdGF0ZS0+cmVhZFBvczsKKworCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcmVjdGlvbikpCisJCQkJCWluZGV4ZGlmZiA9IHN0cmVhbVBvcy0+aW5kZXggLSByZWFkUG9z LT5pbmRleDsKKwkJCQllbHNlCisJCQkJeworCQkJCQlJbmRleFNjYW5CYXRjaCByZWFkQmF0Y2gg PQorCQkJCQkJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwkJCQkJ aW5kZXhkaWZmID0gKHJlYWRQb3MtPmluZGV4IC0gcmVhZEJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJ CQkJCShzdHJlYW1Qb3MtPmluZGV4IC0gcmVhZEJhdGNoLT5maXJzdEl0ZW0pOworCQkJCX0KKwor CQkJCWlmIChpbmRleGRpZmYgPCBJTkRFWF9TQ0FOX01JTl9UVVBMRV9ESVNUQU5DRSkKKwkJCQl7 CisJCQkJCWJhdGNoU3RhdGUtPmRpc2FibGVkID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIEludmFsaWRC bG9ja051bWJlcjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJYmF0Y2hTdGF0ZS0+cHJl ZmV0Y2hpbmdMb2NrZWRJbiA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCWJhdGNo U3RhdGUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQl9CisJfQorCisJLyogbm8gbW9y ZSBpdGVtcyBpbiB0aGlzIHNjYW4gKi8KKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfZ2V0bmV4dCAtIGdldCB0aGUg bmV4dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHdl IG1hbmFnZWQgdG8gcmVhZCBhIGJhdGNoIG9mIFRJRHMsIG9yIGZhbHNlIGlmIHRoZXJlIGFyZSBu bworICogbW9yZSBUSURzIGluIHRoZSBzY2FuLiBUaGUgbG9hZCBtYXkgYWxzbyByZXR1cm4gZmFs c2UgaWYgd2UgdXNlZCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGJhdGNoZXMgKElOREVYX1ND QU5fTUFYX0JBVENIRVMpLCBpbiB3aGljaCBjYXNlIHdlJ2xsIHJlc2V0IHRoZQorICogc3RyZWFt IGFuZCBjb250aW51ZSB0aGUgc2NhbiBsYXRlci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhl IGJhdGNoIHdhcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCisgKgorICog VGhpcyBvbmx5IGxvYWRzIHRoZSBUSURzIGFuZCByZXNldHMgdGhlIHZhcmlvdXMgYmF0Y2ggZmll bGRzIHRvIGZyZXNoCisgKiBzdGF0ZS4gSXQgZG9lcyBub3Qgc2V0IHhzX2hlYXB0aWQveHNfaXR1 cC94c19oaXR1cCwgdGhhdCdzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGZvbGxvd2lu ZyBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZCgpIGNhbGxzLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgYm9vbAoraW5kZXhfYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUluZGV4U2NhbkJhdGNoU3RhdGUgKmJhdGNo U3RhdGUgPSBzY2FuLT5iYXRjaFN0YXRlOworCUluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2ggPSBO VUxMLAorCQkJCWJhdGNoID0gTlVMTDsKKworCVNDQU5fQ0hFQ0tTOworCUNIRUNLX1NDQU5fUFJP Q0VEVVJFKGFtZ2V0YmF0Y2gpOworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBz bmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZChSZWNlbnRYbWluKSk7CisKKwkvKiBEaWQgd2UgYWxyZWFkeSByZWFkIHRoZSBsYXN0 IGJhdGNoIGZvciB0aGlzIHNjYW4/ICovCisJaWYgKGJhdGNoU3RhdGUtPmZpbmlzaGVkKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgdXNlZCB0aGUgbWF4aW11bSBu dW1iZXIgb2YgYmF0Y2ggc2xvdHMgYXZhaWxhYmxlLCBpdCdzCisJICogcG9pbnRsZXNzIHRvIHRy eSBsb2FkaW5nIGFub3RoZXIgb25lLiBUaGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMKKwkgKiBy ZWFzb25zLCBlLmcuIGZvciBpbmRleC1vbmx5IHNjYW5zIG9uIGFsbC12aXNpYmxlIHRhYmxlLCBv ciBza2lwcGluZworCSAqIGR1cGxpY2F0ZSBibG9ja3Mgb24gcGVyZmVjdGx5IGNvcnJlbGF0ZWQg aW5kZXhlcywgZXRjLgorCSAqCisJICogV2UgY291bGQgZW5sYXJnZSB0aGUgYXJyYXkgdG8gYWxs b3cgbW9yZSBiYXRjaGVzLCBidXQgdGhhdCdzIGZ1dGlsZSwgd2UKKwkgKiBjYW4gYWx3YXlzIGNv bnN0cnVjdCBhIGNhc2UgdXNpbmcgbW9yZSBtZW1vcnkuIE5vdCBvbmx5IGl0IHdvdWxkIHJpc2sK KwkgKiBPT00sIGl0J2QgYWxzbyBiZSBpbmVmZmljaWVudCBiZWNhdXNlIHRoaXMgaGFwcGVucyBl YXJseSBpbiB0aGUgc2NhbgorCSAqIChzbyBpdCdkIGludGVyZmVyZSB3aXRoIExJTUlUIHF1ZXJp ZXMpLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikpCisJeworCQlERUJV R19MT0coImluZGV4X2JhdGNoX2dldG5leHQ6IHJhbiBvdXQgb2Ygc3BhY2UgZm9yIGJhdGNoZXMi KTsKKwkJc2Nhbi0+YmF0Y2hTdGF0ZS0+cmVzZXQgPSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJaW5kZXhfYmF0Y2hfcHJpbnQoImluZGV4X2JhdGNoX2dldG5leHQgLyBzdGFydCIsIHNj YW4pOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGJhdGNoIHRoYXQg YW1nZXRiYXRjaCBoYXMgdG8gcGljayB0aGluZ3MKKwkgKiB1cCBmcm9tCisJICovCisJaWYgKGJh dGNoU3RhdGUtPmhlYWRCYXRjaCA8IGJhdGNoU3RhdGUtPm5leHRCYXRjaCkKKwkJcHJpb3JiYXRj aCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoIC0gMSk7CisK KwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4s IHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCAhPSBO VUxMKQorCXsKKwkJLyoKKwkJICogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBBTSwgYnV0IHdl IG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBxdWV1ZS4KKwkJICogTWF5YmUgdGhhdCBzaG91bGQgYmUg cGFydCBvZiB0aGUgImJhdGNoIGFsbG9jYXRpb24iIHRoYXQgaGFwcGVucyBpbgorCQkgKiB0aGUg QU0/CisJCSAqLworCQlpbnQJCQliYXRjaEluZGV4ID0gYmF0Y2hTdGF0ZS0+bmV4dEJhdGNoOwor CisJCUlOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hJbmRleCkgPSBiYXRjaDsKKworCQliYXRj aFN0YXRlLT5uZXh0QmF0Y2grKzsKKworCQlERUJVR19MT0coImluZGV4X2JhdGNoX2dldG5leHQg aGVhZEJhdGNoICVkIG5leHRCYXRjaCAlZCBiYXRjaCAlcCIsCisJCQkJICBiYXRjaFN0YXRlLT5o ZWFkQmF0Y2gsIGJhdGNoU3RhdGUtPm5leHRCYXRjaCwgYmF0Y2gpOworCisJCS8qIERlbGF5IGlu aXRpYWxpemluZyBzdHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQgYmF0Y2gg Ki8KKwkJaWYgKHByaW9yYmF0Y2ggJiYgIXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgJiYgIWJhdGNo U3RhdGUtPmRpc2FibGVkICYmCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQkJc2Nh bi0+eHNfaGVhcGZldGNoLT5ycyA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVB RF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24s IE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBpbmRleF9zY2FuX3N0cmVhbV9yZWFkX25leHQs IHNjYW4sIDApOworCX0KKwllbHNlCisJCWJhdGNoU3RhdGUtPmZpbmlzaGVkID0gdHJ1ZTsKKwor CUFzc2VydENoZWNrQmF0Y2hlcyhzY2FuKTsKKworCWluZGV4X2JhdGNoX3ByaW50KCJpbmRleF9i YXRjaF9nZXRuZXh0IC8gZW5kIiwgc2Nhbik7CisKKwlyZXR1cm4gKGJhdGNoICE9IE5VTEwpOwor fQorCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFyaW91cyBmaWVs ZHMgLyBhcnJheXMgbmVlZGVkIGJ5IGJhdGNoaW5nLgorICoKKyAqIEZJWE1FIFRoaXMgaXMgYSBi aXQgYWQtaG9jIGhvZGdlIHBvZGdlLCBkdWUgdG8gaG93IEkgd2FzIGFkZGluZyBtb3JlIGFuZAor ICogbW9yZSBwaWVjZXMuIFNvbWUgb2YgdGhlIGZpZWxkcyBtYXkgYmUgbm90IHF1aXRlIG5lY2Vz c2FyeSwgbmVlZHMgY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNoX2luaXQo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIGluaXQgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2Vy dChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlB c3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNoICE9IE5VTEwp OworCisJc2Nhbi0+YmF0Y2hTdGF0ZSA9IHBhbGxvYyhzaXplb2YoSW5kZXhTY2FuQmF0Y2hTdGF0 ZSkpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBiYXRjaC4KKwkgKgorCSAqIFdlIHByZWZl ciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGFtZ2V0YmF0Y2ggcmV0dXJu cy4KKwkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFu dXAgbG9jayBvbiB0aGUgcGFnZS4KKwkgKgorCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFm IHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQorCSAqIHJhY2UgY29u ZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUg Vk0uCisJICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2Ug YSBub24tTVZDQyBzbmFwc2hvdC4KKwkgKgorCSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2VybHks IHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBpbmRleCB0dXBsZXMgYXMKKwkgKiBMUF9ERUFEIGhh cyB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHJhY2VzLiAgVGhlIHNjaGVt ZQorCSAqIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hl biBzY2FubmluZyB1bmxvZ2dlZAorCSAqIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2 aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLiAgT3B0IG91dAorCSAqIG9mIGVhZ2VyIHBpbiBk cm9wcGluZyBkdXJpbmcgdW5sb2dnZWQgcmVsYXRpb24gc2NhbnMgZm9yIG5vdy4KKwkgKi8KKwlz Y2FuLT5iYXRjaFN0YXRlLT5kcm9wUGluID0KKwkJKCFzY2FuLT54c193YW50X2l0dXAgJiYgSXNN VkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCisJCSBSZWxhdGlvbk5lZWRzV0FMKHNj YW4tPmluZGV4UmVsYXRpb24pKTsKKwlzY2FuLT5iYXRjaFN0YXRlLT5maW5pc2hlZCA9IGZhbHNl OworCXNjYW4tPmJhdGNoU3RhdGUtPnJlc2V0ID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+ cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IGZhbHNlOworCXNjYW4tPmJhdGNoU3RhdGUtPmRpc2FibGVk ID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CisJc2Nhbi0+YmF0Y2hTdGF0ZS0+ZGlyZWN0aW9uID0gTm9Nb3ZlbWVu dFNjYW5EaXJlY3Rpb247CisJLyogcG9zaXRpb25zIGluIHRoZSBxdWV1ZSBvZiBiYXRjaGVzICov CisJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZzY2FuLT5iYXRjaFN0YXRlLT5yZWFkUG9z KTsKKwlpbmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJnNjYW4tPmJhdGNoU3RhdGUtPnN0cmVh bVBvcyk7CisJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZzY2FuLT5iYXRjaFN0YXRlLT5t YXJrUG9zKTsKKworCXNjYW4tPmJhdGNoU3RhdGUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+ YmF0Y2hTdGF0ZS0+bWF4QmF0Y2hlcyA9IElOREVYX1NDQU5fTUFYX0JBVENIRVM7CisJc2Nhbi0+ YmF0Y2hTdGF0ZS0+aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nh bi0+YmF0Y2hTdGF0ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBzdGFydHMgZW1w dHkgKi8KKworCXNjYW4tPmJhdGNoU3RhdGUtPmJhdGNoZXMgPQorCQlwYWxsb2Moc2l6ZW9mKElu ZGV4U2NhbkJhdGNoRGF0YSAqKSAqIHNjYW4tPmJhdGNoU3RhdGUtPm1heEJhdGNoZXMpOworCisJ c2Nhbi0+YmF0Y2hTdGF0ZS0+cHJlZmV0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNoU3RhdGUtPnBy ZWZldGNoQXJnID0gTlVMTDsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX3Jlc2V0CisgKgkJUmVz ZXQgdGhlIGJhdGNoIGJlZm9yZSByZWFkaW5nIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEuCisgKgor ICogY29tcGxldGUgLSB0cnVlIG1lYW5zIHdlIHJlc2V0IGV2ZW4gbWFya2VkIGJhdGNoCisgKgor ICAqIFhYWCBTaG91bGQgdGhpcyByZXNldCB0aGUgYmF0Y2ggbWVtb3J5IGNvbnRleHQsIHhzX2l0 dXAsIHhzX2hpdHVwLCBldGM/CisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9yZXNldChJ bmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7CisJSW5kZXhTY2FuQmF0Y2hTdGF0 ZSAqYmF0Y2hTdGF0ZSA9IHNjYW4tPmJhdGNoU3RhdGU7CisKKwkvKiBiYWlsIG91dCBpZiBiYXRj aGluZyBub3QgZW5hYmxlZCAqLworCWlmICghYmF0Y2hTdGF0ZSkKKwkJcmV0dXJuOworCisJQXNz ZXJ0Q2hlY2tCYXRjaGVzKHNjYW4pOworCisJaW5kZXhfYmF0Y2hfcHJpbnQoImluZGV4X2JhdGNo X3Jlc2V0Iiwgc2Nhbik7CisKKwkvKiBXaXRoIGJhdGNoaW5nIGVuYWJsZWQsIHdlIHNob3VsZCBo YXZlIGEgcmVhZCBzdHJlYW0uIFJlc2V0IGl0LiAqLworCUFzc2VydChzY2FuLT54c19oZWFwZmV0 Y2gpOworCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChz Y2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKworCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KKwlp bmRleF9iYXRjaF9wb3NfcmVzZXQoc2NhbiwgJmJhdGNoU3RhdGUtPnJlYWRQb3MpOworCWluZGV4 X2JhdGNoX3Bvc19yZXNldChzY2FuLCAmYmF0Y2hTdGF0ZS0+c3RyZWFtUG9zKTsKKworCS8qCisJ ICogV2l0aCAiY29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJr ZWQgYmF0Y2gsIGVpdGhlcgorCSAqIGJ5IGp1c3QgZm9yZ2V0dGluZyBpdCAoaWYgaXQncyBzdGls bCBpbiB0aGUgcXVldWUpLCBvciBieSBleHBsaWNpdGx5CisJICogZnJlZWluZyBpdC4KKwkgKgor CSAqIFhYWCBEbyB0aGlzIGJlZm9yZSB0aGUgbG9vcCwgc28gdGhhdCBpdCBjYWxscyB0aGUgYW1m cmVlYmF0Y2goKS4KKwkgKi8KKwlpZiAoY29tcGxldGUgJiYgdW5saWtlbHkoYmF0Y2hTdGF0ZS0+ bWFya0JhdGNoICE9IE5VTEwpKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2hQb3MgKm1hcmtQb3MgPSAm YmF0Y2hTdGF0ZS0+bWFya1BvczsKKwkJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hT dGF0ZS0+bWFya0JhdGNoOworCisJCS8qIGFsd2F5cyByZXNldCB0aGUgcG9zaXRpb24sIGZvcmdl dCB0aGUgbWFya2VkIGJhdGNoICovCisJCWJhdGNoU3RhdGUtPm1hcmtCYXRjaCA9IE5VTEw7CisK KwkJLyoKKwkJICogSWYgd2UndmUgYWxyZWFkeSBtb3ZlZCBwYXN0IHRoZSBtYXJrZWQgYmF0Y2gg KGl0J3Mgbm90IGluIHRoZQorCQkgKiBjdXJyZW50IHF1ZXVlKSwgZnJlZSBpdCBleHBsaWNpdGx5 LiBPdGhlcndpc2UgaXQnbGwgYmUgaW4gdGhlIGZyZWVkCisJCSAqIGxhdGVyLgorCQkgKi8KKwkJ aWYgKG1hcmtQb3MtPmJhdGNoIDwgYmF0Y2hTdGF0ZS0+aGVhZEJhdGNoIHx8CisJCQltYXJrUG9z LT5iYXRjaCA+PSBiYXRjaFN0YXRlLT5uZXh0QmF0Y2gpCisJCQlpbmRleF9iYXRjaF9mcmVlKHNj YW4sIG1hcmtCYXRjaCk7CisKKwkJLyogcmVzZXQgcG9zaXRpb24gb25seSBhZnRlciB0aGUgcXVl dWUgcmFuZ2UgY2hlY2sgKi8KKwkJaW5kZXhfYmF0Y2hfcG9zX3Jlc2V0KHNjYW4sICZiYXRjaFN0 YXRlLT5tYXJrUG9zKTsKKwl9CisKKwkvKiByZWxlYXNlIGFsbCBjdXJyZW50bHkgbG9hZGVkIGJh dGNoZXMgKi8KKwl3aGlsZSAoYmF0Y2hTdGF0ZS0+aGVhZEJhdGNoIDwgYmF0Y2hTdGF0ZS0+bmV4 dEJhdGNoKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNj YW4sIGJhdGNoU3RhdGUtPmhlYWRCYXRjaCk7CisKKwkJREVCVUdfTE9HKCJmcmVlaW5nIGJhdGNo ICVkICVwIiwgYmF0Y2hTdGF0ZS0+aGVhZEJhdGNoLCBiYXRjaCk7CisKKwkJaW5kZXhfYmF0Y2hf ZnJlZShzY2FuLCBiYXRjaCk7CisKKwkJLyogdXBkYXRlIHRoZSB2YWxpZCByYW5nZSwgc28gdGhh dCBhc3NlcnRzIC8gZGVidWdnaW5nIHdvcmtzICovCisJCWJhdGNoU3RhdGUtPmhlYWRCYXRjaCsr OworCX0KKworCS8qIHJlc2V0IHJlbGV2YW50IGJhdGNoIHN0YXRlIGZpZWxkcyAqLworCUFzc2Vy dChiYXRjaFN0YXRlLT5tYXhCYXRjaGVzID09IElOREVYX1NDQU5fTUFYX0JBVENIRVMpOworCWJh dGNoU3RhdGUtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggKi8KKwliYXRjaFN0YXRl LT5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCisKKwliYXRjaFN0 YXRlLT5maW5pc2hlZCA9IGZhbHNlOworCWJhdGNoU3RhdGUtPnJlc2V0ID0gZmFsc2U7CisJYmF0 Y2hTdGF0ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwlB c3NlcnRDaGVja0JhdGNoZXMoc2Nhbik7Cit9CisKK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9r aWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoUG9zICpyZWFk UG9zID0gJnNjYW4tPmJhdGNoU3RhdGUtPnJlYWRQb3M7CisJSW5kZXhTY2FuQmF0Y2hEYXRhICpy ZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCUFz c2VydENoZWNrQmF0Y2hQb3NWYWxpZChzY2FuLCByZWFkUG9zKTsKKworCS8qCisJICogWFhYIE1h eWJlIHdlIGNhbiBtb3ZlIHRoZSBzdGF0ZSB0aGF0IGluZGljYXRlcyBpZiBhbiBpdGVtIGhhcyBi ZWVuCisJICoga2lsbGVkIGludG8gSW5kZXhTY2FuQmF0Y2hEYXRhLml0ZW1zW10gYXJyYXkuCisJ ICoKKwkgKiBTZWU6CisJICogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bkxON1AwaTItWUVu djNRR21lQTVBTWpkY2prcmFPX256M0gyVmExVjFXT0FAbWFpbC5nbWFpbC5jb20KKwkgKi8KKwlp ZiAocmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKQorCQlyZWFkQmF0Y2gtPmtpbGxlZEl0 ZW1zID0gKGludCAqKQorCQkJcGFsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UgKiBzaXplb2YoaW50 KSk7CisJaWYgKHJlYWRCYXRjaC0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKKwkJ cmVhZEJhdGNoLT5raWxsZWRJdGVtc1tyZWFkQmF0Y2gtPm51bUtpbGxlZCsrXSA9IHJlYWRQb3Mt PmluZGV4OworfQorCitzdGF0aWMgdm9pZAoraW5kZXhfYmF0Y2hfZnJlZShJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVNDQU5fQ0hFQ0tTOworCUNIRUNLX1ND QU5fUFJPQ0VEVVJFKGFtZnJlZWJhdGNoKTsKKworCUFzc2VydENoZWNrQmF0Y2goc2NhbiwgYmF0 Y2gpOworCisJLyogZG9uJ3QgZnJlZSB0aGUgYmF0Y2ggdGhhdCBpcyBtYXJrZWQgKi8KKwlpZiAo YmF0Y2ggPT0gc2Nhbi0+YmF0Y2hTdGF0ZS0+bWFya0JhdGNoKQorCQlyZXR1cm47CisKKwlzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQor CisvKiAqLworc3RhdGljIHZvaWQKK2luZGV4X2JhdGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4p Cit7CisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7Cit9CisKKy8qCisgKiBYWFggQm90 aCBpbmRleF9iYXRjaF9hbGxvYygpIGNhbGxzIGluIGJ0cmVlIHVzZSBNYXhUSURzUGVyQlRyZWVQ YWdlLAorICogd2hpY2ggc2VlbXMgdW5mb3J0dW5hdGUgLSBpdCBpbmNyZWFzZXMgdGhlIGFsbG9j YXRpb24gc2l6ZXMsIGV2ZW4gaWYKKyAqIHRoZSBpbmRleCB3b3VsZCBiZSBmaW5lIHdpdGggc21h bGxlciBhcnJheXMuIFRoaXMgbWVhbnMgYWxsIGJhdGNoZXMgZXhjZWVkCisgKiBBTExPQ19DSFVO S19MSU1JVCwgZm9yY2luZyBhIHNlcGFyYXRlIG1hbGxvYyAoZXhwZW5zaXZlKS4KKyAqLworSW5k ZXhTY2FuQmF0Y2gKK2luZGV4X2JhdGNoX2FsbG9jKGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0 dXApCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBwYWxsb2Mob2Zmc2V0b2YoSW5kZXhTY2Fu QmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQkgIHNpemVvZihJbmRleFNjYW5CYXRjaFBvc0l0 ZW0pICogbWF4aXRlbXMpOworCisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0 SXRlbSA9IC0xOworCWJhdGNoLT5raWxsZWRJdGVtcyA9IE5VTEw7CisJYmF0Y2gtPm51bUtpbGxl ZCA9IDA7CisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdl IG5lZWQgYSB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KKwkgKiBXZSBhbGxvY2F0ZSBCTENLU1og Zm9yIHRoaXMsIHdoaWNoIHNob3VsZCBhbHdheXMgZ2l2ZSB0aGUgaW5kZXggQU0KKwkgKiBlbm91 Z2ggc3BhY2UgdG8gZml0IGEgZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVwbGVzLgorCSAqLworCWJh dGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKwlpZiAod2FudF9pdHVwKQorCQliYXRjaC0+Y3VyclR1 cGxlcyA9IHBhbGxvYyhCTENLU1opOworCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJ YmF0Y2gtPnBvcyA9IE5VTEw7CisJYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9IE5VTEw7CS8qIHBl ci1iYXRjaCBJT1MgdmlzaWJpbGl0eSAqLworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICog VW5sb2NrIGJhdGNoLT5idWYuICBJZiBiYXRjaCBzY2FuIGlzIGRyb3BQaW4sIGRyb3AgdGhlIHBp biwgdG9vLiAgRHJvcHBpbmcKKyAqIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tp bmcgb24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgorICovCit2b2lkCitpbmRleF9iYXRjaF91 bmxvY2soUmVsYXRpb24gcmVsLCBib29sIGRyb3BQaW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQor eworCWlmICghZHJvcFBpbikKKwl7CisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJl bCkpCisJCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5i dWYpLCBCTENLU1opOworCisJCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICov CisJCUxvY2tCdWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJcmV0dXJu OworCX0KKworCS8qCisJICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgorCSAqCisJ ICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFtZnJlZWJhdGNoIGhhcyBhIHdheSB0 byBkZXRlY3Qgd2hlbgorCSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VV TSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLiAgSXQnbGwKKwkgKiBvbmx5IGJlIHNhZmUgdG8gc2V0 IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04KKwkgKiBoYXNu J3QgYWR2YW5jZWQuCisJICovCisJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7CisJYmF0 Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhiYXRjaC0+YnVmKTsKKwlMb2NrQnVmZmVyKGJh dGNoLT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1 ZmZlcnMocmVsKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShi YXRjaC0+YnVmKSwgQkxDS1NaKTsKKwlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCWJhdGNo LT5idWYgPSBJbnZhbGlkQnVmZmVyOyAvKiBkZWZlbnNpdmUgKi8KK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jCmluZGV4IGZkZmY5NjBjMS4uZmJhNTYyZGY4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKQEAgLTE1OCwxMSArMTU4LDEyIEBAIGJ0aGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gYnRhZGp1c3RtZW1iZXJzOwog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBidGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVz Y2FuID0gYnRyZXNjYW47Ci0JYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gYnRnZXR0dXBsZTsKKwlh bXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGJ0 Z2V0YmF0Y2g7CisJYW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9IGJ0ZnJlZWJhdGNoOwogCWFtcm91 dGluZS0+YW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9 IGJ0ZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IGJ0bWFya3BvczsKLQlhbXJvdXRp bmUtPmFtcmVzdHJwb3MgPSBidHJlc3RycG9zOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IGJ0 cG9zcmVzZXQ7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0 ZXBhcmFsbGVsc2NhbjsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBh cmFsbGVsc2NhbjsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVz Y2FuOwpAQCAtMjIwLDEzICsyMjEsMTIgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAq dmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRo ZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgbmV4 dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4uCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKLQlib29sCQlyZXM7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwp OwogCkBAIC0yNDEsNDQgKzI0MSwxOCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3 ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCiAJCSAqIF9idF9maXJzdCgpIHRvIGdldCB0 aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJh dGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0J CXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZp b3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVw bGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdl J2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9y ZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxl ZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2 ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0 ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJ ICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGlu c3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0J CQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSAo aW50ICopCi0JCQkJCQlwYWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihpbnQpKTsK LQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5r aWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJ fQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAq IE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nhbiwg ZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwot CQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJ aWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQg YW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtl eXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuLCBkaXIpKTsKIAotCXJldHVybiByZXM7CisJ cmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjg4LDYgKzI2Miw3IEBAIGludDY0CiBidGdldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwogCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CiAKQEAgLTI5Niwy OSArMjcxLDMzIEBAIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0 Ym0pCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBp bmRleCBzY2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUg Ki8KLQkJaWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZl dGNoIHRoZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250 aW51ZSBzY2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOworCQkJaW50 CQkJaXRlbUluZGV4ID0gMDsKKworCQkJLyogU2F2ZSBmaXJzdCB0dXBsZSdzIFRJRCAqLworCQkJ aGVhcFRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJdGJtX2FkZF90 dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQludGlkcysrOwogCiAJCQlmb3IgKDs7 KQogCQkJewotCQkJCS8qCi0JCQkJICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIHdpdGhpbiBwYWdl LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUKLQkJCQkgKiBlYXN5IGNhc2UgaW4gX2J0X25leHQo KS4KLQkJCQkgKi8KLQkJCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBv cy5sYXN0SXRlbSkKKwkJCQkvKiBBZHZhbmNlIHRvIG5leHQgVElEIHdpdGhpbiBwYWdlLXNpemVk IGJhdGNoICovCisJCQkJaWYgKCsraXRlbUluZGV4ID4gYmF0Y2gtPmxhc3RJdGVtKQogCQkJCXsK KwkJCQkJLyogYnRmcmVlYmF0Y2ggd29uJ3QgYmUgY2FsbGVkICovCisJCQkJCVJlbGVhc2VCdWZm ZXIoYmF0Y2gtPmJ1Zik7CisKIAkJCQkJLyogbGV0IF9idF9uZXh0IGRvIHRoZSBoZWF2eSBsaWZ0 aW5nICovCi0JCQkJCWlmICghX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQor CQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJ CQl9CiAKIAkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJ CQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0uaGVh cFRpZDsKKwkJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJ CQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsK IAkJCX0KQEAgLTM0Niw4ICszMjUsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBu a2V5cywgaW50IG5vcmRlcmJ5cykKIAogCS8qIGFsbG9jYXRlIHByaXZhdGUgd29ya3NwYWNlICov CiAJc28gPSAoQlRTY2FuT3BhcXVlKSBwYWxsb2Moc2l6ZW9mKEJUU2Nhbk9wYXF1ZURhdGEpKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURh dGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5 RGF0YSkpOwogCWVsc2UKQEAgLTM2MSwxNiArMzM4LDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24g cmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc28tPm9yZGVyUHJvY3MgPSBOVUxMOwog CXNvLT5hcnJheUNvbnRleHQgPSBOVUxMOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsJCS8q IHVudGlsIG5lZWRlZCAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBkb24n dCBrbm93IHlldCB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgYmUgaW5kZXgtb25seSwgc28gd2UgZG8g bm90Ci0JICogYWxsb2NhdGUgdGhlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMgdW50aWwgYnRyZXNj YW4uICBIb3dldmVyLCB3ZSBzZXQgdXAKLQkgKiBzY2FuLT54c19pdHVwZGVzYyB3aGV0aGVyIHdl J2xsIG5lZWQgaXQgb3Igbm90LCBzaW5jZSB0aGF0J3Mgc28gY2hlYXAuCi0JICovCi0Jc28tPmN1 cnJUdXBsZXMgPSBzby0+bWFya1R1cGxlcyA9IE5VTEw7Ci0KIAlzY2FuLT54c19pdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKIAogCXNjYW4tPm9wYXF1ZSA9IHNvOwpAQCAtMzg3LDgy ICszNTQsNTEgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXks IGludCBuc2NhbmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBn b3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtp bGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8g ZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0J ICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxv Y2sgb24gdGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdl IHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlv biBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgot CSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9u LU1WQ0Mgc25hcHNob3QuCi0JICoKLQkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUg bWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMg TFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4K LQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0 IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9nZ2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52 b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFn ZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0J ICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRpbmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUg TFBfREVBRCBzZXR0aW5nKS4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFm IHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3Qg YmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRo ZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24g YWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24g b24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTog c28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlz by0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNo b3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5p bmRleFJlbGF0aW9uKSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQot CXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNv LT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5 cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkg ZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBv dmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9j azsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICoK LQkgKiBOT1RFOiB0aGlzIGRhdGEgc3RydWN0dXJlIGFsc28gbWFrZXMgaXQgc2FmZSB0byByZXR1 cm4gZGF0YSBmcm9tIGEKLQkgKiAibmFtZSIgY29sdW1uLCBldmVuIHRob3VnaCBidHJlZSBuYW1l X29wcyB1c2VzIGFuIHVuZGVybHlpbmcgc3RvcmFnZQotCSAqIGRhdGF0eXBlIG9mIGNzdHJpbmcu ICBUaGUgcmlzayB0aGVyZSBpcyB0aGF0ICJuYW1lIiBpcyBzdXBwb3NlZCB0byBiZQotCSAqIHBh ZGRlZCB0byBOQU1FREFUQUxFTiwgYnV0IHRoZSBhY3R1YWwgaW5kZXggdHVwbGUgaXMgcHJvYmFi bHkgc2hvcnRlci4KLQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBvbmx5IHJldHVybiBkYXRhIG91dCBv ZiB0dXBsZXMgc2l0dGluZyBpbiB0aGUKLQkgKiBjdXJyVHVwbGVzIGFycmF5LCBhIGZldGNoIG9m IE5BTUVEQVRBTEVOIGJ5dGVzIGNhbiBhdCB3b3JzdCBwdWxsIHNvbWUKLQkgKiBkYXRhIG91dCBv ZiB0aGUgbWFya1R1cGxlcyBhcnJheSAtLS0gcnVubmluZyBvZmYgdGhlIGVuZCBvZiBtZW1vcnkg Zm9yCi0JICogYSBTSUdTRUdWIGlzIG5vdCBwb3NzaWJsZS4gIFllYWgsIHRoaXMgaXMgdWdseSBh cyBzaW4sIGJ1dCBpdCBiZWF0cwotCSAqIGFkZGluZyBzcGVjaWFsLWNhc2UgdHJlYXRtZW50IGZv ciBuYW1lX29wcyBlbHNld2hlcmUuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBz by0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBw YWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBC TENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNj YW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEs IHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5v cHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRp bCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJ CS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2gsIHJl bGVhc2luZyBpdHMgYnVmZmVyIHBpbgorICoKKyAqIFhYWCBTaG91bGQgd2UgcmVhbGx5IGJlIGZy ZWVpbmcgbWVtb3J5IGxpa2UgdGhpcz8gV2hhdCBpZiB3ZSB3ZXJlIHRvIGp1c3QKKyAqIHJldXNl IG1vc3QgbWVtb3J5IGFjcm9zcyBkaXN0aW5jdCBwYWdlcywgYXZvaWRpbmcgcGZyZWUvcGFsbG9j IGN5Y2xlcz8KKyAqLwordm9pZAorYnRmcmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIGFyZSB0dXBsZXMg dG8ga2lsbCBmcm9tIHRoaXMgYmF0Y2ggKHRoYXQgd2VyZW4ndCBhbHJlYWR5CisJICoga2lsbGVk IGVhcmxpZXIgb24pCisJICovCisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfYnRfa2ls bGl0ZW1zKHNjYW4sIGJhdGNoKTsKKworCWlmIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KQorCQlw ZnJlZShiYXRjaC0+aXRlbXN2aXNpYmlsaXR5KTsKKworCWlmIChiYXRjaC0+Y3VyclR1cGxlcykK KwkJcGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOworCisJaWYgKGJhdGNoLT5wb3MpCisJeworCQlp ZiAoIXNjYW4tPmJhdGNoU3RhdGUgfHwgIXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4pCisJCQlS ZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCisJCXBmcmVlKGJhdGNoLT5wb3MpOworCX0KKwor CXBmcmVlKGJhdGNoKTsKK30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBz Y2FuCiAgKi8KQEAgLTQ3MSwxMTYgKzQwNyw1MCBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK IAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0 aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8q IEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMg Ki8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJ QlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVt SW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8q IE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUg ZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0g TlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5v cmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAh PSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChz by0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAo c28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNv LT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZy ZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9z aXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSBpbnZhbGlkYXRlIHNjYW4ncyBhcnJheSBrZXlzCiAg Ki8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbWFya2JhdGNoKQogewogCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVFNjYW5Qb3MJcG9zOwogCi0J LyogVGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8K LQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJh eUtleXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRl bUluZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFz aW5nIHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBv ZgotCSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBl bnMpIHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBk b24ndCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byBy ZXN0b3JlIGEgbWFyayBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQg YmF0Y2guICBSZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJ ICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1J bmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlwb3MgPSAoQlRTY2FuUG9zKSBtYXJrYmF0 Y2gtPnBvczsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBwb3MtPmRpcik7CisKKwkvKgor CSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0ZSBhbGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgor CSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGluZyBuZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBt b3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBtb3JlTGVmdCwgd2hlbiBzY2FubmluZyBiYWNr d2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRpbWUKKwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQg aXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3IgdG8gdGhlIGxlZnQpLiAgQXQgdGhhdAorCSAq IHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3RvcmUgdGhlIHNjYW4ncyBhcnJheXMgdG8gZWxl bWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFjayB0aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24g aW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKHBvcy0+ZGlyKSkKKwkJcG9zLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJU U2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0x OwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBz YXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK LXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlp ZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBu ZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAq IHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBj YW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0 ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4Owot CX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFm dGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3Jpbmcg dG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9j a3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBv c2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChz by0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1Bvcykp Ci0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1 cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQot CQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+ Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0 ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9z SXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxl cywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7 Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9y IHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9h cnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9 IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1 cnJQb3MpOwotCX0KKwkJcG9zLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9 IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sg PSBmYWxzZTsKIH0KIAogLyoKQEAgLTgyNywxNSArNjk3LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXpl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0 X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlh bGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBf YnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFs Ci0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3Nj YW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlh bGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1 cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC05ODUs OCArODQ2LDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFy YWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5nZWQgPSBmYWxzZTsKIAot CUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCiAJLyogRG8gbm90aGlu ZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxlbF9zY2FuID09IE5VTEwp CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDA2MDUz NTZlYy4uNTRhNzY3YTRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAg LTI1LDYyICsyNSwzMyBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxp bmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5P cGFxdWUgc28pOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVs YXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29s IGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBP ZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBC dWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQg a2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0pOwotc3RhdGljIGJv b2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0J CQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOwotc3RhdGljIHZvaWQg X2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBw b3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorc3RhdGljIGJvb2wg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gs CisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkg Ym9vbCBmaXJzdHBhZ2UpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNo IG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCwKKwkJCQkJCSBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4 LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq aGVhcFRpZCwKLQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lk IF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJ CQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5l IHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0 ZW1JbmRleCwKIAkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJ dGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOwotc3RhdGljIGlubGluZSB2b2lk IF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0 YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRp YyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBi bGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBk aXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBU aWQsIGludCBiYXNlT2Zmc2V0KTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0 cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJ CQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIElu ZGV4U2NhbkJhdGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJ CQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZl ciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpi bGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9v bCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci0K LQotLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbigpCi0gKgotICogVW5sb2NrIHNv LT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4gaXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9v LgotICogRHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBh Y3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQotewot CWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUg cGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJu OwotCX0KLQotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0J ICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMg YSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBi eSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlBc3NlcnQoUmVsYXRpb25O ZWVkc1dBTChyZWwpKTsKLQlzby0+Y3VyclBvcy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28t PmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+ Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOwotfQorc3RhdGljIEluZGV4U2NhbkJhdGNoIF9i dF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKTsKIAogLyoKICAqCV9idF9zZWFyY2goKSAt LSBTZWFyY2ggdGhlIHRyZWUgZm9yIGEgcGFydGljdWxhciBzY2Fua2V5LApAQCAtODcwLDIwICs4 NDEsMTYgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAogICoJCWNvbmRpdGlvbnMsIGFuZCB0 aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAogICoJCWlmIGJh Y2t3YXJkcyBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0 aGUKICAqCQlxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQs IGRhdGEgYWJvdXQgdGhlCi0gKgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJl ZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFu ZCBob2xkIG9udG8gYSBwaW4gb24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNv LT5kcm9wUGluIHNjYW5zLCB3aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4K LSAqCQlfYnRfcmV0dXJuaXRlbSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4g b24gc3VjY2VzcyBleGl0LgorICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIHRoZSByZXR1cm5lZCBiYXRjaC4KICAqCi0gKiBJZiB0aGVyZSBhcmUg bm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8K LSAqIHBpbnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQu CisgKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSBqdXN0 IHJldHVybiBOVUxMLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUg c28tPmtleURhdGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gt dHlwZSBzY2Fua2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAg KiBXaXRoaW4gdGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlw ZSBzY2Fua2V5IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24u CiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0 aW9uOwpAQCAtODk3LDggKzg2NCw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52YWxpZFN0 cmF0ZWd5OwogCUJsb2NrTnVtYmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAogCQkJCWxh c3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsK KwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoOwogCiAJLyoKIAkgKiBFeGFtaW5lIHRoZSBzY2Fu IGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7IGFsc28gbWFyayB0aGUKQEAg LTkyMyw3ICs4ODksNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFf YnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0J CXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28t Pm5lZWRQcmltc2NhbiBpcyB1bnNldCkgKi8KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2Nh bidzIGFycmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTk0 MCwxNCArOTA2LDggQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJCSAqIF9idF9yZWFkbmV4dHBhZ2UgcmVsZWFzZXMgdGhlIHNjYW4gZm9yIHVzIChu b3QgX2J0X3JlYWRmaXJzdHBhZ2UpLgogCQkgKi8KIAkJQXNzZXJ0KHNjYW4tPnBhcmFsbGVsX3Nj YW4gIT0gTlVMTCk7Ci0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0JCUFzc2VydChibGtu byAhPSBQX05PTkUpOwogCi0JCWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFz dGN1cnJibGtubywgZGlyLCB0cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFn ZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAt MTIzOSw2ICsxMTk5LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQl9CiAJfQogCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNo ICovCisJZmlyc3RiYXRjaCA9IGluZGV4X2JhdGNoX2FsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2Us IHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJZmlyc3RiYXRjaC0+cG9zID0gcGFsbG9jKHNpemVvZihC VFNjYW5Qb3NEYXRhKSk7CisKIAkvKgogCSAqIElmIHdlIGZvdW5kIG5vIHVzYWJsZSBib3VuZGFy eSBrZXlzLCB3ZSBoYXZlIHRvIHN0YXJ0IGZyb20gb25lIGVuZCBvZgogCSAqIHRoZSB0cmVlLiAg V2FsayBkb3duIHRoYXQgZWRnZSB0byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXksIGFuZCBzY2FuIGZy b20KQEAgLTEyNDcsNyArMTIxMSw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1 cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09 IDApCi0JCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRw b2ludChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0 IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTE1 LDEyICsxNDc5LDEyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4K IAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFj a3dhcmQpOwotCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3Vy clBvcy5idWYsIEJUX1JFQUQpOworCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNr ZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVw IHRoZSBzdGFjayBhcm91bmQuLi4gKi8KIAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICgh QnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJz dGJhdGNoLT5idWYpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUz NiwxMSArMTUwMCwxMSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRp Y2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0YWNrID0gX2J0 X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOwor CQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmZpcnN0YmF0Y2gtPmJ1 ZiwgQlRfUkVBRCk7CiAJCQlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0JCWlmICghQnVm ZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3Ri YXRjaC0+YnVmKSkKIAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CiAJCQlyZXR1cm4g ZmFsc2U7CkBAIC0xNTQ4LDExICsxNTEyLDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNl IGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXks IHNvLT5jdXJyUG9zLmJ1Zik7CisJb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBm aXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0 IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28t PmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJ ICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2Us IG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+ PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTcwLDY5ICsxNTM0LDc5IEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZv ciBleGFtcGxlLCB3aGVuIGluc2tleSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkg KiBrZXkgYW5kID4gYWxsIG9mIGl0cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAi bWF4b2ZmICsgMSIuCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0s IGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQly ZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwg b2ZmbnVtLCBkaXIpOwogfQogCiAvKgogICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRl bSBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhl IGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBpbm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2Vk LCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAq CQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJl cyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBX ZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAq CQlkZWNpZGUgd2hpY2ggcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhp dCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQot ICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBv cyByZW1haW5zIHZhbGlkLgorICoJCU9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBi YXRjaC4gIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24g YW55IHJldHVybmVkIGJhdGNoIChlbHNlIHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCiAgKgotICoJ CU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJy UG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJu IHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8g Y2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIE5VTEwuICBJdCdsbCBzdGlsbCBi ZQorICoJCXBvc3NpYmxlIGZvciB0aGUgc2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5n IGRpcmVjdGlvbiwgdGhvdWdoCisgKgkJd2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3 IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3RjdXJyYmxrbm87CisJQlRTY2FuUG9zCXBy aW9ycG9zID0gKEJUU2NhblBvcykgcHJpb3JiYXRjaC0+cG9zOwogCi0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZCgqcHJpb3Jw b3MpKTsKKworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IHByaW9ycG9zLT5uZXh0UGFnZTsK KwllbHNlCisJCWJsa25vID0gcHJpb3Jwb3MtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBw cmlvcnBvcy0+Y3VyclBhZ2U7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBj dXJyZW50IHBhZ2U7IG9yIGlmIHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0 aGUgbmV4dCBwYWdlIHdpdGggZGF0YS4KKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5z IHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bworCSAqIF9idF9yZWFkcGFnZSBm b3IgcG9zIGhhcHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUK KwkgKiB0aGF0IHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhl IHNjYW4ncyBhcnJheSBrZXlzCisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFn ZSB3aWxsIGFkdmFuY2UgdGhlbS4pCiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKKwlpZiAocHJpb3Jwb3MtPmRpciAhPSBkaXIpCisJCXNvLT5uZWVkUHJpbVNjYW4gPSBm YWxzZTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSA/CisJCSAhcHJpb3Jwb3MtPm1vcmVSaWdodCA6ICFwcmlvcnBvcy0+bW9yZUxlZnQp KQogCXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0 ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZh bHNlOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8 IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2Nhbiwg ZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJLyoKKwkJICogcHJpb3Jwb3MgX2J0X3Jl YWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCSAq IHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9m aXJzdCkKKwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsK IAl9CiAKLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJLyogcGFy YWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYg KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNj YW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyog ZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3Jl YWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAK IC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBh Z2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20g Y3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2 ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0 YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQg bW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJp YXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKLSAqIGluaXRpYWxpemVk IGZyb20gc2NyYXRjaCBoZXJlLgorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQt bG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdl ZCBoZXJlLiAgQWxzbywgcG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsg dGhleSBhcmUKKyAqIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9m IG5ld2JhdGNoIGFyZSBpbml0aWFsaXplZCBmcm9tCisgKiBzY3JhdGNoIGhlcmUuCiAgKgogICog V2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGlu IHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2Nh biBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxs IGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1z LgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBp ZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVz dCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBh cnJheXMpLgpAQCAtMTY0NCw4ICsxNjE4LDggQEAgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRl bXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIHN0YXRpYyBib29sCi1f YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTE2NTYsMzcgKzE2MzAsMzUgQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0s CiAJQlRSZWFkUGFnZVN0YXRlIHBzdGF0ZTsKIAlib29sCQlhcnJheUtleXM7CiAJaW50CQkJaXRl bUluZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKKwlCVFNjYW5Qb3MJ cG9zID0gbmV3YmF0Y2gtPnBvczsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51 bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1 Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQ YWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBv cy5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0g b3BhcXVlLT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50 aWwgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0Jc28tPmN1cnJQb3MuZGlyID0gZGly OwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA9IDA7CisJcG9zLT5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKG5ld2JhdGNoLT5idWYpOworCXBvcy0+cHJldlBhZ2UgPSBvcGFx dWUtPmJ0cG9fcHJldjsKKwlwb3MtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcG9z LT5kaXIgPSBkaXI7CisKKwlzby0+cG9zID0gcG9zOwkJCQkvKiBfYnRfY2hlY2trZXlzIG5lZWRz IHRoaXMgKi8KIAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNl dCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9y ZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBwb3MtPm1vcmVS aWdodCA6IHBvcy0+bW9yZUxlZnQpOwogCUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNz ZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFBy aW1TY2FuKTsKIAogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCXsKIAkJLyogYWxsb3cgbmV4 dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBieSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwog CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVh c2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJy UGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBwb3MtPm5leHRQYWdlLCBwb3Mt PmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1 cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRf cGFyYWxsZWxfcmVsZWFzZShzY2FuLCBwb3MtPnByZXZQYWdlLCBwb3MtPmN1cnJQYWdlKTsKIAl9 CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54 c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBwb3MtPmN1cnJQYWdlLCBzY2Fu LT54c19zbmFwc2hvdCk7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwogCWlu ZG5hdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mQXR0cmlidXRlcyhyZWwpOwpAQCAtMTcy NCwxMSArMTY5NiwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2No ZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hl ZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJcG9zLT5tb3JlUmlnaHQgPSBmYWxzZTsK IAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9z Y2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJ CQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sIHBvcy0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJ CQkJfQogCQkJfQpAQCAtMTc5MiwyOCArMTc2MywyOCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlp ZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBp dCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJ CQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxl T2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJ CWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qCiAJ CQkJCSAqIFNldCB1cCBzdGF0ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIg Zmlyc3QKIAkJCQkJICogVElECiAJCQkJCSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlf YnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zm c2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBv ZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJ CQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJ CWl0ZW1JbmRleCsrOwogCQkJCQkvKiBSZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8KIAkJCQkJ Zm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJ CQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJ CQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJ CQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBs ZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJ CQkJCX0KIAkJCQl9CkBAIC0xODUzLDEyICsxODI0LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQl9 CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gZmFsc2U7CisJCQlwb3MtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5k ZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7 Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3Mu aXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5s YXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0xODc1LDExICsxODQ1 LDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNj YW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1v cmVMZWZ0ID0gZmFsc2U7CisJCQkJCXBvcy0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5l ZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJ X2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28t PmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxl KHNjYW4sIHBvcy0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpA QCAtMTk4MCwxMSArMTk0OSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJl bWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0 ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVt SW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJ CXsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJ CQkJLyoKIAkJCQkJICogU2V0IHVwIHN0YXRlIHRvIHJldHVybiBwb3N0aW5nIGxpc3QsIGFuZCBy ZW1lbWJlciBmaXJzdApAQCAtMTk5NywxNyArMTk2NiwxNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJ CQkJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHBvc3RpbmcgbGlzdCB0dXBsZS4KIAkJCQkJ ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0 dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0K KwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0s CiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJ CQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCS8qIFJl bWVtYmVyIGFkZGl0aW9uYWwgVElEcyAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVl VHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgtLTsK LQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJ CQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZz ZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTIw MjMsMTIgKzE5OTIsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJ CSAqLwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVm dCA9IGZhbHNlOworCQkJcG9zLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5k ZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1 cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3Mu aXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0 ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBh Z2UgLSAxOwogCX0KIAogCS8qCkBAIC0yMDQ1LDIwMiArMjAxMyw5NiBAQCBfYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJldHVybiAo c28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwlyZXR1cm4g KG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAotLyogU2F2 ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyog U2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3Rh dGljIHZvaWQKLV9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0J CQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVt LAorCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJ dGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0 KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7 CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9m ZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxh dGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRl eF0uaGVhcFRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmlu ZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJ U2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxl T2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJU dXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRj aC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5 KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkq dHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBz dGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUu CiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25k IG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQg YnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVt IGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQK KyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5n IGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0o KS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhh dCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNl T2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBs ZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVw cG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVw bGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwg aW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9p bnRlckRhdGEgKmhlYXBUaWQsCisJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zm c2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF07CisJSW5kZXhTY2FuQmF0Y2hQb3NJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVt c1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0J Y3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBv ZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVsYXRlZCBwYXJ0 IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKKwlpdGVt LT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7 CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJ CUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdP ZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0t PnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKElu ZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7 CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVw bGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNl LCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4 IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNL OwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZz ZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJy SXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAly ZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAg KiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFz IGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4g IENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3Rp bmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zm c2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2Fu T3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVt UG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVt LAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Q b3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUluZGV4 U2NhbkJhdGNoUG9zSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAot CWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0g b2ZmbnVtOworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9 IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJldHVybiB0aGUgc2Ft ZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3JpZ2luYXRlcyBmcm9t IHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJY3Vy ckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhl IGluZGV4IGl0ZW0gZnJvbSBzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhd IHRvIHRoZQotICogaW5kZXggc2NhbiBieSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4g Y2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNjcmlwdG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot X2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0J QlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3Mu aXRlbUluZGV4XTsKLQotCS8qIE1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3Vj Y2VlZGVkICovCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3Nl cnQoc28tPmN1cnJQb3MuaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNz ZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkv KiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIgYW1nZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhz X2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNj YW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1 cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBw YWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0 X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZvcm1zIGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBw YWdlLgotICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1 ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhvdWdoCi0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwg d2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3b24ndCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91 Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2UgbXVzdCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9j ayBudW1iZXIuKQotICovCi1zdGF0aWMgYm9vbAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUJsb2NrTnVtYmVyIGJsa25vLAotCQkJCWxhc3RjdXJyYmxr bm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyogQmVm b3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwot CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQotCS8qCi0J ICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRh IGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgotCSAqLwot CWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4gb24gY3VycmVu dCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYgKEJUU2NhblBv c0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBv cy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0JCQkgICBvZmZz ZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQb3MubGFzdEl0 ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBsZXMpCi0JCQlt ZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNvLT5jdXJyUG9z Lm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRl bUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAqIElmIHdlJ3Jl IGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkJICog KHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQgbmVlZHMgdG8g c2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIG1v cmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGN1cnJl bnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIgYmUgdGFrZW4g dG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVuZGVkCi0JCSAq ICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFuZGxlIHRoaXMg Y2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAqIG1hcmtQb3Mg c3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRlIGxpa2UgdGhp cwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3QgdW5zZXQgbWFy a1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGljaGV2ZXIgbWln aHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyByZXNldCB0aGUg c2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgotCQkgKiBJbiBl ZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVwIHRvIHRoZSBm aXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBhZnRlciBpdCBo YXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmltU2NhbikKLQkJ ewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGlyKSkKLQkJCQlz by0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5tYXJrUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3VwcG9ydGVkIGJ5 IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nhbik7Ci0JfQot Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0KLQkvKiBXYWxrIHRvIHRo ZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKLQllbHNlCi0JCWJsa25vID0gc28t PmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdl OwotCi0JLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hl ZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3IgY3VyclBvcyBoYXBw ZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkgKiBvbmUgdGhhdCB3 ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJy YXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZh bmNlIHRoZW0uKQotCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQotCQlzby0+bmVl ZFByaW1TY2FuID0gZmFsc2U7Ci0KLQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtu bywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVz KQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAKIC8qCkBAIC0yMjUyLDcz ICsyMTE0LDk2IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRf Y2hlY2trZXlzIGFnYWluc3QgdGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9y IGZ1bGwgZGV0YWlscy4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5u ZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJz dGJhdGNoIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCku CiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZv cmUgY2FsbGluZyBoZXJlLgogICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+ Y3VyclBvcyBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhh dmUgdXBkYXRlZCBmaXJzdGJhdGNoIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwogICogYWNj b3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5l eHRwYWdlIGV4aXQuCi0gKiBMaWtlIF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUg aW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdp dmVuIGRpcmVjdGlvbi4KICAqCiAgKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBw YXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJl OyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAg Ki8KLXN0YXRpYyBib29sCi1fYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJh dGNoCitfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGZpcnN0YmF0Y2gsCisJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp cikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlCbG9ja051bWJlciBibGtubywK KwkJCQlsYXN0Y3VycmJsa25vOworCUJUU2NhblBvcwlmaXJzdHBvcyA9IGZpcnN0YmF0Y2gtPnBv czsKIAotCXNvLT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFy a0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQ b3MgZm9yIHRoZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJ bml0aWFsaXplIGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlp ZiAoc28tPm5lZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAot CQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9 IHRydWU7CisJCWZpcnN0cG9zLT5tb3JlTGVmdCA9IHRydWU7CisJCWZpcnN0cG9zLT5tb3JlUmln aHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0g ZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0cG9zLT5tb3Jl TGVmdCA9IGZhbHNlOworCQlmaXJzdHBvcy0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAl9CiAJZWxzZQog CXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmln aHQgPSBmYWxzZTsKKwkJZmlyc3Rwb3MtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3Rwb3MtPm1v cmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5n IHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9idF9yZWFk cGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkg KiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZmly c3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFyYWxsZWwg c2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRfcmVhZHBh Z2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmly c3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJv cCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBp biBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJ QXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tf YW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9yZWFkcGFn ZSBzdWNjZWVkZWQgKi8KKwkJaW5kZXhfYmF0Y2hfdW5sb2NrKHJlbCwgc2Nhbi0+YmF0Y2hTdGF0 ZSAmJiBzY2FuLT5iYXRjaFN0YXRlLT5kcm9wUGluLAorCQkJCQkJICAgZmlyc3RiYXRjaCk7CisJ CXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hp bmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVm KHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBh Y3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIGZpcnN0YmF0Y2gtPmJ1ZiAqLwor CV9idF9yZWxidWYocmVsLCBmaXJzdGJhdGNoLT5idWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9z dGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGly KSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEg Ki8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGZpcnN0cG9z LT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gZmlyc3Rwb3MtPnByZXZQYWdlOworCWxhc3Rj dXJyYmxrbm8gPSBmaXJzdHBvcy0+Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEg bGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1 ZTsKKwlBc3NlcnQoZmlyc3Rwb3MtPmRpciA9PSBkaXIpOworCisJLyogZmlyc3RiYXRjaCB3aWxs IG5ldmVyIGJlIHJldHVybmVkIHRvIHNjYW4sIHNvIGZyZWUgaXQgb3V0c2VsdmVzICovCisJcGZy ZWUoZmlyc3RiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0cG9zLT5tb3JlUmlnaHQgOiAhZmlyc3Rwb3Mt Pm1vcmVMZWZ0KSkKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwg ZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJp bVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICov CisJCXBmcmVlKGZpcnN0cG9zKTsKKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVy biBOVUxMOworCX0KKworCXBmcmVlKGZpcnN0cG9zKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVz dCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxl bF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZs YXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5u ZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2Nh biwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMjMyOCwx MDIgKzIyMTMsNzAgQEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQg cmlnaHQgbGluayBvciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQK ICAqIHdhcyBjdXJyZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2 ZWQsIHdoaWNoIHdlIHVzZSB0bwogICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxp dHMvcGFnZSBkZWxldGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21t b24gY2FzZSB3aGVyZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5u ZXh0UGFnZQotICogb3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlz IHNvLT5jdXJyUG9zLmN1cnJQYWdlLgorICogYmxrbm8gaXMgdGhlIHByaW9yIHNjYW4gcG9zaXRp b24ncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5nIG9uIHNjYW4KKyAqIGRpcmVjdGlv biksIGFuZCBsYXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBwb3NpdGlvbidzIGN1cnJQYWdlLgog ICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNhbGxl ci4gIHNvLT5jdXJyUG9zLmJ1ZiBtdXN0Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVkIGFz IG5lZWRlZCBieSBjYWxsZXIgKG5vdGUgdGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBuZWVk IHRvIGJlIHJlYWQgYWdhaW4gaW4gYWxtb3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2FuIGNh bGxlcnMKLSAqIHRoYXQgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hvdWxk IHBhc3Mgc2VpemVkPXRydWU7IHN1Y2ggYQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3RjdXJy Ymxrbm8gYXJndW1lbnRzIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9ZmFs c2UgY2FsbGVycyBqdXN0IHBhc3MgdXMgdGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4gZnJv bSB0aGVpcgotICogc28tPmN1cnJQb3MsIHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9zIGl0 c2VsZikgY2FuIGJlIHVzZWQgdG8gZW5kIHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNlIGNh bGxlcidzIGJsa25vIGNhbiBuZXZlciBiZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0aGF0 IG11c3QgYmUgcmVhZCBuZXh0IGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdlIG11 c3QgZmlndXJlIHRoYXQKLSAqIHBhcnQgb3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0aGUg c2NhbiAodGhlIGNvcnJlY3QgcGFnZSB0byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJleW9u ZCB0aGUgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNjYW4s Ci0gKiB1bmxlc3MgYmxrbm8vc28tPmN1cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJldlBh Z2UgaXMgYWxyZWFkeSBQX05PTkUsCi0gKiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJpZ2h0 L3NvLT5jdXJyUG9zLm1vcmVMZWZ0IGlzIGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnksIG5v IHBhZ2Ugc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBleGl0 LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0Ci0g KiBpbnRlcmVzdGluZyBwYWdlLCBhbmQgd2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGluIG9u IHRoZSBidWZmZXIgb24KLSAqIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJvcFBp biBpbmRleCBzY2Fucywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZvaWQg YmxvY2tpbmcgVkFDVVVNKS4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyBzY2FuIGJhdGNo IGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0CisgKiBpbnRlcmVzdGluZyBwYWdlLiAgV2Ug aG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9uIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0CisgKiBkdXJp bmcgZHJvcFBpbiBwbGFpbiBpbmRleCBzY2Fucywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4gZWFnZXJs eSB0byBhdm9pZAorICogYmxvY2tpbmcgVkFDVVVNKS4gIElmIHRoZXJlIGFyZSBubyBtb3JlIG1h dGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuCisgKiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJu IE5VTEwuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0 aGUgZ2l2ZW4gZGlyZWN0aW9uLCB3ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUg ZW5zdXJpbmcgaXQgcmV0YWlucyBubyBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4K LSAqCi0gKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNh bGxlciwgcmVnYXJkbGVzcyBvZgotICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9i dF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2Fu IGNhbGxlcnMgbXVzdCBzZWl6ZSB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8g YW5kCisgKiBsYXN0Y3VycmJsa25vIHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAg V2UnbGwgcmVsZWFzZSB0aGUgc2NhbiBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3Rh dGljIGJvb2wKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3Vy cmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVy IGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlC VFNjYW5Qb3MJbmV3cG9zOwogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3Rj dXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVk KSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9j YXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleF9iYXRjaF9hbGxv YyhNYXhUSURzUGVyQlRyZWVQYWdlLCBzY2FuLT54c193YW50X2l0dXApOworCW5ld2JhdGNoLT5w b3MgPSBwYWxsb2Moc2l6ZW9mKEJUU2NhblBvc0RhdGEpKTsKKwluZXdwb3MgPSBuZXdiYXRjaC0+ cG9zOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0 Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIg cmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIHBv cyBpcyB0aGUgZmlyc3QgdmFsaWQgcGFnZSB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KSBv ZgorCSAqIGxhc3RjdXJyYmxrbm8uICBBbHNvIHByb3Zpc2lvbmFsbHkgYXNzdW1lIHRoYXQgdGhl cmUnbGwgYmUgYW5vdGhlciBwYWdlCisJICogd2UnbGwgbmVlZCB0byB0aGUgcmlnaHQgKG9yIHRv IHRoZSBsZWZ0KSBhaGVhZCBvZiBfYnRfcmVhZHBhZ2UgY2FsbC4KIAkgKi8KLQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J ZWxzZQotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCW5ld3Bvcy0+bW9yZUxlZnQg PSB0cnVlOworCW5ld3Bvcy0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZvciAoOzspCiAJewogCQlQ YWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05P TkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBv cy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJl Y2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8K LQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6 ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxs ZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFs c2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVs IHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlp ZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFy YWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0J CQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJl cXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+ bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25v ICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewog CQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1Zihy ZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJlbCwg Ymxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywgYXZv aWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3VyclBv cy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKLQkJCQkJCQkJ CQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlk QnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJl bCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxhc3RjdXJyYmxrbm8pOworCQkJaWYgKG5ld2Jh dGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBh IGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0lu dmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJ CXJldHVybiBmYWxzZTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5l d2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3Rj dXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0y NDMxLDE3ICsyMjg0LDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC bG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24g dGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewot CQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9w ICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1 ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAor CQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7 Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IG5ld3Bvcy0+ bmV4dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2ls bCBjbGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uo c2NhbiwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0g c28tPmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBuZXdwb3MtPnByZXZQYWdlOwogCQkJ fQogCQl9CiAJCWVsc2UKQEAgLTI0NTYsMTkgKzIzMDksMzYgQEAgX2J0X3JlYWRuZXh0cGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0 Y2hpbmcgdHVwbGVzIG9uIHRoaXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQ b3MuYnVmKTsKLQkJc2VpemVkID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdl IChvciBieSB1cykgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIG5ld2JhdGNoLT5idWYpOworCQluZXdi YXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0 aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIW5ld3Bvcy0+bW9yZVJpZ2h0IDogIW5ld3Bvcy0+ bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5k ZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFByaW1T Y2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkgKi8K KwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkv KiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8K KwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9z ZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCQlyZXR1cm4gTlVM TDsJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCisJCWZpcnN0 cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8q Ci0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0 aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0 dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFn ZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J X2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBz dWNjZWVkZWQgKi8KKwlBc3NlcnQobmV3cG9zLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhf YmF0Y2hfdW5sb2NrKHJlbCwgc2Nhbi0+YmF0Y2hTdGF0ZSAmJiBzY2FuLT5iYXRjaFN0YXRlLT5k cm9wUGluLAorCQkJCQkgICBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3 YmF0Y2g7CiB9CiAKIC8qCkBAIC0yNjkxLDI1ICsyNTYxLDIzIEBAIF9idF9nZXRfZW5kcG9pbnQo UmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwg c2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVy ZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgog ICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNo KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVl IHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdl T3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFz c2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkv KgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4g IFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICov Ci0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkKGRpcikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQo cmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNW YWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5i dWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9u LCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTI3MjAsNyArMjU4OCw3IEBAIF9idF9lbmRw b2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4gZmFs c2U7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdl ID0gQnVmZmVyR2V0UGFnZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9w YXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTI3NDYsOSArMjYx NCw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2Fu LgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsK KwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggYWIwZjk4YjAyLi45ODcy ZGU4N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTEwMjIsMTQgKzEw MjIsNiBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCSAqIFJlc3RvcmUgdGhlIGFycmF5IGtleXMgdG8gdGhl IHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKIAkgKiB3ZXJlIGNhbGxl ZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJhdGNoZXQgaW4gdGhl CiAJICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhvdXQgdGhpcywgc2Nh bnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNjYW4KLQkgKiBkaXJl Y3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1bnMgb3V0IG9mIGl0 ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBhZ2UgcHJlcGFyZXMg YWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdlIGluIHNvLT5jdXJy UG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAqIHR5cGljYWwgZm9y IHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVwbGUgZmluYWxseQot CSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFsaWRhdGUgdGhlIHNj YW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHlldCwgdGhvdWdoIC0t IGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCiAJICovCiAJX2J0X3N0YXJ0X2Fy cmF5X2tleXMoc2NhbiwgLWRpcik7CiAKQEAgLTEzOTYsNyArMTM4OCw3IEBAIF9idF9hZHZhbmNl X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwK IHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlTY2FuRGlyZWN0aW9uIGRpciA9IHNv LT5jdXJyUG9zLmRpcjsKKwlTY2FuRGlyZWN0aW9uIGRpciA9IHNvLT5wb3MtPmRpcjsKIAlpbnQJ CQlhcnJheWlkeCA9IDA7CiAJYm9vbAkJYmV5b25kX2VuZF9hZHZhbmNlID0gZmFsc2UsCiAJCQkJ c2tpcF9hcnJheV9hZHZhbmNlZCA9IGZhbHNlLApAQCAtMjAzMywxMyArMjAyNSwxMyBAQCBuZXdf cHJpbV9zY2FuOgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0aGUg Y3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1c2VkIHdpdGhpbiBfYnRf bmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBhZ2UuCiAJICogSXQgaXMg dXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHByaW1pdGl2ZSBpbmRleCBz Y2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bw b3NpdGUgY3VyclBvcy5kaXIuCisJICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRo ZSBkaXJlY3Rpb24gb3Bwb3NpdGUgcG9zLT5kaXIuCiAJICovCiAJcHN0YXRlLT5jb250aW51ZXNj YW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNvLT5u ZWVkUHJpbVNjYW4gPSB0cnVlOwkvKiAuLi5idXQgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KIAog CWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1 bGUoc2Nhbiwgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5f c2NoZWR1bGUoc2Nhbiwgc28tPnBvcy0+Y3VyclBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUg ZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yMTUyLDcg KzIxNDQsNyBAQCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0 YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogewogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVs YXRpb25HZXREZXNjcihzY2FuLT5pbmRleFJlbGF0aW9uKTsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JU2NhbkRpcmVjdGlvbiBkaXIgPSBzby0+Y3Vy clBvcy5kaXI7CisJU2NhbkRpcmVjdGlvbiBkaXIgPSBzby0+cG9zLT5kaXI7CiAJaW50CQkJaWtl eSA9IHBzdGF0ZS0+c3RhcnRpa2V5OwogCWJvb2wJCXJlczsKIApAQCAtMzMwMiw3ICszMjk0LDcg QEAgX2J0X2NoZWNra2V5c19sb29rX2FoZWFkKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFn ZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkgaW50IHR1cG5hdHRzLCBUdXBsZURlc2MgdHVwZGVzYykK IHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JU2Nh bkRpcmVjdGlvbiBkaXIgPSBzby0+Y3VyclBvcy5kaXI7CisJU2NhbkRpcmVjdGlvbiBkaXIgPSBz by0+cG9zLT5kaXI7CiAJT2Zmc2V0TnVtYmVyIGFoZWFkb2ZmbnVtOwogCUluZGV4VHVwbGUJYWhl YWQ7CiAKQEAgLTMzNzYsNjkgKzMzNjgsNjcgQEAgX2J0X2NoZWNra2V5c19sb29rX2FoZWFkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsCiAgKiBjdXJyZW50IHBh Z2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5 IGJlCiAgKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91 bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xk IGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQg c3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZl ciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBu b3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJhdGNoIHBvc2l0aW9uJ3MgcGFnZSwgYnV0IG11c3QgaG9s ZCBhCisgKiBidWZmZXIgcGluIHdoZW4gIWRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3Rp bGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQnbGwKKyAqIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIg cGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCiAgKiBXZSBtYXRjaCBpdGVt cyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8g c2V0CiAgKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIg cGluIG9uIHRoZSB0YXJnZXQgcGFnZQogICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJl YWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBp cyBhICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0 ZW1zIG9uIHRoZQorICogKGlmIGl0IGlzIGEgIWRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3Qg aGF2ZSBkZWxldGVkIGFueSBpdGVtcyBvbiB0aGUKICAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElE cyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNsZWQgYnkgbm93LiAgVGhlcmUncyBubyByaXNrCiAgKiB0 aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcgaW5kZXggdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBh IHJlY3ljbGVkIFRJRAogICogd2l0aCBhIG5vdy1yZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUg VElEICh0aGF0IHVzZWQgdG8gYmUgb24gdGhpcyBzYW1lCiAgKiBwYWdlKS4gIFdlIGNhbid0IHJl bHkgb24gdGhhdCBkdXJpbmcgc2NhbnMgdGhhdCBkcm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAq IChzby0+ZHJvcFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGlu ZyBMUF9ERUFEIGJpdHMgb24KKyAqIChpLmUuIGRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdl IG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCiAgKiB0aGUgcGFnZSBMU04g aGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBw YWdlLgogICogV2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4g dGhlIHBhZ2UgTFNOIGNoYW5nZWQuCiAgKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4g ZHVyaW5nICFzby0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCisgKiBXZSB0 ZW5kIHRvIGdpdmUgdXAgbGVzcyBvZnRlbiBkdXJpbmcgIWRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBz dGlsbCBoYXBwZW5zLgogICogV2UgY29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92 ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlvbnMuICBJZiBhbgogICogaXRlbSBoYXMgbW92ZWQgb2Zm IHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAog ICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBpdC4KICAqLwogdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pCitfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK LQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRTY2Fu UG9zCXBvcyA9IChCVFNjYW5Qb3MpIGJhdGNoLT5wb3M7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VP cGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9m ZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOworCWludAkJCW51bUtpbGxlZCA9 IGJhdGNoLT5udW1LaWxsZWQ7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CiAJQnVm ZmVyCQlidWY7CiAKIAlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZCgqcG9zKSk7CiAJ QXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRtYXAg aW5kZXggc2NhbiAqLwogCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1zW10g YmVmb3JlIGxlYXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKKwkvKiBB bHdheXMgaW52YWxpZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgZnJlZWluZyBiYXRj aCAqLworCWJhdGNoLT5udW1LaWxsZWQgPSAwOwogCi0JaWYgKCFzby0+ZHJvcFBpbikKKwlpZiAo IXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4pCiAJewogCQkvKgogCQkgKiBXZSBoYXZlIGhlbGQg dGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAogCQkg KiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJl dmVudGVkCiAJCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhl IFRJRHMgb24gdGhlIHBhZ2UuCiAJCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28t PmN1cnJQb3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYgPSBiYXRjaC0+YnVm OwogCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7CiAJfQogCWVsc2UKIAl7CiAJCVhM b2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpKTsKIAkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0JCWJ1ZiA9IF9idF9n ZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7CisJCWJ1ZiA9IF9idF9n ZXRidWYocmVsLCBwb3MtPmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQlsYXRlc3Rsc24gPSBCdWZm ZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBsYXRlc3Rs c24pOwotCQlpZiAoc28tPmN1cnJQb3MubHNuICE9IGxhdGVzdGxzbikKKwkJQXNzZXJ0KGJhdGNo LT5sc24gPD0gbGF0ZXN0bHNuKTsKKwkJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQogCQl7 CiAJCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCiAJCQlfYnRfcmVsYnVmKHJl bCwgYnVmKTsKQEAgLTM0NTUsMTIgKzM0NDUsMTEgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4pCiAKIAlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQogCXsKLQkJ aW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Qb3NJdGVtICpr aXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXgg PSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJCUluZGV4U2NhbkJhdGNoUG9zSXRlbSAqa2l0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAJCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRl bS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJCUFz c2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKIAkJaWYgKG9mZm51bSA8IG1pbm9mZikKIAkJCWNvbnRpbnVlOwkJCS8qIHB1 cmUgcGFyYW5vaWEgKi8KIAkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCkBAIC0zNDg1LDcgKzM0 NzQsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkgKiBjb3JyZWN0 bmVzcy4KIAkJCQkgKgogCQkJCSAqIE5vdGUgdGhhdCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1v ZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0JCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAo aW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwgc28gaXQncworCQkJCSAqIHNpbmNlIHdlIGZpcnN0 IHJlYWQgaXQgKGluIHRoZSAhZHJvcFBpbiBjYXNlKSwgc28gaXQncwogCQkJCSAqIHBvc3NpYmxl IHRoYXQgdGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fzbid0IGEgcG9zdGluZyBsaXN0CiAJCQkJ ICogdHVwbGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJlZCBpdHMgaGVhcCBUSURzLgogCQkJCSAq LwpAQCAtMzUwMSw3ICszNDkwLDggQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAJCQkJCSAqIHRob3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFnZSBj YW4ndAogCQkJCQkgKiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCiAJCQkJCSAqLwot CQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQaW4p OworCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fAorCQkJCQkJICAg IXNjYW4tPmJhdGNoU3RhdGUtPmRyb3BQaW4pOwogCiAJCQkJCS8qCiAJCQkJCSAqIFJlYWQtYWhl YWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCkBAIC0zNTE4LDcgKzM1MDgsNyBAQCBfYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVw bGUgc3RpbGwgZ2V0cyBraWxsZWQpLgogCQkJCQkgKi8KIAkJCQkJaWYgKHBpIDwgbnVtS2lsbGVk KQotCQkJCQkJa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytd XTsKKwkJCQkJCWtpdGVtID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+a2lsbGVkSXRlbXNbcGkrK11d OwogCQkJCX0KIAogCQkJCS8qCkBAIC0zNTY4LDcgKzM1NTgsNyBAQCBfYnRfa2lsbGl0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0K IAotCWlmICghc28tPmRyb3BQaW4pCisJaWYgKCFzY2FuLT5iYXRjaFN0YXRlLT5kcm9wUGluKQog CQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKIAllbHNlCiAJCV9idF9yZWxidWYocmVsLCBidWYp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDg3YzMxZGE3MS4uOWNiYjc3 NDM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC05MCw4ICs5MCw3IEBA IHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBz cGdnZXR0dXBsZTsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwOwogCWFt cm91dGluZS0+YW1lbmRzY2FuID0gc3BnZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9 IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9z cmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7 CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1w YXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDU3MTJm YWMzNi4uNmQ4OTVlNGZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODgwLDcgKzg4 MCw3IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBk b2VzIG5vdCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4ZXMiLAogCQkJCQkJYWNjZXNzTWV0aG9k TmFtZSkpKTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxM KQorCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1S b3V0aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBt ZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIiwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAxZDBlOGFkNTcuLmFjMzM3ZDkwMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBbWkuYwpAQCAtNDI4LDcgKzQyOCw3IEBAIEV4ZWNTdXBwb3J0c01hcmtSZXN0b3JlKFBh dGggKnBhdGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAogCQkJLyoKLQkJCSAqIE5v dCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisJCQkgKiBOb3QgYWxsIGlu ZGV4IHR5cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFyawogCQkJICovCiAJCQlyZXR1cm4gY2Fz dE5vZGUoSW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4aW5mby0+YW1jYW5tYXJrcG9zOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBmNDY0Y2NhOTUuLjVl N2JhZmUwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC00 OSw3ICs0OSwxMyBAQAogc3RhdGljIFR1cGxlVGFibGVTbG90ICpJbmRleE9ubHlOZXh0KEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBTdG9yZUluZGV4VHVwbGUoSW5kZXhP bmx5U2NhblN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQlJbmRleFR1 cGxlIGl0dXAsIFR1cGxlRGVzYyBpdHVwZGVzYyk7CitzdGF0aWMgYm9vbCBpb3NfcHJlZmV0Y2hf YmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCB2b2lkICphcmcsCisJCQkJCQkJICAgSW5kZXhTY2Fu QmF0Y2hQb3MgKnBvcyk7CiAKKy8qIHZhbHVlcyBzdG9yZWQgaW4gaW9zX3ByZWZldGNoX2Jsb2Nr IGluIHRoZSBiYXRjaCBjYWNoZSAqLworI2RlZmluZQkJSU9TX1VOS05PV05fVklTSUJJTElUWQkJ MAkvKiBkZWZhdWx0IHZhbHVlICovCisjZGVmaW5lCQlJT1NfQUxMX1ZJU0lCTEUJCQkJMQorI2Rl ZmluZQkJSU9TX05PVF9BTExfVklTSUJMRQkJCTIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUluZGV4T25s eU5leHQKQEAgLTEwMyw2ICsxMDksMTcgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CiAJ CW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCisJCS8qCisJCSAqIFNldCB0 aGUgcHJlZmV0Y2ggY2FsbGJhY2sgaW5mbywgaWYgdGhlIHNjYW4gaGFzIGJhdGNoaW5nIGVuYWJs ZWQKKwkJICogKHdlIG9ubHkga25vdyB3aGF0IGFmdGVyIGluZGV4X2JlZ2luc2Nhbiwgd2hpY2gg YWxzbyBjaGVja3Mgd2hpY2gKKwkJICogY2FsbGJhY2tzIGFyZSBkZWZpbmVkIGZvciB0aGUgQU0u CisJCSAqLworCQlpZiAoc2NhbmRlc2MtPmJhdGNoU3RhdGUgIT0gTlVMTCkKKwkJeworCQkJc2Nh bmRlc2MtPmJhdGNoU3RhdGUtPnByZWZldGNoID0gaW9zX3ByZWZldGNoX2Jsb2NrOworCQkJc2Nh bmRlc2MtPmJhdGNoU3RhdGUtPnByZWZldGNoQXJnID0gKHZvaWQgKikgbm9kZTsKKwkJfQorCiAJ CS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJl YWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFzcyB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFN LgpAQCAtMTIwLDEwICsxMzcsNDIgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUpCiAJICovCiAJd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywg ZGlyZWN0aW9uKSkgIT0gTlVMTCkKIAl7CisJCWJvb2wJCWFsbF92aXNpYmxlOwogCQlib29sCQl0 dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCisJ CS8qCisJCSAqIFdpdGhvdXQgYmF0Y2hpbmcsIGluc3BlY3QgdGhlIFZNIGRpcmVjdGx5LiBXaXRo IGJhdGNoaW5nLCB3ZSBuZWVkCisJCSAqIHRvIHJldHJpZXZlIHRoZSB2aXNpYmlsaXR5IGluZm9y bWF0aW9uIHNlZW4gYnkgdGhlIHJlYWRfc3RyZWFtCisJCSAqIGNhbGxiYWNrIChvciByYXRoZXIg YnkgaW9zX3ByZWZldGNoX2Jsb2NrKSwgb3RoZXJ3aXNlIHRoZQorCQkgKiByZWFkX3N0cmVhbSBt aWdodCBnZXQgb3V0IG9mIHN5bmMgKGlmIHRoZSBWTSBnb3QgdXBkYXRlZCBzaW5jZQorCQkgKiB0 aGVuKS4KKwkJICovCisJCWlmIChzY2FuZGVzYy0+YmF0Y2hTdGF0ZSA9PSBOVUxMKQorCQl7CisJ CQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCisJ CQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkgJm5v ZGUtPmlvc3NfVk1CdWZmZXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFJldXNl IHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgcGFnZSB2aXNpYmlsaXR5IGluZm8sIG9yCisJCQkg KiBjYWxjdWxhdGUgaXQgbm93LiBJZiB3ZSBkZWNpZGVkIG5vdCB0byBwcmVmZXRjaCB0aGUgYmxv Y2ssIHRoZQorCQkJICogcGFnZSBoYWQgdG8gYmUgYWxsLXZpc2libGUgYXQgdGhhdCBwb2ludC4g VGhlIFZNIGJpdCBtaWdodCBoYXZlCisJCQkgKiBjaGFuZ2VkIHNpbmNlIHRoZW4sIGJ1dCB0aGUg dHVwbGUgdmlzaWJpbGl0eSBjb3VsZCBub3QgaGF2ZS4KKwkJCSAqCisJCQkgKiBYWFggSXQncyBh IGJpdCB3ZWlyZCB3ZSB1c2UgdGhlIHZpc2liaWxpdHkgdG8gZGVjaWRlIGlmIHdlCisJCQkgKiBz aG91bGQgc2tpcCBwcmVmZXRjaGluZyB0aGUgYmxvY2ssIGFuZCB0aGVuIGRlZHVjZSB0aGUKKwkJ CSAqIHZpc2liaWxpdHkgZnJvbSB0aGF0IChldmVuIGlmIGl0IG1hdGNoZXMgcHJldHR5IGNsZWFy bHkpLiBCdXQKKwkJCSAqIG1heWJlIHdlIGNvdWxkL3Nob3VsZCBoYXZlIGEgbW9yZSBkaXJlY3Qg d2F5IHRvIHJlYWQgdGhlCisJCQkgKiBwcml2YXRlIHN0YXRlPworCQkJICovCisJCQlhbGxfdmlz aWJsZSA9ICFpb3NfcHJlZmV0Y2hfYmxvY2soc2NhbmRlc2MsIG5vZGUsCisJCQkJCQkJCQkJCSAg JnNjYW5kZXNjLT5iYXRjaFN0YXRlLT5yZWFkUG9zKTsKKwkJfQorCiAJCS8qCiAJCSAqIFdlIGNh biBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBv bgogCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4g IEluIGFueSBjYXNlLApAQCAtMTU4LDkgKzIwNyw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlKQogCQkgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21w bGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawogCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGlj aCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgogCQkgKi8KLQkJaWYgKCFWTV9B TExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9kZS0+aW9zc19WTUJ1ZmZlcikpCisJCWlmICgh YWxsX3Zpc2libGUpCiAJCXsKIAkJCS8qCiAJCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRo ZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCkBAIC04ODksMyArOTM2LDUxIEBAIEV4ZWNJbmRl eE9ubHlTY2FuUmV0cmlldmVJbnN0cnVtZW50YXRpb24oSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KQogCW5vZGUtPmlvc3NfU2hhcmVkSW5mbyA9IHBhbGxvYyhzaXplKTsKIAltZW1jcHkobm9kZS0+ aW9zc19TaGFyZWRJbmZvLCBTaGFyZWRJbmZvLCBzaXplKTsKIH0KKworLyogRklYTUUgZHVwbGlj YXRlIGZyb20gaW5kZXhhbS5jICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaWR4 KQlcCisJCSgoc2NhbiktPmJhdGNoU3RhdGUtPmJhdGNoZXNbKGlkeCkgJSAoc2NhbiktPmJhdGNo U3RhdGUtPm1heEJhdGNoZXNdKQorCisvKgorICogaW9zX3ByZWZldGNoX2Jsb2NrCisgKgkJQ2Fs bGJhY2sgdG8gb25seSBwcmVmZXRjaCBibG9ja3MgdGhhdCBhcmUgbm90IGFsbC12aXNpYmxlLgor ICoKKyAqIFdlIGRvbid0IHdhbnQgdG8gaW5zcGVjdCB0aGUgdmlzaWJpbGl0eSBtYXAgcmVwZWF0 ZWRseSwgc28gdGhlIHJlc3VsdCBvZgorICogVk1fQUxMX1ZJU0lCTEUgaXMgc3RvcmVkIGluIHRo ZSBiYXRjaCBwcml2YXRlIGRhdGEuIFRoZSB2YWx1ZXMgYXJlIHNldAorICogdG8gMCBieSBkZWZh dWx0LCBzbyB3ZSB1c2UgdHdvIGNvbnN0YW50cyB0byByZW1lbWJlciBpZiBhbGwtdmlzaWJsZSBv cgorICogbm90IGFsbC12aXNpYmxlLgorICoKKyAqIEhvd2V2ZXIsIHRoaXMgaXMgbm90IG1lcmVs eSBhIHF1ZXN0aW9uIG9mIHBlcmZvcm1hbmNlLiBUaGUgVk0gbWF5IGdldAorICogbW9kaWZpZWQg ZHVyaW5nIHRoZSBzY2FuLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHR3byBwbGFjZXMg KHRoZQorICogcmVhZF9uZXh0IGNhbGxiYWNrIGFuZCB0aGUgaW5kZXhfZmV0Y2hfaGVhcCBoZXJl KSBtYWtlIHRoZSBzYW1lIGRlY2lzaW9uLAorICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGdldCBvdXQg b2Ygc3luYyB3aXRoIHRoZSBzdHJlYW0uIEZvciBleGFtcGxlLCB0aGUKKyAqIGNhbGxiYWNrIG1p Z2h0IGZpbmQgYSBwYWdlIGlzIGFsbC12aXNpYmxlIChhbmQgc2tpcHMgcmVhZGluZyB0aGUgYmxv Y2spLAorICogYW5kIHRoZW4gc29tZW9uZSBtaWdodCB1cGRhdGUgdGhlIHBhZ2UsIHJlc2V0dGlu ZyB0aGUgVk0gYml0LiBJZiB0aGlzCisgKiBwbGFjZSBhdHRlbXB0cyB0byByZWFkIHRoZSBwYWdl IGZyb20gdGhlIHN0cmVhbSwgaXQnbGwgZmFpbCBiZWNhdXNlIGl0CisgKiB3aWxsIHByb2JhYmx5 IHJlY2VpdmUgYW4gZW50aXJlbHkgZGlmZmVyZW50IHBhZ2UuCisgKi8KK3N0YXRpYyBib29sCitp b3NfcHJlZmV0Y2hfYmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCB2b2lkICphcmcsIEluZGV4U2Nh bkJhdGNoUG9zICpwb3MpCit7CisJSW5kZXhPbmx5U2NhblN0YXRlICpub2RlID0gKEluZGV4T25s eVNjYW5TdGF0ZSAqKSBhcmc7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBJTkRFWF9TQ0FOX0JB VENIKHNjYW4sIHBvcy0+YmF0Y2gpOworCisJaWYgKGJhdGNoLT5pdGVtc3Zpc2liaWxpdHkgPT0g TlVMTCkKKwkJYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eSA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICog KGJhdGNoLT5sYXN0SXRlbSArIDEpKTsKKworCWlmIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5W3Bv cy0+aW5kZXhdID09IElPU19VTktOT1dOX1ZJU0lCSUxJVFkpCisJeworCQlib29sCQlhbGxfdmlz aWJsZTsKKwkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1twb3MtPmluZGV4XS5oZWFw VGlkOworCisJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9u LAorCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCSAm bm9kZS0+aW9zc19WTUJ1ZmZlcik7CisKKwkJYmF0Y2gtPml0ZW1zdmlzaWJpbGl0eVtwb3MtPmlu ZGV4XSA9CisJCQlhbGxfdmlzaWJsZSA/IElPU19BTExfVklTSUJMRSA6IElPU19OT1RfQUxMX1ZJ U0lCTEU7CisJfQorCisJLyogcHJlZmV0Y2ggb25seSBibG9ja3MgdGhhdCBhcmUgbm90IGFsbC12 aXNpYmxlICovCisJcmV0dXJuIChiYXRjaC0+aXRlbXN2aXNpYmlsaXR5W3Bvcy0+aW5kZXhdID09 IElPU19OT1RfQUxMX1ZJU0lCTEUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMKaW5kZXggOTQwNzdlNmEwLi5hYjI3NTZkNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYwpAQCAtMTQ0LDYgKzE0NCw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAyOwogCiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQll bmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxl X2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IGY0YjczNDNkYS4uYTMxNTQzOWRjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTMsMTEgKzMxMywxMSBAQCBnZXRf cmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJv b2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2Vh cmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hu dWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVs OwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5V TEwpOworCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9 IE5VTEwgfHwKKwkJCQkJCQkJCSAgIGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAkJ CQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCAm JgogCQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAhPSBO VUxMOwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IChhbXJvdXRpbmUtPmFtbWFya3BvcyAhPSBO VUxMICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJCQlp bmZvLT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUtPmFtcG9zcmVzZXQgIT0gTlVMTDsKIAkJCQlp bmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGU7CiAJCQkJQXNz ZXJ0KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggNzQ1ZmQzYmFiLi5kZTZjNjZhMTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTg4OCw3ICs4ODgs OCBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWws IEF0dHJNYXAgKmF0dHJtYXApCiAJICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVz dCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCiAJICogYmUgdXNlZCBsYXRlciB0 byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4K IAkgKi8KLQlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFt LCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFt SWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJgor CQlHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+ YW1nZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDAzMWZkZTlmNC4uZTM0ZTYwMDYw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk5LDYgKzk5LDcgQEAg c3RydWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJZm9yd2FyZGVkX2J1ZmZlcnM7CiAJaW50MTYJCXBp bm5lZF9idWZmZXJzOwogCWludDE2CQlkaXN0YW5jZTsKKwlpbnQxNgkJZGlzdGFuY2Vfb2xkOwog CWludDE2CQlpbml0aWFsaXplZF9idWZmZXJzOwogCWludAkJCXJlYWRfYnVmZmVyc19mbGFnczsK IAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRob2Q9c3luYyAqLwpAQCAtNDY0LDYg KzQ2NSw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCQlp ZiAoYmxvY2tudW0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQl7CiAJCQkvKiBFbmQgb2Ygc3Ry ZWFtLiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJ c3RyZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODYyLDYgKzg2NCw3IEBA IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9i dWZmZXJfZGF0YSkKIAkJZWxzZQogCQl7CiAJCQkvKiBObyBtb3JlIGJsb2NrcywgZW5kIG9mIHN0 cmVhbS4gKi8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5kaXN0YW5jZTsKIAkJ CXN0cmVhbS0+ZGlzdGFuY2UgPSAwOwogCQkJc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4ID0g c3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsKIAkJCXN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPSAw OwpAQCAtMTA0Niw2ICsxMDQ5LDkgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCWludDE2CQlpbmRleDsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAorCS8qIHJlbWVtYmVyIHRo ZSBvbGQgZGlzdGFuY2UgKGlmIHdlIHJlc2V0IGJlZm9yZSBlbmQgb2YgdGhlIHN0cmVhbSkgKi8K KwlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IE1heChzdHJlYW0tPmRpc3RhbmNlLCBzdHJlYW0tPmRp c3RhbmNlX29sZCk7CisKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCiAJc3RyZWFtLT5kaXN0 YW5jZSA9IDA7CiAKQEAgLTEwNzgsOCArMTA4NCwxMiBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFk U3RyZWFtICpzdHJlYW0pCiAJQXNzZXJ0KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPT0gMCk7CiAJ QXNzZXJ0KHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDApOwogCi0JLyogU3RhcnQgb2ZmIGFz c3VtaW5nIGRhdGEgaXMgY2FjaGVkLiAqLwotCXN0cmVhbS0+ZGlzdGFuY2UgPSAxOworCS8qCisJ ICogUmVzdG9yZSB0aGUgb2xkIGRpc3RhbmNlLCBpZiB3ZSBoYXZlIG9uZS4gT3RoZXJ3aXNlIHN0 YXJ0IGFzc3VtaW5nIGRhdGEKKwkgKiBpcyBjYWNoZWQuCisJICovCisJc3RyZWFtLT5kaXN0YW5j ZSA9IE1heCgxLCBzdHJlYW0tPmRpc3RhbmNlX29sZCk7CisJc3RyZWFtLT5kaXN0YW5jZV9vbGQg PSAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKaW5kZXggMGFmMjZkNmFjLi4xZWJl MGE3NmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwpAQCAtMzYzLDcgKzM2Myw3IEBAIGluZGV4 YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0J CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJ CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSB8fCByb3V0aW5lLT5hbWdldGJh dGNoID8gdHJ1ZSA6IGZhbHNlKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46CiAJCQkJ UEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOwpAQCAt MzkyLDcgKzM5Miw3IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFN UFJPUF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUg PyB0cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSB8 fCByb3V0aW5lLT5hbWdldGJhdGNoID8gdHJ1ZSA6IGZhbHNlKTsKIAogCQljYXNlIEFNUFJPUF9D QU5fSU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGNiMjNhZDUyNy4uNjUyYmI0YzUzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtNjc4Miw2ICs2NzgyLDEwIEBAIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBhIGh1Z2UgYW1vdW50IG9mIHRp bWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkgaGVhcAogCSAq IHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVu ZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBn X3N0YXRpc3RpYy4KKwkgKgorCSAqIFhYWCBXZSdyZSBub3QgdXNpbmcgaW9zX3ByZWZldGNoX2Js b2NrIGhlcmUuICBUaGF0IGNyZWF0ZXMgYSB3aW5kb3cKKwkgKiB3aGVyZSB0aGUgc2NhbidzIHJl YWQgc3RyZWFtIGNhbiBnZXQgb3V0IG9mIHN5bmMuICBBdCBhIG1pbmltdW0gd2UnbGwKKwkgKiBu ZWVkIHRvIGNsb3NlIHRoaXMgd2luZG93IGJ5IGV4cGxpY2l0bHkgZGlzYWJsaW5nIGhlYXAgSS9P IHByZWZldGNoaW5nLgogCSAqLwogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3RO b25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGQ2ZmM4MzMzOC4uZmMw Y2FmODQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAt NTQsNiArNTQsMTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdl bmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BH Q19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNj ID0+ICdFbmFibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seS1z Y2Fucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxl X2luZGV4c2Nhbl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFt ZSA9PiAnZW5hYmxlX2JpdG1hcHNjYW4nLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdD X1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2Mg PT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGJpdG1hcC1zY2FuIHBsYW5zLicsCiAg IGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZjYyYjYxOTY3Li4yMGEwZmZhYTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQxMiw2ICs0MTIs NyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0g b24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRj aCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5h YmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBi L2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDJjMGU3MWVlZC4uM2UwMDE0OTMwIDEwMDY0 NAotLS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRp bHMuYwpAQCAtMTQ4LDggKzE0OCw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFt cm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGJs Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYmxlbmRzY2FuOwotCWFtcm91dGlu ZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFt cm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxs ZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDYzZDdl Mzc2Zi4uZTM2NTE5YWI3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2Myw4ICsxNjMsNyBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBs ZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRi aXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRz Y2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7ICAgICAgIC8qIGNhbiBiZSBO VUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAgICAgLyogY2FuIGJl IE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBO VUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxsZWwg aW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0 aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBOVUxMICovCkBAIC03ODksMzIgKzc4OCwy NSBAQCBhbWVuZHNjYW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1s aXN0aW5nPgogdm9pZAotYW1tYXJrcG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNl dCAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBNYXJrIGN1cnJl bnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3MgbWV0aG9kIG5lZWQgb25seSBzdXBwb3J0IG9u ZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9uIHBlciBzY2FuLgorICAgTm90aWZ5IGluZGV4 IEFNIHRoYXQgY29yZSBjb2RlIHdpbGwgY2hhbmdlIHRoZSBzY2FuJ3MgcG9zaXRpb24gdG8gYW4g aXRlbQorICAgcmV0dXJuZWQgYXMgcGFydCBvZiBhbiBlYXJsaWVyIGJhdGNoLiAgVGhlIGluZGV4 IEFNIG11c3QgdGhlcmVmb3JlCisgICBpbnZhbGlkYXRlIGFueSBzdGF0ZSB0aGF0IGluZGVwZW5k ZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKyAgIChlLmcuLCBhcnJheSBrZXlzIHVz ZWQgd2l0aCBhIFNjYWxhckFycmF5T3BFeHByIHF1YWwpLiAgQ2FsbGVkIGJ5IHRoZSBjb3JlCisg ICBzeXN0ZW0gd2hlbiBpdCBpcyBhYm91dCB0byByZXN0b3JlIGEgbWFyay4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlv biBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRz IG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1h cmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRp bmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgotICA8L3BhcmE+ Ci0KLSAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNj YW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8g dGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9u bHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQg c2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9z dHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1 Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+ YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0 aGUgYWNjZXNzCisgICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBkb2Vz bid0LCB0aGUgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAg aW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qgc2hv dWxkIGJlIHNldCB0bworICAgTlVMTC4gIEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55IHBy aXZhdGUgc3RhdGUgdGhhdCBtaWdodCBuZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdodCBz dGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBwcm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0ZmllbGQ+ YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3NyZXNl dDwvZnVuY3Rpb24+CisgICBpcyBzZXQgdG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgYXNz dW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRvIHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9uLgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15 X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4 X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggOTRlZjYzOWI2Li5iZTFiMGY1NWMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYworKysg Yi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAgLTMx OSw4ICszMTksNyBAQCBkaWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFt Z2V0dHVwbGUgPSBOVUxMOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBOVUxMOwogCWFtcm91 dGluZS0+YW1lbmRzY2FuID0gZGllbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlh bXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFs bGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5k ZXggM2IzN2ZhZmE2Li45NzAyZTMxMDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19z ZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9z b3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAgICAgIHwgb24KICBl bmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9pbmRleHNjYW5fcHJl ZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAgICAgICAgIHwgb24KICBl bmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZXJnZWpvaW4gICAg ICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcg ZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFz Y2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAg IHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDI1IHJvd3MpCiso MjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBm b3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBh YnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4K ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMDE4YjU5MTljLi5kMDE4YmIwNjcgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xOTMsNiArMTkzLDggQEAgQk9PTAogQk9PTEVBTgog Qk9YCiBCVEFycmF5S2V5SW5mbworQlRCYXRjaEluZm8KK0JUQmF0Y2hTY2FuUG9zRGF0YQogQlRC dWlsZFN0YXRlCiBCVENhbGxiYWNrU3RhdGUKIEJUQ3ljbGVJZApAQCAtMTI2OCw2ICsxMjcwLDEw IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8K IEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2hEYXRhCitJbmRleFNjYW5CYXRjaFBvcworSW5kZXhT Y2FuQmF0Y2hQb3NJdGVtCitJbmRleFNjYW5CYXRjaGVzCiBJbmRleFNjYW5EZXNjCiBJbmRleFNj YW5JbnN0cnVtZW50YXRpb24KIEluZGV4U2NhblN0YXRlCkBAIC0zNDI1LDEwICszNDMxLDEwIEBA IGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBh bWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFtZ2V0dHVwbGVfZnVuY3Rpb24KK2FtZ2V0YmF0Y2hf ZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24K IGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCiBhbW9wdGlvbnNf ZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJvcGVydHlfZnVuY3Rpb24K LS0gCjIuNTEuMAoK --000000000000f2d8e40642a54242--