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 1w7d4R-005Xfz-1t for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 17:40:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7d4Q-00BlJE-0G for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 17:40:06 +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 1w7d4O-00BlIx-2L for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 17:40:05 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7d4K-00000002D9F-1WYa for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 17:40:04 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4852c9b4158so48254465e9.0 for ; Tue, 31 Mar 2026 10:40:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774978799; cv=none; d=google.com; s=arc-20240605; b=N3U4mDJkW7/UZnfA2jPF0Ri6mzurBatXJwM1pAePSfjY0nYPGJ5aJai/isA392dfEv 4WjoLQ8ffXydtfhjFnlZEfJiMMKfxb/vsD/keTJk8V7zIIJIlphkjRPz77Po0k0XSs4p oxGshXcY5s77t9ieLjzT15HANZ9shsNzYERQzFCSsMZfFrXmo4cYsgt4IA1zenyGOHwA nX/zvZQFmK774/yQKx5Bu0LTtJPcHRMou5xrwtcz5gTKfB6+vURUo93pzIJUQclazxC4 o+mPGui2WFEz4Os0KgyYgBQR+xXinpRt7vt272uKk0IzCgzhnf4nTW6+lejaHyxPJc5T mCuw== 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=UJkdnmHVZuQj8sQJ/ZsWIkjTgajzoC6/9Y55k3gUbOA=; fh=dFlJ2bgx3xGo83cRZdsCczXmdKRImOG3qpw/kF0zdak=; b=a0xVn0GbQ7aFSchKtJ/Ko5Lm1RCmI2pmwmN3BN3MKC/S+s5EL/pHax4RvhjJHFrAym 4180Je5wCMiUFWZbKrXvWjFkvf4iJ2wznwN3KSpUB6a81VBiyigJ0eAuIrF6OiuWWZoy Dc1CePDRoLOglyrb7jwmEL1K5siKe1Vpp+NuQvZL7xA8/1HZ54bxr/4kjJWvE0bse7wT vwFcHjoQSlZ+5SdxuJoazyCG0i+9WPIPTuQbrlB//FIquUOCZy3c5rS546MYJkBQskid YgZt1D11Gp6ohFhAn+MZzJi5vOG3CIr4/W5UUnqVjFHonTYbM29VSrVU+ukm72ND/ggm oLpw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1774978799; x=1775583599; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=UJkdnmHVZuQj8sQJ/ZsWIkjTgajzoC6/9Y55k3gUbOA=; b=fIRXS7UW3pIclM0KfaJ/qY6oZ7kEgaYDKh9nSJ280zpFVm08DkHfQcAIXVKZEA6kB4 WNUVbSdyKDbcGasLXEhhNiVxOXD9VEaI+NfFTjyz/5NAlDdkO3p/Xs0Mz+T6O6D1iSlp d1ZV5WvpkZ984AZ4GW1MYiFyg0k/lBkpcGbQ4LQ13up4iTyeIFaoW6Po4UFHYeWJBhqR TtkoFls8lJzyepPz1jzSkfucLoRf8Rnab2iYWv1R8JzIU5o6JE3CYynyNi4ijcsa4uid dinWSjJNJUJ2UcTz84SbCYS8gQUDhB+v0n4cjEc2QTpgoCi9MoAJ4oOCVgodBmIjawYQ 6AWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774978799; x=1775583599; 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=UJkdnmHVZuQj8sQJ/ZsWIkjTgajzoC6/9Y55k3gUbOA=; b=jfDENNO2WyGm1J2BVBsDcIwa5AzekpSM1TbU/LXZJYAtZr9fIweYSIEZMbBKVjE/q0 gohm0Ci2UU33cHlftctctHCqPBfJDOgt23BNf9Htg32d5T4rgCpjMGv4RNuBRyhLlYcl 9eniuMcD88xMNVRsGjnKed5FCUy+Iz9eUA+zU9NytiM+RYxvloxPtHsd27BfaIA+zMnV SvfSU7JVRnDtAk2W1cxAUsU3k+2kaeh94YEpCfdYYA7QVjx++9+moWe2Hi/4DcH/kZY2 uuMk2YoEwu46YTlmK35NmhYSJoWZoWsuI8A9CmV8NNIM8jphaLeS+oDNMc9gASfmQn8c cZuA== X-Forwarded-Encrypted: i=1; AJvYcCXavpWoJl80vz75N15m1XkTkWYOeMJPgq+tTUsloQ+JdMLMJm/XsZVMR37QbdxZfYy5J4SEehWpxFr/iyZD@lists.postgresql.org X-Gm-Message-State: AOJu0Ywt8ajEol0qfRix6RD1JIdWsTXTpQYygfMziOOodjS8mQCE5Bh9 vZRwjRloLLBzu3I1R3PUI3DSfQq3g3cAI99FVXLlRY1G8gOa7Bm3YZmxqm+oY90A+pYtfWZ2bto i3qKxwwQ0QoiWSndPuKf+aY4/ZV0QVBFhEynX0gRPHQ== X-Gm-Gg: ATEYQzzVPGZtIrvkvZyztY3uN+ZPZKI1O7+a5IIo+i7+RhnYgz5hA8R1uJnjsydSAHk eBaSm6S53uFZpaH1Jcxd4uG74FGRFAxnbj84jkgvqdVbOFiIjnthxroXvbAuemcT4nkq7UTMICl tqrj0UfhlvN16ETvPiTCmwjucwvJ4z4unDbsMCsUVYS2Npy3xq8Z8f6LhVWf7Gg34t0nj9QVcp5 EmPJoFxU0e45ChWKiwyRnf8U4tplyxgz0UN2eyYiiQ+YReChSqqcwYuSNVZFAV0uy6LelrWtM5L 86bpVoL7qhbl9CCHZmqmVKexq824T+vJoYpjp3cI78A7f5vWMmEiuw== X-Received: by 2002:a05:600c:4748:b0:485:303b:c50a with SMTP id 5b1f17b1804b1-48883566dc3mr4538285e9.13.1774978798950; Tue, 31 Mar 2026 10:39:58 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Tue, 31 Mar 2026 13:39:30 -0400 X-Gm-Features: AQROBzClmCZwj3-ozG6To7w1FDHhx0Vjj8f3Ac96jnDlq1vz8bv9L1QSNbZ9Cpk Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000cbf586064e5574cb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cbf586064e5574cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 27, 2026 at 8:35=E2=80=AFPM Peter Geoghegan wrote: > Attached is v18, which addresses the tricky issues I skipped in v17. v19 is attached. It contains a few notable improvements over v18: * The first commit (the one that simply moves code into the new heapam_indexscan.c file) now moves heap_hot_search_buffer over there as well. Andres suggested this at one point, and I believe it wins us a small but significant performance benefit. > * The "Add UnlockBufferGetLSN utility function" commit now uses an > atomic operation (in the common case where it actually drops the index > page's pin), just like UnlockReleaseBuffer itself following Andres' > commit f39cb8c011062d65e146c1e9d1aae221e96d8320 from today. * v19 removes the "Add UnlockBufferGetLSN utility function" patch entirely. Following Andres' commit f39cb8c0, this no longer seemed to help performance (compared to just calling BufferGetLSNAtomic and UnlockReleaseBuffer directly), so I removed it. > I believe I have now acted on all of Andres' feedback, with one minor > exception: Andres disliked how we use 'if (scan->xs_heapfetch)' to > determine whether to use the scan's batch cache (we don't want to use > it at all if the scan is ending). I just ran out of steam, so this > version doesn't address the problem. * v19 fixes this by adding a new helper function. This allows us to pass down the required context (whether the scan is ending) to inform the relevant batch recycling code whether it really should place its caller's batch in the scan's cache (or whether it should just pfree it right away). As in previous versions, I'm including several extra read stream patches to address various problems in that area. These problems, tied to how index prefetching stresses the read stream that are new and not encountered by existing read stream users. Andres wrote all of these patches. Those aspects of the patch should be discussed on a new thread dedicated to index prefetching-related read stream enhancements: https://postgr.es/m/f3xxfrkafjxpyqxywcxricxgyizjirfceychyxsgn= 7bwjp5eda@kwbduhy7tfmu (Though I'm also carrying some extra bug fix patches here, not included on that other thread, to address preexisting read stream bugs, albeit bugs highly unlikely to affect current read stream users.) -- Peter Geoghegan --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0014-read_stream-Only-increase-distance-when-waiting-.patch" Content-Disposition: attachment; filename="v19-0014-read_stream-Only-increase-distance-when-waiting-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7b4 RnJvbSA4ZTg5NDdhZDAyODRiNmQ4MDlkMGE4MzAzOGNlN2FkODcxZmQ3OWM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDE0 LzE4XSByZWFkX3N0cmVhbTogT25seSBpbmNyZWFzZSBkaXN0YW5jZSB3aGVuIHdhaXRpbmcKIGZv ciBJTwoKVGhpcyBhdm9pZHMgaW5jcmVhc2luZyB0aGUgZGlzdGFuY2UgdG8gdGhlIG1heGltdW0g aW4gY2FzZXMgd2hlcmUgdGhlIElPCnN1YnN5c3RlbSBpcyBhbHJlYWR5IGtlZXBpbmcgdXAuIFRo aXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IKcGVyZm9ybWFuY2UgZm9yIHR3byByZWFz b25zOgoKLSBQaW5uaW5nIGEgbG90IG9mIGJ1ZmZlcnMgaXMgbm90IGNoZWFwLiBJZiBhZGRpdGlv bmFsIHBpbnMgYWxsb3cgdXMgdG8gYXZvaWQKICBJTyB3YWl0cywgaXQncyBkZWZpbml0ZWx5IHdv cnRoIGl0LCBidXQgaWYgd2UgY2FuIGFscmVhZHkgZG8gYWxsIHRoZQogIG5lY2Vzc2FyeSByZWFk YWhlYWQgYXQgYSBkaXN0YW5jZSBvZiAxNiwgcmVhZGluZyBhaGVhZCA1MTIgYnVmZmVycyBjYW4K ICBpbmNyZWFzZSB0aGUgQ1BVIG92ZXJoZWFkIHN1YnN0YW50aWFsbHkuICBUaGlzIGlzIHBhcnRp Y3VsYXJseSBub3RpY2VhYmxlCiAgd2hlbiB0aGUgdG8tYmUtcmVhZCBibG9ja3MgYXJlIGFscmVh ZHkgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLgoKLSBJZiB0aGUgcmVhZCBzdHJlYW0gaXMgcmVh ZCB0byBjb21wbGV0aW9uLCByZWFkaW5nIGluIGRhdGEgZWFybGllciB0aGFuCiAgbmVlZGVkIGlz IG9mIGxpbWl0ZWQgY29uc2VxdWVuY2VzLCBsZWF2aW5nIGFzaWRlIHRoZSBDUFUgY29zdHMgbWVu dGlvbmVkCiAgYWJvdmUuIEJ1dCBpZiB0aGUgcmVhZCBzdHJlYW0gd2lsbCBub3QgYmUgZnVsbHkg Y29uc3VtZWQsIGUuZy4gYmVjYXVzZSBpdCBpcwogIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVz dGVkIGxvb3Agam9pbiwgdGhlIGFkZGl0aW9uYWwgSU8gY2FuIGJlIGEgc2VyaW91cwogIHBlcmZv cm1hbmNlIGlzc3VlLiBUaGlzIGlzIG5vdCB0aGF0IGNvbW1vbmx5IGEgcHJvYmxlbSBmb3IgY3Vy cmVudCByZWFkCiAgc3RyZWFtIHVzZXJzLCBidXQgdGhlIHVwY29taW5nIHdvcmssIHRvIHVzZSBh IHJlYWQgc3RyZWFtIHRvIGZldGNoIHRhYmxlCiAgcGFnZXMgYXMgcGFydCBvZiBhbiBpbmRleCBz Y2FuLCBmcmVxdWVudGx5IGVuY291bnRlcnMgdGhpcy4KCk5vdGUgdGhhdCB0aGlzIGNvbW1pdCB3 b3VsZCBoYXZlIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIGRvd25zaWRlcyB3aXRob3V0CmVhcmxp ZXIgY29tbWl0cy4gSW4gcGFydGljdWxhciB0aGUgZWFybGllciBjb21taXQgdG8gYXZvaWQgZGVj cmVhc2luZyB0aGUKcmVhZGFoZWFkIGRpc3RhbmNlIHdoZW4gdGhlcmUgd2FzIHJlY2VudCBJTyBp cyBjcnVjaWFsLCBhcyBvdGhlcndpc2Ugd2UgdmVyeQpvZnRlbiB3b3VsZCBlbmQgdXAgbm90IHJl YWRpbmcgYWhlYWQgYWdncmVzc2l2ZWx5IGVub3VnaCBhbnltb3JlIHdpdGggdGhpcwpjb21taXQs IGR1ZSB0byBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSBsZXNzIG9mdGVuLgoKQXV0aG9yOgpSZXZp ZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgfCAzOSArKysrKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGZhMjdlYzc5 Mi4uNDk5NzE4MzNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk1 MiwyMiArOTUyLDUxIEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCWludDE2CQlpb19pbmRleCA9IHN0cmVh bS0+b2xkZXN0X2lvX2luZGV4OwogCQlpbnQzMgkJZGlzdGFuY2U7CS8qIHdpZGVyIHRlbXBvcmFy eSB2YWx1ZSwgY2xhbXBlZCBiZWxvdyAqLworCQlib29sCQluZWVkZWRfd2FpdDsKIAogCQkvKiBT YW5pdHkgY2hlY2sgdGhhdCB3ZSBzdGlsbCBhZ3JlZSBvbiB0aGUgYnVmZmVycy4gKi8KIAkJQXNz ZXJ0KHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5i dWZmZXJzW29sZGVzdF9idWZmZXJfaW5kZXhdKTsKIAotCQlXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVh bS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOwogCiAJCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA+IDApOwogCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcy0tOwogCQlpZiAoKytzdHJlYW0t Pm9sZGVzdF9pb19pbmRleCA9PSBzdHJlYW0tPm1heF9pb3MpCiAJCQlzdHJlYW0tPm9sZGVzdF9p b19pbmRleCA9IDA7CiAKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5 IGFmdGVyIHdlIGRvIEkvTy4gKi8KLQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsK LQkJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIHN0cmVhbS0+bWF4X3Bpbm5lZF9idWZmZXJzKTsK LQkJc3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkvKgorCQkgKiBJZiB0aGUgSU8gd2Fz IGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIHdlIHdpbGwgbmV2ZXIgc2VlCisJCSAqIFdhaXRSZWFk QnVmZmVycygpIGJsb2NrLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIHdoZW4KKwkJICog ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAgaXMgdXNlZCwgYXMgYWxsIElPIHdpbGwgYmUKKwkJ ICogc3luY2hyb25vdXMuIFdpdGhvdXQgdHJlYXRpbmcgc3luY2hyb25vdXMgSU8gYXMgaGF2aW5n IHdhaXRlZCwgd2UnZAorCQkgKiBuZXZlciBhbGxvdyB0aGUgZGlzdGFuY2UgdG8gZ2V0IGxhcmdl IGVub3VnaCB0byBhbGxvdyBmb3IgSU8KKwkJICogY29tYmluaW5nLCByZXN1bHRpbmcgaW4gYmFk IHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mbGFn cyAmIFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKQorCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwor CisJCS8qCisJCSAqIEhhdmUgdGhlIGxvb2stYWhlYWQgZGlzdGFuY2UgcmFtcCB1cCByYXBpZGx5 IGFmdGVyIHdlIG5lZWRlZCB0bworCQkgKiB3YWl0IGZvciBJTy4gV2Ugb25seSBpbmNyZWFzZSB0 aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwKKwkJICogdG8gYXZvaWQgaW5jcmVh c2luZyB0aGUgZGlzdGFuY2UgZnVydGhlciB0aGFuIG5lY2Vzc2FyeSwgYXMgbG9va2luZworCQkg KiBhaGVhZCB0b28gZmFyIGNhbiBiZSBjb3N0bHksIGJvdGggZHVlIHRvIHRoZSBjb3N0IG9mIHVu bmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1ZmZlcnMgYW5kIGR1ZSB0byBkb2luZyBJ T3MgdGhhdCBtYXkgbmV2ZXIgYmUKKwkJICogY29uc3VtZWQgaWYgdGhlIHN0cmVhbSBpcyBlbmRl ZC9yZXNldCBiZWZvcmUgY29tcGxldGlvbi4KKwkJICoKKwkJICogSWYgd2UgZGlkIG5vdCBuZWVk IHRvIHdhaXQsIHRoZSBjdXJyZW50IGRpc3RhbmNlIHdhcyBldmlkZW50bHkKKwkJICogc3VmZmlj aWVudC4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIGlmIHdl IGFscmVhZHkgcmVhY2hlZCB0aGUgZW5kIG9mCisJCSAqIHRoZSBzdHJlYW0sIGFzIHN0cmVhbS0+ ZGlzdGFuY2UgPT0gMCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogaGF2aW5nIHJlYWNo ZWQgdGhlIGVuZC4KKwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMCAmJiBuZWVkZWRf d2FpdCkKKwkJeworCQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsKKwkJCWRpc3Rh bmNlID0gTWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJl YW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCX0KIAogCQkvKgogCQkgKiBBcyB3ZSBuZWVkZWQg SU8sIHByZXZlbnQgZGlzdGFuY2UgZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKLS0gCjIu NTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0017-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v19-0017-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w751 RnJvbSBmNTAzZjAwNmU1YTQ2Zjg0YTJlMTQxYmRiOTg5OGUyMmU0NjEwZThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAx Ny8xOF0gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzAu LmRlZWM4M2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTQsNiArMjE0 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggNDllYjY3N2FkLi42OWMxMmU4ZjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01NzEsNiArNTcxLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MTAsMjMgKzYyMCwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTExODQsNiArMTIwOSwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjAuLmMyMDk1ZWY3NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xODQsNiArMTg0LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQpCiAK IAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lvcywg MCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOworCQlD b25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgmYnMt PmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4 IDZiZTgwZDJkYS4uOTQ3MTM1YTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk3LDYgKzE5Nyw3IEBAIEFCSV9jb21wYXRpYmls aXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBMRVRJ T04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9fSU9f U1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJT19J T19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5nLiIK IEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEgaW9f dXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byByZWFk IGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0015-Hacky-implementation-of-making-read_stream_reset.patch" Content-Disposition: attachment; filename="v19-0015-Hacky-implementation-of-making-read_stream_reset.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w793 RnJvbSBjNjQzMTkwZDFmYWFjYTg3ZDllODkxNzI1MmFmOWM4NzY4NmI3ZmEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAx NS8xOF0gSGFja3kgaW1wbGVtZW50YXRpb24gb2YgbWFraW5nCiByZWFkX3N0cmVhbV9yZXNldCgp L2VuZCgpIG5vdCB3YWl0IGZvciBJTwoKTm90IHdhaXRpbmcgZm9yIElPIGR1cmluZyByZWFkX3N0 cmVhbV9yZXNldCgpIGNhbiBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlCmluIGNhc2VzIHdo ZXJlIHJlYWQgc3RyZWFtcyBhcmUgZnJlcXVlbnRseSByZXNldCBiZWZvcmUgdGhlIGVuZCBpcwpy ZWFjaGVkLiBDdXJyZW50IHVzZXJzIGRvIG5vdCBjb21tb25seSBkbyB0aGF0LCBidXQgdGhlIHVw Y29taW5nIHdvcmsgdG8gdXNlIGEKcmVhZCBzdHJlYW0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tz IGFzIHBhcnQgb2YgaW5kZXggc2NhbnMgY2FuIGRvIHNvCmZyZXF1ZW50bHkgaW4gc29tZSBxdWVy eSBwYXR0ZXJucy4gRS5nLiBpZiB0aGVyZSBpcyBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lcgpz aWRlIG9mIGEgbmVzdGVkIGxvb3AuCgpGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBwcm9i bGVtYXRpYyB0aG91Z2gsIGFzIHRoZXJlIGlzIG5vdGhpbmcgZm9yY2luZwp0aGUgZGlzY2FyZGVk IElPcyB0byBldmVyIGJlIGNvbXBsZXRlZCBpZiB0aGUgYmFja2VuZCBnb2VzIGlkbGUuIFRoYXQn cyBhdCB0aGUKdmVyeSBsZWFzdCBwcm9ibGVtYXRpYyBiZWNhdXNlIGl0IGxlYWRzIHRvIHRoZSB1 bmRlcmx5aW5nIGJ1ZmZlcnMgY29udGludWluZwp0byBiZSBwaW5uZWQgYW5kIHRoZSBJT3Mgc2hv d2luZyB1cCBpbiB0aGUgcGdfYWlvcyB2aWV3LgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvLmggICAgICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYyAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp by5oCmluZGV4IGVjNTQzYjc4NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2Fpby5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICsz MjgsNyBAQCBleHRlcm4gaW50CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsK IGV4dGVybiB2b2lkIHBnYWlvX3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4g Ym9vbCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4g dm9pZCBwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA0ZTc0MjAz OGQuLjQ5ZWI2NzdhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTUsNiArMTA1NSwzMyBA QCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNl OwogfQogCit2b2lkCitwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93 KQoreworCXVpbnQ2NAkJcmVmX2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9I YW5kbGUgKmlvaDsKKwlQZ0Fpb0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9f ZnJvbV93cmVmKGlvdywgJnJlZl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25l cl9wcm9jbm8gPT0gTXlQcm9jTnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJP UiwgIm5vdCB5b3UiKTsKKworCWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2Vu ZXJhdGlvbiwgJnN0YXRlKSkKKwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBp b2gsCisJCQkJICAgImRpc2NhcmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9y ZXR1cm4pOworCisJaWYgKGlvaC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3du ZXIoJmlvaC0+cmVzb3duZXJfbm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9z dHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggNDk5 NzE4MzNkLi4xNDRiMzYxM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpA QCAtNTI0LDcgKzUyNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCQkoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJp bmVfbGltaXQgfHwKIAkJIChzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ ZGlzdGFuY2UgJiYKIAkJICBzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJl YW0tPmRpc3RhbmNlID09IDApICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0 cmVhbS0+aW9zX2luX3Byb2dyZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9z dGFydF9wZW5kaW5nX3JlYWQoc3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3Ry ZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3 b3JzdCBjYXNlIHdlIGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkg KiB0aW1lLgogCSAqLwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJl YW0tPmRpc3RhbmNlID09IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8 fCBzdHJlYW0tPmRpc3RhbmNlIDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJ cGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJ CUFzc2VydChzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZl cl9pbmRleCk7CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVh bS0+ZGlzdGFuY2UgPT0gMCkKKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVy biBJbnZhbGlkQnVmZmVyOwogCiAJCS8qCkBAIC05MzAsNyArOTMwLDcgQEAgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQog CQkvKiBFbmQgb2Ygc3RyZWFtIHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDApCiAJCXsKLQkJCUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNz ZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJ fQogCX0KQEAgLTk1OCw3ICs5NTgsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5p b3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0 X2J1ZmZlcl9pbmRleF0pOwogCi0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJl YW0tPmlvc1tpb19pbmRleF0ub3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVu IHJlc2V0LCBkb24ndCBldmVuIHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0 LgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9f d3JlZl92YWxpZCgmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZf ZGlzY2FyZF9yZXN1bHQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlw Z2Fpb193cmVmX2NsZWFyKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9 CisJCQllbHNlCisJCQkJV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3Ap OworCisJCQluZWVkZWRfd2FpdCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVk X3dhaXQgPSBXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0K IAogCQlBc3NlcnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MtLTsKQEAgLTExNTIsNyArMTE3Miw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJl YWRTdHJlYW0gKnN0cmVhbSkKIAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBh aGVhZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7 CiAKIAkvKiBGb3JnZXQgYnVmZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUu ICovCiAJc3RyZWFtLT5idWZmZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0g CjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0016-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Disposition: attachment; filename="v19-0016-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w772 RnJvbSAwM2ZkNjc4ODFiOTM1ODE1Y2ZmNDJlNGRiZTA0MGY0ZjAxYjU5MWQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTI6MjU6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAx Ni8xOF0gV0lQOiByZWFkIHN0cmVhbTogU3BsaXQgZGVjaXNpb24gYWJvdXQgbG9vayBhaGVhZAog Zm9yIEFJTyBhbmQgY29tYmluaW5nCgpQcmV2aW91cyBjb21taXRzIGNhdXNlZCBhIHJlZ3Jlc3Np b24gZHVlIHRvIHRoZSB0aGlzIGNvbmZsYXRpb24uIFRoaXMgaXMgYQpmaXJzdCBhdHRlbXB0IGF0 IGZpeGluZyB0aGUgcHJvYmxlbS4gIE5lZWRzIHNpZ25pZmljYW50IHJlb3JkZXJpbmcgYW5kCnNw bGl0dGluZyBpZiBpdCB3b3JrcyBvdXQuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0MiArKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCAxNDRiMzYxM2MuLjFjMzc1ZWRhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OCwxMCArOTgsMTQgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJbWF4X3Bpbm5lZF9idWZmZXJzOwogCWludDE2CQlmb3J3 YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7Ci0JaW50MTYJCWRpc3RhbmNl OworCS8qIGxpbWl0IG9mIGhvdyBmYXIgdG8gcmVhZCBhaGVhZCBmb3IgSU8gY29tYmluaW5nICov CisJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CisJLyogbGltaXQgb2YgaG93IGZhciB0byByZWFk IGFoZWFkIGZvciBzdGFydGluZyBJTyBlYXJseSAqLworCWludDE2CQlyZWFkYWhlYWRfZGlzdGFu Y2U7CiAJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwotCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9yZWFk YWhlYWRfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogCWludAkJ CXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRo b2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJ TkcgKi8KQEAgLTMzMiw4ICszMzYsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo UmVhZFN0cmVhbSAqc3RyZWFtKQogCiAJCS8qIFNocmluayBkaXN0YW5jZTogbm8gbW9yZSBsb29r LWFoZWFkIHVudGlsIGJ1ZmZlcnMgYXJlIHJlbGVhc2VkLiAqLwogCQluZXdfZGlzdGFuY2UgPSBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgYnVmZmVyX2xpbWl0OwotCQlpZiAoc3RyZWFtLT5kaXN0 YW5jZSA+IG5ld19kaXN0YW5jZSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2UgPSBuZXdfZGlzdGFuY2U7 CisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IG5ld19kaXN0YW5jZSkKKwkJCXN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwogCiAJCS8qIFVubGVzcyB3 ZSBoYXZlIG5vdGhpbmcgdG8gZ2l2ZSB0aGUgY29uc3VtZXIsIHN0b3AgaGVyZS4gKi8KIAkJaWYg KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPiAwKQpAQCAtMzc0LDEyICszNzgsMjMgQEAgcmVhZF9z dHJlYW1fc3RhcnRfcGVuZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJICogcGVyZm9y bSBJTyBhc3luY2hyb25vdXNseSB3aGVuIHN0YXJ0aW5nIG91dCB3aXRoIGEgc21hbGwgbG9vay1h aGVhZAogCQkgKiBkaXN0YW5jZS4KIAkJICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAm JiBzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKQorCQlpZiAoc3RyZWFtLT5pb3NfaW5fcHJv Z3Jlc3MgPT0gMCkKIAkJewotCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9 PSAwKQotCQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKLQkJCWVsc2UKKwkJCWlmIChzdHJlYW0tPmRp c3RhbmNlX2RlY2F5X2hvbGRvZmYgPiAwKQogCQkJCXN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9s ZG9mZi0tOworCQkJZWxzZQorCQkJeworCQkJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA+IDEpCisJCQkJCXN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlLS07CisKKwkJCQkvKgorCQkJ CSAqIFhYWDogU2hvdWxkIHdlIGFjdHVhbGx5IHJlZHVjZSB0aGlzIGF0IGFueSB0aW1lIG90aGVy IHRoYW4KKwkJCQkgKiBhIHJlc2V0PyBGb3Igbm93IHdlIGhhdmUgdG8sIGFzIHRoaXMgaXMgYWxz byBhIGNvbmRpdGlvbgorCQkJCSAqIGZvciByZS1lbmFibGluZyBmYXN0X3BhdGguCisJCQkJICov CisJCQkJaWYgKHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA+IDEpCisJCQkJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZS0tOworCQkJfQogCQl9CiAJfQogCWVsc2UKQEAgLTQ0MCw2ICs0NTUsMTAx IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJ cmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBTaG91bGQgd2UgY29udGludWUgdG8gcGVyZm9ybSBs b29rIGFoZWFkPyAgVGhlIGxvb2sgYWhlYWQgbWF5IGFsbG93IHVzIHRvCisgKiBtYWtlIHRoZSBw ZW5kaW5nIElPIGxhcmdlciB2aWEgSU8gY29tYmluaW5nIG9yIHRvIGlzc3VlIG1vcmUgcmVhZCBh aGVhZC4KKyAqLworc3RhdGljIGJvb2wKK3JlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKFJl YWRTdHJlYW0gKnN0cmVhbSkKK3sKKwkvKiBuZXZlciBzdGFydCBtb3JlIElPcyB0aGFuIG91ciBj YXAgKi8KKwlpZiAoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPj0gc3RyZWFtLT5tYXhfaW9zKQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1v Zi1zdHJlYW0sIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2Ug PD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbmV2ZXIgcGluIG1vcmUgYnVmZmVycyB0aGFu IGFsbG93ZWQgKi8KKwlpZiAoc3RyZWFtLT5waW5uZWRfYnVmZmVycyArIHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogQWxsb3cgbG9va2luZyBmdXJ0aGVyIGFoZWFkIGlmIHdlIGhhdmUg YW4gdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYQorCSAqIGxhcmdlciBJTywgdGhlIElPIGlzIG5v dCB5ZXQgYmlnIGVub3VnaCBhbmQgd2UgZG9uJ3QgeWV0IGhhdmUgSU8gaW4KKwkgKiBmbGlnaHQu ICBOb3RlIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGV2ZW4gaWYgd2UgYXJlIHJlYWNoaW5nIHRoZQor CSAqIHJlYWRhaGVhZCBsaW1pdCAoYnV0IG5vdCB0aGUgYnVmZmVyIHBpbiBsaW1pdCkuCisJICoK KwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgY2FzZXMgd2hlcmUgZWl0aGVyIGVmZmVjdGl2ZV9p b19jb25jdXJyZW5jeSBpcworCSAqIGxvdyBvciB3ZSBuZXZlciBuZWVkIHRvIHdhaXQgZm9yIElP IGFuZCB0aHVzIGFyZSBub3QgaW5jcmVhc2luZyB0aGUKKwkgKiBkaXN0YW5jZS4gV2l0aG91dCB0 aGlzIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGxvdHMgb2Ygc21hbGwgSU9zLgorCSAqLworCWlmIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID4gMCAmJgorCQlzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDAgJiYKKwkJc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IG1v cmUgcmVhZGFoZWFkIGlmIHRoYXQnZCBwdXQgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGRvaW5nCisJ ICogcmVhZGFoZWFkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFt LT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA+PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFdlIGRvbid0IHN0 YXJ0IHRoZSBwZW5kaW5nIHJlYWQganVzdCBiZWNhdXNlIHdlJ3ZlIGhpdCB0aGUgZGlzdGFuY2Ug bGltaXQsCisgKiBwcmVmZXJyaW5nIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0 byBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6ZQorICogb25jZSBtb3JlIGJ1ZmZlcnMgaGF2ZSBi ZWVuIGNvbnN1bWVkLiAgQnV0IHRoaXMgaXMgbm90IGRlc2lyYWJsZSBpbiBhbGwKKyAqIHNpdHVh dGlvbnMgLSBzZWUgYmVsb3cuCisgKi8KK3N0YXRpYyBib29sCityZWFkX3N0cmVhbV9zaG91bGRf aXNzdWVfbm93KFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlpbnQxNgkJcGVuZGluZ19yZWFkX25i bG9ja3MgPSBzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzOworCisJLyogbm8gSU8gdG8gaXNz dWUgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIgY2FwICovCisJaWYgKHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID49IHN0cmVhbS0+bWF4X2lvcykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1vZi1zdHJlYW0sIHN0YXJ0 IHRoZSByZWFkCisJICogaW1tZWRpYXRlbHkuIFRoZXJlJ3Mgbm8gZGVmZXJyaW5nIGl0IGZvciBs YXRlci4KKwkgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBpb19jb21iaW5l X2xpbWl0LCB0aGVyZSdzIG5vIGNoYW5jZSBvZiBncm93aW5nCisJICogdGhlIHJlYWQgZnVydGhl ci4KKwkgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5pb19jb21iaW5l X2xpbWl0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNhbWUgaWYgY2FwcGVkIG5vdCBieSBpb19j b21iaW5lX2xpbWl0IGJ1dCBjb21iaW5lX2Rpc3RhbmNlICovCisJaWYgKHN0cmVhbS0+Y29tYmlu ZV9kaXN0YW5jZSA+IDAgJiYKKwkJcGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgd2UgY3VycmVudGx5 IGhhdmUgbm8gcmVhZHMgaW4gZmxpZ2h0IG9yIHByZXBhcmVkLCBpc3N1ZSB0aGUgSU8gb25jZQor CSAqIHdlIHN0b3BwZWQgbG9va2luZyBhaGVhZC4gVGhpcyBlbnN1cmVzIHRoZXJlJ3MgYWx3YXlz IGF0IGxlYXN0IG9uZSBJTworCSAqIHByZXBhcmVkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5l ZF9idWZmZXJzID09IDAgJiYKKwkJIXJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0cmVh bSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZAog cmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7CkBAIC00NTIsMTQg KzU2MiwxMyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlp ZiAoc3RyZWFtLT5iYXRjaF9tb2RlKQogCQlwZ2Fpb19lbnRlcl9iYXRjaG1vZGUoKTsKIAotCXdo aWxlIChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA8IHN0cmVhbS0+bWF4X2lvcyAmJgotCQkgICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0 cmVhbS0+ZGlzdGFuY2UpCisJd2hpbGUgKHJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0 cmVhbSkpCiAJewogCQlCbG9ja051bWJlciBibG9ja251bTsKIAkJaW50MTYJCWJ1ZmZlcl9pbmRl eDsKIAkJdm9pZAkgICAqcGVyX2J1ZmZlcl9kYXRhOwogCi0JCWlmIChzdHJlYW0tPnBlbmRpbmdf cmVhZF9uYmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCkKKwkJaWYgKHJlYWRfc3Ry ZWFtX3Nob3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJewogCQkJcmVhZF9zdHJlYW1fc3RhcnRf cGVuZGluZ19yZWFkKHN0cmVhbSk7CiAJCQljb250aW51ZTsKQEAgLTQ3OSw3ICs1ODgsOCBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYgKGJsb2NrbnVt ID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVhbS4gKi8KLQkJ CXN0cmVhbS0+ZGlzdGFuY2UgPSAwOworCQkJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAw OworCQkJc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKQEAg LTUxMSwyMSArNjIxLDEzIEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCX0KIAogCS8qCi0JICogV2UgZG9uJ3Qgc3RhcnQgdGhlIHBlbmRpbmcgcmVhZCBqdXN0 IGJlY2F1c2Ugd2UndmUgaGl0IHRoZSBkaXN0YW5jZQotCSAqIGxpbWl0LCBwcmVmZXJyaW5nIHRv IGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0byBmdWxsCi0JICogaW9fY29tYmluZV9s aW1pdCBzaXplIG9uY2UgbW9yZSBidWZmZXJzIGhhdmUgYmVlbiBjb25zdW1lZC4gIEhvd2V2ZXIs Ci0JICogaWYgd2UndmUgYWxyZWFkeSByZWFjaGVkIGlvX2NvbWJpbmVfbGltaXQsIG9yIHdlJ3Zl IHJlYWNoZWQgdGhlCi0JICogZGlzdGFuY2UgbGltaXQgYW5kIHRoZXJlIGlzbid0IGFueXRoaW5n IHBpbm5lZCB5ZXQsIG9yIHRoZSBjYWxsYmFjayBoYXMKLQkgKiBzaWduYWxlZCBlbmQtb2Ytc3Ry ZWFtLCB3ZSBzdGFydCB0aGUgcmVhZCBpbW1lZGlhdGVseS4gIE5vdGUgdGhhdCB0aGUKLQkgKiBw ZW5kaW5nIHJlYWQgY2FuIGV4Y2VlZCB0aGUgZGlzdGFuY2UgZ29hbCwgaWYgdGhlIGxhdHRlciB3 YXMgcmVkdWNlZAotCSAqIGFmdGVyIGhpdHRpbmcgdGhlIHBlci1iYWNrZW5kIGJ1ZmZlciBsaW1p dC4KKwkgKiBDaGVjayBpZiB0aGUgcGVuZGluZyByZWFkIHNob3VsZCBiZSBpc3N1ZWQgbm93LCBv ciBpZiB3ZSBzaG91bGQgZ2l2ZSBpdAorCSAqIGFub3RoZXIgY2hhbmNlIHRvIGdyb3cgdG8gdGhl IGZ1bGwgc2l6ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGVuZGluZyByZWFkIGNhbiBleGNl ZWQgdGhlIGRpc3RhbmNlIGdvYWwsIGlmIHRoZSBsYXR0ZXIKKwkgKiB3YXMgcmVkdWNlZCBhZnRl ciBoaXR0aW5nIHRoZSBwZXItYmFja2VuZCBidWZmZXIgbGltaXQuCiAJICovCi0JaWYgKHN0cmVh bS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPiAwICYmCi0JCShzdHJlYW0tPnBlbmRpbmdfcmVhZF9u YmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCB8fAotCQkgKHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5kaXN0YW5jZSAmJgotCQkgIHN0cmVhbS0+cGlubmVk X2J1ZmZlcnMgPT0gMCkgfHwKLQkJIHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkgJiYKLQkJc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPCBzdHJlYW0tPm1heF9pb3MpCisJaWYgKHJlYWRfc3RyZWFtX3No b3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGluZ19yZWFk KHN0cmVhbSk7CiAKIAkvKgpAQCAtNTM0LDcgKzYzNiw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdl IGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAq LwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPnJl YWRhaGVhZF9kaXN0YW5jZSA8PSAwKTsKIAogCWlmIChzdHJlYW0tPmJhdGNoX21vZGUpCiAJCXBn YWlvX2V4aXRfYmF0Y2htb2RlKCk7CkBAIC03MjQsMTAgKzgyNiwxNyBAQCByZWFkX3N0cmVhbV9i ZWdpbl9pbXBsKGludCBmbGFncywKIAkgKiBkb2luZyBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6 ZWQgcmVhZHMuCiAJICovCiAJaWYgKGZsYWdzICYgUkVBRF9TVFJFQU1fRlVMTCkKLQkJc3RyZWFt LT5kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVkX2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9s aW1pdCk7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVk X2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCk7CisJCXN0cmVhbS0+Y29tYmluZV9k aXN0YW5jZSA9IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdDsKKwl9CiAJZWxzZQotCQlzdHJlYW0t PmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFu Y2U7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDE7CisJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJfQorCXN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVzdW1lX2NvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2U7CiAKIAkvKgogCSAqIFNpbmNlIHdl IGFsd2F5cyBhY2Nlc3MgdGhlIHNhbWUgcmVsYXRpb24sIHdlIGNhbiBpbml0aWFsaXplIHBhcnRz IG9mCkBAIC04MjYsNyArOTM1LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MgPT0gMCk7CiAJCUFzc2VydChzdHJlYW0tPmZvcndhcmRlZF9idWZmZXJzID09 IDApOwogCQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAxKTsKLQkJQXNzZXJ0KHN0 cmVhbS0+ZGlzdGFuY2UgPT0gMSk7CisJCUFzc2VydChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9PSAxKTsKIAkJQXNzZXJ0KHN0cmVhbS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCk7CiAJ CUFzc2VydChzdHJlYW0tPnBlcl9idWZmZXJfZGF0YV9zaXplID09IDApOwogCQlBc3NlcnQoc3Ry ZWFtLT5pbml0aWFsaXplZF9idWZmZXJzID4gc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4KTsK QEAgLTkwMCw3ICsxMDA5LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAq c3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1v cmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLwotCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CisJ CQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZm ZXJfaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRf YnVmZmVycyA9IDA7CiAJCQlzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0gPSBJ bnZhbGlkQnVmZmVyOwpAQCAtOTE2LDcgKzEwMjUsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChz dHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7 CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1 cm4gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKgpAQCAtOTMwLDcgKzEwMzksNyBAQCByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEp CiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8gKi8KIAkJaWYgKHN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMCkKIAkJewotCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CisJCQlB c3NlcnQoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxp ZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1MSw3ICsxMDYwLDYgQEAgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlzdHJl YW0tPmlvc1tzdHJlYW0tPm9sZGVzdF9pb19pbmRleF0uYnVmZmVyX2luZGV4ID09IG9sZGVzdF9i dWZmZXJfaW5kZXgpCiAJewogCQlpbnQxNgkJaW9faW5kZXggPSBzdHJlYW0tPm9sZGVzdF9pb19p bmRleDsKLQkJaW50MzIJCWRpc3RhbmNlOwkvKiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGNsYW1w ZWQgYmVsb3cgKi8KIAkJYm9vbAkJbmVlZGVkX3dhaXQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRo YXQgd2Ugc3RpbGwgYWdyZWUgb24gdGhlIGJ1ZmZlcnMuICovCkBAIC05NjIsNyArMTA3MCw3IEBA IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9i dWZmZXJfZGF0YSkKIAkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiByZXNldCwgZG9uJ3QgZXZl biB3YWl0IGZvciB0aGUgSU8sIGp1c3QKIAkJICogZGlzY2FyZCBpdC4KIAkJICovCi0JCWlmIChz dHJlYW0tPmRpc3RhbmNlIDwgMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDwg MCkKIAkJewogCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5v cC5pb193cmVmKSAmJgogCQkJCSFzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuZm9yZWlnbl9pbykK QEAgLTEwMTEsMTEgKzExMTksMzggQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkgKiB0aGUgc3RyZWFtLCBhcyBz dHJlYW0tPmRpc3RhbmNlID09IDAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mCiAJCSAqIGhhdmlu ZyByZWFjaGVkIHRoZSBlbmQuCiAJCSAqLwotCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDAgJiYg bmVlZGVkX3dhaXQpCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IDAgJiYgbmVl ZGVkX3dhaXQpCiAJCXsKLQkJCWRpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZSAqIDI7Ci0JCQlk aXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOwotCQkJ c3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkJLyogd2lkZXIgdGVtcG9yYXJ5IHZhbHVl LCBkdWUgdG8gb3ZlZmxvdyByaXNrICovCisJCQlpbnQzMgkJcmVhZGFoZWFkX2Rpc3RhbmNlOwor CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSAqIDI7 CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBNaW4ocmVhZGFoZWFkX2Rpc3RhbmNlLCBzdHJlYW0t Pm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IHJl YWRhaGVhZF9kaXN0YW5jZTsKKwkJfQorCisJCS8qCisJCSAqIFdoZXRoZXIgd2UgbmVlZGVkIHRv IHdhaXQgb3Igbm90LCBhbGxvdyBmb3IgbW9yZSBJTyBjb21iaW5pbmcgaWYgd2UKKwkJICogbmVl ZGVkIHRvIGRvIElPLiBUaGUgcmVhc29uIHRvIGRvIHNvIGluZGVwZW5kZW50IG9mIG5lZWRpbmcg dG8gd2FpdAorCQkgKiBpcyB0aGF0IHdoZW4gdGhlIGRhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIGtl cm5lbCBwYWdlIGNhY2hlLCBJTworCQkgKiBjb21iaW5pbmcgcmVkdWNlcyB0aGUgc3lzY2FsbCAv IGRpc3BhdGNoIG92ZXJoZWFkLCBtYWtpbmcgaXQKKwkJICogd29ydGh3aGlsZSByZWdhcmRsZXNz IG9mIG5lZWRpbmcgdG8gd2FpdC4KKwkJICoKKwkJICogSXQgaXMgYWxzbyBpbXBvcnRhbnQgd2l0 aCBpb191cmluZyBhcyBpdCB3aWxsIG5ldmVyIHNpZ25hbCB0aGUgbmVlZAorCQkgKiB0byB3YWl0 IGZvciByZWFkcyBpZiBhbGwgdGhlIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZXJlIGFy ZQorCQkgKiBoZXVyaXN0aWNzIHRvIGRlYWwgd2l0aCB0aGF0IGluIG1ldGhvZF9pb191cmluZy5j LCBidXQgdGhleSBvbmx5CisJCSAqIHdvcmsgd2hlbiB0aGUgSU8gZ2V0cyBsYXJnZSBlbm91Z2gu CisJCSAqLworCQlpZiAoc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID4gMCAmJgorCQkJc3RyZWFt LT5jb21iaW5lX2Rpc3RhbmNlIDwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KQorCQl7CisJCQkv KiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGR1ZSB0byBvdmVmbG93IHJpc2sgKi8KKwkJCWludDMy CQljb21iaW5lX2Rpc3RhbmNlOworCisJCQljb21iaW5lX2Rpc3RhbmNlID0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlICogMjsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBNaW4oY29tYmluZV9kaXN0 YW5jZSwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KTsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBN aW4oY29tYmluZV9kaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3Ry ZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gY29tYmluZV9kaXN0YW5jZTsKIAkJfQogCiAJCS8qCkBA IC0xMDk0LDEwICsxMjI5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0g KnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAogI2lmbmRlZiBSRUFEX1NUUkVBTV9E SVNBQkxFX0ZBU1RfUEFUSAogCS8qIFNlZSBpZiB3ZSBjYW4gdGFrZSB0aGUgZmFzdCBwYXRoIGZv ciBhbGwtY2FjaGVkIHNjYW5zIG5leHQgdGltZS4gKi8KKwkvKgorCSAqIEZJWE1FOiBJdCdzIHdh eSB0b28gZWFzeSB0byB3cm9uZ2x5IGZhc3QgcGF0aC4gSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MK KwkgKiBzZXZlcmFsIHByZS1leGlzdGluZyBjYXNlcyB3aGVyZSBpdCB0cmlnZ2VycyBiZWNhdXNl IHdlIGFyZSBub3QgaXNzdWluZworCSAqIGFkZGl0aW9uYWwgcHJlZmV0Y2hpbmcgKGUuZy4gYmVj YXVzZSBvZiBhIHNtYWxsCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5KSBhbmQgdGh1cyBz dHJlYW0tPnBpbm5lZF9idWZmZXJzIHN0YXlzIGF0IDEKKwkgKiBhZnRlciByZWFkX3N0cmVhbV9s b29rX2FoZWFkKCkuCisJICovCiAJaWYgKHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDAgJiYK IAkJc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9PSAwICYmCiAJCXN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMSAmJgotCQlzdHJlYW0tPmRpc3RhbmNlID09IDEgJiYKKwkJc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPT0gMSAmJgorCQlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2UgPT0gMSAm JgogCQlzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID09IDAgJiYKIAkJc3RyZWFtLT5wZXJf YnVmZmVyX2RhdGFfc2l6ZSA9PSAwKQogCXsKQEAgLTExNDMsOCArMTI4Niw5IEBAIHJlYWRfc3Ry ZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSAq c3RyYXRlZ3kpCiBCbG9ja051bWJlcgogcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogewotCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZTsKLQlz dHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPnJlc3VtZV9yZWFkYWhlYWRfZGlzdGFuY2Ug PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rp c3RhbmNlID0gc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlID0gMDsKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCkBAIC0xMTU2LDcg KzEzMDAsOCBAQCByZWFkX3N0cmVhbV9wYXVzZShSZWFkU3RyZWFtICpzdHJlYW0pCiB2b2lkCiBy ZWFkX3N0cmVhbV9yZXN1bWUoUmVhZFN0cmVhbSAqc3RyZWFtKQogewotCXN0cmVhbS0+ZGlzdGFu Y2UgPSBzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPmNvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogfQogCiAvKgpAQCAt MTE3Miw3ICsxMzE3LDggQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQog CUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwotCXN0cmVhbS0+ ZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IC0xOworCXN0cmVh bS0+Y29tYmluZV9kaXN0YW5jZSA9IC0xOwogCiAJLyogRm9yZ2V0IGJ1ZmZlcmVkIGJsb2NrIG51 bWJlciBhbmQgZmFzdCBwYXRoIHN0YXRlLiAqLwogCXN0cmVhbS0+YnVmZmVyZWRfYmxvY2tudW0g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC0xMjA0LDggKzEzNTAsMTAgQEAgcmVhZF9zdHJlYW1f cmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVz cyA9PSAwKTsKIAogCS8qIFN0YXJ0IG9mZiBhc3N1bWluZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlz dHJlYW0tPmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ ZGlzdGFuY2U7CisJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAxOworCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJc3RyZWFtLT5yZXN1bWVfcmVhZGFoZWFkX2Rpc3RhbmNlID0g c3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2U7CisJc3RyZWFtLT5yZXN1bWVfY29tYmluZV9kaXN0 YW5jZSA9IHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZTsKIAlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSAwOwogfQogCi0tIAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0018-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v19-0018-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w6y0 RnJvbSAwZTgxOTQwZWVlZDY3MjA2MTgyOTUxNWZjNmRkN2UzNWU3NjdmMWRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAx OC8xOF0gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IGFmMGUwNTI0Ny4uNDM0MDllMWE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODI3Myw3ICs4MjczLDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTgzNzIsNyArODM3MiwyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODg2MSw3ICs4ODc3LDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTg5MTIsNyArODkyOCw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0009-aio-io_uring-Allow-IO-methods-to-check-if-IO-com.patch" Content-Disposition: attachment; filename="v19-0009-aio-io_uring-Allow-IO-methods-to-check-if-IO-com.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7k9 RnJvbSA4MDQyMjU3Njc2MjM5OTQ4OTA2NGJjYTdkMmYwOWI1NTVhYmMxNmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDA5 LzE4XSBhaW86IGlvX3VyaW5nOiBBbGxvdyBJTyBtZXRob2RzIHRvIGNoZWNrIGlmIElPCiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQKClVudGlsIG5vdyBwZ2Fpb193cmVmX2NoZWNrX2RvbmUo KSB3aXRoIGlvX21ldGhvZD1pb191cmluZyB3b3VsZCBub3QgZGV0ZWN0IGlmCklPcyBhcmUga25v d24gdG8gaGF2ZSBjb21wbGV0ZWQgdG8gdGhlIGtlcm5lbCwgYnV0IHRoZSBjb21wbGV0aW9uIGhh cyBub3QgeWV0CmJlZW4gY29uc3VtZWQgYnkgdXNlcnNwYWNlLiAgVGhpcyBjYW4gbGVhZCB0byBp bmZlcmlvciBwZXJmb3JtYW5jZSBhbmQgYWxzbwptYWtlcyBpdCBoYXJkZXIgdG8gdXNlIHNtYXJ0 ZXIgZmVlZGJhY2sgbG9naWMgaW4gcmVhZF9zdHJlYW0sIGJlY2F1c2Ugd2UKY2Fubm90IHVzZSBr bm93bGVkZ2UgYWJvdXQgd2hldGhlciBhbiBJTyBjb21wbGV0ZWQgdG8gY29udHJvbCB0aGUgcmVh ZGFoZWFkCmRpc3RhbmNlLgoKVGhpcyBjb21taXQganVzdCBhZGRzIHRoZSBpb191cmluZyBzcGVj aWZpYyBpbmZyYXN0cnVjdHVyZS4gTGF0ZXIgY29tbWl0cyB3aWxsCnJldHVybiB3aGV0aGVyIGEg d2FpdCB3YXMgbmVlZGVkIGZyb20gV2FpdFJlYWRCdWZmZXJzKCkgYW5kIHRoZW4gdXNlIHRoYXQK a25vd2xlZGdlLgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFs LmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAg ICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9p b191cmluZy5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg NzMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCmluZGV4IDVmZWVh MTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKQEAgLTMyOCw2 ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMKIAkgKi8KIAl2b2lkCQkoKndh aXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWludDY0IHJlZl9nZW5lcmF0aW9u KTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJlYWR5IGNvbXBsZXRlZC4gT3B0 aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0byBwb2xsIGEga2VybmVsIG9i amVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21wbGV0ZWQgaW4gdGhlIGJhY2tn cm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgorCSAqCisJICogVGhpcyBjYWxs YmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBob3dldmVyIGl0IGlzIGFsbG93 ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2FpdCBmb3Igc2hvcnQtbGl2ZWQg bG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNzIHBlcnNwZWN0aXZlIHRvIG5v dCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25zLAorCSAqIGl0IGp1c3QgY2Fu IGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0tCisJICovCisJdm9pZAkJKCpj aGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAgdWludDY0IHJlZl9nZW5lcmF0 aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCBlNGFlMzAz MWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwMTksNiArMTAxOSwyMSBA QCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAKIAlhbV9vd25lciA9 IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAorCS8qCisJICogSWYgdGhlIElP IGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cgdGhlIElPIG1ldGhvZCB0byBj aGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0ZWQuCisJICovCisJaWYgKHBn YWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5D SFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVja19vbmUoaW9oLCByZWZfZ2Vu ZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0 aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYgKHN0YXRlID09IFBHQUlPX0hT X0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3RhdGUgPT0gUEdBSU9fSFNfQ09N UExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19DT01QTEVURURfTE9DQUwpCiAJ ewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJpbmcuYwppbmRleCA0ODY3ZGVk MzUuLjM5OTg0ZGYzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9k X2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5n LmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfc2htZW1faW5pdChi b29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfaW5pdF9iYWNrZW5kKHZv aWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9z LCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfd2Fp dF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKTsKK3N0YXRpYyB2 b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dl bmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBwZ2Fpb191 cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNx ZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3BzIHBnYWlvX3VyaW5nX29wcyA9 IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJLndhaXRfb25lID0gcGdhaW9f dXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3VyaW5nX2NoZWNrX29uZSwKIH07 CiAKIC8qCkBAIC02NTgsNiArNjYwLDQ3IEBAIHBnYWlvX3VyaW5nX3dhaXRfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3YWl0ZWQpOwogfQogCitzdGF0 aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCBy ZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3Byb2NubyA9IGlvaC0+b3duZXJf cHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250ZXh0ID0gJnBnYWlvX3VyaW5n X2NvbnRleHRzW293bmVyX3Byb2Nub107CisKKwkvKgorCSAqIFRoaXMgY2hlY2sgaXMgbm90IHJl bGlhYmxlIHdoZW4gbm90IGhvbGRpbmcgdGhlIGNvbXBsZXRpb24gbG9jaywgYnV0CisJICogaXQn cyBhIHVzZWZ1bCBjaGVhcCBwcmUtY2hlY2sgdG8gc2VlIGlmIGl0J3Mgd29ydGggdHJ5aW5nIHRv IGdldCB0aGUKKwkgKiBjb21wbGV0aW9uIGxvY2suCisJICovCisJaWYgKCFpb191cmluZ19jcV9y ZWFkeSgmb3duZXJfY29udGV4dC0+aW9fdXJpbmdfcmluZykpCisJCXJldHVybjsKKworCS8qCisJ ICogSWYgdGhlIGNvbXBsZXRpb24gbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgdGhlIGhvbGRlciB3 aWxsIGxpa2VseQorCSAqIHByb2Nlc3MgYW55IHBlbmRpbmcgY29tcGxldGlvbnMsIGdpdmUgdXAu CisJICovCisJaWYgKCFMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoJm93bmVyX2NvbnRleHQtPmNv bXBsZXRpb25fbG9jaywgTFdfRVhDTFVTSVZFKSkKKwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdf aW8oREVCVUczLCBpb2gsCisJCQkJICAgImNoZWNrX29uZSBpb19nZW46ICUiIFBSSXU2NCAiLCBy ZWZfZ2VuOiAlIiBQUkl1NjQsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9n ZW5lcmF0aW9uKTsKKworCS8qCisJICogUmVjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbXBsZXRp b25zLCBhbm90aGVyIGJhY2tlbmQgY291bGQgaGF2ZQorCSAqIHByb2Nlc3NlZCB0aGVtIHNpbmNl IHdlIGNoZWNrZWQgYWJvdmUsIG9yIG91ciB1bmxvY2tlZCBwcmUtY2hlY2sgY291bGQKKwkgKiBo YXZlIGJlZW4gcmVhZGluZyBvdXRkYXRlZCB2YWx1ZXMuCisJICoKKwkgKiBJdCBpcyBwb3NzaWJs ZSB0aGF0IHRoZSBJTyBoYW5kbGUgaGFzIGJlZW4gcmV1c2VkIHNpbmNlIHRoZSBzdGFydCBvZgor CSAqIHRoZSBjYWxsLCBidXQgbm93IHRoYXQgd2UgaGF2ZSB0aGUgbG9jaywgd2UgY2FuIGp1c3Qg YXMgd2VsbCBkcmFpbiBhbGwKKwkgKiBjb21wbGV0aW9ucy4KKwkgKi8KKwlpZiAoaW9fdXJpbmdf Y3FfcmVhZHkoJm93bmVyX2NvbnRleHQtPmlvX3VyaW5nX3JpbmcpKQorCQlwZ2Fpb191cmluZ19k cmFpbl9sb2NrZWQob3duZXJfY29udGV4dCk7CisKKwlMV0xvY2tSZWxlYXNlKCZvd25lcl9jb250 ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9pZAogcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiB7Ci0t IAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0013-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Disposition: attachment; filename="v19-0013-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7d5 RnJvbSBkMzQ3ZGFjNmM5NmYzMmYxODQ1M2MxYzlhNzIxOGExN2M4Yjg4Yzg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDEz LzE4XSBhaW86IGlvX3VyaW5nOiBUcmlnZ2VyIGFzeW5jIHByb2Nlc3NpbmcgZm9yIGxhcmdlCiBJ T3MKCmlvX21ldGhvZD1pb191cmluZyBoYXMgYSBoZXVyaXN0aWMgdG8gdHJpZ2dlciBhc3luY2hy b25vdXMgcHJvY2Vzc2luZyBvZiBJT3MKb25jZSB0aGUgSU8gZGVwdGguIFRoYXQgaGV1cmlzdGlj IGlzIGltcG9ydGFudCB3aGVuIGRvaW5nIGJ1ZmZlcmVkIElPIGZyb20gdGhlCmtlcm5lbCBwYWdl IGNhY2hlLCB0byBhbGxvdyBwYXJhbGxlbGl6aW5nIG9mIHRoZSBtZW1vcnkgY29weSwgYXMgb3Ro ZXJ3aXNlCmlvX21ldGhvZD1pb191cmluZyB3b3VsZCBiZSBhIGxvdCBzbG93ZXIgdGhhbiBpb19t ZXRob2Q9d29ya2VyIGluIHRoYXQgY2FzZS4KCkFuIHVwY29taW5nIGNvbW1pdCB3aWxsIG1ha2Ug cmVhZF9zdHJlYW0uYyBvbmx5IGluY3JlYXNlIHRoZSByZWFkYWhlYWQKZGlzdGFuY2UgaWYgd2Ug bmVlZGVkIHRvIHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBJZiB0by1iZS1yZWFkIGRhdGEgaXMg aW4gdGhlCmtlcm5lbCBwYWdlIGNhY2hlLCBpb191cmluZyB3aWxsIHN5bmNocm9ub3VzbHkgZXhl Y3V0ZSBJTywgdW5sZXNzIHRoZSBJTyBpcwpmbGFnZ2VkIGFzIGFzeW5jLiAgVGhlcmVmb3JlIHRo ZSBhZm9yZW1lbnRpb25lZCBjaGFuZ2UgaW4gcmVhZF9zdHJlYW0uYwpoZXVyaXN0aWMgd291bGQg bGVhZCB0byBhIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBpb191cmlu Zwp3aGVuIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUsIGFzIHdlIHdvdWxkIG5ldmVyIHJlYWNo IGEgZGVlcCBlbm91Z2ggcXVldWUgdG8KYWN0dWFsbHkgdHJpZ2dlciB0aGUgZXhpc3RpbmcgaGV1 cmlzdGljLgoKUGFyYWxsZWxpemluZyB0aGUgY29weSBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzIG1h aW5seSBpbXBvcnRhbnQgd2hlbiBkb2luZyBhCmxvdCBvZiBJTywgd2hpY2ggY29tbW9ubHkgaXMg b25seSBwb3NzaWJsZSB3aGVuIGRvaW5nIGxhcmdlbHkgc2VxdWVudGlhbCBJTy4KClRoZSByZWFz b24gd2UgZG9uJ3QganVzdCBtYXJrIGFsbCBpb191cmluZyBJT3MgYXMgYXN5bmNocm9ub3VzIGlz IHRoYXQgdGhlCmRpc3BhdGNoIHRvIGEga2VybmVsIHRocmVhZCBoYXMgb3ZlcmhlYWQuIFRoaXMg b3ZlcmhlYWQgaXMgbW9zdGx5IG5vdGljZWFibGUKd2l0aCBzbWFsbCByYW5kb20gSU9zIHdpdGgg YSBsb3cgcXVldWUgZGVwdGgsIGFzIGluIHRoYXQgY2FzZSB0aGUgZ2FpbiBmcm9tCnBhcmFsbGVs aXppbmcgdGhlIG1lbW9yeSBjb3B5IGlzIHNtYWxsIGFuZCB0aGUgbGF0ZW5jeSBjb3N0IGhpZ2gu CgpUaGUgZmFjdHMgZnJvbSB0aGUgdHdvIHByaW9yIHBhcmFncmFwaHMgc2hvdyBhIHdheSBvdXQ6 IFVzZSB0aGUgc2l6ZSBvZiB0aGUgSU8KaW4gYWRkaXRpb24gdG8gdGhlIGRlcHRoIG9mIHRoZSBx dWV1ZSB0byB0cmlnZ2VyIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLgoKT25lIG1pZ2h0IHRoaW5r IHRoYXQganVzdCB1c2luZyB0aGUgSU8gc2l6ZSBtaWdodCBiZSBlbm91Z2gsIGJ1dApleHBlcmlt ZW50YXRpb24gaGFzIHNob3duIHRoYXQgbm90IHRvIGJlIHRoZSBjYXNlIC0gd2l0aCBkZWVwIGxv b2stYWhlYWQKZGlzdGFuY2VzIGJlaW5nIGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIG1lbW9yeSBj b3B5IGlzIGltcG9ydGFudCBldmVuIHdpdGgKc21hbGxlciBJT3MuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA5MCArKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmlu Zy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggMzk5 ODRkZjMxLi4wYzhmZTQ1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF9pb191cmluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191 cmluZy5jCkBAIC00MDksNyArNDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0 KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0 cnVjdCBpb191cmluZyAqdXJpbmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+ aW9fdXJpbmdfcmluZzsKLQlpbnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZw Z2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lv cyA8PSBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdh aW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFn ZWRfaW9zKQogCiAJCXBnYWlvX2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5n X3NxX2Zyb21faW8oaW9oLCBzcWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElP IGluIHByb2Nlc3MgY29udGV4dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBn b29kLCBhcyBpdCByZWR1Y2VzIGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQot CQkgKiBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBw YWdlIGNhY2hlIGFuZAotCQkgKiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVn cm91bmQsIGFzIGl0IGNhbid0IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMg aXMgcG9zc2libGUgd2hlbiB1c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEg bG90IG9mIGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkg KiB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlp bmcuIGlvX3VyaW5nCi0JCSAqIGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIg dGhyZWFkcyBpbnN0ZWFkLgotCQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQg d2UgYWxyZWFkeSBoYXZlIElPcyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBi ZWluZyBzdWJtaXR0ZWQsIHdlIHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRo ZSBJTyBpbiB0aGUgYmFja2dyb3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcg SU9zCi0JCSAqIGJlaW5nIHN1Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBj b250ZXh0IGhhcyBsb3dlcgotCQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9i ZWZvcmUgPiA0ICYmIChpb2gtPmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJp bmdfc3FlX3NldF9mbGFncyhzcWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3Jl Kys7CiAJfQogCiAJd2hpbGUgKHRydWUpCkBAIC03MDEsMTAgKzY3OSw2NCBAQCBwZ2Fpb191cmlu Z19jaGVja19vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKQogCUxX TG9ja1JlbGVhc2UoJm93bmVyX2NvbnRleHQtPmNvbXBsZXRpb25fbG9jayk7CiB9CiAKKy8qCisg KiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNzIGNvbnRleHQgaWYgcG9zc2libGUuIFRo YXQncyBnZW5lcmFsbHkgZ29vZCwKKyAqIGFzIGl0IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcu IFdoZW4gcGVyZm9ybWluZyBhIGxvdCBvZiBidWZmZXJlZCBJTyB0aGF0CisgKiBtZWFucyB0aGF0 IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZCB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMg aW4gdGhlCisgKiBmb3JlZ3JvdW5kLCBhcyBpdCBjYW4ndCBiZSBvZmZsb2FkZWQgdG8gRE1BIGhh cmR3YXJlIGFzIGlzIHBvc3NpYmxlIHdoZW4KKyAqIHVzaW5nIGRpcmVjdCBJTy4gV2hlbiBleGVj dXRpbmcgYSBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhpcyBjYXVzZXMgaW9fdXJpbmcKKyAqIHRvIGJl IHNsb3dlciB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhl CisgKiBjb3B5aW5nLiBpb191cmluZyBjYW4gYmUgdG9sZCB0byBvZmZsb2FkIHdvcmsgdG8gd29y a2VyIHRocmVhZHMgaW5zdGVhZC4KKyAqCisgKiBJZiB0aGUgSU9zIGFyZSBzbWFsbCwgd2Ugb25s eSBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MgaW50byB0aGUKKyAqIGJhY2tncm91bmQgaWYg dGhlcmUgaXMgYSBsb3Qgb2YgSU8sIGFzIG90aGVyd2lzZSB0aGUgb3ZlcmhlYWQgZnJvbSBjb250 ZXh0CisgKiBzd2l0Y2hpbmcgaXMgaGlnaGVyIHRoYW4gdGhlIGdhaW4uCisgKgorICogSWYgSU9z IGFyZSBsYXJnZSwgdGhlcmUgaXMgYmVuZWZpdCBmcm9tIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5n IGF0IGxvd2VyCisgKiBxdWV1ZSBkZXB0aHMsIGFzIElPIGxhdGVuY3kgaXMgbGVzcyBvZiBhIGNy dWNpYWwgZmFjdG9yIGFuZCBwYXJhbGxlbGl6aW5nCisgKiBtZW1vcnkgY29waWVzIGlzIG1vcmUg aW1wb3J0YW50LiAgSW4gYWRkaXRpb24sIGl0IGlzIGltcG9ydGFudCB0byB0cmlnZ2VyCisgKiBh c3luY2hyb25vdXMgcHJvY2Vzc2luZyBldmVuIGF0IGxvdyBxdWV1ZSBkZXB0aCwgYXMgd2l0aCBm b3JlZ3JvdW5kCisgKiBwcm9jZXNzaW5nIHdlIG1pZ2h0IG5ldmVyIGFjdHVhbGx5IHJlYWNoIGRl ZXAgZW5vdWdoIElPIGRlcHRocyB0byB0cmlnZ2VyCisgKiBhc3luY2hyb25vdXMgcHJvY2Vzc2lu Zywgd2hpY2ggaW4gdHVybiB3b3VsZCBkZXByaXZlIHJlYWRhaGVhZCBjb250cm9sCisgKiBsb2dp YyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgZGVlcGVyIGxvb2stYWhlYWQgZGlzdGFu Y2Ugd291bGQgYmUKKyAqIGFkdmFudGFnZW91cy4KKyAqCisgKiBXZSBoYXZlIGRvbmUgc29tZSBi YXNpYyBiZW5jaG1hcmtpbmcgdG8gdmFsaWRhdGUgdGhlIHRocmVzaG9sZHMgdXNlZCwgYnV0Cisg KiBpdCdzIHF1aXRlIHBsYXVzaWJsZSB0aGF0IHRoZXJlIGFyZSBiZXR0ZXIgdmFsdWVzLgorICov CitzdGF0aWMgYm9vbAorcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYyhQZ0Fpb0hhbmRsZSAq aW9oLCBzaXplX3QgaW9fc2l6ZSkKK3sKKwkvKgorCSAqIFdpdGggRElPIHRoZXJlJ3Mgbm8gYmVu ZWZpdCBmcm9tIGZvcmNpbmcgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFzCisJICogaW9fdXJp bmcgd2lsbCBuZXZlciBwcm9jZXNzIElPIGNvbXBsZXRpb25zIGluIHRoZSBmb3JlZ3JvdW5kLiBU aGUKKwkgKiBrZXJuZWwgd2lsbCB1c2Ugd29ya2VyIHRocmVhZHMgd2hlcmUgYXBwcm9wcmlhdGUu CisJICovCisJaWYgKCEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBPbmNlIHRoZSBJTyBxdWV1ZSBkZXB0aCBpcyBub3QgdGhhdCBz aGFsbG93IGFueW1vcmUsIHRoZSBvdmVyaGVhZCBvZgorCSAqIGRpc3BhdGNoaW5nIHRvIHRoZSBi YWNrZ3JvdW5kIGlzIGEgbGVzcyBzaWduaWZpY2FudCBmYWN0b3IuCisJICovCisJaWYgKGRjbGlz dF9jb3VudCgmcGdhaW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcykgPiA0KQorCQlyZXR1cm4g dHJ1ZTsKKworCS8qCisJICogSWYgdGhlIElPIGlzIGxhcmdlciwgdGhlIGdhaW5zIGZyb20gcGFy YWxsZWxpemluZyB0aGUgbWVtb3J5IGNvcHkgYXJlCisJICogbGFyZ2VyIGFuZCB0eXBpY2FsbHkg dGhlIGltcGFjdCBvZiB0aGUgbGF0ZW5jeSBpcyBzbWFsbGVyLgorCSAqLworCWlmIChpb19zaXpl ID49IChCTENLU1ogKiA0KSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK IHN0YXRpYyB2b2lkCiBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0 cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKIAlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzaXplX3QJ CWlvX3NpemUgPSAwOwogCiAJc3dpdGNoICgoUGdBaW9PcCkgaW9oLT5vcCkKIAl7CkBAIC03MTcs NiArNzQ5LDggQEAgcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1 Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJCQkJCSAgIGlvdi0+aW92X2Jhc2UsCiAJCQkJCQkJ CSAgIGlvdi0+aW92X2xlbiwKIAkJCQkJCQkJICAgaW9oLT5vcF9kYXRhLnJlYWQub2Zmc2V0KTsK KworCQkJCWlvX3NpemUgPSBpb3YtPmlvdl9sZW47CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MjYsNyArNzYwLDEzIEBAIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8oUGdBaW9IYW5kbGUgKmlvaCwg c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogCQkJCQkJCQkJaW9oLT5vcF9kYXRhLnJlYWQuaW92 X2xlbmd0aCwKIAkJCQkJCQkJCWlvaC0+b3BfZGF0YS5yZWFkLm9mZnNldCk7CiAKKwkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92Kysp CisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVuOwogCQkJfQorCisJCQlpZiAocGdhaW9fdXJp bmdfc2hvdWxkX3VzZV9hc3luYyhpb2gsIGlvX3NpemUpKQorCQkJCWlvX3VyaW5nX3NxZV9zZXRf ZmxhZ3Moc3FlLCBJT1NRRV9BU1lOQyk7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgUEdBSU9fT1Bf V1JJVEVWOgpAQCAtNzQ3LDYgKzc4NywxMiBAQCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlv SGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJCSBpb2gtPm9w X2RhdGEud3JpdGUuaW92X2xlbmd0aCwKIAkJCQkJCQkJCSBpb2gtPm9wX2RhdGEud3JpdGUub2Zm c2V0KTsKIAkJCX0KKworCQkJLyoKKwkJCSAqIEZvciBub3cgZG9uJ3QgdHJpZ2dlciB1c2Ugb2Yg SU9TUUVfQVNZTkMgZm9yIHdyaXRlcywgaXQncyBub3QKKwkJCSAqIGNsZWFyIHRoZXJlIGlzIGEg cGVyZm9ybWFuY2UgYmVuZWZpdCBpbiBkb2luZyBzby4KKwkJCSAqLworCiAJCQlicmVhazsKIAog CQljYXNlIFBHQUlPX09QX0lOVkFMSUQ6Ci0tIAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0010-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v19-0010-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7j8 RnJvbSBjNWIyOTMzMTA3NjY0ZTcwZWMxMGQ2ZDI1OTc1MjFiMTEzNThiNTMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDEw LzE4XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKVGhhbmtzIHRvIHRoZSBwcmV2aW91cyBjb21taXQsIHBnYWlvX3dyZWZfY2hlY2tfZG9u ZSgpIHdpbGwgbm93IGRldGVjdCB3aGV0aGVyCklPIGhhcyBjb21wbGV0ZWQgZXZlbiBpZiB1c2Vy c3BhY2UgaGFzIG5vdCB5ZXQgY29uc3VtZWQgdGhlIGtlcm5lbApjb21wbGV0aW9uLiBUbyBhbGxv dyByZWFkX3N0cmVhbS5jIHRvIHVzZSB0aGF0IGtub3dsZWRnZSB0byBjb250cm9sIHJlYWRhaGVh ZAphZ2dyZXNzaXZlbmVzcywgV2FpdFJlYWRCdWZmZXJzKCkgbmVlZHMgdG8gcmV0dXJuIHdoZXRo ZXIgaXQgYWN0dWFsbHkgbmVlZGVkCnRvIHdhaXQuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgfCAxNyArKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAxNyBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IGRkNDFi OTJmOS4uYWE2MWEzOWQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTI1MSw3ICsyNTEsNyBAQCBl eHRlcm4gYm9vbCBTdGFydFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRp b24sCiAJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCQkJCSBpbnQgKm5ibG9ja3Ms CiAJCQkJCQkJIGludCBmbGFncyk7Ci1leHRlcm4gdm9pZCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1 ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbik7CitleHRlcm4gYm9vbCBXYWl0UmVhZEJ1ZmZlcnMo UmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbik7CiAKIGV4dGVybiB2b2lkIFJlbGVhc2VC dWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1 ZmZlciBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBjZDIxYWUz ZmMuLmFmMGUwNTI0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE3NDAs MTIgKzE3NDAsMTkgQEAgUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KFJlYWRCdWZmZXJzT3BlcmF0 aW9uICpvcGVyYXRpb24pCiAJQXNzZXJ0KG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIDw9IG9wZXJh dGlvbi0+bmJsb2Nrcyk7CiB9CiAKLXZvaWQKKy8qCisgKiBXYWl0IGZvciB0aGUgSU8gb3BlcmF0 aW9uIGluaXRpYXRlZCBieSBTdGFydFJlYWRCdWZmZXJzKCkgZXQgYWwgdG8KKyAqIGNvbXBsZXRl LgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkZWQgdG8gd2FpdCBmb3IgdGhlIElPIG9w ZXJhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sCiBXYWl0UmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIHsKIAlQZ0Fpb1JldHVybiAqYWlvX3JldCA9 ICZvcGVyYXRpb24tPmlvX3JldHVybjsKIAlJT0NvbnRleHQJaW9fY29udGV4dDsKIAlJT09iamVj dAlpb19vYmplY3Q7CisJYm9vbAkJbmVlZGVkX3dhaXQgPSBmYWxzZTsKIAogCWlmIChvcGVyYXRp b24tPnBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCiAJewpAQCAtMTgxMCw2ICsx ODE3LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24p CiAJCQkJaW5zdHJfdGltZQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tf aW9fdGltaW5nKTsKIAogCQkJCXBnYWlvX3dyZWZfd2FpdCgmb3BlcmF0aW9uLT5pb193cmVmKTsK KwkJCQluZWVkZWRfd2FpdCA9IHRydWU7CiAKIAkJCQkvKgogCQkJCSAqIFRoZSBJTyBvcGVyYXRp b24gaXRzZWxmIHdhcyBhbHJlYWR5IGNvdW50ZWQgZWFybGllciwgaW4KQEAgLTE4NzQsNiArMTg4 MiwxMiBAQCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikK IAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCisJCS8qCisJCSAqIElmIHRoZSBJTyBjb21w bGV0ZWQgb25seSBwYXJ0aWFsbHksIHdlIG5lZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisJCSAq IHdvcmssIGNvbnNpZGVyIHRoYXQgYSBmb3JtIG9mIGhhdmluZyBoYWQgdG8gd2FpdC4KKwkJICov CisJCW5lZWRlZF93YWl0ID0gdHJ1ZTsKKwogCQkvKgogCQkgKiBUaGlzIG1heSBvbmx5IGNvbXBs ZXRlIHRoZSBJTyBwYXJ0aWFsbHksIGVpdGhlciBiZWNhdXNlIHNvbWUKIAkJICogYnVmZmVycyB3 ZXJlIGFscmVhZHkgdmFsaWQsIG9yIGJlY2F1c2Ugb2YgYSBwYXJ0aWFsIHJlYWQuCkBAIC0xODkw LDYgKzE5MDQsNyBAQCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbikKIAlDaGVja1JlYWRCdWZmZXJzT3BlcmF0aW9uKG9wZXJhdGlvbiwgdHJ1ZSk7CiAKIAkv KiBOQjogUkVBRF9ET05FIHRyYWNlcG9pbnQgd2FzIGFscmVhZHkgZXhlY3V0ZWQgaW4gY29tcGxl dGlvbiBjYWxsYmFjayAqLworCXJldHVybiBuZWVkZWRfd2FpdDsKIH0KIAogLyoKLS0gCjIuNTMu MAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0012-read_stream-Prevent-distance-from-decaying-too-q.patch" Content-Disposition: attachment; filename="v19-0012-read_stream-Prevent-distance-from-decaying-too-q.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7f6 RnJvbSAwYThmYzU0ODllN2ZmMzg4ZTRlZGI4OTA2OTIyNGIxMjMyNDQ3YjE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFNhdCwgMjggTWFyIDIwMjYgMTA6NTE6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAx Mi8xOF0gcmVhZF9zdHJlYW06IFByZXZlbnQgZGlzdGFuY2UgZnJvbSBkZWNheWluZyB0b28KIHF1 aWNrbHkKClVudGlsIG5vdyB3ZSByZWR1Y2VkIHRoZSBsb29rLWFoZWFkIGRpc3RhbmNlIGJ5IDEg b24gZXZlcnkgaGl0LCBhbmQgZG91YmxlZCBpdApvbiBldmVyeSBtaXNzLiBUaGF0IGlzIHByb2Js ZW1hdGljIGJlY2F1c2UgdGhlcmUgYXJlIHZlcnkgY29tbW9uIElPIHBhdHRlcm5zCndoZXJlIHRo aXMgcHJldmVudHMgdXMgZnJvbSBldmVyIHJlYWNoaW5nIGEgc3VmZmljaWVudGx5IGhpZ2ggZGlz dGFuY2UgKGUuZy4gYQptaXNzIGZvbGxvd2VkIGJ5IGEgaGl0IHdpbGwgbmV2ZXIgaGF2ZSB0aGUg ZGlzdGFuY2UgZ3JvdyBiZXlvbmQgMikuIEluIG1hbnkKc3VjaCBjYXNlcywgaWYgd2UgaGFkIGV2 ZXIgcmVhY2hlZCBhIHN1ZmZpY2llbnQgbG9vay1haGVhZCBkaXN0YW5jZSwgdGhpbmdzCndvdWxk IGhhdmUgYmVlbiBmaW5lLCBiZWNhdXNlIHdlIGdyb3cgdGhlIGRpc3RhbmNlIGZhc3RlciB0aGFu IHdlIGRlY3JlYXNlIGl0LgoKT25lIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIG1vc3Qgb2J2aW91cyBh bnN3ZXIgdG8gdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHRvIG5ldmVyCnJlZHVjZSB0aGUgZGlzdGFu Y2UuIEhvd2V2ZXIsIHRoYXQgd291bGQgbm90IHdvcmsgd2VsbCwgYXMgKHBhcnRpY3VsYXJseSB3 aXRoCnVwY29taW5nIHVzZXJzIG9mIHJlYWQgc3RyZWFtcyksIGl0IGlzIHJlYXNvbmFibHkgY29t bW9uIHRvIGF0IGZpcnN0IGhhdmUgYQpsb3Qgb2YgbWlzc2VzIGFuZCB0aGVuIHRvIHRyYW5zaXRp b24gdG8gYSBmdWxseSBjYWNoZWQgd29ya2xvYWQsIGUuZy4gYmVjYXVzZQp0aGUgc2FtZSBibG9j a3MgYXJlIG5lZWRlZCByZXBlYXRlZGx5IHdpdGhpbiBvbmUgc3RyZWFtLiBEb2luZyB1bm5lY2Vz c2FyaWx5CmRlZXAgcmVhZGFoZWFkIGNhbiBiZSBjb3N0bHksIGR1ZSB0byBoYXZpbmcgdG8gcGlu IGEgbG90IG1vcmUgYnVmZmVycywgd2hpY2gKaW5jcmVhc2VzIENQVSBvdmVyaGVhZC4KCkJlY2F1 c2UgdGhlIGNvc3Qgb2YgYSBzeW5jaHJvbm91c2x5IGhhbmRsZWQgbWlzcyBjYW4gYmUgdmVyeSBo aWdoIChtdWx0aXBsZQptaWxsaXNlY29uZHMgZm9yIGV2ZXJ5IElPIHdpdGggY29tbW9ubHkgdXNl ZCBzdG9yYWdlKSBjb21wYXJlZCB0byB0aGUgQ1BVCm92ZXJoZWFkIG9mIGtlZXBpbmcgdGhlIGRp c3RhbmNlIHRvbyBoaWdoLCB3ZSB3YW50IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBub3QKcmVkdWNp bmcgdGhlIGRpc3RhbmNlIHRvbyBlYXJseS4KClRoZSBpbnNpZ2h0IHRoYXQgYSBkZWNyZWFzZSBv ZiB0aGUgZGlzdGFuY2UgYnkgMSBhdCBldmVyIGhpdCBtYXkgYmUgb2sgYXQKbGFyZ2UgZGlzdGFu Y2VzLCBidXQgbm90IGF0IGxvdyBkaXN0YW5jZXMsIHNob3dzIGEgd2F5IG91dDogSWYgd2Ugb25s eSBhbGxvdwpkZWNyZWFzaW5nIHRoZSBkaXN0YW5jZSBvbmNlIHRoZXJlIHdlcmUgbm8gbWlzc2Vz IGZvciBvdXIgbWF4aW11bSBsb29rLWFoZWFkCmRpc3RhbmNlLCB3ZSB3aWxsIGtlZXAgdGhlIGRp c3RhbmNlIGhpZ2ggYXMgbG9uZyBhcyByZWFkYWhlYWQgaGFzIGEgY2hhbmNlIHRvCmRvIElPIGFz eW5jaHJvbm91c2x5LCBidXQgbm90IGNvbW1vbmx5IHdoZW4gbm90LgoKU2V2ZXJhbCBmb2xrcyBo YXZlIHdyaXR0ZW4gdmFyaWFudHMgb2YgdGhpcyBwYXRjaCwgYXQgbGVhc3QgVGhvbWFzIE11bnJv LApNZWxhbmllIFBsYWdlbWFuIGFuZCBJIGFsbCBoYXZlIHdyaXR0ZW4gdmFyaWFudHMgb2YgdGhp cy4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v CkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIHwg MzYgKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwppbmRleCA3ODkzZmRmMDMuLmZhMjdlYzc5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFk X3N0cmVhbS5jCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCWZv cndhcmRlZF9idWZmZXJzOwogCWludDE2CQlwaW5uZWRfYnVmZmVyczsKIAlpbnQxNgkJZGlzdGFu Y2U7CisJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwogCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CiAJaW50CQkJcmVhZF9idWZmZXJz X2ZsYWdzOwpAQCAtMzY0LDkgKzM2NSwyMiBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3Jl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCS8qIFJlbWVtYmVyIHdoZXRoZXIgd2UgbmVlZCB0byB3 YWl0IGJlZm9yZSByZXR1cm5pbmcgdGhpcyBidWZmZXIuICovCiAJaWYgKCFuZWVkX3dhaXQpCiAJ ewotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIGRlY2F5cywgbm8gSS9PIG5lY2Vzc2FyeS4gKi8K LQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAxKQotCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkv KgorCQkgKiBJZiB0aGVyZSBjdXJyZW50bHkgaXMgbm8gSU8gaW4gcHJvZ3Jlc3MsIGFuZCB3ZSBo YXZlIG5vdCBuZWVkZWQgdG8KKwkJICogaXNzdWUgSU8gcmVjZW50bHksIGRlY2F5IHRoZSBsb29r LWFoZWFkIGRpc3RhbmNlLiAgV2UgZGV0ZWN0IGlmIHdlCisJCSAqIGhhZCB0byBpc3N1ZSBJTyBy ZWNlbnRseSBieSBoYXZpbmcgYSBkZWNheSBob2xkb2ZmIHRoYXQncyBzZXQgdG8KKwkJICogdGhl IG1heCBsb29rLWFoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8uICBUaGlz IGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBhIGhpZ2gg ZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkgd2hlbiBz dGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2stYWhlYWQKKwkJICogZGlzdGFuY2UuCisJCSAq LworCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDEgJiYgc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3Mg PT0gMCkKKwkJeworCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9PSAwKQor CQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKKwkJCWVsc2UKKwkJCQlzdHJlYW0tPmRpc3RhbmNlX2Rl Y2F5X2hvbGRvZmYtLTsKKwkJfQogCX0KIAllbHNlCiAJewpAQCAtNzAyLDYgKzcxNiw3IEBAIHJl YWRfc3RyZWFtX2JlZ2luX2ltcGwoaW50IGZsYWdzLAogCXN0cmVhbS0+c2VxX2Jsb2NrbnVtID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+c2VxX3VudGlsX3Byb2Nlc3NlZCA9IEludmFs aWRCbG9ja051bWJlcjsKIAlzdHJlYW0tPnRlbXBvcmFyeSA9IFNtZ3JJc1RlbXAoc21ncik7CisJ c3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID0gMDsKIAogCS8qCiAJICogU2tpcCB0aGUg aW5pdGlhbCByYW1wLXVwIHBoYXNlIGlmIHRoZSBjYWxsZXIgc2F5cyB3ZSdyZSBnb2luZyB0byBi ZQpAQCAtOTU0LDYgKzk2OSwyMCBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFt ICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCWRpc3RhbmNlID0gTWluKGRpc3Rh bmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CiAJCXN0cmVhbS0+ZGlzdGFuY2UgPSBk aXN0YW5jZTsKIAorCQkvKgorCQkgKiBBcyB3ZSBuZWVkZWQgSU8sIHByZXZlbnQgZGlzdGFuY2Ug ZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKKwkJICogbWF4aW11bSBsb29rLWFoZWFkIHdp bmRvdy4gVGhpcyBhdm9pZHMgaGF2aW5nIGRpc3RhbmNlIGNvbGxhcHNlIHRvbworCQkgKiBxdWlj a2x5IGluIHdvcmtsb2FkcyB3aGVyZSBtb3N0IG9mIHRoZSByZXF1aXJlZCBibG9ja3MgYXJlIGNh Y2hlZCwKKwkJICogYnV0IHdoZXJlIHRoZSByZW1haW5pbmcgSU9zIGFyZSBhIHN1ZmZpY2llbnQg ZW5vdWdoIGZhY3RvciB0byBjYXVzZQorCQkgKiBhIHN1YnN0YW50aWFsIHNsb3dkb3duIGlmIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHkuCisJCSAqCisJCSAqIFRoZXJlIGFyZSB2YWxpZCBhcmd1bWVu dHMgZm9yIHByZXZlbnRpbmcgZGVjYXkgZm9yIG1heF9pb3Mgb3IgZm9yCisJCSAqIG1heF9waW5u ZWRfYnVmZmVycy4gIEJ1dCB0aGUgYXJndW1lbnQgZm9yIG1heF9waW5uZWRfYnVmZmVycyBzZWVt cworCQkgKiBjbGVhcmVyIC0gaWYgd2UgY2FuJ3Qgc2VlIGFueSBtaXNzZXMgd2l0aGluIHRoZSBt YXhpbXVtIGxvb2stYWhlYWQKKwkJICogZGlzdGFuY2UsIHdlIGNhbid0IGRvIGFueSB1c2VmdWwg cmVhZGFoZWFkLgorCQkgKi8KKwkJc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID0gc3Ry ZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnM7CisKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0 aGUgZmlyc3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQogCQkgKiBpc3N1aW5n IGFkdmljZSBmb3IsIGNhbmNlbCB0aGF0IHVudGlsIHRoZSBuZXh0IGp1bXAuICBUaGUga2VybmVs CkBAIC0xMTI4LDYgKzExNTcsNyBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJl YW0pCiAJLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGRhdGEgaXMgY2FjaGVkLiAqLwogCXN0cmVhbS0+ ZGlzdGFuY2UgPSAxOwogCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5j ZTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogfQogCiAvKgotLSAKMi41 My4wCgo= --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0011-read_stream-Issue-IO-synchronously-while-in-fast.patch" Content-Disposition: attachment; filename="v19-0011-read_stream-Issue-IO-synchronously-while-in-fast.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7g7 RnJvbSA1NmQ0NGExOGI2MzE5NWUxMmI1NWFhZGRlZTcyZjc3OTc0MDEyYjVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDEx LzE4XSByZWFkX3N0cmVhbTogSXNzdWUgSU8gc3luY2hyb25vdXNseSB3aGlsZSBpbiBmYXN0CiBw YXRoCgpXaGlsZSBpbiBmYXN0LXBhdGgsIGV4ZWN1dGUgYW55IElPIHRoYXQgd2UgbWlnaHQgZW5j b3VudGVyIHN5bmNocm9ub3VzbHkuCkJlY2F1c2Ugd2UgYXJlLCBpbiB0aGF0IG1vbWVudCwgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueSBvY2Nhc2lvbmFsCklPIHRvIHdvcmtlcnMg aGFzIHRoZSBkaXNwYXRjaCBvdmVyaGVhZCwgd2l0aG91dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBv ZiB0aGUKSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVlZCBpdC4KClRoaXMgaGVscHMgaW9fbWV0 aG9kPXdvcmtlciBwZXJmb3JtYW5jZSBmb3Igd29ya2xvYWRzIHRoYXQgaGF2ZSBvbmx5Cm9jY2Fz aW9uYWwgY2FjaGUgbWlzc2VzLCBidXQgd2hlcmUgdGhvc2Ugb2NjYXNpb25hbCBtaXNzZXMgc3Rp bGwgdGFrZSBsb25nCmVub3VnaCB0byBtYXR0ZXIuICBJdCBpcyBsaWtlbHkgdGhpcyBpcyBvbmx5 IG1lYXN1cmFibGUgd2l0aCBmYXN0IGxvY2FsCnN0b3JhZ2Ugb3Igd29ya2xvYWRzIHdpdGggdGhl IGRhdGEgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLCBhcyB3aXRoIHJlbW90ZQpzdG9yYWdlIHRo ZSBJTyBsYXRlbmN5LCBub3QgdGhlIGRpc3BhdGNoLXRvLXdvcmtlciBsYXRlbmN5LCBpcyB0aGUg ZGV0ZXJtaW5pbmcKZmFjdG9yLgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgfCAyMSArKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk LCAyMSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggY2Q1NGMxYTc0Li43ODkzZmRmMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtODMzLDYgKzgzMywyMSBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3Ry ZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCQlpZiAoc3RyZWFtLT5hZHZp Y2VfZW5hYmxlZCkKIAkJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfSVNTVUVfQURWSUNFOwogCisJ CQkvKgorCQkJICogV2hpbGUgaW4gZmFzdC1wYXRoLCBleGVjdXRlIGFueSBJTyB0aGF0IHdlIG1p Z2h0IGVuY291bnRlcgorCQkJICogc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0 IG5vdywgb25seSBsb29raW5nIG9uZQorCQkJICogYmxvY2sgYWhlYWQsIGRpc3BhdGNoaW5nIGFu eSBvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMgd291bGQKKwkJCSAqIGhhdmUgdGhlIG92ZXJoZWFk IG9mIGRpc3BhdGNoaW5nIHRvIHdvcmtlcnMsIHdpdGhvdXQgYW55CisJCQkgKiByZWFsaXN0aWMg Y2hhbmNlIG9mIHRoZSBJTyBjb21wbGV0aW5nIGJlZm9yZSB3ZSBuZWVkIGl0LiBXZQorCQkJICog d2lsbCBzd2l0Y2ggdG8gbm9uLXN5bmNocm9ub3VzIElPIGFmdGVyIHRoaXMuCisJCQkgKgorCQkJ ICogQXJndWFibHkgd2Ugc2hvdWxkIGRvIHNvIG9ubHkgZm9yIHdvcmtlciwgYXMgdGhlcmUncyBm YXIgbGVzcworCQkJICogZGlzcGF0Y2ggb3ZlcmhlYWQgd2l0aCBpb191cmluZy4gSG93ZXZlciwg dGVzdHMgc28gZmFyIGhhdmUgbm90CisJCQkgKiBzaG93biBhIGNsZWFyIGRvd25zaWRlIGFuZCBh ZGRpdGlvbmFsIGlvX21ldGhvZCBhd2FyZW5lc3MgaGVyZQorCQkJICogc2VlbXMgbm90IGdyZWF0 IGZyb20gYW4gYWJzdHJhY3Rpb24gUE9WLgorCQkJICovCisJCQlmbGFncyB8PSBSRUFEX0JVRkZF UlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAqIFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5l eHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQKIAkJCSAqIGFyYml0cmFyeSBJL08gZW50 cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3QgaGF2ZSB0bwpAQCAtODYwLDYgKzg3NSwx MiBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipw ZXJfYnVmZmVyX2RhdGEpCiAJCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9IDE7CiAJCQlzdHJl YW0tPmlvc1swXS5idWZmZXJfaW5kZXggPSBvbGRlc3RfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFt LT5zZXFfYmxvY2tudW0gPSBuZXh0X2Jsb2NrbnVtICsgMTsKKworCQkJLyoKKwkJCSAqIFhYWDog SXQgbWlnaHQgYmUgd29ydGggdHJpZ2dlcmluZyBhZGRpdGlvbmFsIHJlYWRhaGVhZCBoZXJlLCB0 bworCQkJICogYXZvaWQgaGF2aW5nIHRvIGVmZmVjdGl2ZWx5IGRvIGFub3RoZXIgc3luY2hyb25v dXMgSU8gZm9yIHRoZQorCQkJICogbmV4dCBibG9jayAoaWYgaXQgd2VyZSBhbHNvIGEgbWlzcyku CisJCQkgKi8KIAkJfQogCQllbHNlCiAJCXsKLS0gCjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v19-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7l10 RnJvbSBlZjJmNzZkMTE0NjBlNDQxMGFmZmYxMDFkMTU1MzZhY2MzZWJkNjE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOSAwOC8xOF0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBvciBvdmVyZmxvdyBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUKQU0gdGhlIGFiaWxp dHkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5n Cmhhc2ggaW5kZXggc2NhbnMuCgpiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgYWx3YXlzIHRydWUg ZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMgKHNpbmNlIGhhc2gKZG9lc24ndCBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgYW5kIGFsd2F5cyB1c2VzIGFuIE1WQ0Mgc25hcHNob3QpLCBzbwp0aGUgYnVm ZmVyIHBpbiBpbnRlcmxvY2sgaGVsZCBvbiBlYWNoIGJhdGNoIGlzIGFsd2F5cyBkcm9wcGVkIGF0 IHVubG9jawp0aW1lIC0tIGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbiByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0uICBUaGlzIGRpZmZlcnMKZnJvbSBoYXNoJ3MgcHJldmlvdXMgYXBwcm9hY2ggb2Yg aG9sZGluZyBvbiB0byBhIHBpbiBmb3IgYXQgbGVhc3QgYXMKbG9uZyBhcyB0aGUgc2NhbiB3YXMg c3RvcHBlZCBvbiB0aGUgcGlubmVkIGluZGV4IHBhZ2UuCgpHdWFyYW50ZWVpbmcgdGhhdCByZXR1 cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMKZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLCB3 aGVyZQp0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55IHBpbnMgb24gaGVh cCBwYWdlcy4gIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZAphcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvIHByZXZlbnQgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4KbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLiAgTm90 ZSwgaG93ZXZlciwKdGhhdCBoYXNoIHN0aWxsIGhvbGRzIG9uIHRvIHBpbnMgbmVlZGVkIGZvciBp dHMgb3duIGludGVybmFsIHB1cnBvc2VzCihlLmcuLCBpdCdsbCBzdGlsbCBob2xkIG9udG8gYSBw aW4gZHVyaW5nIGEgYnVja2V0IHNwbGl0KS4KCmhhc2hraWxsaXRlbXNiYXRjaCAodGhlIGhhc2gg aW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoCmludGVyZmFjZSkgcGVy Zm9ybXMgTFBfREVBRCBtYXJraW5nIG9mIGRlYWQgaW5kZXggZW50cmllcywgd2hpbGUKZm9sbG93 aW5nIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyB0byB0aGUgb2xkIGFwcHJvYWNoLiAgSXQgcmVs aWVzIG9uCmNvbXBhcmluZyB0aGUgYmF0Y2gncyBzYXZlZCBMU04gYWdhaW5zdCB0aGUgY3VycmVu dCBwYWdlIExTTiB0byBkZXRlY3QKY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgZmFrZSBMU04gc3VwcG9ydApmb3IgdW5sb2dnZWQgcmVsYXRpb25z LiAgUHJlcGFyYXRvcnkgY29tbWl0IGU1ODM2ZjdiIGFkZGVkIHRoYXQgc3VwcG9ydAp0byB0aGUg aGFzaCBpbmRleCBBTS4KCmhhc2h1bmd1YXJkYmF0Y2ggaXMgYWxzbyBwcm92aWRlZCwgZXZlbiB0 aG91Z2ggaXQgaXMgbm90IGN1cnJlbnRseQpleGVyY2lzZWQ6IGhhc2ggZG9lcyBub3Qgc3VwcG9y dCBpbmRleC1vbmx5IHNjYW5zIChhbmQgYWx3YXlzIHVzZXMgYW4KTVZDQyBzbmFwc2hvdCksIHNv IGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBhbHdheXMgdHJ1ZSBmb3IgaGFzaCBpbmRleApzY2Fu cyB3aXRoIGhlYXBhbSAoYXMgbm90ZWQgYWxyZWFkeSwgaW4gcHJhY3RpY2UgZXZlcnkgYmF0Y2gn cyBsb2NrIGFuZApwaW4gYXJlIHJlbGVhc2VkIGF0IHVubG9jayB0aW1lIGR1cmluZyBoYXNoIHNj YW5zKS4gIFRoZSBjYWxsYmFjayBpcyBhCnJlcXVpcmVtZW50IGZvciBhbWdldGJhdGNoIGluZGV4 IEFNcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog VG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FI Mi1Xem1ZcWhhY0JIMTYxcGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDgxICsr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8IDIxMCArKysrKysrKysrLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIHwgMzQ1ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNl cnRpb25zKCspLCA1MDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li5l OWVkNzk1ZjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gK IAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRl ZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hP X1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hh dCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRh CiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAg aXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0 aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gKi8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGlu ZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBpdGVtcyAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJ LyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1 cnJQYWdlJ3MgcmlnaHQgbGluayAqLworfSBIYXNoQmF0Y2hEYXRhOwogCi10eXBlZGVmIHN0cnVj dCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhlIGJ1 ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQgaGFz aCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJmbG93 IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3IgYnVj a2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVk IGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4g c2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJh eSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRv d253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQg YSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNo b3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWlu dAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJ CQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0 ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Qb3NJ dGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwotfSBI YXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBc Ci0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdl KSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNW YWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlkKHNj YW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcyku Y3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlC bG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUgSGFz aFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9 IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVt YmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQko c2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLmZp cnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcyku aXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCisvKiBBY2Nlc3MgdGhlIGhhc2gtcHJpdmF0 ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZp bmUgSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4YW1fdXRpbF9iYXRjaF9n ZXRfYW1kYXRhKHNjYW4sIGJhdGNoLCBIYXNoQmF0Y2hEYXRhKQogCiAvKgogICoJSGFzaFNjYW5P cGFxdWVEYXRhIGlzIHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2FuLgpAQCAtMTc4 LDE1ICsxNDAsNiBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAkgKiByZWZl cnJlZCBvbmx5IHdoZW4gaGFzaHNvX2J1Y19wb3B1bGF0ZWQgaXMgdHJ1ZS4KIAkgKi8KIAlib29s CQloYXNoc29fYnVjX3NwbGl0OwotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAo a2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0 ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJ bnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQotCS8q Ci0JICogSWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiBhIHBhZ2UgYW5kIHNhdmUg dGhlbSBpbgotCSAqIEhhc2hTY2FuUG9zRGF0YQotCSAqLwotCUhhc2hTY2FuUG9zRGF0YSBjdXJy UG9zOwkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KIH0gSGFzaFNjYW5PcGFxdWVEYXRhOwog CiB0eXBlZGVmIEhhc2hTY2FuT3BhcXVlRGF0YSAqSGFzaFNjYW5PcGFxdWU7CkBAIC0zNjgsMTEg KzMyMSwxNSBAQCBleHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZh bHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVl LAogCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZv ICppbmRleEluZm8pOwotZXh0ZXJuIGJvb2wgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGhhc2hnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0 Y2gsCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBoYXNoZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nhbktl eSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQg bm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGhhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGhhc2h1bmd1YXJkYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9p ZCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaGFzaGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJ CQkgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICs0MDIsOSBAQCBleHRl cm4gdm9pZCBfaGFzaF9maW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIG9idWYsCiAJCQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNo LmMgKi8KLWV4dGVybiBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwog dHlwZWRlZiBzdHJ1Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29y dC5jICovCkBAIC00NzYsNyArNDM0LDYgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9v bGRibG9ja19mcm9tX25ld2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVy biBCbG9ja051bWJlciBfaGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24g cmVsLCBCdWNrZXQgb2xkX2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNr ZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJ CQkJCQkJCSB1aW50MzIgbG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBf aGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2guYyAqLwogZXh0 ZXJuIHZvaWQgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tl dCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQppbmRleCBmYzkwMzExMTcuLjk3MmJiNjY2YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL1JFQURNRQpAQCAtMjU1LDI4ICsyNTUsMjkgQEAgVGhlIHJlYWRlciBhbGdvcml0 aG0gaXM6CiAJCXJldGFrZSB0aGUgYnVmZmVyIGNvbnRlbnQgbG9jayBvbiBuZXcgYnVja2V0CiAJ CWFycmFuZ2UgdG8gc2NhbiB0aGUgb2xkIGJ1Y2tldCBub3JtYWxseSBhbmQgdGhlIG5ldyBidWNr ZXQgZm9yCiAgICAgICAgICB0dXBsZXMgd2hpY2ggYXJlIG5vdCBtb3ZlZC1ieS1zcGxpdAotLS0g dGhlbiwgcGVyIHJlYWQgcmVxdWVzdDoKKy0tIHRoZW4sIHBlciBiYXRjaCAocGFnZSkgcmVxdWVz dDoKIAlyZWFjcXVpcmUgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZQogCXN0ZXAgdG8gbmV4 dCBwYWdlIGlmIG5lY2Vzc2FyeSAobm8gY2hhaW5pbmcgb2YgY29udGVudCBsb2NrcywgYnV0IGtl ZXAKIAl0aGUgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCB0aHJvdWdob3V0IHRoZSBzY2FuKQot CXNhdmUgYWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50 byBhbiBpdGVtcyBhcnJheQotCXJlbGVhc2UgcGluIGFuZCBjb250ZW50IGxvY2sgKGJ1dCBpZiBp dCBpcyBwcmltYXJ5IGJ1Y2tldCBwYWdlIHJldGFpbgotCWl0cyBwaW4gdGlsbCB0aGUgZW5kIG9m IHRoZSBzY2FuKQotCWdldCB0dXBsZSBmcm9tIGFuIGl0ZW0gYXJyYXkKKwlzYXZlIGFsbCB0aGUg bWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYSBiYXRjaAorCXJl bGVhc2UgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZSByZXR1cm4gYmF0Y2ggdG8gdGFibGUg QU0gKHRhYmxlIEFNCisJd2lsbCBkcm9wIGJhdGNoJ3MgYnVmZmVyIHBpbiwgdGhvdWdoIHByaW1h cnkgYnVja2V0IHBhZ2UgcGluIGlzIGtlcHQKKwl1bnRpbCB0aGUgZW5kIG9mIHRoZSBzY2FuKQog LS0gYXQgc2NhbiBzaHV0ZG93bjoKLQlyZWxlYXNlIGFsbCBwaW5zIHN0aWxsIGhlbGQKKwlyZWxl YXNlIHNjYW4tb3duZWQgcGlucyAoZS5nLiwgcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4pIGFzIG5l ZWRlZAogCiBIb2xkaW5nIHRoZSBidWZmZXIgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdl IGZvciB0aGUgd2hvbGUgc2NhbiBwcmV2ZW50cwotdGhlIHJlYWRlcidzIGN1cnJlbnQtdHVwbGUg cG9pbnRlciBmcm9tIGJlaW5nIGludmFsaWRhdGVkIGJ5IHNwbGl0cyBvcgotY29tcGFjdGlvbnMu ICAoT2YgY291cnNlLCBvdGhlciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0 ZWQuKQordGhlIGJ1Y2tldCBmcm9tIGJlaW5nIHJlb3JnYW5pemVkIGJ5IHNwbGl0cyBvciBjb21w YWN0aW9ucyB3aGlsZSB0aGUgc2NhbiBpcworaW4gcHJvZ3Jlc3MuICAoT2YgY291cnNlLCBvdGhl ciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQuKQogCi1UbyBtaW5pbWl6 ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGluZGV4IHNjYW4gYWx3YXlzIHNlYXJjaGVzIHRo ZSBlbnRpcmUKLWhhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0 IG9uY2UsIGNvcHlpbmcgdGhlaXIgaGVhcCB0dXBsZQotSURzIGludG8gYmFja2VuZC1sb2NhbCBz dG9yYWdlLiBUaGUgaGVhcCB0dXBsZSBJRHMgYXJlIHRoZW4gcHJvY2Vzc2VkIHdoaWxlIG5vdAot aG9sZGluZyBhbnkgcGFnZSBsb2NrIHdpdGhpbiB0aGUgaW5kZXggdGhlcmVieSwgYWxsb3dpbmcg Y29uY3VycmVudCBpbnNlcnRpb24KLXRvIGhhcHBlbiBvbiB0aGUgc2FtZSBpbmRleCBwYWdlIHdp dGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlCi1jdXJyZW50IHNjYW4gcG9z aXRpb24gZm9yIHRoZSByZWFkZXIuIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhl Ci1idWNrZXQgcGFnZSwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZGVsZXRpb25zIGFu ZCBidWNrZXQgc3BsaXQuCitUbyBtaW5pbWl6ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGlu ZGV4IHNjYW5zIGFsd2F5cyBzZWFyY2ggdGhlIGVudGlyZQoraGFzaCBwYWdlIHRvIGlkZW50aWZ5 IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgYXQgb25jZSwgcmV0dXJuaW5nIHRoZW0gaW4KK2JhdGNo ZXMgdG8gdGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIHByb2Nlc3NlcyBiYXRjaGVzIHdoaWxl IG5vIHBhZ2UgbG9jaworaXMgaGVsZCB3aXRoaW4gdGhlIGluZGV4LCBhbGxvd2luZyBjb25jdXJy ZW50IGluc2VydGlvbiB0byBoYXBwZW4gb24gdGhlCitzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBh bnkgcmVxdWlyZW1lbnQgb2YgcmUtZmluZGluZyB0aGUgY3VycmVudCBzY2FuCitwb3NpdGlvbiBm b3IgdGhlIHJlYWRlci4gIFRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuIGJhdGNoIGJ1ZmZlciBw aW5zIGFyZQorZHJvcHBlZC4gIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlIHBy aW1hcnkgYnVja2V0IHBhZ2UsIHRvCitwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBidWNrZXQg c3BsaXRzLgogCiBUbyBhbGxvdyBmb3Igc2NhbnMgZHVyaW5nIGEgYnVja2V0IHNwbGl0LCBpZiBh dCB0aGUgc3RhcnQgb2YgdGhlIHNjYW4sIHRoZQogYnVja2V0IGlzIG1hcmtlZCBhcyBidWNrZXQt YmVpbmctcG9wdWxhdGVkLCBpdCBzY2FuIGFsbCB0aGUgdHVwbGVzIGluIHRoYXQKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYwppbmRleCAyZTMyYmUyMzMuLjY1ZjM4YzkzZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwpAQCAtMTEzLDEwICsxMTMsMTAgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4g PSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAotCQkuYW1nZXR0dXBs ZSA9IGhhc2hnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAotCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCi0JCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWdldHR1cGxlID0g TlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2gsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gaGFzaGtpbGxpdGVtc2JhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNodW5ndWFyZGJh dGNoLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFz aGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI5OSw1MyArMjk5LDI4IEBAIGhh c2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAog LyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4K KyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBs ZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAoraGFzaGdldGJhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKLQlib29sCQlyZXM7CiAKIAkvKiBIYXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5j ZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNoIGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1 ZTsKIAotCS8qCi0JICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdl IGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAg SWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQg dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UK KwlpZiAocHJpb3JiYXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlm IHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlp ZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVt ZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJ ICogYXQgb25jZSByaWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBv ZiBzY2FuLikKLQkJCSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4g ZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0g bWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRl dGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRy aWVzLgotCQkJICovCi0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtp bGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKKwkJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNvLT5udW1LaWxs ZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1L aWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hfZHJvcHNjYW5i dWYocmVsLCBzbyk7CiAKLQkJLyoKLQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkgKi8K LQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBkaXIpOworCQkvKiBJbml0aWFsaXplIHRoZSBzY2Fu LCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zICovCisJCXJldHVybiBf aGFzaF9maXJzdChzY2FuLCBkaXIpOwogCX0KIAotCXJldHVybiByZXM7CisJLyogUmV0dXJuIGJh dGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2FsbGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlvbiAnZGlyJykg Ki8KKwlyZXR1cm4gX2hhc2hfbmV4dChzY2FuLCBkaXIsIHByaW9yYmF0Y2gpOwogfQogCiAKQEAg LTM1NSwyNiArMzMwLDI2IEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogaW50NjQKIGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU SURCaXRtYXAgKnRibSkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2 NAkJbnRpZHMgPSAwOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQlyZXMgPSBfaGFz aF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJz dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChi YXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpbnQgaXRlbUluZGV4ID0gYmF0Y2gtPmZpcnN0SXRl bTsKKwkJCSBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1JbmRleCsrKQor CQl7CisJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJs ZVRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKIAkJLyoKLQkJICogX2hhc2hfZmly c3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJ ICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9y ZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0 cyB0byB0aGUgVElEQml0bWFwLgorCQkgKiBfaGFzaF9uZXh0IHJlbGVhc2VzIHRoZSBwcmlvciBi YXRjaCBmb3IgYml0bWFwIGNhbGxlcnMgYmVmb3JlCisJCSAqIGFsbG9jYXRpbmcgdGhlIG5leHQg b25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcyBldmVyIHVzZWQgYXQgYSB0aW1lCiAJCSAqLwotCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVlKTsKLQkJbnRp ZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsK KwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7 CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzk2LDE3ICszNzEsMTYgQEAgaGFzaGJlZ2luc2Nh bihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuID0gUmVsYXRp b25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0gKEhhc2hTY2Fu T3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFzaFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAK IAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxp dCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVtS2lsbGVkID0g MDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhJbmRl eFR1cGxlc1BlclBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSBNQVhBTElH TihzaXplb2YoSGFzaEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2Ug PSAwOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC00MjEsMTggKzM5NSw4IEBAIGhhc2hyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9o YXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7 CiAKLQkvKiBzZXQgcG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNhdXNlIF9oYXNoX2ZpcnN0 IGNhbGwpICovCi0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQogCS8qIFVw ZGF0ZSBzY2FuIGtleSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKHNjYW5rZXkgJiYg c2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXks IHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwpAQCAtNDQxLDYgKzQw NSwxMTEgQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwg aW50IG5zY2Fua2V5cywKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgor ICoJaGFzaGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMg TFBfREVBRAorICovCit2b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2Nh biwgYmF0Y2gpOworCUJ1ZmZlcgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBhZ2VPcGFxdWUg b3BhcXVlOworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWF4b2ZmOworCWJvb2wJCWtpbGxl ZHNvbWV0aGluZyA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0KGJh dGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBoYXNoYmF0Y2gt PmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZM T1dfUEFHRSk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlBc3Nl cnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxz bikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hfcmVs YnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 Zik7CisJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWF4b2ZmID0gUGFnZUdl dE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ZGVh ZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0 Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRl bXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRl bUluZGV4XTsKKworCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNzZXJ0 KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5kZXggPD0gYmF0 Y2gtPmxhc3RJdGVtKTsKKworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCQlpZiAoSXRl bVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+dGFibGVUaWQpKQorCQkJ eworCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVXNl IHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJICog dXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCisJ CQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJ CQkgKi8KKwkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQlnb3Rv IHVubG9ja19wYWdlOworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQkJSXRl bUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJyZWFr OwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0gT2Zm c2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNh biBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVy CisJICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJ ICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBh IGhpbnQuCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+aGFzaG9f ZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmluaXNoU2V0SGludEJp dHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9oYXNoX3JlbGJ1Zihy ZWwsIGJ1Zik7Cit9CisKKy8qCisgKgloYXNodW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdz IFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0 aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRv CisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3Zv aWQKK2hhc2h1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCkKK3sKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNj YW4sIGJhdGNoKTsKKworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0 Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoaGFzaGJh dGNoLT5idWYpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2Nh bgogICovCkBAIC00NTAsMTcgKzUxOSw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1Zihy ZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtp bGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li5lMjZlZThiYjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBAIGhhc2hf bWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGhh c2ggYnVja2V0IGFuZCBvdmVyZmxvdyBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRo ZQogCQkgKiBMUF9GTEFHUyB3aXRob3V0IGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5jZSwg bWFzayB0aGUgbGluZQotCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgaGFzaGdldHR1cGxlKCksIF9o YXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkJICogcG9pbnRlciBmbGFncy4gU2VlIGhh c2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhw YWdlKTsKIAl9CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQgYml0IExI X1BBR0VfSEFTX0RFQURfVFVQTEVTIG1heSByZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28sIG1hc2sg aXQuIFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJICogdW5sb2dnZWQuIFNv LCBtYXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJICovCiAJ b3BhcXVlLT5oYXNob19mbGFnICY9IH5MSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDgwOTliMGQwMi4uMTFlM2RiNDcyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3Bi dWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRp bmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhv bGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBw cmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tl dCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJl bGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7Ci0JLyogcmVsZWFzZSBwaW4gd2UgaG9s ZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hz b19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3Mu YnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLworCWlm IChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYo cmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IElu dmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0 IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm ICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVj a2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYg KEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNv LT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8q IHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsK IAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNl YXJjaC5jCmluZGV4IDg5ZDFjNWJjNi4uYTY4MTJjNmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDk0IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShI YXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNo IGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1 ZSAqb3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0g aW4gYSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVt cyBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhl IGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBh bmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBw cmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0 aGUgY3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgog ICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRo ZSBUSUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRl ZCBhcyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29u dGFpbmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJl dHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0 Y2hlcy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9u IGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4K LSAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3Zl cmZsb3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUg cnVsZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nh bk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9z SXRlbSAqY3Vyckl0ZW07CisJSGFzaEJhdGNoRGF0YSAqaGFzaHByaW9yYmF0Y2ggPSBIYXNoQmF0 Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZl cgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0Y2ggYmF0 Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQg cGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1v dmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwg d2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIFRoZSBjb3JlIGNvZGUgbXVzdCBk ZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMuCisJICog QSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mgc2NhbiBk aXJlY3Rpb24gaXMKKwkgKiB1c2VkIGZvciB0aGlzLgorCSAqLworCUFzc2VydChwcmlvcmJhdGNo LT5kaXIgPT0gZGlyKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBu ZXh0IGJhc2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0 aGUgcHJpb3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQot CXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0p Ci0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNj YW4pOworCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25v ID0gaGFzaHByaW9yYmF0Y2gtPnByZXZQYWdlOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLm5l eHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVm ID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7 Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zf c2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9 Ci0JfQorCS8qCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9y IGJhdGNoIG5vdyBzbyB0aGF0IHRoZQorCSAqIGFsbG9jYXRpb24gYmVsb3cgY2FuIHJldXNlIGl0 cyBtZW1vcnkuICBUaGF0IHdheSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUgdGhh biBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykK KwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAo IUJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2Nh dGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYyhzY2FuKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwg Ymxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJZWxzZQogCXsKLQkJaWYgKC0t c28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYnVm ID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tF VF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJl dlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYg PSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNL RVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMg bWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9w ZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVk Ci0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlf aGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJ CWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4g dGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbiBvcGVyYXRpb24sCisJCSAqIHNv IHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZCBoZXJlLgorCQkg Ki8KKwkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJCWJ1ZiA9PSBzby0+ aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKIAl9 CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogUmVhZCB0aGUgbmV4dCBwYWdlIGFuZCBsb2FkIGl0 ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBi dWYsIGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhh c2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9 CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hl YXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0 aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0 dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjcwLDIyICsyNTksMjAgQEAgX2hhc2hfcmVhZHByZXYo SW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRo ZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmly c3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBp dGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5k ZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBz Y2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVt cyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRl eCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0 aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBw YWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBh Z2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVj a2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBh Ym91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2Fk ZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUg aGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBy ZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2Ug cmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hl cy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlP biBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBp biBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBv dmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1 Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFn ZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluLgogICovCi1ib29sCitJbmRl eFNjYW5CYXRjaAogX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtMjk2LDcg KzI4Myw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7 Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAog CXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHJlbCk7CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBA IC0zMjYsNyArMzEzLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0aGUgaW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tf ZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkv KgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUgaGFzaCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMg YmVmb3JlIGFjcXVpcmluZyBhbnkKQEAgLTQxOSwxOTEgKzQwNiwxNTIgQEAgX2hhc2hfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0 KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBi dWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQo c28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRl IHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2Fs bG9jKHNjYW4pOwogCi0JLyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUg cXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5k IGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJeworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCS8qIE9LLCBpdGVtSW5kZXgg c2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFw VGlkOwotCi0JLyogaWYgd2UncmUgaGVyZSwgX2hhc2hfcmVhZHBhZ2UgZm91bmQgYSB2YWxpZCB0 dXBsZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcg bWF0Y2hlZCBpdGVtcyAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKLSAqCV9oYXNoX3JlYWRw YWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQ b3MKKyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gYmF0Y2gKICAqCiAgKglXZSBzY2FuIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJl bnQgaW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVtIGludG8KLSAqCXNvLT5jdXJyUG9zIGlmIGl0IHNh dGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKKyAqCXRoZSBi YXRjaCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0 ZW1zCiAgKglhcmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2UgbW92ZSB0byB0aGUgbmV4 dCBvciBwcmV2aW91cyBwYWdlCiAgKglpbiBhIGJ1Y2tldCBjaGFpbiBhcyBpbmRpY2F0ZWQgYnkg dGhlIGRpcmVjdGlvbi4KICAqCiAgKglSZXR1cm4gdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMg YXJlIGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNlLgogICovCiBzdGF0aWMgYm9vbAotX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGly KQorX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZmZXIJCWJ1ZjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNo YmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUhh c2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRl bUluZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJ X2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BB R0UpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRP cGFxdWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWhhc2hiYXRjaC0+YnVmID0gYnVm OworCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJh dGNoLT5kaXIgPSBkaXI7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsK LQkJQmxvY2tOdW1iZXIgcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3Ig KDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJp bmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFz aHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVt cyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1 YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJh dGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJ ICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdl LCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVu dCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCisJCQkgKiBDb3VsZCBu b3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRyeSB0bwor CQkJICogbW92ZSB0byB0aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVk ID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgotCQkJICogSWYgdGhp cyBpcyBhIHByaW1hcnkgYnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3QgYSByZWFs Ci0JCQkgKiBibG9jayBudW1iZXIuCi0JCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCQkJZWxzZQotCQkJCXByZXZfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQog CQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1 ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJ c28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQot CQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMg YmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUg c3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBu byBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJl c2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxs X2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBm dW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gcHJl dl9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK LQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkK IAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJ aGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAot CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0 ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJz dEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNl CiAJewotCQlCbG9ja051bWJlciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJ CWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24g YnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoX2xhc3QocGFn ZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJ CQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBsZXNQZXJQ YWdlKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNo aW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgcHJldmlv dXMgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoCi0JCQkg KiBhbnkga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1 cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIHByZXZp b3VzIHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19i dWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZikKLQkJCQluZXh0X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0KIAkJ CV9oYXNoX3JlYWRwcmV2KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZm ZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNv LT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJs b2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0 YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8g bW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNl dCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9p dGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVu Y3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxrbm87Ci0J CQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJ CQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhh c2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJ c28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRl bSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5k ZXg7CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CiAJfQog Ci0JaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJc28t PmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkvKgorCSAqIFNh dmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFyZSBmb3IgaGFz aGdldGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1haW5pbmcgdW5p bml0aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGhhc2hiYXRjaC0+YnVmID09IHNvLT5oYXNo c29fYnVja2V0X2J1ZiB8fAorCQloYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJ TG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCS8qCisJ CSAqIEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0aGUgcHJpbWFyeSBidWNrZXQsIG9yIGEgYnVj a2V0IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUgdG8gYSBzcGxpdC4KKwkJICoKKwkJICogSW5j cmVtZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IGJhdGNoIGdldHMgYW4gaW5kZXBl bmRlbnQKKwkJICogYnVmZmVyIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSByZWxlYXNlZCAoYnkgdGhl IGNvcmUgY29kZS90YWJsZSBBTSkKKwkJICogYmVmb3JlIHRoZSBoYXNoc29fYnVja2V0X2J1Zi9o YXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVuY2VzIGFyZQorCQkgKiByZWxlYXNlZC4KKwkJ ICovCisJCUluY3JCdWZmZXJSZWZDb3VudChoYXNoYmF0Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9u bHkgdXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJldlBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBv cGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUt Pmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsK LQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyogQ2FuIHVzZSBvcGFxdWUt Pmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJh dGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQloYXNoYmF0Y2gtPm5l eHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJy UG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogd2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBiYXRjaC5pdGVtc1tdICovCisJaW5kZXhhbV91dGlsX2JhdGNo X3VubG9jayhzY2FuLCBiYXRjaCwgaGFzaGJhdGNoLT5idWYpOworCisJQXNzZXJ0KGJhdGNoLT5m aXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAq IExvYWQgYWxsIHRoZSBxdWFsaWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXggcGFnZQot ICogaW50byBzby0+Y3VyclBvcy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4K KyAqIGludG8gYmF0Y2guIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCiAgKi8K IHN0YXRpYyBpbnQKIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAotCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlv biBkaXIpCisJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0g KEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpAQCAtNjQw LDcgKzU4OCw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAogCQkJCV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJCXsKIAkJ CQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2 ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwogCQkJfQog CQkJZWxzZQpAQCAtNjg3LDcgKzYzNSw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0tOwogCQkJ CS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MDYsMTMgKzY1NCwxNCBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4sIFBhZ2UgcGFnZSwKIAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRv IGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9oYXNoX3Nh dmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2ZWl0ZW0o SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJy SXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0g aXR1cC0+dF90aWQ7CisJY3Vyckl0ZW0tPnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CiAJY3Vyckl0 ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IDA7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCAwODFhZGJjODguLjMzMWQ1ZjRkYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNs dWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0z Myw3ICszMiw3IEBAIF9oYXNoX2NoZWNrcXVhbChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVw bGUgaXR1cCkKIAkvKgogCSAqIEN1cnJlbnRseSwgd2UgY2FuJ3QgY2hlY2sgYW55IG9mIHRoZSBz Y2FuIGNvbmRpdGlvbnMgc2luY2Ugd2UgZG8gbm90CiAJICogaGF2ZSB0aGUgb3JpZ2luYWwgaW5k ZXggZW50cnkgdmFsdWUgdG8gc3VwcGx5IHRvIHRoZSBza19mdW5jLiBBbHdheXMKLQkgKiByZXR1 cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldHR1cGxlIGFscmVhZHkgc2V0IHRoZSByZWNo ZWNrIGZsYWcKKwkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldGJhdGNoIGFs cmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKIAkgKiB0byBtYWtlIHRoZSBtYWluIGluZGV4c2Nh biBjb2RlIGRvIGl0LgogCSAqLwogI2lmZGVmIE5PVF9VU0VECkBAIC01MDUsMTI5ICs1MDQsMyBA QCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0 IG9sZF9idWNrZXQsCiAKIAlyZXR1cm4gbmV3X2J1Y2tldDsKIH0KLQotLyoKLSAqIF9oYXNoX2tp bGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxl ciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZl cmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhl Ci0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0 aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoK LSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHBhZ2UgYW5kIG1heSBv ciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhh dCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGluZwotICogTFBfREVBRCBzdGF0dXMg KHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwaW4g b24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgcGluCi0gKiBvbiBvdmVy ZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcg dGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAqIGRlbGV0ZS4KLSAqCi0gKiBUaGVyZSBhcmUg bmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1Y2tldCBhdCB0aGUgdGltZSBWQUNVVU0gYmVn aW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHByaW1h cnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBob2xkIGEgcGluLiAgQSBzY2FuIGNhbiBiZWdp biBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlCi0gKiBidXQgYmVm b3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVja2V0LCBidXQgaXQgY2FuIG5ldmVyIHBhc3Mg VkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3YXlzIGxvY2tzIHRoZSBuZXh0IHBhZ2UgYmVm b3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICogdGhlIHByZXZpb3VzIG9uZS4gIFRoZXJlZm9y ZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkKLSAqIGtpbGxpbmcg YSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9yIGFuIHVucmVsYXRlZCB0dXBsZS4KLSAqLwot dm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2NrTnVtYmVyIGJsa25vOwotCUJ1ZmZlcgkJYnVm OwotCVBhZ2UJCXBhZ2U7Ci0JSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBv ZmZudW0sCi0JCQkJbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0J aW50CQkJaTsKLQlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlib29sCQloYXZlUGlu ID0gZmFsc2U7Ci0KLQlBc3NlcnQoc28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChzby0+a2ls bGVkSXRlbXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0 IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVt S2lsbGVkID0gMDsKLQotCWJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hT Y2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyoKLQkJICogV2UgYWxyZWFkeSBo YXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFj cXVpcmUgbG9jayBvbiBpdC4KLQkJICovCi0JCWhhdmVQaW4gPSB0cnVlOwotCQlidWYgPSBzby0+ Y3VyclBvcy5idWY7Ci0JCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JfQot CWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7Ci0KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwotCW9wYXF1ZSA9IEhh c2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIo cGFnZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlp dGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0 ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQotCQlvZmZudW0gPSBjdXJySXRl bS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkJ d2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0 ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQotCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVw bGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQpKQotCQkJewotCQkJCWlmICgha2lsbGVkc29t ZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0 cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRoZSBwYWdlIHdoaWxl IGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFyZSBub3QgYWxsb3dl ZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJCQkJaWYgKCFCdWZm ZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19wYWdlOwotCQkJCX0K LQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCi0JCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKLQkJ CQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBz ZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0p OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYg bmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVyCi0JICogd2UgbWFyayBhbnl0aGlu ZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogTEhfUEFHRV9IQVNfREVBRF9U VVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuCi0JICovCi0JaWYgKGtp bGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdFX0hBU19E RUFEX1RVUExFUzsKLQkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsK LQl9Ci0KLXVubG9ja19wYWdlOgotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0gc28tPmN1 cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKLX0K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IDI1YjUxNmJhNi4uZWRhMDNmMjYxIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTg0 NSw3ICs4NDUsOCBAQCBhbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rp b24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28gdGhhdAog ICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBt b2RpZnkgdGhlCiAgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFt ZXRlci4gIFRoZSBjb3JlCi0gICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88 L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICA8ZmlsZW5hbWU+c3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZQogICAg cmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZS4KICAgPC9wYXJhPgogCkBAIC05MjEsOCArOTIyLDggQEAgYW1raWxsaXRlbXNi YXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFdoaWxlIGltcGxlbWVudGlu ZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLAogICAg ZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0 dXJlIHNjYW5zIHRvIHNraXAKLSAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIFRoZSBjb3Jl IGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICBrbm93bi1kZWFk IGluZGV4IGVudHJpZXMuICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJy ZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVl IGFuZCBoYXNoKSBpbXBsZW1lbnQKICAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtp bmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcwogICAgYXJlIGZyZWUg dG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KICAgIFRoZSB0YWJs ZSBBTSBtYXkgY2FsbApAQCAtOTYxLDggKzk2Miw4IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4 U2NhbkRlc2Mgc2NhbiwKICAgIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBOb3RlIHRoYXQgdGhp cyBMU04gY29tcGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMKICAgIHRoZSBpbmRleCBBTSB0byB1 c2UgZmFrZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdlcyBmb3IK ICAgIHJlbGF0aW9ucyB3aGVyZSBXQUwgaXMgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVhbCBMU05z IGFyZSBub3QgYXZhaWxhYmxlIGluCi0gICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJlZSBpbmRl eCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UKLSAgIGV4YW1wbGUgb2YgdGhpcyB0ZWNo bmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExTTnMKKyAg IHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGFuZCBoYXNoIGluZGV4IGltcGxlbWVudGF0aW9u cyBmb3IgcmVmZXJlbmNlCisgICBleGFtcGxlcyBvZiB0aGlzIHRlY2huaXF1ZS4gIEFuIGluZGV4 IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcwogICAgY2FuIHN0aWxsIHByb3Zp ZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3VsZCBzaW1w bHkKICAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FM IChpLmUuLCB3aGVuCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5jdGlvbj4g aXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KQEAgLTk4OSw5ICs5OTAsOSBAQCBh bXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgbGVhZiBwYWdlLCB3aGljaCBw cmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKICAgIDxjb21tYW5kPlZBQ1VVTTwv Y29tbWFuZD4uCiAgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQg a2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCi0gICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVy LWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0LWluCi0gICBpbmRl eCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNo OyBCLXRyZWUKLSAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJl ZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJh dGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgYm90aCBidWlsdC1pbgorICAgaW5kZXgg QU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsg Qi10cmVlIGFuZAorICAgaGFzaCAmbWRhc2g7IGhvbGQgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNl ZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CiAgICBmb3IgZGV0YWlscyBvbiBidWZm ZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbgogICAg d2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2guCiAgIDwv cGFyYT4KQEAgLTEwNjEsOCArMTA2Miw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KICAgIHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlv cmJhdGNoPC9saXRlcmFsPiBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgdGFibGUgQU0KICAgIGFu ZCBjb3JlIGNvZGUsIGFuZCB0aGUgaW5kZXggQU0gbXVzdCBuZXZlciByZWxlYXNlIGl0LiAgU2Vl Ci0gICA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYQotICAgcmVmZXJlbmNlIGV4 YW1wbGUuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNl ZCBieQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5faGFz aF9uZXh0PC9mdW5jdGlvbj4gZm9yCisgICByZWZlcmVuY2UgZXhhbXBsZXMuICBUaGUgcmVsZWFz ZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQogICAgdGhlIG5leHQg PGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lk aW5nCiAgICByZXBlYXRlZCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2Fu LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGM5MzdkNTQxZS4uYzhl MDc0Y2ZmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIwNyw2ICsxMjA3LDcgQEAg SGFzaAogSGFzaEFnZ0JhdGNoCiBIYXNoQWdnU3BpbGwKIEhhc2hBbGxvY0Z1bmMKK0hhc2hCYXRj aERhdGEKIEhhc2hCdWlsZFN0YXRlCiBIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUKIEhhc2hD b21wYXJlRnVuYwpAQCAtMTIyOCw4ICsxMjI5LDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAog SGFzaFNjYW5PcGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNo U2NhblBvc0l0ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0g CjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0006-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v19-0006-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7p12 RnJvbSA5NTJkMmM1Y2IwMzk1YmRjZGM1ODgyNWFhNzNmMTUwMzc5NzM4MDg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwNi8xOF0g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0YSB0aGF0IHRyYWNrcyB3 aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sg d2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGlu IGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVy IGNhbGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cyBiZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBi cmVhayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRo ZSByZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRo IGNhbiBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hp Y2ggaXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQg YW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJl ZCB0byB0aGUgc2xvdApvbiB0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBS ZWxlYXNlQnVmZmVyIGFzIHBhcnQgb2YKbW92aW5nIG9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9j aykuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbQp3aGVyZSB0aGUgY29kZSBwYXRo IGluIHF1ZXN0aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdwpjYWxscyBt b3JlIG9mdGVuIHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMg YmVlbgp0aWVkIHRvIHRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBk ZWNpZGUgdG8gcmVsZWFzZSB0aGUKYnVmZmVyIGFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUgd2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBm b3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5k IGxvY2tlZCB0aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNy QnVmZmVyUmVmQ291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3Vn Z2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZG VHR6X3Z3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBhNTRmYmMy MmYuLjE5YzZkZmJjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMyLDYgKzEzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRv IHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4 c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KKwlib29sCQl4c19sYXN0aW5ibG9jazsgLyog bGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCiB9IEluZGV4RmV0 Y2hIZWFwRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYwppbmRleCBhZDU3ODk1Y2MuLjQwYmNlNWQ2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNzYsNiArNzYsOSBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJQXNzZXJ0KGhzY2FuLT54c192 bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyKTsKIAloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCisJ LyogeHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uIHN0YXRlICovCisJQXNzZXJ0KCFoc2Nhbi0+ eHNfbGFzdGluYmxvY2spOworCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KIApAQCAtMzk4 LDYgKzQwMSwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBu dW1iZXIgZm9yIG5leHQgdGltZSAqLwogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpOwogCisJCS8qCisJCSAqIERyb3AgdGhlIHhzX2JsayBwaW4gaW5kZXBl bmRlbnRseSBoZWxkIG9uIGJ5IHNsb3QgKGlmIGFueSkgbm93LAorCQkgKiBiZWZvcmUgY2FsbGlu ZyBSZWxlYXNlQnVmZmVyLiAgVGhpcyBhdm9pZHMgZXhwZW5zaXZlIGNhbGxzIHRvCisJCSAqIEdl dFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdyBjYXVzZWQgYnkgRXhlY1N0b3JlQnVmZmVySGVhcFR1 cGxlCisJCSAqIGZhaWxpbmcgdG8gaGl0IHRoZSBiYWNrZW5kJ3MgY2FjaGUgZm9yIHRoZSByZWxl YXNlIG9mIHRoZSBvbGQgcGluLgorCQkgKi8KKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKIAkJ aWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nh bi0+eHNfY2J1Zik7CiAKQEAgLTQzNSw3ICs0NDYsMzMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSpoZWFwX2NvbnRp bnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAKIAkJc2xvdC0+dHRzX3RhYmxl T2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOwotCQlFeGVjU3RvcmVCdWZmZXJIZWFw VHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsKKworCQkv KgorCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IFRJRCBvbiB0aGUgY3VycmVudCBoZWFwIGJsb2Nr IHdpdGhpbiB0aGUgYmF0Y2gsCisJCSAqIHRyYW5zZmVyIG91ciBidWZmZXIgcGluIHRvIHRoZSBz bG90IHJhdGhlciB0aGFuIGhhdmluZyB0aGUgc2xvdAorCQkgKiBpbmNyZW1lbnQgdGhlIHBpbiBj b3VudC4gIFRoaXMgc2F2ZXMgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudAorCQkgKiBhbmQg UmVsZWFzZUJ1ZmZlciBjYWxscywgc2luY2UgdGhlIGNhbGxlciB3b3VsZCBqdXN0IHJlbGVhc2Ug aXRzCisJCSAqIHBpbiBvbiB4c19jYnVmIHdoZW4gc3dpdGNoaW5nIHRvIHRoZSBuZXh0IGJsb2Nr IGFueXdheS4KKwkJICoKKwkJICogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIGhlYXBfY29udGlu dWUgaXMgZmFsc2UsIHNpbmNlIG90aGVyd2lzZQorCQkgKiB0aGUgY2FsbGVyIHdpbGwgbmVlZCB4 c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlIG5leHQgY2FsbC4KKwkJICovCisJCWlmICho c2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpoZWFwX2NvbnRpbnVlKQorCQl7CisJCQlFeGVjU3Rv cmVQaW5uZWRCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJ CQkJCQkJICAgaHNjYW4tPnhzX2NidWYpOworCQkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOworCQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJLyoKKwkJ CSAqIE5vdGU6IHRoZSBwaW4gbm93IG93bmVkIGJ5IHRoZSBzbG90IGlzIGV4cGVjdGVkIHRvIGJl IHJlbGVhc2VkCisJCQkgKiBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBleHBsaWNpdCBF eGVjQ2xlYXJUdXBsZS4gIFRoaXMKKwkJCSAqIGF2b2lkcyBjaHVybiBpbiB0aGUgYmFja2VuZCdz IHByaXZhdGUgcmVmY291bnQgY2FjaGUuCisJCQkgKi8KKwkJfQorCQllbHNlCisJCQlFeGVjU3Rv cmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJCQkJCQkg aHNjYW4tPnhzX2NidWYpOwogCX0KIAllbHNlCiAJewpAQCAtNzQ5LDEwICs3ODYsNDIgQEAgaGVh cGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCiAKIAlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKIAl7CisJCWlu dAkJCW5leHRJdGVtOworCQlib29sCQloYXNOZXh0OworCiAJCS8qCiAJCSAqIFBsYWluIGluZGV4 IHNjYW4uCisJCSAqCisJCSAqIERldGVybWluZSBpZiB0aGUgbmV4dCBpdGVtIGluIHRoZSBjdXJy ZW50IHNjYW4gZGlyZWN0aW9uIGlzIG9uIGEKKwkJICogZGlmZmVyZW50IGhlYXAgYmxvY2suICBX aGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbAorCQkgKiBjYW4gdHJhbnNm ZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhl CisJCSAqIHBpbiBjb3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVs ZWFzZUJ1ZmZlciBjYWxscy4KKwkJICoKKwkJICogTm90ZTogV2UgY2Fubm90IGRvIHRoaXMgZm9y IGluZGV4LW9ubHkgc2NhbnMgYmVjYXVzZSBhbGwtdmlzaWJsZQorCQkgKiBpdGVtcyBhcmUgc2tp cHBlZCBieSBib3RoIHRoZSBzY2FuIGFuZCB0aGUgcmVhZCBzdHJlYW0gY2FsbGJhY2suIEl0CisJ CSAqIGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgdHJvdWJsZSBvZiByZWFzb25pbmcgYWJvdXQgdGhl c2UgaXNzdWVzLAorCQkgKiBzaW5jZSB0aGUgb3B0aW1pemF0aW9uIG9ubHkgaGVscHMgd2hlbiBo ZWFwIGZldGNoZXMgYXJlIHJlcXVpcmVkLgorCQkgKgorCQkgKiBOb3RlOiBXZSBkZWxpYmVyYXRl bHkgZG9uJ3QgY29uc2lkZXIgdGhlIGJhdGNoIGFmdGVyIHNjYW5CYXRjaCwKKwkJICogYmVjYXVz ZSBkb2luZyBzbyB3b3VsZCBhZGQgY29tcGxleGl0eSBmb3IgbGl0dGxlIGJlbmVmaXQuICBJdCdz CisJCSAqIG9rYXkgaWYgeHNfbGFzdGluYmxvY2sgaXMgc3B1cmlvdXNseSBzZXQgdG8gZmFsc2Uu CiAJCSAqLwogCQlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCWlmIChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+aXRl bSArIDE7CisJCQloYXNOZXh0ID0gKG5leHRJdGVtIDw9IHNjYW5CYXRjaC0+bGFzdEl0ZW0pOwor CQl9CisJCWVsc2UKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtIC0gMTsKKwkJCWhh c05leHQgPSAobmV4dEl0ZW0gPj0gc2NhbkJhdGNoLT5maXJzdEl0ZW0pOworCQl9CisKKwkJaHNj YW4tPnhzX2xhc3RpbmJsb2NrID0gaGFzTmV4dCAmJgorCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcigmc2NhbkJhdGNoLT5pdGVtc1tuZXh0SXRlbV0udGFibGVUaWQpICE9CisJCQlJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKCZzY2FuLT54c19oZWFwdGlkKTsKKwogCQlyZXR1cm4gJnNjYW4t PnhzX2hlYXB0aWQ7CiAJfQogCkBAIC03NjEsNyArODMwLDcgQEAgaGVhcGFtX2luZGV4X3JldHVy bl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCiAJICoKIAkgKiBBbHNvIHNldCB4c19pdHVwLCB3aGljaCBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90IG5lZWRzIHRvby4KIAkgKi8KLQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlB c3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmICFoc2Nhbi0+eHNfbGFzdGluYmxvY2spOwogCXNj YW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCiAJCQkJ CQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CiAKLS0g CjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0007-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v19-0007-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7n11 RnJvbSBlN2Q0ODAyNmRlYzk0NTFiZWYzNWIzNzdlYmQzNDQ0Zjc0ODdhZjc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwNy8xOF0g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3aGljaCBpbnRyb2R1Y2Vk IHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgYWR2YW5j ZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1ZmZpY2llbnRseSBtYW55 IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApzdHJlYW0ncyB0YXJnZXQg cHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0IGluZGV4IHByZWZldGNo aW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFyZ2UgcmFuZ2Ugc2NhbnMg dGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMgMzV4CmZhc3RlciB3aXRo IGxvY2FsIFNTRHMsIGFuZCA1MHggZmFzdGVyIG9yIG1vcmUgd2l0aCBoaWdoZXItbGF0ZW5jeQpz dG9yYWdlIHN1Y2ggYXMgbmV0d29yay1hdHRhY2hlZCBibG9jayBkZXZpY2VzLCB3aGVyZSB0aGUg YmVuZWZpdCBvZgpoaWRpbmcgSS9PIGxhdGVuY3kgdGhyb3VnaCBwcmVmZXRjaGluZyBpcyBldmVu IGdyZWF0ZXIuCgpBIG5ldyBHVUMgKGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpIGNvbnRyb2xz IHRoZSB1c2Ugb2YgaW5kZXgKcHJlZmV0Y2hpbmcuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzICdv bicsIHNvIGFsbCBwbGFpbiBpbmRleCBzY2FucyB1c2UKcHJlZmV0Y2hpbmcgd2hlcmUgc3VwcG9y dCBleGlzdHMuICBBbGwgaW5kZXgtb25seSBzY2FucyB3aWxsIGFsc28gdXNlCnByZWZldGNoaW5n IGF1dG9tYXRpY2FsbHkgd2hlcmUgc3VwcG9ydGVkIChvbmNlIHRoZSBzY2FuIHN0YXJ0cyB0bwpy ZXF1aXJlIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGhlYXAgZmV0Y2hlcykuCgpBbiBpbXBvcnRh bnQgZ29hbCBvZiB0aGUgYW1nZXRiYXRjaCBkZXNpZ24gaXMgdG8gZW5hYmxlIHRoZSB0YWJsZSBB TSdzCnJlYWQgc3RyZWFtIGNhbGxiYWNrIHRvIGFkdmFuY2UgaXRzIHByZWZldGNoIHBvc2l0aW9u IHVzaW5nIFRJRHMgdGhhdAphcHBlYXIgb24gYSBsZWFmIHBhZ2UgdGhhdCdzIGFoZWFkIG9mIHRo ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBsZWFmCnBhZ2UuICBUaGlzIGlzIGNydWNpYWwgd2l0 aCBzY2FucyBvZiBpbmRleGVzIHdoZXJlIGVhY2ggbGVhZiBwYWdlCmhhcHBlbnMgdG8gaGF2ZSBy ZWxhdGl2ZWx5IGZldyBkaXN0aW5jdCBoZWFwIGJsb2NrcyBhbW9uZyBpdHMgbWF0Y2hpbmcKVElE cyAoYXMgd2VsbCBhcyB3aXRoIHNjYW5zIHdpdGggbGVhZiBwYWdlcyB0aGF0IGhhdmUgcmVsYXRp dmVseSBmZXcKdG90YWwgbWF0Y2hpbmcgaXRlbXMpLiAgSW5kZXggc2NhbnMgY2FuIGhhdmUgYXMg bWFueSBhcyA2NCBvcGVuIGJhdGNoZXMsCndoaWNoIHRlc3RpbmcgaGFzIHNob3duIHRvIGJlIGFi b3V0IHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBldmVyIGJlCnVzZWZ1bC4gIEJhdGNoZXMg YXJlIG1haW50YWluZWQgaW4gc2NhbiBvcmRlciB1c2luZyBhIHNpbXBsZSByaW5nIGJ1ZmZlcgpk YXRhIHN0cnVjdHVyZS4KCkluIHJhcmUgY2FzZXMgd2hlcmUgdGhlIHNjYW4gZXhjZWVkcyB0aGlz IHF1YXNpLWFyYml0cmFyeSBsaW1pdCBvZiA2NCwKdGhlIHJlYWQgc3RyZWFtIGlzIHRlbXBvcmFy aWx5IHBhdXNlZCB1c2luZyB0aGUgcmVhZCBzdHJlYW0gcGF1c2luZwptZWNoYW5pc20gYWRkZWQg YnkgY29tbWl0IDM4MjI5Y2I5LiAgUHJlZmV0Y2hpbmcgKHZpYSB0aGUgcmVhZCBzdHJlYW0pCmlz IHJlc3VtZWQgb25seSBhZnRlciB0aGUgc2NhbiBwb3NpdGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRz IGN1cnJlbnQgb3BlbgpiYXRjaCBhbmQgdGhlbiBmcmVlcyBhbmQgcmVtb3ZlcyB0aGUgYmF0Y2gg ZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcKYnVmZmVyLiAgVGVzdGluZyBoYXMgc2hvd24gdGhh dCBpdCBpc24ndCB2ZXJ5IGNvbW1vbiBmb3Igc2NhbnMgdG8gaG9sZApvcGVuIG1vcmUgdGhhbiBh Ym91dCAxMCBiYXRjaGVzIHRvIGdldCB0aGUgZGVzaXJlZCBJL08gcHJlZmV0Y2gKZGlzdGFuY2Uu CgpUaGUgaGV1cmlzdGljIHVzZWQgdG8gZGVjaWRlIHdoZW4gdG8gYmVnaW4gcHJlZmV0Y2hpbmcg ZGVsYXlzCmluaXRpYWxpemF0aW9uIG9mIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gdW50aWwgdGhl IHNjYW4gdHJhbnNpdGlvbnMgZnJvbQppdHMgZmlyc3QgYmF0Y2ggdG8gaXRzIHNlY29uZCBiYXRj aC4gIEVhY2ggYmF0Y2ggY29ycmVzcG9uZHMgdG8gbWF0Y2hpbmcKVElEcyBmcm9tIGEgc2luZ2xl IGluZGV4IGxlYWYgcGFnZSwgc28gcHJlZmV0Y2hpbmcgb25seSBiZWdpbnMgb25jZSB0aGUKc2Nh biByZWFkcyBmcm9tIGl0cyBzZWNvbmQgbGVhZiBwYWdlIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25l IG1hdGNoaW5nCml0ZW0uICBBIHNlbGVjdGl2ZSBpbmRleCBzY2FuIHRoYXQgdG91Y2hlcyBvbmx5 IG9uZSBsZWFmIHBhZ2UgbmV2ZXIKcmVhY2hlcyB0aGUgc2Vjb25kIGJhdGNoLCBzbyB0aGUgaGV1 cmlzdGljIGNvcnJlY3RseSBhdm9pZHMgcHJlZmV0Y2hpbmcKb3ZlcmhlYWQuICBUaGUgcGljdHVy ZSBmb3IgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBpcyBtaXhlZC4KClRoZSBzYW1lIHByaW5jaXBs ZSBhcHBsaWVzIHRvIG5lc3Rsb29wIGlubmVyIGluZGV4IHNjYW5zIHdpdGggdmVyeSB0aWdodAps aW1pdHMgKGUuZy4sIGEgY29ycmVsYXRlZCBzdWJxdWVyeSB3aXRoIExJTUlUIDEpLCB3aGVyZSBl YWNoIHJlc2NhbgpyZWFkcyBmcm9tIG9ubHkgYSBzaW5nbGUgbGVhZiBwYWdlOiB0aGUgaGV1cmlz dGljIGF2b2lkcyB0aGUgY29zdCBvZgpyZXBlYXRlZGx5IGNyZWF0aW5nIGFuZCByZXNldHRpbmcg YSByZWFkIHN0cmVhbSBhY3Jvc3MgbWFueSByZXNjYW5zLgpPbiB0aGUgb3RoZXIgaGFuZCwgc29t ZSBzZWxlY3RpdmUgc2NhbnMgdGhhdCBhY2Nlc3MgcmFuZG9tbHktb3JkZXJlZApoZWFwIHBhZ2Vz IHdvdWxkIGdlbnVpbmVseSBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1dCBuZXZlciBnZXQg YXMKZmFyIGFzIHJlYWNoaW5nIHRoZWlyIHNlY29uZCBiYXRjaCAtLSBhIG1pc3NlZCBvcHBvcnR1 bml0eSwgd2hlcmUgdGhlCmhldXJpc3RpYyBpcyBvdmVybHkgY2F1dGlvdXMuCgpDb252ZXJzZWx5 LCB0aGUgaGV1cmlzdGljIGlzIG5vdCBjYXV0aW91cyBlbm91Z2ggd2l0aCBzbGlnaHRseSBsZXNz CnNlbGVjdGl2ZSBuZXN0bG9vcCBpbm5lciBzY2FucyAoZS5nLiwgTElNSVQgMyB3aXRoaW4gYSBM QVRFUkFMIGpvaW4pLgpUaGVzZSByZXNjYW5zIG1heSBzcGFuIHR3byBsZWFmIHBhZ2VzLCBqdXN0 IGJhcmVseSBjcm9zc2luZyB0aGUKc2Vjb25kLWJhdGNoIHRocmVzaG9sZCwgd2hpbGUgc3RpbGwg b25seSBuZWVkaW5nIHRvIGZldGNoIHR3byBvciB0aHJlZQpoZWFwIHBhZ2VzIC0tIG5vdCBlbm91 Z2ggZm9yIHByZWZldGNoaW5nIHRvIHJlYWxpc3RpY2FsbHkgaGVscCBvciBwYXkKZm9yIGl0c2Vs ZiBvbiBhbnkgaW5kaXZpZHVhbCByZXNjYW4uICBTdWNoIGNhc2VzIGFyZSByZWdyZXNzZWQgYnkg YXMKbXVjaCBhcyA1JSByZWxhdGl2ZSB0byBQb3N0Z3JlU1FMIDE4LCB0aG91Z2ggb25seSB3aGVu IHRoZSBzY2FuIGhhcyB0bwpyZWFkIGhlYXAgcGFnZXMgZnJvbSB0aGUgZmlsZXN5c3RlbS4KCkFk ZGluZyBhIHNtYXJ0ZXIgaGV1cmlzdGljIHRoYXQgYWRkcmVzc2VzIGJvdGggc2hvcnRjb21pbmdz IHJlbWFpbnMgYXMKd29yayBmb3IgYSBmdXR1cmUgcmVsZWFzZS4gIFBhc3NpbmcgZG93biBhbiBF eGVjU2V0VHVwbGVCb3VuZCBzdHlsZSBoaW50CmFuZCB1c2luZyB0aGF0IGhpbnQgdG8gaW5mbHVl bmNlIGhvdyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXRzCmRpc3RhbmNlIHNlZW1zIGxpa2Ug YSBwcm9taXNpbmcgYXBwcm9hY2guCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJh Lm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFu ZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5y byA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQot LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAxMiAr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAgICAgICAgICAgICAgfCAgIDggKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICA0NCArKwog c3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDQ1OCArKysrKysr KysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAg ICB8ICA0OCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAg IHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8 ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAg IDEgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDE2 ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICA2NiAr Ky0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAgOCAr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAgICAgICAgfCAgIDMgKy0K IDEzIGZpbGVzIGNoYW5nZWQsIDY2MCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKaW5kZXggMTljNmRmYmM3Li5lZWY3NWM5MzcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTEzNSw2ICsxMzUsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaEhlYXBEYXRhCiAJ LyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KIAlib29s CQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJh dGNoPyAqLwogCisJLyoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2NhdGVkIGF0IHRoZSBi ZWdpbm5pbmcgb2YgdGhlIHNjYW4gYW5kIHJlc2V0IG9uCisJICogcmVzY2FuIG9yIHdoZW4gdGhl IHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMuIFRoZSBzY2FuIGRpcmVjdGlvbiBpcyBzYXZlZAorCSAq IGVhY2ggdGltZSBhIG5ldyB0dXBsZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSBzY2FuIGRpcmVjdGlv biBjaGFuZ2VzIGZyb20KKwkgKiBvbmUgdHVwbGUgdG8gdGhlIG5leHQsIHRoZSByZWFkIHN0cmVh bSByZWxlYXNlcyBhbGwgcHJldmlvdXNseSBwaW5uZWQKKwkgKiBidWZmZXJzIChjb3JlIGNvZGUg cmVzZXRzIHJlbGF0ZWQgYmF0Y2hyaW5nYnVmIHN0YXRlIGZvciB1cywgdG9vKS4KKwkgKi8KKwli b29sCQl4c19wYXVzZWQ7CQkvKiBwYXVzZWQgdW50aWwgbmV4dCBiYXRjaCBpcyByZWFkPyAqLwor CVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlv biAqLworCUJsb2NrTnVtYmVyIHhzX3ByZWZldGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVy bmVkIHRvIHhzX3JlYWRfc3RyZWFtICovCisJUmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07IC8q IHByZWZldGNoaW5nIHJlYWQgc3RyZWFtICovCisKIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKaW5kZXggNmJiYTBlNTI1Li41YWYwZjA1NDkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaApAQCAtNDAsMTYgKzQwLDE2IEBAIGV4dGVybiB2b2lkIHRhYmxl YW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiAvKgogICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9y IHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgogICoKLSAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1 cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQotICog bWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3Nl cyBhIE5VTEwKLSAqIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNj YW4uCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IHNjYW5CYXRjaC9wcmVmZXRjaEJh dGNoIChwYXNzZWQgdG8gdXMgYXMKKyAqIHByaW9yQmF0Y2gpIGhhcyBubyBtb3JlIG1hdGNoaW5n IGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlcgorICogcGFzc2VzIGEg TlVMTCBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgogICoK ICAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0 aGUgZ2l2ZW4gc2NhbgogICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1v cmUgbWF0Y2hlcyBpbiB0aGF0IGRpcmVjdGlvbi4KICAqCiAgKiBUaGlzIGlzIHdoZXJlIGJhdGNo ZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAogICog ZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2Fs bGVyLiAgVGhlIGNhbGxlcgotICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRo ZWlyIHBvc2l0aW9uLgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWly IHNjYW5Qb3MvcHJlZmV0Y2hQb3MgcG9zaXRpb24uCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAogdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oCmluZGV4IGMwYzgwYzkzNS4uMmE1ZTJkNGRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAg LTIxMyw2ICsyMTMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJICog VGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNhbGxz IHdpdGggdGhlIHNhbWUKIAkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBuZWVk IHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bwogCSAqIGRldGVybWluZSB0aGVyZSBh cmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4KKwkg KiBJbiBwYXJ0aWN1bGFyLCBkdXJpbmcgcHJlZmV0Y2hpbmcgdGhlIHJlYWQgc3RyZWFtIGNhbGxi YWNrIGRpc2NvdmVycworCSAqIHRoZSBlbmQtb2Ytc2NhbiB2aWEgcHJlZmV0Y2hCYXRjaC4gIHRh YmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKCkKKwkgKiBjaGVja3MgdGhlc2UgZmxhZ3Mgc28g dGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRoZSBzYW1lCisJICogYW1nZXRiYXRj aCBjYWxsIHdoZW4gaXQgbGF0ZXIgcmVhY2hlcyB0aGF0IGJhdGNoIGFzIHNjYW5CYXRjaC4KIAkg Ki8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJCWtub3duRW5kRm9yd2FyZDsKQEAg LTI2NywxMSArMjcxLDIwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5k ZXhTY2FuQmF0Y2g7CiAgKiB0byBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIgb3JkZXIg aXMgbW9zdCBjb252ZW5pZW50IC0tIHByb3ZpZGVkIHRoYXQKICAqIHN1Y2ggcmVvcmRlcmluZyBj YW5ub3QgYWZmZWN0IHRoZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRl cgogICogcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBhbHNv IHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhlCisgKiBj dXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBhZ2VzLiAg VGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0aGlzLCB0 aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5IHRoZSB0 YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMgZGVzaXJl ZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhl YWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVzIGluIG9y ZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisgKiBkaXN0YW5jZSAoZGlz dGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxlcykuCiAg Ki8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewogCS8qIGN1cnJlbnQgcG9zaXRp b25zIGluIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZm9yIHNjYW4gKi8KIAlCYXRjaFJp bmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICovCisJQmF0Y2hSaW5n SXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAlCYXRjaFJp bmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLwogCiAJLyogbWFy a1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZmZXIgd2hlbiBtYXJrQmF0Y2ggIT0gc2NhbkJh dGNoKSAqLwpAQCAtNTA3LDYgKzUyMCwzNyBAQCBpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRl eFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJcmluZ2J1Zi0+bmV4 dEJhdGNoKys7CiB9CiAKKy8qCisgKiBDb21wYXJlIHR3byBiYXRjaCByaW5nIHBvc2l0aW9ucyBp biB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBpZiBw b3MxIGlzIGJlaGluZCBwb3MyLCAwIGlmIGVxdWFsLCBwb3NpdGl2ZSBpZiBwb3MxIGlzCisgKiBh aGVhZCBvZiBwb3MyLgorICovCitzdGF0aWMgaW5saW5lIGludAoraW5kZXhfc2Nhbl9wb3NfY21w KEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczIsCisJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50OAkJYmF0Y2hkaWZmOworCisJQXNzZXJ0 KHBvczEtPnZhbGlkICYmIHBvczItPnZhbGlkKTsKKworCWJhdGNoZGlmZiA9IChpbnQ4KSAocG9z MS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisJaWYgKGJhdGNoZGlmZiAhPSAwKQorCXsKKwkJLyog UmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGRpZmZlcmluZyBiYXRjaCBvZmZzZXRzICovCisJCXJl dHVybiBiYXRjaGRpZmY7CisJfQorCisJLyoKKwkgKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNpbmcg aXRlbXNbXS13aXNlIGluZGV4ZXMgZnJvbSBjYWxsZXIncyBwb3NpdGlvbnMsCisJICogc2luY2Ug Ym90aCBwb3NpdGlvbnMgcG9pbnQgdG8gdGhlIHNhbWUgcmluZyBidWZmZXIgYmF0Y2gKKwkgKi8K KwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9zMS0+ aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEtPml0 ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhl IGJhdGNoLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGYyZmQ1ZDMxNS4uNDE5MzAwYTZiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhz Y2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0Owpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IDQwYmNlNWQ2 MS4uNmRmYzFiNzM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nh bi5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1 ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAu aCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGlj YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKQEAgLTUyLDYgKzUz LDE0IEBAIHN0YXRpYyB2b2lkIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJ CQkJCQkJCSAgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAogCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0 ZW1Qb3MgKnBvcyk7CitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfZGlyY2hh bmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSBCYXRjaFJpbmdCdWZmZXIgKmJhdGNo cmluZ2J1Zik7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBoZWFwYW1f aW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJ CQkJCQkJCQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pOworc3RhdGljIEJsb2NrTnVtYmVy IGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJ CQkJCQkJCQkJCQl2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCQkJdm9p ZCAqcGVyX2J1ZmZlcl9kYXRhKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRleCBTY2Fu IENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNzksNiArODgsMTAgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQogCS8qIHhzX2xhc3RpbmJsb2Nr IG9wdGltaXphdGlvbiBzdGF0ZSAqLwogCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsK IAorCS8qIFJlYWQgc3RyZWFtIHN0YXRlIChvdGhlciBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgY2Fs bGJhY2spICovCisJQXNzZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVu dFNjYW5EaXJlY3Rpb24pOworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPT0gTlVMTCk7 CisKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQogCkBAIC05MCw2ICsxMDMsMjIgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJLyogUmVz Y2FucyBzaG91bGQgYXZvaWQgYW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJ aHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0 aW9uYWwgcmVhZCBzdHJlYW0gZGlyZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtX2RpciA9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uOworCisJLyoKKwkgKiBSZXNldCByZWFk IHN0cmVhbSBpdHNlbGYsIGFuZCBvdGhlciBhc3NvY2lhdGVkIHN0YXRlLgorCSAqCisJICogTm90 ZTogd2UgZXhwZWN0IHRoZSBjb3JlIGV4ZWN1dG9yIHRvIGNhbGwgaW5kZXhfYmF0Y2hzY2FuX3Jl c2V0ICh3aGVuCisJICogdGhlIHNjYW4gaXMgdXNlYmF0Y2hyaW5nKS4gIFRoaXMgd2lsbCBpbnZh bGlkYXRlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZworCSAqIGJ1ZmZlciBzdGF0ZSwgaW5jbHVkaW5n IHNjYW5Qb3MgYW5kIHByZWZldGNoUG9zLgorCSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0 KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgYXZv aWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4KIAkg KiBUaGlzIHNhdmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lu cywgYW5kIGR1cmluZwpAQCAtMTExLDYgKzE0MCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNf dm1idWZmZXIpKQogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwlpZiAo aHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRf c3RyZWFtKTsKKwogCXBmcmVlKGhzY2FuKTsKIAogCS8qCkBAIC00MTIsNyArNDQ0LDE0IEBAIGhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuLAogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVm ZmVyKGhzY2FuLT54c19jYnVmKTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNj YW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKwkJLyoKKwkJICogV2hlbiB1c2luZyBh IHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJ CSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEg bWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQkJaHNj YW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihoc2Nhbi0+eHNfcmVhZF9zdHJl YW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4t PnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdo ZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtNjkwLDYgKzcyOSwxMiBAQCBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbgogCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDApOwogCUFzc2VydChhbGxfdmlzaWJsZSA9PSBOVUxM IHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKKwkvKiBIYW5kbGUgcmVzZXR0aW5nIHRoZSByZWFk IHN0cmVhbSB3aGVuIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgKi8KKwlpZiAoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikKKwkJaHNjYW4tPnhzX3Jl YWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsJLyogZmlyc3QgY2FsbCAqLworCWVsc2UgaWYgKHVu bGlrZWx5KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgIT0gZGlyZWN0aW9uKSkKKwkJaGVhcGFt X2luZGV4X2RpcmNoYW5nZV9yZXNldChoc2NhbiwgZGlyZWN0aW9uLCBiYXRjaHJpbmdidWYpOwor CiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0Y2gg Zm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5kZXgg dHVwbGUgZnJvbQpAQCAtNjk5LDcgKzc0NCw3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJ ewogCQkvKgogCQkgKiBzY2FuUG9zIGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5 IGJlIGxvYWRlZCBpbiBiYXRjaCByaW5nCi0JCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBo ZXJlLgorCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZSAoY2FuJ3QgZG8gdGhpcyB3 aXRoIHByZWZldGNoQmF0Y2gpLgogCQkgKi8KIAkJcGdfYXNzdW1lKGJhdGNocmluZ2J1Zi0+aGVh ZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKIApAQCAtNzMwLDYgKzc3NSwxNyBAQCBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRj aEhlYXBEYXRhICpoc2NhbgogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlpZiAoaGFkRXhpc3RpbmdT Y2FuQmF0Y2ggJiYgIWhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwl7CisJCUFzc2VydCghc2Nhbi0+ YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkKTsKKworCQkvKgorCQkgKiBOb3QgdXNpbmcg YSByZWFkIHN0cmVhbSB0byBkbyBpbmRleCBwcmVmZXRjaGluZy4gIERlY2lkZSB3aGV0aGVyIHRv CisJCSAqIHN0YXJ0IG9uZSBub3cuCisJCSAqLworCQloZWFwYW1faW5kZXhfY29uc2lkZXJfcHJl ZmV0Y2hpbmcoc2NhbiwgaHNjYW4pOworCX0KKwogCS8qCiAJICogQWR2YW5jZWQgc2NhbkJhdGNo LiAgTm93IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldwogCSAqIHNjYW5CYXRj aC4KQEAgLTc0NSw2ICs4MDEsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbgogCXsKIAkJSW5k ZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJCQkJCQkJ CQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0 Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKIAogCQlBc3NlcnQoaGVhZEJhdGNo ICE9IHNjYW5CYXRjaCk7CiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAhPSBzY2Fu UG9zLT5iYXRjaCk7CkBAIC03NTIsMTIgKzgwOSw0NyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z Y2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh bgogCQkvKiBmcmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBzY2FuJ3Mg bWFya0JhdGNoKSAqLwogCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFkQmF0Y2gp OwogCisJCS8qCisJCSAqIElmIHdlJ3JlIGFib3V0IHRvIHJlbGVhc2UgdGhlIGJhdGNoIHRoYXQg cHJlZmV0Y2hQb3MgY3VycmVudGx5CisJCSAqIHBvaW50cyB0bywganVzdCBpbnZhbGlkYXRlIHBy ZWZldGNoUG9zLiAgU2VlIHRoZSBjb21tZW50cyBhYm91dAorCQkgKiBwcmVmZXRjaFBvcy9zY2Fu UG9zIHdpdGhpbiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBmb3IgYW4KKwkJICog ZXhwbGFuYXRpb24uCisJCSAqCisJCSAqIFRoaXMgaGFuZGxpbmcgaXMgYXBwcm94aW1hdGVseSB0 aGUgb3Bwb3NpdGUgb2YgcmVzdW1pbmcgYSBwYXVzZWQKKwkJICogcmVhZCBzdHJlYW06IHRoaXMg aGVscHMgdGhlIHNjYW4gZGVhbCB3aXRoIHByZWZldGNoUG9zIGZhbGxpbmcKKwkJICogYmVoaW5k IHNjYW5Qb3MsIHdoZXJlYXMgcGF1c2luZyBpcyB1c2VkIHdoZW4gc2NhblBvcyBoYXMgZmFsbGVu CisJCSAqIGJlaGluZCAodmVyeSBmYXIgYmVoaW5kKSBwcmVmZXRjaFBvcy4KKwkJICovCisJCWlm IChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJCXByZWZldGNoUG9zLT5iYXRjaCA9PSBiYXRjaHJp bmdidWYtPmhlYWRCYXRjaCkKKwkJCXByZWZldGNoUG9zLT52YWxpZCA9IGZhbHNlOworCiAJCS8q IFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKGV2ZW4gaWYgaXQncyBtYXJr QmF0Y2gpICovCiAJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisKKwkJaWYgKHVubGlrZWx5 KGhzY2FuLT54c19wYXVzZWQpKQorCQl7CisJCQkvKgorCQkJICogaGVhcGFtX2luZGV4X3ByZWZl dGNoX25leHRfYmxvY2sgcGF1c2VkIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0KKwkJCSAqIGR1ZSB0 byBvdXIgcnVubmluZyBvdXQgb2YgZnJlZSBiYXRjaCBzbG90cy4gIE5vdyB0aGF0IHdlJ3ZlCisJ CQkgKiBmcmVlZCB1cCBvbmUgc3VjaCBzbG90LCB3ZSBjYW4gcmVzdW1lIHRoZSByZWFkIHN0cmVh bSAoc2luY2UKKwkJCSAqIHRoZXJlJ3Mgbm93IHNwYWNlIGZvciBoZWFwYW1faW5kZXhfcHJlZmV0 Y2hfbmV4dF9ibG9jayB0byBzdG9yZQorCQkJICogb25lIG1vcmUgYmF0Y2gpLgorCQkJICovCisJ CQlBc3NlcnQocHJlZmV0Y2hQb3MtPmJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKKwkJCUFzc2Vy dChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJCQkgICBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChz Y2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpKTsKKwkJCUFzc2VydChpbmRleF9zY2FuX3Bvc19jbXAo cHJlZmV0Y2hQb3MsIHNjYW5Qb3MsIGRpcmVjdGlvbikgPiAwKTsKKwkJCUFzc2VydCghaW5kZXhf c2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKworCQkJcmVhZF9zdHJlYW1fcmVzdW1lKGhzY2FuLT54 c19yZWFkX3N0cmVhbSk7CisJCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCX0KIAl9CiAK IAkvKiBJbiBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVy J3MgaGVhZEJhdGNoICovCiAJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Q b3MtPmJhdGNoKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOwogCiAJcmV0dXJuIGhlYXBh bV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKIAkJCQkJ CQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKQEAgLTg2NCw2ICs5NTYs MTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRl eCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQogICogbmVlZCB0 byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCiAgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUg c2NhbiBiZSBhbGxvd2VkIHRvIGd1YXJkIG1vcmUgdGhhbiBvbmUgYmF0Y2ggYXQgYQorICogdGlt ZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyByZXN0cmljdGlvbiBpcyB0byBhdm9pZCB1 bmludGVuZGVkCisgKiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVhZCBzdHJlYW0sIHdoaWNoIGhh cyBpdHMgb3duIHN0cmF0ZWd5IGZvciBrZWVwaW5nCisgKiB0aGUgbnVtYmVyIG9mIHBpbnMgaGVs ZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLiAgKFVuZ3VhcmRpbmcgdmlhCisgKiB0aGUg YW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgb2Z0ZW4gbWVhbnMgcmVsZWFzaW5nIGEgYnVmZmVyIHBp biBvbiBhbgorICogaW5kZXggcGFnZSwgd2hpY2ggY291bnRzIGFnYWluc3QgdGhlIHNhbWUgc2hh cmVkIHBpbiBsaW1pdC4pCisgKgogICogT25jZSB3ZSd2ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZv ciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQogICogdW5ndWFyZCBpdCBieSBj YWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdpdGggcmVzcGVjdCB0bwogICog Y29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBndWFyZCAodHlwaWNhbGx5IGEg YnVmZmVyIHBpbiBvbiB0aGUKQEAgLTk5MCwzICsxMDg5LDM1OCBAQCBoZWFwYW1faW5kZXhfYmF0 Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAllbHNlCiAJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7 CiB9CisKKy8qCisgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24gKGF0 IHRoZSB0dXBsZSBncmFudWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVhbSwg c2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAqIHdp dGggdGhlIGJsb2NrcyB0aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcgcHJl ZmV0Y2hQb3MuCisgKgorICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMg bmV3IGRpcmVjdGlvbiwgYW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRvIGFu IGVhcmxpZXIgaW5kZXggcGFnZSwgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2ggd2lsbAor ICogZGVhbCB3aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBt aWdodCB5ZXQgY2hhbmdlCisgKiBkaXJlY3Rpb24gYWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9yZSBy ZXR1cm5pbmcgbW9yZSBpdGVtcykuCisgKi8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFw YW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJ CQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSBCYXRjaFJpbmdCdWZmZXIgKmJh dGNocmluZ2J1ZikKK3sKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCWJhdGNocmlu Z2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0gZmFs c2U7CisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKKworCS8qIFJlc2V0 IHJlYWQgc3RyZWFtIGl0c2VsZiAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCXJl YWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7Cit9CisKKy8qCisgKiBEZWNp ZGUgd2hldGhlciB0byBzdGFydCBhIHJlYWQgc3RyZWFtIGZvciBoZWFwIGJsb2NrIHByZWZldGNo aW5nIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgZWFjaCB0aW1lIGEg bmV3IGJhdGNoIGlzIG9idGFpbmVkIGZyb20gdGhlIGluZGV4IEFNLCBiYXJyaW5nIHRoZQorICog Zmlyc3QgdGltZSB0aGF0IGhhcHBlbnMuICBXZSBkZWxheSBpbml0aWFsaXppbmcgdGhlIHN0cmVh bSB1bnRpbCByZWFkaW5nCisgKiBmcm9tIHRoZSBzY2FuJ3Mgc2Vjb25kIGJhdGNoLiAgVGhpcyBo ZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uCisgKiBzdGFydGluZyBhIHJlYWQgc3Ry ZWFtIGZvciB2ZXJ5IHNlbGVjdGl2ZSBpbmRleCBzY2Fucy4KKyAqCisgKiBXZSBhdm9pZCBwcmVm ZXRjaGluZyBkdXJpbmcgc2NhbnMgd2hlcmUgd2UncmUgdW5hYmxlIHRvIHVuZ3VhcmQgKHVucGlu KQorICogZWFjaCBiYXRjaCdzIGJ1ZmZlcnMgcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25hcHNob3Qg c2NhbnMpLiAgV2UgYXJlIG5vdAorICogcHJlcGFyZWQgdG8gc2Vuc2libHkgbGltaXQgdGhlIHRv dGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxkIChyZWFkCisgKiBzdHJlYW0gaGFuZGxlcyBh bGwgcGluIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIHVzLCBhbmQga25vd3Mgbm90aGluZworICog YWJvdXQgcGlucyBoZWxkIG9uIGluZGV4IHBhZ2VzL3dpdGhpbiBiYXRjaGVzKS4KKyAqCisgKiBX ZSBhbHNvIGRlbGF5IGNyZWF0aW5nIGEgcmVhZCBzdHJlYW0gZHVyaW5nIGluZGV4LW9ubHkgc2Nh bnMgdGhhdCBoYXZlbid0CisgKiBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qg d2FudCB0byB3YXN0ZSBhbnkgY3ljbGVzIG9uCisgKiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0g dW50aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRlZCBuZWVkIHRvIHBlcmZvcm0KKyAqIGhlYXAgZmV0 Y2hlcy4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK2hlYXBh bV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbikKK3sKKwlBc3NlcnQoIWhzY2FuLT54c19yZWFk X3N0cmVhbSk7CisJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQp OworCisJaWYgKHNjYW4tPk1WQ0NTY2FuICYmIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggJiYK KwkJaHNjYW4tPnhzX2JsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCS8qIGZvciBpbmRleC1vbmx5 IHNjYW5zICovCisJCWhzY2FuLT54c19yZWFkX3N0cmVhbSA9CisJCQlyZWFkX3N0cmVhbV9iZWdp bl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZBVUxULCBOVUxMLAorCQkJCQkJCQkJICAgc2Nhbi0+ aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkgICBoZWFwYW1faW5kZXhfcHJl ZmV0Y2hfbmV4dF9ibG9jaywKKwkJCQkJCQkJCSAgIHNjYW4sIDApOworCS8qIGVsc2UgZG9uJ3Qg c3RhcnQgYSByZWFkIHN0cmVhbSBmb3IgcHJlZmV0Y2hpbmcgKG5vdCB5ZXQsIGF0IGxlYXN0KSAq LworfQorCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHRoZSByZWFkIHN0cmVhbSB3 aGVuIHBlcmZvcm1pbmcgaW5kZXggcHJlZmV0Y2hpbmcuCisgKgorICogVGhlIGluaXRpYWwgYmF0 Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z LgorICogV2UgZG9uJ3QgZ2V0IGNhbGxlZCB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4 dF9idWZmZXIgY2FsbCwgd2hlbiBhCisgKiBoZWFwIGJsb2NrIGlzIHJlcXVlc3RlZCBmcm9tIHRo ZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4KKyAqCisgKiBUaGUgcG9zaXRpb24g b2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVmZXRjaFBvcy4gIEl0IGlzIHR5cGlj YWwKKyAqIGZvciBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50bHkgc3RheSBhaGVhZCBvZiB0aGUg c2NhblBvcyBwb3NpdGlvbiB0aGF0J3MKKyAqIHVzZWQgdG8gdHJhY2sgdGhlIG5leHQgVElEIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCByZXR1cm4KKyAqIHRvIHRoZSBz Y2FuIChhZnRlciB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgY2FsbGVkKS4gIEhvd2V2ZXIsIHRoYXQg aXNuJ3QgYQorICogc3RyaWN0IHByZWNvbmRpdGlvbiAodGhvdWdoIGFzIGV4cGxhaW5lZCBiZWxv dyB3ZSBpbXBsZW1lbnQgYSBzY2hlbWUKKyAqIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gbWFr aW5nIGl0IGEgc3RyaWN0IHByZWNvbmRpdGlvbikuICBUaGVyZSBpcyBhCisgKiB0cnVlIHN0cmlj dCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4gd2UgcmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2 ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcy4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCito ZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayhSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCSB2b2lkICpwZXJfYnVm ZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVzYyBzY2FuID0gKEluZGV4U2NhbkRlc2MpIGNhbGxi YWNrX3ByaXZhdGVfZGF0YTsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRj aHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Q b3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNo UG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3M7CisJU2NhbkRpcmVjdGlvbiB4c19yZWFk X3N0cmVhbV9kaXIgPSBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyOworCUluZGV4U2NhbkJhdGNo IHByZWZldGNoQmF0Y2g7CisJYm9vbAkJZnJvbVNjYW5Qb3MgPSBmYWxzZTsKKworCS8qCisJICog c2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxpZCB3aGVuIHByZWZldGNoaW5nIHRha2VzIHBsYWNl LiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQgbGVhc3Qgb25lIGJhdGNoLCBsb2FkZWQgYXMgb3Vy IHNjYW5CYXRjaC4gIFRoZSBzY2FuIGRpcmVjdGlvbgorCSAqIG11c3QgYmUgZXN0YWJsaXNoZWQs IHRvby4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDApOwor CUFzc2VydChzY2FuUG9zLT52YWxpZCAmJiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBz Y2FuUG9zLT5iYXRjaCkpOworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNzZXJ0KCFoc2Nh bi0+eHNfcGF1c2VkKTsKKwlBc3NlcnQoeHNfcmVhZF9zdHJlYW1fZGlyICE9IE5vTW92ZW1lbnRT Y2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogSGFuZGxlIGluaXRpYWxpemF0aW9uIG9uIHRoZSBm aXJzdCBjYWxsIGhlcmUsIHdoZW4gcHJlZmV0Y2hQb3MgaXNuJ3QKKwkgKiB5ZXQgdmFsaWQgKGFs c28gaGFuZGxlcyB0aGUgcHJlZmV0Y2hQb3MgPCBzY2FuUG9zIGVkZ2UgY2FzZSkuCisJICoKKwkg KiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGlj YWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3Ig dGhlIGVudGlyZSBzY2FuLiAgV2UgaW5pdGlhbGl6ZQorCSAqIHByZWZldGNoUG9zIHVzaW5nIHRo ZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0n cyBUSUQgc2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBz dHJlYW0KKwkgKiBmaXJzdC4gIFdoZW4gdGhpcyBoYXBwZW5zLCBpdCdzIGxpa2VseSB0aGF0IHBy ZWZldGNoUG9zIHdpbGwgZ2V0IGFoZWFkCisJICogb2Ygc2NhblBvcyB2ZXJ5IHNvb24sIGFmdGVy IHRoZSBfbmV4dF8gY2FsbCBoZXJlIHJldHVybnMuCisJICoKKwkgKiBUaGVyZSdzIGFsc28gYW4g ZWRnZSBjYXNlIHRoYXQgd2UgaGFuZGxlIHVzaW5nIGV4YWN0bHkgdGhlIHNhbWUgc3RlcHMuCisJ ICogSXQncyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQb3MgdG8gImZhbGwgYmVoaW5kIiBzY2FuUG9z LCBhdCBsZWFzdCBpbiBhCisJICogdHJpdmlhbCBzZW5zZTogaWYgbWFueSBhZGphY2VudCBtYXRj aGluZyBpdGVtcyBjb250YWluIFRJRHMgdGhhdCBhbGwKKwkgKiBwb2ludCB0byB0aGUgc2FtZSBo ZWFwIGJsb2NrLCBzY2FuUG9zIGNhbiBhY3R1YWxseSBvdmVydGFrZSBwcmVmZXRjaFBvcworCSAq IChwcmVmZXRjaFBvcyBjYW4ndCBhZHZhbmNlIHVudGlsIHdlJ3JlIGFjdHVhbGx5IGNhbGxlZCku ICBBIHNpbWlsYXIKKwkgKiBpc3N1ZSBhcmlzZXMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgdGhh dCByZXF1aXJlIG9ubHkgYSBmZXcgaGVhcAorCSAqIGZldGNoZXM6IHdlJ2xsIHRlbmQgdG8gYmUg Y2FsbGVkIGZhciBsZXNzIG9mdGVuIHRoYW4gd2UnZCBiZSBjYWxsZWQKKwkgKiBkdXJpbmcgYW4g ZXF1aXZhbGVudCBwbGFpbiBpbmRleCBzY2FuIGR1ZSB0byBhbGwtdmlzaWJsZSBpdGVtcy4gIEFu CisJICogYWxsLXZpc2libGUgaXRlbSB3aWxsIGFkdmFuY2Ugc2NhblBvcywgYnV0IGNhbid0IHRy aWdnZXIgYSBjYWxsIHRvIGhlcmUKKwkgKiAoanVzdCBsaWtlIGFuIGl0ZW0gdGhhdCBwb2ludHMg dG8gdGhlIHNhbWUgaGVhcCBibG9jayB0aGF0IHRoZSBwcmV2aW91cworCSAqIGl0ZW0gYWxzbyBw b2ludGVkIHRvKS4KKwkgKgorCSAqIFRoaXMgc2NoZW1lIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNh bWUgYmxvY2sgcHJlZmV0Y2ggcmVxdWVzdHMgYXMgYQorCSAqIHNjaGVtZSB0aGF0IHJlcXVpcmVz IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgdG8gYWN0aXZlbHkKKwkgKiBlbnN1 cmUgdGhhdCAicHJlZmV0Y2hQb3MgPCBzY2FuUG9zIiBjYW4gbmV2ZXIgaGFwcGVuLiAgVGhhdCBp c24ndCBhCisJICogc3RyaWN0IHByZWNvbmRpdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiBiZWNhdXNl IG1ha2luZyBpdCBleHBsaWNpdCB3b3VsZAorCSAqIGltcG9zZSBhIHBlcmZvcm1hbmNlIHBlbmFs dHkgb24gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bvcy4KKwkgKgorCSAqIE5vdGU6 IHdoZW4gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyBmcmVlcyBhIGJhdGNoIHRo YXQKKwkgKiBwcmVmZXRjaFBvcyBwb2ludHMgdG8sIGl0J2xsIGF0IGxlYXN0IGludmFsaWRhdGUg cHJlZmV0Y2hQb3MgZm9yIHVzLgorCSAqIFRoaXMgcmVtb3ZlcyBhbnkgZGFuZ2VyIG9mIHByZWZl dGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJlaGluZAorCSAqIHNjYW5Qb3MuYmF0Y2ggdGhh dCBpdCB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJzIHRvIGJlIGFoZWFkIG9mIHNjYW5Qb3MKKwkg KiBpbnN0ZWFkIG9mIGJlaGluZCBpdCkuICBJbiBvdGhlciB3b3JkcywgaW4gYSBjZXJ0YWluIHNl bnNlIHdlIGFjdHVhbGx5CisJICogX2Nhbl8gdHJ1c3QgaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyB0byBub3QgbGV0IHByZWZldGNoUG9zCisJICogZmFsbCBiZWhpbmQgc2NhblBv czogaXQgY2FuJ3QgaGFwcGVuIGF0IHRoZSBiYXRjaCBncmFudWxhcml0eSAob25seSBhdAorCSAq IHRoZSBpdGVtL3R1cGxlIGdyYW51bGFyaXR5LCB3aGljaCB3ZSBjYW4gYWx3YXlzIGNvcGUgd2l0 aCBoZXJlKS4KKwkgKi8KKwlpZiAoIXByZWZldGNoUG9zLT52YWxpZCB8fAorCQlpbmRleF9zY2Fu X3Bvc19jbXAocHJlZmV0Y2hQb3MsIHNjYW5Qb3MsIHhzX3JlYWRfc3RyZWFtX2RpcikgPCAwKQor CXsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkq cHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJZnJvbVNjYW5Qb3MgPSB0cnVlOworCisJCS8qCisJ CSAqIFdlIG11c3QgYXZvaWQga2VlcGluZyBhbnkgYmF0Y2ggZ3VhcmRlZCBmb3IgbW9yZSB0aGFu IGFuIGluc3RhbnQsCisJCSAqIHRvIGF2b2lkIHVuZGVzaXJhYmxlIGludGVyYWN0aW9ucyB3aXRo IHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0uIFNlZQorCQkgKiBjb21tZW50IGFuZCBhc3NlcnRpb24g YXQgdGhlIHRvcCBvZiB0aGUgbG9vcCBiZWxvdy4KKwkJICovCisJCWlmIChzY2FuLT54c193YW50 X2l0dXApCisJCXsKKwkJCS8qCisJCQkgKiBNYWtlIGhlYXBhbV9pbmRleF9iYXRjaF9wb3Nfdmlz aWJpbGl0eSByZWxlYXNlIHJlc291cmNlcworCQkJICogZWFnZXJseQorCQkJICovCisJCQloc2Nh bi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOworCisJCQkvKiBNYWtlIHN1cmUg dGhhdCB0aGlzIG5ldyBwcmVmZXRjaEJhdGNoIGlzIHVuZ3VhcmRlZCAqLworCQkJcHJlZmV0Y2hC YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWlm IChwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpCisJCQl7CisJCQkJSGVhcEJhdGNoRGF0YSAqaGJh dGNoID0gaGVhcF9iYXRjaF9kYXRhKHNjYW4sIHByZWZldGNoQmF0Y2gpOworCisJCQkJLyogU2V0 IHZpc2liaWxpdHkgaW5mbyBub3Qgc2V0IHRocm91Z2ggc2NhbkJhdGNoICovCisJCQkJaGVhcGFt X2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJ CQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCQkJICBwcmVmZXRj aFBvcyk7CisJCQl9CisJCX0KKwl9CisKKwlwcmVmZXRjaEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCisJLyoKKwkgKiBJZiBwcmVmZXRjaFBvcyB3 YXNuJ3QganVzdCBpbml0aWFsaXplZCB1c2luZyBzY2FuUG9zLCB3ZSdyZSBkaXJlY3RseQorCSAq IHBpY2tpbmcgdXAgcHJlZmV0Y2hpbmcgd2hlcmUgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgb2Zm LiAgQXNzZXJ0IHRoYXQKKwkgKiB4c19wcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IGl0 ZW0gd2UgcmV0dXJuZWQgYXMgZXhwZWN0ZWQuCisJICoKKwkgKiBOb3RlOiB3ZSBkb24ndCBhY3R1 YWxseSBuZWVkIGEgeHNfcHJlZmV0Y2hfYmxvY2sgZmllbGQgYXQgYWxsOyB3ZSBjb3VsZAorCSAq IGp1c3QgdGFrZSB0aGUgbGFzdCBibG9jayB3ZSByZXR1cm5lZCBmcm9tIHByZWZldGNoUG9zIGRp cmVjdGx5IGluc3RlYWQuCisJICogQnV0IG1haW50YWluaW5nIHhzX3ByZWZldGNoX2Jsb2NrIGV4 cGxpY2l0bHkgaXMgc2xpZ2h0bHkgbW9yZSByb2J1c3QuCisJICogSXQgZ2l2ZXMgdXMgYSB3YXkg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgcHJlZmV0Y2hQb3MKKwkg KiBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgKGUuZy4sIHdoZW4gdGhlIHJlYWQgc3RyZWFtIGhhZCB0 byBiZSBwYXVzZWQpLgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpZiAoIWZy b21TY2FuUG9zKQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmxhc3RpdGVtID0gJnByZWZldGNo QmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJQmxvY2tOdW1iZXIgbGFzdF9ibG9j ayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJmxhc3RpdGVtLT50YWJsZVRpZCk7CisKKwkJ QXNzZXJ0KGxhc3RfYmxvY2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKTsKKwl9CisjZW5k aWYKKworCWZvciAoOzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tO dW1iZXIgcHJlZmV0Y2hfYmxvY2s7CisKKwkJLyoKKwkJICogV2UgbmV2ZXIgY2FsbCBhbWdldGJh dGNoIHdpdGhvdXQgaW1tZWRpYXRlbHkgdW5ndWFyZGluZyB0aGUgYmF0Y2gsCisJCSAqIGVpdGhl ciB3aXRoaW4gdGhlIGluZGV4IEFNIG9yIGhlcmUgKHdoZW4gd2UgZWFnZXJseSBsb2FkIGFsbCBv ZiB0aGUKKwkJICogYmF0Y2gncyB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGR1cmluZyBhbiBpbmRl eC1vbmx5IHNjYW4pLiAgVGhlCisJCSAqIGluZGV4IEFNIHdvbid0IGhvbGQgb250byBUSUQgaW50 ZXJsb2NrIGJ1ZmZlciBwaW5zLCBrZWVwaW5nIHRoZQorCQkgKiBhYnNvbHV0ZSBudW1iZXIgb2Yg cGlucyBoZWxkIHRvIGEgbWluaW11bS4KKwkJICoKKwkJICogVGhpcyBpcyBkZWZlbnNpdmUuICBU aGUgcmVhZCBzdHJlYW0gdHJpZXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBub3QKKwkJICogcGlubmlu ZyB0b28gbWFueSBidWZmZXJzLCBhbmQgdGhhdCdzIGhhcmRlciB0byBkbyByZWxpYWJseSBpZiB0 aGVyZQorCQkgKiBhcmUgdmFyaWFibGUgbnVtYmVycyBvZiBwaW5zIHRha2VuIHdpdGhvdXQgc3Vj aCBjYXJlLgorCQkgKi8KKwkJQXNzZXJ0KCFwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpOworCQlp ZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNyZW1lbnQgaXRlbSB3 aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRpYWxpemVkCisJCQkgKiB1c2luZyBzY2FuUG9z LiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0ZW0ncyBoZWFwIGJsb2NrCisJCQkgKiBkaXJl Y3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAgSW4gb3RoZXIgd29yZHMsIHdlJ2xsIHJldHVy bgorCQkJICogdGhlIGhlYXAgYmxvY2sgZnJvbSBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZV9pbXBsCisJCQkgKiBhdCB0aGUgcG9pbnQgd2hlcmUgaXQgY2FsbGVkIHJlYWRf c3RyZWFtX25leHRfYnVmZmVyIGZvciB0aGUKKwkJCSAqIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBz Y2FuLiAoQXMgZXhwbGFpbmVkIGFib3ZlLCB3ZSBhbHNvIGVuZCB1cAorCQkJICogaGVyZSBkdXJp bmcgdGhlIGZpcnN0IGNhbGwgdG8gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgZm9sbG93aW5nCisJ CQkgKiBwcmVmZXRjaFBvcyBmYWxsaW5nIGJlaGluZCBzY2FuUG9zL2JlaW5nIGludmFsaWRhdGVk IGZvciB1cy4pCisJCQkgKi8KKwkJCWZyb21TY2FuUG9zID0gZmFsc2U7CisJCX0KKwkJZWxzZSBp ZiAoIWluZGV4X3NjYW5fcG9zX2FkdmFuY2UoeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJ CSBwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcykpCisJCXsKKwkJCS8qCisJCQkgKiBSYW4gb3V0 IG9mIGl0ZW1zIGZyb20gcHJlZmV0Y2hCYXRjaC4gIFRyeSB0byBhZHZhbmNlIHRvIHRoZQorCQkJ ICogc2NhbidzIG5leHQgYmF0Y2guCisJCQkgKi8KKwkJCWlmICh1bmxpa2VseShpbmRleF9zY2Fu X2JhdGNoX2Z1bGwoc2NhbikpKQorCQkJeworCQkJCS8qCisJCQkJICogQ2FuJ3QgYWR2YW5jZSBw cmVmZXRjaEJhdGNoIGJlY2F1c2UgYWxsIGF2YWlsYWJsZQorCQkJCSAqIGJhdGNocmluZ2J1ZiBi YXRjaCBzbG90cyBhcmUgY3VycmVudGx5IGluIHVzZS4KKwkJCQkgKgorCQkJCSAqIERlYWwgd2l0 aCB0aGlzIGJ5IG1vbWVudGFyaWx5IHBhdXNpbmcgdGhlIHJlYWQgc3RyZWFtLgorCQkJCSAqIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCByZXN1bWUgdGhlIHJlYWQKKwkJ CQkgKiBzdHJlYW0gbGF0ZXIsIHRob3VnaCBvbmx5IGFmdGVyIHNjYW5Qb3MgaGFzIGNvbnN1bWVk IGFsbAorCQkJCSAqIHJlbWFpbmluZyBpdGVtcyBmcm9tIHNjYW5CYXRjaCAoYXQgd2hpY2ggcG9p bnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBoZWFkIGJhdGNoIHdpbGwgYmUgZnJlZWQsIG1ha2luZyBh IHNsb3QgYXZhaWxhYmxlIGZvciByZXVzZQorCQkJCSAqIGhlcmUgYnkgdXMpLgorCQkJCSAqCisJ CQkJICogSW4gcHJhY3RpY2Ugd2UgaGFyZGx5IGV2ZXIgbmVlZCB0byBkbyB0aGlzLiAgSXQgd291 bGQgYmUKKwkJCQkgKiBwb3NzaWJsZSB0byBhdm9pZCB0aGUgbmVlZCB0byBwYXVzZSB0aGUgcmVh ZCBzdHJlYW0gYnkKKwkJCQkgKiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHNsb3RzLCBidXQgdGhh dCB3b3VsZCBhZGQgY29tcGxleGl0eQorCQkJCSAqIGZvciBubyByZWFsIGJlbmVmaXQuICBJdCBh bHNvIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEgdG8KKwkJCQkgKiBpbXBvc2Ugc29tZSBoYXJkIGxp bWl0IG9uIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyB0aGF0CisJCQkJICogcHJlZmV0Y2hQb3MgY2Fu IGdldCBhaGVhZCBvZiBzY2FuUG9zIGJ5IChlc3BlY2lhbGx5IGluIHRoZQorCQkJCSAqIGNhc2Ug b2YgaW5kZXgtb25seSBzY2Fucywgd2hlcmUgd2Ugb2Z0ZW4gd29uJ3QgaGF2ZSBhbnkKKwkJCQkg KiBoZWFwIGJsb2NrIHRvIHJldHVybiBmcm9tIG1vc3Qgb2YgdGhlIHNjYW4ncyBiYXRjaGVzKS4K KwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICog QmVmb3JlIHJldHVybmluZywgYWR2YW5jZSBwcmVmZXRjaFBvcyBpbiB0aGUgb3Bwb3NpdGUKKwkJ CQkgKiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1c2VkIGJ5IHRoZSBzY2FuLiAgVGhpcyB1bmRvZXMg dGhlCisJCQkJICogZWZmZWN0cyBvZiB0aGUgbW9zdCByZWNlbnQgYWR2YW5jZS4gIFdlJ3JlIG5v dCBnb2luZyB0bworCQkJCSAqIHJldHVybiBhbnkgYmxvY2ssIHNvIGl0IHNlZW1zIGxpa2UgYSBn b29kIGlkZWEgdG8gbGVhdmUKKwkJCQkgKiBwcmVmZXRjaFBvcyBpbiBhIHN0YXRlIGNvbnNpc3Rl bnQgd2l0aCB0aGF0LgorCQkJCSAqLworCQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHhz X3JlYWRfc3RyZWFtX2RpcikpCisJCQkJeworCQkJCQlBc3NlcnQocHJlZmV0Y2hQb3MtPml0ZW0g PT0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0gKyAxKTsKKwkJCQkJcHJlZmV0Y2hQb3MtPml0ZW0g PSBwcmVmZXRjaEJhdGNoLT5sYXN0SXRlbTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJ QXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAtIDEp OworCQkJCQlwcmVmZXRjaFBvcy0+aXRlbSA9IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbTsKKwkJ CQl9CisKKwkJCQlyZXR1cm4gcmVhZF9zdHJlYW1fcGF1c2Uoc3RyZWFtKTsKKwkJCX0KKworCQkJ cHJlZmV0Y2hCYXRjaCA9IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKHNjYW4sCisJCQkJ CQkJCQkJCQkJCSAgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNo QmF0Y2gsCisJCQkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJaWYgKCFwcmVmZXRjaEJh dGNoKQorCQkJeworCQkJCS8qCisJCQkJICogTm8gbW9yZSBiYXRjaGVzIGluIHRoaXMgZGlyZWN0 aW9uLCBzbyBhbGwgdGhlIGJhdGNoZXMgdGhhdAorCQkJCSAqIHRoZSBzY2FuIHdpbGwgZXZlciBy ZXF1aXJlIChiYXJyaW5nIGEgY2hhbmdlIGluIHNjYW4KKwkJCQkgKiBkaXJlY3Rpb24pIGFyZSBu b3cgbG9hZGVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0K KworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRj aEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGly LAorCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4t PnhzX3dhbnRfaXR1cCkKKwkJCXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2Jh dGNoX2RhdGEoc2NhbiwgcHJlZmV0Y2hCYXRjaCk7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2 ZSB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNj YW4tPnhzX3ZtX2l0ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9pbmRl eF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJ CQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3Mp OworCQkJfQorCQl9CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUg bmV4dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQg dG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg cHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNo UG9zLT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQ b3MtPml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFs d2F5cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nh bl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDAp OworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhi YXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJQXNzZXJ0 KGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVD S0VEKTsKKwkJCWlmIChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9C QVRDSF9WSVNfQUxMX1ZJU0lCTEUpCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBh bGwtdmlzaWJsZSAtLSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9 CisKKwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJ CXByZWZldGNoX2Jsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVU aWQpOworCisJCWlmIChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sp CisJCXsKKwkJCS8qCisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZl dGNoUG9zIGl0ZW0ncyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90 IHJldHVybiB0aGUgc2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1 Y2Nlc3Npb24pCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5l dyBoZWFwIGJsb2NrIG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4t PnhzX3ByZWZldGNoX2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9i bG9jazsKKwl9CisKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggOWJlNDEwMjZiLi42NjM1OTJmYWYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMTAsNyArMTAsMTAgQEAKICAqIGFwcHJv YWNoIGVuYWJsZXMgZWZmaWNpZW50IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJp bmcgb3JkZXJlZAogICogaW5kZXggc2NhbnMuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRz IGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxv YWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlIG9yZGVyLiAgVGhpcyBhbGxvd3MgdGhlCisg KiB0YWJsZSBBTSB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRz IHJlYWQgc3RyZWFtCisgKiBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJs ZSBibG9ja3MgcmVmZXJlbmNlZCBieSBpbmRleCBwYWdlcworICogdGhhdCBhcmUgd2VsbCBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBUaGVy ZSdzIHRocmVlIHR5cGVzIG9mIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKICAqCkBAIC0zMCw2 ICszMywyNCBAQAogICogICAgQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVy ZmFjZS4gIFRoZXNlIG1hbmFnZSBiYXRjaAogICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBi dWZmZXIgbG9jayByZWxlYXNlLCBhbmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KICAqCisgKiBU aGVzZSB0aHJlZSBsYXllcnMgY29vcmRpbmF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvdXBsaW5nOiB0 aGUgY29yZSBsaWZlY3ljbGUKKyAqIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0YWJsZSBBTXMgdXNl IHNjYW5Qb3Mvc2NhbkJhdGNoIGFuZCBwcmVmZXRjaFBvcy8KKyAqIHByZWZldGNoQmF0Y2ggaW4g YSBzdGFuZGFyZGl6ZWQgd2F5IChzZWUgaGVhcGFtX2luZGV4c2Nhbi5jIGZvciB0aGUKKyAqIHJl ZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiksIHdoaWxlIHRhYmxlIEFNcyBhc3N1bWUgdGhhdCBpbmRl eCBBTXMgZnJlZSBhbmQKKyAqIHVubG9jayBiYXRjaGVzIGFzIGRlc2NyaWJlZCBpbiBpbmRleGFt LnNnbWwuCisgKgorICogVGhlIHRhYmxlIEFNIGZ1bGx5IGNvbnRyb2xzIHRoZSByZWFkIHN0cmVh bSBhcyBpdHMgb3duIHByaXZhdGUgc3RhdGUuCisgKiBXaGVuIHRoZSBzY2FuIGRpcmVjdGlvbiBj aGFuZ2VzLCB0aGUgdGFibGUgQU0gbXVzdCBpbW1lZGlhdGVseSByZXNldCBpdHMKKyAqIHJlYWQg c3RyZWFtIGFuZCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIC0tIGJsb2NrcyBhbHJlYWR5IHJlcXVl c3RlZCB2aWEKKyAqIHByZWZldGNoUG9zIHdpbGwgbm8gbG9uZ2VyIG1hdGNoIHdoYXQgc2NhblBv cyBuZWVkcyB0byByZXR1cm4uCisgKgorICogQ3Jvc3NpbmcgYSBiYXRjaCBib3VuZGFyeSBpbiBh IG5ldyBzY2FuIGRpcmVjdGlvbiBpcyBhIHNlcGFyYXRlIHByb2Nlc3MsCisgKiBoYW5kbGVkIGhl cmU6IHRhYmxlIEFNcyBhcmUgcmVxdWlyZWQgdG8gY2FsbCB0YWJsZWFtX3V0aWxfYmF0Y2hfZGly Y2hhbmdlCisgKiB0byBsZWF2ZSB0aGUgc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyIGluIGEgY29u c2lzdGVudCBzdGF0ZS4gIFRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRo aXMgYnkgc2ltcGx5IGRpc2NhcmRpbmcgbW9zdCBiYXRjaGVzLiAgVGhlIGtleQorICogaW52YXJp YW50IGlzIHRoYXQgYWxsIGxvYWRlZCBiYXRjaGVzIG11c3QgYmUgaW4gYSBjb25zaXN0ZW50IHNj YW4gZGlyZWN0aW9uCisgKiBvcmRlci4KKyAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCiAgKgpAQCAtNjUsNiArODYsNyBAQCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5E ZXNjIHNjYW4pCiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJh dGNoICE9IE5VTEwpOwogCiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3MudmFsaWQgPSBmYWxz ZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAlzY2Fu LT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOwogCiAJc2Nhbi0+YmF0Y2hyaW5n YnVmLm1hcmtCYXRjaCA9IE5VTEw7CkBAIC04NSw2ICsxMDcsNyBAQCBpbmRleF9iYXRjaHNjYW5f cmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCiAJYm9vbAkJbWFya0JhdGNo RnJlZWQgPSBmYWxzZTsKIAogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOwor CWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAliYXRjaHJpbmdidWYt Pm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCS8qIEVuc3VyZSBiYXRjaF9mcmVlIHdvbid0IHNr aXAgdGhlIG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AgYmVsb3cgKi8KQEAgLTE5OCw3ICsyMjEs MTMgQEAgaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRo ZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRpc2NhcmQg YWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCi0g KiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2Nh bkJhdGNoLgorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBj dXJyZW50IHNjYW5CYXRjaC4gIFdlIGFsd2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4g IFRoZSByZWFkIHN0cmVhbSBhbmQgcmVsYXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUKKyAqIHJl c2V0IGJ5IHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KCksIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5j dGlvbi4gIFRoaXMKKyAqIGFwcHJvYWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFN czogbW9zdCBjb2RlIHRoYXQgZGVhbHMgd2l0aAorICogYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUg dG8gYXNzdW1lIHRoYXQgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNjYW4gZGlyZWN0aW9uCisgKiBu ZXZlciBjaGFuZ2VzIGlzIHRoZSBvbmx5IGNhc2UgKHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFu Z2UgdGFrZXMgYQorICogc2ltaWxhciBhcHByb2FjaCB0byBoYW5kbGluZyBhIGNyb3NzLWJhdGNo IGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbikuCiAgKi8KIHZvaWQKIGluZGV4X2JhdGNoc2Nhbl9y ZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC0yMTMsNiArMjQyLDE0IEBAIGluZGV4 X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KHNjYW4t PnhzX2hlYXBmZXRjaCk7CiAJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8qCisJICogUmVz dG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hpbmcuICBUaGlz IGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcgdGFibGUgQU1zIGltcGxlbWVudCB0byBk ZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkgKiBpbiB0aGUgc2NhbidzIGRpcmVjdGlv bi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0CisJICogYnkg dGhlIGNhbGxlciAodmlhIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8KKwliYXRjaHJp bmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09IG1h cmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4n dCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0yODIsNiArMzE5LDEzIEBAIGluZGV4X2JhdGNo c2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0byBkZXRlcm1pbmUgd2hp Y2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhpcwogICog YXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIHdlbGwg ZW5vdWdoIGZvciB3aGF0CiAgKiBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJl bmNlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgcmVzZXQgdGhlIHNjYW4ncyByZWFkIHN0cmVh bSBiZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhhdAorICogbmVlZHMgdG8gaGFwcGVuIGFzIHNvb24g YXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0ZXZlciBzY2FuCisgKiBkaXJlY3Rp b24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkgZGVhbCB3aXRoIHRoZSBjYXNlIHdo ZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2ggaXRlbXMgdG8gY3Jvc3MgYSBiYXRj aCBib3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1lcyBzY2FubmluZyBpbiBpdHMgb3Jp Z2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5nIGEgYm91bmRhcnksCisgKiB0aGVy ZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICovCiB2b2lkCiB0YWJsZWFtX3V0aWxf YmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IDFjNTc1ZTU2Zi4uNmZjYjgxNWY3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNj YW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29s CQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7 CiBib29sCQllbmFibGVfc29ydCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0CmluZGV4IDBhODYyNjkzZi4uMmI1NjIwZjljIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtOTMxLDYgKzkzMSwxMyBAQAogICBib290 X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0 Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAn UVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hp bmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdH VUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywK KyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwn LCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVF UllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJc J3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGNm MTU1OTczOC4uMjEzNWVhNTI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC00MjAsNiArNDIwLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxf c29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4g PSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9 IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CmluZGV4IDIyOWY0MTM1My4uMzM2YzYyMWQ1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYgKzU3MTIs MjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFj ZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhz Y2FuLXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAg ICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0 eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48 dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2Fi bGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4KKyAgICAg ICAgcGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJl YWRpbmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVk ZWQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+ b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJp YWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVu YWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGlu ZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDBmNmMzNzNiMS4uMjViNTE2YmE2IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNn bWwKQEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAog ICA8cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRo ZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBl bnRyaWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBB TSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5l ZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBU aGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxl IGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBC eSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRl eCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0 aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVk ZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3Jk ZXJlZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTAwMSw3ICsxMDA0 LDggQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGZyZWUgdGhlIHBp bnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+CiAgICBhbmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+ IGFyZSBjYWxsZWQpLiAgSXQgbXVzdCBhbHNvIGtlZXAgdGhlCiAgICBudW1iZXIgb2YgcmV0YWlu ZWQgcGlucyBmaXhlZCBhbmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQn cwotICAgYnVmZmVyIHBpbiBsaW1pdC4KKyAgIGJ1ZmZlciBwaW4gbGltaXQgKHdoaWNoIGlzIHNo YXJlZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJlYWQgc3RyZWFtCisgICBmb3IgaW5kZXggc2NhbiBw cmVmZXRjaGluZykuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEzNzYsNiArMTM4MCw2MCBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICBvciB2aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVt ZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4K IAorICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxl IEFNIENvbnNpZGVyYXRpb25zIGZvciBCYXRjaCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJh PgorICAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8bGluayBs aW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MgbWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAg IFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGludGVyZmFjZSwKKyAgICB0aGUgdGFibGUgQU0gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFn aW5nIHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0aGUKKyAgICA8c3RydWN0bmFtZT5JbmRleFNjYW5E ZXNjPC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0 ZmllbGQ+IGFuZCBmb3IgY29udHJvbGxpbmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4 IHBhZ2VzIGFyZSByZWxlYXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxz dHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVj dGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQg aXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUg ZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNj YW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0 aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgY29kZSBt YXkgYWxzbworICAgIG1vZGlmeSB0aGlzIGZpZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1Y2ggYXMg bWFyay9yZXN0b3JlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZp ZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1 c2VkCisgICAgZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBi eSBpbml0aWFsaXppbmcgaXQgZnJvbQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3Rm aWVsZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRh YmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQg YXJlIHdlbGwKKyAgICBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlh bGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0 CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFk IHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5p bmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4g b3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBt YWpvcgorICAgIGdvYWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlIGlzIHRvIGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQg YmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxk PnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgQm90aCA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0Zmll bGQ+IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGFyZSBj b250cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQKKyAgICBjb3JlIGNvZGU7IGluZGV4IGFjY2Vz cyBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAgICBmaWVs ZHMuICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC88L2ZpbGVuYW1l PgorICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJh PgorCisgICA8cGFyYT4KKyAgICBGb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQg ZHVyaW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRpbmcgdGhlCisgICAgPHN0cnVjdGZpZWxkPmJhdGNo SW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IHBvbGljeSBhbmQgdGhlCisgICAgPGZ1bmN0 aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHNlZQorICAgIDx4cmVmIGxp bmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwv c2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXggOWNj ZjViNzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwxNCBAQCBteV90 YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0aGUgYmxvY2sg bnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisgPHBhcmE+Cisg IFRhYmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2NhbnMgdXNp bmcgdGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBTZWUg YWxzbworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRh aWxzIG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpbmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2FuJ3MgcG9zaXRp b24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFuIEFNIGNhbiB1 c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9hY3Jvbnlt PjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFt ZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAg ZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2Nh biAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisg ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAg ICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBz ZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5h YmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29y dCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAg ICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQg ZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0t IG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFz dCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0004-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Disposition: attachment; filename="v19-0004-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7s14 RnJvbSAzOWJhZjhhZWVjMGRkMGVhMjE0NGIwMTRjMjBkNDFkMWZlMjg0OWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjYgTWFyIDIwMjYgMTg6NDU6MjcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwNC8xOF0g aGVhcGFtOiBLZWVwIGJ1ZmZlciBwaW5zIGFjcm9zcyBpbmRleCByZXNjYW5zLgoKQXZvaWQgZHJv cHBpbmcgdGhlIGhlYXAgcGFnZSBwaW4gKHhzX2NidWYpIGFuZCB2aXNpYmlsaXR5IG1hcCBwaW4K KHhzX3ZtYnVmZmVyKSBkdXJpbmcgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LiAgUmV0YWluaW5n IHRoZXNlIHBpbnMKc2F2ZXMgY3ljbGVzIGR1cmluZyB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyBh bmQgbWVyZ2Ugam9pbnMgdGhhdApmcmVxdWVudGx5IHJlc3RvcmUgYSBzYXZlZCBtYXJrLCBzaW5j ZSB0aGUgbmV4dCB0dXBsZSBmZXRjaGVkIGFmdGVyIGEKcmVzY2FuIG9mdGVuIGZhbGxzIG9uIHRo ZSBzYW1lIGhlYXAgcGFnZS4gIEl0IGNhbiBhbHNvIGF2b2lkIHJlcGVhdGVkCnBpbm5pbmcgYW5k IHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgd2hlbiByZXNjYW5zIGhhcHBlbiB0byByZXZp c2l0CnRoZSBzYW1lIHBhZ2UuCgpQcmVwYXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgcGF0Y2ggdGhh dCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2UgdG8gZW5hYmxlIG9wdGltaXphdGlv bnMgc3VjaCBhcyBJL08gcHJlZmV0Y2hpbmcuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdA Ym93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PWc9SlRTeURCNFV0QjVzdTJa Y3ZzUzdWYlArWk12dmFHNkFCb0NiK3M4THdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCAyNyArKysrKysrKysrKystLS0tLS0t LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgfCAgNiArKy0t LQogMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggNGI1ZTJiMzBk Li44MmYxMzVlMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2Fu LmMKQEAgLTU5LDE4ICs1OSwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRj aFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4 RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7Ci0JCWhzY2FuLT54c19j YnVmID0gSW52YWxpZEJ1ZmZlcjsKLQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJl cjsKLQl9CisJLyogUmVzZXRzIGFyZSBhIG5vLW9wIChYWFggYW1nZXRiYXRjaCBjb21taXQgcmVz ZXRzIHhzX3ZtX2l0ZW1zIGhlcmUpICovCisJKHZvaWQpIGhzY2FuOwogCi0JaWYgKEJ1ZmZlcklz VmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVyKSkKLQl7Ci0JCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X3ZtYnVmZmVyKTsKLQkJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9CisJ LyoKKwkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBpbiB4c19j YnVmIGFuZCB4c192bWJ1ZmZlci4KKwkgKiBUaGlzIHNhdmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFp biB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5kIGR1cmluZworCSAqIG1lcmdlIGpvaW5zIHRo YXQgZnJlcXVlbnRseSByZXN0b3JlIGEgc2F2ZWQgbWFyay4gIEl0IGNhbiBhbHNvIGF2b2lkCisJ ICogcmVwZWF0ZWQgcGlubmluZyBhbmQgdW5waW5uaW5nIG9mIHRoZSBzYW1lIGJ1ZmZlciBhY3Jv c3MgcmVzY2Fucy4KKwkgKi8KIH0KIAogdm9pZApAQCAtNzgsNyArNzUsMTMgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKLQloZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CisJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBhIHBpbm5l ZCBoZWFwIHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCVJl bGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCisJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBh IHBpbm5lZCB2aXNpYmlsaXR5IG1hcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX3ZtYnVmZmVyKSkKKwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCiAJ cGZyZWUoaHNjYW4pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNjJlZjQw ZGMyLi4zNTdmMzYxOGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMzkwLDcg KzM5MCw3IEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJQXNzZXJ0KG5rZXlz ID09IHNjYW4tPm51bWJlck9mS2V5cyk7CiAJQXNzZXJ0KG5vcmRlcmJ5cyA9PSBzY2FuLT5udW1i ZXJPZk9yZGVyQnlzKTsKIAotCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5z KSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJl c2NhbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBpbmRleF9yZXN0 cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9D RURVUkUoYW1yZXN0cnBvcyk7CiAKLQkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIg cGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZv ciByZXN0b3JpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0 Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKQEAg LTY2NCw3ICs2NjQsNyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVz LCB3ZSdyZSBkb25lICovCiAJaWYgKCFmb3VuZCkKIAl7Ci0JCS8qIHJlbGVhc2UgcmVzb3VyY2Vz IChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJCS8qIHJlc2V0IHRh YmxlIEFNIHN0YXRlICovCiAJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCQl0YWJsZV9pbmRl eF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCi0tIAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0005-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v19-0005-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7r13 RnJvbSBkMmEwYmIzNjlkNTc5MTlkNzVkOTlmMmM5ZmM1ZmQwYTBlMmUyMjJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwNS8xOF0g QWRkIGludGVyZmFjZXMgdGhhdCBlbmFibGUgaW5kZXggcHJlZmV0Y2hpbmcuCgpBZGQgYSBuZXcg YW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNzIG1l dGhvZHMKdG8gaW1wbGVtZW50IHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5z IHRoYXQgcmV0dXJuIGluZGV4CmVudHJpZXMgaW4gYmF0Y2hlcyBjb21wcmlzaW5nIGFsbCBtYXRj aGluZyBpdGVtcyBmcm9tIGFuIGluZGV4IHBhZ2UsCnJhdGhlciB0aGFuIG9uZSBtYXRjaCBhdCBh IHRpbWUuICBBbHNvIHN3aXRjaCBuYnRyZWUgb3ZlciBmcm9tCmFtZ2V0dHVwbGUgdG8gdGhlIG5l dyBhbWdldGJhdGNoIGludGVyZmFjZS4KClRoaXMgZXhwYW5kcyB0aGUgc2xvdC1iYXNlZCB0YWJs ZSBBTSBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FCmZyb20gdHdvIGNhbGxiYWNrcyAo Zm9yIGFtZ2V0dHVwbGUgcGxhaW4gYW5kIGluZGV4LW9ubHkgc2NhbnMpIHRvIGZvdXIsCmFkZGlu ZyBhbWdldGJhdGNoIHZhcmlhbnRzIGZvciBib3RoIHNjYW4gdHlwZXMuICBUaGUgYW1nZXRiYXRj aAppbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhpcyBhcHByb2FjaCB0byBpbmRl eCBzY2FuczogdGhlCnRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVkZ2Ugb2Ygd2hpY2ggVElEcyB3 aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuCmluIHRoZSBuZWFyIGZ1dHVyZSB0byBwZXJmb3Jt IEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUKYWRkZWQgYnkgYW4gdXBjb21p bmcgY29tbWl0LgoKV2l0aCBhbWdldGJhdGNoLCBhIHNjYW4tbGV2ZWwgcG9saWN5IGRldGVybWlu ZXMgd2hldGhlciBlYWNoIGJhdGNoJ3MKaW5kZXggcGFnZSBidWZmZXIgcGluIGlzIGRyb3BwZWQg ZWFnZXJseSBieSB0aGUgaW5kZXggQU0gKGZvciBwbGFpbgpzY2FucyB3aXRoIGFuIE1WQ0Mgc25h cHNob3QsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNlbGYgcHJldmVudHMgVElECnJlY3ljbGluZyBw cm9ibGVtcykgb3IgcmV0YWluZWQgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBU SUQKcmVjeWNsaW5nIGJ5IFZBQ1VVTS4gIFRoZSBpbnRlcmxvY2sgaXMgcmV0YWluZWQgZm9yIG5v bi1NVkNDIHNjYW5zIGFuZApmb3IgaW5kZXgtb25seSBzY2FucywgYW5kIGlzIGRyb3BwZWQgYnkg dGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3CmFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdoZW4gaXQg aXMgc2FmZSB0byBkbyBzby4gKEFjdHVhbGx5LCBpbmRleCBBTXMKYXJlIHVzdWFsbHkgYWJsZSB0 byBkcm9wIHRoZSBwaW4gYXQgdGhlIHNhbWUgdGltZSB0aGF0IHRoZXkgcmVsZWFzZSB0aGUKbG9j ay4gIEluIHByYWN0aWNlLCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgaXMgb25seSByZWFs bHkgbmVlZGVkCmR1cmluZyBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSBkcm9wcGluZyB0aGUgcGlu IGludGVybG9jayBtaWdodCBuZWVkIHRvCmJlIGRlbGF5ZWQgZXZlciBzbyBzbGlnaHRseSwgYXMg ZXhwbGFpbmVkIGJlbG93LikKClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRk ZWQgdG8gbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdv cmsgd2l0aCBhbGwgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIChMUF9ERUFEIG1hcmtpbmcgb2YgaW5kZXggZW50cmllcyBtdXN0IGJlIHBlcmZvcm1l ZApieSBpbXBsZW1lbnRpbmcgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3aGlj aCBoYXMgYQpkb2N1bWVudGVkIGNvbnRyYWN0IGRlc2NyaWJpbmcgaG93IGluZGV4IEFNcyBtdXN0 IHJlYXNvbiBhYm91dApjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcpLiAgU2NhbnMgY2FuIGFsd2F5 cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQgdGhlIHNjYW4g dXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGluIG9wdGltaXph dGlvbiwgd2hpY2ggaGFkIG5vIHdheSBvZiBkb2luZyB0aGlzIHNhZmVseSBkdXJpbmcKaW5kZXgt b25seSBzY2FucyBkdWUgdG8gaG93IGFtZ2V0dHVwbGUgd29ya3MsIGFuZCBvbmx5IGdhaW5lZCBz dXBwb3J0CmZvciBzY2FucyBvZiB1bmxvZ2dlZCByZWxhdGlvbnMgaW4gcmVjZW50IGNvbW1pdCA4 YTg3OTExOSkuCgpUaGUgb2xkIGFtbWFya3BvcyBhbmQgYW1yZXN0cnBvcyBpbmRleCBBTSBjYWxs YmFja3MgYXJlIHJlbW92ZWQuICBXaXRoCmFtZ2V0YmF0Y2gsIG1hcmsvcmVzdG9yZSBvZiBzY2Fu IHBvc2l0aW9ucyBpcyBtYW5hZ2VkIGJ5IGNvcmUgYmF0Y2gKdXRpbGl0aWVzLCB3aXRoIGNvb3Bl cmF0aW9uIGZyb20gdGhlIHRhYmxlIEFNLCByYXRoZXIgdGhhbiBiZWluZwpkZWxlZ2F0ZWQgdG8g dGhlIGluZGV4IEFNLiAgQWxsIGFtZ2V0YmF0Y2gtY2FwYWJsZSBpbmRleCBBTXMgaW5oZXJlbnRs eQpzdXBwb3J0IG1hcmsvcmVzdG9yZSB3aXRob3V0IG5lZWRpbmcgdG8gaW1wbGVtZW50IGl0IHRo ZW1zZWx2ZXMuCgpBbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFkZCBpbmRleCBwcmVmZXRj aGluZyB3aWxsIHVzZSBhIHJlYWQKc3RyZWFtIHRvIHJlYWQgaGVhcCBwYWdlcyBkdXJpbmcgaW5k ZXggc2NhbnMuICBSZWFkIHN0cmVhbSBpcyBjYXJlZnVsIHRvCmxpbWl0IGhvdyBtYW55IHRoaW5n cyBpdCBwaW5zLCBsZXN0IHdlIHJ1biBpbnRvIHByb2JsZW1zIGR1ZSB0byBoYXZpbmcKdG9vIG1h bnkgYnVmZmVycyBwaW5uZWQuICBTaW1wbHkgbmV2ZXIgaG9sZGluZyBvbiB0byBpbmRleCBwYWdl IGJ1ZmZlcgpwaW5zIGdyZWF0bHkgc2ltcGxpZmllcyByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBp bmRleCBwcmVmZXRjaGluZzsKdGhlcmUncyBubyByaXNrIG9mIHVuaW50ZW5kZWQgaW50ZXJhY3Rp b25zIGJldHdlZW4gdGhlIHJlYWQgc3RyZWFtIGFuZAppbmRleCBBTS4gIFRoZSBvbmx5IGRvd25z aWRlIGlzIHRoYXQgd2UgY2Fubm90IHN1cHBvcnQgcHJlZmV0Y2hpbmcKZHVyaW5nIHNjYW5zIHRo YXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QsIHdoaWNoIHNlZW1zIHF1aXRlIGFjY2VwdGFibGUu CgpJbiBwcmFjdGljZSwgaGVhcGFtIGRvZXNuJ3QgZHJvcCBlYWNoIGJhdGNoJ3MgaW5kZXggcGFn ZSBidWZmZXIgcGluIGF0CnRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSBkdXJpbmcgaW5kZXgtb25s eSBzY2Fucy4gIFRoaXMgd2FzIGRlZW1lZApuZWNlc3NhcnkgdG8gYXZvaWQgcmVncmVzc2luZyBp bmRleC1vbmx5IHNjYW5zIHdpdGggYSBMSU1JVCwgaW4KcGFydGljdWxhciB3aXRoIG5lc3Rsb29w IGFudGktam9pbnMgYW5kIG5lc3Rsb29wIHNlbWktam9pbnM7IGVhZ2VybHkKbG9hZGluZyBhbGwg dGhlIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gdXAgZnJvbnQgcmVncmVzc2VkIHN1Y2ggcXVlcmll cy4KVGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBnaXZlcyB0YWJsZSBBTXMgdGhlIGF1dGhv cml0eSB0byBkZWNpZGUKd2hlbiBhbmQgd2hlcmUgdG8gZHJvcCBpbmRleCBwYWdlIHBpbnMsIHNv IHRoaXMgY2FuIGJlIGNvbnNpZGVyZWQgYQpoZWFwYW0gaW1wbGVtZW50YXRpb24gZGV0YWlsIChp bmRleCBBTXMgZG9uJ3QgbmVlZCB0byBrbm93IGFib3V0IGl0KS4KVGhpcyBzY2hlbWUgc3RpbGwg YWxsb3dzIGluZGV4IHByZWZldGNoaW5nIHRvIGNvbnNpc3RlbnRseSBob2xkIG5vIG1vcmUKdGhh biBvbmUgYmF0Y2ggaW5kZXggcGFnZSBwaW4gYXQgYSB0aW1lLCBldmVuIHdoZW4gYW4gaW5kZXgt b25seSBzY2FuCih0aGF0IG11c3QgcGVyZm9ybSBzb21lIGhlYXAgZmV0Y2hlcykgaG9sZHMgb3Bl biBzZXZlcmFsIGluZGV4IGJhdGNoZXMKYXQgb25jZSBpbiBvcmRlciB0byBtYWludGFpbiBhbiBh ZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZS4KCkluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgc3Vw cG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0aGVyIHRoZSBhbWdl dGJhdGNoIGludGVyZmFjZSBvciB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2UgKG5vdCBib3RoKS4K QW4gdXBjb21pbmcgcGF0Y2ggd2lsbCBhZGQgc3VwcG9ydCBmb3IgYW1nZXRiYXRjaCB0byB0aGUg aGFzaCBpbmRleCBBTS4KQnV0IHRoZSBhbWdldHR1cGxlIGludGVyZmFjZSB3aWxsIHN0aWxsIGJl IHVzZWQgYnkgdGhlIEdpU1QgYW5kIFNQLUdpU1QKaW5kZXggQU1zIGZvciBub3cuICBCb3RoIHNo YXJlIGEgc2V0IG9mIHByb2JsZW1zIHRoYXQgbWFrZSBpdCB1bmNsZWFyCmhvdyB0byBnbyBhYm91 dCBhZGRpbmcgc3VwcG9ydC4KCkJvdGggQU1zIHJlY29uc3RydWN0IGluZGV4IGRhdGEgYXMgSGVh cFR1cGxlcyB2aWEgaGVhcF9mb3JtX3R1cGxlIGR1cmluZwppbmRleC1vbmx5IHNjYW5zLCBwZXJm b3JtaW5nIHJldGFpbCBwYWxsb2MgYWxsb2NhdGlvbnMgdGhhdCBhcmUKaW5jb21wYXRpYmxlIHdp dGggdGhlIGZsYXQsIGZpeGVkLXNpemUsIHJlY3ljbGFibGUgcGVyLWJhdGNoIG1lbW9yeQptb2Rl bCB0aGF0IGFtZ2V0YmF0Y2gncyBjdXJyVHVwbGVzIHdvcmtzcGFjZSByZXF1aXJlcy4gIE1vcmVv dmVyLCBib3RoCkFNcyBoYXZlIGtub3duIGJ1Z3MgaW52b2x2aW5nIGJ1ZmZlciBwaW4gbWFuYWdl bWVudCBkdXJpbmcgaW5kZXgtb25seQpzY2FuczogdGhleSByZWxlYXNlIGluZGV4IGxlYWYgcGFn ZSBwaW5zIGltbWVkaWF0ZWx5LCByYXRoZXIgdGhhbgpob2xkaW5nIHRoZW0gYXMgYW4gaW50ZXJs b2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSwKY3JlYXRpbmcg YSByYWNlIGNvbmRpdGlvbiBpbiB3aGljaCBWQUNVVU0gY2FuIHJlbW92ZSBhIGhlYXAgdHVwbGUg YW5kCnRoZW4gbWFyayBpdHMgcGFnZSBhbGwtdmlzaWJsZSB3aGlsZSB0aGUgaW5kZXgtb25seSBz Y2FuIHN0aWxsIGhvbGRzIGEKcmVmZXJlbmNlIHRvIHRoZSBub3ctcmVjeWNsZWQgVElEIFsxXS4g IFRoZXNlIGluZGV4IEFNcyBjYW5ub3QgYWRvcHQKYW1nZXRiYXRjaCB3aXRob3V0IGZpcnN0IGZp eGluZyB0aGUgcGluLWhhbmRsaW5nIGRlZmljaWVuY3kgdGhhdCB0aGV5CmFscmVhZHkgaGF2ZSB1 bmRlciBhbWdldHR1cGxlIChpdCdzIG5vdCBjbGVhciBob3cgdG8gZml4IHRoZSBwcm9ibGVtCndp dGhpbiB0aGUgY29uZmluZXMgb2YgdGhlIGN1cnJlbnQgYW1nZXR0dXBsZSBkZXNpZ24sIGxldCBh bG9uZSBpbiBhIHdheQp0aGF0J3MgY29tcGF0aWJsZSB3aXRoIGFtZ2V0YmF0Y2gpLgoKWzFdIGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1XeiUzRGpqaU5MOUZDaDhDMUwtR1VIMTVmNFdGVFd1YjJ4 JTJCX051Y25nY0REY0hLdyU0MG1haWwuZ21haWwuY29tCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8 dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2 aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6 IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJw cmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQt NDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRyYS5tZQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICA0MyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2lu ZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwgMTY3ICsrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE4NCArKy0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMzQ4ICsrKysrKystCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgNDYgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCA0NTIgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2FtYXBpLmMgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAgNTkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8IDc2NyArKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgICAgICAgICAgfCAgNzQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgICAgIHwgMjA3ICsrKy0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAgICAgfCA0NjkgKysrKysrLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8IDU2NyArKysr KystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAgICAg fCAyNDUgLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAgICAgICAg ICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyAgICAgICAg ICB8ICAgNiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgICAgICAg fCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyAgICAgICAgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgfCAg IDggKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyAgICB8ICAg OSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyAgICAgICAgICAgICAgIHwgICA4 ICstCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDIg Ky0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiAr LQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNTIwICsr KysrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAg IHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAg fCAgIDYgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8 ICAxMiArLQogNDIgZmlsZXMgY2hhbmdlZCwgMzA0MSBpbnNlcnRpb25zKCspLCAxMjkxIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNo LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRj aC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBlY2ZiZDAxN2QuLjliZDMxNDFmYyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmgKQEAgLTE5OCw2ICsxOTgsMTkgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KTsKIAorLyogbmV4dCBiYXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2Fu QmF0Y2ggKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qIG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICov Cit0eXBlZGVmIHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogZHJvcCBU SUQgcmVjeWNsaW5nIGludGVybG9jayBoZWxkIHRvIHByZXZlbnQgY29uY3VycmVudCBWQUNVVU0g cmVjeWNsaW5nICovCit0eXBlZGVmIHZvaWQgKCphbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbikgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAv KiBmZXRjaCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBf ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAgKnRi bSk7CkBAIC0yMDUsMTEgKzIxOCw5IEBAIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5j dGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBlZGVm IHZvaWQgKCphbWVuZHNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0vKiBt YXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBw b3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CisvKiBpbnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRl bnRseSB0cmFja3Mgc2NhbidzIHBvc2l0aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0 X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFy YWxsZWwgaW5kZXggc2NhbnMuCkBAIC0zMDksMTAgKzMyMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEFtUm91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVz Y2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsg LyogY2FuIGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNh biBiZSBOVUxMICovCisJYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNo OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJh dGNoOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFw OwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1t YXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9z X2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5j dGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0 aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFs bGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2VuYW0uaAppbmRleCBkYjYyZTBjYTEuLmFlNTg3ZjhkZSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK QEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sp IChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0 aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNj RGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAq SW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5E ZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxl bEluZGV4U2NhbkRlc2M7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZjkxZjBlMmZiLi5hNTRmYmMyMmYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyOCwxMCArMTI4LDQwIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7 CiAKLQkvKiBDdXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZp c2liaWxpdHkgbWFwICovCi0JQnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgdmlzaWJpbGl0 eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8K KwlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJ CQl4c192bV9pdGVtczsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3Ig Ki8KKwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKKy8qCisgKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBoZWFwIHRhYmxlIEFNLgorICoKKyAqIFN0b3JlZCBhdCBhIG5lZ2F0aXZlIG9m ZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyLCBpbiB0aGUKKyAqIHRhYmxlIEFN IG9wYXF1ZSBhcmVhIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgSGVhcEJhdGNoRGF0YQoreworCXVpbnQ4CSAgICp2aXNJbmZvOwkJLyogcGVyLWl0ZW0gdmlz aWJpbGl0eSBmbGFncywgb3IgTlVMTCAqLworfSBIZWFwQmF0Y2hEYXRhOworCisvKgorICogUGVy LWl0ZW0gdmlzaWJpbGl0eSBmbGFncyBzdG9yZWQgaW4gSGVhcEJhdGNoRGF0YS52aXNJbmZvIGFy cmF5CisgKi8KKyNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2Vk IGl0ZW0gaW4gVk0/ICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJ LyogYmxvY2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCisKKy8qCisgKiBBY2Nlc3MgdGhlIGhl YXAtcHJpdmF0ZSBmaXhlZC1zaXplIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGFuIGFsbG9j YXRlZAorICogSW5kZXhTY2FuQmF0Y2gsIHVzaW5nIGNhbGxlcidzIEluZGV4U2NhbkJhdGNoIHBv aW50ZXIKKyAqLworc3RhdGljIGlubGluZSBIZWFwQmF0Y2hEYXRhICoKK2hlYXBfYmF0Y2hfZGF0 YShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGhlYXBh bSdzIGZpeGVkLXNpemUgc3BhY2UgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYWxsb2MnZCBhcmVh ICovCisJcmV0dXJuIChIZWFwQmF0Y2hEYXRhICopIGJhdGNoX2FsbG9jX2Jhc2Uoc2NhbiwgYmF0 Y2gpOworfQorCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAq LwogdHlwZWRlZiBlbnVtCiB7CkBAIC00MzIsOSArNDYyLDE4IEBAIGV4dGVybiBUcmFuc2FjdGlv bklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiBleHRlcm4gSW5kZXhG ZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWlu dDMyIGZsYWdzKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICBJbmRleFNjYW5C YXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkgIGJvb2wgbmV3X2FsbG9jKTsKIGV4dGVybiBib29sIGhl YXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBSZWxhdGlvbiByZWxhdGlvbiwK IAkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwgU25hcHNob3Qgc25hcHNob3QsIEhlYXBUdXBsZSBo ZWFwVHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZpcnN0X2NhbGwpOwor ZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gYm9vbCBo ZWFwYW1faW5kZXhfb25seV9hbWdldGJhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sCisJCQkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBib29sIGhlYXBhbV9pbmRleF9wbGFp bl9hbWdldHR1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJ CQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2gu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi42YmJhMGU1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCkBAIC0wLDAgKzEsMTY3IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBpbmRleGJhdGNoLmgKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZy YXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4 YmF0Y2guaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIElOREVYQkFUQ0hf SAorI2RlZmluZSBJTkRFWEJBVENIX0gKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5j bHVkZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworLyoKKyAqIGFt Z2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleGFtLmMgb24gYmVoYWxmIG9mIGNvcmUg ZXhlY3V0b3IKKyAqLworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5E ZXNjIHNjYW4sIGJvb2wgZW5kc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fZW5k KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fbWFya19w b3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXN0 b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworCisvKgorICogYW1nZXRiYXRjaCB1dGlsaXRp ZXMgY2FsbGVkIGJ5IHRhYmxlIEFNcworICovCitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfYmF0 Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0 aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFi bGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCk7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIEZldGNoIHRoZSBuZXh0 IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhlIGZpcnN0KS4KKyAq CisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNzZWQgdG8gdXMgYXMg cHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKKyAqIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBz Y2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCisgKiBwcmlvckJhdGNoIG9uIHRo ZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICoKKyAqIFJldHVybnMgdGhlIG5leHQg YmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0aGUgZ2l2ZW4gc2NhbgorICogZGly ZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBpbiB0aGF0IGRp cmVjdGlvbi4KKyAqCisgKiBUaGlzIGlzIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRo ZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAorICogZnJlZSBhbnkgYmF0Y2hlcyBoZXJl LCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2FsbGVyLiAgVGhlIGNhbGxlcgorICog aXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHBvc2l0aW9uLgorICovCitz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuQmF0Y2gKK3RhYmxlYW1f dXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBCYXRjaFJpbmdJ dGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9ICZzY2FuLT5i YXRjaHJpbmdidWY7CisKKwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBGaXJzdCBjYWxsIGZv ciB0aGUgc2NhbiAqLworCQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3MpOwor CX0KKwllbHNlIGlmICh1bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGlyZWN0aW9uKSkKKwl7 CisJCS8qCisJCSAqIFdlIGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uIGFjcm9z cyBiYXRjaGVzLiAgUHJlcGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVmIHN0YXRlIGZvciB1 cyB0byBnZXQgdGhlIG5leHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0ZSBzY2FuIGRpcmVj dGlvbiB0byB0aGUgb25lIHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkgKiByZXR1cm5lZCBi eSBhbWdldGJhdGNoLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZShzY2Fu KTsKKworCQkvKiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJhdGNoICov CisJCUFzc2VydChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQXNz ZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2UgaWYgKGlu ZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qIE5l eHQgYmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5kZXhfc2Nhbl9i YXRjaChzY2FuLCBwb3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0Y2gtPmRpciA9 PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3Nl cnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlyZXR1cm4gYmF0Y2g7 CisJfQorCisJLyoKKwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBmb3IgY2FsbGluZyBhbWdldGJh dGNoLgorCSAqCisJICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJlIGZvciB0aGUgbGFzdCB2YWxp ZCBiYXRjaCBjdXJyZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZmZXIgKGJhdGNoZXMgbXVzdCBz dGF5IGluIHNjYW4gb3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBzaG91bGQKKwkgKiBoYXZl IGFscmVhZHkgcmV0dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQgYmF0Y2ggZWFybGllci4KKwkg Ki8KKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CisJQXNzZXJ0KCFwcmlv ckJhdGNoIHx8CisJCSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMCAmJiBwcmlv ckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRjaCkpOworCisJLyoKKwkgKiBC ZWZvcmUgd2UgY2FsbCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBpZiBwcmlvckJhdGNoIGlzIGFs cmVhZHkga25vd24KKwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5nIGl0ZW1z IGluIHRoaXMgc2NhbiBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJpb3JCYXRjaCAmJgorCQkoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8KKwkJIHByaW9yQmF0Y2gtPmtub3duRW5k Rm9yd2FyZCA6CisJCSBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkKSkKKwkJcmV0dXJuIE5V TEw7CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNo KHNjYW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRj aCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgaW5kZXggQU0gKi8KKwkJQXNz ZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0g PD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiBy aW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRj aF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJhdGNoIHJl dHVybmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0Y2gpCisJCXsKKwkJCS8qCisJCQkgKiBUaGVy ZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjYW4K KwkJCSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHByaW9yQmF0Y2guICBSZW1lbWJlciB0aGF0IHBy aW9yQmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJ CQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQkJcHJp b3JCYXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJhdGNo LT5rbm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIHhzX2hpdHVwIGlzbid0 IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgYW1nZXRiYXRjaCBzY2FucyAqLworCUFzc2VydCghc2Nh bi0+eHNfaGl0dXApOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogYW1nZXRiYXRjaCB1 dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0 aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gs CisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1f dXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3JvIGZvciBhY2Nlc3NpbmcgdGhlIGluZGV4IEFN J3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgorICoKKyAqIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiBw bGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGF0IGEgZml4ZWQgbmVnYXRpdmUKKyAqIG9m ZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyIChzZWUgaW5kZXhhbV91dGlsX2Jh dGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8gcmV0dXJucyBhIHR5cGVkIHBvaW50ZXIgdG8gdGhh dCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVyeWJvZHkKKyAqIGhhcyB0aGUgc2FtZSBpZGVhIGFi b3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFxdWUgYXJlYSBpcyBpbiBwYXNzaW5nLgorICovCisj ZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9nZXRfYW1kYXRhKHNjYW4sIGJhdGNoLCB0eXBlKSBc CisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPT0gTUFYQUxJ R04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgoY2hhciAqKSAoYmF0Y2gpIC0gTUFY QUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5kaWYJCQkJCQkJLyogSU5ERVhCQVRDSF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3Li4yY2RjZGVmYTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVFX0gKIAogI2luY2x1ZGUgImFjY2Vz cy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfYW1fZC5oIgpAQCAtOTI0LDExMSArOTI1LDIwIEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjdXVt UG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rp bmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRl IG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNz ZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgotICogZGV0YWlscyBv ZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGxvY2F0 aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXJrZWQgbG9j YXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEgdG8gcmVwcmVzZW50IHRo ZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJrZWQKLSAqIGxvY2F0aW9u cy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtub3duLWtpbGxlZCBpbmRleCBl bnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBjYW4gbW92ZSBvZmYgdGhl IGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWU6 IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQotICogYWxsIHRoZSBtYXRj aGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJUU2NhblBvc0RhdGEsIHRo ZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5pbmcgdGhlIGl0ZW1zIHRv IHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMg bG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBkcm9wIHRoZSBsb2NrIHRv IG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJldHVybmVkIGl0ZW1zLgot ICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUgcGluIGR1cmluZyB0aGlz IHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4gc28tPmRyb3BQaW4p IHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICogKHNlZSBuYnRyZWUvUkVB RE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlKS4K LSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gdGhl IGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMgc2libGluZyBwYWdlLgot ICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVu dGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5 IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVzIGdvCi0gKiBpbnRvIGEg c2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0ZW0gc3RvcmVzIGl0cyB0 dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0aW5nIGxpc3QgdHVwbGVz IHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8g YmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QKLSAqIHR1cGxlLgot ICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBh Ym91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBidHJl ZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3QgQlRCYXRjaERhdGEKIHsKLQlJdGVtUG9pbnRl ckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0 TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2Ug Ki8KLQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGlu IHdvcmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07CisJQnVmZmVyCQlidWY7CQkJ LyogaW5kZXggcGFnZSBidWZmZXIgcGluICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBp bmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgbGVmdCBzaWJsaW5nICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkv KiBjdXJyUGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUg bWF0Y2hpbmcgcGFnZXMgdG8gdGhlIGxlZnQ/ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9y ZSBtYXRjaGluZyBwYWdlcyB0byB0aGUgcmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRhOwogCi10eXBl ZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2Ug YnVmIChpbnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9m IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1i ZXIgY3VyclBhZ2U7CQkvKiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9j a051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1i ZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxz bjsJCQkvKiBjdXJyUGFnZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4g ZGlyZWN0aW9uIGZvciB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAq LwotCVNjYW5EaXJlY3Rpb24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5k ZXgtb25seSBzY2FuLCBuZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2Nh dGlvbiBpbiB0aGUgYXNzb2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlp bnQJCQluZXh0VHVwbGVPZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQg dHJhY2sgd2hldGhlciB3ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBl bnRyaWVzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0 aXZlbHkuCi0JICovCi0JYm9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoK LQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGll LCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMg aXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNv IHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNl IHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkg Y291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3 YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyog Zmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFz dCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVu dCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJC VHJlZVBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRl ZiBCVFNjYW5Qb3NEYXRhICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAot CUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBp bihzY2FucG9zKSBcCi0JZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwK LQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmlu ZSBCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2Nh blBvc0lzUGlubmVkKHNjYW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAot CX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwK LQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBc Ci0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1Zh bGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRl KHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwK LQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAo MCkKKy8qIEFjY2VzcyB0aGUgYnRyZWUtcHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIElu ZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZpbmUgQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0 Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgQlRCYXRj aERhdGEpCiAKIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUg U0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZv CkBAIC0xMDUwLDYgKzk2MCwyOCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNj YW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9 IEJUQXJyYXlLZXlJbmZvOwogCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUt cHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMg b2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IK KyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQg dGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQg aG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUg aW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFn ZQorICogYW5kIF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkg dHJhY2sgYW55dGhpbmcgYWJvdXQgdGhlCisgKiBjdXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhp cyBvcGFxdWUgc3RydWN0LgorICoKKyAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGlt ZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBwaW4gYW5k IHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0 aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLiAg V2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2ggdXRpbGl0 eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrCisgKiB0cmFm ZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQgcHJpb3JiYXRjaCwgd2hpY2ggY29udGFpbnMgZGV0YWls cyBvZiB3aGljaAorICogcGFnZSBpcyBuZXh0IGluIGxpbmUgdG8gYmUgcmVhZCAocHJpb3JiYXRj aCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0bworICogYnRnZXRiYXRjaCBieSBjb3JlIGNv ZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUg dGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lz ZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhpcyBpcyBhbHNvIHBlciB0aGUKKyAq IGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2Ui IHR1cGxlIG9uY2UsCisgKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9y IGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QuCisgKi8KIHR5cGVkZWYgc3RydWN0IEJUU2Nh bk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vz c19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICs5OTgsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5P cGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNo IGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8q IE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4 dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAq LwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBO VUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3Mu aXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBu dW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBk cm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElm IHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3Rv cmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3Rp dmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVj aCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJy VHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtU dXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRo ZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9u LCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRl bUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMg dmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlm IHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0J ICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9y IC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3Ig ZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRp b24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwg aWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0 YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA2NiwxNyBAQCBleHRlcm4gYm9vbCBidGlu c2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJ bmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVs LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxz Y2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0Z2V0YmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRj aCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAog CQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGtp bGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwor ZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVy biB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRyZXN0 cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYnRwb3NyZXNldChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxl dGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJ ICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtE ZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE4MCw5IEBAIGV4dGVybiB2b2lk IF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5 cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZp cnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlf c2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcs IFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4NywxNSArMTE5NywxNSBAQCBleHRlcm4gQlRTdGFj ayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0 IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0YWNr KTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwg QlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVs YXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZu dW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9i dF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAg SW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9p bnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKICAq IHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8KIGV4dGVybiBCVFNj YW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7Ci1l eHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gQlRD eWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJ ZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3Zh Y3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggMTIwMmQ5ODczLi5jMGM4 MGM5MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTI1LDYgKzEyNSwxMiBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiB7CiAJUmVsYXRpb24JcmVsOwogCisJLyogVGFibGUg QU0gcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHNpemUgKE1BWEFMSUdOJ2QpLCBzZXQgYnkgQU0gKi8K Kwl1aW50MTYJCWJhdGNoX29wYXF1ZV9zaXplOworCisJLyogUGVyLWl0ZW0gdHJhaWxpbmcgZGF0 YSBzaXplIGluIGVhY2ggYmF0Y2ggKi8KKwl1aW50MTYJCWJhdGNoX3Blcl9pdGVtX3NpemU7CisK IAkvKgogCSAqIEJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4g Tm8gU09fSU5URVJOQUxfRkxBR1MgYXJlCiAJICogcGVybWl0dGVkLgpAQCAtMTMyLDEzICsxMzgs MTg2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIAl1aW50MzIJCWZsYWdz OwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCisvKgorICogTG9jYXRpb24gb2YgYSBCYXRjaE1h dGNoaW5nSXRlbSB3aXRoaW4gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlcgorICovCit0eXBlZGVmIHN0 cnVjdCBCYXRjaFJpbmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlk IEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisK KwkvKiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQg SW5kZXhTY2FuQmF0Y2ggKi8KKwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5p dGVtc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJ CQlpdGVtOworCit9IEJhdGNoUmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJl dHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcg YW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBt YXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0 ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgdGFibGVUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIHRh YmxlIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBs b2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIGlu ZGV4IHR1cGxlJ3MgY3VyclR1cGxlcyBvZmZzZXQsIGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5n SXRlbTsKKworLyoKKyAqIERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5 IChhbmQgcGFzc2VkIHRvKSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMuCisgKgor ICogRWFjaCBiYXRjaCBhbGxvY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIG1lbW9yeSBsYXlvdXQ6 CisgKgorICogICBbdGFibGUgQU0gb3BhcXVlIGFyZWFdICAgIDwtIGZpeGVkLXNpemUsIC0oYmF0 Y2hfdGFibGVfb2Zmc2V0KSBmcm9tIGJhc2UKKyAqICAgW2luZGV4IEFNIG9wYXF1ZSBhcmVhXSAg ICA8LSBhdCAtKGJhdGNoX2luZGV4X29wYXF1ZV9zaXplKSBmcm9tIGJhc2UKKyAqICAgW0luZGV4 U2NhbkJhdGNoRGF0YV0gICAgICA8LSBiYXNlIHBvaW50ZXIsIHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2gKKyAqICAgW2l0ZW1zW21heGl0ZW1zYmF0Y2hdXQorICogICBbdGFibGUgQU0gdHJhaWxpbmcg ZGF0YV0gIDwtIHBlci1pdGVtIGFyZWEgKGUuZy4sIGZvciB2aXNpYmlsaXR5IGluZm8pCisgKiAg IFtjdXJyVHVwbGVzIHdvcmtzcGFjZV0gICAgPC0gaW5kZXggQU0gc3RvcmVzIGluZGV4IHR1cGxl cyBoZXJlIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LW9ubHkg c2NhbnMgKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpCisgKgorICogYmF0Y2hfdGFibGVfb2Zmc2V0 IGNvbWJpbmVzIGJvdGggQU0gb3BhcXVlIHNpemVzIGludG8gYSBzaW5nbGUgb2Zmc2V0IGZyb20K KyAqIHRoZSBiYXRjaCBwb2ludGVyIHRvIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZS4gIFdlIHVz ZSBiYXRjaF9hbGxvY19iYXNlIHRvCisgKiBwZnJlZSBhIGJhdGNoLiAgV2UgcmVseSBvbiB0aGUg YXNzdW1wdGlvbiB0aGF0IGJhdGNoZXMgaGF2ZSBhIGZpeGVkIGxheW91dAorICogZm9yIHRoZSBk dXJhdGlvbiBvZiBhbiBpbmRleCBzY2FuIChzaW5jZSBiYXRjaGVzIGFyZSBjYWNoZWQgZm9yIHJl dXNlKS4KKyAqCisgKiBUaGUgdGFibGUgQU0gY2FuIG92ZXJsYXkgYSBzbWFsbCBmaXhlZC1zaXpl IHN0cnVjdCBhdCB0aGUgc3RhcnQgb2YgdGhlCisgKiBhbGxvY2F0ZWQgc3BhY2UsIHdoaWNoIGl0 IGFjY2Vzc2VzIHVzaW5nIGEgYmF0Y2hfYWxsb2NfYmFzZSBzaGltIGFjY2Vzc29yCisgKiBmdW5j dGlvbi4gIENvbnZlbnRpb24gZm9yIHRhYmxlIEFNcyBpcyB0byBzdG9yZSBhIHBvaW50ZXIgdG8g aXRzIHBlci1pdGVtCisgKiBhcmVhIGluIHRoaXMgZml4ZWQtc2l6ZSBhcmVhIChlLmcuLCBoZWFw YW0gc3RvcmVzIGEgdmlzSW5mbyBwb2ludGVyIGhlcmUpLAorICogaW4gYWRkaXRpb24gdG8gYW55 dGhpbmcgZWxzZSB0aGF0IGdldHMgdHJhY2tlZCBhdCB0aGUgYmF0Y2ggbGV2ZWwuCisgKgorICog VGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGlzIGFjY2Vzc2VkIHZpYSBhIGN1c3RvbSBhY2Nlc3Nv ciB0aGF0IHVzZXMgYQorICogZml4ZWQgY29tcGlsZS10aW1lIGNvbnN0YW50IG9mZnNldCBmb3Ig ZWZmaWNpZW5jeSAoYSBjb25zdGFudCB0aGF0IGlzCisgKiB0cmFja2VkIGluIHRoZSBzY2FuIGRl c2NyaXB0b3IgYXMgYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUpLgorICovCit0eXBlZGVmIHN0cnVj dCBJbmRleFNjYW5CYXRjaERhdGEKK3sKKwkvKiBJbmRleCBwYWdlJ3MgTFNOLCBvcHRpb25hbGx5 IHVzZWQgYnkgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lcyAqLworCVhMb2dSZWNQdHIJbHNuOwor CisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLworCVNj YW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBrbm93bkVuZEJhY2t3YXJkIGFuZCBrbm93bkVu ZEZvcndhcmQgaW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZQorCSAqIGxhc3Qgb25lIHdp dGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIHJlbGV2YW50IHNjYW4gZGlyZWN0aW9uLiAgV2hlbgor CSAqIGFtZ2V0YmF0Y2ggcmV0dXJucyBOVUxMIGZvciBhIGdpdmVuIGRpcmVjdGlvbiwgdGhlIGNv cnJlc3BvbmRpbmcgZmxhZworCSAqIGlzIHNldCBvbiB0aGUgcHJpb3JiYXRjaCB0aGF0IHdhcyBw YXNzZWQgdG8gdGhhdCBjYWxsLiAgV2UgY2Fubm90IGtub3cKKwkgKiB0aGlzIHdoZW4gYSBiYXRj aCBpcyBmaXJzdCByZXR1cm5lZCBieSBhbWdldGJhdGNoOyBpdCBvbmx5IGJlY29tZXMKKwkgKiBh cHBhcmVudCB3aGVuIHdlIHRyeSBhbmQgZmFpbCB0byBjb250aW51ZSB0aGUgc2NhbiBwYXN0IGl0 LgorCSAqCisJICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdl dGJhdGNoIGNhbGxzIHdpdGggdGhlIHNhbWUKKwkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBB TSBtaWdodCBuZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bworCSAqIGRldGVy bWluZSB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJp b3JiYXRjaC4KKwkgKi8KKwlib29sCQlrbm93bkVuZEJhY2t3YXJkOworCWJvb2wJCWtub3duRW5k Rm9yd2FyZDsKKworCS8qCisJICogQmF0Y2ggc3RpbGwgaG9sZHMgVElEIHJlY3ljbGluZyBpbnRl cmxvY2s/CisJICovCisJYm9vbAkJaXNHdWFyZGVkOworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVt cyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBBTSBmb3IgdGFibGUgQU0u CisJICoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3Jk ZXIgKGllLCBieSBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBi YWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJICogdG8gZmlsbCB0aGUg YXJyYXkgYmFjay10by1mcm9udCwgc3RhcnRpbmcgYXQgdGhlIGxhc3QgaXRlbSBzbG90IGFuZAor CSAqIGZpbGxpbmcgZG93bndhcmRzLiAgVGhpcyBpcyB3aHkgd2UgbmVlZCBib3RoIGEgZmlyc3Qt dmFsaWQtZW50cnkgYW5kIGEKKwkgKiBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICoKKwkg KiBOb3RlOiB0aGVzZSBhcmUgc2lnbmVkIGJlY2F1c2UgaXQncyBzb21ldGltZXMgY29udmVuaWVu dCB0byB1c2UgLTEgdG8KKwkgKiByZXByZXNlbnQgYW4gb3V0LW9mLWJvdW5kcyBzcGFjZSBqdXN0 IGJlZm9yZSBmaXJzdEl0ZW0gKHdoZW4gaXQncyAwKS4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07 CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkv KiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQgZGVhZCBp dGVtcywgaWYgYW55IChwYWxsb2MnZCBzZXBhcmF0ZWx5LCBOVUxMIGlmIHVudXNlZCkgKi8KKwlp bnQJCQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KKwlp bnQJCSAgICpkZWFkSXRlbXM7CQkvKiBpdGVtc1tdLXdpc2UgaW5kZXhlcyBvZiBkZWFkIGl0ZW1z ICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoaXMg aXMgdGhlIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlCisJICogZm9yIHRoZSBtYXRjaGluZyB0dXBs ZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiAgVGhlIHdvcmtzcGFjZQorCSAqIHNp emUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggQU0gKGJhdGNoX3R1cGxlc193b3Jrc3BhY2Up LgorCSAqCisJICogY3VyclR1cGxlcyBwb2ludHMgaW50byB0aGUgdHJhaWxpbmcgcG9ydGlvbiBv ZiB0aGlzIGFsbG9jYXRpb24sIHBhc3QKKwkgKiBpdGVtc1tdIGFuZCBhbnkgdGFibGUgQU0gdHJh aWxpbmcgZGF0YS4gIEl0IGlzIE5VTEwgZm9yIHBsYWluIGluZGV4CisJICogc2NhbnMuCisJICov CisJY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8K KwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVtc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRj aGluZyBpdGVtcyAqLworfSBJbmRleFNjYW5CYXRjaERhdGE7CisKK3R5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5 IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0 Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5zIHVzZSBhIHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBCYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBvcmRl ciB0aGF0IHRoZXkgd2VyZSByZXR1cm5lZCBpbiBieSBhbWdldGJhdGNoLAorICogd2hpY2ggaXMg dGhlIG5hdHVyYWwgb3JkZXIgZm9yIHRoZSBpbmRleCBBTSBhbmQgdGhlIG9yZGVyIHRoYXQgd2Ug cmVxdWlyZQorICogbWF0Y2hlcyB0byBiZSByZXR1cm5lZCBpbi4gIFRoaXMgaXMgYWxzbyB0aGUg b3JkZXIgdGhhdAorICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHJldHVybnMgbWF0Y2hlcyBp bi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZQorICogdG8gZmV0Y2ggdGFibGUgdHVwbGVz IGluIHdoYXRldmVyIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudCAtLSBwcm92aWRlZCB0aGF0Cisg KiBzdWNoIHJlb3JkZXJpbmcgY2Fubm90IGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QgbGF0ZXIKKyAqIHJldHVybnMgdHVwbGVzIGluLgorICovCit0eXBlZGVm IHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRl eFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBvcyBz Y2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgbWFy a1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9zJ3MgYmF0Y2gg KG5vdCBpbiByaW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCisJSW5k ZXhTY2FuQmF0Y2ggbWFya0JhdGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXgg dG8gdGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJICogc2xvdCBp biBiYXRjaGJ1ZltdLiAgVGhlIGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRzIEluZGV4U2Nh bkJhdGNoCisJICogaXMgaGVhZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSwg c2luY2UgdGhlc2UgaW5kZXhlcyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBhcml0aG1ldGlj LiAgaGVhZEJhdGNoIG11c3QgYmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhbkJhdGNoIChp LmUuIHRoZSBjdXJyZW50IHNjYW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7 CisKKwkvKgorCSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBfZW1wdHlfIHJp bmcgYnVmZmVyIGJhdGNoIHNsb3QgaW4KKwkgKiBiYXRjaGJ1ZltdLiAgQXMgd2l0aCBoZWFkQmF0 Y2gsIHRoZSBhY3R1YWwgYmF0Y2hidWZbXSBhcnJheSBwb3NpdGlvbiBpcworCSAqIG5leHRCYXRj aCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuICBBIG5ldyBiYXRjaCBjYW4gb25seSBi ZQorCSAqIGFwcGVuZGVkIHRvIHRoaXMgcG9zaXRpb24vc2xvdCB3aGVuICFpbmRleF9zY2FuX2Jh dGNoX2Z1bGwoKS4KKwkgKgorCSAqIE5vdGU6IHRoZSBzY2FuJ3MgbW9zdCByZWNlbnRseSBhcHBl bmRlZCBiYXRjaCAoaXRzIHRhaWwgYmF0Y2gpIGlzCisJICogYWx3YXlzIGxvY2F0ZWQgYXQgKG5l eHRCYXRjaCAtIDEpICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4KKwkgKi8KKwl1aW50 OAkJbmV4dEJhdGNoOworfSBCYXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0 cnVtZW50YXRpb247CiAKIC8qCiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEg c3RydWN0dXJlIGZvciBib3RoIGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1i YXNlZCBpbmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCi0gKiBh bWdldHR1cGxlLWJhc2VkIHNjYW5zLgorICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fucy4gIE90aGVy cyBhcmUgb25seSB1c2VkIGluIGFtZ2V0YmF0Y2gtYmFzZWQgc2NhbnMuCisgKgorICogVGhlIHJp bmcgYnVmZmVyIHVzZWQgYnkgYW1nZXRiYXRjaCBzY2FucyBpcyBzdG9yZWQgaGVyZSBhcyBhIGZp eGVkIGFycmF5IG9mCisgKiBwb2ludGVycyB0byBiYXRjaGVzLiAgV2UgbmVlZCBhIG1pbmltdW0g b2YgdHdvIChidXQgdXNlCisgKiBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKSwgc2luY2Ugd2UnbGwg b25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoCisgKiB3aGVuIGFub3RoZXIgaXMgcmVh ZC4KICAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRF WF9TQ0FOX01BWF9CQVRDSEVTCQk2NAorCitTdGF0aWNBc3NlcnREZWNsKElOREVYX1NDQU5fTUFY X0JBVENIRVMgPD0gUEdfVUlOVDhfTUFYICsgMSwKKwkJCQkgIklOREVYX1NDQU5fTUFYX0JBVENI RVMgbXVzdCBmaXQgaW4gdWludDggcmluZyBidWZmZXIgaW5kZXhlcyIpOworU3RhdGljQXNzZXJ0 RGVjbCgoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0g MSkpID09IDAsCisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIG11c3QgYmUgYSBwb3dlciBv ZiAyIik7CisKIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiB7CiAJLyogc2NhbiBw YXJhbWV0ZXJzICovCkBAIC0xNDksNiArMzI4LDI2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkRlc2NEYXRhCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVtYmVyIG9mIG9yZGVyaW5n IG9wZXJhdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkgb2Yg aW5kZXggcXVhbGlmaWVyIGRlc2NyaXB0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpvcmRl ckJ5RGF0YTsJLyogYXJyYXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMgKi8KKworCS8qIGlu ZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCisJdm9pZAkgICAqb3BhcXVlOwkJ CS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCisJLyogc2NhbidzIGFtZ2V0YmF0 Y2ggc3RhdGUgKG9ubHkgdXNlZCBieSBhbWdldGJhdGNoL3VzZWJhdGNocmluZyBzY2FucykgKi8K KwlCYXRjaFJpbmdCdWZmZXIgYmF0Y2hyaW5nYnVmOworCisJLyoKKwkgKiBBcnJheSBvZiBwb2lu dGVycyB0byByZWN5Y2xhYmxlIGJhdGNoZXMsIHVzZWQgYnkgYWxsIGFtZ2V0YmF0Y2ggc2NhbnMK KwkgKiBhbmQgYnkgYW1nZXRiaXRtYXAgc2NhbnMgb2YgYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0 cyBhbWdldGJhdGNoCisJICovCisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hjYWNoZVtJTkRFWF9TQ0FO X0NBQ0hFX0JBVENIRVNdOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gYmF0Y2hlcywgcmVm ZXJlbmNlZCB3aXRoaW4gYmF0Y2hyaW5nYnVmICovCisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hidWZb SU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKKwlib29sCQl1c2ViYXRjaHJpbmc7CS8qIHNjYW4g dXNlcyBhbWdldGJhdGNoL2JhdGNocmluZ2J1Zj8gKi8KKwlib29sCQliYXRjaEltbWVkaWF0ZVVu Z3VhcmQ7CS8qIGVhZ2VybHkgZHJvcCBUSUQgcmVjeWNsaW5nCisJCQkJCQkJCQkJICogaW50ZXJs b2NrPyAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXgg dHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVyIHNuYXBzaG90IGF0 IHNjYW4gZW5kPyAqLwogCkBAIC0xNjAsOSArMzU5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAkvKiB4c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCiAJ Ym9vbAkJTVZDQ1NjYW47CiAKLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0 ZSAqLwotCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8g Ki8KLQogCS8qCiAJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQgYnkgYWxs IGluZGV4IEFNcyBkdXJpbmcgYm90aAogCSAqIGFtZ2V0dHVwbGUgY2FsbHMgYW5kIGFtZ2V0Yml0 bWFwIGNhbGxzICh1bmxlc3MgZmllbGQgcmVtYWlucyBOVUxMKQpAQCAtMTgxLDYgKzM3Nyw5IEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlRGVzY0RhdGEg KnhzX2hpdHVwZGVzYzsgLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2hpdHVwICovCiAKIAlJ dGVtUG9pbnRlckRhdGEgeHNfaGVhcHRpZDsgLyogcmVzdWx0ICovCisKKwl1aW50MTYJCW1heGl0 ZW1zYmF0Y2g7CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLwor CiAJSW5kZXhGZXRjaFRhYmxlRGF0YSAqeHNfaGVhcGZldGNoOwogCiAJLyogUmVzb2x2ZWQgZ2V0 bmV4dF9zbG90IGltcGxlbWVudGF0aW9uLCBzZXQgYnkgaW5kZXhfYmVnaW5zY2FuICovCkBAIC0x OTAsNiArMzg5LDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAlib29s CQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8K IAorCS8qIFBlci1iYXRjaCBvcGFxdWUgYXJlYSBzaXplcywgc2V0IGJ5IGluZGV4IEFNIGluIGFt YmVnaW5zY2FuICovCisJdWludDE2CQliYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsJLyogTUFYQUxJ R04nZCBpbmRleCBBTSBvcGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtz cGFjZTsgLyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyogQ29tcHV0ZWQgb2Zm c2V0LCB1c2VkIHRvIGdldCB0YWJsZSBBTSdzIG9wYXF1ZSBhcmVhIGZyb20gYSBiYXRjaCAqLwor CXVpbnQxNgkJYmF0Y2hfdGFibGVfb2Zmc2V0OworCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5nIHdp dGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVSIEJZCiAJICog ZXhwcmVzc2lvbnMgb2YgdGhlIGxhc3QgcmV0dXJuZWQgdHVwbGUsIGFjY29yZGluZyB0byB0aGUg aW5kZXguICBJZgpAQCAtMjIyLDggKzQyOCw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5k ZXhTY2FuRGVzY0RhdGEKIAljaGFyCQlwc19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01F TUJFUl07CiB9CQkJUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFi bGVTbG90OwotCiAvKiBTdHJ1Y3QgZm9yIHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVt IHRhYmxlcyAqLwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CkBAIC0yMzUsNCAr NDM5LDEzNiBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVU YWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIFJldHVybiB0aGUg dHJ1ZSBhbGxvY2F0aW9uIGJhc2Ugb2YgYSBiYXRjaCAoYWNjb3VudGluZyBmb3IgQU0gb3BhcXVl IGFyZWFzCisgKiBzdG9yZWQgYmVmb3JlIHRoZSBJbmRleFNjYW5CYXRjaERhdGEgcG9pbnRlciku CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitiYXRjaF9hbGxvY19iYXNlKEluZGV4U2NhbkRl c2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlyZXR1cm4gKGNoYXIgKikg YmF0Y2ggLSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBDb3VudCBob3cg bWFueSBiYXRjaGVzIGFyZSBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSByaW5nIGJ1ZmZlci4KKyAq Lworc3RhdGljIGlubGluZSB1aW50OAoraW5kZXhfc2Nhbl9iYXRjaF9jb3VudChJbmRleFNjYW5E ZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gKHVpbnQ4KSAoc2Nhbi0+YmF0Y2hyaW5nYnVmLm5l eHRCYXRjaCAtCisJCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gpOworfQorCisvKgor ICogRG8gd2UgYWxyZWFkeSBoYXZlIGEgYmF0Y2ggbG9hZGVkIGF0ICdpZHgnIG9mZnNldCBpbiBz Y2FuJ3MgcmluZyBidWZmZXI/CisgKgorICogTk9URTogYSBzdGFsZSBiYXRjaCBpZHggY2FuIGFs aWFzIGEgY3VycmVudGx5LWxvYWRlZCByYW5nZSBhZnRlciB1aW50OAorICogb3ZlcmZsb3csIHBy b2R1Y2luZyBhIGZhbHNlIHBvc2l0aXZlLiAgRmFsc2UgbmVnYXRpdmVzIGFyZSBub3QgcG9zc2li bGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoSW5k ZXhTY2FuRGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlyZXR1cm4gKGludDgpIChpZHgg LSBzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKSA+PSAwICYmCisJCShpbnQ4KSAoaWR4IC0g c2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCkgPCAwOworfQorCisvKgorICogSGF2ZSB3ZSBs b2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXM/CisgKi8KK3N0YXRpYyBpbmxpbmUg Ym9vbAoraW5kZXhfc2Nhbl9iYXRjaF9mdWxsKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQorewor CXJldHVybiBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IElOREVYX1NDQU5fTUFYX0JB VENIRVM7Cit9CisKKy8qCisgKiBSZXR1cm4gYmF0Y2ggZm9yIHRoZSBwcm92aWRlZCBpbmRleC4K KyAqLworc3RhdGljIGlubGluZSBJbmRleFNjYW5CYXRjaAoraW5kZXhfc2Nhbl9iYXRjaChJbmRl eFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCUFzc2VydChpbmRleF9zY2FuX2Jh dGNoX2xvYWRlZChzY2FuLCBpZHgpKTsKKworCXJldHVybiBzY2FuLT5iYXRjaGJ1ZltpZHggJiAo SU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXTsKK30KKworLyoKKyAqIEFwcGVuZCBnaXZlbiBi YXRjaCB0byBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZAoraW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQoreworCUJhdGNoUmluZ0J1ZmZlciAqcmluZ2J1ZiA9ICZzY2FuLT5i YXRjaHJpbmdidWY7CisJdWludDgJCW5leHRCYXRjaCA9IHJpbmdidWYtPm5leHRCYXRjaDsKKwor CUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKworCXNjYW4tPmJhdGNoYnVm W25leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldID0gYmF0Y2g7CisJcmlu Z2J1Zi0+bmV4dEJhdGNoKys7Cit9CisKKy8qCisgKiBBZHZhbmNlIHBvc2l0aW9uIHRvIGl0cyBu ZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgorICoKKyAqIEFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbSB3 aXRoaW4gdGhlIHByb3ZpZGVkIGJhdGNoIChvciB0byB0aGUgcHJldmlvdXMgaXRlbSwKKyAqIHdo ZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0 aW9uIGNvdWxkIGJlIGFkdmFuY2VkLiAgUmV0dXJucyBmYWxzZSB3aGVuIHRoZXJlCisgKiBhcmUg bm8gbW9yZSBpdGVtcyBmcm9tIHRoZSBiYXRjaCByZW1haW5pbmcgaW4gdGhlIGdpdmVuIHNjYW4g ZGlyZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fcG9zX2FkdmFu Y2UoU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNo LCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KHBvcy0+dmFsaWQpOworCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+aXRl bSA+IGJhdGNoLT5sYXN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJCS8q IFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkICovCisJeworCQlpZiAoLS1wb3MtPml0ZW0gPCBiYXRj aC0+Zmlyc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFkdmFuY2VkIHdpdGhp biBiYXRjaCAqLworCXJldHVybiB0cnVlOworfQorCisvKgorICogQWR2YW5jZSBiYXRjaCBwb3Np dGlvbiB0byB0aGUgc3RhcnQgb2YgaXRzIG5ldyBiYXRjaC4KKyAqCisgKiBXaGVuIHdlJ3JlIGNh bGxlZCwgdGhpcyBwb3NpdGlvbiBzaG91bGQgcG9pbnQgdG8gYSBiYXRjaCB0aGF0IGNhbGxlciBq dXN0CisgKiBmaW5pc2hlZCBjb25zdW1pbmcgZnJvbS4gIFdoZW4gd2UgcmV0dXJuLCB0aGlzIHBv c2l0aW9uIHdpbGwgcG9pbnQgdG8KKyAqIG5leHRCYXRjaCwgdGhlIG5leHQgYmF0Y2ggZnJvbSB0 aGUgcmluZyBidWZmZXIuICBXZSdsbCBoYXZlIGFsc28gc2V0IHRoZQorICogcG9zaXRpb24ncyBp dGVtIG9mZnNldCB0byBuZXh0QmF0Y2gncyBmaXJzdCBpdGVtIGluIHRoZSBnaXZlbiBkaXJlY3Rp b24KKyAqICh3aGljaCBpcyBhY3R1YWxseSBuZXh0QmF0Y2gncyBfbGFzdF8gaXRlbSB3aGVuIHNj YW5uaW5nIGJhY2t3YXJkcykuCisgKgorICogbmV4dEJhdGNoIGRvZXNuJ3QgaGF2ZSB0byBiZSAo YW5kIG9mdGVuIGlzbid0KSB0aGUgbW9zdCByZWNlbnRseSBhcHBlbmRlZAorICogYmF0Y2ggaW4g dGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4gIEl0IGlzIG1lcmVseSB0aGUgbmV4dCBiYXRjaCBpbiBs aW5lIHRvIGJlCisgKiBjb25zdW1lZCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIG91ciBjYWxs ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJIEluZGV4U2NhbkJhdGNoIG5leHRCYXRjaCwg QmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFzc2VydChuZXh0QmF0Y2gtPmRpciA9PSBkaXJl Y3Rpb24pOworCUFzc2VydChuZXh0QmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXh0QmF0Y2gtPmxhc3RJ dGVtKTsKKworCS8qIEluY3JlbWVudCBiYXRjaCAobWlnaHQgd3JhcCksIG9yIGluaXRpYWxpemUg aXQgdG8gemVybyAqLworCWlmIChwb3MtPnZhbGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQor CQlwb3MtPmJhdGNoID0gMDsKKworCXBvcy0+dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcG9zLT5pdGVtID0gbmV4dEJhdGNoLT5maXJz dEl0ZW07CisJZWxzZQorCQlwb3MtPml0ZW0gPSBuZXh0QmF0Y2gtPmxhc3RJdGVtOworfQorCiAj ZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA5M2IzOTI4 YmUuLjg2OGJmMWQ0MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00NDMsOSArNDQzLDE2IEBAIHR5 cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogZmxhZ3MgaXMgYSBiaXRtYXNrIG9mIFNj YW5PcHRpb25zIGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNjYW4KIAkgKiBiZWhhdmlvci4g U2VlIHNjYW5fYmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXNzaW5nIHRoZXNlLgog CSAqCi0JICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlh IG9uZSBvZiB0aGUKKwkgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0 Y2hlZCB2aWEgb25lIG9mIHRoZSBmb3VyCiAJICogc2xvdC1iYXNlZCBjYWxsYmFja3MgY2FsbGVk IHRocm91Z2ggdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90LCBvciB2aWEKIAkgKiB0aGUgbG93ZXIt bGV2ZWwgVElELWJhc2VkIGluZGV4X2ZldGNoX3R1cGxlIGludGVyZmFjZS4KKwkgKgorCSAqIENh bGxiYWNrIG11c3QgYWxzbyBpbml0aWFsaXplIHRoZSBnZW5lcmljIGJhdGNoX29wYXF1ZV9zaXpl IGFuZAorCSAqIGJhdGNoX3Blcl9pdGVtX3NpemUgZmllbGRzIGluIHRoZSByZXR1cm5lZCBzdHJ1 Y3QsIHRvIGxldCB0aGUgY29yZSBjb2RlCisJICoga25vdyBob3cgbXVjaCBtZW1vcnkgd2lsbCBi ZSByZXF1aXJlZCBpbiB0aGUgb3BhcXVlIHRhYmxlIEFNIHBvcnRpb25zCisJICogb2YgZWFjaCBi YXRjaCBhbGxvY2F0aW9uLiAgVGhlc2UgYXJlIHRoZSBiYXRjaGVzIHVzZWQgZHVyaW5nIGFtZ2V0 YmF0Y2gKKwkgKiBpbmRleCBzY2Fucywgd2hpY2ggdGFibGUgQU1zIGNhbiB1c2UgdG8gY2FjaGUg dGhpbmdzIGxpa2UgcGVyLWl0ZW0KKwkgKiB2aXNpYmlsaXR5IGluZm9ybWF0aW9uLgogCSAqLwog CXN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoUmVsYXRp b24gcmVsLCB1aW50MzIgZmxhZ3MpOwogCkBAIC00NjAsMTQgKzQ2NywzNCBAQCB0eXBlZGVmIHN0 cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRh YmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24u CisJICoKKwkgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5l dyBvciByZWN5Y2xlZCBiYXRjaC4KKwkgKiBUYWJsZSBBTXMgc2hvdWxkIHNldCB1cCBpdHMgb3Bh cXVlIGFyZWEgKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlCisJICogYmF0Y2ggcG9pbnRl cikgYW5kIGFueSB0cmFpbGluZyBwZXItaXRlbSBkYXRhIChlLmcuIHZpc2liaWxpdHkgZmxhZ3Mp LgorCSAqCisJICogJ25ld19hbGxvYycgaXMgdHJ1ZSBmb3IgZnJlc2hseSBwYWxsb2MnZCBiYXRj aGVzLCBmYWxzZSBmb3IgYmF0Y2hlcworCSAqIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlLgorCSAq LworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkgICBib29sIG5l d19hbGxvYyk7CisKIAkvKgogCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXgg c2Nhbiwgc2Nhbm5pbmcgaW4gdGhlIHNwZWNpZmllZAogCSAqIGRpcmVjdGlvbiwgYW5kIHJldHVy biB0cnVlIGlmIGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkgKiBU d28gdmFyaWFudHMgY292ZXIge3BsYWluLCBpbmRleC1vbmx5fSBpbmRleCBzY2FucyB0aGF0IHVz ZSBhbWdldHR1cGxlLgotCSAqIGluZGV4X2JlZ2luc2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50 IHRvIHVzZS4gIENhbGxlcnMgdXNlCisJICogRm91ciB2YXJpYW50cyBjb3ZlciB0aGUge3BsYWlu LCBpbmRleC1vbmx5fSB4IHthbWdldGJhdGNoLCBhbWdldHR1cGxlfQorCSAqIG1hdHJpeC4gIGlu ZGV4X2JlZ2luc2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50IHRvIHVzZS4gIENhbGxlcnMgdXNl CiAJICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCksIHdoaWNoIGNhbGxzIHRocm91Z2ggdGhh dCBwb2ludGVyIGRpcmVjdGx5LgogCSAqLworCWJvb2wJCSgqaW5kZXhfcGxhaW5fYW1nZXRiYXRj aF9nZXRuZXh0X3Nsb3QpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCVNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7 CisJYm9vbAkJKCppbmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIAlib29sCQkoKmluZGV4X3BsYWlu X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ CQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCQkJVHVwbGVUYWJsZVNs b3QgKnNsb3QpOwpAQCAtMTI4NSw2ICsxMzEyLDE5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0t PmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGFibGUgQU0n cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisg KiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5 Y2xlZCBiYXRjaC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9i YXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJ CQkJIGJvb2wgbmV3X2FsbG9jKQoreworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+ aW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwKKwkJCQkJCQkJCQkJCQkJICAgbmV3 X2FsbG9jKTsKK30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXgg c2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZGlyZWN0aW9u LiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCA3OTQ3ZDgzZDUuLjUzNjFjODJjZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKQEAgLTE0MzcsMTIgKzE0MzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJ bmZvCiAJYm9vbAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJ CWFtc2VhcmNobnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAq LwotCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9y IGdldHR1cGxlKSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1jYW5wbGFpbnNjYW47CiAJLyogZG9l cyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1h cDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50 ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8g Ki8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8q IFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGlt YXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJp bi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGJkYjMwNzUyZS4uNjJh ODI2ZDRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0yOTgsMTAgKzI5OCwxMiBAQCBicmlu aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5h bWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1 YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAogCQkuYW1l bmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBv cyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNj YW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxy ZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlhLi44Zjcw MzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkgQEAgZ2lu Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICogaW50byB0 aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRpbWUgZHVy aW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xsIGp1c3Qg cmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3NpYmlsaXR5 IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAqIGNhbid0 IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0IHdvdWxk IG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxp c3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNz IGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFtZ2V0dHVw bGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3QgZG8gdG8g c2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UKKwkgKiBj b25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVs eS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZmU3Yjk4NGZmLi43MTBmM2Y5YzIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCkBAIC04MiwxMCArODIsMTIgQEAgZ2luaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdp bnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMKaW5kZXggODU2NWUyMjViLi5hNDg0YzhiMmEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0LmMKQEAgLTEwMywxMCArMTAzLDEyIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNj YW4sCiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEws CisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwK IAkJLmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRz Y2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1w b3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2guYwppbmRleCA4ZDhjZDMwZGMuLjJlMzJiZTIzMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYwpAQCAtMTE0LDEwICsxMTQsMTIgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFz aHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0g TlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBO VUxMLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFz aGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJ CS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAog CQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxM LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYjc2NzJlNWYw Li41N2ViOTU5ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpA QCAtMjU1NCw2ICsyNTU0LDkgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9t ZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9mZXRjaF9iZWdp biwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmlu ZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2ZldGNoX2Jh dGNoX2luaXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCwKKwkuaW5kZXhfcGxhaW5f YW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXRiYXRjaF9n ZXRuZXh0X3Nsb3QsCisJLmluZGV4X29ubHlfYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QgPSBoZWFw YW1faW5kZXhfb25seV9hbWdldGJhdGNoX2dldG5leHRfc2xvdCwKIAkuaW5kZXhfcGxhaW5fYW1n ZXR0dXBsZV9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9nZXRu ZXh0X3Nsb3QsCiAJLmluZGV4X29ubHlfYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1f aW5kZXhfb25seV9hbWdldHR1cGxlX2dldG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUg PSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faW5kZXhzY2FuLmMKaW5kZXggODJmMTM1ZTFlLi5hZDU3ODk1Y2MgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2lu Y2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKyNpbmNs dWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFw LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0 YXRfaW50ZXJuYWwuaCIKQEAgLTMwLDEwICszMSwyNyBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fs d2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChzdHJ1Y3QgSW5k ZQogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkJCQkJIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwK LQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5KTsKKwkJCQkJCQkJCQkJCQkJCQkgYm9v bCBpbmRleF9vbmx5LAorCQkJCQkJCQkJCQkJCQkJCSBib29sIGFtZ2V0YmF0Y2gpOwogc3RhdGlj IHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAo SW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCi0JCQkJCQkJCQkJCQkJCQkgICBib29sICpoZWFwX2NvbnRpbnVlKTsKKwkJCQkJCQkJCQkJ CQkJCSAgIGJvb2wgKmhlYXBfY29udGludWUsCisJCQkJCQkJCQkJCQkJCQkgICBib29sIGFtZ2V0 YmF0Y2gpOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2ludGVyIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJ CQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkg Ym9vbCAqYWxsX3Zpc2libGUpOworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlciBoZWFwYW1faW5k ZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJ ICBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwK KwkJCQkJCQkJCQkJCQkJICBCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zLAorCQkJCQkJCQkJCQkJ CQkgIGJvb2wgKmFsbF92aXNpYmxlKTsKK3N0YXRpYyB2b2lkIGhlYXBhbV9pbmRleF9iYXRjaF9w b3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJ CQkJCQkJCSAgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0 ZW1Qb3MgKnBvcyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSW5kZXggU2NhbiBDYWxsYmFj a3MgZm9yIGhlYXAgQU0KQEAgLTQ2LDEwICs2NCwxNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biA9IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFz ZS5yZWwgPSByZWw7CisJaHNjYW4tPnhzX2Jhc2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElH TihzaXplb2YoSGVhcEJhdGNoRGF0YSkpOworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVt X3NpemUgPSBzaXplb2YodWludDgpOyAvKiB2aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLwogCWhzY2Fu LT54c19iYXNlLmZsYWdzID0gZmxhZ3M7Ci0JaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVy OworCisJLyogQ3VycmVudCBoZWFwIGJsb2NrIHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c19j YnVmID09IEludmFsaWRCdWZmZXIpOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0JaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKworCS8qIFZNIHJlbGF0 ZWQgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4tPnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIp OworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwog fQpAQCAtNTksOCArODQsOCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRh YmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JLyogUmVzZXRzIGFyZSBhIG5vLW9wIChYWFggYW1nZXRi YXRjaCBjb21taXQgcmVzZXRzIHhzX3ZtX2l0ZW1zIGhlcmUpICovCi0JKHZvaWQpIGhzY2FuOwor CS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3Vw cyAqLworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKIAkvKgogCSAqIERlbGliZXJhdGVseSBh dm9pZCBkcm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgpA QCAtODQsNiArMTA5LDUwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbikKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCiAJcGZy ZWUoaHNjYW4pOworCisJLyoKKwkgKiBOb3RlOiB3ZSBleHBlY3QgdGhlIGNvcmUgZXhlY3V0b3Ig dG8gY2FsbCBpbmRleF9iYXRjaHNjYW5fZW5kICh3aGVuIHRoZQorCSAqIHNjYW4gaXMgdXNlYmF0 Y2hyaW5nKS4gIFRoaXMgd2lsbCBmcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKwkg Ki8KK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGhlYXAgdGFibGUgQU0ncyBwZXItYmF0Y2gg b3BhcXVlIGFyZWEgKEhlYXBCYXRjaERhdGEpLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0 aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICogU2V0cyB1 cCB0aGUgdmlzSW5mbyBwb2ludGVyIGZvciBpbmRleC1vbmx5IHNjYW5zLCBvciBOVUxMIG90aGVy d2lzZS4KKyAqLwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkgIGJvb2wgbmV3X2FsbG9j KQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBiYXRj aCk7CisKKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCXsKKwkJaWYgKG5ld19hbGxvYykKKwkJ eworCQkJLyoKKwkJCSAqIFRoZSB2aXNJbmZvIHBvaW50ZXIgaXMgc3RvcmVkIGF0IHRoZSB2ZXJ5 IHN0YXJ0IG9mIHRoZSBwYWxsb2MnZAorCQkJICogc3BhY2UsIGluIHRoZSBmaXhlZC1zaXplZCB0 YWJsZSBBTSBvcGFxdWUgYXJlYS4gIHZpc0luZm8gcG9pbnRzCisJCQkgKiB0byBqdXN0IHBhc3Qg dGhlIGVuZCBvZiB0aGUgdmFyaWFibGUtc2l6ZWQgaXRlbXNbbWF4aXRlbXNiYXRjaF0KKwkJCSAq IGFycmF5ICh0byBhIHNwYWNlIHRoYXQgaXMgYWxzbyBzaXplZCBhY2NvcmRpbmcgdG8gd2hhdGV2 ZXIgdGhlCisJCQkgKiBpbmRleCBBTSBzZXQgbWF4aXRlbXNiYXRjaCB0bykuCisJCQkgKi8KKwkJ CVNpemUJCWl0ZW1zRW5kOworCisJCQlpdGVtc0VuZCA9IE1BWEFMSUdOKG9mZnNldG9mKEluZGV4 U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCQkJCQkJc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVt KSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJaGJhdGNoLT52aXNJbmZvID0gKHVpbnQ4ICop ICgoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kKTsKKwkJfQorCisJCS8qIENsZWFyIHZpc2liaWxp dHkgZmxhZ3MgKG5lZWRlZCBmb3IgYm90aCBuZXcgYW5kIHJlY3ljbGVkIGJhdGNoZXMpICovCisJ CW1lbXNldChoYmF0Y2gtPnZpc0luZm8sIDAsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCX0KKwll bHNlCisJeworCQloYmF0Y2gtPnZpc0luZm8gPSBOVUxMOworCX0KIH0KIAogLyoKQEAgLTI0OCwx NiArMzE3LDQwIEBAIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBSZWxh dGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qIHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXRiYXRjaCwgcGxhaW4gaW5kZXgg c2NhbiAqLworcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXRi YXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KQor eworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxs YmFjazogYW1nZXRiYXRjaCwgaW5kZXgtb25seSBzY2FuICovCitwZ19hdHRyaWJ1dGVfaG90IGJv b2wKK2hlYXBhbV9pbmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCAm JiBzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgdHJ1ZSk7Cit9CisKIC8qIHRhYmxl X2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBsZSwgcGxhaW4gaW5kZXggc2Nh biAqLwogcGdfYXR0cmlidXRlX2hvdCBib29sCiBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXR0dXBs ZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KQogewot CUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1 cCAmJiAhc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlKTsKKwlyZXR1cm4gaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCBmYWxzZSk7 CiB9CiAKIC8qIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBsZSwg aW5kZXgtb25seSBzY2FuICovCkBAIC0yNjYsMTAgKzM1OSwxMCBAQCBoZWFwYW1faW5kZXhfb25s eV9hbWdldHR1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpz bG90KQogewotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193 YW50X2l0dXAgJiYgIXNjYW4tPnVzZWJhdGNocmluZyk7CiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCi0JcmV0dXJuIGhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlKTsKKwlyZXR1cm4g aGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUsIGZh bHNlKTsKIH0KIAogYm9vbApAQCAtMzU0LDcgKzQ0Nyw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZV9pbXBsKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogfQogCiAvKgotICog Q29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBib3RoIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xv dCB2YXJpYW50cy4KKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIGZvdXIgaGVhcGFt X2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgogICoKICAqIFRoZSByZXN1bHQgaXMgdHJ1 ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdh cwogICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhl IHNwZWNpZmllZCBzbG90LgpAQCAtMzYzLDEyICs0NTYsMTMgQEAgaGVhcGFtX2luZGV4X2ZldGNo X3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAgKiBkcm9wcGVk IGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGhlYXBhbV9pbmRl eF9mZXRjaF9lbmQKICAqIHRocm91Z2ggaW5kZXhfZW5kc2NhbikuCiAgKgotICogVGhlIGluZGV4 X29ubHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGF0IGVhY2ggY2FsbCBz aXRlLAotICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUgZm9y IGVhY2ggdmFyaWFudC4KKyAqIFRoZSBpbmRleF9vbmx5IGFuZCBhbWdldGJhdGNoIHBhcmFtZXRl cnMgYXJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMgYXQgZWFjaAorICogY2FsbCBzaXRlLCBhbGxv d2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50 OgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogaGVhcGFtX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLAotCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5KQorCQkJ CQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJICBib29s IGFtZ2V0YmF0Y2gpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNo SGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUl0ZW1Qb2ludGVyIHRpZDsKQEAgLTM4 NiwxNCArNDgwLDIwIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJaWYgKCFoZWFwX2NvbnRpbnVlKQogCQl7 CiAJCQkvKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRl eF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCQkJaWYgKGFtZ2V0YmF0Y2gpCisJCQkJ dGlkID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhzY2FuLCBoc2NhbiwKKwkJ CQkJCQkJCQkJCQkJIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJIGluZGV4X29ubHkgPworCQkJ CQkJCQkJCQkJCQkgJmFsbF92aXNpYmxlIDogTlVMTCk7CisJCQllbHNlCisJCQkJdGlkID0gaW5k ZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKIAogCQkJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAkJCWlmICh0aWQgPT0gTlVMTCkKIAkJCQli cmVhazsKIAotCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5 IG1hcCAqLwotCQkJaWYgKGluZGV4X29ubHkpCisJCQkvKiBGb3Igbm9uLWJhdGNoIGluZGV4LW9u bHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkg JiYgIWFtZ2V0YmF0Y2gpCiAJCQkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5o ZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCks CiAJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3ZtYnVmZmVyKTsKQEAgLTQxNyw3ICs1MTcsOCBAQCBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCiAJCQkJaWYgKHNjYW4tPmluc3RydW1lbnQpCiAJCQkJCXNjYW4tPmluc3Ry dW1lbnQtPm50YWJsZWZldGNoZXMrKzsKIAotCQkJCWlmICghaGVhcGFtX2luZGV4X2ZldGNoX2hl YXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUpKQorCQkJCWlmICghaGVhcGFtX2luZGV4X2Zl dGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUsCisJCQkJCQkJCQkJCSBhbWdldGJh dGNoKSkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJCSAqIE5vIHZpc2libGUgdHVwbGUuICBJZiBjYWxs ZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1pdApAQCAtNDc1LDcgKzU3Niw4IEBAIGhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCSAqIGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91 bmQgYW5kIGdyYWIgdGhlCiAJCQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KIAkJCSAqLwot CQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QsICZoZWFwX2NvbnRpbnVl KSkKKwkJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90LCAmaGVhcF9jb250 aW51ZSwKKwkJCQkJCQkJCQlhbWdldGJhdGNoKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0K QEAgLTQ5Nyw3ICs1OTksNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBib29sCiBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5E ZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJYm9vbCAqaGVhcF9jb250aW51 ZSkKKwkJCQkJCWJvb2wgKmhlYXBfY29udGludWUsIGJvb2wgYW1nZXRiYXRjaCkKIHsKIAlib29s CQlhbGxfZGVhZCA9IGZhbHNlOwogCWJvb2wJCWZvdW5kOwpAQCAtNTEwLDE0ICs2MTIsMzEyIEBA IGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCiAJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24p OwogCiAJLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBv bmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9y IHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1 cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4g aW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBT ZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqIElmIHdlIHNj YW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHJlbWVt YmVyIGl0CisJICogZm9yIGxhdGVyLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbiByZWNvdmVy eSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlCisJICogTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50 cyBpbiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgogCSAqLwogCWlmICghc2Nhbi0+eGFjdFN0YXJ0 ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJewor CQlpZiAoYW1nZXRiYXRjaCkKKwkJeworCQkJaWYgKGFsbF9kZWFkKQorCQkJCXRhYmxlYW1fdXRp bF9raWxsX3NjYW5wb3NpdGVtKHNjYW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhh dCBUSUQKKwkJCSAqICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4g aW5kZXhfZ2V0bmV4dF90aWQpCisJCQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBh bGxfZGVhZDsKKwkJfQorCX0KIAogCXJldHVybiBmb3VuZDsKIH0KKworLyoKKyAqIEdldCBuZXh0 IFRJRCBmcm9tIGJhdGNoIHJpbmcgYnVmZmVyLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNjYW4gZGly ZWN0aW9uLgorICogQWxzbyBzZXRzICphbGxfdmlzaWJsZSBmb3IgaXRlbSB3aGVuIGNhbGxlciBw YXNzZXMgYSBub24tTlVMTCBhcmcuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCSAgIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sICphbGxfdmlzaWJsZSkKK3sKKwlCYXRjaFJpbmdC dWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRl bVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2gg c2NhbkJhdGNoID0gTlVMTDsKKwlib29sCQloYWRFeGlzdGluZ1NjYW5CYXRjaDsKKworCUFzc2Vy dCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+ YmF0Y2gpOworCUFzc2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNoX2NvdW50 KHNjYW4pID09IDApOworCUFzc2VydChhbGxfdmlzaWJsZSA9PSBOVUxMIHx8IHNjYW4tPnhzX3dh bnRfaXR1cCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgbG9hZGVk IHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CisJICogbWF0Y2hpbmcgaXRlbSdz IFRJRC9pbmRleCB0dXBsZSBmcm9tCisJICovCisJaGFkRXhpc3RpbmdTY2FuQmF0Y2ggPSBzY2Fu UG9zLT52YWxpZDsKKwlpZiAoc2NhblBvcy0+dmFsaWQpCisJeworCQkvKgorCQkgKiBzY2FuUG9z IGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5IGJlIGxvYWRlZCBpbiBiYXRjaCBy aW5nCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgorCQkgKi8KKwkJcGdfYXNz dW1lKGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCQlzY2Fu QmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCQlpZiAo aW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcykpCisJ CQlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGly ZWN0aW9uLAorCQkJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLAorCQkJCQkJCQkJCQkJ ICAgYWxsX3Zpc2libGUpOworCX0KKworCS8qCisJICogRWl0aGVyIHJhbiBvdXQgb2YgaXRlbXMg ZnJvbSBvdXIgZXhpc3Rpbmcgc2NhbkJhdGNoLCBvciBpdCBoYXNuJ3QgYmVlbgorCSAqIGxvYWRl ZCB5ZXQgKGJlY2F1c2UgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgZW50aXJl IHNjYW4pLgorCSAqIFRyeSB0byBhZHZhbmNlIHNjYW5CYXRjaCB0byB0aGUgbmV4dCBiYXRjaCAo b3IgZ2V0IHRoZSBmaXJzdCBiYXRjaCkuCisJICovCisJc2NhbkJhdGNoID0gdGFibGVhbV91dGls X2ZldGNoX25leHRfYmF0Y2goc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIHNjYW5CYXRj aCwgc2NhblBvcyk7CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRv bmU7IG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoK KwkJICogTm90ZTogc2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2lu dC4gIFRoZSBzY2FuCisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVj dGlvbi4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2Nh bkJhdGNoLiAgTm93IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNj YW5CYXRjaC4KKwkgKi8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2Fu QmF0Y2gsIHNjYW5Qb3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3Mt PmJhdGNoKSA9PSBzY2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2gg ZnJvbSB0aGUgYmF0Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2Nh bkJhdGNoIGlzIG91ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoaGFkRXhpc3RpbmdTY2FuQmF0Y2gp CisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s CisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCUFzc2VydChoZWFk QmF0Y2ggIT0gc2NhbkJhdGNoKTsKKwkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoICE9 IHNjYW5Qb3MtPmJhdGNoKTsKKworCQkvKiBmcmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVu bGVzcyBpdCBpcyBzY2FuJ3MgbWFya0JhdGNoKSAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRj aChzY2FuLCBoZWFkQmF0Y2gpOworCisJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmlu ZyBidWZmZXIgKGV2ZW4gaWYgaXQncyBtYXJrQmF0Y2gpICovCisJCWJhdGNocmluZ2J1Zi0+aGVh ZEJhdGNoKys7CisJfQorCisJLyogSW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJl IHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRjaCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhl YWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVy bl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNjYW5C YXRjaCwgc2NhblBvcywgYWxsX3Zpc2libGUpOworfQorCisvKgorICogU2F2ZSB0aGUgY3VycmVu dCBzY2FuUG9zL3NjYW5CYXRjaCBpdGVtJ3MgVElEIGluIHNjYW4ncyB4c19oZWFwdGlkLCBhbmQK KyAqIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBUSUQuICBXaGVuIGFsbF92aXNpYmxlIGlzbid0 IE5VTEwgKGR1cmluZyBhbgorICogaW5kZXgtb25seSBzY2FuKSwgYWxzbyBzZXRzIGl0ZW0ncyB2 aXNpYmlsaXR5IHN0YXR1cyBpbiAqYWxsX3Zpc2libGUuCisgKgorICogaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3BvcyBoZWxwZXIgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg SXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQlTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQlC YXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zLAorCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSkKK3sK KwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2g7CisKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNj YW4tPmluZGV4UmVsYXRpb24sIDEpOworCisJLyogU2V0IHhzX2hlYXB0aWQsIHdoaWNoIGhlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkICovCisJc2Nhbi0+eHNfaGVhcHRpZCA9IHNj YW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udGFibGVUaWQ7CisKKwlpZiAoYWxsX3Zpc2li bGUgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFBsYWluIGluZGV4IHNjYW4uCisJCSAqLworCQlB c3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsK Kwl9CisKKwkvKgorCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkgKgorCSAqIEFsc28gc2V0IHhzX2l0 dXAsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVlZHMgdG9vLgorCSAqLworCUFz c2VydChzY2FuLT54c193YW50X2l0dXApOworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkg KHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2Fu UG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8g Zm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRk aXRpb25hbCBpdGVtcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJ ICovCisJaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHNjYW4sIHNjYW5CYXRjaCk7CisJaWYgKCEo aGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkp CisJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCBkaXJlY3Rpb24sIHNj YW5CYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCSAgc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBz ZXQgYWxsX3Zpc2libGUgZm9yIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgKi8KKwkqYWxsX3Zp c2libGUgPQorCQkoaGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9W SVNfQUxMX1ZJU0lCTEUpICE9IDA7CisKKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisK Ky8qCisgKiBPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBUSUQgZnJvbSBjYWxs ZXIncyBiYXRjaC4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXgtb25seSBz Y2Fucy4gIFdlIGFsd2F5cyBjaGVjayB0aGUgdmlzaWJpbGl0eQorICogb2YgY2FsbGVyJ3MgaXRl bSAoYW4gb2Zmc2V0IGludG8gY2FsbGVyJ3MgYmF0Y2gtPml0ZW1zW10gYXJyYXkpLiAgV2UgbWln aHQKKyAqIGFsc28gc2V0IHZpc2liaWxpdHkgaW5mbyBmb3Igb3RoZXIgaXRlbXMgZnJvbSBjYWxs ZXIncyBiYXRjaCBtb3JlCisgKiBwcm9hY3RpdmVseSB3aGVuIHRoYXQgbWFrZXMgc2Vuc2UuCisg KgorICogV2Uga2VlcCB0d28gY29tcGV0aW5nIGNvbnNpZGVyYXRpb25zIGluIGJhbGFuY2Ugd2hl biBkZXRlcm1pbmluZyB3aGV0aGVyIHRvCisgKiBjaGVjayBhZGRpdGlvbmFsIGl0ZW1zOiB0aGUg bmVlZCB0byBrZWVwIHRoZSBjb3N0IG9mIHZpc2liaWxpdHkgbWFwIGFjY2VzcworICogdW5kZXIg Y29udHJvbCB3aGVuIG1vc3QgaXRlbXMgd2lsbCBuZXZlciBiZSByZXR1cm5lZCBieSB0aGUgc2Nh biBhbnl3YXkKKyAqIChpbXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9p bnMgYW5kIHNlbWktam9pbnMpLCBhbmQgdGhlCisgKiBuZWVkIHRvIHVuZ3VhcmQgYmF0Y2hlcyBw cm9tcHRseS4KKyAqCisgKiBPbmNlIHdlJ3ZlIHJlc29sdmVkIHZpc2liaWxpdHkgZm9yIGFsbCBp dGVtcyBpbiBhIGJhdGNoLCB3ZSBjYW4gc2FmZWx5CisgKiB1bmd1YXJkIGl0IGJ5IGNhbGxpbmcg YW11bmd1YXJkYmF0Y2guICBUaGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvCisgKiBjb25jdXJy ZW50IFZBQ1VVTSBiZWNhdXNlIHRoZSBiYXRjaCdzIGd1YXJkICh0eXBpY2FsbHkgYSBidWZmZXIg cGluIG9uIHRoZQorICogb3JpZ2luYXRpbmcgaW5kZXggcGFnZSkgYmxvY2tzIFZBQ1VVTSBmcm9t IGFjcXVpcmluZyBhIGNvbmZsaWN0aW5nIGNsZWFudXAKKyAqIGxvY2sgb24gdGhhdCBwYWdlLiAg Q29weWluZyB0aGUgcmVsZXZhbnQgdmlzaWJpbGl0eSBtYXAgZGF0YSBpbnRvIG91ciBsb2NhbAor ICogY2FjaGUgc3VmZmljZXMgdG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVudCBUSUQgcmVjeWNs aW5nOiBpZiBhbnkgb2YgdGhlc2UKKyAqIFRJRHMgcG9pbnQgdG8gZGVhZCBoZWFwIHR1cGxlcywg VkFDVVVNIGNhbm5vdCBwb3NzaWJseSByZXR1cm4gZnJvbQorICogYW1idWxrZGVsZXRlIGFuZCBt YXJrIHRoZSBwb2ludGVkLXRvIGhlYXAgcGFnZXMgYXMgYWxsLXZpc2libGUuICBWQUNVVU0KKyAq IF9jYW5fIGRvIHNvIG9uY2UgdGhlIGJhdGNoIGlzIHVuZ3VhcmRlZCwgYnV0IHRoYXQncyBva2F5 OyB3ZSdsbCBiZSB3b3JraW5nCisgKiBvZmYgb2YgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyB0aGF0 IGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMgYXJlIE5PVAorICogYWxsLXZpc2libGUuCisg KgorICogV2hhdCBhYm91dCB0aGUgb3Bwb3NpdGUgY2FzZSwgd2hlcmUgYSBwYWdlIHdhcyBhbGwt dmlzaWJsZSB3aGVuIHdlIGNhY2hlZAorICogdGhlIFZNIGJpdHMgYnV0IHR1cGxlcyBvbiBpdCBh cmUgZGVsZXRlZCBhZnRlcndhcmRzPyAgVGhhdCBpcyBzYWZlIHRvbzogYW55CisgKiB0dXBsZSB0 aGF0IHdhcyB2aXNpYmxlIHRvIGFsbCB3aGVuIHdlIHJlYWQgdGhlIFZNIG11c3QgYWxzbyBiZSB2 aXNpYmxlIHRvCisgKiBvdXIgTVZDQyBzbmFwc2hvdCwgc28gaXQgaXMgY29ycmVjdCB0byBza2lw IHRoZSBoZWFwIGZldGNoIGZvciB0aG9zZSBUSURzLgorICovCitzdGF0aWMgdm9pZAoraGVhcGFt X2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEhlYXBCYXRj aERhdGEgKmhiYXRjaCwKKwkJCQkJCQkJICBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJYm9vbAkJYWxsYmF0Y2hp dGVtc3Zpc2libGU7CisJQmxvY2tOdW1iZXIgY3Vydm1oZWFwYmxrbm8gPSBJbnZhbGlkQmxvY2tO dW1iZXI7CisJdWludDgJCWN1cnZtaGVhcGJsa2ZsYWdzID0gMDsKKworCUFzc2VydChoYmF0Y2gg PT0gaGVhcF9iYXRjaF9kYXRhKHNjYW4sIGJhdGNoKSk7CisKKwkvKgorCSAqIFRoZSBiYXRjaCBt dXN0IHN0aWxsIGJlIGd1YXJkZWQgKGFtdW5ndWFyZGJhdGNoIGhhcyBub3QgYmVlbiBjYWxsZWQK KwkgKiB5ZXQpLCBzbyB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgc3RpbGwgaW4gZWZm ZWN0LgorCSAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKworCS8q CisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywgaW4gc2NhbiBv cmRlci4KKwkgKgorCSAqIE5vdGU6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdCBs b2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsCisJICogc28gdGhlIHJlc3VsdCBjb3VsZCBi ZSBzbGlnaHRseSBzdGFsZS4gIFNlZSB0aGUgIk1lbW9yeSBvcmRlcmluZworCSAqIGVmZmVjdHMi IGRpc2N1c3Npb24gYWJvdmUgdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGZvciBhbiBleHBsYW5h dGlvbgorCSAqIG9mIHdoeSB0aGlzIGlzIG9rYXkuCisJICovCisJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWludAkJCWxhc3RTZXRJdGVtID0gTWluKGJhdGNo LT5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSArIGhzY2FuLT54c192bV9pdGVtcyAtIDEp OworCisJCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtIDw9IGxhc3RTZXRJdGVt OyBzZXRJdGVtKyspCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0 SXRlbV0udGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCk7CisJCQl1aW50OAkJZmxhZ3M7CisKKwkJCWlmIChoZWFwYmxrbm8g PT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0g Y3Vydm1oZWFwYmxrZmxhZ3M7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZsYWdzID0gSEVB UF9CQVRDSF9WSVNfQ0hFQ0tFRDsKKwkJCWlmIChWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVs YXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQkJZmxhZ3MgfD0gSEVB UF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJCWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9 IGN1cnZtaGVhcGJsa2ZsYWdzID0gZmxhZ3M7CisJCQljdXJ2bWhlYXBibGtubyA9IGhlYXBibGtu bzsKKwkJfQorCisJCWFsbGJhdGNoaXRlbXN2aXNpYmxlID0gbGFzdFNldEl0ZW0gPj0gYmF0Y2gt Pmxhc3RJdGVtICYmCisJCQkocG9zSXRlbSA9PSBiYXRjaC0+Zmlyc3RJdGVtIHx8CisJCQkgKGhi YXRjaC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQp KTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNYXgoYmF0Y2gtPmZpcnN0 SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSAtIGhzY2FuLT54c192bV9pdGVtcyArIDEpOworCisJ CWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtID49IGxhc3RTZXRJdGVtOyBzZXRJ dGVtLS0pCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0u dGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CisJCQl1aW50OAkJZmxhZ3M7CisKKwkJCWlmIChoZWFwYmxrbm8gPT0gY3Vy dm1oZWFwYmxrbm8pCisJCQl7CisJCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1o ZWFwYmxrZmxhZ3M7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZsYWdzID0gSEVBUF9CQVRD SF9WSVNfQ0hFQ0tFRDsKKwkJCWlmIChWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24s IGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQkJZmxhZ3MgfD0gSEVBUF9CQVRD SF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJCWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZt aGVhcGJsa2ZsYWdzID0gZmxhZ3M7CisJCQljdXJ2bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwkJ fQorCisJCWFsbGJhdGNoaXRlbXN2aXNpYmxlID0gbGFzdFNldEl0ZW0gPD0gYmF0Y2gtPmZpcnN0 SXRlbSAmJgorCQkJKHBvc0l0ZW0gPT0gYmF0Y2gtPmxhc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+ dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOworCX0K KworCS8qCisJICogSXQncyBzYWZlIHRvIHVuZ3VhcmQgdGhlIGJhdGNoICh2aWEgYW11bmd1YXJk YmF0Y2gpIGFzIHNvb24gYXMgd2UndmUKKwkgKiByZXNvbHZlZCB0aGUgdmlzaWJpbGl0eSBzdGF0 dXMgb2YgYWxsIG9mIGl0cyBpdGVtcyAodW5sZXNzIHRoaXMgaXMgYQorCSAqIG5vbi1NVkNDIHNj YW4pCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXN2aXNpYmxlKQorCXsKKwkJQXNzZXJ0KGhiYXRj aC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpOwor CQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5sYXN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJ U19DSEVDS0VEKTsKKworCQlpZiAoYmF0Y2gtPmlzR3VhcmRlZCAmJiBzY2FuLT5NVkNDU2NhbikK KwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgor CSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBuZXh0IHRp bWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdvIG9uY2Ug d2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBpZiAoaHNj YW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0ZW0pKQor CQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9pdGVtcyA9 IHNjYW4tPm1heGl0ZW1zYmF0Y2g7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXgg NmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2 LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFt Lm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUg JCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBp LmMKaW5kZXggZWZhMDA3MDMwLi5hYmE5ZTJiNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5j CkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFz c2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+YW1lbmRz Y2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBoYXZlIGFuIGludmFs aWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0 ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2Vy dCgocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJkYmF0 Y2ggIT0gTlVMTCkpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91 dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IGFjYzlmM2U2YS4uMTdlYTkzYjRkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+ eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUg dGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3Jk ZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFsc2U7IC8qIHNldCBs YXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZzY2FuLT5iYXRjaGNhY2hl LCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBr ZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2Fu LgpAQCAtMTI2LDYgKzEyOCw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5V TEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPmJhdGNoX2luZGV4X29w YXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKKwlzY2Fu LT5iYXRjaF90YWJsZV9vZmZzZXQgPSAwOwogCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQg PSAwOwogCiAJcmV0dXJuIHNjYW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCAz NTdmMzYxOGEuLmJkNzgxMzkzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC00 Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9h bWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJh Y2Nlc3MvcmVsc2Nhbi5oIgpAQCAtMzA3LDcgKzMwOCw3IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRt YXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKICAqIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbCAt LS0gY29tbW9uIGNvZGUgZm9yIGluZGV4X2JlZ2luc2NhbiB2YXJpYW50cwogICoKICAqIFdoZW4g aGVhcFJlbGF0aW9uIGlzIG5vdCBOVUxMLCBhbHNvIGluaXRpYWxpemVzIGhlYXAtc2lkZSBzY2Fu IHN0YXRlOgotICogZ2V0bmV4dF9zbG90IHJlc29sdXRpb24gYW5kIHRhYmxlIGZldGNoIGluaXRp YWxpemF0aW9uLgorICogYmF0Y2ggcmluZyBzZXR1cCwgZ2V0bmV4dF9zbG90IHJlc29sdXRpb24s IGFuZCB0YWJsZSBmZXRjaCBpbml0aWFsaXphdGlvbi4KICAqLwogc3RhdGljIHBnX2F0dHJpYnV0 ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLApAQCAtMzUxLDEzICszNTIsMTkgQEAgaW5kZXhfYmVnaW5z Y2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJewogCQlzY2FuLT5oZWFwUmVs YXRpb24gPSBoZWFwUmVsYXRpb247CiAJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGluZGV4X29ubHlf c2NhbjsKKwkJc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkID0gKHNjYW4tPk1WQ0NTY2FuICYm ICFpbmRleF9vbmx5X3NjYW4pOworCisJCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1n ZXRiYXRjaCAhPSBOVUxMKQorCQkJaW5kZXhfYmF0Y2hzY2FuX2luaXQoc2Nhbik7CiAKIAkJLyog UmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlz IHNjYW4gKi8KIAkJaWYgKGluZGV4X29ubHlfc2NhbikKLQkJCXNjYW4tPnhzX2dldG5leHRfc2xv dCA9CisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBzY2FuLT51c2ViYXRjaHJpbmcgPworCQkJ CWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfb25seV9hbWdldGJhdGNoX2dldG5leHRf c2xvdCA6CiAJCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9vbmx5X2FtZ2V0dHVw bGVfZ2V0bmV4dF9zbG90OwogCQllbHNlCi0JCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPQorCQkJ c2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gc2Nhbi0+dXNlYmF0Y2hyaW5nID8KKwkJCQloZWFwUmVs YXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3BsYWluX2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90IDoK IAkJCQloZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3BsYWluX2FtZ2V0dHVwbGVfZ2V0 bmV4dF9zbG90OwogCiAJCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRh YmxlICovCkBAIC0zOTYsNiArNDAzLDkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh biwKIAogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwog CisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4s IGZhbHNlKTsKKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2Fu LCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC00 MTAsNiArNDIwLDE3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5f Q0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkvKgorCSAqIGFt Z2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaCBt YWtlIGxpbWl0ZWQKKwkgKiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRjaCBjYWNoZS4gIENoZWNrIGZv ciB0aGF0LgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNjYW4tPmJhdGNoY2Fj aGVbMF0gIT0gTlVMTCkKKwl7CisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7 CisJCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBO VUxMKTsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShzY2FuLCBzY2FuLT5iYXRjaGNhY2hlWzBd KSk7CisJfQorCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20g dGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKQEAgLTQxNyw2 ICs0MzgsMTAgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJCXNjYW4tPnhz X2hlYXBmZXRjaCA9IE5VTEw7CiAJfQogCisJLyogQ2xlYW51cCBiYXRjaCByaW5nIGJ1ZmZlciBz dGF0ZSBhbmQgc2NhbidzIGJhdGNoIGNhY2hlLCBpZiBuZWVkZWQgKi8KKwlpZiAoc2Nhbi0+dXNl YmF0Y2hyaW5nKQorCQlpbmRleF9iYXRjaHNjYW5fZW5kKHNjYW4pOworCiAJLyogRW5kIHRoZSBB TSdzIHNjYW4gKi8KIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1lbmRzY2FuKHNj YW4pOwogCkBAIC00MzgsMjQgKzQ2MywyNSBAQCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2Nh bkRlc2Mgc2NhbikKIHsKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1h cmtwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCi0Jc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKKwkvKiBPbmx5IGFtZ2V0YmF0 Y2ggaW5kZXggQU1zIHN1cHBvcnQgbWFyayBhbmQgcmVzdG9yZSAqLworCWluZGV4X2JhdGNoc2Nh bl9tYXJrX3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X3Jl c3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RFOiB0aGlzIG9ubHkg cmVzdG9yZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4IEFNLiAgU2VlCi0g KiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCisgKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9y ZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgc2hhcmVkIGJ5IHRoZSB0YWJsZSBhbmQKKyAq IGluZGV4IEFNcy4gIFNlZSBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCiAgKgogICogTk9U RTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBtYXJrL3Jlc3RvcmUg b25seSB3b3JrcwogICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNob3QgaXMgTVZDQy1z YWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9uZSByZXR1cm5hYmxl IHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRoZSBwcmlvcgotICog c3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBzdWZmaWNpZW50LiAg U2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25h bGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQg bWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcwotICog Y291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9y dGFudC4KKyAqIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVu dC4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0 aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5CisgKiBtZWFucyB0 aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMg Y291bGQgYmUKKyAqIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5p bXBvcnRhbnQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAgLTQ2NCwxNSArNDkw LDE0IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoSXNNVkND TGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVD S19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdl dGJhdGNoKTsKIAogCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXN0b3JpbmcgdGhlIG1h cmtlZCBwb3NpdGlvbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKLQlzY2FuLT5raWxsX3ByaW9yX3R1 cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KLQotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCS8qIGFsc28gbm90aWZ5IHRhYmxlIEFNIGFuZCBp bmRleCBBTSAqLworCWluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIH0KIAogLyoK QEAgLTU5NCw2ICs2MTksOSBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4pCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQo c2Nhbi0+eHNfaGVhcGZldGNoKTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4 X2JhdGNoc2Nhbl9yZXNldChzY2FuLCBmYWxzZSk7CisKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlz IG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCiAJ CXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4pOwpA QCAtNjQ2LDYgKzY3NCw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BS T0NFRFVSRShhbWdldHR1cGxlKTsKKwlBc3NlcnQoIXNjYW4tPnVzZWJhdGNocmluZyk7CiAKIAkv KiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdp c3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uOWJlNDEwMjZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDc2NyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJhc2VkIGluZGV4IHNjYW4gaW5m cmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KKyAqCisgKiBUaGlzIG1v ZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgYmF0Y2gtYmFzZWQgaW5k ZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8gcmV0dXJuIG11bHRpcGxlIG1h dGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNhbGwuICBUaGUgYmF0Y2ggcmlu ZyBidWZmZXIgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUgQU0sIHdpdGggaGVscCBmcm9tIHVzLAor ICogYW5kIHdpdGggaGVscCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBpbmxpbmUgZnVuY3Rpb25zIGlu IHJlbHNjYW4uaC4gIFRoaXMKKyAqIGFwcHJvYWNoIGVuYWJsZXMgZWZmaWNpZW50IHByZWZldGNo aW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAorICogaW5kZXggc2NhbnMuCisg KgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlIG9y ZGVyLgorICoKKyAqIFRoZXJlJ3MgdGhyZWUgdHlwZXMgb2YgZnVuY3Rpb25zIGluIHRoaXMgbW9k dWxlOgorICoKKyAqIDEuIENvcmUgYmF0Y2ggc2NhbiBsaWZlY3ljbGUgKGluZGV4X2JhdGNoc2Nh bl8qKTogRnVuY3Rpb25zIHRoYXQgbWFuYWdlCisgKiAgICBiYXRjaCBzY2FuIHN0YXRlIGluY2x1 ZGluZyBpbml0aWFsaXphdGlvbiwgcmVzZXQsIGNsZWFudXAsIGFuZCB0aGUKKyAqICAgIG1hcmsv cmVzdG9yZSBvcGVyYXRpb25zIG5lZWRlZCBmb3IgbWVyZ2Ugam9pbnMuICBDYWxsZWQgYnkgaW5k ZXhhbS5jCisgKiAgICByb3V0aW5lcyB0aGF0IG1hbmFnZSBpbmRleCBzY2FucyBvbiBiZWhhbGYg b2YgdGhlIGNvcmUgZXhlY3V0b3IuCisgKgorICogMi4gVGFibGUgQU0gdXRpbGl0aWVzICh0YWJs ZWFtX3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRhYmxlCisgKiAgICBBTXMg ZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBoYW5kbGUgY3Jvc3MtYmF0Y2gg ZGlyZWN0aW9uCisgKiAgICBjaGFuZ2VzLCByZWNvcmRpbmcgZGVhZCBpdGVtcyBmb3IgYSBsYXRl ciBjYWxsIHRvIGFta2lsbGl0ZW1zYmF0Y2gsCisgKiAgICBmcmVlaW5nIGJhdGNoZXMgd2hlbiB0 aGUgdGFibGUgQU0gaXMgZG9uZSB3aXRoIHRoZW0sIGFuZCBjYWxsaW5nCisgKiAgICBhbXVuZ3Vh cmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAodGhlIGd1YXJkIHRo YXQKKyAqICAgIHByZXZlbnRzIFZBQ1VVTSBmcm9tIHJlY3ljbGluZyBUSURzIHdoaWxlIGEgc2Nh biBpcyBpbiBmbGlnaHQpLgorICoKKyAqIDMuIEluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91 dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCBieSBpbmRleAorICogICAgQU1zIHRoYXQg aW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRoZXNlIG1hbmFnZSBiYXRjaAor ICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9jayByZWxlYXNlLCBhbmQgYmF0 Y2ggbWVtb3J5IHJlY3ljbGluZy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vz cy9pbmRleGJhdGNoLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJj b21tb24vaW50LmgiCisjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKworc3RhdGljIHZvaWQgYmF0 Y2hfZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkg ICBib29sIGFsbG93X2NhY2hlKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBiYXRjaF9jYWNoZV9zdG9y ZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbnQJ YmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoK KyAqIFNldHMgdXAgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFu IGluZGV4IHNjYW4uCisgKgorICogT25seSBjYWxsIGhlcmUgd2hlbiBhbGwgb2YgdGhlIGluZGV4 IHJlbGF0ZWQgZmllbGRzIGluICdzY2FuJyB3ZXJlIGFscmVhZHkKKyAqIGluaXRpYWxpemVkLgor ICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5i YXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVm Lm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCA9IDA7CisJ c2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCA9IDA7CisKKwlzY2FuLT51c2ViYXRjaHJpbmcg PSB0cnVlOworfQorCisvKgorICogUmVzZXQgc3RhdGUgdXNlZCBmb3IgYSBiYXRjaCBpbmRleCBz Y2FuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4s IGJvb2wgZW5kc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2Fu LT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVm LT5tYXJrQmF0Y2g7CisJYm9vbAkJbWFya0JhdGNoRnJlZWQgPSBmYWxzZTsKKworCWJhdGNocmlu Z2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxp ZCA9IGZhbHNlOworCisJLyogRW5zdXJlIGJhdGNoX2ZyZWUgd29uJ3Qgc2tpcCB0aGUgb2xkIG1h cmtCYXRjaCBpbiB0aGUgbG9vcCBiZWxvdyAqLworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0g TlVMTDsKKworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9 IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkK KwkJCW1hcmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQliYXRjaF9mcmVlKHNjYW4sIGJhdGNoLCAh ZW5kc2Nhbik7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0 Y2gpKQorCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCwgIWVuZHNjYW4pOworCisJYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsKK30K KworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBzY2FuCisgKgor ICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3Jl IHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxs IGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fZW5k KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcgbG9hZGVkIGJh dGNoZXMgKGV2ZW4gbWFya0JhdGNoKSwgYnlwYXNzaW5nIGNhY2hlICovCisJaW5kZXhfYmF0Y2hz Y2FuX3Jlc2V0KHNjYW4sIHRydWUpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FO X0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4t PmJhdGNoY2FjaGVbaV07CisKKwkJaWYgKGNhY2hlZCA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJaWYgKGNhY2hlZC0+ZGVhZEl0ZW1zKQorCQkJcGZyZWUoY2FjaGVkLT5kZWFkSXRlbXMpOwor CQlwZnJlZShiYXRjaF9hbGxvY19iYXNlKHNjYW4sIGNhY2hlZCkpOworCX0KK30KKworLyoKKyAq IFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBvc2l0aW9uCisgKgorICogU2F2ZXMgdGhlIGN1cnJl bnQgc2NhbiBwb3NpdGlvbiBhbmQgYXNzb2NpYXRlZCBiYXRjaCBzbyB0aGF0IHRoZSBzY2FuIGNh bgorICogYmUgcmVzdG9yZWQgdG8gdGhpcyBwb2ludCBsYXRlciwgdmlhIGEgY2FsbCB0byBpbmRl eF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNoIGlzIHJldGFpbmVk IGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhlCisgKiBzY2FuIGVu ZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqLwordm9pZAoraW5kZXhfYmF0 Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIg KmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAq c2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9z ICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBzY2Fu QmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKwlJbmRleFNj YW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQlmcmVl TWFya0JhdGNoOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsKKworCS8qCisJICogRnJlZSB0 aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSAtLSBidXQgb25seSBpZiBpdCBpc24ndCBv dXIKKwkgKiBzY2FuQmF0Y2ggKGRlZmVuc2l2ZWx5IG1ha2Ugc3VyZSB0aGF0IG1hcmtCYXRjaCBp c24ndCBzb21lIGxhdGVyCisJICogc3RpbGwtbmVlZGVkIGJhdGNoLCB0b28pCisJICovCisJaWYg KCFtYXJrQmF0Y2ggfHwgbWFya0JhdGNoID09IHNjYW5CYXRjaCkKKwl7CisJCS8qIERlZmluaXRl bHkgbm8gbWFya0JhdGNoIHRoYXQgd2Ugc2hvdWxkIGZyZWUgbm93ICovCisJCWZyZWVNYXJrQmF0 Y2ggPSBmYWxzZTsKKwl9CisJZWxzZSBpZiAobGlrZWx5KCFpbmRleF9zY2FuX2JhdGNoX2xvYWRl ZChzY2FuLCBtYXJrUG9zLT5iYXRjaCkpKQorCXsKKwkJLyogRGVmaW5pdGVseSBoYXZlIGEgbm8t bG9uZ2VyLWxvYWRlZCBtYXJrQmF0Y2ggdG8gZnJlZSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1 ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5k aWNhdGVzIHRoYXQgbWFya1Bvcy0+YmF0Y2ggaXMgbG9hZGVkLAorCQkgKiBidXQgYWZ0ZXIgdWlu dDggb3ZlcmZsb3cgYSBzdGFsZSBiYXRjaCBvZmZzZXQgY2FuIGFsaWFzIGEKKwkJICogY3VycmVu dGx5LWxvYWRlZCByYW5nZSAoZmFsc2UgcG9zaXRpdmUpLiAgQ29uZmlybSBieSBjaGVja2luZwor CQkgKiB3aGV0aGVyIHRoZSBiYXRjaCBwb2ludGVyIGluIG1hcmtQb3MtPmJhdGNoJ3Mgc2xvdCBz dGlsbCBtYXRjaGVzLgorCQkgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IChpbmRleF9zY2FuX2JhdGNo KHNjYW4sIG1hcmtQb3MtPmJhdGNoKSAhPSBtYXJrQmF0Y2gpOworCX0KKworCWlmIChmcmVlTWFy a0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gsIHNpbmNlIGl0IGlzbid0IGxvYWRlZC9u ZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IE5V TEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtCYXRjaCAqLworCQl0YWJsZWFtX3V0aWxf ZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0KKworCS8qIGNvcHkgdGhlIHNjYW4ncyBw b3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpzY2FuUG9zOworCWJhdGNocmlu Z2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgorICogUmVzdG9yZSBtYXJrIHRv IHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBSZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0aW9u IHNhdmVkIGJ5IGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4n cyBtYXJrUG9zIGJlY29tZXMgaXRzIHNjYW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3Rv cmVkIGFzCisgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2Ug anVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBz Y2FuQmF0Y2gpLAorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4n cyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVf cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZz Y2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0g JmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRj aHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCUFzc2VydChzY2FuLT5NVkNDU2Nh bik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJQXNzZXJ0KG1hcmtQb3MtPnZhbGlk KTsKKworCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNoKQorCXsKKwkJLyogbWFya0JhdGNoIGlz IGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5nZSBiYXRjaHJpbmdidWYgKi8KKwkJQXNz ZXJ0KHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJhdGNoKTsKKworCQlzY2FuUG9zLT5pdGVt ID0gbWFya1Bvcy0+aXRlbTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogbWFya0JhdGNoIGlz IGJlaGluZCBzY2FuQmF0Y2gsIGFuZCBzbyBtdXN0IG5vdCBiZSBzYXZlZCBpbiByaW5nIGJ1ZmZl cgorCSAqIGFueW1vcmUuICBXZSBoYXZlIHRvIGRlYWwgd2l0aCByZXN0b3JpbmcgdGhlIG1hcmsg dGhlIGhhcmQgd2F5OiBieQorCSAqIGludmFsaWRhdGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNo ZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNhc2UKKwkgKiB3aGVyZSB0aGUgc2NhbiBkaXJl Y3Rpb24gY2hhbmdlcyBhbmQgdGhlIHNjYW4gYWN0dWFsbHkgY3Jvc3NlcworCSAqIGJhdGNoL2lu ZGV4IHBhZ2UgYm91bmRhcmllcyAoc2VlIHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UpLgor CSAqCisJICogRmlyc3QsIGZyZWUgYWxsIGJhdGNoZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhlIHJp bmcgYnVmZmVyLgorCSAqLworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo OyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJQXNzZXJ0KGJhdGNoICE9 IG1hcmtCYXRjaCk7CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOwor CX0KKworCS8qCisJICogTmV4dCAiYXBwZW5kIiBzdGFuZGFsb25lIG1hcmtCYXRjaCwgd2hpY2gg d2lsbCBiZWNvbWUgc2NhbkJhdGNoCisJICogKHNjYW5CYXRjaCBpcyBhbHdheXMgdGhlIHJpbmcg YnVmZmVyJ3MgaGVhZEJhdGNoKQorCSAqLworCW1hcmtQb3MtPmJhdGNoID0gMDsKKwliYXRjaHJp bmdidWYtPnNjYW5Qb3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IGJh dGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nhbl9iYXRj aF9hcHBlbmQoc2NhbiwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LCBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7CisKKwkvKgorCSAq IEZpbmFsbHksIGNhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlk YXRlIGFueSBwcml2YXRlCisJICogc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUg c2NhbidzIHByb2dyZXNzCisJICovCisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNl dChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0Y2guZGVhZEl0ZW1z W10gbWlnaHQgYWxyZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZCBtaWdodAorCSAqIHlldCBo YXZlIG1vcmUgZGVhZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzIHBy ZXBhcmVkCisJICogZm9yIHRoYXQuCisJICovCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0 eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRhYmxlIEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisg KiBIYW5kbGUgY3Jvc3MtYmF0Y2ggY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uCisgKgorICogQ2Fs bGVkIGJ5IHRhYmxlIEFNIHdoZW4gaXRzIHNjYW4gY2hhbmdlcyBkaXJlY3Rpb24gaW4gYSB3YXkg dGhhdAorICogbmVjZXNzaXRhdGVzIGJhY2tpbmcgdGhlIHNjYW4gdXAgdG8gYW4gaW5kZXggcGFn ZSBvcmlnaW5hbGx5IGFzc29jaWF0ZWQKKyAqIHdpdGggYSBub3ctZnJlZWQgYmF0Y2guCisgKgor ICogV2hlbiB3ZSByZXR1cm4sIGJhdGNocmluZ2J1ZiB3aWxsIG9ubHkgY29udGFpbiBvbmUgYmF0 Y2ggKHRoZSBjdXJyZW50CisgKiBoZWFkQmF0Y2gvc2NhbkJhdGNoKSBhbmQgd2lsbCBsb29rIGFz IGlmIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4KKyAqIHVzZWQgZnJvbSB0aGUgc3Rh cnQuICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5IHBhc3MgdGhpcyBiYXRjaCB0byBhbWdldGJhdGNo CisgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4g ZGlyZWN0aW9uLiAgVGhpcworICogYXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVu dCwgYnV0IGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciB3aGF0CisgKiBvdWdodCB0byBiZSBhIHJl bGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hf ZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNo cmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNo OworCisJLyoKKwkgKiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAi dGFpbCIgYmF0Y2gsIHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVh ZCBiYXRjaCAod2hpY2ggaXMgYWxzbyB0aGUgY3VycmVudAorCSAqIHNjYW5CYXRjaCkgaXMgdGhl IG9ubHkgYmF0Y2ggaGFzbid0IGJlZW4gZnJlZWQKKwkgKi8KKwl3aGlsZSAoaW5kZXhfc2Nhbl9i YXRjaF9jb3VudChzY2FuKSA+IDEpCisJeworCQl1aW50OAkJdGFpbGlkeCA9IGJhdGNocmluZ2J1 Zi0+bmV4dEJhdGNoIC0gMTsKKwkJSW5kZXhTY2FuQmF0Y2ggdGFpbCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgdGFpbGlkeCk7CisKKwkJQXNzZXJ0KHRhaWxpZHggIT0gYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zLmJhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCB0YWlsKTsK KwkJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gtLTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93 IHRoZSBvbmx5IGJhdGNoIHN0aWxsIGxvYWRlZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhl YWRCYXRjaCA9PSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCXNjYW5CYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJLyoKKwkg KiBGbGlwIHNjYW5CYXRjaCdzIHNjYW4gZGlyZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHJldmVyc2Fs LiAgQWxzbyByZXNldAorCSAqIGFueSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkg dHJhY2tzIHNjYW4gcHJvZ3Jlc3MuCisJICovCisJc2NhbkJhdGNoLT5kaXIgPSAtc2NhbkJhdGNo LT5kaXI7CisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQor CQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBzY2FuQmF0 Y2gpOworfQorCisvKgorICogUmVjb3JkIHRoYXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisg KiBSZWNvcmRzIGFuIG9mZnNldCB0byB0aGUgY3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVt LCBzYXZpbmcgaXQgaW4KKyAqIHNjYW5CYXRjaCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVt cycgaW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIgYmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3Vy cmVudCBzY2FuQmF0Y2ggaXMgZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9raWxsX3Nj YW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2Fu UG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5C YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNj YW5CYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFs bG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVt RGVhZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5C YXRjaC0+bnVtRGVhZCsrXSA9IHNjYW5Qb3MtPml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJl c291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBB TSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVk CisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisg KgorICogV2UgY2FsbCBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGlu dGVybG9jayAoZS5nLiBidWZmZXIKKyAqIHBpbikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVk IHlldC4gIEZvciBwbGFpbiBNVkNDIHNjYW5zICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1 YXJkIGlzIHNldCksIHRoZSBpbnRlcmxvY2sgd2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5Cisg KiBpbiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRi YXRjaCBjYWxsIGhlcmUuCisgKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcg dGhlIGludGVybG9jayB1bnRpbCB2aXNpYmlsaXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0 ZW1zIGluIHRoZSBiYXRjaCwgc28gYW11bmd1YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAq IGFjdCBoZXJlLiAgRm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlz IGFsd2F5cyBoZWxkCisgKiB1bnRpbCBhbXVuZ3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRo aXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2lsbGluZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNj YW4ncyBiYXRjaC4KKyAqCisgKiBXaGVuIHRoZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVh ZCA+IDApIGFuZCB0aGUgaW5kZXggQU0gcHJvdmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdlIGNhbGwgaXQgdG8gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAq IHBhZ2UuICBXZSBhbHdheXMgcmVjeWNsZSB0aGUgYmF0Y2ggbWVtb3J5IHZpYSBpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBOb3RlOiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gn IGlzIGFsc28gYmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCBpcyBhIG5vLW9wLgorICogQ2FsbGVycyB0 aGF0IGRvbid0IHdhbnQgdGhpcyBzaG91bGQgc2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8g TlVMTAorICogYmVmb3JlIGNhbGxpbmcgdXMuICBOb3RlIHRoYXQgbWFya0JhdGNoIGhhcyB0byBi ZSBleHBsaWNpdGx5IGZyZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIFBhc3MgdGhy b3VnaCB0byBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiwgd2l0aCBhbGxvd19jYWNoZT10cnVlICov CisJYmF0Y2hfZnJlZShzY2FuLCBiYXRjaCwgdHJ1ZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgYmF0 Y2gsIG9wdGlvbmFsbHkgY2FjaGluZyBpdCBmb3IgcmV1c2UuCisgKgorICogdGFibGVhbV91dGls X2ZyZWVfYmF0Y2ggaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uICBXZSBzcGxpdCBvdXQgdGhlCisg KiBpbXBsZW1lbnRhdGlvbiBsaWtlIHRoaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGdpdmUg ZXh0ZXJuYWwgdGFibGUgQU0KKyAqIGNhbGxlcnMgdGhlIG9wdGlvbiBvZiBwYXNzaW5nIGFsbG93 X2NhY2hlPWZhbHNlLgorICoKKyAqIFdoZW4gYWxsb3dfY2FjaGUgaXMgdHJ1ZSwgd2UgdHJ5IHRv IHN0b3JlIHRoZSBiYXRjaCBpbiB0aGUgc2NhbidzIGJhdGNoCisgKiBjYWNoZSBmb3IgbGF0ZXIg cmV1c2UuICBXaGVuIGFsbG93X2NhY2hlIGlzIGZhbHNlICh0eXBpY2FsbHkgYmVjYXVzZSB0aGUK KyAqIHNjYW4gaXMgc2h1dHRpbmcgZG93biksIHdlIHBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCB1 bmNvbmRpdGlvbmFsbHkuCisgKi8KK3N0YXRpYyB2b2lkCitiYXRjaF9mcmVlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGJvb2wgYWxsb3dfY2FjaGUpCit7CisJQXNz ZXJ0KCEoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5pc0d1YXJkZWQpKTsK KwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCB8fCBzY2FuLT5NVkNDU2Nhbik7CisKKwkvKiBkb24n dCBmcmVlIGNhbGxlcidzIGJhdGNoIGlmIGl0IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAq LworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47 CisKKwkvKiBEcm9wIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRiYXRjaCBh cyBuZWVkZWQgKi8KKwlpZiAoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCAmJiBiYXRjaC0+ aXNHdWFyZGVkKQorCQl0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCk7CisK KwkvKgorCSAqIExldCB0aGUgaW5kZXggQU0gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgg cGFnZSwgaWYgYXBwbGljYWJsZS4KKwkgKgorCSAqIGJhdGNoLmRlYWRJdGVtc1tdIGlzIG5vdyBp biB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KKwkgKiBXZSBtaWdo dCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCisJICoKKwkgKiBTb3J0 IGFuZCB1bmlxdWUtaWZ5IGRlYWRJdGVtc1tdLiAgVGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBz YWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmln aW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlmIChiYXRjaC0+bnVtRGVhZCA+IDAgJiYK KwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2ggIT0gTlVM TCkKKwl7CisJCWlmIChiYXRjaC0+bnVtRGVhZCA+IDEpCisJCXsKKwkJCXFzb3J0KGJhdGNoLT5k ZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLCBzaXplb2YoaW50KSwKKwkJCQkgIGJhdGNoX2NvbXBh cmVfaW50KTsKKwkJCWJhdGNoLT5udW1EZWFkID0gcXVuaXF1ZShiYXRjaC0+ZGVhZEl0ZW1zLCBi YXRjaC0+bnVtRGVhZCwKKwkJCQkJCQkJCSBzaXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQp OworCQl9CisKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0 Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidzIGJh dGNoIGluIHRoaXMgYW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5IHJl bGVhc2VkIGJhdGNoZXMgZmlyc3QgKHdoZW4gY2FsbGVyIHJlcXVlc3RzIGl0KQorCSAqLworCWlm IChhbGxvd19jYWNoZSAmJiBiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVy bjsKKworCS8qIGp1c3QgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIChwbHVzIGJhdGNoJ3MgZGVh ZEl0ZW1zLCBpZiBhbnkpICovCisJaWYgKGJhdGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNo LT5kZWFkSXRlbXMpOworCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30K KworLyoKKyAqIERyb3AgdGhlIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFt dW5ndWFyZGJhdGNoCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2Fm ZSB0byBkcm9wIHdoYXRldmVyIGludGVybG9jayB0aGUgaW5kZXgKKyAqIEFNIGhvbGRzIHRvIHBy ZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gKHR5cGljYWxs eSBhCisgKiBidWZmZXIgcGluIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgaW4gYmF0Y2gncyBv cGFxdWUgYXJlYSkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogU2hvdWxkIGJlIGNh bGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQo IXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQp OworCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtdW5ndWFyZGJhdGNoKHNjYW4s IGJhdGNoKTsKKworCWJhdGNoLT5pc0d1YXJkZWQgPSBmYWxzZTsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgYW1nZXRiYXRjaCBpbmRleCBBTXMKKyAq CisgKiBUaGVzZSBmdW5jdGlvbnMgbWFuYWdlIGJhdGNoIGFsbG9jYXRpb24sIHVubG9jay9waW4g bWFuYWdlbWVudCwgYW5kIGJhdGNoCisgKiByZXNvdXJjZSByZWN5Y2xpbmcuCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sKKyAq CisgKiBVbmxvY2tzIHRoZSBnaXZlbiBidWZmZXIgaW4gcHJlcGFyYXRpb24gZm9yIGFtZ2V0YmF0 Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgUGVyZm9ybXMgZXh0 cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxsZXJzCisgKiBpbiBwYXNzaW5nLgor ICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25lIG9yIG1vcmUgbWF0Y2hp bmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChvciBmb3IgYW1nZXRiaXRt YXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElEcykuCisgKiBXaGVuIGFu IGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNhZmUgZm9yIGluZGV4IEFN cyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZvciB0aGVtc2VsdmVzLgor ICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcyB0aGF0IGltcGxlbWVu dCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0ZW50bHkgdXNl IHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2b2lk cyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUuICBXZSBkcm9w IGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJhdGNoJ3MgcGFnZSBvbiBiZWhhbGYg b2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqCisgKiBGb3IgYW1nZXRiYXRjaCBjYWxsZXJzLCB3 aGVuIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQgKHBsYWluIE1WQ0MKKyAqIHNjYW5zKSwg d2UgYWxzbyByZWxlYXNlIHRoZSBwaW4gaGVyZSAodGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2Nr KSwgc28KKyAqIHRoYXQgbm8gbGF0ZXIgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgd2lsbCBiZSBu ZWVkZWQuICBPdGhlcndpc2UgdGhlIHRhYmxlCisgKiBBTSB3aWxsIGNhbGwgYW11bmd1YXJkYmF0 Y2ggbGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgaW50ZXJsb2NrLgorICoKKyAqIElu ZGV4IEFNcyB3aG9zZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBpcyBub3QganVzdCBhIGJ1ZmZl ciBwaW4sIG9yIHdob3NlCisgKiBhbXVuZ3VhcmRiYXRjaCBkb2VzIG5vdCBzaW1wbHkgcmVsZWFz ZSBhIHBpbiwgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlIHRoaXMKKyAqIGZ1bmN0aW9uLiAgVGhl eSBjYW4gaW1wbGVtZW50IHRoZWlyIG93biBlcXVpdmFsZW50LiAgU3VjaCBpbmRleCBBTXMgYXJl IGFsc28KKyAqIGZyZWUgdG8gdXNlIHRoZSBiYXRjaCBMU04gZmllbGQgdGhlbXNlbHZlczsgdGhl aXIgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lCisgKiBjYW4gdXNlIHRoYXQgTFNOIGluIHRoZSB1 c3VhbCB3YXksIG9yIGluIHdoYXRldmVyIHdheSB0aGUgQU0gZGVlbXMgbmVjZXNzYXJ5CisgKiAo Y29yZSBjb2RlIHdpbGwgbm90IHVzZSBpdCBmb3IgYW55IG90aGVyIHB1cnBvc2UpLgorICovCit2 b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBv ciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJh dGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRl bSk7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90 IGFtZ2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBO VUxMKTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1raWxs aXRlbXNiYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4gY29uY3VycmVudCBoZWFw IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJ dCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hl bgorCQkgKiB0aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKgorCQkgKiBQbGFpbiBN VkNDIHNjYW5zIChiYXRjaEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVsZWFzZSB0aGUgcGluIG5v dywKKwkJICogZHJvcHBpbmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHNvIHRoYXQgbm8g YW11bmd1YXJkYmF0Y2gKKwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVkZWQgbGF0ZXIuICBUaGUg aW5kZXggQU0gY2FsbGVyIG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBvcGFxdWUgYnVmIGZpZWxk IGFmdGVyIHdlIHJldHVybi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5z IHJldGFpbiB0aGUgcGluOyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJCSAqIGFtdW5ndWFyZGJh dGNoIHRvIGRyb3AgdGhlIGludGVybG9jayB3aGVuIHJlYWR5LgorCQkgKi8KKwkJYmF0Y2gtPmxz biA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkKQorCQl7CisJCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGp1c3Qg ZHJvcCB0aGUgbG9jayAoaG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLworCQkJVW5sb2NrQnVm ZmVyKGJ1Zik7CisJCX0KKworCQkvKiBJZiB3ZSByZWxlYXNlZCBidWZmZXIgcGluLCBiYXRjaCBp cyBub3cgdW5ndWFyZGVkICovCisJCWJhdGNoLT5pc0d1YXJkZWQgPSAhc2Nhbi0+YmF0Y2hJbW1l ZGlhdGVVbmd1YXJkOworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJpdG1hcCAobm90IGFtZ2V0 YmF0Y2gpIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwor CisJCS8qIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCQlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1Zik7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgYmF0Y2gKKyAqCisg KiBVc2VkIGJ5IGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgYW1nZXRiYXRjaCBpbnRlcmZhY2UgKGJv dGggZHVyaW5nIGFtZ2V0YmF0Y2gKKyAqIGFuZCBhbWdldGJpdG1hcCBzY2FucykuCisgKgorICog UmV0dXJucyBJbmRleFNjYW5CYXRjaCB3aXRoIHNwYWNlIHRvIGZpdCBzY2FuLT5tYXhpdGVtc2Jh dGNoLW1hbnkKKyAqIEJhdGNoTWF0Y2hpbmdJdGVtIGVudHJpZXMuICBUaGlzIHdpbGwgZWl0aGVy IGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLCBvcgorICogYSBiYXRjaCByZWN5Y2xlZCBmcm9t IHRoZSBjYWNoZSBtYW5hZ2VkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLiAgU2VlCisg KiBjb21tZW50cyBhYm92ZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBIb3Vz ZWtlZXBpbmcgZmllbGRzIChidWYsIGtub3duRW5kQmFja3dhcmQvRm9yd2FyZCwgZmlyc3RJdGVt LCBsYXN0SXRlbSwKKyAqIG51bURlYWQsIGRlYWRJdGVtcywgY3VyclR1cGxlcykgYXJlIGluaXRp YWxpemVkIGhlcmUuICBUaGUgdGFibGUgQU0ncworICogYmF0Y2hfaW5pdCBjYWxsYmFjayBpcyBp bnZva2VkIGhlcmUgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEuCisgKiBU aGUgaW5kZXggQU0gY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIGluIGl0cyBwZXIt YmF0Y2ggb3BhcXVlCisgKiBmaWVsZHMgYW5kIHRoZSBtYXRjaGluZyBpdGVtc1tdIGFycmF5Lgor ICoKKyAqIE9uY2UgdGhlIGJhdGNoIGhhcyB0aGUgcmVxdWlyZWQgbWF0Y2hpbmcgaXRlbXMsIGNh bGxlciBzaG91bGQgZ2VuZXJhbGx5CisgKiBwYXNzIGl0IHRvIGluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2ssIGFoZWFkIG9mIGl0IGJlaW5nIHJldHVybmVkIHRocm91Z2gKKyAqIGluZGV4IEFNJ3Mg YW1nZXRiYXRjaCByb3V0aW5lLiAgSWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGJhdGNoIHdvbid0 IG5lZWQKKyAqIHRvIGJlIHJldHVybmVkIGxpa2UgdGhpcyAoZS5nLiwgZHVlIHRvIHRoZSBzY2Fu IGhhdmluZyBubyBtb3JlIG1hdGNoZXMpLAorICogY2FsbGVyIHNob3VsZCBwYXNzIGl0cyBlbXB0 eS91bnVzZWQgYmF0Y2ggdG8gaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKi8KK0luZGV4 U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuKQor eworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlib29sCQluZXdfYWxsb2MgPSBmYWxz ZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1dGUgYmF0Y2hfdGFibGVfb2Zmc2V0IG9uIGZpcnN0 IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVzCisJICogdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBB TSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmdsZSBvZmZzZXQgdGhhdCBjYW4gYmUKKwkgKiB1c2Vk IHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIChhbmQgdGhlIHRydWUgYWxsb2NhdGlv biBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNoIHBvaW50ZXIuCisJICovCisJaWYgKHNjYW4tPmJh dGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJCShzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6 ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFwZmV0Y2ggJiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5i YXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7CisJCXVpbnQxNgkJdGFibGVfb3BhcXVlID0gc2Nh bi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3Np emUgOiAwOworCisJCXNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9IHRhYmxlX29wYXF1ZSArCisJ CQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsKKwl9CisKKwkvKiBGaXJzdCBsb29rIGZv ciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRoZSBjYWNoZSAqLworCWlmIChzY2FuLT51c2ViYXRj aHJpbmcpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hF UzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSAhPSBOVUxMKQorCQkJewor CQkJCS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBz Y2FuLT5iYXRjaGNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBOVUxMOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBmcm9tIHByaW9yIGFtZ2V0 Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQgb24gZXZlcnkgYW1nZXRi aXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJCSAqLworCQliYXRjaCA9 IHNjYW4tPmJhdGNoY2FjaGVbMF07CisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBOVUxMOworCX0K KworCWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJCVNpemUJCWJhc2Vfc3o7 CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6OworCQljaGFyCSAgICpyYXc7 CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2ggcG9pbnRlciAqLworCQlw cmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJLyogSW5kZXhTY2FuQmF0 Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9mZnNldG9mKEluZGV4U2Nh bkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2Fu LT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRhdGEgYWZ0ZXIgaXRlbXNb XTogcGVyLWl0ZW0gZGF0YSAob3duZWQgYnkgdGFibGUgQU0pLAorCQkgKiB0aGVuIGN1cnJUdXBs ZXMgd29ya3NwYWNlIChvd25lZCBieSBpbmRleCBBTSwgcmVhZCBieSB0YWJsZSBBTSkKKwkJICov CisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJ aWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hf cGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJhaWxpbmdfc3ogKz0gTUFYQUxJR04oc2Nhbi0+eHNf aGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJCQlzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2U7 CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4X3N6ICsgTUFYQUxJR04oYmFzZV9zeikgKyB0cmFp bGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRjaCA9IChJbmRleFNjYW5C YXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisKKwkJLyogU2V0IHVwIGN1cnJUdXBsZXMgcG9pbnRl ciBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNj YW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwKQorCQl7CisJCQlTaXplCQlpdGVtc0VuZCA9 IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6ZQkJdGFibGVUcmFpbGluZyA9IDA7CisKKwkJCWlm IChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Bl cl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxlVHJhaWxpbmcgPSBNQVhBTElHTihzY2FuLT54c19o ZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCQkJCSBzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgYmF0Y2ggKyBpdGVtc0Vu ZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJZWxzZQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBO VUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUgZGVhZEl0ZW1zIGxhemlseSAodGhv dWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hlcworCQkgKiBrZWVwIHRoZWlyIGRlYWRJdGVtcyBh bGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ZGVhZEl0ZW1zID0gTlVM TDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVz dCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVw ICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwICYmCisJCQkgYmF0Y2gtPmN1cnJU dXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBpbml0aWFsaXplIGl0cyBw ZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQorCQl0YWJs ZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworCisJLyog c2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBmYWxz ZTsKKwliYXRjaC0+a25vd25FbmRGb3J3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmlzR3VhcmRlZCA9 IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsK KwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxl YXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGlu ZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxf YmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVkdWNl CisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2Ug YSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0 aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJl dHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVz IGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2Vk IGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQor ICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBB TXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0 Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAq CisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFt Z2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGlu IGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdl dGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJl IHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0 aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChz Y2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9u ID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0 KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBi YXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwlB c3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJLyoKKwkgKiBUcnkgdG8gc3Rv cmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAq IHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAorCSAqLworCWlmIChiYXRjaF9jYWNo ZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIENhY2hlIGZ1bGw7IGp1c3Qg ZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZy ZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShzY2FuLCBiYXRj aCkpOworfQorCisvKgorICogVHJ5IHRvIHN0b3JlIGEgYmF0Y2ggaW4gdGhlIHNjYW4ncyBiYXRj aCBjYWNoZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBmcmVlIHNsb3Qgd2FzIGZvdW5kLCBm YWxzZSBpZiB0aGUgY2FjaGUgaXMgZnVsbC4KKyAqLworc3RhdGljIGlubGluZSBib29sCitiYXRj aF9jYWNoZV9zdG9yZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQor eworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJ eworCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQlzY2FuLT5iYXRj aGNhY2hlW2ldID0gYmF0Y2g7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBhcnJh eXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNv bnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOworCWludAkJ CWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2NGNiNTk1Li44M2RmYTNm MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTUsNCArNSw1IEBAIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycsCiAgICdnZW5hbS5jJywK ICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JF QURNRQppbmRleCBjYjkyMWNhMmUuLmEzNzg2OWI3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFE TUUKQEAgLTE3OSwxOCArMTc5LDE1IEBAIGhvbGQgb24gdG8gdGhlIHBpbiAodXNlZCB3aGVuIHJl YWRpbmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0ZXJfCiB0aGV5J3JlIGRvbmUgdmlz aXRpbmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVkIGxlYWYgcGFnZSkgcHJldmVudHMK IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBjYW5ub3QgZ2V0IGEgY29uZmxpY3Rp bmcgY2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2NhbiBpcyB0b3RhbGx5IGZpbmlzaGVk IHByb2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK1RoaXMgaXMgcmVxdWlyZWQgYnkgYW55IGluZGV4 IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNlZSBhbHNv LCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBmYWlybHkg Y29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFjdGljZSBt b3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3b24ndCBi bG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElEIHJlY3lj bGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBhbHdheXMg cG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBzYWZlLgotCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZv cm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdoaWxlIG9ubHkg aG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlCi10aGVyZSBp cyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRlciBvbiAtLSBv bmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28gc2ltcGxlIGRl bGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVuaXN0aWMgaW5k ZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAorbW9kaWZpY2F0 aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRo aXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5n IHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAg SW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRvIHByb3RlY3Qg bm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcKK2hh emFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBpdHNlbGYuCiAK IEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNhbiBiZSBzcGxp dCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQgaXMgcG9zc2li bGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQwLDU0ICs0MzcsNiBAQCB3aGVuZXZlciBp dCBpcyBzdWJzZXF1ZW50bHkgdGFrZW4gZnJvbSB0aGUgRlNNIGZvciByZXVzZS4gIFRoZSBkZWxl dGVkCiBwYWdlJ3MgY29udGVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgc3BsaXQgb3Bl cmF0aW9uIChpdCB3aWxsIGJlY29tZQogdGhlIG5ldyByaWdodCBzaWJsaW5nIHBhZ2UpLgogCi1N YWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotCi1BcyBleHBsYWluZWQgaW4gdGhlIGVhcmxpZXIgc2VjdGlvbiBh Ym91dCBkZWxldGluZyBpbmRleCB0dXBsZXMgZHVyaW5nCi1WQUNVVU0sIHdlIGltcGxlbWVudCBh IGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBhbGxvd3MgaW5kaXZpZHVhbCBpbmRleCBzY2FucwotdG8g YXZvaWQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgSW5kZXggc2NhbnMgb3B0LW91dCAoYW5k IHNvIGRyb3AgdGhlaXIKLWxlYWYgcGFnZSBwaW4gd2hlbiB2aXNpdGluZyB0aGUgaGVhcCkgd2hl bmV2ZXIgaXQncyBzYWZlIHRvIGRvIHNvLCB0aG91Z2guCi1Ecm9wcGluZyB0aGUgcGluIGVhcmx5 IGlzIHVzZWZ1bCBiZWNhdXNlIGl0IGF2b2lkcyBibG9ja2luZyBwcm9ncmVzcyBieQotVkFDVVVN LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdpdGggaW5kZXggc2NhbnMgdXNlZCBi eSBjdXJzb3JzLAotc2luY2UgaWRsZSBjdXJzb3JzIHNvbWV0aW1lcyBzdG9wIGZvciByZWxhdGl2 ZWx5IGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSW4KLWV4dHJlbWUgY2FzZXMsIGEgY2xpZW50IGFw cGxpY2F0aW9uIG1heSBob2xkIG9uIHRvIGFuIGlkbGUgY3Vyc29ycyBmb3IKLWhvdXJzIG9yIGV2 ZW4gZGF5cy4gIEJsb2NraW5nIFZBQ1VVTSBmb3IgdGhhdCBsb25nIGNvdWxkIGJlIGRpc2FzdHJv dXMuCi0KLUluZGV4IHNjYW5zIHRoYXQgZG9uJ3QgaG9sZCBvbiB0byBhIGJ1ZmZlciBwaW4gYXJl IHByb3RlY3RlZCBieSBob2xkaW5nIGFuCi1NVkNDIHNuYXBzaG90IGluc3RlYWQuICBUaGlzIG1v cmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMgd3JvbmcgYW5zd2VycwotdG8gcXVlcmllcywg YnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGl0c2VsZiAo b25seQotaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBhZ2UgcGluIHdoaWxlIGFjY2Vzc2luZyB0aGUg aGVhcCBlbnN1cmVzIHRoYXQpLgotCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBkcm9wIHRo ZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUgaGF2aW5n IGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNjYW5zCi10 eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVhcCBwcm9w ZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFsZSBUSUQg cmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxsIGhlYXAg aXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGluCi10aGUg aGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8gc2V0IHRo ZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCBp bW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBzdWZmaWNp ZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVjYXVzZSB0 aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUg aGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUgTFBf VU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xlZCBi dXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVuIHdoZW4g dGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KLQotTFBf REVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBvcHRp bWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93KSBp cyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3AgdGhlaXIg bGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RFQUQtbWFy a2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQgaW5k ZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQsIGZvbGxv d2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBvc3NpYmxl IHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVkIGluZGV4 IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQotb3JpZ2lu YWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlzIG5l dywKLXVucmVsYXRlZCBpbmRleCB0dXBsZS4KLQotV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90 dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKLXNjYW5zIGNvbnNl cnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwK LWltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVy aW0gcGVyaW9kIHdoZW4gbm8KLWJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVu dGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2UgYXQg YWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UKLWlt cGxlbWVudCAiZmFrZSIgTFNOcyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKLQogRmFz dHBhdGggRm9yIEluZGV4IEluc2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog CkBAIC03MzQsNyArNjgzLDcgQEAgb2YgcmVhZGVycyBjb3VsZCBzdGlsbCBtb3ZlIHJpZ2h0IHRv IHJlY292ZXIgaWYgd2UgZGlkbid0IGNvdXBsZQogc2FtZS1sZXZlbCBsb2NrcyksIGJ1dCB3ZSBw cmVmZXIgdG8gYmUgY29uc2VydmF0aXZlIGhlcmUuCiAKIER1cmluZyByZWNvdmVyeSBhbGwgaW5k ZXggc2NhbnMgc3RhcnQgd2l0aCBpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IGZhbHNlCi1hbmQgd2Ug bmV2ZXIgc2V0IGtpbGxfcHJpb3JfdHVwbGUuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0 IHhtaW4KK2FuZCB3ZSBuZXZlciBMUF9ERUFELW1hcmsgdHVwbGVzLiBXZSBkbyB0aGlzIGJlY2F1 c2UgdGhlIG9sZGVzdCB4bWluCiBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIgY2FuIGJlIG9sZGVyIHRo YW4gdGhlIG9sZGVzdCB4bWluIG9uIHRoZSBwcmltYXJ5CiBzZXJ2ZXIsIHdoaWNoIG1lYW5zIHR1 cGxlcyBjYW4gYmUgbWFya2VkIExQX0RFQUQgZXZlbiB3aGVuIHRoZXkgYXJlCiBzdGlsbCB2aXNp YmxlIG9uIHRoZSBzdGFuZGJ5LiBXZSBkb24ndCBXQUwgbG9nIHR1cGxlIExQX0RFQUQgYml0cywg YnV0CkBAIC03NTYsOSArNzA1LDggQEAgbm9uLU1WQ0Mgc2NhbnMgaXMgbm90IHJlcXVpcmVkIG9u IHN0YW5kYnkgbm9kZXMuIFdlIHN0aWxsIGdldCBhIGZ1bGwKIGNsZWFudXAgbG9jayB3aGVuIHJl cGxheWluZyBWQUNVVU0gcmVjb3JkcyBkdXJpbmcgcmVjb3ZlcnksIGJ1dCByZWNvdmVyeQogZG9l cyBub3QgbmVlZCB0byBsb2NrIGV2ZXJ5IGxlYWYgcGFnZSAob25seSB0aG9zZSBsZWFmIHBhZ2Vz IHRoYXQgaGF2ZQogaXRlbXMgdG8gZGVsZXRlKSAtLSB0aGF0J3Mgc3VmZmljaWVudCB0byBhdm9p ZCBicmVha2luZyBpbmRleC1vbmx5IHNjYW5zCi1kdXJpbmcgcmVjb3ZlcnkgKHNlZSBzZWN0aW9u IGFib3ZlIGFib3V0IG1ha2luZyBUSUQgcmVjeWNsaW5nIHNhZmUpLiBUaGF0Ci1sZWF2ZXMgY29u Y2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4gKFhYWDogTm90IGFjdHVhbGx5IGNsZWFy IHdoeQotdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCitkdXJp bmcgcmVjb3ZlcnkuIFRoYXQgbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4gaW5kZXggc2Nh bnMuCisoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5IHRoaXMgaXMgdG90YWxseSB1bm5lY2Vz c2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQogCiBNVkNDIHNuYXBzaG90IHBsYWluIGluZGV4IHNjYW5z IGFyZSBhbHdheXMgc2FmZSwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgdGhhdAogdGhleSdyZSBzYWZl IGR1cmluZyBvcmlnaW5hbCBleGVjdXRpb24uICBIZWFwVHVwbGVTYXRpc2ZpZXNUb2FzdCgpIGRv ZXNuJ3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggMDU0NzAzODYxLi4wMDQ2 Yzg0ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDYwLDYgKzEwNjAs OSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMgYWNx dWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSByYXcK ICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVkIGJ5 IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91bmxvY2sgaW4gbmJ0c2VhcmNoLmMg KGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgd3JhcHBlcgorICogZnVuY3Rpb24pIGhhcyBtYXRj aGluZyBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24uCisgKgogICogTm90ZTog Q2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGggYnVmIHdoZW4gcGlu IG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0X2dldGJ1ZigpIG9y IF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTEwMSwxMyArMTEwNCwxOSBAQCBfYnRfdW5s b2NrYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkgKiBCdWZmZXIgaXMgcGlubmVkIGFu ZCBsb2NrZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUKIAkgKiBkZWZp bmVkIGFuZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJvYWN0aXZlbHkuCiAJICovCi0JVkFM R1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1opOwor I2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 Zik7CisKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOworI2Vu ZGlmCiAKIAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0IHBpbiBpcyBoZWxkIGJ5IHRoaXMg YmFja2VuZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogCisjaWYg ZGVmaW5lZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVs KSkKLQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShidWYpLCBCTENL U1opOworCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlm CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRw YWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXggMmJh MWNhNjYwLi4zOWM2NjE0OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdl LmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7CiAJ LyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNra2V5 cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gKi8K KwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICovCiAJ T2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQg Ki8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUncyBv ZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdpdGgg YXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2FuYmVo aW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJ CQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJfY2hl Y2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCSAg SW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2FuT3Bh cXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4 VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFx dWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7 Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJ CQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKK3N0YXRpYyB2b2lk IF9idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZz ZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAs IGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0 ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBv ZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQp Owogc3RhdGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBh Z2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5kZXhUdXBsZSB0dXBs ZSwgaW50IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBzdGF0 aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIAogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBp bmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0 YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoKLSAqIENhbGxlciBt dXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5idWY7IHRoZSBidWZm ZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1cnJQb3MubW9yZUxl ZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUgdXBkYXRlZCBhcyBh cHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3MgYXJlCisgKiBDYWxs ZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVmOyB0aGUgYnVm ZmVyJ3Mgc3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBuZXdiYXRjaCdzIG1v cmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkgYXJlIHVwZGF0ZWQg YXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZQogICogaW5p dGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVudCBw YWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAqIGRp cmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQgaW50 byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBz Y2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3IgbW9y ZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJlcG9y dHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJlbnQg cHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDExICsx MzEsMTIgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZv dW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIG5l d2JhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVt YmVyIG1pbm9mZjsKQEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJvb2wJ CWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxs ZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJCQkJ aW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25n IHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3Vy clBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gtPmJ1Zik7CiAJb3Bh cXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVm ZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5wcmV2UGFn ZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5i dHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwgX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJyUG9zLmRpciA9 IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0ZS5jdXJycGFn ZSA9IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnRuZXdiYXRj aC0+YnVmKTsKKwlidG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OworCWJ0 bmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcHN0YXRlLmRpciA9IG5l d2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0IHNo b3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0KFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0JCSAgIHNvLT5j dXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8g YnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFzc2VydCgh UF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9z KSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUgbG9jYWwg dmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl7CiAJ CS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2VyIHdpdGhv dXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJCV9idF9w YXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJCQkgc28t PmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgYnRuZXdi YXRjaC0+bmV4dFBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCWVsc2UK LQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAotCQkJ CQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nh biwgYnRuZXdiYXRjaC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7 CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgc2Nh bi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1cnJwYWdl LCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQogCXsKQEAgLTIxMiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3Nj YW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJ CQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICov Ci0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5t b3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlm IChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJ CQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJ CX0KIAkJCX0KQEAgLTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCWlmICgh QlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICov Ci0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlf YnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZz ZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaW50 CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVw IHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8KLQkJCQkJdHVw bGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3 YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0 aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAm dHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwg bGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSAx OyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKLQkJCQkJCV9i dF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVw b3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVl VHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJ CQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJCQkJfQpA QCAtMzM5LDEyICszMzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlpZiAoIXBzdGF0 ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCWJ0 bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4 VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5j dXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4 ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9 IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1OCwxMSBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBz dGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2 ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZh bHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFBy aW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRf cGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3Vy clBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwog CQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NjMsMjcgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1zID0g QlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJ CQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRl IChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBs ZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2Zm bnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3Rp bmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkg IGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJRHMg KG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0gMjsg aSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3NhdmVw b3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3Rpbmdp dGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdl dFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJ CWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0OTksMTEgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0 ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJYnRu ZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwot CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJ dGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUlu ZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9 CiAKIAkvKgpAQCAtNTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFzc2Vy dCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5maXJz dEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZpcnN0 SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAyMyw5 MSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRl bShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNo LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1 cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChp dHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRp ZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAo c28tPmN1cnJUdXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQgPSBp dHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9IG9m Zm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0dXBzeiA9 IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5j dXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsgc28tPmN1 cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRjaC0+Y3Vy clR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zmc2V0ICs9 IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8gc2F2ZSBU SURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAqIFNhdmVz IGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQg dGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50 IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxpbmcgX2J0 X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNo Lml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBzY2FuIGZp cnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZCBi ZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgotICogUmV0 dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBp cyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwgYW4gb2Zm c2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAqIHN0b3Jl ZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3RpbmdpdGVtcyhC VFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJ CSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCitfYnRf c2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgs CisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJs ZVRpZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRT Y2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlC YXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAog CUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlk ID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+ Y3VyclR1cGxlcykKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5pbmRleE9m ZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCS8qIFNh dmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJCUluZGV4VHVw bGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1 cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zm c2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKEluZGV4VHVwbGUp IChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCWl0ZW0t PnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUpIChuZXdi YXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNlLCBpdHVwLCBp dHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4IHR1cGxlIGhl YWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNLOwogCQliYXNl LT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gaXR1 cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJySXRlbS0+dHVw bGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAlyZXR1cm4gMDsK IH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g bmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAgKiB0dXBsZS4K ICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFzIGFscmVhZHkg YmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBw YXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3RpbmcgbGlzdCB0 dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zmc2V0LgogICov CiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNv LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVtUG9pbnRlciBo ZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJh dGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJ dGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAq Y3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5n SXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5o ZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0 ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwog CiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1lIGJhc2UgSW5k ZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUg cG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJySXRlbS0+dHVw bGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCisJCWl0 ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09LX0FIRUFEX1JF UVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIxLDE0ICsyODE4LDE1IEBAIG5ld19wcmltX3NjYW46 CiAJICoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQs IHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgotCSAqIEl0IGlzIHVwIHRv IF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2Nhbgot CSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRl IGN1cnJQb3MuZGlyLgorCSAqIFRoZSBzY2FuIGRpcmVjdGlvbiBtaWdodCBiZSByZXZlcnNlZCBk dXJpbmcgdGhlIG5leHQgYW1nZXRiYXRjaCBjYWxsLAorCSAqIGJ1dCBub3QgYmVmb3JlIGEgY2Fs bCB0byBidHBvc3Jlc2V0IHRoYXQgcmVzZXRzIHRoZSBhcnJheSBrZXlzIHRvIHRoZQorCSAqIGZp cnN0IHBvc2l0aW9ucy9lbGVtZW50cyB1c2VkIHdoZW4gc2Nhbm5pbmcgaW4gdGhpcyBvdGhlciBk aXJlY3Rpb24uCiAJICovCiAJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBf YnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwkv KiAuLi5idXQgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KIAogCWlmIChzY2FuLT5wYXJhbGxlbF9z Y2FuKQotCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28tPmN1cnJQb3Mu Y3VyclBhZ2UpOworCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgcHN0YXRl LT5jdXJycGFnZSk7CiAKIAkvKiBDYWxsZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBuZXcg cXVhbCAqLwogCXJldHVybiBmYWxzZTsKQEAgLTI4NDEsOSArMjgzOSw4IEBAIGVuZF90b3BsZXZl bF9zY2FuOgogCSAqIFRoaXMgZW5kcyB0aGUgZW50aXJlIHRvcC1sZXZlbCBzY2FuIGluIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uLgogCSAqCiAJICogTm90ZTogVGhlIHNjYW4ncyBhcnJheXMg KGluY2x1ZGluZyBhbnkgbm9uLXJlcXVpcmVkIGFycmF5cykgYXJlIG5vdyBpbgotCSAqIHRoZWly IGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uICBJZiB0aGUg c2NhbgotCSAqIGRpcmVjdGlvbiBoYXBwZW5zIHRvIGNoYW5nZSwgdGhlbiB0aGUgYXJyYXlzIHdp bGwgYWxyZWFkeSBiZSBpbiB0aGVpcgotCSAqIGZpcnN0IHBvc2l0aW9ucyBmb3Igd2hhdCB3aWxs IHRoZW4gYmUgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJICogdGhlaXIgZmluYWwgcG9z aXRpb25zIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIFRoaXMgaXMganVzdAorCSAq IGRlZmVuc2l2ZS4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxs IF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwkvKiAuLi5hbmQgZG9uJ3QgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KQEAgLTI5MTAsMTcgKzI5 MDcsOSBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCS8qCiAJICogVGhlIGFycmF5IGtleXMgYXJlIG5vdyBl eGhhdXN0ZWQuCiAJICoKLQkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0ZSB0 aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCi0JICogd2VyZSBjYWxsZWQuICBUaGlz IGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQotCSAqIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNvdWxk IG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGdl dHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0bwot CSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0aGUg aXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4gIFdo ZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+Y3Vy clBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiByZXR1 cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3MgYXJy YXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQgaW4g Z2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgorCSAqIERlZmVuc2l2ZWx5IHJlc3RvcmUgdGhl IGFycmF5IGtleXMgdG8gdGhlIHBvc2l0aW9ucyB0aGV5IHdlcmUgaW4KKwkgKiBpbW1lZGlhdGVs eSBiZWZvcmUgd2Ugd2VyZSBjYWxsZWQgKGkuZS4gdG8gdGhlaXIgZmluYWwgcG9zaXRpb25zIGZv cgorCSAqIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKS4KIAkgKi8KIAlfYnRfc3RhcnRfYXJy YXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXgg NmQ4NzBlNGViLi43N2FmMDlmNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAt MTYxLDExICsxNjEsMTMgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVz dG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlLAor CQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRiYXRjaCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBi dHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVuZHNj YW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3RycG9z ID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJhbGxl bHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRwYXJh bGxlbHJlc2NhbiwKQEAgLTIyNCwxMyArMjI2LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwg RGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgpIC0t IEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQg dGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wK LWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4 U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBi YXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwp OwogCkBAIC0yNDMsNDUgKzI0NSwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6 ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHByb3By aWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0JCSAq IF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICogX2J0 X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlm ICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2Nh biwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2Fu LCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hv dWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNj YW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVy IGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBh dCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAq IHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUK LQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0 aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0 J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0 IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVu dHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlz by0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdlKTsK LQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5r aWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJ fQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAq IE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nhbiwg ZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwot CQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJ aWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQg YW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtl eXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVy biBiYXRjaDsKIH0KIAogLyoKQEAgLTI5MSwzOCArMjY4LDQzIEBAIGludDY0CiBidGdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsK IAlpbnQ2NAkJbnRpZHMgPSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRlbVBvaW50ZXIg dGFibGVUaWQ7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwogCiAJLyog RWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2Fu ICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJaWYg KF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRoZSBm aXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2Fu bmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJtX2FkZF90dXBs ZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJ CQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRl bXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQs IDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJ CQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1l IGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlm ICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8q IEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAo KytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBsZXQgX2J0X25l eHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJlbGVhc2VzIHRo ZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3JlIGFsbG9jYXRp bmcgdGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBldmVyIHVzZWQg YXQgYSB0aW1lCisJCQkJCSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9IF9i dF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICghYmF0 Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29u dGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5j dXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBU aWQsIDEsIGZhbHNlKTsKKwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50 YWJsZVRpZDsKKwkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7CiAJ CQkJbnRpZHMrKzsKIAkJCX0KIAkJfQpAQCAtMzQ5LDggKzMzMSw2IEBAIGJ0YmVnaW5zY2FuKFJl bGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJp dmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7 Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlE YXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nhbktl eURhdGEpKTsKIAllbHNlCkBAIC0zNjQsMTkgKzM0NCwxMSBAQCBidGJlZ2luc2NhbihSZWxhdGlv biByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7 CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJ LyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRv bid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBk byBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJl c2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIg d2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+ Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBkZXNj ID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+ eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNiYXRj aCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUg PSBNQVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29y a3NwYWNlID0gQkxDS1NaOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zOTAsNjQgKzM2MiwxODUg QEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9w IHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwot CQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBk cm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBh dm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhl IHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZp bmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3Mg YWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25h cHNob3QuCi0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMg ZWFnZXJseSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQgZm9y IG1vcmUgdGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICogd2F5 LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmluZyBw YWdlIExTTnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2luZyBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9wUGlu IHNob3VsZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQaW4g PSAoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ0xpa2VTbmFwc2hvdChzY2Fu LT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7Ci0K LQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKLQlz by0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7Ci0J QlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdvcmtzcGFjZSBhcnJh eXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAqIG5vdCBhbHJlYWR5 IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24gcGFsbG9jCi0JICog b3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9uZSBwYWxsb2MgYmxv Y2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25vdyB0aGF0LgotCSAq LwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0gTlVMTCkKLQl7 Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAqIDIpOwotCQlzby0+ bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQogCS8qCiAJICogUmVz ZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5 cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktl eXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJ c28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwog CXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nlc3Nfa2V5cyBzZXRz IGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwogfQogCisvKgorICoJ YnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RF QUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJ UGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBtaW5vZmY7 CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsK KwlCdWZmZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRhYmxlIEFNIHNo b3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8KKwlB c3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBidGJh dGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9t aWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+ bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcg Ki8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0gQnVm ZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltaW5v ZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGlu IGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7 IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJh dGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zm c2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUlu ZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7 CisJCUFzc2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gt PmRlYWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVtIDwgbWlub2Zm KQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAob2ZmbnVtIDw9 IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51 bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdl LCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChCVHJlZVR1cGxl SXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsKKwkJCQlpbnQJ CQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJCWludAkJCWo7 CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJCQkJCUl0ZW1Q b2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKKworCQkJCQlp ZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQkJYnJl YWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2VydChraXRlbS0+ aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFkIHRv IGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1 bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJldmVu dCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICogZnVs bHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJCQkg KiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5k LCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0 IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4g d2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFsc28g dGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29ycmVj dGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJ aWYgKHBpIDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0 Y2gtPmRlYWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBEb24ndCBib3Ro ZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bworCQkJCSAq IGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQorCQkJ CSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBo YXJkbHkKKwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhl IG91dGVybW9zdCBsb29wCisJCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBw b3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFk dmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJldHR5IHF1aWNr bHkuKQorCQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0aW5nKQorCQkJCQlraWxsdHVwbGUgPSB0 cnVlOworCQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQs ICZraXRlbS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJCS8qCisJCQkg KiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRo aXMKKwkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywgaXQn cyBwb3NzaWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0 aGlzIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBmdWxsLXBhZ2Ug aW1hZ2VzIGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50cyBvciBkYXRh IGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2lyYWJsZS4KKwkJ CSAqLworCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7CisJCQkJ aWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhlIGhp bnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRhdGUg dGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJICog YXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAqLwor CQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5sb2Nr X3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBp dGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5nID0g dHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0K KwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8qCisJ ICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0 eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBh bHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxp a2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVseSBvbiB0aGUg cGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICovCisJaWYgKGtp bGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJB R0U7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1 bmxvY2tfcGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKworLyoKKyAqCWJ0dW5ndWFy ZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZmZXIg cGluKQorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJv cCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZyBieSBWQUNVVU0uCisgKi8KK3ZvaWQKK2J0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBC VEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0 bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0 Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlSZWxl YXNlQnVmZmVyKGJ0YmF0Y2gtPmJ1Zik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9z ZSBkb3duIGEgc2NhbgogICovCkBAIC00NTYsMTE2ICs1NDksNjMgQEAgYnRlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdv dHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2ls bGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMo c2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQotCXNv LT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bv cyk7Ci0KLQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlzIGFi b3V0IHRvIGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNvLT5r ZXlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlLZXlz IGFuZCBzby0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5hcnJh eUNvbnRleHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250ZXh0 KTsKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVt cyk7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVwbGVz KTsKLQkvKiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJlc2Nh biAqLwogCXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3VycmVu dCBzY2FuIHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkga2V5IHN0YXRl IGZvciBzY2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUgY29yZSBzeXN0 ZW0gd2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8KKyAqIGNoYW5n ZSBpbiBhIHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUuICBUaGlzIGhh cHBlbnMgd2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3aGVuIHRoZSBz Y2FuIGNyb3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGluIHRoZSBvcHBv c2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgorICogRm9yIGRp cmVjdGlvbiBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBl ZCB0aGUKKyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7IHdlIHVzZSB0 aGlzIHVwZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJyYXkga2V5cy4g IEZvciBtYXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICogcmV0YWluIGl0 cyBvcmlnaW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQpLgogICov CiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJU QmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFy ayB3aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChz by0+bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkvKgot CSAqIEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0ZXAg dG8gbmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9uLCBf YnRfc3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1Y3Qg aW4gbWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAotCSAq IGJlZm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdvcmsu CisJICogUmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRlIGZvciB0aGUgYmF0Y2gncyBz Y2FuIGRpcmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJpbVNjYW4gYW5kIHJlbGF0ZWQg ZmxhZ3MuICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29mdAorCSAqIGFzc3VtcHRpb24g dGhhdCB0aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24u CisJICoKKwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUgc29mdCBhc3N1bXB0aW9uIGJl aW5nIHZpb2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4gdG8gc3RlcCB0byB0aGUgbmV4 dC9wcmV2aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNvdmVyLgorCSAqIFdoZW4gd2Ug Z28gdG8gcmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxsIHJlbGlhYmx5IGRldGVybWlu ZSBpZiBhCisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUg cGFnZSdzIHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1pdGl2ZSBzY2FuLCBpdCB3aWxs IHJlcG9zaXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZhbHVlcworCSAqIChiYXNlZCBv biB0aGUgdHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ugd2UnbGwgc3RlcCBvbiB0byku CisJICoKKwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBrZXkgc3RhdGUgaW4gdGhlIGNv cnJlY3QgZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBnZXQgY29uZnVzZWQuICBXaGVu IHRoZSBhcnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFjZQorCSAqIGZvciB0aGUgcGFn ZSB3ZSdyZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1zIG9mIHRoZSBzY2FuIGRpciks CisJICogdGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHkuICBCdXQgd2hlbiB0aGV5J3Jl IGFoZWFkIG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0aGUgc2NhbiBjb3VsZCBtaXNz IG1hdGNoaW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OworCV9idF9z dGFydF9hcnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGJhdGNoLT5kaXIpKQorCQlidGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UK LQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1J bmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4g dG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBz Y2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBK dXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMg Y2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkg KiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRl bUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5l dyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyBy ZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQK LQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBj dXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1 cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVt S2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+ bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25t ZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1h cmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVt Y3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBv c0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2Yo QlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+ Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBs ZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3Rl cHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9i dF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCX0KKwkJYnRiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNvLT5u ZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBv c2l0ZURpckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODEsMTUgKzkyMSw2IEBAIF9idF9w YXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3NjYW5f cGFnZSwKIAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3RfY3Vy cl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3VyclBv cywgYW5kIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4dAot CSAqIGNhbGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWlsYXJs eSB0byBhIHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJfcGFn ZSB0byAqbmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5jdXJy UG9zIGlzIGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4KLQkg Ki8KLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJewog CQkvKgpAQCAtMTAzOSw4ICsxMDcwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVz YyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5n ZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwot CiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxl bF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jCmluZGV4IGFhZTZhY2I3Zi4uYzA4OWVjMzhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c2VhcmNoLmMKQEAgLTIzLDUzICsyMyw0OSBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9u IHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfYmF0Y2hfdW5s b2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQlC dWZmZXIgYnVmKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJl bGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9v bCBmb3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMg T2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwg QnVmZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0 IGtleSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBp bmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1 ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRp cik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxv Y2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5E aXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBm aXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0 Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdl KTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVs LCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxr bm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2ludChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRj aCBmaXJzdGJhdGNoKTsKIAogCiAvKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkK KyAqIF9idF9iYXRjaF91bmxvY2soKSAtLSBuYnRyZWUgd3JhcHBlciBmb3IgaW5kZXhhbV91dGls X2JhdGNoX3VubG9jay4KICAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAgSWYgc2NhbiBp cyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0aGUgcGluIHBy ZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFudXAgbG9jay4K KyAqIFBlcmZvcm1zIHRoZSBzYW1lIFZhbGdyaW5kIGluc3RydW1lbnRhdGlvbiBhcyBfYnRfdW5s b2NrYnVmLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21heWJl X3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK19idF9iYXRjaF91bmxvY2soSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKIHsKLQlp ZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBp bikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVybjsK LQl9CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAq Ci0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBo YXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGlu ZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlzby0+Y3VyclBvcy5s c24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJl bCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOwor CVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKKwor CWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGJ1Zik7CisKKyNpZiBkZWZp bmVkKFVTRV9WQUxHUklORCkKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhzY2FuLT5p bmRleFJlbGF0aW9uKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxDS1Na KTsKKyNlbmRpZgogfQogCiAvKgpAQCAtODYwLDI2ICs4NTYsMjUgQEAgX2J0X2NvbXBhcmUoUmVs YXRpb24gcmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRl bSBpbiBhIHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBpbiBh IHNjYW4uCiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBkaXJlY3Rpb24g b2Ygc2NhbiwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmlu Zy4gIFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0 aGUgbGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAqCQlxdWFsaWZp Y2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhl Ci0gKgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8g c28tPmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBw aW4gb24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5z LCB3aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJu aXRlbSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0 LgorICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZp cnN0IGxlYWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4gc2Nhbm5pbmcg YmFja3dhcmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1cGxlIHRoYXQg c2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbgorICoJCXN1 Y2Nlc3MgZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdlJ3MgbWF0Y2hp bmcgaXRlbXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBp bmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBz by0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNo aW5nIGl0ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSwKKyAq IHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBu ZWNlc3NhcmlseSBtZWFuIHRoZQorICogZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgY2FsbGVy IHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvCisgKiBkZXRlcm1pbmUgaWYgYW5vdGhl ciBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nh bi0+a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0 LAogICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZv ciBtb3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0 ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRo ZSBzY2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0X2Zp cnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24J cmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODcsMTIgQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIg c3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBmaXJz dGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0 Y2ggKi8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCWJ0 Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkg KiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7 IGFsc28gbWFyayB0aGUKQEAgLTkwOSw3ICs5MDgsOCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nh bik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsK IAl9CiAKIAkvKgpAQCAtOTE4LDcgKzkxOCwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAh PSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJi bGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsJCQkvKiBkZWZpbml0ZWx5 IGRvbmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCisJfQogCiAJLyoKIAkgKiBJbml0 aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbgpAQCAtOTM4LDExICs5NDEsOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJQXNz ZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJs a25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJcmV0dXJuIGZhbHNlOworCQlpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAotCQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFn ZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAt MTI0Miw3ICsxMjQzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRmaXJzdHBhZ2UgZm9yIHVzLCB3aGlj aCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8KIAlpZiAoa2V5c3ogPT0gMCkKLQkJ cmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNj YW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3RhcnQgdGhlIHNj YW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KQEAgLTE1MDIsNyArMTUw Myw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQlkZWZhdWx0OgogCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHN0cmF0X3RvdGFsOiAlZCIsIChpbnQp IHN0cmF0X3RvdGFsKTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiBOVUxMOwogCX0KIAog CS8qCkBAIC0xNTEwLDkgKzE1MTEsOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJzZWx2ZXMgb24gdGhlIHRhcmdldCBs ZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgPT0g aW5za2V5LmJhY2t3YXJkKTsKLQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5j dXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOworCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5z a2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAotCWlmICghQnVmZmVy SXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVySXNWYWxpZChi dGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIApA QCAtMTUyOCwyMiArMTUyOSwyMyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCiAJCXsKIAkJ CVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJCV9idF9z ZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxz ZSk7CisJCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmJ0Zmlyc3RiYXRjaC0+YnVm LCBCVF9SRUFELCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQ b3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAkJewog CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJCXJldHVybiBOVUxMOwog CQl9CiAJfQogCiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAq LwotCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgc28tPmN1cnJQb3MuYnVmKTsK KwlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGJ0Zmlyc3RiYXRjaC0+YnVmKTsK IAogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2Fu ICh1c3VhbGx5IHRoZSBwYWdlCi0JICogY3VycmVudGx5IGluIHNvLT5jdXJyUG9zLmJ1ZikuCisJ ICogY3VycmVudGx5IGluIGZpcnN0YmF0Y2guYnVmKS4KIAkgKgogCSAqIElmIGluc2tleS5uZXh0 a2V5ID0gZmFsc2UgYW5kIGluc2tleS5iYWNrd2FyZCA9IGZhbHNlLCBvZmZudW0gaXMKIAkgKiBw b3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBub24tcGl2b3QgdHVwbGUgPj0gaW5za2V5LnNjYW5rZXlz LgpAQCAtMTU2MSwxNjQgKzE1NjMsNzIgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJICogZm9yIHRoZSBwYWdlLiAgRm9yIGV4YW1wbGUsIHdoZW4g aW5za2V5IGlzIGJvdGggPCB0aGUgbGVhZiBwYWdlJ3MgaGlnaAogCSAqIGtleSBhbmQgPiBhbGwg b2YgaXRzIG5vbi1waXZvdCB0dXBsZXMsIG9mZm51bSB3aWxsIGJlICJtYXhvZmYgKyAxIi4KIAkg Ki8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIG9mZm51bSwgZGlyKSkKLQkJcmV0dXJu IGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCXJl dHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBvZmZudW0sIGRpcik7CiB9 CiAKIC8qCi0gKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAq CV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNoIGluIGEgc2Nhbi4KICAqCi0gKgkJT24g ZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkg YmUgcGlubmVkCi0gKgkJYnV0IGlzIG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5k ZXggaWRlbnRpZmllcyB3aGljaCBpdGVtIHdhcwotICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCisg KgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVzY3JpYmVzIHRoZSBiYXRjaCB0aGF0IHdhcyBsYXN0 IHJldHVybmVkIGJ5CisgKgkJYnRnZXRiYXRjaC4gIFdlJ2xsIHVzZSB0aGUgcHJpb3IgYmF0Y2gn cyBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0bworICoJCWRlY2lkZSB3aGljaCBsZWFmIHBhZ2Ug dG8gcmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVw ZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBuZXh0IGl0 ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxpZC4KLSAq Ci0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIGludmFsaWRhdGUgc28t PmN1cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUgc2NhbiB0byBy ZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAqCQl0aG91Z2ggd2UnbGwgbmVl ZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgorICoJCU9u IHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11c3QgYmUgYXQg bGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24gYW55IHJldHVybmVkIGJhdGNoIChlbHNl IHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCisgKgkJTm90ZSB0aGF0IHJldHVybmluZyBOVUxMIGRv ZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9mIHRoZQorICoJCXRvcC1sZXZlbCBzY2Fu OyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lCisgKgkJ aWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAqLwotYm9vbAot X2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2Nh bkJhdGNoCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJ bmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSk7Ci0KLQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7 IG9yIGlmIHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdl IHdpdGggZGF0YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsK LQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0J CXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5j dXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkK LQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7 Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBz by0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXgg c2NhbiBieSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2Nh biBkZXNjcmlwdG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5k ZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8q IE1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0 KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRl bUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0 ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVt LCBwZXIgYW1nZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRl bS0+aGVhcFRpZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5k ZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQot LyoKLSAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFs aWQgZGF0YSBmb3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0 IHBlcmZvcm1zIGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVu dHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5l ZCwgdGhvdWdoCi0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0 aGVyZSB3b24ndCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3Vy clBhZ2UgbXVzdCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIuKQotICovCi1z dGF0aWMgYm9vbAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OworCUJUQmF0Y2hEYXRhICpidHByaW9yYmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBwcmlv cmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25vOwotCi0JQXNz ZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5n IGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCi0JCV9idF9raWxsaXRlbXMoc2Nhbik7CisJYm9vbAkJbW9yZUluRGlyOwog CiAJLyoKLQkgKiBCZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRoZSBw YWdlIGRhdGEgaWYgdGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMgaXQu CisJICogVGhlIGNvcmUgY29kZSBtdXN0IGRlYWwgd2l0aCBjcm9zcy1iYXRjaCBzY2FuIGRpcmVj dGlvbiBjaGFuZ2VzIGZvciB1cy4KKwkgKiBBIGJhdGNoIG1hbmFnZW1lbnQgcm91dGluZSB0aGF0 IGZsaXBzIHByaW9yYmF0Y2gncyBzY2FuIGRpcmVjdGlvbiAoYW5kCisJICogY2FsbHMgYnRwb3Ny ZXNldCB0byBkZWFsIHdpdGggdGhlIHNjYW4ncyBhcnJheSBrZXlzKSBpcyB1c2VkIGZvciB0aGlz LgogCSAqLwotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4g b24gY3VycmVudCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYg KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChz by0+Y3VyclBvcy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0J CQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQ b3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBs ZXMpCi0JCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNv LT5tYXJrSXRlbUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAq IElmIHdlJ3JlIGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNj YW4KLQkJICogKHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQg bmVlZHMgdG8gc2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiksIG1vcmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2Yg dGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIg YmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVu ZGVkCi0JCSAqICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFu ZGxlIHRoaXMgY2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAq IG1hcmtQb3Mgc3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRl IGxpa2UgdGhpcwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3Qg dW5zZXQgbWFya1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGlj aGV2ZXIgbWlnaHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyBy ZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgot CQkgKiBJbiBlZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVw IHRvIHRoZSBmaXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBh ZnRlciBpdCBoYXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmlt U2NhbikKLQkJewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGly KSkKLQkJCQlzby0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5t YXJrUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3Vw cG9ydGVkIGJ5IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nh bik7Ci0JfQotCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJQXNzZXJ0 KHByaW9yYmF0Y2gtPmRpciA9PSBkaXIpOwogCiAJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdp dGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCWJsa25vID0g c28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gYnRwcmlvcmJhdGNoLT5uZXh0UGFnZTsK IAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtubyA9 IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+cHJldlBhZ2U7 CisJbGFzdGN1cnJibGtubyA9IGJ0cHJpb3JiYXRjaC0+Y3VyclBhZ2U7CisJbW9yZUluRGlyID0g U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJYnRwcmlvcmJhdGNoLT5tb3JlUmlnaHQg OiBidHByaW9yYmF0Y2gtPm1vcmVMZWZ0OwogCiAJLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGlu ZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9y ZWFkcGFnZSBmb3IgY3VyclBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlv biB0byB0aGUKLQkgKiBvbmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5 IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4 dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIEZvciBiaXRtYXAgc2NhbiBj YWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdAorCSAqIF9idF9yZWFk bmV4dHBhZ2UgY2FuIHJldXNlIGl0cyBtZW1vcnkuICBUaGF0IHdheSBiaXRtYXAgc2NhbnMgbmV2 ZXIKKwkgKiBuZWVkIG1vcmUgdGhhbiBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KIAkgKi8KLQlpZiAo c28tPmN1cnJQb3MuZGlyICE9IGRpcikKLQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCWlm ICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2Fu LCBwcmlvcmJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1vcmVJbkRpcikKKwl7 CisJCS8qCisJCSAqIHByaW9yYmF0Y2gncyBwYWdlIGlzIGtub3duIHRvIGJlIHRoZSBmaW5hbCBs ZWFmIHBhZ2Ugd2l0aCBtYXRjaGVzCisJCSAqIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24gKGl0cyBf YnRfcmVhZHBhZ2UgY2FsbCBmaWd1cmVkIHRoYXQgb3V0KS4KKwkJICoKKwkJICogTm90ZTogaWYg c28tPm5lZWRQcmltU2NhbiBpcyBzZXQsIHRoZW4gcHJpb3JiYXRjaCdzIGxlYWYgcGFnZSBpcwor CQkgKiBhY3R1YWxseSBqdXN0IHRoZSBmaW5hbCBwYWdlIGZvciB0aGUgY3VycmVudCBwcmltaXRp dmUgaW5kZXggc2NhbgorCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uICh0aGUgc2NhbiB3aWxs IGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqLworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2Fu KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRo ZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0g TlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxr bm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2Nh biB3YXNuJ3Qgc2V0ICovCiAKIAlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywg bGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CkBAIC0xNzMyLDE3OCArMTY0MiwxNjkgQEAg X2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiB0 byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tleXMgYWdh aW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBkZXRhaWxz LgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2Vk IChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2ggbXVzdCBi ZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBhcmFsbGVs IHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhl cmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9zIGFuZCBy ZXRhaW5lZCBsb2NrcyBhbmQgcGlucwotICogYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFz IHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBMaWtlIF9idF9y ZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkg bWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAqIE9uIHN1Y2Nl c3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBiYXRjaCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUg bmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS4gIElmIHRo ZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9u LCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJldHVybmluZyBOVUxMCisgKiBkb2Vz bid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUgdG9wLWxldmVsIHNjYW47IGJ0Z2V0 YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVy bWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleAorICogc2NhbiBpcyByZXF1aXJlZC4KICAq CiAgKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxl ciwgcmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9w YXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1f YnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfcmVhZGZpcnN0 cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJ ICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0Zmly c3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOworCUJsb2NrTnVtYmVy IGJsa25vLAorCQkJCWxhc3RjdXJyYmxrbm87CisJYm9vbAkJbW9yZUluRGlyOwogCi0Jc28tPm51 bUtpbGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0g LTE7CQkvKiBkaXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZp cnN0IHBhZ2UgKHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmly c3RiYXRjaCdzIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFBy aW1TY2FuKQogCXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRm aXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0g dHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAllbHNlIGlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNl OwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVM ZWZ0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAl9CiAJZWxz ZQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3Jl UmlnaHQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmly c3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxv YWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRo YXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3Mg ZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6 aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNl cyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYg KF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFn ZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNj ZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1 cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMu Ci0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyog X2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVt c1tdICovCisJCV9idF9iYXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCwgYnRmaXJzdGJhdGNo LT5idWYpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdzIG5vIGFjdHVh bGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICovCi0JX2J0 X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOworCS8qIFRo ZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSByZXR1cm5lZCBieSBf YnRfc2VhcmNoICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBidGZpcnN0YmF0 Y2gtPmJ1Zik7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVw cGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkK LQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8K KwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGJ0Zmlyc3RiYXRj aC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+cHJldlBhZ2U7CisJ bGFzdGN1cnJibGtubyA9IGJ0Zmlyc3RiYXRjaC0+Y3VyclBhZ2U7CisJbW9yZUluRGlyID0gU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiBi dGZpcnN0YmF0Y2gtPm1vcmVMZWZ0OwogCi0JLyogX2J0X3JlYWRwYWdlIGZvciBhIGxhdGVyIHBh Z2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2VlZGVkICovCi0JcmV0dXJuIHRydWU7CisJLyog UmVsZWFzZSBmaXJzdGJhdGNoICh3aWxsIGJlIHJlY3ljbGVkIGlmIHdlIHJlYWNoIF9idF9yZWFk bmV4dHBhZ2UpICovCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJeworCQkvKgorCQkg KiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rp b24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2ls bCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2Fu KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRo ZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0g TlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxr bm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2Nh biB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywg bGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCiAgKglfYnRfcmVhZG5leHRwYWdl KCkgLS0gUmVhZCBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBfYnRfbmV4dAog ICoKLSAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBuZXh0IGludGVyZXN0aW5nIHBhZ2UncyBsaW5r LCB0YWtlbiBmcm9tIGVpdGhlciB0aGUKLSAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBv ciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKLSAqIHdhcyBjdXJy ZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdl IHVzZSB0bwotICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxl dGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVy ZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICog b3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9z LmN1cnJQYWdlLgorICogQ2FsbGVyJ3MgYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBh Z2Ugb3IgcHJldlBhZ2UgKGRlcGVuZGluZyBvbiB0aGUKKyAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24pLCBhbmQgbGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KKyAq IFdlIHVzZSBsYXN0Y3VycmJsa25vIHRvIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3Bs aXRzL3BhZ2UgZGVsZXRpb25zCisgKiBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgogICoKLSAqIE9u IGVudHJ5LCBzby0+Y3VyclBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNhbGxlci4gIHNvLT5j dXJyUG9zLmJ1ZiBtdXN0Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVkIGFzIG5lZWRlZCBi eSBjYWxsZXIgKG5vdGUgdGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBuZWVkIHRvIGJlIHJl YWQgYWdhaW4gaW4gYWxtb3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2FuIGNhbGxlcnMKLSAq IHRoYXQgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hvdWxkIHBhc3Mgc2Vp emVkPXRydWU7IHN1Y2ggYQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3RjdXJyYmxrbm8gYXJn dW1lbnRzIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9ZmFsc2UgY2FsbGVy cyBqdXN0IHBhc3MgdXMgdGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4gZnJvbSB0aGVpcgot ICogc28tPmN1cnJQb3MsIHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9zIGl0c2VsZikgY2Fu IGJlIHVzZWQgdG8gZW5kIHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJs a25vIGNhbiBuZXZlciBiZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0aGF0IG11c3QgYmUg cmVhZCBuZXh0IGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdlIG11c3QgZmlndXJl IHRoYXQKLSAqIHBhcnQgb3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0aGUgc2NhbiAodGhl IGNvcnJlY3QgcGFnZSB0byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJleW9uZCB0aGUgc2Vp emVkPWZhbHNlIGNhbGxlcidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sCi0gKiB1bmxl c3MgYmxrbm8vc28tPmN1cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJldlBhZ2UgaXMgYWxy ZWFkeSBQX05PTkUsCi0gKiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJpZ2h0L3NvLT5jdXJy UG9zLm1vcmVMZWZ0IGlzIGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnksIG5vIHBhZ2Ugc2hv dWxkIGJlIGxvY2tlZCBieSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBleGl0LCBzby0+Y3Vy clBvcyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0Ci0gKiBpbnRlcmVz dGluZyBwYWdlLCBhbmQgd2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGluIG9uIHRoZSBidWZm ZXIgb24KLSAqIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJvcFBpbiBpbmRleCBz Y2Fucywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZvaWQgYmxvY2tpbmcg VkFDVVVNKS4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBiYXRjaCBjb250 YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUg bWF0Y2hpbmcgaXRlbS4gIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zCisgKiBp biB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRo YXQgcmV0dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9m IHRoZSB0b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0bWFwIGNoZWNr IHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4 CisgKiBzY2FuIGlzIHJlcXVpcmVkLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNo aW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0ZQotICogc28t PmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mgb3IgcGlucyksIGFu ZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEg cGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mgb3IgZmFpbHVy ZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgor ICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4gYmVmb3JlIGNhbGxp bmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQgY29tZSBmcm9tIHRo ZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNvb24gYXMgcG9z c2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkgQmxv Y2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgc2VpemVkKQor CQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBm aXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNj YW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0 Y2ggbmV3YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1 cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJs a25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5ldyBiYXRjaCAqLworCW5ld2Jh dGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCWJ0bmV3YmF0Y2ggPSBCVEJh dGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAKIAkvKgotCSAqIFJlbWVtYmVyIHRoYXQgdGhl IHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUgbGVmdAotCSAq IG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5nIGEgcGFnZSB0byB0aGUgcmlnaHQsIGZvciBi YWNrd2FyZHMgc2NhbnMpCisJICogbmV3YmF0Y2ggd2lsbCBiZSB0aGUgYmF0Y2ggZm9yIGJsa25v LCBhIHBhZ2UgdG8gdGhlIHJpZ2h0IG9mCisJICogbGFzdGN1cnJibGtubyAob3IgdG8gdGhlIGxl ZnQsIHdoZW4gdGhlIHNjYW4gaXMgbW92aW5nIGJhY2t3YXJkcykuCisJICoKKwkgKiBOb3RlOiBj YWxsZXIncyBibGtubyBpcyB0ZW50YXRpdmUuICBuZXdiYXRjaCBhY3R1YWxseSBzdG9yZXMgbWF0 Y2hlcworCSAqIGZyb20gdGhlIG5leHQgbGVhZiBwYWdlIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24g dGhhdCBoYXMgYXQgbGVhc3Qgb25lCisJICogbWF0Y2hpbmcgaXRlbS4gIFRoaXMgaXMgdXN1YWxs eSBjYWxsZXIncyBibGtubyBwYWdlLCBidXQgbWlnaHQgYmUgc29tZQorCSAqIG90aGVyIHBhZ2Ug dG8gaXRzIHJpZ2h0IChvciB0byBpdHMgbGVmdCkgaW5zdGVhZC4KIAkgKi8KLQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J ZWxzZQotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCWJ0bmV3YmF0Y2gtPm1vcmVM ZWZ0ID0gdHJ1ZTsJLyogZm9yIGxhc3RjdXJyYmxrbm8gKG9yIHRlbnRhdGl2ZSkgKi8KKwlidG5l d2JhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwkvKiB0ZW50YXRpdmUgKG9yIGZvciBsYXN0Y3VycmJs a25vKSAqLwogCiAJZm9yICg7OykKIAl7CiAJCVBhZ2UJCXBhZ2U7CiAJCUJUUGFnZU9wYXF1ZSBv cGFxdWU7CiAKLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAotCQkJKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVSaWdodCA6ICFzby0+Y3VyclBvcy5t b3JlTGVmdCkpCi0JCXsKLQkJCS8qIG1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBjYWxsIChmb3Ig bGFzdGN1cnJibGtubykgZW5kZWQgc2NhbiAqLwotCQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQ YWdlID09IGxhc3RjdXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKLQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwkvKiBpZmYgIXNvLT5u ZWVkUHJpbVNjYW4gKi8KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IG5ldmVyIGFjdHVhbGx5IHZp c2l0IHNvLT5jdXJyUG9zIGJsa25vICovCi0JCWlmICghc2VpemVkICYmIHNjYW4tPnBhcmFsbGVs X3NjYW4gIT0gTlVMTCAmJgotCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZs YXN0Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdob2xlIHNjYW4gaXMgbm93IGRvbmUg KG9yIGFub3RoZXIgcHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQpICovCi0JCQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQorCQlBc3NlcnQoISgo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOworCQlBc3NlcnQoYmxr bm8gIT0gUF9OT05FICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9OT05FKTsKIAogCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBidXQgY2hlY2sg Zm9yIGludGVycnVwdHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQlz by0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOworCQkJYnRu ZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKIAkJfQogCQll bHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJhY2UgKGFsc28gY2hlY2tzIGZv ciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlk YXRlX2xlZnQocmVsLCAmYmxrbm8sCisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRf dmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKIAkJCQkJCQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8p OwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJaWYgKGJ0bmV3 YmF0Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3QgaGF2ZSBiZWVu IGEgY29uY3VycmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0J CQkJcmV0dXJuIGZhbHNlOworCQkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5l d2JhdGNoKTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0 Y2gtPmJ1Zik7CiAJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJi bGtubyA9IGJsa25vOwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTEs MTcgKzE4MTIsMTcgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2Nr TnVtYmVyIGJsa25vLAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlz IHBhZ2UgKi8KIAkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJ Lyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8K LQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwg c2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJ CQkJCSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJ CQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+ bmV4dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2ls bCBjbGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uo c2NhbiwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0g c28tPmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5wcmV2UGFnZTsK IAkJCX0KIAkJfQogCQllbHNlCkBAIC0xOTM2LDE5ICsxODM3LDM4IEBAIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQogCiAJCS8qIG5v IG1hdGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmJ1Zik7Ci0JCXNlaXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5IF9idF9yZWFk cGFnZSAob3IgYnkgdXMpICovCisJCV9idF9yZWxidWYocmVsLCBidG5ld2JhdGNoLT5idWYpOwor CisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxr bm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAh YnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogIWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KSkKKwkJeworCQkJ LyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJl Y3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2Fu IHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsK KwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRo ZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9 IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJi bGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBu ZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4g d2Fzbid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkvKiBuZXh0IHBhZ2Ug Y2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVk LiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICogc28tPmN1cnJQb3Mu YnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JICov Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlBc3NlcnQoQlRTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4o cmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4g bmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChidG5ld2JhdGNoLT5jdXJyUGFnZSA9PSBibGtu byk7CisJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBuZXdiYXRjaCwgYnRuZXdiYXRjaC0+YnVmKTsK IAotCXJldHVybiB0cnVlOworCXJldHVybiBuZXdiYXRjaDsKIH0KIAogLyoKQEAgLTIxNzQsMjUg KzIwOTQsMjQgQEAgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwg Ym9vbCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXpl ZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICogRXhpdCBjb25kaXRpb25zIGFyZSB0 aGUgc2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfZW5kcG9p bnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNj YW5CYXRjaAorX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4s IGZpcnN0YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZz ZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0 aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVk CiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0g X2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOwor CWJ0Zmlyc3RiYXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCisJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJ CSAqIEVtcHR5IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5l ciB0byBsb2NrCkBAIC0yMjAwLDEwICsyMTE5LDEwIEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKi8KIAkJUHJlZGljYXRlTG9ja1JlbGF0 aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsK LQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwYWdlID0gQnVmZmVyR2V0 UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0Zmlyc3RiYXRj aC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNM RUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI5LDkgKzIxNDgsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEg ZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmly c3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdl KHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jCmluZGV4IDczMmJjNzUwYy4uNDE1ZTJhMWMwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jCkBAIC0xOSwxMCArMTksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL25i dHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5jbHVkZSAiYWNjZXNz L3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2luY2x1ZGUgImNv bW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0u aCIKQEAgLTMwLDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMg aW50CV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOwogc3Rh dGljIGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQs CiAJCQkJCQkgICBJbmRleFR1cGxlIGZpcnN0cmlnaHQsIEJUU2Nhbkluc2VydCBpdHVwX2tleSk7 CiAKQEAgLTE0NSwyNDcgKzE0MSw2IEBAIF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRl eFR1cGxlIGl0dXApCiAJcmV0dXJuIGtleTsKIH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmlzb24g ZnVuY3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAotX2J0X2NvbXBhcmVfaW50 KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJCQlhID0gKigoY29uc3Qg aW50ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKLQotCXJldHVybiBw Z19jbXBfczMyKGEsIGIpOwotfQotCi0vKgotICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9ERUFE IHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJl IGtpbGxlZAotICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2gg c28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBr aWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICog Y2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KLSAqCi0gKiBDYWxsZXIgc2hvdWxkIG5vdCBo YXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQb3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCi0gKiBi dWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0aWxsIHdv bid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3 ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBo ZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0Ci0g KiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9u IHRoZSB0YXJnZXQgcGFnZQotICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcg dGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFz by0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9u IHRoZQotICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xl ZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKLSAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBp bmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECi0gKiB3aXRoIGEg bm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0 aGlzIHNhbWUKLSAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0 aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwgdGhv dWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgotICogdGhl IHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdl IHNhdyB0aGUgcGFnZS4KLSAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQg Yml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgotICoKLSAqIFdlIGdpdmUgdXAgbXVjaCBs ZXNzIG9mdGVuIGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5z LgotICogV2UgY29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVl IHRvIGluc2VydGlvbnMuICBJZiBhbgotICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50 IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAotICogYW5kIGp1c3Qg Z2l2ZSB1cCBvbiBpdC4KLSAqLwotdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNj YW4pCi17Ci0JUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JUGFnZQkJcGFnZTsKLQlCVFBh Z2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBtaW5vZmY7Ci0JT2Zmc2V0TnVtYmVyIG1h eG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOwotCWJvb2wJCWtpbGxlZHNv bWV0aGluZyA9IGZhbHNlOwotCUJ1ZmZlcgkJYnVmOwotCi0JQXNzZXJ0KG51bUtpbGxlZCA+IDAp OwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2NhbiAq LwotCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZp bmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgbmVl ZCB0byBpdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVy OyB0aGUKLQkgKiBsb29wIGJlbG93IGV4cGVjdHMgdGhpcyAod2hlbiBtYXJraW5nIHBvc3Rpbmcg bGlzdCB0dXBsZXMsIGF0IGxlYXN0KS4KLQkgKiBzby0+a2lsbGVkSXRlbXNbXSBpcyBub3cgaW4g d2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCi0JICogU2Nyb2xsYWJs ZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3 aWNlLgotCSAqCi0JICogU29ydCBhbmQgdW5pcXVlLWlmeSBzby0+a2lsbGVkSXRlbXNbXSB0byBk ZWFsIHdpdGggYWxsIHRoaXMuCi0JICovCi0JaWYgKG51bUtpbGxlZCA+IDEpCi0JewotCQlxc29y dChzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJlX2lu dCk7Ci0JCW51bUtpbGxlZCA9IHF1bmlxdWUoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNp emVvZihpbnQpLAotCQkJCQkJCV9idF9jb21wYXJlX2ludCk7Ci0JfQotCi0JaWYgKCFzby0+ZHJv cFBpbikKLQl7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGluIG9uIHRoaXMgcGFnZSBz aW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCi0JCSAqIHNvIGFsbCB3ZSBuZWVkIHRvIGRv IGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQKLQkJICogY29uY3VycmVu dCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBvbiB0aGUgcGFnZS4KLQkJ ICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBz by0+Y3VyclBvcy5idWY7Ci0JCV9idF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKLQl9Ci0J ZWxzZQotCXsKLQkJWExvZ1JlY1B0cglsYXRlc3Rsc247Ci0KLQkJQXNzZXJ0KCFCVFNjYW5Qb3NJ c1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgc28tPmN1cnJQ b3MuY3VyclBhZ2UsIEJUX1JFQUQpOwotCi0JCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21p YyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlmIChz by0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQotCQl7Ci0JCQkvKiBNb2RpZmllZCwgZ2l2ZSB1 cCBvbiBoaW50aW5nICovCi0JCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKLQkJCXJldHVybjsKLQkJ fQotCi0JCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2FmZSAqLwotCX0KLQotCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1p bm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNl dE51bWJlcihwYWdlKTsKLQotCS8qIEl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNbXSBp biBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsr KQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Q b3NJdGVtICpraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCQlPZmZzZXRO dW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5kZXgg Pj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQ b3MubGFzdEl0ZW0pOwotCQlBc3NlcnQoaSA9PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28tPmN1 cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOwotCi0JCWlm IChvZmZudW0gPCBtaW5vZmYpCi0JCQljb250aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCi0J CXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJ dGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUp IFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0JCQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsKLQot CQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cGxlKSkKLQkJCXsKLQkJCQlpbnQJCQlwaSA9 IGkgKyAxOwotCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBs ZSk7Ci0JCQkJaW50CQkJajsKLQotCQkJCS8qCi0JCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1h eSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBm aXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCi0JCQkJICog cG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxp c3QKLQkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMu Ci0JCQkJICovCi0JCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0aW5nOyBqKyspCi0JCQkJewotCQkJ CQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7Ci0K LQkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFscyhpdGVtLCAma2l0ZW0tPmhlYXBUaWQpKQotCQkJ CQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLwotCi0JCQkJCS8qCi0JCQkJ CSAqIGtpdGVtIG11c3QgaGF2ZSBtYXRjaGluZyBvZmZudW0gd2hlbiBoZWFwIFRJRHMgbWF0Y2gs Ci0JCQkJCSAqIHRob3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFnZSBj YW4ndAotCQkJCQkgKiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCi0JCQkJCSAqLwot CQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQaW4p OwotCi0JCQkJCS8qCi0JCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCi0J CQkJCSAqCi0JCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2YW5j aW5nIGtpdGVtIGhlcmUKLQkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJpbmcg dGhlIHBvc3RpbmcgbGlzdCB0dXBsZQotCQkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGlu ZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0Ci0JCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgotCQkJ CQkgKgotCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhl YXAgVElEIGluCi0JCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUgZ2V0 cyBraWxsZWQKLQkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hl cmUgdGhlIGxhc3QKLQkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0 aGUgbGFzdCBpbmRleCB0dXBsZQotCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBz dGlsbCBnZXRzIGtpbGxlZCkuCi0JCQkJCSAqLwotCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0J CQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOwot CQkJCX0KLQotCQkJCS8qCi0JCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0ZXJt b3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KLQkJCQkgKiBhdm9pZCBwcm9jZXNzaW5nIGtpbGxl ZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQotCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxp c3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkKLQkJCQkgKiBzZWVtcyB3 b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVybW9zdCBsb29wCi0JCQkJ ICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBo ZWFwCi0JCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2Zm bnVtL2luZGV4Ci0JCQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQotCQkJCSAqLwotCQkJCWlm IChqID09IG5wb3N0aW5nKQotCQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCQkJfQotCQkJZWxzZSBp ZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRlbS0+aGVhcFRpZCkpCi0J CQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIE1hcmsgaW5kZXggaXRlbSBhcyBk ZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcwotCQkJICogaGFwcGVucyB3aGls ZSBob2xkaW5nIGEgYnVmZmVyIGxvY2sgcG9zc2libHkgaW4gc2hhcmVkIG1vZGUsCi0JCQkgKiBp dCdzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhpcwot CQkJICogc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcgdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGltYWdl cyBiZWluZyBzZW50Ci0JCQkgKiB0byBXQUwgKGlmIHdhbF9sb2dfaGludHMgb3IgZGF0YSBjaGVj a3N1bXMgYXJlIGVuYWJsZWQpLCB3aGljaAotCQkJICogaXMgdW5kZXNpcmFibGUuCi0JCQkgKi8K LQkJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQotCQkJewotCQkJCWlmICgh a2lsbGVkc29tZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50IGJp dCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRoZSBw YWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFyZSBu b3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJCQkJ aWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19wYWdl OwotCQkJCX0KLQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0aW5nIGxpc3QgaXRlbXMg Ki8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7 Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlv ZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNp bmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGlu dC4KLQkgKgotCSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBz ZXQgdGhlIHBhZ2UncwotCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtld2lz ZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQgd2UKLQkgKiBvbmx5IHJlbHkgb24gdGhlIHBhZ2Ut bGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQotCSAqLwotCWlmIChraWxsZWRz b21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdFOwot CQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2Nr X3BhZ2U6Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQkJX2J0X3VubG9ja2J1ZihyZWwsIGJ1Zik7Ci0J ZWxzZQotCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKLX0KLQotCiAvKgogICogVGhlIGZvbGxvd2lu ZyByb3V0aW5lcyBtYW5hZ2UgYSBzaGFyZWQtbWVtb3J5IGFyZWEgaW4gd2hpY2ggd2UgdHJhY2sK ICAqIGFzc2lnbm1lbnQgb2YgInZhY3V1bSBjeWNsZSBJRHMiIHRvIGN1cnJlbnRseS1hY3RpdmUg YnRyZWUgdmFjdXVtaW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHhsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCmluZGV4IGRmZjdk Mjg2Zi4uM2JjNWU1Y2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwpAQCAtMTA5 NSwxNSArMTA5NSwxNSBAQCBidHJlZV9tYXNrKGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJlciBi bGtubykKIAkJLyoKIAkJICogSW4gYnRyZWUgbGVhZiBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8g bW9kaWZ5IHRoZSBMUF9GTEFHUyB3aXRob3V0CiAJCSAqIGVtaXR0aW5nIGFueSBXQUwgcmVjb3Jk LiBIZW5jZSwgbWFzayB0aGUgbGluZSBwb2ludGVyIGZsYWdzLiBTZWUKLQkJICogX2J0X2tpbGxp dGVtcygpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCisJCSAqIGJ0a2lsbGl0ZW1z YmF0Y2goKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19s cF9mbGFncyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEJUUF9IQVNfR0FSQkFHRSBpcyBqdXN0IGFu IHVuLWxvZ2dlZCBoaW50IGJpdC4gU28sIG1hc2sgaXQuIFNlZQotCSAqIF9idF9kZWxldGVfb3Jf ZGVkdXBfb25lX3BhZ2UoKSwgX2J0X2tpbGxpdGVtcygpLCBhbmQgX2J0X2NoZWNrX3VuaXF1ZSgp Ci0JICogZm9yIGRldGFpbHMuCisJICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBi dGtpbGxpdGVtc2JhdGNoKCksIGFuZAorCSAqIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWls cy4KIAkgKi8KIAltYXNrb3BhcS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggZjJlZTMzM2Y2Li4zM2FkNDM1MzYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4LDEwICs4OCwxMiBAQCBz cGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IHNwZ2JlZ2luc2Nh biwKIAkJLmFtcmVzY2FuID0gc3BncmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IHNwZ2dldHR1cGxl LAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJ LmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAog CQkuYW1lbmRzY2FuID0gc3BnZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJl c3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFs bGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJh bGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDM3M2U4MjM0 Ny4uODQyMmU2NWIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3 IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVz XCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01l dGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0g TlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYm IGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nl c3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQW1pLmMKQEAgLTQyOSw3ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9y ZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkg KiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFs bCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJu IGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uM2ZmNzgx ZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBA CiAgKgkJdGhlIGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlu bmVyICJjdXJzb3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBp cyBkb25lIGJ5ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0 b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29u ZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0 aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25k IG91dGVyIDUuIFRoZSBpbmRleGJhdGNoLmggaW50ZXJmYWNlIHByb3ZpZGVzCisgKgkJcm91dGlu ZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlIGR1cmluZyBpbmRleCBzY2Fucy4KICAq CiAgKgogICoJCUVzc2VudGlhbCBvcGVyYXRpb24gb2YgdGhlIG1lcmdlIGpvaW4gYWxnb3JpdGht IGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2 N2Q5ZGMzNWYuLmVkYzdlNDczNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CkBAIC00Myw3ICs0Myw3IEBACiAvKiBXaGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBp bmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNU X0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFND QU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9C SVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FO LAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2NhblR5cGVDb250cm9sOwpAQCAtNzQ3LDcg Kzc0Nyw3IEBAIGdldF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogCXsKIAkJSW5kZXhQYXRoICAqaXBhdGggPSAoSW5kZXhQYXRoICopIGxmaXJzdChsYyk7 CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQorCQlpZiAoaW5kZXgtPmFtY2FucGxhaW5z Y2FuKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAKIAkJaWYgKGluZGV4LT5h bWhhc2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dpdGNoIChzY2FudHlwZSkKIAl7 CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJ CWlmICghaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJCXJldHVybiBOSUw7CiAJCQlicmVhazsK IAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmlu ZGV4IGIyZmJkNmEwOC4uNDlhNmFjYzNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNh dC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFt c2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFy Y2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFs bGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUg PSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FucGxhaW5z Y2FuID0gKGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8CisJCQkJCQkJCQkJYW1yb3V0 aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1y b3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFt LT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9z ID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5l LT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGlu ZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0 aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0g TlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5m byAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8t PmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gZmFsc2U7 CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVw bGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWNhbnBsYWluc2NhbiA9IGZhbHNlOwogCQkJCWluZm8t PmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gZmFsc2U7 CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDBiMWQ4MGI1Yi4uMGQwYmQ0NjhmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC04MzYsNiArODM2LDcg QEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBB dHRyTWFwICphdHRybWFwKQogewogCUF0dHJOdW1iZXIJa2V5Y29sOwogCW9pZHZlY3RvciAgKmlu ZGNsYXNzOworCWNvbnN0IEluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CiAKIAkvKiBUaGUgaW5k ZXggbXVzdCBub3QgYmUgYSBwYXJ0aWFsIGluZGV4ICovCiAJaWYgKCFoZWFwX2F0dGlzbnVsbChp ZHhyZWwtPnJkX2luZGV4dHVwbGUsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCkBAIC04 ODcsMTAgKzg4OCwxMiBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxh dGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCi0J ICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVw bGUiLCB3aGljaCB3aWxsCi0JICogYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAg U2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KKwkgKiBUaGUgZ2l2ZW4gaW5kZXgg YWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIgb3IKKwkgKiAiYW1nZXRi YXRjaCIsIHdoaWNoIHdpbGwgYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2Vl CisJICogUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRl eEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBs ZSA9PSBOVUxMKQorCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+ cmRfcmVsLT5yZWxhbSwgZmFsc2UpOworCWlmIChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVM TCAmJiBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJ cmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAuLmRkZmQx YjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBAQCBpbmRl eGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgot CQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOwor CQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJ CSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1B UF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6 IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxM KTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChy b3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFtX3Byb3Bl cnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+ YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRV Uk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVS Tl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91dGluZS0+ YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToKIAkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUu YwppbmRleCBiNzRhYjVmN2EuLjA2NTUzNjA5YiAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBA IC0zOTMsNyArMzkzLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAkJCSBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKIAogCS8qCi0JICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGlu IGluZGV4X2dldG5leHRfdGlkKCkuICBTZWUgcGFnZQorCSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNo ZXMgdGhlIG9uZSBpbiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCgpLiAgU2VlIHBhZ2UKIAkgKiByZWN5 Y2xpbmcvInZpc2libGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJlZSBSRUFETUUuCiAJICov CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXgg NTExMWNkYzZkLi40NzZiNjRlOGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5j CisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMiBAQCBibGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0 Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9 IGJsZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjBmNmMzNzNiMSAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBA IC0xNjcsMTAgKzE2NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFt YmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFt cmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBi ZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUg TlVMTCAqLworICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJ LyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRi YXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJp dG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNj YW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5V TEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUg TlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5V TEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBp bmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTY3Niw4ICs2NzgsMzgg QEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICA8ZW1waGFzaXM+bXVz dDwvZW1waGFzaXM+IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBjYWxsaW5nCiAgICA8ZnVuY3Rpb24+ UmVsYXRpb25HZXRJbmRleFNjYW4oKTwvZnVuY3Rpb24+LiAgSW4gbW9zdCBjYXNlcwogICAgPGZ1 bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBsaXR0bGUgYmV5b25kIG1ha2luZyB0 aGF0IGNhbGwgYW5kIHBlcmhhcHMKLSAgIGFjcXVpcmluZyBsb2NrczsKKyAgIGFjcXVpcmluZyBs b2NrcyBhbmQgaW5pdGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkRlc2M8 L3N0cnVjdG5hbWU+IGZpZWxkczsKICAgIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyBvZiBpbmRleC1z Y2FuIHN0YXJ0dXAgYXJlIGluIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+LgorICAgSW5k ZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlCisgICBtdXN0IGFsc28gc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIGlu IHRoZSBzY2FuIGRlc2NyaXB0b3I6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRl cmFsPjogdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zCisgICAgICB0aGF0IGNhbiBhcHBlYXIg aW4gYSBzaW5nbGUgYmF0Y2ggKHR5cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHBhZ2UK KyAgICAgIHNpemUsIGUuZy4sIDxsaXRlcmFsPk1heEluZGV4VHVwbGVzUGVyUGFnZTwvbGl0ZXJh bD4pLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU8 L2xpdGVyYWw+OiB0aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhBTElHTjwvZnVuY3Rpb24+J2Qgc2l6 ZSBvZiB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlCisgICAgICBhcmVhLiAgRWFjaCBi YXRjaCBhbGxvY2F0aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBzcGFjZSBpbW1lZGlhdGVseSBiZWZv cmUKKyAgICAgIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5CYXRjaERhdGE8L3N0cnVjdG5hbWU+ IHBvaW50ZXIsIGZvciB1c2UgYnkgdGhlCisgICAgICBpbmRleCBBTSB0byBzdG9yZSBwZXItcGFn ZSBuYXZpZ2F0aW9uIHN0YXRlIChlLmcuLCBiYXRjaCBpbmRleCBwYWdlJ3MKKyAgICAgIGJ1ZmZl ciBwaW4gYW5kIHNpYmxpbmcgcGFnZSBsaW5rcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZn dDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKKyAg ICAgIG9mIHRoZSBwZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5k ZXgtb25seSBzY2FucworICAgICAgKHR5cGljYWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+ KSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QKKyAgICAgIHN1cHBvcnQgaW5kZXgtb25s eSBzY2Fucy4gIFRoZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJsZSB2aWEKKyAgICAgIDxzdHJ1Y3Rm aWVsZD5iYXRjaC0mZ3Q7Y3VyclR1cGxlczwvc3RydWN0ZmllbGQ+LgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+ CkBAIC03NDksNiArNzgxLDIzMyBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAg ICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3Ry dWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNl dCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHBy b2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3NpdGlvbiBt YXJraW5nCisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBzdXBwb3J0 ZWQgZm9yIHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50ZXJmYWNl OyBvbmx5IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl IHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJh PgorPHByb2dyYW1saXN0aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAg ICAgICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAg UmV0dXJuIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2Nhbiwg bW92aW5nIGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGlu IHRoZSBpbmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5C YXRjaDwvdHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZl bgorICAgc2NhbiBkaXJlY3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0 bworICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hp bmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1l LiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQorICAgc2lu Z2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGlu dG8gd2hpY2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1 cmUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hlcmUgdGhlCisgICBpbmRleCBB TSBzaG91bGQgY29udGludWUgc2Nhbm5pbmcgZnJvbSAob3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJh bD4gb24gdGhlCisgICBmaXJzdCBjYWxsIGZvciB0aGUgc2NhbikuICBUaGUgaW5kZXggQU0gdXNl cyBpbmZvcm1hdGlvbiBmcm9tCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiB0byBk ZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQuCisgICBVbmxpa2UgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hlcmUgdGhlIGluZGV4IEFNIG1haW50YWlucyBp dHMKKyAgIG93biBzY2FuIHBvc2l0aW9uLCB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaXQgaXMgdGhlIGNhbGxlcgorICAgdGhhdCBjb250cm9scyB0aGUgcHJvZ3Jlc3Mgb2Yg dGhlIHNjYW4gdGhyb3VnaCB0aGUgaW5kZXguICBUaGUgY2FsbGVyCisgICB3aWxsIHR5cGljYWxs eSBwYXNzIHRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVkIGJhdGNoLCBidXQgdGhpcyBpcyBub3QK KyAgIGd1YXJhbnRlZWQgJm1kYXNoOyBmb3IgZXhhbXBsZSwgZHVyaW5nIG1hcmsvcmVzdG9yZSBh IHByZXZpb3VzbHkKKyAgIHJldHVybmVkIGJhdGNoIG1heSBiZSBwYXNzZWQgaW5zdGVhZC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgaW5kZXggcGFnZSBj b250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1cGxlLiAgQSBidWZmZXIKKyAg IHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBBTSBhcyBhbiBpbnRlcmxvY2sgYWdh aW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29t bWFuZD4uICBUaGUgdGFibGUgQU0gZHJvcHMgdGhpcyBpbnRlcmxvY2sKKyAgIGJ5IGNhbGxpbmcg PGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gd2hlbiBpdCBpcyBzYWZlIHRvIGRv IHNvLgorICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMg b24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50CisgICBkdXJpbmcgaW5kZXggc2NhbnMuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHRoYXQgaXMg cmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9u Z2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBpcyB1cCB0byB0aGUgdGFi bGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSBmcmVlZCAodmlhCisgICA8 ZnVuY3Rpb24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28g dGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBu ZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+ IHBhcmFtZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICByZWZlcmVuY2Ug ZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRlc2NyaWJlZCBm b3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisgICB0b286IGFu IGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhlIGluZGV4IGNv bnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywgbm90IHRoYXQg dGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhlYXAgb3Igd2ls bCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFs PiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5cyBpcyByZXF1 aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4K KyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+ IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2FuIHJhdGhlciB0 aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkKKyAgIGRpZmZl cmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGljaCBjYW4gc2V0 CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRlcGVuZGVudGx5 IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0 IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19y ZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3QgY3VycmVudGx5CisgICBz dXBwb3J0IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9ybSBvZiBh CisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIuICBJbmRleC1v bmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3Ry dWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQorICAgbG9jYWwgYnVmZmVy IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8L2xpdGVy YWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxyZWFkeSBkZXNjcmliZWQgZm9yIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgaW5kZXggYWNjZXNzIG1ldGhv ZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVyYWw+Cisg ICBmaWVsZCBpdHNlbGYuCisgICBXaXRoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4s IHRoZSBpbmRleCBBTSBzZXRzCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJh bD4gdG8gcG9pbnQgdG8gYSByZWNvbnN0cnVjdGVkCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8 L3N0cnVjdG5hbWU+IHdob3NlIGxpZmV0aW1lIGV4dGVuZHMgdW50aWwgdGhlIG5leHQKKyAgIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FsbCAmbWRhc2g7IG9ubHkgb25lIHR1cGxl IGlzIHZhbGlkIGF0IGEKKyAgIHRpbWUuICBXaXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4sIG11bHRpcGxlIGJhdGNoZXMgYXJlIGhlbGQgb3BlbgorICAgc2ltdWx0YW5lb3VzbHkg YW5kIGl0ZW1zIGFyZSBjb25zdW1lZCBhc3luY2hyb25vdXNseSBieSB0aGUgdGFibGUgQU0sIHNv CisgICB0aGVyZSBpcyBubyBlcXVpdmFsZW50IHNpbmdsZS10dXBsZSBsaWZldGltZSBmb3IgcGVy LWl0ZW0KKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9pbnRlcnMuICBU aGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUKKyAgIHByb3ZpZGVzIHBlci1iYXRjaCBzdG9yYWdlIGZv ciA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBjb3BpZXMsCisgICBidXQgaGFz IG5vIGFuYWxvZ291cyBtZWNoYW5pc20gZm9yIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0 bmFtZT4gZGF0YQorICAgKHVzZWQgYnkgaW5kZXggQU1zIHN1Y2ggYXMgPGFjcm9ueW0+R2lTVDwv YWNyb255bT4gYW5kCisgICA8YWNyb255bT5TUC1HaVNUPC9hY3JvbnltPiBmb3IgcmVjb25zdHJ1 Y3RlZCB0dXBsZXMgdGhhdCBtaWdodCBub3QgZml0IGluCisgICA8c3RydWN0bmFtZT5JbmRleFR1 cGxlPC9zdHJ1Y3RuYW1lPiBmb3JtYXQpLiAgVGhpcyBsaW1pdGF0aW9uIGNvdWxkIGJlCisgICBh ZGRyZXNzZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNz IG1ldGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4KKyAgIG9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1l dGhvZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRv ZXNuJ3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBp dHMKKyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVz dCBiZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5n Pgordm9pZAorYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAg ICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENh bGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhIGJh dGNoIHRoYXQKKyAgIGNvbnRhaW5zIGRlYWQgaXRlbXMsIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFE PC9saXRlcmFsPiBiaXRzIGluIHRoZSBiYXRjaCdzCisgICBpbmRleCBwYWdlLiAgVGhlIGJhdGNo J3MgaW5kZXggcGFnZSB3aWxsIG5vdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlcjsgdGhlCisgICBp bmRleCBBTSBtdXN0IGFjcXVpcmUgYW5kIHJlbGVhc2UgaXRzIG93biBsb2NrIChhbmQgcGluKSBv biB0aGUgaW5kZXggcGFnZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hpbGUgaW1wbGVt ZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWws CisgICBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93 cyBmdXR1cmUgc2NhbnMgdG8gc2tpcAorICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAgVGhl IGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseQorICAgc3VwcG9ydCA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxlbWVudHMKKyAgIDxsaXRl cmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBh Y2Nlc3MgbWV0aG9kcworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50 IHRoaXMgZmVhdHVyZS4KKyAgIFRoZSB0YWJsZSBBTSBtYXkgY2FsbAorICAgPGZ1bmN0aW9uPnRh YmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1z IGFzCisgICB0aGUgc2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNoIGNvbnRhaW5zIGFueSBz dWNoIGRlYWQgaXRlbXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9z dHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVkdXBsaWNh dGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxl ZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2NlbmRpbmcgb3JkZXIgKHRo YXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBhbHNvIGJhdGNoIG9yZGVy KSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4gIEluZGV4CisgICBhY2Nl c3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4gcHJvY2Vzc2luZyBkZWFk IGl0ZW1zOiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxkPiBhcnJh eSBjYW4gYmUgd2Fsa2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBpbmRleCBwYWdlJ3MgaXRl bSBwb2ludGVycywgc2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIG9mZnNldCBvcmRlci4KKyAg IFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAorICAgPGZ1bmN0aW9u PnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gaW4gYW55IHBhcnRpY3Vs YXIgb3JkZXIuCisgICAoSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgPHN0cnVjdGZpZWxkPmtpbGxfcHJpb3Jf dHVwbGU8L3N0cnVjdGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRlYWQKKyAgIHR1 cGxlczsgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2ZpbGVuYW1lPiBp bXBsZW1lbnRhdGlvbgorICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4pCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVt c2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTQorICAgc2hvdWxkIHZlcmlmeSB0aGF0IHRo ZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0Y2ggd2FzCisg ICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgYmF0Y2gncyA8c3RydWN0ZmllbGQ+bHNuPC9zdHJ1Y3Rm aWVsZD4gZmllbGQgcmVjb3JkcworICAgdGhlIHBhZ2UgTFNOIGF0IHRoZSB0aW1lIHRoZSBpbmRl eCBwYWdlIGxvY2sgd2FzIHJlbGVhc2VkIGJ5CisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2Jh dGNoX3VubG9jazwvZnVuY3Rpb24+IChzZXQgYXV0b21hdGljYWxseSBieSB0aGUKKyAgIGNvcmUg Y29kZSwgdGhvdWdoIGluZGV4IEFNcyBhcmUgbm90IHN0cmljdGx5IHJlcXVpcmVkIHRvIHVzZQor ICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPikuICBUaGUg aW5kZXggQU0gc2hvdWxkCisgICByZS1yZWFkIHRoZSBwYWdlLCBjb21wYXJlIHRoZSBjdXJyZW50 IHBhZ2UgTFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3Rm aWVsZD4sIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVy YWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZhbmNlZCBMU04KKyAgIGlu ZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7IHBvc3NpYmx5IGJ5Cisg ICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFwIFRJRHMgJm1kYXNoOyBz byBpdCB3b3VsZCBiZSB1bnNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3Rp bGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCB0dXBsZXMuICBTaW5jZQorICAgPGxpdGVyYWw+TFBf REVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiBoaW50LCBpdCBp cworICAgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0aGlzIExTTiBjb21wYXJp c29uIHRlY2huaXF1ZSByZXF1aXJlcworICAgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtlIChtb25v dG9uaWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZvcgorICAgcmVsYXRpb25z IHdoZXJlIFdBTCBpcyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMgYXJlIG5vdCBhdmFp bGFibGUgaW4KKyAgIHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGluZGV4IGltcGxlbWVudGF0 aW9uIGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZSBvZiB0aGlzIHRlY2huaXF1ZS4gIEFuIGlu ZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcworICAgY2FuIHN0aWxsIHBy b3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3VsZCBz aW1wbHkKKyAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUg V0FMIChpLmUuLCB3aGVuCisgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5jdGlv bj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KKyAgIHdvdWxkIGJlIHVucmVs aWFibGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1raWxsaXRl bXNiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSW5kZXgKKyAgIGFjY2Vz cyBtZXRob2RzIHRoYXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVwbGVzIHdpdGgKKyAgIDxs aXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3ZpZGUgaXQ7IHRob3NlIHRo YXQgZG9uJ3QgY2FuCisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4g ZXZlbiB3aGVuIHRoZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u Pi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW11bmd1 YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICBJbmRleFNjYW5C YXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBB TSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2g8L2Z1bmN0aW9u Pikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9j ayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBpbmRleAorICAgbGVhZiBw YWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5IGhvbGQg YSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCisgICBpbnRlcmxvY2tz LCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0 LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBp bi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBmb3IgZGV0YWlscyBv biBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlv bgorICAgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2gu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBtYXkgY2hvb3NlIHRvIHJl dGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4KKyAgIGludGVybmFs IHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlu bmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hlbWUgdGhhdCByZXRhaW5z IGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUgc3VyZSB0bworICAg ZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBleGFtcGxlIHdoZW4gPGZ1 bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVuY3Rpb24+YW1lbmRzY2Fu PC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0aGUKKyAgIG51bWJl ciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZvaWQgZXhoYXVzdGluZyB0 aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUaGUgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMg cmVxdWlyZWQgZm9yIGFueSBpbmRleAorICAgYWNjZXNzIG1ldGhvZCB0aGF0IHByb3ZpZGVzIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxw cm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDI3LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90 aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRl IChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3 YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQg aW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAor ICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkg Z2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdo ZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAog ICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4 MSw2ICsxMDQwLDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1 Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW50ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBiYXRj aCBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAoPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9i YXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBUaGUgY29udmVudGlvbiBpcyB0aGF0IG9u bHkKKyAgIG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1cmluZyA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAgIG91dHN0YW5kaW5nIGlu IHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50bHkuICBUbyBtYWludGFpbiB0aGlzCisg ICBvbmUtYmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwgdGhlIGluZGV4IEFNIGl0c2VsZiByZWxl YXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZlcworICAgdGhhdCBiYXRj aCdzIGluZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdlbmVyYXRlIHRoZSBuZXh0IGJhdGNoICZt ZGFzaDsgdGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0IGV4dHJhY3RzIG5hdmlnYXRpb24gc3Rh dGUgKHN1Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQorICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJh dGNoPC9saXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0bworICAgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZyA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0 ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCisgICBhbmQgY29yZSBjb2Rl LCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZQorICAgPGZ1bmN0 aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKKyAgIHJlZmVyZW5jZSBleGFtcGxlLiAgVGhl IHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKKyAgIHRo ZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9uPiBjYWxs LCBhdm9pZGluZworICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24gZHVyaW5nIHRoZSBiaXRt YXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZApA QCAtNzk1LDMyICsxMDc3LDQ0IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAg PHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mg c2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJyZW50IHNj YW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBvbmUKLSAg IHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSB0aGUgaW5kZXgg QU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRoZSBzY2FuJ3MKKyAgIGxv Z2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJlcyB0aGUgaW5kZXggQU0gdG8gcmVz ZXQgYW55IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJv Z3Jlc3MuICBGb3IgZXhhbXBsZSwgQi10cmVlIG11c3QKKyAgIHJlc2V0IHRoZSBhcnJheSBrZXlz IHVzZWQgYnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVyYWw+IHF1YWwKKyAgIGV2 YWx1YXRpb24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzLiAgVGhpcyBjYWxsYmFjayBp cyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBwcm9jZXNzIGEgYmF0 Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1c2VkIHdoZW4gdGhlIGJh dGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9zaXRpb24gaXMKKyAgIGFi b3V0IHRvIGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0 aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBp ZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRv ZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0ZmllbGQ+IGZpZWxk IGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVj dCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5j dGlvbj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBkaXJlY3Rpb24gY2hhbmdl LCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0aGUgYmF0Y2gncwor ICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHJlZmxlY3QgdGhlIG5l dyBzY2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4gIFRoZSBpbmRleCBB TSBzaG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdoZW4gcmVzZXR0aW5nIGFu eSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkgdGhlIHNjYW4gaXMKKyAg IHByb2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFya2VkIHBvc2l0aW9uLCB0 aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGlzIG5vdCBtb2Rp ZmllZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdoZW4gdGhlIGJhdGNoIHdh cyBvcmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhlIGJhdGNoCisgICBwYXNz ZWQgdG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0aGUgYmF0Y2ggdGhhdCB3 aWxsIGJlIHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2FuLgogICA8L3BhcmE+CiAKICAgPHBh cmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNj YW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3Qg cmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUg PGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJv dmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJ ZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgot ICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRo YXQgaGF2ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQgd2hlbiB0aGUKKyAgIHNj YW4gcG9zaXRpb24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8 L2Z1bmN0aW9uPgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgd2l0aCBubyBzdWNoIHN0 YXRlIG1heSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gdG8g TlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNh biBvbmx5IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIG9y ZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgor ICAgaW50ZXJmYWNlLiAgKE5vdGUgdGhhdCB3aGVuIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJk PC9zdHJ1Y3RmaWVsZD4gaXMKKyAgIGZhbHNlLCB0aGUgc2NhbiBkaXJlY3Rpb24gY2Fubm90IGNo YW5nZSwgc28KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gd2lsbCBvbmx5IGJl IGNhbGxlZCBkdWUgdG8gbWFyay9yZXN0b3JlCisgICBpbiB0aGF0IGNhc2UuKQogICA8L3BhcmE+ CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTI2OSw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBB Y2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0dXJhbCBv cmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNob3VsZCBzZXQK ICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuCisg ICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNhcGFiaWxp dHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3QgdXNlIGJ0cmVl LWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBlcXVhbGl0eSBh bmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsxMjkwLDQy IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5 LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9u PC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAgb3JkZXJpbmcgb3Bl cmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9zdHJ1Y3Rm aWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhlcmUgaXMgY3VycmVudGx5 IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcgdmFsdWVzCisgICB3 aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlzIHdvdWxkIHJlcXVpcmUg YW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCBkb2VzIG5vdCB5ZXQg ZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUgdmVyc2lvbiBvZiA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8 bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2FuIGJlIGVp dGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBub3JtYWwg Y2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LiAg SWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+ IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCB0aGVu IHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nhbm5lZCBi YWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sg ZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0dXJu Ci0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0aGFuIHRo ZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBvbmx5IG9j Y3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3Jk ZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2FsbCwgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2Ug dGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIGNvbnRhaW5p bmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFuIHRoZSBiYXRjaCBj b250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4K ICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRy eS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4g aXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGly ZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVy bmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0 IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24g bmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3Bv czwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9z aXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0g ICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBh bmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRv IE5VTEwKLSAgIGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3RlPm1hcmtpbmc8L3F1b3Rl PiBhIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvIHRoZQorICAgbWFy a2VkIHBvc2l0aW9uLiAgVGhlIGNvcmUgZXhlY3V0b3IgbWFuYWdlcyB0aGUgcHJvY2VzcyBvZiBz YXZpbmcgYW5kCisgICByZXN0b3JpbmcgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSB3aXRob3V0IGV4 cGxpY2l0IGNvb3JkaW5hdGluZyB3aXRoIHRoZQorICAgdGFibGUgQU0uICBIb3dldmVyLCBpdCB3 aWxsIGNhbGwgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgor ICAgY2FsbGJhY2sgYXMgbmVlZGVkIHdoZW4gcmVzdG9yaW5nIGEgbWFyaywgdG8gaW52YWxpZGF0 ZSBhbnkgaW5kZXggQU0gc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHBy b2dyZXNzIG9mIHRoZSBzY2FuIChzdWNoIGFzIGFycmF5IGtleQorICAgc3RhdGUpLiAgU2VlIHRo ZSBkZXNjcmlwdGlvbiBvZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGluCisgICA8 eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0 aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlm IGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAg IGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVs ZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQg ZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5k IHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZv cgpAQCAtMTA0NCwxMiArMTM0OCwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBl IGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRt YXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4g YmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2NrL3VubG9jayBj eWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0gICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIGFz IHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGxzLCBidXQg d2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0ZWFkIG9mIHVzaW5nIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAorICAgPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBpbiBvbmUgY2FsbC4g IFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4gd2l0aCBhbiA8 cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxsb3dzIGVmZmljaWVu dCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWluaW5nCisgICBtYXRj aGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3Vs ZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2Fs bHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAgIHNpbXBsaWZ5IG1h dHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHJl dHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciByZXN0b3Jpbmcgc2Nh biBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHksIHRoZSB0dXBsZXMgYXJl IHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEwNTksMTUgKzEzNjUsMTUg QEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHks IE9pZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBpbmRl eC1vbmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBz aW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZgogICAgaW5kZXgg dHVwbGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4KLSAg IGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLCB3 aXRoIGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgt bG9ja2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ IGRvZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIgaXQgcmV0dXJucyAo c2ltaWxhcmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgd2l0aAor ICAgYW4gTVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRl eC1sb2NraW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMg cGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50 YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2Es IGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9y IHRoZSBvdGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTExMjMsMTEgKzE0MjksMTcg QEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHks IE9pZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAgICAg ICA8cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAgICAg ICBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkKLSAg ICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFtYnVs a2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20gcGFn ZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAgICBm b3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJlIGhl bGQgb24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bworICAg ICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IG11 c3QgYWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwgd2hp Y2ggd2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGluIG9u IHRoYXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBz Y2FucywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGluIGRp cmVjdGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5z LCB0aGUgaW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4gb24gZWFjaCBiYXRjaCdz IGluZGV4IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSksCisgICAgICAg d2hpbGUgdGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVybG9jayBpcyBkcm9wcGVk IHZpYQorICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+LgorICAgICAg IFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJh PgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTEzOCwzOSArMTQ1 MCw5MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZh bWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAg VGhpcyBjcmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBpdGVtCiAgICBudW1iZXIg aXMgc3RpbGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0LCBzaW5jZSBhbiBlbXB0 eQotICAgaXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rpb24+aGVhcF9mZXRjaCgp PC9mdW5jdGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qgd2lsbCBzaW1wbHkgYmUg dHJlYXRlZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAgIHRoaXJkIGJhY2tlbmQg aGFzIGFscmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21ldGhpbmcgZWxzZT8KICAg IFdoZW4gdXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRoZXJlIGlzIG5vIHByb2Js ZW0gYmVjYXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xvdCBpcyBjZXJ0YWluIHRv IGJlIHRvbyBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3QuICBIb3dldmVyLCB3aXRo IGEgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAgICA8bGl0ZXJhbD5TbmFw c2hvdEFueTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhY2NlcHQgYW5kIHJl dHVybgotICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNoIHRoZSBzY2FuIGtleXMu ICBXZSBjb3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJpbyBieSByZXF1aXJpbmcg dGhlIHNjYW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3QgdGhlIGhlYXAgcm93IGlu IGFsbCBjYXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3RlYWQsCi0gICB3ZSB1 c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRlIHRoYXQgdGhl IHJlYWRlcgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVvdGU+IGZyb20g dGhlIGluZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBlbnRyeS4gIE1ha2luZyA8 ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1 cmVzCi0gICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRlbGV0ZSB0aGUg aGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3aXRoIGl0LiAgVGhpcyBz b2x1dGlvbiBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nCi0gICBv dmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJlIGFjdHVhbGx5IGlzIGEg Y29uZmxpY3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUgdGhhdCBkb2VzIG5vdCBu ZWNlc3NhcmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdlIGNhbiBvcHRpb25hbGx5 IHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5kaWNhdGUKKyAgIHRo YXQgdGhlIHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0PC9xdW90ZT4gZnJv bSB0aGUgaW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFwIGVudHJ5LiAgTWFraW5n IDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxvY2sgb24gc3VjaCBhIHBp biBlbnN1cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgZGVsZXRlCisg ICB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25lIHdpdGggaXQuICBUaGlz IHNvbHV0aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5n IG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAgIHRoZXJlIGFjdHVhbGx5 IGlzIGEgY29uZmxpY3QuICBXaGVuIHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1jb21wbGlhbnQKKyAg IHNuYXBzaG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgc25h cHNob3QgaXRzZWxmIHdpbGwKKyAgIHJlamVjdCBhbnkgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3Vw YW50IChzZWUgYmVsb3cpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGlzIHNvbHV0aW9u IHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46 IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1lZGlhdGVseSBhZnRlciBz Y2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnkuICBUaGlzIGlzIGV4cGVu c2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5bmNocm9ub3Vz PC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9tIHRoZSBpbmRl eCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBsYXRlciwgcmVx dWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFkIGFuZCBjYW4gYWxsb3cg YSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAgUGVyIHRoZSBhYm92ZSBh bmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJvYWNoIGZvcgotICAgbm9u LU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91cyBzY2FuIGlzIHdv cmthYmxlCi0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBzaG90LgorICAgVGhpcyBz b2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW5k ZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB0aGUgdGFibGUgQU0g bXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5n IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcworICAgZXhwZW5zaXZlIGZv ciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bworICAgYWxsb3cg c2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBjb2xsZWN0aW5nIGJh dGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywgdGhlIHRhYmxlIEFN IGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxvY2tzIHdlbGwgYWhl YWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNocm9ub3VzCisgICBJ L08gd2hlbiBhdmFpbGFibGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNz IHBhdHRlcm4uICBOb3QKKyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcgYXN5bmNocm9ub3VzIGlu IHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcworICAgZGVzaWduZWQgdG8gYWxsb3cgaXQu ICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25vdXMKKyAg IGFwcHJvYWNoIGZvciBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4gYXN5bmNo cm9ub3VzIHNjYW4gaXMKKyAgIHdvcmthYmxlIGZvciBhIHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mgc25h cHNob3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMgbm90Ci0g ICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJl Zm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21w bGlhbnQgc25hcHNob3RzLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0gcmVhZHMgbXVsdGlwbGUg aW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBjYW5ub3QKKyAgIHByYWN0 aWNhbGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5lb3VzbHkuICBUaGVy ZWZvcmUsCisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1jb21wbGlhbnQKKyAgIHNu YXBzaG90IGlzIGluIHVzZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hldGhlciBhIGJh dGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBhbiBpbmRleCBwYWdlIGJ1 ZmZlcgorICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkIGlzIGNvbnRy b2xsZWQgYnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kgdGhhdCBpcyBkZXRlcm1p bmVkIHdoZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMKKyAgIG5vdCB1bmRlciB0 aGUgY29udHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0YWJsZSBBTS4gIFRoZSBz Y2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxk PiBmbGFnIGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQgYmFzZWQgb24gdHdvIGNy aXRlcmlhIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFjaGluZXJ5OgorICAgd2hl dGhlciB0aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCBhbmQgd2hldGhl ciBpdCBpcyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNhbGx5LAorICAgPHN0cnVj dGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUgd2hlbiB0 aGUgc2NhbiB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8ZW1waGFzaXM+bm90PC9l bXBoYXNpcz4gYW4gaW5kZXgtb25seSBzY2FuLiAgV2hlbgorICAgPHN0cnVjdGZpZWxkPmJhdGNo SW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRoZSBpbnRlcmxvY2sgaXMK KyAgIGRyb3BwZWQgaW5zaWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPC9m dW5jdGlvbj4gKGJlZm9yZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRh YmxlIEFNKSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBhbgorICAgTVZDQyBzbmFw c2hvdCB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgTVZDQyB2aXNp YmlsaXR5CisgICBjaGVjayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsgZXZlbiBpZiA8Y29tbWFu ZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhlIG5ldyBvY2N1cGFudCBj YW5ub3QgcGFzcyB0aGUgc25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMgZmFsc2UsIHRoZQorICAg aW50ZXJsb2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBleHBsaWNpdGx5IGNhbGxz CisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiwgYmVjYXVzZSB0aGUgc2Nh biBjYW5ub3QgcmVseSBvbiB0aGF0CisgICBoZWFwIHBhZ2UgTVZDQyBiYWNrc3RvcC4gIEZvciBu b24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQyBzbmFwc2hvdCB0bworICAgcmVqZWN0IGEg cmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBpbmRleC1vbmx5IHNjYW5z LCBldmVuCisgICB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5cGljYWxseSBhdm9p ZHMgdmlzaXRpbmcgdGhlIGhlYXAgcGFnZQorICAgYWx0b2dldGhlciAodXNpbmcgdGhlIHZpc2li aWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjayB0aGF0IHdvdWxkCisgICBjYXRj aCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBib3RoIGNhc2VzIHRoZSBp bnRlcmxvY2sgb24KKyAgIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJldmVudHMgPGNvbW1hbmQ+ VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlY3ljbGluZworICAgVElEcyB3aGlsZSB0aGUgc2NhbiBp cyBzdGlsbCBpbiBmbGlnaHQuICBJbiBhbGwgY2FzZXMsIHRoZSB0YWJsZSBBTSBkZWNpZGVzCisg ICA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwgPGZ1bmN0aW9uPmFtdW5ndWFyZGJh dGNoPC9mdW5jdGlvbj47IHRoZQorICAgaW5kZXggQU0gZGVjaWRlcyA8ZW1waGFzaXM+d2hhdDwv ZW1waGFzaXM+IHRvIHJlbGVhc2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJs eSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiBpcyBpbmhl cmVudGx5CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURzIGFyZSBjb2xsZWN0ZWQg aW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBiZWdpbnMuICBTdWNoIHNj YW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LAorICAgYW5k IHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRvIGhvbGQgaW5kZXggcGFn ZSBwaW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0 aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFuYWdlCisgICBw aW4gbGlmZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFibGUgQU0gaW50ZXJt ZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiku ICBUaGUgaW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3VycmVudCBpbmRleCBw YWdlIHVudGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3IgZW5kcy4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf dGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggODA4 MjliMjM5Li5jZjBiYTViMGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3Rh YmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE3 MywxMiArMTE3MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAK ICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVy YWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhh bSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAg ICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxl IHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhj bHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQg YW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBT byBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5H aVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVp dGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1n ZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAg ICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1 c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50 IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9u IGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3Jk aW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGlj ZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwv YWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3Bh cmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhf YW0uYwppbmRleCAzMWY4ZDJiODEuLmUyYjg2NWZiNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0LDEwICszMzQsMTIgQEAg ZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGRpYmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1n ZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFy ZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5kc2NhbiA9IGRp ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJ LmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJ CS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEws CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGM5ZGExZjkxYy4uYzkzN2Q1NDFlIDEwMDY0 NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjA2LDYgKzIwNiw3IEBAIEJPT0wKIEJPT0xFQU4K IEJPWAogQlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2FsbGJh Y2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0yMzMsOCArMjM0LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQog QlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Q b3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNw b29sCkBAIC0yNjMsNiArMjYyLDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhh bmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5n SXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlm eV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2Rp ZnlfZnVuY3Rpb24KQEAgLTEyMzUsNiArMTIzNyw3IEBAIEhiYUxpbmUKIEhlYWRsaW5lSnNvblN0 YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitIZWFwQmF0Y2hEYXRh CiBIZWFwQ2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQogSGVhcFBhZ2VGcmVl emUKQEAgLTEzMTQsNiArMTMxNyw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgK IEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2Nh bkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2Nhbklu c3RydW1lbnRhdGlvbgpAQCAtMzUyNywxOCArMzUzMiwxNyBAQCBhbWNhbnJldHVybl9mdW5jdGlv bgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3RpbWF0 ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1nZXRiaXRtYXBf ZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgog YW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRj bGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgog YW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5f ZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rp b24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rp b24KLS0gCjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0001-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Disposition: attachment; filename="v19-0001-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7y17 RnJvbSA3NDJkY2JlYTdkMTg0NDQzZDJjNGVmM2MwOTViNjBmNDdmODcwZjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMDA6MjI6MTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwMS8xOF0g TW92ZSBoZWFwYW1faGFuZGxlci5jIGluZGV4IHNjYW4gY29kZSB0byBuZXcgZmlsZS4KCk1vdmUg dGhlIGhlYXBhbSBpbmRleCBmZXRjaCBjYWxsYmFja3MgKGluZGV4X2ZldGNoX2JlZ2luLAppbmRl eF9mZXRjaF9yZXNldCwgaW5kZXhfZmV0Y2hfZW5kLCBhbmQgaW5kZXhfZmV0Y2hfdHVwbGUpIGlu dG8gYSBuZXcKZGVkaWNhdGVkIGZpbGUuICBBbHNvIG1vdmUgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl ciBvdmVyLiAgVGhpcyBpcyBhCnB1cmVseSBtZWNoYW5pY2FsIG1vdmUgd2l0aCBubyBmdW5jdGlv bmFsIGltcGFjdC4KClVwY29taW5nIHdvcmsgdG8gYWRkIGEgc2xvdC1iYXNlZCB0YWJsZSBBTSBp bnRlcmZhY2UgZm9yIGluZGV4IHNjYW5zCndpbGwgc3Vic3RhbnRpYWxseSBleHBhbmQgdGhpcyBj b2RlLiAgS2VlcGluZyBpdCBpbiBoZWFwYW1faGFuZGxlci5jCndvdWxkIGNsdXR0ZXIgYSBmaWxl IHdob3NlIHByaW1hcnkgcm9sZSBpcyB0byB3aXJlIHVwIHRoZSBUYWJsZUFtUm91dGluZQpjYWxs YmFja3MuICBCaXRtYXAgaGVhcCBzY2FucyBhbmQgc2VxdWVudGlhbCBzY2FucyB3b3VsZCBiZW5l Zml0IGZyb20Kc2ltaWxhciBzZXBhcmF0aW9uIGluIHRoZSBmdXR1cmUuCgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5anhv YWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgfCAxNjEgLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgfCAxMTEgLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDI5MSArKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCAyNzUgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDYwMThkYWNmMC4uM2RiZGQ0NTQ0IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCkBAIC0zNjYsOSArMzY2LDYgQEAgZXh0ZXJuIGJvb2wgaGVhcF9nZXRu ZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLAogCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBoZWFwX2ZldGNoKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLCBCdWZmZXIgKnVz ZXJidWYsIGJvb2wga2VlcF9idWYpOwotZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl cihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkgICBCdWZmZXIg YnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKLQkJCQkJCQkJ ICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CiAKIGV4dGVybiB2b2lkIGhlYXBf Z2V0X2xhdGVzdF90aWQoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIApA QCAtNDMwLDYgKzQyNywxOCBAQCBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJ CSAgVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogCisvKiBpbiBoZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyAqLworZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0 ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwg SGVhcFR1cGxlIGhlYXBUdXBsZSwKKwkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmly c3RfY2FsbCk7CitleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisJCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVh cF9jb250aW51ZSwKKwkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CisKIC8qIGluIGhlYXAvcHJ1 bmVoZWFwLmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQoUmVsYXRpb24gcmVs YXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCUJ1ZmZlciAqdm1idWZmZXIsIGJvb2wgcmVs X3JlYWRfb25seSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlCmluZGV4IDM5NDUzNDE3Mi4uMWQy N2NjYjkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWhlYXBh bS5vIFwKIAloZWFwYW1faGFuZGxlci5vIFwKKwloZWFwYW1faW5kZXhzY2FuLm8gXAogCWhlYXBh bV92aXNpYmlsaXR5Lm8gXAogCWhlYXBhbV94bG9nLm8gXAogCWhlYXB0b2FzdC5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggZDM0MTM2ZDJlLi4wZjZlYjgyMGEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCkBAIC0xNzY0LDE2NyArMTc2NCw2IEBAIGhlYXBfZmV0Y2goUmVsYXRp b24gcmVsYXRpb24sCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICoJaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QK LSAqCi0gKiBPbiBlbnRyeSwgKnRpZCBpcyB0aGUgVElEIG9mIGEgdHVwbGUgKGVpdGhlciBhIHNp bXBsZSB0dXBsZSwgb3IgdGhlIHJvb3QKLSAqIG9mIGEgSE9UIGNoYWluKSwgYW5kIGJ1ZmZlciBp cyB0aGUgYnVmZmVyIGhvbGRpbmcgdGhpcyB0dXBsZS4gIFdlIHNlYXJjaAotICogZm9yIHRoZSBm aXJzdCBjaGFpbiBtZW1iZXIgc2F0aXNmeWluZyB0aGUgZ2l2ZW4gc25hcHNob3QuICBJZiBvbmUg aXMKLSAqIGZvdW5kLCB3ZSB1cGRhdGUgKnRpZCB0byByZWZlcmVuY2UgdGhhdCB0dXBsZSdzIG9m ZnNldCBudW1iZXIsIGFuZAotICogcmV0dXJuIHRydWUuICBJZiBubyBtYXRjaCwgcmV0dXJuIGZh bHNlIHdpdGhvdXQgbW9kaWZ5aW5nICp0aWQuCi0gKgotICogaGVhcFR1cGxlIGlzIGEgY2FsbGVy LXN1cHBsaWVkIGJ1ZmZlci4gIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgd2UgcmV0dXJuCi0gKiB0 aGUgdHVwbGUgaGVyZSwgaW4gYWRkaXRpb24gdG8gdXBkYXRpbmcgKnRpZC4gIElmIG5vIG1hdGNo IGlzIGZvdW5kLCB0aGUKLSAqIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVyIG9uIHJldHVybiBhcmUg dW5kZWZpbmVkLgotICoKLSAqIElmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCB3ZSBjaGVjayBub24t dmlzaWJsZSB0dXBsZXMgdG8gc2VlIGlmIHRoZXkgYXJlCi0gKiBnbG9iYWxseSBkZWFkOyAqYWxs X2RlYWQgaXMgc2V0IHRydWUgaWYgYWxsIG1lbWJlcnMgb2YgdGhlIEhPVCBjaGFpbgotICogYXJl IHZhY3V1bWFibGUsIGZhbHNlIGlmIG5vdC4KLSAqCi0gKiBVbmxpa2UgaGVhcF9mZXRjaCwgdGhl IGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBwaW4gYW5kIChhdCBsZWFzdCkgc2hhcmUKLSAqIGxv Y2sgb24gdGhlIGJ1ZmZlcjsgaXQgaXMgc3RpbGwgcGlubmVkL2xvY2tlZCBhdCBleGl0LgotICov Ci1ib29sCi1oZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24g cmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCi0JCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LCBIZWFw VHVwbGUgaGVhcFR1cGxlLAotCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxs KQotewotCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JVHJhbnNhY3Rpb25J ZCBwcmV2X3htYXggPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQlCbG9ja051bWJlciBibGtubzsK LQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCWJvb2wJCWF0X2NoYWluX3N0YXJ0OwotCWJvb2wJCXZh bGlkOwotCWJvb2wJCXNraXA7Ci0JR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3QgPSBOVUxMOwotCi0J LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIHByZXZpb3VzIGNhbGwgcmV0dXJuZWQg YSAobGl2ZSEpIHR1cGxlICovCi0JaWYgKGFsbF9kZWFkKQotCQkqYWxsX2RlYWQgPSBmaXJzdF9j YWxsOwotCi0JYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0Jb2ZmbnVt ID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKTsKLQlhdF9jaGFpbl9zdGFydCA9IGZp cnN0X2NhbGw7Ci0Jc2tpcCA9ICFmaXJzdF9jYWxsOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNz ZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZmZlcikgPT0gYmxrbm8pOwotCi0JLyogU2NhbiB0aHJvdWdoIHBvc3NpYmxlIG11 bHRpcGxlIG1lbWJlcnMgb2YgSE9ULWNoYWluICovCi0JZm9yICg7OykKLQl7Ci0JCUl0ZW1JZAkJ bHA7Ci0KLQkJLyogY2hlY2sgZm9yIGJvZ3VzIFRJRCAqLwotCQlpZiAob2ZmbnVtIDwgRmlyc3RP ZmZzZXROdW1iZXIgfHwgb2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkKLQkJ CWJyZWFrOwotCi0JCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCi0JCS8qIGNo ZWNrIGZvciB1bnVzZWQsIGRlYWQsIG9yIHJlZGlyZWN0ZWQgaXRlbXMgKi8KLQkJaWYgKCFJdGVt SWRJc05vcm1hbChscCkpCi0JCXsKLQkJCS8qIFdlIHNob3VsZCBvbmx5IHNlZSBhIHJlZGlyZWN0 IGF0IHN0YXJ0IG9mIGNoYWluICovCi0JCQlpZiAoSXRlbUlkSXNSZWRpcmVjdGVkKGxwKSAmJiBh dF9jaGFpbl9zdGFydCkKLQkJCXsKLQkJCQkvKiBGb2xsb3cgdGhlIHJlZGlyZWN0ICovCi0JCQkJ b2ZmbnVtID0gSXRlbUlkR2V0UmVkaXJlY3QobHApOwotCQkJCWF0X2NoYWluX3N0YXJ0ID0gZmFs c2U7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBlbHNlIG11c3QgYmUgZW5kIG9mIGNoYWlu ICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFVwZGF0ZSBoZWFwVHVwbGUgdG8gcG9p bnQgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIEhPVCBjaGFpbiB3ZSdyZQotCQkgKiBjdXJyZW50bHkg aW52ZXN0aWdhdGluZy4gSGF2aW5nIHRfc2VsZiBzZXQgY29ycmVjdGx5IGlzIGltcG9ydGFudAot CQkgKiBiZWNhdXNlIHRoZSBTU0kgY2hlY2tzIGFuZCB0aGUgKlNhdGlzZmllcyByb3V0aW5lIGZv ciBoaXN0b3JpY2FsCi0JCSAqIE1WQ0Mgc25hcHNob3RzIG5lZWQgdGhlIGNvcnJlY3QgdGlkIHRv IGRlY2lkZSBhYm91dCB0aGUgdmlzaWJpbGl0eS4KLQkJICovCi0JCWhlYXBUdXBsZS0+dF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCQloZWFwVHVwbGUt PnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKLQkJaGVhcFR1cGxlLT50X3RhYmxlT2lkID0g UmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7Ci0JCUl0ZW1Qb2ludGVyU2V0KCZoZWFwVHVwbGUt PnRfc2VsZiwgYmxrbm8sIG9mZm51bSk7Ci0KLQkJLyoKLQkJICogU2hvdWxkbid0IHNlZSBhIEhF QVBfT05MWSB0dXBsZSBhdCBjaGFpbiBzdGFydC4KLQkJICovCi0JCWlmIChhdF9jaGFpbl9zdGFy dCAmJiBIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCQlicmVhazsKLQotCQkvKgot CQkgKiBUaGUgeG1pbiBzaG91bGQgbWF0Y2ggdGhlIHByZXZpb3VzIHhtYXggdmFsdWUsIGVsc2Ug Y2hhaW4gaXMKLQkJICogYnJva2VuLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHByZXZfeG1heCkgJiYKLQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHByZXZfeG1heCwKLQkJCQkJ CQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKSkKLQkJCWJyZWFr OwotCi0JCS8qCi0JCSAqIFdoZW4gZmlyc3RfY2FsbCBpcyB0cnVlIChhbmQgdGh1cywgc2tpcCBp cyBpbml0aWFsbHkgZmFsc2UpIHdlJ2xsCi0JCSAqIHJldHVybiB0aGUgZmlyc3QgdHVwbGUgd2Ug ZmluZC4gIEJ1dCBvbiBsYXRlciBwYXNzZXMsIGhlYXBUdXBsZQotCQkgKiB3aWxsIGluaXRpYWxs eSBiZSBwb2ludGluZyB0byB0aGUgdHVwbGUgd2UgcmV0dXJuZWQgbGFzdCB0aW1lLgotCQkgKiBS ZXR1cm5pbmcgaXQgYWdhaW4gd291bGQgYmUgaW5jb3JyZWN0IChhbmQgd291bGQgbG9vcCBmb3Jl dmVyKSwgc28KLQkJICogd2Ugc2tpcCBpdCBhbmQgcmV0dXJuIHRoZSBuZXh0IG1hdGNoIHdlIGZp bmQuCi0JCSAqLwotCQlpZiAoIXNraXApCi0JCXsKLQkJCS8qIElmIGl0J3MgdmlzaWJsZSBwZXIg dGhlIHNuYXBzaG90LCB3ZSBtdXN0IHJldHVybiBpdCAqLwotCQkJdmFsaWQgPSBIZWFwVHVwbGVT YXRpc2ZpZXNWaXNpYmlsaXR5KGhlYXBUdXBsZSwgc25hcHNob3QsIGJ1ZmZlcik7Ci0JCQlIZWFw Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdE91dCh2YWxpZCwgcmVsYXRpb24sIGhlYXBUdXBs ZSwKLQkJCQkJCQkJCQkJCWJ1ZmZlciwgc25hcHNob3QpOwotCi0JCQlpZiAodmFsaWQpCi0JCQl7 Ci0JCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIodGlkLCBvZmZudW0pOwotCQkJCVByZWRp Y2F0ZUxvY2tUSUQocmVsYXRpb24sICZoZWFwVHVwbGUtPnRfc2VsZiwgc25hcHNob3QsCi0JCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKGhlYXBUdXBsZS0+dF9kYXRhKSk7Ci0JCQkJaWYg KGFsbF9kZWFkKQotCQkJCQkqYWxsX2RlYWQgPSBmYWxzZTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CX0KLQkJfQotCQlza2lwID0gZmFsc2U7Ci0KLQkJLyoKLQkJICogSWYgd2UgY2FuJ3Qgc2VlIGl0 LCBtYXliZSBubyBvbmUgZWxzZSBjYW4gZWl0aGVyLiAgQXQgY2FsbGVyCi0JCSAqIHJlcXVlc3Qs IGNoZWNrIHdoZXRoZXIgYWxsIGNoYWluIG1lbWJlcnMgYXJlIGRlYWQgdG8gYWxsCi0JCSAqIHRy YW5zYWN0aW9ucy4KLQkJICoKLQkJICogTm90ZTogaWYgeW91IGNoYW5nZSB0aGUgY3JpdGVyaW9u IGhlcmUgZm9yIHdoYXQgaXMgImRlYWQiLCBmaXggdGhlCi0JCSAqIHBsYW5uZXIncyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlKCkgZnVuY3Rpb24gdG8gbWF0Y2guCi0JCSAqLwotCQlpZiAoYWxs X2RlYWQgJiYgKmFsbF9kZWFkKQotCQl7Ci0JCQlpZiAoIXZpc3Rlc3QpCi0JCQkJdmlzdGVzdCA9 IEdsb2JhbFZpc1Rlc3RGb3IocmVsYXRpb24pOwotCi0JCQlpZiAoIUhlYXBUdXBsZUlzU3VyZWx5 RGVhZChoZWFwVHVwbGUsIHZpc3Rlc3QpKQotCQkJCSphbGxfZGVhZCA9IGZhbHNlOwotCQl9Ci0K LQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIEhPVCBjaGFpbiBjb250aW51ZXMgcGFzdCB0aGlz IHR1cGxlOyBpZiBzbyBmZXRjaAotCQkgKiB0aGUgbmV4dCBvZmZudW0gYW5kIGxvb3AgYXJvdW5k LgotCQkgKi8KLQkJaWYgKEhlYXBUdXBsZUlzSG90VXBkYXRlZChoZWFwVHVwbGUpKQotCQl7Ci0J CQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRf Y3RpZCkgPT0KLQkJCQkgICBibGtubyk7Ci0JCQlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNl dE51bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCk7Ci0JCQlhdF9jaGFpbl9zdGFydCA9 IGZhbHNlOwotCQkJcHJldl94bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKGhlYXBU dXBsZS0+dF9kYXRhKTsKLQkJfQotCQllbHNlCi0JCQlicmVhazsJCQkJLyogZW5kIG9mIGNoYWlu ICovCi0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICoJaGVhcF9nZXRfbGF0ZXN0X3Rp ZCAtICBnZXQgdGhlIGxhdGVzdCB0aWQgb2YgYSBzcGVjaWZpZWQgdHVwbGUKICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjZGQxNTNjNmIuLmE1MmYzMjI5 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03NSwxMTcg Kzc1LDYgQEAgaGVhcGFtX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogfQogCiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0K LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBJbmRleEZldGNoVGFibGVEYXRhICoK LWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKLXsK LQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhl YXBEYXRhKTsKLQotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5m bGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nhbi0+ eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK LX0KLQotc3RhdGljIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW47Ci0KLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp Ci0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOwotCX0KLQotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQotewotCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0KLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlwZnJlZShoc2Nhbik7Ci19Ci0KLXN0 YXRpYyBib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmNhbGxf YWdhaW4sIGJvb2wgKmFsbF9kZWFkKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAo SW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpi c2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKLQlib29sCQlnb3RfaGVh cF90dXBsZTsKLQotCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwotCi0JLyogV2Ug Y2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBj aGFpbi4gKi8KLQlpZiAoISpjYWxsX2FnYWluKQotCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3Qg YnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVm ID0gaHNjYW4tPnhzX2NidWY7Ci0KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1 ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0J CQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKLQotCQkvKgotCQkg KiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdl Ci0JCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2Vf cHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCSZo c2Nhbi0+eHNfdm1idWZmZXIsCi0JCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYgU09fSElO VF9SRUxfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVm ZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KLQlMb2NrQnVmZmVyKGhzY2FuLT54 c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9z ZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAotCQkJCQkJ CQkJCQloc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJc25hcHNob3QsCi0JCQkJCQkJCQkJCSZi c2xvdC0+YmFzZS50dXBkYXRhLAotCQkJCQkJCQkJCQlhbGxfZGVhZCwKLQkJCQkJCQkJCQkJISpj YWxsX2FnYWluKTsKLQlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7Ci0JTG9ja0J1 ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCWlmIChnb3RfaGVh cF90dXBsZSkKLQl7Ci0JCS8qCi0JCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBjYW4g bW9yZSB0aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAotCQkgKiBjaGFpbiBiZSB2aXNpYmxlLgot CQkgKi8KLQkJKmNhbGxfYWdhaW4gPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKLQot CQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7Ci0JCUV4 ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4t PnhzX2NidWYpOwotCX0KLQllbHNlCi0JewotCQkvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2Yg dGhlIEhPVCBjaGFpbi4gKi8KLQkJKmNhbGxfYWdhaW4gPSBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4g Z290X2hlYXBfdHVwbGU7Ci19Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYWxsYmFja3Mg Zm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcyBmb3IgaGVh cCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aW5kZXhzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5hOGVmNTc4 NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5k ZXhzY2FuLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGhl YXBhbV9pbmRleHNjYW4uYworICoJICBoZWFwIHRhYmxlIHBsYWluIGluZGV4IHNjYW4gYW5kIGlu ZGV4LW9ubHkgc2NhbiBjb2RlCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faW5kZXhzY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcmVkaWNhdGUuaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEluZGV4IFNjYW4g Q2FsbGJhY2tzIGZvciBoZWFwIEFNCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitJbmRleEZl dGNoVGFibGVEYXRhICoKK2hlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVp bnQzMiBmbGFncykKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmpl Y3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKKworCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKKwlo c2Nhbi0+eHNfYmFzZS5mbGFncyA9IGZsYWdzOworCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCisJcmV0dXJuICZo c2Nhbi0+eHNfYmFzZTsKK30KKwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4pCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJ bmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKKworCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54 c19jYnVmKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCQloc2Nhbi0+ eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX3ZtYnVmZmVyKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsK KwkJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwl9Cit9CisKK3ZvaWQKK2hl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK3sKKwlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOworCisJ aGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCisJcGZyZWUoaHNjYW4pOworfQorCisv KgorICoJaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxl IHNhdGlzZnlpbmcgc25hcHNob3QKKyAqCisgKiBPbiBlbnRyeSwgKnRpZCBpcyB0aGUgVElEIG9m IGEgdHVwbGUgKGVpdGhlciBhIHNpbXBsZSB0dXBsZSwgb3IgdGhlIHJvb3QKKyAqIG9mIGEgSE9U IGNoYWluKSwgYW5kIGJ1ZmZlciBpcyB0aGUgYnVmZmVyIGhvbGRpbmcgdGhpcyB0dXBsZS4gIFdl IHNlYXJjaAorICogZm9yIHRoZSBmaXJzdCBjaGFpbiBtZW1iZXIgc2F0aXNmeWluZyB0aGUgZ2l2 ZW4gc25hcHNob3QuICBJZiBvbmUgaXMKKyAqIGZvdW5kLCB3ZSB1cGRhdGUgKnRpZCB0byByZWZl cmVuY2UgdGhhdCB0dXBsZSdzIG9mZnNldCBudW1iZXIsIGFuZAorICogcmV0dXJuIHRydWUuICBJ ZiBubyBtYXRjaCwgcmV0dXJuIGZhbHNlIHdpdGhvdXQgbW9kaWZ5aW5nICp0aWQuCisgKgorICog aGVhcFR1cGxlIGlzIGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZlci4gIFdoZW4gYSBtYXRjaCBpcyBm b3VuZCwgd2UgcmV0dXJuCisgKiB0aGUgdHVwbGUgaGVyZSwgaW4gYWRkaXRpb24gdG8gdXBkYXRp bmcgKnRpZC4gIElmIG5vIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyAqIGNvbnRlbnRzIG9mIHRoaXMg YnVmZmVyIG9uIHJldHVybiBhcmUgdW5kZWZpbmVkLgorICoKKyAqIElmIGFsbF9kZWFkIGlzIG5v dCBOVUxMLCB3ZSBjaGVjayBub24tdmlzaWJsZSB0dXBsZXMgdG8gc2VlIGlmIHRoZXkgYXJlCisg KiBnbG9iYWxseSBkZWFkOyAqYWxsX2RlYWQgaXMgc2V0IHRydWUgaWYgYWxsIG1lbWJlcnMgb2Yg dGhlIEhPVCBjaGFpbgorICogYXJlIHZhY3V1bWFibGUsIGZhbHNlIGlmIG5vdC4KKyAqCisgKiBV bmxpa2UgaGVhcF9mZXRjaCwgdGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBwaW4gYW5kIChh dCBsZWFzdCkgc2hhcmUKKyAqIGxvY2sgb24gdGhlIGJ1ZmZlcjsgaXQgaXMgc3RpbGwgcGlubmVk L2xvY2tlZCBhdCBleGl0LgorICovCitib29sCitoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Q b2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCisJCQkJCSAgIFNu YXBzaG90IHNuYXBzaG90LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAorCQkJCQkgICBib29sICphbGxf ZGVhZCwgYm9vbCBmaXJzdF9jYWxsKQoreworCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcik7CisJVHJhbnNhY3Rpb25JZCBwcmV2X3htYXggPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwlCbG9ja051bWJlciBibGtubzsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtOworCWJvb2wJCWF0X2No YWluX3N0YXJ0OworCWJvb2wJCXZhbGlkOworCWJvb2wJCXNraXA7CisJR2xvYmFsVmlzU3RhdGUg KnZpc3Rlc3QgPSBOVUxMOworCisJLyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIHBy ZXZpb3VzIGNhbGwgcmV0dXJuZWQgYSAobGl2ZSEpIHR1cGxlICovCisJaWYgKGFsbF9kZWFkKQor CQkqYWxsX2RlYWQgPSBmaXJzdF9jYWxsOworCisJYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CisJb2ZmbnVtID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKTsK KwlhdF9jaGFpbl9zdGFydCA9IGZpcnN0X2NhbGw7CisJc2tpcCA9ICFmaXJzdF9jYWxsOworCisJ LyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVn aXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJ QXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcikgPT0gYmxrbm8pOworCisJLyogU2Nh biB0aHJvdWdoIHBvc3NpYmxlIG11bHRpcGxlIG1lbWJlcnMgb2YgSE9ULWNoYWluICovCisJZm9y ICg7OykKKwl7CisJCUl0ZW1JZAkJbHA7CisKKwkJLyogY2hlY2sgZm9yIGJvZ3VzIFRJRCAqLwor CQlpZiAob2ZmbnVtIDwgRmlyc3RPZmZzZXROdW1iZXIgfHwgb2ZmbnVtID4gUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKSkKKwkJCWJyZWFrOworCisJCWxwID0gUGFnZUdldEl0ZW1JZChwYWdl LCBvZmZudW0pOworCisJCS8qIGNoZWNrIGZvciB1bnVzZWQsIGRlYWQsIG9yIHJlZGlyZWN0ZWQg aXRlbXMgKi8KKwkJaWYgKCFJdGVtSWRJc05vcm1hbChscCkpCisJCXsKKwkJCS8qIFdlIHNob3Vs ZCBvbmx5IHNlZSBhIHJlZGlyZWN0IGF0IHN0YXJ0IG9mIGNoYWluICovCisJCQlpZiAoSXRlbUlk SXNSZWRpcmVjdGVkKGxwKSAmJiBhdF9jaGFpbl9zdGFydCkKKwkJCXsKKwkJCQkvKiBGb2xsb3cg dGhlIHJlZGlyZWN0ICovCisJCQkJb2ZmbnVtID0gSXRlbUlkR2V0UmVkaXJlY3QobHApOworCQkJ CWF0X2NoYWluX3N0YXJ0ID0gZmFsc2U7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBlbHNl IG11c3QgYmUgZW5kIG9mIGNoYWluICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFVw ZGF0ZSBoZWFwVHVwbGUgdG8gcG9pbnQgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIEhPVCBjaGFpbiB3 ZSdyZQorCQkgKiBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSGF2aW5nIHRfc2VsZiBzZXQgY29y cmVjdGx5IGlzIGltcG9ydGFudAorCQkgKiBiZWNhdXNlIHRoZSBTU0kgY2hlY2tzIGFuZCB0aGUg KlNhdGlzZmllcyByb3V0aW5lIGZvciBoaXN0b3JpY2FsCisJCSAqIE1WQ0Mgc25hcHNob3RzIG5l ZWQgdGhlIGNvcnJlY3QgdGlkIHRvIGRlY2lkZSBhYm91dCB0aGUgdmlzaWJpbGl0eS4KKwkJICov CisJCWhlYXBUdXBsZS0+dF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFn ZSwgbHApOworCQloZWFwVHVwbGUtPnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwkJaGVh cFR1cGxlLT50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJCUl0ZW1Q b2ludGVyU2V0KCZoZWFwVHVwbGUtPnRfc2VsZiwgYmxrbm8sIG9mZm51bSk7CisKKwkJLyoKKwkJ ICogU2hvdWxkbid0IHNlZSBhIEhFQVBfT05MWSB0dXBsZSBhdCBjaGFpbiBzdGFydC4KKwkJICov CisJCWlmIChhdF9jaGFpbl9zdGFydCAmJiBIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkp CisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUgeG1pbiBzaG91bGQgbWF0Y2ggdGhlIHByZXZp b3VzIHhtYXggdmFsdWUsIGVsc2UgY2hhaW4gaXMKKwkJICogYnJva2VuLgorCQkgKi8KKwkJaWYg KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHByZXZfeG1heCkgJiYKKwkJCSFUcmFuc2FjdGlvbklkRXF1 YWxzKHByZXZfeG1heCwKKwkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxl LT50X2RhdGEpKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFdoZW4gZmlyc3RfY2FsbCBpcyB0 cnVlIChhbmQgdGh1cywgc2tpcCBpcyBpbml0aWFsbHkgZmFsc2UpIHdlJ2xsCisJCSAqIHJldHVy biB0aGUgZmlyc3QgdHVwbGUgd2UgZmluZC4gIEJ1dCBvbiBsYXRlciBwYXNzZXMsIGhlYXBUdXBs ZQorCQkgKiB3aWxsIGluaXRpYWxseSBiZSBwb2ludGluZyB0byB0aGUgdHVwbGUgd2UgcmV0dXJu ZWQgbGFzdCB0aW1lLgorCQkgKiBSZXR1cm5pbmcgaXQgYWdhaW4gd291bGQgYmUgaW5jb3JyZWN0 IChhbmQgd291bGQgbG9vcCBmb3JldmVyKSwgc28KKwkJICogd2Ugc2tpcCBpdCBhbmQgcmV0dXJu IHRoZSBuZXh0IG1hdGNoIHdlIGZpbmQuCisJCSAqLworCQlpZiAoIXNraXApCisJCXsKKwkJCS8q IElmIGl0J3MgdmlzaWJsZSBwZXIgdGhlIHNuYXBzaG90LCB3ZSBtdXN0IHJldHVybiBpdCAqLwor CQkJdmFsaWQgPSBIZWFwVHVwbGVTYXRpc2ZpZXNWaXNpYmlsaXR5KGhlYXBUdXBsZSwgc25hcHNo b3QsIGJ1ZmZlcik7CisJCQlIZWFwQ2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdE91dCh2YWxp ZCwgcmVsYXRpb24sIGhlYXBUdXBsZSwKKwkJCQkJCQkJCQkJCWJ1ZmZlciwgc25hcHNob3QpOwor CisJCQlpZiAodmFsaWQpCisJCQl7CisJCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIodGlk LCBvZmZudW0pOworCQkJCVByZWRpY2F0ZUxvY2tUSUQocmVsYXRpb24sICZoZWFwVHVwbGUtPnRf c2VsZiwgc25hcHNob3QsCisJCQkJCQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKGhlYXBUdXBs ZS0+dF9kYXRhKSk7CisJCQkJaWYgKGFsbF9kZWFkKQorCQkJCQkqYWxsX2RlYWQgPSBmYWxzZTsK KwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlza2lwID0gZmFsc2U7CisKKwkJLyoKKwkJ ICogSWYgd2UgY2FuJ3Qgc2VlIGl0LCBtYXliZSBubyBvbmUgZWxzZSBjYW4gZWl0aGVyLiAgQXQg Y2FsbGVyCisJCSAqIHJlcXVlc3QsIGNoZWNrIHdoZXRoZXIgYWxsIGNoYWluIG1lbWJlcnMgYXJl IGRlYWQgdG8gYWxsCisJCSAqIHRyYW5zYWN0aW9ucy4KKwkJICoKKwkJICogTm90ZTogaWYgeW91 IGNoYW5nZSB0aGUgY3JpdGVyaW9uIGhlcmUgZm9yIHdoYXQgaXMgImRlYWQiLCBmaXggdGhlCisJ CSAqIHBsYW5uZXIncyBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlKCkgZnVuY3Rpb24gdG8gbWF0 Y2guCisJCSAqLworCQlpZiAoYWxsX2RlYWQgJiYgKmFsbF9kZWFkKQorCQl7CisJCQlpZiAoIXZp c3Rlc3QpCisJCQkJdmlzdGVzdCA9IEdsb2JhbFZpc1Rlc3RGb3IocmVsYXRpb24pOworCisJCQlp ZiAoIUhlYXBUdXBsZUlzU3VyZWx5RGVhZChoZWFwVHVwbGUsIHZpc3Rlc3QpKQorCQkJCSphbGxf ZGVhZCA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIEhPVCBjaGFp biBjb250aW51ZXMgcGFzdCB0aGlzIHR1cGxlOyBpZiBzbyBmZXRjaAorCQkgKiB0aGUgbmV4dCBv ZmZudW0gYW5kIGxvb3AgYXJvdW5kLgorCQkgKi8KKwkJaWYgKEhlYXBUdXBsZUlzSG90VXBkYXRl ZChoZWFwVHVwbGUpKQorCQl7CisJCQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigm aGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCkgPT0KKwkJCQkgICBibGtubyk7CisJCQlvZmZudW0g PSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCk7 CisJCQlhdF9jaGFpbl9zdGFydCA9IGZhbHNlOworCQkJcHJldl94bWF4ID0gSGVhcFR1cGxlSGVh ZGVyR2V0VXBkYXRlWGlkKGhlYXBUdXBsZS0+dF9kYXRhKTsKKwkJfQorCQllbHNlCisJCQlicmVh azsJCQkJLyogZW5kIG9mIGNoYWluICovCisKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jv b2wKK2hlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKKwkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkgU25hcHNob3Qgc25hcHNob3Qs CisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkgYm9vbCAqaGVhcF9jb250aW51 ZSwgYm9vbCAqYWxsX2RlYWQpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRl eEZldGNoSGVhcERhdGEgKikgc2NhbjsKKwlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90 ID0gKEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqKSBzbG90OworCWJvb2wJCWdvdF9oZWFwX3R1 cGxlOworCisJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CisKKwkvKiBXZSBjYW4g c2tpcCB0aGUgYnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWlu LiAqLworCWlmICghKmhlYXBfY29udGludWUpCisJeworCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBi dWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCisJCUJ1ZmZlcgkJcHJldl9idWYg PSBoc2Nhbi0+eHNfY2J1ZjsKKworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlbGVhc2VBbmRSZWFkQnVm ZmVyKGhzY2FuLT54c19jYnVmLAorCQkJCQkJCQkJCQkgIGhzY2FuLT54c19iYXNlLnJlbCwKKwkJ CQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJCS8qCisJCSAq IFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UK KwkJICovCisJCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKKwkJCWhlYXBfcGFnZV9w cnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKKwkJCQkJCQkJJmhz Y2FuLT54c192bWJ1ZmZlciwKKwkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgJiBTT19ISU5U X1JFTF9SRUFEX09OTFkpOworCX0KKworCS8qIE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBidWZm ZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLworCUxvY2tCdWZmZXIoaHNjYW4tPnhz X2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90X3Nl YXJjaF9idWZmZXIodGlkLAorCQkJCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJ CQkJCWhzY2FuLT54c19jYnVmLAorCQkJCQkJCQkJCQlzbmFwc2hvdCwKKwkJCQkJCQkJCQkJJmJz bG90LT5iYXNlLnR1cGRhdGEsCisJCQkJCQkJCQkJCWFsbF9kZWFkLAorCQkJCQkJCQkJCQkhKmhl YXBfY29udGludWUpOworCWJzbG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKnRpZDsKKwlMb2Nr QnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJaWYgKGdvdF9o ZWFwX3R1cGxlKQorCXsKKwkJLyoKKwkJICogT25seSBpbiBhIG5vbi1NVkNDIHNuYXBzaG90IGNh biBtb3JlIHRoYW4gb25lIG1lbWJlciBvZiB0aGUgSE9UCisJCSAqIGNoYWluIGJlIHZpc2libGUu CisJCSAqLworCQkqaGVhcF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3Qp OworCisJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoc2Nhbi0+cmVsKTsK KwkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBo c2Nhbi0+eHNfY2J1Zik7CisJfQorCWVsc2UKKwl7CisJCS8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVu ZCBvZiB0aGUgSE9UIGNoYWluLiAqLworCQkqaGVhcF9jb250aW51ZSA9IGZhbHNlOworCX0KKwor CXJldHVybiBnb3RfaGVhcF90dXBsZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVpbGQK aW5kZXggOTJhYjhiZTNkLi4wMGVjMDdkN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL21lc29uLmJ1 aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnaGVhcGFt LmMnLAogICAnaGVhcGFtX2hhbmRsZXIuYycsCisgICdoZWFwYW1faW5kZXhzY2FuLmMnLAogICAn aGVhcGFtX3Zpc2liaWxpdHkuYycsCiAgICdoZWFwYW1feGxvZy5jJywKICAgJ2hlYXB0b2FzdC5j JywKLS0gCjIuNTMuMAoK --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0002-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v19-0002-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7w16 RnJvbSA1Y2E4MzhhYzMyYThkNDM1MTAzMjVjYjQwMGJlNGVjZWE0N2VhOGQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwMi8xOF0g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW5kZXggc2NhbiBpbnRlcmZhY2UuCgpBZGQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90LCBhIG5ldyB0YWJsZSBBTSBjYWxsYmFjayB0aGF0IHdyYXBzIGJv dGgKcGxhaW4gYW5kIGluZGV4LW9ubHkgaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4g IFR3byBuZXcKVGFibGVBbVJvdXRpbmUgY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIC0tIG9uZSBm b3IgcGxhaW4gc2NhbnMgYW5kIG9uZQpmb3IgaW5kZXgtb25seSBzY2FucyAtLSB3aGljaCBhbiB1 cGNvbWluZyBjb21taXQgdGhhdCBhZGRzIHRoZQphbWdldGJhdGNoIGludGVyZmFjZSB3aWxsIGV4 cGFuZCB0byBmb3VyLiAgVGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGlzCnJlc29sdmVkIG9uY2Ug aW4gaW5kZXhfYmVnaW5zY2FuLCBhbmQgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVy Cih4c19nZXRuZXh0X3Nsb3QpIG9uIHRoZSBJbmRleFNjYW5EZXNjIHdoZW4gdGhlIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdApzaGltIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4ZWN1dG9yIG5v ZGVzLgoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0IG9mIHRo ZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZpc2liaWxp dHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3QgcGVyZm9y bSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90LWJhc2Vk IGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywgd2hpY2gg bm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVjdGx5LgoK QSBzbWFsbCBtaW5vcml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGNvbnRpbnVl IHRvIHVzZSB0aGUgb2xkCnRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGludGVyZmFjZS4gIFRoaXMg aXMgc3RpbGwgbmVjZXNzYXJ5IHdpdGggY2FsbGVycwp0aGF0IGZ1bmRhbWVudGFsbHkgbmVlZCB0 byBwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTS4gIEJvdGggY2FsbGVycwpwZXJmb3JtIHNvbWUg a2luZCBvZiBjb25zdHJhaW50IGVuZm9yY2VtZW50LgoKWFhYIERvIHdlIHN0aWxsIG5lZWQgSW5k ZXhGZXRjaFRhYmxlRGF0YS5yZWw/ICBXZSBhcmUgbm93IG1vc3RseSB1c2luZwpJbmRleFNjYW5E ZXNjRGF0YS5oZWFwUmVsYXRpb24sIGJ1dCB3ZSBjb3VsZCB1c2UgaXQgZm9yIGFic29sdXRlbHkK ZXZlcnl0aGluZyBpZiB3ZSB3ZXJlIHdpbGxpbmcgdG8gcmV2aXNlIHRoZSBzaWduYXR1cmUgb2Yg dGhlIG9sZAp0YWJsZV9pbmRleF9mZXRjaF90dXBsZSBpbnRlcmZhY2UgYnkgZ2l2aW5nIGl0IGl0 cyBvd24gaGVhcFJlbGF0aW9uIGFyZy4KCkluZGV4LW9ubHkgc2NhbiBjYWxsZXJzIHBhc3MgdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90IGEgVHVwbGVUYWJsZVNsb3QKKHdoaWNoIHRoZSB0YWJsZSBB TSBuZWVkcyBpbnRlcm5hbGx5IGZvciBoZWFwIGZldGNoZXMpLCBidXQgY29udGludWUgdG8KcmVh ZCB0aGVpciByZXN1bHRzIGZyb20gSW5kZXhTY2FuRGVzY0RhdGEgZmllbGRzIHN1Y2ggYXMgeHNf aXR1cCAocmF0aGVyCnRoYW4gZnJvbSB0aGUgc2xvdCBpdHNlbGYpLiAgVGhpcyBjb252ZW50aW9u IGxldHMgYm90aCBwbGFpbiBhbmQKaW5kZXgtb25seSBzY2FucyB1c2UgdGhlIHNhbWUgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZS4gIEFsbApjYWxsZXJzIGNhbiBjb250aW51ZSB0 byByZWx5IG9uIHRoZSBzY2FuIGRlc2NyaXB0b3IncyB4c19oZWFwdGlkIGZpZWxkCmJlaW5nIHNl dCBvbiBlYWNoIGNhbGwuIChleGVjQ3VycmVudE9mIGlzIHRoZSBvbmx5IGNhbGxlciB0aGF0IHJl YWRzCnRoaXMgZmllbGQgZGlyZWN0bHksIHRvIGRldGVybWluZSB0aGUgY3VycmVudCByb3cgb2Yg YW4gaW5kZXgtb25seSBzY2FuLApidXQgaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0byBkbyB0 aGUgc2FtZSB0aGluZyBmb3IgYWxsIGNhbGxlcnMpLgoKWFhYIFNob3VsZCBleGVjQ3VycmVudE9m IGNvbnRpbnVlIHRvIGRvIHRoaXM/ICBDYW4ndCBpdCBnZXQgdGhlIHNhbWUgVElECmZyb20gdGhl IHRhYmxlIHNsb3QgaW5zdGVhZD8KClRoZSBWSVNJVEVEX1BBR0VTX0xJTUlUIG1lY2hhbmlzbSB1 c2VkIGJ5IGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UgdG8KY2FwIHNjYW4gb3ZlcmhlYWQgZHVy aW5nIHBsYW5uaW5nIGlzIHJld29ya2VkIHRvIGdvIHRocm91Z2ggYSBuZXcgc2NhbgpkZXNjcmlw dG9yIGludGVyZmFjZSAoeHNfdmlzaXRlZF9wYWdlc19saW1pdCksIHJhdGhlciB0aGFuIHRyYWNr aW5nIHRoZQpjb3N0cyBkaXJlY3RseSBhbmQgdGVybWluYXRpbmcgdGhlIHNjYW4gaXRzZWxmLCBp biBhbiBhZC1ob2Mgd2F5LiAgVGhpcwppcyBuZWNlc3NhcnkgYmVjYXVzZSBjYWxsZXJzIHRoYXQg dXNlIHRoZSBuZXcgc2xvdC1iYXNlZCBpbnRlcmZhY2Ugbm8KbG9uZ2VyIGhhdmUgZGlyZWN0IGFj Y2VzcyB0byB3aGljaCBoZWFwIGJsb2NrcyB3ZXJlIGZldGNoZWQgYnkgdGhlIHRhYmxlCkFNLiAg U2ltaWxhcmx5LCBub2RlSW5kZXhvbmx5c2Nhbi5jIGNhbiBubyBsb25nZXIgdXNlIEluc3RyQ291 bnRUdXBsZXMyCnRvIGNvdW50IGhlYXAgZmV0Y2hlcyBkdXJpbmcgYW4gRVhQTEFJTiBBTkFMWVpF LiAgSW5zdGVhZCBpdCByZWxpZXMgb24KaGVhcGFtIG1haW50YWluaW5nIGEgbmV3IEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbi5udGFibGVmZXRjaGVzIGZpZWxkLgoKVGhvdWdoIGluZGVwZW5kZW50 bHkgdXNlZnVsLCB0aGlzIGNvbW1pdCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWlu ZyBjb21taXQgdGhhdCB3aWxsIGFkZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwg d2hlcmUKdGhlIHRhYmxlIEFNIHRha2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5n IHRoZSBwcm9ncmVzcyBvZgppbmRleCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhl IGltcGxlbWVudGF0aW9uIG9mIHNjcm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFu ZCBpbnRvIHRhYmxlIEFNcywgbWFraW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVz IHBhc3MgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpU aGUgaGVhcGFtIGltcGxlbWVudGF0aW9ucyBtYWtlIGFnZ3Jlc3NpdmUgdXNlIG9mIGZvcmNlZCBp bmxpbmluZyB0bwplbnN1cmUgdGhhdCBwbGFpbiBhbmQgaW5kZXgtb25seSBjb2RlIHBhdGhzIGFy ZSBmdWxseSBzcGVjaWFsaXplZCBhdApjb21waWxlIHRpbWUgZGVzcGl0ZSBzaGFyaW5nIGEgY29t bW9uIGltcGxlbWVudGF0aW9uLiAgVGVzdGluZyBoYXMgc2hvd24KdGhpcyBpcyBuZWNlc3Nhcnkg dG8ga2VlcCBpY2FjaGUgbWlzc2VzIHRvIGEgbWluaW11bSwgYXQgbGVhc3Qgd2l0aCB0aGUKdHdv IHVwY29taW5nIGFtZ2V0YmF0Y2ggdmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8 cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5k ZT4KUmV2aWV3ZWQtQnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVEr MGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICB8ICAyNiArKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgICB8ICA1MyArKysrLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9u b2RlLmggICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAg ICAgICB8ICAgMiAtCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAg fCAgIDkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDIy MiArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxp dHltYXAuYyAgICB8ICAyNyArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAg ICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAg ICAgIHwgMjA2ICsrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyAgICAgICAgICAgICB8ICAyMyArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhz Y2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAg IHwgMTA5ICstLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAg ICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgICAgICAg IHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICAgICAgfCAg NjEgKy0tLS0tCiAxOSBmaWxlcyBjaGFuZ2VkLCA0NTcgaW5zZXJ0aW9ucygrKSwgMzQ2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggYjY5MzIwYTdmLi5kYjYyZTBjYTEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFu dXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhf YmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJCQkJIFNu YXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5z dHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCkBAIC0xODMsMTUg KzE4NCwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWws CisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhT Y2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywg aW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4s CiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9n ZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNj YW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xv dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAg IFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaAppbmRleCAzZGJkZDQ1NDQuLmEwNjYyNDE0MiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApA QCAtNDM0LDYgKzQzNCwxMiBAQCBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1 ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCdWZm ZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJCQkJ CQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CitleHRlcm4gYm9vbCBoZWFw YW1faW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBib29sIGhlYXBhbV9pbmRleF9vbmx5 X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJ bmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwgU25h cHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmhl YXBfY29udGludWUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA5NjBhYmY2YzIuLjEyMDJkOTg3MyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJhY2Nl c3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQv YXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKQEAgLTI0LDYg KzI1LDcgQEAKIAogCiBzdHJ1Y3QgUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YTsKK3N0cnVjdCBU dXBsZVRhYmxlU2xvdDsKIAogLyoKICAqIEdlbmVyaWMgZGVzY3JpcHRvciBmb3IgdGFibGUgc2Nh bnMuIFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MgZm9yIHRhYmxlIHNjYW5zLApAQCAtMTU1LDYgKzE1 Nyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3JlX2tp bGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAlib29sCQl4 YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5nIGtpbGxlZAog CQkJCQkJCQkJCSAqIHR1cGxlcyAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4gTVZDQyBzbmFw c2hvdD8gKi8KKwlib29sCQlNVkNDU2NhbjsKIAogCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBw cml2YXRlIHN0YXRlICovCiAJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3Bl Y2lmaWMgaW5mbyAqLwpAQCAtMTY2LDEwICsxNzAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdldHR1 cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykg b3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0YSBy ZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2UgdGhl IGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkgc2Nh biwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsIG11c3QKKwkgKiBm aWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNf aGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4u ICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhlYXAgZm9ybWF0IHdp bGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBsZSBy ZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJLyog cm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3NywxMCArMTgxLDEzIEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlRGVzY0RhdGEgKnhz X2hpdHVwZGVzYzsgLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2hpdHVwICovCiAKIAlJdGVt UG9pbnRlckRhdGEgeHNfaGVhcHRpZDsgLyogcmVzdWx0ICovCi0JYm9vbAkJeHNfaGVhcF9jb250 aW51ZTsJLyogVCBpZiBtdXN0IGtlZXAgd2Fsa2luZywgcG90ZW50aWFsCi0JCQkJCQkJCQkgKiBm dXJ0aGVyIHJlc3VsdHMgKi8KIAlJbmRleEZldGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAK KwkvKiBSZXNvbHZlZCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sIHNldCBieSBpbmRleF9i ZWdpbnNjYW4gKi8KKwlib29sCQkoKnhzX2dldG5leHRfc2xvdCkgKHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YSAqc2NhbiwKKwkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJ CQkJc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwogCWJvb2wJCXhzX3JlY2hlY2s7CQkv KiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLwogCiAJLyoKQEAgLTE5NCw2 ICsyMDEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCSAgICp4 c19vcmRlcmJ5bnVsbHM7CiAJYm9vbAkJeHNfcmVjaGVja29yZGVyYnk7CiAKKwkvKgorCSAqIEFu IGFwcHJveGltYXRlIGxpbWl0IG9uIHRoZSBhbW91bnQgb2Ygd29yaywgbWVhc3VyZWQgaW4gcGFn ZXMgdG91Y2hlZCwKKwkgKiBpbXBvc2VkIG9uIHRoZSBpbmRleCBzY2FuLiAgVGhlIGRlZmF1bHQs IDAsIG1lYW5zIG5vIGxpbWl0LiAgVXNlZCBieQorCSAqIHNlbGZ1bmNzLmMgdG8gYm91bmQgdGhl IGNvc3Qgb2YgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludCgpLgorCSAqLworCXVpbnQ4CQl4 c192aXNpdGVkX3BhZ2VzX2xpbWl0OworCiAJLyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1h dGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwogCXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NE YXRhICpwYXJhbGxlbF9zY2FuOwogfSBJbmRleFNjYW5EZXNjRGF0YTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CmluZGV4IGFiMmU3ZmMxZC4uOTNiMzkyOGJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ0Myw3 ICs0NDMsOSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqIGZsYWdzIGlzIGEg Yml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdW5kZXJseWluZyB0YWJsZSBzY2FuCiAJ ICogYmVoYXZpb3IuIFNlZSBzY2FuX2JlZ2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFz c2luZyB0aGVzZS4KIAkgKgotCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBi ZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KKwkgKiBUdXBsZXMgZm9yIGFuIGluZGV4 IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgb25lIG9mIHRoZQorCSAqIHNsb3QtYmFzZWQg Y2FsbGJhY2tzIGNhbGxlZCB0aHJvdWdoIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCwgb3Igdmlh CisJICogdGhlIGxvd2VyLWxldmVsIFRJRC1iYXNlZCBpbmRleF9mZXRjaF90dXBsZSBpbnRlcmZh Y2UuCiAJICovCiAJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVn aW4pIChSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CiAKQEAgLTQ1OCwxMSArNDYwLDMwIEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRj aF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZl dGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2Nhbiwgc2Nhbm5pbmcgaW4gdGhlIHNw ZWNpZmllZAorCSAqIGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVlIGlmIGEgdHVwbGUgd2FzIGZv dW5kLCBmYWxzZSBvdGhlcndpc2UuCisJICoKKwkgKiBUd28gdmFyaWFudHMgY292ZXIge3BsYWlu LCBpbmRleC1vbmx5fSBpbmRleCBzY2FucyB0aGF0IHVzZSBhbWdldHR1cGxlLgorCSAqIGluZGV4 X2JlZ2luc2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50IHRvIHVzZS4gIENhbGxlcnMgdXNlCisJ ICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCksIHdoaWNoIGNhbGxzIHRocm91Z2ggdGhhdCBw b2ludGVyIGRpcmVjdGx5LgorCSAqLworCWJvb2wJCSgqaW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9n ZXRuZXh0X3Nsb3QpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCVNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJ Ym9vbAkJKCppbmRleF9vbmx5X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJ CQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwogCS8qCiAJICogRmV0Y2ggdHVwbGUg YXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nIGEgdmlzaWJpbGl0eSB0ZXN0CiAJICog YWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQg dGhlIHZpc2liaWxpdHkKIAkgKiB0ZXN0LCByZXR1cm4gdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgog CSAqCisJICogVGhpcyBpcyBhIGxvd2VyLWxldmVsIGNhbGxiYWNrIHRoYXQgdGFrZXMgYSBUSUQg ZnJvbSB0aGUgY2FsbGVyLgorCSAqIENhbGxlcnMgc2hvdWxkIGZhdm9yIHRoZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2tzIHdoZW5ldmVyCisJICogcG9zc2libGUuCisJICoKIAkg KiBOb3RlIHRoYXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdo ZW4gaW5kZXhlZAogCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhl IGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCiAJICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJs ZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KQEAgLTEyNjQs NiArMTI4NSwzMyBAQCB0YWJsZV9pbmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4pCiAJc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nh bik7CiB9CiAKKy8qCisgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4g aW50byBgc2xvdGAsIHNjYW5uaW5nIGluIHRoZQorICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFJl dHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQKKyAqIHRo ZSBzbmFwc2hvdCB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9y ZWQgaW4gdGhlCisgKiBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBEaXNwYXRjaGVzIHRocm91Z2gg c2Nhbi0+eHNfZ2V0bmV4dF9zbG90LCB3aGljaCBpcyByZXNvbHZlZCBvbmNlIGJ5CisgKiBpbmRl eF9iZWdpbnNjYW4uCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBw aW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiByZWxlYXNlZCBieSBh IGZ1dHVyZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgb3IgaW5kZXhfZW5kc2NhbiBjYWxsLgor ICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJm b3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBu b3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0 aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKgorICogRm9y IGluZGV4LW9ubHkgc2NhbnMsIHRoZSBjYWxsYmFjayBhbHNvIGZpbGxzIHhzX2l0dXAveHNfaXR1 cGRlc2Mgb3IKKyAqIHhzX2hpdHVwL3hzX2hpdHVwZGVzYyAob3IgYm90aCkgc28gdGhhdCBpbmRl eCBkYXRhIGNhbiBiZSByZXR1cm5lZCB3aXRob3V0CisgKiBhIGhlYXAgZmV0Y2guCisgKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbAordGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mg aXNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpz bG90KQoreworCXJldHVybiBpc2Nhbi0+eHNfZ2V0bmV4dF9zbG90KGlzY2FuLCBkaXJlY3Rpb24s IHNsb3QpOworfQorCiAvKgogICogRmV0Y2hlcywgYXMgcGFydCBvZiBhbiBpbmRleCBzY2FuLCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcKICAqIGEgdmlzaWJpbGl0eSB0 ZXN0IGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFz c2VkCkBAIC0xMjg3LDYgKzEzMzUsOSBAQCB0YWJsZV9pbmRleF9mZXRjaF9lbmQoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAgKiBlbnRyeSAobGlrZSBoZWFwJ3MgSE9UKS4gV2hl cmVhcyB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIG9ubHkKICAqIGV2YWx1YXRlcyB0 aGUgdHVwbGUgZXhhY3RseSBhdCBgdGlkYC4gT3V0c2lkZSBvZiBpbmRleCBlbnRyeSAtPnRhYmxl IHR1cGxlCiAgKiBsb29rdXBzLCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGlzIHdo YXQncyB1c3VhbGx5IG5lZWRlZC4KKyAqCisgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgaW50ZXJm YWNlIHRoYXQgdGFrZXMgYSBUSUQgZnJvbSB0aGUgY2FsbGVyLiAgQ2FsbGVycworICogc2hvdWxk IGZhdm9yIHRoZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgaW50ZXJmYWNlIHdoZW5ldmVyIHBv c3NpYmxlLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaAppbmRleCAyYTBmZjM3N2EuLmNjYzA3YmNkYSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAgLTQ4LDYgKzQ4LDExIEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgogewogCS8qIEluZGV4IHNlYXJjaCBjb3VudCAoaW5j cmVtZW50ZWQgd2l0aCBwZ3N0YXRfY291bnRfaW5kZXhfc2NhbiBjYWxsKSAqLwogCXVpbnQ2NAkJ bnNlYXJjaGVzOworCisJLyoKKwkgKiB0YWJsZSBibG9ja3MgZmV0Y2hlZCBjb3VudCAoaW5jcmVt ZW50ZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpCisJICovCisJdWludDY0CQludGFibGVmZXRj aGVzOwogfSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CmluZGV4IDY4NGUzOThmOC4uNGM2YTA2NTIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc2 Myw3ICsxNzYzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVt ZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8J CSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAq CQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUg dGFibGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAg dGVzdGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgt b25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBu YW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdD b3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5 CkBAIC0xNzg2LDcgKzE3ODUsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUK IAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAq aW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNj YW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9z c19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKaW5kZXggYTUyZjMyMjlhLi5iNzY3MmU1ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwpAQCAtNjU0LDggKzY1NCw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5 X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFi bGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9i ZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwLAotCQkJ CQkJCQkJU09fTk9ORSk7CisJCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBP bGRJbmRleCwgZmFsc2UsIFNuYXBzaG90QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCwgU09fTk9O RSk7CiAJCWluZGV4X3Jlc2NhbihpbmRleFNjYW4sIE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAll bHNlCkBAIC02OTMsNyArNjkzLDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIo UmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9 IE5VTEwpCiAJCXsKLQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo aW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgIHNsb3QpKQogCQkJ CWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVy IG5lZWQgdG8gcmVjaGVjayAqLwpAQCAtMjU1Myw2ICsyNTU0LDggQEAgc3RhdGljIGNvbnN0IFRh YmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhl YXBhbV9pbmRleF9mZXRjaF9iZWdpbiwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5k ZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9l bmQsCisJLmluZGV4X3BsYWluX2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4 X3BsYWluX2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90LAorCS5pbmRleF9vbmx5X2FtZ2V0dHVwbGVf Z2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3Qs CiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1 cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9pbnNlcnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggYThlZjU3ODQ1Li5mN2U0M2Q1NjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE0LDEwICsxNCwyNyBA QAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5o IgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0 eW1hcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAidXRpbHMv cGdzdGF0X2ludGVybmFsLmgiCiAKIAorc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJ CQkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJCQkJIFR1cGxlVGFi bGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCAqaGVhcF9jb250aW51ZSwKKwkJ CQkJCQkJCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBz Y2FuLAorCQkJCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJ CQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5k ZXhfb25seSk7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1f aW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmhlYXBfY29udGlu dWUpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBo ZWFwIEFNCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyNiw2ICsyNDMsMzAgQEAgaGVhcF9ob3Rf c2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIg YnVmZmVyLAogCXJldHVybiBmYWxzZTsKIH0KIAorLyogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBwbGFpbiBpbmRleCBzY2FuICovCitwZ19hdHRyaWJ1dGVf aG90IGJvb2wKK2hlYXBhbV9pbmRleF9wbGFpbl9hbWdldHR1cGxlX2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KCFzY2FuLT54c193 YW50X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4s IGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworfQorCisvKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIGluZGV4LW9ubHkgc2NhbiAqLworcGdfYXR0cmlidXRl X2hvdCBib29sCitoZWFwYW1faW5kZXhfb25seV9hbWdldHR1cGxlX2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUFzc2VydChzY2FuLT54c193YW50 X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBs ZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRp cmVjdGlvbiwgc2xvdCwgdHJ1ZSk7Cit9CisKIGJvb2wKIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJCQkJCSBJdGVtUG9pbnRlciB0 aWQsCkBAIC0yMzMsNiArMjc0LDE4IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwK IAkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxfZGVhZCkKIHsKKworCXJldHVy biBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChzY2FuLCB0aWQsIHNuYXBzaG90LCBzbG90 LAorCQkJCQkJCQkJCSBoZWFwX2NvbnRpbnVlLCBhbGxfZGVhZCk7Cit9CisKK3N0YXRpYyBwZ19h dHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1w bChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKKwkJCQkJCQkgIEl0ZW1Qb2ludGVy IHRpZCwKKwkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCisJCQkJCQkJICBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxfZGVhZCkK K3sKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBz Y2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxl VGFibGVTbG90ICopIHNsb3Q7CiAJYm9vbAkJZ290X2hlYXBfdHVwbGU7CkBAIC0yODksMyArMzQy LDE3MiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCiAKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7CiB9CisKKy8qCisgKiBDb21tb24g aW1wbGVtZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlh bnRzLgorICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhl IHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lz ZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAqIE9u IHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBo ZWxkLCBhbmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5 IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCisgKiB0aHJvdWdoIGluZGV4 X2VuZHNjYW4pLgorICoKKyAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUt dGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKKyAqIGFsbG93aW5nIHRoZSBjb21waWxl ciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBw Z19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1 cGxlVGFibGVTbG90ICpzbG90LCBib29sIGluZGV4X29ubHkpCit7CisJSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwor CUl0ZW1Qb2ludGVyIHRpZDsKKwlib29sCQloZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJYm9vbAkJ YWxsX3Zpc2libGUgPSBmYWxzZTsKKwlCbG9ja051bWJlciBsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CisJdWludDgJCW5fdmlzaXRlZF9wYWdlcyA9IDAsCisJCQkJeHNf dmlzaXRlZF9wYWdlc19saW1pdCA9IDA7CisKKwlpZiAoaW5kZXhfb25seSkKKwkJeHNfdmlzaXRl ZF9wYWdlc19saW1pdCA9IHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQ7CisKKwlmb3IgKDs7 KQorCXsKKwkJaWYgKCFoZWFwX2NvbnRpbnVlKQorCQl7CisJCQkvKiBHZXQgdGhlIG5leHQgVElE IGZyb20gdGhlIGluZGV4ICovCisJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJl Y3Rpb24pOworCisJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9u ZSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQkvKiBGb3IgaW5kZXgt b25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCisJCQlpZiAoaW5kZXhfb25s eSkKKwkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwK KwkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJ ICZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQl9CisKKwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxp ZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCisJCWlmIChpbmRleF9vbmx5KQorCQl7CisJCQkvKgor CQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEg aGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRv IGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBs ZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqLwor CQkJaWYgKCFhbGxfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUg dG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAo c2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bnRhYmxlZmV0Y2hlcysr OworCisJCQkJaWYgKCFoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90LCAmaGVhcF9j b250aW51ZSkpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlLiAgSWYg Y2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFnZXMgbGltaXQKKwkJCQkJICogKG9ubHkgc2VsZnVuY3Mu YyBkb2VzIHRoaXMpLCBjb3VudCBkaXN0aW5jdCBoZWFwIHBhZ2VzCisJCQkJCSAqIGFuZCBnaXZl IHVwIG9uY2Ugd2UndmUgdmlzaXRlZCB0b28gbWFueS4KKwkJCQkJICovCisJCQkJCWlmICh1bmxp a2VseSh4c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCisJCQkJCXsKKwkJCQkJCUJsb2NrTnVt YmVyIGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJCQkJaWYgKGJs ayAhPSBsYXN0X3Zpc2l0ZWRfYmxvY2spCisJCQkJCQl7CisJCQkJCQkJbGFzdF92aXNpdGVkX2Js b2NrID0gYmxrOworCQkJCQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHhzX3Zpc2l0ZWRfcGFn ZXNfbGltaXQpCisJCQkJCQkJCXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLworCQkJCQkJfQor CQkJCQl9CisJCQkJCWNvbnRpbnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRl eCBlbnRyeSAqLworCQkJCX0KKworCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJCQkJLyoK KwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFyZCBp bmRleC1vbmx5CisJCQkJICogc2NhbnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGtl ZXAgZm9sbG93aW5nIHRoZSBIT1QKKwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBo YXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9ubHkgc2Vs ZnVuY3MuYykgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2FudCB1cyB0 byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJCQkg KiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFzc2VydCgh KGhlYXBfY29udGludWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBo ZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxp Y2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2Ug bGV2ZWwuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2Nhbi0+aGVhcFJlbGF0aW9u LAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBz Y2FuLT54c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcg aW5kZXggdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1h dGNoaW5nIGhlYXAgdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkKKwkJCSAqLworCQkJ cmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogRmV0Y2ggdGhlIG5l eHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleAorCQkJICogZW50 cnkuICBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUK KwkJCSAqIG5leHQgVElEIGZyb20gdGhlIGluZGV4LgorCQkJICovCisJCQlpZiAoaGVhcGFtX2lu ZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUpKQorCQkJCXJldHVybiB0 cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogR2V0IHRoZSBzY2Fu J3MgbmV4dCBoZWFwIHR1cGxlLgorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAg dHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0 Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9y ZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25l IG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4g dXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1v cmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhl IGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3Qg YmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJlLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5 c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCWJvb2wgKmhlYXBfY29udGludWUpCit7CisJ Ym9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKKwlib29sCQlmb3VuZDsKKworCWZvdW5kID0gaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVh cHRpZCwKKwkJCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJCSAg aGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50 X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5u ZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5k ZXgKKwkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtl IGVmZmVjdCBpbiB0aGUgbmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4 dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1c2Ug aXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKCkuCisJICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3Zl cnkpCisJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKworCXJldHVybiBmb3Vu ZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA0ZmQ0NzA3 MDIuLjRiYTlmNDhlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJp bGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpA QCAtMzEzLDcgKzMxMywzMiBAQCB2aXNpYmlsaXR5bWFwX3NldChCbG9ja051bWJlciBoZWFwQmxr LAogICogc2luY2Ugd2UgZG9uJ3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBlaXRoZXIs IGl0J3MgZXZlbiBwb3NzaWJsZSB0aGF0CiAgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBjaGFu Z2VkIHRoZSBiaXQganVzdCBiZWZvcmUgd2UgbG9vayBhdCBpdCwgYnV0IHlldAogICogd2UgbWln aHQgc2VlIHRoZSBvbGQgdmFsdWUuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkg dG8gZGVhbCB3aXRoCi0gKiBhbGwgY29uY3VycmVuY3kgaXNzdWVzIQorICogYWxsIGNvbmN1cnJl bmN5IGlzc3VlcyEgIEluIHByYWN0aWNlIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBtYXR0 ZXIgZm9yCisgKiB0aGUgcHJpbWFyeSB1c2UgY2FzZTogaW5kZXgtb25seSBzY2FucyB0aGF0IGNo ZWNrIHdoZXRoZXIgYSBoZWFwIGZldGNoIGNhbgorICogYmUgc2tpcHBlZC4KKyAqCisgKiBUaGUg YXJndW1lbnQgZm9yIHdoeSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZvciB0 aGUgcHJpbWFyeSB1c2UKKyAqIGNhc2UgaXMgYXMgZm9sbG93czoKKyAqCisgKiBJbnNlcnRzOiB3 ZSBuZWVkIHRvIGRldGVjdCB0aGF0IGEgVk0gYml0IHdhcyBjbGVhcmVkIGJ5IGFuIGluc2VydCBy aWdodAorICogYXdheSwgYmVjYXVzZSB0aGUgbmV3IHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGlu ZGV4IGJ1dCBub3QgeWV0IHZpc2libGUuCisgKiBSZWFkaW5nIHRoZSBUSUQgZnJvbSB0aGUgaW5k ZXggcGFnZSAodW5kZXIgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKKyAqIGJ1ZmZlcikgaXMg c2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnRpb24gb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleCAo dW5kZXIKKyAqIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGluZGV4IGJ1ZmZlcikuICBC ZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZAorICogYmVmb3JlIHRoZSBpbmRleCBpcyB1cGRh dGVkLCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cworICogYXMg YSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQgYml0 IHdoZW5ldmVyIHdlCisgKiBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVs ZXRlczogdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgTk9UIHNlcmlh bGl6ZWQgd2l0aCB0aGUKKyAqIGluZGV4IHBhZ2UgYWNjZXNzLCBiZWNhdXNlIGRlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seQorICogVkFDVVVNIHJlbW92ZXMgdGhlIGlu ZGV4IFRJRCkuICBTbyB3ZSBtYXkgc2VlIGEgc2lnbmlmaWNhbnRseSBzdGFsZSB2YWx1ZS4KKyAq IEhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdG8gZGV0ZWN0IHRoZSBkZWxldGUgcmlnaHQgYXdheSwg YmVjYXVzZSB0aGUgdHVwbGUKKyAqIHJlbWFpbnMgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcg dHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50CisgKiBlbmRzIChpZiBpdCdzIG91 ciBvd24gdHJhbnNhY3Rpb24pLiAgSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTQor ICogYnVmZmVyIHdpbGwgaGF2ZSBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJy aWVyKSBhZnRlciBjbGVhcmluZworICogdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNu YXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCisgKiB0cmFuc2FjdGlvbiAobWFraW5n IHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKKyAqIFByb2NBcnJh eUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCiAgKi8KIHVp bnQ4CiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBo ZWFwQmxrLCBCdWZmZXIgKnZtYnVmKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAxNDA4 OTg5YzUuLmFjYzlmM2U2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsx MjYsOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhz X2hpdHVwZGVzYyA9IE5VTEw7CiAKKwlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsK KwogCXJldHVybiBzY2FuOwogfQogCkBAIC00NTQsNyArNDU2LDcgQEAgc3lzdGFibGVfYmVnaW5z Y2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5v dCBpbiBpbmRleCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o aGVhcFJlbGF0aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGlyZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtl eXMsIDAsCiAJCQkJCQkJCQkJIFNPX05PTkUpOwogCQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNj YW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwpAQCAtNTE4LDcgKzUyMCw4IEBAIHN5c3RhYmxl X2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsK LQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5 c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5z bG90KSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzE2LDcgKzcxOSw3IEBAIHN5 c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJh bnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAot CXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxh dGlvbiwKKwlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlu ZGV4UmVsYXRpb24sIGZhbHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCwK IAkJCQkJCQkJCSBTT19OT05FKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtl eSwgbmtleXMsIE5VTEwsIDApOwpAQCAtNzM2LDcgKzczOSw3IEBAIHN5c3RhYmxlX2dldG5leHRf b3JkZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlI ZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGlu ZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90 KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rp b24sIHN5c3NjYW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNz Y2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0 bmV4dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNDQ0OTZhZTA5Li42MmVm NDBkYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAog ICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBz Y2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2Nh biBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxs ZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBm cm9tIGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBo ZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZy b20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhl bHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBh IHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVw bGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2Yg YW4gaW5kZXgKQEAgLTEwNSw5ICsxMDMsMTYgQEAgZG8geyBcCiAJCQkgQ3BwQXNTdHJpbmcocG5h bWUpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzY2FuLT5pbmRleFJlbGF0aW9uKSk7IFwKIH0g d2hpbGUoMCkKIAotc3RhdGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFs KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2Nh bkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIGludCBua2V5cywKKwkJCQkJCQkJCQkJ CQkJCQkJCSBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBz aG90LAorCQkJCQkJCQkJCQkJCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJ CQkJCQkJCQkJCQkJCQkJCSBib29sIHRlbXBfc25hcCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBSZWxh dGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5X3Nj YW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50LAorCQkJCQkJCQkJCQkJCQkJCQkJIHVpbnQzMiBmbGFncyk7CiBzdGF0aWMgaW5saW5lIHZv aWQgdmFsaWRhdGVfcmVsYXRpb25fYXNfaW5kZXgoUmVsYXRpb24gcik7CiAKIApAQCAtMjU2LDEz ICsyNjEsMTIgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK IEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJ CQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29sIGluZGV4X29ubHlfc2NhbiwKIAkJ CQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3Ry dW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCXVpbnQzMiBmbGFncykK IHsKLQlJbmRleFNjYW5EZXNjIHNjYW47Ci0KIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNu YXBzaG90KTsKIAogCS8qIENoZWNrIHRoYXQgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcyBub3QgdXNl ZCBmb3Igbm9uLWNhdGFsb2cgdGFibGVzICovCkBAIC0yNzUsMjAgKzI3OSw5IEBAIGluZGV4X2Jl Z2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShoZWFwUmVsYXRpb24pKSkpOwogCX0KIAotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50 ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsIE5VTEwsIGZh bHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2Nh bmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5k ZXhTY2FuLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKLQlzY2Fu LT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50 OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlz Y2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24s IGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJu YWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsCisJCQkJCQkJCQlO VUxMLCBmYWxzZSwgaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJaW5kZXhfb25seV9zY2FuLCBpbnN0 cnVtZW50LCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zMDMsMjkgKzI5NiwyNiBAQCBpbmRleF9iZWdp bnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCSAgIEluZGV4U2Nhbklu c3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJICAgaW50IG5rZXlzKQogewotCUluZGV4 U2NhbkRlc2Mgc2NhbjsKLQogCUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOwor CUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpKTsKIAotCXNjYW4gPSBpbmRleF9i ZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNuYXBzaG90LCBOVUxM LCBmYWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhl IHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBSZWxhdGlvbkdl dEluZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4t Pmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4 X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25hcHNob3QsIE5V TEwsCisJCQkJCQkJCQlmYWxzZSwgTlVMTCwgZmFsc2UsIGluc3RydW1lbnQsIFNPX05PTkUpOwog fQogCiAvKgogICogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsIC0tLSBjb21tb24gY29kZSBmb3Ig aW5kZXhfYmVnaW5zY2FuIHZhcmlhbnRzCisgKgorICogV2hlbiBoZWFwUmVsYXRpb24gaXMgbm90 IE5VTEwsIGFsc28gaW5pdGlhbGl6ZXMgaGVhcC1zaWRlIHNjYW4gc3RhdGU6CisgKiBnZXRuZXh0 X3Nsb3QgcmVzb2x1dGlvbiBhbmQgdGFibGUgZmV0Y2ggaW5pdGlhbGl6YXRpb24uCiAgKi8KLXN0 YXRpYyBJbmRleFNjYW5EZXNjCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5k ZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwK LQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKQorCQkJ CQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAsCisJCQkJCQkg UmVsYXRpb24gaGVhcFJlbGF0aW9uLCBib29sIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCSBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJCQkgdWludDMyIGZsYWdzKQog ewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMzQ5LDYgKzMzOSwzMSBAQCBpbmRleF9iZWdp bnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAlzY2FuLT5wYXJhbGxlbF9z Y2FuID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCisJc2Nhbi0+ eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFw c2hvdChzbmFwc2hvdCk7CisJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisKKwkvKgor CSAqIEluaXRpYWxpemUgaGVhcC1zaWRlIHNjYW4gc3RhdGUgd2hlbiBhIGhlYXAgcmVsYXRpb24g aXMgcHJvdmlkZWQuCisJICogQml0bWFwIGluZGV4IHNjYW5zIGRvbid0IHByb3ZpZGUgb25lCisJ ICovCisJaWYgKGhlYXBSZWxhdGlvbiAhPSBOVUxMKQorCXsKKwkJc2Nhbi0+aGVhcFJlbGF0aW9u ID0gaGVhcFJlbGF0aW9uOworCQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47 CisKKwkJLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNl IGZvciB0aGlzIHNjYW4gKi8KKwkJaWYgKGluZGV4X29ubHlfc2NhbikKKwkJCXNjYW4tPnhzX2dl dG5leHRfc2xvdCA9CisJCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9vbmx5X2Ft Z2V0dHVwbGVfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3Qg PQorCQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9n ZXRuZXh0X3Nsb3Q7CisKKwkJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20g dGFibGUgKi8KKwkJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4o aGVhcFJlbGF0aW9uLCBmbGFncyk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTM4MCw3 ICszOTUsNiBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCQl0YWJsZV9pbmRl eF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9 IGZhbHNlOwogCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4s IGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKQEAgLTQ1Nyw3 ICs0NzEsNiBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCXRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKIAlzY2FuLT5raWxsX3ByaW9y X3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVl ID0gZmFsc2U7CiAKIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhz Y2FuKTsKIH0KQEAgLTU5Niw0MSArNjA5LDM0IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgaW5k ZXhfb25seV9zY2FuLAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVu dCwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRl eFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJIHVpbnQzMiBmbGFncykKIHsKIAlTbmFwc2hvdAlzbmFw c2hvdDsKLQlJbmRleFNjYW5EZXNjIHNjYW47CiAKIAlBc3NlcnQoUmVsRmlsZUxvY2F0b3JFcXVh bHMoaGVhcHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2xvY2F0b3IpKTsKIAlBc3NlcnQoUmVs RmlsZUxvY2F0b3JFcXVhbHMoaW5kZXhyZWwtPnJkX2xvY2F0b3IsIHBzY2FuLT5wc19pbmRleGxv Y2F0b3IpKTsKIAogCXNuYXBzaG90ID0gUmVzdG9yZVNuYXBzaG90KHBzY2FuLT5wc19zbmFwc2hv dF9kYXRhKTsKIAlSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKLQlzY2FuID0gaW5kZXhfYmVn aW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwKLQkJ CQkJCQkJCXBzY2FuLCB0cnVlKTsKIAotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRl cnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5 IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbC4KLQkgKi8KLQlzY2FuLT5oZWFwUmVsYXRpb24gPSBo ZWFwcmVsOwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVu dCA9IGluc3RydW1lbnQ7Ci0KLQkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJv bSB0YWJsZSAqLwotCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2lu KGhlYXByZWwsIGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAorCQkJCQkJ CQkJcHNjYW4sIHRydWUsIGhlYXByZWwsIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCQkJCWluc3Ry dW1lbnQsIGZsYWdzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQotICogaW5kZXhfZ2V0bmV4 dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCisgKiBpbmRleF9nZXRuZXh0X3Rp ZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAgKgogICogVGhlIHJlc3VsdCBpcyB0aGUgbmV4dCBU SUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAogICogb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0 YWJsZSBBTSdzIGluZGV4X2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiwKKyAqIGFuZCBvbmx5 IGdpdmVuIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhlIHNpbmdsZS10dXBsZSBhbWdldHR1 cGxlCisgKiBpbnRlcmZhY2UuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIEl0ZW1Qb2ludGVy CkBAIC02NTQsNyArNjYwLDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAogCS8qIFJlc2V0IGtpbGwgZmxhZyBpbW1lZGlh dGVseSBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOwotCXNj YW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAogCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRl eCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCiAJaWYgKCFmb3VuZCkKQEAgLTY3Myw5NyArNjc4LDYg QEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAKLS8qIC0tLS0tLS0tLS0t LS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1 cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVk IHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRjaGVkIGJ5IGluZGV4X2dl dG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzCi0gKiBleGlzdC4g IChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlIG9mIEhP VCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hv dWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1Y2ggdHVwbGUgdG8gZXhp c3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0 dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQgaW4gYSBmdXR1cmUgaW5k ZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2Fs bCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5k IHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdl IGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5m b3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0t LS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNj IHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7 Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4t PnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJCQlzY2FuLT54c19zbmFw c2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQp OwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJl bGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQg Zm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVu dHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICog YW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhp cyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRv IHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KLQkgKi8K LQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0vKiAtLS0tLS0tLS0tLS0t LS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBz Y2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUg c2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNl LiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCi0gKgotICogT24g c3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhl bGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlk LCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5v dGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hl Y2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhh dCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRv IGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0t Ci0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlmb3IgKDs7KQot CXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0JCQlJdGVtUG9pbnRlciB0 aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICov Ci0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKiBJ ZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwotCQkJaWYgKHRpZCA9 PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAm c2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0Y2ggdGhlIG5leHQgKG9y IG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KLQkJICogSWYg d2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElE IGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxp ZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90 KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2Ug ZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGU0YjcwMTY2 Yi4uY2E3NTliMGFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzYsNyArMTM2LDcgQEAg c3RhdGljIHZvaWQgc2hvd19yZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRl ICpyc3RhdGUsCiBzdGF0aWMgdm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1z dGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0 aWMgdm9pZCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpOwotc3RhdGljIHZvaWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5f aW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBzaG93X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJ CQkJCQkJRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlv bl9jb3VudChjb25zdCBjaGFyICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzQsNyArMTk3NCw3 IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJ CQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBS ZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlz aG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2Fu X2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46 CiAJCQlzaG93X3NjYW5fcXVhbCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwK QEAgLTE5ODgsMTUgKzE5ODgsMTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUs IExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVu dGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBw bGFuc3RhdGUsIGVzKTsKLQkJCWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlG bG9hdCgiSGVhcCBGZXRjaGVzIiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1l bnQtPm50dXBsZXMyLCAwLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3Rh dGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVh azsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFw SW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQi LCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8o cGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwog CQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgo Qml0bWFwSGVhcFNjYW4gKikgcGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg2MCwxNSArMzg1 NywxNiBAQCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpCiB9CiAKIC8qCi0gKiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNo ZXMgZm9yIGEKKyAqIFNob3cgaW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRh dGlvbiBmb3IgYQogICogSW5kZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5v ZGUKICAqLwogc3RhdGljIHZvaWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxh bnN0YXRlLT5wbGFuOwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5m byA9IE5VTEw7Ci0JdWludDY0CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0g MCwKKwkJCQludGFibGVmZXRjaGVzID0gMDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVy bjsKQEAgLTM4ODksNiArMzg4Nyw3IEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAq aW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQlu c2VhcmNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQlu dGFibGVmZXRjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50LT5udGFibGVmZXRjaGVz OwogCQkJCVNoYXJlZEluZm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJl YWs7CiAJCQl9CkBAIC0zOTEyLDkgKzM5MTEsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8o UGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0 cnVtZW50YXRpb24gKndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwog CiAJCQluc2VhcmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW50YWJsZWZldGNo ZXMgKz0gd2luc3RydW1lbnQtPm50YWJsZWZldGNoZXM7CiAJCX0KIAl9CiAKKwlpZiAobm9kZVRh ZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJCUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJI ZWFwIEZldGNoZXMiLCBOVUxMLCBudGFibGVmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVy dHlVSW50ZWdlcigiSW5kZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA0MzYzZTE1NGMuLmNmNzkyYThkZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgxNSwxMiArODE1LDEyIEBAIGNo ZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlv biBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2VsZiA9IGZhbHNl OwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsCi0JCQkJCQkJCSAm RGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDAsCi0JCQkJCQkJCSBTT19OT05FKTsK KwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCBmYWxzZSwgJkRpcnR5 U25hcHNob3QsIE5VTEwsCisJCQkJCQkJCSBpbmRua2V5YXR0cywgMCwgU09fTk9ORSk7CiAJaW5k ZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAK LQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGlu ZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhpc3Rpbmdfc2xvdCkp CiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGIyY2E1Y2JmMS4uYzg3M2Jj ZDgyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjA1LDggKzIw NSw4IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4 b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwg aWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4uICovCi0Jc2Nh biA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKLQkJCQkJCSAgICZzbmFwLCBOVUxMLCBz a2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlk eHJlbCwgZmFsc2UsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCwKKwkJCQkJCSAgIFNPX05P TkUpOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjE0LDcgKzIxNCw3IEBAIHJldHJ5 OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkv KiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJ CS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMg cHJpbWFyeSBrZXkgb3IKQEAgLTY2OSwxMyArNjY5LDEzIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRU dXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNv bW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkg KiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAqLwot CXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCi0JCQkJCQkgICBTbmFwc2hvdEFu eSwgTlVMTCwgc2tleV9hdHRvZmYsIDAsIFNPX05PTkUpOworCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsIGZhbHNlLCBTbmFwc2hvdEFueSwgTlVMTCwKKwkJCQkJCSAgIHNrZXlf YXR0b2ZmLCAwLCBTT19OT05FKTsKIAogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0 dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xvdCkp CisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5 IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCmluZGV4IDcwYzU1ZWU2ZC4uNzA0NWU1OGVmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCkBAIC0yMDQsNiArMjA0 LDcgQEAgRXhlY0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJv ZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3Nf SW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+Ymlzc19JbnN0cnVtZW50LT5u dGFibGVmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYwppbmRleCBkZTYxNTRmZDUuLjcyOWE4YTNlNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUg ImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKQEAgLTQyLDcgKzQxLDYgQEAKICNp bmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAKQEAgLTY2LDcgKzY0LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsK IAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkvKgogCSAqIGV4 dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC05MSw3 ICs4OCw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBw YXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJ CQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3Rh dGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJ CQkJCSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCkBAIC0xMDAsMTEgKzk3LDcgQEAgSW5kZXhP bmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkJCSAgIFNPX0hJTlRfUkVM X1JFQURfT05MWSA6IFNPX05PTkUpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVz YzsKLQotCi0JCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlv c3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIg PSBJbnZhbGlkQnVmZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9p dHVwKTsKIAogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0 aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCkBAIC0xMjEsNzggKzExNCwxMSBAQCBJbmRleE9u bHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3 ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUg KCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkK Kwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sCisJ CQkJCQkJCQlub2RlLT5pb3NzX1RhYmxlU2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hl YXAgPSBmYWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdl IGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFn ZSBvbgotCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9k eS4gIEluIGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUg aGVhcCB0dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5 IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkg KiBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3Vs dCB3ZSByZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBp dCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBu ZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3 YXksCi0JCSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2Ug YnV0IG5vdCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2Nh biAodXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJp YWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1 c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUg Vk0gYml0Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxv Y2tpbmcvdW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1l bW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlm IHdlIHNlZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBu b3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkg KiB0aGUgVElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMg bm90Ci0JCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2Vl IGEgdmFsdWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBk b24ndCBjYXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUg dHVwbGUgaXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rp b24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5z YWN0aW9uKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBo YXZlCi0JCSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVy IGNsZWFyaW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRo YXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1 cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2Nr IGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJ dCdzIHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcg dG8gbG9jawotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2Fu dCBjb250ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVh cFJlbGF0aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJ CQkmbm9kZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZl IHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3Ry Q291bnRUdXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNj LCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1 cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5p b3NzX1RhYmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBz dXBwb3J0ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAg Zm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBi ZWVuIGZvdW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtl ZXAKLQkJCSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4 dF90aWQgbmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGlu dWUpCi0JCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRl ZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBv aW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNv cmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93 LAotCQkJICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4g IFRoZSBuZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhl IHNhbWUgaGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0J CX0KLQogCQkvKgogCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20g dGhlIGluZGV4LiAgVGhpcyBtaWdodCBiZQogCQkgKiBwcm92aWRlZCBpbiBlaXRoZXIgSGVhcFR1 cGxlIG9yIEluZGV4VHVwbGUgZm9ybWF0LiAgQ29uY2VpdmFibHkgYW4KQEAgLTI0MSwxNiArMTY3 LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJ CQkJCSBlcnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBp biBpbmRleC1vbmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgYWNjZXNz IHRoZSBoZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQotCQkgKiBsb2Nr IGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBhdCBwYWdlIGxl dmVsLgotCQkgKi8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNhdGVMb2NrUGFn ZShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcih0aWQpLAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJcmV0dXJuIHNs b3Q7CiAJfQogCkBAIC00MTAsMTMgKzMyNiw2IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9uRGVzYyA9IG5vZGUtPmlvc3NfUmVs YXRpb25EZXNjOwogCWluZGV4U2NhbkRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOwogCi0JLyog UmVsZWFzZSBWTSBidWZmZXIgcGluLCBpZiBhbnkuICovCi0JaWYgKG5vZGUtPmlvc3NfVk1CdWZm ZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQl7Ci0JCVJlbGVhc2VCdWZmZXIobm9kZS0+aW9zc19WTUJ1 ZmZlcik7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KLQogCS8q CiAJICogV2hlbiBlbmRpbmcgYSBwYXJhbGxlbCB3b3JrZXIsIGNvcHkgdGhlIHN0YXRpc3RpY3Mg Z2F0aGVyZWQgYnkgdGhlCiAJICogd29ya2VyIGJhY2sgaW50byBzaGFyZWQgbWVtb3J5IHNvIHRo YXQgaXQgY2FuIGJlIHBpY2tlZCB1cCBieSB0aGUgbWFpbgpAQCAtNDM2LDYgKzM0NSw3IEBAIEV4 ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2gg d2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkg Ki8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQtPm5z ZWFyY2hlczsKKwkJd2luc3RydW1lbnQtPm50YWJsZWZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0 cnVtZW50LT5udGFibGVmZXRjaGVzOwogCX0KIAogCS8qCkBAIC03OTIsMTUgKzcwMiwxNCBAQCBF eGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAog CiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2Rl LT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9k ZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJ CQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJCQkJ CQkJCSBTY2FuUmVsSXNSZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRfUkVM X1JFQURfT05MWSA6IFNPX05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1 cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJQXNzZXJ0 KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1 bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQg cGFzcwpAQCAtODYwLDE0ICs3NjksMTQgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29y a2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQog CQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAot CQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJ CQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVy QnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuLAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5v ZGUtPnNzKSA/CiAJCQkJCQkJCSBTT19ISU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlu b2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBr ZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCAxNjIwZDE0NjAuLjQ5YWM5ZmQyYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIElu ZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFu IGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNj YW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJ CQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1Jl bGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJ CQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2Nh bktleXMsCkBAIC0xMzIsNyArMTMyLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2Rl KQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUg bmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBk aXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRl c2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBA IC0yMDcsNyArMjA3LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5u ZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihu b2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlv bkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJ CQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVu dCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjY2LDcgKzI2Niw3IEBA IEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBu ZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYg KCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90 KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20g dGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC04MTgsNiArODE4 LDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2gg d2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkg Ki8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnNl YXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0luc3RydW1lbnQtPm50YWJsZWZldGNoZXMgPT0g MCk7CiAJfQogCiAJLyoKQEAgLTE3MzAsNyArMTczMSw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFs aXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJ aW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJ CQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRp b25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkg bm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlz LApAQCAtMTc5Niw3ICsxNzk3LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5k ZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdp bnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9k ZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZh bHNlLAogCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IGZmYWEwZTc0OS4uMzk3ZjgyMDQ4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjcxNSw3ICsyNzE1LDcgQEAgcmlfRmFzdFBh dGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCWlkeF9yZWwgPSBpbmRl eF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKIAlzbG90ID0gdGFi bGVfc2xvdF9jcmVhdGUocGtfcmVsLCBOVUxMKTsKLQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nh bihwa19yZWwsIGlkeF9yZWwsCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBp ZHhfcmVsLCBmYWxzZSwKIAkJCQkJCQkgICBzbmFwc2hvdCwgTlVMTCwKIAkJCQkJCQkgICByaWlu Zm8tPm5rZXlzLCAwLAogCQkJCQkJCSAgIFNPX05PTkUpOwpAQCAtMjc2OCw3ICsyNzY4LDcgQEAg cmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCiAK IAlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAotCWlmIChp bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkK KwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc2xvdCkpCiAJewogCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYwppbmRleCA0MTYwZDJkNmUuLjZhMWRmYWI1MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9naW4u aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcxMjEsMTAgKzcxMjAsNiBAQCBnZXRfYWN0 dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2ZV9kYXRh ID0gZmFsc2U7CiAJU25hcHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNj YW5EZXNjIGluZGV4X3NjYW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0J QmxvY2tOdW1iZXIgbGFzdF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWludAkJ CW5fdmlzaXRlZF9oZWFwX3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0dW0JCXZh bHVlc1tJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC03MTcyLDYyICs3MTY3LDI2IEBAIGdldF9hY3R1 YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBhIGh1Z2UgYW1vdW50 IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1hbnkgaGVh cAogCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3 aWxsIGVuZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVk IGluIHBnX3N0YXRpc3RpYy4KKwkgKgorCSAqIFdlIHNldCB4c192aXNpdGVkX3BhZ2VzX2xpbWl0 IHRvIHRlbGwgdGhlIHRhYmxlIEFNIHRvIGNvdW50IGRpc3RpbmN0CisJICogaGVhcCBwYWdlcyB2 aXNpdGVkIGZvciBub24tdmlzaWJsZSB0dXBsZXMgYW5kIGdpdmUgdXAgYWZ0ZXIgdGhlIGxpbWl0 CisJICogaXMgZXhjZWVkZWQuCiAJICovCisjZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAw CiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJ CQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9i ZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFi bGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7Ci0JLyogU2V0IGl0 IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0dXAgPSB0 cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOworCWluZGV4X3NjYW4tPnhz X3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOwogCWluZGV4X3Jlc2Nh bihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9u ZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4 X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hpbGUg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHRhYmxl c2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxvY2ss Ci0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0 aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAo aW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2libGUg dHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZhbmNl IHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJICog cGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJICoK LQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUg aGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUg Y29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQg cGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdz IGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJCQkgKi8KLSNkZWZpbmUgVklTSVRF RF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxvY2spCi0J CQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVkX2hlYXBf cGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9QQUdFU19M SU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJs ZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2UgZG9uJ3Qg YWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4ZWNDbGVh clR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdoZXRoZXIg dGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBIT1QgY2hh aW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICovCi0JCX0K LQogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0YSBp biBJbmRleFR1cGxlIG5vdAogCQkgKiBIZWFwVHVwbGUgZm9ybWF0LgpAQCAtNzI1OSw4ICs3MjE4 LDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQli cmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1 ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBo YXZlX2RhdGE7Ci0tIAoyLjUzLjAKCg== --000000000000cbf586064e5574cb Content-Type: application/octet-stream; name="v19-0003-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Disposition: attachment; filename="v19-0003-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnew1w7v15 RnJvbSA4NWJlN2JmNTIwZmMyNzQ2ZjRlZTczYTA3NDRjN2FhMDRkYTU1ZTUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOSAwMy8xOF0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KCkFkZCBhbiBl eHBsaWNpdCBCbG9ja051bWJlciBmaWVsZCAoeHNfYmxrKSB0byBJbmRleEZldGNoSGVhcERhdGEg dGhhdAp0cmFja3Mgd2hpY2ggaGVhcCBibG9jayBpcyBjdXJyZW50bHkgcGlubmVkIGluIHhzX2Ni dWYuCgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgbm93IHVzZXMgeHNfYmxrIHRvIGRldGVybWlu ZSB3aGVuIGJ1ZmZlcgpzd2l0Y2hpbmcgaXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlIHByZXZpb3Vz IGFwcHJvYWNoIHRoYXQgY29tcGFyZWQKYnVmZmVyIGlkZW50aXRpZXMgdmlhIFJlbGVhc2VBbmRS ZWFkQnVmZmVyIG9uIGV2ZXJ5IG5vbi1IT1QtY2hhaW4gY2FsbC4KClRoaXMgaXMgcHJlcGFyYXRv cnkgd29yayBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXgKcHJlZmV0 Y2hpbmcgdXNpbmcgYSByZWFkIHN0cmVhbS4gIERlbGVnYXRpbmcgdGhlIHJlbGVhc2Ugb2YgYSBj dXJyZW50bHkKcGlubmVkIGJ1ZmZlciB0byBSZWxlYXNlQW5kUmVhZEJ1ZmZlciB3b24ndCB3b3Jr IGFueW1vcmUgLS0gYXQgbGVhc3Qgbm90CndoZW4gdGhlIG5leHQgYnVmZmVyIHRoYXQgdGhlIHNj YW4gbmVlZHMgdG8gcGluIGlzIG9uZSByZXR1cm5lZCBieQpyZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciAobm90IGEgYnVmZmVyIHJldHVybmVkIGJ5IFJlYWRCdWZmZXIpLgoKQXV0aG9yOiBQZXRlciBH ZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1nPUpU U3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwgIDUgKy0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCAzNyArKysrKysrKysr KysrLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBhMDY2MjQxNDIuLmY5MWYwZTJmYiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaApAQCAtMTIyLDEwICsxMjIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRj aEhlYXBEYXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSB4c19iYXNlOwkvKiBBTSBpbmRlcGVuZGVu dCBwYXJ0IG9mIHRoZSBkZXNjcmlwdG9yICovCiAKIAkvKgotCSAqIEN1cnJlbnQgaGVhcCBidWZm ZXIgaW4gc2NhbiwgaWYgYW55LiBOQjogaWYgeHNfY2J1ZiBpcyBub3QKLQkgKiBJbnZhbGlkQnVm ZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyLgorCSAqIEN1cnJlbnQgaGVhcCBidWZm ZXIgaW4gc2NhbiAoYW5kIGl0cyBibG9jayBudW1iZXIpLCBpZiBhbnkuICBOQjogaWYKKwkgKiB4 c19ibGsgaXMgbm90IEludmFsaWRCbG9ja051bWJlciwgd2UgaG9sZCBhIHBpbiBpbiB4c19jYnVm LgogCSAqLwogCUJ1ZmZlcgkJeHNfY2J1ZjsKKwlCbG9ja051bWJlciB4c19ibGs7CiAKIAkvKiBD dXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2liaWxpdHkg bWFwICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYwppbmRleCBmN2U0M2Q1NjcuLjRiNWUyYjMwZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNDgsNiArNDgsNyBAQCBoZWFw YW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJaHNjYW4t PnhzX2Jhc2UucmVsID0gcmVsOwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxhZ3M7CiAJaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAogCXJldHVy biAmaHNjYW4tPnhzX2Jhc2U7CkBAIC02Miw2ICs2Myw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXsKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nh bi0+eHNfY2J1Zik7CiAJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJaHNjYW4t PnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAl9CiAKIAlpZiAoQnVmZmVySXNWYWxpZCho c2Nhbi0+eHNfdm1idWZmZXIpKQpAQCAtMjkyLDI1ICsyOTQsMzAgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAKIAlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKIAotCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEq aGVhcF9jb250aW51ZSkKKwkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGluZyBsb2dp YyBpZiB3ZSdyZSBvbiB0aGUgc2FtZSBwYWdlLiAqLworCWlmIChoc2Nhbi0+eHNfYmxrICE9IEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKIAl7Ci0JCS8qIFN3aXRjaCB0byBjb3JyZWN0 IGJ1ZmZlciBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHkgKi8KLQkJQnVmZmVyCQlwcmV2X2J1 ZiA9IGhzY2FuLT54c19jYnVmOworCQlBc3NlcnQoISpoZWFwX2NvbnRpbnVlKTsKIAotCQloc2Nh bi0+eHNfY2J1ZiA9IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhzY2FuLT54c19jYnVmLAotCQkJCQkJ CQkJCQkgIGhzY2FuLT54c19iYXNlLnJlbCwKLQkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCkpOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJl ciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CisKKwkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCQkJ UmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkJaHNjYW4tPnhzX2NidWYgPSBSZWFk QnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CiAKIAkJLyoKLQkJICog UHJ1bmUgcGFnZSwgYnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQor CQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQogCQkg Ki8KLQkJaWYgKHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJaGVhcF9wYWdlX3BydW5l X29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAotCQkJCQkJCQkmaHNjYW4t PnhzX3ZtYnVmZmVyLAotCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVM X1JFQURfT05MWSk7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfY2J1ZiwKKwkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVyLAorCQkJCQkJCWhzY2Fu LT54c19iYXNlLmZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9PTkxZKTsKIAl9CiAKKwlBc3NlcnQo QnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19ibGspOwor CUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7 CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5l IHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19T SEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKQEAg LTQxNiwxMSArNDIzLDExIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJICovCiAJCQkJCWlmICh1bmxp a2VseSh4c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCiAJCQkJCXsKLQkJCQkJCUJsb2NrTnVt YmVyIGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJCQkJCUFzc2VydCho c2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CiAKLQkJCQkJ CWlmIChibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJCQkJaWYgKGhzY2FuLT54c19ibGsg IT0gbGFzdF92aXNpdGVkX2Jsb2NrKQogCQkJCQkJewotCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9j ayA9IGJsazsKKwkJCQkJCQlsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBoc2Nhbi0+eHNfYmxrOwogCQkJ CQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQpCiAJCQkJ CQkJCXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLwogCQkJCQkJfQotLSAKMi41My4wCgo= --000000000000cbf586064e5574cb--