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.96) (envelope-from ) id 1vzOCi-000xXr-1C for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 00:10:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzOCg-00CkBe-2W for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 00:10:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzOCf-00CkBU-2r for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 00:10:34 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzOCd-00000001CZc-1o8i for pgsql-hackers@postgresql.org; Mon, 09 Mar 2026 00:10:33 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5a1362c9a3cso3290421e87.2 for ; Sun, 08 Mar 2026 17:10:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773015030; cv=none; d=google.com; s=arc-20240605; b=O4WQJhYZ0k8OA7Ux4gF+NSm7jSBP2dgsZ/PpCuGAZKnqHwtIvvD7iXs+Rz+d3lJfIX Ox36x17QOMjx5NOpWZ4pF1W4A5AUkzvYJ9EulkgNRs+1B1OdysgBXzpIcMpHKA0Oz//k dPle4jr1k8D+X1Iz2w78T1vwKyrOxk34e85DxWTjA69Qituelt6xC6XfG8i9mGy+9xXR MpIHws/i2IwkBVCtXYBwV/GjQs9HOKDSKpfnM7W9T7yxV4bBblwqJ4HUH98FKSQxwOW3 oyLfFEvFczek6cjMXgTBVpVAnrh1lAB1v609OqY+qlUXpJ96ZX9s0hwgXYZXlaalGqfu bL4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=cLUtXg79w51DWyQFrwQ5+QIDM4isJygCAG/SxCSwU7A=; fh=KcN6qsGYhF3p8iuhc5wDqydh1AoMlBdViJvDrpw+K2I=; b=S3j0BU9NrEGU6Bhh9KkcAJtkZ6PGbWZWGEzbf7cZO9/rBj/IPruXhUNqmxj3twf7z3 34/lFf4z1z2ASbDtUyoZ6eompMHUoJE7WmdakQ2ExpYetZcxBnfAvfDzVvem5pxzEomn mOM5Jd8FrYN1hGEi8HtBnuUTxxinbpdU0zFdx6ZUS4UT+Tiy6+9f+J8gb/3nCxjHO6Gf Hhrepsubu13AT+oETvCfDbhPZjVEEbhPvFeFOUYJUKCuGVVXBqZ8HFmHwg3knnXJVRDr hBvt4yNOmL8GgSkBVw++sguAYgrW0SSTB4A2eJys5IYSGLjxu5o4Kya34c8yZlgenRU4 lqrQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773015030; x=1773619830; darn=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=cLUtXg79w51DWyQFrwQ5+QIDM4isJygCAG/SxCSwU7A=; b=K9jeZ7XpBQp/SBixIYvwCoj0XyoLy5A+w9OEj8ns6GN+6xu+GNGsGm7NbaN0OqOFFS haNUewNqeUPc80LMltWybumOtoYsRGZv+7zLoPdLdWbqxrum0Su2iAvGKVUr5QNjh0HI tzHc8iIMK+gW/qjtNj3khP5QDTCyo6tjOIkzDpIy2Io+OdTre4si5NS5wglvlOt64qHE zwxA30uFLiwg0y+EYibZDBWX6qwBstmaRUkiyf11LM9dTE82TTErhh6z8LMpEOQ2Z+pa mD9sv4qxeoy+9JtV6WYXexp/NiFzIPqx8KXUOhj6zHky+ogxBxdErMPResiRX1pkGebt qkcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773015030; x=1773619830; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cLUtXg79w51DWyQFrwQ5+QIDM4isJygCAG/SxCSwU7A=; b=VumG2O92Tt+cbol6VVWUL////lfXpnUt39+tkZuhD0ChpBFCIHgT+DE4VwFi23t6DG cJ1tM8qQrhkCLI/zduZQQ72+FUlY9sKCaAYyHZY6UkZ4POhX2DRRfZX1R434Po+Fkl2e BDzhPHnoFQBuUPOYDUOlM8V3MDwknf3OhhLtzrNeQldqx/sURdbXMt56ECD4g0Ca7D9b RSvAh/Uz9zeFnjMWZ+C73jYi2ySrZm2fuGufPBbSApe9lvPys4JCID1hgVy3CvHyzJBs aNNrW89gGQvCIaCsH+bPHJMVUPuhIe9h19dwUEdpikU+gqwbjxt85gdF/NmsWZflIeJu vP0g== X-Forwarded-Encrypted: i=1; AJvYcCV+VXeviuhlAdBEs8cFIqVICfzbn9gYIGzAp1nxLR6KOoxRsNMI83dMFW9BGs6qyAy5XEzk5oATHpUXrxsZ@postgresql.org X-Gm-Message-State: AOJu0YxbDTyue8tgIPDWIqp35Cn0oo/j2lwpKYlX07PfpifJnsmiD2CH VEtpeMFUa01B3udi9R5R/zyABCmxHW6yx8b6PQvBzyulUHsqieBQ7rGp07lIWTlsPNxDTsTP340 5/+shdwdeUy5bQ9semH4zwkUjd/lnRTI= X-Gm-Gg: ATEYQzxtlcszNjo52/A+pMg5jtVUwO9bkQxJtCgTXT/AxhbVkOL1aGdkYmFKdEvPhJC L5CSUryr32o61acdTUmtbc1GMT9xQC6OtmWTBYT42xSiA7y6x7GNEuqvO754W/KO6QqPpbr/ec7 RHQGf0ysnz3GiCT1BYw1Px1xRgRm+ISEO/Y5qbu2ahOWakzOofCdsHF2aVoqVoXHfzNMUja6H8K iNEV3R0OzU+GCvo9gVO9NRQxr1U2z3AAHqFe2xkTZrZT0vBtQFpPMbrwV0/Omf2mkPqON2FoPbV kIv8ZIrUxXXWwd1xjzUou1ExjP09NwohVuYZrlyZ2U+ffoJHz5VD5I3E0cPqS5ZUijljb+UTtGS ZdW8= X-Received: by 2002:ac2:4c55:0:b0:5a1:2fa5:b98f with SMTP id 2adb3069b0e04-5a13ccf2949mr2597548e87.26.1773015029681; Sun, 08 Mar 2026 17:10:29 -0700 (PDT) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> <8010.1764584989@localhost> <5778.1764660480@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Mon, 9 Mar 2026 01:09:00 +0100 X-Gm-Features: AaiRm50MX2xIpHB8_TO_6Zh3KCw1tAxnzjWqKvunnwbtP4IO-wc32920d9VlYl4 Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: Antonin Houska , Hannu Krosing , Sergey Sargsyan , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="00000000000006b179064c8c3b94" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000006b179064c8c3b94 Content-Type: text/plain; charset="UTF-8" Rebased. --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0006-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v30-0006-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nchr2 RnJvbSAwNTZiYjQyZTdjN2Q2ZjJjZGQ4NjdhNThlY2JhMWZmYjUxNGQ4NDZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDYvN10gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCgpTa2lwIHVu bmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBmb3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhl IGluZGV4LWluc2VydCBwYXRoLCBkZXRlY3QgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIGJ5cGFzcyBE YXR1bSB2YWx1ZSBjb21wdXRhdGlvbgotIHNldCBpbmRleFVuY2hhbmdlZD1mYWxzZSBmb3IgYXV4 aWxpYXJ5IGluZGljZXMgdG8gYXZvaWQgcmVkdW5kYW50IGNoZWNrcwoKVGhlc2Ugb3B0aW1pemF0 aW9ucyByZWR1Y2Ugb3ZlcmhlYWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9ucy4K LS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICB8IDExICsrKysrKysrKysr CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyB8ICA1ICsrKystCiAyIGZpbGVz IGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMK aW5kZXggOTExMjVkMzcxNTAuLmVkNTYzZGE1YTMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTE0 LDYgKzI5MTQsMTcgQEAgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlz dENlbGwgICAqaW5kZXhwcl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXgg ZG9lcyBub3QgbmVlZCBhbnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5 KGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBpbmRleElu Zm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwkJeworCQkJdmFsdWVzW2ldID0gUG9pbnRlckdl dERhdHVtKE5VTEwpOworCQkJaXNudWxsW2ldID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm47CisJfQor CiAJaWYgKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgIT0gTklMICYmCiAJCWluZGV4SW5mby0+ aWlfRXhwcmVzc2lvbnNTdGF0ZSA9PSBOSUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhp bmcuYwppbmRleCA5ZDA3MWU0OTVjNi4uY2U3NmEyMTM1NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCkBAIC00MzgsOCArNDM4LDExIEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkgKiBUaGVyZSdzIGRlZmluaXRlbHkgZ29p bmcgdG8gYmUgYW4gaW5kZXhfaW5zZXJ0KCkgY2FsbCBmb3IgdGhpcwogCQkgKiBpbmRleC4gIElm IHdlJ3JlIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGFuIFVQREFURSBzdGF0ZW1lbnQsCiAJCSAq IGNvbnNpZGVyIGlmIHRoZSAnaW5kZXhVbmNoYW5nZWQnID0gdHJ1ZSBoaW50IHNob3VsZCBiZSBw YXNzZWQuCisJCSAqCisJCSAqIEZvciBhdXhpbGlhcnkgaW5kZXhlcywgYWx3YXlzIHBhc3MgZmFs c2UgdG8gc2tpcCB2YWx1ZSBjb21wYXJpc29uIGNoZWNrcywKKwkJICogc2luY2UgYXV4aWxpYXJ5 IGluZGV4ZXMgb25seSBzdG9yZSBUSURzIGFuZCBkb24ndCB0cmFjayB2YWx1ZSBjaGFuZ2VzLgog CQkgKi8KLQkJaW5kZXhVbmNoYW5nZWQgPSAoKGZsYWdzICYgRUlJVF9JU19VUERBVEUpICYmCisJ CWluZGV4VW5jaGFuZ2VkID0gKChmbGFncyAmIEVJSVRfSVNfVVBEQVRFKSAmJiBsaWtlbHkoIWlu ZGV4SW5mby0+aWlfQXV4aWxpYXJ5KSAmJgogCQkJCQkJICBpbmRleF91bmNoYW5nZWRfYnlfdXBk YXRlKHJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkJCQkJZXN0YXRlLAogCQkJCQkJCQkJCQkJCWlu ZGV4SW5mbywKLS0gCjIuNDMuMAoK --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v30-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nchx4 RnJvbSBmZjllZGQyYzUxNDNkMjk5ODc5YTFmYjJhZmYzZGFiMGM4YjA0NDIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMSBKYW4gMjAyNiAxOToyNzo1MiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDIvN10gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSIChTaG9ydC1UZXJtIEluZGV4IFJlcGxhY2VtZW50KSBhY2Nlc3MgbWV0aG9k IGlzIGludHJvZHVjZWQsIGludGVuZGVkIHNvbGVseSBmb3Igc2hvcnQtbGl2ZWQsIGF1eGlsaWFy eSB1c2FnZQoKU1RJUiBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIGFzIGFuIGVwaGVtZXJhbCBoZWxw ZXIgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzLCB0ZW1wb3JhcmlseSBzdG9yaW5nIFRJ RHMgd2l0aG91dCBwcm92aWRpbmcgdGhlIGZ1bGwgZmVhdHVyZXMgb2YgYSB0eXBpY2FsIGFjY2Vz cyBtZXRob2QuIEFzIHN1Y2gsIGl0IHJhaXNlcyB3YXJuaW5ncyBvciBlcnJvcnMgd2hlbiBhY2Nl c3NlZCBvdXRzaWRlIGl0cyBzcGVjaWFsaXplZCB1c2FnZSBwYXRoLgoKUGxhbm5lZCB0byBiZSB1 c2VkIGluIGZvbGxvd2luZyBjb21taXRzLgotLS0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0 dHVwbGUuYyAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUgICAgICAgICB8ICAxOCArCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9zdGlyL3N0aXIuYyAgICAgICAgICAgfCA1NTkgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmggICAgICAgICAgICAgICAgfCAx MTMgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0ICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdCAgICAgICB8ICAgNCArCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhf c2VsZnVuY3MuaCAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0ICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0IHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgIHwg IDI0ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA3NjAgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKCmRpZmYgLS1naXQgYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKaW5kZXggNmE3ZjhjYjRhN2MuLjViNTk4NGUzYWEyIDEwMDY0NAotLS0gYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jCkBAIC0yODUsNiArMjg1LDkgQEAgcGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9u IHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQljYXNlIFNQR0lTVF9BTV9PSUQ6CiAJ CQkJZXJyID0gInNwZ2lzdCBpbmRleCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNUSVJfQU1fT0lE OgorCQkJCWVyciA9ICJzdGlyIGluZGV4IjsKKwkJCQlicmVhazsKIAkJCWNhc2UgQlJJTl9BTV9P SUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCmlu ZGV4IGU4OGQ3MmVhMDM5Li5lYmJjZmE5MDcxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQpAQCAtMTksNiAr MTksNyBAQCBTVUJESVJTCSAgICA9IFwKIAluYnRyZWUgXAogCXJtZ3JkZXNjIFwKIAlzcGdpc3Qg XAorCXN0aXIgXAogCXNlcXVlbmNlIFwKIAl0YWJsZSBcCiAJdGFibGVzYW1wbGUgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDgyYzViMjhlMGFkLi5mMTc4NWI5YTQ1NiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzEzOCw2ICszMTM4LDcgQEAg bGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0 cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRh dGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzE4OSw2ICszMTkwLDcgQEAgbGF6 eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3Vs dCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5m by5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv YWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDVmZDE4ZGU3NGY5Li43MjE5YzY1ZjM2NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScpCiBzdWJk aXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3QnKQorc3Vi ZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScpCiBzdWJk aXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uODc4NWRhYjM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mvc3Rpcgor IworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmls ZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNjZXNzL3N0 aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zdGlyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVp bGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiN2FkMTUzNDZjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVpbGQKQEAg LTAsMCArMSw1IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKworYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorCSdzdGlyLmMnLAor KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3N0aXIvc3Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5lNTUwZDg4OTJlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL3N0aXIuYwpAQCAtMCwwICsxLDU1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1l bnQuCisgKgorICogU1RJUiBpcyBhIHNwZWNpYWxpemVkIGFjY2VzcyBtZXRob2QgdHlwZSBkZXNp Z25lZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIG9mIFRJRCB2YWx1ZXMgZHVyaW5nIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgdHlwaWNhbCBsaWZlY3lj bGUgb2YgYSBTVElSIGluZGV4IGlzOgorICogMS4gY3JlYXRlZCBhcyBhbiBhdXhpbGlhcnkgaW5k ZXggZm9yIENJQy9SSUMKKyAqIDIuIGFjY2VwdHMgaW5zZXJ0cyBmb3IgYSBwZXJpb2QKKyAqIDMu IHN0aXJidWxrZGVsZXRlIGNhbGxlZCBkdXJpbmcgaW5kZXggdmFsaWRhdGlvbiBwaGFzZQorICog NC4gZ2V0cyBkcm9wcGVkCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9zdGlyLmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiYWNjZXNzL2FtdmFsaWRhdGUuaCIK KyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxl YW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19h bW9wLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIK KyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKgorICogU3RpciBoYW5kbGVyIGZ1bmN0 aW9uOiByZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMK KyAqIGFuZCBjYWxsYmFja3MuCisgKi8KK0RhdHVtCitzdGlyaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQoreworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUgPSBtYWtlTm9kZShJbmRleEFtUm91 dGluZSk7CisKKwkvKiBTZXQgU1RJUi1zcGVjaWZpYyBzdHJhdGVneSBhbmQgcHJvY2VkdXJlIG51 bWJlcnMgKi8KKwlhbXJvdXRpbmUtPmFtc3RyYXRlZ2llcyA9IFNUSVJfTlNUUkFURUdJRVM7CisJ YW1yb3V0aW5lLT5hbXN1cHBvcnQgPSBTVElSX05QUk9DOworCWFtcm91dGluZS0+YW1vcHRzcHJv Y251bSA9IFNUSVJfT1BUSU9OU19QUk9DOworCisJLyogU1RJUiBkb2Vzbid0IHN1cHBvcnQgbW9z dCBpbmRleCBvcGVyYXRpb25zICovCisJYW1yb3V0aW5lLT5hbWNhbm9yZGVyID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbWNhbm9yZGVyYnlvcCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5iYWNr d2FyZCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW51bmlxdWUgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FubXVsdGljb2wgPSB0cnVlOworCWFtcm91dGluZS0+YW1vcHRpb25hbGtleSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXNl YXJjaG51bGxzID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXN0b3JhZ2UgPSBmYWxzZTsKKwlhbXJv dXRpbmUtPmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0g ZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5h bWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRy dWU7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91 dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPQorCQkJVkFDVVVNX09QVElPTl9QQVJBTExF TF9CVUxLREVMIHwgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DTEVBTlVQOworCWFtcm91dGluZS0+ YW1rZXl0eXBlID0gSW52YWxpZE9pZDsKKworCS8qIFNldCB1cCBmdW5jdGlvbiBjYWxsYmFja3Mg Ki8KKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7CisJYW1yb3V0aW5lLT5hbWJ1aWxk ZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0ID0gc3Rpcmluc2Vy dDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJ1 bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9 IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1jYW5yZXR1cm4gPSBOVUxMOworCWFt cm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVzdGltYXRlOworCWFtcm91dGluZS0+ YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOworCWFtcm91dGluZS0+YW12YWxp ZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVycyA9IE5VTEw7 CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdpbnNjYW47CisJYW1yb3V0aW5lLT5h bXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKKwlh bXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IHN0 aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFt cmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5V TEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+ YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRVUk5fUE9JTlRFUihhbXJvdXRpbmUp OworfQorCisvKgorICogVmFsaWRhdGVzIG9wZXJhdG9yIGNsYXNzIGZvciBTVElSIGluZGV4Lgor ICoKKyAqIFNUSVIgaXMgbm90IGEgcmVhbCBpbmRleCwgc28gdmFsaWRhdGUgbWF5IGJlIHNraXBw ZWQuCisgKiBCdXQgd2UgZG8gaXQganVzdCBmb3IgY29uc2lzdGVuY3kuCisgKi8KK2Jvb2wKK3N0 aXJ2YWxpZGF0ZShPaWQgb3BjbGFzc29pZCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJSGVh cFR1cGxlIGNsYXNzdHVwOworCUZvcm1fcGdfb3BjbGFzcyBjbGFzc2Zvcm07CisJT2lkIG9wZmFt aWx5b2lkOworCUhlYXBUdXBsZSBmYW1pbHl0dXA7CisJRm9ybV9wZ19vcGZhbWlseSBmYW1pbHlm b3JtOworCWNoYXIgKm9wZmFtaWx5bmFtZTsKKwlDYXRDTGlzdCAqb3BybGlzdDsKKwlpbnQgaTsK KworCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KKwljbGFzc3R1cCA9IFNlYXJjaFN5 c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BjbGFzc29pZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBvcGVyYXRvciBjbGFzcyAldSIsIG9wY2xhc3NvaWQpOworCWNsYXNzZm9ybSA9IChG b3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChjbGFzc3R1cCk7CisKKwlvcGZhbWlseW9pZCA9IGNs YXNzZm9ybS0+b3BjZmFtaWx5OworCisJLyogRmV0Y2ggb3BmYW1pbHkgaW5mb3JtYXRpb24gKi8K KwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0 dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmFtaWx5dHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIs IG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVD VChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihmYW1pbHlmb3JtLT5vcGZu YW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBvcnQgZnVuY3Rpb25zIG9m IHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKEFNT1BTVFJB VEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCisJLyogQ2hlY2sgaW5kaXZp ZHVhbCBvcGVyYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3BybGlzdC0+bl9tZW1iZXJzOyBp KyspCisJeworCQlIZWFwVHVwbGUgb3BydHVwID0gJm9wcmxpc3QtPm1lbWJlcnNbaV0tPnR1cGxl OworCQlGb3JtX3BnX2Ftb3Agb3ByZm9ybSA9IChGb3JtX3BnX2Ftb3ApIEdFVFNUUlVDVChvcHJ0 dXApOworCisJCS8qIENoZWNrIGl0J3MgYWxsb3dlZCBzdHJhdGVneSBmb3Igc3RpciAqLworCQlp ZiAob3ByZm9ybS0+YW1vcHN0cmF0ZWd5IDwgMSB8fAorCQkJb3ByZm9ybS0+YW1vcHN0cmF0ZWd5 ID4gU1RJUl9OU1RSQVRFR0lFUykKKwkJeworCQkJZXJlcG9ydChJTkZPLAorCQkJICAgICAgICAo ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCSAgICAgICAg ZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIG9wZXJhdG9yICVzIHdpdGggaW52YWxp ZCBzdHJhdGVneSBudW1iZXIgJWQiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wciksCisJCQkJCSAgICAgICAg b3ByZm9ybS0+YW1vcHN0cmF0ZWd5KSkpOworCQkJcmVzdWx0ID0gZmFsc2U7CisJCX0KKworCQkv KiBzdGlyIGRvZXNuJ3Qgc3VwcG9ydCBPUkRFUiBCWSBvcGVyYXRvcnMgKi8KKwkJaWYgKG9wcmZv cm0tPmFtb3BwdXJwb3NlICE9IEFNT1BfU0VBUkNIIHx8CisJCQlPaWRJc1ZhbGlkKG9wcmZvcm0t PmFtb3Bzb3J0ZmFtaWx5KSkKKwkJeworCQkJZXJlcG9ydChJTkZPLAorCQkJICAgICAgICAoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCSAgICAgICAgZXJy bXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JERVIgQlkgc3BlY2lmaWNh dGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQg PSBmYWxzZTsKKwkJfQorCisJCS8qIENoZWNrIG9wZXJhdG9yIHNpZ25hdHVyZSAtLS0gc2FtZSBm b3IgYWxsIHN0aXIgc3RyYXRlZ2llcyAqLworCQlpZiAoIWNoZWNrX2Ftb3Bfc2lnbmF0dXJlKG9w cmZvcm0tPmFtb3BvcHIsIEJPT0xPSUQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgb3By Zm9ybS0+YW1vcGxlZnR0eXBlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcmZvcm0t PmFtb3ByaWdodHR5cGUpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJCQkgICAgICAgIChlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJICAgICAgICBlcnJt c2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMgd2l0aCB3cm9uZyBzaWdu YXR1cmUiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRf b3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQor CX0KKworCVJlbGVhc2VDYXRDYWNoZUxpc3Qob3BybGlzdCk7CisJUmVsZWFzZVN5c0NhY2hlKGZh bWlseXR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGEtcGFnZSBvZiBhIFNUSVIgaW5kZXguCisgKiBU aGUgc2tpcEluc2VydHMgZmxhZyBkZXRlcm1pbmVzIGlmIG5ldyBpbnNlcnRzIHdpbGwgYmUgYWNj ZXB0ZWQgb3Igc2tpcHBlZC4KKyAqLwordm9pZAorU3RpckZpbGxNZXRhcGFnZShSZWxhdGlvbiBp bmRleCwgUGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cykKK3sKKwlTdGlyTWV0YVBhZ2VE YXRhICptZXRhZGF0YTsKKworCVN0aXJJbml0UGFnZShtZXRhUGFnZSwgU1RJUl9NRVRBKTsKKwlt ZXRhZGF0YSA9IFN0aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisJbWVtc2V0KG1ldGFkYXRhLCAw LCBzaXplb2YoU3Rpck1ldGFQYWdlRGF0YSkpOworCW1ldGFkYXRhLT5tYWdpY051bWJlciA9IFNU SVJfTUFHSUNfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9IHNraXBJbnNlcnRzOwor CSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciA9ICgoY2hhciAqKSBtZXRhZGF0YSAr IHNpemVvZihTdGlyTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBtZXRhUGFnZTsKK30KKworLyoK KyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWV0YXBhZ2UgZm9yIGEgU1RJUiBpbmRleC4K KyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbmRleCBjcmVhdGlvbi4KKyAqLwordm9pZAorU3Rp ckluaXRNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgRm9ya051bWJlciBmb3JrbnVtKQoreworCUJ1 ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisKKwlBc3NlcnQoIVJlbGF0aW9uTmVl ZHNXQUwoaW5kZXgpKTsKKwkvKgorCSAqIE1ha2UgYSBuZXcgcGFnZTsgc2luY2UgaXQgaXMgdGhl IGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAorCSAqIGJsb2NrIG51bWJl ciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQgdG8gaG9sZCB0aGUgZXh0ZW5zaW9u CisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBjb25jdXJyZW50IGluc2VydGVycyB5 ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRlZChpbmRleCwgZm9ya251 bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVG RkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlTVEFSVF9DUklUX1NFQ1RJT04oKTsKKwlBc3NlcnQoQnVm ZmVyR2V0QmxvY2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisK KwltZXRhUGFnZSA9IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJU3RpckZpbGxNZXRhcGFn ZShpbmRleCwgbWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKTsKKworCU1hcmtCdWZm ZXJEaXJ0eShtZXRhQnVmZmVyKTsKKwlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYW55IHBhZ2Ugb2Yg YSBzdGlyIGluZGV4LgorICovCit2b2lkCitTdGlySW5pdFBhZ2UoUGFnZSBwYWdlLCB1aW50MTYg ZmxhZ3MpCit7CisJU3RpclBhZ2VPcGFxdWUgb3BhcXVlOworCisJUGFnZUluaXQocGFnZSwgQkxD S1NaLCBzaXplb2YoU3RpclBhZ2VPcGFxdWVEYXRhKSk7CisKKwlvcGFxdWUgPSBTdGlyUGFnZUdl dE9wYXF1ZShwYWdlKTsKKwlvcGFxdWUtPmZsYWdzID0gZmxhZ3M7CisJb3BhcXVlLT5zdGlyX3Bh Z2VfaWQgPSBTVElSX1BBR0VfSUQ7Cit9CisKKy8qCisgKiBBZGQgYSB0dXBsZSB0byBhIFNUSVIg cGFnZS4gUmV0dXJucyBmYWxzZSBpZiB0aGUgdHVwbGUgZG9lc24ndCBmaXQuCisgKiBUaGUgdHVw bGUgaXMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZS4KKyAqLworc3RhdGljIGJvb2wKK1N0 aXJQYWdlQWRkSXRlbShQYWdlIHBhZ2UsIFN0aXJUdXBsZSAqdHVwbGUpCit7CisJU3RpclR1cGxl ICppdHVwOworCVN0aXJQYWdlT3BhcXVlIG9wYXF1ZTsKKwljaGFyICpwdHI7CisKKwkvKiBXZSBz aG91bGRuJ3QgYmUgcG9pbnRlZCB0byBhbiBpbnZhbGlkIHBhZ2UgKi8KKwlBc3NlcnQoIVBhZ2VJ c05ldyhwYWdlKSk7CisKKwkvKiBEb2VzIHRoZSBuZXcgdHVwbGUgZml0IG9uIHRoZSBwYWdlPyAq LworCWlmIChTdGlyUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IHNpemVvZihTdGlyVHVwbGUpKQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDb3B5IGEgbmV3IHR1cGxlIHRvIHRoZSBlbmQgb2YgdGhl IHBhZ2UgKi8KKwlvcGFxdWUgPSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlpdHVwID0gU3Rp clBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOworCW1lbWNweShpdHVwLCB0 dXBsZSwgc2l6ZW9mKFN0aXJUdXBsZSkpOworCisJLyogQWRqdXN0IG1heG9mZiBhbmQgcGRfbG93 ZXIgKi8KKwlvcGFxdWUtPm1heG9mZisrOworCXB0ciA9IChjaGFyICopIFN0aXJQYWdlR2V0VHVw bGUocGFnZSwgb3BhcXVlLT5tYXhvZmYgKyAxKTsKKwkoKFBhZ2VIZWFkZXIpIHBhZ2UpLT5wZF9s b3dlciA9IHB0ciAtIHBhZ2U7CisKKwkvKiBBc3NlcnQgd2UgZGlkbid0IG92ZXJydW4gYXZhaWxh YmxlIHNwYWNlICovCisJQXNzZXJ0KCgoUGFnZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyIDw9ICgo UGFnZUhlYWRlcikgcGFnZSktPnBkX3VwcGVyKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IEluc2VydCBhIG5ldyB0dXBsZSBpbnRvIGEgU1RJUiBpbmRleC4KKyAqLworYm9vbAorc3Rpcmlu c2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAorCQkgIEl0 ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhlYXBSZWwsCisJCSAgSW5kZXhVbmlxdWVDaGVj ayBjaGVja1VuaXF1ZSwKKwkJICBib29sIGluZGV4VW5jaGFuZ2VkLAorCQkgIHN0cnVjdCBJbmRl eEluZm8gKmluZGV4SW5mbykKK3sKKwlTdGlyVHVwbGUgaXR1cDsKKwlTdGlyTWV0YVBhZ2VEYXRh ICptZXRhRGF0YTsKKwlCdWZmZXIgYnVmZmVyLAorCQkJbWV0YUJ1ZmZlcjsKKwlQYWdlIHBhZ2U7 CisJQmxvY2tOdW1iZXIgYmxrTm87CisKKwlpdHVwLmhlYXBQdHIgPSAqaHRfY3RpZDsKKworCUFz c2VydCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVy KGluZGV4LCBTVElSX01FVEFQQUdFX0JMS05PKTsKKworCWZvciAoOzspCisJeworCQlMb2NrQnVm ZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJbWV0YURhdGEgPSBTdGlyUGFn ZUdldE1ldGEoQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKSk7CisJCS8qIENoZWNrIGlmIGluc2Vy dHMgYXJlIGFsbG93ZWQgKi8KKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5zZXJ0cykKKwkJeworCQkJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQor CQlibGtObyA9IG1ldGFEYXRhLT5sYXN0QmxrTm87CisJCS8qIERvbid0IGhvbGQgbWV0YWJ1ZmZl ciBsb2NrIHdoaWxlIGRvaW5nIGluc2VydCAqLworCQlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJV RkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJaWYgKGJsa05vID4gMCkKKwkJeworCQkJYnVmZmVyID0g UmVhZEJ1ZmZlcihpbmRleCwgYmxrTm8pOworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9M T0NLX0VYQ0xVU0lWRSk7CisJCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKKworCQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNOZXcocGFnZSkpOworCisJ CQkvKiBUcnkgdG8gYWRkIHR1cGxlIHRvIHRoZSBleGlzdGluZyBwYWdlICovCisJCQlpZiAoU3Rp clBhZ2VBZGRJdGVtKHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBTdWNjZXNzISAgQXBwbHkg dGhlIGNoYW5nZSwgY2xlYW4gdXAsIGFuZCBleGl0ICovCisJCQkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisJCQkJRU5EX0NSSVRfU0VDVElPTigpOworCisJCQkJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWZmZXIpOworCQkJCVJlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisJCQkJcmV0dXJuIGZh bHNlOworCQkJfQorCisJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CisJCX0KKworCQkvKiBOZWVkIHRvIGFkZCBhIG5ldyBwYWdlIC0gZ2V0IGV4 Y2x1c2l2ZSBsb2NrIG9uIG1ldGEtcGFnZSAqLworCQlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJV RkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwkJbWV0YURhdGEgPSBTdGlyUGFnZUdldE1ldGEoQnVm ZmVyR2V0UGFnZShtZXRhQnVmZmVyKSk7CisJCS8qIENoZWNrIGlmIGFub3RoZXIgYmFja2VuZCBh bHJlYWR5IGV4dGVuZGVkIHRoZSBpbmRleCAqLworCisJCWlmIChibGtObyAhPSBtZXRhRGF0YS0+ bGFzdEJsa05vKQorCQl7CisJCQlBc3NlcnQoYmxrTm8gPCBtZXRhRGF0YS0+bGFzdEJsa05vKTsK KwkJCS8qIFNvbWVvbmUgZWxzZSBpbnNlcnRlZCB0aGUgbmV3IHBhZ2UgaW50byB0aGUgaW5kZXgs IGxldCdzIHRyeSBhZ2FpbiAqLworCQkJTG9ja0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9D S19VTkxPQ0spOworCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBNdXN0IGV4 dGVuZCB0aGUgZmlsZSAqLworCQkJYnVmZmVyID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChp bmRleCksIE1BSU5fRk9SS05VTSwgTlVMTCwKKwkJCQkJCQkJCSAgIEVCX0xPQ0tfRklSU1QpOwor CQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJCVNUQVJUX0NSSVRfU0VDVElPTigp OworCisJCQlTdGlySW5pdFBhZ2UocGFnZSwgMCk7CisKKwkJCWlmICghU3RpclBhZ2VBZGRJdGVt KHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBXZSBzaG91bGRuJ3QgYmUgaGVyZSBzaW5jZSB3 ZSdyZSBpbnNlcnRpbmcgdG8gYW4gZW1wdHkgcGFnZSAqLworCQkJCWVsb2coRVJST1IsICJjb3Vs ZCBub3QgYWRkIG5ldyBzdGlyIHR1cGxlIHRvIGVtcHR5IHBhZ2UiKTsKKwkJCX0KKworCQkJLyog VXBkYXRlIG1ldGEtcGFnZSB3aXRoIG5ldyBsYXN0IGJsb2NrIG51bWJlciAqLworCQkJbWV0YURh dGEtPmxhc3RCbGtObyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcik7CisKKwkJCU1hcmtC dWZmZXJEaXJ0eShtZXRhQnVmZmVyKTsKKwkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCisJ CQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK KwkJCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisKKwkJCXJldHVybiBmYWxzZTsK KwkJfQorCX0KK30KKworLyoKKyAqIFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2Ug ZnVuY3Rpb25zIGFsbCBlcnJvciBvdXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2Nh bihSZWxhdGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJP UiwgKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNc IiBpcyBub3QgaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJ ICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMg bm90IGltcGxlbWVudGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVudGVkIiwg X19mdW5jX18pKSk7Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93 ZWQgZm9yIGF1eGlsaWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YS1w YWdlIHdpdGhvdXQgYW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3Rp cmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IElu ZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlm ICghaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJCdWlsZGluZyBTVElSIGluZGV4 ZXMgaXMgbm90IHN1cHBvcnRlZCIpKSk7CisKKwlTdGlySW5pdE1ldGFwYWdlKGluZGV4LCBNQUlO X0ZPUktOVU0pOworCisJcmVzdWx0ID0gKEluZGV4QnVpbGRSZXN1bHQgKikgcGFsbG9jKHNpemVv ZihJbmRleEJ1aWxkUmVzdWx0KSk7CisJcmVzdWx0LT5oZWFwX3R1cGxlcyA9IDA7CisJcmVzdWx0 LT5pbmRleF90dXBsZXMgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3RpcmJ1aWxk ZW1wdHkoUmVsYXRpb24gaW5kZXgpCit7CisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgSU5JVF9G T1JLTlVNKTsKK30KKworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoKK3N0aXJidWxrZGVsZXRlKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0 YXRzLAorCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJ CQkJIHZvaWQgKmNhbGxiYWNrX3N0YXRlKQoreworCVJlbGF0aW9uIGluZGV4ID0gaW5mby0+aW5k ZXg7CisJQmxvY2tOdW1iZXIgYmxrbm8sIG5wYWdlczsKKwlCdWZmZXIgYnVmZmVyOworCVBhZ2Ug cGFnZTsKKworCS8qIEZvciBub3JtYWwgVkFDVVVNLCBtYXJrIHRvIHNraXAgaW5zZXJ0cyBhbmQg d2FybiBhYm91dCBhbiBpbmRleCBkcm9wIG5lZWRlZCAqLworCWlmICghaW5mby0+dmFsaWRhdGVf aW5kZXgpCisJeworCQlTdGlyTWFya0FzU2tpcEluc2VydHMoaW5kZXgpOworCisJCWVyZXBvcnQo V0FSTklORywgKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCWVy cm1zZygiXCIlc1wiIGlzIG5vdCBpbXBsZW1lbnRlZCwgc2VlbXMgbGlrZSB0aGlzIGluZGV4IG5l ZWRzIHRvIGJlIGRyb3BwZWQiLCBfX2Z1bmNfXykpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWYgKHN0YXRzID09IE5VTEwpCisJCXN0YXRzID0gKEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKSBw YWxsb2MwKHNpemVvZihJbmRleEJ1bGtEZWxldGVSZXN1bHQpKTsKKworCS8qCisJICogSXRlcmF0 ZSBvdmVyIHRoZSBwYWdlcy4gV2UgZG9uJ3QgY2FyZSBhYm91dCBjb25jdXJyZW50bHkgYWRkZWQg cGFnZXMsCisJICogYmVjYXVzZSB0aGUgaW5kZXggaXMgbWFya2VkIGFzIG5vdC1yZWFkeSBmb3Ig dGhhdCBtb21lbnQgYW5kIHRoZSBpbmRleCBpcyBub3QKKwkgKiB1c2VkIGZvciBpbnNlcnQuCisJ ICovCisJbnBhZ2VzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhpbmRleCk7CisJZm9yIChi bGtubyA9IFNUSVJfSEVBRF9CTEtOTzsgYmxrbm8gPCBucGFnZXM7IGJsa25vKyspCisJeworCQlT dGlyVHVwbGUgKml0dXAsICppdHVwRW5kOworCisJCXZhY3V1bV9kZWxheV9wb2ludChmYWxzZSk7 CisKKwkJYnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGluZGV4LCBNQUlOX0ZPUktOVU0sIGJs a25vLAorCQkJCQkJCQkJUkJNX05PUk1BTCwgaW5mby0+c3RyYXRlZ3kpOworCisJCUxvY2tCdWZm ZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcik7CisKKwkJaWYgKFBhZ2VJc05ldyhwYWdlKSkKKwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOworCQkJY29udGludWU7CisJCX0KKworCQlpdHVwID0gU3RpclBhZ2VHZXRU dXBsZShwYWdlLCBGaXJzdE9mZnNldE51bWJlcik7CisJCWl0dXBFbmQgPSBTdGlyUGFnZUdldFR1 cGxlKHBhZ2UsIE9mZnNldE51bWJlck5leHQoU3RpclBhZ2VHZXRNYXhPZmZzZXQocGFnZSkpKTsK KwkJd2hpbGUgKGl0dXAgPCBpdHVwRW5kKQorCQl7CisJCQkvKiBEbyB3ZSBoYXZlIHRvIGRlbGV0 ZSB0aGlzIHR1cGxlPyAqLworCQkJaWYgKGNhbGxiYWNrKCZpdHVwLT5oZWFwUHRyLCBjYWxsYmFj a19zdGF0ZSkpCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIndlIG5ldmVyIGRlbGV0ZSBpbiBzdGlyIikpKTsK KwkJCX0KKworCQkJaXR1cCA9IFN0aXJQYWdlR2V0TmV4dFR1cGxlKGl0dXApOworCQl9CisKKwkJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCX0KKworCXJldHVybiBzdGF0czsKK30KKwor LyoKKyAqIE1hcmsgYSBTVElSIGluZGV4IHRvIHNraXAgZnV0dXJlIGluc2VydHMKKyAqLwordm9p ZAorU3Rpck1hcmtBc1NraXBJbnNlcnRzKFJlbGF0aW9uIGluZGV4KQoreworCVN0aXJNZXRhUGFn ZURhdGEgKm1ldGFEYXRhOworCUJ1ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisK KwlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwltZXRhQnVmZmVyID0gUmVhZEJ1 ZmZlcihpbmRleCwgU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisJTG9ja0J1ZmZlcihtZXRhQnVmZmVy LCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCVNUQVJUX0NSSVRfU0VDVElPTigpOworCisJbWV0 YVBhZ2UgPSBCdWZmZXJHZXRQYWdlKG1ldGFCdWZmZXIpOworCW1ldGFEYXRhID0gU3RpclBhZ2VH ZXRNZXRhKG1ldGFQYWdlKTsKKworCWlmICghbWV0YURhdGEtPnNraXBJbnNlcnRzKQorCXsKKwkJ bWV0YURhdGEtPnNraXBJbnNlcnRzID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZm ZXIpOworCX0KKwlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRh QnVmZmVyKTsKK30KKworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoKK3N0aXJ2YWN1dW1jbGVhbnVw KEluZGV4VmFjdXVtSW5mbyAqaW5mbywKKwkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3Rh dHMpCit7CisJU3Rpck1hcmtBc1NraXBJbnNlcnRzKGluZm8tPmluZGV4KTsKKwllcmVwb3J0KFdB Uk5JTkcsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCWVycm1z ZygiXCIlc1wiIGlzIG5vdCBpbXBsZW1lbnRlZCwgc2VlbXMgbGlrZSB0aGlzIGluZGV4IG5lZWRz IHRvIGJlIGRyb3BwZWQiLCBfX2Z1bmNfXykpKTsKKwlyZXR1cm4gTlVMTDsKK30KKworYnl0ZWEg Kgorc3Rpcm9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSkKK3sKKwlyZXR1 cm4gTlVMTDsKK30KKwordm9pZAorc3RpcmNvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwg SW5kZXhQYXRoICpwYXRoLAorCQkJCQkgZG91YmxlIGxvb3BfY291bnQsIENvc3QgKmluZGV4U3Rh cnR1cENvc3QsCisJCQkJCSBDb3N0ICppbmRleFRvdGFsQ29zdCwgU2VsZWN0aXZpdHkgKmluZGV4 U2VsZWN0aXZpdHksCisJCQkJCSBkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sIGRvdWJsZSAqaW5k ZXhQYWdlcykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksIGVycm1zZygiXCIlc1wiIGlzIG5vdCBpbXBsZW1lbnRlZCIsIF9fZnVuY19f KSkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDQzZGU0MmNlMzllLi4xMzI1ZjNkOTcwMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYwpAQCAtMzQwOSw2ICszNDA5LDcgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCWl2aW5mby5tZXNzYWdlX2xl dmVsID0gREVCVUcyOwogCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSBoZWFwUmVsYXRpb24tPnJk X3JlbC0+cmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IE5VTEw7CisJaXZpbmZvLnZhbGlk YXRlX2luZGV4ID0gdHJ1ZTsKIAogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMgaW50OCB2YWx1ZXMg Zm9yIHRoZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0 aW5nLmMKaW5kZXggYzc4ZGNlYTk4YzEuLjg3ZTAxZTc0YWQ3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGlu Zy5jCkBAIC0zMDcsNiArMzA3LDcgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJlbCwg T2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRleEluZm8tPmlpX1BhcmFsbGVs V29ya2VycyA9IDA7CiAJaW5kZXhJbmZvLT5paV9BbSA9IEJUUkVFX0FNX09JRDsKIAlpbmRleElu Zm8tPmlpX0FtQ2FjaGUgPSBOVUxMOworCWluZGV4SW5mby0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7 CiAJaW5kZXhJbmZvLT5paV9Db250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAljb2xs YXRpb25JZHNbMF0gPSBJbnZhbGlkT2lkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4IDUzYWRh YzkxMzliLi5mODFkZDMwZGYyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5h bHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwpAQCAtNzI1LDYgKzcy NSw3IEBAIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgY29uc3QgVmFjdXVtUGFyYW1z IHBhcmFtcywKIAkJCWl2aW5mby5tZXNzYWdlX2xldmVsID0gZWxldmVsOwogCQkJaXZpbmZvLm51 bV9oZWFwX3R1cGxlcyA9IG9uZXJlbC0+cmRfcmVsLT5yZWx0dXBsZXM7CiAJCQlpdmluZm8uc3Ry YXRlZ3kgPSB2YWNfc3RyYXRlZ3k7CisJCQlpdmluZm8udmFsaWRhdGVfaW5kZXggPSBmYWxzZTsK IAogCQkJc3RhdHMgPSBpbmRleF92YWN1dW1fY2xlYW51cCgmaXZpbmZvLCBOVUxMKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKaW5kZXggMjc5MTA4Y2E4OWYuLmRmZGNjZmFm OTkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKQEAgLTg4NSw2ICs4ODUs NyBAQCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19vbmVfaW5kZXgoUGFyYWxsZWxWYWN1dW1TdGF0 ZSAqcHZzLCBSZWxhdGlvbiBpbmRyZWwsCiAJaXZpbmZvLmVzdGltYXRlZF9jb3VudCA9IHB2cy0+ c2hhcmVkLT5lc3RpbWF0ZWRfY291bnQ7CiAJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IHB2cy0+ c2hhcmVkLT5yZWx0dXBsZXM7CiAJaXZpbmZvLnN0cmF0ZWd5ID0gcHZzLT5ic3RyYXRlZ3k7CisJ aXZpbmZvLnZhbGlkYXRlX2luZGV4ID0gZmFsc2U7CiAKIAkvKiBVcGRhdGUgZXJyb3IgdHJhY2Vi YWNrIGluZm9ybWF0aW9uICovCiAJcHZzLT5pbmRuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpbmRyZWwpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2Vm dW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggMmNhZWM2MjFkNzMu LjA5YWU0NDU2OTRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwor KysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODc1LDYgKzg3NSw3IEBAIG1h a2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlz dCAqZXhwcmVzc2lvbnMsCiAJLyogaW5pdGlhbGl6ZSBpbmRleC1idWlsZCBzdGF0ZSB0byBkZWZh dWx0ICovCiAJbi0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKIAluLT5paV9QYXJhbGxlbFdv cmtlcnMgPSAwOworCW4tPmlpX0F1eGlsaWFyeSA9IGZhbHNlOwogCiAJLyogc2V0IHVwIGZvciBw b3NzaWJsZSB1c2UgYnkgaW5kZXggQU0gKi8KIAluLT5paV9BbSA9IGFtb2lkOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0u aAppbmRleCA0YzA0MjljYzYxMy4uY2Q0Njc1ODI3MzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC01Niw2 ICs1Niw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4VmFjdXVtSW5mbwogCWJvb2wJCWVzdGltYXRl ZF9jb3VudDsJLyogbnVtX2hlYXBfdHVwbGVzIGlzIGFuIGVzdGltYXRlICovCiAJaW50CQkJbWVz c2FnZV9sZXZlbDsJLyogZXJlcG9ydCBsZXZlbCBmb3IgcHJvZ3Jlc3MgbWVzc2FnZXMgKi8KIAlk b3VibGUJCW51bV9oZWFwX3R1cGxlczsJLyogdHVwbGVzIHJlbWFpbmluZyBpbiBoZWFwICovCisJ Ym9vbAkJdmFsaWRhdGVfaW5kZXg7IC8qIHZhbGlkYXRpbmcgY29uY3VycmVudGx5IGJ1aWx0IGlu ZGV4PyAqLwogCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5OwkvKiBhY2Nlc3Mgc3RyYXRl Z3kgZm9yIHJlYWRzICovCiB9IEluZGV4VmFjdXVtSW5mbzsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25z LmgKaW5kZXggMGJkMTdiMzBjYTcuLmUyOTY2MTY1ZTZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25z LmgKQEAgLTUyLDggKzUyLDkgQEAgdHlwZWRlZiBlbnVtIHJlbG9wdF9raW5kCiAJUkVMT1BUX0tJ TkRfVklFVyA9ICgxIDw8IDkpLAogCVJFTE9QVF9LSU5EX0JSSU4gPSAoMSA8PCAxMCksCiAJUkVM T1BUX0tJTkRfUEFSVElUSU9ORUQgPSAoMSA8PCAxMSksCisJUkVMT1BUX0tJTkRfU1RJUiA9ICgx IDw8IDEyKSwKIAkvKiBpZiB5b3UgYWRkIGEgbmV3IGtpbmQsIG1ha2Ugc3VyZSB5b3UgdXBkYXRl ICJsYXN0X2RlZmF1bHQiIHRvbyAqLwotCVJFTE9QVF9LSU5EX0xBU1RfREVGQVVMVCA9IFJFTE9Q VF9LSU5EX1BBUlRJVElPTkVELAorCVJFTE9QVF9LSU5EX0xBU1RfREVGQVVMVCA9IFJFTE9QVF9L SU5EX1NUSVIsCiAJLyogc29tZSBjb21waWxlcnMgdHJlYXQgZW51bXMgYXMgc2lnbmVkIGludHMs IHNvIHdlIGNhbid0IHVzZSAxIDw8IDMxICovCiAJUkVMT1BUX0tJTkRfTUFYID0gKDEgPDwgMzAp CiB9IHJlbG9wdF9raW5kOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjE4ZWUzNjUwNmZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3N0aXIuaApAQCAtMCwwICsxLDExMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5oCisgKgkgIGhlYWRlciBmaWxlIGZvciBwb3N0Z3JlcyBzdGlyIGFjY2VzcyBtZXRob2Qg aW1wbGVtZW50YXRpb24uCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9h Y2Nlc3Mvc3Rpci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgU1RJUl9I CisjZGVmaW5lIFNUSVJfSAorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuZXJpY194bG9nLmgiCisjaW5jbHVk ZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKworLyogU3Vw cG9ydCBwcm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUgU1RJUl9OUFJPQwkJCQkwCisKKy8q IFNjYW4gc3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05TVFJBVEVHSUVTCQkxCisKKyNkZWZp bmUgU1RJUl9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBzdGly IHBhZ2Ugc3RydWN0dXJlcyAqLworI2RlZmluZSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKSAoKFN0 aXJQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSkpCisjZGVmaW5lIFN0aXJQ YWdlR2V0TWF4T2Zmc2V0KHBhZ2UpIChTdGlyUGFnZUdldE9wYXF1ZShwYWdlKS0+bWF4b2ZmKQor I2RlZmluZSBTdGlyUGFnZUlzTWV0YShwYWdlKSBcCisJKChTdGlyUGFnZUdldE9wYXF1ZShwYWdl KS0+ZmxhZ3MgJiBTVElSX01FVEEpICE9IDApCisjZGVmaW5lIFN0aXJQYWdlR2V0RGF0YShwYWdl KQkJKChTdGlyVHVwbGUgKilQYWdlR2V0Q29udGVudHMocGFnZSkpCisjZGVmaW5lIFN0aXJQYWdl R2V0VHVwbGUocGFnZSwgb2Zmc2V0KSBcCisJKChTdGlyVHVwbGUgKikoUGFnZUdldENvbnRlbnRz KHBhZ2UpIFwKKwkJKyBzaXplb2YoU3RpclR1cGxlKSAqICgob2Zmc2V0KSAtIDEpKSkKKyNkZWZp bmUgU3RpclBhZ2VHZXROZXh0VHVwbGUodHVwbGUpIFwKKwkoKFN0aXJUdXBsZSAqKSgoY2hhciAq KSh0dXBsZSkgKyBzaXplb2YoU3RpclR1cGxlKSkpCisKKworCisvKiBQcmVzZXJ2ZWQgcGFnZSBu dW1iZXJzICovCisjZGVmaW5lIFNUSVJfTUVUQVBBR0VfQkxLTk8JKDApCisjZGVmaW5lIFNUSVJf SEVBRF9CTEtOTwkJKDEpIC8qIGZpcnN0IGRhdGEgcGFnZSAqLworCisKKy8qIE9wYXF1ZSBmb3Ig c3RpciBwYWdlcyAqLwordHlwZWRlZiBzdHJ1Y3QgU3RpclBhZ2VPcGFxdWVEYXRhCit7CisJT2Zm c2V0TnVtYmVyIG1heG9mZjsJCS8qIG51bWJlciBvZiBpbmRleCB0dXBsZXMgb24gdGhlIHBhZ2Ug Ki8KKwl1aW50MTYJCWZsYWdzOwkJCS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KKwl1 aW50MTYJCXN0aXJfcGFnZV9pZDsJLyogZm9yIGlkZW50aWZpY2F0aW9uIG9mIFNUSVIgaW5kZXhl cyAqLworfSBTdGlyUGFnZU9wYXF1ZURhdGE7CisKKy8qIFN0aXIgcGFnZSBmbGFncyAqLworI2Rl ZmluZSBTVElSX01FVEEJCSgxPDwwKQorCit0eXBlZGVmIFN0aXJQYWdlT3BhcXVlRGF0YSAqU3Rp clBhZ2VPcGFxdWU7CisKKyNkZWZpbmUgU1RJUl9QQUdFX0lECQkweEZGODQKKworLyogTWV0YWRh dGEgb2Ygc3RpciBpbmRleCAqLwordHlwZWRlZiBzdHJ1Y3QgU3Rpck1ldGFQYWdlRGF0YQorewor CXVpbnQzMgkJbWFnaWNOdW1iZXI7CisJQmxvY2tOdW1iZXIJbGFzdEJsa05vOworCWJvb2wJCXNr aXBJbnNlcnRzOwkvKiBzaG91bGQgd2UganVzdCBleGl0IHdpdGhvdXQgYW55IGluc2VydHM/ICov Cit9IFN0aXJNZXRhUGFnZURhdGE7CisKKy8qIE1hZ2ljIG51bWJlciB0byBkaXN0aW5ndWlzaCBz dGlyIHBhZ2VzIGZyb20gb3RoZXJzICovCisjZGVmaW5lIFNUSVJfTUFHSUNfTlVNQkVSICgweERC QUMwREVGKQorCisjZGVmaW5lIFN0aXJQYWdlR2V0TWV0YShwYWdlKQkoKFN0aXJNZXRhUGFnZURh dGEgKikgUGFnZUdldENvbnRlbnRzKHBhZ2UpKQorCit0eXBlZGVmIHN0cnVjdCBTdGlyVHVwbGUK K3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFB0cjsKK30gU3RpclR1cGxlOworCisjZGVmaW5lIFN0 aXJQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpIFwKKwkoQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9mUGFn ZUhlYWRlckRhdGEpIFwKKwkJLSBTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSAqIChzaXplb2Yo U3RpclR1cGxlKSkgXAorCQktIE1BWEFMSUdOKHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEpKSkK KworZXh0ZXJuIHZvaWQgU3RpckZpbGxNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBtZXRh UGFnZSwgYm9vbCBza2lwSW5zZXJ0cyk7CitleHRlcm4gdm9pZCBTdGlySW5pdE1ldGFwYWdlKFJl bGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIHZvaWQgU3RpckluaXRQ YWdlKFBhZ2UgcGFnZSwgdWludDE2IGZsYWdzKTsKK2V4dGVybiB2b2lkIFN0aXJNYXJrQXNTa2lw SW5zZXJ0cyhSZWxhdGlvbiBpbmRleCk7CisKKy8qIGluZGV4IGFjY2VzcyBtZXRob2QgaW50ZXJm YWNlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGJvb2wgc3RpcnZhbGlkYXRlKE9pZCBvcGNsYXNzb2lk KTsKK2V4dGVybiBib29sIHN0aXJpbnNlcnQoUmVsYXRpb24gaW5kZXgsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKKwkJCQkJIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhlYXBS ZWwsCisJCQkJCSBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkJCQkgYm9vbCBpbmRl eFVuY2hhbmdlZCwKKwkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CitleHRlcm4g SW5kZXhTY2FuRGVzYyBzdGlyYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5cywgaW50IG5v cmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlycmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAorCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlyZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p OworZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKnN0aXJidWlsZChSZWxhdGlvbiBoZWFwLCBSZWxh dGlvbiBpbmRleCwKKwkJCQkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CitleHRl cm4gdm9pZCBzdGlyYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCk7CitleHRlcm4gSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGlyYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJ CQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywgSW5kZXhCdWxrRGVsZXRlQ2Fs bGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfc3RhdGUpOworZXh0 ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RpcnZhY3V1bWNsZWFudXAoSW5kZXhWYWN1dW1J bmZvICppbmZvLAorCQkJCQkJCQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpOwor ZXh0ZXJuIGJ5dGVhICpzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRl KTsKKworI2VuZGlmCQkJLyogU1RJUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0CmluZGV4IDQ2ZDM2 MTA0N2ZlLi44YmQyYzJiNDZiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19h bS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKQEAgLTMzLDUgKzMzLDgg QEAKIHsgb2lkID0+ICczNTgwJywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9PSUQnLAogICBkZXNj ciA9PiAnYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QnLAogICBhbW5hbWUg PT4gJ2JyaW4nLCBhbWhhbmRsZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBlID0+ICdpJyB9LAor eyBvaWQgPT4gJzU1NTUnLCBvaWRfc3ltYm9sID0+ICdTVElSX0FNX09JRCcsCisgIGRlc2NyID0+ ICdzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QnLAorICBhbW5hbWUg PT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJoYW5kbGVyJywgYW10eXBlID0+ICdpJyB9LAog CiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCBkZjE3MGI4MDg0MC4uYTM0NTdl NzQ5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFzcy5kYXQKKysr IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApAQCAtNDkyLDQgKzQ5Miw4IEBA CiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2VvbWV0cmljIHR5cGVzIGV4Y2VwdCBib3gK IAorIyBhbGxvdyBhbnkgdHlwZXMgZm9yIFNUSVIKK3sgb3BjbWV0aG9kID0+ICdzdGlyJywgb2lk X3N5bWJvbCA9PiAnQU5ZX1NUSVJfT1BTX09JRCcsIG9wY25hbWUgPT4gJ3N0aXJfb3BzJywKKyAg b3BjZmFtaWx5ID0+ICdzdGlyL2FueV9vcHMnLCBvcGNpbnR5cGUgPT4gJ2FueSd9LAorCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0CmluZGV4IDdhMDI3YzQ4MTBlLi42ZmZjMjBhMDYx YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKQEAgLTMwOCw1ICszMDgsNyBAQAog ICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdlX29wcycgfSwKIHsg b2lkID0+ICc2MTU4JywKICAgb3BmbWV0aG9kID0+ICdnaXN0Jywgb3BmbmFtZSA9PiAnbXVsdGly YW5nZV9vcHMnIH0sCit7IG9pZCA9PiAnNTU1OCcsCisgIG9wZm1ldGhvZCA9PiAnc3RpcicsIG9w Zm5hbWUgPT4gJ2FueV9vcHMnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDM2 MWUyY2ZmZmViLi5mMTQ3NWRlZjQ4NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC05MzUs NiArOTM1LDEwIEBACiAgIHByb25hbWUgPT4gJ2JyaW5oYW5kbGVyJywgcHJvdm9sYXRpbGUgPT4g J3YnLAogICBwcm9yZXR0eXBlID0+ICdpbmRleF9hbV9oYW5kbGVyJywgcHJvYXJndHlwZXMgPT4g J2ludGVybmFsJywKICAgcHJvc3JjID0+ICdicmluaGFuZGxlcicgfSwKK3sgb2lkID0+ICc1NTU2 JywgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNzIG1ldGhvZCBo YW5kbGVyJywKKyAgcHJvbmFtZSA9PiAnc3RpcmhhbmRsZXInLCBwcm92b2xhdGlsZSA9PiAndics CisgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0eXBlcyA9PiAnaW50 ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3N0aXJoYW5kbGVyJyB9LAogeyBvaWQgPT4gJzM5NTInLCBk ZXNjciA9PiAnYnJpbjogc3RhbmRhbG9uZSBzY2FuIG5ldyB0YWJsZSBwYWdlcycsCiAgIHByb25h bWUgPT4gJ2JyaW5fc3VtbWFyaXplX25ld192YWx1ZXMnLCBwcm92b2xhdGlsZSA9PiAndicsCiAg IHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHByb2FyZ3R5cGVzID0+ ICdyZWdjbGFzcycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDYzYzA2N2Q1YWFlLi42Y2U5MTU0 YjI4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1Nyw4ICsxNTcsOCBAQCB0eXBlZGVmIHN0 cnVjdCBFeHByU3RhdGUKICAqCQllbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIgaW5kZXguICBVc2Vk IGZvciBib3RoIGluZGV4X2J1aWxkIGFuZAogICoJCXJldGFpbCBjcmVhdGlvbiBvZiBpbmRleCBl bnRyaWVzLgogICoKLSAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWluLCBhbmQgaWlf UGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKLSAqIGR1cmluZyBpbmRleCBidWlsZDsgdGhl eSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgorICogaWlfQ29uY3VycmVudCwg aWlfQnJva2VuSG90Q2hhaW4sIGlpX0F1eGlsaWFyeSBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzCisg KiBhcmUgdXNlZCBvbmx5IGR1cmluZyBpbmRleCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxs eSB6ZXJvZWQgb3RoZXJ3aXNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB0eXBlZGVmIHN0 cnVjdCBJbmRleEluZm8KQEAgLTIxOCw3ICsyMTgsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleElu Zm8KIAlib29sCQlpaV9XaXRob3V0T3ZlcmxhcHM7CiAJLyogIyBvZiB3b3JrZXJzIHJlcXVlc3Rl ZCAoZXhjbHVkZXMgbGVhZGVyKSAqLwogCWludAkJCWlpX1BhcmFsbGVsV29ya2VyczsKLQorCS8q IGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRleCBidWlsZD8gKi8KKwlib29sCQlpaV9B dXhpbGlhcnk7CiAJLyogT2lkIG9mIGluZGV4IEFNICovCiAJT2lkCQkJaWlfQW07CiAJLyogcHJp dmF0ZSBjYWNoZSBhcmVhIGZvciBpbmRleCBBTSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvaW5kZXhfc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4X3NlbGZ1bmNz LmgKaW5kZXggNzQ3OTNhMWExOWQuLmJmMGUzMGRhYmU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9pbmRleF9zZWxmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4X3Nl bGZ1bmNzLmgKQEAgLTYyLDYgKzYyLDE0IEBAIGV4dGVybiB2b2lkIHNwZ2Nvc3Rlc3RpbWF0ZShz dHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJU2VsZWN0aXZpdHkgKmluZGV4U2VsZWN0 aXZpdHksCiAJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAogCQkJCQkJCWRvdWJsZSAq aW5kZXhQYWdlcyk7CitleHRlcm4gdm9pZCBzdGlyY29zdGVzdGltYXRlKHN0cnVjdCBQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQlzdHJ1Y3QgSW5kZXhQYXRoICpwYXRoLAorCQkJCQkJCWRvdWJs ZSBsb29wX2NvdW50LAorCQkJCQkJCUNvc3QgKmluZGV4U3RhcnR1cENvc3QsCisJCQkJCQkJQ29z dCAqaW5kZXhUb3RhbENvc3QsCisJCQkJCQkJU2VsZWN0aXZpdHkgKmluZGV4U2VsZWN0aXZpdHks CisJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAorCQkJCQkJCWRvdWJsZSAqaW5kZXhQ YWdlcyk7CiBleHRlcm4gdm9pZCBnaW5jb3N0ZXN0aW1hdGUoc3RydWN0IFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCiAJCQkJCQkJZG91YmxlIGxvb3Bf Y291bnQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dAppbmRleCA3YWI2MTEzYzYx OS4uOTJjMDMzYTIwMTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11 dGlscy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dApAQCAt MTczLDcgKzE3MywxMyBAQCBzZWxlY3QgYW1uYW1lLCBwcm9wLCBwZ19pbmRleGFtX2hhc19wcm9w ZXJ0eShhLm9pZCwgcHJvcCkgYXMgcAogIHNwZ2lzdCB8IGNhbl9leGNsdWRlICAgfCB0CiAgc3Bn aXN0IHwgY2FuX2luY2x1ZGUgICB8IHQKICBzcGdpc3QgfCBib2d1cyAgICAgICAgIHwgCi0oMzYg cm93cykKKyBzdGlyICAgfCBjYW5fb3JkZXIgICAgIHwgZgorIHN0aXIgICB8IGNhbl91bmlxdWUg ICAgfCBmCisgc3RpciAgIHwgY2FuX211bHRpX2NvbCB8IHQKKyBzdGlyICAgfCBjYW5fZXhjbHVk ZSAgIHwgZgorIHN0aXIgICB8IGNhbl9pbmNsdWRlICAgfCB0Cisgc3RpciAgIHwgYm9ndXMgICAg ICAgICB8IAorKDQyIHJvd3MpCiAKIC0tCiAtLSBhZGRpdGlvbmFsIGNoZWNrcyBmb3IgcGdfaW5k ZXhfY29sdW1uX2hhc19wcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9vcHJfc2FuaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0 eS5vdXQKaW5kZXggNmZmNGQ3ZWU5MDEuLjkyNTk2NzllZWEyIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKQEAgLTIxMjksOSArMjEyOSwxMCBAQCBGUk9NIHBnX29w Y2xhc3MgQVMgYzEKIFdIRVJFIE5PVCBFWElTVFMoU0VMRUNUIDEgRlJPTSBwZ19hbW9wIEFTIGEx CiAgICAgICAgICAgICAgICAgIFdIRVJFIGExLmFtb3BmYW1pbHkgPSBjMS5vcGNmYW1pbHkKICAg ICAgICAgICAgICAgICAgICBBTkQgYmluYXJ5X2NvZXJjaWJsZShjMS5vcGNpbnR5cGUsIGExLmFt b3BsZWZ0dHlwZSkpOwotIG9wY25hbWUgfCBvcGNmYW1pbHkgCi0tLS0tLS0tLS0rLS0tLS0tLS0t LS0KLSgwIHJvd3MpCisgb3BjbmFtZSAgfCBvcGNmYW1pbHkgCistLS0tLS0tLS0tKy0tLS0tLS0t LS0tCisgc3Rpcl9vcHMgfCAgICAgIDU1NTgKKygxIHJvdykKIAogLS0gQ2hlY2sgdGhhdCBlYWNo IG9wZXJhdG9yIGxpc3RlZCBpbiBwZ19hbW9wIGhhcyBhbiBhc3NvY2lhdGVkIG9wY2xhc3MsCiAt LSB0aGF0IGlzIG9uZSB3aG9zZSBvcGNpbnR5cGUgbWF0Y2hlcyBvcHJsZWZ0IChwb3NzaWJseSBi eSBjb2VyY2lvbikuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBjOGYzOTMyZWRm MC4uZWNjMmMyYTYwNDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTE3MSw3 ICs1MTcxLDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlCiAgaGVh cDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleAor KDkgcm93cykKIAogXGRBICoKIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKQEAgLTUxODUsNyArNTE4 Niw4IEBAIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZQogIGhlYXAyICB8 IFRhYmxlCiAgc3BnaXN0IHwgSW5kZXgKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5kZXgKKyg5IHJv d3MpCiAKIFxkQSBoKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAtNTIxMCw5ICs1MjEyLDkg QEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogCiBcZEE6IGV4dHJhIGFyZ3VtZW50ICJiYXIiIGln bm9yZWQKIFxkQSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3Mg bWV0aG9kcwotICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAg ICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwor ICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgICBE ZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgCistLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICBicmluICAgfCBJbmRleCB8IGJyaW5oYW5kbGVyICAgICAgICAgIHwgYmxvY2sgcmFuZ2UgaW5k ZXggKEJSSU4pIGFjY2VzcyBtZXRob2QKICBidHJlZSAgfCBJbmRleCB8IGJ0aGFuZGxlciAgICAg ICAgICAgIHwgYi10cmVlIGluZGV4IGFjY2VzcyBtZXRob2QKICBnaW4gICAgfCBJbmRleCB8IGdp bmhhbmRsZXIgICAgICAgICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKQEAgLTUyMjEsMTIg KzUyMjMsMTMgQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlIHwgaGVh cF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBoZWFwMiAgfCBU YWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXggfCBzcGdoYW5k bGVyICAgICAgICAgICB8IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDggcm93cykKKyBz dGlyICAgfCBJbmRleCB8IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVybSBpbmRleCBy ZXBsYWNlbWVudCBhY2Nlc3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErICoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwotICBOYW1lICB8IFR5cGUg IHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAg ICAgICAgICAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworICBOYW1lICB8IFR5cGUgIHwgICAgICAg SGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAg ICAgCistLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBicmluICAgfCBJbmRleCB8IGJyaW5o YW5kbGVyICAgICAgICAgIHwgYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QK ICBidHJlZSAgfCBJbmRleCB8IGJ0aGFuZGxlciAgICAgICAgICAgIHwgYi10cmVlIGluZGV4IGFj Y2VzcyBtZXRob2QKICBnaW4gICAgfCBJbmRleCB8IGdpbmhhbmRsZXIgICAgICAgICAgIHwgR0lO IGluZGV4IGFjY2VzcyBtZXRob2QKQEAgLTUyMzUsNyArNTIzOCw4IEBAIExpc3Qgb2YgYWNjZXNz IG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVyIHwgaGVhcCB0 YWJsZSBhY2Nlc3MgbWV0aG9kCiAgaGVhcDIgIHwgVGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxl ciB8IAogIHNwZ2lzdCB8IEluZGV4IHwgc3BnaGFuZGxlciAgICAgICAgICAgfCBTUC1HaVNUIGlu ZGV4IGFjY2VzcyBtZXRob2QKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5kZXggfCBzdGlyaGFuZGxl ciAgICAgICAgICB8IHNob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNzIG1ldGhvZAor KDkgcm93cykKIAogXGRBKyBoKgogICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3Mg bWV0aG9kcwotLSAKMi40My4wCgo= --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v30-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nchu3 RnJvbSBjYWFkYmExZTYxYWI2ODgxODMxYTY0Y2UzZDg5MTgyOWRkY2I4MjA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDQvN10gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgc2FtZSBwcmVkaWNhdGUgKGlmIGV4 aXN0cykgYXMgaW4gbWFpbiBpbmRleAotIHVzZSBpdCB0byB0cmFjayB0dXBsZXMgaW5zZXJ0ZWQg ZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIG1lcmdlIGF1eGlsaWFyeSBpbmRleCB3aXRoIG1haW4g aW5kZXggZHVyaW5nIHZhbGlkYXRpb24gdG8gY2F0Y2ggdXAgbmV3IGluZGV4IHdpdGggYW55IHR1 cGxlcyBtaXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIGF1dG9tYXRpY2FsbHkgZHJvcCBh dXhpbGlhcnkgd2hlbiBtYWluIGluZGV4IGlzIHJlYWR5CgpUbyBtZXJnZSBtYWluIGFuZCBhdXhp bGlhcnkgaW5kZXhlczoKLSBpbmRleF9idWxrX2RlbGV0ZSBjYWxsZWQgZm9yIGJvdGgsIFRJRHMg cHV0IGludG8gdHVwbGVzb3J0Ci0gYm90aCB0dXBsZXNvcnQgYXJlIGJlaW5nIHNvcnRlZAotIGJv dGggdHVwbGVzb3J0IHNjYW5uZWQgd2l0aCB0d28gcG9pbnRlcnMgbG9va2luZyBmb3IgdGhlIFRJ RHMgcHJlc2VudCBpbiBhdXhpbGlhcnkgaW5kZXgsIGJ1dCBhYnNlbnQgaW4gbWFpbiBvbmUKLSBh bGwgc3VjaCBUSURzIGFyZSBwdXQgaW50byB0dXBsZXN0b3JlCi0gYWxsIFRJRHMgaW4gdHVwbGVz dG9yZSBhcmUgZmV0Y2hlZCB1c2luZyB0aGUgc3RyZWFtLCB0dXBsZXN0b3JlIHVzZWQgaW4gaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCB0byBwcm92aWRlIHRoZSBu ZXh0IHBhZ2UgdG8gcHJlZmV0Y2gKLSBpZiBmZXRjaGVkIHR1cGxlIGlzIGFsaXZlIC0gaXQgaXMg aW5zZXJ0ZWQgaW50byB0aGUgbWFpbiBpbmRleAoKVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZv ciBhIHNlY29uZCBmdWxsIHRhYmxlIHNjYW4gZHVyaW5nIHZhbGlkYXRpb24sIGltcHJvdmluZyBw ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQyICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU0OCArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMwOCArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ0ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgICAgICB8ICAx MyArLQogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAgNDIgKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0ICAgICB8ICAgMyArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgIDE3ICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgMjEgKwogMTcgZmlsZXMgY2hhbmdl ZCwgMTEyMSBpbnNlcnRpb25zKCspLCAzMzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwK aW5kZXggYjNkNTM1NTA2ODguLmNlMDhlMGQ4YjEwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTY2 NDMsNiArNjY0MywxOCBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNr ZW5kaWQ7CiAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8L2VudHJ5 PgogICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5n IGZvciB3cml0ZXJzIHRvIHVzZSBhdXhpbGlhcnkgaW5kZXg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9j b21tYW5kPiBvciA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2Fp dGluZyBmb3IgdHJhbnNhY3Rpb25zCisgICAgICAgd2l0aCB3cml0ZSBsb2NrcyB0aGF0IGNhbiBw b3RlbnRpYWxseSBzZWUgdGhlIHRhYmxlIHRvIGZpbmlzaCwgdG8gZW5zdXJlIHVzZSBvZiBhdXhp bGlhcnkgaW5kZXggZm9yIG5ldyB0dXBsZXMgaW4KKyAgICAgICBmdXR1cmUgdHJhbnNhY3Rpb25z LgorICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50IG1v ZGUuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9zdHJ1Y3RuYW1l PiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgorICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4gdGhlIHByb2dy ZXNzCisgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICA8L2VudHJ5Pgor ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5idWlsZGluZyBp bmRleDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgpAQCAtNjY4MywxMyArNjY5NSwx MiBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNrZW5kaWQ7CiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJh bD5pbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlczwvbGl0 ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGlzIHNjYW5uaW5nIHRoZSB0YWJsZQotICAgICAgIHRv IHZhbGlkYXRlIHRoZSBpbmRleCB0dXBsZXMgY29sbGVjdGVkIGluIHRoZSBwcmV2aW91cyB0d28g cGhhc2VzLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1h bmQ+IGlzIG1lcmdpbmcgY29udGVudCBvZiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgdGFyZ2V0 IGluZGV4LgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJy ZW50IG1vZGUuCi0gICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5ibG9ja3NfdG90YWw8L3N0cnVj dG5hbWU+IChzZXQgdG8gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlKQotICAgICAgIGFuZCA8 c3RydWN0bmFtZT5ibG9ja3NfZG9uZTwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3Mg aW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT50 dXBsZXNfdG90YWw8L3N0cnVjdG5hbWU+IChzZXQgdG8gdGhlIG51bWJlciBvZiB0dXBsZXMgdG8g YmUgbWVyZ2VkKQorICAgICAgIGFuZCA8c3RydWN0bmFtZT50dXBsZXNfZG9uZTwvc3RydWN0bmFt ZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KQEAgLTY3MDYsOCArNjcxNyw5IEBA IEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgPHJv dz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJr aW5nIGRlYWQ8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT4KLSAgICAgICA8Y29tbWFu ZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rp b25zCi0gICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9y ZSBtYXJraW5nIHRoZSBvbGQgaW5kZXggZGVhZC4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAg ICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBtYXJr aW5nIHRoZSBhdXhpbGlhcnkgaW5kZXggYXMgZGVhZC4KKyAgICAgICA8Y29tbWFuZD5SRUlOREVY IENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgYWxzbyB3YWl0aW5nIGJlZm9yZSBtYXJraW5nIHRo ZSBvbGQgaW5kZXggYXMgZGVhZC4KICAgICAgICBUaGlzIHBoYXNlIGlzIHNraXBwZWQgd2hlbiBu b3QgaW4gY29uY3VycmVudCBtb2RlLgogICAgICAgIENvbHVtbnMgPHN0cnVjdG5hbWU+bG9ja2Vy c190b3RhbDwvc3RydWN0bmFtZT4sIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfZG9uZTwvc3RydWN0bmFt ZT4KICAgICAgICBhbmQgPHN0cnVjdG5hbWU+Y3VycmVudF9sb2NrZXJfcGlkPC9zdHJ1Y3RuYW1l PiBjb250YWluIHRoZSBwcm9ncmVzcwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXgg YmI3NTA1ZDE3MWIuLjEyYzg4NTg3YTc5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwK QEAgLTYyMCwxMCArNjIwLDEwIEBAIENSRUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVO VExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICAgb3V0IHdy aXRlcy4gIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgc3BlY2lmeWluZyB0aGUKICAgICA8bGl0 ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBvZiA8Y29tbWFuZD5DUkVBVEUgSU5E RVg8L2NvbW1hbmQ+LgogICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwKLSAgICA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28gc2NhbnMgb2Yg dGhlIHRhYmxlLCBhbmQgaW4KLSAgICBhZGRpdGlvbiBpdCBtdXN0IHdhaXQgZm9yIGFsbCBleGlz dGluZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseQotICAgIG1vZGlmeSBvciB1 c2UgdGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKLSAgICB0aGlzIG1ldGhvZCByZXF1aXJl cyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4IGJ1aWxkIGFuZCB0YWtlcwor ICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHRh YmxlIHNjYW4gZm9sbG93ZWQgYnkKKyAgICB2YWxpZGF0aW9uIHBoYXNlLCBhbmQgaW4gYWRkaXRp b24gaXQgbXVzdCB3YWl0IGZvciBhbGwgZXhpc3RpbmcgdHJhbnNhY3Rpb25zCisgICAgdGhhdCBj b3VsZCBwb3RlbnRpYWxseSBtb2RpZnkgb3IgdXNlIHRoZSBpbmRleCB0byB0ZXJtaW5hdGUuICBU aHVzCisgICAgdGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFu ZGFyZCBpbmRleCBidWlsZCBhbmQgbWF5IHRha2UKICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0 byBjb21wbGV0ZS4gIEhvd2V2ZXIsIHNpbmNlIGl0IGFsbG93cyBub3JtYWwKICAgICBvcGVyYXRp b25zIHRvIGNvbnRpbnVlIHdoaWxlIHRoZSBpbmRleCBpcyBidWlsdCwgdGhpcyBtZXRob2QgaXMg dXNlZnVsIGZvcgogICAgIGFkZGluZyBuZXcgaW5kZXhlcyBpbiBhIHByb2R1Y3Rpb24gZW52aXJv bm1lbnQuICBPZiBjb3Vyc2UsIHRoZSBleHRyYSBDUFUKQEAgLTYzMSwxNCArNjMxLDE0IEBAIENS RUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotICAgIEluIGEg Y29uY3VycmVudCBpbmRleCBidWlsZCwgdGhlIGluZGV4IGlzIGFjdHVhbGx5IGVudGVyZWQgYXMg YW4KLSAgICA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KLSAgICB0aGUgc3lzdGVt IGNhdGFsb2dzIGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gdGFibGUgc2NhbnMgb2NjdXIg aW4KLSAgICB0d28gbW9yZSB0cmFuc2FjdGlvbnMuICBCZWZvcmUgZWFjaCB0YWJsZSBzY2FuLCB0 aGUgaW5kZXggYnVpbGQgbXVzdAorICAgIEluIGEgY29uY3VycmVudCBpbmRleCBidWlsZCwgdGhl IG1haW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzIGFyZSBhY3R1YWxseQorICAgIGVudGVyZWQgYXMg YW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleCBpbnRvCisgICAgdGhlIHN5c3RlbSBjYXRh bG9ncyBpbiBvbmUgdHJhbnNhY3Rpb24sIHRoZW4gdHdvIHBoYXNlcyBvY2N1ciBpbgorICAgIG11 bHRpcGxlIHRyYW5zYWN0aW9ucy4gIEJlZm9yZSBlYWNoIHBoYXNlLCB0aGUgaW5kZXggYnVpbGQg bXVzdAogICAgIHdhaXQgZm9yIGV4aXN0aW5nIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgbW9kaWZp ZWQgdGhlIHRhYmxlIHRvIHRlcm1pbmF0ZS4KLSAgICBBZnRlciB0aGUgc2Vjb25kIHNjYW4sIHRo ZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlvbnMKKyAgICBBZnRlciB0 aGUgc2Vjb25kIHBoYXNlLCB0aGUgaW5kZXggYnVpbGQgbXVzdCB3YWl0IGZvciBhbnkgdHJhbnNh Y3Rpb25zCiAgICAgdGhhdCBoYXZlIGEgc25hcHNob3QgKHNlZSA8eHJlZiBsaW5rZW5kPSJtdmNj Ii8+KSBwcmVkYXRpbmcgdGhlIHNlY29uZAotICAgIHNjYW4gdG8gdGVybWluYXRlLCBpbmNsdWRp bmcgdHJhbnNhY3Rpb25zIHVzZWQgYnkgYW55IHBoYXNlIG9mIGNvbmN1cnJlbnQKKyAgICBwaGFz ZSB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0cmFuc2FjdGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ug b2YgY29uY3VycmVudAogICAgIGluZGV4IGJ1aWxkcyBvbiBvdGhlciB0YWJsZXMsIGlmIHRoZSBp bmRleGVzIGludm9sdmVkIGFyZSBwYXJ0aWFsIG9yIGhhdmUKICAgICBjb2x1bW5zIHRoYXQgYXJl IG5vdCBzaW1wbGUgY29sdW1uIHJlZmVyZW5jZXMuCiAgICAgVGhlbiBmaW5hbGx5IHRoZSBpbmRl eCBjYW4gYmUgbWFya2VkIDxxdW90ZT52YWxpZDwvcXVvdGU+IGFuZCByZWFkeSBmb3IgdXNlLApA QCAtNjUxLDEwICs2NTEsMTEgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5U TFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgIDxwYXJhPgog ICAgIElmIGEgcHJvYmxlbSBhcmlzZXMgd2hpbGUgc2Nhbm5pbmcgdGhlIHRhYmxlLCBzdWNoIGFz IGEgZGVhZGxvY2sgb3IgYQogICAgIHVuaXF1ZW5lc3MgdmlvbGF0aW9uIGluIGEgdW5pcXVlIGlu ZGV4LCB0aGUgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2ls bCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleC4g VGhpcyBpbmRleAotICAgIHdpbGwgYmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVj YXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOwotICAgIGhvd2V2ZXIgaXQgd2lsbCBzdGlsbCBj b25zdW1lIHVwZGF0ZSBvdmVyaGVhZC4gVGhlIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlv bj4KLSAgICA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydCBzdWNoIGFu IGluZGV4IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgorICAgIGNvbW1hbmQgd2lsbCBm YWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleCBhbmQg aXRzCisgICAgYXNzb2NpYXRlZCBhdXhpbGlhcnkgaW5kZXguIFRoZXNlIGluZGV4ZXMKKyAgICB3 aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzIGJlY2F1c2UgdGhleSBtaWdodCBi ZSBpbmNvbXBsZXRlOworICAgIGhvd2V2ZXIgdGhleSB3aWxsIHN0aWxsIGNvbnN1bWUgdXBkYXRl IG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgorICAgIDxjb21t YW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggaW5kZXhlcyBhcyA8bGl0 ZXJhbD5JTlZBTElEPC9saXRlcmFsPjoKIAogPHByb2dyYW1saXN0aW5nPgogcG9zdGdyZXM9IyBc ZCB0YWIKQEAgLTY2NCwxMSArNjY1LDEyIEBAIHBvc3RncmVzPSMgXGQgdGFiCiAgY29sICAgIHwg aW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwKIEluZGV4ZXM6CiAgICAgImlkeCIgYnRy ZWUgKGNvbCkgSU5WQUxJRAorICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9w cm9ncmFtbGlzdGluZz4KIAogICAgIFRoZSByZWNvbW1lbmRlZCByZWNvdmVyeQotICAgIG1ldGhv ZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlIGluZGV4IGFuZCB0cnkgYWdhaW4gdG8gcGVy Zm9ybQotICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAg KEFub3RoZXIgcG9zc2liaWxpdHkgaXMKKyAgICBtZXRob2QgaW4gc3VjaCBjYXNlcyBpcyB0byBk cm9wIHRoZXNlIGluZGV4ZXMgYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCisgICAgPGNvbW1hbmQ+ Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90aGVyIHBvc3NpYmlsaXR5 IGlzCiAgICAgdG8gcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFuZD5SRUlOREVYIElOREVY IENPTkNVUlJFTlRMWTwvY29tbWFuZD4pLgogICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21s CmluZGV4IDE4NWNkNzVjYTMwLi4xYzNjN2E5N2Y2YSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9yZWluZGV4LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAg LTc2LDcgKzc2LDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgICAgIHRoaXMgaW5kZXgg aXMgbGVmdCBhcyA8cXVvdGU+aW52YWxpZDwvcXVvdGU+LiBTdWNoIGluZGV4ZXMgYXJlIHVzZWxl c3MKICAgICAgIGJ1dCBpdCBjYW4gYmUgY29udmVuaWVudCB0byB1c2UgPGNvbW1hbmQ+UkVJTkRF WDwvY29tbWFuZD4gdG8gcmVidWlsZAogICAgICAgdGhlbS4gTm90ZSB0aGF0IG9ubHkgPGNvbW1h bmQ+UkVJTkRFWCBJTkRFWDwvY29tbWFuZD4gaXMgYWJsZQotICAgICAgdG8gcGVyZm9ybSBhIGNv bmN1cnJlbnQgYnVpbGQgb24gYW4gaW52YWxpZCBpbmRleC4KKyAgICAgIHRvIHBlcmZvcm0gYSBj b25jdXJyZW50IGJ1aWxkIG9uIGEgaW52YWxpZCBpbmRleC4KICAgICAgPC9wYXJhPgogICAgIDwv bGlzdGl0ZW0+CiAKQEAgLTM2OCw5ICszNjgsOCBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQog ICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc3VwcG9ydHMgcmVidWls ZGluZyBpbmRleGVzIHdpdGggbWluaW11bSBsb2NraW5nCiAgICAgb2Ygd3JpdGVzLiAgVGhpcyBt ZXRob2QgaXMgaW52b2tlZCBieSBzcGVjaWZ5aW5nIHRoZQogICAgIDxsaXRlcmFsPkNPTkNVUlJF TlRMWTwvbGl0ZXJhbD4gb3B0aW9uIG9mIDxjb21tYW5kPlJFSU5ERVg8L2NvbW1hbmQ+LiBXaGVu IHRoaXMgb3B0aW9uCi0gICAgaXMgdXNlZCwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPiBtdXN0IHBlcmZvcm0gdHdvIHNjYW5zIG9mIHRoZSB0YWJsZQotICAgIGZvciBlYWNo IGluZGV4IHRoYXQgbmVlZHMgdG8gYmUgcmVidWlsdCBhbmQgd2FpdCBmb3IgdGVybWluYXRpb24g b2YKLSAgICBhbGwgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkg dXNlIHRoZSBpbmRleC4KKyAgICBpcyB1c2VkLCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJv ZHVjdG5hbWU+IG11c3QgcGVyZm9ybSBzZXZlcmFsIHN0ZXBzIHRvIGVuc3VyZSBkYXRhCisgICAg Y29uc2lzdGVuY3kgd2hpbGUgYWxsb3dpbmcgbm9ybWFsIG9wZXJhdGlvbnMgdG8gY29udGludWUu CiAgICAgVGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFuZGFy ZCBpbmRleAogICAgIHJlYnVpbGQgYW5kIHRha2VzIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRvIGNv bXBsZXRlIGFzIGl0IG5lZWRzIHRvIHdhaXQKICAgICBmb3IgdW5maW5pc2hlZCB0cmFuc2FjdGlv bnMgdGhhdCBtaWdodCBtb2RpZnkgdGhlIGluZGV4LiBIb3dldmVyLCBzaW5jZQpAQCAtMzg4LDcg KzM4Nyw3IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRp b248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAgPG9yZGVyZWRsaXN0PgogICAg ICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBIG5ldyB0cmFuc2llbnQgaW5kZXgg ZGVmaW5pdGlvbiBpcyBhZGRlZCB0byB0aGUgY2F0YWxvZworICAgICAgIEEgbmV3IHRyYW5zaWVu dCBpbmRleCBkZWZpbml0aW9uIGFuZCBhbiBhdXhpbGlhcnkgaW5kZXggYXJlIGFkZGVkIHRvIHRo ZSBjYXRhbG9nCiAgICAgICAgPGxpdGVyYWw+cGdfaW5kZXg8L2xpdGVyYWw+LiAgVGhpcyBkZWZp bml0aW9uIHdpbGwgYmUgdXNlZCB0byByZXBsYWNlCiAgICAgICAgdGhlIG9sZCBpbmRleC4gIEEg PGxpdGVyYWw+U0hBUkUgVVBEQVRFIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gbG9jayBhdAogICAgICAg IHNlc3Npb24gbGV2ZWwgaXMgdGFrZW4gb24gdGhlIGluZGV4ZXMgYmVpbmcgcmVpbmRleGVkIGFz IHdlbGwgYXMgdGhlaXIKQEAgLTM5OCw3ICszOTcsMTUgQEAgUkVJTkRFWCBbICggPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsg REEKIAogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBIGZpcnN0IHBhc3Mg dG8gYnVpbGQgdGhlIGluZGV4IGlzIGRvbmUgZm9yIGVhY2ggbmV3IGluZGV4LiAgT25jZSB0aGUK KyAgICAgICBUaGUgYXV4aWxpYXJ5IGluZGV4IGlzIG1hcmtlZCBhcyAicmVhZHkgZm9yIGluc2Vy dHMiLCBtYWtpbmcKKyAgICAgICBpdCB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zLiBUaGlzIGlu ZGV4IGVmZmljaWVudGx5IHRyYWNrcyBhbGwgbmV3CisgICAgICAgdHVwbGVzIGR1cmluZyB0aGUg cmVpbmRleCBwcm9jZXNzLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorCisgICAg IDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRoZSBuZXcgbWFpbiBpbmRleCBpcyBi dWlsdCBieSBzY2FubmluZyB0aGUgdGFibGUuICBPbmNlIHRoZQogICAgICAgIGluZGV4IGlzIGJ1 aWx0LCBpdHMgZmxhZyA8bGl0ZXJhbD5wZ19pbmRleC5pbmRpc3JlYWR5PC9saXRlcmFsPiBpcwog ICAgICAgIHN3aXRjaGVkIHRvIDxxdW90ZT50cnVlPC9xdW90ZT4gdG8gbWFrZSBpdCByZWFkeSBm b3IgaW5zZXJ0cywgbWFraW5nIGl0CiAgICAgICAgdmlzaWJsZSB0byBvdGhlciBzZXNzaW9ucyBv bmNlIHRoZSB0cmFuc2FjdGlvbiB0aGF0IHBlcmZvcm1lZCB0aGUgYnVpbGQKQEAgLTQwOSw5ICs0 MTYsOSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9u PC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRlbT4KICAgICAg IDxwYXJhPgotICAgICAgIFRoZW4gYSBzZWNvbmQgcGFzcyBpcyBwZXJmb3JtZWQgdG8gYWRkIHR1 cGxlcyB0aGF0IHdlcmUgYWRkZWQgd2hpbGUgdGhlCi0gICAgICAgZmlyc3QgcGFzcyB3YXMgcnVu bmluZy4gIFRoaXMgc3RlcCBpcyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZQotICAgICAgIHRyYW5z YWN0aW9uIGZvciBlYWNoIGluZGV4LgorICAgICAgIEEgdmFsaWRhdGlvbiBwaGFzZSBtZXJnZXMg YW55IG1pc3NpbmcgZW50cmllcyBmcm9tIHRoZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAgICBpbnRv IHRoZSBtYWluIGluZGV4LCBlbnN1cmluZyBhbGwgY29uY3VycmVudCBjaGFuZ2VzIGFyZSBjYXB0 dXJlZC4KKyAgICAgICBUaGlzIHN0ZXAgaXMgYWxzbyBkb25lIGluIGEgc2VwYXJhdGUgdHJhbnNh Y3Rpb24gZm9yIGVhY2ggaW5kZXguCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAK QEAgLTQyOCw3ICs0MzUsNyBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0 aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIFRoZSBvbGQgaW5kZXhlcyBoYXZlIDxsaXRlcmFs PnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVkIHRvCisgICAgICAgVGhlIG9s ZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgaGF2ZSA8bGl0ZXJhbD5wZ19pbmRleC5pbmRpc3JlYWR5 PC9saXRlcmFsPiBzd2l0Y2hlZCB0bwogICAgICAgIDxxdW90ZT5mYWxzZTwvcXVvdGU+IHRvIHBy ZXZlbnQgYW55IG5ldyB0dXBsZSBpbnNlcnRpb25zLCBhZnRlciB3YWl0aW5nCiAgICAgICAgZm9y IHJ1bm5pbmcgcXVlcmllcyB0aGF0IG1pZ2h0IHJlZmVyZW5jZSB0aGUgb2xkIGluZGV4IHRvIGNv bXBsZXRlLgogICAgICAgPC9wYXJhPgpAQCAtNDM2LDcgKzQ0Myw3IEBAIFJFSU5ERVggWyAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5d ICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhlIG9s ZCBpbmRleGVzIGFyZSBkcm9wcGVkLiAgVGhlIDxsaXRlcmFsPlNIQVJFIFVQREFURQorICAgICAg IFRoZSBvbGQgYW5kIGF1eGlsaWFyeSBpbmRleGVzIGFyZSBkcm9wcGVkLiAgVGhlIDxsaXRlcmFs PlNIQVJFIFVQREFURQogICAgICAgIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gc2Vzc2lvbiBsb2NrcyBm b3IgdGhlIGluZGV4ZXMgYW5kIHRoZSB0YWJsZSBhcmUKICAgICAgICByZWxlYXNlZC4KICAgICAg IDwvcGFyYT4KQEAgLTQ0NywxMSArNDU0LDExIEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAg ICA8cGFyYT4KICAgICBJZiBhIHByb2JsZW0gYXJpc2VzIHdoaWxlIHJlYnVpbGRpbmcgdGhlIGlu ZGV4ZXMsIHN1Y2ggYXMgYQogICAgIHVuaXF1ZW5lc3MgdmlvbGF0aW9uIGluIGEgdW5pcXVlIGlu ZGV4LCB0aGUgPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4KLSAgICBjb21tYW5kIHdpbGwgZmFp bCBidXQgbGVhdmUgYmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGlu IGFkZGl0aW9uIHRvCi0gICAgdGhlIHByZS1leGlzdGluZyBvbmUuIFRoaXMgaW5kZXggd2lsbCBi ZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcwotICAgIGJlY2F1c2UgaXQgbWlnaHQgYmUg aW5jb21wbGV0ZTsgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1bWUgdXBkYXRlCisgICAgY29t bWFuZCB3aWxsIGZhaWwgYnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+ IG5ldyBpbmRleCBhbmQgaXRzIGF1eGlsaWFyeSBpbmRleCBpbiBhZGRpdGlvbiB0bworICAgIHRo ZSBwcmUtZXhpc3Rpbmcgb25lLiBUaGVzZSBpbmRleGVzIHdpbGwgYmUgaWdub3JlZCBmb3IgcXVl cnlpbmcgcHVycG9zZXMKKyAgICBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgaW5jb21wbGV0ZTsgaG93 ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKICAgICBvdmVyaGVhZC4gVGhlIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4gPGNvbW1hbmQ+XGQ8L2NvbW1hbmQ+IGNvbW1h bmQgd2lsbCByZXBvcnQKLSAgICBzdWNoIGFuIGluZGV4IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xp dGVyYWw+OgorICAgIHN1Y2ggaW5kZXhlcyBhcyA8bGl0ZXJhbD5JTlZBTElEPC9saXRlcmFsPjoK IAogPHByb2dyYW1saXN0aW5nPgogcG9zdGdyZXM9IyBcZCB0YWIKQEAgLTQ2MiwxMiArNDY5LDEz IEBAIHBvc3RncmVzPSMgXGQgdGFiCiBJbmRleGVzOgogICAgICJpZHgiIGJ0cmVlIChjb2wpCiAg ICAgImlkeF9jY25ldyIgYnRyZWUgKGNvbCkgSU5WQUxJRAorICAgICJpZHhfY2NhdXgiIHN0aXIg KGNvbCkgSU5WQUxJRAogPC9wcm9ncmFtbGlzdGluZz4KIAogICAgIElmIHRoZSBpbmRleCBtYXJr ZWQgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD4gaXMgc3VmZml4ZWQKLSAgICA8bGl0ZXJhbD5f Y2NuZXc8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQKKyAg ICA8bGl0ZXJhbD5fY2NuZXc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4s IHRoZW4gaXQgY29ycmVzcG9uZHMgdG8gdGhlIHRyYW5zaWVudCBvciBhdXhpbGlhcnkKICAgICBp bmRleCBjcmVhdGVkIGR1cmluZyB0aGUgY29uY3VycmVudCBvcGVyYXRpb24sIGFuZCB0aGUgcmVj b21tZW5kZWQKLSAgICByZWNvdmVyeSBtZXRob2QgaXMgdG8gZHJvcCBpdCB1c2luZyA8bGl0ZXJh bD5EUk9QIElOREVYPC9saXRlcmFsPiwKKyAgICByZWNvdmVyeSBtZXRob2QgaXMgdG8gZHJvcCB0 aGVzZSBpbmRleGVzIHVzaW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+LAogICAgIHRo ZW4gYXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gYWdhaW4u CiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVhZCBzdWZmaXhlZCA8bGl0ZXJhbD5f Y2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBvcmlnaW5hbCBpbmRl eCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9U CmluZGV4IDc0ZTQwN2YzNzVhLi5iMWM3OTc1MTdlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFE TUUuSE9UCkBAIC0zNzUsNiArMzc1LDExIEBAIGNvbnN0cmFpbnQgb24gd2hpY2ggdXBkYXRlcyBj YW4gYmUgSE9ULiAgT3RoZXIgdHJhbnNhY3Rpb25zIG11c3QgaW5jbHVkZQogc3VjaCBhbiBpbmRl eCB3aGVuIGRldGVybWluaW5nIEhPVC1zYWZldHkgb2YgdXBkYXRlcywgZXZlbiB0aG91Z2ggdGhl eQogbXVzdCBpZ25vcmUgaXQgZm9yIGJvdGggaW5zZXJ0aW9uIGFuZCBzZWFyY2hpbmcgcHVycG9z ZXMuCiAKK0Fsc28sIHNwZWNpYWwgYXV4aWxpYXJ5IGluZGV4IGlzIGNyZWF0ZWQgdGhlIHNhbWUg d2F5LiBJdCBpcyBtYXJrZWQgYXMKKyJyZWFkeSBmb3IgaW5zZXJ0cyIgd2l0aG91dCBhbnkgYWN0 dWFsIHRhYmxlIHNjYW4uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbGxlY3QKK25ldyB0dXBsZXMgaW5z ZXJ0ZWQgaW50byB0YWJsZSB3aGlsZSBvdXIgdGFyZ2V0IGluZGV4IGlzIHN0aWxsICJub3QgcmVh ZHkKK2ZvciBpbnNlcnRzIi4KKwogV2UgbXVzdCBkbyB0aGlzIHRvIGF2b2lkIG1ha2luZyBpbmNv cnJlY3QgaW5kZXggZW50cmllcy4gIEZvciBleGFtcGxlLAogc3VwcG9zZSB3ZSBhcmUgYnVpbGRp bmcgYW4gaW5kZXggb24gY29sdW1uIFggYW5kIHdlIG1ha2UgYW4gaW5kZXggZW50cnkgZm9yCiBh IG5vbi1IT1QgdHVwbGUgd2l0aCBYPTEuICBUaGVuIHNvbWUgb3RoZXIgYmFja2VuZCwgdW5hd2Fy ZSB0aGF0IFggaXMgYW4KQEAgLTM5NCwxMCArMzk5LDEwIEBAIGVudHJ5IGF0IHRoZSByb290IG9m IHRoZSBIT1QtdXBkYXRlIGNoYWluIGJ1dCB3ZSB1c2UgdGhlIGtleSB2YWx1ZSBmcm9tIHRoZQog bGl2ZSB0dXBsZS4KIAogV2UgbWFyayB0aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0 aWxsIG5vdCByZWFkeSBmb3IgcmVhZHMpIHRoZW4KLXdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0 aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJsZSBvcGVuLiAgVGhlbiB3ZSB0YWtlCi1hIHNlY29uZCBy ZWZlcmVuY2Ugc25hcHNob3QgYW5kIHZhbGlkYXRlIHRoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMg Zm9yCi10dXBsZXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Np bmcgb25lcy4gIEFnYWluLAotdGhlIGluZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJRHMgZXF1 YWwgdG8gSE9ULWNoYWluIHJvb3QgVElEcywgYnV0Cit3ZSBhZ2FpbiB3YWl0IGZvciB0cmFuc2Fj dGlvbnMgd2hpY2ggaGF2ZSB0aGUgdGFibGUgb3Blbi4gIFRoZW4gdmFsaWRhdGUKK3RoZSBpbmRl eC4gIFRoaXMgc2VhcmNoZXMgZm9yIHR1cGxlcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4IGluIGF1 eGlsaWFyeQoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhleSBhcmUg dmlzaWJsZSB0byByZWZlcmVuY2Ugc25hcHNob3QuCitBZ2FpbiwgdGhlIGluZGV4IGVudHJpZXMg aGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElEcywgYnV0CiB0aGUg dmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBsaXZlIHR1cGxlLgogCiBU aGVuIHdlIHdhaXQgdW50aWwgZXZlcnkgdHJhbnNhY3Rpb24gdGhhdCBjb3VsZCBoYXZlIGEgc25h cHNob3Qgb2xkZXIgdGhhbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK aW5kZXggM2ZmMzZmNTliZjguLjRhZDhhMmMwZjgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2J1 ZnBhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKQEAgLTE3NTksMjQyICsxNzYwLDQwOSBAQCBoZWFwYW1faW5kZXhfYnVpbGRf cmFuZ2Vfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJcmV0dXJuIHJlbHR1cGxlczsKIH0K IAorLyoKKyAqIENhbGN1bGF0ZSBzZXQgZGlmZmVyZW5jZSAocmVsYXRpdmUgY29tcGxlbWVudCkg b2YgbWFpbiBhbmQgYXV4CisgKiBzZXRzLgorICoKKyAqIEFsbCByZWNvcmRzIHdoaWNoIGFyZSBw cmVzZW50IGluIGF1eGlsaWFyeSB0dXBsZXNvcnQgYnV0IG5vdCBpbgorICogbWFpbiBhcmUgYWRk ZWQgdG8gdGhlIHN0b3JlLgorICoKKyAqIEluIHNldCB0aGVvcnkgbm90YXRpb24gc3RvcmUgPSBh dXggLSBtYWluIG9yIHN0b3JlID0gYXV4IC8gbWFpbi4KKyAqCisgKiByZXR1cm5zIG51bWJlciBv ZiBpdGVtcyBhZGRlZCB0byBzdG9yZQorICovCitzdGF0aWMgaW50CitoZWFwYW1faW5kZXhfdmFs aWRhdGVfdHVwbGVzb3J0X2RpZmZlcmVuY2UoVHVwbGVzb3J0c3RhdGUgICptYWluLAorCQkJCQkJ CQkJCSAgIFR1cGxlc29ydHN0YXRlICAqYXV4LAorCQkJCQkJCQkJCSAgIFR1cGxlc3RvcmVzdGF0 ZSAqc3RvcmUpCit7CisJaW50CQkJCW51bSA9IDA7CisJLyogc3RhdGUgdmFyaWFibGVzIGZvciB0 aGUgbWVyZ2UgKi8KKwlJdGVtUG9pbnRlciAJaW5kZXhjdXJzb3IgPSBOVUxMLAorCQkJCQlhdXhp bmRleGN1cnNvciA9IE5VTEw7CisJSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQsCisJCQkJCWF1eGRl Y29kZWQ7CisJYm9vbAkJCXR1cGxlc29ydF9lbXB0eSA9IGZhbHNlLAorCQkJCQlhdXh0dXBsZXNv cnRfZW1wdHkgPSBmYWxzZTsKKworCS8qIEluaXRpYWxpemUgcG9pbnRlcnMuICovCisJSXRlbVBv aW50ZXJTZXRJbnZhbGlkKCZkZWNvZGVkKTsKKwlJdGVtUG9pbnRlclNldEludmFsaWQoJmF1eGRl Y29kZWQpOworCisJLyoKKwkgKiBNYWluIGxvb3A6IHdlIHN0ZXAgdGhyb3VnaCB0aGUgYXV4aWxp YXJ5IHNvcnQgKGF1eFN0YXRlLT50dXBsZXNvcnQpLAorCSAqIHdoaWNoIGhvbGRzIFRJRHMgdGhh dCBtdXN0IGNvbXBhcmVkIHRvIHRob3NlIGZyb20gdGhlICJtYWluIiBzb3J0CisJICogKHN0YXRl LT50dXBsZXNvcnQpLgorCSAqLworCXdoaWxlICghYXV4dHVwbGVzb3J0X2VtcHR5KQorCXsKKwkJ RGF0dW0JCXRzX3ZhbDsKKwkJYm9vbAkJdHNfaXNudWxsOworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCisJCS8qCisJCSogQXR0ZW1wdCB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUg YXV4aWxpYXJ5IHNvcnQuIElmIGl0J3MKKwkJKiBlbXB0eSwgd2Ugc2V0IGF1eGluZGV4Y3Vyc29y IHRvIE5VTEwuCisJCSovCisJCWF1eHR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0 dW0oYXV4LCB0cnVlLAorCQkJCQkJCQkJCQkJIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAor CQkJCQkJCQkJCQkJIE5VTEwpOworCQlBc3NlcnQoYXV4dHVwbGVzb3J0X2VtcHR5IHx8ICF0c19p c251bGwpOworCQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJeworCQkJaXRlbXB0cl9kZWNv ZGUoJmF1eGRlY29kZWQsIERhdHVtR2V0SW50NjQodHNfdmFsKSk7CisJCQlhdXhpbmRleGN1cnNv ciA9ICZhdXhkZWNvZGVkOworCQl9CisJCWVsc2UKKwkJeworCQkJYXV4aW5kZXhjdXJzb3IgPSBO VUxMOworCQl9CisKKwkJLyoKKwkJKiBJZiB0aGUgYXV4aWxpYXJ5IHNvcnQgaXMgbm90IHlldCBl bXB0eSwgd2Ugbm93IHRyeSB0byBzeW5jaHJvbml6ZQorCQkqIHRoZSAibWFpbiIgc29ydCBjdXJz b3IgKGluZGV4Y3Vyc29yKSB3aXRoIGF1eGluZGV4Y3Vyc29yLiBXZSBhZHZhbmNlCisJCSogdGhl IG1haW4gc29ydCBjdXJzb3IgdW50aWwgd2UndmUgcmVhY2hlZCBvciBwYXNzZWQgdGhlIGF1eGls aWFyeSBUSUQuCisJCSovCisJCWlmICghYXV4dHVwbGVzb3J0X2VtcHR5KQorCQl7CisJCQkvKgor CQkJICogTW92ZSB0aGUgbWFpbiBzb3J0IGZvcndhcmQgd2hpbGU6CisJCQkgKiAgICgxKSBJdCdz IG5vdCBleGhhdXN0ZWQgKHR1cGxlc29ydF9lbXB0eSA9PSBmYWxzZSksIGFuZAorCQkJICogICAo MikgRWl0aGVyIGluZGV4Y3Vyc29yIGlzIE5VTEwgKGZpcnN0IGl0ZXJhdGlvbikgb3IKKwkJCSAq ICAgICAgIGluZGV4Y3Vyc29yIDwgYXV4aW5kZXhjdXJzb3IgaW4gVElEIG9yZGVyLgorCQkJICov CisJCQl3aGlsZSAoIXR1cGxlc29ydF9lbXB0eSAmJiAoaW5kZXhjdXJzb3IgPT0gTlVMTCB8fCAv KiBudWxsIG9uIGZpcnN0IHRpbWUgaGVyZSAqLworCQkJCQkJSXRlbVBvaW50ZXJDb21wYXJlKGlu ZGV4Y3Vyc29yLCBhdXhpbmRleGN1cnNvcikgPCAwKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEdl dCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgbWFpbiBzb3J0LiBJZiBpdCdzIGVtcHR5LAorCQkJCSAq IHdlIHNldCBpbmRleGN1cnNvciB0byBOVUxMLgorCQkJCSAqLworCQkJCXR1cGxlc29ydF9lbXB0 eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0obWFpbiwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgIGZhbHNl LCAmdHNfdmFsLCAmdHNfaXNudWxsLAorCQkJCQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJQXNzZXJ0 KHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxsKTsKKworCQkJCWlmICghdHVwbGVzb3J0X2Vt cHR5KQorCQkJCXsKKwkJCQkJaXRlbXB0cl9kZWNvZGUoJmRlY29kZWQsIERhdHVtR2V0SW50NjQo dHNfdmFsKSk7CisJCQkJCWluZGV4Y3Vyc29yID0gJmRlY29kZWQ7CisJCQkJfQorCQkJCWVsc2UK KwkJCQl7CisJCQkJCWluZGV4Y3Vyc29yID0gTlVMTDsKKwkJCQl9CisKKwkJCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOworCQkJfQorCisJCQkvKgorCQkJICogTm93LCBpZiBlaXRoZXI6CisJCQkg KiAgLSB0aGUgbWFpbiBzb3J0IGlzIGVtcHR5LCBvcgorCQkJICogIC0gaW5kZXhjdXJzb3IgPiBh dXhpbmRleGN1cnNvciwKKwkJCSAqCisJCQkgKiB0aGVuIGF1eGluZGV4Y3Vyc29yIGlkZW50aWZp ZXMgYSBUSUQgdGhhdCBkb2Vzbid0IGFwcGVhciBpbgorCQkJICogdGhlIG1haW4gc29ydC4gV2Ug bGlrZWx5IG5lZWQgdG8gaW5zZXJ0IGl0CisJCQkgKiBpbnRvIHRoZSB0YXJnZXQgaW5kZXggaWYg aXTigJlzIHZpc2libGUgaW4gdGhlIGhlYXAuCisJCQkgKi8KKwkJCWlmICh0dXBsZXNvcnRfZW1w dHkgfHwgSXRlbVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCBhdXhpbmRleGN1cnNvcikgPiAw KQorCQkJeworCQkJCXR1cGxlc3RvcmVfcHV0ZGF0dW0oc3RvcmUsIEludDY0R2V0RGF0dW0oaXRl bXB0cl9lbmNvZGUoYXV4aW5kZXhjdXJzb3IpKSk7CisJCQkJbnVtKys7CisJCQl9CisJCX0KKwl9 CisKKwlyZXR1cm4gbnVtOworfQorCit0eXBlZGVmIHN0cnVjdCBWYWxpZGF0ZUluZGV4U2NhblN0 YXRlCit7CisJVHVwbGVzdG9yZXN0YXRlCQkqc3RvcmU7CisJQmxvY2tOdW1iZXIJCQlwcmV2X2Js b2NrX251bWJlcjsKKwlPZmZzZXROdW1iZXIJCXByZXZfb2Zmc2V0X251bWJlcjsKK30gVmFsaWRh dGVJbmRleFNjYW5TdGF0ZTsKKworLyoKKyAqIFRoaXMgaXMgUmVhZFN0cmVhbUJsb2NrTnVtYmVy Q0IgaW1wbGVtZW50YXRpb24gd2hpY2ggd29ya3MgYXMgZm9sbG93czoKKyAqCisgKiAxKSBJdCBp dGVyYXRlcyBvdmVyIGEgc29ydGVkIHR1cGxlc3RvcmUsIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBh biBlbmNvZGVkCisgKiAgICBJdGVtUG9pbnRlcgorICoKKyAqIDIpIEl0IHJldHVybnMgdGhlIGN1 cnJlbnQgQmxvY2tOdW1iZXIgYW5kIGNvbGxlY3RzIGFsbCBPZmZzZXROdW1iZXJzCisgKiAgICBm b3IgdGhhdCBibG9jayBpbiBwZXJfYnVmZmVyX2RhdGEuCisgKgorICogMykgT25jZSB0aGUgY29k ZSBlbmNvdW50ZXJzIGEgbmV3IEJsb2NrTnVtYmVyLCBpdCBzdG9wcyByZWFkaW5nIG1vcmUKKyAq ICAgIG9mZnNldHMgYW5kIHNhdmVzIHRoZSBPZmZzZXROdW1iZXIgb2YgdGhlIG5ldyBibG9jayBm b3IgdGhlIG5leHQgY2FsbC4KKyAqCisgKiA0KSBUaGUgbGlzdCBvZiBvZmZzZXRzIGZvciBhIGJs b2NrIGlzIGFsd2F5cyB0ZXJtaW5hdGVkIHdpdGggSW52YWxpZE9mZnNldE51bWJlci4KKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHJlcGVhdGVkbHkgY2FsbGVkLCBlYWNo IHRpbWUgcmV0dXJuaW5nCisgKiB0aGUgbmV4dCBibG9jayBhbmQgaXRzIGNvcnJlc3BvbmRpbmcg c2V0IG9mIG9mZnNldHMuCisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2luZGV4X3Zh bGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCgKKwkJCQkJCQkJICBSZWFkU3RyZWFtICpzdHJl YW0sCisJCQkJCQkJCSAgdm9pZCAqdm9pZF9jYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CSAgdm9pZCAqdm9pZF9wZXJfYnVmZmVyX2RhdGEKKwkJCQkJCQkJICApCit7CisJYm9vbCBzaG91 bGRfZnJlZTsKKwlEYXR1bSBkYXR1bTsKKwlCbG9ja051bWJlciByZXN1bHQgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CisJaW50IGkgPSAwOworCisJLyoKKwkgKiBSZXRyaWV2ZSB0aGUgc3BlY2lhbGl6 ZWQgY2FsbGJhY2sgc3RhdGUgYW5kIHRoZSBvdXRwdXQgYnVmZmVyLgorCSAqIGNhbGxiYWNrX3By aXZhdGVfZGF0YSBrZWVwcyB0cmFjayBvZiB0aGUgcHJldmlvdXMgYmxvY2sgYW5kIG9mZnNldAor CSAqIGZyb20gYSBwcmlvciBpbnZvY2F0aW9uLCBpZiBhbnkuCisJICovCisJVmFsaWRhdGVJbmRl eFNjYW5TdGF0ZSAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhID0gdm9pZF9jYWxsYmFja19wcml2YXRl X2RhdGE7CisJT2Zmc2V0TnVtYmVyICpwZXJfYnVmZmVyX2RhdGEgPSB2b2lkX3Blcl9idWZmZXJf ZGF0YTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSAibGVmdG92ZXIiIG9mZnNldCBudW1iZXIg ZnJvbSB0aGUgcHJldmlvdXMgaW52b2NhdGlvbiwKKwkgKiBpdCBtZWFucyB3ZSBoYWQgc3dpdGNo ZWQgdG8gYSBuZXcgYmxvY2sgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBjYWxsLgorCSAqIFdl IHBsYWNlIHRoYXQgbGVmdG92ZXIgb2Zmc2V0IG51bWJlciBpbnRvIHRoZSBidWZmZXIgZmlyc3Qu CisJICovCisJaWYgKGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZzZXRfbnVtYmVyICE9 IEludmFsaWRPZmZzZXROdW1iZXIpCisJeworCQlBc3NlcnQoY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LT5wcmV2X2Jsb2NrX251bWJlciAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCQkvKgorCQkgKiAn cmVzdWx0JyBpcyB0aGUgYmxvY2sgbnVtYmVyIHRvIHJldHVybi4gV2Ugc2V0IGl0IHRvIHRoZSBi bG9jaworCQkgKiBmcm9tIHRoZSBwcmV2aW91cyBsZWZ0b3ZlciBvZmZzZXQuCisJCSAqLworCQly ZXN1bHQgPSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyOworCQkvKiBQ bGFjZSBsZWZ0b3ZlciBvZmZzZXQgbnVtYmVyIGluIHRoZSBvdXRwdXQgYnVmZmVyLiAqLworCQlw ZXJfYnVmZmVyX2RhdGFbaSsrXSA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZzZXRf bnVtYmVyOworCQkvKgorCQkgKiBDbGVhciB0aGUgbGVmdG92ZXIgb2Zmc2V0IG51bWJlciBzbyBp dCB3b24ndCBiZSByZXVzZWQgdW5sZXNzCisJCSAqIHdlIGVuY291bnRlciBhbm90aGVyIGJsb2Nr IGNoYW5nZS4KKwkJICovCisJCWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZzZXRfbnVt YmVyID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwl9CisKKwkvKgorCSAqIFJlYWQgZnJvbSB0aGUg dHVwbGVzdG9yZSB1bnRpbCB3ZSBlaXRoZXIgcnVuIG91dCBvZiB0dXBsZXMgb3Igd2UKKwkgKiBl bmNvdW50ZXIgYSBibG9jayBjaGFuZ2UuIEZvciBlYWNoIHR1cGxlOgorCSAqCisJICogICAxKSBE ZWNvZGUgaXRzIGJsb2NrL29mZnNldCBmcm9tIHRoZSBEYXR1bS4KKwkgKiAgIDIpIElmIGl0J3Mg dGhlIGZpcnN0IHRpbWUgaW4gdGhpcyBjYWxsIChwcmV2X2Jsb2NrX251bWJlciA9PSBJbnZhbGlk QmxvY2tOdW1iZXIpLAorCSAqICAgICAgaW5pdGlhbGl6ZSBwcmV2X2Jsb2NrX251bWJlci4KKwkg KiAgIDMpIElmIHRoZSBibG9jayBudW1iZXIgbWF0Y2hlcyB0aGUgY3VycmVudCBibG9jaywgY29s bGVjdCB0aGUgb2Zmc2V0LgorCSAqICAgNCkgSWYgdGhlIGJsb2NrIG51bWJlciBkaWZmZXJzLCBz YXZlIHRoYXQgb2Zmc2V0IGFzIGxlZnRvdmVyIGFuZCBicmVhaworCSAqICAgICAgc28gdGhhdCB0 aGUgbmV4dCBjYWxsIGNhbiBoYW5kbGUgdGhlIG5ldyBibG9jay4KKwkgKi8KKwl3aGlsZSAodHVw bGVzdG9yZV9nZXRkYXR1bShjYWxsYmFja19wcml2YXRlX2RhdGEtPnN0b3JlLCB0cnVlLCAmc2hv dWxkX2ZyZWUsICZkYXR1bSkpCisJeworCQlCbG9ja051bWJlciBuZXh0X2Jsb2NrX251bWJlcjsK KwkJSXRlbVBvaW50ZXJEYXRhIG5leHRfZGF0YTsKKworCQkvKiBEZWNvZGUgdGhlIGRhdHVtIGlu dG8gYW4gSXRlbVBvaW50ZXIgKGJsb2NrICsgb2Zmc2V0KS4gKi8KKwkJaXRlbXB0cl9kZWNvZGUo Jm5leHRfZGF0YSwgRGF0dW1HZXRJbnQ2NChkYXR1bSkpOworCQluZXh0X2Jsb2NrX251bWJlciA9 IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJLyoKKwkJICogSWYg d2UgaGF2ZW4ndCBzZXQgYSBibG9jayBudW1iZXIgeWV0IHRoaXMgcm91bmQsIGluaXRpYWxpemUg aXQKKwkJICogdXNpbmcgdGhlIGZpcnN0IHR1cGxlIHdlIHJlYWQuCisJCSAqLworCQlpZiAoY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9PSBJbnZhbGlkQmxvY2tOdW1i ZXIpCisJCQljYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID0gbmV4dF9i bG9ja19udW1iZXI7CisKKwkJLyoKKwkJICogQWx3YXlzIHNldCB0aGUgcmVzdWx0IHRvIGJlIHRo ZSAiY3VycmVudCIgYmxvY2sgbnVtYmVyCisJCSAqIHdlIGFyZSBmaWxsaW5nIG9mZnNldHMgZm9y LgorCQkgKi8KKwkJcmVzdWx0ID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251 bWJlcjsKKworCQkvKgorCQkgKiBJZiB0aGlzIHR1cGxlIGlzIGZyb20gdGhlIHNhbWUgYmxvY2ss IGp1c3Qgc3RvcmUgaXRzIG9mZnNldAorCQkgKiBpbiBvdXIgcGVyX2J1ZmZlcl9kYXRhIGFycmF5 LgorCQkgKi8KKwkJaWYgKG5leHRfYmxvY2tfbnVtYmVyID09IGNhbGxiYWNrX3ByaXZhdGVfZGF0 YS0+cHJldl9ibG9ja19udW1iZXIpCisJCXsKKwkJCXBlcl9idWZmZXJfZGF0YVtpKytdID0gSXRl bVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJCS8qIEZyZWUgdGhlIGRh dHVtIGlmIG5lZWRlZC4gKi8KKwkJCWlmIChzaG91bGRfZnJlZSkKKwkJCQlwZnJlZShEYXR1bUdl dFBvaW50ZXIoZGF0dW0pKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGUg YmxvY2sganVzdCBjaGFuZ2VkLCBzdG9yZSB0aGUgb2Zmc2V0IG9mIHRoZSBuZXcgYmxvY2sKKwkJ CSAqIGFzIGxlZnRvdmVyIGZvciB0aGUgbmV4dCBpbnZvY2F0aW9uIGFuZCBicmVhayBvdXQuCisJ CQkgKi8KKwkJCWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXIgPSBuZXh0 X2Jsb2NrX251bWJlcjsKKwkJCWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZzZXRfbnVt YmVyID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJCS8qIEZy ZWUgdGhlIGRhdHVtIGlmIG5lZWRlZC4gKi8KKwkJCWlmIChzaG91bGRfZnJlZSkKKwkJCQlwZnJl ZShEYXR1bUdldFBvaW50ZXIoZGF0dW0pKTsKKworCQkJLyogQnJlYWsgdG8gbGV0IHRoZSBuZXh0 IGNhbGwgaGFuZGxlIHRoZSBuZXcgYmxvY2suICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8q CisJICogVGVybWluYXRlIHRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIHRoaXMgYmxvY2sgd2l0aCBh biBJbnZhbGlkT2Zmc2V0TnVtYmVyLgorCSAqLworCXBlcl9idWZmZXJfZGF0YVtpXSA9IEludmFs aWRPZmZzZXROdW1iZXI7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIHZvaWQKIGhlYXBh bV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCSAgIFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkgICBJbmRleEluZm8gKmluZGV4SW5mbywKIAkJ CQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICpz dGF0ZSkKKwkJCQkJCSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgICBWYWxp ZGF0ZUluZGV4U3RhdGUgKmF1eFN0YXRlKQogewotCVRhYmxlU2NhbkRlc2Mgc2NhbjsKLQlIZWFw U2NhbkRlc2MgaHNjYW47Ci0JSGVhcFR1cGxlCWhlYXBUdXBsZTsKIAlEYXR1bQkJdmFsdWVzW0lO REVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwotCUV4cHJTdGF0 ZSAgKnByZWRpY2F0ZTsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlFU3RhdGUJICAgKmVzdGF0 ZTsKLQlFeHByQ29udGV4dCAqZWNvbnRleHQ7Ci0JQmxvY2tOdW1iZXIgcm9vdF9ibGtubyA9IElu dmFsaWRCbG9ja051bWJlcjsKLQlPZmZzZXROdW1iZXIgcm9vdF9vZmZzZXRzW01heEhlYXBUdXBs ZXNQZXJQYWdlXTsKLQlib29sCQlpbl9pbmRleFtNYXhIZWFwVHVwbGVzUGVyUGFnZV07Ci0JQmxv Y2tOdW1iZXIgcHJldmlvdXNfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KLQkvKiBzdGF0 ZSB2YXJpYWJsZXMgZm9yIHRoZSBtZXJnZSAqLwotCUl0ZW1Qb2ludGVyIGluZGV4Y3Vyc29yID0g TlVMTDsKLQlJdGVtUG9pbnRlckRhdGEgZGVjb2RlZDsKLQlib29sCQl0dXBsZXNvcnRfZW1wdHkg PSBmYWxzZTsKKworCVR1cGxlVGFibGVTbG90ICAqc2xvdDsKKwlFU3RhdGUJCQkqZXN0YXRlOwor CUV4cHJDb250ZXh0CQkqZWNvbnRleHQ7CisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5 ID0gR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKKworCWludAkJCQludW1fdG9fY2hl Y2s7CisJVHVwbGVzdG9yZXN0YXRlICp0dXBsZXNfZm9yX2NoZWNrOworCVZhbGlkYXRlSW5kZXhT Y2FuU3RhdGUgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCisJQnVmZmVyIGJ1ZjsKKwlPZmZzZXRO dW1iZXIqIHR1cGxlczsKKwlSZWFkU3RyZWFtICpyZWFkX3N0cmVhbTsKKworCS8qIFVzZSAxMCUg b2YgbWVtb3J5IGZvciB0dXBsZSBzdG9yZS4gKi8KKwlpbnQJCXN0b3JlX3dvcmtfbWVtX3BhcnQg PSBtYWludGVuYW5jZV93b3JrX21lbSAvIDEwOworCisJLyoKKwkgKiBFbmNvZGUgVElEcyBhcyBp bnQ4IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKKwkg KiBpdGVtIHBvaW50ZXJzLiAgVGhpcyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIsIHByaW1h cmlseSBiZWNhdXNlIFRJRAorCSAqIGlzIGEgcGFzcy1ieS1yZWZlcmVuY2UgdHlwZSBvbiBhbGwg cGxhdGZvcm1zLCB3aGVyZWFzIGludDggaXMKKwkgKiBwYXNzLWJ5LXZhbHVlIG9uIG1vc3QgcGxh dGZvcm1zLgorCSAqLworCXR1cGxlc19mb3JfY2hlY2sgPSAgdHVwbGVzdG9yZV9iZWdpbl9kYXR1 bShJTlQ4T0lELCBmYWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCiAJLyoKIAkg KiBzYW5pdHkgY2hlY2tzCiAJICovCiAJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhSZWxhdGlvbi0+ cmRfcmVsLT5yZWxhbSkpOwogCi0JLyoKLQkgKiBOZWVkIGFuIEVTdGF0ZSBmb3IgZXZhbHVhdGlv biBvZiBpbmRleCBleHByZXNzaW9ucyBhbmQgcGFydGlhbC1pbmRleAotCSAqIHByZWRpY2F0ZXMu ICBBbHNvIGEgc2xvdCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgotCSAqLworCW51bV90b19j aGVjayA9IGhlYXBhbV9pbmRleF92YWxpZGF0ZV90dXBsZXNvcnRfZGlmZmVyZW5jZShzdGF0ZS0+ dHVwbGVzb3J0LAorCQkJCQkJCQkJCQkJCQkgYXV4U3RhdGUtPnR1cGxlc29ydCwKKwkJCQkJCQkJ CQkJCQkJIHR1cGxlc19mb3JfY2hlY2spOworCisJLyogSXQgaXMgb3VyIHJlc3BvbnNpYmlsaXR5 IHRvIGNsb3NlIHR1cGxlIHNvcnQgYXMgZmFzdCBhcyB3ZSBjYW4gKi8KKwl0dXBsZXNvcnRfZW5k KHN0YXRlLT50dXBsZXNvcnQpOworCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUtPnR1cGxlc29ydCk7 CisKKwlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CisKIAll c3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7CiAJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4 cHJDb250ZXh0KGVzdGF0ZSk7CiAJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxh dGlvbkdldERlc2NyKGhlYXBSZWxhdGlvbiksCi0JCQkJCQkJCQkmVFRTT3BzSGVhcFR1cGxlKTsK KwkJCQkJCQkJCSZUVFNPcHNCdWZmZXJIZWFwVHVwbGUpOwogCiAJLyogQXJyYW5nZSBmb3IgZWNv bnRleHQncyBzY2FuIHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1bmRlciB0ZXN0ICovCiAJZWNvbnRl eHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAotCS8qIFNldCB1cCBleGVjdXRpb24gc3RhdGUg Zm9yIHByZWRpY2F0ZSwgaWYgYW55LiAqLwotCXByZWRpY2F0ZSA9IEV4ZWNQcmVwYXJlUXVhbChp bmRleEluZm8tPmlpX1ByZWRpY2F0ZSwgZXN0YXRlKTsKKwljYWxsYmFja19wcml2YXRlX2RhdGEu cHJldl9ibG9ja19udW1iZXIgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJY2FsbGJhY2tfcHJpdmF0 ZV9kYXRhLnN0b3JlID0gdHVwbGVzX2Zvcl9jaGVjazsKKwljYWxsYmFja19wcml2YXRlX2RhdGEu cHJldl9vZmZzZXRfbnVtYmVyID0gSW52YWxpZE9mZnNldE51bWJlcjsKIAotCS8qCi0JICogUHJl cGFyZSBmb3Igc2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIFdlIG5lZWQganVzdCB0aG9zZSB0 dXBsZXMKLQkgKiBzYXRpc2Z5aW5nIHRoZSBwYXNzZWQtaW4gcmVmZXJlbmNlIHNuYXBzaG90LiAg V2UgbXVzdCBkaXNhYmxlIHN5bmNzY2FuCi0JICogaGVyZSwgYmVjYXVzZSBpdCdzIGNyaXRpY2Fs IHRoYXQgd2UgcmVhZCBmcm9tIGJsb2NrIHplcm8gZm9yd2FyZCB0bwotCSAqIG1hdGNoIHRoZSBz b3J0ZWQgVElEcy4KLQkgKi8KLQlzY2FuID0gdGFibGVfYmVnaW5zY2FuX3N0cmF0KGhlYXBSZWxh dGlvbiwJLyogcmVsYXRpb24gKi8KLQkJCQkJCQkJIHNuYXBzaG90LAkvKiBzbmFwc2hvdCAqLwot CQkJCQkJCQkgMCwgLyogbnVtYmVyIG9mIGtleXMgKi8KLQkJCQkJCQkJIE5VTEwsCS8qIHNjYW4g a2V5ICovCi0JCQkJCQkJCSB0cnVlLAkvKiBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IE9LICovCi0J CQkJCQkJCSBmYWxzZSk7CS8qIHN5bmNzY2FuIG5vdCBPSyAqLwotCWhzY2FuID0gKEhlYXBTY2Fu RGVzYykgc2NhbjsKKwlyZWFkX3N0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJF QURfU1RSRUFNX01BSU5URU5BTkNFIHwgUkVBRF9TVFJFQU1fVVNFX0JBVENISU5HLAorCQkJCQkJ CQkJCQkJCQkgYnN0cmF0ZWd5LAorCQkJCQkJCQkJCQkJCQkgaGVhcFJlbGF0aW9uLCBNQUlOX0ZP UktOVU0sCisJCQkJCQkJCQkJCQkJCSBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0 cmVhbV9uZXh0LAorCQkJCQkJCQkJCQkJCQkgJmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJ CQkJCQkJCQkJIChNYXhIZWFwVHVwbGVzUGVyUGFnZSArIDEpICogc2l6ZW9mKE9mZnNldE51bWJl cikpOwogCi0JcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19TQ0FOX0JMT0NL U19UT1RBTCwKLQkJCQkJCQkJIGhzY2FuLT5yc19uYmxvY2tzKTsKKwlwZ3N0YXRfcHJvZ3Jlc3Nf dXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfVE9UQUwsIG51bV90b19jaGVj ayk7CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQ TEVTX0RPTkUsIDApOwogCi0JLyoKLQkgKiBTY2FuIGFsbCB0dXBsZXMgbWF0Y2hpbmcgdGhlIHNu YXBzaG90LgotCSAqLwotCXdoaWxlICgoaGVhcFR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAoKGJ1ZiA9IHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKHJlYWRfc3RyZWFtLCAodm9pZCopICZ0dXBsZXMpKSAhPSBJbnZhbGlkQnVm ZmVyKQogCXsKLQkJSXRlbVBvaW50ZXIgaGVhcGN1cnNvciA9ICZoZWFwVHVwbGUtPnRfc2VsZjsK LQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RUdXBsZTsKLQkJT2Zmc2V0TnVtYmVyIHJvb3Rfb2ZmbnVt OworCQlIZWFwVHVwbGVEYXRhCWhlYXBfdHVwbGVfZGF0YVtNYXhIZWFwVHVwbGVzUGVyUGFnZV07 CisJCWludCBpOworCQlPZmZzZXROdW1iZXIgb2ZmOworCQlCbG9ja051bWJlciBibG9ja19udW1i ZXI7CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzdGF0ZS0+aHR1cHMgKz0gMTsK KwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJYmxvY2tfbnVtYmVyID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAotCQlpZiAoKHByZXZpb3VzX2Jsa25vID09IElu dmFsaWRCbG9ja051bWJlcikgfHwKLQkJCShoc2Nhbi0+cnNfY2Jsb2NrICE9IHByZXZpb3VzX2Js a25vKSkKKwkJaSA9IDA7CisJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zm c2V0TnVtYmVyKQogCQl7Ci0JCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X1NDQU5fQkxPQ0tTX0RPTkUsCi0JCQkJCQkJCQkJIGhzY2FuLT5yc19jYmxvY2spOwotCQkJcHJl dmlvdXNfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOworCQkJSXRlbVBvaW50ZXJEYXRhIHRpZDsK KwkJCWJvb2wJCWFsbF9kZWFkLCBmb3VuZDsKKwkJCUl0ZW1Qb2ludGVyU2V0KCZ0aWQsIGJsb2Nr X251bWJlciwgb2ZmKTsKKworCQkJZm91bmQgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKCZ0aWQs IGhlYXBSZWxhdGlvbiwgYnVmLCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkgICAmaGVhcF90dXBsZV9k YXRhW2ldLCAmYWxsX2RlYWQsIHRydWUpOworCQkJaWYgKCFmb3VuZCkKKwkJCQlJdGVtUG9pbnRl clNldEludmFsaWQoJmhlYXBfdHVwbGVfZGF0YVtpXS50X3NlbGYpOworCQkJaSsrOworCQkJc3Rh dGUtPmh0dXBzICs9IDE7CiAJCX0KKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CiAKLQkJLyoKLQkJICogQXMgY29tbWVudGVkIGluIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4s IHdlIHNob3VsZCBpbmRleCBoZWFwLW9ubHkKLQkJICogdHVwbGVzIHVuZGVyIHRoZSBUSURzIG9m IHRoZWlyIHJvb3QgdHVwbGVzOyBzbyB3aGVuIHdlIGFkdmFuY2Ugb250bwotCQkgKiBhIG5ldyBo ZWFwIHBhZ2UsIGJ1aWxkIGEgbWFwIG9mIHJvb3QgaXRlbSBvZmZzZXRzIG9uIHRoZSBwYWdlLgot CQkgKgotCQkgKiBUaGlzIGNvbXBsaWNhdGVzIG1lcmdpbmcgYWdhaW5zdCB0aGUgdHVwbGVzb3J0 IG91dHB1dDogd2Ugd2lsbAotCQkgKiB2aXNpdCB0aGUgbGl2ZSB0dXBsZXMgaW4gb3JkZXIgYnkg dGhlaXIgb2Zmc2V0cywgYnV0IHRoZSByb290Ci0JCSAqIG9mZnNldHMgdGhhdCB3ZSBuZWVkIHRv IGNvbXBhcmUgYWdhaW5zdCB0aGUgaW5kZXggY29udGVudHMgbWlnaHQgYmUKLQkJICogb3JkZXJl ZCBkaWZmZXJlbnRseS4gIFNvIHdlIG1pZ2h0IGhhdmUgdG8gImxvb2sgYmFjayIgd2l0aGluIHRo ZQotCQkgKiB0dXBsZXNvcnQgb3V0cHV0LCBidXQgb25seSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFn ZS4gIFdlIGhhbmRsZSB0aGF0Ci0JCSAqIGJ5IGtlZXBpbmcgYSBib29sIGFycmF5IGluX2luZGV4 W10gc2hvd2luZyBhbGwgdGhlCi0JCSAqIGFscmVhZHktcGFzc2VkLW92ZXIgdHVwbGVzb3J0IG91 dHB1dCBUSURzIG9mIHRoZSBjdXJyZW50IHBhZ2UuIFdlCi0JCSAqIGNsZWFyIHRoYXQgYXJyYXkg aGVyZSwgd2hlbiBhZHZhbmNpbmcgb250byBhIG5ldyBoZWFwIHBhZ2UuCi0JCSAqLwotCQlpZiAo aHNjYW4tPnJzX2NibG9jayAhPSByb290X2Jsa25vKQorCQlpID0gMDsKKwkJd2hpbGUgKChvZmYg PSB0dXBsZXNbaV0pICE9IEludmFsaWRPZmZzZXROdW1iZXIpCiAJCXsKLQkJCVBhZ2UJCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGhzY2FuLT5yc19jYnVmKTsKLQotCQkJTG9ja0J1ZmZlcihoc2Nhbi0+ cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwotCQkJaGVhcF9nZXRfcm9vdF90dXBsZXMocGFn ZSwgcm9vdF9vZmZzZXRzKTsKLQkJCUxvY2tCdWZmZXIoaHNjYW4tPnJzX2NidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7Ci0KLQkJCW1lbXNldChpbl9pbmRleCwgMCwgc2l6ZW9mKGluX2luZGV4KSk7 Ci0KLQkJCXJvb3RfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOwotCQl9Ci0KLQkJLyogQ29udmVy dCBhY3R1YWwgdHVwbGUgVElEIHRvIHJvb3QgVElEICovCi0JCXJvb3RUdXBsZSA9ICpoZWFwY3Vy c29yOwotCQlyb290X29mZm51bSA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKGhlYXBjdXJz b3IpOwotCi0JCWlmIChIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCXsKLQkJCXJv b3Rfb2ZmbnVtID0gcm9vdF9vZmZzZXRzW3Jvb3Rfb2ZmbnVtIC0gMV07Ci0JCQlpZiAoIU9mZnNl dE51bWJlcklzVmFsaWQocm9vdF9vZmZudW0pKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJCSBlcnJtc2dfaW50ZXJuYWwo ImZhaWxlZCB0byBmaW5kIHBhcmVudCB0dXBsZSBmb3IgaGVhcC1vbmx5IHR1cGxlIGF0ICgldSwl dSkgaW4gdGFibGUgXCIlc1wiIiwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoaGVh cGN1cnNvciksCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXBSZWxhdGlv bikpKSk7Ci0JCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcigmcm9vdFR1cGxlLCByb290X29m Zm51bSk7Ci0JCX0KLQotCQkvKgotCQkgKiAibWVyZ2UiIGJ5IHNraXBwaW5nIHRocm91Z2ggdGhl IGluZGV4IHR1cGxlcyB1bnRpbCB3ZSBmaW5kIG9yIHBhc3MKLQkJICogdGhlIGN1cnJlbnQgcm9v dCB0dXBsZS4KLQkJICovCi0JCXdoaWxlICghdHVwbGVzb3J0X2VtcHR5ICYmCi0JCQkgICAoIWlu ZGV4Y3Vyc29yIHx8Ci0JCQkJSXRlbVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1 cGxlKSA8IDApKQotCQl7Ci0JCQlEYXR1bQkJdHNfdmFsOwotCQkJYm9vbAkJdHNfaXNudWxsOwot Ci0JCQlpZiAoaW5kZXhjdXJzb3IpCisJCQlpZiAoSXRlbVBvaW50ZXJJc1ZhbGlkKCZoZWFwX3R1 cGxlX2RhdGFbaV0udF9zZWxmKSkKIAkJCXsKKwkJCQlJdGVtUG9pbnRlckRhdGEgcm9vdF90aWQ7 CisJCQkJSXRlbVBvaW50ZXJTZXQoJnJvb3RfdGlkLCBibG9ja19udW1iZXIsIG9mZik7CisKKwkJ CQkvKiBSZXNldCB0aGUgcGVyLXR1cGxlIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgbmV4dCBmZXRj aC4gKi8KKwkJCQlNZW1vcnlDb250ZXh0UmVzZXQoZWNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21l bW9yeSk7CisJCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZoZWFwX3R1cGxlX2RhdGFbaV0s IHNsb3QsIGJ1Zik7CisKKwkJCQkvKiBDb21wdXRlIHRoZSBrZXkgdmFsdWVzIGFuZCBudWxsIGZs YWdzIGZvciB0aGlzIHR1cGxlLiAqLworCQkJCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywKKwkJ CQkJCQkgICBzbG90LAorCQkJCQkJCSAgIGVzdGF0ZSwKKwkJCQkJCQkgICB2YWx1ZXMsCisJCQkJ CQkJICAgaXNudWxsKTsKKwogCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgaW5kZXggaXRlbXMgc2Vl biBlYXJsaWVyIG9uIHRoZSBjdXJyZW50IGhlYXAgcGFnZQorCQkJCSAqIEluc2VydCB0aGUgdHVw bGUgaW50byB0aGUgdGFyZ2V0IGluZGV4LgogCQkJCSAqLwotCQkJCWlmIChJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKGluZGV4Y3Vyc29yKSA9PSByb290X2Jsa25vKQotCQkJCQlpbl9pbmRleFtJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpbmRleGN1cnNvcikgLSAxXSA9IHRydWU7CisJCQkJ aW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCisJCQkJCQkJIHZhbHVlcywKKwkJCQkJCQkgaXNu dWxsLAorCQkJCQkJCSAmcm9vdF90aWQsIC8qIGluc2VydCByb290IHR1cGxlICovCisJCQkJCQkJ IGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkgaW5kZXhJbmZvLT5paV9VbmlxdWUgPworCQkJCQkJCSBV TklRVUVfQ0hFQ0tfWUVTIDogVU5JUVVFX0NIRUNLX05PLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJ CQkgaW5kZXhJbmZvKTsKKworCQkJCXN0YXRlLT50dXBzX2luc2VydGVkICs9IDE7CiAJCQl9CiAK LQkJCXR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0oc3RhdGUtPnR1cGxlc29y dCwgdHJ1ZSwKLQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0c192YWwsICZ0c19pc251bGwsCi0JCQkJ CQkJCQkJCQkgIE5VTEwpOwotCQkJQXNzZXJ0KHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxs KTsKLQkJCWlmICghdHVwbGVzb3J0X2VtcHR5KQotCQkJewotCQkJCWl0ZW1wdHJfZGVjb2RlKCZk ZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOwotCQkJCWluZGV4Y3Vyc29yID0gJmRlY29k ZWQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQmUgdGlkeSAqLwotCQkJCWluZGV4Y3Vy c29yID0gTlVMTDsKLQkJCX0KKwkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNT X0NSRUFURUlEWF9UVVBMRVNfRE9ORSwgMSk7CisJCQlpKys7CiAJCX0KIAotCQkvKgotCQkgKiBJ ZiB0aGUgdHVwbGVzb3J0IGhhcyBvdmVyc2hvdCAqYW5kKiB3ZSBkaWRuJ3Qgc2VlIGEgbWF0Y2gg ZWFybGllciwKLQkJICogdGhlbiB0aGlzIHR1cGxlIGlzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXgs IHNvIGluc2VydCBpdC4KLQkJICovCi0JCWlmICgodHVwbGVzb3J0X2VtcHR5IHx8Ci0JCQkgSXRl bVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1cGxlKSA+IDApICYmCi0JCQkhaW5f aW5kZXhbcm9vdF9vZmZudW0gLSAxXSkKLQkJewotCQkJTWVtb3J5Q29udGV4dFJlc2V0KGVjb250 ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOwotCi0JCQkvKiBTZXQgdXAgZm9yIHByZWRpY2F0 ZSBvciBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8KLQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShoZWFw VHVwbGUsIHNsb3QsIGZhbHNlKTsKLQotCQkJLyoKLQkJCSAqIEluIGEgcGFydGlhbCBpbmRleCwg ZGlzY2FyZCB0dXBsZXMgdGhhdCBkb24ndCBzYXRpc2Z5IHRoZQotCQkJICogcHJlZGljYXRlLgot CQkJICovCi0JCQlpZiAocHJlZGljYXRlICE9IE5VTEwpCi0JCQl7Ci0JCQkJaWYgKCFFeGVjUXVh bChwcmVkaWNhdGUsIGVjb250ZXh0KSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0J CQkgKiBGb3IgdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSwgZXh0cmFjdCBhbGwgdGhlIGF0dHJpYnV0 ZXMgd2UgdXNlCi0JCQkgKiBpbiB0aGlzIGluZGV4LCBhbmQgbm90ZSB3aGljaCBhcmUgbnVsbC4g IFRoaXMgYWxzbyBwZXJmb3JtcwotCQkJICogZXZhbHVhdGlvbiBvZiBhbnkgZXhwcmVzc2lvbnMg bmVlZGVkLgotCQkJICovCi0JCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCi0JCQkJCQkgICBz bG90LAotCQkJCQkJICAgZXN0YXRlLAotCQkJCQkJICAgdmFsdWVzLAotCQkJCQkJICAgaXNudWxs KTsKLQotCQkJLyoKLQkJCSAqIFlvdSdkIHRoaW5rIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgYnVp bGQgdGhlIGluZGV4IHR1cGxlIGhlcmUsCi0JCQkgKiBidXQgc29tZSBpbmRleCBBTXMgd2FudCB0 byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gdGhlIGRhdGEKLQkJCSAqIGZpcnN0LiBTbyBwYXNz IHRoZSB2YWx1ZXNbXSBhbmQgaXNudWxsW10gYXJyYXlzLCBpbnN0ZWFkLgotCQkJICovCi0KLQkJ CS8qCi0JCQkgKiBJZiB0aGUgdHVwbGUgaXMgYWxyZWFkeSBjb21taXR0ZWQgZGVhZCwgeW91IG1p Z2h0IHRoaW5rIHdlCi0JCQkgKiBjb3VsZCBzdXBwcmVzcyB1bmlxdWVuZXNzIGNoZWNraW5nLCBi dXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZQotCQkJICogaW4gdGhlIHByZXNlbmNlIG9mIEhPVCwg YmVjYXVzZSB0aGUgaW5zZXJ0IGlzIGFjdHVhbGx5IGEgcHJveHkKLQkJCSAqIGZvciBhIHVuaXF1 ZW5lc3MgY2hlY2sgb24gdGhlIHdob2xlIEhPVC1jaGFpbi4gIFRoYXQgaXMsIHRoZQotCQkJICog dHVwbGUgd2UgaGF2ZSBoZXJlIGNvdWxkIGJlIGRlYWQgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeQot CQkJICogSE9ULXVwZGF0ZWQsIGFuZCBpZiBzbyB0aGUgdXBkYXRpbmcgdHJhbnNhY3Rpb24gd2ls bCBub3QgaGF2ZQotCQkJICogdGhvdWdodCBpdCBzaG91bGQgaW5zZXJ0IGluZGV4IGVudHJpZXMu ICBUaGUgaW5kZXggQU0gd2lsbAotCQkJICogY2hlY2sgdGhlIHdob2xlIEhPVC1jaGFpbiBhbmQg Y29ycmVjdGx5IGRldGVjdCBhIGNvbmZsaWN0IGlmCi0JCQkgKiB0aGVyZSBpcyBvbmUuCi0JCQkg Ki8KLQotCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCi0JCQkJCQkgdmFsdWVzLAotCQkJ CQkJIGlzbnVsbCwKLQkJCQkJCSAmcm9vdFR1cGxlLAotCQkJCQkJIGhlYXBSZWxhdGlvbiwKLQkJ CQkJCSBpbmRleEluZm8tPmlpX1VuaXF1ZSA/Ci0JCQkJCQkgVU5JUVVFX0NIRUNLX1lFUyA6IFVO SVFVRV9DSEVDS19OTywKLQkJCQkJCSBmYWxzZSwKLQkJCQkJCSBpbmRleEluZm8pOwotCi0JCQlz dGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwotCQl9CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKIAl9 CiAKLQl0YWJsZV9lbmRzY2FuKHNjYW4pOwotCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xv dChzbG90KTsKIAogCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CiAKKwlyZWFkX3N0cmVhbV9l bmQocmVhZF9zdHJlYW0pOworCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19mb3JfY2hlY2spOworCisJ RnJlZUFjY2Vzc1N0cmF0ZWd5KGJzdHJhdGVneSk7CisKIAkvKiBUaGVzZSBtYXkgaGF2ZSBiZWVu IHBvaW50aW5nIHRvIHRoZSBub3ctZ29uZSBlc3RhdGUgKi8KIAlpbmRleEluZm8tPmlpX0V4cHJl c3Npb25zU3RhdGUgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMKaW5kZXggMTMyNWYzZDk3MDAuLjRmNzc2MjdmYjNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jCkBAIC03MTIsMTEgKzcxMiwxNiBAQCBVcGRhdGVJbmRleFJlbGF0aW9uKE9pZCBpbmRl eG9pZCwKICAqCQkJYWxyZWFkeSBleGlzdHMuCiAgKgkJSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVE OgogICoJCQljcmVhdGUgYSBwYXJ0aXRpb25lZCBpbmRleCAodGFibGUgbXVzdCBiZSBwYXJ0aXRp b25lZCkKKyAqCQlJTkRFWF9DUkVBVEVfQVVYSUxJQVJZOgorICoJCQltYXJrIGluZGV4IGFzIGF1 eGlsaWFyeSBpbmRleAogICogY29uc3RyX2ZsYWdzOiBmbGFncyBwYXNzZWQgdG8gaW5kZXhfY29u c3RyYWludF9jcmVhdGUKICAqCQkob25seSBpZiBJTkRFWF9DUkVBVEVfQUREX0NPTlNUUkFJTlQg aXMgc2V0KQogICogYWxsb3dfc3lzdGVtX3RhYmxlX21vZHM6IGFsbG93IHRhYmxlIHRvIGJlIGEg c3lzdGVtIGNhdGFsb2cKICAqIGlzX2ludGVybmFsOiBpZiB0cnVlLCBwb3N0IGNyZWF0aW9uIGhv b2sgZm9yIG5ldyBpbmRleAogICogY29uc3RyYWludElkOiBpZiBub3QgTlVMTCwgcmVjZWl2ZXMg T0lEIG9mIGNyZWF0ZWQgY29uc3RyYWludAorICogcmVscGVyc2lzdGVuY2U6IHBlcnNpc3RlbmNl IGxldmVsIHRvIHVzZSBmb3IgaW5kZXguIEluIG1vc3Qgb2YgdGhlCisgKgkJY2FzZXMgaXQgc2hv dWxkIGJlIGVxdWFsIHRvIHRoZSBwZXJzaXN0ZW5jZSBsZXZlbCBvZiB0aGUgdGFibGUsCisgKgkJ YXV4aWxpYXJ5IGluZGV4ZXMgYXJlIG9ubHkgZXhjZXB0aW9uIGhlcmUuCiAgKgogICogUmV0dXJu cyB0aGUgT0lEIG9mIHRoZSBjcmVhdGVkIGluZGV4LgogICovCkBAIC03NTcsNiArNzYyLDcgQEAg aW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlib29sCQlpbnZhbGlkID0gKGZs YWdzICYgSU5ERVhfQ1JFQVRFX0lOVkFMSUQpICE9IDA7CiAJYm9vbAkJY29uY3VycmVudCA9IChm bGFncyAmIElOREVYX0NSRUFURV9DT05DVVJSRU5UKSAhPSAwOwogCWJvb2wJCXBhcnRpdGlvbmVk ID0gKGZsYWdzICYgSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVEKSAhPSAwOworCWJvb2wJCWF1eGls aWFyeSA9IChmbGFncyAmIElOREVYX0NSRUFURV9BVVhJTElBUlkpICE9IDA7CiAJY2hhcgkJcmVs a2luZDsKIAlUcmFuc2FjdGlvbklkIHJlbGZyb3plbnhpZDsKIAlNdWx0aVhhY3RJZCByZWxtaW5t eGlkOwpAQCAtNzgyLDcgKzc4OCwxMCBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCW5hbWVzcGFjZUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UoaGVhcFJlbGF0aW9uKTsK IAlzaGFyZWRfcmVsYXRpb24gPSBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVsaXNzaGFyZWQ7CiAJ bWFwcGVkX3JlbGF0aW9uID0gUmVsYXRpb25Jc01hcHBlZChoZWFwUmVsYXRpb24pOwotCXJlbHBl cnNpc3RlbmNlID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOworCWlmIChh dXhpbGlhcnkpCisJCXJlbHBlcnNpc3RlbmNlID0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ7IC8q IGF1eCBpbmRleGVzIGFyZSBhbHdheXMgdW5sb2dnZWQgKi8KKwllbHNlCisJCXJlbHBlcnNpc3Rl bmNlID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOwogCiAJLyoKIAkgKiBj aGVjayBwYXJhbWV0ZXJzCkBAIC03OTAsNiArNzk5LDExIEBAIGluZGV4X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJaWYgKGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyA8IDEpCiAJ CWVsb2coRVJST1IsICJtdXN0IGluZGV4IGF0IGxlYXN0IG9uZSBjb2x1bW4iKTsKIAorCWlmIChp bmRleEluZm8tPmlpX0FtID09IFNUSVJfQU1fT0lEICYmICFhdXhpbGlhcnkpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CSBlcnJtc2coInVzZXItZGVmaW5lZCBpbmRleGVzIHdpdGggU1RJUiBhY2Nlc3MgbWV0aG9kIGFy ZSBub3Qgc3VwcG9ydGVkIikpKTsKKwogCWlmICghYWxsb3dfc3lzdGVtX3RhYmxlX21vZHMgJiYK IAkJSXNTeXN0ZW1SZWxhdGlvbihoZWFwUmVsYXRpb24pICYmCiAJCUlzTm9ybWFsUHJvY2Vzc2lu Z01vZGUoKSkKQEAgLTEzOTUsNyArMTQwOSw4IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVf Y29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRleElkLAogCQkJCQkJCWZhbHNl LAkvKiBub3QgcmVhZHkgZm9yIGluc2VydHMgKi8KIAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAotCQkJCQkJCW9sZEluZm8tPmlpX1dp dGhvdXRPdmVybGFwcyk7CisJCQkJCQkJb2xkSW5mby0+aWlfV2l0aG91dE92ZXJsYXBzLAorCQkJ CQkJCWZhbHNlKTsKIAogCS8qCiAJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBjb2x1bW4gbmFtZXMg YW5kIHRoZSBjb2x1bW4gbnVtYmVycyBmb3IgdGhlIG5ldwpAQCAtMTQ3MCw2ICsxNDg1LDE1NCBA QCBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBP aWQgb2xkSW5kZXhJZCwKIAlyZXR1cm4gbmV3SW5kZXhJZDsKIH0KIAorLyoKKyAqIGluZGV4X2Nv bmN1cnJlbnRseV9jcmVhdGVfYXV4CisgKgorICogQ3JlYXRlIGNvbmN1cnJlbnRseSBhbiBhdXhp bGlhcnkgaW5kZXggYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIG9uZQorICogcHJvdmlk ZWQgYnkgY2FsbGVyLiAgVGhlIGluZGV4IGlzIGluc2VydGVkIGludG8gY2F0YWxvZ3MgYW5kIG5l ZWRzIHRvIGJlCisgKiBidWlsdCBsYXRlciBvbi4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGNvbmN1 cnJlbnQgcmVpbmRleCBwcm9jZXNzaW5nLgorICoKKyAqICJ0YWJsZXNwYWNlT2lkIiBpcyB0aGUg dGFibGVzcGFjZSB0byB1c2UgZm9yIHRoaXMgaW5kZXguCisgKi8KK09pZAoraW5kZXhfY29uY3Vy cmVudGx5X2NyZWF0ZV9hdXgoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgbWFpbkluZGV4SWQs CisJCQkJCQkJICAgT2lkIHRhYmxlc3BhY2VPaWQsIGNvbnN0IGNoYXIgKm5ld05hbWUpCit7CisJ UmVsYXRpb24JaW5kZXhSZWxhdGlvbjsKKwlJbmRleEluZm8gICpvbGRJbmZvLAorCQkJKm5ld0lu Zm87CisJT2lkCQkJbmV3SW5kZXhJZCA9IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCWluZGV4VHVw bGU7CisKKwlMaXN0CSAgICppbmRleENvbE5hbWVzID0gTklMOworCUxpc3QJICAgKmluZGV4RXhw cnMgPSBOSUw7CisJTGlzdAkgICAqaW5kZXhQcmVkcyA9IE5JTDsKKworCU9pZCAqYXV4T3BjbGFz c0lkczsKKwlpbnQxNiAqYXV4Q29sb3B0aW9uczsKKworCWluZGV4UmVsYXRpb24gPSBpbmRleF9v cGVuKG1haW5JbmRleElkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIFRoZSBuZXcgaW5kZXgg bmVlZHMgc29tZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbGQgaW5kZXggKi8KKwlvbGRJbmZvID0g QnVpbGRJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIEJ1aWxkIG9mIGFuIGF1 eGlsaWFyeSBpbmRleCB3aXRoIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3QKKwkgKiBzdXBw b3J0ZWQuCisJICovCisJaWYgKG9sZEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCQkJCWVycm1zZygiYXV4aWxpYXJ5IGluZGV4IGNyZWF0aW9uIGZvciBleGNsdXNpb24g Y29uc3RyYWludHMgaXMgbm90IHN1cHBvcnRlZCIpKSk7CisKKwkvKiBHZXQgdGhlIGFycmF5IG9m IGNsYXNzIGFuZCBjb2x1bW4gb3B0aW9ucyBJRHMgZnJvbSBpbmRleCBpbmZvICovCisJaW5kZXhU dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKG1haW5J bmRleElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGluZGV4VHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBtYWluSW5kZXhJZCk7CisK KworCS8qCisJICogRmV0Y2ggdGhlIGxpc3Qgb2YgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMg ZGlyZWN0bHkgZnJvbSB0aGUKKwkgKiBjYXRhbG9ncy4gIFRoaXMgY2Fubm90IHJlbHkgb24gdGhl IGluZm9ybWF0aW9uIGZyb20gSW5kZXhJbmZvIG9mIHRoZQorCSAqIG9sZCBpbmRleCBhcyB0aGVz ZSBoYXZlIGJlZW4gZmxhdHRlbmVkIGZvciB0aGUgcGxhbm5lci4KKwkgKi8KKwlpZiAob2xkSW5m by0+aWlfRXhwcmVzc2lvbnMgIT0gTklMKQorCXsKKwkJRGF0dW0JCWV4cHJEYXR1bTsKKwkJY2hh cgkgICAqZXhwclN0cmluZzsKKworCQlleHByRGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxs KElOREVYUkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRl eHBycyk7CisJCWV4cHJTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJEYXR1bSk7CisJ CWluZGV4RXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwclN0cmluZyk7CisJCXBmcmVl KGV4cHJTdHJpbmcpOworCX0KKwlpZiAob2xkSW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCkKKwl7 CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJcHJlZERh dHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJ CQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kcHJlZCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJCWluZGV4UHJlZHMgPSAoTGlzdCAqKSBzdHJpbmdU b05vZGUocHJlZFN0cmluZyk7CisKKwkJLyogQWxzbyBjb252ZXJ0IHRvIGltcGxpY2l0LUFORCBm b3JtYXQgKi8KKwkJaW5kZXhQcmVkcyA9IG1ha2VfYW5kc19pbXBsaWNpdCgoRXhwciAqKSBpbmRl eFByZWRzKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisJfQorCisJLyoKKwkgKiBCdWlsZCB0aGUg aW5kZXggaW5mb3JtYXRpb24gZm9yIHRoZSBuZXcgaW5kZXguICBOb3RlIHRoYXQgcmVidWlsZCBv ZgorCSAqIGluZGV4ZXMgd2l0aCBleGNsdXNpb24gY29uc3RyYWludHMgaXMgbm90IHN1cHBvcnRl ZCwgaGVuY2UgdGhlcmUgaXMgbm8KKwkgKiBuZWVkIHRvIGZpbGwgYWxsIHRoZSBpaV9FeGNsdXNp b24qIGZpZWxkcy4KKwkgKi8KKwluZXdJbmZvID0gbWFrZUluZGV4SW5mbyhvbGRJbmZvLT5paV9O dW1JbmRleEF0dHJzLAorCQkJCQkJCW9sZEluZm8tPmlpX051bUluZGV4S2V5QXR0cnMsCisJCQkJ CQkJU1RJUl9BTV9PSUQsIC8qIHNwZWNpYWwgQU0gZm9yIGF1eCBpbmRleGVzICovCisJCQkJCQkJ aW5kZXhFeHBycywKKwkJCQkJCQlpbmRleFByZWRzLAorCQkJCQkJCWZhbHNlLAkvKiBhdXggaW5k ZXggYXJlIG5vdCB1bmlxdWUgKi8KKwkJCQkJCQlvbGRJbmZvLT5paV9OdWxsc05vdERpc3RpbmN0 LAorCQkJCQkJCWZhbHNlLAkvKiBub3QgcmVhZHkgZm9yIGluc2VydHMgKi8KKwkJCQkJCQl0cnVl LAorCQkJCQkJCWZhbHNlLAkvKiBhdXggYXJlIG5vdCBzdW1tYXJpemluZyAqLworCQkJCQkJCWZh bHNlLAkvKiBhdXggYXJlIG5vdCB3aXRob3V0IG92ZXJsYXBzICovCisJCQkJCQkJdHJ1ZQkvKiBh dXhpbGlhcnkgKi8pOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1l cyBhbmQgdGhlIGNvbHVtbiBudW1iZXJzIGZvciB0aGUgbmV3CisJICogaW5kZXggaW5mb3JtYXRp b24uICBBbGwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpbmRleAorCSAq IGNyZWF0aW9uLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgb2xkSW5mby0+aWlfTnVtSW5k ZXhBdHRyczsgaSsrKQorCXsKKwkJVHVwbGVEZXNjCWluZGV4VHVwRGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IoaW5kZXhSZWxhdGlvbik7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVz Y0F0dHIoaW5kZXhUdXBEZXNjLCBpKTsKKworCQlpbmRleENvbE5hbWVzID0gbGFwcGVuZChpbmRl eENvbE5hbWVzLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCQluZXdJbmZvLT5paV9JbmRleEF0 dHJOdW1iZXJzW2ldID0gb2xkSW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tpXTsKKwl9CisKKwlh dXhPcGNsYXNzSWRzID0gcGFsbG9jMChzaXplb2YoT2lkKSAqIG5ld0luZm8tPmlpX051bUluZGV4 QXR0cnMpOworCWF1eENvbG9wdGlvbnMgPSBwYWxsb2MwKHNpemVvZihpbnQxNikgKiBuZXdJbmZv LT5paV9OdW1JbmRleEF0dHJzKTsKKworCS8qIEZpbGwgd2l0aCAiYW55IG9wcyIgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IG5ld0luZm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwl7CisJCWF1 eE9wY2xhc3NJZHNbaV0gPSBBTllfU1RJUl9PUFNfT0lEOworCQlhdXhDb2xvcHRpb25zW2ldID0g MDsKKwl9CisKKwluZXdJbmRleElkID0gaW5kZXhfY3JlYXRlKGhlYXBSZWxhdGlvbiwKKwkJCQkJ CQkgIG5ld05hbWUsCisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBpbmRleFJlbGF0aW9uSWQg Ki8KKwkJCQkJCQkgIEludmFsaWRPaWQsICAgIC8qIHBhcmVudEluZGV4UmVsaWQgKi8KKwkJCQkJ CQkgIEludmFsaWRPaWQsICAgIC8qIHBhcmVudENvbnN0cmFpbnRJZCAqLworCQkJCQkJCSAgSW52 YWxpZFJlbEZpbGVOdW1iZXIsIC8qIHJlbEZpbGVOdW1iZXIgKi8KKwkJCQkJCQkgIG5ld0luZm8s CisJCQkJCQkJICBpbmRleENvbE5hbWVzLAorCQkJCQkJCSAgU1RJUl9BTV9PSUQsCisJCQkJCQkJ ICB0YWJsZXNwYWNlT2lkLAorCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfaW5kY29sbGF0aW9u LAorCQkJCQkJCSAgYXV4T3BjbGFzc0lkcywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICBhdXhD b2xvcHRpb25zLAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgIChEYXR1bSkgMCwKKwkJCQkJCQkg IElOREVYX0NSRUFURV9TS0lQX0JVSUxEIHwgSU5ERVhfQ1JFQVRFX0NPTkNVUlJFTlQgfCBJTkRF WF9DUkVBVEVfQVVYSUxJQVJZLAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIHRydWUsIC8qIGFsbG93 IHRhYmxlIHRvIGJlIGEgc3lzdGVtIGNhdGFsb2c/ICovCisJCQkJCQkJICBmYWxzZSwgICAgLyog aXNfaW50ZXJuYWw/ICovCisJCQkJCQkJICBOVUxMKTsKKworCS8qIENsb3NlIHRoZSByZWxhdGlv bnMgdXNlZCBhbmQgY2xlYW4gdXAgKi8KKwlpbmRleF9jbG9zZShpbmRleFJlbGF0aW9uLCBOb0xv Y2spOworCVJlbGVhc2VTeXNDYWNoZShpbmRleFR1cGxlKTsKKworCXJldHVybiBuZXdJbmRleElk OworfQorCiAvKgogICogaW5kZXhfY29uY3VycmVudGx5X2J1aWxkCiAgKgpAQCAtMjQ1MCw3ICsy NjEzLDggQEAgQnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJCQkJCSAgIGluZGV4U3Ry dWN0LT5pbmRpc3JlYWR5LAogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFt LT5hbXN1bW1hcml6aW5nLAotCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYg aW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlKTsKKwkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhj bHVzaW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwKKwkJCQkJICAgaW5kZXgtPnJkX3Jl bC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5IGlmZiBTVElSICovKTsKIAogCS8q IGZpbGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0czsg aSsrKQpAQCAtMjUxMCw3ICsyNjc0LDggQEAgQnVpbGREdW1teUluZGV4SW5mbyhSZWxhdGlvbiBp bmRleCkKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzcmVhZHksCiAJCQkJCSAgIGZhbHNlLAog CQkJCQkgICBpbmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCi0JCQkJCSAgIGluZGV4U3Ry dWN0LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUpOworCQkJCQkg ICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVl LAorCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlh cnkgaWZmIFNUSVIgKi8pOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZv ciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0zMjg2LDEyICszNDUxLDIxIEBAIEluZGV4 Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICoKICAqIFdlIGRvIGEgY29u Y3VycmVudCBpbmRleCBidWlsZCBieSBmaXJzdCBpbnNlcnRpbmcgdGhlIGNhdGFsb2cgZW50cnkg Zm9yIHRoZQogICogaW5kZXggdmlhIGluZGV4X2NyZWF0ZSgpLCBtYXJraW5nIGl0IG5vdCBpbmRp c3JlYWR5IGFuZCBub3QgaW5kaXN2YWxpZC4KKyAqIFRoZW4gd2UgY3JlYXRlIHNwZWNpYWwgYXV4 aWxpYXJ5IGluZGV4IHRoZSBzYW1lIHdheS4gSXQgYmFzZWQgb24gU1RJUiBBTS4KICAqIFRoZW4g d2UgY29tbWl0IG91ciB0cmFuc2FjdGlvbiBhbmQgc3RhcnQgYSBuZXcgb25lLCB0aGVuIHdlIHdh aXQgZm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgaGF2ZSBiZWVuIG1vZGlmeWlu ZyB0aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93Ci0gKiB3ZSBrbm93IHRoYXQgYW55IHN1YnNl cXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5kZXggYW5kCisgKiB3 ZSBrbm93IHRoYXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNl ZSBpbmRleGVzIGFuZAogICogaG9ub3IgaXRzIGNvbnN0cmFpbnRzIG9uIEhPVCB1cGRhdGVzOyBz byB3aGlsZSBleGlzdGluZyBIT1QtY2hhaW5zIG1pZ2h0CiAgKiBiZSBicm9rZW4gd2l0aCByZXNw ZWN0IHRvIHRoZSBpbmRleCwgbm8gY3VycmVudGx5IGxpdmUgdHVwbGUgd2lsbCBoYXZlIGFuCi0g KiBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZSBkb25lIHRvIGl0LiAgV2Ugbm93IGJ1aWxkIHRoZSBp bmRleCBub3JtYWxseSB2aWEKKyAqIGluY29tcGF0aWJsZSBIT1QgdXBkYXRlIGRvbmUgdG8gaXQu CisgKgorICogQWZ0ZXIgdGhhdCwgd2UgYnVpbGQgdGhlIGF1eGlsaWFyeSBpbmRleC4gSXQgaXMg ZmFzdCBvcGVyYXRpb24gd2l0aG91dCBhbnkgYWN0dWFsCisgKiB0YWJsZSBzY2FuLiBBcyByZXN1 bHQsIHdlIGhhdmUgZW1wdHkgU1RJUiBpbmRleC4gV2UgY29tbWl0IHRyYW5zYWN0aW9uIGFuZAor ICogYWdhaW4gd2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBt b2RpZnlpbmcgdGhlIHRhYmxlCisgKiB0byB0ZXJtaW5hdGUuIEF0IHRoYXQgbW9tZW50IGFsbCBu ZXcgdHVwbGVzIGFyZSBnb2luZyB0byBiZSBpbnNlcnRlZCBpbnRvCisgKiBhdXhpbGlhcnkgaW5k ZXguCisgKgorICogV2Ugbm93IGJ1aWxkIHRoZSBpbmRleCBub3JtYWxseSB2aWEKICAqIGluZGV4 X2J1aWxkKCksIHdoaWxlIGhvbGRpbmcgYSB3ZWFrIGxvY2sgdGhhdCBhbGxvd3MgY29uY3VycmVu dAogICogaW5zZXJ0L3VwZGF0ZS9kZWxldGUuICBBbHNvLCB3ZSBpbmRleCBvbmx5IHR1cGxlcyB0 aGF0IGFyZSB2YWxpZAogICogYXMgb2YgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuIChzZWUgdGFibGVf aW5kZXhfYnVpbGRfc2NhbiksIHdoZXJlYXMgYSBub3JtYWwKQEAgLTMzMDEsMTQgKzM0NzUsMTcg QEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAgKiBib2d1cyB1 bmlxdWUtaW5kZXggZmFpbHVyZXMgZHVlIHRvIGNvbmN1cnJlbnQgVVBEQVRFcyAod2UgbWlnaHQg c2VlCiAgKiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcm93IGFzIGJlaW5nIHZhbGlk IHdoZW4gd2UgcGFzcyBvdmVyIHRoZW0sCiAgKiBpZiB3ZSB1c2VkIEhlYXBUdXBsZVNhdGlzZmll c1ZhY3V1bSkuICBUaGlzIGxlYXZlcyB1cyB3aXRoIGFuIGluZGV4IHRoYXQKLSAqIGRvZXMgbm90 IGNvbnRhaW4gYW55IHR1cGxlcyBhZGRlZCB0byB0aGUgdGFibGUgd2hpbGUgd2UgYnVpbHQgdGhl IGluZGV4LgorICogZG9lcyBub3QgY29udGFpbiBhbnkgdHVwbGVzIGFkZGVkIHRvIHRoZSB0YWJs ZSB3aGlsZSB3ZSBidWlsdCB0aGUgaW5kZXgKKyAqIChidXQgdGhlc2UgdHVwbGVzIGNvbnRhaW5l ZCBpbiBhdXhpbGlhcnkgaW5kZXgpLgogICoKICAqIE5leHQsIHdlIG1hcmsgdGhlIGluZGV4ICJp bmRpc3JlYWR5IiAoYnV0IHN0aWxsIG5vdCAiaW5kaXN2YWxpZCIpIGFuZAotICogY29tbWl0IHRo ZSBzZWNvbmQgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgdGhpcmQuICBBZ2FpbiB3ZSB3YWl0IGZv ciBhbGwKKyAqIGNvbW1pdCB0aGUgdGhpcmQgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgZm91cnRo LiAgQWdhaW4gd2Ugd2FpdCBmb3IgYWxsCiAgKiB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBoYXZl IGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZSB0byB0ZXJtaW5hdGUuICBOb3cKICAqIHdlIGtub3cg dGhhdCBhbnkgc3Vic2VxdWVudGx5LXN0YXJ0ZWQgdHJhbnNhY3Rpb25zIHdpbGwgc2VlIHRoZSBp bmRleCBhbmQKLSAqIGluc2VydCB0aGVpciBuZXcgdHVwbGVzIGludG8gaXQuICBXZSB0aGVuIHRh a2UgYSBuZXcgcmVmZXJlbmNlIHNuYXBzaG90Ci0gKiB3aGljaCBpcyBwYXNzZWQgdG8gdmFsaWRh dGVfaW5kZXgoKS4gIEFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisgKiBpbnNl cnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiBBdCB0aGUgc2FtZSBtb21lbnQgd2UgY2xlYXIg ImluZGlzcmVhZHkiIGZvcgorICogYXV4aWxpYXJ5IGluZGV4LCBzaW5jZSBpdCBpcyBubyBtb3Jl IHJlcXVpcmVkIHRvIGJlIHVwZGF0ZWQuCisgKgorICogV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVy ZW5jZSBzbmFwc2hvdCwgYW55IHR1cGxlcyB0aGF0IGFyZSB2YWxpZCBhY2NvcmRpbmcKICAqIHRv IHRoaXMgc25hcCwgYnV0IGFyZSBub3QgaW4gdGhlIGluZGV4LCBtdXN0IGJlIGFkZGVkIHRvIHRo ZSBpbmRleC4KICAqIChBbnkgdHVwbGVzIGNvbW1pdHRlZCBsaXZlIGFmdGVyIHRoZSBzbmFwIHdp bGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUKICAqIGluZGV4IGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHRy YW5zYWN0aW9uLiAgQW55IHR1cGxlcyBjb21taXR0ZWQgZGVhZCBiZWZvcmUKQEAgLTMzMTYsMTIg KzM0OTMsMTQgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAg KiB0aGF0IG1pZ2h0IGNhcmUgYWJvdXQgdGhlbSBiZWZvcmUgd2UgbWFyayB0aGUgaW5kZXggdmFs aWQuKQogICoKICAqIHZhbGlkYXRlX2luZGV4KCkgd29ya3MgYnkgZmlyc3QgZ2F0aGVyaW5nIGFs bCB0aGUgVElEcyBjdXJyZW50bHkgaW4gdGhlCi0gKiBpbmRleCwgdXNpbmcgYSBidWxrZGVsZXRl IGNhbGxiYWNrIHRoYXQganVzdCBzdG9yZXMgdGhlIFRJRHMgYW5kIGRvZXNuJ3QKKyAqIGluZGV4 ZXMsIHVzaW5nIGEgYnVsa2RlbGV0ZSBjYWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURz IGFuZCBkb2Vzbid0CiAgKiBldmVyIHNheSAiZGVsZXRlIGl0Ii4gIChUaGlzIHNob3VsZCBiZSBm YXN0ZXIgdGhhbiBhIHBsYWluIGluZGV4c2NhbjsKICAqIGFsc28sIG5vdCBhbGwgaW5kZXggQU1z IHN1cHBvcnQgZnVsbC1pbmRleCBpbmRleHNjYW4uKSAgVGhlbiB3ZSBzb3J0IHRoZQotICogVElE cywgYW5kIGZpbmFsbHkgc2NhbiB0aGUgdGFibGUgZG9pbmcgYSAibWVyZ2Ugam9pbiIgYWdhaW5z dCB0aGUgVElEIGxpc3QKLSAqIHRvIHNlZSB3aGljaCB0dXBsZXMgYXJlIG1pc3NpbmcgZnJvbSB0 aGUgaW5kZXguICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQKLSAqIGFsbCB0dXBsZXMgdmFsaWQg YWNjb3JkaW5nIHRvIHRoZSByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4KKyAq IFRJRHMgb2YgYm90aCBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVzLCBhbmQgZG9pbmcgYSAi bWVyZ2Ugam9pbiIgYWdhaW5zdAorICogdGhlIFRJRCBsaXN0cyB0byBzZWUgd2hpY2ggdHVwbGVz IGZyb20gYXV4aWxpYXJ5IGluZGV4IGFyZSBtaXNzaW5nIGZyb20gdGhlCisgKiB0YXJnZXQgaW5k ZXguICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHR1cGxlcyB2YWxpZCBhY2NvcmRpbmcg dG8gdGhlCisgKiByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4gTm90aWNlIHdl IG5lZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKKyAqIHBhcnRpY3VsYXIgb3JkZXI6IGF1eGls aWFyeSBmaXJzdCwgdGFyZ2V0IGxhc3QuCiAgKgogICogQnVpbGRpbmcgYSB1bmlxdWUgaW5kZXgg dGhpcyB3YXkgaXMgdHJpY2t5OiB3ZSBtaWdodCB0cnkgdG8gaW5zZXJ0IGEKICAqIHR1cGxlIHRo YXQgaXMgYWxyZWFkeSBkZWFkIG9yIGlzIGluIHByb2Nlc3Mgb2YgYmVpbmcgZGVsZXRlZCwgYW5k IHdlCkBAIC0zMzM5LDIyICszNTE4LDI2IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogICogbm90IGluZGV4KS4gIFRoZW4gd2UgbWFyayB0aGUgaW5kZXggImlu ZGlzdmFsaWQiIGFuZCBjb21taXQuICBTdWJzZXF1ZW50CiAgKiB0cmFuc2FjdGlvbnMgd2lsbCBi ZSBhYmxlIHRvIHVzZSBpdCBmb3IgcXVlcmllcy4KICAqCi0gKiBEb2luZyB0d28gZnVsbCB0YWJs ZSBzY2FucyBpcyBhIGJydXRlLWZvcmNlIHN0cmF0ZWd5LiAgV2UgY291bGQgdHJ5IHRvIGJlCi0g KiBjbGV2ZXJlciwgZWcgc3RvcmluZyBuZXcgdHVwbGVzIGluIGEgc3BlY2lhbCBhcmVhIG9mIHRo ZSB0YWJsZSAocGVyaGFwcwotICogbWFraW5nIHRoZSB0YWJsZSBhcHBlbmQtb25seSBieSBzZXR0 aW5nIHVzZV9mc20pLiAgSG93ZXZlciB0aGF0IHdvdWxkCi0gKiBhZGQgeWV0IG1vcmUgbG9ja2lu ZyBpc3N1ZXMuCisgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8gY29uY3VycmVudCBkcm9wIHRoZSBh dXhpbGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwogdm9pZAotdmFsaWRhdGVfaW5kZXgo T2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQordmFsaWRhdGVfaW5k ZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFw c2hvdCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRpb24sCi0JCQkJaW5kZXhSZWxhdGlvbjsKKwkJ CQlpbmRleFJlbGF0aW9uLAorCQkJCWF1eEluZGV4UmVsYXRpb247CiAJSW5kZXhJbmZvICAqaW5k ZXhJbmZvOwotCUluZGV4VmFjdXVtSW5mbyBpdmluZm87Ci0JVmFsaWRhdGVJbmRleFN0YXRlIHN0 YXRlOworCUluZGV4VmFjdXVtSW5mbyBpdmluZm8sIGF1eGl2aW5mbzsKKwlWYWxpZGF0ZUluZGV4 U3RhdGUgc3RhdGUsIGF1eFN0YXRlOwogCU9pZAkJCXNhdmVfdXNlcmlkOwogCWludAkJCXNhdmVf c2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CisJLyogVXNlIDgwJSBvZiBtYWlu dGVuYW5jZV93b3JrX21lbSB0byB0YXJnZXQgaW5kZXggc29ydGluZyBhbmQKKwkgKiAxMCUgcmVz dCBmb3IgYXV4aWxpYXJ5LgorCSAqCisJICogUmVzdCAxMCUgd2lsbCBiZSB1c2VkIGZvciB0dXBs ZXN0b3JlIGxhdGVyLiAqLworCWludAkJCW1haW5fd29ya19tZW1fcGFydCA9IChpbnQpKChpbnQ2 NCkgbWFpbnRlbmFuY2Vfd29ya19tZW0gKiA4IC8gMTApOworCWludAkJCWF1eF93b3JrX21lbV9w YXJ0ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyAxMDsKIAogCXsKIAkJY29uc3QgaW50CXByb2dy ZXNzX2luZGV4W10gPSB7CkBAIC0zMzg3LDYgKzM1NzAsNyBAQCB2YWxpZGF0ZV9pbmRleChPaWQg aGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJUmVzdHJpY3RTZWFyY2hQ YXRoKCk7CiAKIAlpbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihpbmRleElkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlhdXhJbmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihhdXhJbmRleElkLCBSb3dF eGNsdXNpdmVMb2NrKTsKIAogCS8qCiAJICogRmV0Y2ggaW5mbyBuZWVkZWQgZm9yIGluZGV4X2lu c2VydC4gIChZb3UgbWlnaHQgdGhpbmsgdGhpcyBzaG91bGQgYmUKQEAgLTM0MTEsMTUgKzM1OTUs NDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNu YXBzaG90KQogCWl2aW5mby5zdHJhdGVneSA9IE5VTEw7CiAJaXZpbmZvLnZhbGlkYXRlX2luZGV4 ID0gdHJ1ZTsKIAorCS8qCisJICogQ29weSBhbGwgaW5mbyB0byBhdXhpbGlhcnkgaW5mbywgY2hh bmdpbmcgb25seSByZWxhdGlvbi4KKwkgKi8KKwlhdXhpdmluZm8gPSBpdmluZm87CisJYXV4aXZp bmZvLmluZGV4ID0gYXV4SW5kZXhSZWxhdGlvbjsKKwogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMg aW50OCB2YWx1ZXMgZm9yIHRoZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCiAJ ICogaXRlbSBwb2ludGVycy4gIFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBwcmlt YXJpbHkgYmVjYXVzZSBUSUQKIAkgKiBpcyBhIHBhc3MtYnktcmVmZXJlbmNlIHR5cGUgb24gYWxs IHBsYXRmb3Jtcywgd2hlcmVhcyBpbnQ4IGlzCiAJICogcGFzcy1ieS12YWx1ZSBvbiBtb3N0IHBs YXRmb3Jtcy4KIAkgKi8KKwlhdXhTdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0 dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKKwkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLCBm YWxzZSwKKwkJCQkJCQkJCQkgICBhdXhfd29ya19tZW1fcGFydCwKKwkJCQkJCQkJCQkgICBOVUxM LCBUVVBMRVNPUlRfTk9ORSk7CisJYXV4U3RhdGUuaHR1cHMgPSBhdXhTdGF0ZS5pdHVwcyA9IGF1 eFN0YXRlLnR1cHNfaW5zZXJ0ZWQgPSAwOworCisJKHZvaWQpIGluZGV4X2J1bGtfZGVsZXRlKCZh dXhpdmluZm8sIE5VTEwsCisJCQkJCQkJIHZhbGlkYXRlX2luZGV4X2NhbGxiYWNrLCAmYXV4U3Rh dGUpOworCS8qIElmIGF1eCBpbmRleCBpcyBlbXB0eSwgbWVyZ2UgbWF5IGJlIHNraXBwZWQgKi8K KwlpZiAoYXV4U3RhdGUuaXR1cHMgPT0gMCkKKwl7CisJCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUu dHVwbGVzb3J0KTsKKwkJYXV4U3RhdGUudHVwbGVzb3J0ID0gTlVMTDsKKworCQkvKiBSb2xsIGJh Y2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLworCQlBdEVP WGFjdF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCQkvKiBSZXN0b3JlIHVzZXJpZCBh bmQgc2VjdXJpdHkgY29udGV4dCAqLworCQlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVfdXNl cmlkLCBzYXZlX3NlY19jb250ZXh0KTsKKworCQkvKiBDbG9zZSByZWxzLCBidXQga2VlcCBsb2Nr cyAqLworCQlpbmRleF9jbG9zZShhdXhJbmRleFJlbGF0aW9uLCBOb0xvY2spOworCQlpbmRleF9j bG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOworCQl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24s IE5vTG9jayk7CisKKwkJcmV0dXJuOworCX0KKwogCXN0YXRlLnR1cGxlc29ydCA9IHR1cGxlc29y dF9iZWdpbl9kYXR1bShJTlQ4T0lELCBJbnQ4TGVzc09wZXJhdG9yLAogCQkJCQkJCQkJCQlJbnZh bGlkT2lkLCBmYWxzZSwKLQkJCQkJCQkJCQkJbWFpbnRlbmFuY2Vfd29ya19tZW0sCisJCQkJCQkJ CQkJCShpbnQpIG1haW5fd29ya19tZW1fcGFydCwKIAkJCQkJCQkJCQkJTlVMTCwgVFVQTEVTT1JU X05PTkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1cHMgPSBzdGF0ZS50dXBzX2luc2VydGVk ID0gMDsKIApAQCAtMzQ0MiwyNyArMzY2MCwzMCBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElk LCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCXBnc3RhdF9wcm9ncmVzc191cGRh dGVfbXVsdGlfcGFyYW0oMywgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAl0 dXBsZXNvcnRfcGVyZm9ybXNvcnQoc3RhdGUudHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfcGVyZm9y bXNvcnQoYXV4U3RhdGUudHVwbGVzb3J0KTsKIAogCS8qCi0JICogTm93IHNjYW4gdGhlIGhlYXAg YW5kICJtZXJnZSIgaXQgd2l0aCB0aGUgaW5kZXgKKwkgKiBOb3cgbWVyZ2UgYm90aCBpbmRleGVz CiAJICovCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhf UEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfVEFCTEVT Q0FOKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhNRVJH RSk7CiAJdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCiAJCQkJCQkJICBp bmRleFJlbGF0aW9uLAogCQkJCQkJCSAgaW5kZXhJbmZvLAogCQkJCQkJCSAgc25hcHNob3QsCi0J CQkJCQkJICAmc3RhdGUpOworCQkJCQkJCSAgJnN0YXRlLAorCQkJCQkJCSAgJmF1eFN0YXRlKTsK IAotCS8qIERvbmUgd2l0aCB0dXBsZXNvcnQgb2JqZWN0ICovCi0JdHVwbGVzb3J0X2VuZChzdGF0 ZS50dXBsZXNvcnQpOworCS8qIFR1cGxlIHNvcnQgY2xvc2VkIGJ5IHRhYmxlX2luZGV4X3ZhbGlk YXRlX3NjYW4gKi8KKwlBc3NlcnQoc3RhdGUudHVwbGVzb3J0ID09IE5VTEwgJiYgYXV4U3RhdGUu dHVwbGVzb3J0ID09IE5VTEwpOwogCiAJLyogTWFrZSBzdXJlIHRvIHJlbGVhc2UgcmVzb3VyY2Vz IGNhY2hlZCBpbiBpbmRleEluZm8gKGlmIG5lZWRlZCkuICovCiAJaW5kZXhfaW5zZXJ0X2NsZWFu dXAoaW5kZXhSZWxhdGlvbiwgaW5kZXhJbmZvKTsKIAogCWVsb2coREVCVUcyLAotCQkgInZhbGlk YXRlX2luZGV4IGZvdW5kICUuMGYgaGVhcCB0dXBsZXMsICUuMGYgaW5kZXggdHVwbGVzOyBpbnNl cnRlZCAlLjBmIG1pc3NpbmcgdHVwbGVzIiwKLQkJIHN0YXRlLmh0dXBzLCBzdGF0ZS5pdHVwcywg c3RhdGUudHVwc19pbnNlcnRlZCk7CisJCSAidmFsaWRhdGVfaW5kZXggZmV0Y2hlZCAlLjBmIGhl YXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsiCisJCQkJCQkiICUuMGYgYXV4IGluZGV4IHR1 cGxlczsgaW5zZXJ0ZWQgJS4wZiBtaXNzaW5nIHR1cGxlcyIsCisJCSBzdGF0ZS5odHVwcywgc3Rh dGUuaXR1cHMsIGF1eFN0YXRlLml0dXBzLCBzdGF0ZS50dXBzX2luc2VydGVkKTsKIAogCS8qIFJv bGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgZXhlY3V0ZWQgYnkgaW5kZXggZnVuY3Rpb25zICovCiAJ QXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CkBAIC0zNDcxLDYgKzM2OTIsNyBA QCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNo b3QpCiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4 dCk7CiAKIAkvKiBDbG9zZSByZWxzLCBidXQga2VlcCBsb2NrcyAqLworCWluZGV4X2Nsb3NlKGF1 eEluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9M b2NrKTsKIAl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24sIE5vTG9jayk7CiB9CkBAIC0zNTMxLDYg KzM3NTMsMTIgQEAgaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRleFN0YXRl RmxhZ3NBY3Rpb24gYWN0aW9uKQogCQkJQXNzZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQpOwog CQkJaW5kZXhGb3JtLT5pbmRpc3ZhbGlkID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlIElOREVY X0RST1BfQ0xFQVJfUkVBRFk6CisJCQkvKiBDbGVhciBpbmRpc3JlYWR5IGR1cmluZyBhIENSRUFU RSBJTkRFWCBDT05DVVJSRU5UTFkgc2VxdWVuY2UgKi8KKwkJCUFzc2VydChpbmRleEZvcm0tPmlu ZGlzcmVhZHkpOworCQkJQXNzZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQpOworCQkJaW5kZXhG b3JtLT5pbmRpc3JlYWR5ID0gZmFsc2U7CisJCQlicmVhazsKIAkJY2FzZSBJTkRFWF9EUk9QX0NM RUFSX1ZBTElEOgogCiAJCQkvKgpAQCAtMzgwMiw2ICs0MDMwLDEzIEBAIHJlaW5kZXhfaW5kZXgo Y29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlpbmRleEluZm8tPmlpX0V4 Y2x1c2lvblN0cmF0cyA9IE5VTEw7CiAJfQogCisJLyogQXV4aWxpYXJ5IGluZGV4ZXMgYXJlIG5v dCBhbGxvd2VkIHRvIGJlIHJlYnVpbHQgKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCisJCQkgZXJybXNnKCJyZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzXCIgbm90 IHN1cHBvcnRlZCIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlSZWwpKSkpOworCiAJ LyogU3VwcHJlc3MgdXNlIG9mIHRoZSB0YXJnZXQgaW5kZXggd2hpbGUgcmVidWlsZGluZyBpdCAq LwogCVNldFJlaW5kZXhQcm9jZXNzaW5nKGhlYXBJZCwgaW5kZXhJZCk7CiAKQEAgLTQwNDQsNiAr NDI3OSw3IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxpZCwgaW50IGZsYWdzLAogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGluZGV4 SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhP aWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CiAKIAkJLyoK IAkJICogU2tpcCBhbnkgaW52YWxpZCBpbmRleGVzIG9uIGEgVE9BU1QgdGFibGUuICBUaGVzZSBj YW4gb25seSBiZQpAQCAtNDA2OSw2ICs0MzA1LDE4IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCQkJY29udGludWU7CiAJ CX0KIAorCQlpZiAoaW5kZXhBbSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJZXJlcG9ydChXQVJO SU5HLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJ CSBlcnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIs CisJCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGluZGV4TmFtZXNwYWNlSWQpLAorCQkJCQkJCWdl dF9yZWxfbmFtZShpbmRleE9pZCkpKSk7CisJCQlpZiAoZmxhZ3MgJiBSRUlOREVYX1JFTF9TVVBQ UkVTU19JTkRFWF9VU0UpCisJCQkJUmVtb3ZlUmVpbmRleFBlbmRpbmcoaW5kZXhPaWQpOworCQkJ Y29udGludWU7CisJCX0KKwogCQlyZWluZGV4X2luZGV4KHN0bXQsIGluZGV4T2lkLCAhKGZsYWdz ICYgUkVJTkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFMpLAogCQkJCQkgIHBlcnNpc3RlbmNlLCBw YXJhbXMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5z cWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggZWNiN2M5OTZl ODYuLjNlNDBlZDJmNDM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0x MzUwLDE2ICsxMzUwLDE3IEBAIENSRUFURSBWSUVXIHBnX3N0YXRfcHJvZ3Jlc3NfY3JlYXRlX2lu ZGV4IEFTCiAgICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIGNvbW1hbmQsCiAgICAgICAgIENB U0UgUy5wYXJhbTEwIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnCiAgICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSBidWlsZCcKLSAg ICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2J1aWxkaW5nIGluZGV4JyB8fAorICAg ICAgICAgICAgICAgICAgICAgICBXSEVOIDIgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyB0byB1 c2UgYXV4aWxpYXJ5IGluZGV4JworICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDMgVEhFTiAn YnVpbGRpbmcgaW5kZXgnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0FMRVNDRSgo JzogJyB8fCBwZ19pbmRleGFtX3Byb2dyZXNzX3BoYXNlbmFtZShTLnBhcmFtOTo6b2lkLCBTLnBh cmFtMTEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDMgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUg dmFsaWRhdGlvbicKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZh bGlkYXRpb246IHNjYW5uaW5nIGluZGV4JwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUg VEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc29ydGluZyB0dXBsZXMnCi0gICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gNiBUSEVOICdpbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZScKLSAg ICAgICAgICAgICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hv dHMnCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciByZWFk ZXJzIGJlZm9yZSBtYXJraW5nIGRlYWQnCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOSBU SEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBkcm9wcGluZycKKyAgICAgICAgICAgICAg ICAgICAgICAgV0hFTiA0IFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlkYXRp b24nCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdpbmRleCB2YWxpZGF0aW9u OiBzY2FubmluZyBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ2lu ZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJworICAgICAgICAgICAgICAgICAgICAgICBX SEVOIDcgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzJworICAgICAgICAg ICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3Igb2xkIHNuYXBzaG90cycKKyAg ICAgICAgICAgICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVm b3JlIG1hcmtpbmcgZGVhZCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAxMCBUSEVOICd3 YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBkcm9wcGluZycKICAgICAgICAgICAgICAgICAgICAg ICAgRU5EIGFzIHBoYXNlLAogICAgICAgICBTLnBhcmFtNCBBUyBsb2NrZXJzX3RvdGFsLAogICAg ICAgICBTLnBhcmFtNSBBUyBsb2NrZXJzX2RvbmUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmlu ZGV4IDYzNTY3OWNjMWYyLi5mNTgzMjM5ZTA5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMK QEAgLTE4Miw2ICsxODIsNyBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAJCQkJ CSBib29sIGlzV2l0aG91dE92ZXJsYXBzKQogewogCWJvb2wJCWlzY29uc3RyYWludDsKKwlib29s CQlpc2F1eGlsaWFyeTsKIAlPaWQJCSAgICp0eXBlSWRzOwogCU9pZAkJICAgKmNvbGxhdGlvbklk czsKIAlPaWQJCSAgICpvcGNsYXNzSWRzOwpAQCAtMjMyLDYgKzIzMyw3IEBAIENoZWNrSW5kZXhD b21wYXRpYmxlKE9pZCBvbGRJZCwKIAogCWFtY2Fub3JkZXIgPSBhbVJvdXRpbmUtPmFtY2Fub3Jk ZXI7CiAJYW1zdW1tYXJpemluZyA9IGFtUm91dGluZS0+YW1zdW1tYXJpemluZzsKKwlpc2F1eGls aWFyeSA9IGFjY2Vzc01ldGhvZElkID09IFNUSVJfQU1fT0lEOwogCiAJLyoKIAkgKiBDb21wdXRl IHRoZSBvcGVyYXRvciBjbGFzc2VzLCBjb2xsYXRpb25zLCBhbmQgZXhjbHVzaW9uIG9wZXJhdG9y cyBmb3IKQEAgLTI0Myw3ICsyNDUsOCBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQs CiAJICovCiAJaW5kZXhJbmZvID0gbWFrZUluZGV4SW5mbyhudW1iZXJPZkF0dHJpYnV0ZXMsIG51 bWJlck9mQXR0cmlidXRlcywKIAkJCQkJCQkgIGFjY2Vzc01ldGhvZElkLCBOSUwsIE5JTCwgZmFs c2UsIGZhbHNlLAotCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLCBpc1dpdGhv dXRPdmVybGFwcyk7CisJCQkJCQkJICBmYWxzZSwgZmFsc2UsIGFtc3VtbWFyaXppbmcsCisJCQkJ CQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnkpOwogCXR5cGVJZHMgPSBwYWxsb2Nf YXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19h cnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CiAJb3BjbGFzc0lkcyA9IHBhbGxvY19hcnJh eShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC01NTYsNiArNTU5LDcgQEAgRGVmaW5lSW5k ZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogewogCWJvb2wJCWNvbmN1cnJlbnQ7CiAJY2hhcgkgICAq aW5kZXhSZWxhdGlvbk5hbWU7CisJY2hhcgkgICAqYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBOVUxM OwogCWNoYXIJICAgKmFjY2Vzc01ldGhvZE5hbWU7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJ CSAgICpjb2xsYXRpb25JZHM7CkBAIC01NjUsNiArNTY5LDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VT dGF0ZSAqcHN0YXRlLAogCU9pZAkJCW5hbWVzcGFjZUlkOwogCU9pZAkJCXRhYmxlc3BhY2VJZDsK IAlPaWQJCQljcmVhdGVkQ29uc3RyYWludElkID0gSW52YWxpZE9pZDsKKwlPaWQJCQlhdXhJbmRl eFJlbGF0aW9uSWQgPSBJbnZhbGlkT2lkOwogCUxpc3QJICAgKmluZGV4Q29sTmFtZXM7CiAJTGlz dAkgICAqYWxsSW5kZXhQYXJhbXM7CiAJUmVsYXRpb24JcmVsOwpAQCAtNTg2LDYgKzU5MSw3IEBA IERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlpbnQJCQludW1iZXJPZktleUF0dHJp YnV0ZXM7CiAJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNz OworCU9iamVjdEFkZHJlc3MgYXV4QWRkcmVzczsKIAlMb2NrUmVsSWQJaGVhcHJlbGlkOwogCUxP Q0tUQUcJCWhlYXBsb2NrdGFnOwogCUxPQ0tNT0RFCWxvY2ttb2RlOwpAQCAtODM2LDYgKzg0Miwx NSBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJCXN0bXQtPmV4 Y2x1ZGVPcE5hbWVzLAogCQkJCQkJCQkJCQlzdG10LT5wcmltYXJ5LAogCQkJCQkJCQkJCQlzdG10 LT5pc2NvbnN0cmFpbnQpOworCS8qCisJICogU2VsZWN0IG5hbWUgZm9yIGF1eGlsaWFyeSBpbmRl eAorCSAqLworCWlmIChjb25jdXJyZW50KQorCQlhdXhJbmRleFJlbGF0aW9uTmFtZSA9IENob29z ZVJlbGF0aW9uTmFtZShpbmRleFJlbGF0aW9uTmFtZSwKKwkJCQkJCQkJCQkJCSAgTlVMTCwKKwkJ CQkJCQkJCQkJCSAgImNjYXV4IiwKKwkJCQkJCQkJCQkJCSAgbmFtZXNwYWNlSWQsCisJCQkJCQkJ CQkJCQkgIGZhbHNlKTsKIAogCS8qCiAJICogbG9vayB1cCB0aGUgYWNjZXNzIG1ldGhvZCwgdmVy aWZ5IGl0IGNhbiBoYW5kbGUgdGhlIHJlcXVlc3RlZCBmZWF0dXJlcwpAQCAtOTMwLDcgKzk0NSw4 IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkgICFjb25jdXJyZW50 LAogCQkJCQkJCSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJpemluZywKLQkJCQkJ CQkgIHN0bXQtPmlzd2l0aG91dG92ZXJsYXBzKTsKKwkJCQkJCQkgIHN0bXQtPmlzd2l0aG91dG92 ZXJsYXBzLAorCQkJCQkJCSAgZmFsc2UpOwogCiAJdHlwZUlkcyA9IHBhbGxvY19hcnJheShPaWQs IG51bWJlck9mQXR0cmlidXRlcyk7CiAJY29sbGF0aW9uSWRzID0gcGFsbG9jX2FycmF5KE9pZCwg bnVtYmVyT2ZBdHRyaWJ1dGVzKTsKQEAgLTE2MDAsNiArMTYxNiwxNiBAQCBEZWZpbmVJbmRleChQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCXJldHVybiBhZGRyZXNzOwogCX0KIAorCS8qCisJICogSW4g Y2FzZSBvZiBjb25jdXJyZW50IGJ1aWxkIC0gY3JlYXRlIGF1eGlsaWFyeSBpbmRleCByZWNvcmQu CisJICovCisJaWYgKGNvbmN1cnJlbnQpCisJeworCQlhdXhJbmRleFJlbGF0aW9uSWQgPSBpbmRl eF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChyZWwsIGluZGV4UmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJdGFibGVzcGFjZUlkLCBhdXhJbmRleFJlbGF0aW9uTmFtZSk7CisJCU9iamVjdEFkZHJlc3NT ZXQoYXV4QWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLCBhdXhJbmRleFJlbGF0aW9uSWQpOwor CX0KKwogCUF0RU9YYWN0X0dVQyhmYWxzZSwgcm9vdF9zYXZlX25lc3RsZXZlbCk7CiAJU2V0VXNl cklkQW5kU2VjQ29udGV4dChyb290X3NhdmVfdXNlcmlkLCByb290X3NhdmVfc2VjX2NvbnRleHQp OwogCkBAIC0xNjI4LDExICsxNjU0LDExIEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkvKgogCSAqIEZvciBhIGNvbmN1cnJlbnQgYnVpbGQsIGl0J3MgaW1wb3J0YW50IHRvIG1h a2UgdGhlIGNhdGFsb2cgZW50cmllcwogCSAqIHZpc2libGUgdG8gb3RoZXIgdHJhbnNhY3Rpb25z IGJlZm9yZSB3ZSBzdGFydCB0byBidWlsZCB0aGUgaW5kZXguIFRoYXQKLQkgKiB3aWxsIHByZXZl bnQgdGhlbSBmcm9tIG1ha2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuICBUaGUgbmV3IGlu ZGV4Ci0JICogd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlk LCBzbyB0aGF0IG5vIG9uZSBlbHNlCi0JICogdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRvIGl0 IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KKwkgKiB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIG1ha2lu ZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuIE5ldyBpbmRleGVzCisJICogKG1haW4gYW5kIGF1 eGlsaWFyeSkgd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlk LAorCSAqIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRvIGl0 IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KIAkgKgotCSAqIFdlIG11c3QgY29tbWl0IG91ciBjdXJy ZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIGluZGV4IGJlY29tZXMKKwkgKiBXZSBtdXN0IGNv bW1pdCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleGVzIGJlY29tZXMK IAkgKiB2aXNpYmxlOyB0aGVuIHN0YXJ0IGFub3RoZXIuICBOb3RlIHRoYXQgYWxsIHRoZSBkYXRh IHN0cnVjdHVyZXMgd2UganVzdAogCSAqIGJ1aWx0IGFyZSBsb3N0IGluIHRoZSBjb21taXQuICBU aGUgb25seSBkYXRhIHdlIGtlZXAgcGFzdCBoZXJlIGFyZSB0aGUKIAkgKiByZWxhdGlvbiBJRHMu CkBAIC0xNjQyLDcgKzE2NjgsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJ ICogY2Fubm90IGJsb2NrLCBldmVuIGlmIHNvbWVvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBhY2Nl c3MsIGJlY2F1c2Ugd2UKIAkgKiBhbHJlYWR5IGhhdmUgdGhlIHNhbWUgbG9jayB3aXRoaW4gb3Vy IHRyYW5zYWN0aW9uLgogCSAqCi0JICogTm90ZTogd2UgZG9uJ3QgY3VycmVudGx5IGJvdGhlciB3 aXRoIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBpbmRleCwKKwkgKiBOb3RlOiB3ZSBkb24ndCBjdXJy ZW50bHkgYm90aGVyIHdpdGggYSBzZXNzaW9uIGxvY2sgb24gdGhlIGluZGV4ZXMsCiAJICogYmVj YXVzZSB0aGVyZSBhcmUgbm8gb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNoYW5nZSBpdHMgc3RhdGUg d2hpbGUgd2UKIAkgKiBob2xkIGxvY2sgb24gdGhlIHBhcmVudCB0YWJsZS4gIFRoaXMgbWlnaHQg bmVlZCB0byBjaGFuZ2UgbGF0ZXIuCiAJICovCkBAIC0xNjgxLDcgKzE3MDcsNyBAQCBEZWZpbmVJ bmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogd2l0aCB0aGUgb2xkIGxpc3Qgb2YgaW5kZXhl cy4gIFVzZSBTaGFyZUxvY2sgdG8gY29uc2lkZXIgcnVubmluZwogCSAqIHRyYW5zYWN0aW9ucyB0 aGF0IGhvbGQgbG9ja3MgdGhhdCBwZXJtaXQgd3JpdGluZyB0byB0aGUgdGFibGUuICBOb3RlIHdl CiAJICogZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgeGFjdHMgdGhhdCBvcGVuIHRoZSB0YWJs ZSBmb3Igd3JpdGluZyBhZnRlcgotCSAqIHRoaXMgcG9pbnQ7IHRoZXkgd2lsbCBzZWUgdGhlIG5l dyBpbmRleCB3aGVuIHRoZXkgb3BlbiBpdC4KKwkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2Vl IHRoZSBuZXcgaW5kZXhlcyB3aGVuIHRoZXkgb3BlbiBpdC4KIAkgKgogCSAqIE5vdGU6IHRoZSBy ZWFzb24gd2UgdXNlIGFjdHVhbCBsb2NrIGFjcXVpc2l0aW9uIGhlcmUsIHJhdGhlciB0aGFuIGp1 c3QKIAkgKiBjaGVja2luZyB0aGUgUHJvY0FycmF5IGFuZCBzbGVlcGluZywgaXMgdGhhdCBkZWFk bG9jayBpcyBwb3NzaWJsZSBpZgpAQCAtMTY5MywxNCArMTcxOSw0NCBAQCBEZWZpbmVJbmRleChQ YXJzZVN0YXRlICpwc3RhdGUsCiAKIAkvKgogCSAqIEF0IHRoaXMgbW9tZW50IHdlIGFyZSBzdXJl IHRoYXQgdGhlcmUgYXJlIG5vIHRyYW5zYWN0aW9ucyB3aXRoIHRoZQotCSAqIHRhYmxlIG9wZW4g Zm9yIHdyaXRlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIG5ldyBpbmRleCBpbiB0aGVpciBsaXN0IG9m CisJICogdGFibGUgb3BlbiBmb3Igd3JpdGUgdGhhdCBkb24ndCBoYXZlIHRoaXMgbmV3IGluZGV4 ZXMgaW4gdGhlaXIgbGlzdCBvZgogCSAqIGluZGV4ZXMuICBXZSBoYXZlIHdhaXRlZCBvdXQgYWxs IHRoZSBleGlzdGluZyB0cmFuc2FjdGlvbnMgYW5kIGFueSBuZXcKLQkgKiB0cmFuc2FjdGlvbiB3 aWxsIGhhdmUgdGhlIG5ldyBpbmRleCBpbiBpdHMgbGlzdCwgYnV0IHRoZSBpbmRleCBpcyBzdGls bAotCSAqIG1hcmtlZCBhcyAibm90LXJlYWR5LWZvci1pbnNlcnRzIi4gIFRoZSBpbmRleCBpcyBj b25zdWx0ZWQgd2hpbGUKKwkgKiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgYm90aCBuZXcgaW5kZXhl cyBpbiBpdHMgbGlzdCwgYnV0IGluZGV4ZXMgYXJlIHN0aWxsCisJICogbWFya2VkIGFzICJub3Qt cmVhZHktZm9yLWluc2VydHMiLiBUaGUgaW5kZXhlcyBhcmUgY29uc3VsdGVkIHdoaWxlCiAJICog ZGVjaWRpbmcgSE9ULXNhZmV0eSB0aG91Z2guICBUaGlzIGFycmFuZ2VtZW50IGVuc3VyZXMgdGhh dCBubyBuZXcgSE9UCiAJICogY2hhaW5zIGNhbiBiZSBjcmVhdGVkIHdoZXJlIHRoZSBuZXcgdHVw bGUgYW5kIHRoZSBvbGQgdHVwbGUgaW4gdGhlCiAJICogY2hhaW4gaGF2ZSBkaWZmZXJlbnQgaW5k ZXgga2V5cy4KIAkgKgorCSAqIE5vdyBjYWxsIGJ1aWxkIG9uIGF1eGlsaWFyeSBpbmRleC4gSW5k ZXggd2lsbCBiZSBjcmVhdGVkIGVtcHR5IHdpdGhvdXQKKwkgKiBhbnkgYWN0dWFsIGhlYXAgc2Nh biwgYnV0IG1hcmtlZCBhcyAicmVhZHktZm9yLWluc2VydHMiLiBUaGUgZ29hbCBvZgorCSAqIHRo YXQgaW5kZXggaXMgYWNjdW11bGF0ZSBuZXcgdHVwbGVzIHdoaWxlIG1haW4gaW5kZXggaXMgYWN0 dWFsbHkgYnVpbHQuCisJICovCisKKwkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rp b25zIGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQodGFi bGVJZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBz bmFwc2hvdCAqLworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJy ZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlm IChzYWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCXBnc3RhdF9wcm9n cmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVu c3VyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIHdpdGggdGhlIHdpdGggYXV4aWxpYXJ5IGluZGV4CisJ ICogbWFya2VkIGFzICJub3QtcmVhZHktZm9yLWluc2VydHMiLgorCSAqLworCVdhaXRGb3JMb2Nr ZXJzKGhlYXBsb2NrdGFnLCBTaGFyZUxvY2ssIHRydWUpOworCisJLyoKKwkgKiBBdCB0aGlzIG1v bWVudCB3ZSBhcmUgc3VyZSB0aGF0IGFsbCBuZXcgdHVwbGVzIGluIHRhYmxlIGFyZSBpbnNlcnRl ZCBpbnRvCisJICogdGhlIGF1eGlsaWFyeSBpbmRleC4gTm93IGl0IGlzIHRpbWUgdG8gYnVpbGQg dGhlIHRhcmdldCBpbmRleCBpdHNlbGYuCisJICoKIAkgKiBXZSBub3cgdGFrZSBhIG5ldyBzbmFw c2hvdCwgYW5kIGJ1aWxkIHRoZSBpbmRleCB1c2luZyBhbGwgdHVwbGVzIHRoYXQKIAkgKiBhcmUg dmlzaWJsZSBpbiB0aGlzIHNuYXBzaG90LiAgV2UgY2FuIGJlIHN1cmUgdGhhdCBhbnkgSE9UIHVw ZGF0ZXMgdG8KIAkgKiB0aGVzZSB0dXBsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGlu ZGV4LCBzaW5jZSBhbnkgdXBkYXRlcyBtYWRlCkBAIC0xNzM1LDkgKzE3OTEsMjggQEAgRGVmaW5l SW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIHRoZSBpbmRleCBtYXJrZWQgYXMgcmVhZC1v bmx5IGZvciB1cGRhdGVzLgogCSAqLwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF X1dBSVRfMik7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKIAlX YWl0Rm9yTG9ja2VycyhoZWFwbG9ja3RhZywgU2hhcmVMb2NrLCB0cnVlKTsKIAorCS8qCisJICog VXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVu c3VyZSB3ZQorCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkgKi8KKwlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkvKgorCSAqIE5vdyB0YXJnZXQgaW5k ZXggaXMgbWFya2VkIGFzICJyZWFkeSIgZm9yIGFsbCB0cmFuc2FjdGlvbnMuIFNvLCBhdXhpbGlh cnkKKwkgKiBpbmRleCBpcyBubyBsb25nZXIgbmVlZGVkLiBTbywgc3RhcnQgcmVtb3ZpbmcgcHJv Y2VzcyBieSByZXZlcnRpbmcgInJlYWR5IgorCSAqIGZsYWcuCisJICovCisJaW5kZXhfc2V0X3N0 YXRlX2ZsYWdzKGF1eEluZGV4UmVsYXRpb25JZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJ UG9wQWN0aXZlU25hcHNob3QoKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0 YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxk cyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQor CQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCiAJLyoKIAkgKiBOb3cgdGFrZSB0aGUgInJl ZmVyZW5jZSBzbmFwc2hvdCIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgoKQog CSAqIHRvIGZpbHRlciBjYW5kaWRhdGUgdHVwbGVzLiAgQmV3YXJlISAgVGhlcmUgbWlnaHQgc3Rp bGwgYmUgc25hcHNob3RzIGluCkBAIC0xNzU1LDI0ICsxODMwLDE0IEBAIERlZmluZUluZGV4KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkgKi8KIAlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKIAlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOwot CiAJLyoKLQkgKiBTY2FuIHRoZSBpbmRleCBhbmQgdGhlIGhlYXAsIGluc2VydCBhbnkgbWlzc2lu ZyBpbmRleCBlbnRyaWVzLgotCSAqLwotCXZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVs YXRpb25JZCwgc25hcHNob3QpOwotCi0JLyoKLQkgKiBEcm9wIHRoZSByZWZlcmVuY2Ugc25hcHNo b3QuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdhaXRpbmcgb3V0IG90aGVyCi0JICogc25hcHNo b3QgaG9sZGVycywgZWxzZSB3ZSB3aWxsIGRlYWRsb2NrIGFnYWluc3Qgb3RoZXIgcHJvY2Vzc2Vz IGFsc28KLQkgKiBkb2luZyBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLCB3aGljaCB3b3VsZCBz ZWUgb3VyIHNuYXBzaG90IGFzIG9uZQotCSAqIHRoZXkgbXVzdCB3YWl0IGZvci4gIEJ1dCBmaXJz dCwgc2F2ZSB0aGUgc25hcHNob3QncyB4bWluIHRvIHVzZSBhcwotCSAqIGxpbWl0WG1pbiBmb3Ig R2V0Q3VycmVudFZpcnR1YWxYSURzKCkuCisJICogTWVyZ2UgY29udGVudCBvZiBhdXhpbGlhcnkg YW5kIHRhcmdldCBpbmRleGVzIC0gaW5zZXJ0IGFueSBtaXNzaW5nIGluZGV4IGVudHJpZXMuCiAJ ICovCisJdmFsaWRhdGVfaW5kZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBhdXhJbmRleFJl bGF0aW9uSWQsIHNuYXBzaG90KTsKIAlsaW1pdFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKIAogCVBv cEFjdGl2ZVNuYXBzaG90KCk7CiAJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKLQogCS8q CiAJICogVGhlIHNuYXBzaG90IHN1YnN5c3RlbSBjb3VsZCBzdGlsbCBjb250YWluIHJlZ2lzdGVy ZWQgc25hcHNob3RzIHRoYXQKIAkgKiBhcmUgaG9sZGluZyBiYWNrIG91ciBwcm9jZXNzJ3MgYWR2 ZXJ0aXNlZCB4bWluOyBpbiBwYXJ0aWN1bGFyLCBpZgpAQCAtMTc5OSw3ICsxODY0LDcgQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqLwogCUlOSkVDVElPTl9QT0lOVCgiZGVm aW5lLWluZGV4LWJlZm9yZS1zZXQtdmFsaWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NS RUFURUlEWF9QSEFTRV9XQUlUXzMpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF X1dBSVRfNCk7CiAJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1pbiwgdHJ1ZSk7CiAKIAkv KgpAQCAtMTgyNCw2ICsxODg5LDUzIEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkgKiB0byByZXBsYW47IHNvIHJlbGNhY2hlIGZsdXNoIG9uIHRoZSBpbmRleCBpdHNlbGYgd2Fz IHN1ZmZpY2llbnQuKQogCSAqLwogCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxpZChoZWFw cmVsaWQucmVsSWQpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGln bm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJCXNldF9p bmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF X1dBSVRfNSk7CisJLyogTm93IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBzZWUgYXV4aWxp YXJ5IGFzICJub24tcmVhZHkgZm9yIGluc2VydHMiICovCisJV2FpdEZvckxvY2tlcnMoaGVhcGxv Y2t0YWcsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUpOworCisJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogVXBkYXRp bmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVuc3VyZSB3 ZQorCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkgKi8KKwlQdXNoQWN0aXZlU25hcHNob3Qo R2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkvKiBOb3cgaXQgaXMgdGltZSB0byBtYXJrIGF1 eGlsaWFyeSBpbmRleCBhcyBkZWFkICovCisJaW5kZXhfY29uY3VycmVudGx5X3NldF9kZWFkKHRh YmxlSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisK KwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYgaW5kZXgg cXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdz KCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CisJLyogTm93 IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBpZ25vcmUgYXV4aWxpYXJ5IGJlY2F1c2UgaXQg aXMgZGVhZCAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBBY2Nlc3NFeGNsdXNpdmVM b2NrLCB0cnVlKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIERyb3AgYXV4aWxpYXJ5IGluZGV4LgorCSAqCisJ ICogVXNlIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLIHNvIHRoYXQgaW5kZXhfZHJv cCgpIHVzZXMgdGhlCisJICogcmlnaHQgbG9jayBsZXZlbC4KKwkgKi8KKwlwZXJmb3JtRGVsZXRp b24oJmF1eEFkZHJlc3MsIERST1BfUkVTVFJJQ1QsCisJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05f Q09OQ1VSUkVOVF9MT0NLIHwgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCk7CiAKIAkvKgogCSAq IExhc3QgdGhpbmcgdG8gZG8gaXMgcmVsZWFzZSB0aGUgc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIHRo ZSBwYXJlbnQgdGFibGUuCkBAIC0zNTk1LDYgKzM3MDcsNyBAQCBSZWluZGV4UmVsYXRpb25Db25j dXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3Qg UmVpbgogCXR5cGVkZWYgc3RydWN0IFJlaW5kZXhJbmRleEluZm8KIAl7CiAJCU9pZAkJCWluZGV4 SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJCWFtSWQ7 CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8KQEAgLTM3 MDAsOCArMzgxMywxNSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRl eFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQlPaWQJCQljZWxs T2lkID0gbGZpcnN0X29pZChsYyk7CiAJCQkJCVJlbGF0aW9uCWluZGV4UmVsYXRpb24gPSBpbmRl eF9vcGVuKGNlbGxPaWQsCiAJCQkJCQkJCQkJCQkJCSAgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j ayk7CisJCQkJCUluZGV4SW5mbyoJaW5kZXhJbmZvID0gQnVpbGREdW1teUluZGV4SW5mbyhpbmRl eFJlbGF0aW9uKTsKIAotCQkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRpc3Zh bGlkKQorCisJCQkJCWlmIChpbmRleEluZm8tPmlpX0F1eGlsaWFyeSkKKwkJCQkJCWVyZXBvcnQo V0FSTklORywoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJ IGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwK KwkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjZWxsT2lkKSks CisJCQkJCQkJCQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCWVsc2UgaWYgKCFpbmRl eFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxpZCkKIAkJCQkJCWVyZXBvcnQoV0FSTklORywK IAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCiAJCQkJCQkJCSBlcnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCBc IiVzLiVzXCIiLApAQCAtMzc1Myw4ICszODczLDE1IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJl bnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWlu CiAJCQkJCQlPaWQJCQljZWxsT2lkID0gbGZpcnN0X29pZChsYzIpOwogCQkJCQkJUmVsYXRpb24J aW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oY2VsbE9pZCwKIAkJCQkJCQkJCQkJCQkJCSAgIFNo YXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCQkJCQlJbmRleEluZm8qCWluZGV4SW5mbyA9IEJ1 aWxkRHVtbXlJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CiAKLQkJCQkJCWlmICghaW5kZXhSZWxh dGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCisJCQkJCQlpZiAoaW5kZXhJbmZvLT5paV9BdXhp bGlhcnkpCisJCQkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVp bmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKKwkJCQkJCQkJCQkJZ2V0X25hbWVz cGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxPaWQpKSwKKwkJCQkJCQkJCQkJZ2V0X3Jl bF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQkJZWxzZSBpZiAoIWluZGV4UmVsYXRpb24tPnJkX2lu ZGV4LT5pbmRpc3ZhbGlkKQogCQkJCQkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCQkJCQkJ IGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4IFwiJXMuJXNcIiIsCkBA IC0zODE1LDYgKzM5NDIsMTMgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJl aW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCQkJIGVycm1zZygiY2Fu bm90IHJlaW5kZXggaW52YWxpZCBpbmRleCBvbiBUT0FTVCB0YWJsZSIpKSk7CiAKKwkJCQkvKiBB dXhpbGlhcnkgaW5kZXhlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgcmVidWlsdCAqLworCQkJCWlm IChnZXRfcmVsX3JlbGFtKHJlbGF0aW9uT2lkKSA9PSBTVElSX0FNX09JRCkKKwkJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK KwkJCQkJCSBlcnJtc2coInJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXNcIiBub3Qgc3Vw cG9ydGVkIiwKKwkJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lkKSkpKTsKKwogCQkJCS8q CiAJCQkJICogQ2hlY2sgaWYgcGFyZW50IHJlbGF0aW9uIGNhbiBiZSBsb2NrZWQgYW5kIGlmIGl0 IGV4aXN0cywKIAkJCQkgKiB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYXQgdGhpcyBzdGFnZSBhcyB0 aGUgbGlzdCBvZiBpbmRleGVzCkBAIC0zOTE4LDE1ICs0MDUyLDE4IEBAIFJlaW5kZXhSZWxhdGlv bkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBj b25zdCBSZWluCiAJZm9yZWFjaChsYywgaW5kZXhJZHMpCiAJewogCQljaGFyCSAgICpjb25jdXJy ZW50TmFtZTsKKwkJY2hhcgkgICAqYXV4Q29uY3VycmVudE5hbWU7CiAJCVJlaW5kZXhJbmRleElu Zm8gKmlkeCA9IGxmaXJzdChsYyk7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeDsKIAkJT2lk CQkJbmV3SW5kZXhJZDsKKwkJT2lkCQkJYXV4SW5kZXhJZDsKIAkJUmVsYXRpb24JaW5kZXhSZWw7 CiAJCVJlbGF0aW9uCWhlYXBSZWw7CiAJCU9pZAkJCXNhdmVfdXNlcmlkOwogCQlpbnQJCQlzYXZl X3NlY19jb250ZXh0OwogCQlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAkJUmVsYXRpb24JbmV3SW5k ZXhSZWw7CisJCVJlbGF0aW9uCWF1eEluZGV4UmVsOwogCQlMb2NrUmVsSWQgICpsb2NrcmVsaWQ7 CiAJCU9pZAkJCXRhYmxlc3BhY2VpZDsKIApAQCAtMzk3Nyw2ICs0MTE0LDExIEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkJCSJjY25ldyIsCiAJCQkJCQkJCQkJCWdldF9yZWxf bmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQpLAogCQkJCQkJCQkJCQlmYWxz ZSk7CisJCWF1eENvbmN1cnJlbnROYW1lID0gQ2hvb3NlUmVsYXRpb25OYW1lKGdldF9yZWxfbmFt ZShpZHgtPmluZGV4SWQpLAorCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQkiY2NhdXgiLAor CQkJCQkJCQkJCQlnZXRfcmVsX25hbWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmluZHJlbGlk KSwKKwkJCQkJCQkJCQkJZmFsc2UpOwogCiAJCS8qIENob29zZSB0aGUgbmV3IHRhYmxlc3BhY2Us IGluZGV4ZXMgb2YgdG9hc3QgdGFibGVzIGFyZSBub3QgbW92ZWQgKi8KIAkJaWYgKE9pZElzVmFs aWQocGFyYW1zLT50YWJsZXNwYWNlT2lkKSAmJgpAQCAtMzk5MCwxMiArNDEzMiwxNyBAQCBSZWlu ZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxh dGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQkJCQkJCQkJCWlkeC0+aW5kZXhJZCwKIAkJCQkJCQkJ CQkJCQl0YWJsZXNwYWNlaWQsCiAJCQkJCQkJCQkJCQkJY29uY3VycmVudE5hbWUpOworCQlhdXhJ bmRleElkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgoaGVhcFJlbCwKKwkJCQkJCQkJ CQkJCSAgIG5ld0luZGV4SWQsCisJCQkJCQkJCQkJCQkgICB0YWJsZXNwYWNlaWQsCisJCQkJCQkJ CQkJCQkgICBhdXhDb25jdXJyZW50TmFtZSk7CiAKIAkJLyoKIAkJICogTm93IG9wZW4gdGhlIHJl bGF0aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEgc2Vzc2lvbi1sZXZlbCBsb2NrIGlzCiAJCSAqIGFs c28gbmVlZGVkIG9uIGl0LgogCQkgKi8KIAkJbmV3SW5kZXhSZWwgPSBpbmRleF9vcGVuKG5ld0lu ZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCWF1eEluZGV4UmVsID0gaW5kZXhf b3BlbihhdXhJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCiAJCS8qCiAJCSAq IFNhdmUgdGhlIGxpc3Qgb2YgT0lEcyBhbmQgbG9ja3MgaW4gcHJpdmF0ZSBjb250ZXh0CkBAIC00 MDA0LDYgKzQxNTEsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRl eFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJCW5ld2lkeCA9IHBh bGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7CiAJCW5ld2lkeC0+aW5kZXhJZCA9IG5ld0lu ZGV4SWQ7CisJCW5ld2lkeC0+YXV4SW5kZXhJZCA9IGF1eEluZGV4SWQ7CiAJCW5ld2lkeC0+c2Fm ZSA9IGlkeC0+c2FmZTsKIAkJbmV3aWR4LT50YWJsZUlkID0gaWR4LT50YWJsZUlkOwogCQluZXdp ZHgtPmFtSWQgPSBpZHgtPmFtSWQ7CkBAIC00MDIyLDEwICs0MTcwLDE0IEBAIFJlaW5kZXhSZWxh dGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lk LCBjb25zdCBSZWluCiAJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKIAkJ KmxvY2tyZWxpZCA9IG5ld0luZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CiAJCXJlbGF0 aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCWxvY2tyZWxp ZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJKmxvY2tyZWxpZCA9IGF1eEluZGV4UmVs LT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0 aW9uTG9ja3MsIGxvY2tyZWxpZCk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOwogCiAJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlpbmRleF9jbG9zZShh dXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UobmV3SW5kZXhSZWwsIE5vTG9jayk7 CiAKIAkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5j dGlvbnMgKi8KQEAgLTQxMDYsMTMgKzQyNTgsNjAgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4K IAkgKiBkb2luZyB0aGF0LCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcgdHJhbnNhY3Rpb25zIGNvdWxk IGhhdmUgdGhlIHRhYmxlIG9mCiAJICogdGhlIGluZGV4IG9wZW4gd2l0aCB0aGUgb2xkIGxpc3Qg b2YgaW5kZXhlcy4gIFNlZSAicGhhc2UgMiIgaW4KIAkgKiBEZWZpbmVJbmRleCgpIGZvciBtb3Jl IGRldGFpbHMuCisJKi8KKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8x KTsKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2ssIHRydWUpOwor CUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBOb3cgYnVpbGQgYWxsIGF1 eGlsaWFyeSBpbmRleGVzIGFuZCBtYXJrIHRoZW0gYXMgInJlYWR5LWZvci1pbnNlcnRzIi4KKwkg Ki8KKwlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJlaW5kZXhJbmRleEluZm8gKm5l d2lkeCA9IGxmaXJzdChsYyk7CisKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkv KgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBh IHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3Mg V0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBj bGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwor CQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFs aWZpZXMgKi8KKwkJaWYgKG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdz KCk7CisKKwkJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5k ZXhlcyBtYXkgbmVlZCBpdCAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25T bmFwc2hvdCgpKTsKKworCQkvKiBCdWlsZCBhdXhpbGlhcnkgaW5kZXgsIGl0IGlzIGZhc3QgLSB3 aXRob3V0IGFueSBhY3R1YWwgaGVhcCBzY2FuLCBqdXN0IGFuIGVtcHR5IGluZGV4LiAqLworCQlp bmRleF9jb25jdXJyZW50bHlfYnVpbGQobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4 SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCX0KKworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIEJlY2F1 c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IGluIHRoaXMgdHJhbnNhY3Rpb24sIHRoZXJlJ3Mg bm8gbmVlZAorCSAqIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkgKi8K IAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF LAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMSk7CisJCQkJCQkJCSBQ Uk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkvKgorCSAqIFdhaXQgdW50aWwgYWxs IGF1eGlsaWFyeSBpbmRleGVzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgYnkgYWxsCisJICogdHJh bnNhY3Rpb25zLgorCSAqLwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJl TG9jaywgdHJ1ZSk7CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKKwkvKiBOb3cgaXQg aXMgdGltZSB0byBwZXJmb3JtIHRhcmdldCBpbmRleCBidWlsZC4gKi8KIAlmb3JlYWNoKGxjLCBu ZXdJbmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7 CkBAIC00MTU5LDYgKzQzNTgsNDEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkgKiBuZWVk IHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkgKi8KIAorCXBnc3RhdF9w cm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCQkg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CisJV2FpdEZvckxvY2tlcnNNdWx0aXBs ZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKworCS8qCisJICogQXQgdGhpcyBtb21lbnQgYWxsIHRhcmdldCBpbmRleGVzIGFyZSBtYXJr ZWQgYXMgInJlYWR5LXRvLWluc2VydCIuIFNvLAorCSAqIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHBy b2Nlc3Mgb2YgZHJvcHBpbmcgYXV4aWxpYXJ5IGluZGV4ZXMuCisJICovCisJZm9yZWFjaChsYywg bmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMp OworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNl ci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJ CSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMg dGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0Lgor CQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBUZWxsIGNvbmN1cnJlbnQg aW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwkJaWYgKG5ld2lk eC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwkJLyoKKwkJICogVXBk YXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVuc3Vy ZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJCSAqLworCQlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdz KG5ld2lkeC0+YXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJCVBvcEFjdGl2 ZVNuYXBzaG90KCk7CisKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJfQorCiAJLyoK IAkgKiBQaGFzZSAzIG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCiAJICoKQEAgLTQxNjYsMTIgKzQ0 MDAsNiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0 bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCSAqIHdlcmUgY3JlYXRlZCBkdXJpbmcg dGhlIHByZXZpb3VzIHBoYXNlLiAgU2VlICJwaGFzZSAzIiBpbiBEZWZpbmVJbmRleCgpCiAJICog Zm9yIG1vcmUgZGV0YWlscy4KIAkgKi8KLQotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFX1dBSVRfMik7Ci0JV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2Nr LCB0cnVlKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKLQogCWZvcmVhY2gobGMsIG5l d0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsK QEAgLTQyMDksNyArNDQzNyw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBS ZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCXByb2dyZXNz X3ZhbHNbM10gPSBuZXdpZHgtPmFtSWQ7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlf cGFyYW0oNCwgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCi0JCXZhbGlkYXRlX2lu ZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBzbmFwc2hvdCk7CisJCXZhbGlk YXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgtPmF1eElu ZGV4SWQsIHNuYXBzaG90KTsKIAogCQkvKgogCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkgd2l0aCBv dXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKQEAgLTQyMzgsNyArNDQ2 Niw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCSAqIHRoZXJlJ3Mgbm8gbmVlZCB0byBz ZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJCSAqLwogCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJCSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJ RFhfUEhBU0VfV0FJVF80KTsKIAkJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1pbiwgdHJ1 ZSk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00MzI5LDE0ICs0NTU3LDE0 IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwg T2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJLyoKIAkgKiBQaGFzZSA1IG9mIFJFSU5ERVgg Q09OQ1VSUkVOVExZCiAJICoKLQkgKiBNYXJrIHRoZSBvbGQgaW5kZXhlcyBhcyBkZWFkLiAgRmly c3Qgd2UgbXVzdCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcKLQkgKiB0cmFuc2FjdGlvbiBjb3VsZCBi ZSB1c2luZyB0aGUgaW5kZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbworCSAqIE1hcmsgdGhlIG9s ZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXMgZGVhZC4gRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGls IG5vCisJICogcnVubmluZyB0cmFuc2FjdGlvbiBjb3VsZCBiZSB1c2luZyB0aGUgaW5kZXggZm9y IGEgcXVlcnkuICBTZWUgYWxzbwogCSAqIGluZGV4X2Ryb3AoKSBmb3IgbW9yZSBkZXRhaWxzLgog CSAqLwogCiAJSU5KRUNUSU9OX1BPSU5UKCJyZWluZGV4LXJlbGF0aW9uLWNvbmN1cnJlbnRseS1i ZWZvcmUtc2V0LWRlYWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFT RV9XQUlUXzQpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNSk7CiAJ V2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1 ZSk7CiAKIAlmb3JlYWNoKGxjLCBpbmRleElkcykKQEAgLTQzNjEsNiArNDU4OSwyOCBAQCBSZWlu ZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxh dGlvbk9pZCwgY29uc3QgUmVpbgogCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCX0KIAorCWZvcmVh Y2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZp cnN0KGxjKTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBU aGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBp c3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxl dmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKworCQkvKgorCQkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZl IFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5zdXJlIHdlCisJCSAqIGhhdmUgYSB2YWxpZCBzbmFw c2hvdC4KKwkJICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90 KCkpOworCisJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5l d2lkeC0+YXV4SW5kZXhJZCk7CisKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwl9CisKIAkvKiBD b21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtlIHRoZSB1cGRhdGVzIHZpc2libGUuICovCiAJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK QEAgLTQzNzQsMTEgKzQ2MjQsMTEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkvKgogCSAq IFBoYXNlIDYgb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKIAkgKgotCSAqIERyb3AgdGhlIG9sZCBp bmRleGVzLgorCSAqIERyb3AgdGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMuCiAJICovCiAK IAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwK LQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzUpOworCQkJCQkJCQkgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShs b2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CiAKIAlQdXNoQWN0aXZlU25hcHNo b3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKQEAgLTQzOTgsNiArNDY0OCwxOCBAQCBSZWlu ZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxh dGlvbk9pZCwgY29uc3QgUmVpbgogCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3Qs IG9iamVjdHMpOwogCQl9CiAKKwkJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJCXsKKwkJCVJl aW5kZXhJbmRleEluZm8gKmlkeCA9IGxmaXJzdChsYyk7CisJCQlPYmplY3RBZGRyZXNzIG9iamVj dDsKKworCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlvYmplY3Qu b2JqZWN0SWQgPSBpZHgtPmF1eEluZGV4SWQ7CisJCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOwor CisJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVjdCwgb2JqZWN0cyk7CisJCX0KKwog CQkvKgogCQkgKiBVc2UgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28gdGhhdCBp bmRleF9kcm9wKCkgdXNlcyB0aGUKIAkJICogcmlnaHQgbG9jayBsZXZlbC4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMKaW5kZXggMDlhZTQ0NTY5NGQuLjhjYjIyMzFhN2E4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YwpAQCAtODM0LDcgKzgzNCw3IEBAIEluZGV4SW5mbyAqCiBtYWtlSW5kZXhJbmZvKGludCBudW1h dHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCQkJ ICBMaXN0ICpwcmVkaWNhdGVzLCBib29sIHVuaXF1ZSwgYm9vbCBudWxsc19ub3RfZGlzdGluY3Qs CiAJCQkgIGJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LCBib29sIHN1bW1hcml6aW5nLAot CQkJICBib29sIHdpdGhvdXRvdmVybGFwcykKKwkJCSAgYm9vbCB3aXRob3V0b3ZlcmxhcHMsIGJv b2wgYXV4aWxpYXJ5KQogewogCUluZGV4SW5mbyAgKm4gPSBtYWtlTm9kZShJbmRleEluZm8pOwog CkBAIC04NTAsNiArODUwLDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1r ZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAluLT5paV9Db25jdXJyZW50 ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlp X1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKKwluLT5paV9BdXhpbGlhcnkgPSBh dXhpbGlhcnk7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1r ZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09 IG51bWF0dHJzKSk7CkBAIC04NzUsNyArODc2LDYgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0 cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBp bml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5I b3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7Ci0Jbi0+aWlfQXV4 aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBB TSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAwNjA4NDc1MjI0 NS4uMWE5OTc1Mzc4MDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzA1LDcgKzcwNSw4IEBAIHR5 cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJUmVsYXRpb24gaW5kZXhfcmVs LAogCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCQkJCQlTbmFwc2hvdCBz bmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlKTsKKwkJCQkJCQkJ CQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0 ZSAqYXV4X3N0YXRlKTsKIAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODI0LDE5ICsxODI1 LDI0IEBAIHRhYmxlX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAog ICogdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbiAtIHNlY29uZCB0YWJsZSBzY2FuIGZvciBjb25j dXJyZW50IGluZGV4IGJ1aWxkCiAgKgogICogU2VlIHZhbGlkYXRlX2luZGV4KCkgZm9yIGFuIGV4 cGxhbmF0aW9uLgorICoKKyAqIE5vdGU6IGl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoYXQgZnVu Y3Rpb24gdG8gY2xvc2Ugc29ydHN0YXRlcyBpbgorICogYm90aCBgc3RhdGVgIGFuZCBgYXV4c3Rh dGVgLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4o UmVsYXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJCQkJCQkg IEluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJ CQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0 ZSAqc3RhdGUsCisJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7CiAJdGFi bGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKIAkJCQkJ CQkJCQkJICAgaW5kZXhfcmVsLAogCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAogCQkJCQkJCQkJ CQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUpOworCQkJCQkJCQkJCQkgICBzdGF0 ZSwKKwkJCQkJCQkJCQkJICAgYXV4c3RhdGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCBi MjU5YzQxNDFlZC4uMzdhMzkwZDMzZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv aW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTI1LDYgKzI1LDcg QEAgdHlwZWRlZiBlbnVtCiB7CiAJSU5ERVhfQ1JFQVRFX1NFVF9SRUFEWSwKIAlJTkRFWF9DUkVB VEVfU0VUX1ZBTElELAorCUlOREVYX0RST1BfQ0xFQVJfUkVBRFksCiAJSU5ERVhfRFJPUF9DTEVB Ul9WQUxJRCwKIAlJTkRFWF9EUk9QX1NFVF9ERUFELAogfSBJbmRleFN0YXRlRmxhZ3NBY3Rpb247 CkBAIC02NSw2ICs2Niw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2NoZWNrX3ByaW1hcnlfa2V5KFJl bGF0aW9uIGhlYXBSZWwsCiAjZGVmaW5lCUlOREVYX0NSRUFURV9JRl9OT1RfRVhJU1RTCQkJKDEg PDwgNCkKICNkZWZpbmUJSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVECQkJKDEgPDwgNSkKICNkZWZp bmUgSU5ERVhfQ1JFQVRFX0lOVkFMSUQJCQkJKDEgPDwgNikKKyNkZWZpbmUgSU5ERVhfQ1JFQVRF X0FVWElMSUFSWQkJCQkoMSA8PCA3KQogCiBleHRlcm4gT2lkCWluZGV4X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCQkJCQkgY29uc3QgY2hhciAqaW5kZXhSZWxhdGlvbk5hbWUsCkBA IC0xMDAsNiArMTAyLDExIEBAIGV4dGVybiBPaWQJaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9j b3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCQkgICBPaWQgdGFibGVzcGFjZU9p ZCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpuZXdOYW1lKTsKIAorZXh0ZXJuIE9pZAlpbmRl eF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJ CQkJICBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJCQkJICBPaWQgdGFibGVzcGFjZU9pZCwKKwkJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKm5ld05hbWUpOworCiBleHRlcm4gdm9pZCBpbmRleF9jb25j dXJyZW50bHlfYnVpbGQoT2lkIGhlYXBSZWxhdGlvbklkLAogCQkJCQkJCQkJIE9pZCBpbmRleFJl bGF0aW9uSWQpOwogCkBAIC0xNDUsNyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfYnVpbGQo UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJYm9vbCBpc3JlaW5kZXgsCiAJCQkJCQlib29s IHBhcmFsbGVsKTsKIAotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lk IGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiB2b2lkIHZhbGlkYXRlX2luZGV4 KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNo b3QpOwogCiBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQsIElu ZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9wcm9ncmVzcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaAppbmRl eCAzNTkyMjFkYzI5Ni4uODQxNDkxYTg1MTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3Byb2dyZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaApAQCAt MTExLDE0ICsxMTEsMTUgQEAKIAogLyogUGhhc2VzIG9mIENSRUFURSBJTkRFWCAoYXMgYWR2ZXJ0 aXNlZCB2aWEgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFKSAqLwogI2RlZmluZSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF8xCQkJMQotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfQlVJTEQJCQkyCi0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIJCQkz Ci0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOCTQKLSNk ZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1NPUlQJCTUKLSNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NBTgk2Ci0jZGVmaW5lIFBS T0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMJCQk3CisjZGVmaW5lIFBST0dSRVNTX0NSRUFU RUlEWF9QSEFTRV9XQUlUXzIJCQkyCisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9C VUlMRAkJCTMKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMwkJCTQKKyNk ZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWFNDQU4JNQorI2RlZmlu ZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfU09SVAkJNgorI2RlZmluZSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0UJNwogI2RlZmluZSBQUk9HUkVT U19DUkVBVEVJRFhfUEhBU0VfV0FJVF80CQkJOAogI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhf UEhBU0VfV0FJVF81CQkJOQorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF82 CQkJMTAKIAogLyoKICAqIFN1YnBoYXNlcyBvZiBDUkVBVEUgSU5ERVgsIGZvciBpbmRleF9idWls ZC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggOTgyZWMyNWFlMTQuLjZjZjQ1YTY4Y2JlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9tYWtlZnVuY3MuaApAQCAtOTksNyArOTksOCBAQCBleHRlcm4gSW5kZXhJbmZvICptYWtl SW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsCiAJCQkJ CQkJCUxpc3QgKmV4cHJlc3Npb25zLCBMaXN0ICpwcmVkaWNhdGVzLAogCQkJCQkJCQlib29sIHVu aXF1ZSwgYm9vbCBudWxsc19ub3RfZGlzdGluY3QsCiAJCQkJCQkJCWJvb2wgaXNyZWFkeSwgYm9v bCBjb25jdXJyZW50LAotCQkJCQkJCQlib29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVy bGFwcyk7CisJCQkJCQkJCWJvb2wgc3VtbWFyaXppbmcsIGJvb2wgd2l0aG91dG92ZXJsYXBzLAor CQkJCQkJCQlib29sIGF1eGlsaWFyeSk7CiAKIGV4dGVybiBOb2RlICptYWtlU3RyaW5nQ29uc3Qo Y2hhciAqc3RyLCBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtKGNo YXIgKm5hbWUsIE5vZGUgKmFyZywgaW50IGxvY2F0aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCA1NTUzOGM0YzQxZS4uZDE3MjNmNDdlODkgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTE0MzcsNiAr MTQzNyw3IEBAIERFVEFJTDogIEtleSAoZjEpPShiKSBhbHJlYWR5IGV4aXN0cy4KIENSRUFURSBV TklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDMgT04gY29uY3VyX2hlYXAoZjIp OwogRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiY29uY3VyX2luZGV4MyIK IERFVEFJTDogIEtleSAoZjIpPShiKSBpcyBkdXBsaWNhdGVkLgorRFJPUCBJTkRFWCBjb25jdXJf aW5kZXgzX2NjYXV4OwogLS0gdGVzdCB0aGF0IGV4cHJlc3Npb24gaW5kZXhlcyBhbmQgcGFydGlh bCBpbmRleGVzIHdvcmsgY29uY3VycmVudGx5CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNv bmN1cl9pbmRleDQgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSdhJzsKIENSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4NSBvbiBjb25jdXJfaGVhcChmMikgV0hFUkUgZjE9 J3gnOwpAQCAtMzIxMSw2ICszMjEyLDcgQEAgSU5TRVJUIElOVE8gY29uY3VyX3JlaW5kZXhfdGFi NCBWQUxVRVMgKDEpLCAoMSksICgyKTsKIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZ IGNvbmN1cl9yZWluZGV4X2luZDUgT04gY29uY3VyX3JlaW5kZXhfdGFiNCAoYzEpOwogRVJST1I6 ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiY29uY3VyX3JlaW5kZXhfaW5kNSIKIERF VEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgorRFJPUCBJTkRFWCBjb25jdXJfcmVp bmRleF9pbmQ1X2NjYXV4OwogLS0gUmVpbmRleGluZyBjb25jdXJyZW50bHkgdGhpcyBpbmRleCBm YWlscyB3aXRoIHRoZSBzYW1lIGZhaWx1cmUuCiAtLSBUaGUgZXh0cmEgaW5kZXggY3JlYXRlZCBp cyBpdHNlbGYgaW52YWxpZCwgYW5kIGNhbiBiZSBkcm9wcGVkLgogUkVJTkRFWCBJTkRFWCBDT05D VVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfaW5kNTsKQEAgLTMyMjMsOCArMzIyNSwxMCBAQCBERVRB SUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KICBjMSAgICAgfCBpbnRlZ2VyIHwgICAg ICAgICAgIHwgICAgICAgICAgfCAKIEluZGV4ZXM6CiAgICAgImNvbmN1cl9yZWluZGV4X2luZDUi IFVOSVFVRSwgYnRyZWUgKGMxKSBJTlZBTElECisgICAgImNvbmN1cl9yZWluZGV4X2luZDVfY2Nh dXgiIHN0aXIgKGMxKSBJTlZBTElECiAgICAgImNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXciIFVO SVFVRSwgYnRyZWUgKGMxKSBJTlZBTElECiAKK0RST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5k NV9jY2F1eDsKIERST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY25ldzsKIC0tIFRoaXMg bWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNv bWUgdmFsaWQuCiBERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJFIGMxID0gMTsK QEAgLTMyNTIsNiArMzI1Niw0NCBAQCBJbmRleGVzOgogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1 IiBVTklRVUUsIGJ0cmVlIChjMSkKIAogRFJPUCBUQUJMRSBjb25jdXJfcmVpbmRleF90YWI0Owor LS0gQ2hlY2sgaGFuZGxpbmcgb2YgYXV4aWxpYXJ5IGluZGV4ZXMKK0NSRUFURSBUQUJMRSBhdXhf aW5kZXhfdGFiNSAoYzEgaW50KTsKK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAo MSksICgxKSwgKDIpOworLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXggYW5k IGF1eGlsaWFyeSBpbmRleCBmb3IgaXQKK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZ IGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5v dCBjcmVhdGUgdW5pcXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEp PSgxKSBpcyBkdXBsaWNhdGVkLgorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUg InB1YmxpYy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCitJbmRleGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElO VkFMSUQKKyAgICAiYXV4X2luZGV4X2luZDZfY2NhdXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0t IE5vdCBhbGxvd2VkIHRvIHJlaW5kZXggYXV4aWxpYXJ5IGluZGV4CitSRUlOREVYIElOREVYIGF1 eF9pbmRleF9pbmQ2X2NjYXV4OworRVJST1I6ICByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCAi YXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKKy0tIENvbmN1cnJlbnRseSBhbHNv CitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKK0VSUk9S OiAgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBub3Qg c3VwcG9ydGVkCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNv IHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CitFUlJPUjogIHJlbGF0aW9uICJjb25jdXJfcmVpbmRleF90YWI0 IiBkb2VzIG5vdCBleGlzdAorTElORSAxOiBERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0 IFdIRVJFIGMxID0gMTsKKyAgICAgICAgICAgICAgICAgICAgXgorLS0gU2hvdWxkIGJlIHNraXBw ZWQgZHVyaW5nIHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgYXV4X2luZGV4X3RhYjU7CitFUlJPUjog IGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDog IEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgorLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5n IGNvbmN1cnJlbnQgcmVpbmRleAorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgYXV4X2luZGV4 X3RhYjU7CitXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4ICJwdWJs aWMuYXV4X2luZGV4X2luZDYiCitISU5UOiAgVXNlIERST1AgSU5ERVggb3IgUkVJTkRFWCBJTkRF WC4KK1dBUk5JTkc6ICBza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCAicHVibGlj LmF1eF9pbmRleF9pbmQ2X2NjYXV4IgorTk9USUNFOiAgdGFibGUgImF1eF9pbmRleF90YWI1IiBo YXMgbm8gaW5kZXhlcyB0aGF0IGNhbiBiZSByZWluZGV4ZWQgY29uY3VycmVudGx5CitEUk9QIFRB QkxFIGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5kZXhlcyB3aXRoIGV4 cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9ucyBvZiB0aGUgcmVi dWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKIC0tIGRlZmluaXRpb25zLgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dAppbmRleCBkYzYyOTkyOGM4Zi4uOWIw NmRkYzg3YTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0CkBAIC0xNTg1 LDEwICsxNTg1LDExIEBAIHNlbGVjdCBpbmRleHJlbGlkOjpyZWdjbGFzcywgaW5kaXN2YWxpZCwK IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgcGFydGVkX2lz dmFsaWRfaWR4ICAgICAgICAgICAgIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYiAg ICB8IAogIHBhcnRlZF9pc3ZhbGlkX2lkeF8xMSAgICAgICAgICB8IGYgICAgICAgICAgfCBwYXJ0 ZWRfaXN2YWxpZF90YWJfMTEgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMV9leHByX2lkeAorIHBhcnRl ZF9pc3ZhbGlkX2lkeF8xMV9jY2F1eCAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90 YWJfMTEgfCAKICBwYXJ0ZWRfaXN2YWxpZF90YWJfMTJfZXhwcl9pZHggfCB0ICAgICAgICAgIHwg cGFydGVkX2lzdmFsaWRfdGFiXzEyIHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKICBw YXJ0ZWRfaXN2YWxpZF90YWJfMV9leHByX2lkeCAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFs aWRfdGFiXzEgIHwgcGFydGVkX2lzdmFsaWRfaWR4CiAgcGFydGVkX2lzdmFsaWRfdGFiXzJfZXhw cl9pZHggIHwgdCAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8yICB8IHBhcnRlZF9pc3Zh bGlkX2lkeAotKDUgcm93cykKKyg2IHJvd3MpCiAKIGRyb3AgdGFibGUgcGFydGVkX2lzdmFsaWRf dGFiOwogLS0gQ2hlY2sgc3RhdGUgb2YgcmVwbGljYSBpbmRleGVzIHdoZW4gYXR0YWNoaW5nIGEg cGFydGl0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCBkZWI2ZTJhZDZh OS4uMTFjYjA2Y2ZiNzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0yMDY4 LDE0ICsyMDY4LDE1IEBAIHBnX3N0YXRfcHJvZ3Jlc3NfY3JlYXRlX2luZGV4fCBTRUxFQ1Qgcy5w aWQsCiAgICAgICAgIENBU0Ugcy5wYXJhbTEwCiAgICAgICAgICAgICBXSEVOIDAgVEhFTiAnaW5p dGlhbGl6aW5nJzo6dGV4dAogICAgICAgICAgICAgV0hFTiAxIFRIRU4gJ3dhaXRpbmcgZm9yIHdy aXRlcnMgYmVmb3JlIGJ1aWxkJzo6dGV4dAotICAgICAgICAgICAgV0hFTiAyIFRIRU4gKCdidWls ZGluZyBpbmRleCc6OnRleHQgfHwgQ09BTEVTQ0UoKCc6ICc6OnRleHQgfHwgcGdfaW5kZXhhbV9w cm9ncmVzc19waGFzZW5hbWUoKHMucGFyYW05KTo6b2lkLCBzLnBhcmFtMTEpKSwgJyc6OnRleHQp KQotICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZh bGlkYXRpb24nOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDQgVEhFTiAnaW5kZXggdmFsaWRhdGlv bjogc2Nhbm5pbmcgaW5kZXgnOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXgg dmFsaWRhdGlvbjogc29ydGluZyB0dXBsZXMnOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDYgVEhF TiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnOjp0ZXh0Ci0gICAgICAgICAgICBX SEVOIDcgVEhFTiAnd2FpdGluZyBmb3Igb2xkIHNuYXBzaG90cyc6OnRleHQKLSAgICAgICAgICAg IFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJraW5nIGRlYWQnOjp0 ZXh0Ci0gICAgICAgICAgICBXSEVOIDkgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUg ZHJvcHBpbmcnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDIgVEhFTiAnd2FpdGluZyBmb3Igd3Jp dGVycyB0byB1c2UgYXV4aWxpYXJ5IGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiAzIFRI RU4gKCdidWlsZGluZyBpbmRleCc6OnRleHQgfHwgQ09BTEVTQ0UoKCc6ICc6OnRleHQgfHwgcGdf aW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoKHMucGFyYW05KTo6b2lkLCBzLnBhcmFtMTEpKSwg Jyc6OnRleHQpKQorICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMg YmVmb3JlIHZhbGlkYXRpb24nOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXgg dmFsaWRhdGlvbjogc2Nhbm5pbmcgaW5kZXgnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDYgVEhF TiAnaW5kZXggdmFsaWRhdGlvbjogc29ydGluZyB0dXBsZXMnOjp0ZXh0CisgICAgICAgICAgICBX SEVOIDcgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzJzo6dGV4dAorICAg ICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnOjp0ZXh0Cisg ICAgICAgICAgICBXSEVOIDkgVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2lu ZyBkZWFkJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAxMCBUSEVOICd3YWl0aW5nIGZvciByZWFk ZXJzIGJlZm9yZSBkcm9wcGluZyc6OnRleHQKICAgICAgICAgICAgIEVMU0UgTlVMTDo6dGV4dAog ICAgICAgICBFTkQgQVMgcGhhc2UsCiAgICAgcy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IDgyZTQwNjJhMjE1Li5jMmMxYjAz MTUyNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC01MDMsNiArNTAz LDcgQEAgQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgSUYgTk9UIEVYSVNUUyBjb25j dXJfaW5kZXgyIE9OIGNvbmN1cl9oZWFwKGYxKTsKIElOU0VSVCBJTlRPIGNvbmN1cl9oZWFwIFZB TFVFUyAoJ2InLCd4Jyk7CiAtLSBjaGVjayBpZiBjb25zdHJhaW50IGlzIGVuZm9yY2VkIHByb3Bl cmx5IGF0IGJ1aWxkIHRpbWUKIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1 cl9pbmRleDMgT04gY29uY3VyX2hlYXAoZjIpOworRFJPUCBJTkRFWCBjb25jdXJfaW5kZXgzX2Nj YXV4OwogLS0gdGVzdCB0aGF0IGV4cHJlc3Npb24gaW5kZXhlcyBhbmQgcGFydGlhbCBpbmRleGVz IHdvcmsgY29uY3VycmVudGx5CiBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRl eDQgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSdhJzsKIENSRUFURSBJTkRFWCBDT05DVVJS RU5UTFkgY29uY3VyX2luZGV4NSBvbiBjb25jdXJfaGVhcChmMikgV0hFUkUgZjE9J3gnOwpAQCAt MTMxNSwxMCArMTMxNiwxMiBAQCBDUkVBVEUgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFiNCAoYzEg aW50KTsKIElOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4X3RhYjQgVkFMVUVTICgxKSwgKDEpLCAo Mik7CiAtLSBUaGlzIHRyaWNrIGNyZWF0ZXMgYW4gaW52YWxpZCBpbmRleC4KIENSRUFURSBVTklR VUUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDUgT04gY29uY3VyX3JlaW5k ZXhfdGFiNCAoYzEpOworRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4OwogLS0g UmVpbmRleGluZyBjb25jdXJyZW50bHkgdGhpcyBpbmRleCBmYWlscyB3aXRoIHRoZSBzYW1lIGZh aWx1cmUuCiAtLSBUaGUgZXh0cmEgaW5kZXggY3JlYXRlZCBpcyBpdHNlbGYgaW52YWxpZCwgYW5k IGNhbiBiZSBkcm9wcGVkLgogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX3JlaW5k ZXhfaW5kNTsKIFxkIGNvbmN1cl9yZWluZGV4X3RhYjQKK0RST1AgSU5ERVggY29uY3VyX3JlaW5k ZXhfaW5kNV9jY2F1eDsKIERST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY25ldzsKIC0t IFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNh biBiZWNvbWUgdmFsaWQuCiBERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJFIGMx ID0gMTsKQEAgLTEzMzAsNiArMTMzMywyNCBAQCBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBj b25jdXJfcmVpbmRleF9pbmQ1OwogXGQgY29uY3VyX3JlaW5kZXhfdGFiNAogRFJPUCBUQUJMRSBj b25jdXJfcmVpbmRleF90YWI0OwogCistLSBDaGVjayBoYW5kbGluZyBvZiBhdXhpbGlhcnkgaW5k ZXhlcworQ1JFQVRFIFRBQkxFIGF1eF9pbmRleF90YWI1IChjMSBpbnQpOworSU5TRVJUIElOVE8g YXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpLCAoMik7CistLSBUaGlzIHRyaWNrIGNyZWF0 ZXMgYW4gaW52YWxpZCBpbmRleCBhbmQgYXV4aWxpYXJ5IGluZGV4IGZvciBpdAorQ1JFQVRFIFVO SVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUg KGMxKTsKK1xkIGF1eF9pbmRleF90YWI1CistLSBOb3QgYWxsb3dlZCB0byByZWluZGV4IGF1eGls aWFyeSBpbmRleAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKKy0tIENvbmN1 cnJlbnRseSBhbHNvCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNl9j Y2F1eDsKKy0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhl IGluZGV4IGNhbiBiZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0 IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4CitSRUlO REVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIGNv bmN1cnJlbnQgcmVpbmRleAorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgYXV4X2luZGV4X3Rh YjU7CitEUk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OworCiAtLSBDaGVjayBoYW5kbGluZyBvZiBp bmRleGVzIHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKIC0tIGRlZmluaXRp b25zIG9mIHRoZSByZWJ1aWx0IGluZGV4ZXMgc2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbAogLS0g ZGVmaW5pdGlvbnMuCi0tIAoyLjQzLjAKCg== --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v30-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nchn1 RnJvbSA4ZmY5NmI4ZjQ0Y2VjY2Y0MjllM2U2MzVhODA2MzExYjE0ZmMyNmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDUvN10gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDcxICsrKysrKysrKystLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jICAgICAgICAgICAgfCAgNTggKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgIHwgIDM3ICsrKysrKystCiBzcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgfCAgNTIgKysrKysrKysrLQog c3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgIHwgICAzICstCiBzcmMv aW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IHwgMTA1ICsrKysrKysrKysrKysrKysrKystLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAgIHwgIDU3ICsrKysrKysrKyst CiAxNCBmaWxlcyBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXggMTJjODg1ODdhNzkuLjdmNzUxNDUzMzE3 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAgLTY2OCwxMCArNjY4LDE2IEBAIElu ZGV4ZXM6CiAgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1saXN0 aW5nPgogCi0gICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGluIHN1Y2gg Y2FzZXMgaXMgdG8gZHJvcCB0aGVzZSBpbmRleGVzIGFuZCB0cnkgYWdhaW4gdG8gcGVyZm9ybQot ICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5vdGhl ciBwb3NzaWJpbGl0eSBpcwotICAgIHRvIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1hbmQ+ UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+KS4KKyAgICBUaGUgcmVjb21tZW5k ZWQgcmVjb3ZlcnkgbWV0aG9kIGluIHN1Y2ggY2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggd2l0 aAorICAgIDxjb21tYW5kPkRST1AgSU5ERVg8L2NvbW1hbmQ+LiBUaGUgYXV4aWxpYXJ5IGluZGV4 IChzdWZmaXhlZCB3aXRoCisgICAgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPikgd2lsbCBiZSBh dXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbiB0aGUgbWFpbgorICAgIGluZGV4IGlzIGRyb3BwZWQu IEFmdGVyIGRyb3BwaW5nIHRoZSBpbmRleGVzLCB5b3UgY2FuIHRyeSBhZ2FpbiB0byBwZXJmb3Jt CisgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90 aGVyIHBvc3NpYmlsaXR5IGlzIHRvCisgICAgcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFu ZD5SRUlOREVYIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4sCisgICAgd2hpY2ggd2lsbCBh bHNvIGhhbmRsZSBjbGVhbnVwIG9mIGFueSBpbnZhbGlkIGF1eGlsaWFyeSBpbmRleGVzLikKKyAg ICBJZiB0aGUgb25seSBpbnZhbGlkIGluZGV4IGlzIG9uZSBzdWZmaXhlZCA8bGl0ZXJhbD5fY2Nh dXg8L2xpdGVyYWw+LAorICAgIHJlY29tbWVuZGVkIHJlY292ZXJ5IG1ldGhvZCBpcyBqdXN0IDxs aXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+CisgICAgZm9yIHRoYXQgaW5kZXguCiAgICA8L3Bh cmE+CiAKICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbAppbmRleCAxYzNjN2E5N2Y2YS4uMzg0 YzVmYzhiM2YgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCkBAIC00NzYsMTEgKzQ3NiwxNSBAQCBJbmRl eGVzOgogICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+X2NjYXV4PC9s aXRlcmFsPiwgdGhlbiBpdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhbnNpZW50IG9yIGF1eGlsaWFy eQogICAgIGluZGV4IGNyZWF0ZWQgZHVyaW5nIHRoZSBjb25jdXJyZW50IG9wZXJhdGlvbiwgYW5k IHRoZSByZWNvbW1lbmRlZAogICAgIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBkcm9wIHRoZXNlIGlu ZGV4ZXMgdXNpbmcgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4sCi0gICAgdGhlbiBhdHRl bXB0IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBhZ2Fpbi4KKyAgICB0 aGVuIGF0dGVtcHQgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWlu LiBUaGUgYXV4aWxpYXJ5IGluZGV4CisgICAgKHN1ZmZpeGVkIHdpdGggPGxpdGVyYWw+X2NjYXV4 PC9saXRlcmFsPikgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQKKyAgICBhbG9uZyB3aXRo IGl0cyBtYWluIGluZGV4LgogICAgIElmIHRoZSBpbnZhbGlkIGluZGV4IGlzIGluc3RlYWQgc3Vm Zml4ZWQgPGxpdGVyYWw+X2Njb2xkPC9saXRlcmFsPiwKICAgICBpdCBjb3JyZXNwb25kcyB0byB0 aGUgb3JpZ2luYWwgaW5kZXggd2hpY2ggY291bGQgbm90IGJlIGRyb3BwZWQ7CiAgICAgdGhlIHJl Y29tbWVuZGVkIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBqdXN0IGRyb3Agc2FpZCBpbmRleCwgc2lu Y2UgdGhlCi0gICAgcmVidWlsZCBwcm9wZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bC4KKyAgICByZWJ1 aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLiBJZiB0aGUgb25seQorICAgIGludmFsaWQg aW5kZXggaXMgb25lIHN1ZmZpeGVkIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4sIHJlY29tbWVu ZGVkCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0 ZXJhbD4gZm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkgYmUgYXBwZW5k ZWQgdG8gdGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVzIHRvIGtlZXAg dGhlbSB1bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAgICAgPGxpdGVy YWw+X2Njb2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXgg MDk1NzUyNzhkZTMuLjc0ZjgzMzU4ODhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L2RlcGVuZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwpAQCAt Mjg3LDcgKzI4Nyw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmpl Y3QsCiAJICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2JqZWN0LiAgKElk ZWFsbHkgdGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0IG1hbnkgcGxh Y2VzIGFyZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlvbkxvY2sob2Jq ZWN0LCAwKTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwogCiAJLyoKIAkg KiBDb25zdHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhlIGdpdmVuIG9i amVjdCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNGY3NzYyN2ZiM2IuLjkxMTI1ZDM3MTUwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCkBAIC03NzMsNiArNzczLDggQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9u IGhlYXBSZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERfQ09OU1RSQUlO VCkgIT0gMCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBiZSAiYnVpbHQi IGJ5IHRoZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFncyAmIElOREVY X0NSRUFURV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCBhbmQgSU5E RVhfQ1JFQVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVyICovCisJQXNz ZXJ0KE9pZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElkKSA9PSBhdXhp bGlhcnkpOwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJUSVRJT05FRF9J TkRFWCA6IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5mby0+aWlfRXhj bHVzaW9uT3BzICE9IE5VTEwpOwpAQCAtMTE3OCw2ICsxMTgwLDE1IEBAIGluZGV4X2NyZWF0ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJl ZmVyZW5jZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkvKgorCQkgKiBS ZWNvcmQgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1eGlsaWFyeSBp bmRleC4KKwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9y SW5kZXhJZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25S ZWxhdGlvbklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOworCQkJcmVjb3Jk RGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9 CisKIAkJLyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8KIAkJYWRkcnMg PSBuZXdfb2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDEwLDcgKzE0MjEsOCBAQCBpbmRleF9j b25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xkSW5k ZXhJZCwKIAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1 bW1hcml6aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywKLQkJCQkJCQlm YWxzZSk7CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkvKgogCSAqIEV4 dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9y IHRoZSBuZXcKQEAgLTE1NzgsNyArMTU5MCw4IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVf YXV4KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAogCQkJCQkJCXRydWUs CiAJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCiAJCQkJCQkJZmFs c2UsCS8qIGF1eCBhcmUgbm90IHdpdGhvdXQgb3ZlcmxhcHMgKi8KLQkJCQkJCQl0cnVlCS8qIGF1 eGlsaWFyeSAqLyk7CisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8sCisJCQkJCQkJbWFpbklu ZGV4SWQgLyogYXV4aWxpYXJ5Rm9ySW5kZXhJZCAqLyk7CiAKIAkvKgogCSAqIEV4dHJhY3QgdGhl IGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBuZXcK QEAgLTI2MTQsNyArMjYyNyw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJ CQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJ CQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5p cXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhp bGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElS X0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRPaWQgLyog YXV4aWxpYXJ5X2Zvcl9pbmRleF9pZCBpcyBzZXQgb25seSBkdXJpbmcgYnVpbGQgKi8pOwogCiAJ LyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRz OyBpKyspCkBAIC0yNjc1LDcgKzI2ODksOCBAQCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9u IGluZGV4KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1h cml6aW5nLAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1 Y3QtPmluZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FN X09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5y ZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIElu dmFsaWRPaWQpOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9 IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0zODQwLDYgKzM4NTUsNyBAQCByZWluZGV4X2luZGV4 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJCQloZWFwUmVsYXRpb247 CiAJT2lkCQkJaGVhcElkOwogCU9pZAkJCXNhdmVfdXNlcmlkOworCU9pZAkJCWp1bmtBdXhJbmRl eElkOwogCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJ SW5kZXhJbmZvICAqaW5kZXhJbmZvOwpAQCAtMzg5Niw2ICszOTEyLDE5IEBAIHJlaW5kZXhfaW5k ZXgoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHByb2dyZXNzX3ZhbHMpOwog CX0KIAorCS8qIENoZWNrIGZvciB0aGUgYXV4aWxpYXJ5IGluZGV4IGZvciB0aGF0IGluZGV4LCBp dCBuZWVkcyB0byBiZSBkcm9wcGVkICovCisJanVua0F1eEluZGV4SWQgPSBnZXRfYXV4aWxpYXJ5 X2luZGV4KGluZGV4SWQpOworCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwl7CisJ CU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRp b25JZDsKKwkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4SWQ7CisJCW9iamVjdC5vYmpl Y3RTdWJJZCA9IDA7CisJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAor CQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCSBQRVJGT1JNX0RF TEVUSU9OX1FVSUVUTFkpOworCX0KKwogCS8qCiAJICogT3BlbiB0aGUgdGFyZ2V0IGluZGV4IHJl bGF0aW9uIGFuZCBnZXQgYW4gZXhjbHVzaXZlIGxvY2sgb24gaXQsIHRvCiAJICogZW5zdXJlIHRo YXQgbm8gb25lIGVsc2UgaXMgdG91Y2hpbmcgdGhpcyBwYXJ0aWN1bGFyIGluZGV4LgpAQCAtNDE4 NCw3ICs0MjEzLDggQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwg T2lkIHJlbGlkLCBpbnQgZmxhZ3MsCiB7CiAJUmVsYXRpb24JcmVsOwogCU9pZAkJCXRvYXN0X3Jl bGlkOwotCUxpc3QJICAgKmluZGV4SWRzOworCUxpc3QJICAgKmluZGV4SWRzLAorCQkJICAgKmF1 eEluZGV4SWRzID0gTklMOwogCWNoYXIJCXBlcnNpc3RlbmNlOwogCWJvb2wJCXJlc3VsdCA9IGZh bHNlOwogCUxpc3RDZWxsICAgKmluZGV4SWQ7CkBAIC00MjczLDEzICs0MzAzLDMwIEBAIHJlaW5k ZXhfcmVsYXRpb24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdz LAogCWVsc2UKIAkJcGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CiAK Kwlmb3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5kZXhPaWQgPSBsZmly c3Rfb2lkKGluZGV4SWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9p ZCk7CisKKwkJLyogQWxsIFNUSVIgaW5kZXhlcyBhcmUgYXV4aWxpYXJ5IGluZGV4ZXMgKi8KKwkJ aWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWlmIChmbGFncyAmIFJFSU5ERVhf UkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKKwkJCQlSZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9p ZCk7CisJCQlhdXhJbmRleElkcyA9IGxhcHBlbmRfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9pZCk7 CisJCX0KKwl9CisKIAkvKiBSZWluZGV4IGFsbCB0aGUgaW5kZXhlcy4gKi8KIAlpID0gMTsKIAlm b3JlYWNoKGluZGV4SWQsIGluZGV4SWRzKQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rf b2lkKGluZGV4SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3Bh Y2UoaW5kZXhPaWQpOwotCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7 CisKKwkJLyogQXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGdvaW5nIHRvIGJlIGRyb3BwZWQgZHVyaW5n IG1haW4gaW5kZXggcmVidWlsZCAqLworCQlpZiAobGlzdF9tZW1iZXJfb2lkKGF1eEluZGV4SWRz LCBpbmRleE9pZCkpCisJCQljb250aW51ZTsKIAogCQkvKgogCQkgKiBTa2lwIGFueSBpbnZhbGlk IGluZGV4ZXMgb24gYSBUT0FTVCB0YWJsZS4gIFRoZXNlIGNhbiBvbmx5IGJlCkBAIC00MzA1LDE4 ICs0MzUyLDYgQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lk IHJlbGlkLCBpbnQgZmxhZ3MsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChpbmRleEFtID09 IFNUSVJfQU1fT0lEKQotCQl7Ci0JCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVp bmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKLQkJCQkJCQlnZXRfbmFtZXNwYWNl X25hbWUoaW5kZXhOYW1lc3BhY2VJZCksCi0JCQkJCQkJZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSkp KTsKLQkJCWlmIChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKLQkJCQlS ZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9pZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXJl aW5kZXhfaW5kZXgoc3RtdCwgaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVYX1JFTF9DSEVDS19D T05TVFJBSU5UUyksCiAJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFtcyk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2RlcGVuZC5jCmluZGV4IDA3YzJkNDFjMTg5Li43ZTBlMjliZGI1YiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2RlcGVuZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKQEAgLTExMDgsNiArMTEwOSw2MyBAQCBnZXRfaW5k ZXhfY29uc3RyYWludChPaWQgaW5kZXhJZCkKIAlyZXR1cm4gY29uc3RyYWludElkOwogfQogCisv KgorICogZ2V0X2F1eGlsaWFyeV9pbmRleAorICoJCUdpdmVuIHRoZSBPSUQgb2YgYW4gaW5kZXgs IHJldHVybiB0aGUgT0lEIG9mIGl0cyBhdXhpbGlhcnkKKyAqCQlpbmRleCwgb3IgSW52YWxpZE9p ZCBpZiB0aGVyZSBpcyBubyBhdXhpbGlhcnkgaW5kZXguCisgKi8KK09pZAorZ2V0X2F1eGlsaWFy eV9pbmRleChPaWQgaW5kZXhJZCkKK3sKKwlPaWQJCQlhdXhpbGlhcnlJbmRleE9pZCA9IEludmFs aWRPaWQ7CisJUmVsYXRpb24JZGVwUmVsOworCVNjYW5LZXlEYXRhIGtleVszXTsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisKKwkvKiBTZWFyY2ggdGhlIGRlcGVuZGVuY3kg dGFibGUgZm9yIHRoZSBpbmRleCAqLworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51 bV9wZ19kZXBlbmRfcmVmY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lE RVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5 SW5pdCgma2V5WzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9iamlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGluZGV4SWQpKTsK KwlTY2FuS2V5SW5pdCgma2V5WzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZm9ianN1YmlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgw KSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kUmVmZXJlbmNl SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleSk7CisKKwl3aGlsZSAoSGVhcFR1 cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdf ZGVwZW5kIGRlcHJlYyA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJLyoK KwkJICogV2UgYXNzdW1lIEFVVE8gZGVwZW5kZW5jeSBvbiBpbmRleCB3aXRoIHJlbF9raW5kCisJ CSAqIG9mIFJFTEtJTkRfSU5ERVggYW5kIEFNIGVxIFNUSVIgaXMgdGhhdCB3ZSBhcmUgbG9va2lu ZyBmb3IuCisJCSAqLworCQlpZiAoZGVwcmVjLT5jbGFzc2lkID09IFJlbGF0aW9uUmVsYXRpb25J ZCAmJgorCQkJKGRlcHJlYy0+ZGVwdHlwZSA9PSBERVBFTkRFTkNZX0FVVE8pICYmCisJCQlnZXRf cmVsX3JlbGtpbmQoZGVwcmVjLT5vYmppZCkgPT0gUkVMS0lORF9JTkRFWCAmJgorCQkJZ2V0X3Jl bF9yZWxhbShkZXByZWMtPm9iamlkKSA9PSBTVElSX0FNX09JRCkKKwkJeworCQkJYXV4aWxpYXJ5 SW5kZXhPaWQgPSBkZXByZWMtPm9iamlkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBhdXhpbGlhcnlJbmRleE9pZDsKK30KKwogLyoKICAqIGdldF9pbmRleF9yZWZf Y29uc3RyYWludHMKICAqCQlHaXZlbiB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9J RCBvZiBhbGwgZm9yZWlnbiBrZXkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9h c3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCA4N2UwMWU3NGFk Ny4uYzUxMTU2M2YzZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3Rpbmcu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMwOCw2ICszMDgsNyBA QCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2Fz dEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfQW0gPSBCVFJFRV9BTV9PSUQ7CiAJaW5kZXhJbmZv LT5paV9BbUNhY2hlID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0F1eGlsaWFyeSA9IGZhbHNlOwor CWluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IEludmFsaWRPaWQ7CiAJaW5kZXhJ bmZvLT5paV9Db250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAljb2xsYXRpb25JZHNb MF0gPSBJbnZhbGlkT2lkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCBmNTgzMjM5ZTA5 MS4uNTk5ZTMzNzU4MzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0yNDYsNyArMjQ2 LDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCWluZGV4SW5mbyA9IG1ha2VJ bmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1iZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJ ICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNlLCBmYWxzZSwKIAkJCQkJCQkgIGZhbHNl LCBmYWxzZSwgYW1zdW1tYXJpemluZywKLQkJCQkJCQkgIGlzV2l0aG91dE92ZXJsYXBzLCBpc2F1 eGlsaWFyeSk7CisJCQkJCQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnksIEludmFs aWRPaWQpOwogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMp OwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7 CiAJb3BjbGFzc0lkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBA IC05NDYsNyArOTQ2LDggQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJ CSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJpemluZywKIAkJCQkJCQkgIHN0bXQt Pmlzd2l0aG91dG92ZXJsYXBzLAotCQkJCQkJCSAgZmFsc2UpOworCQkJCQkJCSAgZmFsc2UsCisJ CQkJCQkJICBJbnZhbGlkT2lkKTsKIAogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBudW1i ZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJl ck9mQXR0cmlidXRlcyk7CkBAIC0zNzA4LDYgKzM3MDksNyBAQCBSZWluZGV4UmVsYXRpb25Db25j dXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3Qg UmVpbgogCXsKIAkJT2lkCQkJaW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJ anVua0F1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJCWFtSWQ7CiAJCWJvb2wJ CXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8KQEAgLTQwNTcsNiArNDA1 OSw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lk eDsKIAkJT2lkCQkJbmV3SW5kZXhJZDsKIAkJT2lkCQkJYXV4SW5kZXhJZDsKKwkJT2lkCQkJanVu a0F1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwogCQlSZWxhdGlvbgloZWFwUmVsOwog CQlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTQwNjQsNiArNDA2Nyw3IEBAIFJlaW5kZXhSZWxhdGlv bkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBj b25zdCBSZWluCiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwogCQlSZWxhdGlvbgluZXdJbmRleFJl bDsKIAkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CisJCVJlbGF0aW9uCWp1bmtBdXhJbmRleFJlbDsK IAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwogCQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTQx MzcsMTIgKzQxNDEsMTcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJCSAg IHRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCQkJCSAgIGF1eENvbmN1cnJlbnROYW1lKTsKIAorCQkv KiBTZWFyY2ggZm9yIGF1eGlsaWFyeSBpbmRleCBmb3IgcmVpbmRleGVkIGluZGV4LCB0byBkcm9w IGl0ICovCisJCWp1bmtBdXhJbmRleElkID0gZ2V0X2F1eGlsaWFyeV9pbmRleChpZHgtPmluZGV4 SWQpOworCiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxhdGlvbiBvZiB0aGUgbmV3IGluZGV4 LCBhIHNlc3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNvIG5lZWRlZCBvbiBpdC4KIAkJICov CiAJCW5ld0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwogCQlhdXhJbmRleFJlbCA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQor CQkJanVua0F1eEluZGV4UmVsID0gaW5kZXhfb3BlbihqdW5rQXV4SW5kZXhJZCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBTYXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5k IGxvY2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDE1Miw2ICs0MTYxLDcgQEAgUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25P aWQsIGNvbnN0IFJlaW4KIAkJbmV3aWR4ID0gcGFsbG9jX29iamVjdChSZWluZGV4SW5kZXhJbmZv KTsKIAkJbmV3aWR4LT5pbmRleElkID0gbmV3SW5kZXhJZDsKIAkJbmV3aWR4LT5hdXhJbmRleElk ID0gYXV4SW5kZXhJZDsKKwkJbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCA9IGp1bmtBdXhJbmRleElk OwogCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFibGVJZCA9IGlkeC0+ dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlkOwpAQCAtNDE3MywxMCArNDE4Mywx OCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQs IE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlsb2NrcmVsaWQgPSBwYWxsb2Nfb2JqZWN0 KExvY2tSZWxJZCk7CiAJCSpsb2NrcmVsaWQgPSBhdXhJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9j a1JlbElkOwogCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVs aWQpOworCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhJZCkpCisJCXsKKwkJCWxvY2tyZWxp ZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJCSpsb2NrcmVsaWQgPSBqdW5rQXV4SW5k ZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5k KHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCX0KIAogCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CiAKIAkJaW5kZXhfY2xvc2UoaW5kZXhSZWwsIE5vTG9jayk7CisJCWlm IChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X2Nsb3NlKGp1bmtBdXhJbmRl eFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWwsIE5vTG9jayk7CiAJCWlu ZGV4X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwogCkBAIC00MzY1LDcgKzQzODMsOCBAQCBS ZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCBhbGwgdGFy Z2V0IGluZGV4ZXMgYXJlIG1hcmtlZCBhcyAicmVhZHktdG8taW5zZXJ0Ii4gU28sCi0JICogd2Ug YXJlIGZyZWUgdG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGluZyBhdXhpbGlhcnkgaW5kZXhlcy4K KwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFyeSBp bmRleGVzIC0gaW5jbHVkaW5nCisJICoganVuayBpbmRleGVzIGRldGVjdGVkIGVhcmxpZXIuCiAJ ICovCiAJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewpAQCAtNDM4OCw2ICs0NDA3LDkgQEAg UmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJICovCiAJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOwogCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5h dXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKKwkJLyogRW5zdXJlIHRoZSBqdW5r IGluZGV4IGlzIG1hcmtlZCBhcyBub24tcmVhZHkgKi8KKwkJaWYgKE9pZElzVmFsaWQobmV3aWR4 LT5qdW5rQXV4SW5kZXhJZCkpCisJCQlpbmRleF9zZXRfc3RhdGVfZmxhZ3MobmV3aWR4LT5qdW5r QXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CiAJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00NjA3LDYgKzQ2MjksOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKIAogCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQobmV3aWR4 LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCQlpZiAoT2lkSXNWYWxpZChuZXdpZHgt Pmp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgt PnRhYmxlSWQsIG5ld2lkeC0+anVua0F1eEluZGV4SWQpOwogCiAJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CiAJfQpAQCAtNDY1OCw2ICs0NjgyLDEzIEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRs eShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJ CQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOwogCiAJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iamVjdCwgb2JqZWN0cyk7CisKKwkJCWlmIChPaWRJc1ZhbGlkKGlkeC0+anVua0F1eEluZGV4 SWQpKQorCQkJeworCQkJCW9iamVjdC5vYmplY3RJZCA9IGlkeC0+anVua0F1eEluZGV4SWQ7CisJ CQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKwkJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iamVjdCwgb2JqZWN0cyk7CisJCQl9CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwppbmRleCA4NTI0MmRjYzI0NS4uMTYyMmRmYjA1Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC0xNTQ4LDYgKzE1NDgsOCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQgKmRy b3ApCiAJTGlzdENlbGwgICAqY2VsbDsKIAlpbnQJCQlmbGFncyA9IDA7CiAJTE9DS01PREUJbG9j a21vZGUgPSBBY2Nlc3NFeGNsdXNpdmVMb2NrOworCU1lbW9yeUNvbnRleHQgcHJpdmF0ZV9jb250 ZXh0LAorCQkJCSAgb2xkY29udGV4dDsKIAogCS8qIERST1AgQ09OQ1VSUkVOVExZIHVzZXMgYSB3 ZWFrZXIgbG9jaywgYW5kIGhhcyBzb21lIHJlc3RyaWN0aW9ucyAqLwogCWlmIChkcm9wLT5jb25j dXJyZW50KQpAQCAtMTYwOCw5ICsxNjEwLDIwIEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAq ZHJvcCkKIAkJCXJlbGtpbmQgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCQkJYnJl YWs7CiAJfQorCS8qCisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIHN1cnZp dmUgZm9yY2VkIHRyYW5zYWN0aW9uIGNvbW1pdHMgd2UKKwkgKiBtYXkgbmVlZCB0byBkbyBiZWxv dyAoaW4gY2FzZSBvZiBjb25jdXJyZW50IGluZGV4IGRyb3ApLgorCSAqIFNpbmNlIGl0IGlzIGEg Y2hpbGQgb2YgUG9ydGFsQ29udGV4dCwgaXQgd2lsbCBnbyBhd2F5IGV2ZW50dWFsbHkgZXZlbiBp ZgorCSAqIHdlIHN1ZmZlciBhbiBlcnJvcjsgdGhlcmUncyBubyBuZWVkIGZvciBzcGVjaWFsIGFi b3J0IGNsZWFudXAgbG9naWMuCisJICovCisJcHJpdmF0ZV9jb250ZXh0ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKFBvcnRhbENvbnRleHQsCisJCQkJCQkJCQkJCSJSZW1vdmVSZWxhdGlvbnMiLAor CQkJCQkJCQkJCQlBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CiAKKwlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAJLyogTG9jayBhbmQgdmFsaWRhdGUg ZWFjaCByZWxhdGlvbjsgYnVpbGQgYSBsaXN0IG9mIG9iamVjdCBhZGRyZXNzZXMgKi8KIAlvYmpl Y3RzID0gbmV3X29iamVjdF9hZGRyZXNzZXMoKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CiAKIAlmb3JlYWNoKGNlbGwsIGRyb3AtPm9iamVjdHMpCiAJewpAQCAtMTY2Miw2 ICsxNjc1LDM4IEBAIFJlbW92ZVJlbGF0aW9ucyhEcm9wU3RtdCAqZHJvcCkKIAkJCWZsYWdzIHw9 IFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZOwogCQl9CiAKKwkJLyoKKwkJICogQ29uY3Vy cmVudCBpbmRleCBkcm9wIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbi4g QnV0IGluCisJCSAqIGNhc2Ugd2UgaGF2ZSBqdW5rIGF1eGlsaWFyeSBpbmRleCAtIHdlIHdhbnQg dG8gZHJvcCBpdCB0b28gKGFuZCBhbHNvCisJCSAqIGluIGEgY29uY3VycmVudCB3YXkpLiBJbiB0 aGlzIGNhc2UgcGVyZm9ybSBzaWxlbnQgaW50ZXJuYWwgZGVsZXRpb24KKwkJICogb2YgYXV4aWxp YXJ5IGluZGV4LCBhbmQgcmVzdG9yZSB0cmFuc2FjdGlvbiBzdGF0ZS4gSXQgaXMgZmluZSB0byBk byBpdAorCQkgKiBpbiB0aGUgbG9vcCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgc2luZ2xlIGVsZW1l bnQgaW4gZHJvcC0+b2JqZWN0cy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBQRVJGT1JNX0RFTEVU SU9OX0NPTkNVUlJFTlRMWSkgIT0gMCAmJgorCQkJc3RhdGUuYWN0dWFsX3JlbGtpbmQgPT0gUkVM S0lORF9JTkRFWCkKKwkJeworCQkJT2lkIGp1bmtBdXhJbmRleE9pZCA9IGdldF9hdXhpbGlhcnlf aW5kZXgocmVsT2lkKTsKKwkJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleE9pZCkpCisJCQl7 CisJCQkJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CisJCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CisJCQkJb2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4T2lkOworCQkJ CW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJcGVyZm9ybURlbGV0aW9uKCZvYmplY3QsIERS T1BfUkVTVFJJQ1QsCisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZIHwK KwkJCQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCQkJIFBFUkZP Uk1fREVMRVRJT05fUVVJRVRMWSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ CQkJTWVtb3J5Q29udGV4dERlbGV0ZShwcml2YXRlX2NvbnRleHQpOworCisJCQkJLyogQW5kIHN0 YXJ0IGFnYWluIC0gbm93IHdpdGhvdXQgYXV4aWxpYXJ5IGluZGV4LiAqLworCQkJCVN0YXJ0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisJCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CisJCQkJUmVtb3ZlUmVsYXRpb25zKGRyb3ApOworCQkJCXJldHVybjsKKwkJ CX0KKwkJfQorCiAJCS8qCiAJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCBjYW5ub3QgYmUgdXNl ZCB3aXRoIHBhcnRpdGlvbmVkIGluZGV4ZXMsCiAJCSAqIGVpdGhlci4KQEAgLTE2OTAsMTIgKzE3 MzUsMTcgQEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQogCQlvYmoub2JqZWN0SWQg PSByZWxPaWQ7CiAJCW9iai5vYmplY3RTdWJJZCA9IDA7CiAKKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2Fk ZHJlc3MoJm9iaiwgb2JqZWN0cyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIAl9CiAKKwkvKiBEZWxldGlvbiBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjb21taXRzLCBzbywg c3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCXBlcmZvcm1NdWx0aXBsZURlbGV0aW9ucyhvYmpl Y3RzLCBkcm9wLT5iZWhhdmlvciwgZmxhZ3MpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKIAotCWZyZWVfb2JqZWN0X2FkZHJlc3NlcyhvYmplY3RzKTsKKwlNZW1vcnlDb250 ZXh0RGVsZXRlKHByaXZhdGVfY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmlu ZGV4IDhjYjIyMzFhN2E4Li5jY2MxMjk0ZTczMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgz NCw3ICs4MzQsNyBAQCBJbmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGlu dCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAq cHJlZGljYXRlcywgYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBi b29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9v bCB3aXRob3V0b3ZlcmxhcHMsIGJvb2wgYXV4aWxpYXJ5KQorCQkJICBib29sIHdpdGhvdXRvdmVy bGFwcywgYm9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKQogewogCUlu ZGV4SW5mbyAgKm4gPSBtYWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTEsNiArODUxLDcgQEAg bWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBM aXN0ICpleHByZXNzaW9ucywKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4t PmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKIAluLT5paV9BdXhpbGlhcnkg PSBhdXhpbGlhcnk7CisJbi0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IGF1eGlsaWFyeV9mb3Jf aW5kZXhfaWQ7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1r ZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09 IG51bWF0dHJzKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3ku aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDJmM2MxZWFlM2M3Li42 YWUyMTBjNTg0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTE5Myw2ICsxOTMsNyBA QCBleHRlcm4gTGlzdCAqZ2V0T3duZWRTZXF1ZW5jZXMoT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJ Z2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29s IG1pc3Npbmdfb2spOwogCiBleHRlcm4gT2lkCWdldF9pbmRleF9jb25zdHJhaW50KE9pZCBpbmRl eElkKTsKK2V4dGVybiBPaWQJZ2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCk7CiAKIGV4 dGVybiBMaXN0ICpnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAppbmRleCA2Y2U5MTU0YjI4ZC4uZTgyMzZlZWRlMDAgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCkBAIC0yMjAsNiArMjIwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJ aW50CQkJaWlfUGFyYWxsZWxXb3JrZXJzOwogCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVu dCBpbmRleCBidWlsZD8gKi8KIAlib29sCQlpaV9BdXhpbGlhcnk7CisJLyogaWYgY3JlYXRpbmcg YW4gYXV4aWxpYXJ5IGluZGV4LCB0aGUgT0lEIG9mIHRoZSBtYWluIGluZGV4OyBvdGhlcndpc2Ug SW52YWxpZE9pZC4gKi8KKwlPaWQJCQlpaV9BdXhpbGlhcnlGb3JJbmRleElkOwogCS8qIE9pZCBv ZiBpbmRleCBBTSAqLwogCU9pZAkJCWlpX0FtOwogCS8qIHByaXZhdGUgY2FjaGUgYXJlYSBmb3Ig aW5kZXggQU0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggNmNmNDVhNjhjYmUuLjkyZGZmOTBj M2RlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTAwLDcgKzEwMCw3IEBAIGV4dGVybiBJbmRl eEluZm8gKm1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBh bW9pZCwKIAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJ CQkJCQlib29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJp emluZywgYm9vbCB3aXRob3V0b3ZlcmxhcHMsCi0JCQkJCQkJCWJvb2wgYXV4aWxpYXJ5KTsKKwkJ CQkJCQkJYm9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKTsKIAogZXh0 ZXJuIE5vZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbik7CiBleHRl cm4gRGVmRWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9kZSAqYXJnLCBpbnQgbG9jYXRp b24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGQx NzIzZjQ3ZTg5Li4yZDZhYmIxNWE4OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3Jl YXRlX2luZGV4Lm91dApAQCAtMzI3OSwyMCArMzI3OSwxMDkgQEAgRVJST1I6ICByZWluZGV4IG9m IGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIFJF SU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICBy ZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBw b3J0ZWQKIC0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhl IGluZGV4IGNhbiBiZWNvbWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0 IFdIRVJFIGMxID0gMTsKLUVSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRv ZXMgbm90IGV4aXN0Ci1MSU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hF UkUgYzEgPSAxOwotICAgICAgICAgICAgICAgICAgICBeCitERUxFVEUgRlJPTSBhdXhfaW5kZXhf dGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBh bmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBh dXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUg InB1YmxpYy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCitJbmRleGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisK K0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2Fpbgor SU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGlu dmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9p bmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVh dGUgdW5pcXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBp cyBkdXBsaWNhdGVkLgorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5 LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90 YWI1IFdIRVJFIGMxID0gMTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1S RUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OwotRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVu aXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCi1ERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVw bGljYXRlZC4KLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgK IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OwogV0FSTklORzogIHNr aXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2Igog SElOVDogIFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVggSU5ERVguCiBXQVJOSU5HOiAgc2tpcHBp bmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1 eCIKIE5PVElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBj YW4gYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseQorLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4 aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5k ZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZh dWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t CisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgor ICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElOVkFMSUQKKyAgICAiYXV4 X2luZGV4X2luZDZfY2NhdXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0tIFNob3VsZCBiZSBza2lw cGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90 YWI1OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFi NQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBU eXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwg ICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBV TklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2Vy dCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEp LCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRF WCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VS Uk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVU QUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2 aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVM RVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hvdWxkIGJlIHNraXBw ZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZ IGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBh dXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1Igor IENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9p bmRleF9pbmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFi NSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRF IFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3Rh YjUgKGMxKTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRl eF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1h a2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21l IHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gRHJv cCBtYWluIGluZGV4IENPTkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2lu ZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBh dXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1Igor IENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKworRFJPUCBJTkRFWCBhdXhfaW5k ZXhfaW5kNjsKK0VSUk9SOiAgaW5kZXggImF1eF9pbmRleF9pbmQ2IiBkb2VzIG5vdCBleGlzdAor LS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZB TFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAo YzEpOworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2lu ZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIERyb3AgbWFpbiBp bmRleAorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkg aW5kZXggZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJw dWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51 bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorCiBEUk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5k ZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9u cyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IGMyYzFiMDMxNTI3Li5mZDk2ZDgwYWJi YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzQ0LDExICsxMzQ0 LDYyIEBAIFJFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBDb25jdXJyZW50 bHkgYWxzbwogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7 CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRl eCBjYW4gYmVjb21lIHZhbGlkLgotREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVS RSBjMSA9IDE7CitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBT aG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRF WCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQg YXV4X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBk dXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAo MSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBD T05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRo aXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBi ZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CiAt LSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAotUkVJTkRFWCBUQUJMRSBhdXhfaW5k ZXhfdGFiNTsKLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgK IFJFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBzdXJl IGl0IGlzIHN0aWxsIGV4aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKy0tIFNob3VsZCBiZSBza2lw cGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90 YWI1OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFi NQorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdh aW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0 ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUg cHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4K K0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBz a2lwcGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAor XGQgYXV4X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2Vy dCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEp LCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRF WCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0t IFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNh biBiZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7 CistLSBEcm9wIG1haW4gaW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJFTlRM WSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0 b28KK1xkIGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJ bnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVT ICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7 CistLSBEcm9wIG1haW4gaW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtl IHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorCiBE Uk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogCiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVz IHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKLS0gCjIuNDMuMAoK --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v30-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nchf0 RnJvbSAxZjAwODNiYzliN2ExYjk0NGRmZjk4ZjQyNWVmNzU0MjYyYWRhYTI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDcvN10gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggZG9lcyBub3QgZGVwZW5k IG9uIHNpbmdsZSByZWZlcmVuY2Ugc25hcHNob3QgYW55bW9yZS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgIHwgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMgICAgfCAxMiArKystLQogc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICB8IDUxICsrKysrKysrKysrKysrLS0tLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgfCA1MCArKystLS0tLS0t LS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAyNSAr KysrLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAgICAgICAgICAgfCAxNSAr KysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCAgICAgICAgICAgICAgfCAgMiArLQog OCBmaWxlcyBjaGFuZ2VkLCAxNDYgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVCBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKaW5kZXggYjFjNzk3NTE3ZWUuLjM4MmZlMTcyM2E1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKQEAgLTQwMSwxMiArNDAxLDEyIEBAIGxpdmUg dHVwbGUuCiBXZSBtYXJrIHRoZSBpbmRleCBvcGVuIGZvciBpbnNlcnRzIChidXQgc3RpbGwgbm90 IHJlYWR5IGZvciByZWFkcykgdGhlbgogd2UgYWdhaW4gd2FpdCBmb3IgdHJhbnNhY3Rpb25zIHdo aWNoIGhhdmUgdGhlIHRhYmxlIG9wZW4uICBUaGVuIHZhbGlkYXRlCiB0aGUgaW5kZXguICBUaGlz IHNlYXJjaGVzIGZvciB0dXBsZXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCBpbiBhdXhpbGlhcnkK LWluZGV4LCBhbmQgaW5zZXJ0cyBhbnkgbWlzc2luZyBvbmVzIGlmIHRoZXkgYXJlIHZpc2libGUg dG8gcmVmZXJlbmNlIHNuYXBzaG90LgoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9u ZXMgaWYgdGhleSBhcmUgdmlzaWJsZSB0byBhIGZyZXNoIHNuYXBzaG90LgogQWdhaW4sIHRoZSBp bmRleCBlbnRyaWVzIGhhdmUgdG8gaGF2ZSBUSURzIGVxdWFsIHRvIEhPVC1jaGFpbiByb290IFRJ RHMsIGJ1dAogdGhlIHZhbHVlIHRvIGJlIGluc2VydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgbGl2 ZSB0dXBsZS4KIAogVGhlbiB3ZSB3YWl0IHVudGlsIGV2ZXJ5IHRyYW5zYWN0aW9uIHRoYXQgY291 bGQgaGF2ZSBhIHNuYXBzaG90IG9sZGVyIHRoYW4KLXRoZSBzZWNvbmQgcmVmZXJlbmNlIHNuYXBz aG90IGlzIGZpbmlzaGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgbm9ib2R5IGlzCit0aGUgbGF0ZXN0 IHVzZWQgc25hcHNob3QgaXMgZmluaXNoZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMK IGFsaXZlIGFueSBsb25nZXIgd2hvIGNvdWxkIG5lZWQgdG8gc2VlIGFueSB0dXBsZXMgdGhhdCBt aWdodCBiZSBtaXNzaW5nCiBmcm9tIHRoZSBpbmRleCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0 IG5vIG9uZSBjYW4gc2VlIGFueSBpbmNvbnNpc3RlbnQKIHJvd3MgaW4gYSBicm9rZW4gSE9UIGNo YWluICh0aGUgZmlyc3QgY29uZGl0aW9uIGlzIHN0cm9uZ2VyIHRoYW4gdGhlCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCA0YWQ4YTJjMGY4MS4uMGJlY2JjYzVi ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjAxMiwy MyArMjAxMiwyNiBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0 KAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgVHJhbnNhY3Rpb25J ZAogaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ CQkJICAgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJ bmZvLAotCQkJCQkJICAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkgICBWYWxpZGF0ZUluZGV4 U3RhdGUgKnN0YXRlLAogCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICphdXhTdGF0ZSkKIHsK KwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKKwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tF WVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAKKwlTbmFwc2hvdAkJc25hcHNo b3Q7CiAJVHVwbGVUYWJsZVNsb3QgICpzbG90OwogCUVTdGF0ZQkJCSplc3RhdGU7CiAJRXhwckNv bnRleHQJCSplY29udGV4dDsKIAlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRB Y2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwogCiAJaW50CQkJCW51bV90b19jaGVjazsKKwlC bG9ja051bWJlcgkJcGFnZV9yZWFkX2NvdW50ZXIgPSAxOyAvKiBzZXQgdG8gMSB0byBza2lwIHNu YXBzaG90IHJlc2V0IGF0IHN0YXJ0ICovCiAJVHVwbGVzdG9yZXN0YXRlICp0dXBsZXNfZm9yX2No ZWNrOwogCVZhbGlkYXRlSW5kZXhTY2FuU3RhdGUgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOwogCkBA IC0yMDM5LDYgKzIwNDIsOCBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAJLyogVXNlIDEwJSBvZiBtZW1vcnkgZm9yIHR1cGxlIHN0b3JlLiAqLwog CWludAkJc3RvcmVfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAK KwlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwogCS8qCiAJ ICogRW5jb2RlIFRJRHMgYXMgaW50OCB2YWx1ZXMgZm9yIHRoZSBzb3J0LCByYXRoZXIgdGhhbiBk aXJlY3RseSBzb3J0aW5nCiAJICogaXRlbSBwb2ludGVycy4gIFRoaXMgY2FuIGJlIHNpZ25pZmlj YW50bHkgZmFzdGVyLCBwcmltYXJpbHkgYmVjYXVzZSBUSUQKQEAgLTIwNDcsNiArMjA1MiwxMiBA QCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICov CiAJdHVwbGVzX2Zvcl9jaGVjayA9ICB0dXBsZXN0b3JlX2JlZ2luX2RhdHVtKElOVDhPSUQsIGZh bHNlLCBmYWxzZSwgc3RvcmVfd29ya19tZW1fcGFydCk7CiAKKwlQb3BBY3RpdmVTbmFwc2hvdCgp OworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKworCUFzc2VydCghSGF2ZVJlZ2lzdGVy ZWRPckFjdGl2ZVNuYXBzaG90KCkpOworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQ cm9jLT54bWluKSk7CisKIAkvKgogCSAqIHNhbml0eSBjaGVja3MKIAkgKi8KQEAgLTIwNjIsNiAr MjA3MywyOSBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRp b24sCiAKIAlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CiAK KwkvKgorCSAqIE5vdyB0YWtlIHRoZSBmaXJzdCBzbmFwc2hvdCB0aGF0IHdpbGwgYmUgdXNlZCB0 byBmaWx0ZXIgY2FuZGlkYXRlCisJICogdHVwbGVzLiBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBp dCBieSBuZXdlciBzbmFwc2hvdCBldmVyeSBzbyBvZnRlbgorCSAqIHRvIHByb3BhZ2F0ZSBob3Jp em9uLgorCSAqCisJICogQmV3YXJlISAgVGhlcmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGlu IHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNhY3Rpb24KKwkgKiBhcyBpbi1wcm9ncmVzcyB0aGF0 IG91ciB0ZW1wb3Jhcnkgc25hcHNob3QgdHJlYXRzIGFzIGNvbW1pdHRlZC4KKwkgKgorCSAqIElm IHN1Y2ggYSByZWNlbnRseS1jb21taXR0ZWQgdHJhbnNhY3Rpb24gZGVsZXRlZCB0dXBsZXMgaW4g dGhlIHRhYmxlLAorCSAqIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHll dCB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2gKKwkgKiBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBz dGlsbC1pbi1wcm9ncmVzcyB3aWxsIGV4cGVjdCBzdWNoIHR1cGxlcyB0bworCSAqIGJlIHRoZXJl IG9uY2Ugd2UgbWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCisJICoKKwkgKiBXZSBzb2x2ZSB0aGlz IGJ5IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdlcmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9y ZQorCSAqIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLCBmb3IgdGhhdCByZWFzb24gbGltaXRY bWluIGlzIHN1cHBvcnRlZC4KKwkgKgorCSAqIFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRv IHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25zIGluIGluZGV4ZXMgbWF5CisJICogbmVlZCBhIHNu YXBzaG90LgorCSAqLworCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFw c2hvdCgpKTsKKwlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCWxpbWl0WG1pbiA9IHNu YXBzaG90LT54bWluOworCiAJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250 ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xl VHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihoZWFwUmVsYXRpb24pLApAQCAtMjA5NSw2 ICsyMTI5LDcgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCiAJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCWJsb2NrX251 bWJlciA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCXBhZ2VfcmVhZF9jb3VudGVyKys7 CiAKIAkJaSA9IDA7CiAJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zmc2V0 TnVtYmVyKQpAQCAtMjE1Miw2ICsyMTg3LDIwIEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJfQogCiAJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKyNk ZWZpbmUgVkFMSURBVEVfSU5ERVhfUkVTRVRfU05BUFNIT1RfRUFDSF9OX1BBR0UgNDA5NgorCQlp ZiAocGFnZV9yZWFkX2NvdW50ZXIgJSBWQUxJREFURV9JTkRFWF9SRVNFVF9TTkFQU0hPVF9FQUNI X05fUEFHRSA9PSAwKQorCQl7CisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQkJVW5yZWdpc3Rl clNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8qIHRvIG1ha2Ugc3VyZSB3ZSBwcm9wYWdhdGUgeG1p biAqLworCQkJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCQkJQXNzZXJ0KCFUcmFuc2Fj dGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKworCQkJc25hcHNob3QgPSBSZWdpc3RlclNu YXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBz aG90KTsKKwkJCS8qIHhtaW4gc2hvdWxkIG5vdCBnbyBiYWNrd2FyZHMsIGJ1dCBqdXN0IGluIGNh c2UgKi8KKwkJCWxpbWl0WG1pbiA9IFRyYW5zYWN0aW9uSWROZXdlcihsaW1pdFhtaW4sIHNuYXBz aG90LT54bWluKTsKKwkJfQogCX0KIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xv dCk7CkBAIC0yMTYxLDExICsyMjEwLDIzIEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlyZWFkX3N0cmVhbV9lbmQocmVhZF9zdHJlYW0pOwogCXR1 cGxlc3RvcmVfZW5kKHR1cGxlc19mb3JfY2hlY2spOwogCisJLyoKKwkgKiBEcm9wIHRoZSBsYXRl c3Qgc25hcHNob3QuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdhaXRpbmcgb3V0IG90aGVyCisJ ICogc25hcHNob3QgaG9sZGVycywgZWxzZSB3ZSB3aWxsIGRlYWRsb2NrIGFnYWluc3Qgb3RoZXIg cHJvY2Vzc2VzIGFsc28KKwkgKiBkb2luZyBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLCB3aGlj aCB3b3VsZCBzZWUgb3VyIHNuYXBzaG90IGFzIG9uZQorCSAqIHRoZXkgbXVzdCB3YWl0IGZvci4K KwkgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hv dCk7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2VydChNeVByb2MtPnhtaW4g PT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCUZyZWVBY2Nlc3NTdHJhdGVneShic3RyYXRlZ3kp OwogCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVlbiBwb2ludGluZyB0byB0aGUgbm93LWdvbmUgZXN0 YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOwogCWluZGV4SW5m by0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxMOworCisJcmV0dXJuIGxpbWl0WG1pbjsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCmluZGV4IDZiNzExN2I1NmIyLi43 ZWE2MGMxOGU2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1 dW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCkBAIC0xOTEs MTQgKzE5MSwxNiBAQCB2YWN1dW1MZWFmUGFnZShzcGdCdWxrRGVsZXRlU3RhdGUgKmJkcywgUmVs YXRpb24gaW5kZXgsIEJ1ZmZlciBidWZmZXIsCiAJCQkgKiBBZGQgdGFyZ2V0IFRJRCB0byBwZW5k aW5nIGxpc3QgaWYgdGhlIHJlZGlyZWN0aW9uIGNvdWxkIGhhdmUKIAkJCSAqIGhhcHBlbmVkIHNp bmNlIFZBQ1VVTSBzdGFydGVkLiAgKElmIHhpZCBpcyBpbnZhbGlkLCBhc3N1bWUgaXQKIAkJCSAq IG11c3QgaGF2ZSBoYXBwZW5lZCBiZWZvcmUgVkFDVVVNIHN0YXJ0ZWQsIHNpbmNlIFJFSU5ERVgK LQkJCSAqIENPTkNVUlJFTlRMWSBsb2NrcyBvdXQgVkFDVVVNLikKKwkJCSAqIENPTkNVUlJFTlRM WSBsb2NrcyBvdXQgVkFDVVVNLCBpZiBteVhtaW4gaXMgaW52YWxpZCBpdCBpcworCQkJICogdmFs aWRhdGlvbiBzY2FuLikKIAkJCSAqCiAJCQkgKiBOb3RlOiB3ZSBjb3VsZCBtYWtlIGEgdGlnaHRl ciB0ZXN0IGJ5IHNlZWluZyBpZiB0aGUgeGlkIGlzCiAJCQkgKiAicnVubmluZyIgYWNjb3JkaW5n IHRvIHRoZSBhY3RpdmUgc25hcHNob3Q7IGJ1dCBzbmFwbWdyLmMKIAkJCSAqIGRvZXNuJ3QgY3Vy cmVudGx5IGV4cG9ydCBhIHN1aXRhYmxlIEFQSSwgYW5kIGl0J3Mgbm90IGVudGlyZWx5CiAJCQkg KiBjbGVhciB0aGF0IGEgdGlnaHRlciB0ZXN0IGlzIHdvcnRoIHRoZSBjeWNsZXMgYW55d2F5Lgog CQkJICovCi0JCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhkdC0+eGlkLCBiZHMt Pm15WG1pbikpCisJCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGJkcy0+bXlYbWluKSB8fAor CQkJCQlUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGR0LT54aWQsIGJkcy0+bXlYbWluKSkK IAkJCQlzcGdBZGRQZW5kaW5nVElEKGJkcywgJmR0LT5wb2ludGVyKTsKIAkJfQogCQllbHNlCkBA IC04MDgsNyArODEwLDYgQEAgc3BndmFjdXVtc2NhbihzcGdCdWxrRGVsZXRlU3RhdGUgKmJkcykK IAkvKiBGaW5pc2ggc2V0dGluZyB1cCBzcGdCdWxrRGVsZXRlU3RhdGUgKi8KIAlpbml0U3BHaXN0 U3RhdGUoJmJkcy0+c3Bnc3RhdGUsIGluZGV4KTsKIAliZHMtPnBlbmRpbmdMaXN0ID0gTlVMTDsK LQliZHMtPm15WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90KCktPnhtaW47CiAJYmRzLT5sYXN0Rmls bGVkQmxvY2sgPSBTUEdJU1RfTEFTVF9GSVhFRF9CTEtOTzsKIAogCS8qCkBAIC05NTksNiArOTYw LDEwIEBAIHNwZ2J1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxl dGVSZXN1bHQgKnN0YXRzLAogCWJkcy5zdGF0cyA9IHN0YXRzOwogCWJkcy5jYWxsYmFjayA9IGNh bGxiYWNrOwogCWJkcy5jYWxsYmFja19zdGF0ZSA9IGNhbGxiYWNrX3N0YXRlOworCWlmIChpbmZv LT52YWxpZGF0ZV9pbmRleCkKKwkJYmRzLm15WG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwor CWVsc2UKKwkJYmRzLm15WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90KCktPnhtaW47CiAKIAlzcGd2 YWN1dW1zY2FuKCZiZHMpOwogCkBAIC05OTksNiArMTAwNCw3IEBAIHNwZ3ZhY3V1bWNsZWFudXAo SW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzKQogCQli ZHMuc3RhdHMgPSBzdGF0czsKIAkJYmRzLmNhbGxiYWNrID0gZHVtbXlfY2FsbGJhY2s7CiAJCWJk cy5jYWxsYmFja19zdGF0ZSA9IE5VTEw7CisJCWJkcy5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hv dCgpLT54bWluOwogCiAJCXNwZ3ZhY3V1bXNjYW4oJmJkcyk7CiAJfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmlu ZGV4IGVkNTYzZGE1YTMyLi4xNjk1OGJjOGU5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNjgsNiAr NjgsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCkBAIC0zNTExLDggKzM1MTIsOSBA QCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIGluc2VydCB0 aGVpciBuZXcgdHVwbGVzIGludG8gaXQuIEF0IHRoZSBzYW1lIG1vbWVudCB3ZSBjbGVhciAiaW5k aXNyZWFkeSIgZm9yCiAgKiBhdXhpbGlhcnkgaW5kZXgsIHNpbmNlIGl0IGlzIG5vIG1vcmUgcmVx dWlyZWQgdG8gYmUgdXBkYXRlZC4KICAqCi0gKiBXZSB0aGVuIHRha2UgYSBuZXcgcmVmZXJlbmNl IHNuYXBzaG90LCBhbnkgdHVwbGVzIHRoYXQgYXJlIHZhbGlkIGFjY29yZGluZwotICogdG8gdGhp cyBzbmFwLCBidXQgYXJlIG5vdCBpbiB0aGUgaW5kZXgsIG11c3QgYmUgYWRkZWQgdG8gdGhlIGlu ZGV4LgorICogV2UgdGhlbiB0YWtlIGEgbmV3IHNuYXBzaG90LCBhbnkgdHVwbGVzIHRoYXQgYXJl IHZhbGlkIGFjY29yZGluZworICogdG8gdGhpcyBzbmFwLCBidXQgYXJlIG5vdCBpbiB0aGUgaW5k ZXgsIG11c3QgYmUgYWRkZWQgdG8gdGhlIGluZGV4LiBJbgorICogb3JkZXIgdG8gcHJvcGFnYXRl IHhtaW4gd2UgcmVzZXQgdGhhdCBzbmFwc2hvdCBldmVyeSBzbyBvZnRlbi4KICAqIChBbnkgdHVw bGVzIGNvbW1pdHRlZCBsaXZlIGFmdGVyIHRoZSBzbmFwIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0 aGUKICAqIGluZGV4IGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHRyYW5zYWN0aW9uLiAgQW55IHR1cGxl cyBjb21taXR0ZWQgZGVhZCBiZWZvcmUKICAqIHRoZSBzbmFwIG5lZWQgbm90IGJlIGluZGV4ZWQs IGJlY2F1c2Ugd2Ugd2lsbCB3YWl0IG91dCBhbGwgdHJhbnNhY3Rpb25zCkBAIC0zNTI1LDcgKzM1 MjcsNyBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIFRJ RHMgb2YgYm90aCBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVzLCBhbmQgZG9pbmcgYSAibWVy Z2Ugam9pbiIgYWdhaW5zdAogICogdGhlIFRJRCBsaXN0cyB0byBzZWUgd2hpY2ggdHVwbGVzIGZy b20gYXV4aWxpYXJ5IGluZGV4IGFyZSBtaXNzaW5nIGZyb20gdGhlCiAgKiB0YXJnZXQgaW5kZXgu ICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHR1cGxlcyB2YWxpZCBhY2NvcmRpbmcgdG8g dGhlCi0gKiByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4gTm90aWNlIHdlIG5l ZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKKyAqIGxhdGVzdCBzbmFwc2hvdCBhcmUgaW4gdGhl IGluZGV4LiBOb3RpY2Ugd2UgbmVlZCB0byBkbyBidWxrZGVsZXRlIGluIHRoZQogICogcGFydGlj dWxhciBvcmRlcjogYXV4aWxpYXJ5IGZpcnN0LCB0YXJnZXQgbGFzdC4KICAqCiAgKiBCdWlsZGlu ZyBhIHVuaXF1ZSBpbmRleCB0aGlzIHdheSBpcyB0cmlja3k6IHdlIG1pZ2h0IHRyeSB0byBpbnNl cnQgYQpAQCAtMzU0NiwxMyArMzU0OCwxNCBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9u IGhlYXBSZWxhdGlvbiwKICAqCiAgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8gY29uY3VycmVudCBk cm9wIHRoZSBhdXhpbGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwotdm9pZAotdmFsaWRh dGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hv dCBzbmFwc2hvdCkKK1RyYW5zYWN0aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9p ZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRpb24sCiAJ CQkJaW5kZXhSZWxhdGlvbiwKIAkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4SW5mbyAgKmlu ZGV4SW5mbzsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKIAlJbmRleFZhY3V1bUluZm8gaXZp bmZvLCBhdXhpdmluZm87CiAJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlP aWQJCQlzYXZlX3VzZXJpZDsKQEAgLTM2MDIsOCArMzYwNSwxMiBAQCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KQogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNlcnQuICAoWW91IG1pZ2h0IHRo aW5rIHRoaXMgc2hvdWxkIGJlCiAJICogcGFzc2VkIGluIGZyb20gRGVmaW5lSW5kZXgsIGJ1dCBp dHMgY29weSBpcyBsb25nIGdvbmUgZHVlIHRvIGhhdmluZwogCSAqIGJlZW4gYnVpbHQgaW4gYSBw cmV2aW91cyB0cmFuc2FjdGlvbi4pCisJICoKKwkgKiBXZSBtaWdodCBuZWVkIHNuYXBzaG90IGZv ciBpbmRleCBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzLgogCSAqLworCVB1c2hBY3RpdmVTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJ bmZvKGluZGV4UmVsYXRpb24pOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAKIAkvKiBtYXJrIGJ1 aWxkIGlzIGNvbmN1cnJlbnQganVzdCBmb3IgY29uc2lzdGVuY3kgKi8KIAlpbmRleEluZm8tPmlp X0NvbmN1cnJlbnQgPSB0cnVlOwpAQCAtMzYzOSw2ICszNjQ2LDkgQEAgdmFsaWRhdGVfaW5kZXgo T2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hv dCkKIAkJCQkJCQkJCQkgICBOVUxMLCBUVVBMRVNPUlRfTk9ORSk7CiAJYXV4U3RhdGUuaHR1cHMg PSBhdXhTdGF0ZS5pdHVwcyA9IGF1eFN0YXRlLnR1cHNfaW5zZXJ0ZWQgPSAwOwogCisJLyogdHVw bGVzb3J0X2JlZ2luX2RhdHVtIG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNob3QgKi8KKwlJbnZh bGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKIAkodm9pZCkgaW5kZXhfYnVsa19kZWxldGUoJmF1 eGl2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJhY2ssICZhdXhTdGF0 ZSk7CiAJLyogSWYgYXV4IGluZGV4IGlzIGVtcHR5LCBtZXJnZSBtYXkgYmUgc2tpcHBlZCAqLwpA QCAtMzY1OCw3ICszNjY4LDEzIEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRl eElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCWluZGV4X2Nsb3NlKGlu ZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwgTm9Mb2Nr KTsKIAotCQlyZXR1cm47CisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOworCQlsaW1pdFhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOworCQlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKKwkJQXNz ZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwkJcmV0dXJuIGxpbWl0 WG1pbjsKIAl9CiAKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0oSU5U OE9JRCwgSW50OExlc3NPcGVyYXRvciwKQEAgLTM2NjcsNiArMzY4Myw5IEBAIHZhbGlkYXRlX2lu ZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25h cHNob3QpCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9OT05FKTsKIAlzdGF0ZS5odHVwcyA9 IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9IDA7CiAKKwkvKiB0dXBsZXNvcnRf YmVnaW5fZGF0dW0gbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFsaWRhdGVD YXRhbG9nU25hcHNob3QoKTsKKwogCS8qIGFtYnVsa2RlbGV0ZSB1cGRhdGVzIHByb2dyZXNzIG1l dHJpY3MgKi8KIAkodm9pZCkgaW5kZXhfYnVsa19kZWxldGUoJml2aW5mbywgTlVMTCwKIAkJCQkJ CQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJhY2ssICZzdGF0ZSk7CkBAIC0zNjg2LDE5ICszNzA1LDI0 IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJ ZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFy YW0oMywgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAl0dXBsZXNvcnRfcGVy Zm9ybXNvcnQoc3RhdGUudHVwbGVzb3J0KTsKKwkvKiB0dXBsZXNvcnRfcGVyZm9ybXNvcnQgbWF5 IHJlcXVpcmUgY2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qo KTsKKwogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChhdXhTdGF0ZS50dXBsZXNvcnQpOworCS8qIHR1 cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICovCisJSW52 YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQo TXlQcm9jLT54bWluKSk7CiAKIAkvKgogCSAqIE5vdyBtZXJnZSBib3RoIGluZGV4ZXMKIAkgKi8K IAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwK IAkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhNRVJHRSk7Ci0J dGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCi0JCQkJCQkJICBpbmRleFJl bGF0aW9uLAotCQkJCQkJCSAgaW5kZXhJbmZvLAotCQkJCQkJCSAgc25hcHNob3QsCi0JCQkJCQkJ ICAmc3RhdGUsCi0JCQkJCQkJICAmYXV4U3RhdGUpOworCWxpbWl0WG1pbiA9IHRhYmxlX2luZGV4 X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCSAgaW5kZXhSZWxhdGlvbiwK KwkJCQkJCQkJCQkgIGluZGV4SW5mbywKKwkJCQkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkJCQkg ICZhdXhTdGF0ZSk7CiAKIAkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxp ZGF0ZV9zY2FuICovCiAJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRl LnR1cGxlc29ydCA9PSBOVUxMKTsKQEAgLTM3MjEsNiArMzc0NSw5IEBAIHZhbGlkYXRlX2luZGV4 KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNo b3QpCiAJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAlpbmRleF9jbG9z ZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlvbiwgTm9M b2NrKTsKKworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisJ cmV0dXJuIGxpbWl0WG1pbjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXgg NTk5ZTMzNzU4MzMuLjdmOGFkYmRiZGEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAt NTk1LDcgKzU5NSw2IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlMb2NrUmVs SWQJaGVhcHJlbGlkOwogCUxPQ0tUQUcJCWhlYXBsb2NrdGFnOwogCUxPQ0tNT0RFCWxvY2ttb2Rl OwotCVNuYXBzaG90CXNuYXBzaG90OwogCU9pZAkJCXJvb3Rfc2F2ZV91c2VyaWQ7CiAJaW50CQkJ cm9vdF9zYXZlX3NlY19jb250ZXh0OwogCWludAkJCXJvb3Rfc2F2ZV9uZXN0bGV2ZWw7CkBAIC0x ODEzLDMyICsxODEyLDExIEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkvKiBU ZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlm aWVzICovCiAJaWYgKHNhZmVfaW5kZXgpCiAJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7Ci0K LQkvKgotCSAqIE5vdyB0YWtlIHRoZSAicmVmZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUg dXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0JICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMu ICBCZXdhcmUhICBUaGVyZSBtaWdodCBzdGlsbCBiZSBzbmFwc2hvdHMgaW4KLQkgKiB1c2UgdGhh dCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uIGFzIGluLXByb2dyZXNzIHRoYXQgb3VyIHJlZmVyZW5j ZQotCSAqIHNuYXBzaG90IHRyZWF0cyBhcyBjb21taXR0ZWQuICBJZiBzdWNoIGEgcmVjZW50bHkt Y29tbWl0dGVkIHRyYW5zYWN0aW9uCi0JICogZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLCB3 ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGluZGV4OyB5ZXQKLQkgKiB0aG9zZSB0cmFu c2FjdGlvbnMgd2hpY2ggc2VlIHRoZSBkZWxldGluZyBvbmUgYXMgc3RpbGwtaW4tcHJvZ3Jlc3Mg d2lsbAotCSAqIGV4cGVjdCBzdWNoIHR1cGxlcyB0byBiZSB0aGVyZSBvbmNlIHdlIG1hcmsgdGhl IGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICogV2Ugc29sdmUgdGhpcyBieSB3YWl0aW5nIGZvciBh bGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMgdG8gZXhpdCBiZWZvcmUKLQkgKiB3ZSBtYXJrIHRo ZSBpbmRleCBhcyB2YWxpZC4KLQkgKgotCSAqIFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRv IHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25zIGluIGluZGV4ZXMgbWF5Ci0JICogbmVlZCBhIHNu YXBzaG90LgotCSAqLwotCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOwotCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hvdCk7CiAJLyoKIAkgKiBN ZXJnZSBjb250ZW50IG9mIGF1eGlsaWFyeSBhbmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55 IG1pc3NpbmcgaW5kZXggZW50cmllcy4KIAkgKi8KLQl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBp bmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOwotCWxpbWl0WG1p biA9IHNuYXBzaG90LT54bWluOworCWxpbWl0WG1pbiA9IHZhbGlkYXRlX2luZGV4KHRhYmxlSWQs IGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKIAotCVBvcEFjdGl2ZVNuYXBz aG90KCk7Ci0JVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKIAkvKgogCSAqIFRoZSBzbmFw c2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwgY29udGFpbiByZWdpc3RlcmVkIHNuYXBzaG90cyB0 aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBvdXIgcHJvY2VzcydzIGFkdmVydGlzZWQgeG1pbjsg aW4gcGFydGljdWxhciwgaWYKQEAgLTE4NjAsOCArMTgzOCw4IEBAIERlZmluZUluZGV4KFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkvKgogCSAqIFRoZSBpbmRleCBpcyBub3cgdmFsaWQgaW4gdGhlIHNl bnNlIHRoYXQgaXQgY29udGFpbnMgYWxsIGN1cnJlbnRseQogCSAqIGludGVyZXN0aW5nIHR1cGxl cy4gIEJ1dCBzaW5jZSBpdCBtaWdodCBub3QgY29udGFpbiB0dXBsZXMgZGVsZXRlZCBqdXN0Ci0J ICogYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBv dXQgYW55Ci0JICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBvbGRlciBzbmFwc2hvdHMu CisJICogYmVmb3JlIHRoZSBsYXN0IHNuYXBzaG90IGR1cmluZyB2YWxpZGF0aW5nIHdhcyB0YWtl biwgd2UgaGF2ZSB0byB3YWl0CisJICogb3V0IGFueSB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBo YXZlIG9sZGVyIHNuYXBzaG90cy4KIAkgKi8KIAlJTkpFQ1RJT05fUE9JTlQoImRlZmluZS1pbmRl eC1iZWZvcmUtc2V0LXZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCkBAIC00NDI2LDcgKzQ0MDQsNiBAQCBSZWluZGV4 UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlv bk9pZCwgY29uc3QgUmVpbgogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0 KGxjKTsKIAkJVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW47Ci0JCVNuYXBzaG90CXNuYXBzaG90Owog CiAJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKQEAgLTQ0NDEsMTMgKzQ0MTgsNiBAQCBS ZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlpZiAobmV3aWR4LT5zYWZlKQogCQkJc2V0X2luZGV4 c2FmZV9wcm9jZmxhZ3MoKTsKIAotCQkvKgotCQkgKiBUYWtlIHRoZSAicmVmZXJlbmNlIHNuYXBz aG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0JCSAqIHRvIGZpbHRl ciBjYW5kaWRhdGUgdHVwbGVzLgotCQkgKi8KLQkJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90 KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hv dCk7Ci0KIAkJLyoKIAkJICogVXBkYXRlIHByb2dyZXNzIGZvciB0aGUgaW5kZXggdG8gYnVpbGQs IHdpdGggdGhlIGNvcnJlY3QgcGFyZW50CiAJCSAqIHRhYmxlIGludm9sdmVkLgpAQCAtNDQ1OSwx NiArNDQyOSw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCXByb2dyZXNzX3ZhbHNbM10g PSBuZXdpZHgtPmFtSWQ7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oNCwg cHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCi0JCXZhbGlkYXRlX2luZGV4KG5ld2lk eC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgtPmF1eEluZGV4SWQsIHNuYXBzaG90 KTsKLQotCQkvKgotCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkgd2l0aCBvdXIgYWN0aXZlIHNuYXBz aG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKLQkJICogdGhlIHhtaW4gbGltaXQgdG8gd2FpdCBm b3Igb2xkZXIgc25hcHNob3RzLgotCQkgKi8KLQkJbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47 Ci0KLQkJUG9wQWN0aXZlU25hcHNob3QoKTsKLQkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKKwkJbGltaXRYbWluID0gdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgt PmluZGV4SWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJCUFzc2VydCghVHJhbnNhY3Rpb25JZElz VmFsaWQoTXlQcm9jLT54bWluKSk7CiAKIAkJLyoKIAkJICogVG8gZW5zdXJlIG5vIGRlYWRsb2Nr cywgd2UgbXVzdCBjb21taXQgYW5kIHN0YXJ0IHlldCBhbm90aGVyCkBAIC00NDgxLDcgKzQ0NDMs NyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQs IE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkvKgogCQkgKiBUaGUgaW5kZXggaXMgbm93 IHZhbGlkIGluIHRoZSBzZW5zZSB0aGF0IGl0IGNvbnRhaW5zIGFsbCBjdXJyZW50bHkKIAkJICog aW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxl cyBkZWxldGVkCi0JCSAqIGp1c3QgYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4s IHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CisJCSAqIGp1c3QgYmVmb3JlIHRoZSBsYXRlc3Qgc25h cCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CiAJCSAqIHRyYW5zYWN0aW9ucyB0 aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCQkgKgogCQkgKiBCZWNhdXNlIHdlIGRv bid0IHRha2UgYSBzbmFwc2hvdCBvciBYaWQgaW4gdGhpcyB0cmFuc2FjdGlvbiwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCmluZGV4IDFhOTk3NTM3ODAwLi4yMzgwYTU5M2Q3MSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CkBAIC03MDEsMTIgKzcwMSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJ CQkJCQkJCSAgIFRhYmxlU2NhbkRlc2Mgc2Nhbik7CiAKIAkvKiBzZWUgdGFibGVfaW5kZXhfdmFs aWRhdGVfc2NhbiBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KLQl2b2lkCQkoKmlu ZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxhdGlvbiB0YWJsZV9yZWwsCi0JCQkJCQkJCQkJUmVsYXRp b24gaW5kZXhfcmVsLAotCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKLQkJCQkJCQkJ CQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRl LAotCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4X3N0YXRlKTsKKwlUcmFuc2FjdGlv bklkCQkoKmluZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxhdGlvbiB0YWJsZV9yZWwsCisJCQkJCQkJ CQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCisJCQkJCQkJCQkJCQlJbmRleEluZm8gKmluZGV4X2lu Zm8sCisJCQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCQkJ VmFsaWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOwogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K QEAgLTE4MjksMjAgKzE4MjgsMTggQEAgdGFibGVfaW5kZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxh dGlvbiB0YWJsZV9yZWwsCiAgKiBOb3RlOiBpdCBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGF0IGZ1 bmN0aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KICAqIGJvdGggYHN0YXRlYCBhbmQgYGF1eHN0 YXRlYC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIFRyYW5zYWN0aW9u SWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogCQkJCQkJ ICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJCQkJCQkgIEluZGV4SW5mbyAqaW5kZXhfaW5mbywKLQkJ CQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3Rh dGUsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7Ci0JdGFibGVfcmVs LT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKLQkJCQkJCQkJCQkJ ICAgaW5kZXhfcmVsLAotCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAotCQkJCQkJCQkJCQkgICBz bmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUsCi0JCQkJCQkJCQkJCSAgIGF1eHN0YXRlKTsK KwlyZXR1cm4gdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxl X3JlbCwKKwkJCQkJCQkJCQkJCQkgIGluZGV4X3JlbCwKKwkJCQkJCQkJCQkJCQkgIGluZGV4X2lu Zm8sCisJCQkJCQkJCQkJCQkJICBzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgIGF1eHN0YXRlKTsKIH0K IAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA2ZmE5MWJmY2RjMC4uYjMzMDg0Y2I5MWEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaApAQCAtNDE3LDYgKzQxNywyMSBAQCBOb3JtYWxUcmFuc2FjdGlvbklkT2xk ZXIoVHJhbnNhY3Rpb25JZCBhLCBUcmFuc2FjdGlvbklkIGIpCiAJcmV0dXJuIGI7CiB9CiAKKy8q IHJldHVybiB0aGUgbmV3ZXIgb2YgdGhlIHR3byBJRHMgKi8KK3N0YXRpYyBpbmxpbmUgVHJhbnNh Y3Rpb25JZAorVHJhbnNhY3Rpb25JZE5ld2VyKFRyYW5zYWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25J ZCBiKQoreworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoYSkpCisJCXJldHVybiBiOworCisJ aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiKSkKKwkJcmV0dXJuIGE7CisKKwlpZiAoVHJhbnNh Y3Rpb25JZEZvbGxvd3MoYSwgYikpCisJCXJldHVybiBhOworCXJldHVybiBiOworfQorCiAvKiBy ZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICovCiBzdGF0aWMgaW5saW5lIEZ1bGxUcmFu c2FjdGlvbklkCiBGdWxsVHJhbnNhY3Rpb25JZE5ld2VyKEZ1bGxUcmFuc2FjdGlvbklkIGEsIEZ1 bGxUcmFuc2FjdGlvbklkIGIpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4 LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggMzdhMzkwZDMzZGUuLmQxZjY0 MTFkZDc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0xNTIsNyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQg aW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJYm9vbCBpc3JlaW5kZXgs CiAJCQkJCQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lk IGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7 CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5k ZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3RhdGVfZmxh Z3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOwogCi0tIAoyLjQz LjAKCg== --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Disposition: attachment; filename="v30-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nci05 RnJvbSBjMjI5NmY3ODU4OGE1MzE5NzhlNWFhOGU5NmNkNmM0ZWFlOWE1ZjY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMiBKYW4gMjAyNiAwMDo1Nzo1NiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDMvN10gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlIEV4 dGVuZAogdHVwbGVzdG9yZSB0byBzdG9yZSBpbmRpdmlkdWFsIERhdHVtIHZhbHVlczogLSBmaXhl ZC1sZW5ndGggZGF0YXR5cGVzIGFuZAogdmFyaWFibGUtbGVuZ3RoIGRhdGF0eXBlczogaW5jbHVk ZSBhIGxlbmd0aCBoZWFkZXIgLSBieS12YWx1ZSB0eXBlczogc3RvcmUKIGlubGluZSB3aXRoIG9u ZSBleHRyYSBieXRlIChidXQgd2l0aG91dCBzdXBwb3J0IG9mIHJhbmRvbSBhY2Nlc3MpCgpUaGlz IHN1cHBvcnQgZW5hYmxlcyB1c2FnZXMgb2YgdHVwbGVzdG9yZSBmb3Igbm9uLXR1cGxlIGRhdGEg KFRJRHMpIGluIHRoZSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1 cGxlc3RvcmUuYyB8IDMzMCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVk ZS91dGlscy90dXBsZXN0b3JlLmggICAgICB8ICAzMyArLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjkz IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzdG9yZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXN0 b3JlLmMKaW5kZXggYWZiYTgyZjI4YTIuLjY5MmUzMjVlYWZkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0 L3R1cGxlc3RvcmUuYwpAQCAtMSwxNiArMSwxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgog ICogdHVwbGVzdG9yZS5jCi0gKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkg dHVwbGUgc3RvcmFnZS4KKyAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSBz dG9yYWdlIG9mIHR1cGxlcyBhbmQgRGF0dW1zLgorICoKKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMg dGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWl0aGVyIHR1cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZh bHVlcyBmb3IgcHVycG9zZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0 Y2gKKyAqIGZpbGVzLCBldGMuIEl0IGlzIGVzc2VudGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lv biBvZiB0dXBsZXNvcnQuYzsKKyAqIGl0IGRvZXMgbm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNh biBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBI b3dldmVyLCBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3Rh cnQKKyAqIHJlYWRpbmcgdGhlIHNlcXVlbmNlIGJlZm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRl bi4KKyAqCisgKiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1 c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3MKKyAqIHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVk IHBvcnRpb24gb2YgYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5k ZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0 ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVy aWFsaXplIG5vZGVzLCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFs bHkKLSAqIGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBz b3J0aW5nIG9mIHR1cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBh IHNlcXVlbmNlIG9mIHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVx dWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJl Zm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1 bCBmb3IgY3Vyc29ycywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGlu IHRoZSBhbHJlYWR5LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmlu ZyB0byBwcm9jZXNzIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqIEFsc28s IGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2lu dGVycy4KICAqCiAgKiBBIHRlbXBvcmFyeSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRh IGlmIGl0IGV4Y2VlZHMgdGhlCkBAIC02MSw2ICs2NCw4IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 ZmZpbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVz b3duZXIuaCIKIApAQCAtMTE1LDE2ICsxMjAsMTUgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQog CUJ1ZkZpbGUgICAgKm15ZmlsZTsJCQkvKiB1bmRlcmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9u ZSAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJCS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xk aW5nIHR1cGxlcyAqLwogCVJlc291cmNlT3duZXIgcmVzb3duZXI7CQkvKiByZXNvd25lciBmb3Ig aG9sZGluZyB0ZW1wIGZpbGVzICovCisJT2lkCQkJZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBv ciBvaWQgb2YgRGF0dW0ncyB0byBiZSBzdG9yZWQgKi8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkv KiB0eXBlbGVuIG9mIHRoYXQgRGF0dW0gKi8KKwlib29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnkt dmFsdWUgb2YgdGhhdCBEYXR1bSAqLwogCiAJLyoKIAkgKiBUaGVzZSBmdW5jdGlvbiBwb2ludGVy cyBkZWNvdXBsZSB0aGUgcm91dGluZXMgdGhhdCBtdXN0IGtub3cgd2hhdCBraW5kCiAJICogb2Yg dHVwbGUgd2UgYXJlIGhhbmRsaW5nIGZyb20gdGhlIHJvdXRpbmVzIHRoYXQgZG9uJ3QgbmVlZCB0 byBrbm93IGl0LgogCSAqIFRoZXkgYXJlIHNldCB1cCBieSB0aGUgdHVwbGVzdG9yZV9iZWdpbl94 eHggcm91dGluZXMuCiAJICoKLQkgKiAoQWx0aG91Z2ggdHVwbGVzdG9yZS5jIGN1cnJlbnRseSBv bmx5IHN1cHBvcnRzIGhlYXAgdHVwbGVzLCBJJ3ZlIGNvcGllZAotCSAqIHRoaXMgcGFydCBvZiB0 dXBsZXNvcnQuYyBzbyB0aGF0IGV4dGVuc2lvbiB0byBvdGhlciBraW5kcyBvZiBvYmplY3RzCi0J ICogd2lsbCBiZSBlYXN5IGlmIGl0J3MgZXZlciBuZWVkZWQuKQotCSAqCiAJICogRnVuY3Rpb24g dG8gY29weSBhIHN1cHBsaWVkIGlucHV0IHR1cGxlIGludG8gcGFsbG9jJ2Qgc3BhY2UuIChOQjog d2UKIAkgKiBhc3N1bWUgdGhhdCBhIHNpbmdsZSBwZnJlZSgpIGlzIGVub3VnaCB0byByZWxlYXNl IHRoZSB0dXBsZSBsYXRlciwgc28KIAkgKiB0aGUgcmVwcmVzZW50YXRpb24gbXVzdCBiZSAiZmxh dCIgaW4gb25lIHBhbGxvYyBjaHVuay4pIHN0YXRlLT5hdmFpbE1lbQpAQCAtMTQ5LDYgKzE1Mywx MiBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAJICovCiAJdm9pZAkgICAqKCpyZWFkdHVwKSAo VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IGxlbik7CiAKKwkvKgorCSAqIEZ1 bmN0aW9uIHRvIGdldCBsZW5ndGggb2YgdHVwbGUgZnJvbSB0YXBlLiBVc2VkIHRvIHByb3ZpZGUg J2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1cCAoc2VlIGFib3ZlKS4KKwkgKi8KKwl1bnNp Z25lZCBpbnQoKmxlbnR1cCkgKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOwor CiAJLyoKIAkgKiBUaGlzIGFycmF5IGhvbGRzIHBvaW50ZXJzIHRvIHR1cGxlcyBpbiBtZW1vcnkg aWYgd2UgYXJlIGluIHN0YXRlIElOTUVNLgogCSAqIEluIHN0YXRlcyBXUklURUZJTEUgYW5kIFJF QURGSUxFIGl0J3Mgbm90IHVzZWQuCkBAIC0xODUsNiArMTk1LDcgQEAgc3RydWN0IFR1cGxlc3Rv cmVzdGF0ZQogI2RlZmluZSBDT1BZVFVQKHN0YXRlLHR1cCkJKCgqKHN0YXRlKS0+Y29weXR1cCkg KHN0YXRlLCB0dXApKQogI2RlZmluZSBXUklURVRVUChzdGF0ZSx0dXApICgoKihzdGF0ZSktPndy aXRldHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5lIFJFQURUVVAoc3RhdGUsbGVuKQkoKCooc3Rh dGUpLT5yZWFkdHVwKSAoc3RhdGUsIGxlbikpCisjZGVmaW5lIExFTlRVUChzdGF0ZSxlb2ZPSykJ KCgqKHN0YXRlKS0+bGVudHVwKSAoc3RhdGUsIGVvZk9LKSkKICNkZWZpbmUgTEFDS01FTShzdGF0 ZSkJCSgoc3RhdGUpLT5hdmFpbE1lbSA8IDApCiAjZGVmaW5lIFVTRU1FTShzdGF0ZSxhbXQpCSgo c3RhdGUpLT5hdmFpbE1lbSAtPSAoYW10KSkKICNkZWZpbmUgRlJFRU1FTShzdGF0ZSxhbXQpCSgo c3RhdGUpLT5hdmFpbE1lbSArPSAoYW10KSkKQEAgLTE5Myw5ICsyMDQsOSBAQCBzdHJ1Y3QgVHVw bGVzdG9yZXN0YXRlCiAgKgogICogTk9URVMgYWJvdXQgb24tdGFwZSByZXByZXNlbnRhdGlvbiBv ZiB0dXBsZXM6CiAgKgotICogV2UgcmVxdWlyZSB0aGUgZmlyc3QgInVuc2lnbmVkIGludCIgb2Yg YSBzdG9yZWQgdHVwbGUgdG8gYmUgdGhlIHRvdGFsIHNpemUKLSAqIG9uLXRhcGUgb2YgdGhlIHR1 cGxlLCBpbmNsdWRpbmcgaXRzZWxmIChzbyBpdCBpcyBuZXZlciB6ZXJvKS4KLSAqIFRoZSByZW1h aW5kZXIgb2YgdGhlIHN0b3JlZCB0dXBsZQorICogSW4gY2FzZSBvZiB0dXBsZXMgd2UgdXNlIGZp cnN0ICJ1bnNpZ25lZCBpbnQiIG9mIGEgc3RvcmVkIHR1cGxlCisgKiB0byBiZSB0aGUgdG90YWwg c2l6ZSBvbi10YXBlIG9mIHRoZSB0dXBsZSwgaW5jbHVkaW5nIGl0c2VsZgorICogKHNvIGl0IGlz IG5ldmVyIHplcm8pLiBUaGUgcmVtYWluZGVyIG9mIHRoZSBzdG9yZWQgdHVwbGUKICAqIG1heSBv ciBtYXkgbm90IG1hdGNoIHRoZSBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR1cGxl IC0tLQogICogYW55IGNvbnZlcnNpb24gbmVlZGVkIGlzIHRoZSBqb2Igb2YgdGhlIHdyaXRldHVw IGFuZCByZWFkdHVwIHJvdXRpbmVzLgogICoKQEAgLTIwNiwxMCArMjE3LDEzIEBAIHN0cnVjdCBU dXBsZXN0b3Jlc3RhdGUKICAqIHN0YXRlLT5iYWNrd2FyZCBpcyBub3Qgc2V0LCB0aGUgd3JpdGUv cmVhZCByb3V0aW5lcyBtYXkgb21pdCB0aGUgZXh0cmEKICAqIGxlbmd0aCB3b3JkLgogICoKLSAq IHdyaXRldHVwIGlzIGV4cGVjdGVkIHRvIHdyaXRlIGJvdGggbGVuZ3RoIHdvcmRzIGFzIHdlbGwg YXMgdGhlIHR1cGxlCisgKiBJbiB0aGUgY2FzZSBvZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmd0 aCwgYm90aCAidW5zaWduZWQgaW50IiBhcmUgb21pdHRlZC4KKyAqCisgKiB3cml0ZXR1cCBpcyBl eHBlY3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3b3JkcyBhbmQgdGhlIHR1cGxlCiAgKiBkYXRh LiAgV2hlbiByZWFkdHVwIGlzIGNhbGxlZCwgdGhlIHRhcGUgaXMgcG9zaXRpb25lZCBqdXN0IGFm dGVyIHRoZQotICogZnJvbnQgbGVuZ3RoIHdvcmQ7IHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBs ZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QKLSAqIHRoZSBiYWNrIGxlbmd0aCB3b3JkIChpZiBwcmVz ZW50KS4KKyAqIGZyb250IGxlbmd0aCB3b3JkIChpZiBpdCBpcyBub3Qgb21pdHRlZCBsaWtlIGlu IGNhc2Ugb2YgY29udGVudC1zaXplIERhdHVtKTsKKyAqIHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0 dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QgdGhlIGJhY2sgbGVuZ3RoIHdvcmQKKyAqIChpZiBw cmVzZW50KS4KICAqCiAgKiBUaGUgd3JpdGUvcmVhZCByb3V0aW5lcyBjYW4gbWFrZSB1c2Ugb2Yg dGhlIHR1cGxlIGRlc2NyaXB0aW9uIGRhdGEKICAqIHN0b3JlZCBpbiB0aGUgVHVwbGVzdG9yZXN0 YXRlIHJlY29yZCwgaWYgbmVlZGVkLiBUaGV5IGFyZSBhbHNvIGV4cGVjdGVkCkBAIC0yNDEsMTEg KzI1NSwxNiBAQCBzdGF0aWMgVHVwbGVzdG9yZXN0YXRlICp0dXBsZXN0b3JlX2JlZ2luX2NvbW1v bihpbnQgZWZsYWdzLAogc3RhdGljIHZvaWQgdHVwbGVzdG9yZV9wdXR0dXBsZV9jb21tb24oVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVwbGUpOwogc3RhdGljIHZvaWQgZHVtcHR1cGxl cyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKTsKIHN0YXRpYyB2b2lkIHR1cGxlc3RvcmVfdXBkYXRl bWF4KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwotc3RhdGljIHVuc2lnbmVkIGludCBnZXRsZW4o VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CisKK3N0YXRpYyB1bnNpZ25lZCBp bnQgbGVudHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CiBzdGF0 aWMgdm9pZCAqY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7 CiBzdGF0aWMgdm9pZCB3cml0ZXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQg KnR1cCk7CiBzdGF0aWMgdm9pZCAqcmVhZHR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IHVuc2lnbmVkIGludCBsZW4pOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGxlbnR1cF9kYXR1bShU dXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKTsKK3N0YXRpYyB2b2lkICpjb3B5dHVw X2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lk IHdyaXRldHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKTsKK3N0 YXRpYyB2b2lkICpyZWFkdHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVk IGludCBsZW4pOwogCiAvKgogICoJCXR1cGxlc3RvcmVfYmVnaW5feHh4CkBAIC0yNjgsNiArMjg3 LDEyIEBAIHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGludCBlZmxhZ3MsIGJvb2wgaW50ZXJYYWN0 LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5hbGxvd2VkTWVtID0gbWF4S0J5dGVzICogKGludDY0 KSAxMDI0OwogCXN0YXRlLT5hdmFpbE1lbSA9IHN0YXRlLT5hbGxvd2VkTWVtOwogCXN0YXRlLT5t eWZpbGUgPSBOVUxMOworCS8qCisJICogU2V0IERhdHVtIHJlbGF0ZWQgZGF0YSB0byBpbnZhbGlk IGJ5IGRlZmF1bHQuCisJICovCisJc3RhdGUtPmRhdHVtVHlwZSA9IEludmFsaWRPaWQ7CisJc3Rh dGUtPmRhdHVtVHlwZUxlbiA9IDA7CisJc3RhdGUtPmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7CiAK IAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlzIGlu IGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ1LDYgKzM3MCwzNyBAQCB0dXBsZXN0b3JlX2JlZ2lu X2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQog CXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFwOwogCXN0YXRlLT53cml0ZXR1cCA9IHdyaXRl dHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSByZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxlbnR1 cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhlIHNhbWUg YXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBjcmVhdGUgc3RvcmUgZm9yIERhdHVtIHZhbHVl cy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRh dHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVz KQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7CisJaW50CQkJZWZsYWdzOworCisJLyoKKwkg KiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBtZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBpcyBj b21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTguMyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jlcy4K KwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3MgPworCQkoRVhFQ19GTEFHX0JBQ0tXQVJEIHwg RVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19GTEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9IHR1 cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywgaW50ZXJYYWN0LCBtYXhLQnl0ZXMpOworCXN0 YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJZ2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5kYXR1 bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAmc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsKKwlB c3NlcnQoIShzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwgJiYgcmFuZG9tQWNjZXNzKSk7CisKKwlzdGF0 ZS0+Y29weXR1cCA9IGNvcHl0dXBfZGF0dW07CisJc3RhdGUtPndyaXRldHVwID0gd3JpdGV0dXBf ZGF0dW07CisJc3RhdGUtPnJlYWR0dXAgPSByZWFkdHVwX2RhdHVtOworCXN0YXRlLT5sZW50dXAg PSBsZW50dXBfZGF0dW07CiAKIAlyZXR1cm4gc3RhdGU7CiB9CkBAIC00NDMsMTYgKzQ5OSwxOSBA QCB0dXBsZXN0b3JlX2NsZWFyKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpCiAJewogCQlpbnQ2NAkJ YXZhaWxNZW0gPSBzdGF0ZS0+YXZhaWxNZW07CiAKLQkJLyoKLQkJICogQmVsb3csIHdlIHJlc2V0 IHRoZSBtZW1vcnkgY29udGV4dCBmb3Igc3RvcmluZyB0dXBsZXMuICBUbyBzYXZlCi0JCSAqIGZy b20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1lbW9yeUNodW5rU3BhY2UoKSBvbiBhbGwgc3Rv cmVkCi0JCSAqIHR1cGxlcywgd2UgYWRqdXN0IHRoZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRo ZSB0dXBsZXMgYW5kIGp1c3QKLQkJICogcmVjYWxsIFVTRU1FTSBmb3IgdGhlIHNwYWNlIHVzZWQg YnkgdGhlIG1lbXR1cGxlcyBhcnJheS4gIEhlcmUgd2UKLQkJICoganVzdCBBc3NlcnQgdGhhdCdz IGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tpbmcgaGFzbid0IGdvbmUKLQkJICogd3Jvbmcg YW55d2hlcmUuCi0JCSAqLwotCQlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IHN0 YXRlLT5tZW10dXBjb3VudDsgaSsrKQotCQkJYXZhaWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFj ZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJ CXsKKwkJCS8qCisJCQkgKiBCZWxvdywgd2UgcmVzZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBz dG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUKKwkJCSAqIGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxs IEdldE1lbW9yeUNodW5rU3BhY2UoKSBvbiBhbGwgc3RvcmVkCisJCQkgKiB0dXBsZXMsIHdlIGFk anVzdCB0aGUgYXZhaWxNZW0gdG8gZm9yZ2V0IGFsbCB0aGUgdHVwbGVzIGFuZCBqdXN0CisJCQkg KiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3BhY2UgdXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5 LiAgSGVyZSB3ZQorCQkJICoganVzdCBBc3NlcnQgdGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1v cnkgdHJhY2tpbmcgaGFzbid0IGdvbmUKKwkJCSAqIHdyb25nIGFueXdoZXJlLgorCQkJICovCisJ CQlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsg aSsrKQorCQkJCWF2YWlsTWVtICs9IEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxl c1tpXSk7CisJCX0KIAogCQlhdmFpbE1lbSArPSBHZXRNZW1vcnlDaHVua1NwYWNlKHN0YXRlLT5t ZW10dXBsZXMpOwogCkBAIC03NzYsNiArODM1LDI1IEBAIHR1cGxlc3RvcmVfcHV0dHVwbGUoVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKQogCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOwogfQogCisvKgorICogTGlrZSB0dXBsZXN0b3JlX3B1dHR1cGxlc2xvdCBi dXQgZm9yIHNpbmdsZSBEYXR1bS4KKyAqLwordm9pZAordHVwbGVzdG9yZV9wdXRkYXR1bShUdXBs ZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBkYXR1bSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+Y29udGV4dCk7CisKKwkvKgorCSAqIENv cHkgdGhlIERhdHVtLiAgKE11c3QgZG8gdGhpcyBldmVuIGluIFdSSVRFRklMRSBjYXNlLiAgTm90 ZSB0aGF0CisJICogQ09QWVRVUCBpbmNsdWRlcyBVU0VNRU0sIHNvIHdlIG5lZWRuJ3QgZG8gdGhh dCBoZXJlLikKKwkgKi8KKwlkYXR1bSA9IFBvaW50ZXJHZXREYXR1bShDT1BZVFVQKHN0YXRlLCBE YXR1bUdldFBvaW50ZXIoZGF0dW0pKSk7CisKKwl0dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihz dGF0ZSwgRGF0dW1HZXRQb2ludGVyKGRhdHVtKSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKK30KKwogLyoKICAqIFNpbWlsYXIgdG8gdHVwbGVzdG9yZV9wdXR0dXBsZSgpLCBi dXQgd29yayBmcm9tIHZhbHVlcyArIG51bGxzIGFycmF5cy4KICAqIFRoaXMgYXZvaWRzIGFuIGV4 dHJhIHR1cGxlLWNvbnN0cnVjdGlvbiBvcGVyYXRpb24uCkBAIC0xMDI3LDEwICsxMTA1LDEwIEBA IHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJk LAogCQkJcGdfZmFsbHRocm91Z2g7CiAKIAkJY2FzZSBUU1NfUkVBREZJTEU6Ci0JCQkqc2hvdWxk X2ZyZWUgPSB0cnVlOworCQkJKnNob3VsZF9mcmVlID0gIXN0YXRlLT5kYXR1bVR5cGVCeVZhbDsK IAkJCWlmIChmb3J3YXJkKQogCQkJewotCQkJCWlmICgodHVwbGVuID0gZ2V0bGVuKHN0YXRlLCB0 cnVlKSkgIT0gMCkKKwkJCQlpZiAoKHR1cGxlbiA9IExFTlRVUChzdGF0ZSwgdHJ1ZSkpICE9IDAp CiAJCQkJewogCQkJCQl0dXAgPSBSRUFEVFVQKHN0YXRlLCB0dXBsZW4pOwogCQkJCQlyZXR1cm4g dHVwOwpAQCAtMTA0Miw2ICsxMTIwLDcgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jl c3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJfQogCQkJfQogCisJCQlBc3NlcnQoIXN0 YXRlLT5kYXR1bVR5cGVCeVZhbCk7CiAJCQkvKgogCQkJICogQmFja3dhcmQuCiAJCQkgKgpAQCAt MTA1OSw3ICsxMTM4LDcgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0 YXRlLCBib29sIGZvcndhcmQsCiAJCQkJQXNzZXJ0KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQly ZXR1cm4gTlVMTDsKIAkJCX0KLQkJCXR1cGxlbiA9IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJ dHVwbGVuID0gTEVOVFVQKHN0YXRlLCBmYWxzZSk7CiAKIAkJCWlmIChyZWFkcHRyLT5lb2ZfcmVh Y2hlZCkKIAkJCXsKQEAgLTEwOTAsNyArMTE2OSw3IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQlBc3NlcnQoIXN0YXRlLT50 cnVuY2F0ZWQpOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9Ci0JCQkJdHVwbGVuID0gZ2V0bGVu KHN0YXRlLCBmYWxzZSk7CisJCQkJdHVwbGVuID0gTEVOVFVQKHN0YXRlLCBmYWxzZSk7CiAJCQl9 CiAKIAkJCS8qCkBAIC0xMTUyLDYgKzEyMzEsNDEgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3Qo VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCX0KIH0KIAorYm9vbAordHVw bGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCisJ CQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAqcmVzdWx0KQoreworCURhdHVtIGRhdHVtOwor CSpzaG91bGRfZnJlZSA9IGZhbHNlOworCisJZGF0dW0gPSAoRGF0dW0pIHR1cGxlc3RvcmVfZ2V0 dHVwbGUoc3RhdGUsIGZvcndhcmQsIHNob3VsZF9mcmVlKTsKKworCS8qIEZvciBieS12YWx1ZSBk YXR1bSB3ZSBtYXkgcmVjZWl2ZSB6ZXJvIGFzIHZhbGlkIHZhbHVlLiAqLworCWlmIChzdGF0ZS0+ ZGF0dW1UeXBlQnlWYWwpCisJeworCQkvKiBSZXR1cm4gZmFsc2Ugb25seSBvbiBFT0YgKi8KKwkJ aWYgKHN0YXRlLT5yZWFkcHRyc1tzdGF0ZS0+YWN0aXZlcHRyXS5lb2ZfcmVhY2hlZCkKKwkJewor CQkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJ fQorCisJCSpyZXN1bHQgPSBkYXR1bTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGRhdHVt KQorCXsKKwkJKnJlc3VsdCA9IGRhdHVtOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsK KwkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K K30KKwogLyoKICAqIHR1cGxlc3RvcmVfYWR2YW5jZSAtIGV4cG9ydGVkIGZ1bmN0aW9uIHRvIGFk anVzdCBwb3NpdGlvbiB3aXRob3V0IGZldGNoaW5nCiAgKgpAQCAtMTQ2MCw4ICsxNTc0LDExIEBA IHR1cGxlc3RvcmVfdHJpbShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKQogCS8qIFJlbGVhc2Ugbm8t bG9uZ2VyLW5lZWRlZCB0dXBsZXMgKi8KIAlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRlZDsg aSA8IG5yZW1vdmU7IGkrKykKIAl7Ci0JCUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3Bh Y2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOwotCQlwZnJlZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsK KwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJCUZSRUVNRU0oc3RhdGUsIEdl dE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOworCQkJcGZyZWUoc3RhdGUt Pm1lbXR1cGxlc1tpXSk7CisJCX0KIAkJc3RhdGUtPm1lbXR1cGxlc1tpXSA9IE5VTEw7CiAJfQog CXN0YXRlLT5tZW10dXBkZWxldGVkID0gbnJlbW92ZTsKQEAgLTE1NTYsMjUgKzE2NzMsNiBAQCB0 dXBsZXN0b3JlX2luX21lbW9yeShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKQogCXJldHVybiAoc3Rh dGUtPnN0YXR1cyA9PSBUU1NfSU5NRU0pOwogfQogCi0KLS8qCi0gKiBUYXBlIGludGVyZmFjZSBy b3V0aW5lcwotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWdldGxlbihUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGVvZk9LKQotewotCXVuc2lnbmVkIGludCBsZW47Ci0Jc2l6ZV90CQlu Ynl0ZXM7Ci0KLQluYnl0ZXMgPSBCdWZGaWxlUmVhZE1heWJlRU9GKHN0YXRlLT5teWZpbGUsICZs ZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7Ci0JaWYgKG5ieXRlcyA9PSAwKQotCQlyZXR1cm4gMDsK LQllbHNlCi0JCXJldHVybiBsZW47Ci19Ci0KLQogLyoKICAqIFJvdXRpbmVzIHNwZWNpYWxpemVk IGZvciBIZWFwVHVwbGUgY2FzZQogICoKQEAgLTE1ODUsNiArMTY4MywxOSBAQCBnZXRsZW4oVHVw bGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSykKICAqIHRvIHdyaXRlIHRoYXQgc2VwYXJh dGVseS4KICAqLwogCitzdGF0aWMgdW5zaWduZWQgaW50CitsZW50dXBfaGVhcChUdXBsZXN0b3Jl c3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQoreworCXVuc2lnbmVkIGludCBsZW47CisJc2l6ZV90 CQluYnl0ZXM7CisKKwluYnl0ZXMgPSBCdWZGaWxlUmVhZE1heWJlRU9GKHN0YXRlLT5teWZpbGUs ICZsZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7CisJaWYgKG5ieXRlcyA9PSAwKQorCQlyZXR1cm4g MDsKKwllbHNlCisJCXJldHVybiBsZW47Cit9CisKIHN0YXRpYyB2b2lkICoKIGNvcHl0dXBfaGVh cChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB2b2lkICp0dXApCiB7CkBAIC0xNjMxLDMgKzE3NDIs MTEyIEBAIHJlYWR0dXBfaGVhcChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQg bGVuKQogCQlCdWZGaWxlUmVhZEV4YWN0KHN0YXRlLT5teWZpbGUsICZ0dXBsZW4sIHNpemVvZih0 dXBsZW4pKTsKIAlyZXR1cm4gdHVwbGU7CiB9CisKKy8qCisgKiBSb3V0aW5lcyBzcGVjaWFsaXpl ZCBmb3IgRGF0dW0gY2FzZS4KKyAqCisgKiBIYW5kbGVzIGJvdGggZml4ZWQgYW5kIHZhcmlhYmxl LWxlbmd0aCBEYXR1bXMgZWZmaWNpZW50bHk6CisgKiAtIEZpeGVkLWxlbmd0aCBhbmQgVmFyaWFi bGUtbGVuZ3RoIGluY2x1ZGVzIGxlbmd0aCBwcmVmaXggKGFuZCBzdWZmaXggaWYgYmFja3dhcmQg c2NhbikKKyAqIC0gQnktdmFsdWUgdHlwZXMgaGFuZGxlZCBpbmxpbmUgd2l0aG91dCBleHRyYSBj b3B5aW5nLCBzdG9yaW5nIHNpbmdsZSBleHRyYSBieXRlCisgKiAgIFhYWDogY29uc2lkZXIgcmVm YWN0b3JpbmcgdG8gYXZvaWQgaXQsIGN1cnJlbnRseSBuZWVkIGl0IGZvciBjb3JyZWN0IHJld2lu ZCBsb2dpYworICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1cF9kYXR1bShUdXBsZXN0 b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQoreworCXVuc2lnbmVkIGludCBsZW47CisJc2l6 ZV90CQluYnl0ZXM7CisKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlkT2lkKTsK KworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQl1aW50OF90CWp1bms7CisJCW5i eXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVvZih1 aW50OF90KSwgZW9mT0spOworCQlpZiAobmJ5dGVzID09IDApCisJCQlyZXR1cm4gMDsKKwkJQXNz ZXJ0KGp1bmsgPT0gKHVpbnQ4X3QpIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQlyZXR1cm4gc3Rh dGUtPmRhdHVtVHlwZUxlbjsKKwl9CisKKwluYnl0ZXMgPSBCdWZGaWxlUmVhZE1heWJlRU9GKHN0 YXRlLT5teWZpbGUsICZsZW4sIHNpemVvZihsZW4pLCBlb2ZPSyk7CisJaWYgKG5ieXRlcyA9PSAw KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCAqCitjb3B5dHVw X2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKQoreworCURhdHVtIGQ7 CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7CisJaWYgKHN0YXRlLT5k YXR1bVR5cGVCeVZhbCkKKwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcihQb2ludGVyR2V0RGF0dW0o ZGF0dW0pKTsKKworCWQgPSBkYXR1bUNvcHkoUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUt PmRhdHVtVHlwZUJ5VmFsLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKwlVU0VNRU0oc3RhdGUsIEdl dE1lbW9yeUNodW5rU3BhY2UoRGF0dW1HZXRQb2ludGVyKGQpKSk7CisJcmV0dXJuIERhdHVtR2V0 UG9pbnRlcihkKTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRldHVwX2RhdHVtKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKQoreworCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBlICE9 IEludmFsaWRPaWQpOworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQl1aW50OF90 IGp1bmsgPSBzdGF0ZS0+ZGF0dW1UeXBlTGVuOyAvKiBvdmVyZmxvdyBpcyBvayAqLworCQlEYXR1 bSB2OworCQlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApOworCisJCS8qIGp1c3QgbWFy a2VyIGJ5dGUgdXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIGRhdGEgZm9yIHJld2luZCBsb2dpYyAq LworCQlCdWZGaWxlV3JpdGUoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVvZihqdW5rKSk7CisJ CXN0b3JlX2F0dF9ieXZhbCgmdiwgUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUtPmRhdHVt VHlwZUxlbik7CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdiwgc3RhdGUtPmRhdHVt VHlwZUxlbik7CisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsKKwl9CisJZWxzZQorCXsKKwkJ dW5zaWduZWQgaW50IHNpemUgPSBzdGF0ZS0+ZGF0dW1UeXBlTGVuOworCQlpZiAoc3RhdGUtPmRh dHVtVHlwZUxlbiA8IDApCisJCQlzaXplID0gZGF0dW1HZXRTaXplKFBvaW50ZXJHZXREYXR1bShk YXR1bSksIHN0YXRlLT5kYXR1bVR5cGVCeVZhbCwgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisKKwkJ QnVmRmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsICZzaXplLCBzaXplb2Yoc2l6ZSkpOworCisJCUJ1 ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCBkYXR1bSwgc2l6ZSk7CisKKwkJLyogbmVlZCB0cmFp bGluZyBsZW5ndGggd29yZD8gKi8KKwkJaWYgKHN0YXRlLT5iYWNrd2FyZCkKKwkJCUJ1ZkZpbGVX cml0ZShzdGF0ZS0+bXlmaWxlLCAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKKworCQlGUkVFTUVNKHN0 YXRlLCBHZXRNZW1vcnlDaHVua1NwYWNlKGRhdHVtKSk7CisJCXBmcmVlKGRhdHVtKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkICoKK3JlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwg dW5zaWduZWQgaW50IGxlbikKK3sKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlk T2lkKTsKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCXsKKwkJRGF0dW0gZGF0dW07CisK KwkJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGVMZW4gPiAwKTsKKwkJQXNzZXJ0KGxlbiA9PSBzdGF0 ZS0+ZGF0dW1UeXBlTGVuKTsKKwkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAmZGF0 dW0sIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsK KwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcihmZXRjaF9hdHQoJmRhdHVtLCB0cnVlLCBzdGF0ZS0+ ZGF0dW1UeXBlTGVuKSk7CisJfQorCWVsc2UKKwl7CisJCURhdHVtICpkYXRhID0gcGFsbG9jKGxl bik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgZGF0YSwgbGVuKTsKKworCQkv KiBuZWVkIHRyYWlsaW5nIGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkKQor CQkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAmbGVuLCBzaXplb2YobGVuKSk7CisK KwkJcmV0dXJuIGRhdGE7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVw bGVzdG9yZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzdG9yZS5oCmluZGV4IDFjMDhlMjE5 ZTg5Li42NjVkNmQ1NzYzNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzdG9y ZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc3RvcmUuaApAQCAtMSwxNyArMSwxOCBA QAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogdHVwbGVzdG9yZS5oCi0gKgkgIEdlbmVyYWxp emVkIHJvdXRpbmVzIGZvciB0ZW1wb3JhcnkgdHVwbGUgc3RvcmFnZS4KKyAqCSAgR2VuZXJhbGl6 ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSBzdG9yYWdlIG9mIHR1cGxlcyBhbmQgRGF0dW1zLgog ICoKLSAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgdHVwbGVzIGZv ciBwdXJwb3NlcyBzdWNoCi0gKiBhcyBNYXRlcmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2gg ZmlsZXMsIGV0Yy4gIEl0IGlzIGVzc2VudGlhbGx5Ci0gKiBhIGR1bWJlZC1kb3duIHZlcnNpb24g b2YgdHVwbGVzb3J0LmM7IGl0IGRvZXMgbm8gc29ydGluZyBvZiB0dXBsZXMKLSAqIGJ1dCBjYW4g b25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBzZXF1ZW5jZSBvZiB0dXBsZXMuICBIb3dldmVy LAotICogYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVpcmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0 IHJlYWRpbmcgdGhlIHNlcXVlbmNlCi0gKiBiZWZvcmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4u ICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGN1cnNvcnMsCi0gKiBiZWNhdXNlIGl0 IGFsbG93cyByYW5kb20gYWNjZXNzIHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24g b2YKLSAqIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcgdG8gcHJvY2VzcyB0aGUgdW5kZXJseWluZyBz Y2FuIHRvIGNvbXBsZXRpb24uCi0gKiBBbHNvLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IG11 bHRpcGxlIGluZGVwZW5kZW50IHJlYWQgcG9pbnRlcnMuCisgKiBUaGlzIG1vZHVsZSBoYW5kbGVz IHRlbXBvcmFyeSBzdG9yYWdlIG9mIGVpdGhlciB0dXBsZXMgb3Igc2luZ2xlCisgKiBEYXR1bSB2 YWx1ZXMgZm9yIHB1cnBvc2VzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hqb2luIGJh dGNoCisgKiBmaWxlcywgZXRjLiBJdCBpcyBlc3NlbnRpYWxseSBhIGR1bWJlZC1kb3duIHZlcnNp b24gb2YgdHVwbGVzb3J0LmM7CisgKiBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzIGJ1dCBj YW4gb25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBzZXF1ZW5jZQorICogb2YgdHVwbGVzLiAg SG93ZXZlciwgYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVpcmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0 YXJ0CisgKiByZWFkaW5nIHRoZSBzZXF1ZW5jZSBiZWZvcmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0 ZW4uCisgKgorICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLCBiZWNh dXNlIGl0IGFsbG93cyByYW5kb20gYWNjZXNzCisgKiB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5l ZCBwb3J0aW9uIG9mIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcgdG8gcHJvY2VzcworICogdGhlIHVu ZGVybHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgogICoKICAqIEEgdGVtcG9yYXJ5IGZpbGUgaXMg dXNlZCB0byBoYW5kbGUgdGhlIGRhdGEgaWYgaXQgZXhjZWVkcyB0aGUKICAqIHNwYWNlIGxpbWl0 IHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgpAQCAtMzksMTQgKzQwLDEzIEBACiAgKi8KIHR5cGVk ZWYgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZSBUdXBsZXN0b3Jlc3RhdGU7CiAKLS8qCi0gKiBDdXJy ZW50bHkgd2Ugb25seSBuZWVkIHRvIHN0b3JlIE1pbmltYWxUdXBsZXMsIGJ1dCBpdCB3b3VsZCBi ZSBlYXN5Ci0gKiB0byBzdXBwb3J0IHRoZSBzYW1lIGJlaGF2aW9yIGZvciBJbmRleFR1cGxlcyBh bmQvb3IgYmFyZSBEYXR1bXMuCi0gKi8KLQogZXh0ZXJuIFR1cGxlc3RvcmVzdGF0ZSAqdHVwbGVz dG9yZV9iZWdpbl9oZWFwKGJvb2wgcmFuZG9tQWNjZXNzLAogCQkJCQkJCQkJCQkgIGJvb2wgaW50 ZXJYYWN0LAogCQkJCQkJCQkJCQkgIGludCBtYXhLQnl0ZXMpOworZXh0ZXJuIFR1cGxlc3RvcmVz dGF0ZSAqdHVwbGVzdG9yZV9iZWdpbl9kYXR1bShPaWQgZGF0dW1UeXBlLAorCQkJCQkJCQkJCQkg ICBib29sIHJhbmRvbUFjY2VzcywKKwkJCQkJCQkJCQkJICAgYm9vbCBpbnRlclhhY3QsCisJCQkJ CQkJCQkJCSAgIGludCBtYXhLQnl0ZXMpOwogCiBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3NldF9l ZmxhZ3MoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgaW50IGVmbGFncyk7CiAKQEAgLTU1LDYgKzU1 LDcgQEAgZXh0ZXJuIHZvaWQgdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3QoVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwKIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dHVwbGUoVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dmFs dWVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIFR1cGxlRGVzYyB0ZGVzYywKIAkJCQkJCQkJIGNv bnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCk7CitleHRlcm4gdm9pZCB0dXBs ZXN0b3JlX3B1dGRhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIERhdHVtIGRhdHVtKTsKIAog ZXh0ZXJuIGludAl0dXBsZXN0b3JlX2FsbG9jX3JlYWRfcG9pbnRlcihUdXBsZXN0b3Jlc3RhdGUg KnN0YXRlLCBpbnQgZWZsYWdzKTsKIApAQCAtNzIsNiArNzMsOCBAQCBleHRlcm4gYm9vbCB0dXBs ZXN0b3JlX2luX21lbW9yeShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKTsKIAogZXh0ZXJuIGJvb2wg dHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3 YXJkLAogCQkJCQkJCQkJYm9vbCBjb3B5LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4g Ym9vbCB0dXBsZXN0b3JlX2dldGRhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9y d2FyZCwKKwkJCQkJCQkJYm9vbCAqc2hvdWxkX2ZyZWUsIERhdHVtICpyZXN1bHQpOwogCiBleHRl cm4gYm9vbCB0dXBsZXN0b3JlX2FkdmFuY2UoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBm b3J3YXJkKTsKIAotLSAKMi40My4wCgo= --00000000000006b179064c8c3b94 Content-Type: application/x-patch; name="v30-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v30-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmi3nci36 RnJvbSA2ZjQxZTc1YTRkODVhOGI0NmQ4OGUzYWQ4N2VmMTg0NDg2ZjhmOWE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjMwIDEvN10gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDIyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggNTkyY2VmNzRl Y2IuLjUxYTYyZGNjYjdiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMTYwZjlkMThkNwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyMjUg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitUZXN0OjpNb3JlLT5idWlsZGVy LT50b2RvX3N0YXJ0KCdmaWxlc3lzdGVtIGJ1ZycpCisgIGlmIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjpoYXNfd2FsX3JlYWRfYnVnOworCitteSAoJG5vZGUsICRyZXN1bHQpOworCisjCisjIFRl c3Qgc2V0LXVwCisjCiskbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnUkNf dGVzdCcpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsCisJJ2xvY2tfdGltZW91dCA9ICcgLiAoMTAwMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGltZW91dF9kZWZhdWx0KSk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICdmc3luYyA9IG9mZicpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCAnbWFpbnRlbmFuY2Vfd29ya19tZW0gPSAzMk1CJyk7ICMgdG8gYXZvaWQgT09NCiskbm9kZS0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsg IyB0byBhdm9pZCBPT00KKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShDUkVBVEUgRVhURU5TSU9OIGFtY2hlY2spKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcShDUkVBVEUgVEFCTEUgdGJsKGkgaW50IHByaW1hcnkga2V5LAorCQkJCQkJCQljMSBt b25leSBkZWZhdWx0IDAsIGMyIG1vbmV5IGRlZmF1bHQgMCwKKwkJCQkJCQkJYzMgbW9uZXkgZGVm YXVsdCAwLCB1cGRhdGVkX2F0IHRpbWVzdGFtcCwKKwkJCQkJCQkJaWEgaW50NFtdLCBwIHBvaW50 KSkpOworIyB1bmNvbW1lbnQgdG8gZm9yY2Ugbm9uLUhPVCAtPiAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gdGJsKGksIHVwZGF0 ZWRfYXQpOykpOworIyBjcmVhdGUgc2VxdWVuY2UKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShDUkVBVEUgVU5MT0dHRUQgU0VRVUVOQ0UgaW5fcm93X3JlYnVpbGQgU1RBUlQgMSBJTkNS RU1FTlQgMTspKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShTRUxFQ1QgbmV4dHZh bCgnaW5fcm93X3JlYnVpbGQnKTspKTsKKworIyBDcmVhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig cHJlZGljYXRlIHRlc3RzCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoCisJQ1JFQVRF IEZVTkNUSU9OIHByZWRpY2F0ZV9zdGFibGUoKSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJTEFO R1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lOCisJCUVYRUNVVEUgJ1NFTEVDVCB0eGlkX2N1cnJl bnQoKSc7CisJCVJFVFVSTiB0cnVlOworCUVORDsgJCQ7CispKTsKKworJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxKAorCUNSRUFURSBGVU5DVElPTiBwcmVkaWNhdGVfY29uc3QoaW50ZWdl cikgUkVUVVJOUyBib29sIElNTVVUQUJMRQorCUxBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwlCRUdJ TgorCQlSRVRVUk4gTU9EKCQxLCAyKSA9IDA7CisJRU5EOyAkJDsKKykpOworCisjIFJ1biBDSUMv UklDIGluIGRpZmZlcmVudCBvcHRpb25zIGNvbmN1cnJlbnRseSB3aXRoIHVwc2VydHMKKyRub2Rl LT5wZ2JlbmNoKAorCSctLW5vLXZhY3V1bSAtLWNsaWVudD0xNSAtLWpvYnM9NCAtLWV4aXQtb24t YWJvcnQgLS10cmFuc2FjdGlvbnM9MTAwMCcsCisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2Vk fV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5ERVgvQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWScsCisJeworCQknY29uY3VycmVudF9vcHMnID0+IHEoCisJ CQlTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7IC0tIHRoaXMgaXMgYmVjYXVzZSBwcmVk aWNhdGVfc3RhYmxlIGltcGxlbWVudGF0aW9uCisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xv Y2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdzZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNF TEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlc c2V0IHZhcmlhbnQgcmFuZG9tKDAsIDUpCisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQp CisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJh bGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpOwor CQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgcHJlZGljYXRlX3N0YWJsZSgpOwor CQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgTU9EKGksIDIpID0gMDsKKwkJCQkJ XGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19p ZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJ XGVsaWYgOnZhcmlhbnQgPSA0CisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19p ZHggT04gdGJsKHByZWRpY2F0ZV9jb25zdChpKSk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gNQor CQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpLCBwcmVkaWNh dGVfY29uc3QoaSksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJ XGVuZGlmCisJCQkJCVxzbGVlcCAxMCBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25l d19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJ CQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEwIG1z CisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+ IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRM WSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIp OworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMTAwMCwgMTAwMDAwKQorCQkJCUJFR0lO OworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAs bm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5v dygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCww LDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9 IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSks MCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9h dCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51 bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRl ZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkq Om51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBk YXRlZF9hdCA9IG5vdygpOworCQkJCVNFTEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7 CisJCQkJQ09NTUlUOworCQkJXGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxKFRSVU5DQVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lDL1JJQyBmb3Ig dW5pcXVlIGluZGV4IGNvbmN1cnJlbnRseSB3aXRoIHVwc2VydHMKKyRub2RlLT5wZ2JlbmNoKAor CSctLW5vLXZhY3V1bSAtLWNsaWVudD0xNSAtLWpvYnM9NCAtLWV4aXQtb24tYWJvcnQgLS10cmFu c2FjdGlvbnM9MTAwMCcsCisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCisJW3Fye14k fV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5ERVgvQ1JFQVRFIElOREVYIENP TkNVUlJFTlRMWSBmb3IgdW5pcXVlIEJUUkVFJywKKwl7CisJCSdjb25jdXJyZW50X29wc191bmlx dWVfaWR4JyA9PiBxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdl ciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgn aW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMg cmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0 YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlDUkVBVEUgVU5JUVVF IElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpKTsKKwkJCQkJXHNsZWVwIDEwIG1z CisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+ IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4OworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4X2No ZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1 ZSk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJ CQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVt IHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElD VChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFs KCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxKFRSVU5DQVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lD L1JJQyBmb3IgR0lOIHdpdGggdXBzZXJ0cworJG5vZGUtPnBnYmVuY2goCisJJy0tbm8tdmFjdXVt IC0tY2xpZW50PTE1IC0tam9icz00IC0tZXhpdC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0xMDAw JywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9jZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3Vy cmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRFWC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZv ciBHSU4vR0lTVC9CUklOL0hBU0gvU1BHSVNUJywKKwl7CisJCSdjb25jdXJyZW50X29wc19naW5f aWR4JyA9PiBxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBB UyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5f cm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFu ZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0Ymwg U0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEdJTiAoaWEpOworCQkJCQlcc2xlZXAgMTAg bXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlSRUlOREVY IElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VM RUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2so NDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgx LCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSww LDAsMCxub3coKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0 ID0gbm93KCk7CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCVxl bmRpZgorCQkpCisJfSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FU RSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9SSUMgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lT VCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgKKwknLS1u by12YWN1dW0gLS1jbGllbnQ9MTUgLS1qb2JzPTQgLS1leGl0LW9uLWFib3J0IC0tdHJhbnNhY3Rp b25zPTEwMDAnLAorCTAsCisJW3Fye2FjdHVhbGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAor CSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJS RU5UTFkgZm9yIEdJTi9HSVNUL0JSSU4vSEFTSC9TUEdJU1QnLAorCXsKKwkJJ2NvbmN1cnJlbnRf b3BzX290aGVyX2lkeCcgPT4gcSgKKwkJCVNFTEVDVCBwZ190cnlfYWR2aXNvcnlfbG9jayg0Mik6 OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rsb2NrCisJCQkJU0VMRUNUIG5l eHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAorCQkJCVxzZXQgcGFy YWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIg VEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJXHNldCB2 YXJpYW50IHJhbmRvbSgwLCAzKQorCQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEdJU1QgKHApOworCQkJCQlc ZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lk eCBPTiB0YmwgVVNJTkcgQlJJTiAodXBkYXRlZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0g MgorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBI QVNIICh1cGRhdGVkX2F0KTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIFNQR0lTVCAocCk7CisJCQkJ CVxlbmRpZgorCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEwIG1zCisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVO VExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0 Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEs IDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAs MCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQg PSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVu ZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjQzLjAKCg== --00000000000006b179064c8c3b94--