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 1w10tq-002PoZ-2v for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:41:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w10tp-003dWK-0Y for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:41:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w10to-003dWB-0x for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 11:41:49 +0000 Received: from meesny.iki.fi ([195.140.195.201]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w10tg-00000001vn9-2Tzc for pgsql-hackers@postgresql.org; Fri, 13 Mar 2026 11:41:47 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4fXMyR2KlqzyR8; Fri, 13 Mar 2026 13:41:35 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773402096; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DyIMUBO8KHieT2NI+z1sRdDDmioYfGT7SB1hoSMv4l8=; b=dXLQ09ns4TnQLqMWl1rIooGjkwLyigPkVB06My3LHzdMfGBI7ZQehbw6fiL893LegEbqBV DWJNpplAzZL8lmN33F0qbLxm8dZJOnu9VHVUAzJ/z3BspofYcYLweh09FwUDH5jIqt6DTB Djkf8akXfLfLGpPlIayATVYEp8Fsxm4= ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=meesny; cv=none; t=1773402096; b=l4MYcO4fUukKEJSYmeNa6NFB51yFK6NaNCivgCpMb+Ml6f9FVlfnFJ/Je1d8DUka3V/HLB Um0ObDGTamtVoo+c1ICTladphDTI7nXIPkijUyLVmKiPWNvuel8pD+ZkQj1lnkZPDWnMWT Wqh+QWzss+hpV+qlY11FIdDtC1ihbS4= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773402096; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DyIMUBO8KHieT2NI+z1sRdDDmioYfGT7SB1hoSMv4l8=; b=GUIrjOPcTMPXE6oo+qTtN57rfnQxk90NuR8619uu2ZZvs6PiLd2jlDYAUBOKZ8dfv7hgE8 +0vjMTxW3cVEERFSKfWkPPnf1YIB4V+jpH3JK8psklz6PMoMd5MIhm0E0bBx/+TuoZb+de b2BfRyw2Vv2kCL39oCYc+W3dTyg5T20= Content-Type: multipart/mixed; boundary="------------0GENrK1iCkv2OWWU207VI4qz" Message-ID: Date: Fri, 13 Mar 2026 13:41:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Better shared data structure management and resizable shared data structures To: Robert Haas Cc: Ashutosh Bapat , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com References: <5a37c2e3-619d-4816-84d7-0b27e3e6797f@iki.fi> <26c766d6-db0f-43d3-a618-44f8d40a3121@iki.fi> <62b8dc23-8f6a-4cac-91ff-f74bb5bc159a@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0GENrK1iCkv2OWWU207VI4qz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/03/2026 22:05, Robert Haas wrote: > On Thu, Mar 12, 2026 at 3:21 PM Heikki Linnakangas wrote: >>>> I'm currently leaning towards _PG_init(), except for allocations that >>>> depend on MaxBackends. For those, you can install a shmem_request_hook >>>> that sets the size in the descriptor. In other words, you can leave the >>>> 'size' as empty in _PG_init(), but set it later in the shmem_request_hook. >>> >>> Why can't you just do the whole thing later? >> >> shmem_request_hook won't work in EXEC_BACKEND mode, because in >> EXEC_BACKEND mode, ShmemRegisterStruct() also needs to be called at >> backend startup. >> >> One of my design goals is to avoid EXEC_BACKEND specific steps so that >> if you write your extension oblivious to EXEC_BACKEND mode, it will >> still usually work with EXEC_BACKEND. For example, if it was necessary >> to call a separate AttachShmem() function for every shmem struct in >> EXEC_BACKEND mode, but which was not needed on Unix, that would be bad. > > That's *definitely* a good goal. A less important but still valuable > goal is to maximize the notational simplicity of the mechanism. Your > callback idea is elegant in theory but in practice it seems like it > might make it harder for people to get started quickly on a new > module, and having to create the object in one place and then fill in > the size in another sort of has the same problem. I don't really know > what to do about that, but it's something to think about. The > complexity of getting the details right is annoyingly high in this > area. Yeah. IMHO the existing shmem_request/startup_hook mechanism is pretty awkward too, and in most cases, the new mechanism is more convenient. It might be slightly less convenient for some things, but mostly it's better. Would you agree with that, or do you actually like the old hooks and ShmemInitStruct() better? One such wrinkle with ShmemRegisterStruct() in the patch now is that it's harder to do initialization that touches multiple structs or hash tables. Currently the callbacks are called in the same order that the structs are registered, so you can do all the initialization in the last struct's callback. The single pair of shmem_request/startup_hooks per module was more clear in that aspect. Fortunately, that kind of cross-struct dependencies are pretty rare. So I think it's fine. (The order that the callbacks are called needs be documented explicitly though). If we want to improve on that, one idea would be to introduce a ShmemRegisterCallbacks() function to register callbacks that are not tied to any particular struct and are called after all the per-struct callbacks. >>> Yeah, I think RequestNamedLWLockTranche() might be fine if you just >>> need LWLocks, but if you need a bunch of resources, putting them all >>> into the same chunk of memory seems cleaner. >> >> Agreed. Then again, how often do you need just a LWLock (or multiple >> LWLocks)? Surely you have a struct you want to protect with the lock. I >> guess having shmem hash table but no struct would be pretty common, though. > > Yeah, we've developed an annoying number of different ways to do this > stuff. I don't entirely know how to fix that. Here's a new version that doubles down on the LWLockNewTrancheId+LWLockInitialize method, by changing the example in the docs, and contrib/pg_stat_statements, to use that method. RequestNamedLWLockTranche() still works, there are no changes to it, it's just not as convenient to use with ShmemRegisterStruct(). This has the advantage that we don't introduce yet another way of allocating LWLocks. P.S. Thanks for chiming in on this. It's pretty subjective how natural a new API like this feels like, so opinions are very welcome. - Heikki --------------0GENrK1iCkv2OWWU207VI4qz Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Introduce-a-new-mechanism-for-registering-shared-.patch" Content-Disposition: attachment; filename*0="v3-0001-Introduce-a-new-mechanism-for-registering-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4MzY1ZmNiNzkyMjI1Yjc2Yjg1MGUzZDFmMTU4NzhhMzIwZmQxZTMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMTE6MjE6MzcgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDEvM10gSW50cm9kdWNlIGEgbmV3IG1lY2hhbmlzbSBmb3Ig cmVnaXN0ZXJpbmcgc2hhcmVkCiBtZW1vcnkgYXJlYXMKCkVhY2ggc2hhcmVkIG1lbW9yeSBh cmVhIGlzIHJlZ2lzdGVyZWQgd2l0aCBhICJkZXNjcmlwdG9yIHN0cnVjdCIgdGhhdApjb250 YWlucyB0aGUgcGFyYW1ldGVycyBsaWtlIG5hbWUgYW5kIHNpemUuIEEgc3RydWN0IG1ha2Vz IGl0IGVhc2llcgp0byBhZGQgb3B0aW9uYWwgZmllbGRzIGluIHRoZSBmdXR1cmU7IHRoZSBh ZGRpdGlvbmFsIGZpZWxkcyBjYW4ganVzdApiZSBsZWZ0IGFzIHplcm9zLgoKVGhpcyBtZXJn ZXMgdGhlIHNlcGFyYXRlIFtTdWJzeXN0ZW1dU2htZW1TaXplKCkgYW5kCltTdWJzeXN0ZW1d U2htZW1Jbml0KCkgcGhhc2VzIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cC4gRWFjaCBzdWJzeXN0 ZW0gaXMKbm93IGNhbGxlZCBpbnRvIGp1c3Qgb25jZSwgYmVmb3JlIHRoZSBzaGFyZWQgbWVt b3J5IHNlZ21lbnQgaGFzIGJlZW4KYWxsb2NhdGVkLCB0byByZWdpc3RlciB0aGUgc3Vic3lz dGVtcyBzaGFyZWQgbWVtb3J5IGFyZWFzLiBUaGUKcmVnaXN0cmF0aW9uIGluY2x1ZGVzIHRo ZSBzaXplLCB3aGljaCByZXBsYWNlcyB0aGUKW1N1YnN5c3RlbV1TaG1lbVNpemUoKSBjYWxs cywgYW5kIGEgcG9pbnRlciB0byBhbiBpbml0aWFsaXphdGlvbgpjYWxsYmFjayBmdW5jdGlv biwgd2hpY2ggcmVwbGFjZXMgdGhlIFtTdWJzeXN0ZW1dU2htZW1Jbml0KCkKY2FsbHMuIFRo aXMgaXMgbW9yZSBlcmdvbm9taWMsIGFzIHlvdSBvbmx5IG5lZWQgdG8gY2FsY3VsYXRlIHRo ZSBzaXplCm9uY2UsIHdoZW4geW91IHJlZ2lzdGVyIHRoZSBzdHJ1Y3QuCgpUaGlzIHJlcGxh Y2VzIFNobWVtSW5pdFN0cnVjdCgpIGFuZCBTaG1lbUluaXRIYXNoKCksIHdoaWNoIGJlY29t ZSBqdXN0CmJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdyYXBwZXJzIGFyb3VuZCB0aGUgbmV3 IGZ1bmN0aW9ucy4gSW4gZnV0dXJlCmNvbW1pdHMsIEkgcGxhbiB0byByZXBsYWNlIGFsbCBT aG1lbUluaXRTdHJ1Y3QoKSBhbmQgU2htZW1Jbml0SGFzaCgpCmNhbGxzIHdpdGggdGhlIG5l dyBmdW5jdGlvbnMsIGFsdGhvdWdoIHdlJ2xsIHN0aWxsIG5lZWQgdG8ga2VlcCB0aGVtCmFy b3VuZCBmb3IgZXh0ZW5zaW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNn bWwgICAgICAgICAgfCAgIDQgKy0KIGRvYy9zcmMvc2dtbC94ZnVuYy5zZ21sICAgICAgICAg ICAgICAgICB8IDEyMSArKy0tCiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMg ICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5j IHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICB8ICAg NSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgfCAgNTcgKy0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICAgICAgICB8IDgyMSArKysrKysr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAg ICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAgIHwgMTM2 ICsrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDgyOSBpbnNlcnRpb25zKCspLCAzMjUgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIv ZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IGU1ZmU0MjNmYzYxLi5hMGJh ZWQzMzlmZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtNDI1NCw4ICs0MjU0LDgg QEAgU0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpPSU4gcGdfcHJlcGFyZWRfeGFj dHMgcHB4CiAgIDxwYXJhPgogICAgQW5vbnltb3VzIGFsbG9jYXRpb25zIGFyZSBhbGxvY2F0 aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlCiAgICB3aXRoIDxsaXRlcmFsPlNobWVtQWxsb2Mo KTwvbGl0ZXJhbD4gZGlyZWN0bHksIHJhdGhlciB0aGFuIHZpYQotICAgPGxpdGVyYWw+U2ht ZW1Jbml0U3RydWN0KCk8L2xpdGVyYWw+IG9yCi0gICA8bGl0ZXJhbD5TaG1lbUluaXRIYXNo KCk8L2xpdGVyYWw+LgorICAgPGxpdGVyYWw+U2htZW1SZWdpc3RlclN0cnVjdCgpPC9saXRl cmFsPiBvcgorICAgPGxpdGVyYWw+U2htZW1SZWdpc3Rlckhhc2goKTwvbGl0ZXJhbD4uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC94ZnVuYy5z Z21sIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXggNzBlODE1YjhhMmMuLjU3MzIw ZDMyM2ZjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwveGZ1bmMuc2dtbApAQCAtMzYyOCw1OSArMzYyOCw4NyBAQCBDUkVBVEUgRlVO Q1RJT04gbWFrZV9hcnJheShhbnllbGVtZW50KSBSRVRVUk5TIGFueWFycmF5CiAgICAgICBB ZGQtaW5zIGNhbiByZXNlcnZlIHNoYXJlZCBtZW1vcnkgb24gc2VydmVyIHN0YXJ0dXAuICBU byBkbyBzbywgdGhlCiAgICAgICBhZGQtaW4ncyBzaGFyZWQgbGlicmFyeSBtdXN0IGJlIHBy ZWxvYWRlZCBieSBzcGVjaWZ5aW5nIGl0IGluCiAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMt c2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+PGluZGV4dGVybT48cHJpbWFyeT5zaGFyZWRf cHJlbG9hZF9saWJyYXJpZXM8L3ByaW1hcnk+PC9pbmRleHRlcm0+LgotICAgICAgVGhlIHNo YXJlZCBsaWJyYXJ5IHNob3VsZCBhbHNvIHJlZ2lzdGVyIGEKLSAgICAgIDxsaXRlcmFsPnNo bWVtX3JlcXVlc3RfaG9vazwvbGl0ZXJhbD4gaW4gaXRzCi0gICAgICA8ZnVuY3Rpb24+X1BH X2luaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gIFRoaXMKLSAgICAgIDxsaXRlcmFsPnNobWVt X3JlcXVlc3RfaG9vazwvbGl0ZXJhbD4gY2FuIHJlc2VydmUgc2hhcmVkIG1lbW9yeSBieQot ICAgICAgY2FsbGluZzoKLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQgUmVxdWVzdEFkZGluU2ht ZW1TcGFjZShTaXplIHNpemUpCi08L3Byb2dyYW1saXN0aW5nPgotICAgICAgRWFjaCBiYWNr ZW5kIHNob3VsZCBvYnRhaW4gYSBwb2ludGVyIHRvIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVt b3J5IGJ5Ci0gICAgICBjYWxsaW5nOgorICAgICAgVGhlIHNoYXJlZCBsaWJyYXJ5IHNob3Vs ZCByZWdpc3RlciB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIGluCisgICAgICBpdHMg PGZ1bmN0aW9uPl9QR19pbml0PC9mdW5jdGlvbj4gZnVuY3Rpb24uICBIZXJlIGlzIGFuIGV4 YW1wbGU6CiA8cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkICpTaG1lbUluaXRTdHJ1Y3QoY29uc3Qg Y2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKLTwvcHJvZ3JhbWxpc3Rp bmc+Ci0gICAgICBJZiB0aGlzIGZ1bmN0aW9uIHNldHMgPGxpdGVyYWw+Zm91bmRQdHI8L2xp dGVyYWw+IHRvCi0gICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSBjYWxsZXIg c2hvdWxkIHByb2NlZWQgdG8gaW5pdGlhbGl6ZSB0aGUKLSAgICAgIGNvbnRlbnRzIG9mIHRo ZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5LiAgSWYgPGxpdGVyYWw+Zm91bmRQdHI8L2xpdGVy YWw+Ci0gICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRoZSBzaGFy ZWQgbWVtb3J5IHdhcyBhbHJlYWR5Ci0gICAgICBpbml0aWFsaXplZCBieSBhbm90aGVyIGJh Y2tlbmQsIGFuZCB0aGUgY2FsbGVyIG5lZWQgbm90IGluaXRpYWxpemUKLSAgICAgIGZ1cnRo ZXIuCi0gICAgIDwvcGFyYT4KK3R5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsKKyAgICBM V0xvY2sgICAgICBsb2NrOyAgICAvKiBwcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93ICovCiAK LSAgICAgPHBhcmE+Ci0gICAgICBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIGVhY2ggYmFj a2VuZCBzaG91bGQgdXNlIHRoZSBMV0xvY2sKLSAgICAgIDxmdW5jdGlvbj5BZGRpblNobWVt SW5pdExvY2s8L2Z1bmN0aW9uPiB3aGVuIGluaXRpYWxpemluZyBpdHMgYWxsb2NhdGlvbgot ICAgICAgb2Ygc2hhcmVkIG1lbW9yeSwgYXMgc2hvd24gaGVyZToKLTxwcm9ncmFtbGlzdGlu Zz4KLXN0YXRpYyBteXN0cnVjdCAqcHRyID0gTlVMTDsKLWJvb2wgICAgICAgIGZvdW5kOwor ICAgIC4uLiBzaGFyZWQgbWVtb3J5IGNvbnRlbnRzIC4uLgorfSBNeVNobWVtRGF0YTsKKwor c3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOyAgICAvKiBwb2ludGVyIHRvIHRoZSBzdHJ1 Y3QgaW4gc2hhcmVkIG1lbW9yeSAqLworCitzdGF0aWMgdm9pZCBteV9zaG1lbV9pbml0KHZv aWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXlTaG1lbURlc2MgPSB7Cisg ICAgLm5hbWUgPSAiTXkgc2htZW0gYXJlYSIsCisgICAgLnNpemUgPSBzaXplb2YoTXlTaG1l bURhdGEpLAorICAgIC5pbml0X2ZuID0gbXlfc2htZW1faW5pdCwKKyAgICAucHRyID0gJmFt cDtNeVNobWVtLAorfTsKIAotTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5pdExvY2ssIExX X0VYQ0xVU0lWRSk7Ci1wdHIgPSBTaG1lbUluaXRTdHJ1Y3QoIm15IHN0cnVjdCBuYW1lIiwg c2l6ZSwgJmFtcDtmb3VuZCk7Ci1pZiAoIWZvdW5kKQorLyoKKyAqIE1vZHVsZSBsb2FkIGNh bGxiYWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCiB7Ci0gICAgLi4uIGluaXRpYWxp emUgY29udGVudHMgb2Ygc2hhcmVkIG1lbW9yeSAuLi4KLSAgICBwdHItPmxvY2tzID0gR2V0 TmFtZWRMV0xvY2tUcmFuY2hlKCJteSB0cmFuY2hlIG5hbWUiKTsKKyAgICAvKgorICAgICAq IEluIG9yZGVyIHRvIGNyZWF0ZSBvdXIgc2hhcmVkIG1lbW9yeSBhcmVhLCB3ZSBoYXZlIHRv IGJlIGxvYWRlZCB2aWEKKyAgICAgKiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuCisgICAg ICovCisgICAgaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9n cmVzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogUmVnaXN0ZXIgb3VyIHNoYXJlZCBt ZW1vcnkgbmVlZHMgKi8KKyAgICBTaG1lbVJlZ2lzdGVyU3RydWN0KCZhbXA7TXlTaG1lbURl c2MpOwogfQotTFdMb2NrUmVsZWFzZShBZGRpblNobWVtSW5pdExvY2spOworCisvKiBjYWxs YmFjayB0byBpbml0aWFsaXplIHRoZSBjb250ZW50cyBvZiB0aGUgTXlTaG1lbSBhcmVhIGF0 IHN0YXJ0dXAgKi8KK3N0YXRpYyB2b2lkCitteV9zaG1lbV9pbml0KHZvaWQgKmFyZykKK3sK KyAgICBpbnQgICAgICAgICB0cmFuY2hlX2lkOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUg bG9jayAqLworICAgIHRyYW5jaGVfaWQgPSBMV0xvY2tOZXdUcmFuY2hlSWQoIm15IHRyYW5j aGUgbmFtZSIpOworICAgIExXTG9ja0luaXRpYWxpemUoJmFtcDtNeVNobWVtLT5sb2NrKTsK KworICAgIC4uLiBpbml0aWFsaXplIHRoZSByZXN0IG9mIE15U2htZW0gZmllbGRzIC4uLgor fQorCiA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9o b29rPC9saXRlcmFsPiBwcm92aWRlcyBhIGNvbnZlbmllbnQgcGxhY2UgZm9yIHRoZQotICAg ICAgaW5pdGlhbGl6YXRpb24gY29kZSwgYnV0IGl0IGlzIG5vdCBzdHJpY3RseSByZXF1aXJl ZCB0aGF0IGFsbCBzdWNoIGNvZGUKLSAgICAgIGJlIHBsYWNlZCBpbiB0aGlzIGhvb2suICBP biBXaW5kb3dzIChhbmQgYW55d2hlcmUgZWxzZSB3aGVyZQotICAgICAgPGxpdGVyYWw+RVhF Q19CQUNLRU5EPC9saXRlcmFsPiBpcyBkZWZpbmVkKSwgZWFjaCBiYWNrZW5kIGV4ZWN1dGVz IHRoZQotICAgICAgcmVnaXN0ZXJlZCA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hvb2s8L2xp dGVyYWw+IHNob3J0bHkgYWZ0ZXIgaXQKLSAgICAgIGF0dGFjaGVzIHRvIHNoYXJlZCBtZW1v cnksIHNvIGFkZC1pbnMgc2hvdWxkIHN0aWxsIGFjcXVpcmUKLSAgICAgIDxmdW5jdGlvbj5B ZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiB3aXRoaW4gdGhpcyBob29rLCBhcyBzaG93 biBpbiB0aGUKLSAgICAgIGV4YW1wbGUgYWJvdmUuICBPbiBvdGhlciBwbGF0Zm9ybXMsIG9u bHkgdGhlIHBvc3RtYXN0ZXIgcHJvY2VzcyBleGVjdXRlcwotICAgICAgdGhlIDxsaXRlcmFs PnNobWVtX3N0YXJ0dXBfaG9vazwvbGl0ZXJhbD4sIGFuZCBlYWNoIGJhY2tlbmQgYXV0b21h dGljYWxseQotICAgICAgaW5oZXJpdHMgdGhlIHBvaW50ZXJzIHRvIHNoYXJlZCBtZW1vcnku CisgICAgICBUaGUgPGZ1bmN0aW9uPlNobWVtUmVnaXN0ZXJTdHJ1Y3QoKTwvZnVuY3Rpb24+ IGNhbGwgZG9lc24ndCBpbW1lZGlhdGVseQorICAgICAgYWxsb2NhdGUgb3IgaW5pdGlhbGl6 ZSB0aGUgbWVtb3J5LCBpdCBtZXJlbHkgcmVnaXN0ZXJzIHRoZSBzcGFjZSB0byBiZQorICAg ICAgYWxsb2NhdGVkIGxhdGVyIGluIHRoZSBzdGFydHVwIHNlcXVlbmNlLiAgSWYgdGhlIHNp emUgb2YgdGhlIGFsbG9jYXRpb24KKyAgICAgIGRlcGVuZHMgb24gPHZhcm5hbWU+TWF4QmFj a2VuZHM8L3Zhcm5hbWU+IG9yIG90aGVyIHZhcmlhYmxlcyB0aGF0IGFyZQorICAgICAgbm90 IHlldCBpbml0aWFsaXplZCB3aGVuIDxmdW5jdGlvbj5fUEdfaW5pdCgpPC9mdW5jdGlvbj4g aXMgY2FsbGVkLCB0aGUKKyAgICAgIHNpemUgY2FuIHN0aWxsIGJlIGFkanVzdGVkIGxhdGVy IGJ5IHJlZ2lzdGVyaW5nIGEKKyAgICAgIDxsaXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwv bGl0ZXJhbD4gYW5kIGNoYW5naW5nIHRoZSBkZXNjcmlwdG9yIHRoZXJlLgorICAgICAgV2hl biB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgdGhlIHJlZ2lzdGVyZWQKKyAgICAgIDxmdW5j dGlvbj5pbml0X2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkIHRvIGluaXRpYWxp emUgaXQuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgPGZ1bmN0aW9u PmluaXRfZm4oKTwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIG5vcm1hbGx5IGNhbGxlZCBhdAor ICAgICAgcG9zdG1hc3RlciBzdGFydHVwLCB3aGVuIG5vIG90aGVyIHByb2Nlc3NlcyBhcmUg cnVubmluZyB5ZXQgYW5kIG5vCisgICAgICBsb2NraW5nIGlzIHJlcXVpcmVkLiAgSG93ZXZl ciwgaWYgc2hhcmVkIG1lbW9yeSBhcmVhIGlzIHJlZ2lzdGVyZWQgYWZ0ZXIKKyAgICAgIHN5 c3RlbSBzdGFydCwgZS5nLiBpbiBhbiBleHRlbnNpb24gdGhhdCBpcyBub3QgaW4KKyAgICAg IDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz48aW5kZXh0 ZXJtPjxwcmltYXJ5PnNoYXJlZF9wcmVsb2FkX2xpYnJhcmllczwvcHJpbWFyeT48L2luZGV4 dGVybT4sCisgICAgICA8ZnVuY3Rpb24+U2htZW1SZWdpc3RlclN0cnVjdCgpPC9mdW5jdGlv bj4gd2lsbCBpbW1lZGlhdGVseSBjYWxsCisgICAgICB0aGUgPGZ1bmN0aW9uPmluaXRfZm48 L2Z1bmN0aW9uPiBjYWxsYmFjay4gIEluIHRoYXQgY2FzZSwgaXQgaG9sZHMgYQorICAgICAg bG9jayBpbnRlcm5hbGx5IHRoYXQgcHJldmVudHMgY29uY3VycmVudCBzaG1lbSBhbGxvY2F0 aW9ucy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIE9uIFdpbmRvd3MsIHRo ZSA8ZnVuY3Rpb24+YXR0YWNoX2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgYWRkaXRpb25h bGx5CisgICAgICBjYWxsZWQgYXQgZXZlcnkgYmFja2VuZCBzdGFydHVwLiAgSXQgY2FuIGJl IHVzZWQgZm9yIGluaXRpYWxpemluZworICAgICAgYWRkaXRpb25hbCBwZXItYmFja2VuZCBz dGF0ZSByZWxhdGVkIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgdGhhdCBpcworICAgICAg aW5oZXJpdGVkIHZpYSA8ZnVuY3Rpb24+Zm9yaygpPC9mdW5jdGlvbj4gb24gb3RoZXIgc3lz dGVtcy4gIE9uIG90aGVyCisgICAgICBwbGF0Zm9ybXMsIHRoZSA8ZnVuY3Rpb24+YXR0YWNo X2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgb25seSBjYWxsZWQKKyAgICAgIGZvciBzdHJ1 Y3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYWZ0ZXIgc3lzdGVtIHN0YXJ0dXAuCiAgICAgIDwv cGFyYT4KLQogICAgICA8cGFyYT4KLSAgICAgIEFuIGV4YW1wbGUgb2YgYSA8bGl0ZXJhbD5z aG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+IGFuZAotICAgICAgPGxpdGVyYWw+c2htZW1f c3RhcnR1cF9ob29rPC9saXRlcmFsPiBjYW4gYmUgZm91bmQgaW4KKyAgICAgIEFuIGV4YW1w bGUgb2YgYWxsb2NhdGluZyBzaGFyZWQgbWVtb3J5IGNhbiBiZSBmb3VuZCBpbgogICAgICAg PGZpbGVuYW1lPmNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50 cy5jPC9maWxlbmFtZT4gaW4KICAgICAgIHRoZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IHNvdXJjZSB0cmVlLgogICAgICA8L3BhcmE+CkBAIC0zNjkxLDggKzM3 MTksNyBAQCBMV0xvY2tSZWxlYXNlKEFkZGluU2htZW1Jbml0TG9jayk7CiAKICAgICAgPHBh cmE+CiAgICAgICBUaGVyZSBpcyBhbm90aGVyLCBtb3JlIGZsZXhpYmxlIG1ldGhvZCBvZiBy ZXNlcnZpbmcgc2hhcmVkIG1lbW9yeSB0aGF0Ci0gICAgICBjYW4gYmUgZG9uZSBhZnRlciBz ZXJ2ZXIgc3RhcnR1cCBhbmQgb3V0c2lkZSBhCi0gICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1 ZXN0X2hvb2s8L2xpdGVyYWw+LiAgVG8gZG8gc28sIGVhY2ggYmFja2VuZCB0aGF0IHdpbGwK KyAgICAgIGNhbiBiZSBkb25lIGFmdGVyIHNlcnZlciBzdGFydHVwLiAgVG8gZG8gc28sIGVh Y2ggYmFja2VuZCB0aGF0IHdpbGwKICAgICAgIHVzZSB0aGUgc2hhcmVkIG1lbW9yeSBzaG91 bGQgb2J0YWluIGEgcG9pbnRlciB0byBpdCBieSBjYWxsaW5nOgogPHByb2dyYW1saXN0aW5n Pgogdm9pZCAqR2V0TmFtZWREU01TZWdtZW50KGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBz aXplLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIv c3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IDE3MTE4ZjJmZTc2Li5k OWQ4YmI2YTVmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJh cC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtMzY5LDYg KzM2OSw4IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGJv b2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKKwlSZWdp c3RlclNobWVtU3RydWN0cygpOworCiAJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jl cygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNo X2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpp bmRleCAzMDM1Nzg0NTcyOS4uZmVjYWU4MjdlNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJyZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL2JhY2tlbmRf c3RhcnR1cC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC02NzcsNyArNjc4 LDEwIEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkv KiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAlpZiAoVXNlZFNo bWVtU2VnQWRkciAhPSBOVUxMKQorCXsKIAkJSW5pdFNobWVtQWxsb2NhdG9yKFVzZWRTaG1l bVNlZ0FkZHIpOworCQlSZWdpc3RlclNobWVtU3RydWN0cygpOworCX0KIAogCS8qCiAJICog UnVuIHRoZSBhcHByb3ByaWF0ZSBNYWluIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jCmluZGV4IDNmYWM0NmM0MDJiLi43MDJjNjQ2ZjBkNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTk1OCw2ICs5NTgsOSBAQCBQb3N0bWFz dGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCUluaXRpYWxpemVGYXN0 UGF0aExvY2tzKCk7CiAKKwkvKiBSZWdpc3RlciB0aGUgc2hhcmVkIG1lbW9yeSBuZWVkcyBv ZiBhbGwgY29yZSBzdWJzeXN0ZW1zLiAqLworCVJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCk7CisK IAkvKgogCSAqIEdpdmUgcHJlbG9hZGVkIGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0 IGFkZGl0aW9uYWwgc2hhcmVkIG1lbW9yeS4KIAkgKi8KQEAgLTMyMzYsNiArMzIzOSw4IEBA IFBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUodm9pZCkKIAkJTG9jYWxQcm9jZXNzQ29udHJvbEZp bGUodHJ1ZSk7CiAKIAkJLyogcmUtY3JlYXRlIHNoYXJlZCBtZW1vcnkgYW5kIHNlbWFwaG9y ZXMgKi8KKwkJUmVzZXRTaG1lbUFsbG9jYXRvcigpOworCQlSZWdpc3RlclNobWVtU3RydWN0 cygpOwogCQlDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAkJVXBkYXRl UE1TdGF0ZShQTV9TVEFSVFVQKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBhNDc4 NWRhZjFlNS4uN2M2NTNlMjczNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTk5 LDEwICs5OSwxMiBAQCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAkgKiBkdXJpbmcgdGhl IGFjdHVhbCBhbGxvY2F0aW9uIHBoYXNlLgogCSAqLwogCXNpemUgPSAxMDAwMDA7Ci0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShTSE1FTV9JTkRFWF9TSVpF LAotCQkJCQkJCQkJCQkgc2l6ZW9mKFNobWVtSW5kZXhFbnQpKSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFNobWVtUmVnaXN0ZXJlZFNpemUoKSk7CisKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgZHNtX2VzdGltYXRlX3NpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIERT TVJlZ2lzdHJ5U2htZW1TaXplKCkpOworCisJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgTG9ja01hbmFnZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUoKSk7CkBAIC0yMTgsNiArMjIw LDEwIEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkgKi8KIAlJ bml0U2htZW1BbGxvY2F0b3Ioc2VnaGRyKTsKIAorCS8qIFJlc2VydmUgc3BhY2UgZm9yIHNl bWFwaG9yZXMuICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJUEdSZXNlcnZlU2Vt YXBob3JlcyhQcm9jR2xvYmFsU2VtYXMoKSk7CisKIAkvKiBJbml0aWFsaXplIHN1YnN5c3Rl bXMgKi8KIAlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwogCkBAIC0yMzEsNiArMjM3 LDIyIEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkJc2htZW1f c3RhcnR1cF9ob29rKCk7CiB9CiAKKy8qCisgKiBFYXJseSBpbml0aWFsaXphdGlvbiBvZiB2 YXJpb3VzIHN1YnN5c3RlbXMsIGdpdmluZyB0aGVtIGEgY2hhbmdlIHRvCisgKiByZWdpc3Rl ciB0aGVpciBzaGFyZWQgbWVtb3J5IG5lZWRzIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBz ZWdtZW50IGlzCisgKiBhbGxvY2F0ZWQuCisgKi8KK3ZvaWQKK1JlZ2lzdGVyU2htZW1TdHJ1 Y3RzKHZvaWQpCit7CisJLyoKKwkgKiBUT0RPOiBOb3QgdXNlZCBpbiBhbnkgYnVpbHQtaW4g c3Vic3lzdGVtcyB5ZXQuICBJbiB0aGUgZnV0dXJlLCBtb3N0IG9mCisJICogdGhlIGNhbGxz ICpTaG1lbUluaXQoKSBjYWxscyBpbiBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpLCBh bmQKKwkgKiAqU2htZW1TaXplKCkgY2FsbHMgaW4gQ2FsY3VsYXRlU2htZW1TaXplKCkgd2ls bCBiZSByZXBsYWNlZCBieSBjYWxscworCSAqIGludG8gdGhlIHN1YnN5c3RlbXMgZnJvbSBo ZXJlLgorCSAqLworfQorCiAvKgogICogSW5pdGlhbGl6ZSB2YXJpb3VzIHN1YnN5c3RlbXMs IHNldHRpbmcgdXAgdGhlaXIgZGF0YSBzdHJ1Y3R1cmVzIGluCiAgKiBzaGFyZWQgbWVtb3J5 LgpAQCAtMjQ5LDE2ICsyNzEsMjcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jl cyh2b2lkKQogc3RhdGljIHZvaWQKIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQp CiB7Ci0JLyoKLQkgKiBOb3cgaW5pdGlhbGl6ZSBMV0xvY2tzLCB3aGljaCBkbyBzaGFyZWQg bWVtb3J5IGFsbG9jYXRpb24gYW5kIGFyZQotCSAqIG5lZWRlZCBmb3IgSW5pdFNobWVtSW5k ZXguCi0JICovCi0JQ3JlYXRlTFdMb2NrcygpOwotCi0JLyoKLQkgKiBTZXQgdXAgc2htZW0u YyBpbmRleCBoYXNodGFibGUKLQkgKi8KLQlJbml0U2htZW1JbmRleCgpOworI2lmZGVmIEVY RUNfQkFDS0VORAorCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwl7CisJCS8qCisJCSAqIFNo bWVtQXR0YWNoUmVnaXN0ZXJlZCgpIHVzZXMgTFdMb2Nrcy4gRm9ydHVuYXRlbHksIExXTG9j a3MgZG9uJ3QKKwkJICogbmVlZCBhbnkgc3BlY2lhbCBhdHRhY2hpbmcuCisJCSAqLworCQlT aG1lbUF0dGFjaFJlZ2lzdGVyZWQoKTsKKwl9CisJZWxzZQorI2VuZGlmCisJeworCQkvKgor CQkgKiBJbml0aWFsaXplIExXTG9ja3MgZmlyc3QsIGluIGNhc2UgYW55IG9mIHRoZSBzaG1l bSBpbml0IGZ1bmN0aW9uCisJCSAqIHVzZSBMV0xvY2tzLiAgKE5vdGhpbmcgZWxzZSBjYW4g YmUgcnVubmluZyBkdXJpbmcgc3RhcnR1cCB0aG91Z2gsCisJCSAqIHNvIGl0J3MgcHJldHR5 IHVzZWxlc3MgZm9yIHRoZW0gdG8gZG8gYW55IGxvY2tpbmcsIGJ1dCB3ZSBzdGlsbAorCQkg KiBhbGxvdyBpdC4pCisJCSAqLworCQlDcmVhdGVMV0xvY2tzKCk7CisJCVNobWVtSW5pdFJl Z2lzdGVyZWQoKTsKKwl9CiAKIAlkc21fc2htZW1faW5pdCgpOwogCURTTVJlZ2lzdHJ5U2ht ZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCA1NWU0YTU0MjFkZS4u MjYxOGNiOTI3YzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVt LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTksNDggKzE5 LDk1IEBACiAgKiBtZXRob2RzKS4gIFRoZSByb3V0aW5lcyBpbiB0aGlzIGZpbGUgYXJlIHVz ZWQgZm9yIGFsbG9jYXRpbmcgYW5kCiAgKiBiaW5kaW5nIHRvIHNoYXJlZCBtZW1vcnkgZGF0 YSBzdHJ1Y3R1cmVzLgogICoKLSAqIE5PVEVTOgotICoJCShhKSBUaGVyZSBhcmUgdGhyZWUg a2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVyZXMKLSAqCWF2YWlsYWJsZSB0 byBQT1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzLCBxdWV1ZXMgYW5kIGhhc2gKLSAq CXRhYmxlcy4gIEZpeGVkLXNpemUgc3RydWN0dXJlcyBjb250YWluIHRoaW5ncyBsaWtlIGds b2JhbCB2YXJpYWJsZXMKLSAqCWZvciBhIG1vZHVsZSBhbmQgc2hvdWxkIG5ldmVyIGJlIGFs bG9jYXRlZCBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeQotICoJaW5pdGlhbGl6YXRpb24gcGhh c2UuICBIYXNoIHRhYmxlcyBoYXZlIGEgZml4ZWQgbWF4aW11bSBzaXplLCBidXQKLSAqCXRo ZWlyIGFjdHVhbCBzaXplIGNhbiB2YXJ5IGR5bmFtaWNhbGx5LiAgV2hlbiBlbnRyaWVzIGFy ZSBhZGRlZAotICoJdG8gdGhlIHRhYmxlLCBtb3JlIHNwYWNlIGlzIGFsbG9jYXRlZC4gIFF1 ZXVlcyBsaW5rIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVk IGVpdGhlciB3aXRoaW4gZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIG9yIGFzIGhhc2gKLSAqCWJ1 Y2tldHMuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBoYXMgYSBzdHJpbmcgbmFtZSB0 byBpZGVudGlmeQotICoJaXQgKGFzc2lnbmVkIGluIHRoZSBtb2R1bGUgdGhhdCBkZWNsYXJl cyBpdCkuCi0gKgotICoJCShiKSBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVhY2ggbW9kdWxl IGxvb2tzIGZvciBpdHMKLSAqCXNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgaW4gYSBoYXNoIHRh YmxlIGNhbGxlZCB0aGUgIlNobWVtIEluZGV4Ii4KLSAqCUlmIHRoZSBkYXRhIHN0cnVjdHVy ZSBpcyBub3QgcHJlc2VudCwgdGhlIGNhbGxlciBjYW4gYWxsb2NhdGUKLSAqCWEgbmV3IG9u ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBwcmVzZW50 LAotICoJdGhlIGNhbGxlciAiYXR0YWNoZXMiIHRvIHRoZSBzdHJ1Y3R1cmUgYnkgaW5pdGlh bGl6aW5nIGEgcG9pbnRlcgotICoJaW4gdGhlIGxvY2FsIGFkZHJlc3Mgc3BhY2UuCi0gKgkJ VGhlIHNobWVtIGluZGV4IGhhcyB0d28gcHVycG9zZXM6IGZpcnN0LCBpdCBnaXZlcyB1cwot ICoJYSBzaW1wbGUgbW9kZWwgb2YgaG93IHRoZSB3b3JsZCBsb29rcyB3aGVuIGEgYmFja2Vu ZCBwcm9jZXNzCi0gKglpbml0aWFsaXplcy4gIElmIHNvbWV0aGluZyBpcyBwcmVzZW50IGlu IHRoZSBzaG1lbSBpbmRleCwKLSAqCWl0IGlzIGluaXRpYWxpemVkLiAgSWYgaXQgaXMgbm90 LCBpdCBpcyB1bmluaXRpYWxpemVkLiAgU2Vjb25kLAotICoJdGhlIHNobWVtIGluZGV4IGFs bG93cyB1cyB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IG9uIGRlbWFuZAotICoJaW5zdGVh ZCBvZiB0cnlpbmcgdG8gcHJlYWxsb2NhdGUgc3RydWN0dXJlcyBhbmQgaGFyZC13aXJlIHRo ZQotICoJc2l6ZXMgYW5kIGxvY2F0aW9ucyBpbiBoZWFkZXIgZmlsZXMuICBJZiB5b3UgYXJl IHVzaW5nIGEgbG90Ci0gKglvZiBzaGFyZWQgbWVtb3J5IGluIGEgbG90IG9mIGRpZmZlcmVu dCBwbGFjZXMgKGFuZCBjaGFuZ2luZwotICoJdGhpbmdzIGR1cmluZyBkZXZlbG9wbWVudCks IHRoaXMgaXMgaW1wb3J0YW50LgotICoKLSAqCQkoYykgSW4gc3RhbmRhcmQgVW5peC1pc2gg ZW52aXJvbm1lbnRzLCBpbmRpdmlkdWFsIGJhY2tlbmRzIGRvIG5vdAotICoJbmVlZCB0byBy ZS1lc3RhYmxpc2ggdGhlaXIgbG9jYWwgcG9pbnRlcnMgaW50byBzaGFyZWQgbWVtb3J5LCBi ZWNhdXNlCi0gKgl0aGV5IGluaGVyaXQgY29ycmVjdCB2YWx1ZXMgb2YgdGhvc2UgdmFyaWFi bGVzIHZpYSBmb3JrKCkgZnJvbSB0aGUKLSAqCXBvc3RtYXN0ZXIuICBIb3dldmVyLCB0aGlz IGRvZXMgbm90IHdvcmsgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlLgotICoJSW4gcG9ydHMg dXNpbmcgRVhFQ19CQUNLRU5ELCBuZXcgYmFja2VuZHMgaGF2ZSB0byBzZXQgdXAgdGhlaXIg bG9jYWwKLSAqCXBvaW50ZXJzIHVzaW5nIHRoZSBtZXRob2QgZGVzY3JpYmVkIGluIChiKSBh Ym92ZS4KLSAqCi0gKgkJKGQpIG1lbW9yeSBhbGxvY2F0aW9uIG1vZGVsOiBzaGFyZWQgbWVt b3J5IGNhbiBuZXZlciBiZQotICoJZnJlZWQsIG9uY2UgYWxsb2NhdGVkLiAgIEVhY2ggaGFz aCB0YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3QsCi0gKglzbyBoYXNoIGJ1Y2tldHMgY2Fu IGJlIHJldXNlZCB3aGVuIGFuIGl0ZW0gaXMgZGVsZXRlZC4gIEhvd2V2ZXIsCi0gKglpZiBv bmUgaGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0aGVuIHNocmlua3MsIGl0cyBz cGFjZQotICoJY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gb3RoZXIgdGFibGVzLiAgV2Ug Y291bGQgYnVpbGQgYSBzaW1wbGUKLSAqCWhhc2ggYnVja2V0IGdhcmJhZ2UgY29sbGVjdG9y IGlmIG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zCi0gKgl1bm5lY2Vzc2FyeS4KKyAq IFRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVyZXM6 IGZpeGVkLXNpemUgc3RydWN0dXJlcworICogYW5kIGhhc2ggdGFibGVzLiAgRml4ZWQtc2l6 ZSBzdHJ1Y3R1cmVzIGNvbnRhaW4gdGhpbmdzIGxpa2UgZ2xvYmFsCisgKiB2YXJpYWJsZXMg Zm9yIGEgbW9kdWxlIGFuZCBzaG91bGQgbmV2ZXIgYmUgYWxsb2NhdGVkIGFmdGVyIHRoZSBz aGFyZWQKKyAqIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwaGFzZS4gIEhhc2ggdGFibGVzIGhh dmUgYSBmaXhlZCBtYXhpbXVtIHNpemUsIGJ1dAorICogdGhlaXIgYWN0dWFsIHNpemUgY2Fu IHZhcnkgZHluYW1pY2FsbHkuICBXaGVuIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZQorICog dGFibGUsIG1vcmUgc3BhY2UgaXMgYWxsb2NhdGVkLiBFYWNoIHNoYXJlZCBkYXRhIHN0cnVj dHVyZSBhbmQgaGFzaCBoYXMgYQorICogc3RyaW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQsIHNw ZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRvciB3aGVuIGl0cworICogcmVnaXN0ZXJlZC4KKyAq CisgKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgKGFuZCBoYXNoIHRhYmxlIGVudHJpZXMp IGFyZSBtYXBwZWQgdG8gdGhlIGFkZHJlc3MKKyAqIGluIGVhY2ggYmFja2VuZCBwcm9jZXNz LCBzbyB5b3UgY2FuIHNhZmVseSB1c2UgcG9pbnRlcnMgdG8gb3RoZXIgcGFydHMgb2YKKyAq IHNoYXJlZCBtZW1vcnkgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcy4KKyAqCisg KiBTaGFyZWQgbWVtb3J5IGNhbiBuZXZlciBiZSBmcmVlZCwgb25jZSBhbGxvY2F0ZWQuICBF YWNoIGhhc2ggdGFibGUgaGFzIGl0cworICogb3duIGZyZWUgbGlzdCwgc28gaGFzaCBidWNr ZXRzIGNhbiBiZSByZXVzZWQgd2hlbiBhbiBpdGVtIGlzIGRlbGV0ZWQuCisgKiBIb3dldmVy LCBpZiBvbmUgaGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0aGVuIHNocmlua3Ms IGl0cyBzcGFjZQorICogY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gb3RoZXIgdGFibGVz LiAgV2UgY291bGQgYnVpbGQgYSBzaW1wbGUgaGFzaAorICogYnVja2V0IGdhcmJhZ2UgY29s bGVjdG9yIGlmIG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zIHVubmVjZXNzYXJ5Lgor ICoKKyAqIFVzYWdlCisgKiAtLS0tLQorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2hhcmVkIG1l bW9yeSBhcmVhLCBmaWxsIGluIHRoZSBuYW1lLCBzaXplLCBhbmQgYW55IG90aGVyCisgKiBv cHRpb25zIGluIFNobWVtU3RydWN0RGVzYywgYW5kIGNhbGwgU2htZW1SZWdpc3RlclN0cnVj dCgpLiAgTGVhdmUgYW55CisgKiB1bnVzZWQgZmllbGRzIGFzIHplcm9zLgorICoKKyAqCXR5 cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsKKyAqCQkuLi4KKyAqCX0gTXlTaG1lbURhdGE7 CisgKgorICoJc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOworICoKKyAqCXN0YXRpYyB2 b2lkIG15X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKyAqCisgKglzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIE15U2htZW1EZXNjID0geworICoJCS5uYW1lID0gIk15IHNobWVtIGFyZWEiLAor ICoJCS5zaXplID0gc2l6ZW9mKE15U2htZW1EYXRhKSwKKyAqCQkuaW5pdF9mbiA9IG15X3No bWVtX2luaXQsCisgKgkJLnB0ciA9ICZNeVNobWVtLAorICoJfTsKKyAqCisgKiBJbiB0aGUg c3Vic3lzdGVtJ3MgaW5pdGlhbGl6YXRpb24gY29kZSwgb3IgaW4gX1BHX2luaXQoKSBvciBz aG1lbV9yZXF1ZXN0X2hvb2sKKyAqIGluIGV4dGVuc2lvbnMsIGNhbGwgU2htZW1SZWdpc3Rl clN0cnVjdCgpOgorICoKKyAqCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJk15U2htZW1EZXNjKQor ICoKKyAqCisgKiBMaWZlY3ljbGUKKyAqIC0tLS0tLS0tLQorICoKKyAqIFJlZ2lzdGVyU2ht ZW1TdHJ1Y3RzKCkgaXMgY2FsbGVkIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCwgYmVmb3JlIGRl Y2lkaW5nIHRoZQorICogc2l6ZSBvZiB0aGUgZ2xvYmFsIHNoYXJlZCBtZW1vcnkgc2VnbWVu dC4gVG8gYWRkIGEgbmV3IHNoYXJlZCBtZW1vcnkgYXJlYSwKKyAqIGNhbGwgaXRzIFJlZ2lz dGVyIGZ1bmN0aW9uIGZyb20gUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKS4KKyAqCisgKiBPbmNl IGFsbCB0aGUgcmVnaXN0cmF0aW9ucyBoYXZlIGJlZW4gZG9uZSwgcG9zdG1hc3RlciBjYWxs cworICogU2htZW1SZWdpc3RlcmVkU2l6ZSgpIHRvIGFkZCB1cCB0aGUgc2l6ZXMgb2YgYWxs IHRoZSByZWdpc3RlcmVkIGFyZWFzCisgKgorICogQWZ0ZXIgYWxsb2NhdGluZyB0aGUgc2hh cmVkIG1lbW9yeSBzZWdtZW50LCBwb3N0bWFzdGVyIGNhbGxzCisgKiBTaG1lbUluaXRSZWdp c3RlcmVkKCksIHdoaWNoIGNhbGxzIHRoZSBpbml0X2ZuIGNhbGxiYWNrcyBvZiBlYWNoIHJl Z2lzdGVyZWQKKyAqIGFyZWEsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZWdpc3Rl cmVkLgorICoKKyAqIEluIHN0YW5kYXJkIFVuaXgtaXNoIGVudmlyb25tZW50cywgaW5kaXZp ZHVhbCBiYWNrZW5kcyBkbyBub3QgbmVlZCB0bworICogcmUtZXN0YWJsaXNoIHRoZWlyIGxv Y2FsIHBvaW50ZXJzIGludG8gc2hhcmVkIG1lbW9yeSwgYmVjYXVzZSB0aGV5IGluaGVyaXQK KyAqIGNvcnJlY3QgdmFsdWVzIG9mIHRob3NlIHZhcmlhYmxlcyB2aWEgZm9yaygpIGZyb20g dGhlIHBvc3RtYXN0ZXIuICBIb3dldmVyLAorICogdGhpcyBkb2VzIG5vdCB3b3JrIGluIHRo ZSBFWEVDX0JBQ0tFTkQgY2FzZS4gIEluIHBvcnRzIHVzaW5nIEVYRUNfQkFDS0VORCwKKyAq IGJhY2tlbmQgc3RhcnR1cCBhbHNvIGNhbGxzIFJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCksIGZv bGxvd2VkIGJ5CisgKiBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQoKSwgd2hpY2ggcmUtZXN0YWJs aXNoZXMgdGhlIHBvaW50ZXIgdmFyaWFibGVzCisgKiAoKlNobWVtU3RydWN0RGVzYy0+cHRy KSwgYW5kIGNhbGxzIHRoZSBhdHRhY2hfZm4gY2FsbGJhY2ssIGlmIGFueSwgZm9yCisgKiBh ZGRpdGlvbmFsIHBlci1iYWNrZW5kIHNldHVwLgorICoKKyAqIExlZ2FjeSBTaG1lbUluaXRT dHJ1Y3QoKS9TaG1lbUluaXRIYXNoKCkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNobWVtSW5pdFN0 cnVjdCgpL1NobWVtSW5pdEhhc2goKSBpcyBhbm90aGVyIHdheSBvZiByZWdpc3RyaW5nIHNo bWVtCisgKiBhcmVhcy4gSXQgcHJlLWRhdGVzIHRoZSBTaG1lbVJlZ2lzdGVyU3RydWN0KCkv U2htZW1SZWdpc3Rlckhhc2goKQorICogZnVuY3Rpb25zLCBhbmQgc2hvdWxkIG5vdCBiZSB1 c2VkIGluIG5ldyBjb2RlLCBidXQgYXMgb2YgdGhpcyB3cml0aW5nIGl0IGlzCisgKiBzdGls bCB3aWRlbHkgdXNlZCBpbiBleHRlbnNpb25zLgorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2ht ZW0gYXJlYSB3aXRoIFNobWVtSW5pdFN0cnVjdCgpLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5 CisgKiByZWdpc3RlciB0aGUgc2l6ZSBuZWVkZWQgZm9yIHRoZSBhcmVhIGJ5IGNhbGxpbmcg UmVxdWVzdEFkZGluU2htZW1TcGFjZSgpCisgKiBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1l bV9yZXF1ZXN0X2hvb2ssIGFuZCBhbGxvY2F0ZSB0aGUgYXJlYSBieSBjYWxsaW5nCisgKiBT aG1lbUluaXRTdHJ1Y3QoKSBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1lbV9zdGFydHVwX2hv b2suICBUaGVyZSBhcmUgbm8KKyAqIGluaXQvYXR0YWNoIGNhbGxiYWNrczsgdGhlIGNhbGxl ciBvZiBTaG1lbUluaXRTdHJ1Y3QoKSBtdXN0IGNoZWNrIHRoZQorICogcmV0dXJuIHN0YXR1 cyBvZiBTaG1lbUluaXRTdHJ1Y3QoKSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IGlmIGl0 IHdhcyBub3QKKyAqIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQuCisgKgorICoKKyAqIE1vcmUg bGVnYWN5OiBDYWxsaW5nIFNobWVtQWxsb2MoKSBkaXJlY3RseQorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCkBAIC03Niw2ICsxMjMsMjQgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogCisvKgorICogQXJyYXkgb2YgcmVnaXN0 ZXJlZCBzaGFyZWQgbWVtb3J5IGFyZWFzLgorICoKKyAqIFRoaXMgaXMgaW4gcHJvY2VzcyBw cml2YXRlIG1lbW9yeSwgYWx0aG91Z2ggb24gVW5peC1saWtlIHN5c3RlbXMsIHdlIGV4cGVj dAorICogYWxsIHRoZSByZWdpc3RyYXRpb25zIHRvIGhhcHBlbiBhdCBwb3N0bWFzdGVyIHN0 YXJ0dXAgdGltZSwgYW5kIGJlCisgKiBpbmhlcml0ZWQgYnkgYWxsIHRoZSBjaGlsZCBwcm9j ZXNzZXMuIEV4dGVuc2lvbnMgbWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwKKyAqIGFyZWFzIGFm dGVyIHN0YXJ0dXAsIGJ1dCBvbmx5IGFyZWFzIHJlZ2lzdGVyZWQgYXQgcG9zdG1hc3RlciBz dGFydHVwIGFyZQorICogaW5jbHVkZWQgaW4gdGhlIGVzdGltYXRlIGZvciB0aGUgdG90YWwg bWVtb3J5IG5lZWRlZCBmb3Igc2hhcmVkIG1lbW9yeS4gIElmCisgKiBhbnkgbm9uLXRyaXZp YWwgYWxsb2NhdGlvbnMgYXJlIG1hZGUgYWZ0ZXIgc3RhcnR1cCwgdGhlcmUgbWlnaHQgbm90 IGJlCisgKiBlbm91Z2ggc2hhcmVkIG1lbW9yeSBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgKipyZWdpc3RlcmVkX3NobWVtX2FyZWFzOworc3RhdGljIGludCBu dW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9IDA7CitzdGF0aWMgaW50IG1heF9yZWdpc3Rl cmVkX3NobWVtX2FyZWFzID0gMDsJLyogYWxsb2NhdGVkIHNpemUgb2YgdGhlIGFycmF5ICov CisKKy8qIGVzdGltYXRlZCBzaXplIG9mIHJlZ2lzdGVyZWRfc2htZW1fYXJlYXMgKG5vdCBh IGhhcmQgbGltaXQpICovCisjZGVmaW5lIElOSVRJQUxfUkVHSVNUUllfU0laRQkJICg2NCkK KwogLyoKICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhlIG9mZnNldCB0aGF0IFBHU2ht ZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4gIEFsbG9jYXRpb25zIGJ5CkBA IC05NSw2ICsxNjAsOSBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAog c3RhdGljIHZvaWQgKlNobWVtQWxsb2NSYXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRf c2l6ZSk7CiAKK3N0YXRpYyB2b2lkIHNobWVtX2hhc2hfaW5pdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgc2htZW1faGFzaF9hdHRhY2godm9pZCAqYXJnKTsKKwogLyogc2hhcmVkIG1l bW9yeSBnbG9iYWwgdmFyaWFibGVzICovCiAKIHN0YXRpYyBQR1NobWVtSGVhZGVyICpTaG1l bVNlZ0hkcjsJLyogc2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLwpAQCAtMTAzLDI0ICsx NzEsMzI4IEBAIHN0YXRpYyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9m IHNoYXJlZCBtZW1vcnkgKi8KIAogc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1B bGxvY2F0b3I7CiBzbG9ja190ICAgICpTaG1lbUxvY2s7CQkJLyogcG9pbnRzIHRvIFNobWVt QWxsb2NhdG9yLT5zaG1lbV9sb2NrICovCi1zdGF0aWMgSFRBQiAqU2htZW1JbmRleCA9IE5V TEw7IC8qIHByaW1hcnkgaW5kZXggaGFzaHRhYmxlIGZvciBzaG1lbSAqLworCisKKy8qCisg KiBTaG1lbUluZGV4IGlzIGEgZ2xvYmFsIGRpcmVjdG9yeSBvZiBzaG1lbSBhcmVhcywgaXRz ZWxmIGFsc28gc3RvcmVkIGluIHRoZQorICogc2hhcmVkIG1lbW9yeS4KKyAqLworc3RhdGlj IEhUQUIgKlNobWVtSW5kZXg7CisKKyAvKiBtYXggc2l6ZSBvZiBkYXRhIHN0cnVjdHVyZSBz dHJpbmcgbmFtZSAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9LRVlTSVpFCQkgKDQ4KQorCisv KgorICogIyBvZiBhZGRpdGlvbmFsIGVudHJpZXMgdG8gcmVzZXJ2ZSBpbiB0aGUgc2htZW0g aW5kZXggdGFibGUsIGZvciBhbGxvY2F0aW9ucworICogYWZ0ZXIgcG9zdG1hc3RlciBzdGFy dHVwIChub3QgYSBoYXJkIGxpbWl0KQorICovCisjZGVmaW5lIFNITUVNX0lOREVYX0FERElU SU9OQUxfU0laRQkJICg2NCkKKworLyogdGhpcyBpcyBhIGhhc2ggYnVja2V0IGluIHRoZSBz aG1lbSBpbmRleCB0YWJsZSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljaGFyCQlrZXlbU0hN RU1fSU5ERVhfS0VZU0laRV07CS8qIHN0cmluZyBuYW1lICovCisJdm9pZAkgICAqbG9jYXRp b247CQkvKiBsb2NhdGlvbiBpbiBzaGFyZWQgbWVtICovCisJU2l6ZQkJc2l6ZTsJCQkvKiAj IGJ5dGVzIHJlcXVlc3RlZCBmb3IgdGhlIHN0cnVjdHVyZSAqLworCVNpemUJCWFsbG9jYXRl ZF9zaXplOyAvKiAjIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAqLworfSBTaG1lbUluZGV4 RW50OwogCiAvKiBUbyBnZXQgcmVsaWFibGUgcmVzdWx0cyBmb3IgTlVNQSBpbnF1aXJ5IHdl IG5lZWQgdG8gInRvdWNoIHBhZ2VzIiBvbmNlICovCiBzdGF0aWMgYm9vbCBmaXJzdE51bWFU b3VjaCA9IHRydWU7CiAKIERhdHVtCQlwZ19udW1hX2F2YWlsYWJsZShQR19GVU5DVElPTl9B UkdTKTsKIAorc3RhdGljIGJvb2wgc2htZW1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworLyoK KyAqCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoKSAtLS0gcmVnaXN0ZXIgYSBzaGFyZWQgbWVtb3J5 IHN0cnVjdAorICoKKyAqIFN1YnN5c3RlbXMgY2FsbCB0aGlzIHRvIHJlZ2lzdGVyIHRoZWly IHNoYXJlZCBtZW1vcnkgbmVlZHMuICBUaGF0IHNob3VsZCBiZQorICogZG9uZSBlYXJseSBp biBwb3N0bWFzdGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IGhhcyBiZWVuCisgKiBjcmVhdGVkLCBzbyB0aGF0IHRoZSBzaXplIGNhbiBiZSBpbmNsdWRl ZCBpbiB0aGUgZXN0aW1hdGUgZm9yIHRvdGFsIGFtb3VudAorICogb2Ygc2hhcmVkIG1lbW9y eSBuZWVkZWQuICBXZSBzZXQgYXNpZGUgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZvcgor ICogYWxsb2NhdGlvbnMgdGhhdCBoYXBwZW4gbGF0ZXIsIGZvciB0aGUgYmVuZWZpdCBvZiBu b24tcHJlbG9hZGVkIGV4dGVuc2lvbnMsCisgKiBidXQgdGhhdCBzaG91bGQgbm90IGJlIHJl bGllZCB1cG9uLgorICoKKyAqIEluIGNvcmUgc3Vic3lzdGVtcywgZWFjaCBzdWJzeXN0ZW0n cyByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGlzIGNhbGxlZCBmcm9tCisgKiBSZWdpc3RlclNo bWVtU3RydWN0cygpLiAgSW4gZXh0ZW5zaW9ucywgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZy b20gdGhlCisgKiBfUEdfaW5pdCgpIGluaXRpYWxpemVyIG9yIHRoZSAnc2htZW1fcmVxdWVz dF9ob29rJy4gSW4gRVhFQ19CQUNLRU5EIG1vZGUsCisgKiB0aGlzIGFsc28gbmVlZHMgdG8g YmUgY2FsbGVkIGluIGVhY2ggY2hpbGQgcHJvY2VzcywgdG8gcmVhdHRhY2ggYW5kIHNldCB0 aGUKKyAqIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSwgdXN1YWxseSBpbiBh IGdsb2JhbCB2YXJpYWJsZS4gIENhbGxpbmcKKyAqIHRoaXMgZnJvbSB0aGUgX1BHX2luaXQo KSBpbml0aWFsaXplciBvciB0aGUgJ3NobWVtX3JlcXVlc3RfaG9vaycgdGFrZXMKKyAqIGNh cmUgb2YgdGhhdCB0b28uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJ1Y3Qgd2Fz IGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gc2hhcmVkIG1lbW9yeSwgYW5kCisgKiB3ZSBtZXJl bHkgYXR0YWNoZWQgdG8gaXQuCisgKi8KK2Jvb2wKK1NobWVtUmVnaXN0ZXJTdHJ1Y3QoU2ht ZW1TdHJ1Y3REZXNjICpkZXNjKQoreworCWJvb2wJCWZvdW5kOworCisJLyogQ2hlY2sgdGhh dCBpdCdzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhpcyBwcm9jZXNzICovCisJZm9y IChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsK KwkJU2htZW1TdHJ1Y3REZXNjICpleGlzdGluZyA9IHJlZ2lzdGVyZWRfc2htZW1fYXJlYXNb aV07CisKKwkJaWYgKHN0cmNtcChleGlzdGluZy0+bmFtZSwgZGVzYy0+bmFtZSkgPT0gMCkK KwkJCWVsb2coRVJST1IsICJzaGFyZWQgbWVtb3J5IHN0cnVjdCBcIiVzXCIgaXMgYWxyZWFk eSByZWdpc3RlcmVkIiwKKwkJCQkgZGVzYy0+bmFtZSk7CisJfQorCisJLyogZGVzYy0+cHRy IGNhbiBiZSBub24tTlVMTCB3aGVuIHJlLWluaXRpYWxpemluZyBhZnRlciBjcmFzaCAqLwor CWlmIChkZXNjLT5wdHIpCisJCSpkZXNjLT5wdHIgPSBOVUxMOworCisJLyogQWRkIHRoZSBk ZXNjcmlwdG9yIHRvIHRoZSBhcnJheSwgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbmVlZGVkICov CisJaWYgKG51bV9yZWdpc3RlcmVkX3NobWVtX2FyZWFzID09IG1heF9yZWdpc3RlcmVkX3No bWVtX2FyZWFzKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisKKwkJaWYgKHJlZ2lzdGVyZWRf c2htZW1fYXJlYXMpCisJCXsKKwkJCW5ld19zaXplID0gbWF4X3JlZ2lzdGVyZWRfc2htZW1f YXJlYXMgKiAyOworCQkJcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9IHJlcGFsbG9jKHJlZ2lz dGVyZWRfc2htZW1fYXJlYXMsCisJCQkJCQkJCQkJCSAgbmV3X3NpemUgKiBzaXplb2YoU2ht ZW1TdHJ1Y3REZXNjICopKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5ld19zaXplID0gSU5J VElBTF9SRUdJU1RSWV9TSVpFOworCQkJcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9IE1lbW9y eUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCQluZXdfc2l6 ZSAqIHNpemVvZihTaG1lbVN0cnVjdERlc2MgKikpOworCQl9CisJCW1heF9yZWdpc3RlcmVk X3NobWVtX2FyZWFzID0gbmV3X3NpemU7CisJfQorCXJlZ2lzdGVyZWRfc2htZW1fYXJlYXNb bnVtX3JlZ2lzdGVyZWRfc2htZW1fYXJlYXMrK10gPSBkZXNjOworCisJLyoKKwkgKiBJZiBj YWxsZWQgYWZ0ZXIgcG9zdG1hc3RlciBzdGFydHVwLCB3ZSBuZWVkIHRvIGltbWVkaWF0ZWx5 IGFsc28KKwkgKiBpbml0aWFsaXplIG9yIGF0dGFjaCB0byB0aGUgYXJlYS4KKwkgKi8KKwlp ZiAoc2htZW1faW5pdGlhbGl6ZWQpCisJeworCQlTaG1lbUluZGV4RW50ICppbmRleF9lbnRy eTsKKworCQlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOwor CisJCS8qIGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4ICovCisJCWluZGV4X2VudHJ5 ID0gKFNobWVtSW5kZXhFbnQgKikKKwkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIGRlc2Mt Pm5hbWUsIEhBU0hfRU5URVJfTlVMTCwgJmZvdW5kKTsKKwkJaWYgKCFpbmRleF9lbnRyeSkK KwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0Zf TUVNT1JZKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBTaG1lbUluZGV4IGVu dHJ5IGZvciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIiLAorCQkJCQkJCWRlc2MtPm5hbWUpKSk7 CisJCX0KKwkJaWYgKGZvdW5kKQorCQl7CisJCQkvKiBBbHJlYWR5IHByZXNlbnQsIGp1c3Qg YXR0YWNoIHRvIGl0ICovCisJCQlpZiAoaW5kZXhfZW50cnktPnNpemUgIT0gZGVzYy0+c2l6 ZSkKKwkJCQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIGFs cmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGRpZmZlcmVudCBzaXplIiwKKwkJCQkJIGRlc2MtPm5h bWUpOworCQkJaWYgKGRlc2MtPnB0cikKKwkJCQkqZGVzYy0+cHRyID0gaW5kZXhfZW50cnkt PmxvY2F0aW9uOworCQkJaWYgKGRlc2MtPmF0dGFjaF9mbikKKwkJCQlkZXNjLT5hdHRhY2hf Zm4oZGVzYy0+YXR0YWNoX2ZuX2FyZyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBUaGlz IGlzIHRoZSBmaXJzdCB0aW1lLiBJbml0aWFsaXplIGl0IGxpa2UgU2htZW1Jbml0UmVnaXN0 ZXJlZCgpIHdvdWxkICovCisJCQlzaXplX3QJCWFsbG9jYXRlZF9zaXplOworCQkJdm9pZAkg ICAqc3RydWN0UHRyOworCisJCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KGRlc2MtPnNp emUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJCQlpZiAoc3RydWN0UHRyID09IE5VTEwpCisJCQl7 CisJCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVtb3ZlIHRoZSBmYWlsZWQgU2htZW1JbmRleCBl bnRyeSAqLworCQkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIGRlc2MtPm5hbWUsIEhBU0hf UkVNT1ZFLCBOVUxMKTsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJCSBlcnJtc2coIm5vdCBlbm91Z2ggc2hhcmVk IG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJCSIgXCIlc1wiICglenUgYnl0 ZXMgcmVxdWVzdGVkKSIsCisJCQkJCQkJCWRlc2MtPm5hbWUsIGRlc2MtPnNpemUpKSk7CisJ CQl9CisJCQlpbmRleF9lbnRyeS0+c2l6ZSA9IGRlc2MtPnNpemU7CisJCQlpbmRleF9lbnRy eS0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJCWluZGV4X2VudHJ5LT5s b2NhdGlvbiA9IHN0cnVjdFB0cjsKKwkJCWlmIChkZXNjLT5wdHIpCisJCQkJKmRlc2MtPnB0 ciA9IGluZGV4X2VudHJ5LT5sb2NhdGlvbjsKKworCQkJLyogWFhYOiBpZiB0aGlzIGVycm9y cyBvdXQsIHRoZSBhcmVhcyBpcyBsZWZ0IGluIGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZSAq LworCQkJaWYgKGRlc2MtPmluaXRfZm4pCisJCQkJZGVzYy0+aW5pdF9mbihkZXNjLT5pbml0 X2ZuX2FyZyk7CisJCX0KKworCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKKwl9 CisJZWxzZQorCQlmb3VuZCA9IGZhbHNlOworCisJcmV0dXJuIGZvdW5kOworfQorCisvKgor ICoJU2htZW1SZWdpc3RlcmVkU2l6ZSgpIC0tLSBlc3RpbWF0ZSB0aGUgdG90YWwgc2l6ZSBv ZiBhbGwgcHJlLXJlZ2lzdGVyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo YXJlZCBtZW1vcnkgc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIHJ1bnMgb25jZSBhdCBwb3N0 bWFzdGVyIHN0YXJ0dXAsIGJlZm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGhhcwor ICogYmVlbiBjcmVhdGVkLgorICovCitzaXplX3QKK1NobWVtUmVnaXN0ZXJlZFNpemUodm9p ZCkKK3sKKwlzaXplX3QJCXNpemU7CisKKwkvKiBtZW1vcnkgbmVlZGVkIGZvciB0aGUgU2ht ZW1JbmRleCAqLworCXNpemUgPSBoYXNoX2VzdGltYXRlX3NpemUobnVtX3JlZ2lzdGVyZWRf c2htZW1fYXJlYXMgKyBTSE1FTV9JTkRFWF9BRERJVElPTkFMX1NJWkUsCisJCQkJCQkJICBz aXplb2YoU2htZW1JbmRleEVudCkpOworCisJLyogbWVtb3J5IG5lZWRlZCBmb3IgYWxsIHRo ZSByZWdpc3RlcmVkIGFyZWFzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0 ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsKKwkJU2htZW1TdHJ1Y3REZXNjICpkZXNjID0g cmVnaXN0ZXJlZF9zaG1lbV9hcmVhc1tpXTsKKworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwg ZGVzYy0+c2l6ZSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBkZXNjLT5leHRyYV9zaXpl KTsKKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqCVNobWVtSW5pdFJlZ2lzdGVy ZWQoKSAtLS0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcHJlLXJlZ2lzdGVyZWQgc2hhcmVk CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgc3RydWN0dXJlcy4KKyAq CisgKiBUaGlzIHJ1bnMgb25jZSBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAsIGFmdGVyIHRoZSBz aGFyZWQgbWVtb3J5IHNlZ21lbnQgaGFzCisgKiBiZWVuIGNyZWF0ZWQuCisgKi8KK3ZvaWQK K1NobWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIG9u bHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICovCisJQXNz ZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KCFzaG1lbV9pbml0aWFsaXplZCk7 CisKKwkvKgorCSAqIEluaXRpYWxpemUgYWxsIHRoZSByZWdpc3RlcmVkIG1lbW9yeSBhcmVh cy4gIFRoZXJlIGFyZSBubyBjb25jdXJyZW50CisJICogcHJvY2Vzc2VzIHlldCwgc28gbm8g bmVlZCBmb3IgbG9ja2luZy4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdp c3RlcmVkX3NobWVtX2FyZWFzOyBpKyspCisJeworCQlTaG1lbVN0cnVjdERlc2MgKmRlc2Mg PSByZWdpc3RlcmVkX3NobWVtX2FyZWFzW2ldOworCQlzaXplX3QJCWFsbG9jYXRlZF9zaXpl OworCQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisJCWJvb2wJCWZvdW5kOworCQlTaG1lbUluZGV4 RW50ICppbmRleF9lbnRyeTsKKworCQkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRl eCAqLworCQlpbmRleF9lbnRyeSA9IChTaG1lbUluZGV4RW50ICopCisJCQloYXNoX3NlYXJj aChTaG1lbUluZGV4LCBkZXNjLT5uYW1lLCBIQVNIX0VOVEVSX05VTEwsICZmb3VuZCk7CisJ CWlmICghaW5kZXhfZW50cnkpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBj cmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJ CQkJCQlkZXNjLT5uYW1lKSkpOworCQl9CisJCWlmIChmb3VuZCkKKwkJCWVsb2coRVJST1Is ICJzaG1lbSBzdHJ1Y3QgXCIlc1wiIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQiLCBkZXNjLT5u YW1lKTsKKworCQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCQlzdHJ1Y3RQ dHIgPSBTaG1lbUFsbG9jUmF3KGRlc2MtPnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJCWlm IChzdHJ1Y3RQdHIgPT0gTlVMTCkKKwkJeworCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVtb3Zl IHRoZSBmYWlsZWQgU2htZW1JbmRleCBlbnRyeSAqLworCQkJaGFzaF9zZWFyY2goU2htZW1J bmRleCwgZGVzYy0+bmFtZSwgSEFTSF9SRU1PVkUsIE5VTEwpOworCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJIGVycm1z Zygibm90IGVub3VnaCBzaGFyZWQgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZSIKKwkJCQkJ CQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAorCQkJCQkJCWRlc2MtPm5hbWUs IGRlc2MtPnNpemUpKSk7CisJCX0KKwkJaW5kZXhfZW50cnktPnNpemUgPSBkZXNjLT5zaXpl OworCQlpbmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJ aW5kZXhfZW50cnktPmxvY2F0aW9uID0gc3RydWN0UHRyOworCisJCSooZGVzYy0+cHRyKSA9 IHN0cnVjdFB0cjsKKwkJaWYgKGRlc2MtPmluaXRfZm4pCisJCQlkZXNjLT5pbml0X2ZuKGRl c2MtPmluaXRfZm5fYXJnKTsKKwl9CisKKwlzaG1lbV9pbml0aWFsaXplZCA9IHRydWU7Cit9 CisKKy8qCisgKiBDYWxsIHRoZSBhdHRhY2hfZm4gY2FsbGJhY2tzIG9mIGFsbCByZWdpc3Rl cmVkCisgKi8KKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK3ZvaWQKK1NobWVtQXR0YWNoUmVnaXN0 ZXJlZCh2b2lkKQoreworCS8qIE11c3QgYmUgaW5pdGlhbGl6aW5nIGEgKG5vbi1zdGFuZGFs b25lKSBiYWNrZW5kICovCisJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsKKwlBc3NlcnQo U2htZW1BbGxvY2F0b3ItPmluZGV4ICE9IE5VTEwpOworCisJLyogWFhYOiBkb2N1bWVudCB0 aGlzIGxvY2tpbmcgd2l0aCBhdHRhY2hfZm4gKi8KKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5k ZXhMb2NrLCBMV19TSEFSRUQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0 ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsKKwkJU2htZW1TdHJ1Y3REZXNjICpkZXNjID0g cmVnaXN0ZXJlZF9zaG1lbV9hcmVhc1tpXTsKKwkJYm9vbAkJZm91bmQ7CisJCVNobWVtSW5k ZXhFbnQgKnJlc3VsdDsKKworCQkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAq LworCQlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKQorCQkJaGFzaF9zZWFyY2goU2htZW1J bmRleCwgZGVzYy0+bmFtZSwgSEFTSF9GSU5ELCAmZm91bmQpOworCQlpZiAoIWZvdW5kKQor CQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9N RU1PUlkpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmluZCBTaG1lbUluZGV4IGVudHJ5 IGZvciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIiLAorCQkJCQkJCWRlc2MtPm5hbWUpKSk7CisJ CX0KKworCQlpZiAoZGVzYy0+cHRyKQorCQkJKmRlc2MtPnB0ciA9IHJlc3VsdC0+bG9jYXRp b247CisJCWlmIChkZXNjLT5hdHRhY2hfZm4pCisJCQlkZXNjLT5hdHRhY2hfZm4oZGVzYy0+ YXR0YWNoX2ZuX2FyZyk7CisJfQorCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7 CisKKwlzaG1lbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisjZW5kaWYKKwordm9pZAorUmVz ZXRTaG1lbUFsbG9jYXRvcih2b2lkKQoreworCXNobWVtX2luaXRpYWxpemVkID0gZmFsc2U7 CisJbnVtX3JlZ2lzdGVyZWRfc2htZW1fYXJlYXMgPSAwOworCisJLyogRklYTUU6IHRoaXMg bGVha3MgdGhlIGFsbG9jYXRpb25zIGluIFRvcE1lbW9yeUNvbnRleHQgKi8KK30KKwogLyoK ICAqCUluaXRTaG1lbUFsbG9jYXRvcigpIC0tLSBzZXQgdXAgYmFzaWMgcG9pbnRlcnMgdG8g c2hhcmVkIG1lbW9yeS4KICAqCiAgKiBDYWxsZWQgYXQgcG9zdG1hc3RlciBvciBzdGFuZC1h bG9uZSBiYWNrZW5kIHN0YXJ0dXAsIHRvIGluaXRpYWxpemUgdGhlCiAgKiBhbGxvY2F0b3In cyBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgSW4gRVhF Q19CQUNLRU5ELAotICogdGhpcyBpcyBhbHNvIGNhbGxlZCBhdCBiYWNrZW5kIHN0YXJ0dXAs IHRvIHNldCB1cCBwb2ludGVycyB0byB0aGUgc2hhcmVkCi0gKiBtZW1vcnkgYXJlYXMuCisg KiBhbHNvIGNhbGxlZCBhdCBiYWNrZW5kIHN0YXJ0dXAsIHRvIHNldCB1cCBwb2ludGVycyB0 byB0aGUKKyAqIGFscmVhZHktaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmUuCiAgKi8KIHZv aWQKIEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiB7CisJU2l6 ZQkJb2Zmc2V0OworCWludAkJCWhhc2hfc2l6ZTsKKwlIQVNIQ1RMCQlpbmZvOworCWludAkJ CWhhc2hfZmxhZ3M7CisJc2l6ZV90CQlzaXplOworCisJQXNzZXJ0KCFzaG1lbV9pbml0aWFs aXplZCk7CiAJQXNzZXJ0KHNlZ2hkciAhPSBOVUxMKTsKIAogCS8qCkBAIC0xMzQsNDEgKzUw Niw0NyBAQCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogCVNo bWVtQmFzZSA9IHNlZ2hkcjsKIAlTaG1lbUVuZCA9IChjaGFyICopIFNobWVtQmFzZSArIHNl Z2hkci0+dG90YWxzaXplOwogCi0jaWZuZGVmIEVYRUNfQkFDS0VORAotCUFzc2VydCghSXNV bmRlclBvc3RtYXN0ZXIpOwotI2VuZGlmCi0JaWYgKElzVW5kZXJQb3N0bWFzdGVyKQotCXsK LQkJUEdTaG1lbUhlYWRlciAqc2htaGRyID0gU2htZW1TZWdIZHI7Ci0KLQkJU2htZW1BbGxv Y2F0b3IgPSAoU2htZW1BbGxvY2F0b3JEYXRhICopICgoY2hhciAqKSBzaG1oZHIgKyBzaG1o ZHItPmNvbnRlbnRfb2Zmc2V0KTsKLQkJU2htZW1Mb2NrID0gJlNobWVtQWxsb2NhdG9yLT5z aG1lbV9sb2NrOwotCX0KLQllbHNlCi0JewotCQlTaXplCQlvZmZzZXQ7Ci0KLQkJLyoKLQkJ ICogQWxsb2NhdGlvbnMgYWZ0ZXIgdGhpcyBwb2ludCBzaG91bGQgZ28gdGhyb3VnaCBTaG1l bUFsbG9jLCB3aGljaAotCQkgKiBleHBlY3RzIHRvIGFsbG9jYXRlIGV2ZXJ5dGhpbmcgb24g Y2FjaGUgbGluZSBib3VuZGFyaWVzLiAgTWFrZSBzdXJlCi0JCSAqIHRoZSBmaXJzdCBhbGxv Y2F0aW9uIGJlZ2lucyBvbiBhIGNhY2hlIGxpbmUgYm91bmRhcnkuCi0JCSAqLwotCQlvZmZz ZXQgPSBDQUNIRUxJTkVBTElHTihzZWdoZHItPmNvbnRlbnRfb2Zmc2V0ICsgc2l6ZW9mKFNo bWVtQWxsb2NhdG9yRGF0YSkpOwotCQlpZiAob2Zmc2V0ID4gc2VnaGRyLT50b3RhbHNpemUp Ci0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1P UlkpLAotCQkJCQkgZXJybXNnKCJvdXQgb2Ygc2hhcmVkIG1lbW9yeSAoJXp1IGJ5dGVzIHJl cXVlc3RlZCkiLAotCQkJCQkJCW9mZnNldCkpKTsKKwkvKgorCSAqIEFsbG9jYXRpb25zIGFm dGVyIHRoaXMgcG9pbnQgc2hvdWxkIGdvIHRocm91Z2ggU2htZW1BbGxvYywgd2hpY2gKKwkg KiBleHBlY3RzIHRvIGFsbG9jYXRlIGV2ZXJ5dGhpbmcgb24gY2FjaGUgbGluZSBib3VuZGFy aWVzLiAgTWFrZSBzdXJlCisJICogdGhlIGZpcnN0IGFsbG9jYXRpb24gYmVnaW5zIG9uIGEg Y2FjaGUgbGluZSBib3VuZGFyeS4KKwkgKi8KKwlvZmZzZXQgPSBDQUNIRUxJTkVBTElHTihz ZWdoZHItPmNvbnRlbnRfb2Zmc2V0ICsgc2l6ZW9mKFNobWVtQWxsb2NhdG9yRGF0YSkpOwor CWlmIChvZmZzZXQgPiBzZWdoZHItPnRvdGFsc2l6ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coIm91dCBv ZiBzaGFyZWQgbWVtb3J5ICglenUgYnl0ZXMgcmVxdWVzdGVkKSIsCisJCQkJCQlvZmZzZXQp KSk7CiAKLQkJU2htZW1BbGxvY2F0b3IgPSAoU2htZW1BbGxvY2F0b3JEYXRhICopICgoY2hh ciAqKSBzZWdoZHIgKyBzZWdoZHItPmNvbnRlbnRfb2Zmc2V0KTsKKwlTaG1lbUFsbG9jYXRv ciA9IChTaG1lbUFsbG9jYXRvckRhdGEgKikgKChjaGFyICopIHNlZ2hkciArIHNlZ2hkci0+ Y29udGVudF9vZmZzZXQpOworCVNobWVtTG9jayA9ICZTaG1lbUFsbG9jYXRvci0+c2htZW1f bG9jazsKIAorCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJewogCQlTcGluTG9ja0luaXQo JlNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2NrKTsKLQkJU2htZW1Mb2NrID0gJlNobWVtQWxs b2NhdG9yLT5zaG1lbV9sb2NrOwogCQlTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQgPSBv ZmZzZXQ7Ci0JCS8qIFNobWVtSW5kZXggY2FuJ3QgYmUgc2V0IHVwIHlldCAobmVlZCBMV0xv Y2tzIGZpcnN0KSAqLwotCQlTaG1lbUFsbG9jYXRvci0+aW5kZXggPSBOVUxMOwotCQlTaG1l bUluZGV4ID0gKEhUQUIgKikgTlVMTDsKIAl9CisKKwkvKgorCSAqIENyZWF0ZSAob3IgYXR0 YWNoIHRvKSB0aGUgc2hhcmVkIG1lbW9yeSBpbmRleCBvZiBzaG1lbSBhcmVhcy4KKwkgKi8K KwloYXNoX3NpemUgPSBudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyArIFNITUVNX0lOREVY X0FERElUSU9OQUxfU0laRTsKKworCWluZm8ua2V5c2l6ZSA9IFNITUVNX0lOREVYX0tFWVNJ WkU7CisJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1JbmRleEVudCk7CisJaW5mby5k c2l6ZSA9IGluZm8ubWF4X2RzaXplID0gaGFzaF9zZWxlY3RfZGlyc2l6ZShoYXNoX3NpemUp OworCWluZm8uYWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsKKwloYXNoX2ZsYWdzID0gSEFT SF9FTEVNIHwgSEFTSF9TVFJJTkdTIHwgSEFTSF9TSEFSRURfTUVNIHwgSEFTSF9BTExPQyB8 IEhBU0hfRElSU0laRTsKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJc2l6ZSA9 IGhhc2hfZ2V0X3NoYXJlZF9zaXplKCZpbmZvLCBoYXNoX2ZsYWdzKTsKKwkJU2htZW1BbGxv Y2F0b3ItPmluZGV4ID0gKEhBU0hIRFIgKikgU2htZW1BbGxvYyhzaXplKTsKKwl9CisJZWxz ZQorCQloYXNoX2ZsYWdzIHw9IEhBU0hfQVRUQUNIOworCWluZm8uaGN0bCA9IFNobWVtQWxs b2NhdG9yLT5pbmRleDsKKwlTaG1lbUluZGV4ID0gaGFzaF9jcmVhdGUoIlNobWVtSW5kZXgi LCBoYXNoX3NpemUsICZpbmZvLCBoYXNoX2ZsYWdzKTsKKwlBc3NlcnQoU2htZW1JbmRleCAh PSBOVUxMKTsKIH0KIAogLyoKQEAgLTI2OCw2NyArNjQ2LDE4IEBAIFNobWVtQWRkcklzVmFs aWQoY29uc3Qgdm9pZCAqYWRkcikKIH0KIAogLyoKLSAqCUluaXRTaG1lbUluZGV4KCkgLS0t IHNldCB1cCBvciBhdHRhY2ggdG8gc2htZW0gaW5kZXggdGFibGUuCi0gKi8KLXZvaWQKLUlu aXRTaG1lbUluZGV4KHZvaWQpCi17Ci0JSEFTSENUTAkJaW5mbzsKLQotCS8qCi0JICogQ3Jl YXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNobWVtIGluZGV4LgotCSAqCi0JICogU2luY2UgU2ht ZW1Jbml0SGFzaCBjYWxscyBTaG1lbUluaXRTdHJ1Y3QsIHdoaWNoIGV4cGVjdHMgdGhlIFNo bWVtSW5kZXgKLQkgKiBoYXNodGFibGUgdG8gZXhpc3QgYWxyZWFkeSwgd2UgaGF2ZSBhIGJp dCBvZiBhIGNpcmN1bGFyaXR5IHByb2JsZW0gaW4KLQkgKiBpbml0aWFsaXppbmcgdGhlIFNo bWVtSW5kZXggaXRzZWxmLiAgVGhlIHNwZWNpYWwgIlNobWVtSW5kZXgiIGhhc2gKLQkgKiB0 YWJsZSBuYW1lIHdpbGwgdGVsbCBTaG1lbUluaXRTdHJ1Y3QgdG8gZmFrZSBpdC4KLQkgKi8K LQlpbmZvLmtleXNpemUgPSBTSE1FTV9JTkRFWF9LRVlTSVpFOwotCWluZm8uZW50cnlzaXpl ID0gc2l6ZW9mKFNobWVtSW5kZXhFbnQpOwotCi0JU2htZW1JbmRleCA9IFNobWVtSW5pdEhh c2goIlNobWVtSW5kZXgiLAotCQkJCQkJCSAgIFNITUVNX0lOREVYX1NJWkUsIFNITUVNX0lO REVYX1NJWkUsCi0JCQkJCQkJICAgJmluZm8sCi0JCQkJCQkJICAgSEFTSF9FTEVNIHwgSEFT SF9TVFJJTkdTKTsKLX0KLQotLyoKLSAqIFNobWVtSW5pdEhhc2ggLS0gQ3JlYXRlIGFuZCBp bml0aWFsaXplLCBvciBhdHRhY2ggdG8sIGEKLSAqCQlzaGFyZWQgbWVtb3J5IGhhc2ggdGFi bGUuCi0gKgotICogV2UgYXNzdW1lIGNhbGxlciBpcyBkb2luZyBzb21lIGtpbmQgb2Ygc3lu Y2hyb25pemF0aW9uCi0gKiBzbyB0aGF0IHR3byBwcm9jZXNzZXMgZG9uJ3QgdHJ5IHRvIGNy ZWF0ZS9pbml0aWFsaXplIHRoZSBzYW1lCi0gKiB0YWJsZSBhdCBvbmNlLiAgKEluIHByYWN0 aWNlLCBhbGwgY3JlYXRpb25zIGFyZSBkb25lIGluIHRoZSBwb3N0bWFzdGVyCi0gKiBwcm9j ZXNzOyBjaGlsZCBwcm9jZXNzZXMgc2hvdWxkIGFsd2F5cyBiZSBhdHRhY2hpbmcgdG8gZXhp c3RpbmcgdGFibGVzLikKLSAqCi0gKiBtYXhfc2l6ZSBpcyB0aGUgZXN0aW1hdGVkIG1heGlt dW0gbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzLiAgVGhpcyBpcwotICogbm90IGEgaGFy ZCBsaW1pdCwgYnV0IHRoZSBhY2Nlc3MgZWZmaWNpZW5jeSB3aWxsIGRlZ3JhZGUgaWYgaXQg aXMKLSAqIGV4Y2VlZGVkIHN1YnN0YW50aWFsbHkgKHNpbmNlIGl0J3MgdXNlZCB0byBjb21w dXRlIGRpcmVjdG9yeSBzaXplIGFuZAotICogdGhlIGhhc2ggdGFibGUgYnVja2V0cyB3aWxs IGdldCBvdmVyZnVsbCkuCi0gKgotICogaW5pdF9zaXplIGlzIHRoZSBudW1iZXIgb2YgaGFz aHRhYmxlIGVudHJpZXMgdG8gcHJlYWxsb2NhdGUuICBGb3IgYSB0YWJsZQotICogd2hvc2Ug bWF4aW11bSBzaXplIGlzIGNlcnRhaW4sIHRoaXMgc2hvdWxkIGJlIGVxdWFsIHRvIG1heF9z aXplOyB0aGF0Ci0gKiBlbnN1cmVzIHRoYXQgbm8gcnVuLXRpbWUgb3V0LW9mLXNoYXJlZC1t ZW1vcnkgZmFpbHVyZXMgY2FuIG9jY3VyLgorICogU2htZW1SZWdpc3Rlckhhc2ggLS0gUmVn aXN0ZXIgYSBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuCiAgKgogICogKmluZm9QIGFuZCBo YXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtl eQogICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcg Yml0cyBhbmQgdmFsdWVzIHNwZWNpZmljCiAgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2ggdGFi bGVzIGFyZSBhZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heQogICogY2hvb3Nl IHRvIHNwZWNpZnkgSEFTSF9QQVJUSVRJT04gYW5kL29yIEhBU0hfRklYRURfU0laRS4KLSAq Ci0gKiBOb3RlOiBiZWZvcmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVybmVk IE5VTEwgZm9yIHNvbWUgZmFpbHVyZQotICogY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0aHJv d3MgZXJyb3IgaW5zdGVhZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjawotICogZm9yIE5V TEwuCiAgKi8KLUhUQUIgKgotU2htZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1lLAkJLyog dGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCi0JCQkgIGludDY0IGluaXRf c2l6ZSwJLyogaW5pdGlhbCB0YWJsZSBzaXplICovCi0JCQkgIGludDY0IG1heF9zaXplLAkv KiBtYXggc2l6ZSBvZiB0aGUgdGFibGUgKi8KLQkJCSAgSEFTSENUTCAqaW5mb1AsCS8qIGlu Zm8gYWJvdXQga2V5IGFuZCBidWNrZXQgc2l6ZSAqLwotCQkJICBpbnQgaGFzaF9mbGFncykJ LyogaW5mbyBhYm91dCBpbmZvUCAqLworYm9vbAorU2htZW1SZWdpc3Rlckhhc2goU2htZW1I YXNoRGVzYyAqZGVzYywJCS8qIGNvbmZpZ3VyYXRpb24gKi8KKwkJCQkgIEhBU0hDVEwgKmlu Zm9QLAkvKiBpbmZvIGFib3V0IGtleSBhbmQgYnVja2V0IHNpemUgKi8KKwkJCQkgIGludCBo YXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9QICovCiB7Ci0JYm9vbAkJZm91bmQ7Ci0J dm9pZAkgICAqbG9jYXRpb247Ci0KIAkvKgogCSAqIEhhc2ggdGFibGVzIGFsbG9jYXRlZCBp biBzaGFyZWQgbWVtb3J5IGhhdmUgYSBmaXhlZCBkaXJlY3Rvcnk7IGl0IGNhbid0CiAJICog Z3JvdyBvciBvdGhlciBiYWNrZW5kcyB3b3VsZG4ndCBiZSBhYmxlIHRvIGZpbmQgaXQuIFNv LCBtYWtlIHN1cmUgd2UKQEAgLTMzNiwxNDUgKzY2NSw2MiBAQCBTaG1lbUluaXRIYXNoKGNv bnN0IGNoYXIgKm5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXgg Ki8KIAkgKgogCSAqIFRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRvciBtdXN0IGJlIHNwZWNp ZmllZCB0b28uCiAJICovCi0JaW5mb1AtPmRzaXplID0gaW5mb1AtPm1heF9kc2l6ZSA9IGhh c2hfc2VsZWN0X2RpcnNpemUobWF4X3NpemUpOworCWluZm9QLT5kc2l6ZSA9IGluZm9QLT5t YXhfZHNpemUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKGRlc2MtPm1heF9zaXplKTsKIAlpbmZv UC0+YWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsKIAloYXNoX2ZsYWdzIHw9IEhBU0hfU0hB UkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CiAKIAkvKiBsb29rIGl0IHVw IGluIHRoZSBzaG1lbSBpbmRleCAqLwotCWxvY2F0aW9uID0gU2htZW1Jbml0U3RydWN0KG5h bWUsCi0JCQkJCQkJICAgaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhhc2hfZmxhZ3Mp LAotCQkJCQkJCSAgICZmb3VuZCk7CisJbWVtc2V0KCZkZXNjLT5iYXNlX2Rlc2MsIDAsIHNp emVvZihkZXNjLT5iYXNlX2Rlc2MpKTsKKwlkZXNjLT5iYXNlX2Rlc2MubmFtZSA9IGRlc2Mt Pm5hbWU7CisJZGVzYy0+YmFzZV9kZXNjLnNpemUgPSBoYXNoX2dldF9zaGFyZWRfc2l6ZShp bmZvUCwgaGFzaF9mbGFncyk7CisJZGVzYy0+YmFzZV9kZXNjLmluaXRfZm4gPSBzaG1lbV9o YXNoX2luaXQ7CisJZGVzYy0+YmFzZV9kZXNjLmluaXRfZm5fYXJnID0gZGVzYzsKKwlkZXNj LT5iYXNlX2Rlc2MuYXR0YWNoX2ZuID0gc2htZW1faGFzaF9hdHRhY2g7CisJZGVzYy0+YmFz ZV9kZXNjLmF0dGFjaF9mbl9hcmcgPSBkZXNjOwogCiAJLyoKLQkgKiBpZiBpdCBhbHJlYWR5 IGV4aXN0cywgYXR0YWNoIHRvIGl0IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFs aXplCi0JICogbmV3IHNwYWNlCisJICogV2UgbmVlZCBhIHN0YWJsZSBwb2ludGVyIHRvIGhv bGQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBtZW1vcnkuIFVzZQorCSAqIHRoZSBvbmUg cGFzc2VkIGluIHRoZSBkZXNjcmlwdG9yIG5vdy4gSXQgd2lsbCBiZSByZXBsYWNlZCB3aXRo IHRoZSBoYXNoCisJICogdGFibGUgaGVhZGVyIGJ5IGluaXQgb3IgYXR0YWNoIGZ1bmN0aW9u LgogCSAqLwotCWlmIChmb3VuZCkKLQkJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKKwlk ZXNjLT5iYXNlX2Rlc2MucHRyID0gKHZvaWQgKiopIGRlc2MtPnB0cjsKIAotCS8qIFBhc3Mg bG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWluZm9Q LT5oY3RsID0gKEhBU0hIRFIgKikgbG9jYXRpb247CisJZGVzYy0+YmFzZV9kZXNjLmV4dHJh X3NpemUgPSBoYXNoX2VzdGltYXRlX3NpemUoZGVzYy0+bWF4X3NpemUsIGluZm9QLT5lbnRy eXNpemUpIC0gZGVzYy0+YmFzZV9kZXNjLnNpemU7CisKKwlkZXNjLT5oYXNoX2ZsYWdzID0g aGFzaF9mbGFnczsKKwlkZXNjLT5pbmZvUCA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1v cnlDb250ZXh0LCBzaXplb2YoSEFTSENUTCkpOworCW1lbWNweShkZXNjLT5pbmZvUCwgaW5m b1AsIHNpemVvZihIQVNIQ1RMKSk7CiAKLQlyZXR1cm4gaGFzaF9jcmVhdGUobmFtZSwgaW5p dF9zaXplLCBpbmZvUCwgaGFzaF9mbGFncyk7CisJcmV0dXJuIFNobWVtUmVnaXN0ZXJTdHJ1 Y3QoJmRlc2MtPmJhc2VfZGVzYyk7CiB9CiAKLS8qCi0gKiBTaG1lbUluaXRTdHJ1Y3QgLS0g Q3JlYXRlL2F0dGFjaCB0byBhIHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVtb3J5LgotICoKLSAq CQlUaGlzIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZmluZCBvciBhbGxv Y2F0ZQotICoJCWEgZGF0YSBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1lbW9yeS4gIElmIG5vIG90 aGVyIHByb2Nlc3MKLSAqCQloYXMgY3JlYXRlZCB0aGUgc3RydWN0dXJlLCB0aGlzIHJvdXRp bmUgYWxsb2NhdGVzIHNwYWNlCi0gKgkJZm9yIGl0LiAgSWYgaXQgZXhpc3RzIGFscmVhZHks IGEgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcKLSAqCQlzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQu Ci0gKgotICoJUmV0dXJuczogcG9pbnRlciB0byB0aGUgb2JqZWN0LiAgKmZvdW5kUHRyIGlz IHNldCB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzCi0gKgkJYWxyZWFkeSBpbiB0aGUgc2htZW0g aW5kZXggKGhlbmNlLCBhbHJlYWR5IGluaXRpYWxpemVkKS4KLSAqCi0gKglOb3RlOiBiZWZv cmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwgZm9yIHNvbWUg ZmFpbHVyZQotICoJY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0aHJvd3MgZXJyb3IgaW5zdGVh ZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjawotICoJZm9yIE5VTEwuCi0gKi8KLXZvaWQg KgotU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAq Zm91bmRQdHIpCitzdGF0aWMgdm9pZAorc2htZW1faGFzaF9pbml0KHZvaWQgKmFyZykKIHsK LQlTaG1lbUluZGV4RW50ICpyZXN1bHQ7Ci0Jdm9pZAkgICAqc3RydWN0UHRyOwotCi0JTFdM b2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhDTFVTSVZFKTsKKwlTaG1lbUhhc2hE ZXNjICpkZXNjID0gKFNobWVtSGFzaERlc2MgKikgYXJnOworCWludAkJCWhhc2hfZmxhZ3Mg PSBkZXNjLT5oYXNoX2ZsYWdzOwogCi0JaWYgKCFTaG1lbUluZGV4KQotCXsKLQkJLyogTXVz dCBiZSB0cnlpbmcgdG8gY3JlYXRlL2F0dGFjaCB0byBTaG1lbUluZGV4IGl0c2VsZiAqLwot CQlBc3NlcnQoc3RyY21wKG5hbWUsICJTaG1lbUluZGV4IikgPT0gMCk7Ci0KLQkJaWYgKElz VW5kZXJQb3N0bWFzdGVyKQotCQl7Ci0JCQkvKiBNdXN0IGJlIGluaXRpYWxpemluZyBhIChu b24tc3RhbmRhbG9uZSkgYmFja2VuZCAqLwotCQkJQXNzZXJ0KFNobWVtQWxsb2NhdG9yLT5p bmRleCAhPSBOVUxMKTsKLQkJCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NhdG9yLT5pbmRleDsK LQkJCSpmb3VuZFB0ciA9IHRydWU7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICog SWYgdGhlIHNobWVtIGluZGV4IGRvZXNuJ3QgZXhpc3QsIHdlIGFyZSBib290c3RyYXBwaW5n OiB3ZSBtdXN0Ci0JCQkgKiBiZSB0cnlpbmcgdG8gaW5pdCB0aGUgc2htZW0gaW5kZXggaXRz ZWxmLgotCQkJICoKLQkJCSAqIE5vdGljZSB0aGF0IHRoZSBTaG1lbUluZGV4TG9jayBpcyBy ZWxlYXNlZCBiZWZvcmUgdGhlIHNobWVtCi0JCQkgKiBpbmRleCBoYXMgYmVlbiBpbml0aWFs aXplZC4gIFRoaXMgc2hvdWxkIGJlIE9LIGJlY2F1c2Ugbm8gb3RoZXIKLQkJCSAqIHByb2Nl c3MgY2FuIGJlIGFjY2Vzc2luZyBzaGFyZWQgbWVtb3J5IHlldC4KLQkJCSAqLwotCQkJQXNz ZXJ0KFNobWVtQWxsb2NhdG9yLT5pbmRleCA9PSBOVUxMKTsKLQkJCXN0cnVjdFB0ciA9IFNo bWVtQWxsb2Moc2l6ZSk7Ci0JCQlTaG1lbUFsbG9jYXRvci0+aW5kZXggPSBzdHJ1Y3RQdHI7 Ci0JCQkqZm91bmRQdHIgPSBmYWxzZTsKLQkJfQotCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5k ZXhMb2NrKTsKLQkJcmV0dXJuIHN0cnVjdFB0cjsKLQl9Ci0KLQkvKiBsb29rIGl0IHVwIGlu IHRoZSBzaG1lbSBpbmRleCAqLwotCXJlc3VsdCA9IChTaG1lbUluZGV4RW50ICopCi0JCWhh c2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfRU5URVJfTlVMTCwgZm91bmRQdHIp OwotCi0JaWYgKCFyZXN1bHQpCi0JewotCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2Nr KTsKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1P UlkpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRyeSBm b3IgZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKLQkJCQkJCW5hbWUpKSk7Ci0JfQotCi0JaWYg KCpmb3VuZFB0cikKLQl7Ci0JCS8qCi0JCSAqIFN0cnVjdHVyZSBpcyBpbiB0aGUgc2htZW0g aW5kZXggc28gc29tZW9uZSBlbHNlIGhhcyBhbGxvY2F0ZWQgaXQKLQkJICogYWxyZWFkeS4g IFRoZSBzaXplIGJldHRlciBiZSB0aGUgc2FtZSBhcyB0aGUgc2l6ZSB3ZSBhcmUgdHJ5aW5n IHRvCi0JCSAqIGluaXRpYWxpemUgdG8sIG9yIHRoZXJlIGlzIGEgbmFtZSBjb25mbGljdCAo b3Igd29yc2UpLgotCQkgKi8KLQkJaWYgKHJlc3VsdC0+c2l6ZSAhPSBzaXplKQotCQl7Ci0J CQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKLQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCShlcnJtc2coIlNobWVtSW5kZXggZW50cnkgc2l6ZSBpcyB3cm9uZyBmb3IgZGF0YSBz dHJ1Y3R1cmUiCi0JCQkJCQkJIiBcIiVzXCI6IGV4cGVjdGVkICV6dSwgYWN0dWFsICV6dSIs Ci0JCQkJCQkJbmFtZSwgc2l6ZSwgcmVzdWx0LT5zaXplKSkpOwotCQl9Ci0JCXN0cnVjdFB0 ciA9IHJlc3VsdC0+bG9jYXRpb247Ci0JfQotCWVsc2UKLQl7Ci0JCVNpemUJCWFsbG9jYXRl ZF9zaXplOworCS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNo X2NyZWF0ZSAqLworCWRlc2MtPmluZm9QLT5oY3RsID0gKEhBU0hIRFIgKikgKmRlc2MtPmJh c2VfZGVzYy5wdHI7CiAKLQkJLyogSXQgaXNuJ3QgaW4gdGhlIHRhYmxlIHlldC4gYWxsb2Nh dGUgYW5kIGluaXRpYWxpemUgaXQgKi8KLQkJc3RydWN0UHRyID0gU2htZW1BbGxvY1Jhdyhz aXplLCAmYWxsb2NhdGVkX3NpemUpOwotCQlpZiAoc3RydWN0UHRyID09IE5VTEwpCi0JCXsK LQkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXggZW50 cnkgKi8KLQkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfUkVNT1ZFLCBO VUxMKTsKLQkJCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwotCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkJIGVy cm1zZygibm90IGVub3VnaCBzaGFyZWQgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZSIKLQkJ CQkJCQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAotCQkJCQkJCW5hbWUsIHNp emUpKSk7Ci0JCX0KLQkJcmVzdWx0LT5zaXplID0gc2l6ZTsKLQkJcmVzdWx0LT5hbGxvY2F0 ZWRfc2l6ZSA9IGFsbG9jYXRlZF9zaXplOwotCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0 UHRyOwotCX0KKwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVzYy0+ aW5pdF9zaXplLCBkZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7Cit9CiAKLQlMV0xvY2tSZWxl YXNlKFNobWVtSW5kZXhMb2NrKTsKK3N0YXRpYyB2b2lkCitzaG1lbV9oYXNoX2F0dGFjaCh2 b2lkICphcmcpCit7CisJU2htZW1IYXNoRGVzYyAqZGVzYyA9IChTaG1lbUhhc2hEZXNjICop IGFyZzsKKwlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFzaF9mbGFnczsKIAotCUFzc2Vy dChTaG1lbUFkZHJJc1ZhbGlkKHN0cnVjdFB0cikpOworCS8qIGF0dGFjaCB0byBpdCByYXRo ZXIgdGhhbiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBuZXcgc3BhY2UgKi8KKwloYXNoX2Zs YWdzIHw9IEhBU0hfQVRUQUNIOwogCi0JQXNzZXJ0KHN0cnVjdFB0ciA9PSAodm9pZCAqKSBD QUNIRUxJTkVBTElHTihzdHJ1Y3RQdHIpKTsKKwkvKiBQYXNzIGxvY2F0aW9uIG9mIGhhc2h0 YWJsZSBoZWFkZXIgdG8gaGFzaF9jcmVhdGUgKi8KKwlkZXNjLT5pbmZvUC0+aGN0bCA9IChI QVNISERSICopICpkZXNjLT5iYXNlX2Rlc2MucHRyOwogCi0JcmV0dXJuIHN0cnVjdFB0cjsK KwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVzYy0+aW5pdF9zaXpl LCBkZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7CiB9CiAKLQogLyoKICAqIEFkZCB0d28gU2l6 ZSB2YWx1ZXMsIGNoZWNraW5nIGZvciBvdmVyZmxvdwogICovCkBAIC03NjEsMyArMTAwNyw4 MiBAQCBwZ19udW1hX2F2YWlsYWJsZShQR19GVU5DVElPTl9BUkdTKQogewogCVBHX1JFVFVS Tl9CT09MKHBnX251bWFfaW5pdCgpICE9IC0xKTsKIH0KKworLyoKKyAqIFNobWVtSW5pdFN0 cnVjdCAtLSBDcmVhdGUvYXR0YWNoIHRvIGEgc3RydWN0dXJlIGluIHNoYXJlZCBtZW1vcnku CisgKgorICoJCVRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiB0byBmaW5k IG9yIGFsbG9jYXRlCisgKgkJYSBkYXRhIHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVtb3J5LiAg SWYgbm8gb3RoZXIgcHJvY2VzcworICoJCWhhcyBjcmVhdGVkIHRoZSBzdHJ1Y3R1cmUsIHRo aXMgcm91dGluZSBhbGxvY2F0ZXMgc3BhY2UKKyAqCQlmb3IgaXQuICBJZiBpdCBleGlzdHMg YWxyZWFkeSwgYSBwb2ludGVyIHRvIHRoZSBleGlzdGluZworICoJCXN0cnVjdHVyZSBpcyBy ZXR1cm5lZC4KKyAqCisgKglSZXR1cm5zOiBwb2ludGVyIHRvIHRoZSBvYmplY3QuICAqZm91 bmRQdHIgaXMgc2V0IHRydWUgaWYgdGhlIG9iamVjdCB3YXMKKyAqCQlhbHJlYWR5IGluIHRo ZSBzaG1lbSBpbmRleCAoaGVuY2UsIGFscmVhZHkgaW5pdGlhbGl6ZWQpLgorICoKKyAqIE5v dGU6IFRoaXMgaXMgYSBsZWdhY3kgaW50ZXJmYWNlLCBrZXB0IGZvciBiYWNrd2FyZHMgY29t cGF0aWJpbGl0eSB3aXRoCisgKiBleHRlbnNpb25zLiAgVXNlIFNobWVtUmVnaXN0ZXJTdHJ1 Y3QoKSBpbiBuZXcgY29kZSEKKyAqLwordm9pZCAqCitTaG1lbUluaXRTdHJ1Y3QoY29uc3Qg Y2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKK3sKKwlTaG1lbVN0cnVj dERlc2MgKmRlc2M7CisKKwlBc3NlcnQoc2htZW1faW5pdGlhbGl6ZWQpOworCisJZGVzYyA9 IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKFNobWVt U3RydWN0RGVzYykgKyBzaXplb2Yodm9pZCAqKSk7CisJZGVzYy0+bmFtZSA9IG5hbWU7CisJ ZGVzYy0+c2l6ZSA9IHNpemU7CisJZGVzYy0+cHRyID0gKHZvaWQgKikgKCgoY2hhciAqKSBk ZXNjKSArIHNpemVvZihTaG1lbVN0cnVjdERlc2MpKTsKKworCSpmb3VuZFB0ciA9IFNobWVt UmVnaXN0ZXJTdHJ1Y3QoZGVzYyk7CisJQXNzZXJ0KCpkZXNjLT5wdHIgIT0gTlVMTCk7CisJ cmV0dXJuICpkZXNjLT5wdHI7Cit9CisKKy8qCisgKiBTaG1lbUluaXRIYXNoIC0tIENyZWF0 ZSBhbmQgaW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRvLCBhCisgKgkJc2hhcmVkIG1lbW9yeSBo YXNoIHRhYmxlLgorICoKKyAqIFdlIGFzc3VtZSBjYWxsZXIgaXMgZG9pbmcgc29tZSBraW5k IG9mIHN5bmNocm9uaXphdGlvbgorICogc28gdGhhdCB0d28gcHJvY2Vzc2VzIGRvbid0IHRy eSB0byBjcmVhdGUvaW5pdGlhbGl6ZSB0aGUgc2FtZQorICogdGFibGUgYXQgb25jZS4gIChJ biBwcmFjdGljZSwgYWxsIGNyZWF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgcG9zdG1hc3Rlcgor ICogcHJvY2VzczsgY2hpbGQgcHJvY2Vzc2VzIHNob3VsZCBhbHdheXMgYmUgYXR0YWNoaW5n IHRvIGV4aXN0aW5nIHRhYmxlcy4pCisgKgorICogbWF4X3NpemUgaXMgdGhlIGVzdGltYXRl ZCBtYXhpbXVtIG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcy4gIFRoaXMgaXMKKyAqIG5v dCBhIGhhcmQgbGltaXQsIGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBkZWdyYWRl IGlmIGl0IGlzCisgKiBleGNlZWRlZCBzdWJzdGFudGlhbGx5IChzaW5jZSBpdCdzIHVzZWQg dG8gY29tcHV0ZSBkaXJlY3Rvcnkgc2l6ZSBhbmQKKyAqIHRoZSBoYXNoIHRhYmxlIGJ1Y2tl dHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgorICoKKyAqIGluaXRfc2l6ZSBpcyB0aGUgbnVtYmVy IG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHByZWFsbG9jYXRlLiAgRm9yIGEgdGFibGUKKyAq IHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWluLCB0aGlzIHNob3VsZCBiZSBlcXVhbCB0 byBtYXhfc2l6ZTsgdGhhdAorICogZW5zdXJlcyB0aGF0IG5vIHJ1bi10aW1lIG91dC1vZi1z aGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBvY2N1ci4KKyAqCisgKiAqaW5mb1AgYW5kIGhh c2hfZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHRoZSBlbnRyeSBzaXplcyBhbmQga2V5 CisgKiBjb21wYXJpc29uIHNlbWFudGljcyAoc2VlIGhhc2hfY3JlYXRlKCkpLiAgRmxhZyBi aXRzIGFuZCB2YWx1ZXMgc3BlY2lmaWMKKyAqIHRvIHNoYXJlZC1tZW1vcnkgaGFzaCB0YWJs ZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0aGF0IGNhbGxlcnMgbWF5CisgKiBjaG9vc2Ug dG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpFLgorICoK KyAqIE5vdGU6IFRoaXMgaXMgYSBsZWdhY3kgaW50ZXJmYWNlLCBrZXB0IGZvciBiYWNrd2Fy ZHMgY29tcGF0aWJpbGl0eSB3aXRoCisgKiBleHRlbnNpb25zLiAgVXNlIFNobWVtUmVnaXN0 ZXJIYXNoKCkgaW4gbmV3IGNvZGUhCisgKi8KK0hUQUIgKgorU2htZW1Jbml0SGFzaChjb25z dCBjaGFyICpuYW1lLAkJLyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICov CisJCQkgIGludDY0IGluaXRfc2l6ZSwJLyogaW5pdGlhbCB0YWJsZSBzaXplICovCisJCQkg IGludDY0IG1heF9zaXplLAkvKiBtYXggc2l6ZSBvZiB0aGUgdGFibGUgKi8KKwkJCSAgSEFT SENUTCAqaW5mb1AsCS8qIGluZm8gYWJvdXQga2V5IGFuZCBidWNrZXQgc2l6ZSAqLworCQkJ ICBpbnQgaGFzaF9mbGFncykJLyogaW5mbyBhYm91dCBpbmZvUCAqLworeworCVNobWVtSGFz aERlc2MgKmRlc2M7CisKKwlBc3NlcnQoc2htZW1faW5pdGlhbGl6ZWQpOworCisJZGVzYyA9 IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKFNobWVt SGFzaERlc2MpICsgc2l6ZW9mKEhUQUIgKikpOworCWRlc2MtPm5hbWUgPSBuYW1lOworCWRl c2MtPmluaXRfc2l6ZSA9IGluaXRfc2l6ZTsKKwlkZXNjLT5tYXhfc2l6ZSA9IG1heF9zaXpl OworCWRlc2MtPnB0ciA9IChIVEFCICoqKSAoKChjaGFyICopIGRlc2MpICsgc2l6ZW9mKFNo bWVtSGFzaERlc2MpKTsKKworCVNobWVtUmVnaXN0ZXJIYXNoKGRlc2MsIGluZm9QLCBoYXNo X2ZsYWdzKTsKKwlyZXR1cm4gKmRlc2MtPnB0cjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRl eCBkMDFhMDlkZDBjNC4uZmEwNzRjNDE5YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTQx NjIsNiArNDE2Miw5IEBAIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwKIAkvKiBJbml0aWFsaXplIHNpemUgb2YgZmFzdC1wYXRoIGxvY2sgY2FjaGUu ICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRoTG9ja3MoKTsKIAorCS8qIFJlZ2lzdGVyIHRoZSBz aGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFsbCBjb3JlIHN1YnN5c3RlbXMuICovCisJUmVnaXN0 ZXJTaG1lbVN0cnVjdHMoKTsKKwogCS8qCiAJICogR2l2ZSBwcmVsb2FkZWQgbGlicmFyaWVz IGEgY2hhbmNlIHRvIHJlcXVlc3QgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5LgogCSAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvaXBjLmgKaW5kZXggZGEzMjc4N2FiNTEuLjhhM2I3MWFkNWQzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv aXBjLmgKQEAgLTc3LDYgKzc3LDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tfb25fc2htZW1fZXhp dF9saXN0c19hcmVfZW1wdHkodm9pZCk7CiAvKiBpcGNpLmMgKi8KIGV4dGVybiBQR0RMTElN UE9SVCBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBzaG1lbV9zdGFydHVwX2hvb2s7CiAKK2V4 dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1TdHJ1Y3RzKHZvaWQpOwogZXh0ZXJuIFNpemUgQ2Fs Y3VsYXRlU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ3JlYXRlU2hhcmVkTWVtb3J5 QW5kU2VtYXBob3Jlcyh2b2lkKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ht ZW0uaAppbmRleCA4OWQ0NTI4N2MxNy4uZWExODg0YTg3NzggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVt LmgKQEAgLTI0LDE5ICsyNCwxMzggQEAKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNp bmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAKK3R5cGVkZWYgdm9pZCAoKlNobWVtSW5pdENh bGxiYWNrKSAodm9pZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAoKlNobWVtQXR0YWNoQ2FsbGJh Y2spICh2b2lkICphcmcpOworCisvKgorICogU2htZW1TdHJ1Y3REZXNjIGRlc2NyaWJlcyBh IG5hbWVkIGFyZWEgb3Igc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuCisgKgorICogU2hhcmVk IG1lbW9yeSBpcyByZXNlcnZlZCBhbmQgYWxsb2NhdGVkIGluIGEgZmV3IHBoYXNlcyBhdCBw b3N0bWFzdGVyCisgKiBzdGFydHVwLCBhbmQgaW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRoZXJl J3Mgc29tZSBleHRyYSB3b3JrIGRvbmUgdG8gImF0dGFjaCIKKyAqIHRvIHRoZW0gYXQgYmFj a2VuZCBzdGFydHVwLiBTaG1lbVN0cnVjdERlc2MgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1h dGlvbgorICogbmVlZGVkIHRvIG1hbmFnZSB0aGUgbGlmZWN5Y2xlLgorICoKKyAqICduYW1l JywgJ3NpemUnIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBmaWxsZWQgaW4gYnkg dGhlCisgKiBTaG1lbVJlZ2lzdGVyU3RydWN0KCkgY2FsbGVyLiBBZnRlciByZWdpc3RyYXRp b24sIHRoZSBzaG1lbSBtYWNoaW5lcnkKKyAqIHJlc2VydmVzIHRoZSBtZW1vcnkgZm9yIHRo ZSBhcmVhLCBzZXRzICpwdHIgdG8gcG9pbnQgdG8gdGhlIGFsbG9jYXRpb24sIGFuZAorICog Y2FsbHMgdGhlIGNhbGxiYWNrcyBhdCB0aGUgcmlnaHQgbW9tZW50cy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgU2htZW1TdHJ1Y3REZXNjCit7CisJLyogTmFtZSBvZiB0aGUgc2hhcmVkIG1l bW9yeSBhcmVhLiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHN5c3RlbSAqLworCWNvbnN0 IGNoYXIgKm5hbWU7CisKKwkvKiBTaXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgKi8K KwlzaXplX3QJCXNpemU7CisKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZ1 bmN0aW9uLiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgc2hhcmVkCisJICogbWVtb3J5IGFy ZWEgaXMgYWxsb2NhdGVkLCB1c3VhbGx5IGF0IHBvc3RtYXN0ZXIgc3RhcnR1cC4gICdpbml0 X2ZuX2FyZycKKwkgKiBpcyBhbiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBjYWxs YmFjay4KKwkgKi8KKwlTaG1lbUluaXRDYWxsYmFjayBpbml0X2ZuOworCXZvaWQJICAgKmlu aXRfZm5fYXJnOworCisJLyoKKwkgKiBBdHRhY2htZW50IGNhbGxiYWNrIGZ1bmN0aW9uLiAg SW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRoaXMgaXMgY2FsbGVkIGF0CisJICogc3RhcnR1cCBv ZiBlYWNoIGJhY2tlbmQuICBJbiAhRVhFQ19CQUNLRU5EIG1vZGUsIHRoaXMgaXMgb25seSBj YWxsZWQgaWYKKwkgKiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGlzIHJlZ2lzdGVyZWQgYWZ0 ZXIgcG9zdG1hc3RlciBzdGFydHVwLiAgV2UKKwkgKiBuZXZlciBkbyB0aGF0IGluIGNvcmUg Y29kZSwgYnV0IGV4dGVuc2lvbnMgbWlnaHQuCisJICovCisJU2htZW1Jbml0Q2FsbGJhY2sg YXR0YWNoX2ZuOworCXZvaWQJICAgKmF0dGFjaF9mbl9hcmc7CisKKwkvKgorCSAqIEV4dHJh IHNwYWNlIHRvIHJlc2VydmUgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQsIGJ1dCBp dCdzIG5vdCBwYXJ0CisJICogb2YgdGhlIHN0cnVjdCBpdHNlbGYuICBUaGlzIGlzIHVzZWQg Zm9yIHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZXMgdGhhdAorCSAqIGNhbiBncm93IGJleW9u ZCB0aGUgaW5pdGlhbCBzaXplIHdoZW4gbW9yZSBidWNrZXRzIGFyZSBhbGxvY2F0ZWQuCisJ ICovCisJc2l6ZV90CQlleHRyYV9zaXplOworCisJLyoKKwkgKiBXaGVuIHRoZSBzaG1lbSBh cmVhIGlzIGluaXRpYWxpemVkIG9yIGF0dGFjaGVkIHRvLCBwb2ludGVyIHRvIGl0IGlzCisJ ICogc3RvcmVkIGluICpwdHIuICBJdCB1c3VhbGx5IHBvaW50cyB0byBhIGdsb2JhbCB2YXJp YWJsZSwgdXNlZCB0byBhY2Nlc3MKKwkgKiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGxhdGVy LiAgKnB0ciBpcyBzZXQgYmVmb3JlIHRoZSBpbml0X2ZuIG9yCisJICogYXR0YWNoX2ZuIGNh bGxiYWNrIGlzIGNhbGxlZC4KKwkgKi8KKwl2b2lkCSAgICoqcHRyOworfSBTaG1lbVN0cnVj dERlc2M7CisKKy8qCisgKiBEZXNjcmlwdG9yIGZvciBuYW1lZCBzaGFyZWQgbWVtb3J5IGhh c2ggdGFibGUuCisgKgorICogU2ltaWxhciB0byBTaG1lbVN0cnVjdERlc2MsIGJ1dCBkZXNj cmliZXMgYSBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuICBFYWNoCisgKiBoYXNoIHRhYmxl IGlzIGJhY2tlZCBieSBhbiBhbGxvY2F0ZWQgYXJlYSwgZGVzY3JpYmVkIGJ5ICdiYXNlX2Rl c2MnLCBidXQgaWYKKyAqICdtYXhfc2l6ZScgaXMgZ3JlYXRlciB0aGFuICdpbml0X3NpemUn LCBpdCBjYW4gYWxzbyBncm93IGJleW9uZCB0aGUgaW5pdGlhbAorICogYWxsb2NhdGVkIGFy ZWEgYnkgYWxsb2NhdGluZyBtb3JlIGhhc2ggZW50cmllcyBmcm9tIHRoZSBnbG9iYWwgdW5y ZXNlcnZlZAorICogc3BhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNobWVtSGFzaERlc2MK K3sKKwkvKiBOYW1lIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEuIE11c3QgYmUgdW5pcXVl IGFjcm9zcyB0aGUgc3lzdGVtICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qCisJICog bWF4X3NpemUgaXMgdGhlIGVzdGltYXRlZCBtYXhpbXVtIG51bWJlciBvZiBoYXNodGFibGUg ZW50cmllcy4gIFRoaXMgaXMKKwkgKiBub3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2Vz cyBlZmZpY2llbmN5IHdpbGwgZGVncmFkZSBpZiBpdCBpcworCSAqIGV4Y2VlZGVkIHN1YnN0 YW50aWFsbHkgKHNpbmNlIGl0J3MgdXNlZCB0byBjb21wdXRlIGRpcmVjdG9yeSBzaXplIGFu ZAorCSAqIHRoZSBoYXNoIHRhYmxlIGJ1Y2tldHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgorCSAq LworCXNpemVfdAkJbWF4X3NpemU7CisKKwkvKgorCSAqIGluaXRfc2l6ZSBpcyB0aGUgbnVt YmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHByZWFsbG9jYXRlLiAgRm9yIGEgdGFibGUK KwkgKiB3aG9zZSBtYXhpbXVtIHNpemUgaXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUgZXF1 YWwgdG8gbWF4X3NpemU7IHRoYXQKKwkgKiBlbnN1cmVzIHRoYXQgbm8gcnVuLXRpbWUgb3V0 LW9mLXNoYXJlZC1tZW1vcnkgZmFpbHVyZXMgY2FuIG9jY3VyLgorCSAqLworCXNpemVfdAkJ aW5pdF9zaXplOworCisJLyogSGFzaCB0YWJsZSBvcHRpb25zIHBhc3NlZCB0byBoYXNoX2Ny ZWF0ZSgpICovCisJSEFTSENUTAkgICAqaW5mb1A7CisJaW50CQkJaGFzaF9mbGFnczsKKwor CS8qCisJICogV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hl ZCB0bywgcG9pbnRlciB0byBpdCBpcworCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxs eSBwb2ludHMgdG8gYSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCisJICogdGhl IHNoYXJlZCBoYXNoIHRhYmxlIGxhdGVyLgorCSAqLworCUhUQUIJICAgKipwdHI7CisKKwkv KgorCSAqIERlc2NyaXB0b3IgZm9yIHRoZSB1bmRlcmx5aW5nICJhcmVhIi4gIENhbGxlcnMg b2YgU2htZW1SZWdpc3Rlckhhc2goKQorCSAqIGRvIG5vdCBuZWVkIHRvIHRvdWNoIHRoaXMs IGl0IGlzIGZpbGxlZCBpbiBieSBTaG1lbVJlZ2lzdGVySGFzaCgpIGJhc2VkCisJICogb24g dGhlIGhhc2ggdGFibGUgcGFyYW1ldGVycy4KKwkgKi8KKwlTaG1lbVN0cnVjdERlc2MJYmFz ZV9kZXNjOworfSBTaG1lbUhhc2hEZXNjOwogCiAvKiBzaG1lbS5jICovCiBleHRlcm4gUEdE TExJTVBPUlQgc2xvY2tfdCAqU2htZW1Mb2NrOwogdHlwZWRlZiBzdHJ1Y3QgUEdTaG1lbUhl YWRlciBQR1NobWVtSGVhZGVyOyAvKiBhdm9pZCBpbmNsdWRpbmcKIAkJCQkJCQkJCQkJICog c3RvcmFnZS9wZ19zaG1lbS5oIGhlcmUgKi8KK2V4dGVybiB2b2lkIFJlc2V0U2htZW1BbGxv Y2F0b3Iodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhl YWRlciAqc2VnaGRyKTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lkIEF0dGFj aFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcik7CisjZW5kaWYKIGV4dGVy biB2b2lkICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxv Y05vRXJyb3IoU2l6ZSBzaXplKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29u c3Qgdm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCBJbml0U2htZW1JbmRleCh2b2lkKTsKKwor ZXh0ZXJuIGJvb2wgU2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNoRGVzYyAqZGVzYywgSEFT SENUTCAqaW5mb1AsIGludCBoYXNoX2ZsYWdzKTsKK2V4dGVybiBib29sCVNobWVtUmVnaXN0 ZXJTdHJ1Y3QoU2htZW1TdHJ1Y3REZXNjICpkZXNjKTsKKworLyogbGVnYWN5IHNobWVtIGFs bG9jYXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gSFRBQiAqU2htZW1Jbml0SGFzaChjb25z dCBjaGFyICpuYW1lLCBpbnQ2NCBpbml0X3NpemUsIGludDY0IG1heF9zaXplLAogCQkJCQkJ ICAgSEFTSENUTCAqaW5mb1AsIGludCBoYXNoX2ZsYWdzKTsKIGV4dGVybiB2b2lkICpTaG1l bUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0 cik7CisKK2V4dGVybiBzaXplX3QgU2htZW1SZWdpc3RlcmVkU2l6ZSh2b2lkKTsKK2V4dGVy biB2b2lkIFNobWVtSW5pdFJlZ2lzdGVyZWQodm9pZCk7CisjaWZkZWYgRVhFQ19CQUNLRU5E CitleHRlcm4gdm9pZCBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQodm9pZCk7CisjZW5kaWYKKwog ZXh0ZXJuIFNpemUgYWRkX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMik7CiBleHRlcm4gU2l6ZSBt dWxfc2l6ZShTaXplIHMxLCBTaXplIHMyKTsKIApAQCAtNDUsMTkgKzE2NCw0IEBAIGV4dGVy biBQR0RMTElNUE9SVCBTaXplIHBnX2dldF9zaG1lbV9wYWdlc2l6ZSh2b2lkKTsKIC8qIGlw Y2kuYyAqLwogZXh0ZXJuIHZvaWQgUmVxdWVzdEFkZGluU2htZW1TcGFjZShTaXplIHNpemUp OwogCi0vKiBzaXplIGNvbnN0YW50cyBmb3IgdGhlIHNobWVtIGluZGV4IHRhYmxlICovCi0g LyogbWF4IHNpemUgb2YgZGF0YSBzdHJ1Y3R1cmUgc3RyaW5nIG5hbWUgKi8KLSNkZWZpbmUg U0hNRU1fSU5ERVhfS0VZU0laRQkJICg0OCkKLSAvKiBlc3RpbWF0ZWQgc2l6ZSBvZiB0aGUg c2htZW0gaW5kZXggdGFibGUgKG5vdCBhIGhhcmQgbGltaXQpICovCi0jZGVmaW5lIFNITUVN X0lOREVYX1NJWkUJCSAoNjQpCi0KLS8qIHRoaXMgaXMgYSBoYXNoIGJ1Y2tldCBpbiB0aGUg c2htZW0gaW5kZXggdGFibGUgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0JY2hhcgkJa2V5W1NI TUVNX0lOREVYX0tFWVNJWkVdOwkvKiBzdHJpbmcgbmFtZSAqLwotCXZvaWQJICAgKmxvY2F0 aW9uOwkJLyogbG9jYXRpb24gaW4gc2hhcmVkIG1lbSAqLwotCVNpemUJCXNpemU7CQkJLyog IyBieXRlcyByZXF1ZXN0ZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgKi8KLQlTaXplCQlhbGxvY2F0 ZWRfc2l6ZTsgLyogIyBieXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKi8KLX0gU2htZW1JbmRl eEVudDsKLQogI2VuZGlmCQkJCQkJCS8qIFNITUVNX0ggKi8KLS0gCjIuNDcuMwoK --------------0GENrK1iCkv2OWWU207VI4qz Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-Convert-pg_stat_statements-to-use-the-new-interfa.patch" Content-Disposition: attachment; filename*0="v3-0002-Convert-pg_stat_statements-to-use-the-new-interfa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjZjc5ZWIyOWUzYTU2NTQ5ZDc4ODAyNjBlNzZjMmQxMjk1Y2NhZGQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMjQgRmViIDIwMjYgMTU6NDU6NTEgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDIvM10gQ29udmVydCBwZ19zdGF0X3N0YXRlbWVudHMgdG8g dXNlIHRoZSBuZXcgaW50ZXJmYWNlCgotLS0KIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMgICB8IDE2MyArKysrKysrKy0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyBiL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4IDRh NDI3NTMzYmQ4Li4wMTczODdhZTk1NSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI0OCw3ICsyNDgsNyBAQCB0eXBl ZGVmIHN0cnVjdCBwZ3NzRW50cnkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgcGdzc1NoYXJlZFN0 YXRlCiB7Ci0JTFdMb2NrCSAgICpsb2NrOwkJCS8qIHByb3RlY3RzIGhhc2h0YWJsZSBzZWFy Y2gvbW9kaWZpY2F0aW9uICovCisJTFdMb2NrUGFkZGVkIGxvY2s7CQkJLyogcHJvdGVjdHMg aGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KIAlkb3VibGUJCWN1cl9tZWRpYW5f dXNhZ2U7CS8qIGN1cnJlbnQgbWVkaWFuIHVzYWdlIGluIGhhc2h0YWJsZSAqLwogCVNpemUJ CW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50IG1lYW4gZW50cnkgdGV4dCBsZW5ndGggKi8K IAlzbG9ja190CQltdXRleDsJCQkvKiBwcm90ZWN0cyBmb2xsb3dpbmcgZmllbGRzIG9ubHk6 ICovCkBAIC0yNTgsMTMgKzI1OCwzNSBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzU2hhcmVkU3Rh dGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9iYWwgc3RhdGlzdGljcyBmb3Ig cGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExpbmtzIHRvIHNoYXJlZCBtZW1v cnkgc3RhdGUgKi8KK3N0YXRpYyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3M7CitzdGF0aWMgSFRB QiAqcGdzc19oYXNoOworCitzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQodm9pZCAqYXJn KTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hhcmVkU3RhdGVTaG1lbURlc2Mg PQoreworCS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyIsCisJCS5zaXplID0gc2l6ZW9m KHBnc3NTaGFyZWRTdGF0ZSksCisJCS5pbml0X2ZuID0gcGdzc19zaG1lbV9pbml0LAorCQku cHRyID0gKHZvaWQgKikgJnBnc3MsCit9OworCitzdGF0aWMgU2htZW1IYXNoRGVzYyBwZ3Nz U2hhcmVkSGFzaERlc2MgPQoreworCS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyBoYXNo IiwKKwkJLmluaXRfc2l6ZSA9IDAsCQkJLyogc2V0IGZyb20gJ3Bnc3NfbWF4JyAqLworCQku bWF4X3NpemUgPSAwLAkJCS8qIHNldCBmcm9tICdwZ3NzX21heCcgKi8KKwkJLnB0ciA9ICZw Z3NzX2hhc2gsCit9OworCisKIC8qLS0tLSBMb2NhbCB2YXJpYWJsZXMgLS0tLSovCiAKIC8q IEN1cnJlbnQgbmVzdGluZyBkZXB0aCBvZiBwbGFubmVyL0V4ZWN1dG9yUnVuL1Byb2Nlc3NV dGlsaXR5IGNhbGxzICovCiBzdGF0aWMgaW50CW5lc3RpbmdfbGV2ZWwgPSAwOwogCiAvKiBT YXZlZCBob29rIHZhbHVlcyAqLwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHBy ZXZfc2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKIHN0YXRpYyBzaG1lbV9zdGFydHVwX2hv b2tfdHlwZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CiBzdGF0aWMgcG9zdF9w YXJzZV9hbmFseXplX2hvb2tfdHlwZSBwcmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0g TlVMTDsKIHN0YXRpYyBwbGFubmVyX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfaG9vayA9IE5V TEw7CkBAIC0yNzQsMTAgKzI5Niw2IEBAIHN0YXRpYyBFeGVjdXRvckZpbmlzaF9ob29rX3R5 cGUgcHJldl9FeGVjdXRvckZpbmlzaCA9IE5VTEw7CiBzdGF0aWMgRXhlY3V0b3JFbmRfaG9v a190eXBlIHByZXZfRXhlY3V0b3JFbmQgPSBOVUxMOwogc3RhdGljIFByb2Nlc3NVdGlsaXR5 X2hvb2tfdHlwZSBwcmV2X1Byb2Nlc3NVdGlsaXR5ID0gTlVMTDsKIAotLyogTGlua3MgdG8g c2hhcmVkIG1lbW9yeSBzdGF0ZSAqLwotc3RhdGljIHBnc3NTaGFyZWRTdGF0ZSAqcGdzcyA9 IE5VTEw7Ci1zdGF0aWMgSFRBQiAqcGdzc19oYXNoID0gTlVMTDsKLQogLyotLS0tIEdVQyB2 YXJpYWJsZXMgLS0tLSovCiAKIHR5cGVkZWYgZW51bQpAQCAtMzMwLDcgKzM0OCw2IEBAIFBH X0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTMpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShw Z19zdGF0X3N0YXRlbWVudHNfaW5mbyk7CiAKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fcmVx dWVzdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKTsKIHN0 YXRpYyB2b2lkIHBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZyk7CiBz dGF0aWMgdm9pZCBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUs IFF1ZXJ5ICpxdWVyeSwKQEAgLTM2NSw3ICszODIsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0 b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdf c3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJ CQkJCQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJzaW9uLAogCQkJCQkJCQkJCWJvb2wgc2hvd3Rl eHQpOwotc3RhdGljIFNpemUgcGdzc19tZW1zaXplKHZvaWQpOwogc3RhdGljIHBnc3NFbnRy eSAqZW50cnlfYWxsb2MocGdzc0hhc2hLZXkgKmtleSwgU2l6ZSBxdWVyeV9vZmZzZXQsIGlu dCBxdWVyeV9sZW4sCiAJCQkJCQkJICBpbnQgZW5jb2RpbmcsIGJvb2wgc3RpY2t5KTsKIHN0 YXRpYyB2b2lkIGVudHJ5X2RlYWxsb2Modm9pZCk7CkBAIC0zOTAsNiArNDA2LDggQEAgc3Rh dGljIGludAljb21wX2xvY2F0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwog dm9pZAogX1BHX2luaXQodm9pZCkKIHsKKwlIQVNIQ1RMCQlpbmZvOworCiAJLyoKIAkgKiBJ biBvcmRlciB0byBjcmVhdGUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYSwgd2UgaGF2ZSB0byBi ZSBsb2FkZWQgdmlhCiAJICogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLiAgSWYgbm90LCBm YWxsIG91dCB3aXRob3V0IGhvb2tpbmcgaW50byBhbnkgb2YKQEAgLTQ3MCwxMSArNDg4LDIy IEBAIF9QR19pbml0KHZvaWQpCiAKIAlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3N0YXRf c3RhdGVtZW50cyIpOwogCisJLyoKKwkgKiBSZWdpc3RlciBvdXIgc2hhcmVkIG1lbW9yeSBu ZWVkcywgaW5jbHVkaW5nIGhhc2ggdGFibGUKKwkgKi8KKwlTaG1lbVJlZ2lzdGVyU3RydWN0 KCZwZ3NzU2hhcmVkU3RhdGVTaG1lbURlc2MpOworCisJaW5mby5rZXlzaXplID0gc2l6ZW9m KHBnc3NIYXNoS2V5KTsKKwlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihwZ3NzRW50cnkpOwor CXBnc3NTaGFyZWRIYXNoRGVzYy5pbml0X3NpemUgPSBwZ3NzX21heDsKKwlwZ3NzU2hhcmVk SGFzaERlc2MubWF4X3NpemUgPSBwZ3NzX21heDsKKwlTaG1lbVJlZ2lzdGVySGFzaCgmcGdz c1NoYXJlZEhhc2hEZXNjLAorCQkJCQkgICZpbmZvLAorCQkJCQkgIEhBU0hfRUxFTSB8IEhB U0hfQkxPQlMpOworCiAJLyoKIAkgKiBJbnN0YWxsIGhvb2tzLgogCSAqLwotCXByZXZfc2ht ZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOwotCXNobWVtX3JlcXVlc3Rf aG9vayA9IHBnc3Nfc2htZW1fcmVxdWVzdDsKIAlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9 IHNobWVtX3N0YXJ0dXBfaG9vazsKIAlzaG1lbV9zdGFydHVwX2hvb2sgPSBwZ3NzX3NobWVt X3N0YXJ0dXA7CiAJcHJldl9wb3N0X3BhcnNlX2FuYWx5emVfaG9vayA9IHBvc3RfcGFyc2Vf YW5hbHl6ZV9ob29rOwpAQCAtNDkzLDMxICs1MjIsMzEgQEAgX1BHX2luaXQodm9pZCkKIAlQ cm9jZXNzVXRpbGl0eV9ob29rID0gcGdzc19Qcm9jZXNzVXRpbGl0eTsKIH0KIAotLyoKLSAq IHNobWVtX3JlcXVlc3QgaG9vazogcmVxdWVzdCBhZGRpdGlvbmFsIHNoYXJlZCByZXNvdXJj ZXMuICBXZSdsbCBhbGxvY2F0ZSBvcgotICogYXR0YWNoIHRvIHRoZSBzaGFyZWQgcmVzb3Vy Y2VzIGluIHBnc3Nfc2htZW1fc3RhcnR1cCgpLgotICovCiBzdGF0aWMgdm9pZAotcGdzc19z aG1lbV9yZXF1ZXN0KHZvaWQpCitwZ3NzX3NobWVtX2luaXQodm9pZCAqYXJnKQogewotCWlm IChwcmV2X3NobWVtX3JlcXVlc3RfaG9vaykKLQkJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2so KTsKKwlpbnQJCQl0cmFuY2hlX2lkOwogCi0JUmVxdWVzdEFkZGluU2htZW1TcGFjZShwZ3Nz X21lbXNpemUoKSk7Ci0JUmVxdWVzdE5hbWVkTFdMb2NrVHJhbmNoZSgicGdfc3RhdF9zdGF0 ZW1lbnRzIiwgMSk7CisJdHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rh dF9zdGF0ZW1lbnRzIik7CisJTFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+bG9jay5sb2NrLCB0 cmFuY2hlX2lkKTsKKwlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5f SU5JVDsKKwlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7CisJ U3BpbkxvY2tJbml0KCZwZ3NzLT5tdXRleCk7CisJcGdzcy0+ZXh0ZW50ID0gMDsKKwlwZ3Nz LT5uX3dyaXRlcnMgPSAwOworCXBnc3MtPmdjX2NvdW50ID0gMDsKKwlwZ3NzLT5zdGF0cy5k ZWFsbG9jID0gMDsKKwlwZ3NzLT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1l c3RhbXAoKTsKIH0KIAogLyoKLSAqIHNobWVtX3N0YXJ0dXAgaG9vazogYWxsb2NhdGUgb3Ig YXR0YWNoIHRvIHNoYXJlZCBtZW1vcnksCi0gKiB0aGVuIGxvYWQgYW55IHByZS1leGlzdGlu ZyBzdGF0aXN0aWNzIGZyb20gZmlsZS4KLSAqIEFsc28gY3JlYXRlIGFuZCBsb2FkIHRoZSBx dWVyeS10ZXh0cyBmaWxlLCB3aGljaCBpcyBleHBlY3RlZCB0byBleGlzdAotICogKGV2ZW4g aWYgZW1wdHkpIHdoaWxlIHRoZSBtb2R1bGUgaXMgZW5hYmxlZC4KKyAqIHNobWVtX3N0YXJ0 dXAgaG9vazogTG9hZCBhbnkgcHJlLWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlIGF0 CisgKiBwb3N0bWFzdGVyIHN0YXJ0dXAuICBBbHNvIGNyZWF0ZSBhbmQgbG9hZCB0aGUgcXVl cnktdGV4dHMgZmlsZSwgd2hpY2ggaXMKKyAqIGV4cGVjdGVkIHRvIGV4aXN0IChldmVuIGlm IGVtcHR5KSB3aGlsZSB0aGUgbW9kdWxlIGlzIGVuYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lk CiBwZ3NzX3NobWVtX3N0YXJ0dXAodm9pZCkKIHsKLQlib29sCQlmb3VuZDsKLQlIQVNIQ1RM CQlpbmZvOwogCUZJTEUJICAgKmZpbGUgPSBOVUxMOwogCUZJTEUJICAgKnFmaWxlID0gTlVM TDsKIAl1aW50MzIJCWhlYWRlcjsKQEAgLTUzMCw1NCArNTU5LDE0IEBAIHBnc3Nfc2htZW1f c3RhcnR1cCh2b2lkKQogCWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKIAkJcHJldl9z aG1lbV9zdGFydHVwX2hvb2soKTsKIAotCS8qIHJlc2V0IGluIGNhc2UgdGhpcyBpcyBhIHJl c3RhcnQgd2l0aGluIHRoZSBwb3N0bWFzdGVyICovCi0JcGdzcyA9IE5VTEw7Ci0JcGdzc19o YXNoID0gTlVMTDsKKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsJCQkJCS8q IG5vdGhpbmcgdG8gZG8gaW4gYmFja2VuZHMgKi8KIAogCS8qCi0JICogQ3JlYXRlIG9yIGF0 dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSwgaW5jbHVkaW5nIGhhc2ggdGFibGUK KwkgKiBTZXQgdXAgYSBzaG1lbSBleGl0IGhvb2sgdG8gZHVtcCB0aGUgc3RhdGlzdGljcyB0 byBkaXNrIG9uIHBvc3RtYXN0ZXIKKwkgKiAob3Igc3RhbmRhbG9uZSBiYWNrZW5kKSBleGl0 LgogCSAqLwotCUxXTG9ja0FjcXVpcmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJ VkUpOwotCi0JcGdzcyA9IFNobWVtSW5pdFN0cnVjdCgicGdfc3RhdF9zdGF0ZW1lbnRzIiwK LQkJCQkJCSAgIHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAotCQkJCQkJICAgJmZvdW5kKTsK LQotCWlmICghZm91bmQpCi0JewotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2ggLi4uICovCi0J CXBnc3MtPmxvY2sgPSAmKEdldE5hbWVkTFdMb2NrVHJhbmNoZSgicGdfc3RhdF9zdGF0ZW1l bnRzIikpLT5sb2NrOwotCQlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJ QU5fSU5JVDsKLQkJcGdzcy0+bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVEX0xFTkdUSF9JTklU OwotCQlTcGluTG9ja0luaXQoJnBnc3MtPm11dGV4KTsKLQkJcGdzcy0+ZXh0ZW50ID0gMDsK LQkJcGdzcy0+bl93cml0ZXJzID0gMDsKLQkJcGdzcy0+Z2NfY291bnQgPSAwOwotCQlwZ3Nz LT5zdGF0cy5kZWFsbG9jID0gMDsKLQkJcGdzcy0+c3RhdHMuc3RhdHNfcmVzZXQgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7Ci0JfQotCi0JaW5mby5rZXlzaXplID0gc2l6ZW9mKHBnc3NI YXNoS2V5KTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihwZ3NzRW50cnkpOwotCXBnc3Nf aGFzaCA9IFNobWVtSW5pdEhhc2goInBnX3N0YXRfc3RhdGVtZW50cyBoYXNoIiwKLQkJCQkJ CQkgIHBnc3NfbWF4LCBwZ3NzX21heCwKLQkJCQkJCQkgICZpbmZvLAotCQkJCQkJCSAgSEFT SF9FTEVNIHwgSEFTSF9CTE9CUyk7Ci0KLQlMV0xvY2tSZWxlYXNlKEFkZGluU2htZW1Jbml0 TG9jayk7Ci0KLQkvKgotCSAqIElmIHdlJ3JlIGluIHRoZSBwb3N0bWFzdGVyIChvciBhIHN0 YW5kYWxvbmUgYmFja2VuZC4uLiksIHNldCB1cCBhIHNobWVtCi0JICogZXhpdCBob29rIHRv IGR1bXAgdGhlIHN0YXRpc3RpY3MgdG8gZGlzay4KLQkgKi8KLQlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQotCQlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChEYXR1bSkg MCk7Ci0KLQkvKgotCSAqIERvbmUgaWYgc29tZSBvdGhlciBwcm9jZXNzIGFscmVhZHkgY29t cGxldGVkIG91ciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQlpZiAoZm91bmQpCi0JCXJldHVy bjsKKwlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChEYXR1bSkgMCk7CiAK IAkvKgogCSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGxvY2tzIGhlcmUsIGJlY2F1 c2UgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyCkBAIC0xMzM3LDcgKzEzMjYsNyBAQCBwZ3Nz X3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogCWtleS50b3BsZXZl bCA9IChuZXN0aW5nX2xldmVsID09IDApOwogCiAJLyogTG9va3VwIHRoZSBoYXNoIHRhYmxl IGVudHJ5IHdpdGggc2hhcmVkIGxvY2suICovCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2Nr LCBMV19TSEFSRUQpOworCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hB UkVEKTsKIAogCWVudHJ5ID0gKHBnc3NFbnRyeSAqKSBoYXNoX3NlYXJjaChwZ3NzX2hhc2gs ICZrZXksIEhBU0hfRklORCwgTlVMTCk7CiAKQEAgLTEzNTgsMTEgKzEzNDcsMTEgQEAgcGdz c19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAkJICovCiAJCWlm IChqc3RhdGUpCiAJCXsKLQkJCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CisJCQlMV0xv Y2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwogCQkJbm9ybV9xdWVyeSA9IGdlbmVyYXRl X25vcm1hbGl6ZWRfcXVlcnkoanN0YXRlLCBxdWVyeSwKIAkJCQkJCQkJCQkJCSAgIHF1ZXJ5 X2xvY2F0aW9uLAogCQkJCQkJCQkJCQkJICAgJnF1ZXJ5X2xlbik7Ci0JCQlMV0xvY2tBY3F1 aXJlKHBnc3MtPmxvY2ssIExXX1NIQVJFRCk7CisJCQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5s b2NrLmxvY2ssIExXX1NIQVJFRCk7CiAJCX0KIAogCQkvKiBBcHBlbmQgbmV3IHF1ZXJ5IHRl eHQgdG8gZmlsZSB3aXRoIG9ubHkgc2hhcmVkIGxvY2sgaGVsZCAqLwpAQCAtMTM3Nyw4ICsx MzY2LDggQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwK IAkJZG9fZ2MgPSBuZWVkX2djX3F0ZXh0cygpOwogCiAJCS8qIE5lZWQgZXhjbHVzaXZlIGxv Y2sgdG8gbWFrZSBhIG5ldyBoYXNodGFibGUgZW50cnkgLSBwcm9tb3RlICovCi0JCUxXTG9j a1JlbGVhc2UocGdzcy0+bG9jayk7Ci0JCUxXTG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdf RVhDTFVTSVZFKTsKKwkJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKKwkJTFdM b2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19FWENMVVNJVkUpOwogCiAJCS8qCiAJ CSAqIEEgZ2FyYmFnZSBjb2xsZWN0aW9uIG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdl cmVuJ3QgaG9sZGluZyB0aGUKQEAgLTE1MTcsNyArMTUwNiw3IEBAIHBnc3Nfc3RvcmUoY29u c3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJfQogCiBkb25lOgotCUxXTG9ja1Jl bGVhc2UocGdzcy0+bG9jayk7CisJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsK IAogCS8qIFdlIHBvc3Rwb25lIHRoaXMgY2xlYW4tdXAgdW50aWwgd2UncmUgb3V0IG9mIHRo ZSBsb2NrICovCiAJaWYgKG5vcm1fcXVlcnkpCkBAIC0xODA2LDcgKzE3OTUsNyBAQCBwZ19z dGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJICog d2UgbmVlZCB0byBwYXJ0aXRpb24gdGhlIGhhc2ggdGFibGUgdG8gbGltaXQgdGhlIHRpbWUg c3BlbnQgaG9sZGluZyBhbnkKIAkgKiBvbmUgbG9jay4KIAkgKi8KLQlMV0xvY2tBY3F1aXJl KHBnc3MtPmxvY2ssIExXX1NIQVJFRCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5s b2NrLCBMV19TSEFSRUQpOwogCiAJaWYgKHNob3d0ZXh0KQogCXsKQEAgLTIwNDMsNyArMjAz Miw3IEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAJfQogCi0JTFdMb2NrUmVsZWFzZShwZ3Nz LT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwogCiAJZnJlZShx YnVmZmVyKTsKIH0KQEAgLTIwODIsMjAgKzIwNzEsNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNf aW5mbyhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXRE YXR1bShoZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscykpKTsKIH0KIAot LyoKLSAqIEVzdGltYXRlIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkLgotICovCi1zdGF0 aWMgU2l6ZQotcGdzc19tZW1zaXplKHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZTsKLQotCXNpemUg PSBNQVhBTElHTihzaXplb2YocGdzc1NoYXJlZFN0YXRlKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShwZ3NzX21heCwgc2l6ZW9mKHBnc3NFbnRyeSkp KTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogQWxsb2NhdGUgYSBuZXcgaGFzaHRh YmxlIGVudHJ5LgogICogY2FsbGVyIG11c3QgaG9sZCBhbiBleGNsdXNpdmUgbG9jayBvbiBw Z3NzLT5sb2NrCkBAIC0yNzI1LDcgKzI3MDAsNyBAQCBlbnRyeV9yZXNldChPaWQgdXNlcmlk LCBPaWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfb25seSkKIAkJCQkoZXJy Y29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkg ZXJybXNnKCJwZ19zdGF0X3N0YXRlbWVudHMgbXVzdCBiZSBsb2FkZWQgdmlhIFwic2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzXCIiKSkpOwogCi0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdf RVhDTFVTSVZFKTsKIAludW1fZW50cmllcyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3Nf aGFzaCk7CiAKIAlzdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKQEAgLTI4 MTksNyArMjc5NCw3IEBAIGRvbmU6CiAJcmVjb3JkX2djX3F0ZXh0cygpOwogCiByZWxlYXNl X2xvY2s6Ci0JTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZw Z3NzLT5sb2NrLmxvY2spOwogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotLSAKMi40Ny4z Cgo= --------------0GENrK1iCkv2OWWU207VI4qz Content-Type: text/x-patch; charset=UTF-8; name="v3-0003-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="v3-0003-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSBkZjc1MDMwM2ZlNDQzNDM2MjE5NTZmYzZlNDE0MjQwNjkwYmZjZmNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMTM6MDA6MzQgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDMvM10gVXNlIHRoZSBuZXcgbWVjaGFuaXNtIGluIGEgZmV3 IGNvcmUgc3Vic3lzdGVtcwoKSSBjaG9zZSB0aGVzZSBzdWJzeXN0ZW1zIHNwZWNpZmljYWxs eSBiZWNhdXNlIHRoZXkgaGF2ZSBzb21lCmNvbXBsaWNhdGluZyBwcm9wZXJ0aWVzLCBtYWtp bmcgdGhlbSBzbGlnaHRseSBoYXJkZXIgdG8gY29udmVydCB0aGFuCm1vc3Q6CgotIFRoZSBp bml0aWFsaXphdGlvbiBjYWxsYmFja3Mgb2Ygc29tZSBvZiB0aGVzZSBzdWJzeXN0ZW1zIGhh dmUKICBkZXBlbmRlbmNpZXMsIGkuZS4gdGhleSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGlu IHRoZSByaWdodCBvcmRlci4KCi0gVGhlIFByb2dHbG9iYWwgcG9pbnRlciBzdGlsbCBuZWVk cyB0byBiZSBpbmhlcml0ZWQgYnkgdGhlCiAgQmFja2VuZFBhcmFtZXRlcnMgbWVjaGFuaXNt IG9uIEVYRUNfQkFDS0VORCBidWlsZHMsIGJlY2F1c2UKICBQcm9jR2xvYmFsIGlzIHJlcXVp cmVkIGJ5IEluaXRQcm9jZXNzKCkgdG8gZ2V0IGEgUEdQUk9DIGVudHJ5LCBhbmQKICB0aGUg UEdQUk9DIGVudHJ5IGlzIHJlcXVpcmVkIHRvIHVzZSBMV0xvY2tzLCBhbmQgdXN1YWxseSBh dHRhY2hpbmcKICB0byBzaGFyZWQgbWVtb3J5IGFyZWFzIHJlcXVpcmVzIHRoZSB1c2Ugb2Yg TFdMb2Nrcy4KCi0gU2ltaWxhcmx5LCBQcm9jU2lnbmFsIHBvaW50ZXIgc3RpbGwgbmVlZHMg dG8gYmUgaGFuZGxlZCBieQogIEJhY2tlbmRQYXJhbWV0ZXJzLCBiZWNhdXNlIHF1ZXJ5IGNh bmNlbGxhdGlvbiBjb25uZWN0aW9ucyBhY2Nlc3MgaXQKICB3aXRob3V0IGNhbGxpbmcgSW5p dFByb2Nlc3MKCkknbSBiZWxpZXZlIGNvbnZlcnRpbmcgYWxsIHRoZSByZXN0IG9mIHRoZSBz dWJzeXN0ZW1zIGFmdGVyIHRoaXMgd2lsbApiZSBwcmV0dHkgbWVjaGFuaWMuCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgICAgfCAgMzMgKysrLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jICAgICAgICAgIHwgIDQ1ICsrKystLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jIHwgIDM0ICsrKy0tLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgfCAgMzcgKysrLS0tCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jICAgICB8ICA1NCArKysrKy0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jICAgIHwgMTI2ICsrKysrKysrKy0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgIHwgIDYzICsr KysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyAgICB8ICAzNyArKyst LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAgIHwgMTYyICsrKysr KysrKysrKystLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAg ICAgICAgIHwgIDEwICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oICAgICAgICAgfCAg IDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAgICAgICAgIHwgICAyICst CiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAgIHwgICAzICstCiAxNyBmaWxlcyBjaGFu Z2VkLCAzMTIgaW5zZXJ0aW9ucygrKSwgMzEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdmFyc3VwLmMKaW5kZXggM2U5NWQ0Y2ZkMTYuLjNkZmRhODc1ZTgwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwpAQCAtMzAsMzUgKzMwLDMyIEBA CiAvKiBOdW1iZXIgb2YgT0lEcyB0byBwcmVmZXRjaCAocHJlYWxsb2NhdGUpIHBlciBYTE9H IHdyaXRlICovCiAjZGVmaW5lIFZBUl9PSURfUFJFRkVUQ0gJCTgxOTIKIAorc3RhdGljIHZv aWQgVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKIC8qIHBvaW50ZXIgdG8gdmFyaWFi bGVzIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5ICovCiBUcmFuc2FtVmFyaWFibGVzRGF0YSAq VHJhbnNhbVZhcmlhYmxlcyA9IE5VTEw7CiAKK1NobWVtU3RydWN0RGVzYyBUcmFuc2FtVmFy aWFibGVzU2htZW1EZXNjID0geworCS5uYW1lID0gIlRyYW5zYW1WYXJpYWJsZXMiLAorCS5z aXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKKwkuaW5pdF9mbiA9IFZhcnN1 cFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZUcmFuc2FtVmFyaWFibGVzLAorfTsK IAogLyoKICAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFRyYW5zYW1W YXJpYWJsZXMuCiAgKi8KLVNpemUKLVZhcnN1cFNobWVtU2l6ZSh2b2lkKQordm9pZAorVmFy c3VwU2htZW1SZWdpc3Rlcih2b2lkKQogewotCXJldHVybiBzaXplb2YoVHJhbnNhbVZhcmlh Ymxlc0RhdGEpOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlRyYW5zYW1WYXJpYWJsZXNTaG1l bURlc2MpOwogfQogCi12b2lkCi1WYXJzdXBTaG1lbUluaXQodm9pZCkKLXsKLQlib29sCQlm b3VuZDsKK3N0YXRpYyB2b2lkCitWYXJzdXBTaG1lbUluaXQodm9pZCAqYXJnKQogCi0JLyog SW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAqLwotCVRyYW5zYW1WYXJpYWJs ZXMgPSBTaG1lbUluaXRTdHJ1Y3QoIlRyYW5zYW1WYXJpYWJsZXMiLAotCQkJCQkJCQkJICAg c2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKLQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0J aWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQltZW1z ZXQoVHJhbnNhbVZhcmlhYmxlcywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSk7 Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKK3sKKwltZW1zZXQoVHJhbnNhbVZhcmlh YmxlcywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2RzbS5jCmluZGV4IDZhNWIxNjM5MmY3Li43MzY0NGVjM2JiYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtLmMKQEAgLTEwOCw4ICsxMDgsMTcgQEAgc3RhdGljIGlubGluZSBi b29sIGlzX21haW5fcmVnaW9uX2RzbV9oYW5kbGUoZHNtX2hhbmRsZSBoYW5kbGUpOwogc3Rh dGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZhbHNlOwogCiAvKiBQcmVhbGxvY2F0ZWQgRFNN IHNwYWNlIGluIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiAqLworc3RhdGljIHZv aWQgZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICopOworCiBzdGF0aWMgdm9pZCAqZHNtX21h aW5fc3BhY2VfYmVnaW4gPSBOVUxMOwogCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIGRzbV9t YWluX3NwYWNlX3NobWVtX2Rlc2MgPSB7CisJLm5hbWUgPSAiUHJlYWxsb2NhdGVkIERTTSIs CisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLmluaXRfZm4gPSBkc21fbWFpbl9zcGFj ZV9pbml0LAorCS5wdHIgPSAmZHNtX21haW5fc3BhY2VfYmVnaW4sCit9OworCiAvKgogICog TGlzdCBvZiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgdXNlZCBieSB0aGlzIGJh Y2tlbmQuCiAgKgpAQCAtNDc5LDI3ICs0ODgsMjkgQEAgdm9pZAogZHNtX3NobWVtX2luaXQo dm9pZCkKIHsKIAlzaXplX3QJCXNpemUgPSBkc21fZXN0aW1hdGVfc2l6ZSgpOwotCWJvb2wJ CWZvdW5kOwogCiAJaWYgKHNpemUgPT0gMCkKIAkJcmV0dXJuOwogCi0JZHNtX21haW5fc3Bh Y2VfYmVnaW4gPSBTaG1lbUluaXRTdHJ1Y3QoIlByZWFsbG9jYXRlZCBEU00iLCBzaXplLCAm Zm91bmQpOwotCWlmICghZm91bmQpCi0JewotCQlGcmVlUGFnZU1hbmFnZXIgKmZwbSA9IChG cmVlUGFnZU1hbmFnZXIgKikgZHNtX21haW5fc3BhY2VfYmVnaW47Ci0JCXNpemVfdAkJZmly c3RfcGFnZSA9IDA7Ci0JCXNpemVfdAkJcGFnZXM7Ci0KLQkJLyogUmVzZXJ2ZSBzcGFjZSBm b3IgdGhlIEZyZWVQYWdlTWFuYWdlci4gKi8KLQkJd2hpbGUgKGZpcnN0X3BhZ2UgKiBGUE1f UEFHRV9TSVpFIDwgc2l6ZW9mKEZyZWVQYWdlTWFuYWdlcikpCi0JCQkrK2ZpcnN0X3BhZ2U7 Ci0KLQkJLyogSW5pdGlhbGl6ZSBpdCBhbmQgZ2l2ZSBpdCBhbGwgdGhlIHJlc3Qgb2YgdGhl IHNwYWNlLiAqLwotCQlGcmVlUGFnZU1hbmFnZXJJbml0aWFsaXplKGZwbSwgZHNtX21haW5f c3BhY2VfYmVnaW4pOwotCQlwYWdlcyA9IChzaXplIC8gRlBNX1BBR0VfU0laRSkgLSBmaXJz dF9wYWdlOwotCQlGcmVlUGFnZU1hbmFnZXJQdXQoZnBtLCBmaXJzdF9wYWdlLCBwYWdlcyk7 Ci0JfQorCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJmRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2Mp OworfQorCitzdGF0aWMgdm9pZAorZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICphcmcpCit7 CisJc2l6ZV90CQlzaXplID0gZHNtX21haW5fc3BhY2Vfc2htZW1fZGVzYy5zaXplOworCUZy ZWVQYWdlTWFuYWdlciAqZnBtID0gKEZyZWVQYWdlTWFuYWdlciAqKSBkc21fbWFpbl9zcGFj ZV9iZWdpbjsKKwlzaXplX3QJCWZpcnN0X3BhZ2UgPSAwOworCXNpemVfdAkJcGFnZXM7CisK KwkvKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgRnJlZVBhZ2VNYW5hZ2VyLiAqLworCXdoaWxl IChmaXJzdF9wYWdlICogRlBNX1BBR0VfU0laRSA8IHNpemVvZihGcmVlUGFnZU1hbmFnZXIp KQorCQkrK2ZpcnN0X3BhZ2U7CisKKwkvKiBJbml0aWFsaXplIGl0IGFuZCBnaXZlIGl0IGFs bCB0aGUgcmVzdCBvZiB0aGUgc3BhY2UuICovCisJRnJlZVBhZ2VNYW5hZ2VySW5pdGlhbGl6 ZShmcG0sIGRzbV9tYWluX3NwYWNlX2JlZ2luKTsKKwlwYWdlcyA9IChzaXplIC8gRlBNX1BB R0VfU0laRSkgLSBmaXJzdF9wYWdlOworCUZyZWVQYWdlTWFuYWdlclB1dChmcG0sIGZpcnN0 X3BhZ2UsIHBhZ2VzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2RzbV9yZWdpc3RyeS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3Jl Z2lzdHJ5LmMKaW5kZXggMDY4YzE1NzdiMTIuLmNjMjAyMjNiOTRiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYwpAQCAtNTQsOCArNTQsMTggQEAgdHlwZWRl ZiBzdHJ1Y3QgRFNNUmVnaXN0cnlDdHhTdHJ1Y3QKIAlkc2hhc2hfdGFibGVfaGFuZGxlIGRz aGg7CiB9IERTTVJlZ2lzdHJ5Q3R4U3RydWN0OwogCitzdGF0aWMgdm9pZCBEU01SZWdpc3Ry eUN0eFNobWVtSW5pdCh2b2lkICphcmcpOworCiBzdGF0aWMgRFNNUmVnaXN0cnlDdHhTdHJ1 Y3QgKkRTTVJlZ2lzdHJ5Q3R4OwogCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIERTTVJlZ2lz dHJ5Q3R4U2htZW1EZXNjID0geworCS5uYW1lID0gIkRTTSBSZWdpc3RyeSBEYXRhIiwKKwku c2l6ZSA9IHNpemVvZihEU01SZWdpc3RyeUN0eFN0cnVjdCksCisJLmluaXRfZm4gPSBEU01S ZWdpc3RyeUN0eFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZEU01SZWdpc3RyeUN0 eCwKK307CisKKwogdHlwZWRlZiBzdHJ1Y3QgTmFtZWREU01TdGF0ZQogewogCWRzbV9oYW5k bGUJaGFuZGxlOwpAQCAtMTEzLDI3ICsxMjMsMTcgQEAgc3RhdGljIGNvbnN0IGRzaGFzaF9w YXJhbWV0ZXJzIGRzaF9wYXJhbXMgPSB7CiBzdGF0aWMgZHNhX2FyZWEgKmRzbV9yZWdpc3Ry eV9kc2E7CiBzdGF0aWMgZHNoYXNoX3RhYmxlICpkc21fcmVnaXN0cnlfdGFibGU7CiAKLVNp emUKLURTTVJlZ2lzdHJ5U2htZW1TaXplKHZvaWQpCit2b2lkCitEU01SZWdpc3RyeVNobWVt UmVnaXN0ZXIodm9pZCkKIHsKLQlyZXR1cm4gTUFYQUxJR04oc2l6ZW9mKERTTVJlZ2lzdHJ5 Q3R4U3RydWN0KSk7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmRFNNUmVnaXN0cnlDdHhTaG1l bURlc2MpOwogfQogCi12b2lkCi1EU01SZWdpc3RyeVNobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK0RTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlm b3VuZDsKLQotCURTTVJlZ2lzdHJ5Q3R4ID0gKERTTVJlZ2lzdHJ5Q3R4U3RydWN0ICopCi0J CVNobWVtSW5pdFN0cnVjdCgiRFNNIFJlZ2lzdHJ5IERhdGEiLAotCQkJCQkJRFNNUmVnaXN0 cnlTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJ RFNNUmVnaXN0cnlDdHgtPmRzYWggPSBEU0FfSEFORExFX0lOVkFMSUQ7Ci0JCURTTVJlZ2lz dHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOwotCX0KKwlEU01SZWdpc3Ry eUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlEU01SZWdpc3RyeUN0eC0+ZHNo aCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwppbmRleCA3YzY1M2UyNzM3MC4uYzFlZTQyMjM0OWQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKQEAgLTEwMiwxNSArMTAyLDE0IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lk KQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbVJlZ2lzdGVyZWRTaXplKCkpOwogCiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIGRzbV9lc3RpbWF0ZV9zaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBEU01SZWdpc3RyeVNobWVtU2l6ZSgpKTsKKworCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTaG1lbVJlZ2lzdGVyZWRTaXplKCkpOwogCiAJLyogbGVnYWN5IHN1YnN5 c3RlbXMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQnVmZmVyTWFuYWdlclNobWVtU2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9ja01hbmFnZXJTaG1lbVNpemUoKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUoKSk7Ci0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIFByb2NHbG9iYWxTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFhMb2dQcmVmZXRjaFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgVmFyc3VwU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBYTE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUmVjb3Zl cnlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIENMT0dTaG1lbVNpemUo KSk7CkBAIC0xMjAsMTEgKzExOSw3IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBNdWx0aVhhY3RTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIExXTG9ja1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgUHJvY0FycmF5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNr ZW5kU3RhdHVzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaGFyZWRJ bnZhbFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUE1TaWduYWxTaG1l bVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByb2NTaWduYWxTaG1lbVNpemUo KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIENoZWNrcG9pbnRlclNobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQXV0b1ZhY3V1bVNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgUmVwbGljYXRpb25TbG90c1NobWVtU2l6ZSgpKTsKQEAgLTI0 NiwxMSArMjQxLDE4IEBAIHZvaWQKIFJlZ2lzdGVyU2htZW1TdHJ1Y3RzKHZvaWQpCiB7CiAJ LyoKLQkgKiBUT0RPOiBOb3QgdXNlZCBpbiBhbnkgYnVpbHQtaW4gc3Vic3lzdGVtcyB5ZXQu ICBJbiB0aGUgZnV0dXJlLCBtb3N0IG9mCi0JICogdGhlIGNhbGxzICpTaG1lbUluaXQoKSBj YWxscyBpbiBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpLCBhbmQKLQkgKiAqU2htZW1T aXplKCkgY2FsbHMgaW4gQ2FsY3VsYXRlU2htZW1TaXplKCkgd2lsbCBiZSByZXBsYWNlZCBi eSBjYWxscwotCSAqIGludG8gdGhlIHN1YnN5c3RlbXMgZnJvbSBoZXJlLgorCSAqIFRPRE86 IEluIHRoZSBmdXR1cmUsIG1vc3Qgb2YgdGhlIGNhbGxzICpTaG1lbUluaXQoKSBjYWxscyBp bgorCSAqIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCksIGFuZCAqU2htZW1TaXplKCkg Y2FsbHMgaW4KKwkgKiBDYWxjdWxhdGVTaG1lbVNpemUoKSB3aWxsIGJlIHJlcGxhY2VkIGJ5 IGNhbGxzIGludG8gdGhlIHN1YnN5c3RlbXMgZnJvbQorCSAqIGhlcmUuCiAJICovCisJRFNN UmVnaXN0cnlTaG1lbVJlZ2lzdGVyKCk7CisJUHJvY0dsb2JhbFNobWVtUmVnaXN0ZXIoKTsK KwlWYXJzdXBTaG1lbVJlZ2lzdGVyKCk7CisJUHJvY0FycmF5U2htZW1SZWdpc3RlcigpOwor CVNoYXJlZEludmFsU2htZW1SZWdpc3RlcigpOworCVBNU2lnbmFsU2htZW1SZWdpc3Rlcigp OworCVByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKCk7CiB9CiAKIC8qCkBAIC0yOTQsMTMgKzI5 NiwxMiBAQCBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCX0KIAogCWRzbV9z aG1lbV9pbml0KCk7Ci0JRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKIAogCS8qCiAJICogU2V0 IHVwIHhsb2csIGNsb2csIGFuZCBidWZmZXJzCiAJICovCi0JVmFyc3VwU2htZW1Jbml0KCk7 CiAJWExPR1NobWVtSW5pdCgpOworCiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExv Z1JlY292ZXJ5U2htZW1Jbml0KCk7CiAJQ0xPR1NobWVtSW5pdCgpOwpAQCAtMzIyLDIzICsz MjMsMTMgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAkvKgogCSAqIFNl dCB1cCBwcm9jZXNzIHRhYmxlCiAJICovCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQkJ SW5pdFByb2NHbG9iYWwoKTsKLQlQcm9jQXJyYXlTaG1lbUluaXQoKTsKIAlCYWNrZW5kU3Rh dHVzU2htZW1Jbml0KCk7CiAJVHdvUGhhc2VTaG1lbUluaXQoKTsKIAlCYWNrZ3JvdW5kV29y a2VyU2htZW1Jbml0KCk7CiAKLQkvKgotCSAqIFNldCB1cCBzaGFyZWQtaW52YWwgbWVzc2Fn aW5nCi0JICovCi0JU2hhcmVkSW52YWxTaG1lbUluaXQoKTsKLQogCS8qCiAJICogU2V0IHVw IGludGVycHJvY2VzcyBzaWduYWxpbmcgbWVjaGFuaXNtcwogCSAqLwotCVBNU2lnbmFsU2ht ZW1Jbml0KCk7Ci0JUHJvY1NpZ25hbFNobWVtSW5pdCgpOwogCUNoZWNrcG9pbnRlclNobWVt SW5pdCgpOwogCUF1dG9WYWN1dW1TaG1lbUluaXQoKTsKIAlSZXBsaWNhdGlvblNsb3RzU2ht ZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25h bC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwppbmRleCA0NjE4ODIw YjMzNy4uYzg0MGQ1YThmYjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Btc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwpA QCAtODAsOSArODAsMjAgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogCXNpZ19hdG9taWNfdCBQ TUNoaWxkRmxhZ3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH07CiAKLS8qIFBNU2lnbmFs U3RhdGUgcG9pbnRlciBpcyB2YWxpZCBpbiBib3RoIHBvc3RtYXN0ZXIgYW5kIGNoaWxkIHBy b2Nlc3NlcyAqLworc3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbUluaXQodm9pZCAqKTsKKwor LyoKKyAqIFBNU2lnbmFsU3RhdGUgcG9pbnRlciBpcyB2YWxpZCBpbiBib3RoIHBvc3RtYXN0 ZXIgYW5kIGNoaWxkIHByb2Nlc3NlcworICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUg UE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRlID0gTlVMTDsKIAorc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJQTVNpZ25hbFN0YXRl IiwKKwkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwkuaW5pdF9mbiA9IFBNU2lnbmFsU2ht ZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlBNU2lnbmFsU3RhdGUsCit9OworCiAvKgog ICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MsIG9ubHkg dmFsaWQgaW4gdGhlCiAgKiBwb3N0bWFzdGVyLiAgUG9zdG1hc3RlciBrZWVwcyBhIGxvY2Fs IGNvcHkgc28gdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8KQEAgLTEyMywzOSArMTM0LDI5IEBA IHBvc3RtYXN0ZXJfZGVhdGhfaGFuZGxlcihTSUdOQUxfQVJHUykKIHN0YXRpYyB2b2lkIE1h cmtQb3N0bWFzdGVyQ2hpbGRJbmFjdGl2ZShpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAogLyoK LSAqIFBNU2lnbmFsU2htZW1TaXplCi0gKgkJQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIHBt c2lnbmFsLmMncyBzaGFyZWQgbWVtb3J5CisgKiBQTVNpZ25hbFNobWVtUmVnaXN0ZXIgLSBS ZWdpc3RlciBvdXIgc2hhcmVkIG1lbW9yeQogICovCi1TaXplCi1QTVNpZ25hbFNobWVtU2l6 ZSh2b2lkKQordm9pZAorUE1TaWduYWxTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6ZQkJ c2l6ZTsKIAotCXNpemUgPSBvZmZzZXRvZihQTVNpZ25hbERhdGEsIFBNQ2hpbGRGbGFncyk7 Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE1heExpdmVQb3N0bWFzdGVyQ2hp bGRyZW4oKSwKLQkJCQkJCQkJICAgc2l6ZW9mKHNpZ19hdG9taWNfdCkpKTsKKwludW1fY2hp bGRfZmxhZ3MgPSBNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCk7CiAKLQlyZXR1cm4gc2l6 ZTsKKwlzaXplID0gb2Zmc2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOworCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShudW1fY2hpbGRfZmxhZ3MsIHNpemVvZihz aWdfYXRvbWljX3QpKSk7CisJUE1TaWduYWxTaG1lbURlc2Muc2l6ZSA9IHNpemU7CisJU2ht ZW1SZWdpc3RlclN0cnVjdCgmUE1TaWduYWxTaG1lbURlc2MpOwogfQogCi0vKgotICogUE1T aWduYWxTaG1lbUluaXQgLSBpbml0aWFsaXplIGR1cmluZyBzaGFyZWQtbWVtb3J5IGNyZWF0 aW9uCi0gKi8KLXZvaWQKLVBNU2lnbmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAor UE1TaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JUE1T aWduYWxTdGF0ZSA9IChQTVNpZ25hbERhdGEgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQTVNp Z25hbFN0YXRlIiwgUE1TaWduYWxTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQotCWlmICghZm91 bmQpCi0JewotCQkvKiBpbml0aWFsaXplIGFsbCBmbGFncyB0byB6ZXJvZXMgKi8KLQkJTWVt U2V0KHVudm9sYXRpemUoUE1TaWduYWxEYXRhICosIFBNU2lnbmFsU3RhdGUpLCAwLCBQTVNp Z25hbFNobWVtU2l6ZSgpKTsKLQkJbnVtX2NoaWxkX2ZsYWdzID0gTWF4TGl2ZVBvc3RtYXN0 ZXJDaGlsZHJlbigpOwotCQlQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MgPSBudW1f Y2hpbGRfZmxhZ3M7Ci0JfQorCS8qIGluaXRpYWxpemUgYWxsIGZsYWdzIHRvIHplcm9lcyAq LworCUFzc2VydChQTVNpZ25hbFN0YXRlKTsKKwlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25h bERhdGEgKiwgUE1TaWduYWxTdGF0ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNjLnNpemUpOwor CUFzc2VydChudW1fY2hpbGRfZmxhZ3MgPiAwKTsKKwlQTVNpZ25hbFN0YXRlLT5udW1fY2hp bGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7CiB9CiAKIC8qCkBAIC0yOTEsNiArMjkyLDcg QEAgUmVnaXN0ZXJQb3N0bWFzdGVyQ2hpbGRBY3RpdmUodm9pZCkKIHsKIAlpbnQJCQlzbG90 ID0gTXlQTUNoaWxkU2xvdDsKIAorCUFzc2VydChQTVNpZ25hbFN0YXRlKTsKIAlBc3NlcnQo c2xvdCA+IDAgJiYgc2xvdCA8PSBQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MpOwog CXNsb3QtLTsKIAlBc3NlcnQoUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdzW3Nsb3RdID09 IFBNX0NISUxEX0FTU0lHTkVEKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMK aW5kZXggMGY5MTM4OTdhY2MuLmFiZjE1MTlmY2JhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jYXJyYXkuYwpAQCAtMTAzLDYgKzEwMywxOSBAQCB0eXBlZGVmIHN0cnVjdCBQcm9j QXJyYXlTdHJ1Y3QKIAlpbnQJCQlwZ3Byb2Nub3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsK IH0gUHJvY0FycmF5U3RydWN0OwogCitzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUluaXQo dm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFByb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFy Zyk7CisKK3N0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKKworc3RhdGljIFNo bWVtU3RydWN0RGVzYyBQcm9jQXJyYXlTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUHJvYyBB cnJheSIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLmluaXRfZm4gPSBQcm9jQXJy YXlTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9IFByb2NBcnJheVNobWVtQXR0YWNoLAorCS5w dHIgPSAodm9pZCAqKikgJnByb2NBcnJheSwKK307CisKIC8qCiAgKiBTdGF0ZSBmb3IgdGhl IEdsb2JhbFZpc1Rlc3QqIGZhbWlseSBvZiBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBj YW4KICAqIGUuZy4gYmUgdXNlZCB0byBkZWNpZGUgaWYgYSBkZWxldGVkIHJvdyBjYW4gYmUg cmVtb3ZlZCB3aXRob3V0IHZpb2xhdGluZwpAQCAtMjY5LDkgKzI4Miw2IEBAIHR5cGVkZWYg ZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCUtBWF9TVEFSVFVQX1BST0NFU1NfSURMRSwJLyog c3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0IHRvIHNsZWVwICovCiB9IEtBWENvbXByZXNzUmVh c29uOwogCi0KLXN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKLQogc3RhdGlj IFBHUFJPQyAqYWxsUHJvY3M7CiAKIC8qCkBAIC0yODIsOCArMjkyLDI1IEBAIHN0YXRpYyBU cmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90SW5Qcm9ncmVzcyA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwogLyoKICAqIEJvb2trZWVwaW5nIGZvciB0cmFja2luZyBlbXVsYXRlZCB0cmFu c2FjdGlvbnMgaW4gcmVjb3ZlcnkKICAqLworCiBzdGF0aWMgVHJhbnNhY3Rpb25JZCAqS25v d25Bc3NpZ25lZFhpZHM7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgS25vd25Bc3NpZ25l ZFhpZHNTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiS25vd25Bc3NpZ25lZFhpZHMiLAorCS5z aXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0gTlVMTCwKKwkucHRyID0gKHZv aWQgKiopICZLbm93bkFzc2lnbmVkWGlkcywKK307CisKIHN0YXRpYyBib29sICpLbm93bkFz c2lnbmVkWGlkc1ZhbGlkOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEtub3duQXNzaWdu ZWRYaWRzVmFsaWRTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiS25vd25Bc3NpZ25lZFhpZHNW YWxpZCIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLmluaXRfZm4gPSBOVUxMLAor CS5wdHIgPSAodm9pZCAqKikgJktub3duQXNzaWduZWRYaWRzVmFsaWQsCit9OworCiBzdGF0 aWMgVHJhbnNhY3Rpb25JZCBsYXRlc3RPYnNlcnZlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlv bklkOwogCiAvKgpAQCAtMzc0LDE4ICs0MDEsMTkgQEAgc3RhdGljIGlubGluZSBGdWxsVHJh bnNhY3Rpb25JZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsCiBz dGF0aWMgdm9pZCBHbG9iYWxWaXNVcGRhdGVBcHBseShDb21wdXRlWGlkSG9yaXpvbnNSZXN1 bHQgKmhvcml6b25zKTsKIAogLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5l ZWRlZCBieSBQcm9jQXJyYXlTaG1lbUluaXQKKyAqIFJlZ2lzdGVyIHRoZSBzaGFyZWQgUEdQ Uk9DIGFycmF5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLVNpemUKLVByb2NB cnJheVNobWVtU2l6ZSh2b2lkKQordm9pZAorUHJvY0FycmF5U2htZW1SZWdpc3Rlcih2b2lk KQogewotCVNpemUJCXNpemU7Ci0KLQkvKiBTaXplIG9mIHRoZSBQcm9jQXJyYXkgc3RydWN0 dXJlIGl0c2VsZiAqLwogI2RlZmluZSBQUk9DQVJSQVlfTUFYUFJPQ1MJKE1heEJhY2tlbmRz ICsgbWF4X3ByZXBhcmVkX3hhY3RzKQogCi0Jc2l6ZSA9IG9mZnNldG9mKFByb2NBcnJheVN0 cnVjdCwgcGdwcm9jbm9zKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoc2l6 ZW9mKGludCksIFBST0NBUlJBWV9NQVhQUk9DUykpOworCS8qIENyZWF0ZSBvciBhdHRhY2gg dG8gdGhlIFByb2NBcnJheSBzaGFyZWQgc3RydWN0dXJlICovCisJUHJvY0FycmF5U2htZW1E ZXNjLnNpemUgPQorCQlhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJv Y25vcyksCisJCQkJIG11bF9zaXplKHNpemVvZihpbnQpLAorCQkJCQkJICBQUk9DQVJSQVlf TUFYUFJPQ1MpKTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZQcm9jQXJyYXlTaG1lbURlc2Mp OwogCiAJLyoKIAkgKiBEdXJpbmcgSG90IFN0YW5kYnkgcHJvY2Vzc2luZyB3ZSBoYXZlIGEg ZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkCkBAIC00MDUsNjQgKzQzMywzOCBAQCBQcm9jQXJyYXlT aG1lbVNpemUodm9pZCkKIAogCWlmIChFbmFibGVIb3RTdGFuZGJ5KQogCXsKLQkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCks Ci0JCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFkZF9z aXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNI RURfU1VCWElEUykpOworCQlLbm93bkFzc2lnbmVkWGlkc1NobWVtRGVzYy5zaXplID0KKwkJ CW11bF9zaXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKKwkJCQkJIFRPVEFMX01BWF9DQUNI RURfU1VCWElEUyk7CisJCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJktub3duQXNzaWduZWRYaWRz U2htZW1EZXNjKTsKKworCQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjLnNpemUg PQorCQkJbXVsX3NpemUoc2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMp OworCQlTaG1lbVJlZ2lzdGVyU3RydWN0KCZLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1E ZXNjKTsKIAl9Ci0KLQlyZXR1cm4gc2l6ZTsKIH0KIAotLyoKLSAqIEluaXRpYWxpemUgdGhl IHNoYXJlZCBQR1BST0MgYXJyYXkgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cC4KLSAqLwot dm9pZAotUHJvY0FycmF5U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY0FycmF5 U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCS8qIENyZWF0ZSBv ciBhdHRhY2ggdG8gdGhlIFByb2NBcnJheSBzaGFyZWQgc3RydWN0dXJlICovCi0JcHJvY0Fy cmF5ID0gKFByb2NBcnJheVN0cnVjdCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgQXJy YXkiLAotCQkJCQkJYWRkX3NpemUob2Zmc2V0b2YoUHJvY0FycmF5U3RydWN0LCBwZ3Byb2Nu b3MpLAotCQkJCQkJCQkgbXVsX3NpemUoc2l6ZW9mKGludCksCi0JCQkJCQkJCQkJICBQUk9D QVJSQVlfTUFYUFJPQ1MpKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJLyoKLQkJICogV2UncmUgdGhlIGZpcnN0IC0gaW5pdGlhbGl6ZS4KLQkJICovCi0JCXBy b2NBcnJheS0+bnVtUHJvY3MgPSAwOwotCQlwcm9jQXJyYXktPm1heFByb2NzID0gUFJPQ0FS UkFZX01BWFBST0NTOwotCQlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0gVE9U QUxfTUFYX0NBQ0hFRF9TVUJYSURTOwotCQlwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRY aWRzID0gMDsKLQkJcHJvY0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlw cm9jQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+bGFz dE92ZXJmbG93ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJcHJvY0FycmF5LT5y ZXBsaWNhdGlvbl9zbG90X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJcHJvY0Fy cmF5LT5yZXBsaWNhdGlvbl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlv bklkOwotCQlUcmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKLQl9 CisJcHJvY0FycmF5LT5udW1Qcm9jcyA9IDA7CisJcHJvY0FycmF5LT5tYXhQcm9jcyA9IFBS T0NBUlJBWV9NQVhQUk9DUzsKKwlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0g VE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTOworCXByb2NBcnJheS0+bnVtS25vd25Bc3NpZ25l ZFhpZHMgPSAwOworCXByb2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKKwlw cm9jQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT5sYXN0 T3ZlcmZsb3dlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCXByb2NBcnJheS0+cmVw bGljYXRpb25fc2xvdF94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJcHJvY0FycmF5 LT5yZXBsaWNhdGlvbl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklk OworCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9uQ291bnQgPSAxOwogCiAJYWxs UHJvY3MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jczsKK30KIAotCS8qIENyZWF0ZSBvciBhdHRh Y2ggdG8gdGhlIEtub3duQXNzaWduZWRYaWRzIGFycmF5cyB0b28sIGlmIG5lZWRlZCAqLwot CWlmIChFbmFibGVIb3RTdGFuZGJ5KQotCXsKLQkJS25vd25Bc3NpZ25lZFhpZHMgPSAoVHJh bnNhY3Rpb25JZCAqKQotCQkJU2htZW1Jbml0U3RydWN0KCJLbm93bkFzc2lnbmVkWGlkcyIs Ci0JCQkJCQkJbXVsX3NpemUoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLAotCQkJCQkJCQkJIFRP VEFMX01BWF9DQUNIRURfU1VCWElEUyksCi0JCQkJCQkJJmZvdW5kKTsKLQkJS25vd25Bc3Np Z25lZFhpZHNWYWxpZCA9IChib29sICopCi0JCQlTaG1lbUluaXRTdHJ1Y3QoIktub3duQXNz aWduZWRYaWRzVmFsaWQiLAotCQkJCQkJCW11bF9zaXplKHNpemVvZihib29sKSwgVE9UQUxf TUFYX0NBQ0hFRF9TVUJYSURTKSwKLQkJCQkJCQkmZm91bmQpOwotCX0KK3N0YXRpYyB2b2lk CitQcm9jQXJyYXlTaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJYWxsUHJvY3MgPSBQcm9j R2xvYmFsLT5hbGxQcm9jczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nz aWduYWwuYwppbmRleCA3ZTAxN2M4ZDUzYi4uYWUxYzI4ODhiNTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTEwNSw3ICsxMDUsMTggQEAgc3RydWN0IFBy b2NTaWduYWxIZWFkZXIKICNkZWZpbmUgQkFSUklFUl9DTEVBUl9CSVQoZmxhZ3MsIHR5cGUp IFwKIAkoKGZsYWdzKSAmPSB+KCgodWludDMyKSAxKSA8PCAodWludDMyKSAodHlwZSkpKQog CitzdGF0aWMgdm9pZCBQcm9jU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKIE5PTl9F WEVDX1NUQVRJQyBQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsID0gTlVMTDsKKworc3Rh dGljIFNobWVtU3RydWN0RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjID0geworCS5uYW1lID0g IlByb2NTaWduYWwiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0g UHJvY1NpZ25hbFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZQcm9jU2lnbmFsLAor fTsKKworCiBzdGF0aWMgUHJvY1NpZ25hbFNsb3QgKk15UHJvY1NpZ25hbFNsb3QgPSBOVUxM OwogCiBzdGF0aWMgYm9vbCBDaGVja1Byb2NTaWduYWwoUHJvY1NpZ25hbFJlYXNvbiByZWFz b24pOwpAQCAtMTEzLDUxICsxMjQsMzcgQEAgc3RhdGljIHZvaWQgQ2xlYW51cFByb2NTaWdu YWxTdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgUmVzZXRQcm9j U2lnbmFsQmFycmllckJpdHModWludDMyIGZsYWdzKTsKIAogLyoKLSAqIFByb2NTaWduYWxT aG1lbVNpemUKLSAqCQlDb21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgUHJvY1NpZ25hbCdzIHNo YXJlZCBtZW1vcnkKKyAqIFByb2NTaWduYWxTaG1lbVJlZ2lzdGVyCisgKgkJUmVnaXN0ZXIg UHJvY1NpZ25hbCdzIHNoYXJlZCBtZW1vcnkgbmVlZHMgYXQgcG9zdG1hc3RlciBzdGFydHVw CiAgKi8KLVNpemUKLVByb2NTaWduYWxTaG1lbVNpemUodm9pZCkKK3ZvaWQKK1Byb2NTaWdu YWxTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBtdWxf c2l6ZShOdW1Qcm9jU2lnbmFsU2xvdHMsIHNpemVvZihQcm9jU2lnbmFsU2xvdCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBvZmZzZXRvZihQcm9jU2lnbmFsSGVhZGVyLCBwc2hfc2xv dCkpOwotCXJldHVybiBzaXplOworCisJUHJvY1NpZ25hbFNobWVtRGVzYy5zaXplID0gc2l6 ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZQcm9jU2lnbmFsU2htZW1EZXNjKTsKIH0KIAot LyoKLSAqIFByb2NTaWduYWxTaG1lbUluaXQKLSAqCQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6 ZSBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1lbW9yeQotICovCi12b2lkCi1Qcm9jU2lnbmFsU2ht ZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkICph cmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IFByb2NTaWduYWxTaG1lbVNpemUoKTsKLQlib29sCQlm b3VuZDsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlByb2NTaWduYWwtPnBzaF9iYXJyaWVyR2Vu ZXJhdGlvbiwgMCk7CiAKLQlQcm9jU2lnbmFsID0gKFByb2NTaWduYWxIZWFkZXIgKikKLQkJ U2htZW1Jbml0U3RydWN0KCJQcm9jU2lnbmFsIiwgc2l6ZSwgJmZvdW5kKTsKLQotCS8qIElm IHdlJ3JlIGZpcnN0LCBpbml0aWFsaXplLiAqLwotCWlmICghZm91bmQpCisJZm9yIChpbnQg aSA9IDA7IGkgPCBOdW1Qcm9jU2lnbmFsU2xvdHM7ICsraSkKIAl7Ci0JCWludAkJCWk7Ci0K LQkJcGdfYXRvbWljX2luaXRfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmllckdlbmVyYXRp b24sIDApOworCQlQcm9jU2lnbmFsU2xvdCAqc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xv dFtpXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgTnVtUHJvY1NpZ25hbFNsb3RzOyArK2kpCi0J CXsKLQkJCVByb2NTaWduYWxTbG90ICpzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W2ld OwotCi0JCQlTcGluTG9ja0luaXQoJnNsb3QtPnBzc19tdXRleCk7Ci0JCQlwZ19hdG9taWNf aW5pdF91MzIoJnNsb3QtPnBzc19waWQsIDApOwotCQkJc2xvdC0+cHNzX2NhbmNlbF9rZXlf bGVuID0gMDsKLQkJCU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIHNpemVvZihz bG90LT5wc3Nfc2lnbmFsRmxhZ3MpKTsKLQkJCXBnX2F0b21pY19pbml0X3U2NCgmc2xvdC0+ cHNzX2JhcnJpZXJHZW5lcmF0aW9uLCBQR19VSU5UNjRfTUFYKTsKLQkJCXBnX2F0b21pY19p bml0X3UzMigmc2xvdC0+cHNzX2JhcnJpZXJDaGVja01hc2ssIDApOwotCQkJQ29uZGl0aW9u VmFyaWFibGVJbml0KCZzbG90LT5wc3NfYmFycmllckNWKTsKLQkJfQorCQlTcGluTG9ja0lu aXQoJnNsb3QtPnBzc19tdXRleCk7CisJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+cHNz X3BpZCwgMCk7CisJCXNsb3QtPnBzc19jYW5jZWxfa2V5X2xlbiA9IDA7CisJCU1lbVNldChz bG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIHNpemVvZihzbG90LT5wc3Nfc2lnbmFsRmxhZ3Mp KTsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdlbmVyYXRpb24s IFBHX1VJTlQ2NF9NQVgpOworCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19iYXJy aWVyQ2hlY2tNYXNrLCAwKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5wc3Nf YmFycmllckNWKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDI2 MThjYjkyN2M2Li4xZTE3NjYzYTBkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBA IC0yNDEsNyArMjQxLDcgQEAgU2htZW1SZWdpc3RlclN0cnVjdChTaG1lbVN0cnVjdERlc2Mg KmRlc2MpCiAJfQogCiAJLyogZGVzYy0+cHRyIGNhbiBiZSBub24tTlVMTCB3aGVuIHJlLWlu aXRpYWxpemluZyBhZnRlciBjcmFzaCAqLwotCWlmIChkZXNjLT5wdHIpCisJaWYgKCFJc1Vu ZGVyUG9zdG1hc3RlciAmJiBkZXNjLT5wdHIpCiAJCSpkZXNjLT5wdHIgPSBOVUxMOwogCiAJ LyogQWRkIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBhcnJheSwgZ3Jvd2luZyB0aGUgYXJyYXkg aWYgbmVlZGVkICovCkBAIC0zMTksNyArMzE5LDcgQEAgU2htZW1SZWdpc3RlclN0cnVjdChT aG1lbVN0cnVjdERlc2MgKmRlc2MpCiAJCQlpZiAoZGVzYy0+cHRyKQogCQkJCSpkZXNjLT5w dHIgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CiAKLQkJCS8qIFhYWDogaWYgdGhpcyBlcnJv cnMgb3V0LCB0aGUgYXJlYXMgaXMgbGVmdCBpbiBhIGhhbGYtaW5pdGlhbGl6ZWQgc3RhdGUg Ki8KKwkJCS8qIFhYWDogaWYgdGhpcyBlcnJvcnMgb3V0LCB0aGUgYXJlYSBpcyBsZWZ0IGlu IGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZSAqLwogCQkJaWYgKGRlc2MtPmluaXRfZm4pCiAJ CQkJZGVzYy0+aW5pdF9mbihkZXNjLT5pbml0X2ZuX2FyZyk7CiAJCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc2ludmFsYWR0LmMKaW5kZXggYTdhN2NjNGYwYTkuLjYxYzRlM2FhOTNlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYwpAQCAtMjAzLDggKzIwMywxNyBA QCB0eXBlZGVmIHN0cnVjdCBTSVNlZwogICovCiAjZGVmaW5lIE51bVByb2NTdGF0ZVNsb3Rz CShNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpCiAKK3N0YXRpYyB2b2lkIFNo YXJlZEludmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKIHN0YXRpYyBTSVNlZyAqc2htSW52 YWxCdWZmZXI7CS8qIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KIAor c3RhdGljIFNobWVtU3RydWN0RGVzYyBTaGFyZWRJbnZhbFNobWVtRGVzYyA9IHsKKwkubmFt ZSA9ICJzaG1JbnZhbEJ1ZmZlciIsCisJLnNpemUgPSAwLAkvKiBkeW5hbWljICovCisJLmlu aXRfZm4gPSBTaGFyZWRJbnZhbFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZzaG1J bnZhbEJ1ZmZlciwKK307CisKIAogc3RhdGljIExvY2FsVHJhbnNhY3Rpb25JZCBuZXh0TG9j YWxUcmFuc2FjdGlvbklkOwogCkBAIC0yMTIsMTAgKzIyMSwxMSBAQCBzdGF0aWMgdm9pZCBD bGVhbnVwSW52YWxpZGF0aW9uU3RhdGUoaW50IHN0YXR1cywgRGF0dW0gYXJnKTsKIAogCiAv KgotICogU2hhcmVkSW52YWxTaG1lbVNpemUgLS0tIHJldHVybiBzaGFyZWQtbWVtb3J5IHNw YWNlIG5lZWRlZAorICogU2hhcmVkSW52YWxTaG1lbVJlZ2lzdGVyCisgKgkJUmVnaXN0ZXIg c2hhcmVkIG1lbW9yeSBuZWVkcyBmb3IgdGhlIFNJIG1lc3NhZ2UgYnVmZmVyCiAgKi8KLVNp emUKLVNoYXJlZEludmFsU2htZW1TaXplKHZvaWQpCit2b2lkCitTaGFyZWRJbnZhbFNobWVt UmVnaXN0ZXIodm9pZCkKIHsKIAlTaXplCQlzaXplOwogCkBAIC0yMjMsMjYgKzIzMywxNyBA QCBTaGFyZWRJbnZhbFNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBt dWxfc2l6ZShzaXplb2YoUHJvY1N0YXRlKSwgTnVtUHJvY1N0YXRlU2xvdHMpKTsJLyogcHJv Y1N0YXRlICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNpemVvZihpbnQp LCBOdW1Qcm9jU3RhdGVTbG90cykpOwkvKiBwZ3Byb2Nub3MgKi8KIAotCXJldHVybiBzaXpl OworCS8qIEFsbG9jYXRlIHNwYWNlIGluIHNoYXJlZCBtZW1vcnkgKi8KKwlTaGFyZWRJbnZh bFNobWVtRGVzYy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZTaGFyZWRJ bnZhbFNobWVtRGVzYyk7CiB9CiAKLS8qCi0gKiBTaGFyZWRJbnZhbFNobWVtSW5pdAotICoJ CUNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgU0kgbWVzc2FnZSBidWZmZXIKLSAqLwotdm9p ZAotU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitTaGFyZWRJbnZh bFNobWVtSW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJaTsKLQlib29sCQlmb3VuZDsKLQot CS8qIEFsbG9jYXRlIHNwYWNlIGluIHNoYXJlZCBtZW1vcnkgKi8KLQlzaG1JbnZhbEJ1ZmZl ciA9IChTSVNlZyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoInNobUludmFsQnVmZmVyIiwgU2hh cmVkSW52YWxTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQlpZiAoZm91bmQpCi0JCXJldHVybjsK IAotCS8qIENsZWFyIG1lc3NhZ2UgY291bnRlcnMsIHNhdmUgc2l6ZSBvZiBwcm9jU3RhdGUg YXJyYXksIGluaXQgc3BpbmxvY2sgKi8KKwkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBz YXZlIHNpemUgb2YgcHJvY1N0YXRlIGFycmF5IEZJWE1FLCBpbml0IHNwaW5sb2NrICovCiAJ c2htSW52YWxCdWZmZXItPm1pbk1zZ051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm1heE1z Z051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm5leHRUaHJlc2hvbGQgPSBDTEVBTlVQX01J TjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IGQ0MDc3MjVlNjAyLi5jM2E2NTY1 MGNkZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC02NywxMSArNjcsMzcgQEAg Ym9vbAkJbG9nX2xvY2tfd2FpdHMgPSB0cnVlOwogLyogUG9pbnRlciB0byB0aGlzIHByb2Nl c3MncyBQR1BST0Mgc3RydWN0LCBpZiBhbnkgKi8KIFBHUFJPQwkgICAqTXlQcm9jID0gTlVM TDsKIAorc3RhdGljIHZvaWQgUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICphcmcpOworCiAv KiBQb2ludGVycyB0byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KIFBST0NfSERSICAg KlByb2NHbG9iYWwgPSBOVUxMOworc3RhdGljIHZvaWQgKnRtcEFsbFByb2NzOworc3RhdGlj IHZvaWQgKnRtcEZhc3RQYXRoTG9ja0FycmF5OwogTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAq QXV4aWxpYXJ5UHJvY3MgPSBOVUxMOwogUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9 IE5VTEw7CiAKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsU2htZW1EZXNj ID0geworCS5uYW1lID0gIlByb2MgSGVhZGVyIiwKKwkuc2l6ZSA9IHNpemVvZihQUk9DX0hE UiksCisJLmluaXRfZm4gPSBQcm9jR2xvYmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAq KikgJlByb2NHbG9iYWwsCit9OworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFByb2NHbG9i YWxBbGxQcm9jc1NobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJQR1BST0Mgc3RydWN0dXJlcyIs CisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLnB0ciA9ICh2b2lkICoqKSAmdG1wQWxs UHJvY3MsCit9OworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEZhc3RQYXRoTG9ja0FycmF5 U2htZW1EZXNjID0geworCS5uYW1lID0gIkZhc3QtUGF0aCBMb2NrIEFycmF5IiwKKwkuc2l6 ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwkucHRyID0gKHZvaWQgKiopICZ0bXBGYXN0UGF0aExv Y2tBcnJheSwKK307CisKK3N0YXRpYyB1aW50MzIgVG90YWxQcm9jczsKKwogLyogSXMgYSBk ZWFkbG9jayBjaGVjayBwZW5kaW5nPyAqLwogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBnb3RfZGVhZGxvY2tfdGltZW91dDsKIApAQCAtODEsMjQgKzEwNyw2IEBAIHN0YXRpYyB2 b2lkIEF1eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIERl YWRMb2NrU3RhdGUgQ2hlY2tEZWFkTG9jayh2b2lkKTsKIAogCi0vKgotICogUmVwb3J0IHNo YXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KLSAqLwotc3RhdGljIFNpemUK LVBHUHJvY1NobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCVNpemUJCVRv dGFsUHJvY3MgPQotCQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRkX3NpemUoTlVNX0FVWElM SUFSWV9QUk9DUywgbWF4X3ByZXBhcmVkX3hhY3RzKSk7Ci0KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFs LT54aWRzKSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2Nz LCBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0 dXNGbGFncykpKTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogUmVwb3J0IHNoYXJl ZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IEZhc3QtUGF0aCBsb2Nrcy4KICAqLwpAQCAtMTA2 LDggKzExNCw2IEBAIHN0YXRpYyBTaXplCiBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkK IHsKIAlTaXplCQlzaXplID0gMDsKLQlTaXplCQlUb3RhbFByb2NzID0KLQkJYWRkX3NpemUo TWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJl ZF94YWN0cykpOwogCVNpemUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwog CkBAIC0xMjMsMjUgKzEyOSw2IEBAIEZhc3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCXJl dHVybiBzaXplOwogfQogCi0vKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVl ZGVkIGJ5IEluaXRQcm9jR2xvYmFsLgotICovCi1TaXplCi1Qcm9jR2xvYmFsU2htZW1TaXpl KHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBQcm9jR2xvYmFsICovCi0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihQUk9DX0hEUikpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBzaXplb2Yoc2xvY2tfdCkpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBH U2VtYXBob3JlU2htZW1TaXplKFByb2NHbG9iYWxTZW1hcygpKSk7Ci0Jc2l6ZSA9IGFkZF9z aXplKHNpemUsIFBHUHJvY1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg RmFzdFBhdGhMb2NrU2htZW1TaXplKCkpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAg KiBSZXBvcnQgbnVtYmVyIG9mIHNlbWFwaG9yZXMgbmVlZGVkIGJ5IEluaXRQcm9jR2xvYmFs LgogICovCkBAIC0xNzYsMzUgKzE2Myw2OCBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKICAq CSAgaW1wbGVtZW50YXRpb24gdHlwaWNhbGx5IHJlcXVpcmVzIHVzIHRvIGNyZWF0ZSBzZW1h cGhvcmVzIGluIHRoZQogICoJICBwb3N0bWFzdGVyLCBub3QgaW4gYmFja2VuZHMuCiAgKgot ICogTm90ZTogdGhpcyBpcyBOT1QgY2FsbGVkIGJ5IGluZGl2aWR1YWwgYmFja2VuZHMgdW5k ZXIgYSBwb3N0bWFzdGVyLAorICogTm90ZTogdGhpcyBpcyBOT1QgY2FsbGVkIGJ5IGluZGl2 aWR1YWwgYmFja2VuZHMgdW5kZXIgYSBwb3N0bWFzdGVyLCBYWFgKICAqIG5vdCBldmVuIGlu IHRoZSBFWEVDX0JBQ0tFTkQgY2FzZS4gIFRoZSBQcm9jR2xvYmFsIGFuZCBBdXhpbGlhcnlQ cm9jcwogICogcG9pbnRlcnMgbXVzdCBiZSBwcm9wYWdhdGVkIHNwZWNpYWxseSBmb3IgRVhF Q19CQUNLRU5EIG9wZXJhdGlvbi4KICAqLwogdm9pZAotSW5pdFByb2NHbG9iYWwodm9pZCkK K1Byb2NHbG9iYWxTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7CisJU2l6ZQkJc2l6ZSA9IDA7CisK KwkvKgorCSAqIFJlc2VydmUgYWxsIHRoZSBQR1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVk LiAgVGhlcmUgYXJlCisJICogc2l4IHNlcGFyYXRlIGNvbnN1bWVyczogKDEpIG5vcm1hbCBi YWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBhbmQKKwkgKiBzcGVjaWFsIHdvcmtl cnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMsICg0KSB3YWxzZW5kZXJzLCAoNSkgYXV4aWxp YXJ5CisJICogcHJvY2Vzc2VzLCBhbmQgKDYpIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4gIChG b3IgbGFyZ2VseS1oaXN0b3JpY2FsCisJICogcmVhc29ucywgd2UgY29tYmluZSBhdXRvdmFj dXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50byBvbmUgY2F0ZWdvcnkKKwkgKiB3aXRoIGEg c2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVjdHVyZSBpcyBkZWRpY2F0ZWQg dG8gZXhhY3RseQorCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3NlcywgYW5kIHRoZXkgZG8gbm90 IG1vdmUgYmV0d2VlbiBncm91cHMuCisJICovCisJVG90YWxQcm9jcyA9CisJCWFkZF9zaXpl KE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NTLCBtYXhfcHJlcGFy ZWRfeGFjdHMpKTsKKworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFBy b2NzLCBzaXplb2YoUEdQUk9DKSkpOworCisJLyogRklYTUU6IHRoZSBzaXplb2ZzIGxvb2sg ZGFuZ2Vyb3VzIGJlY2F1c2UgUHJvY0dsb2JhbCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0ICov CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigq UHJvY0dsb2JhbC0+eGlkcykpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUo VG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7CisJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0ds b2JhbC0+c3RhdHVzRmxhZ3MpKSk7CisKKwlQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2Mu c2l6ZSA9IHNpemU7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmUHJvY0dsb2JhbEFsbFByb2Nz U2htZW1EZXNjKTsKKworCUZhc3RQYXRoTG9ja0FycmF5U2htZW1EZXNjLnNpemUgPSBGYXN0 UGF0aExvY2tTaG1lbVNpemUoKTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZGYXN0UGF0aExv Y2tBcnJheVNobWVtRGVzYyk7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgUHJvY0dsb2JhbCBz aGFyZWQgc3RydWN0dXJlIGxhc3QuIEl0cyBpbml0IGNhbGxiYWNrCisJICogaW5pdGlhbGl6 ZXMgdGhlIG90aGVycyB0b28uCisJICovCisJU2htZW1SZWdpc3RlclN0cnVjdCgmUHJvY0ds b2JhbFNobWVtRGVzYyk7CisKKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJeworCQlBc3Nl cnQoUHJvY0dsb2JhbCAhPSBOVUxMKTsKKwkJQXV4aWxpYXJ5UHJvY3MgPSAmUHJvY0dsb2Jh bC0+YWxsUHJvY3NbTWF4QmFja2VuZHNdOworCX0KK30KKworc3RhdGljIHZvaWQKK1Byb2NH bG9iYWxTaG1lbUluaXQodm9pZCAqYXJnKQoreworCWNoYXIJICAgKnB0cjsKKwlzaXplX3QJ CXJlcXVlc3RTaXplOwogCVBHUFJPQwkgICAqcHJvY3M7CiAJaW50CQkJaSwKIAkJCQlqOwot CWJvb2wJCWZvdW5kOwotCXVpbnQzMgkJVG90YWxQcm9jcyA9IE1heEJhY2tlbmRzICsgTlVN X0FVWElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0czsKLQogCS8qIFVzZWQgZm9y IHNldHVwIG9mIHBlci1iYWNrZW5kIGZhc3QtcGF0aCBzbG90cy4gKi8KIAljaGFyCSAgICpm cFB0ciwKIAkJCSAgICpmcEVuZFB0ciBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJU2l6 ZQkJZnBMb2NrQml0c1NpemUsCiAJCQkJZnBSZWxJZFNpemU7Ci0JU2l6ZQkJcmVxdWVzdFNp emU7Ci0JY2hhcgkgICAqcHRyOwotCi0JLyogQ3JlYXRlIHRoZSBQcm9jR2xvYmFsIHNoYXJl ZCBzdHJ1Y3R1cmUgKi8KLQlQcm9jR2xvYmFsID0gKFBST0NfSERSICopCi0JCVNobWVtSW5p dFN0cnVjdCgiUHJvYyBIZWFkZXIiLCBzaXplb2YoUFJPQ19IRFIpLCAmZm91bmQpOwotCUFz c2VydCghZm91bmQpOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVy ZXMuCi0JICovCisJQXNzZXJ0KFByb2NHbG9iYWwpOwogCVByb2NHbG9iYWwtPnNwaW5zX3Bl cl9kZWxheSA9IERFRkFVTFRfU1BJTlNfUEVSX0RFTEFZOwogCVNwaW5Mb2NrSW5pdCgmUHJv Y0dsb2JhbC0+ZnJlZVByb2NzTG9jayk7CiAJZGxpc3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJl ZVByb2NzKTsKQEAgLTIxNywyMiArMjM3LDEwIEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJ cGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0LCBJ TlZBTElEX1BST0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAotCS8qCi0JICogQ3Jl YXRlIGFuZCBpbml0aWFsaXplIGFsbCB0aGUgUEdQUk9DIHN0cnVjdHVyZXMgd2UnbGwgbmVl ZC4gIFRoZXJlIGFyZQotCSAqIHNpeCBzZXBhcmF0ZSBjb25zdW1lcnM6ICgxKSBub3JtYWwg YmFja2VuZHMsICgyKSBhdXRvdmFjdXVtIHdvcmtlcnMgYW5kCi0JICogc3BlY2lhbCB3b3Jr ZXJzLCAoMykgYmFja2dyb3VuZCB3b3JrZXJzLCAoNCkgd2Fsc2VuZGVycywgKDUpIGF1eGls aWFyeQotCSAqIHByb2Nlc3NlcywgYW5kICg2KSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuICAo Rm9yIGxhcmdlbHktaGlzdG9yaWNhbAotCSAqIHJlYXNvbnMsIHdlIGNvbWJpbmUgYXV0b3Zh Y3V1bSBhbmQgc3BlY2lhbCB3b3JrZXJzIGludG8gb25lIGNhdGVnb3J5Ci0JICogd2l0aCBh IHNpbmdsZSBmcmVlbGlzdC4pICBFYWNoIFBHUFJPQyBzdHJ1Y3R1cmUgaXMgZGVkaWNhdGVk IHRvIGV4YWN0bHkKLQkgKiBvbmUgb2YgdGhlc2UgcHVycG9zZXMsIGFuZCB0aGV5IGRvIG5v dCBtb3ZlIGJldHdlZW4gZ3JvdXBzLgotCSAqLwotCXJlcXVlc3RTaXplID0gUEdQcm9jU2ht ZW1TaXplKCk7Ci0KLQlwdHIgPSBTaG1lbUluaXRTdHJ1Y3QoIlBHUFJPQyBzdHJ1Y3R1cmVz IiwKLQkJCQkJCSAgcmVxdWVzdFNpemUsCi0JCQkJCQkgICZmb3VuZCk7Ci0KLQlNZW1TZXQo cHRyLCAwLCByZXF1ZXN0U2l6ZSk7CisJQXNzZXJ0KHRtcEFsbFByb2NzKTsKKwlwdHIgPSB0 bXBBbGxQcm9jczsKKwlyZXF1ZXN0U2l6ZSA9IFByb2NHbG9iYWxBbGxQcm9jc1NobWVtRGVz Yy5zaXplOworCW1lbXNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsKIAogCXByb2NzID0gKFBH UFJPQyAqKSBwdHI7CiAJcHRyID0gcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0Mp OwpAQCAtMjY4LDIwICsyNzYsMTQgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlmcExvY2tC aXRzU2l6ZSA9IE1BWEFMSUdOKEZhc3RQYXRoTG9ja0dyb3Vwc1BlckJhY2tlbmQgKiBzaXpl b2YodWludDY0KSk7CiAJZnBSZWxJZFNpemUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tTbG90 c1BlckJhY2tlbmQoKSAqIHNpemVvZihPaWQpKTsKIAotCXJlcXVlc3RTaXplID0gRmFzdFBh dGhMb2NrU2htZW1TaXplKCk7Ci0KLQlmcFB0ciA9IFNobWVtSW5pdFN0cnVjdCgiRmFzdC1Q YXRoIExvY2sgQXJyYXkiLAotCQkJCQkJCXJlcXVlc3RTaXplLAotCQkJCQkJCSZmb3VuZCk7 Ci0KLQlNZW1TZXQoZnBQdHIsIDAsIHJlcXVlc3RTaXplKTsKKwlBc3NlcnQodG1wRmFzdFBh dGhMb2NrQXJyYXkpOworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJyYXk7CisJcmVxdWVz dFNpemUgPSBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXplOworCW1lbXNldChmcFB0 ciwgMCwgcmVxdWVzdFNpemUpOwogCiAJLyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlk IG5vdCBvdmVyZmxvdy4gKi8KIAlmcEVuZFB0ciA9IGZwUHRyICsgcmVxdWVzdFNpemU7CiAK LQkvKiBSZXNlcnZlIHNwYWNlIGZvciBzZW1hcGhvcmVzLiAqLwotCVBHUmVzZXJ2ZVNlbWFw aG9yZXMoUHJvY0dsb2JhbFNlbWFzKCkpOwotCiAJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJv Y3M7IGkrKykKIAl7CiAJCVBHUFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv dHJhbnNhbS5oCmluZGV4IDZmYTkxYmZjZGMwLi42ZTVhNTQ2ZjQxMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv dHJhbnNhbS5oCkBAIC0xNSw3ICsxNSw5IEBACiAjZGVmaW5lIFRSQU5TQU1fSAogCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCi0KKyNpZm5kZWYgRlJPTlRFTkQKKyNpbmNsdWRl ICJzdG9yYWdlL3NobWVtLmgiCisjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJ CVNwZWNpYWwgdHJhbnNhY3Rpb24gSUQgdmFsdWVzCkBAIC0zMzAsNyArMzMyLDEwIEBAIFRy YW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoVHJhbnNhY3Rpb25JZCBpZDEsIFRyYW5zYWN0 aW9uSWQgaWQyKQogZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25TdGFydGVkRHVyaW5nUmVjb3Zl cnkodm9pZCk7CiAKIC8qIGluIHRyYW5zYW0vdmFyc3VwLmMgKi8KKyNpZm5kZWYgRlJPTlRF TkQKK2V4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgU2htZW1TdHJ1Y3REZXNjIFRyYW5zYW1W YXJpYWJsZXNTaG1lbURlc2M7CiBleHRlcm4gUEdETExJTVBPUlQgVHJhbnNhbVZhcmlhYmxl c0RhdGEgKlRyYW5zYW1WYXJpYWJsZXM7CisjZW5kaWYKIAogLyoKICAqIHByb3RvdHlwZXMg Zm9yIGZ1bmN0aW9ucyBpbiB0cmFuc2FtL3RyYW5zYW0uYwpAQCAtMzQ1LDggKzM1MCw3IEBA IGV4dGVybiBUcmFuc2FjdGlvbklkIFRyYW5zYWN0aW9uSWRMYXRlc3QoVHJhbnNhY3Rpb25J ZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dSZWNQdHIgVHJhbnNhY3Rpb25JZEdldENvbW1pdExT TihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qIGluIHRyYW5zYW0vdmFyc3VwLmMgKi8KLWV4 dGVybiBTaXplIFZhcnN1cFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFZhcnN1cFNo bWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFZhcnN1cFNobWVtUmVnaXN0ZXIodm9pZCk7 CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0TmV3VHJhbnNhY3Rpb25JZChib29sIGlz U3ViWGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlTmV4dEZ1bGxUcmFuc2FjdGlvbklkUGFz dFhpZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgUmVh ZE5leHRGdWxsVHJhbnNhY3Rpb25JZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdp c3RyeS5oCmluZGV4IDUwNmZhZTJjOWNhLi45YTFiNGQ5ODJhZiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2RzbV9yZWdpc3RyeS5oCkBAIC0yMiw3ICsyMiw2IEBAIGV4dGVybiBkc2FfYXJlYSAq R2V0TmFtZWREU0EoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZm91bmQpOwogZXh0ZXJuIGRz aGFzaF90YWJsZSAqR2V0TmFtZWREU0hhc2goY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJ CWNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJCQkJCQkJCQlib29sICpmb3Vu ZCk7Ci1leHRlcm4gU2l6ZSBEU01SZWdpc3RyeVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2 b2lkIERTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgRFNNUmVnaXN0 cnlTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogRFNNX1JFR0lTVFJZ X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAppbmRleCAyMDZmYjc4ZjhhNS4uN2NkYzQ4 NTIzMzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAgLTY2LDggKzY2LDcgQEAgZXh0 ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIFBNU2lnbmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsK IC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gcG1zaWduYWwuYwogICovCi1l eHRlcm4gU2l6ZSBQTVNpZ25hbFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFBNU2ln bmFsU2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUE1TaWduYWxTaG1lbVJlZ2lzdGVy KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TaWduYWxSZWFz b24gcmVhc29uKTsKIGV4dGVybiBib29sIENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNpZ25h bFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgU2V0UXVpdFNpZ25hbFJlYXNvbihRdWl0 U2lnbmFsUmVhc29uIHJlYXNvbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDNmODk0NTBjMjE2 Li4xZDFlMDg4MWFmMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTU1Miw3ICs1NTIsNyBAQCBl eHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKICAqIEZ1bmN0aW9u IFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIGludAlQcm9jR2xvYmFsU2VtYXModm9pZCk7Ci1l eHRlcm4gU2l6ZSBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgUHJv Y0dsb2JhbFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY0dsb2Jh bCh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRQcm9jZXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQg SW5pdFByb2Nlc3NQaGFzZTIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NhcnJheS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRl eCBjNWFiMTU3NGZlMy4uNTcyNTE2YzRlMjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXku aApAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKIAot ZXh0ZXJuIFNpemUgUHJvY0FycmF5U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJv Y0FycmF5U2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY0FycmF5U2htZW1SZWdp c3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheUFkZChQR1BST0MgKnByb2MpOwog ZXh0ZXJuIHZvaWQgUHJvY0FycmF5UmVtb3ZlKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25J ZCBsYXRlc3RYaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDM0OGZi YTUzYTkzLi5kMjM0NGIxY2JiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9w cm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAg LTYzLDggKzYzLDcgQEAgdHlwZWRlZiBlbnVtCiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVu Y3Rpb25zIGluIHByb2NzaWduYWwuYwogICovCi1leHRlcm4gU2l6ZSBQcm9jU2lnbmFsU2ht ZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKTsK K2V4dGVybiB2b2lkIFByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiBleHRlcm4g dm9pZCBQcm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNhbmNl bF9rZXlfbGVuKTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWduYWwocGlkX3QgcGlkLCBQcm9j U2lnbmFsUmVhc29uIHJlYXNvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFkdC5oCmluZGV4IGEx Njk0NTAwYTg1Li40ZWRiYTI5MzZlNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zaW52YWxhZHQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFkdC5oCkBA IC0yOCw4ICsyOCw3IEBACiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHNp bnZhbGFkdC5jCiAgKi8KLWV4dGVybiBTaXplIFNoYXJlZEludmFsU2htZW1TaXplKHZvaWQp OwotZXh0ZXJuIHZvaWQgU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9p ZCBTaGFyZWRJbnZhbFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBTaGFyZWRJ bnZhbEJhY2tlbmRJbml0KGJvb2wgc2VuZE9ubHkpOwogCiBleHRlcm4gdm9pZCBTSUluc2Vy dERhdGFFbnRyaWVzKGNvbnN0IFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKmRhdGEsIGlu dCBuKTsKLS0gCjIuNDcuMwoK --------------0GENrK1iCkv2OWWU207VI4qz--