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 1w9oaL-001maz-32 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 18:22:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9oaK-00B9Oh-08 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 18:22:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9oaJ-00B9OX-1G for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 18:22:04 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9oaG-00000000wWv-2dzb for pgsql-hackers@postgresql.org; Mon, 06 Apr 2026 18:22:03 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-5a3af1b7549so3619058e87.1 for ; Mon, 06 Apr 2026 11:22:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775499720; cv=none; d=google.com; s=arc-20240605; b=aunsDYzzRqHeU9c43+vUMObIno4+S51PM/rYMJEuzQkp7Q56gBKdS8DJ52mA/kv4a6 hSO7ktqIBGQK5kQ5Dl1b8Hrv/ROFmMLC/7HH6WZMbfW+A/PDNIRaBYscS+KS5Kbdhq1I wlNUiuQ+qApB9KlkaVl7rF58fqcBMLSQNZrO6Q75muf8r8fvhDHAJ7NW8DWhstgyEzzE K1jTCFMwynSLkhrkHas7a8d2u9SO8tX+A4i5L2VuiF5R2LlFNmvxXiedCZ1qa7k6iLdS zUlU3mU24CB9O6ay6B4BbHvGRIaZ2tAIeHa0qXGZe8uVeiYCkq/scY2HzRergzvMecTv JB3A== 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=9vZCenncrQ05335IKXJFraYvQBYxNHXgSRRvWLZbXmo=; fh=sqJLJBzM+qFQGbSLxx7/S0Y7kafUX7Yagz7dEWRowsw=; b=VT5yHWHIjQM58dkxRl9LA6Jl7eS3ijxVWU8u6O+3taxvV24SZR5x9gVvsSuFYV4+2l 27x9Yts34Ex0EZtVWFFyANCrsUHwjt/cDBL74zD70ido+Siooyjng6rfssmLBW9BtWPc l6rm8b+p16WJlJJPH61CXNc7Xads9yFh1IhZEkleFPYepqw8OOJ0P0lqKaZjrDdJ6ncB yxXGYRmecJO1+G86lUvCZEpr3fMv00QuQVDNDzegzgQJi3RqomXASok7J2v49h4vvPUH H8EZSw1FEtGx8tse4DU1vHayMQiTmPRL9x++nlYUIOiW2Gq3loUqeXw5fZ0LSDUD0fkQ d76Q==; 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=20251104; t=1775499720; x=1776104520; 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=9vZCenncrQ05335IKXJFraYvQBYxNHXgSRRvWLZbXmo=; b=pI4C3BU3FIWjxebwARsMkIrTFpbYL9QelXZxLSpD1QmxXmPfJMiiKH+bmk9BooBh3i deahGDp+WU6l0FX5dbk7wS4Pr+IqiTtkP0/m9jz8GPz5CHsuiS54CZyTSjWftFFuGWiS 5K6AVq2AwqCHhG1H1L3zQOE+W66b/o3a9o3EKOyAPjIHNlGX77UTSgih4YxuLRy/otBA MID+ts14PvfzjnPF2ekh+Z4PJpvI5RiaJLCcbXhMh2md9d+lb84LeEcl4JWJSa2PhEMU jLt5yYiyr0w4yj8m+PGATuz86y/3Mt3IHJOF/KbhNXftItG4qHWsDeSmDihzTBY5cxJj JKnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775499720; x=1776104520; 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=9vZCenncrQ05335IKXJFraYvQBYxNHXgSRRvWLZbXmo=; b=f4zE2LKE1D1kyAQLW0HLhqdyhBTxfISsmw4ktsUi/e2cNoDU0t2zzO35GNdOIZryCC eCLQn+v73nO7j4rWdJz8+/wknqIAirKrXaJsn/6oQNKMgcKEpB40o68JacDXMO9kFrvL aXbO9pOCIZNHE6psBFEji4euijOjLMPmgFpZc0eLw/rElr8NDXBWS3Ik+jEquQ3U7RHo 1EpLTET/X7k4a5TIBI3o9DcZ9c2WBF2HmeTVTLATzvSikPXMEzmtZvzdkh5MO8Q9Fqc6 AeSu04Spmd9A5Fl6+2MA0ktsxEa5Z6baUjSh/bKsKCd55zeDAg19uOkAK9CUjO1kWlCJ wM6Q== X-Forwarded-Encrypted: i=1; AJvYcCUwDbVq/9a3lAkqNrpsZXJrEkUG/7XQbWeOwc/AjpBfa6dXEx65/0CPyyrePo2tIS7QgmPqkirY75Kqu046@postgresql.org X-Gm-Message-State: AOJu0Yz5Hh4etU+og9F8nzvkFSx89qdH3IdqFbauyVuuqLIaEkrNEo66 CYVDsyUHzOm1b86SbYoFjsVhvjRCIHyEFTifCOz1wOf7q0UK09ygnKfPAIVCDR+WBeM2zLAN641 nBgOUQ4pc25xs1VRw8xsQknQORQsg4a4= X-Gm-Gg: AeBDietsViY9JuPcaXEYyhRK+gwLSqzssd3D8XF1bFgDSqNWBa/UvAq91kUcLidOBAE WNBm8z7nHUA/zkHAZu1DNqTTPSzMPPYY6/yeEY+S8N9dQhEtbKPt+vKXRXhxl+bOlxpLE4EM6Ot jEhZXm+nanjpvJGiHVM1FD2u8bXWoHSeTNaIvAIlRVKCgZr7lj9/odt8vqGcXeSHZ78K4wyuhP9 hpocjDU+6wyy1cFzvwkjO2rlTtvRr1rO9Nois09maQUHDufYNuv9E1zfzRXEMZXJLIP5C0KVyMq KuIdHDgYpW1IkQ2hVbWpINbKBQ4agSSKBSBwr8fMjQnt1WcYlRQeTaQE03LItU7cgiAb X-Received: by 2002:ac2:4bc1:0:b0:5a2:c0cf:451c with SMTP id 2adb3069b0e04-5a33757d100mr5284314e87.24.1775499719314; Mon, 06 Apr 2026 11:21:59 -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, 6 Apr 2026 20:21:00 +0200 X-Gm-Features: AQROBzCtsaT4vvA3XBBQcxbeFvQWZld8GQg5o6aiZoFfHS7fIKD9oyLMbxpMRgU 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="00000000000011d953064ecebe56" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000011d953064ecebe56 Content-Type: text/plain; charset="UTF-8" Rebased once again. --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v34-0002-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtjx1 RnJvbSA4NDgwNWY3ZjNjMWI5Nzk0MWVmN2VjYWVmY2JjMjBjNzhhYWNhOTdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMSBKYW4gMjAyNiAxOToyNzo1MiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDIvN10gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSIChTaG9ydC1UZXJtIEluZGV4IFJlcGxhY2VtZW50KSBhY2Nlc3MgbWV0aG9k IGlzIGludHJvZHVjZWQsIGludGVuZGVkIHNvbGVseSBmb3Igc2hvcnQtbGl2ZWQsIGF1eGlsaWFy eSB1c2FnZQoKU1RJUiBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIGFzIGFuIGVwaGVtZXJhbCBoZWxw ZXIgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzLCB0ZW1wb3JhcmlseSBzdG9yaW5nIFRJ RHMgd2l0aG91dCBwcm92aWRpbmcgdGhlIGZ1bGwgZmVhdHVyZXMgb2YgYSB0eXBpY2FsIGFjY2Vz cyBtZXRob2QuIEFzIHN1Y2gsIGl0IHJhaXNlcyB3YXJuaW5ncyBvciBlcnJvcnMgd2hlbiBhY2Nl c3NlZCBvdXRzaWRlIGl0cyBzcGVjaWFsaXplZCB1c2FnZSBwYXRoLgoKUGxhbm5lZCB0byBiZSB1 c2VkIGluIGZvbGxvd2luZyBjb21taXRzLgotLS0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0 dHVwbGUuYyAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUgICAgICAgICB8ICAxOCArCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9zdGlyL3N0aXIuYyAgICAgICAgICAgfCA1NjcgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmggICAgICAgICAgICAgICAgfCAx MTAgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0ICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdCAgICAgICB8ICAgNCArCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhf c2VsZnVuY3MuaCAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0ICAgIHwgICA4ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0IHwgICA3ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgIHwg IDI0ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA3NjUgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKCmRpZmYgLS1naXQgYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKaW5kZXggNmE3ZjhjYjRhN2MuLjViNTk4NGUzYWEyIDEwMDY0NAotLS0gYS9jb250 cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jCkBAIC0yODUsNiArMjg1LDkgQEAgcGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9u IHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAJCQljYXNlIFNQR0lTVF9BTV9PSUQ6CiAJ CQkJZXJyID0gInNwZ2lzdCBpbmRleCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNUSVJfQU1fT0lE OgorCQkJCWVyciA9ICJzdGlyIGluZGV4IjsKKwkJCQlicmVhazsKIAkJCWNhc2UgQlJJTl9BTV9P SUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCmlu ZGV4IGU4OGQ3MmVhMDM5Li5lYmJjZmE5MDcxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQpAQCAtMTksNiAr MTksNyBAQCBTVUJESVJTCSAgICA9IFwKIAluYnRyZWUgXAogCXJtZ3JkZXNjIFwKIAlzcGdpc3Qg XAorCXN0aXIgXAogCXNlcXVlbmNlIFwKIAl0YWJsZSBcCiAJdGFibGVzYW1wbGUgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDg4YzcxY2Q4NWI2Li4xOWNmZGZkMjY0MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzAxMiw2ICszMDEyLDcgQEAg bGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0 cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRh dGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzA2Myw2ICszMDY0LDcgQEAgbGF6 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 MDAwLi45MzI1OTBkOWNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL3N0aXIuYwpAQCAtMCwwICsxLDU2NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog c3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1l bnQuCisgKgorICogU1RJUiBpcyBhIHNwZWNpYWxpemVkIGFjY2VzcyBtZXRob2QgdHlwZSBkZXNp Z25lZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIG9mIFRJRCB2YWx1ZXMgZHVyaW5nIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgdHlwaWNhbCBsaWZlY3lj bGUgb2YgYSBTVElSIGluZGV4IGlzOgorICogMS4gY3JlYXRlZCBhcyBhbiBhdXhpbGlhcnkgaW5k ZXggZm9yIENJQy9SSUMKKyAqIDIuIGFjY2VwdHMgaW5zZXJ0cyBmb3IgYSBwZXJpb2QKKyAqIDMu IHN0aXJidWxrZGVsZXRlIGNhbGxlZCBkdXJpbmcgaW5kZXggdmFsaWRhdGlvbiBwaGFzZQorICog NC4gZ2V0cyBkcm9wcGVkCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL3N0aXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbXZhbGlk YXRlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vz cy9zdGlyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbW9wLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg 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+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1fT1BUSU9OX05PX1BBUkFMTEVM OworCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsKKworCS8qIFNldCB1cCBmdW5j dGlvbiBjYWxsYmFja3MgKi8KKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7CisJYW1y b3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUtPmFtaW5z ZXJ0ID0gc3Rpcmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRpbmUtPmFt dmFjdXVtY2xlYW51cCA9IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1jYW5yZXR1 cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVzdGltYXRl OworCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXBy b3BlcnR5ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOworCWFt cm91dGluZS0+YW12YWxpZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFtYWRqdXN0 bWVtYmVycyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdpbnNjYW47 CisJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5hbWdldHR1 cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IHN0aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRVUk5fUE9J TlRFUihhbXJvdXRpbmUpOworfQorCisvKgorICogVmFsaWRhdGVzIG9wZXJhdG9yIGNsYXNzIGZv ciBTVElSIGluZGV4LgorICoKKyAqIFNUSVIgaXMgbm90IGEgcmVhbCBpbmRleCwgc28gdmFsaWRh dGUgbWF5IGJlIHNraXBwZWQuCisgKiBCdXQgd2UgZG8gaXQganVzdCBmb3IgY29uc2lzdGVuY3ku CisgKi8KK2Jvb2wKK3N0aXJ2YWxpZGF0ZShPaWQgb3BjbGFzc29pZCkKK3sKKwlib29sIHJlc3Vs dCA9IHRydWU7CisJSGVhcFR1cGxlIGNsYXNzdHVwOworCUZvcm1fcGdfb3BjbGFzcyBjbGFzc2Zv cm07CisJT2lkIG9wZmFtaWx5b2lkOworCUhlYXBUdXBsZSBmYW1pbHl0dXA7CisJRm9ybV9wZ19v cGZhbWlseSBmYW1pbHlmb3JtOworCWNoYXIgKm9wZmFtaWx5bmFtZTsKKwlDYXRDTGlzdCAqb3By bGlzdDsKKwlpbnQgaTsKKworCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KKwljbGFz c3R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BjbGFzc29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBjbGFzcyAldSIsIG9wY2xhc3NvaWQpOwor CWNsYXNzZm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChjbGFzc3R1cCk7CisKKwlv cGZhbWlseW9pZCA9IGNsYXNzZm9ybS0+b3BjZmFtaWx5OworCisJLyogRmV0Y2ggb3BmYW1pbHkg aW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs IE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3Bm YW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihm YW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBv cnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNo ZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCisJ LyogQ2hlY2sgaW5kaXZpZHVhbCBvcGVyYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3BybGlz dC0+bl9tZW1iZXJzOyBpKyspCisJeworCQlIZWFwVHVwbGUgb3BydHVwID0gJm9wcmxpc3QtPm1l bWJlcnNbaV0tPnR1cGxlOworCQlGb3JtX3BnX2Ftb3Agb3ByZm9ybSA9IChGb3JtX3BnX2Ftb3Ap IEdFVFNUUlVDVChvcHJ0dXApOworCisJCS8qIENoZWNrIGl0J3MgYWxsb3dlZCBzdHJhdGVneSBm b3Igc3RpciAqLworCQlpZiAob3ByZm9ybS0+YW1vcHN0cmF0ZWd5IDwgMSB8fAorCQkJb3ByZm9y bS0+YW1vcHN0cmF0ZWd5ID4gU1RJUl9OU1RSQVRFR0lFUykKKwkJeworCQkJZXJlcG9ydChJTkZP LAorCQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04p LAorCQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIG9wZXJhdG9y ICVzIHdpdGggaW52YWxpZCBzdHJhdGVneSBudW1iZXIgJWQiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wciks CisJCQkJCSAgICAgICAgb3ByZm9ybS0+YW1vcHN0cmF0ZWd5KSkpOworCQkJcmVzdWx0ID0gZmFs c2U7CisJCX0KKworCQkvKiBzdGlyIGRvZXNuJ3Qgc3VwcG9ydCBPUkRFUiBCWSBvcGVyYXRvcnMg Ki8KKwkJaWYgKG9wcmZvcm0tPmFtb3BwdXJwb3NlICE9IEFNT1BfU0VBUkNIIHx8CisJCQlPaWRJ c1ZhbGlkKG9wcmZvcm0tPmFtb3Bzb3J0ZmFtaWx5KSkKKwkJeworCQkJZXJlcG9ydChJTkZPLAor CQkJICAgICAgICAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAor CQkJCSAgICAgICAgZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkgICAgICAgIG9wZmFt aWx5bmFtZSwKKwkJCQkJICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikp KSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIENoZWNrIG9wZXJhdG9yIHNpZ25h dHVyZSAtLS0gc2FtZSBmb3IgYWxsIHN0aXIgc3RyYXRlZ2llcyAqLworCQlpZiAoIWNoZWNrX2Ft b3Bfc2lnbmF0dXJlKG9wcmZvcm0tPmFtb3BvcHIsIEJPT0xPSUQsCisJCSAgICAgICAgICAgICAg ICAgICAgICAgICAgb3ByZm9ybS0+YW1vcGxlZnR0eXBlLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wcmZvcm0tPmFtb3ByaWdodHR5cGUpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJ CQkgICAgICAgIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJ CQkJICAgICAgICBlcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMg d2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkgICAgICAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJ ICAgICAgICBmb3JtYXRfb3BlcmF0b3Iob3ByZm9ybS0+YW1vcG9wcikpKSk7CisJCQlyZXN1bHQg PSBmYWxzZTsKKwkJfQorCX0KKworCVJlbGVhc2VDYXRDYWNoZUxpc3Qob3BybGlzdCk7CisJUmVs ZWFzZVN5c0NhY2hlKGZhbWlseXR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGEtcGFnZSBvZiBhIFNU SVIgaW5kZXguCisgKiBUaGUgc2tpcEluc2VydHMgZmxhZyBkZXRlcm1pbmVzIGlmIG5ldyBpbnNl cnRzIHdpbGwgYmUgYWNjZXB0ZWQgb3Igc2tpcHBlZC4KKyAqLwordm9pZAorU3RpckZpbGxNZXRh cGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cykKK3sK KwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCVN0aXJJbml0UGFnZShtZXRhUGFnZSwg U1RJUl9NRVRBKTsKKwltZXRhZGF0YSA9IFN0aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisJbWVt c2V0KG1ldGFkYXRhLCAwLCBzaXplb2YoU3Rpck1ldGFQYWdlRGF0YSkpOworCW1ldGFkYXRhLT5t YWdpY051bWJlciA9IFNUSVJfTUFHSUNfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9 IHNraXBJbnNlcnRzOworCSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciA9ICgoY2hh ciAqKSBtZXRhZGF0YSArIHNpemVvZihTdGlyTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBtZXRh UGFnZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWV0YXBhZ2UgZm9y IGEgU1RJUiBpbmRleC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbmRleCBjcmVhdGlvbi4K KyAqLwordm9pZAorU3RpckluaXRNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgRm9ya051bWJlciBm b3JrbnVtKQoreworCUJ1ZmZlciBtZXRhQnVmZmVyOworCVBhZ2UgbWV0YVBhZ2U7CisKKwlBc3Nl cnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwkvKgorCSAqIE1ha2UgYSBuZXcgcGFnZTsg c2luY2UgaXQgaXMgdGhlIGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAor CSAqIGJsb2NrIG51bWJlciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQgdG8gaG9s ZCB0aGUgZXh0ZW5zaW9uCisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBjb25jdXJy ZW50IGluc2VydGVycyB5ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRl ZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tCdWZmZXIo bWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwltZXRhUGFn ZSA9IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJU3RpckZpbGxNZXRhcGFnZShpbmRleCwg bWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKTsKKworCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBhbnkgcGFnZSBvZiBhIHN0aXIgaW5kZXguCisgKi8KK3ZvaWQKK1N0aXJJ bml0UGFnZShQYWdlIHBhZ2UsIHVpbnQxNiBmbGFncykKK3sKKwlTdGlyUGFnZU9wYXF1ZSBvcGFx dWU7CisKKwlQYWdlSW5pdChwYWdlLCBCTENLU1osIHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEp KTsKKworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW9wYXF1ZS0+ZmxhZ3Mg PSBmbGFnczsKKwlvcGFxdWUtPnN0aXJfcGFnZV9pZCA9IFNUSVJfUEFHRV9JRDsKK30KKworLyoK KyAqIEFkZCBhIHR1cGxlIHRvIGEgU1RJUiBwYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0dXBs ZSBkb2Vzbid0IGZpdC4KKyAqIFRoZSB0dXBsZSBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBw YWdlLgorICovCitzdGF0aWMgYm9vbAorU3RpclBhZ2VBZGRJdGVtKFBhZ2UgcGFnZSwgU3RpclR1 cGxlICp0dXBsZSkKK3sKKwlTdGlyVHVwbGUgKml0dXA7CisJU3RpclBhZ2VPcGFxdWUgb3BhcXVl OworCWNoYXIgKnB0cjsKKworCS8qIFdlIHNob3VsZG4ndCBiZSBwb2ludGVkIHRvIGFuIGludmFs aWQgcGFnZSAqLworCUFzc2VydCghUGFnZUlzTmV3KHBhZ2UpKTsKKworCS8qIERvZXMgdGhlIG5l dyB0dXBsZSBmaXQgb24gdGhlIHBhZ2U/ICovCisJaWYgKFN0aXJQYWdlR2V0RnJlZVNwYWNlKHBh Z2UpIDwgc2l6ZW9mKFN0aXJUdXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENvcHkgYSBu ZXcgdHVwbGUgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSAqLworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0 T3BhcXVlKHBhZ2UpOworCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBhZ2UsIG9wYXF1ZS0+bWF4 b2ZmICsgMSk7CisJbWVtY3B5KGl0dXAsIHR1cGxlLCBzaXplb2YoU3RpclR1cGxlKSk7CisKKwkv KiBBZGp1c3QgbWF4b2ZmIGFuZCBwZF9sb3dlciAqLworCW9wYXF1ZS0+bWF4b2ZmKys7CisJcHRy ID0gKGNoYXIgKikgU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOwor CSgoUGFnZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyID0gcHRyIC0gcGFnZTsKKworCS8qIEFzc2Vy dCB3ZSBkaWRuJ3Qgb3ZlcnJ1biBhdmFpbGFibGUgc3BhY2UgKi8KKwlBc3NlcnQoKChQYWdlSGVh ZGVyKSBwYWdlKS0+cGRfbG93ZXIgPD0gKChQYWdlSGVhZGVyKSBwYWdlKS0+cGRfdXBwZXIpOwor CXJldHVybiB0cnVlOworfQorCisvKgorICogSW5zZXJ0IGEgbmV3IHR1cGxlIGludG8gYSBTVElS IGluZGV4LgorICovCitib29sCitzdGlyaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBEYXR1bSAqdmFs dWVzLCBib29sICppc251bGwsCisJCSAgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVh cFJlbCwKKwkJICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkgIGJvb2wgaW5kZXhV bmNoYW5nZWQsCisJCSAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCVN0aXJUdXBs ZSBpdHVwOworCVN0aXJNZXRhUGFnZURhdGEgKm1ldGFEYXRhOworCUJ1ZmZlciBidWZmZXIsCisJ CQltZXRhQnVmZmVyOworCVBhZ2UgcGFnZTsKKwlCbG9ja051bWJlciBibGtObzsKKworCWl0dXAu aGVhcFB0ciA9ICpodF9jdGlkOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FMKGluZGV4KSk7 CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0VfQkxLTk8pOwor CisJZm9yICg7OykKKwl7CisJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZm ZXIpKTsKKwkJLyogQ2hlY2sgaWYgaW5zZXJ0cyBhcmUgYWxsb3dlZCAqLworCQlpZiAobWV0YURh dGEtPnNraXBJbnNlcnRzKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWJsa05vID0gbWV0YURhdGEtPmxhc3RCbGtObzsK KwkJLyogRG9uJ3QgaG9sZCBtZXRhYnVmZmVyIGxvY2sgd2hpbGUgZG9pbmcgaW5zZXJ0ICovCisJ CUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKworCQlpZiAoYmxr Tm8gPiAwKQorCQl7CisJCQlidWZmZXIgPSBSZWFkQnVmZmVyKGluZGV4LCBibGtObyk7CisJCQlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNOZXcocGFnZSkpOworCisJ CQkvKiBUcnkgdG8gYWRkIHR1cGxlIHRvIHRoZSBleGlzdGluZyBwYWdlICovCisJCQlpZiAoU3Rp clBhZ2VBZGRJdGVtKHBhZ2UsICZpdHVwKSkKKwkJCXsKKwkJCQkvKiBTdWNjZXNzISAgQXBwbHkg dGhlIGNoYW5nZSwgY2xlYW4gdXAsIGFuZCBleGl0ICovCisJCQkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQkJUmVsZWFzZUJ1 ZmZlcihtZXRhQnVmZmVyKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJfQorCisJCS8qIE5lZWQgdG8gYWRkIGEgbmV3IHBhZ2Ug LSBnZXQgZXhjbHVzaXZlIGxvY2sgb24gbWV0YS1wYWdlICovCisJCUxvY2tCdWZmZXIobWV0YUJ1 ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0 TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZmZXIpKTsKKworCQkvKiBSZS1jaGVjayBhZnRlciBh Y3F1aXJpbmcgZXhjbHVzaXZlIGxvY2sgKi8KKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5zZXJ0cykK KwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFub3RoZXIgYmFja2VuZCBhbHJlYWR5IGV4dGVuZGVk IHRoZSBpbmRleCAqLworCQlpZiAoYmxrTm8gIT0gbWV0YURhdGEtPmxhc3RCbGtObykKKwkJewor CQkJQXNzZXJ0KGJsa05vIDwgbWV0YURhdGEtPmxhc3RCbGtObyk7CisJCQkvKiBTb21lb25lIGVs c2UgaW5zZXJ0ZWQgdGhlIG5ldyBwYWdlIGludG8gdGhlIGluZGV4LCBsZXQncyB0cnkgYWdhaW4g Ki8KKwkJCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCWNv bnRpbnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTXVzdCBleHRlbmQgdGhlIGZpbGUgKi8K KwkJCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZPUktO VU0sIE5VTEwsCisJCQkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKKwkJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcik7CisKKwkJCVN0aXJJbml0UGFnZShwYWdlLCAwKTsKKworCQkJaWYgKCFT dGlyUGFnZUFkZEl0ZW0ocGFnZSwgJml0dXApKQorCQkJeworCQkJCS8qIFdlIHNob3VsZG4ndCBi ZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2VydGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJCQkJZWxv ZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQgbmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFnZSIpOwor CQkJfQorCisJCQkvKiBVcGRhdGUgbWV0YS1wYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sgbnVtYmVy ICovCisJCQltZXRhRGF0YS0+bGFzdEJsa05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVy KTsKKworCQkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZlckRpcnR5 KGJ1ZmZlcik7CisKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCVVubG9ja1Jl bGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30K KworLyoKKyAqIFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2UgZnVuY3Rpb25zIGFs bCBlcnJvciBvdXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2NhbihSZWxhdGlvbiBy LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJICBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVu dGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18pKSk7 Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93ZWQgZm9yIGF1eGls aWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YS1wYWdlIHdpdGhvdXQg YW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3RpcmJ1aWxkKFJlbGF0 aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlmICghaW5kZXhJbmZv LT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJCdWlsZGluZyBTVElSIGluZGV4ZXMgaXMgbm90IHN1 cHBvcnRlZCIpKSk7CisKKwlTdGlySW5pdE1ldGFwYWdlKGluZGV4LCBNQUlOX0ZPUktOVU0pOwor CisJcmVzdWx0ID0gKEluZGV4QnVpbGRSZXN1bHQgKikgcGFsbG9jKHNpemVvZihJbmRleEJ1aWxk UmVzdWx0KSk7CisJcmVzdWx0LT5oZWFwX3R1cGxlcyA9IDA7CisJcmVzdWx0LT5pbmRleF90dXBs ZXMgPSAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3RpcmJ1aWxkZW1wdHkoUmVsYXRp b24gaW5kZXgpCit7CisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgSU5JVF9GT1JLTlVNKTsKK30K KworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoKK3N0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5m byAqaW5mbywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAorCQkJCQkJ CQkJIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkJIHZvaWQgKmNh bGxiYWNrX3N0YXRlKQoreworCVJlbGF0aW9uIGluZGV4ID0gaW5mby0+aW5kZXg7CisJQmxvY2tO dW1iZXIgYmxrbm8sIG5wYWdlczsKKwlCdWZmZXIgYnVmZmVyOworCVBhZ2UgcGFnZTsKKworCS8q CisJICogRm9yIG5vcm1hbCBWQUNVVU0sIG1hcmsgdG8gc2tpcCBpbnNlcnRzIGFuZCB3YXJuIGFi b3V0IGFuIGluZGV4IGRyb3AKKwkgKiBuZWVkZWQuICBJbiBwcmFjdGljZSB0aGlzIHBhdGggaXMg bm90IHJlYWNoYWJsZSBkdXJpbmcgQ1JFQVRFIElOREVYCisJICogQ09OQ1VSUkVOVExZIGJlY2F1 c2UgdGhlIHRhYmxlLWxldmVsIGxvY2tzIGhlbGQgYnkgQ0lDIHByZXZlbnQgY29uY3VycmVudAor CSAqIFZBQ1VVTSBmcm9tIG9wZW5pbmcgdGhlIGF1eGlsaWFyeSBpbmRleC4gIEl0IGNhbiBvbmx5 IGJlIHJlYWNoZWQgaWYgYQorCSAqIGxlZnRvdmVyIFNUSVIgaW5kZXggc29tZWhvdyBzdXJ2aXZl cyBhZnRlciBhIGZhaWxlZCBDSUMgYW5kIGEgbGF0ZXIKKwkgKiBWQUNVVU0gZW5jb3VudGVycyBp dC4KKwkgKi8KKwlpZiAoIWluZm8tPnZhbGlkYXRlX2luZGV4KQorCXsKKwkJU3Rpck1hcmtBc1Nr aXBJbnNlcnRzKGluZGV4KTsKKworCQllcmVwb3J0KFdBUk5JTkcsIChlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVt ZW50ZWQsIHNlZW1zIGxpa2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5j X18pKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0cyA9PSBOVUxMKQorCQlzdGF0 cyA9IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVs ZXRlUmVzdWx0KSk7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgcGFnZXMuIFdlIGRvbid0 IGNhcmUgYWJvdXQgY29uY3VycmVudGx5IGFkZGVkIHBhZ2VzLAorCSAqIGJlY2F1c2UgdGhlIGlu ZGV4IGlzIG1hcmtlZCBhcyBub3QtcmVhZHkgZm9yIHRoYXQgbW9tZW50IGFuZCB0aGUgaW5kZXgg aXMgbm90CisJICogdXNlZCBmb3IgaW5zZXJ0LgorCSAqLworCW5wYWdlcyA9IFJlbGF0aW9uR2V0 TnVtYmVyT2ZCbG9ja3MoaW5kZXgpOworCWZvciAoYmxrbm8gPSBTVElSX0hFQURfQkxLTk87IGJs a25vIDwgbnBhZ2VzOyBibGtubysrKQorCXsKKwkJU3RpclR1cGxlICppdHVwLCAqaXR1cEVuZDsK KworCQl2YWN1dW1fZGVsYXlfcG9pbnQoZmFsc2UpOworCisJCWJ1ZmZlciA9IFJlYWRCdWZmZXJF eHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKKwkJCQkJCQkJCVJCTV9OT1JNQUws IGluZm8tPnN0cmF0ZWd5KTsKKworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCisJCWlmIChQYWdlSXNOZXco cGFnZSkpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJaXR1cCA9IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgRmlyc3RPZmZzZXROdW1i ZXIpOworCQlpdHVwRW5kID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBPZmZzZXROdW1iZXJOZXh0 KFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpKSk7CisJCXdoaWxlIChpdHVwIDwgaXR1cEVuZCkK KwkJeworCQkJLyogRG8gd2UgaGF2ZSB0byBkZWxldGUgdGhpcyB0dXBsZT8gKi8KKwkJCWlmIChj YWxsYmFjaygmaXR1cC0+aGVhcFB0ciwgY2FsbGJhY2tfc3RhdGUpKQorCQkJeworCQkJCWVyZXBv cnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNn KCJ3ZSBuZXZlciBkZWxldGUgaW4gc3RpciIpKSk7CisJCQl9CisKKwkJCWl0dXAgPSBTdGlyUGFn ZUdldE5leHRUdXBsZShpdHVwKTsKKwkJfQorCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVy KTsKKwl9CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qCisgKiBNYXJrIGEgU1RJUiBpbmRleCB0 byBza2lwIGZ1dHVyZSBpbnNlcnRzCisgKi8KK3ZvaWQKK1N0aXJNYXJrQXNTa2lwSW5zZXJ0cyhS ZWxhdGlvbiBpbmRleCkKK3sKKwlTdGlyTWV0YVBhZ2VEYXRhICptZXRhRGF0YTsKKwlCdWZmZXIg bWV0YUJ1ZmZlcjsKKwlQYWdlIG1ldGFQYWdlOworCisJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FM KGluZGV4KSk7CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIFNUSVJfTUVUQVBBR0Vf QkxLTk8pOworCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsK KworCW1ldGFQYWdlID0gQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKTsKKwltZXRhRGF0YSA9IFN0 aXJQYWdlR2V0TWV0YShtZXRhUGFnZSk7CisKKwlpZiAoIW1ldGFEYXRhLT5za2lwSW5zZXJ0cykK Kwl7CisJCW1ldGFEYXRhLT5za2lwSW5zZXJ0cyA9IHRydWU7CisJCU1hcmtCdWZmZXJEaXJ0eSht ZXRhQnVmZmVyKTsKKwl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKwor LyoKKyAqIEFzIHdpdGggc3RpcmJ1bGtkZWxldGUsIHRoaXMgaXMgbm90IHJlYWNoYWJsZSBkdXJp bmcgYSBub3JtYWwgQ0lDIGR1ZSB0bworICogdGFibGUtbGV2ZWwgbG9ja2luZy4gIEl0IHNlcnZl cyBhcyBhIHNhZmV0eSBuZXQgZm9yIGxlZnRvdmVyIFNUSVIgaW5kZXhlcworICogZnJvbSBmYWls ZWQgY29uY3VycmVudCBpbmRleCBidWlsZHMuCisgKi8KK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAq CitzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJICBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKnN0YXRzKQoreworCVN0aXJNYXJrQXNTa2lwSW5zZXJ0cyhpbmZvLT5p bmRleCk7CisJZXJlcG9ydChXQVJOSU5HLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCisJCQllcnJtc2coIlwiJXNcIiBpcyBub3QgaW1wbGVtZW50ZWQsIHNlZW1zIGxp a2UgdGhpcyBpbmRleCBuZWVkcyB0byBiZSBkcm9wcGVkIiwgX19mdW5jX18pKSk7CisJcmV0dXJu IE5VTEw7Cit9CisKK2J5dGVhICoKK3N0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wg dmFsaWRhdGUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3N0aXJjb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwKKwkJCQkJIGRvdWJsZSBsb29wX2Nv dW50LCBDb3N0ICppbmRleFN0YXJ0dXBDb3N0LAorCQkJCQkgQ29zdCAqaW5kZXhUb3RhbENvc3Qs IFNlbGVjdGl2aXR5ICppbmRleFNlbGVjdGl2aXR5LAorCQkJCQkgZG91YmxlICppbmRleENvcnJl bGF0aW9uLCBkb3VibGUgKmluZGV4UGFnZXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgaW1w bGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA5NDA3YzM1N2Yy Ny4uY2MwNjdlNThkMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM0MzIsNiArMzQzMiw3IEBAIHZh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkK IAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVz ID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBO VUxMOworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IHRydWU7CiAKIAkvKgogCSAqIEVuY29kZSBU SURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29y dGluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IDRhYTUyYTRiZDI1Li5kN2VhODZiMjgwNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMzE0LDYgKzMxNCw3IEBAIGNyZWF0ZV90b2FzdF90 YWJsZShSZWxhdGlvbiByZWwsIE9pZCB0b2FzdE9pZCwgT2lkIHRvYXN0SW5kZXhPaWQsCiAJaW5k ZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPSAwOwogCWluZGV4SW5mby0+aWlfQW0gPSBCVFJF RV9BTV9PSUQ7CiAJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0gTlVMTDsKKwlpbmRleEluZm8tPmlp X0F1eGlsaWFyeSA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRzWzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fu YWx5emUuYwppbmRleCA0OWE1Y2RmNTc5Yy4uY2JlYjQ5MDUwY2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFs eXplLmMKQEAgLTcyNiw2ICs3MjYsNyBAQCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWws IGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBl bGV2ZWw7CiAJCQlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1 cGxlczsKIAkJCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxp ZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZp dmluZm8sIE5VTEwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1w YXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCA3 NzgzNGI5NmEyMS4uMTY3MWMzYzIxOTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxs ZWwuYwpAQCAtODk2LDYgKzg5Niw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRl eChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIFJlbGF0aW9uIGluZHJlbCwKIAlpdmluZm8uZXN0 aW1hdGVkX2NvdW50ID0gcHZzLT5zaGFyZWQtPmVzdGltYXRlZF9jb3VudDsKIAlpdmluZm8ubnVt X2hlYXBfdHVwbGVzID0gcHZzLT5zaGFyZWQtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kg PSBwdnMtPmJzdHJhdGVneTsKKwlpdmluZm8udmFsaWRhdGVfaW5kZXggPSBmYWxzZTsKIAogCS8q IFVwZGF0ZSBlcnJvciB0cmFjZWJhY2sgaW5mb3JtYXRpb24gKi8KIAlwdnMtPmluZG5hbWUgPSBw c3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZHJlbCkpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YwppbmRleCAzY2QzNWM1YzQ1Ny4uNTM1OWRhYjExNzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBA IC04NzUsNiArODc1LDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlh dHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4 LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNl OwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7CisJbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7 CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0Ft ID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IGI2OTMyMGE3ZmM4Li4xYTVkZTRiNjkxYSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKQEAgLTU4LDYgKzU4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1J bmZvCiAJYm9vbAkJZXN0aW1hdGVkX2NvdW50OwkvKiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0 aW1hdGUgKi8KIAlpbnQJCQltZXNzYWdlX2xldmVsOwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9n cmVzcyBtZXNzYWdlcyAqLwogCWRvdWJsZQkJbnVtX2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVt YWluaW5nIGluIGhlYXAgKi8KKwlib29sCQl2YWxpZGF0ZV9pbmRleDsgLyogdmFsaWRhdGluZyBj b25jdXJyZW50bHkgYnVpbHQgaW5kZXg/ICovCiAJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3k7CS8qIGFjY2VzcyBzdHJhdGVneSBmb3IgcmVhZHMgKi8KIH0gSW5kZXhWYWN1dW1JbmZvOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAppbmRleCBlOGNiN2Y3YTYyNy4uN2YzZjA4YTcwYWMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaApAQCAtNTEsOCArNTEsOSBAQCB0eXBlZGVmIGVudW0gcmVs b3B0X2tpbmQKIAlSRUxPUFRfS0lORF9WSUVXID0gKDEgPDwgOSksCiAJUkVMT1BUX0tJTkRfQlJJ TiA9ICgxIDw8IDEwKSwKIAlSRUxPUFRfS0lORF9QQVJUSVRJT05FRCA9ICgxIDw8IDExKSwKKwlS RUxPUFRfS0lORF9TVElSID0gKDEgPDwgMTIpLAogCS8qIGlmIHlvdSBhZGQgYSBuZXcga2luZCwg bWFrZSBzdXJlIHlvdSB1cGRhdGUgImxhc3RfZGVmYXVsdCIgdG9vICovCi0JUkVMT1BUX0tJTkRf TEFTVF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfUEFSVElUSU9ORUQsCisJUkVMT1BUX0tJTkRfTEFT VF9ERUZBVUxUID0gUkVMT1BUX0tJTkRfU1RJUiwKIAkvKiBzb21lIGNvbXBpbGVycyB0cmVhdCBl bnVtcyBhcyBzaWduZWQgaW50cywgc28gd2UgY2FuJ3QgdXNlIDEgPDwgMzEgKi8KIAlSRUxPUFRf S0lORF9NQVggPSAoMSA8PCAzMCkKIH0gcmVsb3B0X2tpbmQ7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3Rpci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjA4Y2Y0ZDRlZjAKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBzdGlyLmgKKyAqCSAgaGVhZGVyIGZpbGUgZm9yIHBvc3RncmVz IHN0aXIgYWNjZXNzIG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9zdGlyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBTVElSX0gKKyNkZWZpbmUgU1RJUl9ICisKKyNpbmNsdWRlICJhY2Nlc3Mv YW1hcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKKworLyogU3VwcG9ydCBwcm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUg U1RJUl9OUFJPQwkJCQkwCisKKy8qIFNjYW4gc3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05T VFJBVEVHSUVTCQkxCisKKyNkZWZpbmUgU1RJUl9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNy b3MgZm9yIGFjY2Vzc2luZyBzdGlyIHBhZ2Ugc3RydWN0dXJlcyAqLworI2RlZmluZSBTdGlyUGFn ZUdldE9wYXF1ZShwYWdlKSAoKFN0aXJQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIo cGFnZSkpCisjZGVmaW5lIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpIChTdGlyUGFnZUdldE9w YXF1ZShwYWdlKS0+bWF4b2ZmKQorI2RlZmluZSBTdGlyUGFnZUlzTWV0YShwYWdlKSBcCisJKChT dGlyUGFnZUdldE9wYXF1ZShwYWdlKS0+ZmxhZ3MgJiBTVElSX01FVEEpICE9IDApCisjZGVmaW5l IFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgb2Zmc2V0KSBcCisJKChTdGlyVHVwbGUgKikoUGFnZUdl dENvbnRlbnRzKHBhZ2UpIFwKKwkJKyBzaXplb2YoU3RpclR1cGxlKSAqICgob2Zmc2V0KSAtIDEp KSkKKyNkZWZpbmUgU3RpclBhZ2VHZXROZXh0VHVwbGUodHVwbGUpIFwKKwkoKFN0aXJUdXBsZSAq KSgoY2hhciAqKSh0dXBsZSkgKyBzaXplb2YoU3RpclR1cGxlKSkpCisKKworCisvKiBQcmVzZXJ2 ZWQgcGFnZSBudW1iZXJzICovCisjZGVmaW5lIFNUSVJfTUVUQVBBR0VfQkxLTk8JKDApCisjZGVm aW5lIFNUSVJfSEVBRF9CTEtOTwkJKDEpIC8qIGZpcnN0IGRhdGEgcGFnZSAqLworCisKKy8qIE9w YXF1ZSBmb3Igc3RpciBwYWdlcyAqLwordHlwZWRlZiBzdHJ1Y3QgU3RpclBhZ2VPcGFxdWVEYXRh Cit7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsJCS8qIG51bWJlciBvZiBpbmRleCB0dXBsZXMgb24g dGhlIHBhZ2UgKi8KKwl1aW50MTYJCWZsYWdzOwkJCS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVs b3cgKi8KKwl1aW50MTYJCXN0aXJfcGFnZV9pZDsJLyogZm9yIGlkZW50aWZpY2F0aW9uIG9mIFNU SVIgaW5kZXhlcyAqLworfSBTdGlyUGFnZU9wYXF1ZURhdGE7CisKKy8qIFN0aXIgcGFnZSBmbGFn cyAqLworI2RlZmluZSBTVElSX01FVEEJCSgxPDwwKQorCit0eXBlZGVmIFN0aXJQYWdlT3BhcXVl RGF0YSAqU3RpclBhZ2VPcGFxdWU7CisKKyNkZWZpbmUgU1RJUl9QQUdFX0lECQkweEZGODQKKwor LyogTWV0YWRhdGEgb2Ygc3RpciBpbmRleCAqLwordHlwZWRlZiBzdHJ1Y3QgU3Rpck1ldGFQYWdl RGF0YQoreworCXVpbnQzMgkJbWFnaWNOdW1iZXI7CisJQmxvY2tOdW1iZXIJbGFzdEJsa05vOwor CWJvb2wJCXNraXBJbnNlcnRzOwkvKiBzaG91bGQgd2UganVzdCBleGl0IHdpdGhvdXQgYW55IGlu c2VydHM/ICovCit9IFN0aXJNZXRhUGFnZURhdGE7CisKKy8qIE1hZ2ljIG51bWJlciB0byBkaXN0 aW5ndWlzaCBzdGlyIHBhZ2VzIGZyb20gb3RoZXJzICovCisjZGVmaW5lIFNUSVJfTUFHSUNfTlVN QkVSICgweERCQUMwREVGKQorCisjZGVmaW5lIFN0aXJQYWdlR2V0TWV0YShwYWdlKQkoKFN0aXJN ZXRhUGFnZURhdGEgKikgUGFnZUdldENvbnRlbnRzKHBhZ2UpKQorCit0eXBlZGVmIHN0cnVjdCBT dGlyVHVwbGUKK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFB0cjsKK30gU3RpclR1cGxlOworCisj ZGVmaW5lIFN0aXJQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpIFwKKwkoQkxDS1NaIC0gTUFYQUxJR04o U2l6ZU9mUGFnZUhlYWRlckRhdGEpIFwKKwkJLSBTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSAq IChzaXplb2YoU3RpclR1cGxlKSkgXAorCQktIE1BWEFMSUdOKHNpemVvZihTdGlyUGFnZU9wYXF1 ZURhdGEpKSkKKworZXh0ZXJuIHZvaWQgU3RpckZpbGxNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwg UGFnZSBtZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cyk7CitleHRlcm4gdm9pZCBTdGlySW5pdE1l dGFwYWdlKFJlbGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIHZvaWQg U3RpckluaXRQYWdlKFBhZ2UgcGFnZSwgdWludDE2IGZsYWdzKTsKK2V4dGVybiB2b2lkIFN0aXJN YXJrQXNTa2lwSW5zZXJ0cyhSZWxhdGlvbiBpbmRleCk7CisKKy8qIGluZGV4IGFjY2VzcyBtZXRo b2QgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGJvb2wgc3RpcnZhbGlkYXRlKE9pZCBv cGNsYXNzb2lkKTsKK2V4dGVybiBib29sIHN0aXJpbnNlcnQoUmVsYXRpb24gaW5kZXgsIERhdHVt ICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKKwkJCQkJIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0 aW9uIGhlYXBSZWwsCisJCQkJCSBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkJCQkg Ym9vbCBpbmRleFVuY2hhbmdlZCwKKwkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7 CitleHRlcm4gSW5kZXhTY2FuRGVzYyBzdGlyYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlycmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAorCQkJCQkgU2NhbktleSBvcmRl cmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlyZW5kc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOworZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKnN0aXJidWlsZChSZWxhdGlvbiBo ZWFwLCBSZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5m byk7CitleHRlcm4gdm9pZCBzdGlyYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCk7CitleHRlcm4g SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGlyYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmlu Zm8sCisJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywgSW5kZXhCdWxr RGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfc3Rh dGUpOworZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RpcnZhY3V1bWNsZWFudXAoSW5k ZXhWYWN1dW1JbmZvICppbmZvLAorCQkJCQkJCQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq c3RhdHMpOworZXh0ZXJuIGJ5dGVhICpzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29s IHZhbGlkYXRlKTsKKworI2VuZGlmCQkJLyogU1RJUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0Cmlu ZGV4IDQ2ZDM2MTA0N2ZlLi44YmQyYzJiNDZiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19hbS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKQEAgLTMz LDUgKzMzLDggQEAKIHsgb2lkID0+ICczNTgwJywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9PSUQn LAogICBkZXNjciA9PiAnYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QnLAog ICBhbW5hbWUgPT4gJ2JyaW4nLCBhbWhhbmRsZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBlID0+ ICdpJyB9LAoreyBvaWQgPT4gJzU1NTUnLCBvaWRfc3ltYm9sID0+ICdTVElSX0FNX09JRCcsCisg IGRlc2NyID0+ICdzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QnLAor ICBhbW5hbWUgPT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJoYW5kbGVyJywgYW10eXBlID0+ ICdpJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCBkZjE3MGI4MDg0 MC4uYTM0NTdlNzQ5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFz cy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApAQCAtNDkyLDQg KzQ5Miw4IEBACiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2VvbWV0cmljIHR5cGVzIGV4 Y2VwdCBib3gKIAorIyBhbGxvdyBhbnkgdHlwZXMgZm9yIFNUSVIKK3sgb3BjbWV0aG9kID0+ICdz dGlyJywgb2lkX3N5bWJvbCA9PiAnQU5ZX1NUSVJfT1BTX09JRCcsIG9wY25hbWUgPT4gJ3N0aXJf b3BzJywKKyAgb3BjZmFtaWx5ID0+ICdzdGlyL2FueV9vcHMnLCBvcGNpbnR5cGUgPT4gJ2FueSd9 LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0CmluZGV4IDdhMDI3YzQ4MTBlLi42 ZmZjMjBhMDYxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5k YXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKQEAgLTMwOCw1ICsz MDgsNyBAQAogICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdlX29w cycgfSwKIHsgb2lkID0+ICc2MTU4JywKICAgb3BmbWV0aG9kID0+ICdnaXN0Jywgb3BmbmFtZSA9 PiAnbXVsdGlyYW5nZV9vcHMnIH0sCit7IG9pZCA9PiAnNTU1OCcsCisgIG9wZm1ldGhvZCA9PiAn c3RpcicsIG9wZm5hbWUgPT4gJ2FueV9vcHMnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDNlYTE3ZmM1NjI5Li5kNDY0NGIwYjVlZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC05MzUsNiArOTM1LDEwIEBACiAgIHByb25hbWUgPT4gJ2JyaW5oYW5kbGVyJywgcHJvdm9s YXRpbGUgPT4gJ3YnLAogICBwcm9yZXR0eXBlID0+ICdpbmRleF9hbV9oYW5kbGVyJywgcHJvYXJn dHlwZXMgPT4gJ2ludGVybmFsJywKICAgcHJvc3JjID0+ICdicmluaGFuZGxlcicgfSwKK3sgb2lk ID0+ICc1NTU2JywgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNz IG1ldGhvZCBoYW5kbGVyJywKKyAgcHJvbmFtZSA9PiAnc3RpcmhhbmRsZXInLCBwcm92b2xhdGls ZSA9PiAndicsCisgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0eXBl cyA9PiAnaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3N0aXJoYW5kbGVyJyB9LAogeyBvaWQgPT4g JzM5NTInLCBkZXNjciA9PiAnYnJpbjogc3RhbmRhbG9uZSBzY2FuIG5ldyB0YWJsZSBwYWdlcycs CiAgIHByb25hbWUgPT4gJ2JyaW5fc3VtbWFyaXplX25ld192YWx1ZXMnLCBwcm92b2xhdGlsZSA9 PiAndicsCiAgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHByb2Fy Z3R5cGVzID0+ICdyZWdjbGFzcycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDNlY2FlNzU1MmZj Li5lY2FmODJmMmFmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2OSw4ICsxNjksOCBAQCB0 eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIgaW5k ZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFuZAogICoJCXJldGFpbCBjcmVhdGlvbiBv ZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWlu LCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKLSAqIGR1cmluZyBpbmRleCBi dWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgorICogaWlfQ29u Y3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGlpX0F1eGlsaWFyeSBhbmQgaWlfUGFyYWxsZWxX b3JrZXJzCisgKiBhcmUgdXNlZCBvbmx5IGR1cmluZyBpbmRleCBidWlsZDsgdGhleSdyZSBjb252 ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB0 eXBlZGVmIHN0cnVjdCBJbmRleEluZm8KQEAgLTIzMCw3ICsyMzAsOCBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEluZm8KIAlib29sCQlpaV9XaXRob3V0T3ZlcmxhcHM7CiAJLyogIyBvZiB3b3JrZXJz IHJlcXVlc3RlZCAoZXhjbHVkZXMgbGVhZGVyKSAqLwogCWludAkJCWlpX1BhcmFsbGVsV29ya2Vy czsKLQorCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRleCBidWlsZD8gKi8KKwli b29sCQlpaV9BdXhpbGlhcnk7CiAJLyogT2lkIG9mIGluZGV4IEFNICovCiAJT2lkCQkJaWlfQW07 CiAJLyogcHJpdmF0ZSBjYWNoZSBhcmVhIGZvciBpbmRleCBBTSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4 X3NlbGZ1bmNzLmgKaW5kZXggNzQ3OTNhMWExOWQuLmJmMGUzMGRhYmU5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2luZGV4X3NlbGZ1bmNzLmgKQEAgLTYyLDYgKzYyLDE0IEBAIGV4dGVybiB2b2lkIHNwZ2Nvc3Rl c3RpbWF0ZShzdHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJU2VsZWN0aXZpdHkgKmlu ZGV4U2VsZWN0aXZpdHksCiAJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAogCQkJCQkJ CWRvdWJsZSAqaW5kZXhQYWdlcyk7CitleHRlcm4gdm9pZCBzdGlyY29zdGVzdGltYXRlKHN0cnVj dCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQlzdHJ1Y3QgSW5kZXhQYXRoICpwYXRoLAorCQkJ CQkJCWRvdWJsZSBsb29wX2NvdW50LAorCQkJCQkJCUNvc3QgKmluZGV4U3RhcnR1cENvc3QsCisJ CQkJCQkJQ29zdCAqaW5kZXhUb3RhbENvc3QsCisJCQkJCQkJU2VsZWN0aXZpdHkgKmluZGV4U2Vs ZWN0aXZpdHksCisJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0aW9uLAorCQkJCQkJCWRvdWJs ZSAqaW5kZXhQYWdlcyk7CiBleHRlcm4gdm9pZCBnaW5jb3N0ZXN0aW1hdGUoc3RydWN0IFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCiAJCQkJCQkJZG91 YmxlIGxvb3BfY291bnQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ft dXRpbHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dAppbmRleCA3 YWI2MTEzYzYxOS4uOTJjMDMzYTIwMTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYW11dGlscy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxz Lm91dApAQCAtMTczLDcgKzE3MywxMyBAQCBzZWxlY3QgYW1uYW1lLCBwcm9wLCBwZ19pbmRleGFt X2hhc19wcm9wZXJ0eShhLm9pZCwgcHJvcCkgYXMgcAogIHNwZ2lzdCB8IGNhbl9leGNsdWRlICAg fCB0CiAgc3BnaXN0IHwgY2FuX2luY2x1ZGUgICB8IHQKICBzcGdpc3QgfCBib2d1cyAgICAgICAg IHwgCi0oMzYgcm93cykKKyBzdGlyICAgfCBjYW5fb3JkZXIgICAgIHwgZgorIHN0aXIgICB8IGNh bl91bmlxdWUgICAgfCBmCisgc3RpciAgIHwgY2FuX211bHRpX2NvbCB8IHQKKyBzdGlyICAgfCBj YW5fZXhjbHVkZSAgIHwgZgorIHN0aXIgICB8IGNhbl9pbmNsdWRlICAgfCB0Cisgc3RpciAgIHwg Ym9ndXMgICAgICAgICB8IAorKDQyIHJvd3MpCiAKIC0tCiAtLSBhZGRpdGlvbmFsIGNoZWNrcyBm b3IgcGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b3ByX3Nhbml0eS5vdXQKaW5kZXggY2ZkYzZiMWExN2EuLmNjOTQ3MTk0YWE3IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKQEAgLTIxMzEsOSArMjEzMSwxMCBAQCBG Uk9NIHBnX29wY2xhc3MgQVMgYzEKIFdIRVJFIE5PVCBFWElTVFMoU0VMRUNUIDEgRlJPTSBwZ19h bW9wIEFTIGExCiAgICAgICAgICAgICAgICAgIFdIRVJFIGExLmFtb3BmYW1pbHkgPSBjMS5vcGNm YW1pbHkKICAgICAgICAgICAgICAgICAgICBBTkQgYmluYXJ5X2NvZXJjaWJsZShjMS5vcGNpbnR5 cGUsIGExLmFtb3BsZWZ0dHlwZSkpOwotIG9wY25hbWUgfCBvcGNmYW1pbHkgCi0tLS0tLS0tLS0r LS0tLS0tLS0tLS0KLSgwIHJvd3MpCisgb3BjbmFtZSAgfCBvcGNmYW1pbHkgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0tCisgc3Rpcl9vcHMgfCAgICAgIDU1NTgKKygxIHJvdykKIAogLS0gQ2hlY2sg dGhhdCBlYWNoIG9wZXJhdG9yIGxpc3RlZCBpbiBwZ19hbW9wIGhhcyBhbiBhc3NvY2lhdGVkIG9w Y2xhc3MsCiAtLSB0aGF0IGlzIG9uZSB3aG9zZSBvcGNpbnR5cGUgbWF0Y2hlcyBvcHJsZWZ0IChw b3NzaWJseSBieSBjb2VyY2lvbikuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBj OGYzOTMyZWRmMC4uZWNjMmMyYTYwNDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApA QCAtNTE3MSw3ICs1MTcxLDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRh YmxlCiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAg fCBJbmRleAorKDkgcm93cykKIAogXGRBICoKIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKQEAgLTUx ODUsNyArNTE4Niw4IEBAIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZQog IGhlYXAyICB8IFRhYmxlCiAgc3BnaXN0IHwgSW5kZXgKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5k ZXgKKyg5IHJvd3MpCiAKIFxkQSBoKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAtNTIxMCw5 ICs1MjEyLDkgQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogCiBcZEE6IGV4dHJhIGFyZ3VtZW50 ICJiYXIiIGlnbm9yZWQKIFxkQSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBhY2Nlc3MgbWV0aG9kcwotICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAg fCAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAKLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3Mg bWV0aG9kcworICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAg ICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgCistLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICBicmluICAgfCBJbmRleCB8IGJyaW5oYW5kbGVyICAgICAgICAgIHwgYmxvY2sg cmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QKICBidHJlZSAgfCBJbmRleCB8IGJ0aGFu ZGxlciAgICAgICAgICAgIHwgYi10cmVlIGluZGV4IGFjY2VzcyBtZXRob2QKICBnaW4gICAgfCBJ bmRleCB8IGdpbmhhbmRsZXIgICAgICAgICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKQEAg LTUyMjEsMTIgKzUyMjMsMTMgQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRh YmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBo ZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXgg fCBzcGdoYW5kbGVyICAgICAgICAgICB8IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDgg cm93cykKKyBzdGlyICAgfCBJbmRleCB8IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVy bSBpbmRleCByZXBsYWNlbWVudCBhY2Nlc3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErICoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwotICBOYW1l ICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgRGVzY3JpcHRp b24gICAgICAgICAgICAgICAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworICBOYW1lICB8IFR5cGUg IHwgICAgICAgSGFuZGxlciAgICAgICAgfCAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBicmluICAgfCBJbmRl eCB8IGJyaW5oYW5kbGVyICAgICAgICAgIHwgYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2Vz cyBtZXRob2QKICBidHJlZSAgfCBJbmRleCB8IGJ0aGFuZGxlciAgICAgICAgICAgIHwgYi10cmVl IGluZGV4IGFjY2VzcyBtZXRob2QKICBnaW4gICAgfCBJbmRleCB8IGdpbmhhbmRsZXIgICAgICAg ICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKQEAgLTUyMzUsNyArNTIzOCw4IEBAIExpc3Qg b2YgYWNjZXNzIG1ldGhvZHMKICBoZWFwICAgfCBUYWJsZSB8IGhlYXBfdGFibGVhbV9oYW5kbGVy IHwgaGVhcCB0YWJsZSBhY2Nlc3MgbWV0aG9kCiAgaGVhcDIgIHwgVGFibGUgfCBoZWFwX3RhYmxl YW1faGFuZGxlciB8IAogIHNwZ2lzdCB8IEluZGV4IHwgc3BnaGFuZGxlciAgICAgICAgICAgfCBT UC1HaVNUIGluZGV4IGFjY2VzcyBtZXRob2QKLSg4IHJvd3MpCisgc3RpciAgIHwgSW5kZXggfCBz dGlyaGFuZGxlciAgICAgICAgICB8IHNob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNjZXNz IG1ldGhvZAorKDkgcm93cykKIAogXGRBKyBoKgogICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBhY2Nlc3MgbWV0aG9kcwotLSAKMi40My4wCgo= --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v34-0001-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtjq0 RnJvbSBjNGYzODlkNGMxODE5MzliZmFiOTVmNTBiNDdlYmU4NjYyNTJmZmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDEvN10gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDI5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyOTQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggNTkyY2VmNzRl Y2IuLjUxYTYyZGNjYjdiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZDdhMWVmZjBlZgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyOTMg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgY29uc3RhbnQgU1RSRVNT X1BHQkVOQ0hfQ0xJRU5UUyA9PiAzMDsKK3VzZSBjb25zdGFudCBTVFJFU1NfUEdCRU5DSF9KT0JT ID0+IDg7Cit1c2UgY29uc3RhbnQgU1RSRVNTX1BHQkVOQ0hfVFJBTlNBQ1RJT05TID0+IDEwMDAw OwordXNlIGNvbnN0YW50IFNUUkVTU19NQVhfU0xFRVBfTVMgPT4gMTA7CisKK3VzZSBjb25zdGFu dCBERUZBVUxUX1BHQkVOQ0hfQ0xJRU5UUyA9PiAxNTsKK3VzZSBjb25zdGFudCBERUZBVUxUX1BH QkVOQ0hfSk9CUyA9PiA0OwordXNlIGNvbnN0YW50IERFRkFVTFRfUEdCRU5DSF9UUkFOU0FDVElP TlMgPT4gNTAwOwordXNlIGNvbnN0YW50IERFRkFVTFRfTUFYX1NMRUVQX01TID0+IDE7CisKK1Rl c3Q6Ok1vcmUtPmJ1aWxkZXItPnRvZG9fc3RhcnQoJ2ZpbGVzeXN0ZW0gYnVnJykKKyAgaWYgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6Omhhc193YWxfcmVhZF9idWc7CisKK215ICRub2RlOworbXkg JHBnX3Rlc3RfZXh0cmEgPSAkRU5We1BHX1RFU1RfRVhUUkF9IC8vICcnOworbXkgJGlzX3N0cmVz cyA9ICRwZ190ZXN0X2V4dHJhID1+IC9cYnN0cmVzc1xiLyA/IDEgOiAwOworbXkgJHBnYmVuY2hf Y2xpZW50cyA9CisgICRpc19zdHJlc3MgPyBTVFJFU1NfUEdCRU5DSF9DTElFTlRTIDogREVGQVVM VF9QR0JFTkNIX0NMSUVOVFM7CitteSAkcGdiZW5jaF9qb2JzID0gJGlzX3N0cmVzcyA/IFNUUkVT U19QR0JFTkNIX0pPQlMgOiBERUZBVUxUX1BHQkVOQ0hfSk9CUzsKK215ICRwZ2JlbmNoX3RyYW5z YWN0aW9ucyA9CisgICRpc19zdHJlc3MgPyBTVFJFU1NfUEdCRU5DSF9UUkFOU0FDVElPTlMgOiBE RUZBVUxUX1BHQkVOQ0hfVFJBTlNBQ1RJT05TOworbXkgJG1heF9zbGVlcF9tcyA9ICRpc19zdHJl c3MgPyBTVFJFU1NfTUFYX1NMRUVQX01TIDogREVGQVVMVF9NQVhfU0xFRVBfTVM7CitteSAkcGdi ZW5jaF9vcHRpb25zID0gc3ByaW50ZigKKwknLS1uby12YWN1dW0gLS1jbGllbnQ9JWQgLS1qb2Jz PSVkIC0tZXhpdC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0lZCcsCisJJHBnYmVuY2hfY2xpZW50 cywKKwkkcGdiZW5jaF9qb2JzLAorCSRwZ2JlbmNoX3RyYW5zYWN0aW9ucyk7CitteSAkbm9faG90 ID0gJGlzX3N0cmVzcyA/IGludChyYW5kKDIpKSA6IDA7CisKK3ByaW50KAorCQlzcHJpbnRmKAor CQknc2V0dGluZ3M6IFBHX1RFU1RfRVhUUkE9JXMgc3RyZXNzPSVkIGNsaWVudHM9JWQgam9icz0l ZCB0cmFuc2FjdGlvbnM9JWQgbWF4X3NsZWVwX21zPSVkIG5vX2hvdD0lZCcsCisJCWRlZmluZWQo JEVOVntQR19URVNUX0VYVFJBfSkKKwkJPyAoJHBnX3Rlc3RfZXh0cmEgZXEgJycgPyAnKGVtcHR5 KScgOiAkcGdfdGVzdF9leHRyYSkKKwkJOiAnKHVuZGVmKScsCisJCSRpc19zdHJlc3MsCisJCSRw Z2JlbmNoX2NsaWVudHMsCisJCSRwZ2JlbmNoX2pvYnMsCisJCSRwZ2JlbmNoX3RyYW5zYWN0aW9u cywKKwkJJG1heF9zbGVlcF9tcywKKwkJJG5vX2hvdCkpOworcHJpbnQgIlxuIjsKKworIworIyBU ZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ1JD X3Rlc3QnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLAorCSdsb2NrX3RpbWVvdXQgPSAnIC4gKDEwMDAgKiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM6OnRpbWVvdXRfZGVmYXVsdCkpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAnZnN5bmMgPSBvZmYnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ21haW50ZW5hbmNlX3dvcmtfbWVtID0gMzJNQicpOyAjIHRvIGF2b2lkIE9PTQorJG5vZGUt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc2hhcmVkX2J1ZmZlcnMgPSAzMk1CJyk7 ICMgdG8gYXZvaWQgT09NCiskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHEoQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHRibChpIGludCBwcmltYXJ5IGtleSwKKwkJ CQkJCQkJYzEgbW9uZXkgZGVmYXVsdCAwLCBjMiBtb25leSBkZWZhdWx0IDAsCisJCQkJCQkJCWMz IG1vbmV5IGRlZmF1bHQgMCwgdXBkYXRlZF9hdCB0aW1lc3RhbXAsCisJCQkJCQkJCWlhIGludDRb XSwgcCBwb2ludCkpKTsKKworaWYgKCRub19ob3QpIHsgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxKENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIHRibChpLCB1cGRhdGVkX2F0 KTspKTsgfQorCisjIGNyZWF0ZSBzZXF1ZW5jZQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxKENSRUFURSBVTkxPR0dFRCBTRVFVRU5DRSBpbl9yb3dfcmVidWlsZCBTVEFSVCAxIElOQ1JF TUVOVCAxOykpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFNFTEVDVCBuZXh0dmFs KCdpbl9yb3dfcmVidWlsZCcpOykpOworCisjIENyZWF0ZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBw cmVkaWNhdGUgdGVzdHMKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcSgKKwlDUkVBVEUg RlVOQ1RJT04gcHJlZGljYXRlX3N0YWJsZSgpIFJFVFVSTlMgYm9vbCBJTU1VVEFCTEUKKwlMQU5H VUFHRSBwbHBnc3FsIEFTICQkCisJQkVHSU4KKwkJRVhFQ1VURSAnU0VMRUNUIHR4aWRfY3VycmVu dCgpJzsKKwkJUkVUVVJOIHRydWU7CisJRU5EOyAkJDsKKykpOworCiskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoCisJQ1JFQVRFIEZVTkNUSU9OIHByZWRpY2F0ZV9jb25zdChpbnRlZ2Vy KSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lO CisJCVJFVFVSTiBNT0QoJDEsIDIpID0gMDsKKwlFTkQ7ICQkOworKSk7CisKKyMgUnVuIENJQy9S SUMgaW4gZGlmZmVyZW50IG9wdGlvbnMgY29uY3VycmVudGx5IHdpdGggdXBzZXJ0cworJG5vZGUt PnBnYmVuY2goCisJJHBnYmVuY2hfb3B0aW9ucywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9jZXNz ZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRFWC9D UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZJywKKwl7CisJCSdjb25jdXJyZW50X29wcycgPT4gc3By aW50ZihxKAorCQkJU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOyAtLSB0aGlzIGlzIGJl Y2F1c2UgcHJlZGljYXRlX3N0YWJsZSBpbXBsZW1lbnRhdGlvbgorCQkJU0VMRUNUIHBnX3RyeV9h ZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxv Y2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxn c2V0CisJCQkJXHNldCB2YXJpYW50IHJhbmRvbSgwLCA1KQorCQkJCVxzZXQgcGFyYWxsZWxzIHJh bmRvbSgwLCA0KQorCQkJCVxzZXQgdXNlX3JyIHJhbmRvbSgwLCA5KQorCQkJCVxpZiA6bGFzdF92 YWx1ZSA8IDMKKwkJCQkJQUxURVIgVEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFy YWxsZWxzKTsKKwkJCQkJXGlmIDp1c2VfcnIgPSAwCisJCQkJCQlTRVQgZGVmYXVsdF90cmFuc2Fj dGlvbl9pc29sYXRpb24gPSAncmVwZWF0YWJsZSByZWFkJzsKKwkJCQkJXGVuZGlmCisJCQkJCVxp ZiA6dmFyaWFudCA9IDAKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBP TiB0YmwoaSwgdXBkYXRlZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMQorCQkJCQkJQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpLCB1cGRhdGVkX2F0KSBXSEVS RSBwcmVkaWNhdGVfc3RhYmxlKCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMgorCQkJCQkJQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpLCB1cGRhdGVkX2F0KSBXSEVS RSBNT0QoaSwgMikgPSAwOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDMKKwkJCQkJCUNSRUFURSBJ TkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgcHJl ZGljYXRlX2NvbnN0KGkpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDQKKwkJCQkJCUNSRUFURSBJ TkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwocHJlZGljYXRlX2NvbnN0KGkpKTsKKwkJ CQkJXGVsaWYgOnZhcmlhbnQgPSA1CisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5l d19pZHggT04gdGJsKGksIHByZWRpY2F0ZV9jb25zdChpKSwgdXBkYXRlZF9hdCkgV0hFUkUgcHJl ZGljYXRlX2NvbnN0KGkpOworCQkJCQlcZW5kaWYKKwkJCQkJXHNldCBzbGVlcF9tcyByYW5kb20o MCwgJWQpCisJCQkJCVxzbGVlcCA6c2xlZXBfbXMgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4X2No ZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1 ZSk7CisJCQkJCVJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVxzZXQg c2xlZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCVNF TEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNo ZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4 OworCQkJCQlSRVNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbjsKKwkJCQlcZW5kaWYK KwkJCQlTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrKDQyKTsKKwkJCVxlbHNlCisJCQkJXHNldCBu dW0gcmFuZG9tKDEwMDAsIDEwMDAwMCkKKwkJCQlCRUdJTjsKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRv bSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElD VChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihy YW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCUlO U0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCksQVJS QVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20oKSxyYW5kb20oKSkpCisJ CQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpLCBpYSA9 IEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2ludChyYW5kb20oKSxyYW5k b20oKSk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSww LDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgp LHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0 ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50 KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJh bmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0s cG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUg U0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjpp bnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCUlOU0VSVCBJTlRPIHRibCBW QUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCksQVJSQVlbZmxvb3IocmFuZG9t KCkqMTAwKTo6aW50XSxwb2ludChyYW5kb20oKSxyYW5kb20oKSkpCisJCQkJCU9OIENPTkZMSUNU KGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpLCBpYSA9IEFSUkFZW2Zsb29yKHJh bmRvbSgpKjEwMCk6OmludF0sIHAgPSBwb2ludChyYW5kb20oKSxyYW5kb20oKSk7CisJCQkJU0VM RUNUIHNldHZhbCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCQlDT01NSVQ7CisJCQlcZW5kaWYK KwkJCSksICRtYXhfc2xlZXBfbXMsICRtYXhfc2xlZXBfbXMpCisJfSk7CisKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9S SUMgZm9yIHVuaXF1ZSBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNlcnRzCiskbm9kZS0+cGdi ZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVhbGx5IHByb2Nlc3NlZH1d LAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0aCBSRUlOREVYL0NSRUFU RSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIHVuaXF1ZSBCVFJFRScsCisJeworCQknY29uY3VycmVu dF9vcHNfdW5pcXVlX2lkeCcgPT4gc3ByaW50ZihxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29y eV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJ CQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJ CQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXHNldCB1c2VfcnIgcmFuZG9tKDAs IDkpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChw YXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlcaWYgOnVzZV9yciA9IDAKKwkJCQkJ CVNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQnOwor CQkJCQlcZW5kaWYKKwkJCQkJQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lk eCBPTiB0YmwoaSk7CisJCQkJCVxzZXQgc2xlZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xl ZXAgOnNsZWVwX21zIG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhl YXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlSRUlOREVY IElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgw LCAlZCkKKwkJCQkJXHNsZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hl Y2soJ25ld19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVl KTsKKwkJCQkJRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJUkVTRVQgZGVm YXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb247CisJCQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fk dmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dl cigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJh bmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZW2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0s cG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUg U0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjpp bnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9tKCkpOworCQkJCVNFTEVDVCBzZXR2YWwoJ2lu X3Jvd19yZWJ1aWxkJywgMSk7CisJCQlcZW5kaWYKKwkJCSksICRtYXhfc2xlZXBfbXMsICRtYXhf c2xlZXBfbXMpCisJfSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FU RSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9SSUMgZm9yIEdJTiB3aXRoIHVwc2VydHMKKyRu b2RlLT5wZ2JlbmNoKAorCSRwZ2JlbmNoX29wdGlvbnMsCisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJv Y2Vzc2VkfV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5E RVgvQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBmb3IgR0lOJywKKwl7CisJCSdjb25jdXJyZW50 X29wc19naW5faWR4JyA9PiBzcHJpbnRmKHEoCisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xv Y2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdzZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNF TEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlc c2V0IHBhcmFsbGVscyByYW5kb20oMCwgNCkKKwkJCQlcc2V0IHVzZV9yciByYW5kb20oMCwgOSkK KwkJCQlcaWYgOmxhc3RfdmFsdWUgPCAzCisJCQkJCUFMVEVSIFRBQkxFIHRibCBTRVQgKHBhcmFs bGVsX3dvcmtlcnM9OnBhcmFsbGVscyk7CisJCQkJCVxpZiA6dXNlX3JyID0gMAorCQkJCQkJU0VU IGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVhdGFibGUgcmVhZCc7CisJCQkJ CVxlbmRpZgorCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVT SU5HIEdJTiAoaWEpOworCQkJCQlcc2V0IHNsZWVwX21zIHJhbmRvbSgwLCAlZCkKKwkJCQkJXHNs ZWVwIDpzbGVlcF9tcyBtcworCQkJCQlTRUxFQ1QgZ2luX2luZGV4X2NoZWNrKCduZXdfaWR4Jyk7 CisJCQkJCVJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVxzZXQgc2xl ZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCVNFTEVD VCBnaW5faW5kZXhfY2hlY2soJ25ld19pZHgnKTsKKwkJCQkJRFJPUCBJTkRFWCBDT05DVVJSRU5U TFkgbmV3X2lkeDsKKwkJCQkJUkVTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb247CisJ CQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQor CQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNF UlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpLEFSUkFZ W2Zsb29yKHJhbmRvbSgpKjEwMCk6OmludF0scG9pbnQocmFuZG9tKCkscmFuZG9tKCkpKQorCQkJ CQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKSwgaWEgPSBB UlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLCBwID0gcG9pbnQocmFuZG9tKCkscmFuZG9t KCkpOworCQkJCVNFTEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQlcZW5kaWYK KwkJCSksICRtYXhfc2xlZXBfbXMsICRtYXhfc2xlZXBfbXMpCisJfSk7CisKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9S SUMgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lTVCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNl cnRzCiskbm9kZS0+cGdiZW5jaCgKKwkkcGdiZW5jaF9vcHRpb25zLAorCTAsCisJW3Fye2FjdHVh bGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0 aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIEdJU1QvQlJJTi9IQVNIL1NQ R0lTVCcsCisJeworCQknY29uY3VycmVudF9vcHNfb3RoZXJfaWR4JyA9PiBzcHJpbnRmKHEoCisJ CQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xvY2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdz ZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcp IEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlcc2V0IHBhcmFsbGVscyByYW5kb20oMCwgNCkKKwkJ CQlcc2V0IHVzZV9yciByYW5kb20oMCwgOSkKKwkJCQlcaWYgOmxhc3RfdmFsdWUgPCAzCisJCQkJ CUFMVEVSIFRBQkxFIHRibCBTRVQgKHBhcmFsbGVsX3dvcmtlcnM9OnBhcmFsbGVscyk7CisJCQkJ CVxpZiA6dXNlX3JyID0gMAorCQkJCQkJU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9u ID0gJ3JlcGVhdGFibGUgcmVhZCc7CisJCQkJCVxlbmRpZgorCQkJCQlcc2V0IHZhcmlhbnQgcmFu ZG9tKDAsIDMpCisJCQkJCVxpZiA6dmFyaWFudCA9IDAKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05D VVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwgVVNJTkcgR0lTVCAocCk7CisJCQkJCVxlbGlmIDp2YXJp YW50ID0gMQorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBV U0lORyBCUklOICh1cGRhdGVkX2F0KTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAyCisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEhBU0ggKHVwZGF0 ZWRfYXQpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDMKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05D VVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwgVVNJTkcgU1BHSVNUIChwKTsKKwkJCQkJXGVuZGlmCisJ CQkJCVxzZXQgc2xlZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1z CisJCQkJCVJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVxzZXQgc2xl ZXBfbXMgcmFuZG9tKDAsICVkKQorCQkJCQlcc2xlZXAgOnNsZWVwX21zIG1zCisJCQkJCURST1Ag SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJCVJFU0VUIGRlZmF1bHRfdHJhbnNhY3Rp b25faXNvbGF0aW9uOworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2so NDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgx LCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSww LDAsMCxub3coKSxBUlJBWVtmbG9vcihyYW5kb20oKSoxMDApOjppbnRdLHBvaW50KHJhbmRvbSgp LHJhbmRvbSgpKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0 ID0gbm93KCksIGlhID0gQVJSQVlbZmxvb3IocmFuZG9tKCkqMTAwKTo6aW50XSwgcCA9IHBvaW50 KHJhbmRvbSgpLHJhbmRvbSgpKTsKKwkJCQlTRUxFQ1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcs IDEpOworCQkJXGVuZGlmCisJCQkpLCAkbWF4X3NsZWVwX21zLCAkbWF4X3NsZWVwX21zKQorCQl9 KTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMuMAoK --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Disposition: attachment; filename="v34-0003-Add-Datum-storage-support-to-tuplestore-Extend-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtjy2 RnJvbSAxMzM3ZmI2OTMwZDM2NTIzOGM4MjExM2E2MTE2MjA3NTgwODJjZDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMiBKYW4gMjAyNiAwMDo1Nzo1NiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDMvN10gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlIEV4 dGVuZAogdHVwbGVzdG9yZSB0byBzdG9yZSBpbmRpdmlkdWFsIERhdHVtIHZhbHVlcwoKVGhpcyBz dXBwb3J0IGVuYWJsZXMgdXNhZ2VzIG9mIHR1cGxlc3RvcmUgZm9yIG5vbi10dXBsZSBkYXRhIChU SURzKSBpbiB0aGUgbmV4dCBjb21taXQuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXN0b3JlLmMgfCAzNjcgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUv dXRpbHMvdHVwbGVzdG9yZS5oICAgICAgfCAgMzMgKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDMyNyBp bnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc3RvcmUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzdG9y ZS5jCmluZGV4IGY5ZTJkOTUxODZhLi4yYTliMjViZDIzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90 dXBsZXN0b3JlLmMKQEAgLTEsMTYgKzEsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAq IHR1cGxlc3RvcmUuYwotICoJICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1 cGxlIHN0b3JhZ2UuCisgKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3Rv cmFnZSBvZiB0dXBsZXMgYW5kIERhdHVtcy4KKyAqCisgKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRl bXBvcmFyeSBzdG9yYWdlIG9mIGVpdGhlciB0dXBsZXMgb3Igc2luZ2xlCisgKiBEYXR1bSB2YWx1 ZXMgZm9yIHB1cnBvc2VzIHN1Y2ggYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hqb2luIGJhdGNo CisgKiBmaWxlcywgZXRjLiBJdCBpcyBlc3NlbnRpYWxseSBhIGR1bWJlZC1kb3duIHZlcnNpb24g b2YgdHVwbGVzb3J0LmM7CisgKiBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzIGJ1dCBjYW4g b25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBzZXF1ZW5jZQorICogb2YgdHVwbGVzLiAgSG93 ZXZlciwgYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVpcmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0 CisgKiByZWFkaW5nIHRoZSBzZXF1ZW5jZSBiZWZvcmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4u CisgKgorICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLCBiZWNhdXNl IGl0IGFsbG93cyByYW5kb20gYWNjZXNzCisgKiB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5lZCBw b3J0aW9uIG9mIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcgdG8gcHJvY2VzcworICogdGhlIHVuZGVy bHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgogICoKLSAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVt cG9yYXJ5IHN0b3JhZ2Ugb2YgdHVwbGVzIGZvciBwdXJwb3NlcyBzdWNoCi0gKiBhcyBNYXRlcmlh bGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2ggZmlsZXMsIGV0Yy4gIEl0IGlzIGVzc2VudGlhbGx5 Ci0gKiBhIGR1bWJlZC1kb3duIHZlcnNpb24gb2YgdHVwbGVzb3J0LmM7IGl0IGRvZXMgbm8gc29y dGluZyBvZiB0dXBsZXMKLSAqIGJ1dCBjYW4gb25seSBzdG9yZSBhbmQgcmVndXJnaXRhdGUgYSBz ZXF1ZW5jZSBvZiB0dXBsZXMuICBIb3dldmVyLAotICogYmVjYXVzZSBubyBzb3J0IGlzIHJlcXVp cmVkLCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0IHJlYWRpbmcgdGhlIHNlcXVlbmNlCi0gKiBiZWZv cmUgaXQgaGFzIGFsbCBiZWVuIHdyaXR0ZW4uICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwg Zm9yIGN1cnNvcnMsCi0gKiBiZWNhdXNlIGl0IGFsbG93cyByYW5kb20gYWNjZXNzIHdpdGhpbiB0 aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2YKLSAqIGEgcXVlcnkgd2l0aG91dCBoYXZpbmcg dG8gcHJvY2VzcyB0aGUgdW5kZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAgKiBBbHNvLCBp dCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IG11bHRpcGxlIGluZGVwZW5kZW50IHJlYWQgcG9pbnRl cnMuCiAgKgogICogQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgZGF0YSBp ZiBpdCBleGNlZWRzIHRoZQpAQCAtNjEsNiArNjQsOCBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZm aWxlLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Jlc293 bmVyLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgpAQCAtMTE2LDE2ICsxMjEsMTUg QEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogCUJ1ZkZpbGUgICAgKm15ZmlsZTsJCQkvKiB1bmRl cmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJ CS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xkaW5nIHR1cGxlcyAqLwogCVJlc291cmNlT3duZXIg cmVzb3duZXI7CQkvKiByZXNvd25lciBmb3IgaG9sZGluZyB0ZW1wIGZpbGVzICovCisJT2lkCQkJ ZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBvciBvaWQgb2YgRGF0dW0ncyB0byBiZSBzdG9yZWQg Ki8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkvKiB0eXBlbGVuIG9mIHRoYXQgRGF0dW0gKi8KKwli b29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnktdmFsdWUgb2YgdGhhdCBEYXR1bSAqLwogCiAJLyoK IAkgKiBUaGVzZSBmdW5jdGlvbiBwb2ludGVycyBkZWNvdXBsZSB0aGUgcm91dGluZXMgdGhhdCBt dXN0IGtub3cgd2hhdCBraW5kCiAJICogb2YgdHVwbGUgd2UgYXJlIGhhbmRsaW5nIGZyb20gdGhl IHJvdXRpbmVzIHRoYXQgZG9uJ3QgbmVlZCB0byBrbm93IGl0LgogCSAqIFRoZXkgYXJlIHNldCB1 cCBieSB0aGUgdHVwbGVzdG9yZV9iZWdpbl94eHggcm91dGluZXMuCiAJICoKLQkgKiAoQWx0aG91 Z2ggdHVwbGVzdG9yZS5jIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGhlYXAgdHVwbGVzLCBJJ3Zl IGNvcGllZAotCSAqIHRoaXMgcGFydCBvZiB0dXBsZXNvcnQuYyBzbyB0aGF0IGV4dGVuc2lvbiB0 byBvdGhlciBraW5kcyBvZiBvYmplY3RzCi0JICogd2lsbCBiZSBlYXN5IGlmIGl0J3MgZXZlciBu ZWVkZWQuKQotCSAqCiAJICogRnVuY3Rpb24gdG8gY29weSBhIHN1cHBsaWVkIGlucHV0IHR1cGxl IGludG8gcGFsbG9jJ2Qgc3BhY2UuIChOQjogd2UKIAkgKiBhc3N1bWUgdGhhdCBhIHNpbmdsZSBw ZnJlZSgpIGlzIGVub3VnaCB0byByZWxlYXNlIHRoZSB0dXBsZSBsYXRlciwgc28KIAkgKiB0aGUg cmVwcmVzZW50YXRpb24gbXVzdCBiZSAiZmxhdCIgaW4gb25lIHBhbGxvYyBjaHVuay4pIHN0YXRl LT5hdmFpbE1lbQpAQCAtMTUwLDYgKzE1NCwxMiBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAJ ICovCiAJdm9pZAkgICAqKCpyZWFkdHVwKSAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWdu ZWQgaW50IGxlbik7CiAKKwkvKgorCSAqIEZ1bmN0aW9uIHRvIGdldCBsZW5ndGggb2YgdHVwbGUg ZnJvbSB0YXBlLiBVc2VkIHRvIHByb3ZpZGUgJ2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1 cCAoc2VlIGFib3ZlKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQoKmxlbnR1cCkgKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOworCiAJLyoKIAkgKiBUaGlzIGFycmF5IGhvbGRzIHBv aW50ZXJzIHRvIHR1cGxlcyBpbiBtZW1vcnkgaWYgd2UgYXJlIGluIHN0YXRlIElOTUVNLgogCSAq IEluIHN0YXRlcyBXUklURUZJTEUgYW5kIFJFQURGSUxFIGl0J3Mgbm90IHVzZWQuCkBAIC0xODYs NiArMTk2LDcgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogI2RlZmluZSBDT1BZVFVQKHN0YXRl LHR1cCkJKCgqKHN0YXRlKS0+Y29weXR1cCkgKHN0YXRlLCB0dXApKQogI2RlZmluZSBXUklURVRV UChzdGF0ZSx0dXApICgoKihzdGF0ZSktPndyaXRldHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5l IFJFQURUVVAoc3RhdGUsbGVuKQkoKCooc3RhdGUpLT5yZWFkdHVwKSAoc3RhdGUsIGxlbikpCisj ZGVmaW5lIExFTlRVUChzdGF0ZSxlb2ZPSykJKCgqKHN0YXRlKS0+bGVudHVwKSAoc3RhdGUsIGVv Zk9LKSkKICNkZWZpbmUgTEFDS01FTShzdGF0ZSkJCSgoc3RhdGUpLT5hdmFpbE1lbSA8IDApCiAj ZGVmaW5lIFVTRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSAtPSAoYW10KSkKICNk ZWZpbmUgRlJFRU1FTShzdGF0ZSxhbXQpCSgoc3RhdGUpLT5hdmFpbE1lbSArPSAoYW10KSkKQEAg LTE5NCw5ICsyMDUsOSBAQCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAgKgogICogTk9URVMgYWJv dXQgb24tdGFwZSByZXByZXNlbnRhdGlvbiBvZiB0dXBsZXM6CiAgKgotICogV2UgcmVxdWlyZSB0 aGUgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9yZWQgdHVwbGUgdG8gYmUgdGhlIHRvdGFs IHNpemUKLSAqIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBpbmNsdWRpbmcgaXRzZWxmIChzbyBpdCBp cyBuZXZlciB6ZXJvKS4KLSAqIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0b3JlZCB0dXBsZQorICog SW4gY2FzZSBvZiB0dXBsZXMgd2UgdXNlIGZpcnN0ICJ1bnNpZ25lZCBpbnQiIG9mIGEgc3RvcmVk IHR1cGxlCisgKiB0byBiZSB0aGUgdG90YWwgc2l6ZSBvbi10YXBlIG9mIHRoZSB0dXBsZSwgaW5j bHVkaW5nIGl0c2VsZgorICogKHNvIGl0IGlzIG5ldmVyIHplcm8pLiBUaGUgcmVtYWluZGVyIG9m IHRoZSBzdG9yZWQgdHVwbGUKICAqIG1heSBvciBtYXkgbm90IG1hdGNoIHRoZSBpbi1tZW1vcnkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHR1cGxlIC0tLQogICogYW55IGNvbnZlcnNpb24gbmVlZGVk IGlzIHRoZSBqb2Igb2YgdGhlIHdyaXRldHVwIGFuZCByZWFkdHVwIHJvdXRpbmVzLgogICoKQEAg LTIwNywxMCArMjE4LDEzIEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqIHN0YXRlLT5iYWNr d2FyZCBpcyBub3Qgc2V0LCB0aGUgd3JpdGUvcmVhZCByb3V0aW5lcyBtYXkgb21pdCB0aGUgZXh0 cmEKICAqIGxlbmd0aCB3b3JkLgogICoKLSAqIHdyaXRldHVwIGlzIGV4cGVjdGVkIHRvIHdyaXRl IGJvdGggbGVuZ3RoIHdvcmRzIGFzIHdlbGwgYXMgdGhlIHR1cGxlCisgKiBJbiB0aGUgY2FzZSBv ZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmd0aCwgYm90aCAidW5zaWduZWQgaW50IiBhcmUgb21p dHRlZC4KKyAqCisgKiB3cml0ZXR1cCBpcyBleHBlY3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3 b3JkcyBhbmQgdGhlIHR1cGxlCiAgKiBkYXRhLiAgV2hlbiByZWFkdHVwIGlzIGNhbGxlZCwgdGhl IHRhcGUgaXMgcG9zaXRpb25lZCBqdXN0IGFmdGVyIHRoZQotICogZnJvbnQgbGVuZ3RoIHdvcmQ7 IHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QKLSAqIHRo ZSBiYWNrIGxlbmd0aCB3b3JkIChpZiBwcmVzZW50KS4KKyAqIGZyb250IGxlbmd0aCB3b3JkIChp ZiBpdCBpcyBub3Qgb21pdHRlZCBsaWtlIGluIGNhc2Ugb2YgY29udGVudC1zaXplIERhdHVtKTsK KyAqIHJlYWR0dXAgbXVzdCByZWFkIHRoZSB0dXBsZSBkYXRhIGFuZCBhZHZhbmNlIHBhc3QgdGhl IGJhY2sgbGVuZ3RoIHdvcmQKKyAqIChpZiBwcmVzZW50KS4KICAqCiAgKiBUaGUgd3JpdGUvcmVh ZCByb3V0aW5lcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIHR1cGxlIGRlc2NyaXB0aW9uIGRhdGEKICAq IHN0b3JlZCBpbiB0aGUgVHVwbGVzdG9yZXN0YXRlIHJlY29yZCwgaWYgbmVlZGVkLiBUaGV5IGFy ZSBhbHNvIGV4cGVjdGVkCkBAIC0yNDIsMTEgKzI1NiwxNiBAQCBzdGF0aWMgVHVwbGVzdG9yZXN0 YXRlICp0dXBsZXN0b3JlX2JlZ2luX2NvbW1vbihpbnQgZWZsYWdzLAogc3RhdGljIHZvaWQgdHVw bGVzdG9yZV9wdXR0dXBsZV9jb21tb24oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVw bGUpOwogc3RhdGljIHZvaWQgZHVtcHR1cGxlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlKTsKIHN0 YXRpYyB2b2lkIHR1cGxlc3RvcmVfdXBkYXRlbWF4KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwot c3RhdGljIHVuc2lnbmVkIGludCBnZXRsZW4oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBl b2ZPSyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVudHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgYm9vbCBlb2ZPSyk7CiBzdGF0aWMgdm9pZCAqY29weXR1cF9oZWFwKFR1cGxlc3Rv cmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCB3cml0ZXR1cF9oZWFwKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCk7CiBzdGF0aWMgdm9pZCAqcmVhZHR1cF9o ZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCitzdGF0aWMg dW5zaWduZWQgaW50IGxlbnR1cF9kYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVv Zk9LKTsKK3N0YXRpYyB2b2lkICpjb3B5dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkIHdyaXRldHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0 ZSAqc3RhdGUsIHZvaWQgKmRhdHVtKTsKK3N0YXRpYyB2b2lkICpyZWFkdHVwX2RhdHVtKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pOwogCiAvKgogICoJCXR1cGxlc3Rv cmVfYmVnaW5feHh4CkBAIC0yNjksNiArMjg4LDEyIEBAIHR1cGxlc3RvcmVfYmVnaW5fY29tbW9u KGludCBlZmxhZ3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5hbGxv d2VkTWVtID0gbWF4S0J5dGVzICogKGludDY0KSAxMDI0OwogCXN0YXRlLT5hdmFpbE1lbSA9IHN0 YXRlLT5hbGxvd2VkTWVtOwogCXN0YXRlLT5teWZpbGUgPSBOVUxMOworCS8qCisJICogU2V0IERh dHVtIHJlbGF0ZWQgZGF0YSB0byBpbnZhbGlkIGJ5IGRlZmF1bHQuCisJICovCisJc3RhdGUtPmRh dHVtVHlwZSA9IEludmFsaWRPaWQ7CisJc3RhdGUtPmRhdHVtVHlwZUxlbiA9IDA7CisJc3RhdGUt PmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7CiAKIAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0 dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlzIGluIGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ2LDYg KzM3MSwzNyBAQCB0dXBsZXN0b3JlX2JlZ2luX2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wg aW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQogCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFw OwogCXN0YXRlLT53cml0ZXR1cCA9IHdyaXRldHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSBy ZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxlbnR1cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogVGhlIHNhbWUgYXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBj cmVhdGUgc3RvcmUgZm9yIERhdHVtIHZhbHVlcy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1 cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJv b2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVzKQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7 CisJaW50CQkJZWZsYWdzOworCisJLyoKKwkgKiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBt ZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBpcyBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTgu MyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jlcy4KKwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3Mg PworCQkoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19G TEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9IHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywg aW50ZXJYYWN0LCBtYXhLQnl0ZXMpOworCXN0YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJ Z2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5kYXR1bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAm c3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsKKwlBc3NlcnQoIShzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwg JiYgcmFuZG9tQWNjZXNzKSk7CisKKwlzdGF0ZS0+Y29weXR1cCA9IGNvcHl0dXBfZGF0dW07CisJ c3RhdGUtPndyaXRldHVwID0gd3JpdGV0dXBfZGF0dW07CisJc3RhdGUtPnJlYWR0dXAgPSByZWFk dHVwX2RhdHVtOworCXN0YXRlLT5sZW50dXAgPSBsZW50dXBfZGF0dW07CiAKIAlyZXR1cm4gc3Rh dGU7CiB9CkBAIC00NDQsMTYgKzUwMCwxOSBAQCB0dXBsZXN0b3JlX2NsZWFyKFR1cGxlc3RvcmVz dGF0ZSAqc3RhdGUpCiAJewogCQlpbnQ2NAkJYXZhaWxNZW0gPSBzdGF0ZS0+YXZhaWxNZW07CiAK LQkJLyoKLQkJICogQmVsb3csIHdlIHJlc2V0IHRoZSBtZW1vcnkgY29udGV4dCBmb3Igc3Rvcmlu ZyB0dXBsZXMuICBUbyBzYXZlCi0JCSAqIGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1l bW9yeUNodW5rU3BhY2UoKSBvbiBhbGwgc3RvcmVkCi0JCSAqIHR1cGxlcywgd2UgYWRqdXN0IHRo ZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRoZSB0dXBsZXMgYW5kIGp1c3QKLQkJICogcmVjYWxs IFVTRU1FTSBmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIG1lbXR1cGxlcyBhcnJheS4gIEhlcmUg d2UKLQkJICoganVzdCBBc3NlcnQgdGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tp bmcgaGFzbid0IGdvbmUKLQkJICogd3JvbmcgYW55d2hlcmUuCi0JCSAqLwotCQlmb3IgKGkgPSBz dGF0ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQotCQkJYXZh aWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYg KCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJCS8qCisJCQkgKiBCZWxvdywgd2UgcmVz ZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUKKwkJCSAq IGZyb20gaGF2aW5nIHRvIGFsd2F5cyBjYWxsIEdldE1lbW9yeUNodW5rU3BhY2UoKSBvbiBhbGwg c3RvcmVkCisJCQkgKiB0dXBsZXMsIHdlIGFkanVzdCB0aGUgYXZhaWxNZW0gdG8gZm9yZ2V0IGFs bCB0aGUgdHVwbGVzIGFuZCBqdXN0CisJCQkgKiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3BhY2Ug dXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVyZSB3ZQorCQkJICoganVzdCBBc3NlcnQg dGhhdCdzIGNvcnJlY3QgYW5kIHRoZSBtZW1vcnkgdHJhY2tpbmcgaGFzbid0IGdvbmUKKwkJCSAq IHdyb25nIGFueXdoZXJlLgorCQkJICovCisJCQlmb3IgKGkgPSBzdGF0ZS0+bWVtdHVwZGVsZXRl ZDsgaSA8IHN0YXRlLT5tZW10dXBjb3VudDsgaSsrKQorCQkJCWF2YWlsTWVtICs9IEdldE1lbW9y eUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAogCQlhdmFpbE1lbSArPSBH ZXRNZW1vcnlDaHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXMpOwogCkBAIC03NzcsNiArODM2LDI1 IEBAIHR1cGxlc3RvcmVfcHV0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgSGVhcFR1cGxl IHR1cGxlKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogfQogCisvKgorICogTGlr ZSB0dXBsZXN0b3JlX3B1dHR1cGxlc2xvdCBidXQgZm9yIHNpbmdsZSBEYXR1bS4KKyAqLwordm9p ZAordHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBkYXR1 bSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0 ZS0+Y29udGV4dCk7CisKKwkvKgorCSAqIENvcHkgdGhlIERhdHVtLiAgKE11c3QgZG8gdGhpcyBl dmVuIGluIFdSSVRFRklMRSBjYXNlLiAgTm90ZSB0aGF0CisJICogQ09QWVRVUCBpbmNsdWRlcyBV U0VNRU0sIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdCBoZXJlLikKKwkgKi8KKwlkYXR1bSA9IFBvaW50 ZXJHZXREYXR1bShDT1BZVFVQKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0pKSk7CisKKwl0 dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihzdGF0ZSwgRGF0dW1HZXRQb2ludGVyKGRhdHVtKSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIFNpbWlsYXIg dG8gdHVwbGVzdG9yZV9wdXR0dXBsZSgpLCBidXQgd29yayBmcm9tIHZhbHVlcyArIG51bGxzIGFy cmF5cy4KICAqIFRoaXMgYXZvaWRzIGFuIGV4dHJhIHR1cGxlLWNvbnN0cnVjdGlvbiBvcGVyYXRp b24uCkBAIC0xMDI4LDEwICsxMTA2LDEwIEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJcGdfZmFsbHRocm91Z2g7CiAKIAkJY2Fz ZSBUU1NfUkVBREZJTEU6Ci0JCQkqc2hvdWxkX2ZyZWUgPSB0cnVlOworCQkJKnNob3VsZF9mcmVl ID0gIXN0YXRlLT5kYXR1bVR5cGVCeVZhbDsKIAkJCWlmIChmb3J3YXJkKQogCQkJewotCQkJCWlm ICgodHVwbGVuID0gZ2V0bGVuKHN0YXRlLCB0cnVlKSkgIT0gMCkKKwkJCQlpZiAoKHR1cGxlbiA9 IExFTlRVUChzdGF0ZSwgdHJ1ZSkpICE9IDApCiAJCQkJewogCQkJCQl0dXAgPSBSRUFEVFVQKHN0 YXRlLCB0dXBsZW4pOwogCQkJCQlyZXR1cm4gdHVwOwpAQCAtMTA0Myw2ICsxMTIxLDcgQEAgdHVw bGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJ CQkJfQogCQkJfQogCisJCQlBc3NlcnQoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCk7CiAJCQkvKgog CQkJICogQmFja3dhcmQuCiAJCQkgKgpAQCAtMTA2MCw3ICsxMTM5LDcgQEAgdHVwbGVzdG9yZV9n ZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJQXNzZXJ0 KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCXR1cGxlbiA9 IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJdHVwbGVuID0gTEVOVFVQKHN0YXRlLCBmYWxzZSk7 CiAKIAkJCWlmIChyZWFkcHRyLT5lb2ZfcmVhY2hlZCkKIAkJCXsKQEAgLTEwOTEsNyArMTE3MCw3 IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3 YXJkLAogCQkJCQlBc3NlcnQoIXN0YXRlLT50cnVuY2F0ZWQpOwogCQkJCQlyZXR1cm4gTlVMTDsK IAkJCQl9Ci0JCQkJdHVwbGVuID0gZ2V0bGVuKHN0YXRlLCBmYWxzZSk7CisJCQkJdHVwbGVuID0g TEVOVFVQKHN0YXRlLCBmYWxzZSk7CiAJCQl9CiAKIAkJCS8qCkBAIC0xMTUzLDYgKzEyMzIsNDEg QEAgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBm b3J3YXJkLAogCX0KIH0KIAorYm9vbAordHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGZvcndhcmQsCisJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAq cmVzdWx0KQoreworCURhdHVtIGRhdHVtOworCSpzaG91bGRfZnJlZSA9IGZhbHNlOworCisJZGF0 dW0gPSAoRGF0dW0pIHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsIHNob3VsZF9m cmVlKTsKKworCS8qIEZvciBieS12YWx1ZSBkYXR1bSB3ZSBtYXkgcmVjZWl2ZSB6ZXJvIGFzIHZh bGlkIHZhbHVlLiAqLworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJeworCQkvKiBSZXR1 cm4gZmFsc2Ugb25seSBvbiBFT0YgKi8KKwkJaWYgKHN0YXRlLT5yZWFkcHRyc1tzdGF0ZS0+YWN0 aXZlcHRyXS5lb2ZfcmVhY2hlZCkKKwkJeworCQkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCSpyZXN1bHQgPSBkYXR1bTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJaWYgKGRhdHVtKQorCXsKKwkJKnJlc3VsdCA9IGRhdHVtOworCQly ZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwogLyoKICAqIHR1cGxlc3RvcmVfZ2V0dHVw bGVzbG90X2ZvcmNlIC0gZXhwb3J0ZWQgZnVuY3Rpb24gdG8gZmV0Y2ggYSB0dXBsZQogICoKQEAg LTEyMDUsMTAgKzEzMTksMjAgQEAgdHVwbGVzdG9yZV9hZHZhbmNlKFR1cGxlc3RvcmVzdGF0ZSAq c3RhdGUsIGJvb2wgZm9yd2FyZCkKIAkJCXBmcmVlKHR1cGxlKTsKIAkJcmV0dXJuIHRydWU7CiAJ fQotCWVsc2UKKworCS8qCisJICogQSBOVUxMIHJldHVybiBub3JtYWxseSBtZWFucyBlbmQtb2Yt ZGF0YSwgYnV0IGZvciBieS12YWx1ZSBkYXR1bQorCSAqIHN0b3JlcyBhIHZhbGlkIHplcm8tdmFs dWVkIGRhdHVtIChlLmcuLCBmYWxzZSwgMCkgaXMgaW5kaXN0aW5ndWlzaGFibGUKKwkgKiBmcm9t IE5VTEwgdmlhIHBvaW50ZXIgY2hlY2suICBVc2UgZW9mX3JlYWNoZWQgdG8gZGlzdGluZ3Vpc2gu CisJICovCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKIAl7Ci0JCXJldHVybiBmYWxzZTsK KwkJVFNSZWFkUG9pbnRlciAqcmVhZHB0ciA9ICZzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2 ZXB0cl07CisKKwkJcmV0dXJuICFyZWFkcHRyLT5lb2ZfcmVhY2hlZDsKIAl9CisKKwlyZXR1cm4g ZmFsc2U7CiB9CiAKIC8qCkBAIC0xMjcxLDcgKzEzOTUsMTMgQEAgdHVwbGVzdG9yZV9za2lwdHVw bGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludDY0IG50dXBsZXMsIGJvb2wgZm9yd2FyZCkK IAkJCQl0dXBsZSA9IHR1cGxlc3RvcmVfZ2V0dHVwbGUoc3RhdGUsIGZvcndhcmQsICZzaG91bGRf ZnJlZSk7CiAKIAkJCQlpZiAodHVwbGUgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNlOworCQkJ CXsKKwkJCQkJLyogU2VlIHR1cGxlc3RvcmVfYWR2YW5jZSBmb3Igd2h5IHBvaW50ZXIgY2hlY2sg aXMgaW5zdWZmaWNpZW50ICovCisJCQkJCWlmICghc3RhdGUtPmRhdHVtVHlwZUJ5VmFsIHx8CisJ CQkJCQlzdGF0ZS0+cmVhZHB0cnNbc3RhdGUtPmFjdGl2ZXB0cl0uZW9mX3JlYWNoZWQpCisJCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAoc2hvdWxkX2Zy ZWUpCiAJCQkJCXBmcmVlKHR1cGxlKTsKIAkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAt MTUwNSw4ICsxNjM1LDExIEBAIHR1cGxlc3RvcmVfdHJpbShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl KQogCS8qIFJlbGVhc2Ugbm8tbG9uZ2VyLW5lZWRlZCB0dXBsZXMgKi8KIAlmb3IgKGkgPSBzdGF0 ZS0+bWVtdHVwZGVsZXRlZDsgaSA8IG5yZW1vdmU7IGkrKykKIAl7Ci0JCUZSRUVNRU0oc3RhdGUs IEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkpOwotCQlwZnJlZShzdGF0 ZS0+bWVtdHVwbGVzW2ldKTsKKwkJaWYgKCFzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJCXsKKwkJ CUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2Uoc3RhdGUtPm1lbXR1cGxlc1tpXSkp OworCQkJcGZyZWUoc3RhdGUtPm1lbXR1cGxlc1tpXSk7CisJCX0KIAkJc3RhdGUtPm1lbXR1cGxl c1tpXSA9IE5VTEw7CiAJCS8qIEFzIGluIGR1bXB0dXBsZXMoKSwgaW5jcmVtZW50IG1lbXR1cGRl bGV0ZWQgc3luY2hyb25vdXNseSAqLwogCQlzdGF0ZS0+bWVtdHVwZGVsZXRlZCsrOwpAQCAtMTYw MywyNSArMTczNiw2IEBAIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpCiAJcmV0dXJuIChzdGF0ZS0+c3RhdHVzID09IFRTU19JTk1FTSk7CiB9CiAKLQotLyoKLSAq IFRhcGUgaW50ZXJmYWNlIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0 bGVuKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCi17Ci0JdW5zaWduZWQgaW50 IGxlbjsKLQlzaXplX3QJCW5ieXRlczsKLQotCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yo c3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKLQlpZiAobmJ5dGVzID09 IDApCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIGxlbjsKLX0KLQotCiAvKgogICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEhlYXBUdXBsZSBjYXNlCiAgKgpAQCAtMTYzMiw2ICsxNzQ2 LDE5IEBAIGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQogICogdG8g d3JpdGUgdGhhdCBzZXBhcmF0ZWx5LgogICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1 cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWduZWQg aW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVF T0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAobmJ5dGVz ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHZv aWQgKgogY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCkKIHsK QEAgLTE2NzgsMyArMTgwNSwxMjcgQEAgcmVhZHR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUsIHVuc2lnbmVkIGludCBsZW4pCiAJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOwogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJv dXRpbmVzIHNwZWNpYWxpemVkIGZvciBEYXR1bSBjYXNlLgorICoKKyAqIEhhbmRsZXMgYm90aCBm aXhlZCBhbmQgdmFyaWFibGUtbGVuZ3RoIERhdHVtcyBlZmZpY2llbnRseToKKyAqIC0gRml4ZWQt bGVuZ3RoIGFuZCBWYXJpYWJsZS1sZW5ndGggaW5jbHVkZXMgbGVuZ3RoIHByZWZpeCAoYW5kIHN1 ZmZpeCBpZiBiYWNrd2FyZCBzY2FuKQorICogLSBCeS12YWx1ZSB0eXBlcyBoYW5kbGVkIGlubGlu ZSB3aXRob3V0IGV4dHJhIGNvcHlpbmcsIHN0b3Jpbmcgc2luZ2xlIGV4dHJhIGJ5dGUKKyAqICAg WFhYOiBjb25zaWRlciByZWZhY3RvcmluZyB0byBhdm9pZCBpdCwgY3VycmVudGx5IG5lZWQgaXQg Zm9yIGNvcnJlY3QgcmV3aW5kIGxvZ2ljCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAorbGVu dHVwX2RhdHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWdu ZWQgaW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBl ICE9IEludmFsaWRPaWQpOworCisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVp bnQ4CWp1bms7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwg Jmp1bmssIHNpemVvZih1aW50OCksIGVvZk9LKTsKKwkJaWYgKG5ieXRlcyA9PSAwKQorCQkJcmV0 dXJuIDA7CisJCUFzc2VydChqdW5rID09ICh1aW50OCkgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisJ CXJldHVybiBzdGF0ZS0+ZGF0dW1UeXBlTGVuOworCX0KKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFk TWF5YmVFT0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAo bmJ5dGVzID09IDApCisJCXJldHVybiAwOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lk ICoKK2NvcHl0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pCit7 CisJRGF0dW0gZDsKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlkT2lkKTsKKwlp ZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCQlyZXR1cm4gRGF0dW1HZXRQb2ludGVyKFBvaW50 ZXJHZXREYXR1bShkYXR1bSkpOworCisJaWYgKGRhdHVtID09IE5VTEwpCisJCXJldHVybiBOVUxM OworCisJZCA9IGRhdHVtQ29weShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0ZS0+ZGF0dW1U eXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCVVTRU1FTShzdGF0ZSwgR2V0TWVtb3J5 Q2h1bmtTcGFjZShEYXR1bUdldFBvaW50ZXIoZCkpKTsKKwlyZXR1cm4gRGF0dW1HZXRQb2ludGVy KGQpOworfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpz dGF0ZSwgdm9pZCAqZGF0dW0pCit7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxp ZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCXVpbnQ4IGp1bmsgPSBz dGF0ZS0+ZGF0dW1UeXBlTGVuOyAvKiBvdmVyZmxvdyBpcyBvayAqLworCQlEYXR1bSB2OworCQlB c3NlcnQoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApOworCisJCS8qIGp1c3QgbWFya2VyIGJ5dGUg dXNlZCB0byB0cmFjayB0aGUgZW5kIG9mIGRhdGEgZm9yIHJld2luZCBsb2dpYyAqLworCQlCdWZG aWxlV3JpdGUoc3RhdGUtPm15ZmlsZSwgJmp1bmssIHNpemVvZihqdW5rKSk7CisJCXN0b3JlX2F0 dF9ieXZhbCgmdiwgUG9pbnRlckdldERhdHVtKGRhdHVtKSwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlmaWxlLCAmdiwgc3RhdGUtPmRhdHVtVHlwZUxlbik7 CisJCUFzc2VydCghc3RhdGUtPmJhY2t3YXJkKTsKKwl9CisJZWxzZQorCXsKKwkJdW5zaWduZWQg aW50IHNpemU7CisJCXVuc2lnbmVkIGludCB0dXBsZW47CisKKwkJaWYgKHN0YXRlLT5kYXR1bVR5 cGVMZW4gPCAwKQorCQkJc2l6ZSA9IGRhdHVtR2V0U2l6ZShQb2ludGVyR2V0RGF0dW0oZGF0dW0p LCBzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQllbHNlCisJ CQlzaXplID0gc3RhdGUtPmRhdHVtVHlwZUxlbjsKKworCQkvKgorCQkgKiBJbmNsdWRlIHNpemVv Zih1bnNpZ25lZCBpbnQpIGluIHRoZSBzdG9yZWQgbGVuZ3RoLCBtYXRjaGluZyB0aGUKKwkJICog Y29udmVudGlvbiB1c2VkIGJ5IHdyaXRldHVwX2hlYXAuICBUaGUgYmFja3dhcmQtc2NhbiBzZWVr CisJCSAqIGFyaXRobWV0aWMgaW4gdHVwbGVzdG9yZV9nZXR0dXBsZSBhc3N1bWVzIHRoaXMuCisJ CSAqLworCQl0dXBsZW4gPSBzaXplICsgc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCUJ1ZkZpbGVX cml0ZShzdGF0ZS0+bXlmaWxlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisKKwkJQnVmRmls ZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWlsaW5n IGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkKQorCQkJQnVmRmlsZVdyaXRl KHN0YXRlLT5teWZpbGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKworCQlGUkVFTUVNKHN0 YXRlLCBHZXRNZW1vcnlDaHVua1NwYWNlKGRhdHVtKSk7CisJCXBmcmVlKGRhdHVtKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkICoKK3JlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwg dW5zaWduZWQgaW50IGxlbikKK3sKKwlBc3NlcnQoc3RhdGUtPmRhdHVtVHlwZSAhPSBJbnZhbGlk T2lkKTsKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKQorCXsKKwkJRGF0dW0gZGF0dW0gPSAw OworCisJCUFzc2VydChzdGF0ZS0+ZGF0dW1UeXBlTGVuID4gMCk7CisJCUFzc2VydChsZW4gPT0g c3RhdGUtPmRhdHVtVHlwZUxlbik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwg JmRhdHVtLCBzdGF0ZS0+ZGF0dW1UeXBlTGVuKTsKKworCQlBc3NlcnQoIXN0YXRlLT5iYWNrd2Fy ZCk7CisJCXJldHVybiBEYXR1bUdldFBvaW50ZXIoZmV0Y2hfYXR0KCZkYXR1bSwgdHJ1ZSwgc3Rh dGUtPmRhdHVtVHlwZUxlbikpOworCX0KKwllbHNlCisJeworCQl1bnNpZ25lZCBpbnQgZGF0YWxl biA9IGxlbiAtIHNpemVvZih1bnNpZ25lZCBpbnQpOworCQl2b2lkICpkYXRhID0gcGFsbG9jKGRh dGFsZW4pOworCisJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgZGF0YSwgZGF0YWxl bik7CisKKwkJLyogbmVlZCB0cmFpbGluZyBsZW5ndGggd29yZD8gKi8KKwkJaWYgKHN0YXRlLT5i YWNrd2FyZCkKKwkJCUJ1ZkZpbGVSZWFkRXhhY3Qoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9m KGxlbikpOworCisJCXJldHVybiBkYXRhOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3R1cGxlc3RvcmUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc3RvcmUuaAppbmRl eCBmNjM4Yjk2ZTE1Ni4uZTE2ZDlhM2QzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3R1cGxlc3RvcmUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKQEAgLTEs MTcgKzEsMTggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHR1cGxlc3RvcmUuaAotICoJ ICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHR1cGxlIHN0b3JhZ2UuCisgKgkg IEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgYW5k IERhdHVtcy4KICAqCi0gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9m IHR1cGxlcyBmb3IgcHVycG9zZXMgc3VjaAotICogYXMgTWF0ZXJpYWxpemUgbm9kZXMsIGhhc2hq b2luIGJhdGNoIGZpbGVzLCBldGMuICBJdCBpcyBlc3NlbnRpYWxseQotICogYSBkdW1iZWQtZG93 biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOyBpdCBkb2VzIG5vIHNvcnRpbmcgb2YgdHVwbGVzCi0g KiBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2Ugb2YgdHVwbGVz LiAgSG93ZXZlciwKLSAqIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxsb3dl ZCB0byBzdGFydCByZWFkaW5nIHRoZSBzZXF1ZW5jZQotICogYmVmb3JlIGl0IGhhcyBhbGwgYmVl biB3cml0dGVuLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjdXJzb3JzLAotICog YmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcyB3aXRoaW4gdGhlIGFscmVhZHktc2Nhbm5l ZCBwb3J0aW9uIG9mCi0gKiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MgdGhlIHVu ZGVybHlpbmcgc2NhbiB0byBjb21wbGV0aW9uLgotICogQWxzbywgaXQgaXMgcG9zc2libGUgdG8g c3VwcG9ydCBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWFkIHBvaW50ZXJzLgorICogVGhpcyBtb2R1 bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3RvcmFnZSBvZiBlaXRoZXIgdHVwbGVzIG9yIHNpbmdsZQor ICogRGF0dW0gdmFsdWVzIGZvciBwdXJwb3NlcyBzdWNoIGFzIE1hdGVyaWFsaXplIG5vZGVzLCBo YXNoam9pbiBiYXRjaAorICogZmlsZXMsIGV0Yy4gSXQgaXMgZXNzZW50aWFsbHkgYSBkdW1iZWQt ZG93biB2ZXJzaW9uIG9mIHR1cGxlc29ydC5jOworICogaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcyBidXQgY2FuIG9ubHkgc3RvcmUgYW5kIHJlZ3VyZ2l0YXRlIGEgc2VxdWVuY2UKKyAqIG9m IHR1cGxlcy4gIEhvd2V2ZXIsIGJlY2F1c2Ugbm8gc29ydCBpcyByZXF1aXJlZCwgaXQgaXMgYWxs b3dlZCB0byBzdGFydAorICogcmVhZGluZyB0aGUgc2VxdWVuY2UgYmVmb3JlIGl0IGhhcyBhbGwg YmVlbiB3cml0dGVuLgorICoKKyAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vy c29ycywgYmVjYXVzZSBpdCBhbGxvd3MgcmFuZG9tIGFjY2VzcworICogd2l0aGluIHRoZSBhbHJl YWR5LXNjYW5uZWQgcG9ydGlvbiBvZiBhIHF1ZXJ5IHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MK KyAqIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqCiAgKiBBIHRlbXBvcmFy eSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2VlZHMgdGhlCiAgKiBz cGFjZSBsaW1pdCBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KQEAgLTM5LDE0ICs0MCwxMyBAQAog ICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUgVHVwbGVzdG9yZXN0YXRlOwogCi0v KgotICogQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBzdG9yZSBNaW5pbWFsVHVwbGVzLCBidXQg aXQgd291bGQgYmUgZWFzeQotICogdG8gc3VwcG9ydCB0aGUgc2FtZSBiZWhhdmlvciBmb3IgSW5k ZXhUdXBsZXMgYW5kL29yIGJhcmUgRGF0dW1zLgotICovCi0KIGV4dGVybiBUdXBsZXN0b3Jlc3Rh dGUgKnR1cGxlc3RvcmVfYmVnaW5faGVhcChib29sIHJhbmRvbUFjY2VzcywKIAkJCQkJCQkJCQkJ ICBib29sIGludGVyWGFjdCwKIAkJCQkJCQkJCQkJICBpbnQgbWF4S0J5dGVzKTsKK2V4dGVybiBU dXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lkIGRhdHVtVHlwZSwKKwkJ CQkJCQkJCQkJICAgYm9vbCByYW5kb21BY2Nlc3MsCisJCQkJCQkJCQkJCSAgIGJvb2wgaW50ZXJY YWN0LAorCQkJCQkJCQkJCQkgICBpbnQgbWF4S0J5dGVzKTsKIAogZXh0ZXJuIHZvaWQgdHVwbGVz dG9yZV9zZXRfZWZsYWdzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBA IC01NSw2ICs1NSw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0dHVwbGVzbG90KFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsCiBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlKFR1cGxl c3RvcmVzdGF0ZSAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCB0dXBsZXN0 b3JlX3B1dHZhbHVlcyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBUdXBsZURlc2MgdGRlc2MsCiAJ CQkJCQkJCSBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251bGwpOworZXh0ZXJu IHZvaWQgdHVwbGVzdG9yZV9wdXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBEYXR1bSBk YXR1bSk7CiAKIGV4dGVybiBpbnQJdHVwbGVzdG9yZV9hbGxvY19yZWFkX3BvaW50ZXIoVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgaW50IGVmbGFncyk7CiAKQEAgLTcyLDYgKzczLDggQEAgZXh0ZXJu IGJvb2wgdHVwbGVzdG9yZV9pbl9tZW1vcnkoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7CiAKIGV4 dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUs IGJvb2wgZm9yd2FyZCwKIAkJCQkJCQkJCWJvb2wgY29weSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OworZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXRkYXR1bShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRl LCBib29sIGZvcndhcmQsCisJCQkJCQkJCWJvb2wgKnNob3VsZF9mcmVlLCBEYXR1bSAqcmVzdWx0 KTsKIAogZXh0ZXJuIGJvb2wgdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3RfZm9yY2UoVHVwbGVzdG9y ZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkJCSAgYm9vbCBjb3B5LCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7Ci0tIAoyLjQzLjAKCg== --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v34-0004-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtk03 RnJvbSA0MTJmN2U4NTBkOTNmNGNlMjdlNzk1NWJmY2ExMDc2YzRkMDg2MmJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDQvN10gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgc2FtZSBwcmVkaWNhdGUgKGlmIGV4 aXN0cykgYXMgaW4gbWFpbiBpbmRleAotIHVzZSBpdCB0byB0cmFjayB0dXBsZXMgaW5zZXJ0ZWQg ZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIG1lcmdlIGF1eGlsaWFyeSBpbmRleCB3aXRoIG1haW4g aW5kZXggZHVyaW5nIHZhbGlkYXRpb24gdG8gY2F0Y2ggdXAgbmV3IGluZGV4IHdpdGggYW55IHR1 cGxlcyBtaXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBwaGFzZQotIGF1dG9tYXRpY2FsbHkgZHJvcCBh dXhpbGlhcnkgd2hlbiBtYWluIGluZGV4IGlzIHJlYWR5CgpUbyBtZXJnZSBtYWluIGFuZCBhdXhp bGlhcnkgaW5kZXhlczoKLSBpbmRleF9idWxrX2RlbGV0ZSBjYWxsZWQgZm9yIGJvdGgsIFRJRHMg cHV0IGludG8gdHVwbGVzb3J0Ci0gYm90aCB0dXBsZXNvcnQgYXJlIGJlaW5nIHNvcnRlZAotIGJv dGggdHVwbGVzb3J0IHNjYW5uZWQgd2l0aCB0d28gcG9pbnRlcnMgbG9va2luZyBmb3IgdGhlIFRJ RHMgcHJlc2VudCBpbiBhdXhpbGlhcnkgaW5kZXgsIGJ1dCBhYnNlbnQgaW4gbWFpbiBvbmUKLSBh bGwgc3VjaCBUSURzIGFyZSBwdXQgaW50byB0dXBsZXN0b3JlCi0gYWxsIFRJRHMgaW4gdHVwbGVz dG9yZSBhcmUgZmV0Y2hlZCB1c2luZyB0aGUgc3RyZWFtLCB0dXBsZXN0b3JlIHVzZWQgaW4gaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4dCB0byBwcm92aWRlIHRoZSBu ZXh0IHBhZ2UgdG8gcHJlZmV0Y2gKLSBpZiBmZXRjaGVkIHR1cGxlIGlzIGFsaXZlIC0gaXQgaXMg aW5zZXJ0ZWQgaW50byB0aGUgbWFpbiBpbmRleAoKVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZv ciBhIHNlY29uZCBmdWxsIHRhYmxlIHNjYW4gZHVyaW5nIHZhbGlkYXRpb24sIGltcHJvdmluZyBw ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQwICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU2MSArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMyMiArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ1ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQgIHwgICA5ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8 ICAxMiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oICAgICAgICAgICAgICAgIHwgICA5 ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oICAgICAgICAgICAgfCAgMTMgKy0K IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8ICA0MiArKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgfCAgMTcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICAyMSArCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMTU2IGlu c2VydGlvbnMoKyksIDMzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCAzMTIz NzRkYTVlMC4uYTQxODZlOGEyMmYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5n LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtNjc5Miw2ICs2Nzky LDE4IEBAIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAg ICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+CiAgICAgIDwv cm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHdyaXRl cnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IG9y IDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0 cmFuc2FjdGlvbnMKKyAgICAgICB3aXRoIHdyaXRlIGxvY2tzIHRoYXQgY2FuIHBvdGVudGlhbGx5 IHNlZSB0aGUgdGFibGUgdG8gZmluaXNoLCB0byBlbnN1cmUgdXNlIG9mIGF1eGlsaWFyeSBpbmRl eCBmb3IgbmV3IHR1cGxlcyBpbgorICAgICAgIGZ1dHVyZSB0cmFuc2FjdGlvbnMuCisgICAgICAg VGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4KKyAgICAg ICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfdG90YWw8L3N0cnVjdG5hbWU+LCA8c3RydWN0 bmFtZT5sb2NrZXJzX2RvbmU8L3N0cnVjdG5hbWU+CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPmN1 cnJlbnRfbG9ja2VyX3BpZDwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MKKyAgICAg ICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93 PgogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaXRlcmFsPmJ1aWxkaW5nIGluZGV4PC9saXRl cmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+CkBAIC02ODMyLDEzICs2ODQ0LDEyIEBAIEZST00g cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgotICAgICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZh bGlkYXRpb246IHNjYW5uaW5nIHRhYmxlPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+ PGxpdGVyYWw+aW5kZXggdmFsaWRhdGlvbjogbWVyZ2luZyBpbmRleGVzPC9saXRlcmFsPjwvZW50 cnk+CiAgICAgICA8ZW50cnk+Ci0gICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJF TlRMWTwvY29tbWFuZD4gaXMgc2Nhbm5pbmcgdGhlIHRhYmxlCi0gICAgICAgdG8gdmFsaWRhdGUg dGhlIGluZGV4IHR1cGxlcyBjb2xsZWN0ZWQgaW4gdGhlIHByZXZpb3VzIHR3byBwaGFzZXMuCisg ICAgICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgbWVy Z2luZyBjb250ZW50IG9mIGF1eGlsaWFyeSBpbmRleCB3aXRoIHRoZSB0YXJnZXQgaW5kZXguCiAg ICAgICAgVGhpcyBwaGFzZSBpcyBza2lwcGVkIHdoZW4gbm90IGluIGNvbmN1cnJlbnQgbW9kZS4K LSAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPmJsb2Nrc190b3RhbDwvc3RydWN0bmFtZT4gKHNl dCB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgdGFibGUpCi0gICAgICAgYW5kIDxzdHJ1Y3RuYW1l PmJsb2Nrc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWluIHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlv biBmb3IgdGhpcyBwaGFzZS4KKyAgICAgICBDb2x1bW5zIDxzdHJ1Y3RuYW1lPnR1cGxlc190b3Rh bDwvc3RydWN0bmFtZT4gKHNldCB0byB0aGUgbnVtYmVyIG9mIHR1cGxlcyB0byBiZSBtZXJnZWQp CisgICAgICAgYW5kIDxzdHJ1Y3RuYW1lPnR1cGxlc19kb25lPC9zdHJ1Y3RuYW1lPiBjb250YWlu IHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwaGFzZS4KICAgICAgIDwvZW50cnk+ CiAgICAgIDwvcm93PgogICAgICA8cm93PgpAQCAtNjg1NSw4ICs2ODY2LDkgQEAgRlJPTSBwZ19z dGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkOwogICAgICA8cm93PgogICAgICAg PGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZDwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPlJFSU5ERVgg Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKLSAgICAg ICB3aXRoIHJlYWQgbG9ja3Mgb24gdGhlIHRhYmxlIHRvIGZpbmlzaCwgYmVmb3JlIG1hcmtpbmcg dGhlIG9sZCBpbmRleCBkZWFkLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJS RU5UTFk8L2NvbW1hbmQ+IGlzIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucworICAgICAgICB3aXRo IHJlYWQgbG9ja3Mgb24gdGhlIHRhYmxlIHRvIGZpbmlzaCwgYmVmb3JlIG1hcmtpbmcgdGhlIGF1 eGlsaWFyeSBpbmRleCBhcyBkZWFkLgorICAgICAgIDxjb21tYW5kPlJFSU5ERVggQ09OQ1VSUkVO VExZPC9jb21tYW5kPiBpcyBhbHNvIHdhaXRpbmcgYmVmb3JlIG1hcmtpbmcgdGhlIG9sZCBpbmRl eCBhcyBkZWFkLgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25j dXJyZW50IG1vZGUuCiAgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9z dHJ1Y3RuYW1lPiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgogICAgICAg IGFuZCA8c3RydWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4g dGhlIHByb2dyZXNzCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCBiYjc1MDVkMTcx Yi4uMTJjODg1ODdhNzkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4 LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbApAQCAtNjIwLDEw ICs2MjAsMTAgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsg SUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgICBvdXQgd3JpdGVzLiAgVGhp cyBtZXRob2QgaXMgaW52b2tlZCBieSBzcGVjaWZ5aW5nIHRoZQogICAgIDxsaXRlcmFsPkNPTkNV UlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uIG9mIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFu ZD4uCiAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLAotICAgIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHR3byBzY2FucyBvZiB0aGUgdGFibGUs IGFuZCBpbgotICAgIGFkZGl0aW9uIGl0IG11c3Qgd2FpdCBmb3IgYWxsIGV4aXN0aW5nIHRyYW5z YWN0aW9ucyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5Ci0gICAgbW9kaWZ5IG9yIHVzZSB0aGUgaW5k ZXggdG8gdGVybWluYXRlLiAgVGh1cwotICAgIHRoaXMgbWV0aG9kIHJlcXVpcmVzIG1vcmUgdG90 YWwgd29yayB0aGFuIGEgc3RhbmRhcmQgaW5kZXggYnVpbGQgYW5kIHRha2VzCisgICAgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBtdXN0IHBlcmZvcm0gdGFibGUgc2NhbiBm b2xsb3dlZCBieQorICAgIHZhbGlkYXRpb24gcGhhc2UsIGFuZCBpbiBhZGRpdGlvbiBpdCBtdXN0 IHdhaXQgZm9yIGFsbCBleGlzdGluZyB0cmFuc2FjdGlvbnMKKyAgICB0aGF0IGNvdWxkIHBvdGVu dGlhbGx5IG1vZGlmeSBvciB1c2UgdGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKKyAgICB0 aGlzIG1ldGhvZCByZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4 IGJ1aWxkIGFuZCBtYXkgdGFrZQogICAgIHNpZ25pZmljYW50bHkgbG9uZ2VyIHRvIGNvbXBsZXRl LiAgSG93ZXZlciwgc2luY2UgaXQgYWxsb3dzIG5vcm1hbAogICAgIG9wZXJhdGlvbnMgdG8gY29u dGludWUgd2hpbGUgdGhlIGluZGV4IGlzIGJ1aWx0LCB0aGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9y CiAgICAgYWRkaW5nIG5ldyBpbmRleGVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gIE9m IGNvdXJzZSwgdGhlIGV4dHJhIENQVQpAQCAtNjMxLDE0ICs2MzEsMTQgQEAgQ1JFQVRFIFsgVU5J UVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+Ci0gICAgSW4gYSBjb25jdXJyZW50 IGluZGV4IGJ1aWxkLCB0aGUgaW5kZXggaXMgYWN0dWFsbHkgZW50ZXJlZCBhcyBhbgotICAgIDxx dW90ZT5pbnZhbGlkPC9xdW90ZT4gaW5kZXggaW50bwotICAgIHRoZSBzeXN0ZW0gY2F0YWxvZ3Mg aW4gb25lIHRyYW5zYWN0aW9uLCB0aGVuIHR3byB0YWJsZSBzY2FucyBvY2N1ciBpbgotICAgIHR3 byBtb3JlIHRyYW5zYWN0aW9ucy4gIEJlZm9yZSBlYWNoIHRhYmxlIHNjYW4sIHRoZSBpbmRleCBi dWlsZCBtdXN0CisgICAgSW4gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkLCB0aGUgbWFpbiBhbmQg YXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGFjdHVhbGx5CisgICAgZW50ZXJlZCBhcyBhbiA8cXVvdGU+ aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KKyAgICB0aGUgc3lzdGVtIGNhdGFsb2dzIGluIG9u ZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gcGhhc2VzIG9jY3VyIGluCisgICAgbXVsdGlwbGUgdHJh bnNhY3Rpb25zLiAgQmVmb3JlIGVhY2ggcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0CiAgICAg d2FpdCBmb3IgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBtb2RpZmllZCB0aGUgdGFi bGUgdG8gdGVybWluYXRlLgotICAgIEFmdGVyIHRoZSBzZWNvbmQgc2NhbiwgdGhlIGluZGV4IGJ1 aWxkIG11c3Qgd2FpdCBmb3IgYW55IHRyYW5zYWN0aW9ucworICAgIEFmdGVyIHRoZSBzZWNvbmQg cGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlvbnMKICAg ICB0aGF0IGhhdmUgYSBzbmFwc2hvdCAoc2VlIDx4cmVmIGxpbmtlbmQ9Im12Y2MiLz4pIHByZWRh dGluZyB0aGUgc2Vjb25kCi0gICAgc2NhbiB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0cmFuc2Fj dGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ugb2YgY29uY3VycmVudAorICAgIHBoYXNlIHRvIHRlcm1p bmF0ZSwgaW5jbHVkaW5nIHRyYW5zYWN0aW9ucyB1c2VkIGJ5IGFueSBwaGFzZSBvZiBjb25jdXJy ZW50CiAgICAgaW5kZXggYnVpbGRzIG9uIG90aGVyIHRhYmxlcywgaWYgdGhlIGluZGV4ZXMgaW52 b2x2ZWQgYXJlIHBhcnRpYWwgb3IgaGF2ZQogICAgIGNvbHVtbnMgdGhhdCBhcmUgbm90IHNpbXBs ZSBjb2x1bW4gcmVmZXJlbmNlcy4KICAgICBUaGVuIGZpbmFsbHkgdGhlIGluZGV4IGNhbiBiZSBt YXJrZWQgPHF1b3RlPnZhbGlkPC9xdW90ZT4gYW5kIHJlYWR5IGZvciB1c2UsCkBAIC02NTEsMTAg KzY1MSwxMSBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJ RiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgPHBhcmE+CiAgICAgSWYgYSBw cm9ibGVtIGFyaXNlcyB3aGlsZSBzY2FubmluZyB0aGUgdGFibGUsIHN1Y2ggYXMgYSBkZWFkbG9j ayBvciBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8 Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+Ci0gICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0 IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4LiBUaGlzIGluZGV4 Ci0gICAgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcyBiZWNhdXNlIGl0IG1p Z2h0IGJlIGluY29tcGxldGU7Ci0gICAgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1bWUgdXBk YXRlIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgotICAgIDxj b21tYW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggYW4gaW5kZXggYXMg PGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0IGxl YXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGFuZCBpdHMKKyAgICBh c3NvY2lhdGVkIGF1eGlsaWFyeSBpbmRleC4gVGhlc2UgaW5kZXhlcworICAgIHdpbGwgYmUgaWdu b3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGluY29tcGxl dGU7CisgICAgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUgb3ZlcmhlYWQu IFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+CisgICAgPGNvbW1hbmQ+XGQ8L2Nv bW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBpbmRleGVzIGFzIDxsaXRlcmFsPklOVkFM SUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0Z3Jlcz0jIFxkIHRhYgpAQCAt NjY0LDExICs2NjUsMTIgQEAgcG9zdGdyZXM9IyBcZCB0YWIKICBjb2wgICAgfCBpbnRlZ2VyIHwg ICAgICAgICAgIHwgICAgICAgICAgfAogSW5kZXhlczoKICAgICAiaWR4IiBidHJlZSAoY29sKSBJ TlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1saXN0 aW5nPgogCiAgICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGluIHN1Y2gg Y2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCi0gICAg PGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uICAoQW5vdGhlciBw b3NzaWJpbGl0eSBpcworICAgIG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlc2Ug aW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0KKyAgICA8Y29tbWFuZD5DUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3RoZXIgcG9zc2liaWxpdHkgaXMKICAgICB0 byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5kPlJFSU5ERVggSU5ERVggQ09OQ1VSUkVO VExZPC9jb21tYW5kPikuCiAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5kZXggMTg1 Y2Q3NWNhMzAuLjllMDI0ODI2MWFlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbApAQCAtMzY4LDkgKzM2 OCw4IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAgPHByb2R1Y3RuYW1lPlBvc3RncmVT UUw8L3Byb2R1Y3RuYW1lPiBzdXBwb3J0cyByZWJ1aWxkaW5nIGluZGV4ZXMgd2l0aCBtaW5pbXVt IGxvY2tpbmcKICAgICBvZiB3cml0ZXMuICBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHNwZWNp ZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24gb2Yg PGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4uIFdoZW4gdGhpcyBvcHRpb24KLSAgICBpcyB1c2Vk LCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28g c2NhbnMgb2YgdGhlIHRhYmxlCi0gICAgZm9yIGVhY2ggaW5kZXggdGhhdCBuZWVkcyB0byBiZSBy ZWJ1aWx0IGFuZCB3YWl0IGZvciB0ZXJtaW5hdGlvbiBvZgotICAgIGFsbCBleGlzdGluZyB0cmFu c2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2UgdGhlIGluZGV4LgorICAgIGlzIHVz ZWQsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHNl dmVyYWwgc3RlcHMgdG8gZW5zdXJlIGRhdGEKKyAgICBjb25zaXN0ZW5jeSB3aGlsZSBhbGxvd2lu ZyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51ZS4KICAgICBUaGlzIG1ldGhvZCByZXF1aXJl cyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4CiAgICAgcmVidWlsZCBhbmQg dGFrZXMgc2lnbmlmaWNhbnRseSBsb25nZXIgdG8gY29tcGxldGUgYXMgaXQgbmVlZHMgdG8gd2Fp dAogICAgIGZvciB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IG1vZGlmeSB0aGUg aW5kZXguIEhvd2V2ZXIsIHNpbmNlCkBAIC0zODgsNyArMzg3LDcgQEAgUkVJTkRFWCBbICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0g KSBdIHsgREEKICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJh PgotICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZpbml0aW9uIGlzIGFkZGVkIHRvIHRo ZSBjYXRhbG9nCisgICAgICAgQSBuZXcgdHJhbnNpZW50IGluZGV4IGRlZmluaXRpb24gYW5kIGFu IGF1eGlsaWFyeSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIGNhdGFsb2cKICAgICAgICA8bGl0ZXJh bD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmluaXRpb24gd2lsbCBiZSB1c2VkIHRvIHJl cGxhY2UKICAgICAgICB0aGUgb2xkIGluZGV4LiAgQSA8bGl0ZXJhbD5TSEFSRSBVUERBVEUgRVhD TFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0CiAgICAgICAgc2Vzc2lvbiBsZXZlbCBpcyB0YWtlbiBv biB0aGUgaW5kZXhlcyBiZWluZyByZWluZGV4ZWQgYXMgd2VsbCBhcyB0aGVpcgpAQCAtMzk4LDcg KzM5NywxNSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0 aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRlbT4KICAg ICAgIDxwYXJhPgotICAgICAgIEEgZmlyc3QgcGFzcyB0byBidWlsZCB0aGUgaW5kZXggaXMgZG9u ZSBmb3IgZWFjaCBuZXcgaW5kZXguICBPbmNlIHRoZQorICAgICAgIFRoZSBhdXhpbGlhcnkgaW5k ZXggaXMgbWFya2VkIGFzICJyZWFkeSBmb3IgaW5zZXJ0cyIsIG1ha2luZworICAgICAgIGl0IHZp c2libGUgdG8gb3RoZXIgc2Vzc2lvbnMuIFRoaXMgaW5kZXggZWZmaWNpZW50bHkgdHJhY2tzIGFs bCBuZXcKKyAgICAgICB0dXBsZXMgZHVyaW5nIHRoZSByZWluZGV4IHByb2Nlc3MuCisgICAgICA8 L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgVGhlIG5ldyBtYWluIGluZGV4IGlzIGJ1aWx0IGJ5IHNjYW5uaW5nIHRoZSB0YWJs ZS4gIE9uY2UgdGhlCiAgICAgICAgaW5kZXggaXMgYnVpbHQsIGl0cyBmbGFnIDxsaXRlcmFsPnBn X2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IGlzCiAgICAgICAgc3dpdGNoZWQgdG8gPHF1b3Rl PnRydWU8L3F1b3RlPiB0byBtYWtlIGl0IHJlYWR5IGZvciBpbnNlcnRzLCBtYWtpbmcgaXQKICAg ICAgICB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zIG9uY2UgdGhlIHRyYW5zYWN0aW9uIHRoYXQg cGVyZm9ybWVkIHRoZSBidWlsZApAQCAtNDA5LDkgKzQxNiw5IEBAIFJFSU5ERVggWyAoIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkg XSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhlbiBhIHNl Y29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVzIHRoYXQgd2VyZSBhZGRlZCB3aGls ZSB0aGUKLSAgICAgICBmaXJzdCBwYXNzIHdhcyBydW5uaW5nLiAgVGhpcyBzdGVwIGlzIGFsc28g ZG9uZSBpbiBhIHNlcGFyYXRlCi0gICAgICAgdHJhbnNhY3Rpb24gZm9yIGVhY2ggaW5kZXguCisg ICAgICAgQSB2YWxpZGF0aW9uIHBoYXNlIG1lcmdlcyBhbnkgbWlzc2luZyBlbnRyaWVzIGZyb20g dGhlIGF1eGlsaWFyeSBpbmRleAorICAgICAgIGludG8gdGhlIG1haW4gaW5kZXgsIGVuc3VyaW5n IGFsbCBjb25jdXJyZW50IGNoYW5nZXMgYXJlIGNhcHR1cmVkLgorICAgICAgIFRoaXMgc3RlcCBp cyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBpbmRleC4KICAg ICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KIApAQCAtNDI4LDcgKzQzNSw3IEBAIFJFSU5E RVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxl PiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAg ICAgVGhlIG9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFkeTwvbGl0 ZXJhbD4gc3dpdGNoZWQgdG8KKyAgICAgICBUaGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5kZXhlcyBo YXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVkIHRvCiAg ICAgICAgPHF1b3RlPmZhbHNlPC9xdW90ZT4gdG8gcHJldmVudCBhbnkgbmV3IHR1cGxlIGluc2Vy dGlvbnMsIGFmdGVyIHdhaXRpbmcKICAgICAgICBmb3IgcnVubmluZyBxdWVyaWVzIHRoYXQgbWln aHQgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXggdG8gY29tcGxldGUuCiAgICAgICA8L3BhcmE+CkBA IC00MzYsNyArNDQzLDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKIAogICAgICA8bGlzdGl0 ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgb2xkIGluZGV4ZXMgYXJlIGRyb3BwZWQuICBU aGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgVGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGlu ZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCiAgICAgICAgRVhD TFVTSVZFPC9saXRlcmFsPiBzZXNzaW9uIGxvY2tzIGZvciB0aGUgaW5kZXhlcyBhbmQgdGhlIHRh YmxlIGFyZQogICAgICAgIHJlbGVhc2VkLgogICAgICAgPC9wYXJhPgpAQCAtNDQ3LDExICs0NTQs MTEgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwv cmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgIDxwYXJhPgogICAgIElmIGEgcHJvYmxl bSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhlcywgc3VjaCBhcyBhCiAgICAgdW5p cXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8Y29tbWFuZD5SRUlOREVY PC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1 b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggaW4gYWRkaXRpb24gdG8KLSAgICB0aGUgcHJl LWV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5aW5nIHB1 cnBvc2VzCi0gICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIGl0IHdp bGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQgbGVhdmUg YmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGFuZCBpdHMgYXV4aWxp YXJ5IGluZGV4IGluIGFkZGl0aW9uIHRvCisgICAgdGhlIHByZS1leGlzdGluZyBvbmUuIFRoZXNl IGluZGV4ZXMgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcworICAgIGJlY2F1 c2UgdGhleSBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIHRoZXkgd2lsbCBzdGlsbCBjb25z dW1lIHVwZGF0ZQogICAgIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0 aW9uPiA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydAotICAgIHN1Y2gg YW4gaW5kZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgc3VjaCBpbmRleGVz IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0 Z3Jlcz0jIFxkIHRhYgpAQCAtNDYyLDEyICs0NjksMTMgQEAgcG9zdGdyZXM9IyBcZCB0YWIKIElu ZGV4ZXM6CiAgICAgImlkeCIgYnRyZWUgKGNvbCkKICAgICAiaWR4X2NjbmV3IiBidHJlZSAoY29s KSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dyYW1s aXN0aW5nPgogCiAgICAgSWYgdGhlIGluZGV4IG1hcmtlZCA8bGl0ZXJhbD5JTlZBTElEPC9saXRl cmFsPiBpcyBzdWZmaXhlZAotICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJhbD4sIHRoZW4gaXQg Y29ycmVzcG9uZHMgdG8gdGhlIHRyYW5zaWVudAorICAgIDxsaXRlcmFsPl9jY25ldzwvbGl0ZXJh bD4gb3IgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPiwgdGhlbiBpdCBjb3JyZXNwb25kcyB0byB0 aGUgdHJhbnNpZW50IG9yIGF1eGlsaWFyeQogICAgIGluZGV4IGNyZWF0ZWQgZHVyaW5nIHRoZSBj b25jdXJyZW50IG9wZXJhdGlvbiwgYW5kIHRoZSByZWNvbW1lbmRlZAotICAgIHJlY292ZXJ5IG1l dGhvZCBpcyB0byBkcm9wIGl0IHVzaW5nIDxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+LAor ICAgIHJlY292ZXJ5IG1ldGhvZCBpcyB0byBkcm9wIHRoZXNlIGluZGV4ZXMgdXNpbmcgPGxpdGVy YWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4sCiAgICAgdGhlbiBhdHRlbXB0IDxjb21tYW5kPlJFSU5E RVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPiBhZ2Fpbi4KICAgICBJZiB0aGUgaW52YWxpZCBpbmRl eCBpcyBpbnN0ZWFkIHN1ZmZpeGVkIDxsaXRlcmFsPl9jY29sZDwvbGl0ZXJhbD4sCiAgICAgaXQg Y29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGluZGV4IHdoaWNoIGNvdWxkIG5vdCBiZSBkcm9w cGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVCBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKaW5kZXggNzRlNDA3ZjM3NWEuLmIxYzc5 NzUxN2VlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKQEAgLTM3NSw2ICszNzUsMTEg QEAgY29uc3RyYWludCBvbiB3aGljaCB1cGRhdGVzIGNhbiBiZSBIT1QuICBPdGhlciB0cmFuc2Fj dGlvbnMgbXVzdCBpbmNsdWRlCiBzdWNoIGFuIGluZGV4IHdoZW4gZGV0ZXJtaW5pbmcgSE9ULXNh ZmV0eSBvZiB1cGRhdGVzLCBldmVuIHRob3VnaCB0aGV5CiBtdXN0IGlnbm9yZSBpdCBmb3IgYm90 aCBpbnNlcnRpb24gYW5kIHNlYXJjaGluZyBwdXJwb3Nlcy4KIAorQWxzbywgc3BlY2lhbCBhdXhp bGlhcnkgaW5kZXggaXMgY3JlYXRlZCB0aGUgc2FtZSB3YXkuIEl0IGlzIG1hcmtlZCBhcworInJl YWR5IGZvciBpbnNlcnRzIiB3aXRob3V0IGFueSBhY3R1YWwgdGFibGUgc2Nhbi4gSXRzIHB1cnBv c2UgaXMgdG8gY29sbGVjdAorbmV3IHR1cGxlcyBpbnNlcnRlZCBpbnRvIHRhYmxlIHdoaWxlIG91 ciB0YXJnZXQgaW5kZXggaXMgc3RpbGwgIm5vdCByZWFkeQorZm9yIGluc2VydHMiLgorCiBXZSBt dXN0IGRvIHRoaXMgdG8gYXZvaWQgbWFraW5nIGluY29ycmVjdCBpbmRleCBlbnRyaWVzLiAgRm9y IGV4YW1wbGUsCiBzdXBwb3NlIHdlIGFyZSBidWlsZGluZyBhbiBpbmRleCBvbiBjb2x1bW4gWCBh bmQgd2UgbWFrZSBhbiBpbmRleCBlbnRyeSBmb3IKIGEgbm9uLUhPVCB0dXBsZSB3aXRoIFg9MS4g IFRoZW4gc29tZSBvdGhlciBiYWNrZW5kLCB1bmF3YXJlIHRoYXQgWCBpcyBhbgpAQCAtMzk0LDEw ICszOTksMTAgQEAgZW50cnkgYXQgdGhlIHJvb3Qgb2YgdGhlIEhPVC11cGRhdGUgY2hhaW4gYnV0 IHdlIHVzZSB0aGUga2V5IHZhbHVlIGZyb20gdGhlCiBsaXZlIHR1cGxlLgogCiBXZSBtYXJrIHRo ZSBpbmRleCBvcGVuIGZvciBpbnNlcnRzIChidXQgc3RpbGwgbm90IHJlYWR5IGZvciByZWFkcykg dGhlbgotd2UgYWdhaW4gd2FpdCBmb3IgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgdGhlIHRhYmxl IG9wZW4uICBUaGVuIHdlIHRha2UKLWEgc2Vjb25kIHJlZmVyZW5jZSBzbmFwc2hvdCBhbmQgdmFs aWRhdGUgdGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBmb3IKLXR1cGxlcyBtaXNzaW5nIGZyb20g dGhlIGluZGV4LCBhbmQgaW5zZXJ0cyBhbnkgbWlzc2luZyBvbmVzLiAgQWdhaW4sCi10aGUgaW5k ZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0byBIT1QtY2hhaW4gcm9vdCBUSURz LCBidXQKK3dlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJs ZSBvcGVuLiAgVGhlbiB2YWxpZGF0ZQordGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBmb3IgdHVw bGVzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXggaW4gYXV4aWxpYXJ5CitpbmRleCwgYW5kIGluc2Vy dHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGV5IGFyZSB2aXNpYmxlIHRvIHJlZmVyZW5jZSBzbmFw c2hvdC4KK0FnYWluLCB0aGUgaW5kZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0 byBIT1QtY2hhaW4gcm9vdCBUSURzLCBidXQKIHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpcyB0 aGUgb25lIGZyb20gdGhlIGxpdmUgdHVwbGUuCiAKIFRoZW4gd2Ugd2FpdCB1bnRpbCBldmVyeSB0 cmFuc2FjdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBzbmFwc2hvdCBvbGRlciB0aGFuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAwN2YwNzE4OGQ0Ni4uYTM0NzQ5 MjVkNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDIs MTUgKzQyLDIwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCisjaW5jbHVkZSAidXRpbHMv dHVwbGVzdG9yZS5oIgorCisvKiBHVUM6IHBlcmNlbnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19t ZW0gZm9yIENJQyB2YWxpZGF0aW9uIHR1cGxlc3RvcmUgKi8KK2ludAkJCWRlYnVnX2NpY192YWxp ZGF0ZV9zdG9yZV9tZW1fcGN0ID0gMTA7CiAKIHN0YXRpYyB2b2lkIHJlZm9ybV9hbmRfcmV3cml0 ZV90dXBsZShIZWFwVHVwbGUgdHVwbGUsCi0JCQkJCQkJCQkgUmVsYXRpb24gT2xkSGVhcCwgUmVs YXRpb24gTmV3SGVhcCwKLQkJCQkJCQkJCSBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsIFJl d3JpdGVTdGF0ZSByd3N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgUmV3cml0ZVN0 YXRlIHJ3c3RhdGUpOwogCiBzdGF0aWMgYm9vbCBTYW1wbGVIZWFwVHVwbGVWaXNpYmxlKFRhYmxl U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkJICAgSGVhcFR1cGxlIHR1cGxl LApAQCAtMTY2NSwyNDIgKzE2NzAsNDIyIEBAIGhlYXBhbV9pbmRleF9idWlsZF9yYW5nZV9zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlyZXR1cm4gcmVsdHVwbGVzOwogfQogCisvKgorICog Q2FsY3VsYXRlIHNldCBkaWZmZXJlbmNlIChyZWxhdGl2ZSBjb21wbGVtZW50KSBvZiBtYWluIGFu ZCBhdXgKKyAqIHNldHMuCisgKgorICogQWxsIHJlY29yZHMgd2hpY2ggYXJlIHByZXNlbnQgaW4g YXV4aWxpYXJ5IHR1cGxlc29ydCBidXQgbm90IGluCisgKiBtYWluIGFyZSBhZGRlZCB0byB0aGUg c3RvcmUuCisgKgorICogSW4gc2V0IHRoZW9yeSBub3RhdGlvbiBzdG9yZSA9IGF1eCAtIG1haW4g b3Igc3RvcmUgPSBhdXggLyBtYWluLgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGl0ZW1zIGFk ZGVkIHRvIHN0b3JlCisgKi8KK3N0YXRpYyBpbnQ2NAoraGVhcGFtX2luZGV4X3ZhbGlkYXRlX3R1 cGxlc29ydF9kaWZmZXJlbmNlKFR1cGxlc29ydHN0YXRlICptYWluLAorCQkJCQkJCQkJCSAgIFR1 cGxlc29ydHN0YXRlICphdXgsCisJCQkJCQkJCQkJICAgVHVwbGVzdG9yZXN0YXRlICpzdG9yZSkK K3sKKwlpbnQ2NAkJbnVtID0gMDsKKwkvKiBzdGF0ZSB2YXJpYWJsZXMgZm9yIHRoZSBtZXJnZSAq LworCUl0ZW1Qb2ludGVyCWluZGV4Y3Vyc29yID0gTlVMTCwKKwkJCQkJYXV4aW5kZXhjdXJzb3Ig PSBOVUxMOworCUl0ZW1Qb2ludGVyRGF0YSBkZWNvZGVkLAorCQkJCQlhdXhkZWNvZGVkOworCWJv b2wJCQl0dXBsZXNvcnRfZW1wdHkgPSBmYWxzZSwKKwkJCQkJYXV4dHVwbGVzb3J0X2VtcHR5ID0g ZmFsc2U7CisKKwkvKiBJbml0aWFsaXplIHBvaW50ZXJzLiAqLworCUl0ZW1Qb2ludGVyU2V0SW52 YWxpZCgmZGVjb2RlZCk7CisJSXRlbVBvaW50ZXJTZXRJbnZhbGlkKCZhdXhkZWNvZGVkKTsKKwor CS8qCisJICogTWFpbiBsb29wOiB3ZSBzdGVwIHRocm91Z2ggdGhlIGF1eGlsaWFyeSBzb3J0IChh dXhTdGF0ZS0+dHVwbGVzb3J0KSwKKwkgKiB3aGljaCBob2xkcyBUSURzIHRoYXQgbXVzdCBjb21w YXJlZCB0byB0aG9zZSBmcm9tIHRoZSAibWFpbiIgc29ydAorCSAqIChzdGF0ZS0+dHVwbGVzb3J0 KS4KKwkgKi8KKwl3aGlsZSAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwl7CisJCURhdHVtCQl0c192 YWw7CisJCWJvb2wJCXRzX2lzbnVsbDsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KgorCQkgKiBBdHRlbXB0IHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBhdXhpbGlhcnkg c29ydC4gSWYgaXQncworCQkgKiBlbXB0eSwgd2Ugc2V0IGF1eGluZGV4Y3Vyc29yIHRvIE5VTEwu CisJCSAqLworCQlhdXh0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKGF1eCwg dHJ1ZSwKKwkJCQkJCQkJCQkJCSBmYWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJ CQkJCSBOVUxMKTsKKwkJQXNzZXJ0KGF1eHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxsKTsK KwkJaWYgKCFhdXh0dXBsZXNvcnRfZW1wdHkpCisJCXsKKwkJCWl0ZW1wdHJfZGVjb2RlKCZhdXhk ZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOworCQkJYXV4aW5kZXhjdXJzb3IgPSAmYXV4 ZGVjb2RlZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWF1eGluZGV4Y3Vyc29yID0gTlVMTDsKKwkJ fQorCisJCS8qCisJCSAqIElmIHRoZSBhdXhpbGlhcnkgc29ydCBpcyBub3QgeWV0IGVtcHR5LCB3 ZSBub3cgdHJ5IHRvIHN5bmNocm9uaXplCisJCSAqIHRoZSAibWFpbiIgc29ydCBjdXJzb3IgKGlu ZGV4Y3Vyc29yKSB3aXRoIGF1eGluZGV4Y3Vyc29yLiBXZSBhZHZhbmNlCisJCSAqIHRoZSBtYWlu IHNvcnQgY3Vyc29yIHVudGlsIHdlJ3ZlIHJlYWNoZWQgb3IgcGFzc2VkIHRoZSBhdXhpbGlhcnkg VElELgorCQkgKi8KKwkJaWYgKCFhdXh0dXBsZXNvcnRfZW1wdHkpCisJCXsKKwkJCS8qCisJCQkg KiBNb3ZlIHRoZSBtYWluIHNvcnQgZm9yd2FyZCB3aGlsZToKKwkJCSAqICAgKDEpIEl0J3Mgbm90 IGV4aGF1c3RlZCAodHVwbGVzb3J0X2VtcHR5ID09IGZhbHNlKSwgYW5kCisJCQkgKiAgICgyKSBF aXRoZXIgaW5kZXhjdXJzb3IgaXMgTlVMTCAoZmlyc3QgaXRlcmF0aW9uKSBvcgorCQkJICogICAg ICAgaW5kZXhjdXJzb3IgPCBhdXhpbmRleGN1cnNvciBpbiBUSUQgb3JkZXIuCisJCQkgKi8KKwkJ CXdoaWxlICghdHVwbGVzb3J0X2VtcHR5ICYmIChpbmRleGN1cnNvciA9PSBOVUxMIHx8IC8qIG51 bGwgb24gZmlyc3QgdGltZSBoZXJlICovCisJCQkJCQlJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhj dXJzb3IsIGF1eGluZGV4Y3Vyc29yKSA8IDApKQorCQkJeworCQkJCS8qCisJCQkJICogR2V0IHRo ZSBuZXh0IFRJRCBmcm9tIHRoZSBtYWluIHNvcnQuIElmIGl0J3MgZW1wdHksCisJCQkJICogd2Ug c2V0IGluZGV4Y3Vyc29yIHRvIE5VTEwuCisJCQkJICovCisJCQkJdHVwbGVzb3J0X2VtcHR5ID0g IXR1cGxlc29ydF9nZXRkYXR1bShtYWluLCB0cnVlLAorCQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0 c192YWwsICZ0c19pc251bGwsCisJCQkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCQlBc3NlcnQodHVw bGVzb3J0X2VtcHR5IHx8ICF0c19pc251bGwpOworCisJCQkJaWYgKCF0dXBsZXNvcnRfZW1wdHkp CisJCQkJeworCQkJCQlpdGVtcHRyX2RlY29kZSgmZGVjb2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192 YWwpKTsKKwkJCQkJaW5kZXhjdXJzb3IgPSAmZGVjb2RlZDsKKwkJCQl9CisJCQkJZWxzZQorCQkJ CXsKKwkJCQkJaW5kZXhjdXJzb3IgPSBOVUxMOworCQkJCX0KKworCQkJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBOb3csIGlmIGVpdGhlcjoKKwkJCSAqICAt IHRoZSBtYWluIHNvcnQgaXMgZW1wdHksIG9yCisJCQkgKiAgLSBpbmRleGN1cnNvciA+IGF1eGlu ZGV4Y3Vyc29yLAorCQkJICoKKwkJCSAqIHRoZW4gYXV4aW5kZXhjdXJzb3IgaWRlbnRpZmllcyBh IFRJRCB0aGF0IGRvZXNuJ3QgYXBwZWFyIGluCisJCQkgKiB0aGUgbWFpbiBzb3J0LiBXZSBsaWtl bHkgbmVlZCB0byBpbnNlcnQgaXQKKwkJCSAqIGludG8gdGhlIHRhcmdldCBpbmRleCBpZiBpdOKA mXMgdmlzaWJsZSBpbiB0aGUgaGVhcC4KKwkJCSAqLworCQkJaWYgKHR1cGxlc29ydF9lbXB0eSB8 fCBJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhjdXJzb3IsIGF1eGluZGV4Y3Vyc29yKSA+IDApCisJ CQl7CisJCQkJdHVwbGVzdG9yZV9wdXRkYXR1bShzdG9yZSwgSW50NjRHZXREYXR1bShpdGVtcHRy X2VuY29kZShhdXhpbmRleGN1cnNvcikpKTsKKwkJCQludW0rKzsKKwkJCX0KKwkJfQorCX0KKwor CXJldHVybiBudW07Cit9CisKK3R5cGVkZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTY2FuU3RhdGUK K3sKKwlUdXBsZXN0b3Jlc3RhdGUJCSpzdG9yZTsKKwlCbG9ja051bWJlcgkJCXByZXZfYmxvY2tf bnVtYmVyOworCU9mZnNldE51bWJlcgkJcHJldl9vZmZzZXRfbnVtYmVyOworfSBWYWxpZGF0ZUlu ZGV4U2NhblN0YXRlOworCisvKgorICogVGhpcyBpcyBSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBp bXBsZW1lbnRhdGlvbiB3aGljaCB3b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIDEpIEl0IGl0ZXJh dGVzIG92ZXIgYSBzb3J0ZWQgdHVwbGVzdG9yZSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGVu Y29kZWQKKyAqICAgIEl0ZW1Qb2ludGVyCisgKgorICogMikgSXQgcmV0dXJucyB0aGUgY3VycmVu dCBCbG9ja051bWJlciBhbmQgY29sbGVjdHMgYWxsIE9mZnNldE51bWJlcnMKKyAqICAgIGZvciB0 aGF0IGJsb2NrIGluIHBlcl9idWZmZXJfZGF0YS4KKyAqCisgKiAzKSBPbmNlIHRoZSBjb2RlIGVu Y291bnRlcnMgYSBuZXcgQmxvY2tOdW1iZXIsIGl0IHN0b3BzIHJlYWRpbmcgbW9yZQorICogICAg b2Zmc2V0cyBhbmQgc2F2ZXMgdGhlIE9mZnNldE51bWJlciBvZiB0aGUgbmV3IGJsb2NrIGZvciB0 aGUgbmV4dCBjYWxsLgorICoKKyAqIDQpIFRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIGEgYmxvY2sg aXMgYWx3YXlzIHRlcm1pbmF0ZWQgd2l0aCBJbnZhbGlkT2Zmc2V0TnVtYmVyLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgcmVwZWF0ZWRseSBjYWxsZWQsIGVhY2ggdGlt ZSByZXR1cm5pbmcKKyAqIHRoZSBuZXh0IGJsb2NrIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXQg b2Ygb2Zmc2V0cy4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAorCQkJCQkJCQkgIFJlYWRTdHJlYW0gKnN0cmVhbSwK KwkJCQkJCQkJICB2b2lkICp2b2lkX2NhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJICB2 b2lkICp2b2lkX3Blcl9idWZmZXJfZGF0YQorCQkJCQkJCQkgICkKK3sKKwlib29sIHNob3VsZF9m cmVlOworCURhdHVtIGRhdHVtOworCUJsb2NrTnVtYmVyIHJlc3VsdCA9IEludmFsaWRCbG9ja051 bWJlcjsKKwlpbnQgaSA9IDA7CisKKwkvKgorCSAqIFJldHJpZXZlIHRoZSBzcGVjaWFsaXplZCBj YWxsYmFjayBzdGF0ZSBhbmQgdGhlIG91dHB1dCBidWZmZXIuCisJICogY2FsbGJhY2tfcHJpdmF0 ZV9kYXRhIGtlZXBzIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBibG9jayBhbmQgb2Zmc2V0CisJICog ZnJvbSBhIHByaW9yIGludm9jYXRpb24sIGlmIGFueS4KKwkgKi8KKwlWYWxpZGF0ZUluZGV4U2Nh blN0YXRlICpjYWxsYmFja19wcml2YXRlX2RhdGEgPSB2b2lkX2NhbGxiYWNrX3ByaXZhdGVfZGF0 YTsKKwlPZmZzZXROdW1iZXIgKnBlcl9idWZmZXJfZGF0YSA9IHZvaWRfcGVyX2J1ZmZlcl9kYXRh OworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhICJsZWZ0b3ZlciIgb2Zmc2V0IG51bWJlciBmcm9t IHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uLAorCSAqIGl0IG1lYW5zIHdlIGhhZCBzd2l0Y2hlZCB0 byBhIG5ldyBibG9jayBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IGNhbGwuCisJICogV2UgcGxh Y2UgdGhhdCBsZWZ0b3ZlciBvZmZzZXQgbnVtYmVyIGludG8gdGhlIGJ1ZmZlciBmaXJzdC4KKwkg Ki8KKwlpZiAoY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIgIT0gSW52 YWxpZE9mZnNldE51bWJlcikKKwl7CisJCUFzc2VydChjYWxsYmFja19wcml2YXRlX2RhdGEtPnBy ZXZfYmxvY2tfbnVtYmVyICE9IEludmFsaWRCbG9ja051bWJlcik7CisJCS8qCisJCSAqICdyZXN1 bHQnIGlzIHRoZSBibG9jayBudW1iZXIgdG8gcmV0dXJuLiBXZSBzZXQgaXQgdG8gdGhlIGJsb2Nr CisJCSAqIGZyb20gdGhlIHByZXZpb3VzIGxlZnRvdmVyIG9mZnNldC4KKwkJICovCisJCXJlc3Vs dCA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXI7CisJCS8qIFBsYWNl IGxlZnRvdmVyIG9mZnNldCBudW1iZXIgaW4gdGhlIG91dHB1dCBidWZmZXIuICovCisJCXBlcl9i dWZmZXJfZGF0YVtpKytdID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1i ZXI7CisJCS8qCisJCSAqIENsZWFyIHRoZSBsZWZ0b3ZlciBvZmZzZXQgbnVtYmVyIHNvIGl0IHdv bid0IGJlIHJldXNlZCB1bmxlc3MKKwkJICogd2UgZW5jb3VudGVyIGFub3RoZXIgYmxvY2sgY2hh bmdlLgorCQkgKi8KKwkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIg PSBJbnZhbGlkT2Zmc2V0TnVtYmVyOworCX0KKworCS8qCisJICogUmVhZCBmcm9tIHRoZSB0dXBs ZXN0b3JlIHVudGlsIHdlIGVpdGhlciBydW4gb3V0IG9mIHR1cGxlcyBvciB3ZQorCSAqIGVuY291 bnRlciBhIGJsb2NrIGNoYW5nZS4gRm9yIGVhY2ggdHVwbGU6CisJICoKKwkgKiAgIDEpIERlY29k ZSBpdHMgYmxvY2svb2Zmc2V0IGZyb20gdGhlIERhdHVtLgorCSAqICAgMikgSWYgaXQncyB0aGUg Zmlyc3QgdGltZSBpbiB0aGlzIGNhbGwgKHByZXZfYmxvY2tfbnVtYmVyID09IEludmFsaWRCbG9j a051bWJlciksCisJICogICAgICBpbml0aWFsaXplIHByZXZfYmxvY2tfbnVtYmVyLgorCSAqICAg MykgSWYgdGhlIGJsb2NrIG51bWJlciBtYXRjaGVzIHRoZSBjdXJyZW50IGJsb2NrLCBjb2xsZWN0 IHRoZSBvZmZzZXQuCisJICogICA0KSBJZiB0aGUgYmxvY2sgbnVtYmVyIGRpZmZlcnMsIHNhdmUg dGhhdCBvZmZzZXQgYXMgbGVmdG92ZXIgYW5kIGJyZWFrCisJICogICAgICBzbyB0aGF0IHRoZSBu ZXh0IGNhbGwgY2FuIGhhbmRsZSB0aGUgbmV3IGJsb2NrLgorCSAqLworCXdoaWxlICh0dXBsZXN0 b3JlX2dldGRhdHVtKGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+c3RvcmUsIHRydWUsICZzaG91bGRf ZnJlZSwgJmRhdHVtKSkKKwl7CisJCUJsb2NrTnVtYmVyIG5leHRfYmxvY2tfbnVtYmVyOworCQlJ dGVtUG9pbnRlckRhdGEgbmV4dF9kYXRhOworCisJCS8qIERlY29kZSB0aGUgZGF0dW0gaW50byBh biBJdGVtUG9pbnRlciAoYmxvY2sgKyBvZmZzZXQpLiAqLworCQlpdGVtcHRyX2RlY29kZSgmbmV4 dF9kYXRhLCBEYXR1bUdldEludDY0KGRhdHVtKSk7CisJCW5leHRfYmxvY2tfbnVtYmVyID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcigmbmV4dF9kYXRhKTsKKworCQkvKgorCQkgKiBJZiB3ZSBo YXZlbid0IHNldCBhIGJsb2NrIG51bWJlciB5ZXQgdGhpcyByb3VuZCwgaW5pdGlhbGl6ZSBpdAor CQkgKiB1c2luZyB0aGUgZmlyc3QgdHVwbGUgd2UgcmVhZC4KKwkJICovCisJCWlmIChjYWxsYmFj a19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID09IEludmFsaWRCbG9ja051bWJlcikK KwkJCWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXIgPSBuZXh0X2Jsb2Nr X251bWJlcjsKKworCQkvKgorCQkgKiBBbHdheXMgc2V0IHRoZSByZXN1bHQgdG8gYmUgdGhlICJj dXJyZW50IiBibG9jayBudW1iZXIKKwkJICogd2UgYXJlIGZpbGxpbmcgb2Zmc2V0cyBmb3IuCisJ CSAqLworCQlyZXN1bHQgPSBjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVy OworCisJCS8qCisJCSAqIElmIHRoaXMgdHVwbGUgaXMgZnJvbSB0aGUgc2FtZSBibG9jaywganVz dCBzdG9yZSBpdHMgb2Zmc2V0CisJCSAqIGluIG91ciBwZXJfYnVmZmVyX2RhdGEgYXJyYXkuCisJ CSAqLworCQlpZiAobmV4dF9ibG9ja19udW1iZXIgPT0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5w cmV2X2Jsb2NrX251bWJlcikKKwkJeworCQkJcGVyX2J1ZmZlcl9kYXRhW2krK10gPSBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcigmbmV4dF9kYXRhKTsKKworCQkJLyogRnJlZSB0aGUgZGF0dW0g aWYgbmVlZGVkLiAqLworCQkJaWYgKHNob3VsZF9mcmVlKQorCQkJCXBmcmVlKERhdHVtR2V0UG9p bnRlcihkYXR1bSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9j ayBqdXN0IGNoYW5nZWQsIHN0b3JlIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBibG9jaworCQkJICog YXMgbGVmdG92ZXIgZm9yIHRoZSBuZXh0IGludm9jYXRpb24gYW5kIGJyZWFrIG91dC4KKwkJCSAq LworCQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxv Y2tfbnVtYmVyOworCQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZnNldF9udW1iZXIg PSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmbmV4dF9kYXRhKTsKKworCQkJLyogRnJlZSB0 aGUgZGF0dW0gaWYgbmVlZGVkLiAqLworCQkJaWYgKHNob3VsZF9mcmVlKQorCQkJCXBmcmVlKERh dHVtR2V0UG9pbnRlcihkYXR1bSkpOworCisJCQkvKiBCcmVhayB0byBsZXQgdGhlIG5leHQgY2Fs bCBoYW5kbGUgdGhlIG5ldyBibG9jay4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkg KiBUZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygb2Zmc2V0cyBmb3IgdGhpcyBibG9jayB3aXRoIGFuIElu dmFsaWRPZmZzZXROdW1iZXIuCisJICovCisJcGVyX2J1ZmZlcl9kYXRhW2ldID0gSW52YWxpZE9m ZnNldE51bWJlcjsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgdm9pZAogaGVhcGFtX2lu ZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQkJCQkJ ICAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRl KQorCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgIFZhbGlkYXRl SW5kZXhTdGF0ZSAqYXV4U3RhdGUpCiB7Ci0JVGFibGVTY2FuRGVzYyBzY2FuOwotCUhlYXBTY2Fu RGVzYyBoc2NhbjsKLQlIZWFwVHVwbGUJaGVhcFR1cGxlOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhf TUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107Ci0JRXhwclN0YXRlICAq cHJlZGljYXRlOwotCVR1cGxlVGFibGVTbG90ICpzbG90OwotCUVTdGF0ZQkgICAqZXN0YXRlOwot CUV4cHJDb250ZXh0ICplY29udGV4dDsKLQlCbG9ja051bWJlciByb290X2Jsa25vID0gSW52YWxp ZEJsb2NrTnVtYmVyOwotCU9mZnNldE51bWJlciByb290X29mZnNldHNbTWF4SGVhcFR1cGxlc1Bl clBhZ2VdOwotCWJvb2wJCWluX2luZGV4W01heEhlYXBUdXBsZXNQZXJQYWdlXTsKLQlCbG9ja051 bWJlciBwcmV2aW91c19ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQotCS8qIHN0YXRlIHZh cmlhYmxlcyBmb3IgdGhlIG1lcmdlICovCi0JSXRlbVBvaW50ZXIgaW5kZXhjdXJzb3IgPSBOVUxM OwotCUl0ZW1Qb2ludGVyRGF0YSBkZWNvZGVkOwotCWJvb2wJCXR1cGxlc29ydF9lbXB0eSA9IGZh bHNlOworCisJVHVwbGVUYWJsZVNsb3QgICpzbG90OworCUVTdGF0ZQkJCSplc3RhdGU7CisJRXhw ckNvbnRleHQJCSplY29udGV4dDsKKwlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBH ZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOworCisJaW50NjQJCQludW1fdG9fY2hlY2s7 CisJVHVwbGVzdG9yZXN0YXRlICp0dXBsZXNfZm9yX2NoZWNrOworCVZhbGlkYXRlSW5kZXhTY2Fu U3RhdGUgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCisJQnVmZmVyIGJ1ZjsKKwlPZmZzZXROdW1i ZXIgKnR1cGxlczsKKwlSZWFkU3RyZWFtICpyZWFkX3N0cmVhbTsKKworCS8qIFVzZSBhIHBlcmNl bnRhZ2Ugb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gZm9yIHR1cGxlIHN0b3JlLiAqLworCWludAkJ c3RvcmVfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtICogZGVidWdfY2ljX3Zh bGlkYXRlX3N0b3JlX21lbV9wY3QgLyAxMDA7CisKKwkvKgorCSAqIEVuY29kZSBUSURzIGFzIGlu dDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29ydGluZworCSAq IGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgcHJpbWFy aWx5IGJlY2F1c2UgVElECisJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0eXBlIG9uIGFsbCBw bGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcworCSAqIHBhc3MtYnktdmFsdWUgb24gbW9zdCBwbGF0 Zm9ybXMuCisJICovCisJdHVwbGVzX2Zvcl9jaGVjayA9IHR1cGxlc3RvcmVfYmVnaW5fZGF0dW0o SU5UOE9JRCwgZmFsc2UsIGZhbHNlLCBzdG9yZV93b3JrX21lbV9wYXJ0KTsKIAogCS8qCiAJICog c2FuaXR5IGNoZWNrcwogCSAqLwogCUFzc2VydChPaWRJc1ZhbGlkKGluZGV4UmVsYXRpb24tPnJk X3JlbC0+cmVsYW0pKTsKIAotCS8qCi0JICogTmVlZCBhbiBFU3RhdGUgZm9yIGV2YWx1YXRpb24g b2YgaW5kZXggZXhwcmVzc2lvbnMgYW5kIHBhcnRpYWwtaW5kZXgKLQkgKiBwcmVkaWNhdGVzLiAg QWxzbyBhIHNsb3QgdG8gaG9sZCB0aGUgY3VycmVudCB0dXBsZS4KLQkgKi8KKwludW1fdG9fY2hl Y2sgPSBoZWFwYW1faW5kZXhfdmFsaWRhdGVfdHVwbGVzb3J0X2RpZmZlcmVuY2Uoc3RhdGUtPnR1 cGxlc29ydCwKKwkJCQkJCQkJCQkJCQkJIGF1eFN0YXRlLT50dXBsZXNvcnQsCisJCQkJCQkJCQkJ CQkJCSB0dXBsZXNfZm9yX2NoZWNrKTsKKworCS8qIEl0IGlzIG91ciByZXNwb25zaWJpbGl0eSB0 byBjbG9zZSB0dXBsZSBzb3J0IGFzIGZhc3QgYXMgd2UgY2FuICovCisJdHVwbGVzb3J0X2VuZChz dGF0ZS0+dHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLT50dXBsZXNvcnQpOwor CisJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxMOworCiAJZXN0 YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHBy Q29udGV4dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRp b25HZXREZXNjcihoZWFwUmVsYXRpb24pLAotCQkJCQkJCQkJJlRUU09wc0hlYXBUdXBsZSk7CisJ CQkJCQkJCQkmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKIAogCS8qIEFycmFuZ2UgZm9yIGVjb250 ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLwogCWVjb250ZXh0 LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAKLQkvKiBTZXQgdXAgZXhlY3V0aW9uIHN0YXRlIGZv ciBwcmVkaWNhdGUsIGlmIGFueS4gKi8KLQlwcmVkaWNhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5k ZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfYmxvY2tfbnVtYmVyID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWNhbGxiYWNrX3ByaXZhdGVf ZGF0YS5zdG9yZSA9IHR1cGxlc19mb3JfY2hlY2s7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnBy ZXZfb2Zmc2V0X251bWJlciA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKLQkvKgotCSAqIFByZXBh cmUgZm9yIHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBXZSBuZWVkIGp1c3QgdGhvc2UgdHVw bGVzCi0JICogc2F0aXNmeWluZyB0aGUgcGFzc2VkLWluIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdl IG11c3QgZGlzYWJsZSBzeW5jc2NhbgotCSAqIGhlcmUsIGJlY2F1c2UgaXQncyBjcml0aWNhbCB0 aGF0IHdlIHJlYWQgZnJvbSBibG9jayB6ZXJvIGZvcndhcmQgdG8KLQkgKiBtYXRjaCB0aGUgc29y dGVkIFRJRHMuCi0JICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRp b24sCS8qIHJlbGF0aW9uICovCi0JCQkJCQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KLQkJ CQkJCQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCi0JCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtl eSAqLwotCQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJ CQkJCQkgZmFsc2UpOwkvKiBzeW5jc2NhbiBub3QgT0sgKi8KLQloc2NhbiA9IChIZWFwU2NhbkRl c2MpIHNjYW47CisJcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFE X1NUUkVBTV9NQUlOVEVOQU5DRSB8IFJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKKwkJCQkJCQkJ CQkJCQkJIGJzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBSZWxhdGlvbiwgTUFJTl9GT1JL TlVNLAorCQkJCQkJCQkJCQkJCQkgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJl YW1fbmV4dCwKKwkJCQkJCQkJCQkJCQkJICZjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CQkJCQkJCSAoTWF4SGVhcFR1cGxlc1BlclBhZ2UgKyAxKSAqIHNpemVvZihPZmZzZXROdW1iZXIp KTsKIAotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfU0NBTl9CTE9DS1Nf VE9UQUwsCi0JCQkJCQkJCSBoc2Nhbi0+cnNfbmJsb2Nrcyk7CisJcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX1RPVEFMLCBudW1fdG9fY2hlY2sp OworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExF U19ET05FLCAwKTsKIAotCS8qCi0JICogU2NhbiBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBzbmFw c2hvdC4KLQkgKi8KLQl3aGlsZSAoKGhlYXBUdXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKChidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihyZWFkX3N0cmVhbSwgKHZvaWQgKiopICZ0dXBsZXMpKSAhPSBJbnZhbGlkQnVm ZmVyKQogCXsKLQkJSXRlbVBvaW50ZXIgaGVhcGN1cnNvciA9ICZoZWFwVHVwbGUtPnRfc2VsZjsK LQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RUdXBsZTsKLQkJT2Zmc2V0TnVtYmVyIHJvb3Rfb2ZmbnVt OworCQlIZWFwVHVwbGVEYXRhCWhlYXBfdHVwbGVfZGF0YVtNYXhIZWFwVHVwbGVzUGVyUGFnZV07 CisJCWludCBpOworCQlPZmZzZXROdW1iZXIgb2ZmOworCQlCbG9ja051bWJlciBibG9ja19udW1i ZXI7CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlzdGF0ZS0+aHR1cHMgKz0gMTsK KwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJYmxvY2tfbnVtYmVyID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAotCQlpZiAoKHByZXZpb3VzX2Jsa25vID09IElu dmFsaWRCbG9ja051bWJlcikgfHwKLQkJCShoc2Nhbi0+cnNfY2Jsb2NrICE9IHByZXZpb3VzX2Js a25vKSkKKwkJaSA9IDA7CisJCXdoaWxlICgob2ZmID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zm c2V0TnVtYmVyKQogCQl7Ci0JCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X1NDQU5fQkxPQ0tTX0RPTkUsCi0JCQkJCQkJCQkJIGhzY2FuLT5yc19jYmxvY2spOwotCQkJcHJl dmlvdXNfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOworCQkJSXRlbVBvaW50ZXJEYXRhIHRpZDsK KwkJCWJvb2wJCWFsbF9kZWFkLCBmb3VuZDsKKwkJCUl0ZW1Qb2ludGVyU2V0KCZ0aWQsIGJsb2Nr X251bWJlciwgb2ZmKTsKKworCQkJZm91bmQgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKCZ0aWQs IGhlYXBSZWxhdGlvbiwgYnVmLCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkgICAmaGVhcF90dXBsZV9k YXRhW2ldLCAmYWxsX2RlYWQsIHRydWUpOworCQkJaWYgKCFmb3VuZCkKKwkJCQlJdGVtUG9pbnRl clNldEludmFsaWQoJmhlYXBfdHVwbGVfZGF0YVtpXS50X3NlbGYpOworCQkJaSsrOworCQkJc3Rh dGUtPmh0dXBzICs9IDE7CiAJCX0KKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CiAKIAkJLyoKLQkJICogQXMgY29tbWVudGVkIGluIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4s IHdlIHNob3VsZCBpbmRleCBoZWFwLW9ubHkKLQkJICogdHVwbGVzIHVuZGVyIHRoZSBUSURzIG9m IHRoZWlyIHJvb3QgdHVwbGVzOyBzbyB3aGVuIHdlIGFkdmFuY2Ugb250bwotCQkgKiBhIG5ldyBo ZWFwIHBhZ2UsIGJ1aWxkIGEgbWFwIG9mIHJvb3QgaXRlbSBvZmZzZXRzIG9uIHRoZSBwYWdlLgot CQkgKgotCQkgKiBUaGlzIGNvbXBsaWNhdGVzIG1lcmdpbmcgYWdhaW5zdCB0aGUgdHVwbGVzb3J0 IG91dHB1dDogd2Ugd2lsbAotCQkgKiB2aXNpdCB0aGUgbGl2ZSB0dXBsZXMgaW4gb3JkZXIgYnkg dGhlaXIgb2Zmc2V0cywgYnV0IHRoZSByb290Ci0JCSAqIG9mZnNldHMgdGhhdCB3ZSBuZWVkIHRv IGNvbXBhcmUgYWdhaW5zdCB0aGUgaW5kZXggY29udGVudHMgbWlnaHQgYmUKLQkJICogb3JkZXJl ZCBkaWZmZXJlbnRseS4gIFNvIHdlIG1pZ2h0IGhhdmUgdG8gImxvb2sgYmFjayIgd2l0aGluIHRo ZQotCQkgKiB0dXBsZXNvcnQgb3V0cHV0LCBidXQgb25seSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFn ZS4gIFdlIGhhbmRsZSB0aGF0Ci0JCSAqIGJ5IGtlZXBpbmcgYSBib29sIGFycmF5IGluX2luZGV4 W10gc2hvd2luZyBhbGwgdGhlCi0JCSAqIGFscmVhZHktcGFzc2VkLW92ZXIgdHVwbGVzb3J0IG91 dHB1dCBUSURzIG9mIHRoZSBjdXJyZW50IHBhZ2UuIFdlCi0JCSAqIGNsZWFyIHRoYXQgYXJyYXkg aGVyZSwgd2hlbiBhZHZhbmNpbmcgb250byBhIG5ldyBoZWFwIHBhZ2UuCisJCSAqIEl0IGlzIHNh ZmUgdG8gYWNjZXNzIHR1cGxlIGRhdGEgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWZmZXIgbG9jawor CQkgKiBiZWNhdXNlIHRoZSBidWZmZXIgcGluIGlzIHN0aWxsIGhlbGQsIGFuZCB0aGUgb25seSBv cGVyYXRpb24gdGhhdAorCQkgKiBjb3VsZCBwaHlzaWNhbGx5IG1vdmUgdHVwbGUgZGF0YSBvbiB0 aGUgcGFnZSBpcworCQkgKiBQYWdlUmVwYWlyRnJhZ21lbnRhdGlvbiB2aWEgaGVhcF9wYWdlX3By dW5lLiAgVkFDVVVNIGNvbmZsaWN0cyB3aXRoCisJCSAqIENJQyAoYm90aCB0YWtlIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jayksIGFuZCBvcHBvcnR1bmlzdGljIHBydW5pbmcKKwkJICogZnJvbSBj b25jdXJyZW50IERNTCBjYW5ub3QgYWZmZWN0IHJvb3QgdHVwbGVzIHdlIGFyZSByZWZlcmVuY2lu Zy4KIAkJICovCi0JCWlmIChoc2Nhbi0+cnNfY2Jsb2NrICE9IHJvb3RfYmxrbm8pCi0JCXsKLQkJ CVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGhzY2FuLT5yc19jYnVmKTsKLQotCQkJTG9ja0J1 ZmZlcihoc2Nhbi0+cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwotCQkJaGVhcF9nZXRfcm9v dF90dXBsZXMocGFnZSwgcm9vdF9vZmZzZXRzKTsKLQkJCUxvY2tCdWZmZXIoaHNjYW4tPnJzX2Ni dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0KLQkJCW1lbXNldChpbl9pbmRleCwgMCwgc2l6ZW9m KGluX2luZGV4KSk7Ci0KLQkJCXJvb3RfYmxrbm8gPSBoc2Nhbi0+cnNfY2Jsb2NrOwotCQl9Ci0K LQkJLyogQ29udmVydCBhY3R1YWwgdHVwbGUgVElEIHRvIHJvb3QgVElEICovCi0JCXJvb3RUdXBs ZSA9ICpoZWFwY3Vyc29yOwotCQlyb290X29mZm51bSA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt YmVyKGhlYXBjdXJzb3IpOwotCi0JCWlmIChIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkp Ci0JCXsKLQkJCXJvb3Rfb2ZmbnVtID0gcm9vdF9vZmZzZXRzW3Jvb3Rfb2ZmbnVtIC0gMV07Ci0J CQlpZiAoIU9mZnNldE51bWJlcklzVmFsaWQocm9vdF9vZmZudW0pKQotCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJCSBlcnJt c2dfaW50ZXJuYWwoImZhaWxlZCB0byBmaW5kIHBhcmVudCB0dXBsZSBmb3IgaGVhcC1vbmx5IHR1 cGxlIGF0ICgldSwldSkgaW4gdGFibGUgXCIlc1wiIiwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIoaGVhcGN1cnNvciksCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGhlYXBSZWxhdGlvbikpKSk7Ci0JCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcigmcm9vdFR1 cGxlLCByb290X29mZm51bSk7Ci0JCX0KLQogCQkvKgotCQkgKiAibWVyZ2UiIGJ5IHNraXBwaW5n IHRocm91Z2ggdGhlIGluZGV4IHR1cGxlcyB1bnRpbCB3ZSBmaW5kIG9yIHBhc3MKLQkJICogdGhl IGN1cnJlbnQgcm9vdCB0dXBsZS4KKwkJICogTm8gcHJlZGljYXRlIGV2YWx1YXRpb24gaXMgbmVl ZGVkIGhlcmU6IHRoZSBhdXhpbGlhcnkgU1RJUiBpbmRleAorCQkgKiBvbmx5IGNvbnRhaW5zIFRJ RHMgZm9yIHR1cGxlcyB0aGF0IGFscmVhZHkgc2F0aXNmaWVkIHRoZSBwYXJ0aWFsCisJCSAqIGlu ZGV4IHByZWRpY2F0ZSBhdCBETUwgdGltZSAoY2hlY2tlZCBpbiBFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMpLgogCQkgKi8KLQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkgJiYKLQkJCSAgICghaW5kZXhj dXJzb3IgfHwKLQkJCQlJdGVtUG9pbnRlckNvbXBhcmUoaW5kZXhjdXJzb3IsICZyb290VHVwbGUp IDwgMCkpCisJCWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9m ZnNldE51bWJlcikKIAkJewotCQkJRGF0dW0JCXRzX3ZhbDsKLQkJCWJvb2wJCXRzX2lzbnVsbDsK LQotCQkJaWYgKGluZGV4Y3Vyc29yKQorCQkJaWYgKEl0ZW1Qb2ludGVySXNWYWxpZCgmaGVhcF90 dXBsZV9kYXRhW2ldLnRfc2VsZikpCiAJCQl7CisJCQkJSXRlbVBvaW50ZXJEYXRhIHJvb3RfdGlk OworCQkJCUl0ZW1Qb2ludGVyU2V0KCZyb290X3RpZCwgYmxvY2tfbnVtYmVyLCBvZmYpOworCisJ CQkJLyogUmVzZXQgdGhlIHBlci10dXBsZSBtZW1vcnkgY29udGV4dCBmb3IgdGhlIG5leHQgZmV0 Y2guICovCisJCQkJTWVtb3J5Q29udGV4dFJlc2V0KGVjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9t ZW1vcnkpOworCQkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmaGVhcF90dXBsZV9kYXRhW2ld LCBzbG90LCBidWYpOworCisJCQkJLyogQ29tcHV0ZSB0aGUga2V5IHZhbHVlcyBhbmQgbnVsbCBm bGFncyBmb3IgdGhpcyB0dXBsZS4gKi8KKwkJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCisJ CQkJCQkJICAgc2xvdCwKKwkJCQkJCQkgICBlc3RhdGUsCisJCQkJCQkJICAgdmFsdWVzLAorCQkJ CQkJCSAgIGlzbnVsbCk7CisKIAkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIGluZGV4IGl0ZW1zIHNl ZW4gZWFybGllciBvbiB0aGUgY3VycmVudCBoZWFwIHBhZ2UKKwkJCQkgKiBJbnNlcnQgdGhlIHR1 cGxlIGludG8gdGhlIHRhcmdldCBpbmRleC4KIAkJCQkgKi8KLQkJCQlpZiAoSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihpbmRleGN1cnNvcikgPT0gcm9vdF9ibGtubykKLQkJCQkJaW5faW5kZXhb SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoaW5kZXhjdXJzb3IpIC0gMV0gPSB0cnVlOworCQkJ CWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAorCQkJCQkJCSB2YWx1ZXMsCisJCQkJCQkJIGlz bnVsbCwKKwkJCQkJCQkgJnJvb3RfdGlkLCAvKiBpbnNlcnQgcm9vdCB0dXBsZSAqLworCQkJCQkJ CSBoZWFwUmVsYXRpb24sCisJCQkJCQkJIGluZGV4SW5mby0+aWlfVW5pcXVlID8KKwkJCQkJCQkg VU5JUVVFX0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKKwkJCQkJCQkgZmFsc2UsCisJCQkJ CQkJIGluZGV4SW5mbyk7CisKKwkJCQlzdGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwogCQkJfQog Ci0JCQl0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKHN0YXRlLT50dXBsZXNv cnQsIHRydWUsCi0JCQkJCQkJCQkJCQkgIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAotCQkJ CQkJCQkJCQkJICBOVUxMKTsKLQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVs bCk7Ci0JCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkKLQkJCXsKLQkJCQlpdGVtcHRyX2RlY29kZSgm ZGVjb2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKLQkJCQlpbmRleGN1cnNvciA9ICZkZWNv ZGVkOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIEJlIHRpZHkgKi8KLQkJCQlpbmRleGN1 cnNvciA9IE5VTEw7Ci0JCQl9CisJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9wYXJhbShQUk9HUkVT U19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsIDEpOworCQkJaSsrOwogCQl9CiAKLQkJLyoKLQkJICog SWYgdGhlIHR1cGxlc29ydCBoYXMgb3ZlcnNob3QgKmFuZCogd2UgZGlkbid0IHNlZSBhIG1hdGNo IGVhcmxpZXIsCi0JCSAqIHRoZW4gdGhpcyB0dXBsZSBpcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4 LCBzbyBpbnNlcnQgaXQuCi0JCSAqLwotCQlpZiAoKHR1cGxlc29ydF9lbXB0eSB8fAotCQkJIEl0 ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgJnJvb3RUdXBsZSkgPiAwKSAmJgotCQkJIWlu X2luZGV4W3Jvb3Rfb2ZmbnVtIC0gMV0pCi0JCXsKLQkJCU1lbW9yeUNvbnRleHRSZXNldChlY29u dGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKLQotCQkJLyogU2V0IHVwIGZvciBwcmVkaWNh dGUgb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uICovCi0JCQlFeGVjU3RvcmVIZWFwVHVwbGUoaGVh cFR1cGxlLCBzbG90LCBmYWxzZSk7Ci0KLQkJCS8qCi0JCQkgKiBJbiBhIHBhcnRpYWwgaW5kZXgs IGRpc2NhcmQgdHVwbGVzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUKLQkJCSAqIHByZWRpY2F0ZS4K LQkJCSAqLwotCQkJaWYgKHByZWRpY2F0ZSAhPSBOVUxMKQotCQkJewotCQkJCWlmICghRXhlY1F1 YWwocHJlZGljYXRlLCBlY29udGV4dCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKgot CQkJICogRm9yIHRoZSBjdXJyZW50IGhlYXAgdHVwbGUsIGV4dHJhY3QgYWxsIHRoZSBhdHRyaWJ1 dGVzIHdlIHVzZQotCQkJICogaW4gdGhpcyBpbmRleCwgYW5kIG5vdGUgd2hpY2ggYXJlIG51bGwu ICBUaGlzIGFsc28gcGVyZm9ybXMKLQkJCSAqIGV2YWx1YXRpb24gb2YgYW55IGV4cHJlc3Npb25z IG5lZWRlZC4KLQkJCSAqLwotCQkJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLAotCQkJCQkJICAg c2xvdCwKLQkJCQkJCSAgIGVzdGF0ZSwKLQkJCQkJCSAgIHZhbHVlcywKLQkJCQkJCSAgIGlzbnVs bCk7Ci0KLQkJCS8qCi0JCQkgKiBZb3UnZCB0aGluayB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGJ1 aWxkIHRoZSBpbmRleCB0dXBsZSBoZXJlLAotCQkJICogYnV0IHNvbWUgaW5kZXggQU1zIHdhbnQg dG8gZG8gZnVydGhlciBwcm9jZXNzaW5nIG9uIHRoZSBkYXRhCi0JCQkgKiBmaXJzdC4gU28gcGFz cyB0aGUgdmFsdWVzW10gYW5kIGlzbnVsbFtdIGFycmF5cywgaW5zdGVhZC4KLQkJCSAqLwotCi0J CQkvKgotCQkJICogSWYgdGhlIHR1cGxlIGlzIGFscmVhZHkgY29tbWl0dGVkIGRlYWQsIHlvdSBt aWdodCB0aGluayB3ZQotCQkJICogY291bGQgc3VwcHJlc3MgdW5pcXVlbmVzcyBjaGVja2luZywg YnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUKLQkJCSAqIGluIHRoZSBwcmVzZW5jZSBvZiBIT1Qs IGJlY2F1c2UgdGhlIGluc2VydCBpcyBhY3R1YWxseSBhIHByb3h5Ci0JCQkgKiBmb3IgYSB1bmlx dWVuZXNzIGNoZWNrIG9uIHRoZSB3aG9sZSBIT1QtY2hhaW4uICBUaGF0IGlzLCB0aGUKLQkJCSAq IHR1cGxlIHdlIGhhdmUgaGVyZSBjb3VsZCBiZSBkZWFkIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkK LQkJCSAqIEhPVC11cGRhdGVkLCBhbmQgaWYgc28gdGhlIHVwZGF0aW5nIHRyYW5zYWN0aW9uIHdp bGwgbm90IGhhdmUKLQkJCSAqIHRob3VnaHQgaXQgc2hvdWxkIGluc2VydCBpbmRleCBlbnRyaWVz LiAgVGhlIGluZGV4IEFNIHdpbGwKLQkJCSAqIGNoZWNrIHRoZSB3aG9sZSBIT1QtY2hhaW4gYW5k IGNvcnJlY3RseSBkZXRlY3QgYSBjb25mbGljdCBpZgotCQkJICogdGhlcmUgaXMgb25lLgotCQkJ ICovCi0KLQkJCWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLAotCQkJCQkJIHZhbHVlcywKLQkJ CQkJCSBpc251bGwsCi0JCQkJCQkgJnJvb3RUdXBsZSwKLQkJCQkJCSBoZWFwUmVsYXRpb24sCi0J CQkJCQkgaW5kZXhJbmZvLT5paV9VbmlxdWUgPwotCQkJCQkJIFVOSVFVRV9DSEVDS19ZRVMgOiBV TklRVUVfQ0hFQ0tfTk8sCi0JCQkJCQkgZmFsc2UsCi0JCQkJCQkgaW5kZXhJbmZvKTsKLQotCQkJ c3RhdGUtPnR1cHNfaW5zZXJ0ZWQgKz0gMTsKLQkJfQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CiAJ fQogCi0JdGFibGVfZW5kc2NhbihzY2FuKTsKLQogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3Qoc2xvdCk7CiAKIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOwogCisJcmVhZF9zdHJlYW1f ZW5kKHJlYWRfc3RyZWFtKTsKKwl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKKwor CUZyZWVBY2Nlc3NTdHJhdGVneShic3RyYXRlZ3kpOworCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVl biBwb2ludGluZyB0byB0aGUgbm93LWdvbmUgZXN0YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHBy ZXNzaW9uc1N0YXRlID0gTklMOwogCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxM OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCmluZGV4IGNjMDY3ZTU4ZDM2Li5iMTQxN2VjMDVjNiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv aW5kZXguYwpAQCAtNzE1LDYgKzcxNSw4IEBAIFVwZGF0ZUluZGV4UmVsYXRpb24oT2lkIGluZGV4 b2lkLAogICoJCQlhbHJlYWR5IGV4aXN0cy4KICAqCQlJTkRFWF9DUkVBVEVfUEFSVElUSU9ORUQ6 CiAgKgkJCWNyZWF0ZSBhIHBhcnRpdGlvbmVkIGluZGV4ICh0YWJsZSBtdXN0IGJlIHBhcnRpdGlv bmVkKQorICoJCUlOREVYX0NSRUFURV9BVVhJTElBUlk6CisgKgkJCW1hcmsgaW5kZXggYXMgYXV4 aWxpYXJ5IGluZGV4CiAgKgkJSU5ERVhfQ1JFQVRFX1NVUFBSRVNTX1BST0dSRVNTOgogICoJCQlk b24ndCByZXBvcnQgcHJvZ3Jlc3MgZHVyaW5nIHRoZSBpbmRleCBidWlsZC4KICAqCkBAIC03MjMs NiArNzI1LDkgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAgKiBhbGxvd19z eXN0ZW1fdGFibGVfbW9kczogYWxsb3cgdGFibGUgdG8gYmUgYSBzeXN0ZW0gY2F0YWxvZwogICog aXNfaW50ZXJuYWw6IGlmIHRydWUsIHBvc3QgY3JlYXRpb24gaG9vayBmb3IgbmV3IGluZGV4CiAg KiBjb25zdHJhaW50SWQ6IGlmIG5vdCBOVUxMLCByZWNlaXZlcyBPSUQgb2YgY3JlYXRlZCBjb25z dHJhaW50CisgKiByZWxwZXJzaXN0ZW5jZTogcGVyc2lzdGVuY2UgbGV2ZWwgdG8gdXNlIGZvciBp bmRleC4gSW4gbW9zdCBvZiB0aGUKKyAqCQljYXNlcyBpdCBzaG91bGQgYmUgZXF1YWwgdG8gdGhl IHBlcnNpc3RlbmNlIGxldmVsIG9mIHRoZSB0YWJsZSwKKyAqCQlhdXhpbGlhcnkgaW5kZXhlcyBh cmUgb25seSBleGNlcHRpb24gaGVyZS4KICAqCiAgKiBSZXR1cm5zIHRoZSBPSUQgb2YgdGhlIGNy ZWF0ZWQgaW5kZXguCiAgKi8KQEAgLTc2Myw2ICs3NjgsNyBAQCBpbmRleF9jcmVhdGUoUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCWJvb2wJCWludmFsaWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVf SU5WQUxJRCkgIT0gMDsKIAlib29sCQljb25jdXJyZW50ID0gKGZsYWdzICYgSU5ERVhfQ1JFQVRF X0NPTkNVUlJFTlQpICE9IDA7CiAJYm9vbAkJcGFydGl0aW9uZWQgPSAoZmxhZ3MgJiBJTkRFWF9D UkVBVEVfUEFSVElUSU9ORUQpICE9IDA7CisJYm9vbAkJYXV4aWxpYXJ5ID0gKGZsYWdzICYgSU5E RVhfQ1JFQVRFX0FVWElMSUFSWSkgIT0gMDsKIAlib29sCQlwcm9ncmVzcyA9IChmbGFncyAmIElO REVYX0NSRUFURV9TVVBQUkVTU19QUk9HUkVTUykgPT0gMDsKIAljaGFyCQlyZWxraW5kOwogCVRy YW5zYWN0aW9uSWQgcmVsZnJvemVueGlkOwpAQCAtNzg5LDcgKzc5NSwxMCBAQCBpbmRleF9jcmVh dGUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCW5hbWVzcGFjZUlkID0gUmVsYXRpb25HZXROYW1l c3BhY2UoaGVhcFJlbGF0aW9uKTsKIAlzaGFyZWRfcmVsYXRpb24gPSBoZWFwUmVsYXRpb24tPnJk X3JlbC0+cmVsaXNzaGFyZWQ7CiAJbWFwcGVkX3JlbGF0aW9uID0gUmVsYXRpb25Jc01hcHBlZCho ZWFwUmVsYXRpb24pOwotCXJlbHBlcnNpc3RlbmNlID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJl bHBlcnNpc3RlbmNlOworCWlmIChhdXhpbGlhcnkpCisJCXJlbHBlcnNpc3RlbmNlID0gUkVMUEVS U0lTVEVOQ0VfVU5MT0dHRUQ7IC8qIGF1eCBpbmRleGVzIGFyZSBhbHdheXMgdW5sb2dnZWQgKi8K KwllbHNlCisJCXJlbHBlcnNpc3RlbmNlID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNp c3RlbmNlOwogCiAJLyoKIAkgKiBjaGVjayBwYXJhbWV0ZXJzCkBAIC03OTcsNiArODA2LDExIEBA IGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJaWYgKGluZGV4SW5mby0+aWlf TnVtSW5kZXhBdHRycyA8IDEpCiAJCWVsb2coRVJST1IsICJtdXN0IGluZGV4IGF0IGxlYXN0IG9u ZSBjb2x1bW4iKTsKIAorCWlmIChpbmRleEluZm8tPmlpX0FtID09IFNUSVJfQU1fT0lEICYmICFh dXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInVzZXItZGVmaW5lZCBpbmRleGVzIHdpdGgg U1RJUiBhY2Nlc3MgbWV0aG9kIGFyZSBub3Qgc3VwcG9ydGVkIikpKTsKKwogCWlmICghYWxsb3df c3lzdGVtX3RhYmxlX21vZHMgJiYKIAkJSXNTeXN0ZW1SZWxhdGlvbihoZWFwUmVsYXRpb24pICYm CiAJCUlzTm9ybWFsUHJvY2Vzc2luZ01vZGUoKSkKQEAgLTE0MDIsNyArMTQxNiw4IEBAIGluZGV4 X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgdWludDE2IGZsYWdzLAogCQkJCQkJ CSFjb25jdXJyZW50bHksCS8qIGlzcmVhZHkgKi8KIAkJCQkJCQljb25jdXJyZW50bHksCS8qIGNv bmN1cnJlbnQgKi8KIAkJCQkJCQlpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1zdW1tYXJpemlu ZywKLQkJCQkJCQlvbGRJbmZvLT5paV9XaXRob3V0T3ZlcmxhcHMpOworCQkJCQkJCW9sZEluZm8t PmlpX1dpdGhvdXRPdmVybGFwcywKKwkJCQkJCQlmYWxzZSk7CiAKIAkvKiBmZXRjaCBleGNsdXNp b24gY29uc3RyYWludCBpbmZvIGlmIGFueSAqLwogCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRl eC0+aW5kaXNleGNsdXNpb24pCkBAIC0xNDIyLDEzICsxNDM3LDE2IEBAIGluZGV4X2NyZWF0ZV9j b3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgdWludDE2IGZsYWdzLAogCSAqIGluZGV4IGluZm9y bWF0aW9uLiAgQWxsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgaW5kZXgK IAkgKiBjcmVhdGlvbi4KIAkgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IG9sZEluZm8tPmlpX051 bUluZGV4QXR0cnM7IGkrKykKIAl7CiAJCVR1cGxlRGVzYwlpbmRleFR1cERlc2MgPSBSZWxhdGlv bkdldERlc2NyKGluZGV4UmVsYXRpb24pOwotCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBs ZURlc2NBdHRyKGluZGV4VHVwRGVzYywgaSk7CiAKLQkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQo aW5kZXhDb2xOYW1lcywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKLQkJbmV3SW5mby0+aWlfSW5k ZXhBdHRyTnVtYmVyc1tpXSA9IG9sZEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisJCWZv ciAoaW50IGkgPSAwOyBpIDwgb2xkSW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCQl7CisJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGluZGV4VHVwRGVzYywgaSk7 CisKKwkJCWluZGV4Q29sTmFtZXMgPSBsYXBwZW5kKGluZGV4Q29sTmFtZXMsIE5hbWVTdHIoYXR0 LT5hdHRuYW1lKSk7CisJCQluZXdJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldID0gb2xkSW5m by0+aWlfSW5kZXhBdHRyTnVtYmVyc1tpXTsKKwkJfQogCX0KIAogCS8qIEV4dHJhY3Qgb3BjbGFz cyBvcHRpb25zIGZvciBlYWNoIGF0dHJpYnV0ZSAqLwpAQCAtMTQ5MCw2ICsxNTA4LDE1NyBAQCBp bmRleF9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIHVpbnQxNiBmbGFncywKIAly ZXR1cm4gbmV3SW5kZXhJZDsKIH0KIAorLyoKKyAqIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVf YXV4CisgKgorICogQ3JlYXRlIGNvbmN1cnJlbnRseSBhbiBhdXhpbGlhcnkgaW5kZXggYmFzZWQg b24gdGhlIGRlZmluaXRpb24gb2YgdGhlIG9uZQorICogcHJvdmlkZWQgYnkgY2FsbGVyLiAgVGhl IGluZGV4IGlzIGluc2VydGVkIGludG8gY2F0YWxvZ3MgYW5kIG5lZWRzIHRvIGJlCisgKiBidWls dCBsYXRlciBvbi4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGNvbmN1cnJlbnQgcmVpbmRleCBwcm9j ZXNzaW5nLgorICoKKyAqICJ0YWJsZXNwYWNlT2lkIiBpcyB0aGUgdGFibGVzcGFjZSB0byB1c2Ug Zm9yIHRoaXMgaW5kZXguCisgKi8KK09pZAoraW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgo UmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJICAgT2lkIHRh Ymxlc3BhY2VPaWQsIGNvbnN0IGNoYXIgKm5ld05hbWUpCit7CisJUmVsYXRpb24JaW5kZXhSZWxh dGlvbjsKKwlJbmRleEluZm8gICpvbGRJbmZvLAorCQkJKm5ld0luZm87CisJT2lkCQkJbmV3SW5k ZXhJZCA9IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCWluZGV4VHVwbGU7CisKKwlMaXN0CSAgICpp bmRleENvbE5hbWVzID0gTklMOworCUxpc3QJICAgKmluZGV4RXhwcnMgPSBOSUw7CisJTGlzdAkg ICAqaW5kZXhQcmVkcyA9IE5JTDsKKworCU9pZCAqYXV4T3BjbGFzc0lkczsKKwlpbnQxNiAqYXV4 Q29sb3B0aW9uczsKKworCWluZGV4UmVsYXRpb24gPSBpbmRleF9vcGVuKG1haW5JbmRleElkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIFRoZSBuZXcgaW5kZXggbmVlZHMgc29tZSBpbmZvcm1h dGlvbiBmcm9tIHRoZSBvbGQgaW5kZXggKi8KKwlvbGRJbmZvID0gQnVpbGRJbmRleEluZm8oaW5k ZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIEJ1aWxkIG9mIGFuIGF1eGlsaWFyeSBpbmRleCB3aXRo IGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3QKKwkgKiBzdXBwb3J0ZWQuCisJICovCisJaWYg KG9sZEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCWVycm1zZygi YXV4aWxpYXJ5IGluZGV4IGNyZWF0aW9uIGZvciBleGNsdXNpb24gY29uc3RyYWludHMgaXMgbm90 IHN1cHBvcnRlZCIpKSk7CisKKwkvKiBHZXQgdGhlIGFycmF5IG9mIGNsYXNzIGFuZCBjb2x1bW4g b3B0aW9ucyBJRHMgZnJvbSBpbmRleCBpbmZvICovCisJaW5kZXhUdXBsZSA9IFNlYXJjaFN5c0Nh Y2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKG1haW5JbmRleElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGluZGV4VHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgaW5kZXggJXUiLCBtYWluSW5kZXhJZCk7CisKKworCS8qCisJICogRmV0Y2gg dGhlIGxpc3Qgb2YgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMgZGlyZWN0bHkgZnJvbSB0aGUK KwkgKiBjYXRhbG9ncy4gIFRoaXMgY2Fubm90IHJlbHkgb24gdGhlIGluZm9ybWF0aW9uIGZyb20g SW5kZXhJbmZvIG9mIHRoZQorCSAqIG9sZCBpbmRleCBhcyB0aGVzZSBoYXZlIGJlZW4gZmxhdHRl bmVkIGZvciB0aGUgcGxhbm5lci4KKwkgKi8KKwlpZiAob2xkSW5mby0+aWlfRXhwcmVzc2lvbnMg IT0gTklMKQorCXsKKwkJRGF0dW0JCWV4cHJEYXR1bTsKKwkJY2hhcgkgICAqZXhwclN0cmluZzsK KworCQlleHByRGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKElOREVYUkVMSUQsIGluZGV4 VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRleHBycyk7CisJCWV4cHJTdHJp bmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJEYXR1bSk7CisJCWluZGV4RXhwcnMgPSAoTGlz dCAqKSBzdHJpbmdUb05vZGUoZXhwclN0cmluZyk7CisJCXBmcmVlKGV4cHJTdHJpbmcpOworCX0K KwlpZiAob2xkSW5mby0+aWlfUHJlZGljYXRlICE9IE5JTCkKKwl7CisJCURhdHVtCQlwcmVkRGF0 dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRB dHRyTm90TnVsbChJTkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJCSAgIEFudW1fcGdf aW5kZXhfaW5kcHJlZCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHByZWRE YXR1bSk7CisJCWluZGV4UHJlZHMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUocHJlZFN0cmluZyk7 CisKKwkJLyogQWxzbyBjb252ZXJ0IHRvIGltcGxpY2l0LUFORCBmb3JtYXQgKi8KKwkJaW5kZXhQ cmVkcyA9IG1ha2VfYW5kc19pbXBsaWNpdCgoRXhwciAqKSBpbmRleFByZWRzKTsKKwkJcGZyZWUo cHJlZFN0cmluZyk7CisJfQorCisJLyoKKwkgKiBCdWlsZCB0aGUgaW5kZXggaW5mb3JtYXRpb24g Zm9yIHRoZSBuZXcgaW5kZXguICBOb3RlIHRoYXQgcmVidWlsZCBvZgorCSAqIGluZGV4ZXMgd2l0 aCBleGNsdXNpb24gY29uc3RyYWludHMgaXMgbm90IHN1cHBvcnRlZCwgaGVuY2UgdGhlcmUgaXMg bm8KKwkgKiBuZWVkIHRvIGZpbGwgYWxsIHRoZSBpaV9FeGNsdXNpb24qIGZpZWxkcy4KKwkgKi8K KwluZXdJbmZvID0gbWFrZUluZGV4SW5mbyhvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJzLAorCQkJ CQkJCW9sZEluZm8tPmlpX051bUluZGV4S2V5QXR0cnMsCisJCQkJCQkJU1RJUl9BTV9PSUQsIC8q IHNwZWNpYWwgQU0gZm9yIGF1eCBpbmRleGVzICovCisJCQkJCQkJaW5kZXhFeHBycywKKwkJCQkJ CQlpbmRleFByZWRzLAorCQkJCQkJCWZhbHNlLAkvKiBhdXggaW5kZXggYXJlIG5vdCB1bmlxdWUg Ki8KKwkJCQkJCQlvbGRJbmZvLT5paV9OdWxsc05vdERpc3RpbmN0LAorCQkJCQkJCWZhbHNlLAkv KiBub3QgcmVhZHkgZm9yIGluc2VydHMgKi8KKwkJCQkJCQl0cnVlLAorCQkJCQkJCWZhbHNlLAkv KiBhdXggYXJlIG5vdCBzdW1tYXJpemluZyAqLworCQkJCQkJCWZhbHNlLAkvKiBhdXggYXJlIG5v dCB3aXRob3V0IG92ZXJsYXBzICovCisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8pOworCisJ LyoKKwkgKiBFeHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1lcyBhbmQgdGhlIGNvbHVtbiBu dW1iZXJzIGZvciB0aGUgbmV3CisJICogaW5kZXggaW5mb3JtYXRpb24uICBBbGwgdGhpcyBpbmZv cm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpbmRleAorCSAqIGNyZWF0aW9uLgorCSAqLwor CXsKKwkJVHVwbGVEZXNjCWluZGV4VHVwRGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhSZWxh dGlvbik7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJz OyBpKyspCisJCXsKKwkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoaW5k ZXhUdXBEZXNjLCBpKTsKKworCQkJaW5kZXhDb2xOYW1lcyA9IGxhcHBlbmQoaW5kZXhDb2xOYW1l cywgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKwkJCW5ld0luZm8tPmlpX0luZGV4QXR0ck51bWJl cnNbaV0gPSBvbGRJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldOworCQl9CisJfQorCisJYXV4 T3BjbGFzc0lkcyA9IHBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBuZXdJbmZvLT5paV9OdW1JbmRleEF0 dHJzKTsKKwlhdXhDb2xvcHRpb25zID0gcGFsbG9jMChzaXplb2YoaW50MTYpICogbmV3SW5mby0+ aWlfTnVtSW5kZXhBdHRycyk7CisKKwkvKiBGaWxsIHdpdGggImFueSBvcHMiICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBuZXdJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlhdXhP cGNsYXNzSWRzW2ldID0gQU5ZX1NUSVJfT1BTX09JRDsKKwkJYXV4Q29sb3B0aW9uc1tpXSA9IDA7 CisJfQorCisJbmV3SW5kZXhJZCA9IGluZGV4X2NyZWF0ZShoZWFwUmVsYXRpb24sCisJCQkJCQkJ ICBuZXdOYW1lLAorCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogaW5kZXhSZWxhdGlvbklkICov CisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRJbmRleFJlbGlkICovCisJCQkJCQkJ ICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRDb25zdHJhaW50SWQgKi8KKwkJCQkJCQkgIEludmFs aWRSZWxGaWxlTnVtYmVyLCAvKiByZWxGaWxlTnVtYmVyICovCisJCQkJCQkJICBuZXdJbmZvLAor CQkJCQkJCSAgaW5kZXhDb2xOYW1lcywKKwkJCQkJCQkgIFNUSVJfQU1fT0lELAorCQkJCQkJCSAg dGFibGVzcGFjZU9pZCwKKwkJCQkJCQkgIGluZGV4UmVsYXRpb24tPnJkX2luZGNvbGxhdGlvbiwK KwkJCQkJCQkgIGF1eE9wY2xhc3NJZHMsCisJCQkJCQkJICBOVUxMLAorCQkJCQkJCSAgYXV4Q29s b3B0aW9ucywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICAoRGF0dW0pIDAsCisJCQkJCQkJICBJ TkRFWF9DUkVBVEVfU0tJUF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5UIHwgSU5ERVhf Q1JFQVRFX0FVWElMSUFSWSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICB0cnVlLCAvKiBhbGxvdyB0 YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nPyAqLworCQkJCQkJCSAgZmFsc2UsICAgIC8qIGlz X2ludGVybmFsPyAqLworCQkJCQkJCSAgTlVMTCk7CisKKwkvKiBDbG9zZSB0aGUgcmVsYXRpb25z IHVzZWQgYW5kIGNsZWFuIHVwICovCisJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2Nr KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CisKKwlyZXR1cm4gbmV3SW5kZXhJZDsK K30KKwogLyoKICAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZAogICoKQEAgLTI0NzAsNyArMjYz OSw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNyZWFkeSwKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4LT5yZF9pbmRhbS0+ YW1zdW1tYXJpemluZywKLQkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGlu ZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSk7CisJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1 c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCisJCQkJCSAgIGluZGV4LT5yZF9yZWwt PnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAqLyk7CiAKIAkvKiBm aWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkr KykKQEAgLTI1MzAsNyArMjcwMCw4IEBAIEJ1aWxkRHVtbXlJbmRleEluZm8oUmVsYXRpb24gaW5k ZXgpCiAJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc3JlYWR5LAogCQkJCQkgICBmYWxzZSwKIAkJ CQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAotCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlKTsKKwkJCQkJICAg aW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGluZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSwK KwkJCQkJICAgaW5kZXgtPnJkX3JlbC0+cmVsYW0gPT0gU1RJUl9BTV9PSUQgLyogYXV4aWxpYXJ5 IGlmZiBTVElSICovKTsKIAogCS8qIGZpbGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8KIAlmb3Ig KGkgPSAwOyBpIDwgbnVtQXR0czsgaSsrKQpAQCAtMzMwOSwxMiArMzQ4MCwyMSBAQCBJbmRleENo ZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqCiAgKiBXZSBkbyBhIGNvbmN1 cnJlbnQgaW5kZXggYnVpbGQgYnkgZmlyc3QgaW5zZXJ0aW5nIHRoZSBjYXRhbG9nIGVudHJ5IGZv ciB0aGUKICAqIGluZGV4IHZpYSBpbmRleF9jcmVhdGUoKSwgbWFya2luZyBpdCBub3QgaW5kaXNy ZWFkeSBhbmQgbm90IGluZGlzdmFsaWQuCisgKiBUaGVuIHdlIGNyZWF0ZSBzcGVjaWFsIGF1eGls aWFyeSBpbmRleCB0aGUgc2FtZSB3YXkuIEl0IGJhc2VkIG9uIFNUSVIgQU0uCiAgKiBUaGVuIHdl IGNvbW1pdCBvdXIgdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgbmV3IG9uZSwgdGhlbiB3ZSB3YWl0 IGZvciBhbGwKICAqIHRyYW5zYWN0aW9ucyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBtb2RpZnlpbmcg dGhlIHRhYmxlIHRvIHRlcm1pbmF0ZS4gIE5vdwotICogd2Uga25vdyB0aGF0IGFueSBzdWJzZXF1 ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlvbnMgd2lsbCBzZWUgdGhlIGluZGV4IGFuZAorICogd2Ug a25vdyB0aGF0IGFueSBzdWJzZXF1ZW50bHktc3RhcnRlZCB0cmFuc2FjdGlvbnMgd2lsbCBzZWUg aW5kZXhlcyBhbmQKICAqIGhvbm9yIGl0cyBjb25zdHJhaW50cyBvbiBIT1QgdXBkYXRlczsgc28g d2hpbGUgZXhpc3RpbmcgSE9ULWNoYWlucyBtaWdodAogICogYmUgYnJva2VuIHdpdGggcmVzcGVj dCB0byB0aGUgaW5kZXgsIG5vIGN1cnJlbnRseSBsaXZlIHR1cGxlIHdpbGwgaGF2ZSBhbgotICog aW5jb21wYXRpYmxlIEhPVCB1cGRhdGUgZG9uZSB0byBpdC4gIFdlIG5vdyBidWlsZCB0aGUgaW5k ZXggbm9ybWFsbHkgdmlhCisgKiBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZSBkb25lIHRvIGl0Lgor ICoKKyAqIEFmdGVyIHRoYXQsIHdlIGJ1aWxkIHRoZSBhdXhpbGlhcnkgaW5kZXguIEl0IGlzIGZh c3Qgb3BlcmF0aW9uIHdpdGhvdXQgYW55IGFjdHVhbAorICogdGFibGUgc2Nhbi4gQXMgcmVzdWx0 LCB3ZSBoYXZlIGVtcHR5IFNUSVIgaW5kZXguIFdlIGNvbW1pdCB0cmFuc2FjdGlvbiBhbmQKKyAq IGFnYWluIHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9k aWZ5aW5nIHRoZSB0YWJsZQorICogdG8gdGVybWluYXRlLiBBdCB0aGF0IG1vbWVudCBhbGwgbmV3 IHR1cGxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgaW50bworICogYXV4aWxpYXJ5IGluZGV4 LgorICoKKyAqIFdlIG5vdyBidWlsZCB0aGUgaW5kZXggbm9ybWFsbHkgdmlhCiAgKiBpbmRleF9i dWlsZCgpLCB3aGlsZSBob2xkaW5nIGEgd2VhayBsb2NrIHRoYXQgYWxsb3dzIGNvbmN1cnJlbnQK ICAqIGluc2VydC91cGRhdGUvZGVsZXRlLiAgQWxzbywgd2UgaW5kZXggb25seSB0dXBsZXMgdGhh dCBhcmUgdmFsaWQKICAqIGFzIG9mIHRoZSBzdGFydCBvZiB0aGUgc2NhbiAoc2VlIHRhYmxlX2lu ZGV4X2J1aWxkX3NjYW4pLCB3aGVyZWFzIGEgbm9ybWFsCkBAIC0zMzI0LDE0ICszNTA0LDE3IEBA IEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogYm9ndXMgdW5p cXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJyZW50IFVQREFURXMgKHdlIG1pZ2h0IHNl ZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJvdyBhcyBiZWluZyB2YWxpZCB3 aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2UgdXNlZCBIZWFwVHVwbGVTYXRpc2ZpZXNW YWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBpbmRleCB0aGF0Ci0gKiBkb2VzIG5vdCBj b250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRhYmxlIHdoaWxlIHdlIGJ1aWx0IHRoZSBp bmRleC4KKyAqIGRvZXMgbm90IGNvbnRhaW4gYW55IHR1cGxlcyBhZGRlZCB0byB0aGUgdGFibGUg d2hpbGUgd2UgYnVpbHQgdGhlIGluZGV4CisgKiAoYnV0IHRoZXNlIHR1cGxlcyBjb250YWluZWQg aW4gYXV4aWxpYXJ5IGluZGV4KS4KICAqCiAgKiBOZXh0LCB3ZSBtYXJrIHRoZSBpbmRleCAiaW5k aXNyZWFkeSIgKGJ1dCBzdGlsbCBub3QgImluZGlzdmFsaWQiKSBhbmQKLSAqIGNvbW1pdCB0aGUg c2Vjb25kIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIHRoaXJkLiAgQWdhaW4gd2Ugd2FpdCBmb3Ig YWxsCisgKiBjb21taXQgdGhlIHRoaXJkIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIGZvdXJ0aC4g IEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRoYXQgY291bGQgaGF2ZSBi ZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93CiAgKiB3ZSBrbm93IHRo YXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5zYWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5k ZXggYW5kCi0gKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxlcyBpbnRvIGl0LiAgV2UgdGhlbiB0YWtl IGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdAotICogd2hpY2ggaXMgcGFzc2VkIHRvIHZhbGlkYXRl X2luZGV4KCkuICBBbnkgdHVwbGVzIHRoYXQgYXJlIHZhbGlkIGFjY29yZGluZworICogaW5zZXJ0 IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNsZWFyICJp bmRpc3JlYWR5IiBmb3IKKyAqIGF1eGlsaWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8gbW9yZSBy ZXF1aXJlZCB0byBiZSB1cGRhdGVkLgorICoKKyAqIFdlIHRoZW4gdGFrZSBhIG5ldyByZWZlcmVu Y2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCiAgKiB0byB0 aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUg aW5kZXguCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQgbGl2ZSBhZnRlciB0aGUgc25hcCB3aWxs IGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBieSB0aGVpciBvcmlnaW5hdGluZyB0cmFu c2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRlYWQgYmVmb3JlCkBAIC0zMzM5LDEyICsz NTIyLDE0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICog dGhhdCBtaWdodCBjYXJlIGFib3V0IHRoZW0gYmVmb3JlIHdlIG1hcmsgdGhlIGluZGV4IHZhbGlk LikKICAqCiAgKiB2YWxpZGF0ZV9pbmRleCgpIHdvcmtzIGJ5IGZpcnN0IGdhdGhlcmluZyBhbGwg dGhlIFRJRHMgY3VycmVudGx5IGluIHRoZQotICogaW5kZXgsIHVzaW5nIGEgYnVsa2RlbGV0ZSBj YWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURzIGFuZCBkb2Vzbid0CisgKiBpbmRleGVz LCB1c2luZyBhIGJ1bGtkZWxldGUgY2FsbGJhY2sgdGhhdCBqdXN0IHN0b3JlcyB0aGUgVElEcyBh bmQgZG9lc24ndAogICogZXZlciBzYXkgImRlbGV0ZSBpdCIuICAoVGhpcyBzaG91bGQgYmUgZmFz dGVyIHRoYW4gYSBwbGFpbiBpbmRleHNjYW47CiAgKiBhbHNvLCBub3QgYWxsIGluZGV4IEFNcyBz dXBwb3J0IGZ1bGwtaW5kZXggaW5kZXhzY2FuLikgIFRoZW4gd2Ugc29ydCB0aGUKLSAqIFRJRHMs IGFuZCBmaW5hbGx5IHNjYW4gdGhlIHRhYmxlIGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3Qg dGhlIFRJRCBsaXN0Ci0gKiB0byBzZWUgd2hpY2ggdHVwbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhl IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0Ci0gKiBhbGwgdHVwbGVzIHZhbGlkIGFj Y29yZGluZyB0byB0aGUgcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguCisgKiBU SURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5kZXhlcywgYW5kIGRvaW5nIGEgIm1l cmdlIGpvaW4iIGFnYWluc3QKKyAqIHRoZSBUSUQgbGlzdHMgdG8gc2VlIHdoaWNoIHR1cGxlcyBm cm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBmcm9tIHRoZQorICogdGFyZ2V0IGluZGV4 LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0dXBsZXMgdmFsaWQgYWNjb3JkaW5nIHRv IHRoZQorICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3ZSBu ZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBwYXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlh cnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRo aXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRvIGluc2VydCBhCiAgKiB0dXBsZSB0aGF0 IGlzIGFscmVhZHkgZGVhZCBvciBpcyBpbiBwcm9jZXNzIG9mIGJlaW5nIGRlbGV0ZWQsIGFuZCB3 ZQpAQCAtMzM2MiwyMiArMzU0NywyNiBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKICAqIG5vdCBpbmRleCkuICBUaGVuIHdlIG1hcmsgdGhlIGluZGV4ICJpbmRp c3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAogICogdHJhbnNhY3Rpb25zIHdpbGwgYmUg YWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgotICogRG9pbmcgdHdvIGZ1bGwgdGFibGUg c2NhbnMgaXMgYSBicnV0ZS1mb3JjZSBzdHJhdGVneS4gIFdlIGNvdWxkIHRyeSB0byBiZQotICog Y2xldmVyZXIsIGVnIHN0b3JpbmcgbmV3IHR1cGxlcyBpbiBhIHNwZWNpYWwgYXJlYSBvZiB0aGUg dGFibGUgKHBlcmhhcHMKLSAqIG1ha2luZyB0aGUgdGFibGUgYXBwZW5kLW9ubHkgYnkgc2V0dGlu ZyB1c2VfZnNtKS4gIEhvd2V2ZXIgdGhhdCB3b3VsZAotICogYWRkIHlldCBtb3JlIGxvY2tpbmcg aXNzdWVzLgorICogQWxzbywgc29tZSBhY3Rpb25zIHRvIGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4 aWxpYXJ5IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8KIHZvaWQKLXZhbGlkYXRlX2luZGV4KE9p ZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK3ZhbGlkYXRlX2luZGV4 KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNo b3QpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAotCQkJCWluZGV4UmVsYXRpb247CisJCQkJ aW5kZXhSZWxhdGlvbiwKKwkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUluZGV4SW5mbyAgKmluZGV4 SW5mbzsKLQlJbmRleFZhY3V1bUluZm8gaXZpbmZvOwotCVZhbGlkYXRlSW5kZXhTdGF0ZSBzdGF0 ZTsKKwlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CisJVmFsaWRhdGVJbmRleFN0 YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKIAlpbnQJCQlzYXZlX3Nl Y19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVsOworCS8qIFVzZSA4MCUgb2YgbWFpbnRl bmFuY2Vfd29ya19tZW0gdG8gdGFyZ2V0IGluZGV4IHNvcnRpbmcgYW5kCisJICogMTAlIHJlc3Qg Zm9yIGF1eGlsaWFyeS4KKwkgKgorCSAqIFJlc3QgMTAlIHdpbGwgYmUgdXNlZCBmb3IgdHVwbGVz dG9yZSBsYXRlci4gKi8KKwlpbnQJCQltYWluX3dvcmtfbWVtX3BhcnQgPSAoaW50KSgoaW50NjQp IG1haW50ZW5hbmNlX3dvcmtfbWVtICogOCAvIDEwKTsKKwlpbnQJCQlhdXhfd29ya19tZW1fcGFy dCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAKIAl7CiAJCWNvbnN0IGludAlwcm9ncmVz c19pbmRleFtdID0gewpAQCAtMzQxMCw2ICszNTk5LDcgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCVJlc3RyaWN0U2VhcmNoUGF0 aCgpOwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhJZCwgUm93RXhjbHVzaXZl TG9jayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgUm93RXhj bHVzaXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNl cnQuICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBAIC0zNDM0LDE1ICszNjI0LDQ5 IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFw c2hvdCkKIAlpdmluZm8uc3RyYXRlZ3kgPSBOVUxMOwogCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IHRydWU7CiAKKwkvKgorCSAqIENvcHkgYWxsIGluZm8gdG8gYXV4aWxpYXJ5IGluZm8sIGNoYW5n aW5nIG9ubHkgcmVsYXRpb24uCisJICovCisJYXV4aXZpbmZvID0gaXZpbmZvOworCWF1eGl2aW5m by5pbmRleCA9IGF1eEluZGV4UmVsYXRpb247CisKIAkvKgogCSAqIEVuY29kZSBUSURzIGFzIGlu dDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgc29ydGluZwogCSAq IGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgcHJpbWFy aWx5IGJlY2F1c2UgVElECiAJICogaXMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB0eXBlIG9uIGFsbCBw bGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcwogCSAqIHBhc3MtYnktdmFsdWUgb24gbW9zdCBwbGF0 Zm9ybXMuCiAJICovCisJYXV4U3RhdGUudHVwbGVzb3J0ID0gdHVwbGVzb3J0X2JlZ2luX2RhdHVt KElOVDhPSUQsIEludDhMZXNzT3BlcmF0b3IsCisJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwgZmFs c2UsCisJCQkJCQkJCQkJICAgYXV4X3dvcmtfbWVtX3BhcnQsCisJCQkJCQkJCQkJICAgTlVMTCwg VFVQTEVTT1JUX05PTkUpOworCWF1eFN0YXRlLmh0dXBzID0gYXV4U3RhdGUuaXR1cHMgPSBhdXhT dGF0ZS50dXBzX2luc2VydGVkID0gMDsKKworCSh2b2lkKSBpbmRleF9idWxrX2RlbGV0ZSgmYXV4 aXZpbmZvLCBOVUxMLAorCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9jYWxsYmFjaywgJmF1eFN0YXRl KTsKKwkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1heSBiZSBza2lwcGVkICovCisJ aWYgKGF1eFN0YXRlLml0dXBzID09IDApCisJeworCQl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLnR1 cGxlc29ydCk7CisJCWF1eFN0YXRlLnR1cGxlc29ydCA9IE5VTEw7CisKKwkJLyogUm9sbCBiYWNr IGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMgKi8KKwkJQXRFT1hh Y3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwkJLyogUmVzdG9yZSB1c2VyaWQgYW5k IHNlY3VyaXR5IGNvbnRleHQgKi8KKwkJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJp ZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwkJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3Mg Ki8KKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJaW5kZXhfY2xv c2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBO b0xvY2spOworCisJCXJldHVybjsKKwl9CisKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRf YmVnaW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKIAkJCQkJCQkJCQkJSW52YWxp ZE9pZCwgZmFsc2UsCi0JCQkJCQkJCQkJCW1haW50ZW5hbmNlX3dvcmtfbWVtLAorCQkJCQkJCQkJ CQkoaW50KSBtYWluX3dvcmtfbWVtX3BhcnQsCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9O T05FKTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9 IDA7CiAKQEAgLTM0NjUsMjcgKzM2ODksMzAgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwg T2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRl X211bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAl9CiAJdHVw bGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJdHVwbGVzb3J0X3BlcmZvcm1z b3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CiAKIAkvKgotCSAqIE5vdyBzY2FuIHRoZSBoZWFwIGFu ZCAibWVyZ2UiIGl0IHdpdGggdGhlIGluZGV4CisJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwog CSAqLwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NB Tik7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0Up OwogCXRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAogCQkJCQkJCSAgaW5k ZXhSZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKIAkJCQkJCQkgIHNuYXBzaG90LAotCQkJ CQkJCSAgJnN0YXRlKTsKKwkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkgICZhdXhTdGF0ZSk7CiAK LQkvKiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwotCXR1cGxlc29ydF9lbmQoc3RhdGUu dHVwbGVzb3J0KTsKKwkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxpZGF0 ZV9zY2FuICovCisJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRlLnR1 cGxlc29ydCA9PSBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNlIHJlc291cmNlcyBj YWNoZWQgaW4gaW5kZXhJbmZvIChpZiBuZWVkZWQpLiAqLwogCWluZGV4X2luc2VydF9jbGVhbnVw KGluZGV4UmVsYXRpb24sIGluZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwKLQkJICJ2YWxpZGF0 ZV9pbmRleCBmb3VuZCAlLjBmIGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsgaW5zZXJ0 ZWQgJS4wZiBtaXNzaW5nIHR1cGxlcyIsCi0JCSBzdGF0ZS5odHVwcywgc3RhdGUuaXR1cHMsIHN0 YXRlLnR1cHNfaW5zZXJ0ZWQpOworCQkgInZhbGlkYXRlX2luZGV4IGZldGNoZWQgJS4wZiBoZWFw IHR1cGxlcywgJS4wZiBpbmRleCB0dXBsZXM7IgorCQkJCQkJIiAlLjBmIGF1eCBpbmRleCB0dXBs ZXM7IGluc2VydGVkICUuMGYgbWlzc2luZyB0dXBsZXMiLAorCQkgc3RhdGUuaHR1cHMsIHN0YXRl Lml0dXBzLCBhdXhTdGF0ZS5pdHVwcywgc3RhdGUudHVwc19pbnNlcnRlZCk7CiAKIAkvKiBSb2xs IGJhY2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLwogCUF0 RU9YYWN0X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwpAQCAtMzQ5NCw2ICszNzIxLDcgQEAg dmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90 KQogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2VyaWQsIHNhdmVfc2VjX2NvbnRleHQp OwogCiAJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3MgKi8KKwlpbmRleF9jbG9zZShhdXhJ bmRleFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9j ayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwogfQpAQCAtMzU1NCw2ICsz NzgyLDEyIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZs YWdzQWN0aW9uIGFjdGlvbikKIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKIAkJ CWluZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSBJTkRFWF9E Uk9QX0NMRUFSX1JFQURZOgorCQkJLyogQ2xlYXIgaW5kaXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCisJCQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRp c3JlYWR5KTsKKwkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKKwkJCWluZGV4Rm9y bS0+aW5kaXNyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CiAJCWNhc2UgSU5ERVhfRFJPUF9DTEVB Ul9WQUxJRDoKIAogCQkJLyoKQEAgLTM4MjUsNiArNDA1OSwxMyBAQCByZWluZGV4X2luZGV4KGNv bnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJaW5kZXhJbmZvLT5paV9FeGNs dXNpb25TdHJhdHMgPSBOVUxMOwogCX0KIAorCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBub3Qg YWxsb3dlZCB0byBiZSByZWJ1aWx0ICovCisJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQor CQllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlc1wiIG5vdCBz dXBwb3J0ZWQiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpUmVsKSkpKTsKKwogCS8q IFN1cHByZXNzIHVzZSBvZiB0aGUgdGFyZ2V0IGluZGV4IHdoaWxlIHJlYnVpbGRpbmcgaXQgKi8K IAlTZXRSZWluZGV4UHJvY2Vzc2luZyhoZWFwSWQsIGluZGV4SWQpOwogCkBAIC00MDY3LDYgKzQz MDgsNyBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVs aWQsIGludCBmbGFncywKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElk KTsKIAkJT2lkCQkJaW5kZXhOYW1lc3BhY2VJZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4T2lk KTsKKwkJT2lkCQkJaW5kZXhBbSA9IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQpOwogCiAJCS8qCiAJ CSAqIFNraXAgYW55IGludmFsaWQgaW5kZXhlcyBvbiBhIFRPQVNUIHRhYmxlLiAgVGhlc2UgY2Fu IG9ubHkgYmUKQEAgLTQwOTIsNiArNDMzNCwxOCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJl aW5kZXhTdG10ICpzdG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAkJCWNvbnRpbnVlOwogCQl9 CiAKKwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklO RywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkg ZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAor CQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShpbmRleE5hbWVzcGFjZUlkKSwKKwkJCQkJCQlnZXRf cmVsX25hbWUoaW5kZXhPaWQpKSkpOworCQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxfU1VQUFJF U1NfSU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsKKwkJCWNv bnRpbnVlOworCQl9CisKIAkJcmVpbmRleF9pbmRleChzdG10LCBpbmRleE9pZCwgIShmbGFncyAm IFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwKIAkJCQkJICBwZXJzaXN0ZW5jZSwgcGFy YW1zKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGViYTI1YWEzZTRk Li41ZGNkMzE4MDEyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTM4 OCwxNiArMTM4OCwxNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRl eCBBUwogICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAogICAgICAgICBDQVNF IFMucGFyYW0xMCBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwogICAgICAgICAgICAgICAgICAg ICAgICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgYnVpbGQnCi0gICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gMiBUSEVOICdidWlsZGluZyBpbmRleCcgfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNl IGF1eGlsaWFyeSBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ2J1 aWxkaW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKCc6 ICcgfHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6Om9pZCwgUy5wYXJh bTExKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAg ICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZh bGlkYXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxp ZGF0aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRI RU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAgICAgICAg ICAgICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnCi0gICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3Rz JwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVy cyBiZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDkgVEhF TiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCisgICAgICAgICAgICAgICAg ICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9u JworICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjog c2Nhbm5pbmcgaW5kZXgnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRl eCB2YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcycKKyAgICAgICAgICAgICAgICAgICAgICAgV0hF TiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcycKKyAgICAgICAgICAg ICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnCisgICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9y ZSBtYXJraW5nIGRlYWQnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2Fp dGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCiAgICAgICAgICAgICAgICAgICAgICAg IEVORCBhcyBwaGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKICAgICAg ICAgUy5wYXJhbTUgQVMgbG9ja2Vyc19kb25lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRl eCA5YWI3NGM4ZGYwYS4uMmQ3YjZiN2ViOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBA IC0xODMsNiArMTgzLDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCQkJCQkg Ym9vbCBpc1dpdGhvdXRPdmVybGFwcykKIHsKIAlib29sCQlpc2NvbnN0cmFpbnQ7CisJYm9vbAkJ aXNhdXhpbGlhcnk7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRpb25JZHM7 CiAJT2lkCQkgICAqb3BjbGFzc0lkczsKQEAgLTIzMyw2ICsyMzQsNyBAQCBDaGVja0luZGV4Q29t cGF0aWJsZShPaWQgb2xkSWQsCiAKIAlhbWNhbm9yZGVyID0gYW1Sb3V0aW5lLT5hbWNhbm9yZGVy OwogCWFtc3VtbWFyaXppbmcgPSBhbVJvdXRpbmUtPmFtc3VtbWFyaXppbmc7CisJaXNhdXhpbGlh cnkgPSBhY2Nlc3NNZXRob2RJZCA9PSBTVElSX0FNX09JRDsKIAogCS8qCiAJICogQ29tcHV0ZSB0 aGUgb3BlcmF0b3IgY2xhc3NlcywgY29sbGF0aW9ucywgYW5kIGV4Y2x1c2lvbiBvcGVyYXRvcnMg Zm9yCkBAIC0yNDQsNyArMjQ2LDggQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAog CSAqLwogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1i ZXJPZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNl LCBmYWxzZSwKLQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1tYXJpemluZywgaXNXaXRob3V0 T3ZlcmxhcHMpOworCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLAorCQkJCQkJ CSAgaXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5KTsKIAl0eXBlSWRzID0gcGFsbG9jX2Fy cmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJy YXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtNTU3LDYgKzU2MCw3IEBAIERlZmluZUluZGV4 KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIHsKIAlib29sCQljb25jdXJyZW50OwogCWNoYXIJICAgKmlu ZGV4UmVsYXRpb25OYW1lOworCWNoYXIJICAgKmF1eEluZGV4UmVsYXRpb25OYW1lID0gTlVMTDsK IAljaGFyCSAgICphY2Nlc3NNZXRob2ROYW1lOwogCU9pZAkJICAgKnR5cGVJZHM7CiAJT2lkCQkg ICAqY29sbGF0aW9uSWRzOwpAQCAtNTY2LDYgKzU3MCw3IEBAIERlZmluZUluZGV4KFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAlPaWQJCQluYW1lc3BhY2VJZDsKIAlPaWQJCQl0YWJsZXNwYWNlSWQ7CiAJ T2lkCQkJY3JlYXRlZENvbnN0cmFpbnRJZCA9IEludmFsaWRPaWQ7CisJT2lkCQkJYXV4SW5kZXhS ZWxhdGlvbklkID0gSW52YWxpZE9pZDsKIAlMaXN0CSAgICppbmRleENvbE5hbWVzOwogCUxpc3QJ ICAgKmFsbEluZGV4UGFyYW1zOwogCVJlbGF0aW9uCXJlbDsKQEAgLTU4Nyw2ICs1OTIsNyBAQCBE ZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJaW50CQkJbnVtYmVyT2ZLZXlBdHRyaWJ1 dGVzOwogCVRyYW5zYWN0aW9uSWQgbGltaXRYbWluOwogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsK KwlPYmplY3RBZGRyZXNzIGF1eEFkZHJlc3M7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NL VEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKQEAgLTgzNyw2ICs4NDMsMTUg QEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCQlzdG10LT5leGNs dWRlT3BOYW1lcywKIAkJCQkJCQkJCQkJc3RtdC0+cHJpbWFyeSwKIAkJCQkJCQkJCQkJc3RtdC0+ aXNjb25zdHJhaW50KTsKKwkvKgorCSAqIFNlbGVjdCBuYW1lIGZvciBhdXhpbGlhcnkgaW5kZXgK KwkgKi8KKwlpZiAoY29uY3VycmVudCkKKwkJYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBDaG9vc2VS ZWxhdGlvbk5hbWUoaW5kZXhSZWxhdGlvbk5hbWUsCisJCQkJCQkJCQkJCQkgIE5VTEwsCisJCQkJ CQkJCQkJCQkgICJjY2F1eCIsCisJCQkJCQkJCQkJCQkgIG5hbWVzcGFjZUlkLAorCQkJCQkJCQkJ CQkJICBmYWxzZSk7CiAKIAkvKgogCSAqIGxvb2sgdXAgdGhlIGFjY2VzcyBtZXRob2QsIHZlcmlm eSBpdCBjYW4gaGFuZGxlIHRoZSByZXF1ZXN0ZWQgZmVhdHVyZXMKQEAgLTkzMSw3ICs5NDYsOCBA QCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAhY29uY3VycmVudCwK IAkJCQkJCQkgIGNvbmN1cnJlbnQsCiAJCQkJCQkJICBhbWlzc3VtbWFyaXppbmcsCi0JCQkJCQkJ ICBzdG10LT5pc3dpdGhvdXRvdmVybGFwcyk7CisJCQkJCQkJICBzdG10LT5pc3dpdGhvdXRvdmVy bGFwcywKKwkJCQkJCQkgIGZhbHNlKTsKIAogCXR5cGVJZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBu dW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBhbGxvY19hcnJheShPaWQsIG51 bWJlck9mQXR0cmlidXRlcyk7CkBAIC0xNjAzLDYgKzE2MTksMTYgQEAgRGVmaW5lSW5kZXgoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CiAKKwkvKgorCSAqIEluIGNh c2Ugb2YgY29uY3VycmVudCBidWlsZCAtIGNyZWF0ZSBhdXhpbGlhcnkgaW5kZXggcmVjb3JkLgor CSAqLworCWlmIChjb25jdXJyZW50KQorCXsKKwkJYXV4SW5kZXhSZWxhdGlvbklkID0gaW5kZXhf Y29uY3VycmVudGx5X2NyZWF0ZV9hdXgocmVsLCBpbmRleFJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CXRhYmxlc3BhY2VJZCwgYXV4SW5kZXhSZWxhdGlvbk5hbWUpOworCQlPYmplY3RBZGRyZXNzU2V0 KGF1eEFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwl9 CisKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwpOwogCVNldFVzZXJJ ZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3NlY19jb250ZXh0KTsK IApAQCAtMTYzMSwxMSArMTY1NywxMSBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUs CiAJLyoKIAkgKiBGb3IgYSBjb25jdXJyZW50IGJ1aWxkLCBpdCdzIGltcG9ydGFudCB0byBtYWtl IHRoZSBjYXRhbG9nIGVudHJpZXMKIAkgKiB2aXNpYmxlIHRvIG90aGVyIHRyYW5zYWN0aW9ucyBi ZWZvcmUgd2Ugc3RhcnQgdG8gYnVpbGQgdGhlIGluZGV4LiBUaGF0Ci0JICogd2lsbCBwcmV2ZW50 IHRoZW0gZnJvbSBtYWtpbmcgaW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiAgVGhlIG5ldyBpbmRl eAotCSAqIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3QgaW5kaXN2YWxpZCwg c28gdGhhdCBubyBvbmUgZWxzZQotCSAqIHRyaWVzIHRvIGVpdGhlciBpbnNlcnQgaW50byBpdCBv ciB1c2UgaXQgZm9yIHF1ZXJpZXMuCisJICogd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBtYWtpbmcg aW5jb21wYXRpYmxlIEhPVCB1cGRhdGVzLiBOZXcgaW5kZXhlcworCSAqIChtYWluIGFuZCBhdXhp bGlhcnkpIHdpbGwgYmUgbWFya2VkIG5vdCBpbmRpc3JlYWR5IGFuZCBub3QgaW5kaXN2YWxpZCwK KwkgKiBzbyB0aGF0IG5vIG9uZSBlbHNlIHRyaWVzIHRvIGVpdGhlciBpbnNlcnQgaW50byBpdCBv ciB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAJICoKLQkgKiBXZSBtdXN0IGNvbW1pdCBvdXIgY3VycmVu dCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleCBiZWNvbWVzCisJICogV2UgbXVzdCBjb21t aXQgb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCB0aGUgaW5kZXhlcyBiZWNvbWVzCiAJ ICogdmlzaWJsZTsgdGhlbiBzdGFydCBhbm90aGVyLiAgTm90ZSB0aGF0IGFsbCB0aGUgZGF0YSBz dHJ1Y3R1cmVzIHdlIGp1c3QKIAkgKiBidWlsdCBhcmUgbG9zdCBpbiB0aGUgY29tbWl0LiAgVGhl IG9ubHkgZGF0YSB3ZSBrZWVwIHBhc3QgaGVyZSBhcmUgdGhlCiAJICogcmVsYXRpb24gSURzLgpA QCAtMTY0NSw3ICsxNjcxLDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAq IGNhbm5vdCBibG9jaywgZXZlbiBpZiBzb21lb25lIGVsc2UgaXMgd2FpdGluZyBmb3IgYWNjZXNz LCBiZWNhdXNlIHdlCiAJICogYWxyZWFkeSBoYXZlIHRoZSBzYW1lIGxvY2sgd2l0aGluIG91ciB0 cmFuc2FjdGlvbi4KIAkgKgotCSAqIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRseSBib3RoZXIgd2l0 aCBhIHNlc3Npb24gbG9jayBvbiB0aGUgaW5kZXgsCisJICogTm90ZTogd2UgZG9uJ3QgY3VycmVu dGx5IGJvdGhlciB3aXRoIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBpbmRleGVzLAogCSAqIGJlY2F1 c2UgdGhlcmUgYXJlIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBjaGFuZ2UgaXRzIHN0YXRlIHdo aWxlIHdlCiAJICogaG9sZCBsb2NrIG9uIHRoZSBwYXJlbnQgdGFibGUuICBUaGlzIG1pZ2h0IG5l ZWQgdG8gY2hhbmdlIGxhdGVyLgogCSAqLwpAQCAtMTY4NCw3ICsxNzEwLDcgQEAgRGVmaW5lSW5k ZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIHdpdGggdGhlIG9sZCBsaXN0IG9mIGluZGV4ZXMu ICBVc2UgU2hhcmVMb2NrIHRvIGNvbnNpZGVyIHJ1bm5pbmcKIAkgKiB0cmFuc2FjdGlvbnMgdGhh dCBob2xkIGxvY2tzIHRoYXQgcGVybWl0IHdyaXRpbmcgdG8gdGhlIHRhYmxlLiAgTm90ZSB3ZQog CSAqIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHhhY3RzIHRoYXQgb3BlbiB0aGUgdGFibGUg Zm9yIHdyaXRpbmcgYWZ0ZXIKLQkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2VlIHRoZSBuZXcg aW5kZXggd2hlbiB0aGV5IG9wZW4gaXQuCisJICogdGhpcyBwb2ludDsgdGhleSB3aWxsIHNlZSB0 aGUgbmV3IGluZGV4ZXMgd2hlbiB0aGV5IG9wZW4gaXQuCiAJICoKIAkgKiBOb3RlOiB0aGUgcmVh c29uIHdlIHVzZSBhY3R1YWwgbG9jayBhY3F1aXNpdGlvbiBoZXJlLCByYXRoZXIgdGhhbiBqdXN0 CiAJICogY2hlY2tpbmcgdGhlIFByb2NBcnJheSBhbmQgc2xlZXBpbmcsIGlzIHRoYXQgZGVhZGxv Y2sgaXMgcG9zc2libGUgaWYKQEAgLTE2OTYsMTQgKzE3MjIsNDQgQEAgRGVmaW5lSW5kZXgoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCiAJLyoKIAkgKiBBdCB0aGlzIG1vbWVudCB3ZSBhcmUgc3VyZSB0 aGF0IHRoZXJlIGFyZSBubyB0cmFuc2FjdGlvbnMgd2l0aCB0aGUKLQkgKiB0YWJsZSBvcGVuIGZv ciB3cml0ZSB0aGF0IGRvbid0IGhhdmUgdGhpcyBuZXcgaW5kZXggaW4gdGhlaXIgbGlzdCBvZgor CSAqIHRhYmxlIG9wZW4gZm9yIHdyaXRlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIG5ldyBpbmRleGVz IGluIHRoZWlyIGxpc3Qgb2YKIAkgKiBpbmRleGVzLiAgV2UgaGF2ZSB3YWl0ZWQgb3V0IGFsbCB0 aGUgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIGFuZCBhbnkgbmV3Ci0JICogdHJhbnNhY3Rpb24gd2ls bCBoYXZlIHRoZSBuZXcgaW5kZXggaW4gaXRzIGxpc3QsIGJ1dCB0aGUgaW5kZXggaXMgc3RpbGwK LQkgKiBtYXJrZWQgYXMgIm5vdC1yZWFkeS1mb3ItaW5zZXJ0cyIuICBUaGUgaW5kZXggaXMgY29u c3VsdGVkIHdoaWxlCisJICogdHJhbnNhY3Rpb24gd2lsbCBoYXZlIGJvdGggbmV3IGluZGV4ZXMg aW4gaXRzIGxpc3QsIGJ1dCBpbmRleGVzIGFyZSBzdGlsbAorCSAqIG1hcmtlZCBhcyAibm90LXJl YWR5LWZvci1pbnNlcnRzIi4gVGhlIGluZGV4ZXMgYXJlIGNvbnN1bHRlZCB3aGlsZQogCSAqIGRl Y2lkaW5nIEhPVC1zYWZldHkgdGhvdWdoLiAgVGhpcyBhcnJhbmdlbWVudCBlbnN1cmVzIHRoYXQg bm8gbmV3IEhPVAogCSAqIGNoYWlucyBjYW4gYmUgY3JlYXRlZCB3aGVyZSB0aGUgbmV3IHR1cGxl IGFuZCB0aGUgb2xkIHR1cGxlIGluIHRoZQogCSAqIGNoYWluIGhhdmUgZGlmZmVyZW50IGluZGV4 IGtleXMuCiAJICoKKwkgKiBOb3cgY2FsbCBidWlsZCBvbiBhdXhpbGlhcnkgaW5kZXguIEluZGV4 IHdpbGwgYmUgY3JlYXRlZCBlbXB0eSB3aXRob3V0CisJICogYW55IGFjdHVhbCBoZWFwIHNjYW4s IGJ1dCBtYXJrZWQgYXMgInJlYWR5LWZvci1pbnNlcnRzIi4gVGhlIGdvYWwgb2YKKwkgKiB0aGF0 IGluZGV4IGlzIGFjY3VtdWxhdGUgbmV3IHR1cGxlcyB3aGlsZSBtYWluIGluZGV4IGlzIGFjdHVh bGx5IGJ1aWx0LgorCSAqLworCisJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9u cyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKHRhYmxl SWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJLyogd2UgY2FuIGRvIGF3YXkgd2l0aCBvdXIgc25h cHNob3QgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIFRlbGwgY29uY3VycmVu dCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAo c2FmZV9pbmRleCkKKwkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKwlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMik7CisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBlbnN1 cmUgdGhlcmUgYXJlIG5vIHRyYW5zYWN0aW9ucyB3aXRoIHRoZSBhdXhpbGlhcnkgaW5kZXgKKwkg KiBtYXJrZWQgYXMgIm5vdC1yZWFkeS1mb3ItaW5zZXJ0cyIuCisJICovCisJV2FpdEZvckxvY2tl cnMoaGVhcGxvY2t0YWcsIFNoYXJlTG9jaywgdHJ1ZSk7CisKKwkvKgorCSAqIEF0IHRoaXMgbW9t ZW50IHdlIGFyZSBzdXJlIHRoYXQgYWxsIG5ldyB0dXBsZXMgaW4gdGFibGUgYXJlIGluc2VydGVk IGludG8KKwkgKiB0aGUgYXV4aWxpYXJ5IGluZGV4LiBOb3cgaXQgaXMgdGltZSB0byBidWlsZCB0 aGUgdGFyZ2V0IGluZGV4IGl0c2VsZi4KKwkgKgogCSAqIFdlIG5vdyB0YWtlIGEgbmV3IHNuYXBz aG90LCBhbmQgYnVpbGQgdGhlIGluZGV4IHVzaW5nIGFsbCB0dXBsZXMgdGhhdAogCSAqIGFyZSB2 aXNpYmxlIGluIHRoaXMgc25hcHNob3QuICBXZSBjYW4gYmUgc3VyZSB0aGF0IGFueSBIT1QgdXBk YXRlcyB0bwogCSAqIHRoZXNlIHR1cGxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5k ZXgsIHNpbmNlIGFueSB1cGRhdGVzIG1hZGUKQEAgLTE3MzgsOSArMTc5NCwyOCBAQCBEZWZpbmVJ bmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogdGhlIGluZGV4IG1hcmtlZCBhcyByZWFkLW9u bHkgZm9yIHVwZGF0ZXMuCiAJICovCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF8yKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMpOwogCVdh aXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBTaGFyZUxvY2ssIHRydWUpOwogCisJLyoKKwkgKiBV cGRhdGluZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5z dXJlIHdlCisJICogaGF2ZSBhIHZhbGlkIHNuYXBzaG90LgorCSAqLworCVB1c2hBY3RpdmVTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCS8qCisJICogTm93IHRhcmdldCBpbmRl eCBpcyBtYXJrZWQgYXMgInJlYWR5IiBmb3IgYWxsIHRyYW5zYWN0aW9ucy4gU28sIGF1eGlsaWFy eQorCSAqIGluZGV4IGlzIG5vIGxvbmdlciBuZWVkZWQuIFNvLCBzdGFydCByZW1vdmluZyBwcm9j ZXNzIGJ5IHJldmVydGluZyAicmVhZHkiCisJICogZmxhZy4KKwkgKi8KKwlpbmRleF9zZXRfc3Rh dGVfZmxhZ3MoYXV4SW5kZXhSZWxhdGlvbklkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKKwlQ b3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJU3Rh cnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRz IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJ CXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKIAkvKgogCSAqIE5vdyB0YWtlIHRoZSAicmVm ZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCiAJ ICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuICBCZXdhcmUhICBUaGVyZSBtaWdodCBzdGls bCBiZSBzbmFwc2hvdHMgaW4KQEAgLTE3NTgsMjQgKzE4MzMsMTQgQEAgRGVmaW5lSW5kZXgoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCSAqLwogCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOwogCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hvdCk7Ci0K IAkvKgotCSAqIFNjYW4gdGhlIGluZGV4IGFuZCB0aGUgaGVhcCwgaW5zZXJ0IGFueSBtaXNzaW5n IGluZGV4IGVudHJpZXMuCi0JICovCi0JdmFsaWRhdGVfaW5kZXgodGFibGVJZCwgaW5kZXhSZWxh dGlvbklkLCBzbmFwc2hvdCk7Ci0KLQkvKgotCSAqIERyb3AgdGhlIHJlZmVyZW5jZSBzbmFwc2hv dC4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2FpdGluZyBvdXQgb3RoZXIKLQkgKiBzbmFwc2hv dCBob2xkZXJzLCBlbHNlIHdlIHdpbGwgZGVhZGxvY2sgYWdhaW5zdCBvdGhlciBwcm9jZXNzZXMg YWxzbwotCSAqIGRvaW5nIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFksIHdoaWNoIHdvdWxkIHNl ZSBvdXIgc25hcHNob3QgYXMgb25lCi0JICogdGhleSBtdXN0IHdhaXQgZm9yLiAgQnV0IGZpcnN0 LCBzYXZlIHRoZSBzbmFwc2hvdCdzIHhtaW4gdG8gdXNlIGFzCi0JICogbGltaXRYbWluIGZvciBH ZXRDdXJyZW50VmlydHVhbFhJRHMoKS4KKwkgKiBNZXJnZSBjb250ZW50IG9mIGF1eGlsaWFyeSBh bmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3NpbmcgaW5kZXggZW50cmllcy4KIAkg Ki8KKwl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVs YXRpb25JZCwgc25hcHNob3QpOwogCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOwogCiAJUG9w QWN0aXZlU25hcHNob3QoKTsKIAlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwotCiAJLyoK IAkgKiBUaGUgc25hcHNob3Qgc3Vic3lzdGVtIGNvdWxkIHN0aWxsIGNvbnRhaW4gcmVnaXN0ZXJl ZCBzbmFwc2hvdHMgdGhhdAogCSAqIGFyZSBob2xkaW5nIGJhY2sgb3VyIHByb2Nlc3MncyBhZHZl cnRpc2VkIHhtaW47IGluIHBhcnRpY3VsYXIsIGlmCkBAIC0xODAyLDcgKzE4NjcsNyBAQCBEZWZp bmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJICovCiAJSU5KRUNUSU9OX1BPSU5UKCJkZWZp bmUtaW5kZXgtYmVmb3JlLXNldC12YWxpZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191cGRh dGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JF QVRFSURYX1BIQVNFX1dBSVRfMyk7CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF80KTsKIAlXYWl0Rm9yT2xkZXJTbmFwc2hvdHMobGltaXRYbWluLCB0cnVlKTsKIAogCS8q CkBAIC0xODI3LDYgKzE4OTIsNTMgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CSAqIHRvIHJlcGxhbjsgc28gcmVsY2FjaGUgZmx1c2ggb24gdGhlIGluZGV4IGl0c2VsZiB3YXMg c3VmZmljaWVudC4pCiAJICovCiAJQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVJlbGlkKGhlYXBy ZWxpZC5yZWxJZCk7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2Fj dGlvbkNvbW1hbmQoKTsKKworCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdu b3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJc2V0X2lu ZGV4c2FmZV9wcm9jZmxhZ3MoKTsKKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF81KTsKKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9uIHRvIHNlZSBhdXhpbGlh cnkgYXMgIm5vbi1yZWFkeSBmb3IgaW5zZXJ0cyIgKi8KKwlXYWl0Rm9yTG9ja2VycyhoZWFwbG9j a3RhZywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBVcGRhdGlu ZyBwZ19pbmRleCBtaWdodCBpbnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5zdXJlIHdl CisJICogaGF2ZSBhIHZhbGlkIHNuYXBzaG90LgorCSAqLworCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCS8qIE5vdyBpdCBpcyB0aW1lIHRvIG1hcmsgYXV4 aWxpYXJ5IGluZGV4IGFzIGRlYWQgKi8KKwlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQodGFi bGVJZCwgYXV4SW5kZXhSZWxhdGlvbklkKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwor CS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBx dWFsaWZpZXMgKi8KKwlpZiAoc2FmZV9pbmRleCkKKwkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3Mo KTsKKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF82KTsKKwkvKiBOb3cg d2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9uIHRvIGlnbm9yZSBhdXhpbGlhcnkgYmVjYXVzZSBpdCBp cyBkZWFkICovCisJV2FpdEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIEFjY2Vzc0V4Y2x1c2l2ZUxv Y2ssIHRydWUpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2Fj dGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogRHJvcCBhdXhpbGlhcnkgaW5kZXguCisJICoKKwkg KiBVc2UgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28gdGhhdCBpbmRleF9kcm9w KCkgdXNlcyB0aGUKKwkgKiByaWdodCBsb2NrIGxldmVsLgorCSAqLworCXBlcmZvcm1EZWxldGlv bigmYXV4QWRkcmVzcywgRFJPUF9SRVNUUklDVCwKKwkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9D T05DVVJSRU5UX0xPQ0sgfCBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFMKTsKIAogCS8qCiAJICog TGFzdCB0aGluZyB0byBkbyBpcyByZWxlYXNlIHRoZSBzZXNzaW9uLWxldmVsIGxvY2sgb24gdGhl IHBhcmVudCB0YWJsZS4KQEAgLTM1OTgsNiArMzcxMCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1 cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBS ZWluCiAJdHlwZWRlZiBzdHJ1Y3QgUmVpbmRleEluZGV4SW5mbwogCXsKIAkJT2lkCQkJaW5kZXhJ ZDsKKwkJT2lkCQkJYXV4SW5kZXhJZDsKIAkJT2lkCQkJdGFibGVJZDsKIAkJT2lkCQkJYW1JZDsK IAkJYm9vbAkJc2FmZTsJCS8qIGZvciBzZXRfaW5kZXhzYWZlX3Byb2NmbGFncyAqLwpAQCAtMzcw Myw4ICszODE2LDE1IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCU9pZAkJCWNlbGxP aWQgPSBsZmlyc3Rfb2lkKGxjKTsKIAkJCQkJUmVsYXRpb24JaW5kZXhSZWxhdGlvbiA9IGluZGV4 X29wZW4oY2VsbE9pZCwKIAkJCQkJCQkJCQkJCQkJICAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr KTsKKwkJCQkJSW5kZXhJbmZvKglpbmRleEluZm8gPSBCdWlsZER1bW15SW5kZXhJbmZvKGluZGV4 UmVsYXRpb24pOwogCi0JCQkJCWlmICghaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFs aWQpCisKKwkJCQkJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQorCQkJCQkJZXJlcG9ydChX QVJOSU5HLChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkg ZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAor CQkJCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxPaWQpKSwK KwkJCQkJCQkJCWdldF9yZWxfbmFtZShjZWxsT2lkKSkpKTsKKwkJCQkJZWxzZSBpZiAoIWluZGV4 UmVsYXRpb24tPnJkX2luZGV4LT5pbmRpc3ZhbGlkKQogCQkJCQkJZXJlcG9ydChXQVJOSU5HLAog CQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKIAkJCQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4IFwi JXMuJXNcIiIsCkBAIC0zNzU2LDggKzM4NzYsMTUgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVu dGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4K IAkJCQkJCU9pZAkJCWNlbGxPaWQgPSBsZmlyc3Rfb2lkKGxjMik7CiAJCQkJCQlSZWxhdGlvbglp bmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihjZWxsT2lkLAogCQkJCQkJCQkJCQkJCQkJICAgU2hh cmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJCQkJCUluZGV4SW5mbyoJaW5kZXhJbmZvID0gQnVp bGREdW1teUluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKIAotCQkJCQkJaWYgKCFpbmRleFJlbGF0 aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxpZCkKKwkJCQkJCWlmIChpbmRleEluZm8tPmlpX0F1eGls aWFyeSkKKwkJCQkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJCQkgZXJybXNnKCJza2lwcGluZyByZWlu ZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAorCQkJCQkJCQkJCQlnZXRfbmFtZXNw YWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UoY2VsbE9pZCkpLAorCQkJCQkJCQkJCQlnZXRfcmVs X25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCQllbHNlIGlmICghaW5kZXhSZWxhdGlvbi0+cmRfaW5k ZXgtPmluZGlzdmFsaWQpCiAJCQkJCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJCQkJCQkg ZXJybXNnKCJza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggXCIlcy4lc1wiIiwKQEAg LTM4MTgsNiArMzk0NSwxMyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJjYW5u b3QgcmVpbmRleCBpbnZhbGlkIGluZGV4IG9uIFRPQVNUIHRhYmxlIikpKTsKIAorCQkJCS8qIEF1 eGlsaWFyeSBpbmRleGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSByZWJ1aWx0ICovCisJCQkJaWYg KGdldF9yZWxfcmVsYW0ocmVsYXRpb25PaWQpID09IFNUSVJfQU1fT0lEKQorCQkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlc1wiIG5vdCBzdXBw b3J0ZWQiLAorCQkJCQkJCQlnZXRfcmVsX25hbWUocmVsYXRpb25PaWQpKSkpOworCiAJCQkJLyoK IAkJCQkgKiBDaGVjayBpZiBwYXJlbnQgcmVsYXRpb24gY2FuIGJlIGxvY2tlZCBhbmQgaWYgaXQg ZXhpc3RzLAogCQkJCSAqIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhdCB0aGlzIHN0YWdlIGFzIHRo ZSBsaXN0IG9mIGluZGV4ZXMKQEAgLTM5MjEsMTUgKzQwNTUsMTggQEAgUmVpbmRleFJlbGF0aW9u Q29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNv bnN0IFJlaW4KIAlmb3JlYWNoKGxjLCBpbmRleElkcykKIAl7CiAJCWNoYXIJICAgKmNvbmN1cnJl bnROYW1lOworCQljaGFyCSAgICphdXhDb25jdXJyZW50TmFtZTsKIAkJUmVpbmRleEluZGV4SW5m byAqaWR4ID0gbGZpcnN0KGxjKTsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4OwogCQlPaWQJ CQluZXdJbmRleElkOworCQlPaWQJCQlhdXhJbmRleElkOwogCQlSZWxhdGlvbglpbmRleFJlbDsK IAkJUmVsYXRpb24JaGVhcFJlbDsKIAkJT2lkCQkJc2F2ZV91c2VyaWQ7CiAJCWludAkJCXNhdmVf c2VjX2NvbnRleHQ7CiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwogCQlSZWxhdGlvbgluZXdJbmRl eFJlbDsKKwkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CiAJCUxvY2tSZWxJZCAgKmxvY2tyZWxpZDsK IAkJT2lkCQkJdGFibGVzcGFjZWlkOwogCkBAIC0zOTgwLDYgKzQxMTcsMTEgQEAgUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25P aWQsIGNvbnN0IFJlaW4KIAkJCQkJCQkJCQkJImNjbmV3IiwKIAkJCQkJCQkJCQkJZ2V0X3JlbF9u YW1lc3BhY2UoaW5kZXhSZWwtPnJkX2luZGV4LT5pbmRyZWxpZCksCiAJCQkJCQkJCQkJCWZhbHNl KTsKKwkJYXV4Q29uY3VycmVudE5hbWUgPSBDaG9vc2VSZWxhdGlvbk5hbWUoZ2V0X3JlbF9uYW1l KGlkeC0+aW5kZXhJZCksCisJCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJCSJjY2F1eCIsCisJ CQkJCQkJCQkJCWdldF9yZWxfbmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQp LAorCQkJCQkJCQkJCQlmYWxzZSk7CiAKIAkJLyogQ2hvb3NlIHRoZSBuZXcgdGFibGVzcGFjZSwg aW5kZXhlcyBvZiB0b2FzdCB0YWJsZXMgYXJlIG5vdCBtb3ZlZCAqLwogCQlpZiAoT2lkSXNWYWxp ZChwYXJhbXMtPnRhYmxlc3BhY2VPaWQpICYmCkBAIC0zOTk3LDExICs0MTM5LDE3IEBAIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0 aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkgICB0YWJsZXNwYWNlaWQsCiAJCQkJCQkJCQkg ICBjb25jdXJyZW50TmFtZSk7CiAKKwkJYXV4SW5kZXhJZCA9IGluZGV4X2NvbmN1cnJlbnRseV9j cmVhdGVfYXV4KGhlYXBSZWwsCisJCQkJCQkJCQkJCQkgICBuZXdJbmRleElkLAorCQkJCQkJCQkJ CQkJICAgdGFibGVzcGFjZWlkLAorCQkJCQkJCQkJCQkJICAgYXV4Q29uY3VycmVudE5hbWUpOwor CiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxhdGlvbiBvZiB0aGUgbmV3IGluZGV4LCBhIHNl c3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNvIG5lZWRlZCBvbiBpdC4KIAkJICovCiAJCW5l d0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2spOworCQlhdXhJbmRleFJlbCA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVF eGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBTYXZlIHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxv Y2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDAxMCw2ICs0MTU4LDcgQEAgUmVpbmRleFJlbGF0 aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQs IGNvbnN0IFJlaW4KIAogCQluZXdpZHggPSBwYWxsb2Nfb2JqZWN0KFJlaW5kZXhJbmRleEluZm8p OwogCQluZXdpZHgtPmluZGV4SWQgPSBuZXdJbmRleElkOworCQluZXdpZHgtPmF1eEluZGV4SWQg PSBhdXhJbmRleElkOwogCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFi bGVJZCA9IGlkeC0+dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlkOwpAQCAtNDAy OCwxMCArNDE3NywxNCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRl eFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlsb2NrcmVsaWQgPSBw YWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CiAJCSpsb2NrcmVsaWQgPSBuZXdJbmRleFJlbC0+cmRf bG9ja0luZm8ubG9ja1JlbElkOwogCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxv Y2tzLCBsb2NrcmVsaWQpOworCQlsb2NrcmVsaWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7 CisJCSpsb2NrcmVsaWQgPSBhdXhJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOworCQly ZWxhdGlvbkxvY2tzID0gbGFwcGVuZChyZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOwogCiAJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCQlpbmRleF9jbG9zZShpbmRleFJl bCwgTm9Mb2NrKTsKKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4 X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwogCiAJCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNo YW5nZXMgZXhlY3V0ZWQgYnkgaW5kZXggZnVuY3Rpb25zICovCkBAIC00MTEyLDEzICs0MjY1LDYw IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwg T2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJICogZG9pbmcgdGhhdCwgd2FpdCB1bnRpbCBu byBydW5uaW5nIHRyYW5zYWN0aW9ucyBjb3VsZCBoYXZlIHRoZSB0YWJsZSBvZgogCSAqIHRoZSBp bmRleCBvcGVuIHdpdGggdGhlIG9sZCBsaXN0IG9mIGluZGV4ZXMuICBTZWUgInBoYXNlIDIiIGlu CiAJICogRGVmaW5lSW5kZXgoKSBmb3IgbW9yZSBkZXRhaWxzLgorCSovCisKKwlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMSk7CisJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShs b2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCS8qCisJICogTm93IGJ1aWxkIGFsbCBhdXhpbGlhcnkgaW5kZXhlcyBhbmQgbWFyayB0aGVt IGFzICJyZWFkeS1mb3ItaW5zZXJ0cyIuCisJICovCisJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMp CisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOworCisJCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHVzZXItcmVxdWVz dGVkIGFib3J0LiAgVGhpcyBpcyBpbnNpZGUgYSB0cmFuc2FjdGlvbiBzbyBhcworCQkgKiB4YWN0 LmMgZG9lcyBub3QgaXNzdWUgYSB1c2VsZXNzIFdBUk5JTkcsIGFuZCBlbnN1cmVzIHRoYXQKKwkJ ICogc2Vzc2lvbi1sZXZlbCBsb2NrcyBhcmUgY2xlYW5lZCB1cCBvbiBhYm9ydC4KKwkJICovCisJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogVGVsbCBjb25jdXJyZW50IGluZGV4aW5n IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJCWlmIChuZXdpZHgtPnNhZmUp CisJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCisJCS8qIFNldCBBY3RpdmVTbmFwc2hv dCBzaW5jZSBmdW5jdGlvbnMgaW4gdGhlIGluZGV4ZXMgbWF5IG5lZWQgaXQgKi8KKwkJUHVzaEFj dGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwkJLyogQnVpbGQgYXV4 aWxpYXJ5IGluZGV4LCBpdCBpcyBmYXN0IC0gd2l0aG91dCBhbnkgYWN0dWFsIGhlYXAgc2Nhbiwg anVzdCBhbiBlbXB0eSBpbmRleC4gKi8KKwkJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKG5ld2lk eC0+dGFibGVJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKKworCQlQb3BBY3RpdmVTbmFwc2hvdCgp OworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwl9CisKKwlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJLyoKKwkgKiBCZWNhdXNlIHdlIGRvbid0IHRha2UgYSBzbmFwc2hvdCBp biB0aGlzIHRyYW5zYWN0aW9uLCB0aGVyZSdzIG5vIG5lZWQKKwkgKiB0byBzZXQgdGhlIFBST0Nf SU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJICovCiAKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlE WF9QSEFTRV9XQUlUXzEpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRf Mik7CisJLyoKKwkgKiBXYWl0IHVudGlsIGFsbCBhdXhpbGlhcnkgaW5kZXhlcyBhcmUgdGFrZW4g aW50byBhY2NvdW50IGJ5IGFsbAorCSAqIHRyYW5zYWN0aW9ucy4KKwkgKi8KIAlXYWl0Rm9yTG9j a2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2ssIHRydWUpOwogCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCisJLyogTm93IGl0IGlzIHRpbWUgdG8gcGVyZm9ybSB0YXJnZXQgaW5k ZXggYnVpbGQuICovCiAJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewogCQlSZWluZGV4SW5k ZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOwpAQCAtNDE2NSw2ICs0MzY1LDQxIEBAIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0 aW9uT2lkLCBjb25zdCBSZWluCiAJICogbmVlZCB0byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBm bGFnIGhlcmUuCiAJICovCiAKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlU XzMpOworCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9jaywgdHJ1ZSk7 CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIEF0IHRoaXMgbW9tZW50 IGFsbCB0YXJnZXQgaW5kZXhlcyBhcmUgbWFya2VkIGFzICJyZWFkeS10by1pbnNlcnQiLiBTbywK KwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFyeSBp bmRleGVzLgorCSAqLworCWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleElu ZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAgVGhpcyBpcyBp bnNpZGUgYSB0cmFuc2FjdGlvbiBzbyBhcworCQkgKiB4YWN0LmMgZG9lcyBub3QgaXNzdWUgYSB1 c2VsZXNzIFdBUk5JTkcsIGFuZCBlbnN1cmVzIHRoYXQKKwkJICogc2Vzc2lvbi1sZXZlbCBsb2Nr cyBhcmUgY2xlYW5lZCB1cCBvbiBhYm9ydC4KKwkJICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisKKwkJLyogVGVsbCBjb25jdXJyZW50IGluZGV4aW5nIHRvIGlnbm9yZSB1cywgaWYgaW5k ZXggcXVhbGlmaWVzICovCisJCWlmIChuZXdpZHgtPnNhZmUpCisJCQlzZXRfaW5kZXhzYWZlX3By b2NmbGFncygpOworCisJCS8qCisJCSAqIFVwZGF0aW5nIHBnX2luZGV4IG1pZ2h0IGludm9sdmUg VE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UKKwkJICogaGF2ZSBhIHZhbGlkIHNuYXBz aG90LgorCQkgKi8KKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3Qo KSk7CisJCWluZGV4X3NldF9zdGF0ZV9mbGFncyhuZXdpZHgtPmF1eEluZGV4SWQsIElOREVYX0RS T1BfQ0xFQVJfUkVBRFkpOworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOworCX0KKwogCS8qCiAJICogUGhhc2UgMyBvZiBSRUlOREVYIENPTkNV UlJFTlRMWQogCSAqCkBAIC00MTcyLDEyICs0NDA3LDYgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJl aW4KIAkgKiB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBwcmV2aW91cyBwaGFzZS4gIFNlZSAicGhh c2UgMyIgaW4gRGVmaW5lSW5kZXgoKQogCSAqIGZvciBtb3JlIGRldGFpbHMuCiAJICovCi0KLQlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJ CQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIpOwotCVdhaXRGb3JMb2NrZXJz TXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9jaywgdHJ1ZSk7Ci0JQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7Ci0KIAlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRl eEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CkBAIC00MjE1LDcgKzQ0NDQsNyBAQCBSZWluZGV4 UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlv bk9pZCwgY29uc3QgUmVpbgogCQlwcm9ncmVzc192YWxzWzNdID0gbmV3aWR4LT5hbUlkOwogCQlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDQsIHByb2dyZXNzX2luZGV4LCBwcm9n cmVzc192YWxzKTsKIAotCQl2YWxpZGF0ZV9pbmRleChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+ aW5kZXhJZCwgc25hcHNob3QpOworCQl2YWxpZGF0ZV9pbmRleChuZXdpZHgtPnRhYmxlSWQsIG5l d2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRleElkLCBzbmFwc2hvdCk7CiAKIAkJLyoKIAkJ ICogV2UgY2FuIG5vdyBkbyBhd2F5IHdpdGggb3VyIGFjdGl2ZSBzbmFwc2hvdCwgd2Ugc3RpbGwg bmVlZCB0byBzYXZlCkBAIC00MjQ0LDcgKzQ0NzMsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJy ZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVp bgogCQkgKiB0aGVyZSdzIG5vIG5lZWQgdG8gc2V0IHRoZSBQUk9DX0lOX1NBRkVfSUMgZmxhZyBo ZXJlLgogCQkgKi8KIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0UsCi0JCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7 CisJCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNCk7CiAJCVdhaXRGb3JP bGRlclNuYXBzaG90cyhsaW1pdFhtaW4sIHRydWUpOwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOwpAQCAtNDMzNSwxNCArNDU2NCwxNCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50 bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgog CS8qCiAJICogUGhhc2UgNSBvZiBSRUlOREVYIENPTkNVUlJFTlRMWQogCSAqCi0JICogTWFyayB0 aGUgb2xkIGluZGV4ZXMgYXMgZGVhZC4gIEZpcnN0IHdlIG11c3Qgd2FpdCB1bnRpbCBubyBydW5u aW5nCi0JICogdHJhbnNhY3Rpb24gY291bGQgYmUgdXNpbmcgdGhlIGluZGV4IGZvciBhIHF1ZXJ5 LiAgU2VlIGFsc28KKwkgKiBNYXJrIHRoZSBvbGQgYW5kIGF1eGlsaWFyeSBpbmRleGVzIGFzIGRl YWQuIEZpcnN0IHdlIG11c3Qgd2FpdCB1bnRpbCBubworCSAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24g Y291bGQgYmUgdXNpbmcgdGhlIGluZGV4IGZvciBhIHF1ZXJ5LiAgU2VlIGFsc28KIAkgKiBpbmRl eF9kcm9wKCkgZm9yIG1vcmUgZGV0YWlscy4KIAkgKi8KIAogCUlOSkVDVElPTl9QT0lOVCgicmVp bmRleC1yZWxhdGlvbi1jb25jdXJyZW50bHktYmVmb3JlLXNldC1kZWFkIiwgTlVMTCk7CiAJcGdz dGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJ CQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF80KTsKKwkJCQkJCQkJIFBST0dSRVNT X0NSRUFURUlEWF9QSEFTRV9XQUlUXzUpOwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1Rh Z3MsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUpOwogCiAJZm9yZWFjaChsYywgaW5kZXhJZHMp CkBAIC00MzY3LDYgKzQ1OTYsMjggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJUG9wQWN0 aXZlU25hcHNob3QoKTsKIAl9CiAKKwlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJl aW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CisKKwkJLyoKKwkJICogQ2hlY2sg Zm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAgVGhpcyBpcyBpbnNpZGUgYSB0cmFuc2FjdGlvbiBz byBhcworCQkgKiB4YWN0LmMgZG9lcyBub3QgaXNzdWUgYSB1c2VsZXNzIFdBUk5JTkcsIGFuZCBl bnN1cmVzIHRoYXQKKwkJICogc2Vzc2lvbi1sZXZlbCBsb2NrcyBhcmUgY2xlYW5lZCB1cCBvbiBh Ym9ydC4KKwkJICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyoKKwkJICogVXBk YXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVuc3Vy ZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJCSAqLworCQlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCQlpbmRleF9jb25jdXJyZW50bHlf c2V0X2RlYWQobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCisJCVBvcEFj dGl2ZVNuYXBzaG90KCk7CisJfQorCiAJLyogQ29tbWl0IHRoaXMgdHJhbnNhY3Rpb24gdG8gbWFr ZSB0aGUgdXBkYXRlcyB2aXNpYmxlLiAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwog CVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00MzgwLDExICs0NjMxLDExIEBAIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0 aW9uT2lkLCBjb25zdCBSZWluCiAJLyoKIAkgKiBQaGFzZSA2IG9mIFJFSU5ERVggQ09OQ1VSUkVO VExZCiAJICoKLQkgKiBEcm9wIHRoZSBvbGQgaW5kZXhlcy4KKwkgKiBEcm9wIHRoZSBvbGQgYW5k IGF1eGlsaWFyeSBpbmRleGVzLgogCSAqLwogCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhf UEhBU0VfV0FJVF81KTsKKwkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzYp OwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ss IHRydWUpOwogCiAJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7 CkBAIC00NDA0LDYgKzQ2NTUsMTggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCWFkZF9l eGFjdF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKIAkJfQogCisJCWZvcmVhY2go bGMsIG5ld0luZGV4SWRzKQorCQl7CisJCQlSZWluZGV4SW5kZXhJbmZvICppZHggPSBsZmlyc3Qo bGMpOworCQkJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CisKKwkJCW9iamVjdC5jbGFzc0lkID0gUmVs YXRpb25SZWxhdGlvbklkOworCQkJb2JqZWN0Lm9iamVjdElkID0gaWR4LT5hdXhJbmRleElkOwor CQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKworCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNz KCZvYmplY3QsIG9iamVjdHMpOworCQl9CisKIAkJLyoKIAkJICogVXNlIFBFUkZPUk1fREVMRVRJ T05fQ09OQ1VSUkVOVF9MT0NLIHNvIHRoYXQgaW5kZXhfZHJvcCgpIHVzZXMgdGhlCiAJCSAqIHJp Z2h0IGxvY2sgbGV2ZWwuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IDUzNTlkYWIxMTc2Li44NGY3 Y2Y5ODI0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgzNCw3ICs4MzQsNyBAQCBJbmRleElu Zm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFt b2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAqcHJlZGljYXRlcywgYm9vbCB1bmlx dWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBib29sIGlzcmVhZHksIGJvb2wgY29u Y3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9vbCB3aXRob3V0b3ZlcmxhcHMpCisJ CQkgIGJvb2wgd2l0aG91dG92ZXJsYXBzLCBib29sIGF1eGlsaWFyeSkKIHsKIAlJbmRleEluZm8g ICpuID0gbWFrZU5vZGUoSW5kZXhJbmZvKTsKIApAQCAtODUwLDYgKzg1MCw3IEBAIG1ha2VJbmRl eEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhw cmVzc2lvbnMsCiAJbi0+aWlfQ29uY3VycmVudCA9IGNvbmN1cnJlbnQ7CiAJbi0+aWlfU3VtbWFy aXppbmcgPSBzdW1tYXJpemluZzsKIAluLT5paV9XaXRob3V0T3ZlcmxhcHMgPSB3aXRob3V0b3Zl cmxhcHM7CisJbi0+aWlfQXV4aWxpYXJ5ID0gYXV4aWxpYXJ5OwogCiAJLyogc3VtbWFyaXppbmcg aW5kZXhlcyBjYW5ub3QgY29udGFpbiBub24ta2V5IGF0dHJpYnV0ZXMgKi8KIAlBc3NlcnQoIXN1 bW1hcml6aW5nIHx8IChudW1rZXlhdHRycyA9PSBudW1hdHRycykpOwpAQCAtODc1LDcgKzg3Niw2 IEBAIG1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9p ZCwgTGlzdCAqZXhwcmVzc2lvbnMsCiAJLyogaW5pdGlhbGl6ZSBpbmRleC1idWlsZCBzdGF0ZSB0 byBkZWZhdWx0ICovCiAJbi0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKIAluLT5paV9QYXJh bGxlbFdvcmtlcnMgPSAwOwotCW4tPmlpX0F1eGlsaWFyeSA9IGZhbHNlOwogCiAJLyogc2V0IHVw IGZvciBwb3NzaWJsZSB1c2UgYnkgaW5kZXggQU0gKi8KIAluLT5paV9BbSA9IGFtb2lkOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCA3YThhNWQwNzY0Yy4u NGY4NzYxZGU2YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CkBAIC02MzIsNiArNjMyLDE1IEBACiAgIGJvb3RfdmFsID0+ICdERUZBVUxUX0FTU0VSVF9FTkFC TEVEJywKIH0sCiAKK3sgbmFtZSA9PiAnZGVidWdfY2ljX3ZhbGlkYXRlX3N0b3JlX21lbV9wY3Qn LCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdERVZF TE9QRVJfT1BUSU9OUycsCisgIHNob3J0X2Rlc2MgPT4gJ1BlcmNlbnRhZ2Ugb2YgbWFpbnRlbmFu Y2Vfd29ya19tZW0gdXNlZCBmb3IgQ0lDIHZhbGlkYXRpb24gdHVwbGVzdG9yZS4nLAorICBmbGFn cyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJpYWJsZSA9PiAnZGVidWdfY2ljX3ZhbGlk YXRlX3N0b3JlX21lbV9wY3QnLAorICBib290X3ZhbCA9PiAnMTAnLAorICBtaW4gPT4gJzEnLAor ICBtYXggPT4gJzkwJywKK30sCisKIHsgbmFtZSA9PiAnZGVidWdfY29weV9wYXJzZV9wbGFuX3Ry ZWVzJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19TVVNFVCcsIGdyb3VwID0+ICdE RVZFTE9QRVJfT1BUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldCB0aGlzIHRvIGZvcmNlIGFs bCBwYXJzZSBhbmQgcGxhbiB0cmVlcyB0byBiZSBwYXNzZWQgdGhyb3VnaCBjb3B5T2JqZWN0KCks IHRvIGZhY2lsaXRhdGUgY2F0Y2hpbmcgZXJyb3JzIGFuZCBvbWlzc2lvbnMgaW4gY29weU9iamVj dCgpLicsCiAgIGZsYWdzID0+ICdHVUNfTk9UX0lOX1NBTVBMRScsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApp bmRleCA0NjQ3Nzg1ZmQzNS4uZmFmY2E5MzBhYWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzM4 LDcgKzczOCw4IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJUmVs YXRpb24gaW5kZXhfcmVsLAogCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJ CQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0 YXRlKTsKKwkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCVZh bGlkYXRlSW5kZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC0xODkyLDE5ICsxODkzLDI0IEBAIHRhYmxlX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRp b24gdGFibGVfcmVsLAogICogdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbiAtIHNlY29uZCB0YWJs ZSBzY2FuIGZvciBjb25jdXJyZW50IGluZGV4IGJ1aWxkCiAgKgogICogU2VlIHZhbGlkYXRlX2lu ZGV4KCkgZm9yIGFuIGV4cGxhbmF0aW9uLgorICoKKyAqIE5vdGU6IGl0IGlzIHJlc3BvbnNpYmls aXR5IG9mIHRoYXQgZnVuY3Rpb24gdG8gY2xvc2Ugc29ydHN0YXRlcyBpbgorICogYm90aCBgc3Rh dGVgIGFuZCBgYXV4c3RhdGVgLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHRhYmxlX2luZGV4 X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRl eF9yZWwsCiAJCQkJCQkgIEluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCSAgU25hcHNob3Qg c25hcHNob3QsCi0JCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkgIFZh bGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4 c3RhdGUpCiB7CiAJdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRh YmxlX3JlbCwKIAkJCQkJCQkJCQkJICAgaW5kZXhfcmVsLAogCQkJCQkJCQkJCQkgICBpbmRleF9p bmZvLAogCQkJCQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUpOworCQkJ CQkJCQkJCQkgICBzdGF0ZSwKKwkJCQkJCQkJCQkJICAgYXV4c3RhdGUpOwogfQogCiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv aW5kZXguaAppbmRleCA5YWVlODIyNjM0Ny4uMzIzOWU1YzcxNmYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgK QEAgLTMxLDYgKzMxLDcgQEAgdHlwZWRlZiBlbnVtCiB7CiAJSU5ERVhfQ1JFQVRFX1NFVF9SRUFE WSwKIAlJTkRFWF9DUkVBVEVfU0VUX1ZBTElELAorCUlOREVYX0RST1BfQ0xFQVJfUkVBRFksCiAJ SU5ERVhfRFJPUF9DTEVBUl9WQUxJRCwKIAlJTkRFWF9EUk9QX1NFVF9ERUFELAogfSBJbmRleFN0 YXRlRmxhZ3NBY3Rpb247CkBAIC03Miw2ICs3Myw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2NoZWNr X3ByaW1hcnlfa2V5KFJlbGF0aW9uIGhlYXBSZWwsCiAjZGVmaW5lCUlOREVYX0NSRUFURV9QQVJU SVRJT05FRAkJCSgxIDw8IDUpCiAjZGVmaW5lIElOREVYX0NSRUFURV9JTlZBTElECQkJCSgxIDw8 IDYpCiAjZGVmaW5lIElOREVYX0NSRUFURV9TVVBQUkVTU19QUk9HUkVTUwkJKDEgPDwgNykKKyNk ZWZpbmUgSU5ERVhfQ1JFQVRFX0FVWElMSUFSWQkJCQkoMSA8PCA4KQogCiBleHRlcm4gT2lkCWlu ZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgY29uc3QgY2hhciAqaW5k ZXhSZWxhdGlvbk5hbWUsCkBAIC0xMDYsNiArMTA4LDExIEBAIGV4dGVybiBPaWQJaW5kZXhfY3Jl YXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCB1aW50MTYgZmxhZ3MsCiAJCQkJCQkJICBP aWQgb2xkSW5kZXhJZCwgT2lkIHRhYmxlc3BhY2VPaWQsCiAJCQkJCQkJICBjb25zdCBjaGFyICpu ZXdOYW1lKTsKIAorZXh0ZXJuIE9pZAlpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxh dGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJICBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJ CQkJICBPaWQgdGFibGVzcGFjZU9pZCwKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm5ld05hbWUp OworCiBleHRlcm4gdm9pZCBpbmRleF9jb25jdXJyZW50bHlfYnVpbGQoT2lkIGhlYXBSZWxhdGlv bklkLAogCQkJCQkJCQkJIE9pZCBpbmRleFJlbGF0aW9uSWQpOwogCkBAIC0xNTIsNyArMTU5LDcg QEAgZXh0ZXJuIHZvaWQgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJ Ym9vbCBwYXJhbGxlbCwKIAkJCQkJCWJvb2wgcHJvZ3Jlc3MpOwogCi1leHRlcm4gdm9pZCB2YWxp ZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpOwor ZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBh dXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7CiAKIGV4dGVybiB2b2lkIGluZGV4X3NldF9z dGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZsYWdzQWN0aW9uIGFjdGlvbik7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9wcm9ncmVzcy5oCmluZGV4IDY3OTQ4NjY3YTk3Li4zNTk5MDY5M2YzOSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9wcm9ncmVzcy5oCkBAIC0xMTcsMTQgKzExNywxNSBAQAogCiAvKiBQaGFzZXMg b2YgQ1JFQVRFIElOREVYIChhcyBhZHZlcnRpc2VkIHZpYSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0UpICovCiAjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzEJCQkxCi0jZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9CVUlMRAkJCTIKLSNkZWZpbmUgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfMgkJCTMKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFX1ZBTElEQVRFX0lEWFNDQU4JNAotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf VkFMSURBVEVfU09SVAkJNQotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURB VEVfVEFCTEVTQ0FOCTYKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMwkJ CTcKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMgkJCTIKKyNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX0JVSUxECQkJMworI2RlZmluZSBQUk9HUkVTU19DUkVB VEVJRFhfUEhBU0VfV0FJVF8zCQkJNAorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf VkFMSURBVEVfSURYU0NBTgk1CisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJ REFURV9TT1JUCQk2CisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9J RFhNRVJHRQk3CiAjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzQJCQk4CiAj ZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzUJCQk5CisjZGVmaW5lIFBST0dS RVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzYJCQkxMAogCiAvKgogICogU3VicGhhc2VzIG9mIENS RUFURSBJTkRFWCwgZm9yIGluZGV4X2J1aWxkLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA3Mjc3YzM3ZTc3OS4uN2Vh NjQzYjdmODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9p bmNsdWRlL21pc2NhZG1pbi5oCkBAIC0yNjgsNiArMjY4LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgYWxsb3dTeXN0ZW1UYWJsZU1vZHM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IHdvcmtf bWVtOwogZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBoYXNoX21lbV9tdWx0aXBsaWVyOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBtYWludGVuYW5jZV93b3JrX21lbTsKK2V4dGVybiBQR0RMTElN UE9SVCBpbnQgZGVidWdfY2ljX3ZhbGlkYXRlX3N0b3JlX21lbV9wY3Q7CiBleHRlcm4gUEdETExJ TVBPUlQgaW50IG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzOwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9t YWtlZnVuY3MuaAppbmRleCBiZjU0ZDM5ZmViMC4uY2Q3ZjFlYjA1OTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2Vm dW5jcy5oCkBAIC05OSw3ICs5OSw4IEBAIGV4dGVybiBJbmRleEluZm8gKm1ha2VJbmRleEluZm8o aW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwKIAkJCQkJCQkJTGlzdCAq ZXhwcmVzc2lvbnMsIExpc3QgKnByZWRpY2F0ZXMsCiAJCQkJCQkJCWJvb2wgdW5pcXVlLCBib29s IG51bGxzX25vdF9kaXN0aW5jdCwKIAkJCQkJCQkJYm9vbCBpc3JlYWR5LCBib29sIGNvbmN1cnJl bnQsCi0JCQkJCQkJCWJvb2wgc3VtbWFyaXppbmcsIGJvb2wgd2l0aG91dG92ZXJsYXBzKTsKKwkJ CQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRob3V0b3ZlcmxhcHMsCisJCQkJCQkJCWJv b2wgYXV4aWxpYXJ5KTsKIAogZXh0ZXJuIE5vZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIs IGludCBsb2NhdGlvbik7CiBleHRlcm4gRGVmRWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwg Tm9kZSAqYXJnLCBpbnQgbG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfaW5kZXgub3V0CmluZGV4IDU1NTM4YzRjNDFlLi5kMTcyM2Y0N2U4OSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMTQzNyw2ICsxNDM3LDcgQEAg REVUQUlMOiAgS2V5IChmMSk9KGIpIGFscmVhZHkgZXhpc3RzLgogQ1JFQVRFIFVOSVFVRSBJTkRF WCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4MyBPTiBjb25jdXJfaGVhcChmMik7CiBFUlJPUjog IGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJjb25jdXJfaW5kZXgzIgogREVUQUlMOiAg S2V5IChmMik9KGIpIGlzIGR1cGxpY2F0ZWQuCitEUk9QIElOREVYIGNvbmN1cl9pbmRleDNfY2Nh dXg7CiAtLSB0ZXN0IHRoYXQgZXhwcmVzc2lvbiBpbmRleGVzIGFuZCBwYXJ0aWFsIGluZGV4ZXMg d29yayBjb25jdXJyZW50bHkKIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4 NCBvbiBjb25jdXJfaGVhcChmMikgV0hFUkUgZjE9J2EnOwogQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBjb25jdXJfaW5kZXg1IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0neCc7CkBAIC0z MjExLDYgKzMyMTIsNyBAQCBJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWI0IFZBTFVFUyAo MSksICgxKSwgKDIpOwogQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX3Jl aW5kZXhfaW5kNSBPTiBjb25jdXJfcmVpbmRleF90YWI0IChjMSk7CiBFUlJPUjogIGNvdWxkIG5v dCBjcmVhdGUgdW5pcXVlIGluZGV4ICJjb25jdXJfcmVpbmRleF9pbmQ1IgogREVUQUlMOiAgS2V5 IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVf Y2NhdXg7CiAtLSBSZWluZGV4aW5nIGNvbmN1cnJlbnRseSB0aGlzIGluZGV4IGZhaWxzIHdpdGgg dGhlIHNhbWUgZmFpbHVyZS4KIC0tIFRoZSBleHRyYSBpbmRleCBjcmVhdGVkIGlzIGl0c2VsZiBp bnZhbGlkLCBhbmQgY2FuIGJlIGRyb3BwZWQuCiBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBj b25jdXJfcmVpbmRleF9pbmQ1OwpAQCAtMzIyMyw4ICszMjI1LDEwIEBAIERFVEFJTDogIEtleSAo YzEpPSgxKSBpcyBkdXBsaWNhdGVkLgogIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAg ICAgICAgICB8IAogSW5kZXhlczoKICAgICAiY29uY3VyX3JlaW5kZXhfaW5kNSIgVU5JUVVFLCBi dHJlZSAoYzEpIElOVkFMSUQKKyAgICAiY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eCIgc3RpciAo YzEpIElOVkFMSUQKICAgICAiY29uY3VyX3JlaW5kZXhfaW5kNV9jY25ldyIgVU5JUVVFLCBidHJl ZSAoYzEpIElOVkFMSUQKIAorRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4Owog RFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3OwogLS0gVGhpcyBtYWtlcyB0aGUg cHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4K IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwpAQCAtMzI1Miw2 ICszMjU2LDQ0IEBAIEluZGV4ZXM6CiAgICAgImNvbmN1cl9yZWluZGV4X2luZDUiIFVOSVFVRSwg YnRyZWUgKGMxKQogCiBEUk9QIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjQ7CistLSBDaGVjayBo YW5kbGluZyBvZiBhdXhpbGlhcnkgaW5kZXhlcworQ1JFQVRFIFRBQkxFIGF1eF9pbmRleF90YWI1 IChjMSBpbnQpOworSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpLCAo Mik7CistLSBUaGlzIHRyaWNrIGNyZWF0ZXMgYW4gaW52YWxpZCBpbmRleCBhbmQgYXV4aWxpYXJ5 IGluZGV4IGZvciBpdAorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4 X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1 bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1 cGxpY2F0ZWQuCitcZCBhdXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1 eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8 IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4 ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAorICAg ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIgc3RpciAoYzEpIElOVkFMSUQKKworLS0gTm90IGFsbG93 ZWQgdG8gcmVpbmRleCBhdXhpbGlhcnkgaW5kZXgKK1JFSU5ERVggSU5ERVggYXV4X2luZGV4X2lu ZDZfY2NhdXg7CitFUlJPUjogIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhf aW5kNl9jY2F1eCIgbm90IHN1cHBvcnRlZAorLS0gQ29uY3VycmVudGx5IGFsc28KK1JFSU5ERVgg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OworRVJST1I6ICByZWluZGV4 IG9mIGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQK Ky0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4 IGNhbiBiZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJF IGMxID0gMTsKK0VSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRvZXMgbm90 IGV4aXN0CitMSU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEg PSAxOworICAgICAgICAgICAgICAgICAgICBeCistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcg cmVpbmRleAorUkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKK0VSUk9SOiAgY291bGQgbm90 IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAgS2V5IChjMSk9 KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgY29uY3VycmVu dCByZWluZGV4CitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfdGFiNTsKK1dB Uk5JTkc6ICBza2lwcGluZyByZWluZGV4IG9mIGludmFsaWQgaW5kZXggInB1YmxpYy5hdXhfaW5k ZXhfaW5kNiIKK0hJTlQ6ICBVc2UgRFJPUCBJTkRFWCBvciBSRUlOREVYIElOREVYLgorV0FSTklO RzogIHNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJwdWJsaWMuYXV4X2luZGV4 X2luZDZfY2NhdXgiCitOT1RJQ0U6ICB0YWJsZSAiYXV4X2luZGV4X3RhYjUiIGhhcyBubyBpbmRl eGVzIHRoYXQgY2FuIGJlIHJlaW5kZXhlZCBjb25jdXJyZW50bHkKK0RST1AgVEFCTEUgYXV4X2lu ZGV4X3RhYjU7CiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMg YW5kIHByZWRpY2F0ZXMuICBUaGUKIC0tIGRlZmluaXRpb25zIG9mIHRoZSByZWJ1aWx0IGluZGV4 ZXMgc2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbAogLS0gZGVmaW5pdGlvbnMuCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0CmluZGV4IGY1MDg2OGNhNmE2Li5iMzQwMDlmODY4YyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKQEAgLTE1ODUsMTAgKzE1ODUs MTEgQEAgc2VsZWN0IGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBwYXJ0ZWRfaXN2YWxpZF9pZHgg ICAgICAgICAgICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiICAgIHwgCiAgcGFy dGVkX2lzdmFsaWRfaWR4XzExICAgICAgICAgIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlk X3RhYl8xMSB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xX2V4cHJfaWR4CisgcGFydGVkX2lzdmFsaWRf aWR4XzExX2NjYXV4ICAgIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xMSB8IAog IHBhcnRlZF9pc3ZhbGlkX3RhYl8xMl9leHByX2lkeCB8IHQgICAgICAgICAgfCBwYXJ0ZWRfaXN2 YWxpZF90YWJfMTIgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMV9leHByX2lkeAogIHBhcnRlZF9pc3Zh bGlkX3RhYl8xX2V4cHJfaWR4ICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMSAg fCBwYXJ0ZWRfaXN2YWxpZF9pZHgKICBwYXJ0ZWRfaXN2YWxpZF90YWJfMl9leHByX2lkeCAgfCB0 ICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiXzIgIHwgcGFydGVkX2lzdmFsaWRfaWR4Ci0o NSByb3dzKQorKDYgcm93cykKIAogZHJvcCB0YWJsZSBwYXJ0ZWRfaXN2YWxpZF90YWI7CiAtLSBD aGVjayBzdGF0ZSBvZiByZXBsaWNhIGluZGV4ZXMgd2hlbiBhdHRhY2hpbmcgYSBwYXJ0aXRpb24u CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDgxYTczYzQyNmQyLi5lYTUyZjA3 MjVjMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTIwNjQsMTQgKzIwNjQs MTUgQEAgcGdfc3RhdF9wcm9ncmVzc19jcmVhdGVfaW5kZXh8IFNFTEVDVCBzLnBpZCwKICAgICAg ICAgQ0FTRSBzLnBhcmFtMTAKICAgICAgICAgICAgIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcn Ojp0ZXh0CiAgICAgICAgICAgICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZv cmUgYnVpbGQnOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDIgVEhFTiAoJ2J1aWxkaW5nIGluZGV4 Jzo6dGV4dCB8fCBDT0FMRVNDRSgoJzogJzo6dGV4dCB8fCBwZ19pbmRleGFtX3Byb2dyZXNzX3Bo YXNlbmFtZSgocy5wYXJhbTkpOjpvaWQsIHMucGFyYW0xMSkpLCAnJzo6dGV4dCkpCi0gICAgICAg ICAgICBXSEVOIDMgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgdmFsaWRhdGlvbic6 OnRleHQKLSAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxpZGF0aW9uOiBzY2Fubmlu ZyBpbmRleCc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gNSBUSEVOICdpbmRleCB2YWxpZGF0aW9u OiBzb3J0aW5nIHR1cGxlcyc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRleCB2 YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZSc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gNyBUSEVO ICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA4IFRI RU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1hcmtpbmcgZGVhZCc6OnRleHQKLSAgICAg ICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBkcm9wcGluZyc6 OnRleHQKKyAgICAgICAgICAgIFdIRU4gMiBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIHRvIHVz ZSBhdXhpbGlhcnkgaW5kZXgnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDMgVEhFTiAoJ2J1aWxk aW5nIGluZGV4Jzo6dGV4dCB8fCBDT0FMRVNDRSgoJzogJzo6dGV4dCB8fCBwZ19pbmRleGFtX3By b2dyZXNzX3BoYXNlbmFtZSgocy5wYXJhbTkpOjpvaWQsIHMucGFyYW0xMSkpLCAnJzo6dGV4dCkp CisgICAgICAgICAgICBXSEVOIDQgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgdmFs aWRhdGlvbic6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNSBUSEVOICdpbmRleCB2YWxpZGF0aW9u OiBzY2FubmluZyBpbmRleCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRleCB2 YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNyBUSEVO ICdpbmRleCB2YWxpZGF0aW9uOiBtZXJnaW5nIGluZGV4ZXMnOjp0ZXh0CisgICAgICAgICAgICBX SEVOIDggVEhFTiAnd2FpdGluZyBmb3Igb2xkIHNuYXBzaG90cyc6OnRleHQKKyAgICAgICAgICAg IFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJraW5nIGRlYWQnOjp0 ZXh0CisgICAgICAgICAgICBXSEVOIDEwIFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3Jl IGRyb3BwaW5nJzo6dGV4dAogICAgICAgICAgICAgRUxTRSBOVUxMOjp0ZXh0CiAgICAgICAgIEVO RCBBUyBwaGFzZSwKICAgICBzLnBhcmFtNCBBUyBsb2NrZXJzX3RvdGFsLApkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggODJlNDA2MmEyMTUuLmMyYzFiMDMxNTI3IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTUwMyw2ICs1MDMsNyBAQCBDUkVB VEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBJRiBOT1QgRVhJU1RTIGNvbmN1cl9pbmRleDIg T04gY29uY3VyX2hlYXAoZjEpOwogSU5TRVJUIElOVE8gY29uY3VyX2hlYXAgVkFMVUVTICgnYics J3gnKTsKIC0tIGNoZWNrIGlmIGNvbnN0cmFpbnQgaXMgZW5mb3JjZWQgcHJvcGVybHkgYXQgYnVp bGQgdGltZQogQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4MyBP TiBjb25jdXJfaGVhcChmMik7CitEUk9QIElOREVYIGNvbmN1cl9pbmRleDNfY2NhdXg7CiAtLSB0 ZXN0IHRoYXQgZXhwcmVzc2lvbiBpbmRleGVzIGFuZCBwYXJ0aWFsIGluZGV4ZXMgd29yayBjb25j dXJyZW50bHkKIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4NCBvbiBjb25j dXJfaGVhcChmMikgV0hFUkUgZjE9J2EnOwogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25j dXJfaW5kZXg1IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0neCc7CkBAIC0xMzE1LDEwICsx MzE2LDEyIEBAIENSRUFURSBUQUJMRSBjb25jdXJfcmVpbmRleF90YWI0IChjMSBpbnQpOwogSU5T RVJUIElOVE8gY29uY3VyX3JlaW5kZXhfdGFiNCBWQUxVRVMgKDEpLCAoMSksICgyKTsKIC0tIFRo aXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZhbGlkIGluZGV4LgogQ1JFQVRFIFVOSVFVRSBJTkRFWCBD T05DVVJSRU5UTFkgY29uY3VyX3JlaW5kZXhfaW5kNSBPTiBjb25jdXJfcmVpbmRleF90YWI0IChj MSk7CitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiAtLSBSZWluZGV4aW5n IGNvbmN1cnJlbnRseSB0aGlzIGluZGV4IGZhaWxzIHdpdGggdGhlIHNhbWUgZmFpbHVyZS4KIC0t IFRoZSBleHRyYSBpbmRleCBjcmVhdGVkIGlzIGl0c2VsZiBpbnZhbGlkLCBhbmQgY2FuIGJlIGRy b3BwZWQuCiBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1Owog XGQgY29uY3VyX3JlaW5kZXhfdGFiNAorRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2Nj YXV4OwogRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3OwogLS0gVGhpcyBtYWtl cyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2 YWxpZC4KIERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwpAQCAt MTMzMCw2ICsxMzMzLDI0IEBAIFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWlu ZGV4X2luZDU7CiBcZCBjb25jdXJfcmVpbmRleF90YWI0CiBEUk9QIFRBQkxFIGNvbmN1cl9yZWlu ZGV4X3RhYjQ7CiAKKy0tIENoZWNrIGhhbmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVzCitDUkVB VEUgVEFCTEUgYXV4X2luZGV4X3RhYjUgKGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhf dGFiNSBWQUxVRVMgKDEpLCAoMSksICgyKTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZh bGlkIGluZGV4IGFuZCBhdXhpbGlhcnkgaW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworXGQg YXV4X2luZGV4X3RhYjUKKy0tIE5vdCBhbGxvd2VkIHRvIHJlaW5kZXggYXV4aWxpYXJ5IGluZGV4 CitSRUlOREVYIElOREVYIGF1eF9pbmRleF9pbmQ2X2NjYXV4OworLS0gQ29uY3VycmVudGx5IGFs c28KK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OworLS0g VGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2Fu IGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEg PSAxOworLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXgKK1JFSU5ERVggVEFCTEUg YXV4X2luZGV4X3RhYjU7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgY29uY3VycmVudCBy ZWluZGV4CitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfdGFiNTsKK0RST1Ag VEFCTEUgYXV4X2luZGV4X3RhYjU7CisKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0 aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhl IHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9u cy4KLS0gCjIuNDMuMAoK --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v34-0005-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtk24 RnJvbSBhZWNkMDJmYjJkNzM3ODc3MDY2ODdhZGQyMDAwNjlmNTcyMTZkMWQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDUvN10gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDc4ICsrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYyAgICAgICAgICAgIHwgIDYyICsrKysrKysrKysrKwog c3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICB8ICAzNyArKysrKysrLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgIHwgIDUyICsrKysrKysrKy0K IHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9u b2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8IDEwNSArKysrKysrKysrKysrKysrKysrLS0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA1NyArKysrKysrKysr LQogMTQgZmlsZXMgY2hhbmdlZCwgMzgwIGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCmluZGV4IDEyYzg4NTg3YTc5Li40MDZjMDJlODY2 ZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCkBAIC02NjgsMTAgKzY2OCwxNiBAQCBJ bmRleGVzOgogICAgICJpZHhfY2NhdXgiIHN0aXIgKGNvbCkgSU5WQUxJRAogPC9wcm9ncmFtbGlz dGluZz4KIAotICAgIFRoZSByZWNvbW1lbmRlZCByZWNvdmVyeQotICAgIG1ldGhvZCBpbiBzdWNo IGNhc2VzIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0K LSAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3Ro ZXIgcG9zc2liaWxpdHkgaXMKLSAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5k PlJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPikuCisgICAgVGhlIHJlY29tbWVu ZGVkIHJlY292ZXJ5IG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3AgdGhlIGluZGV4IHdp dGgKKyAgICA8Y29tbWFuZD5EUk9QIElOREVYPC9jb21tYW5kPi4gVGhlIGF1eGlsaWFyeSBpbmRl eCAoc3VmZml4ZWQgd2l0aAorICAgIDxsaXRlcmFsPl9jY2F1eDwvbGl0ZXJhbD4pIHdpbGwgYmUg YXV0b21hdGljYWxseSBkcm9wcGVkIHdoZW4gdGhlIG1haW4KKyAgICBpbmRleCBpcyBkcm9wcGVk LiBBZnRlciBkcm9wcGluZyB0aGUgaW5kZXhlcywgeW91IGNhbiB0cnkgYWdhaW4gdG8gcGVyZm9y bQorICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5v dGhlciBwb3NzaWJpbGl0eSBpcyB0bworICAgIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1h bmQ+UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LAorICAgIHdoaWNoIHdpbGwg YWxzbyBoYW5kbGUgY2xlYW51cCBvZiBhbnkgaW52YWxpZCBhdXhpbGlhcnkgaW5kZXhlcy4pCisg ICAgSWYgdGhlIG9ubHkgaW52YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+X2Nj YXV4PC9saXRlcmFsPiwKKyAgICB0aGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1 c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4KKyAgICBmb3IgdGhhdCBpbmRleC4KICAg IDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5k ZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCmluZGV4IDllMDI0ODI2MWFl Li5hYzljZmVjNWM1NSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTQ3NiwxMSArNDc2LDE1IEBA IEluZGV4ZXM6CiAgICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2Nh dXg8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4 aWxpYXJ5CiAgICAgaW5kZXggY3JlYXRlZCBkdXJpbmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9u LCBhbmQgdGhlIHJlY29tbWVuZGVkCiAgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhl c2UgaW5kZXhlcyB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKLSAgICB0aGVu IGF0dGVtcHQgPGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgor ICAgIHRoZW4gYXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4g YWdhaW4uIFRoZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAoc3VmZml4ZWQgd2l0aCA8bGl0ZXJhbD5f Y2NhdXg8L2xpdGVyYWw+KSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZAorICAgIGFsb25n IHdpdGggaXRzIG1haW4gaW5kZXguCiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVh ZCBzdWZmaXhlZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRz IHRvIHRoZSBvcmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKICAgICB0 aGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGp1c3QgZHJvcCBzYWlkIGluZGV4 LCBzaW5jZSB0aGUKLSAgICByZWJ1aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLgorICAg IHJlYnVpbGQgcHJvcGVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuIElmIHRoZSBvbmx5CisgICAgaW52 YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+X2NjYXV4PC9saXRlcmFsPiwgdGhl IHJlY29tbWVuZGVkCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJ TkRFWDwvbGl0ZXJhbD4gZm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkg YmUgYXBwZW5kZWQgdG8gdGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVz IHRvIGtlZXAgdGhlbSB1bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAg ICAgPGxpdGVyYWw+X2Njb2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5 LmMKaW5kZXggZmRiOGU2N2UxZjUuLmM2OTQxZmIxOWQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2RlcGVuZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVu Y3kuYwpAQCAtMjkyLDcgKzI5Miw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRy ZXNzICpvYmplY3QsCiAJICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2Jq ZWN0LiAgKElkZWFsbHkgdGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0 IG1hbnkgcGxhY2VzIGFyZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlv bkxvY2sob2JqZWN0LCAwKTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwog CiAJLyoKIAkgKiBDb25zdHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhl IGdpdmVuIG9iamVjdCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggYjE0MTdlYzA1YzYuLjkxMzZk ZmM3YzczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC03ODAsNiArNzgwLDggQEAgaW5kZXhfY3JlYXRl KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERf Q09OU1RSQUlOVCkgIT0gMCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBi ZSAiYnVpbHQiIGJ5IHRoZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFn cyAmIElOREVYX0NSRUFURV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJ ZCBhbmQgSU5ERVhfQ1JFQVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVy ICovCisJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElk KSA9PSBhdXhpbGlhcnkpOwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJU SVRJT05FRF9JTkRFWCA6IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5m by0+aWlfRXhjbHVzaW9uT3BzICE9IE5VTEwpOwpAQCAtMTE4NSw2ICsxMTg3LDE1IEBAIGluZGV4 X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15 c2VsZiwgJnJlZmVyZW5jZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkv KgorCQkgKiBSZWNvcmQgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1 eGlsaWFyeSBpbmRleC4KKwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4 aWxpYXJ5Rm9ySW5kZXhJZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwg UmVsYXRpb25SZWxhdGlvbklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOwor CQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FV VE8pOworCQl9CisKIAkJLyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8K IAkJYWRkcnMgPSBuZXdfb2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDE3LDcgKzE0MjgsOCBA QCBpbmRleF9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIHVpbnQxNiBmbGFncywK IAkJCQkJCQljb25jdXJyZW50bHksCS8qIGNvbmN1cnJlbnQgKi8KIAkJCQkJCQlpbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1zdW1tYXJpemluZywKIAkJCQkJCQlvbGRJbmZvLT5paV9XaXRob3V0 T3ZlcmxhcHMsCi0JCQkJCQkJZmFsc2UpOworCQkJCQkJCWZhbHNlLAorCQkJCQkJCUludmFsaWRP aWQpOwogCiAJLyogZmV0Y2ggZXhjbHVzaW9uIGNvbnN0cmFpbnQgaW5mbyBpZiBhbnkgKi8KIAlp ZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzZXhjbHVzaW9uKQpAQCAtMTYwMSw3ICsx NjEzLDggQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgoUmVsYXRpb24gaGVhcFJlbGF0 aW9uLCBPaWQgbWFpbkluZGV4SWQsCiAJCQkJCQkJdHJ1ZSwKIAkJCQkJCQlmYWxzZSwJLyogYXV4 IGFyZSBub3Qgc3VtbWFyaXppbmcgKi8KIAkJCQkJCQlmYWxzZSwJLyogYXV4IGFyZSBub3Qgd2l0 aG91dCBvdmVybGFwcyAqLwotCQkJCQkJCXRydWUJLyogYXV4aWxpYXJ5ICovKTsKKwkJCQkJCQl0 cnVlCS8qIGF1eGlsaWFyeSAqLywKKwkJCQkJCQltYWluSW5kZXhJZCAvKiBhdXhpbGlhcnlGb3JJ bmRleElkICovKTsKIAogCS8qCiAJICogRXh0cmFjdCB0aGUgbGlzdCBvZiBjb2x1bW4gbmFtZXMg YW5kIHRoZSBjb2x1bW4gbnVtYmVycyBmb3IgdGhlIG5ldwpAQCAtMjY0MCw3ICsyNjUzLDggQEAg QnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJCQkJCSAgIGZhbHNlLAogCQkJCQkgICBp bmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCiAJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRp c2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCi0JCQkJCSAgIGluZGV4LT5y ZF9yZWwtPnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAqLyk7CisJ CQkJCSAgIGluZGV4LT5yZF9yZWwtPnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBp ZmYgU1RJUiAqLywKKwkJCQkJICAgSW52YWxpZE9pZCAvKiBhdXhpbGlhcnlfZm9yX2luZGV4X2lk IGlzIHNldCBvbmx5IGR1cmluZyBidWlsZCAqLyk7CiAKIAkvKiBmaWxsIGluIGF0dHJpYnV0ZSBu dW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkrKykKQEAgLTI3MDEsNyArMjcx NSw4IEBAIEJ1aWxkRHVtbXlJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJCQkJCSAgIGZhbHNl LAogCQkJCQkgICBpbmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCiAJCQkJCSAgIGluZGV4 U3RydWN0LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCi0JCQkJ CSAgIGluZGV4LT5yZF9yZWwtPnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYg U1RJUiAqLyk7CisJCQkJCSAgIGluZGV4LT5yZF9yZWwtPnJlbGFtID09IFNUSVJfQU1fT0lEIC8q IGF1eGlsaWFyeSBpZmYgU1RJUiAqLywKKwkJCQkJICAgSW52YWxpZE9pZCk7CiAKIAkvKiBmaWxs IGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkrKykK QEAgLTM3ODMsOCArMzc5OCwxMSBAQCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQs IEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pCiAJCQlpbmRleEZvcm0tPmluZGlzdmFsaWQg PSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWToKLQkJCS8q IENsZWFyIGluZGlzcmVhZHkgZHVyaW5nIGEgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBzZXF1 ZW5jZSAqLwotCQkJQXNzZXJ0KGluZGV4Rm9ybS0+aW5kaXNyZWFkeSk7CisJCQkvKgorCQkJICog Q2xlYXIgaW5kaXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHNlcXVl bmNlLgorCQkJICogaW5kaXNyZWFkeSBtYXkgYWxyZWFkeSBiZSBmYWxzZSBpZiB0aGUgQ0lDIGZh aWxlZCBiZWZvcmUKKwkJCSAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZCBoYWQgYSBjaGFuY2Ug dG8gc2V0IGl0LgorCQkJICovCiAJCQlBc3NlcnQoIWluZGV4Rm9ybS0+aW5kaXN2YWxpZCk7CiAJ CQlpbmRleEZvcm0tPmluZGlzcmVhZHkgPSBmYWxzZTsKIAkJCWJyZWFrOwpAQCAtMzg2OSw2ICsz ODg3LDcgQEAgcmVpbmRleF9pbmRleChjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIGluZGV4 SWQsCiAJCQkJaGVhcFJlbGF0aW9uOwogCU9pZAkJCWhlYXBJZDsKIAlPaWQJCQlzYXZlX3VzZXJp ZDsKKwlPaWQJCQlqdW5rQXV4SW5kZXhJZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OwogCWlu dAkJCXNhdmVfbmVzdGxldmVsOwogCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKQEAgLTM5MjUsNiAr Mzk0NCwxOSBAQCByZWluZGV4X2luZGV4KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5k ZXhJZCwKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgyLCBwcm9ncmVzc19j b2xzLCBwcm9ncmVzc192YWxzKTsKIAl9CiAKKwkvKiBDaGVjayBmb3IgdGhlIGF1eGlsaWFyeSBp bmRleCBmb3IgdGhhdCBpbmRleCwgaXQgbmVlZHMgdG8gYmUgZHJvcHBlZCAqLworCWp1bmtBdXhJ bmRleElkID0gZ2V0X2F1eGlsaWFyeV9pbmRleChpbmRleElkKTsKKwlpZiAoT2lkSXNWYWxpZChq dW5rQXV4SW5kZXhJZCkpCisJeworCQlPYmplY3RBZGRyZXNzIG9iamVjdDsKKwkJb2JqZWN0LmNs YXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCW9iamVjdC5vYmplY3RJZCA9IGp1bmtBdXhJ bmRleElkOworCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCQlwZXJmb3JtRGVsZXRpb24oJm9i amVjdCwgRFJPUF9SRVNUUklDVCwKKwkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwg fAorCQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9RVUlFVExZKTsKKwl9CisKIAkvKgogCSAqIE9w ZW4gdGhlIHRhcmdldCBpbmRleCByZWxhdGlvbiBhbmQgZ2V0IGFuIGV4Y2x1c2l2ZSBsb2NrIG9u IGl0LCB0bwogCSAqIGVuc3VyZSB0aGF0IG5vIG9uZSBlbHNlIGlzIHRvdWNoaW5nIHRoaXMgcGFy dGljdWxhciBpbmRleC4KQEAgLTQyMTMsNyArNDI0NSw4IEBAIHJlaW5kZXhfcmVsYXRpb24oY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogewogCVJlbGF0aW9u CXJlbDsKIAlPaWQJCQl0b2FzdF9yZWxpZDsKLQlMaXN0CSAgICppbmRleElkczsKKwlMaXN0CSAg ICppbmRleElkcywKKwkJCSAgICphdXhJbmRleElkcyA9IE5JTDsKIAljaGFyCQlwZXJzaXN0ZW5j ZTsKIAlib29sCQlyZXN1bHQgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICppbmRleElkOwpAQCAtNDMw MiwxMyArNDMzNSwzMCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10 LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAllbHNlCiAJCXBlcnNpc3RlbmNlID0gcmVsLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlOwogCisJZm9yZWFjaChpbmRleElkLCBpbmRleElkcykKKwl7CisJ CU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElkKTsKKwkJT2lkCQkJaW5kZXhBbSA9 IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQpOworCisJCS8qIEFsbCBTVElSIGluZGV4ZXMgYXJlIGF1 eGlsaWFyeSBpbmRleGVzICovCisJCWlmIChpbmRleEFtID09IFNUSVJfQU1fT0lEKQorCQl7CisJ CQlpZiAoZmxhZ3MgJiBSRUlOREVYX1JFTF9TVVBQUkVTU19JTkRFWF9VU0UpCisJCQkJUmVtb3Zl UmVpbmRleFBlbmRpbmcoaW5kZXhPaWQpOworCQkJYXV4SW5kZXhJZHMgPSBsYXBwZW5kX29pZChh dXhJbmRleElkcywgaW5kZXhPaWQpOworCQl9CisJfQorCiAJLyogUmVpbmRleCBhbGwgdGhlIGlu ZGV4ZXMuICovCiAJaSA9IDE7CiAJZm9yZWFjaChpbmRleElkLCBpbmRleElkcykKIAl7CiAJCU9p ZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElkKTsKIAkJT2lkCQkJaW5kZXhOYW1lc3Bh Y2VJZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4T2lkKTsKLQkJT2lkCQkJaW5kZXhBbSA9IGdl dF9yZWxfcmVsYW0oaW5kZXhPaWQpOworCisJCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBnb2lu ZyB0byBiZSBkcm9wcGVkIGR1cmluZyBtYWluIGluZGV4IHJlYnVpbGQgKi8KKwkJaWYgKGxpc3Rf bWVtYmVyX29pZChhdXhJbmRleElkcywgaW5kZXhPaWQpKQorCQkJY29udGludWU7CiAKIAkJLyoK IAkJICogU2tpcCBhbnkgaW52YWxpZCBpbmRleGVzIG9uIGEgVE9BU1QgdGFibGUuICBUaGVzZSBj YW4gb25seSBiZQpAQCAtNDMzNCwxOCArNDM4NCw2IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCQkJY29udGludWU7CiAJ CX0KIAotCQlpZiAoaW5kZXhBbSA9PSBTVElSX0FNX09JRCkKLQkJewotCQkJZXJlcG9ydChXQVJO SU5HLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJ CSBlcnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXMuJXNcIiIs Ci0JCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKGluZGV4TmFtZXNwYWNlSWQpLAotCQkJCQkJCWdl dF9yZWxfbmFtZShpbmRleE9pZCkpKSk7Ci0JCQlpZiAoZmxhZ3MgJiBSRUlOREVYX1JFTF9TVVBQ UkVTU19JTkRFWF9VU0UpCi0JCQkJUmVtb3ZlUmVpbmRleFBlbmRpbmcoaW5kZXhPaWQpOwotCQkJ Y29udGludWU7Ci0JCX0KLQogCQlyZWluZGV4X2luZGV4KHN0bXQsIGluZGV4T2lkLCAhKGZsYWdz ICYgUkVJTkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFMpLAogCQkJCQkgIHBlcnNpc3RlbmNlLCBw YXJhbXMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYwppbmRleCAwN2MyZDQxYzE4OS4uZGVhY2Qy ZjdjOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19kZXBlbmQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1 ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgog I2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2Qu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2RlcGVuZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCkBAIC0xMTA4 LDYgKzExMDksNjcgQEAgZ2V0X2luZGV4X2NvbnN0cmFpbnQoT2lkIGluZGV4SWQpCiAJcmV0dXJu IGNvbnN0cmFpbnRJZDsKIH0KIAorLyoKKyAqIGdldF9hdXhpbGlhcnlfaW5kZXgKKyAqCQlHaXZl biB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9JRCBvZiBpdHMgYXV4aWxpYXJ5Cisg KgkJaW5kZXgsIG9yIEludmFsaWRPaWQgaWYgdGhlcmUgaXMgbm8gYXV4aWxpYXJ5IGluZGV4Lgor ICovCitPaWQKK2dldF9hdXhpbGlhcnlfaW5kZXgoT2lkIGluZGV4SWQpCit7CisJT2lkCQkJYXV4 aWxpYXJ5SW5kZXhPaWQgPSBJbnZhbGlkT2lkOworCVJlbGF0aW9uCWRlcFJlbDsKKwlTY2FuS2V5 RGF0YSBrZXlbM107CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwOworCisJLyog U2VhcmNoIHRoZSBkZXBlbmRlbmN5IHRhYmxlIGZvciB0aGUgaW5kZXggKi8KKwlkZXBSZWwgPSB0 YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5 SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZmNsYXNzaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25S ZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9y ZWZvYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShpbmRleElkKSk7CisJU2NhbktleUluaXQoJmtleVsyXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9yZWZvYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVR LAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihk ZXBSZWwsIERlcGVuZFJlZmVyZW5jZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAzLCBr ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChz Y2FuKSkpCisJeworCQlGb3JtX3BnX2RlcGVuZCBkZXByZWMgPSAoRm9ybV9wZ19kZXBlbmQpIEdF VFNUUlVDVCh0dXApOworCisJCS8qCisJCSAqIExvb2sgZm9yIGFuIEFVVE8gZGVwZW5kZW5jeSBv biBhIFNUSVIgaW5kZXguICBUaGVyZSBjYW4gYmUgYXQgbW9zdAorCQkgKiBvbmUgU1RJUiBhdXhp bGlhcnkgcGVyIGluZGV4LCBzbyB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBtYXRjaC4KKwkJICogVHJh bnNpdGl2ZSBhdXhpbGlhcmllcyAoZS5nLiBjY25ld19jY2F1eCBmcm9tIGEgZmFpbGVkIFJFSU5E RVgKKwkJICogQ09OQ1VSUkVOVExZKSBhcmUgZm91bmQgYnkgY2FsbGluZyB0aGlzIHdpdGggdGhl IGNjbmV3IE9JRCwgYW5kCisJCSAqIGFyZSBhbHNvIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSB2 aWEgY2FzY2FkaW5nIEFVVE8gZGVwZW5kZW5jeQorCQkgKiB3aGVuIHRoZSBpbnRlcm1lZGlhdGUg aW5kZXggaXMgZHJvcHBlZC4KKwkJICovCisJCWlmIChkZXByZWMtPmNsYXNzaWQgPT0gUmVsYXRp b25SZWxhdGlvbklkICYmCisJCQkoZGVwcmVjLT5kZXB0eXBlID09IERFUEVOREVOQ1lfQVVUTykg JiYKKwkJCWdldF9yZWxfcmVsa2luZChkZXByZWMtPm9iamlkKSA9PSBSRUxLSU5EX0lOREVYICYm CisJCQlnZXRfcmVsX3JlbGFtKGRlcHJlYy0+b2JqaWQpID09IFNUSVJfQU1fT0lEKQorCQl7CisJ CQlhdXhpbGlhcnlJbmRleE9pZCA9IGRlcHJlYy0+b2JqaWQ7CisJCQlicmVhazsKKwkJfQorCX0K KworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoZGVwUmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIGF1eGlsaWFyeUluZGV4T2lkOworfQorCiAvKgogICogZ2V0 X2luZGV4X3JlZl9jb25zdHJhaW50cwogICoJCUdpdmVuIHRoZSBPSUQgb2YgYW4gaW5kZXgsIHJl dHVybiB0aGUgT0lEIG9mIGFsbCBmb3JlaWduIGtleQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4 IGQ3ZWE4NmIyODA1Li5mNDI4ZGNkZjEwZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMzE1 LDYgKzMxNSw3IEBAIGNyZWF0ZV90b2FzdF90YWJsZShSZWxhdGlvbiByZWwsIE9pZCB0b2FzdE9p ZCwgT2lkIHRvYXN0SW5kZXhPaWQsCiAJaW5kZXhJbmZvLT5paV9BbSA9IEJUUkVFX0FNX09JRDsK IAlpbmRleEluZm8tPmlpX0FtQ2FjaGUgPSBOVUxMOwogCWluZGV4SW5mby0+aWlfQXV4aWxpYXJ5 ID0gZmFsc2U7CisJaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElkID0gSW52YWxpZE9p ZDsKIAlpbmRleEluZm8tPmlpX0NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKIAogCWNv bGxhdGlvbklkc1swXSA9IEludmFsaWRPaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4 IDJkN2I2YjdlYjhiLi40NmM0Y2NjNjc4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAg LTI0Nyw3ICsyNDcsNyBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAJaW5kZXhJ bmZvID0gbWFrZUluZGV4SW5mbyhudW1iZXJPZkF0dHJpYnV0ZXMsIG51bWJlck9mQXR0cmlidXRl cywKIAkJCQkJCQkgIGFjY2Vzc01ldGhvZElkLCBOSUwsIE5JTCwgZmFsc2UsIGZhbHNlLAogCQkJ CQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLAotCQkJCQkJCSAgaXNXaXRob3V0T3Zl cmxhcHMsIGlzYXV4aWxpYXJ5KTsKKwkJCQkJCQkgIGlzV2l0aG91dE92ZXJsYXBzLCBpc2F1eGls aWFyeSwgSW52YWxpZE9pZCk7CiAJdHlwZUlkcyA9IHBhbGxvY19hcnJheShPaWQsIG51bWJlck9m QXR0cmlidXRlcyk7CiAJY29sbGF0aW9uSWRzID0gcGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZB dHRyaWJ1dGVzKTsKIAlvcGNsYXNzSWRzID0gcGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZBdHRy aWJ1dGVzKTsKQEAgLTk0Nyw3ICs5NDcsOCBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCQkJICBjb25jdXJyZW50LAogCQkJCQkJCSAgYW1pc3N1bW1hcml6aW5nLAogCQkJ CQkJCSAgc3RtdC0+aXN3aXRob3V0b3ZlcmxhcHMsCi0JCQkJCQkJICBmYWxzZSk7CisJCQkJCQkJ ICBmYWxzZSwKKwkJCQkJCQkgIEludmFsaWRPaWQpOwogCiAJdHlwZUlkcyA9IHBhbGxvY19hcnJh eShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CiAJY29sbGF0aW9uSWRzID0gcGFsbG9jX2FycmF5 KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKQEAgLTM3MTEsNiArMzcxMiw3IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJewogCQlPaWQJCQlpbmRleElkOwogCQlPaWQJCQlhdXhJbmRleElk OworCQlPaWQJCQlqdW5rQXV4SW5kZXhJZDsKIAkJT2lkCQkJdGFibGVJZDsKIAkJT2lkCQkJYW1J ZDsKIAkJYm9vbAkJc2FmZTsJCS8qIGZvciBzZXRfaW5kZXhzYWZlX3Byb2NmbGFncyAqLwpAQCAt NDA2MCw2ICs0MDYyLDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJUmVpbmRleEluZGV4 SW5mbyAqbmV3aWR4OwogCQlPaWQJCQluZXdJbmRleElkOwogCQlPaWQJCQlhdXhJbmRleElkOwor CQlPaWQJCQlqdW5rQXV4SW5kZXhJZDsKIAkJUmVsYXRpb24JaW5kZXhSZWw7CiAJCVJlbGF0aW9u CWhlYXBSZWw7CiAJCU9pZAkJCXNhdmVfdXNlcmlkOwpAQCAtNDA2Nyw2ICs0MDcwLDcgQEAgUmVp bmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVs YXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJCVJlbGF0aW9u CW5ld0luZGV4UmVsOwogCQlSZWxhdGlvbglhdXhJbmRleFJlbDsKKwkJUmVsYXRpb24JanVua0F1 eEluZGV4UmVsOwogCQlMb2NrUmVsSWQgICpsb2NrcmVsaWQ7CiAJCU9pZAkJCXRhYmxlc3BhY2Vp ZDsKIApAQCAtNDE0NCwxMiArNDE0OCwxNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHko Y29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJ CQkJCQkJCQkJICAgdGFibGVzcGFjZWlkLAogCQkJCQkJCQkJCQkJICAgYXV4Q29uY3VycmVudE5h bWUpOwogCisJCS8qIFNlYXJjaCBmb3IgYXV4aWxpYXJ5IGluZGV4IGZvciByZWluZGV4ZWQgaW5k ZXgsIHRvIGRyb3AgaXQgKi8KKwkJanVua0F1eEluZGV4SWQgPSBnZXRfYXV4aWxpYXJ5X2luZGV4 KGlkeC0+aW5kZXhJZCk7CisKIAkJLyoKIAkJICogTm93IG9wZW4gdGhlIHJlbGF0aW9uIG9mIHRo ZSBuZXcgaW5kZXgsIGEgc2Vzc2lvbi1sZXZlbCBsb2NrIGlzCiAJCSAqIGFsc28gbmVlZGVkIG9u IGl0LgogCQkgKi8KIAkJbmV3SW5kZXhSZWwgPSBpbmRleF9vcGVuKG5ld0luZGV4SWQsIFNoYXJl VXBkYXRlRXhjbHVzaXZlTG9jayk7CiAJCWF1eEluZGV4UmVsID0gaW5kZXhfb3BlbihhdXhJbmRl eElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4 SW5kZXhJZCkpCisJCQlqdW5rQXV4SW5kZXhSZWwgPSBpbmRleF9vcGVuKGp1bmtBdXhJbmRleElk LCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCiAJCS8qCiAJCSAqIFNhdmUgdGhlIGxpc3Qg b2YgT0lEcyBhbmQgbG9ja3MgaW4gcHJpdmF0ZSBjb250ZXh0CkBAIC00MTU5LDYgKzQxNjgsNyBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQluZXdpZHggPSBwYWxsb2Nfb2JqZWN0KFJlaW5k ZXhJbmRleEluZm8pOwogCQluZXdpZHgtPmluZGV4SWQgPSBuZXdJbmRleElkOwogCQluZXdpZHgt PmF1eEluZGV4SWQgPSBhdXhJbmRleElkOworCQluZXdpZHgtPmp1bmtBdXhJbmRleElkID0ganVu a0F1eEluZGV4SWQ7CiAJCW5ld2lkeC0+c2FmZSA9IGlkeC0+c2FmZTsKIAkJbmV3aWR4LT50YWJs ZUlkID0gaWR4LT50YWJsZUlkOwogCQluZXdpZHgtPmFtSWQgPSBpZHgtPmFtSWQ7CkBAIC00MTgw LDEwICs0MTkwLDE4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWxvY2tyZWxpZCA9IHBh bGxvY19vYmplY3QoTG9ja1JlbElkKTsKIAkJKmxvY2tyZWxpZCA9IGF1eEluZGV4UmVsLT5yZF9s b2NrSW5mby5sb2NrUmVsSWQ7CiAJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9j a3MsIGxvY2tyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwkJewor CQkJbG9ja3JlbGlkID0gcGFsbG9jX29iamVjdChMb2NrUmVsSWQpOworCQkJKmxvY2tyZWxpZCA9 IGp1bmtBdXhJbmRleFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOworCQkJcmVsYXRpb25Mb2Nr cyA9IGxhcHBlbmQocmVsYXRpb25Mb2NrcywgbG9ja3JlbGlkKTsKKwkJfQogCiAJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCQlpbmRleF9jbG9zZShpbmRleFJlbCwgTm9M b2NrKTsKKwkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4SWQpKQorCQkJaW5kZXhfY2xvc2Uo anVua0F1eEluZGV4UmVsLCBOb0xvY2spOwogCQlpbmRleF9jbG9zZShhdXhJbmRleFJlbCwgTm9M b2NrKTsKIAkJaW5kZXhfY2xvc2UobmV3SW5kZXhSZWwsIE5vTG9jayk7CiAKQEAgLTQzNzIsNyAr NDM5MCw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAKIAkvKgogCSAqIEF0IHRoaXMgbW9t ZW50IGFsbCB0YXJnZXQgaW5kZXhlcyBhcmUgbWFya2VkIGFzICJyZWFkeS10by1pbnNlcnQiLiBT bywKLQkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9mIGRyb3BwaW5nIGF1eGlsaWFy eSBpbmRleGVzLgorCSAqIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHByb2Nlc3Mgb2YgZHJvcHBpbmcg YXV4aWxpYXJ5IGluZGV4ZXMgLSBpbmNsdWRpbmcKKwkgKiBqdW5rIGluZGV4ZXMgZGV0ZWN0ZWQg ZWFybGllci4KIAkgKi8KIAlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKIAl7CkBAIC00Mzk1LDYg KzQ0MTQsOSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQg KnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkgKi8KIAkJUHVzaEFjdGl2ZVNu YXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAJCWluZGV4X3NldF9zdGF0ZV9mbGFn cyhuZXdpZHgtPmF1eEluZGV4SWQsIElOREVYX0RST1BfQ0xFQVJfUkVBRFkpOworCQkvKiBFbnN1 cmUgdGhlIGp1bmsgaW5kZXggaXMgbWFya2VkIGFzIG5vbi1yZWFkeSAqLworCQlpZiAoT2lkSXNW YWxpZChuZXdpZHgtPmp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X3NldF9zdGF0ZV9mbGFncyhu ZXdpZHgtPmp1bmtBdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKIAkJUG9wQWN0 aXZlU25hcHNob3QoKTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAgLTQ2MTQs NiArNDYzNiw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVB1c2hBY3RpdmVTbmFwc2hv dChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCiAJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRf ZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJCWlmIChPaWRJc1Zh bGlkKG5ld2lkeC0+anVua0F1eEluZGV4SWQpKQorCQkJaW5kZXhfY29uY3VycmVudGx5X3NldF9k ZWFkKG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCk7CiAKIAkJUG9wQWN0 aXZlU25hcHNob3QoKTsKIAl9CkBAIC00NjY1LDYgKzQ2ODksMTMgQEAgUmVpbmRleFJlbGF0aW9u Q29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNv bnN0IFJlaW4KIAkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CiAKIAkJCWFkZF9leGFjdF9vYmpl Y3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKKworCQkJaWYgKE9pZElzVmFsaWQoaWR4LT5q dW5rQXV4SW5kZXhJZCkpCisJCQl7CisJCQkJb2JqZWN0Lm9iamVjdElkID0gaWR4LT5qdW5rQXV4 SW5kZXhJZDsKKwkJCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCQkJCWFkZF9leGFjdF9vYmpl Y3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKKwkJCX0KIAkJfQogCiAJCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCmluZGV4IDBjZTJlODFmOWMyLi5lMjMwOWI2YTFiYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKQEAgLTE1NjcsNiArMTU2Nyw4IEBAIFJlbW92ZVJlbGF0aW9ucyhE cm9wU3RtdCAqZHJvcCkKIAlMaXN0Q2VsbCAgICpjZWxsOwogCWludAkJCWZsYWdzID0gMDsKIAlM T0NLTU9ERQlsb2NrbW9kZSA9IEFjY2Vzc0V4Y2x1c2l2ZUxvY2s7CisJTWVtb3J5Q29udGV4dCBw cml2YXRlX2NvbnRleHQsCisJCQkJICBvbGRjb250ZXh0OwogCiAJLyogRFJPUCBDT05DVVJSRU5U TFkgdXNlcyBhIHdlYWtlciBsb2NrLCBhbmQgaGFzIHNvbWUgcmVzdHJpY3Rpb25zICovCiAJaWYg KGRyb3AtPmNvbmN1cnJlbnQpCkBAIC0xNjMxLDkgKzE2MzMsMjAgQEAgUmVtb3ZlUmVsYXRpb25z KERyb3BTdG10ICpkcm9wKQogCQkJcmVsa2luZCA9IDA7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCiAJCQlicmVhazsKIAl9CisJLyoKKwkgKiBDcmVhdGUgYSBtZW1vcnkgY29udGV4dCB0aGF0 IHdpbGwgc3Vydml2ZSBmb3JjZWQgdHJhbnNhY3Rpb24gY29tbWl0cyB3ZQorCSAqIG1heSBuZWVk IHRvIGRvIGJlbG93IChpbiBjYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXggZHJvcCkuCisJICogU2lu Y2UgaXQgaXMgYSBjaGlsZCBvZiBQb3J0YWxDb250ZXh0LCBpdCB3aWxsIGdvIGF3YXkgZXZlbnR1 YWxseSBldmVuIGlmCisJICogd2Ugc3VmZmVyIGFuIGVycm9yOyB0aGVyZSdzIG5vIG5lZWQgZm9y IHNwZWNpYWwgYWJvcnQgY2xlYW51cCBsb2dpYy4KKwkgKi8KKwlwcml2YXRlX2NvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJIlJlbW92ZVJl bGF0aW9ucyIsCisJCQkJCQkJCQkJCUFMTE9DU0VUX1NNQUxMX1NJWkVTKTsKIAorCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsKIAkvKiBMb2NrIGFu ZCB2YWxpZGF0ZSBlYWNoIHJlbGF0aW9uOyBidWlsZCBhIGxpc3Qgb2Ygb2JqZWN0IGFkZHJlc3Nl cyAqLwogCW9iamVjdHMgPSBuZXdfb2JqZWN0X2FkZHJlc3NlcygpOworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCWZvcmVhY2goY2VsbCwgZHJvcC0+b2JqZWN0cykKIAl7 CkBAIC0xNjg1LDYgKzE2OTgsMzggQEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQog CQkJZmxhZ3MgfD0gUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UTFk7CiAJCX0KIAorCQkvKgor CQkgKiBDb25jdXJyZW50IGluZGV4IGRyb3AgcmVxdWlyZXMgaXQgdG8gYmUgdGhlIGZpcnN0IHRy YW5zYWN0aW9uLiBCdXQgaW4KKwkJICogY2FzZSB3ZSBoYXZlIGp1bmsgYXV4aWxpYXJ5IGluZGV4 IC0gd2Ugd2FudCB0byBkcm9wIGl0IHRvbyAoYW5kIGFsc28KKwkJICogaW4gYSBjb25jdXJyZW50 IHdheSkuIEluIHRoaXMgY2FzZSBwZXJmb3JtIHNpbGVudCBpbnRlcm5hbCBkZWxldGlvbgorCQkg KiBvZiBhdXhpbGlhcnkgaW5kZXgsIGFuZCByZXN0b3JlIHRyYW5zYWN0aW9uIHN0YXRlLiBJdCBp cyBmaW5lIHRvIGRvIGl0CisJCSAqIGluIHRoZSBsb29wIGJlY2F1c2UgdGhlcmUgaXMgb25seSBz aW5nbGUgZWxlbWVudCBpbiBkcm9wLT5vYmplY3RzLgorCQkgKi8KKwkJaWYgKChmbGFncyAmIFBF UkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVExZKSAhPSAwICYmCisJCQlzdGF0ZS5hY3R1YWxfcmVs a2luZCA9PSBSRUxLSU5EX0lOREVYKQorCQl7CisJCQlPaWQganVua0F1eEluZGV4T2lkID0gZ2V0 X2F1eGlsaWFyeV9pbmRleChyZWxPaWQpOworCQkJaWYgKE9pZElzVmFsaWQoanVua0F1eEluZGV4 T2lkKSkKKwkJCXsKKwkJCQlPYmplY3RBZGRyZXNzIG9iamVjdDsKKwkJCQlvYmplY3QuY2xhc3NJ ZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCQlvYmplY3Qub2JqZWN0SWQgPSBqdW5rQXV4SW5k ZXhPaWQ7CisJCQkJb2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKwkJCQlwZXJmb3JtRGVsZXRpb24o Jm9iamVjdCwgRFJPUF9SRVNUUklDVCwKKwkJCQkJCQkJCQkgUEVSRk9STV9ERUxFVElPTl9DT05D VVJSRU5UTFkgfAorCQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFMIHwKKwkJCQkJ CQkJCQkgUEVSRk9STV9ERUxFVElPTl9RVUlFVExZKTsKKwkJCQlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwkJCQlNZW1vcnlDb250ZXh0RGVsZXRlKHByaXZhdGVfY29udGV4dCk7CisKKwkJ CQkvKiBBbmQgc3RhcnQgYWdhaW4gLSBub3cgd2l0aG91dCBhdXhpbGlhcnkgaW5kZXguICovCisJ CQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCQlSZW1vdmVSZWxhdGlvbnMoZHJvcCk7CisJCQkJ cmV0dXJuOworCQkJfQorCQl9CisKIAkJLyoKIAkJICogQ29uY3VycmVudCBpbmRleCBkcm9wIGNh bm5vdCBiZSB1c2VkIHdpdGggcGFydGl0aW9uZWQgaW5kZXhlcywKIAkJICogZWl0aGVyLgpAQCAt MTcxMywxMiArMTc1OCwxNyBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQgKmRyb3ApCiAJCW9i ai5vYmplY3RJZCA9IHJlbE9pZDsKIAkJb2JqLm9iamVjdFN1YklkID0gMDsKIAorCQlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAJCWFkZF9leGFj dF9vYmplY3RfYWRkcmVzcygmb2JqLCBvYmplY3RzKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwogCX0KIAorCS8qIERlbGV0aW9uIG1heSBpbnZvbHZlIG11bHRpcGxlIGNv bW1pdHMsIHNvLCBzd2l0Y2ggdG8gbWVtb3J5IGNvbnRleHQgKi8KKwlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAJcGVyZm9ybU11bHRpcGxlRGVs ZXRpb25zKG9iamVjdHMsIGRyb3AtPmJlaGF2aW9yLCBmbGFncyk7CisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwogCi0JZnJlZV9vYmplY3RfYWRkcmVzc2VzKG9iamVjdHMpOwor CU1lbW9yeUNvbnRleHREZWxldGUocHJpdmF0ZV9jb250ZXh0KTsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFr ZWZ1bmNzLmMKaW5kZXggODRmN2NmOTgyNGUuLmM1NDc0OGZmNjQ0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVu Y3MuYwpAQCAtODM0LDcgKzgzNCw3IEBAIEluZGV4SW5mbyAqCiBtYWtlSW5kZXhJbmZvKGludCBu dW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAog CQkJICBMaXN0ICpwcmVkaWNhdGVzLCBib29sIHVuaXF1ZSwgYm9vbCBudWxsc19ub3RfZGlzdGlu Y3QsCiAJCQkgIGJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LCBib29sIHN1bW1hcml6aW5n LAotCQkJICBib29sIHdpdGhvdXRvdmVybGFwcywgYm9vbCBhdXhpbGlhcnkpCisJCQkgIGJvb2wg d2l0aG91dG92ZXJsYXBzLCBib29sIGF1eGlsaWFyeSwgT2lkIGF1eGlsaWFyeV9mb3JfaW5kZXhf aWQpCiB7CiAJSW5kZXhJbmZvICAqbiA9IG1ha2VOb2RlKEluZGV4SW5mbyk7CiAKQEAgLTg1MSw2 ICs4NTEsNyBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBP aWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCW4tPmlpX1N1bW1hcml6aW5nID0gc3VtbWFy aXppbmc7CiAJbi0+aWlfV2l0aG91dE92ZXJsYXBzID0gd2l0aG91dG92ZXJsYXBzOwogCW4tPmlp X0F1eGlsaWFyeSA9IGF1eGlsaWFyeTsKKwluLT5paV9BdXhpbGlhcnlGb3JJbmRleElkID0gYXV4 aWxpYXJ5X2Zvcl9pbmRleF9pZDsKIAogCS8qIHN1bW1hcml6aW5nIGluZGV4ZXMgY2Fubm90IGNv bnRhaW4gbm9uLWtleSBhdHRyaWJ1dGVzICovCiAJQXNzZXJ0KCFzdW1tYXJpemluZyB8fCAobnVt a2V5YXR0cnMgPT0gbnVtYXR0cnMpKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv ZGVwZW5kZW5jeS5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKaW5kZXggMmYz YzFlYWUzYzcuLjZhZTIxMGM1ODRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2Rl cGVuZGVuY3kuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaApAQCAtMTkz LDYgKzE5Myw3IEBAIGV4dGVybiBMaXN0ICpnZXRPd25lZFNlcXVlbmNlcyhPaWQgcmVsaWQpOwog ZXh0ZXJuIE9pZAlnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBh dHRudW0sIGJvb2wgbWlzc2luZ19vayk7CiAKIGV4dGVybiBPaWQJZ2V0X2luZGV4X2NvbnN0cmFp bnQoT2lkIGluZGV4SWQpOworZXh0ZXJuIE9pZAlnZXRfYXV4aWxpYXJ5X2luZGV4KE9pZCBpbmRl eElkKTsKIAogZXh0ZXJuIExpc3QgKmdldF9pbmRleF9yZWZfY29uc3RyYWludHMoT2lkIGluZGV4 SWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGVjYWY4MmYyYWZhLi5mMTYwNWUwMGNkYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTIzMiw2ICsyMzIsOCBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEluZm8KIAlpbnQJCQlpaV9QYXJhbGxlbFdvcmtlcnM7CiAJLyogaXMgYXV4aWxpYXJ5IGZv ciBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLwogCWJvb2wJCWlpX0F1eGlsaWFyeTsKKwkvKiBp ZiBjcmVhdGluZyBhbiBhdXhpbGlhcnkgaW5kZXgsIHRoZSBPSUQgb2YgdGhlIG1haW4gaW5kZXg7 IG90aGVyd2lzZSBJbnZhbGlkT2lkLiAqLworCU9pZAkJCWlpX0F1eGlsaWFyeUZvckluZGV4SWQ7 CiAJLyogT2lkIG9mIGluZGV4IEFNICovCiAJT2lkCQkJaWlfQW07CiAJLyogcHJpdmF0ZSBjYWNo ZSBhcmVhIGZvciBpbmRleCBBTSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFr ZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCBjZDdmMWViMDU5 Mi4uM2E3MDQ3ODFjOGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCkBAIC0xMDAsNyArMTAwLDcgQEAg ZXh0ZXJuIEluZGV4SW5mbyAqbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlh dHRycywgT2lkIGFtb2lkLAogCQkJCQkJCQlib29sIHVuaXF1ZSwgYm9vbCBudWxsc19ub3RfZGlz dGluY3QsCiAJCQkJCQkJCWJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LAogCQkJCQkJCQli b29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVybGFwcywKLQkJCQkJCQkJYm9vbCBhdXhp bGlhcnkpOworCQkJCQkJCQlib29sIGF1eGlsaWFyeSwgT2lkIGF1eGlsaWFyeV9mb3JfaW5kZXhf aWQpOwogCiBleHRlcm4gTm9kZSAqbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0 aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxlbShjaGFyICpuYW1lLCBOb2RlICphcmcs IGludCBsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5v dXQKaW5kZXggZDE3MjNmNDdlODkuLjJkNmFiYjE1YTg5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0zMjc5LDIwICszMjc5LDEwOSBAQCBFUlJPUjog IHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIgbm90IHN1 cHBvcnRlZAogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7 CiBFUlJPUjogIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1 eCIgbm90IHN1cHBvcnRlZAogLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBh d2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KLURFTEVURSBGUk9NIGNvbmN1cl9y ZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwotRVJST1I6ICByZWxhdGlvbiAiY29uY3VyX3JlaW5k ZXhfdGFiNCIgZG9lcyBub3QgZXhpc3QKLUxJTkUgMTogREVMRVRFIEZST00gY29uY3VyX3JlaW5k ZXhfdGFiNCBXSEVSRSBjMSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIF4KK0RFTEVURSBGUk9N IGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmlu ZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIGF1eF9pbmRleF9pbmQ2OworLS0g TWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorICAgICAg ICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAgfCBD b2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAg IHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUsIGJ0 cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2VydCBkdXBsaWNh dGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7Cist LSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJS RU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAgY291 bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAgS2V5 IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWls dXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00g YXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOwogLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5n IHJlaW5kZXgKLVJFSU5ERVggVEFCTEUgYXV4X2luZGV4X3RhYjU7Ci1FUlJPUjogIGNvdWxkIG5v dCBjcmVhdGUgdW5pcXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKLURFVEFJTDogIEtleSAoYzEp PSgxKSBpcyBkdXBsaWNhdGVkLgotLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIGNvbmN1cnJl bnQgcmVpbmRleAogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgYXV4X2luZGV4X3RhYjU7CiBX QVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4ICJwdWJsaWMuYXV4X2lu ZGV4X2luZDYiCiBISU5UOiAgVXNlIERST1AgSU5ERVggb3IgUkVJTkRFWCBJTkRFWC4KIFdBUk5J Tkc6ICBza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCAicHVibGljLmF1eF9pbmRl eF9pbmQ2X2NjYXV4IgogTk9USUNFOiAgdGFibGUgImF1eF9pbmRleF90YWI1IiBoYXMgbm8gaW5k ZXhlcyB0aGF0IGNhbiBiZSByZWluZGV4ZWQgY29uY3VycmVudGx5CistLSBNYWtlIHN1cmUgaXQg aXMgc3RpbGwgZXhpc3RzCitcZCBhdXhfaW5kZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVi bGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxs YWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAK K0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJ RAorICAgICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIgc3RpciAoYzEpIElOVkFMSUQKKworLS0gU2hv dWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggVEFCTEUg YXV4X2luZGV4X3RhYjU7CistLSBNYWtlIHN1cmUgYXV4IGluZGV4IGlzIGRyb3BwZWQKK1xkIGF1 eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4X2luZGV4X3RhYjUiCisg Q29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8 IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorSW5kZXhlczoKKyAgICAiYXV4X2lu ZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMxKQorCitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2 OworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1 IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUg VU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFi NSAoYzEpOworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4 X2luZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIFRoaXMgbWFr ZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUg dmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91 bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBD T05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUgYXV4IGluZGV4IGlzIGRy b3BwZWQKK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4X2lu ZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVm YXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorSW5kZXhlczoK KyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMxKQorCitEUk9QIElOREVYIGF1 eF9pbmRleF9pbmQ2OworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1 eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFn YWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBh dXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRl eCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4K Ky0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4 IGNhbiBiZWNvbWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9 IDE7CistLSBEcm9wIG1haW4gaW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJF TlRMWSBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBl ZCB0b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMuYXV4X2lu ZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVm YXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorCitEUk9QIElO REVYIGF1eF9pbmRleF9pbmQ2OworRVJST1I6ICBpbmRleCAiYXV4X2luZGV4X2luZDYiIGRvZXMg bm90IGV4aXN0CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2lu ZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4K K0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9p bmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJh dXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBsaWNhdGVkLgorLS0g RHJvcCBtYWluIGluZGV4CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJl IGF1eGlsaWFyeSBpbmRleCBkcm9wcGVkIHRvbworXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAg ICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29s bGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCisKIERST1AgVEFCTEUgYXV4X2luZGV4X3RhYjU7CiAtLSBDaGVjayBoYW5k bGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKIC0t IGRlZmluaXRpb25zIG9mIHRoZSByZWJ1aWx0IGluZGV4ZXMgc2hvdWxkIG1hdGNoIHRoZSBvcmln aW5hbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggYzJjMWIwMzE1Mjcu LmZkOTZkODBhYmJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5k ZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTEz NDQsMTEgKzEzNDQsNjIgQEAgUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKIC0t IENvbmN1cnJlbnRseSBhbHNvCiBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhf aW5kNl9jY2F1eDsKIC0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwg c28gdGhlIGluZGV4IGNhbiBiZWNvbWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRl eF90YWI0IFdIRVJFIGMxID0gMTsKK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMx ID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitS RUlOREVYIElOREVYIGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBk cm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKwor LS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZB TFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAo YzEpOworLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUg aW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJF IGMxID0gMTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1SRUlOREVYIFRB QkxFIGF1eF9pbmRleF90YWI1OwotLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIGNvbmN1cnJl bnQgcmVpbmRleAogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgYXV4X2luZGV4X3RhYjU7Cist LSBNYWtlIHN1cmUgaXQgaXMgc3RpbGwgZXhpc3RzCitcZCBhdXhfaW5kZXhfdGFiNQorLS0gU2hv dWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggVEFCTEUg YXV4X2luZGV4X3RhYjU7CistLSBNYWtlIHN1cmUgYXV4IGluZGV4IGlzIGRyb3BwZWQKK1xkIGF1 eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJbnNlcnQgZHVw bGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEp OworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09O Q1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CistLSBUaGlz IG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVj b21lIHZhbGlkLgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0g U2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5E RVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBp cyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsK KworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1 IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUg VU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFi NSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0 aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdI RVJFIGMxID0gMTsKKy0tIERyb3AgbWFpbiBpbmRleCBDT05DVVJSRU5UTFkKK0RST1AgSU5ERVgg Q09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eGlsaWFyeSBpbmRl eCBkcm9wcGVkIHRvbworXGQgYXV4X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2lu ZDY7CisKKy0tIEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhf dGFiNSBWQUxVRVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JF QVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4 X3RhYjUgKGMxKTsKKy0tIERyb3AgbWFpbiBpbmRleAorRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRl eF90YWI1CisKIERST1AgVEFCTEUgYXV4X2luZGV4X3RhYjU7CiAKIC0tIENoZWNrIGhhbmRsaW5n IG9mIGluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQotLSAKMi40 My4wCgo= --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0006-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v34-0006-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtk35 RnJvbSAxNzE5MWZjYWViNWQzOGZiYjJmNDE4MWUwNDgxNGM2MmRmNmQ3NzFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDYvN10gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCgpTa2lwIHVu bmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBmb3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhl IGluZGV4LWluc2VydCBwYXRoLCBkZXRlY3QgYXV4aWxpYXJ5IGluZGV4ZXMgYW5kIGJ5cGFzcyBE YXR1bSB2YWx1ZSBjb21wdXRhdGlvbgotIHNldCBpbmRleFVuY2hhbmdlZD1mYWxzZSBmb3IgYXV4 aWxpYXJ5IGluZGljZXMgdG8gYXZvaWQgcmVkdW5kYW50IGNoZWNrcwoKVGhlc2Ugb3B0aW1pemF0 aW9ucyByZWR1Y2Ugb3ZlcmhlYWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9ucy4K LS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICB8IDkgKysrKysrKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyB8IDUgKysrKy0KIHNyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oICAgICAgIHwgNiArKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTcg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggOTEzNmRm YzdjNzMuLjRlZGY2OGFjZWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTQwLDYgKzI5NDAsMTUg QEAgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlzdENlbGwgICAqaW5k ZXhwcl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXggZG9lcyBub3QgbmVl ZCBhbnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5KGluZGV4SW5mby0+ aWlfQXV4aWxpYXJ5KSkKKwl7CisJCUFzc2VydChpbmRleEluZm8tPmlpX0FtID09IFNUSVJfQU1f T0lEKTsKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKERhdHVtKSAqIGluZGV4SW5mby0+aWlf TnVtSW5kZXhBdHRycyk7CisJCW1lbXNldChpc251bGwsIHRydWUsIHNpemVvZihib29sKSAqIGlu ZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoaW5kZXhJ bmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwgJiYKIAkJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9u c1N0YXRlID09IE5JTCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj SW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQz NjNlMTU0YzBmLi44NGU5OWQ2NTNlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK QEAgLTQzOCw4ICs0MzgsMTEgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCSAqIFRoZXJlJ3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhbiBp bmRleF9pbnNlcnQoKSBjYWxsIGZvciB0aGlzCiAJCSAqIGluZGV4LiAgSWYgd2UncmUgYmVpbmcg Y2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRlbWVudCwKIAkJICogY29uc2lkZXIgaWYg dGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgc2hvdWxkIGJlIHBhc3NlZC4KKwkJICoK KwkJICogRm9yIGF1eGlsaWFyeSBpbmRleGVzLCBhbHdheXMgcGFzcyBmYWxzZSB0byBza2lwIHZh bHVlIGNvbXBhcmlzb24gY2hlY2tzLAorCQkgKiBzaW5jZSBhdXhpbGlhcnkgaW5kZXhlcyBvbmx5 IHN0b3JlIFRJRHMgYW5kIGRvbid0IHRyYWNrIHZhbHVlIGNoYW5nZXMuCiAJCSAqLwotCQlpbmRl eFVuY2hhbmdlZCA9ICgoZmxhZ3MgJiBFSUlUX0lTX1VQREFURSkgJiYKKwkJaW5kZXhVbmNoYW5n ZWQgPSAoKGZsYWdzICYgRUlJVF9JU19VUERBVEUpICYmICFpbmRleEluZm8tPmlpX0F1eGlsaWFy eSAmJgogCQkJCQkJICBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCiAJ CQkJCQkJCQkJCQkJZXN0YXRlLAogCQkJCQkJCQkJCQkJCWluZGV4SW5mbywKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKaW5kZXggZjE2MDVlMDBjZGMuLjYyZjc5N2JjMTk3IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aApAQCAtMTY5LDggKzE2OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRy aWVzIGZvciBhIHBhcnRpY3VsYXIgaW5kZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFu ZAogICoJCXJldGFpbCBjcmVhdGlvbiBvZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1 cnJlbnQsIGlpX0Jyb2tlbkhvdENoYWluLCBpaV9BdXhpbGlhcnkgYW5kIGlpX1BhcmFsbGVsV29y a2VycwotICogYXJlIHVzZWQgb25seSBkdXJpbmcgaW5kZXggYnVpbGQ7IHRoZXkncmUgY29udmVu dGlvbmFsbHkgemVyb2VkIG90aGVyd2lzZS4KKyAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhv dENoYWluLCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKKyAqIGR1cmluZyBp bmRleCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLiAgaWlf QXV4aWxpYXJ5CisgKiBpcyBhbHNvIHVzZWQgZHVyaW5nIHJldGFpbCBpbnNlcnRzIHRvIHNraXAg ZGF0dW0gZm9ybWF0aW9uIGZvciBhdXhpbGlhcnkKKyAqIGluZGV4ZXMuCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwotLSAKMi40My4wCgo= --00000000000011d953064ecebe56 Content-Type: application/octet-stream; name="v34-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v34-0007-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnghtk46 RnJvbSA2MmEyODkxMzlmYjE1MTg0OGE1ZGI1ZDg5ZDg3ZWQwMjRjZTZiNWYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjM0IDcvN10gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggZG9lcyBub3QgZGVwZW5k IG9uIHNpbmdsZSByZWZlcmVuY2Ugc25hcHNob3QgYW55bW9yZS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgIHwgNzcgKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICAgIHwgMTIgKysrLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysr LS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICB8IDUyICsr Ky0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQg IHwgIDkgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAy NSArKysrLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgICAgfCAx NSArKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oICAgICAgICAgICAgICAgIHwgIDIg Ky0KIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8ICAzICsKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8ICA0ICsrCiAxMiBmaWxlcyBjaGFu Z2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L1JFQURNRS5IT1QKaW5kZXggYjFjNzk3NTE3ZWUuLjM4MmZlMTcyM2E1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL1JFQURNRS5IT1QKQEAgLTQwMSwxMiArNDAxLDEyIEBAIGxpdmUgdHVwbGUuCiBXZSBt YXJrIHRoZSBpbmRleCBvcGVuIGZvciBpbnNlcnRzIChidXQgc3RpbGwgbm90IHJlYWR5IGZvciBy ZWFkcykgdGhlbgogd2UgYWdhaW4gd2FpdCBmb3IgdHJhbnNhY3Rpb25zIHdoaWNoIGhhdmUgdGhl IHRhYmxlIG9wZW4uICBUaGVuIHZhbGlkYXRlCiB0aGUgaW5kZXguICBUaGlzIHNlYXJjaGVzIGZv ciB0dXBsZXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCBpbiBhdXhpbGlhcnkKLWluZGV4LCBhbmQg aW5zZXJ0cyBhbnkgbWlzc2luZyBvbmVzIGlmIHRoZXkgYXJlIHZpc2libGUgdG8gcmVmZXJlbmNl IHNuYXBzaG90LgoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhleSBh cmUgdmlzaWJsZSB0byBhIGZyZXNoIHNuYXBzaG90LgogQWdhaW4sIHRoZSBpbmRleCBlbnRyaWVz IGhhdmUgdG8gaGF2ZSBUSURzIGVxdWFsIHRvIEhPVC1jaGFpbiByb290IFRJRHMsIGJ1dAogdGhl IHZhbHVlIHRvIGJlIGluc2VydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgbGl2ZSB0dXBsZS4KIAog VGhlbiB3ZSB3YWl0IHVudGlsIGV2ZXJ5IHRyYW5zYWN0aW9uIHRoYXQgY291bGQgaGF2ZSBhIHNu YXBzaG90IG9sZGVyIHRoYW4KLXRoZSBzZWNvbmQgcmVmZXJlbmNlIHNuYXBzaG90IGlzIGZpbmlz aGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgbm9ib2R5IGlzCit0aGUgbGF0ZXN0IHVzZWQgc25hcHNo b3QgaXMgZmluaXNoZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMKIGFsaXZlIGFueSBs b25nZXIgd2hvIGNvdWxkIG5lZWQgdG8gc2VlIGFueSB0dXBsZXMgdGhhdCBtaWdodCBiZSBtaXNz aW5nCiBmcm9tIHRoZSBpbmRleCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0IG5vIG9uZSBjYW4g c2VlIGFueSBpbmNvbnNpc3RlbnQKIHJvd3MgaW4gYSBicm9rZW4gSE9UIGNoYWluICh0aGUgZmly c3QgY29uZGl0aW9uIGlzIHN0cm9uZ2VyIHRoYW4gdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwppbmRleCBhMzQ3NDkyNWQ2MS4uOGE5ZDk0YjFlZGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNTMsNiArNTMsOSBAQAogLyog R1VDOiBwZXJjZW50YWdlIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtIGZvciBDSUMgdmFsaWRhdGlv biB0dXBsZXN0b3JlICovCiBpbnQJCQlkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdCA9 IDEwOwogCisvKiBHVUM6IHJlZnJlc2ggc25hcHNob3QgZXZlcnkgTiBwYWdlcyBkdXJpbmcgQ0lD IHZhbGlkYXRpb24gKDAgPSBkaXNhYmxlKSAqLworaW50CQkJZGVidWdfY2ljX3ZhbGlkYXRlX3Nu YXBzaG90X3BhZ2VzID0gNDA5NjsKKwogc3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1 cGxlKEhlYXBUdXBsZSB0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgUmV3cml0ZVN0 YXRlIHJ3c3RhdGUpOwpAQCAtMTkyMiwyNCArMTkyNSwzNSBAQCBoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2 b2lkCitzdGF0aWMgVHJhbnNhY3Rpb25JZAogaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJ CQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAotCQkJCQkJICAgU25hcHNob3Qgc25hcHNob3Qs CiAJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJICAgVmFsaWRhdGVJ bmRleFN0YXRlICphdXhTdGF0ZSkKIHsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKKwogCURh dHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZ U107CiAKKwlTbmFwc2hvdAkJc25hcHNob3Q7CiAJVHVwbGVUYWJsZVNsb3QgICpzbG90OwogCUVT dGF0ZQkJCSplc3RhdGU7CiAJRXhwckNvbnRleHQJCSplY29udGV4dDsKIAlCdWZmZXJBY2Nlc3NT dHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwogCiAJ aW50NjQJCQludW1fdG9fY2hlY2s7CisJaW50NjQJCQlwYWdlX3JlYWRfY291bnRlciA9IDE7IC8q IHNldCB0byAxIHRvIHNraXAgc25hcHNob3QgcmVzZXQgYXQgc3RhcnQgKi8KIAlUdXBsZXN0b3Jl c3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CisKKwkvKgorCSAqIFVuZGVyIFJFUEVBVEFCTEUgUkVB RCBvciBTRVJJQUxJWkFCTEUgKHBvc3NpYmxlIHZpYQorCSAqIGRlZmF1bHRfdHJhbnNhY3Rpb25f aXNvbGF0aW9uKSwgR2V0TGF0ZXN0U25hcHNob3QoKSByZXR1cm5zIHRoZQorCSAqIHRyYW5zYWN0 aW9uLWxldmVsIHNuYXBzaG90IGFuZCB4bWluIHN0YXlzIHBpbm5lZC4gIFBlcmlvZGljIHNuYXBz aG90CisJICogcmVmcmVzaCBpcyBwb2ludGxlc3MgaW4gdGhhdCBjYXNlLCBzbyBza2lwIGl0Lgor CSAqLworCWJvb2wJCXJlc2V0X3NuYXBzaG90ID0gWGFjdElzb0xldmVsIDw9IFhBQ1RfUkVBRF9D T01NSVRURUQ7CiAJVmFsaWRhdGVJbmRleFNjYW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7 CiAKIAlCdWZmZXIgYnVmOwpAQCAtMTk0OSw2ICsxOTYzLDggQEAgaGVhcGFtX2luZGV4X3ZhbGlk YXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCS8qIFVzZSBhIHBlcmNlbnRhZ2Ugb2Yg bWFpbnRlbmFuY2Vfd29ya19tZW0gZm9yIHR1cGxlIHN0b3JlLiAqLwogCWludAkJc3RvcmVfd29y a19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtICogZGVidWdfY2ljX3ZhbGlkYXRlX3N0 b3JlX21lbV9wY3QgLyAxMDA7CiAKKwlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25T bmFwc2hvdCgpKTsKKwogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMgaW50OCB2YWx1ZXMgZm9yIHRo ZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCiAJICogaXRlbSBwb2ludGVycy4g IFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBwcmltYXJpbHkgYmVjYXVzZSBUSUQK QEAgLTE5NTcsNiArMTk3MywxMiBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJICovCiAJdHVwbGVzX2Zvcl9jaGVjayA9IHR1cGxlc3RvcmVfYmVn aW5fZGF0dW0oSU5UOE9JRCwgZmFsc2UsIGZhbHNlLCBzdG9yZV93b3JrX21lbV9wYXJ0KTsKIAor CVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCisJ QXNzZXJ0KCFyZXNldF9zbmFwc2hvdCB8fCAhSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90 KCkpOworCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15 UHJvYy0+eG1pbikpOworCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2tzCiAJICovCkBAIC0xOTcyLDYg KzE5OTQsMjkgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCiAJc3RhdGUtPnR1cGxlc29ydCA9IGF1eFN0YXRlLT50dXBsZXNvcnQgPSBOVUxMOwog CisJLyoKKwkgKiBOb3cgdGFrZSB0aGUgZmlyc3Qgc25hcHNob3QgdGhhdCB3aWxsIGJlIHVzZWQg dG8gZmlsdGVyIGNhbmRpZGF0ZQorCSAqIHR1cGxlcy4gV2UgYXJlIGdvaW5nIHRvIHJlcGxhY2Ug aXQgYnkgbmV3ZXIgc25hcHNob3QgZXZlcnkgc28gb2Z0ZW4KKwkgKiB0byBwcm9wYWdhdGUgaG9y aXpvbi4KKwkgKgorCSAqIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90cyBp biB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uCisJICogYXMgaW4tcHJvZ3Jlc3MgdGhh dCBvdXIgdGVtcG9yYXJ5IHNuYXBzaG90IHRyZWF0cyBhcyBjb21taXR0ZWQuCisJICoKKwkgKiBJ ZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uIGRlbGV0ZWQgdHVwbGVzIGlu IHRoZSB0YWJsZSwKKwkgKiB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGluZGV4OyB5 ZXQgdGhvc2UgdHJhbnNhY3Rpb25zIHdoaWNoCisJICogc2VlIHRoZSBkZWxldGluZyBvbmUgYXMg c3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbCBleHBlY3Qgc3VjaCB0dXBsZXMgdG8KKwkgKiBiZSB0aGVy ZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgorCSAqCisJICogV2Ugc29sdmUgdGhp cyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMgdG8gZXhpdCBiZWZv cmUKKwkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZCwgZm9yIHRoYXQgcmVhc29uIGxpbWl0 WG1pbiBpcyBzdXBwb3J0ZWQuCisJICoKKwkgKiBXZSBhbHNvIHNldCBBY3RpdmVTbmFwc2hvdCB0 byB0aGlzIHNuYXAsIHNpbmNlIGZ1bmN0aW9ucyBpbiBpbmRleGVzIG1heQorCSAqIG5lZWQgYSBz bmFwc2hvdC4KKwkgKi8KKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25h cHNob3QoKSk7CisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlsaW1pdFhtaW4gPSBz bmFwc2hvdC0+eG1pbjsKKwogCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKIAllY29u dGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKIAlzbG90ID0gTWFrZVNpbmds ZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaGVhcFJlbGF0aW9uKSwKQEAgLTIwMDUs NiArMjA1MCw3IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQlibG9ja19u dW1iZXIgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCQlwYWdlX3JlYWRfY291bnRlcisr OwogCiAJCWkgPSAwOwogCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNl dE51bWJlcikKQEAgLTIwNzUsNiArMjEyMSwyMSBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nh bihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCX0KIAogCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJ CWlmIChyZXNldF9zbmFwc2hvdCAmJgorCQkJZGVidWdfY2ljX3ZhbGlkYXRlX3NuYXBzaG90X3Bh Z2VzID4gMCAmJgorCQkJcGFnZV9yZWFkX2NvdW50ZXIgJSBkZWJ1Z19jaWNfdmFsaWRhdGVfc25h cHNob3RfcGFnZXMgPT0gMCkKKwkJeworCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJCVVucmVn aXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJCQkvKiB0byBtYWtlIHN1cmUgd2UgcHJvcGFnYXRl IHhtaW4gKi8KKwkJCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwkJCUFzc2VydCghVHJh bnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisKKwkJCXNuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChz bmFwc2hvdCk7CisJCQkvKiBBZHZhbmNlIGxpbWl0WG1pbiBzbyB3ZSB3YWl0IGZvciBhbGwgc25h cHNob3RzIHNlZW4gc28gZmFyICovCisJCQlsaW1pdFhtaW4gPSBUcmFuc2FjdGlvbklkTmV3ZXIo bGltaXRYbWluLCBzbmFwc2hvdC0+eG1pbik7CisJCX0KIAl9CiAKIAlFeGVjRHJvcFNpbmdsZVR1 cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjA4NCwxMSArMjE0NSwyMyBAQCBoZWFwYW1faW5kZXhf dmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJcmVhZF9zdHJlYW1fZW5kKHJl YWRfc3RyZWFtKTsKIAl0dXBsZXN0b3JlX2VuZCh0dXBsZXNfZm9yX2NoZWNrKTsKIAorCS8qCisJ ICogRHJvcCB0aGUgbGF0ZXN0IHNuYXBzaG90LiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3YWl0 aW5nIG91dCBvdGhlcgorCSAqIHNuYXBzaG90IGhvbGRlcnMsIGVsc2Ugd2Ugd2lsbCBkZWFkbG9j ayBhZ2FpbnN0IG90aGVyIHByb2Nlc3NlcyBhbHNvCisJICogZG9pbmcgQ1JFQVRFIElOREVYIENP TkNVUlJFTlRMWSwgd2hpY2ggd291bGQgc2VlIG91ciBzbmFwc2hvdCBhcyBvbmUKKwkgKiB0aGV5 IG11c3Qgd2FpdCBmb3IuCisJICovCisJUG9wQWN0aXZlU25hcHNob3QoKTsKKwlVbnJlZ2lzdGVy U25hcHNob3Qoc25hcHNob3QpOworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwlBc3Nl cnQoIXJlc2V0X3NuYXBzaG90IHx8IE15UHJvYy0+eG1pbiA9PSBJbnZhbGlkVHJhbnNhY3Rpb25J ZCk7CiAJRnJlZUFjY2Vzc1N0cmF0ZWd5KGJzdHJhdGVneSk7CiAKIAkvKiBUaGVzZSBtYXkgaGF2 ZSBiZWVuIHBvaW50aW5nIHRvIHRoZSBub3ctZ29uZSBlc3RhdGUgKi8KIAlpbmRleEluZm8tPmlp X0V4cHJlc3Npb25zU3RhdGUgPSBOSUw7CiAJaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9 IE5VTEw7CisKKwlyZXR1cm4gbGltaXRYbWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndmFjdXVtLmMKaW5kZXggYzQ2MWY4ZGMwMmQuLmVmMTkyZmI5OWMyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKQEAgLTE5MSwxNCArMTkxLDE2IEBAIHZhY3V1bUxl YWZQYWdlKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzLCBSZWxhdGlvbiBpbmRleCwgQnVmZmVyIGJ1 ZmZlciwKIAkJCSAqIEFkZCB0YXJnZXQgVElEIHRvIHBlbmRpbmcgbGlzdCBpZiB0aGUgcmVkaXJl Y3Rpb24gY291bGQgaGF2ZQogCQkJICogaGFwcGVuZWQgc2luY2UgVkFDVVVNIHN0YXJ0ZWQuICAo SWYgeGlkIGlzIGludmFsaWQsIGFzc3VtZSBpdAogCQkJICogbXVzdCBoYXZlIGhhcHBlbmVkIGJl Zm9yZSBWQUNVVU0gc3RhcnRlZCwgc2luY2UgUkVJTkRFWAotCQkJICogQ09OQ1VSUkVOVExZIGxv Y2tzIG91dCBWQUNVVU0uKQorCQkJICogQ09OQ1VSUkVOVExZIGxvY2tzIG91dCBWQUNVVU0sIGlm IG15WG1pbiBpcyBpbnZhbGlkIGl0IGlzCisJCQkgKiB2YWxpZGF0aW9uIHNjYW4uKQogCQkJICoK IAkJCSAqIE5vdGU6IHdlIGNvdWxkIG1ha2UgYSB0aWdodGVyIHRlc3QgYnkgc2VlaW5nIGlmIHRo ZSB4aWQgaXMKIAkJCSAqICJydW5uaW5nIiBhY2NvcmRpbmcgdG8gdGhlIGFjdGl2ZSBzbmFwc2hv dDsgYnV0IHNuYXBtZ3IuYwogCQkJICogZG9lc24ndCBjdXJyZW50bHkgZXhwb3J0IGEgc3VpdGFi bGUgQVBJLCBhbmQgaXQncyBub3QgZW50aXJlbHkKIAkJCSAqIGNsZWFyIHRoYXQgYSB0aWdodGVy IHRlc3QgaXMgd29ydGggdGhlIGN5Y2xlcyBhbnl3YXkuCiAJCQkgKi8KLQkJCWlmIChUcmFuc2Fj dGlvbklkRm9sbG93c09yRXF1YWxzKGR0LT54aWQsIGJkcy0+bXlYbWluKSkKKwkJCWlmICghVHJh bnNhY3Rpb25JZElzVmFsaWQoYmRzLT5teVhtaW4pIHx8CisJCQkJCVRyYW5zYWN0aW9uSWRGb2xs b3dzT3JFcXVhbHMoZHQtPnhpZCwgYmRzLT5teVhtaW4pKQogCQkJCXNwZ0FkZFBlbmRpbmdUSUQo YmRzLCAmZHQtPnBvaW50ZXIpOwogCQl9CiAJCWVsc2UKQEAgLTgwOCw3ICs4MTAsNiBAQCBzcGd2 YWN1dW1zY2FuKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzKQogCS8qIEZpbmlzaCBzZXR0aW5nIHVw IHNwZ0J1bGtEZWxldGVTdGF0ZSAqLwogCWluaXRTcEdpc3RTdGF0ZSgmYmRzLT5zcGdzdGF0ZSwg aW5kZXgpOwogCWJkcy0+cGVuZGluZ0xpc3QgPSBOVUxMOwotCWJkcy0+bXlYbWluID0gR2V0QWN0 aXZlU25hcHNob3QoKS0+eG1pbjsKIAliZHMtPmxhc3RGaWxsZWRCbG9jayA9IFNQR0lTVF9MQVNU X0ZJWEVEX0JMS05POwogCiAJLyoKQEAgLTk1OSw2ICs5NjAsMTAgQEAgc3BnYnVsa2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJYmRz LnN0YXRzID0gc3RhdHM7CiAJYmRzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJYmRzLmNhbGxiYWNr X3N0YXRlID0gY2FsbGJhY2tfc3RhdGU7CisJaWYgKGluZm8tPnZhbGlkYXRlX2luZGV4KQorCQli ZHMubXlYbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJZWxzZQorCQliZHMubXlYbWluID0g R2V0QWN0aXZlU25hcHNob3QoKS0+eG1pbjsKIAogCXNwZ3ZhY3V1bXNjYW4oJmJkcyk7CiAKQEAg LTk5OSw2ICsxMDA0LDcgQEAgc3BndmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8s IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpCiAJCWJkcy5zdGF0cyA9IHN0YXRzOwogCQli ZHMuY2FsbGJhY2sgPSBkdW1teV9jYWxsYmFjazsKIAkJYmRzLmNhbGxiYWNrX3N0YXRlID0gTlVM TDsKKwkJYmRzLm15WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90KCktPnhtaW47CiAKIAkJc3BndmFj dXVtc2NhbigmYmRzKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNGVkZjY4YWNlZDIuLjQ5YWRj YjE1MmNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9y YWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvZm1ncm9pZHMuaCIKQEAgLTM1MzgsOCArMzUzOSw5IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24o UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogaW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBp dC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNsZWFyICJpbmRpc3JlYWR5IiBmb3IKICAqIGF1eGls aWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8gbW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgog ICoKLSAqIFdlIHRoZW4gdGFrZSBhIG5ldyByZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMg dGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCi0gKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGlu IHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguCisgKiBXZSB0aGVuIHRha2Ug YSBuZXcgc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisgKiB0 byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0 aGUgaW5kZXguIEluCisgKiBvcmRlciB0byBwcm9wYWdhdGUgeG1pbiB3ZSByZXNldCB0aGF0IHNu YXBzaG90IGV2ZXJ5IHNvIG9mdGVuLgogICogKEFueSB0dXBsZXMgY29tbWl0dGVkIGxpdmUgYWZ0 ZXIgdGhlIHNuYXAgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZQogICogaW5kZXggYnkgdGhlaXIg b3JpZ2luYXRpbmcgdHJhbnNhY3Rpb24uICBBbnkgdHVwbGVzIGNvbW1pdHRlZCBkZWFkIGJlZm9y ZQogICogdGhlIHNuYXAgbmVlZCBub3QgYmUgaW5kZXhlZCwgYmVjYXVzZSB3ZSB3aWxsIHdhaXQg b3V0IGFsbCB0cmFuc2FjdGlvbnMKQEAgLTM1NTIsNyArMzU1NCw3IEBAIEluZGV4Q2hlY2tFeGNs dXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogVElEcyBvZiBib3RoIGF1eGlsaWFyeSBh bmQgdGFyZ2V0IGluZGV4ZXMsIGFuZCBkb2luZyBhICJtZXJnZSBqb2luIiBhZ2FpbnN0CiAgKiB0 aGUgVElEIGxpc3RzIHRvIHNlZSB3aGljaCB0dXBsZXMgZnJvbSBhdXhpbGlhcnkgaW5kZXggYXJl IG1pc3NpbmcgZnJvbSB0aGUKICAqIHRhcmdldCBpbmRleC4gIFRodXMgd2Ugd2lsbCBlbnN1cmUg dGhhdCBhbGwgdHVwbGVzIHZhbGlkIGFjY29yZGluZyB0byB0aGUKLSAqIHJlZmVyZW5jZSBzbmFw c2hvdCBhcmUgaW4gdGhlIGluZGV4LiBOb3RpY2Ugd2UgbmVlZCB0byBkbyBidWxrZGVsZXRlIGlu IHRoZQorICogbGF0ZXN0IHNuYXBzaG90IGFyZSBpbiB0aGUgaW5kZXguIE5vdGljZSB3ZSBuZWVk IHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCiAgKiBwYXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlhcnkg Zmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRoaXMg d2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRvIGluc2VydCBhCkBAIC0zNTY1LDIxICszNTY3 LDI0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICogYmVm b3JlIGl0IGRlY2xhcmVzIGEgdW5pcXVlbmVzcyBlcnJvci4KICAqCiAgKiBBZnRlciBjb21wbGV0 aW5nIHZhbGlkYXRlX2luZGV4KCksIHdlIHdhaXQgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyB0aGF0 Ci0gKiB3ZXJlIGFsaXZlIGF0IHRoZSB0aW1lIG9mIHRoZSByZWZlcmVuY2Ugc25hcHNob3QgYXJl IGdvbmU7IHRoaXMgaXMKLSAqIG5lY2Vzc2FyeSB0byBiZSBzdXJlIHRoZXJlIGFyZSBub25lIGxl ZnQgd2l0aCBhIHRyYW5zYWN0aW9uIHNuYXBzaG90Ci0gKiBvbGRlciB0aGFuIHRoZSByZWZlcmVu Y2UgKGFuZCBoZW5jZSBwb3NzaWJseSBhYmxlIHRvIHNlZSB0dXBsZXMgd2UgZGlkCi0gKiBub3Qg aW5kZXgpLiAgVGhlbiB3ZSBtYXJrIHRoZSBpbmRleCAiaW5kaXN2YWxpZCIgYW5kIGNvbW1pdC4g IFN1YnNlcXVlbnQKLSAqIHRyYW5zYWN0aW9ucyB3aWxsIGJlIGFibGUgdG8gdXNlIGl0IGZvciBx dWVyaWVzLgorICogd2VyZSBhbGl2ZSBhdCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNuYXBzaG90 IHVzZWQgZHVyaW5nIHZhbGlkYXRpb24gYXJlCisgKiBnb25lOyB0aGlzIGlzIG5lY2Vzc2FyeSB0 byBiZSBzdXJlIHRoZXJlIGFyZSBub25lIGxlZnQgd2l0aCBhIHRyYW5zYWN0aW9uCisgKiBzbmFw c2hvdCBvbGRlciB0aGFuIHRoYXQgKGFuZCBoZW5jZSBwb3NzaWJseSBhYmxlIHRvIHNlZSB0dXBs ZXMgd2UgZGlkCisgKiBub3QgaW5kZXgpLiAgVGhlIHNuYXBzaG90IGlzIHBlcmlvZGljYWxseSBy ZWZyZXNoZWQgZHVyaW5nIHRoZSBoZWFwIHNjYW4KKyAqIHRvIHByb3BhZ2F0ZSB0aGUgeG1pbiBo b3Jpem9uLCBzbyBsaW1pdFhtaW4gdHJhY2tzIHRoZSBtb3N0IHJlY2VudCBvbmUuCisgKiBUaGVu IHdlIG1hcmsgdGhlIGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudCB0 cmFuc2FjdGlvbnMKKyAqIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgog ICogQWxzbywgc29tZSBhY3Rpb25zIHRvIGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4aWxpYXJ5IGlu ZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8KLXZvaWQKLXZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQs IE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCitUcmFuc2Fj dGlvbklkCit2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eElu ZGV4SWQpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAogCQkJCWluZGV4UmVsYXRpb24sCiAJ CQkJYXV4SW5kZXhSZWxhdGlvbjsKIAlJbmRleEluZm8gICppbmRleEluZm87CisJVHJhbnNhY3Rp b25JZCBsaW1pdFhtaW47CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5mbywgYXV4aXZpbmZvOwogCVZh bGlkYXRlSW5kZXhTdGF0ZSBzdGF0ZSwgYXV4U3RhdGU7CiAJT2lkCQkJc2F2ZV91c2VyaWQ7CkBA IC0zNTkyLDYgKzM1OTcsMTYgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4 SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpbnQJCQltYWluX3dvcmtf bWVtX3BhcnQgPSAoaW50KSgoaW50NjQpIG1haW50ZW5hbmNlX3dvcmtfbWVtICogOCAvIDEwKTsK IAlpbnQJCQlhdXhfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAK KwkvKgorCSAqIFVuZGVyIFJFUEVBVEFCTEUgUkVBRCBvciBTRVJJQUxJWkFCTEUgKHBvc3NpYmxl IHZpYQorCSAqIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uKSwgR2V0TGF0ZXN0U25hcHNo b3QoKSByZXR1cm5zIHRoZQorCSAqIHRyYW5zYWN0aW9uLWxldmVsIHNuYXBzaG90IGFuZCB4bWlu IHN0YXlzIHBpbm5lZC4gIFBlcmlvZGljIHNuYXBzaG90CisJICogcmVmcmVzaCBpcyBwb2ludGxl c3MgaW4gdGhhdCBjYXNlLCBzbyBza2lwIGl0LgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKwlib29sCQlyZXNldF9zbmFwc2hvdCA9IFhhY3RJc29MZXZlbCA8PSBYQUNUX1JFQURf Q09NTUlUVEVEOworI2VuZGlmCisKIAl7CiAJCWNvbnN0IGludAlwcm9ncmVzc19pbmRleFtdID0g ewogCQkJUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLApAQCAtMzYyOSw4ICszNjQ0LDEyIEBAIHZh bGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25h cHNob3Qgc25hcHNob3QpCiAJICogRmV0Y2ggaW5mbyBuZWVkZWQgZm9yIGluZGV4X2luc2VydC4g IChZb3UgbWlnaHQgdGhpbmsgdGhpcyBzaG91bGQgYmUKIAkgKiBwYXNzZWQgaW4gZnJvbSBEZWZp bmVJbmRleCwgYnV0IGl0cyBjb3B5IGlzIGxvbmcgZ29uZSBkdWUgdG8gaGF2aW5nCiAJICogYmVl biBidWlsdCBpbiBhIHByZXZpb3VzIHRyYW5zYWN0aW9uLikKKwkgKgorCSAqIFdlIG1pZ2h0IG5l ZWQgc25hcHNob3QgZm9yIGluZGV4IGV4cHJlc3Npb25zIG9yIHByZWRpY2F0ZXMuCiAJICovCisJ UHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAJaW5kZXhJbmZv ID0gQnVpbGRJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CisJUG9wQWN0aXZlU25hcHNob3QoKTsK IAogCS8qIG1hcmsgYnVpbGQgaXMgY29uY3VycmVudCBqdXN0IGZvciBjb25zaXN0ZW5jeSAqLwog CWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CkBAIC0zNjY2LDYgKzM2ODUsOSBAQCB2 YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNu YXBzaG90IHNuYXBzaG90KQogCQkJCQkJCQkJCSAgIE5VTEwsIFRVUExFU09SVF9OT05FKTsKIAlh dXhTdGF0ZS5odHVwcyA9IGF1eFN0YXRlLml0dXBzID0gYXV4U3RhdGUudHVwc19pbnNlcnRlZCA9 IDA7CiAKKwkvKiB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFw c2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCSh2b2lkKSBpbmRleF9i dWxrX2RlbGV0ZSgmYXV4aXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9jYWxs YmFjaywgJmF1eFN0YXRlKTsKIAkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1heSBi ZSBza2lwcGVkICovCkBAIC0zNjg1LDcgKzM3MDcsMTMgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJ aW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAkJdGFibGVfY2xvc2UoaGVhcFJl bGF0aW9uLCBOb0xvY2spOwogCi0JCXJldHVybjsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CisJCWxpbWl0WG1pbiA9IEdldEFjdGl2ZVNuYXBzaG90KCkt PnhtaW47CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUludmFsaWRhdGVDYXRhbG9nU25hcHNo b3QoKTsKKworCQlBc3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8ICFUcmFuc2FjdGlvbklkSXNWYWxp ZChNeVByb2MtPnhtaW4pKTsKKwkJcmV0dXJuIGxpbWl0WG1pbjsKIAl9CiAKIAlzdGF0ZS50dXBs ZXNvcnQgPSB0dXBsZXNvcnRfYmVnaW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwK QEAgLTM2OTQsNiArMzcyMiw5IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRl eElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCQkJCQkJCQkJCU5VTEws IFRVUExFU09SVF9OT05FKTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVw c19pbnNlcnRlZCA9IDA7CiAKKwkvKiB0dXBsZXNvcnRfYmVnaW5fZGF0dW0gbWF5IHJlcXVpcmUg Y2F0YWxvZyBzbmFwc2hvdCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCS8q IGFtYnVsa2RlbGV0ZSB1cGRhdGVzIHByb2dyZXNzIG1ldHJpY3MgKi8KIAkodm9pZCkgaW5kZXhf YnVsa19kZWxldGUoJml2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJh Y2ssICZzdGF0ZSk7CkBAIC0zNzEzLDE5ICszNzQ0LDI0IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBo ZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJ CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oMywgcHJvZ3Jlc3NfaW5kZXgsIHBy b2dyZXNzX3ZhbHMpOwogCX0KIAl0dXBsZXNvcnRfcGVyZm9ybXNvcnQoc3RhdGUudHVwbGVzb3J0 KTsKKwkvKiB0dXBsZXNvcnRfcGVyZm9ybXNvcnQgbWF5IHJlcXVpcmUgY2F0YWxvZyBzbmFwc2hv dCAqLworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKKwogCXR1cGxlc29ydF9wZXJmb3Jt c29ydChhdXhTdGF0ZS50dXBsZXNvcnQpOworCS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkg cmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgp OworCUFzc2VydCghcmVzZXRfc25hcHNob3QgfHwgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJv Yy0+eG1pbikpOwogCiAJLyoKIAkgKiBOb3cgbWVyZ2UgYm90aCBpbmRleGVzCiAJICovCiAJcGdz dGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCiAJCQkJ CQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0UpOwotCXRhYmxl X2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgaW5kZXhSZWxhdGlv biwKLQkJCQkJCQkgIGluZGV4SW5mbywKLQkJCQkJCQkgIHNuYXBzaG90LAotCQkJCQkJCSAgJnN0 YXRlLAotCQkJCQkJCSAgJmF1eFN0YXRlKTsKKwlsaW1pdFhtaW4gPSB0YWJsZV9pbmRleF92YWxp ZGF0ZV9zY2FuKGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkgIGluZGV4UmVsYXRpb24sCisJCQkJ CQkJCQkJICBpbmRleEluZm8sCisJCQkJCQkJCQkJICAmc3RhdGUsCisJCQkJCQkJCQkJICAmYXV4 U3RhdGUpOwogCiAJLyogVHVwbGUgc29ydCBjbG9zZWQgYnkgdGFibGVfaW5kZXhfdmFsaWRhdGVf c2NhbiAqLwogCUFzc2VydChzdGF0ZS50dXBsZXNvcnQgPT0gTlVMTCAmJiBhdXhTdGF0ZS50dXBs ZXNvcnQgPT0gTlVMTCk7CkBAIC0zNzQ4LDYgKzM3ODQsOSBAQCB2YWxpZGF0ZV9pbmRleChPaWQg aGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQog CWluZGV4X2Nsb3NlKGF1eEluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJaW5kZXhfY2xvc2UoaW5k ZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAl0YWJsZV9jbG9zZShoZWFwUmVsYXRpb24sIE5vTG9jayk7 CisKKwlBc3NlcnQoIXJlc2V0X3NuYXBzaG90IHx8ICFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVBy b2MtPnhtaW4pKTsKKwlyZXR1cm4gbGltaXRYbWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYwppbmRleCA0NmM0Y2NjNjc4OS4uYTcwMDA2OGY4YTIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jCkBAIC01OTYsNyArNTk2LDYgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCUxvY2tSZWxJZAloZWFwcmVsaWQ7CiAJTE9DS1RBRwkJaGVhcGxvY2t0YWc7CiAJTE9D S01PREUJbG9ja21vZGU7Ci0JU25hcHNob3QJc25hcHNob3Q7CiAJT2lkCQkJcm9vdF9zYXZlX3Vz ZXJpZDsKIAlpbnQJCQlyb290X3NhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJcm9vdF9zYXZlX25l c3RsZXZlbDsKQEAgLTE4MTYsMzIgKzE4MTUsMTEgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCS8qIFRlbGwgY29uY3VycmVudCBpbmRleCBidWlsZHMgdG8gaWdub3JlIHVzLCBp ZiBpbmRleCBxdWFsaWZpZXMgKi8KIAlpZiAoc2FmZV9pbmRleCkKIAkJc2V0X2luZGV4c2FmZV9w cm9jZmxhZ3MoKTsKLQotCS8qCi0JICogTm93IHRha2UgdGhlICJyZWZlcmVuY2Ugc25hcHNob3Qi IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKLQkgKiB0byBmaWx0ZXIgY2Fu ZGlkYXRlIHR1cGxlcy4gIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90cyBp bgotCSAqIHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNhY3Rpb24gYXMgaW4tcHJvZ3Jlc3MgdGhh dCBvdXIgcmVmZXJlbmNlCi0JICogc25hcHNob3QgdHJlYXRzIGFzIGNvbW1pdHRlZC4gIElmIHN1 Y2ggYSByZWNlbnRseS1jb21taXR0ZWQgdHJhbnNhY3Rpb24KLQkgKiBkZWxldGVkIHR1cGxlcyBp biB0aGUgdGFibGUsIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHlldAot CSAqIHRob3NlIHRyYW5zYWN0aW9ucyB3aGljaCBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBzdGls bC1pbi1wcm9ncmVzcyB3aWxsCi0JICogZXhwZWN0IHN1Y2ggdHVwbGVzIHRvIGJlIHRoZXJlIG9u Y2Ugd2UgbWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCi0JICoKLQkgKiBXZSBzb2x2ZSB0aGlzIGJ5 IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdlcmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9yZQot CSAqIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICogV2UgYWxzbyBzZXQgQWN0 aXZlU25hcHNob3QgdG8gdGhpcyBzbmFwLCBzaW5jZSBmdW5jdGlvbnMgaW4gaW5kZXhlcyBtYXkK LQkgKiBuZWVkIGEgc25hcHNob3QuCi0JICovCi0Jc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90 KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90 KTsKIAkvKgogCSAqIE1lcmdlIGNvbnRlbnQgb2YgYXV4aWxpYXJ5IGFuZCB0YXJnZXQgaW5kZXhl cyAtIGluc2VydCBhbnkgbWlzc2luZyBpbmRleCBlbnRyaWVzLgogCSAqLwotCXZhbGlkYXRlX2lu ZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxhdGlvbklkLCBzbmFwc2hv dCk7Ci0JbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CisJbGltaXRYbWluID0gdmFsaWRhdGVf aW5kZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBhdXhJbmRleFJlbGF0aW9uSWQpOwogCi0J UG9wQWN0aXZlU25hcHNob3QoKTsKLQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwogCS8q CiAJICogVGhlIHNuYXBzaG90IHN1YnN5c3RlbSBjb3VsZCBzdGlsbCBjb250YWluIHJlZ2lzdGVy ZWQgc25hcHNob3RzIHRoYXQKIAkgKiBhcmUgaG9sZGluZyBiYWNrIG91ciBwcm9jZXNzJ3MgYWR2 ZXJ0aXNlZCB4bWluOyBpbiBwYXJ0aWN1bGFyLCBpZgpAQCAtMTg2Myw4ICsxODQxLDggQEAgRGVm aW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCS8qCiAJICogVGhlIGluZGV4IGlzIG5vdyB2 YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5CiAJICogaW50 ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxlcyBk ZWxldGVkIGp1c3QKLQkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0YWtlbiwgd2Ug aGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBoYXZlIG9s ZGVyIHNuYXBzaG90cy4KKwkgKiBiZWZvcmUgdGhlIGxhc3Qgc25hcHNob3QgZHVyaW5nIHZhbGlk YXRpbmcgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQKKwkgKiBvdXQgYW55IHRyYW5zYWN0aW9u cyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCSAqLwogCUlOSkVDVElPTl9QT0lO VCgiZGVmaW5lLWluZGV4LWJlZm9yZS1zZXQtdmFsaWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKQEAgLTQ0MzMsNyArNDQx MSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJewogCQlSZWluZGV4SW5kZXhJbmZvICpu ZXdpZHggPSBsZmlyc3QobGMpOwogCQlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKLQkJU25hcHNo b3QJc25hcHNob3Q7CiAKIAkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApAQCAtNDQ0OCwx MyArNDQyNSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWlmIChuZXdpZHgtPnNhZmUp CiAJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwogCi0JCS8qCi0JCSAqIFRha2UgdGhlICJy ZWZlcmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkK LQkJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuCi0JCSAqLwotCQlzbmFwc2hvdCA9IFJl Z2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQkJUHVzaEFjdGl2ZVNu YXBzaG90KHNuYXBzaG90KTsKLQogCQkvKgogCQkgKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIHRoZSBp bmRleCB0byBidWlsZCwgd2l0aCB0aGUgY29ycmVjdCBwYXJlbnQKIAkJICogdGFibGUgaW52b2x2 ZWQuCkBAIC00NDY2LDE2ICs0NDM2LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNv bnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJcHJv Z3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9t dWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAKLQkJdmFsaWRh dGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5ld2lkeC0+YXV4SW5k ZXhJZCwgc25hcHNob3QpOwotCi0JCS8qCi0JCSAqIFdlIGNhbiBub3cgZG8gYXdheSB3aXRoIG91 ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQotCQkgKiB0aGUgeG1pbiBs aW1pdCB0byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCi0JCSAqLwotCQlsaW1pdFhtaW4gPSBz bmFwc2hvdC0+eG1pbjsKLQotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCQlVbnJlZ2lzdGVyU25h cHNob3Qoc25hcHNob3QpOworCQlsaW1pdFhtaW4gPSB2YWxpZGF0ZV9pbmRleChuZXdpZHgtPnRh YmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKIAogCQkvKgogCQkg KiBUbyBlbnN1cmUgbm8gZGVhZGxvY2tzLCB3ZSBtdXN0IGNvbW1pdCBhbmQgc3RhcnQgeWV0IGFu b3RoZXIKQEAgLTQ0ODUsMTAgKzQ0NDYsMTMgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7 CiAKKwkJLyogV2Ugc2hvdWxkIG5vdyBkZWZpbml0ZWx5IG5vdCBiZSBhZHZlcnRpc2luZyBhbnkg eG1pbi4gKi8KKwkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsK KwogCQkvKgogCQkgKiBUaGUgaW5kZXggaXMgbm93IHZhbGlkIGluIHRoZSBzZW5zZSB0aGF0IGl0 IGNvbnRhaW5zIGFsbCBjdXJyZW50bHkKIAkJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNp bmNlIGl0IG1pZ2h0IG5vdCBjb250YWluIHR1cGxlcyBkZWxldGVkCi0JCSAqIGp1c3QgYmVmb3Jl IHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CisJ CSAqIGp1c3QgYmVmb3JlIHRoZSBsYXRlc3Qgc25hcCB3YXMgdGFrZW4sIHdlIGhhdmUgdG8gd2Fp dCBvdXQgYW55CiAJCSAqIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNo b3RzLgogCQkgKgogCQkgKiBCZWNhdXNlIHdlIGRvbid0IHRha2UgYSBzbmFwc2hvdCBvciBYaWQg aW4gdGhpcyB0cmFuc2FjdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVy cy5kYXQKaW5kZXggNGY4NzYxZGU2YjkuLmM1NjZiNjA0MGM5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtNjMyLDYgKzYzMiwxNSBAQAogICBib290X3Zh bCA9PiAnREVGQVVMVF9BU1NFUlRfRU5BQkxFRCcsCiB9LAogCit7IG5hbWUgPT4gJ2RlYnVnX2Np Y192YWxpZGF0ZV9zbmFwc2hvdF9wYWdlcycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BH Q19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKKyAgc2hvcnRfZGVzYyA9 PiAnUmVmcmVzaCBzbmFwc2hvdCBldmVyeSBOIHBhZ2VzIGR1cmluZyBDSUMgdmFsaWRhdGlvbiAo MCB0byBkaXNhYmxlKS4nLAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJp YWJsZSA9PiAnZGVidWdfY2ljX3ZhbGlkYXRlX3NuYXBzaG90X3BhZ2VzJywKKyAgYm9vdF92YWwg PT4gJzQwOTYnLAorICBtaW4gPT4gJzAnLAorICBtYXggPT4gJzEwMDAwMDAnLAorfSwKKwogeyBu YW1lID0+ICdkZWJ1Z19jaWNfdmFsaWRhdGVfc3RvcmVfbWVtX3BjdCcsIHR5cGUgPT4gJ2ludCcs IGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywK ICAgc2hvcnRfZGVzYyA9PiAnUGVyY2VudGFnZSBvZiBtYWludGVuYW5jZV93b3JrX21lbSB1c2Vk IGZvciBDSUMgdmFsaWRhdGlvbiB0dXBsZXN0b3JlLicsCiAgIGZsYWdzID0+ICdHVUNfTk9UX0lO X1NBTVBMRScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBmYWZjYTkzMGFhZS4uMDMzMjM3YTljZTQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzM0LDEyICs3MzQsMTEgQEAgdHlwZWRlZiBzdHJ1Y3Qg VGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCQkgICBUYWJsZVNjYW5EZXNjIHNjYW4pOwogCiAJLyog c2VlIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gZm9yIHJlZmVyZW5jZSBhYm91dCBwYXJhbWV0 ZXJzICovCi0Jdm9pZAkJKCppbmRleF92YWxpZGF0ZV9zY2FuKSAoUmVsYXRpb24gdGFibGVfcmVs LAotCQkJCQkJCQkJCVJlbGF0aW9uIGluZGV4X3JlbCwKLQkJCQkJCQkJCQlJbmRleEluZm8gKmlu ZGV4X2luZm8sCi0JCQkJCQkJCQkJU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJVmFsaWRh dGVJbmRleFN0YXRlICpzdGF0ZSwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKmF1eF9z dGF0ZSk7CisJVHJhbnNhY3Rpb25JZAkJKCppbmRleF92YWxpZGF0ZV9zY2FuKSAoUmVsYXRpb24g dGFibGVfcmVsLAorCQkJCQkJCQkJCQkJUmVsYXRpb24gaW5kZXhfcmVsLAorCQkJCQkJCQkJCQkJ SW5kZXhJbmZvICppbmRleF9pbmZvLAorCQkJCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICpz dGF0ZSwKKwkJCQkJCQkJCQkJCVZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAogCiAJ LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODk3LDIwICsxODk2LDE4IEBAIHRhYmxlX2luZGV4X2J1 aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogICogTm90ZTogaXQgaXMgcmVzcG9u c2liaWxpdHkgb2YgdGhhdCBmdW5jdGlvbiB0byBjbG9zZSBzb3J0c3RhdGVzIGluCiAgKiBib3Ro IGBzdGF0ZWAgYW5kIGBhdXhzdGF0ZWAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGlj IGlubGluZSBUcmFuc2FjdGlvbklkCiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9u IHRhYmxlX3JlbCwKIAkJCQkJCSAgUmVsYXRpb24gaW5kZXhfcmVsLAogCQkJCQkJICBJbmRleElu Zm8gKmluZGV4X2luZm8sCi0JCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJICBWYWxp ZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJICBWYWxpZGF0ZUluZGV4U3RhdGUgKmF1eHN0 YXRlKQogewotCXRhYmxlX3JlbC0+cmRfdGFibGVhbS0+aW5kZXhfdmFsaWRhdGVfc2Nhbih0YWJs ZV9yZWwsCi0JCQkJCQkJCQkJCSAgIGluZGV4X3JlbCwKLQkJCQkJCQkJCQkJICAgaW5kZXhfaW5m bywKLQkJCQkJCQkJCQkJICAgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAgIHN0YXRlLAotCQkJCQkJ CQkJCQkgICBhdXhzdGF0ZSk7CisJcmV0dXJuIHRhYmxlX3JlbC0+cmRfdGFibGVhbS0+aW5kZXhf dmFsaWRhdGVfc2Nhbih0YWJsZV9yZWwsCisJCQkJCQkJCQkJCQkJICBpbmRleF9yZWwsCisJCQkJ CQkJCQkJCQkJICBpbmRleF9pbmZvLAorCQkJCQkJCQkJCQkJCSAgc3RhdGUsCisJCQkJCQkJCQkJ CQkJICBhdXhzdGF0ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Ry YW5zYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKaW5kZXggNTVhNGFiMjZiMzQu LjkyM2FhZGJhYjQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKQEAgLTQxNSw2ICs0MTUsMjEgQEAgTm9y bWFsVHJhbnNhY3Rpb25JZE9sZGVyKFRyYW5zYWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25JZCBiKQog CXJldHVybiBiOwogfQogCisvKiByZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICovCitz dGF0aWMgaW5saW5lIFRyYW5zYWN0aW9uSWQKK1RyYW5zYWN0aW9uSWROZXdlcihUcmFuc2FjdGlv bklkIGEsIFRyYW5zYWN0aW9uSWQgYikKK3sKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGEp KQorCQlyZXR1cm4gYjsKKworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoYikpCisJCXJldHVy biBhOworCisJaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzKGEsIGIpKQorCQlyZXR1cm4gYTsKKwly ZXR1cm4gYjsKK30KKwogLyogcmV0dXJuIHRoZSBuZXdlciBvZiB0aGUgdHdvIElEcyAqLwogc3Rh dGljIGlubGluZSBGdWxsVHJhbnNhY3Rpb25JZAogRnVsbFRyYW5zYWN0aW9uSWROZXdlcihGdWxs VHJhbnNhY3Rpb25JZCBhLCBGdWxsVHJhbnNhY3Rpb25JZCBiKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmluZGV4 IDMyMzllNWM3MTZmLi5kZWY3MzUyYTg1OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9pbmRleC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApAQCAtMTU5LDcgKzE1 OSw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2J1aWxkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ CQkJCWJvb2wgcGFyYWxsZWwsCiAJCQkJCQlib29sIHByb2dyZXNzKTsKIAotZXh0ZXJuIHZvaWQg dmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBT bmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9pbmRleChP aWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4gdm9pZCBp bmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBh Y3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCmluZGV4IDdlYTY0M2I3ZjgwLi44YjNlN2IyMWRhMSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK QEAgLTI2OSw2ICsyNjksNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IHdvcmtfbWVtOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBoYXNoX21lbV9tdWx0aXBsaWVyOwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYWludGVuYW5jZV93b3JrX21lbTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQg ZGVidWdfY2ljX3ZhbGlkYXRlX3N0b3JlX21lbV9wY3Q7CitleHRlcm4gUEdETExJTVBPUlQgaW50 IGRlYnVnX2NpY192YWxpZGF0ZV9zbmFwc2hvdF9wYWdlczsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnM7CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggMmQ2YWJiMTVhODkuLjc1OGM1ODg0 ZmY1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0z MzgyLDYgKzMzODIsOSBAQCBEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OwogLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCiAgYzEgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCiAKK1NFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX2lz b2xhdGlvbiA9ICdyZXBlYXRhYmxlIHJlYWQnOworQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworU0VUIGRlZmF1bHRfdHJhbnNh Y3Rpb25faXNvbGF0aW9uID0gJ3JlYWQgY29tbWl0dGVkJzsKIERST1AgVEFCTEUgYXV4X2luZGV4 X3RhYjU7CiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMgYW5k IHByZWRpY2F0ZXMuICBUaGUKIC0tIGRlZmluaXRpb25zIG9mIHRoZSByZWJ1aWx0IGluZGV4ZXMg c2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5z cWwKaW5kZXggZmQ5NmQ4MGFiYmMuLjY1ZGQ1OGI5NDdkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9pbmRleC5zcWwKQEAgLTE0MDAsNiArMTQwMCwxMCBAQCBEUk9QIElOREVYIGF1eF9pbmRl eF9pbmQ2OwogLS0gTWFrZSBzdXJlIGF1eGlsaWFyeSBpbmRleCBkcm9wcGVkIHRvbwogXGQgYXV4 X2luZGV4X3RhYjUKIAorU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uID0gJ3JlcGVh dGFibGUgcmVhZCc7CitDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9O IGF1eF9pbmRleF90YWI1IChjMSk7CitTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24g PSAncmVhZCBjb21taXR0ZWQnOworCiBEUk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogCiAtLSBD aGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMu ICBUaGUKLS0gCjIuNDMuMAoK --00000000000011d953064ecebe56--