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 1w5vQV-003ldS-0z for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2026 00:51:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5vQT-006sPj-2b for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2026 00:51:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5vQT-006sPb-06 for pgsql-hackers@lists.postgresql.org; Fri, 27 Mar 2026 00:51:49 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w5vQK-00000001O2U-2T6c for pgsql-hackers@postgresql.org; Fri, 27 Mar 2026 00:51:49 +0000 Received: from [10.0.2.15] (unknown [137.83.235.84]) (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 lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fhhsw1ZK1z49Q4j; Fri, 27 Mar 2026 02:51:32 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1774572695; 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=zkHyXiEuTw4jereqOmdetA8EW5Oy3lM6PAEjvcAN+N8=; b=PWURmZcTzoB7DynL4uIqNwhIFctVi530znhRRrucJVZ+GWLZrnuYZf6eo4TzlMyUFkCI4D h3vygQUwy2zDkiV+7NdCiv3ilnpz6/bwF0K0oYW+jg0F1K/3Cnnd3BiWjh3VC0iMBI2kts oV0hWT6RyKLr8w3/Wede+DqYzfIAPxa9MKfSTF+6dm978y9/JPzuLXnLYuatU3NohETYcO 03sY4jw3TZ1buYa0T8THtK+S1fVQ1QkgP6EI4qHlrzklv6X5PgQ60DDmIh9Hj+nHg2Rtsd 7d6KyxT1RAiWIqgH75iB958ldaN+t2u3OmlpJq2Y2JiENe0OB3+uv66pw7ssPQ== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1774572695; b=sqLktxFln0BGY5rHj2qE8U3iIi9tmiMnFoQ7oztyFqzsa7JFE90m5onxK5l1N3I09OSFUp cEXbq+D4fFLoD4A3Qw/yx1oryV+MVU3cNfDDerlP/jV0EPelsDbABOtnlnBSuXm6qUqeYc NswFgCEcbBSGfe/hgggOmMwpsplynZzHY+/6P/UBegwpEA9SkHHhP88zOFh2qBF6Gh4bY+ 46RPzPxnPoWFAam6/S0Dc2ck3TrSzQGOKvMs9DiNDfmiVKEz5/AAFv6EDoZYoXgymaLdZn tXwJydRBuhT755mAEUMCfO4M8vtVLL57aAsO3G6CHXseOj7LDmeAotrBo82i7w== 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=lahtoruutu; t=1774572695; 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=zkHyXiEuTw4jereqOmdetA8EW5Oy3lM6PAEjvcAN+N8=; b=GdvOkKFTpXRqNMlwvQfO4n+gy/0YCBc2NasQrdTN5ONIiV6Ng+ZQoPDP0Vtl85A4qPa9cV grFmCxKhlT6uTNZrVle3DT2+TLUqEOFOJ99O7TiEL//oXZnnIUnrRJxky0yarC3cRqwQ/o MFz3sYA7Z3wWCIU+JPubHnVIfySAecG0HNsjpb/1KET3EY77spynNVKWUNre+CdxMD3i87 a53WkAM6Wroi9zEWzHGVIOYDqF2QlB7XVztiOhf6F+XQDT4WS4qfPTpdSCNIBB6hPnZX/J 07xIDLmfp9Bmie1o4JHI+1qAF7K8stj8dmO1ter6k5e4Dmbws4crKunM4FS3jw== Content-Type: multipart/mixed; boundary="------------0TvMQ5YZDW0H8egpRR60Shwk" Message-ID: Date: Fri, 27 Mar 2026 02:51:22 +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: <26c766d6-db0f-43d3-a618-44f8d40a3121@iki.fi> <62b8dc23-8f6a-4cac-91ff-f74bb5bc159a@iki.fi> <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> <113724ab-0028-493f-9605-6e8570f0939f@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. --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 25/03/2026 20:37, Robert Haas wrote: > On Sat, Mar 21, 2026 at 8:14 PM Heikki Linnakangas wrote:>> Shmem callbacks >> --------------- >> >> I separated the request/init/fn callbacks from the structs. There's now >> a concept of "shmem callbacks", which you register in _PG_init(). For >> example: >> >> static void pgss_shmem_request(void *arg); >> static void pgss_shmem_init(void *arg); >> >> static const ShmemCallbacks pgss_shmem_callbacks = { >> .request_fn = pgss_shmem_request, >> .init_fn = pgss_shmem_init, >> .attach_fn = NULL, /* no special attach actions needed */ >> }; > > What's the advantage of coupling the functions together this way, vs. > just registering each callback individually? One reason is to support allocations after postmaster startup. The RegisterShmemCallbacks() call ties together all the resources requested by the request_fn callback, with the the init_fn or attach_fn callbacks that will later initialize/attach them. The init_fn/attach_fn callbacks are called only after *all* the resources requested by the request_fn callback have been initialized, and it holds a lock while doing all that. If the callbacks were registered separately, shmem.c wouldn't know when to call the init_fn/attach_fn. There's no problem during postmaster or backend startup, because we run all init_fn or attach_fn callbacks in the whole system, after requesting all the resources, but after startup, you must only call the callbacks related to the newly-requested resources. Aside from that after-startup allocation issue, though, IMO the ShmemCallbacks struct makes it more clear that the callbacks are meant to work together on the same resources. One way to think of this is that all the resources requested by the request_fn callback are implicitly part of the same "subsystem", and need to be initialized/attached to together. We discussed that before, and I still wonder if we should make that concept of a subsystem more explicit. If we just renamed ShmemCallbacks to ShmemSubsystem, and give each subsystem a name, it'd look like this: static void pgss_shmem_request(void *arg); static void pgss_shmem_init(void *arg); static const ShmemSubsystem pgss_shmem_subsystem = { .name = "pg_stat_statements" .request_fn = pgss_shmem_request, .init_fn = pgss_shmem_init, .attach_fn = NULL, /* no special attach actions needed */ }; static void pgss_shmem_request(void *arg) { ShmemRequestStruct(&pgssSharedStateDesc, &(ShmemRequestStructOpts) { /* * name is optional in this design, subsystem's name is used if * not given */ .name = "pg_stat_statements", .size = sizeof(pgssSharedState), .ptr = (void **) &pgss, }); } static void pgss_shmem_init(void *arg) { /* initialize contents of pgss */ ... } void _PG_init(void) { RegisterShmemSubsystem(&pgss_shmem_subsystem); } Thinking how this might work without such a struct, registering the callbacks separately, here's an alternative design: static void pgss_shmem_request(void *arg); static void pgss_shmem_init(void *arg); static void pgss_shmem_request(void *arg) { ShmemRequestStruct(&pgssSharedStateDesc, &(ShmemRequestStructOpts) { .name = "pg_stat_statements", .size = sizeof(pgssSharedState), .ptr = (void **) &pgss, }); ShmemRegisterInitCallback(&pgss_shmem_init); /* no attach callback needed, but for illustration: */ ShmemRegisterInitCallback(&pgss_shmem_attach); } static void pgss_shmem_init(void *arg) { /* initialize contents of pgss */ ... } void _PG_init(void) { ShmemRegisterRequestCallback(&pgss_shmem_request); } In this design, the ShmemRegisterRequestCallback() call still ties together all the related resources. All the resources requested in the request-callback are initialized together, and the fact that the init/attach callbacks are registered within the request callback associates them with the resources. This feels a little Rube Goldbergian, with one callback registering more callbacks, but would also work. > Also, I don't understand what "arg" is supposed to be doing. It > doesn't seem to be getting used for anything. It's an opaque pointer that's passed through to the callbacks. Some callers might want to pass extra data to the callback. None of the current callers use it, so maybe it's not needed, but it seemed like good future-proofing. >> Shmem requests >> -------------- >> >> To register a shmem area, you call ShmemRequestStruct() or >> ShmmeRequestHash() from the request callback function. For example: >> >> static void >> pgss_shmem_request(void *arg) >> { >> static ShmemHashDesc pgssSharedHashDesc = { >> .name = "pg_stat_statements hash", >> .ptr = &pgss_hash, >> .hash_info.keysize = sizeof(pgssHashKey), >> .hash_info.entrysize = sizeof(pgssEntry), >> .hash_flags = HASH_ELEM | HASH_BLOBS, >> }; >> static ShmemStructDesc pgssSharedStateDesc = { >> .name = "pg_stat_statements", >> .size = sizeof(pgssSharedState), >> .ptr = (void **) &pgss, >> }; >> >> pgssSharedHashDesc.init_size = pgss_max; >> pgssSharedHashDesc.max_size = pgss_max; >> ShmemRequestHash(&pgssSharedHashDesc); >> ShmemRequestStruct(&pgssSharedStateDesc); >> } >> >> Initialization happens in the init callback, which is called after all >> the pointers (pgss, pgss_hash) have been set. > > I think this is not bad. I suppose it lets you get a complete list of > all of the descriptors someplace. It seems to avoid double-computing > the request size, or any possibility of drift between the requested > size and the allocated size. Having to create the struct and then set > the size afterward in some cases is a tiny bit awkward-looking, but > it's not awful. I do wonder if some coding pattern might creep in > where people create the struct and register it and then try to change > the size, or other fields, afterward. I'm tempted to propose making > the struct non-static and having the registration functions copy it, > so that there can be absolutely no question of getting away with such > antisocial behavior. Here's another version, where that now looks like this: static void pgss_shmem_request(void *arg) { static ShmemHashDesc pgssSharedHashDesc; static ShmemStructDesc pgssSharedStateDesc; ShmemRequestHash(&pgssSharedHashDesc, &(ShmemRequestHashOpts) { .name = "pg_stat_statements hash", .ptr = &pgss_hash, .init_size = pgss_max, .max_size = pgss_max, .hash_info.keysize = sizeof(pgssHashKey), .hash_info.entrysize = sizeof(pgssEntry), .hash_flags = HASH_ELEM | HASH_BLOBS, }); ShmemRequestStruct(&pgssSharedStateDesc, &(ShmemRequestStructOpts) { .name = "pg_stat_statements", .size = sizeof(pgssSharedState), .ptr = (void **) &pgss, }); } Notable differences to that since last version: I separated the backend-private "handle" and the options structs. So ShmemRequestStruct/Hash now takes two arguments: The first argument is a pointer to the "descriptor", which is a backend-private handle for the shared memory area. It's currently not very interesting for plain structs because you can't really do anything with it, but in the future the handle could be used to resize the area for example. Also, one of the later patches in this patch set refactors SLRUs to be requested in this fashion too. For SLRUs the handle is already useful; SLRUs have always had a backend-private "SlruCtl" handle like that. The second argument is an "options" struct, which is really just syntactic sugar to pass multiple arguments, some of which can be left empty. The options are now copied, so the struct can be short-lived. Alternatively, the arguments could be passed as normal function arguments like you suggested earlier. But I quite like this style, especially with hash tables and SLRUs which take more options and already used structs to pass the options. There's one annoying problem with that syntax though: pgindent doesn't like it and gives errors like this: Failure in contrib/pg_stat_statements/pg_stat_statements.c: Error@508: Unbalanced parens Warning@516: Extra ) Error@517: Unbalanced parens Warning@521: Extra ) That would be nice to fix in pgindent in any case but I haven't looked into it yet. Another idea is to use a macro to hide that from pgindent, which would make the calls little less verbose anyway: #define ShmemRequestStruct(desc, ...) ShmemRequestStructWithOpts(desc, &(ShmemRequestStructOpts) { __VA_ARGS__ }) Then the call would be simply: ShmemRequestStruct(&pgssSharedStateDesc, .name = "pg_stat_statements", .size = sizeof(pgssSharedState), .ptr = (void **) &pgss, ); New version attached. I also pushed this to https://github.com/hlinnaka/postgres/tree/shmem-init-refactor-8. - Heikki --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Disposition: attachment; filename*0="v8-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Transfer-Encoding: base64 RnJvbSA0YjkwNmYyMmJjZWYzMTY1MDg2ZWVjMDRlMzg0NTlkZDZhNTQ5MzUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgTWFyIDIwMjYgMDE6NDU6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDAxLzE2XSBUZXN0IHBnX3N0YXRfc3RhdGVtZW50cyBhY3Jv c3MgY3Jhc2ggcmVzdGFydAoKQWRkICdwZ19zdGF0X3N0YXRlbWVudHMnIHRvIHRoZSBjcmFz aCByZXN0YXJ0IHRlc3QsIHRvIHRlc3QgdGhhdApzaGFyZWQgbWVtb3J5IGFuZCBMV0xvY2sg aW5pdGlhbGl6YXRpb24gd29ya3MgYWNyb3NzIGNyYXNoIHJlc3RhcnQgaW4KYSBsaWJyYXJ5 IGxpc3RlZCBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMuCgpSZXZpZXdlZC1ieTogQXNo dXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+CkRpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FFeEhXNXZNMWJuZUxZ Zmcwd0dlQWE9NTJVaUozejR2S2QzQUo3Mlg4Rnc2azNLS3JnQG1haWwuZ21haWwuY29tCi0t LQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTNfY3Jhc2hfcmVzdGFydC5wbCB8IDMzICsrKysr KysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTNf Y3Jhc2hfcmVzdGFydC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEzX2NyYXNoX3Jlc3Rh cnQucGwKaW5kZXggMjBkNjQ4YWQ2YWYuLjU2YWZiMWFhNmViIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS90LzAxM19jcmFzaF9yZXN0YXJ0LnBsCisrKyBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDEzX2NyYXNoX3Jlc3RhcnQucGwKQEAgLTIxLDE0ICsyMSwzMiBAQCBteSAk cHNxbF90aW1lb3V0ID0gSVBDOjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGltZW91dF9kZWZhdWx0KTsKIAogbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKICRub2RlLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gMSk7CisKKyMgRW5hYmxlIHBnX3N0YXRfc3RhdGVtZW50cyB0byB0ZXN0IHJlc3RhcnQg b2Ygc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorJG5vZGUtPmFwcGVuZF9jb25mKAorCSdw b3N0Z3Jlc3FsLmNvbmYnLAorCXFxe3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICdwZ19z dGF0X3N0YXRlbWVudHMnCitwZ19zdGF0X3N0YXRlbWVudHMubWF4ID0gNTAwMDAKK2NvbXB1 dGVfcXVlcnlfaWQgPSAncmVncmVzcycKK30pOworCiAkbm9kZS0+c3RhcnQoKTsKIAogIyBi eSBkZWZhdWx0IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIgZG9lc24ndCByZXN0YXJ0IGFm dGVyIGEgY3Jhc2gKICRub2RlLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywKLQlxW0FMVEVS IFNZU1RFTSBTRVQgcmVzdGFydF9hZnRlcl9jcmFzaCA9IDE7Ci0JCQkJICAgQUxURVIgU1lT VEVNIFNFVCBsb2dfY29ubmVjdGlvbnMgPSByZWNlaXB0OwotCQkJCSAgIFNFTEVDVCBwZ19y ZWxvYWRfY29uZigpO10pOworCSdwb3N0Z3JlcycsIHFbCisJCUFMVEVSIFNZU1RFTSBTRVQg cmVzdGFydF9hZnRlcl9jcmFzaCA9IDE7CisJCUFMVEVSIFNZU1RFTSBTRVQgbG9nX2Nvbm5l Y3Rpb25zID0gcmVjZWlwdDsKKwkJU0VMRUNUIHBnX3JlbG9hZF9jb25mKCk7CisJXSk7CisK KyMgUmVtZW1iZXIgdGhlIHRpbWUgdGhhdCBwZ19zdGF0X3N0YXRlbWVudHMgd2FzIHJlc2V0 LiBXZSdsbCB1c2UgaXQgbGF0ZXIgdG8KKyMgdmVyaWZ5IHRoYXQgaXQgZ2V0cyByZS1pbml0 aWFsaXplZCBhZnRlciBjcmFzaC4KK215ICRzdGF0c19yZXNldCA9ICRub2RlLT5zYWZlX3Bz cWwoCisJJ3Bvc3RncmVzJywgcVsKKwkJQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRl bWVudHM7CisJCVNFTEVDVCBzdGF0c19yZXNldCBGUk9NIHBnX3N0YXRfc3RhdGVtZW50c19p bmZvOworCV0pOwogCiAjIFJ1biBwc3FsLCBrZWVwaW5nIHNlc3Npb24gYWxpdmUsIHNvIHdl IGhhdmUgYW4gYWxpdmUgYmFja2VuZCB0byBraWxsLgogbXkgKCRraWxsbWVfc3RkaW4sICRr aWxsbWVfc3Rkb3V0LCAka2lsbG1lX3N0ZGVycikgPSAoJycsICcnLCAnJyk7CkBAIC0xNDEs NiArMTU5LDEzIEBAICRraWxsbWUtPnJ1bigpOwogKCRtb25pdG9yX3N0ZGluLCAkbW9uaXRv cl9zdGRvdXQsICRtb25pdG9yX3N0ZGVycikgPSAoJycsICcnLCAnJyk7CiAkbW9uaXRvci0+ cnVuKCk7CiAKKyMgVmVyaWZ5IHRoYXQgcGdfc3RhdF9zdGF0ZW1lbnRzLCBsb2FkZWQgdmlh IHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcywKKyMgd2FzIHJlLWluaXRpYWxpemVkIGF0IHRo ZSBjcmFzaC4KK215ICRzdGF0c19yZXNldF9hZnRlciA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwlxW1NFTEVDVCBzdGF0c19yZXNldCBGUk9NIHBnX3N0YXRfc3RhdGVtZW50 c19pbmZvXSk7CitjbXBfb2soJHN0YXRzX3Jlc2V0LCAnbmUnLCAkc3RhdHNfcmVzZXRfYWZ0 ZXIsCisJInBnX3N0YXRfc3RhdGVtZW50cyB3YXMgcmVzZXQgYnkgcmVzdGFydCIpOworCiAK ICMgQWNxdWlyZSBwaWQgb2YgbmV3IGJhY2tlbmQKICRraWxsbWVfc3RkaW4gLj0gcVsKLS0g CjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0002-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Disposition: attachment; filename*0="v8-0002-refactor-Move-ShmemInitHash-to-separate-file.patch" Content-Transfer-Encoding: base64 RnJvbSA1YmRjNGRiODNmNWZlYzhhNjVmMTAxZDBjMGFhMGQ4ZjRjZTFhMzJkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTM6MDc6MjggKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDAyLzE2XSByZWZhY3RvcjogTW92ZSBTaG1lbUluaXRIYXNo IHRvIHNlcGFyYXRlIGZpbGUKCkluIHByZXBhcmF0aW9uIGZvciBuZXh0IGNvbW1pdHMKLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZSAgICAgfCAgMSArCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZCAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbS5jICAgICAgfCA2NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYyB8IDg1ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgODcgaW5zZXJ0aW9ucygrKSwgNjYgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c2htZW1faGFzaC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFr ZWZpbGUgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZQppbmRleCA5YTA3ZjZl MWQ5Mi4uZjcxNjUzYmJlNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2VmaWxlCkBAIC0y Miw2ICsyMiw3IEBAIE9CSlMgPSBcCiAJc2htX21xLm8gXAogCXNobV90b2MubyBcCiAJc2ht ZW0ubyBcCisJc2htZW1faGFzaC5vIFwKIAlzaWduYWxmdW5jcy5vIFwKIAlzaW52YWwubyBc CiAJc2ludmFsYWR0Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv bWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZAppbmRl eCA5YzFjYTk1NGQ5ZC4uYjhjMzFlMjk5NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL21l c29uLmJ1aWxkCkBAIC0xNCw2ICsxNCw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygK ICAgJ3NobV9tcS5jJywKICAgJ3NobV90b2MuYycsCiAgICdzaG1lbS5jJywKKyAgJ3NobWVt X2hhc2guYycsCiAgICdzaWduYWxmdW5jcy5jJywKICAgJ3NpbnZhbC5jJywKICAgJ3NpbnZh bGFkdC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDNjYzM4NDUwOTQ5Li5j ODZkNjkxZGNmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0u YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC0yOTQsNzIgKzI5 NCw2IEBAIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRkcikKIAlyZXR1cm4gKGFk ZHIgPj0gU2htZW1CYXNlKSAmJiAoYWRkciA8IFNobWVtRW5kKTsKIH0KIAotLyoKLSAqIFNo bWVtSW5pdEhhc2ggLS0gQ3JlYXRlIGFuZCBpbml0aWFsaXplLCBvciBhdHRhY2ggdG8sIGEK LSAqCQlzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuCi0gKgotICogV2UgYXNzdW1lIGNhbGxl ciBpcyBkb2luZyBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uCi0gKiBzbyB0aGF0IHR3 byBwcm9jZXNzZXMgZG9uJ3QgdHJ5IHRvIGNyZWF0ZS9pbml0aWFsaXplIHRoZSBzYW1lCi0g KiB0YWJsZSBhdCBvbmNlLiAgKEluIHByYWN0aWNlLCBhbGwgY3JlYXRpb25zIGFyZSBkb25l IGluIHRoZSBwb3N0bWFzdGVyCi0gKiBwcm9jZXNzOyBjaGlsZCBwcm9jZXNzZXMgc2hvdWxk IGFsd2F5cyBiZSBhdHRhY2hpbmcgdG8gZXhpc3RpbmcgdGFibGVzLikKLSAqCi0gKiBtYXhf c2l6ZSBpcyB0aGUgZXN0aW1hdGVkIG1heGltdW0gbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRy aWVzLiAgVGhpcyBpcwotICogbm90IGEgaGFyZCBsaW1pdCwgYnV0IHRoZSBhY2Nlc3MgZWZm aWNpZW5jeSB3aWxsIGRlZ3JhZGUgaWYgaXQgaXMKLSAqIGV4Y2VlZGVkIHN1YnN0YW50aWFs bHkgKHNpbmNlIGl0J3MgdXNlZCB0byBjb21wdXRlIGRpcmVjdG9yeSBzaXplIGFuZAotICog dGhlIGhhc2ggdGFibGUgYnVja2V0cyB3aWxsIGdldCBvdmVyZnVsbCkuCi0gKgotICogaW5p dF9zaXplIGlzIHRoZSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMgdG8gcHJlYWxsb2Nh dGUuICBGb3IgYSB0YWJsZQotICogd2hvc2UgbWF4aW11bSBzaXplIGlzIGNlcnRhaW4sIHRo aXMgc2hvdWxkIGJlIGVxdWFsIHRvIG1heF9zaXplOyB0aGF0Ci0gKiBlbnN1cmVzIHRoYXQg bm8gcnVuLXRpbWUgb3V0LW9mLXNoYXJlZC1tZW1vcnkgZmFpbHVyZXMgY2FuIG9jY3VyLgot ICoKLSAqICppbmZvUCBhbmQgaGFzaF9mbGFncyBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdGhl IGVudHJ5IHNpemVzIGFuZCBrZXkKLSAqIGNvbXBhcmlzb24gc2VtYW50aWNzIChzZWUgaGFz aF9jcmVhdGUoKSkuICBGbGFnIGJpdHMgYW5kIHZhbHVlcyBzcGVjaWZpYwotICogdG8gc2hh cmVkLW1lbW9yeSBoYXNoIHRhYmxlcyBhcmUgYWRkZWQgaGVyZSwgZXhjZXB0IHRoYXQgY2Fs bGVycyBtYXkKLSAqIGNob29zZSB0byBzcGVjaWZ5IEhBU0hfUEFSVElUSU9OIGFuZC9vciBI QVNIX0ZJWEVEX1NJWkUuCi0gKgotICogTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwgdGhp cyBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAqIGNhc2VzLiAg Tm93LCBpdCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVlZCBu b3QgY2hlY2sKLSAqIGZvciBOVUxMLgotICovCi1IVEFCICoKLVNobWVtSW5pdEhhc2goY29u c3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRleCAq LwotCQkJICBpbnQ2NCBpbml0X3NpemUsCS8qIGluaXRpYWwgdGFibGUgc2l6ZSAqLwotCQkJ ICBpbnQ2NCBtYXhfc2l6ZSwJLyogbWF4IHNpemUgb2YgdGhlIHRhYmxlICovCi0JCQkgIEhB U0hDVEwgKmluZm9QLAkvKiBpbmZvIGFib3V0IGtleSBhbmQgYnVja2V0IHNpemUgKi8KLQkJ CSAgaW50IGhhc2hfZmxhZ3MpCS8qIGluZm8gYWJvdXQgaW5mb1AgKi8KLXsKLQlib29sCQlm b3VuZDsKLQl2b2lkCSAgICpsb2NhdGlvbjsKLQotCS8qCi0JICogSGFzaCB0YWJsZXMgYWxs b2NhdGVkIGluIHNoYXJlZCBtZW1vcnkgaGF2ZSBhIGZpeGVkIGRpcmVjdG9yeTsgaXQgY2Fu J3QKLQkgKiBncm93IG9yIG90aGVyIGJhY2tlbmRzIHdvdWxkbid0IGJlIGFibGUgdG8gZmlu ZCBpdC4gU28sIG1ha2Ugc3VyZSB3ZQotCSAqIG1ha2UgaXQgYmlnIGVub3VnaCB0byBzdGFy dCB3aXRoLgotCSAqCi0JICogVGhlIHNoYXJlZCBtZW1vcnkgYWxsb2NhdG9yIG11c3QgYmUg c3BlY2lmaWVkIHRvby4KLQkgKi8KLQlpbmZvUC0+ZHNpemUgPSBpbmZvUC0+bWF4X2RzaXpl ID0gaGFzaF9zZWxlY3RfZGlyc2l6ZShtYXhfc2l6ZSk7Ci0JaW5mb1AtPmFsbG9jID0gU2ht ZW1BbGxvY05vRXJyb3I7Ci0JaGFzaF9mbGFncyB8PSBIQVNIX1NIQVJFRF9NRU0gfCBIQVNI X0FMTE9DIHwgSEFTSF9ESVJTSVpFOwotCi0JLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0g aW5kZXggKi8KLQlsb2NhdGlvbiA9IFNobWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCSAg IGhhc2hfZ2V0X3NoYXJlZF9zaXplKGluZm9QLCBoYXNoX2ZsYWdzKSwKLQkJCQkJCQkgICAm Zm91bmQpOwotCi0JLyoKLQkgKiBpZiBpdCBhbHJlYWR5IGV4aXN0cywgYXR0YWNoIHRvIGl0 IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplCi0JICogbmV3IHNwYWNlCi0J ICovCi0JaWYgKGZvdW5kKQotCQloYXNoX2ZsYWdzIHw9IEhBU0hfQVRUQUNIOwotCi0JLyog UGFzcyBsb2NhdGlvbiBvZiBoYXNodGFibGUgaGVhZGVyIHRvIGhhc2hfY3JlYXRlICovCi0J aW5mb1AtPmhjdGwgPSAoSEFTSEhEUiAqKSBsb2NhdGlvbjsKLQotCXJldHVybiBoYXNoX2Ny ZWF0ZShuYW1lLCBpbml0X3NpemUsIGluZm9QLCBoYXNoX2ZsYWdzKTsKLX0KLQogLyoKICAq IFNobWVtSW5pdFN0cnVjdCAtLSBDcmVhdGUvYXR0YWNoIHRvIGEgc3RydWN0dXJlIGluIHNo YXJlZCBtZW1vcnkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c2htZW1faGFzaC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW1faGFzaC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMGM4ZDU5MzlhMAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYwpA QCAtMCwwICsxLDg1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzaG1lbV9o YXNoLmMKKyAqCSAgWFhYCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaG1lbV9oYXNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIK KworCisvKgorICogU2htZW1Jbml0SGFzaCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9y IGF0dGFjaCB0bywgYQorICoJCXNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KKyAqCisgKiBX ZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5nIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24K KyAqIHNvIHRoYXQgdHdvIHByb2Nlc3NlcyBkb24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxp emUgdGhlIHNhbWUKKyAqIHRhYmxlIGF0IG9uY2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVh dGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBvc3RtYXN0ZXIKKyAqIHByb2Nlc3M7IGNoaWxkIHBy b2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJlIGF0dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMu KQorICoKKyAqIG1heF9zaXplIGlzIHRoZSBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2Yg aGFzaHRhYmxlIGVudHJpZXMuICBUaGlzIGlzCisgKiBub3QgYSBoYXJkIGxpbWl0LCBidXQg dGhlIGFjY2VzcyBlZmZpY2llbmN5IHdpbGwgZGVncmFkZSBpZiBpdCBpcworICogZXhjZWVk ZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5 IHNpemUgYW5kCisgKiB0aGUgaGFzaCB0YWJsZSBidWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxs KS4KKyAqCisgKiBpbml0X3NpemUgaXMgdGhlIG51bWJlciBvZiBoYXNodGFibGUgZW50cmll cyB0byBwcmVhbGxvY2F0ZS4gIEZvciBhIHRhYmxlCisgKiB3aG9zZSBtYXhpbXVtIHNpemUg aXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUgZXF1YWwgdG8gbWF4X3NpemU7IHRoYXQKKyAq IGVuc3VyZXMgdGhhdCBubyBydW4tdGltZSBvdXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJl cyBjYW4gb2NjdXIuCisgKgorICogKmluZm9QIGFuZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lm eSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtleQorICogY29tcGFyaXNvbiBzZW1h bnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcgYml0cyBhbmQgdmFsdWVzIHNwZWNp ZmljCisgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2ggdGFibGVzIGFyZSBhZGRlZCBoZXJlLCBl eGNlcHQgdGhhdCBjYWxsZXJzIG1heQorICogY2hvb3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJU SVRJT04gYW5kL29yIEhBU0hfRklYRURfU0laRS4KKyAqCisgKiBOb3RlOiBiZWZvcmUgUG9z dGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwgZm9yIHNvbWUgZmFpbHVy ZQorICogY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0aHJvd3MgZXJyb3IgaW5zdGVhZCwgc28g Y2FsbGVycyBuZWVkIG5vdCBjaGVjaworICogZm9yIE5VTEwuCisgKi8KK0hUQUIgKgorU2ht ZW1Jbml0SGFzaChjb25zdCBjaGFyICpuYW1lLAkJLyogdGFibGUgc3RyaW5nIG5hbWUgZm9y IHNobWVtIGluZGV4ICovCisJCQkgIGludDY0IGluaXRfc2l6ZSwJLyogaW5pdGlhbCB0YWJs ZSBzaXplICovCisJCQkgIGludDY0IG1heF9zaXplLAkvKiBtYXggc2l6ZSBvZiB0aGUgdGFi bGUgKi8KKwkJCSAgSEFTSENUTCAqaW5mb1AsCS8qIGluZm8gYWJvdXQga2V5IGFuZCBidWNr ZXQgc2l6ZSAqLworCQkJICBpbnQgaGFzaF9mbGFncykJLyogaW5mbyBhYm91dCBpbmZvUCAq LworeworCWJvb2wJCWZvdW5kOworCXZvaWQJICAgKmxvY2F0aW9uOworCisJLyoKKwkgKiBI YXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hhcmVkIG1lbW9yeSBoYXZlIGEgZml4ZWQgZGly ZWN0b3J5OyBpdCBjYW4ndAorCSAqIGdyb3cgb3Igb3RoZXIgYmFja2VuZHMgd291bGRuJ3Qg YmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFrZSBzdXJlIHdlCisJICogbWFrZSBpdCBiaWcg ZW5vdWdoIHRvIHN0YXJ0IHdpdGguCisJICoKKwkgKiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxv Y2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9vLgorCSAqLworCWluZm9QLT5kc2l6ZSA9IGlu Zm9QLT5tYXhfZHNpemUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKG1heF9zaXplKTsKKwlpbmZv UC0+YWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsKKwloYXNoX2ZsYWdzIHw9IEhBU0hfU0hB UkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CisKKwkvKiBsb29rIGl0IHVw IGluIHRoZSBzaG1lbSBpbmRleCAqLworCWxvY2F0aW9uID0gU2htZW1Jbml0U3RydWN0KG5h bWUsCisJCQkJCQkJICAgaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhhc2hfZmxhZ3Mp LAorCQkJCQkJCSAgICZmb3VuZCk7CisKKwkvKgorCSAqIGlmIGl0IGFscmVhZHkgZXhpc3Rz LCBhdHRhY2ggdG8gaXQgcmF0aGVyIHRoYW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKKwkg KiBuZXcgc3BhY2UKKwkgKi8KKwlpZiAoZm91bmQpCisJCWhhc2hfZmxhZ3MgfD0gSEFTSF9B VFRBQ0g7CisKKwkvKiBQYXNzIGxvY2F0aW9uIG9mIGhhc2h0YWJsZSBoZWFkZXIgdG8gaGFz aF9jcmVhdGUgKi8KKwlpbmZvUC0+aGN0bCA9IChIQVNISERSICopIGxvY2F0aW9uOworCisJ cmV0dXJuIGhhc2hfY3JlYXRlKG5hbWUsIGluaXRfc2l6ZSwgaW5mb1AsIGhhc2hfZmxhZ3Mp OworfQotLSAKMi40Ny4zCgo= --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0003-refactor-predicate.c-inline-SerialInit-to-the-cal.patch" Content-Disposition: attachment; filename*0="v8-0003-refactor-predicate.c-inline-SerialInit-to-the-cal.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxMTAxOTdmN2U4NjJlZTdmZDg4NTczYzk2OGQ0ODgxZTFmYTNmMTExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMTc6MjE6MzAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDAzLzE2XSByZWZhY3RvciBwcmVkaWNhdGUuYzogaW5saW5l IFNlcmlhbEluaXQgdG8gdGhlCiBjYWxsZXIKClRoZSBTaG1lbUluaXQgZnVuY3Rpb24gaXMg dmVyeSBjb21wbGljYXRlZCBjdXJyZW50bHkuIFRoZXNlCnJlZmFjdG9yaW5ncyBtb3ZlIGl0 IGluIGEgZGlyZWN0aW9uIHRoYXQgaXMgbW9yZSBuYXR1cmFsIHdpdGggdGhlIG5ldwpzaG1l bSBjYWxsYmFja3MuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5j IHwgNzMgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI5 IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYwppbmRleCBlZGFiYmY0Y2EzMS4uMjc2ODJmNDE2ZTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTQ0NCw3ICs0NDQsNiBAQCBzdGF0 aWMgdm9pZCBGbGFnU3hhY3RVbnNhZmUoU0VSSUFMSVpBQkxFWEFDVCAqc3hhY3QpOwogCiBz dGF0aWMgYm9vbCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaW50NjQgcGFnZTEsIGlu dDY0IHBhZ2UyKTsKIHN0YXRpYyBpbnQJc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3Io Y29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwotc3RhdGljIHZvaWQgU2VyaWFsSW5pdCh2b2lk KTsKIHN0YXRpYyB2b2lkIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0 U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObyk7CiBzdGF0aWMgU2VyQ29tbWl0U2VxTm8g U2VyaWFsR2V0TWluQ29uZmxpY3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCk7CiBz dGF0aWMgdm9pZCBTZXJpYWxTZXRBY3RpdmVTZXJYbWluKFRyYW5zYWN0aW9uSWQgeGlkKTsK QEAgLTgwOSw0OCArODA4LDYgQEAgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRl c3RzKHZvaWQpCiB9CiAjZW5kaWYKIAotLyoKLSAqIEluaXRpYWxpemUgZm9yIHRoZSB0cmFj a2luZyBvZiBvbGQgc2VyaWFsaXphYmxlIGNvbW1pdHRlZCB4aWRzLgotICovCi1zdGF0aWMg dm9pZAotU2VyaWFsSW5pdCh2b2lkKQotewotCWJvb2wJCWZvdW5kOwotCi0JLyoKLQkgKiBT ZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0YS4KLQkgKi8KLQlT ZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2Fs bHk7Ci0JU2VyaWFsU2xydUN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHNlcmlhbF9l cnJkZXRhaWxfZm9yX2lvX2Vycm9yOwotCVNpbXBsZUxydUluaXQoU2VyaWFsU2xydUN0bCwg InNlcmlhbGl6YWJsZSIsCi0JCQkJICBzZXJpYWxpemFibGVfYnVmZmVycywgMCwgInBnX3Nl cmlhbCIsCi0JCQkJICBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwgTFdUUkFOQ0hFX1NFUklB TF9TTFJVLAotCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUsIGZhbHNlKTsKLSNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCi0JU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3Rz KCk7Ci0jZW5kaWYKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFNscnVDdGws IFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7Ci0KLQkvKgotCSAqIENyZWF0ZSBvciBhdHRhY2gg dG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgotCSAqLwotCXNlcmlhbENvbnRyb2wg PSAoU2VyaWFsQ29udHJvbCkKLQkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxDb250cm9sRGF0 YSIsIHNpemVvZihTZXJpYWxDb250cm9sRGF0YSksICZmb3VuZCk7Ci0KLQlBc3NlcnQoZm91 bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIpOwotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkg KiBTZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byByZWZsZWN0IGVtcHR5IFNMUlUuCi0JCSAq LwotCQlMV0xvY2tBY3F1aXJlKFNlcmlhbENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwot CQlzZXJpYWxDb250cm9sLT5oZWFkUGFnZSA9IC0xOwotCQlzZXJpYWxDb250cm9sLT5oZWFk WGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJTFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9s TG9jayk7Ci0JfQotfQotCiAvKgogICogR1VDIGNoZWNrX2hvb2sgZm9yIHNlcmlhbGl6YWJs ZV9idWZmZXJzCiAgKi8KQEAgLTEzNTgsNyArMTMxNSwzNSBAQCBQcmVkaWNhdGVMb2NrU2ht ZW1Jbml0KHZvaWQpCiAJICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBzdG9yYWdlIGZvciBvbGQg Y29tbWl0dGVkIHNlcmlhbGl6YWJsZQogCSAqIHRyYW5zYWN0aW9ucy4KIAkgKi8KLQlTZXJp YWxJbml0KCk7CisJU2VyaWFsU2xydUN0bC0+UGFnZVByZWNlZGVzID0gU2VyaWFsUGFnZVBy ZWNlZGVzTG9naWNhbGx5OworCVNlcmlhbFNscnVDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJy b3IgPSBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKKwlTaW1wbGVMcnVJbml0KFNl cmlhbFNscnVDdGwsICJzZXJpYWxpemFibGUiLAorCQkJCSAgc2VyaWFsaXphYmxlX2J1ZmZl cnMsIDAsICJwZ19zZXJpYWwiLAorCQkJCSAgTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIsIExX VFJBTkNIRV9TRVJJQUxfU0xSVSwKKwkJCQkgIFNZTkNfSEFORExFUl9OT05FLCBmYWxzZSk7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCVNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2lj YWxseVVuaXRUZXN0cygpOworI2VuZGlmCisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhT ZXJpYWxTbHJ1Q3RsLCBTRVJJQUxfRU5UUklFU1BFUlBBR0UpOworCisJLyoKKwkgKiBDcmVh dGUgb3IgYXR0YWNoIHRvIHRoZSBTZXJpYWxDb250cm9sIHN0cnVjdHVyZS4KKwkgKi8KKwlz ZXJpYWxDb250cm9sID0gKFNlcmlhbENvbnRyb2wpCisJCVNobWVtSW5pdFN0cnVjdCgiU2Vy aWFsQ29udHJvbERhdGEiLCBzaXplb2YoU2VyaWFsQ29udHJvbERhdGEpLCAmZm91bmQpOwor CisJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKKwlpZiAoIWZvdW5kKQor CXsKKwkJLyoKKwkJICogU2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCBlbXB0 eSBTTFJVLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShTZXJpYWxDb250cm9sTG9jaywgTFdf RVhDTFVTSVZFKTsKKwkJc2VyaWFsQ29udHJvbC0+aGVhZFBhZ2UgPSAtMTsKKwkJc2VyaWFs Q29udHJvbC0+aGVhZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlzZXJpYWxDb250 cm9sLT50YWlsWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCUxXTG9ja1JlbGVhc2Uo U2VyaWFsQ29udHJvbExvY2spOworCX0KIH0KIAogLyoKLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0004-refactor-predicate.c-Use-separate-variables-for-d.patch" Content-Disposition: attachment; filename*0="v8-0004-refactor-predicate.c-Use-separate-variables-for-d.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZjQyYjM0YTMxZmQxYjNkNzljZTdhNmU2MzkwYzI4NGZhMjc4OWQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTU6Mjk6NTMgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA0LzE2XSByZWZhY3RvciBwcmVkaWNhdGUuYzogVXNlIHNl cGFyYXRlIHZhcmlhYmxlcyBmb3IKIGRpZmZlcmVudCBzaXplcyBmb3IgY2xhcml0eQoKVGhl IFNobWVtSW5pdCBmdW5jdGlvbiBpcyB2ZXJ5IGNvbXBsaWNhdGVkIGN1cnJlbnRseS4gVGhl c2UKcmVmYWN0b3JpbmdzIG1vdmUgaXQgaW4gYSBkaXJlY3Rpb24gdGhhdCBpcyBtb3JlIG5h dHVyYWwgd2l0aCB0aGUgbmV3CnNobWVtIGNhbGxiYWNrcy4KLS0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgfCA2OCArKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDI3NjgyZjQxNmU3 Li40MDk1MGVlM2E0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpA QCAtMTExMyw3ICsxMTEzLDEwIEBAIHZvaWQKIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9p ZCkKIHsKIAlIQVNIQ1RMCQlpbmZvOwotCWludDY0CQltYXhfdGFibGVfc2l6ZTsKKwlpbnQ2 NAkJbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHM7CisJaW50NjQJCW1heF9wcmVkaWNhdGVf bG9ja3M7CisJaW50NjQJCW1heF9zZXJpYWxpemFibGVfeGFjdHM7CisJaW50NjQJCW1heF9y d19jb25mbGljdHM7CiAJU2l6ZQkJcmVxdWVzdFNpemU7CiAJYm9vbAkJZm91bmQ7CiAKQEAg LTExMjUsNyArMTEyOCw3IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkgKiBD b21wdXRlIHNpemUgb2YgcHJlZGljYXRlIGxvY2sgdGFyZ2V0IGhhc2h0YWJsZS4gTm90ZSB0 aGVzZQogCSAqIGNhbGN1bGF0aW9ucyBtdXN0IGFncmVlIHdpdGggUHJlZGljYXRlTG9ja1No bWVtU2l6ZSEKIAkgKi8KLQltYXhfdGFibGVfc2l6ZSA9IE5QUkVESUNBVEVMT0NLVEFSR0VU RU5UUygpOworCW1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzID0gTlBSRURJQ0FURUxPQ0tU QVJHRVRFTlRTKCk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFBSRURJ Q0FURUxPQ0tUQVJHRVQgc3RydWN0cy4gIFRoaXMgc3RvcmVzCkBAIC0xMTM2LDggKzExMzks OCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJaW5mby5udW1fcGFydGl0aW9u cyA9IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlM7CiAKIAlQcmVkaWNhdGVMb2NrVGFy Z2V0SGFzaCA9IFNobWVtSW5pdEhhc2goIlBSRURJQ0FURUxPQ0tUQVJHRVQgaGFzaCIsCi0J CQkJCQkJCQkJCW1heF90YWJsZV9zaXplLAotCQkJCQkJCQkJCQltYXhfdGFibGVfc2l6ZSwK KwkJCQkJCQkJCQkJbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMsCisJCQkJCQkJCQkJCW1h eF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAogCQkJCQkJCQkJCQkmaW5mbywKIAkJCQkJCQkJ CQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8CiAJCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9O IHwgSEFTSF9GSVhFRF9TSVpFKTsKQEAgLTExNjksMTEgKzExNzIsMTEgQEAgUHJlZGljYXRl TG9ja1NobWVtSW5pdCh2b2lkKQogCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fUFJFRElD QVRFTE9DS19QQVJUSVRJT05TOwogCiAJLyogQXNzdW1lIGFuIGF2ZXJhZ2Ugb2YgMiB4YWN0 cyBwZXIgdGFyZ2V0ICovCi0JbWF4X3RhYmxlX3NpemUgKj0gMjsKKwltYXhfcHJlZGljYXRl X2xvY2tzID0gbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMgKiAyOwogCiAJUHJlZGljYXRl TG9ja0hhc2ggPSBTaG1lbUluaXRIYXNoKCJQUkVESUNBVEVMT0NLIGhhc2giLAotCQkJCQkJ CQkJICBtYXhfdGFibGVfc2l6ZSwKLQkJCQkJCQkJCSAgbWF4X3RhYmxlX3NpemUsCisJCQkJ CQkJCQkgIG1heF9wcmVkaWNhdGVfbG9ja3MsCisJCQkJCQkJCQkgIG1heF9wcmVkaWNhdGVf bG9ja3MsCiAJCQkJCQkJCQkgICZpbmZvLAogCQkJCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNI X0ZVTkNUSU9OIHwKIAkJCQkJCQkJCSAgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJ WkUpOwpAQCAtMTE4MSwyMyArMTE4NCwyMCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZv aWQpCiAJLyoKIAkgKiBDb21wdXRlIHNpemUgZm9yIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlv biBoYXNodGFibGUuIE5vdGUgdGhlc2UKIAkgKiBjYWxjdWxhdGlvbnMgbXVzdCBhZ3JlZSB3 aXRoIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUhCi0JICovCi0JbWF4X3RhYmxlX3NpemUgPSAo TWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpOwotCi0JLyoKLQkgKiBBbGxvY2F0 ZSBhIGxpc3QgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0cmFuc2FjdGlvbnMgcGFydGljaXBh dGluZyBpbgotCSAqIHByZWRpY2F0ZSBsb2NraW5nLgogCSAqCiAJICogQXNzdW1lIGFuIGF2 ZXJhZ2Ugb2YgMTAgcHJlZGljYXRlIGxvY2tpbmcgdHJhbnNhY3Rpb25zIHBlciBiYWNrZW5k LgogCSAqIFRoaXMgYWxsb3dzIGFnZ3Jlc3NpdmUgY2xlYW51cCB3aGlsZSBkZXRhaWwgaXMg cHJlc2VudCBiZWZvcmUgZGF0YSBtdXN0CiAJICogYmUgc3VtbWFyaXplZCBmb3Igc3RvcmFn ZSBpbiBTTFJVIGFuZCB0aGUgImR1bW15IiB0cmFuc2FjdGlvbi4KIAkgKi8KLQltYXhfdGFi bGVfc2l6ZSAqPSAxMDsKKwltYXhfc2VyaWFsaXphYmxlX3hhY3RzID0gKE1heEJhY2tlbmRz ICsgbWF4X3ByZXBhcmVkX3hhY3RzKSAqIDEwOwogCisJLyoKKwkgKiBBbGxvY2F0ZSBhIGxp c3QgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0cmFuc2FjdGlvbnMgcGFydGljaXBhdGluZyBp bgorCSAqIHByZWRpY2F0ZSBsb2NraW5nLgorCSAqLwogCXJlcXVlc3RTaXplID0gYWRkX3Np emUoUHJlZFhhY3RMaXN0RGF0YVNpemUsCi0JCQkJCQkgICAobXVsX3NpemUoKFNpemUpIG1h eF90YWJsZV9zaXplLAorCQkJCQkJICAgKG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXph YmxlX3hhY3RzLAogCQkJCQkJCQkJIHNpemVvZihTRVJJQUxJWkFCTEVYQUNUKSkpKTsKLQog CVByZWRYYWN0ID0gU2htZW1Jbml0U3RydWN0KCJQcmVkWGFjdExpc3QiLAogCQkJCQkJCSAg IHJlcXVlc3RTaXplLAogCQkJCQkJCSAgICZmb3VuZCk7CkBAIC0xMjIwLDcgKzEyMjAsNyBA QCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJCVByZWRYYWN0LT5lbGVtZW50CiAJ CQk9IChTRVJJQUxJWkFCTEVYQUNUICopICgoY2hhciAqKSBQcmVkWGFjdCArIFByZWRYYWN0 TGlzdERhdGFTaXplKTsKIAkJLyogQWRkIGFsbCBlbGVtZW50cyB0byBhdmFpbGFibGUgbGlz dCwgY2xlYW4uICovCi0JCWZvciAoaSA9IDA7IGkgPCBtYXhfdGFibGVfc2l6ZTsgaSsrKQor CQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NlcmlhbGl6YWJsZV94YWN0czsgaSsrKQogCQl7CiAJ CQlMV0xvY2tJbml0aWFsaXplKCZQcmVkWGFjdC0+ZWxlbWVudFtpXS5wZXJYYWN0UHJlZGlj YXRlTGlzdExvY2ssCiAJCQkJCQkJIExXVFJBTkNIRV9QRVJfWEFDVF9QUkVESUNBVEVfTElT VCk7CkBAIC0xMjU0LDggKzEyNTQsOCBAQCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQp CiAJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU0VSSUFMSVpBQkxFWElEKTsKIAogCVNlcmlh bGl6YWJsZVhpZEhhc2ggPSBTaG1lbUluaXRIYXNoKCJTRVJJQUxJWkFCTEVYSUQgaGFzaCIs Ci0JCQkJCQkJCQkJbWF4X3RhYmxlX3NpemUsCi0JCQkJCQkJCQkJbWF4X3RhYmxlX3NpemUs CisJCQkJCQkJCQkJbWF4X3NlcmlhbGl6YWJsZV94YWN0cywKKwkJCQkJCQkJCQltYXhfc2Vy aWFsaXphYmxlX3hhY3RzLAogCQkJCQkJCQkJCSZpbmZvLAogCQkJCQkJCQkJCUhBU0hfRUxF TSB8IEhBU0hfQkxPQlMgfAogCQkJCQkJCQkJCUhBU0hfRklYRURfU0laRSk7CkBAIC0xMjcx LDEwICsxMjcxLDEwIEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkgKiBvY2Nh c2lvbmFsIHRyYW5zYWN0aW9ucyBjYW5jZWxlZCB3aGVuIHRyeWluZyB0byBmbGFnIGNvbmZs aWN0cy4gVGhhdCdzCiAJICogcHJvYmFibHkgT0suCiAJICovCi0JbWF4X3RhYmxlX3NpemUg Kj0gNTsKKwltYXhfcndfY29uZmxpY3RzID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cyAqIDU7 CiAKIAlyZXF1ZXN0U2l6ZSA9IFJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUgKwotCQlt dWxfc2l6ZSgoU2l6ZSkgbWF4X3RhYmxlX3NpemUsCisJCW11bF9zaXplKChTaXplKSBtYXhf cndfY29uZmxpY3RzLAogCQkJCSBSV0NvbmZsaWN0RGF0YVNpemUpOwogCiAJUldDb25mbGlj dFBvb2wgPSBTaG1lbUluaXRTdHJ1Y3QoIlJXQ29uZmxpY3RQb29sIiwKQEAgLTEyOTIsNyAr MTI5Miw3IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJUldDb25mbGljdFBv b2wtPmVsZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29uZmxpY3RQb29sICsK IAkJCQkJCQkJCQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOwogCQkvKiBBZGQg YWxsIGVsZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KLQkJZm9yIChpID0g MDsgaSA8IG1heF90YWJsZV9zaXplOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBtYXhfcndf Y29uZmxpY3RzOyBpKyspCiAJCXsKIAkJCWRsaXN0X3B1c2hfdGFpbCgmUldDb25mbGljdFBv b2wtPmF2YWlsYWJsZUxpc3QsCiAJCQkJCQkJJlJXQ29uZmxpY3RQb29sLT5lbGVtZW50W2ld Lm91dExpbmspOwpAQCAtMTM1MywxNiArMTM1MywxOSBAQCBTaXplCiBQcmVkaWNhdGVMb2Nr U2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JbG9uZwkJbWF4X3RhYmxl X3NpemU7CisJaW50NjQJCW1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzOworCWludDY0CQlt YXhfcHJlZGljYXRlX2xvY2tzOworCWludDY0CQltYXhfc2VyaWFsaXphYmxlX3hhY3RzOwor CWludDY0CQltYXhfcndfY29uZmxpY3RzOwogCiAJLyogcHJlZGljYXRlIGxvY2sgdGFyZ2V0 IGhhc2ggdGFibGUgKi8KLQltYXhfdGFibGVfc2l6ZSA9IE5QUkVESUNBVEVMT0NLVEFSR0VU RU5UUygpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUobWF4 X3RhYmxlX3NpemUsCisJbWF4X3ByZWRpY2F0ZV9sb2NrX3RhcmdldHMgPSBOUFJFRElDQVRF TE9DS1RBUkdFVEVOVFMoKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0 ZV9zaXplKG1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAogCQkJCQkJCQkJCQkgc2l6ZW9m KFBSRURJQ0FURUxPQ0tUQVJHRVQpKSk7CiAKIAkvKiBwcmVkaWNhdGUgbG9jayBoYXNoIHRh YmxlICovCi0JbWF4X3RhYmxlX3NpemUgKj0gMjsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg aGFzaF9lc3RpbWF0ZV9zaXplKG1heF90YWJsZV9zaXplLAorCW1heF9wcmVkaWNhdGVfbG9j a3MgPSBtYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0cyAqIDI7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShtYXhfcHJlZGljYXRlX2xvY2tzLAogCQkJCQkJ CQkJCQkgc2l6ZW9mKFBSRURJQ0FURUxPQ0spKSk7CiAKIAkvKgpAQCAtMTM3MiwyMCArMTM3 NSwxOSBAQCBQcmVkaWNhdGVMb2NrU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIHNpemUgLyAxMCk7CiAKIAkvKiB0cmFuc2FjdGlvbiBsaXN0ICovCi0JbWF4X3Rh YmxlX3NpemUgPSBNYXhCYWNrZW5kcyArIG1heF9wcmVwYXJlZF94YWN0czsKLQltYXhfdGFi bGVfc2l6ZSAqPSAxMDsKKwltYXhfc2VyaWFsaXphYmxlX3hhY3RzID0gKE1heEJhY2tlbmRz ICsgbWF4X3ByZXBhcmVkX3hhY3RzKSAqIDEwOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQ cmVkWGFjdExpc3REYXRhU2l6ZSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KChTaXplKSBtYXhfdGFibGVfc2l6ZSwKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoKFNpemUpIG1heF9zZXJpYWxpemFibGVfeGFjdHMsCiAJCQkJCQkJCSAgIHNpemVvZihT RVJJQUxJWkFCTEVYQUNUKSkpOwogCiAJLyogdHJhbnNhY3Rpb24geGlkIHRhYmxlICovCi0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShtYXhfdGFibGVfc2l6 ZSwKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKG1heF9zZXJp YWxpemFibGVfeGFjdHMsCiAJCQkJCQkJCQkJCSBzaXplb2YoU0VSSUFMSVpBQkxFWElEKSkp OwogCiAJLyogcnctY29uZmxpY3QgcG9vbCAqLwotCW1heF90YWJsZV9zaXplICo9IDU7CisJ bWF4X3J3X2NvbmZsaWN0cyA9IG1heF9zZXJpYWxpemFibGVfeGFjdHMgKiA1OwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplKTsKLQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoKFNpemUpIG1heF90YWJsZV9zaXplLAorCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgoU2l6ZSkgbWF4X3J3X2NvbmZsaWN0cywK IAkJCQkJCQkJICAgUldDb25mbGljdERhdGFTaXplKSk7CiAKIAkvKiBIZWFkIGZvciBsaXN0 IG9mIGZpbmlzaGVkIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbnMuICovCi0tIAoyLjQ3LjMK Cg== --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0005-refactor-predicate.c-Move-all-the-initialization-.patch" Content-Disposition: attachment; filename*0="v8-0005-refactor-predicate.c-Move-all-the-initialization-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5OGMwNDA1M2VhY2MxYTBlMDY5NWVmYWY1MWQwMzI2NDYxOWU3ZGVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMjA6Mjc6NTAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA1LzE2XSByZWZhY3RvciBwcmVkaWNhdGUuYzogTW92ZSBh bGwgdGhlIGluaXRpYWxpemF0aW9uCiB0b2dldGhlcgoKVGhlIFNobWVtSW5pdCBmdW5jdGlv biBpcyB2ZXJ5IGNvbXBsaWNhdGVkIGN1cnJlbnRseS4gVGhlc2UKcmVmYWN0b3JpbmdzIG1v dmUgaXQgaW4gYSBkaXJlY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgd2l0aCB0aGUgbmV3 CnNobWVtIGNhbGxiYWNrcy4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGlj YXRlLmMgfCAxNjQgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgNzkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IDQwOTUwZWUzYTRmLi40ZjgwZmM3MzYzOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMTE0NSwxOSArMTE0NSw2 IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJCQkJCQkJCQkJSEFTSF9FTEVN IHwgSEFTSF9CTE9CUyB8CiAJCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhF RF9TSVpFKTsKIAotCS8qCi0JICogUmVzZXJ2ZSBhIGR1bW15IGVudHJ5IGluIHRoZSBoYXNo IHRhYmxlOyB3ZSB1c2UgaXQgdG8gbWFrZSBzdXJlIHRoZXJlJ3MKLQkgKiBhbHdheXMgb25l IGVudHJ5IGF2YWlsYWJsZSB3aGVuIHdlIG5lZWQgdG8gc3BsaXQgb3IgY29tYmluZSBhIHBh Z2UsCi0JICogYmVjYXVzZSBydW5uaW5nIG91dCBvZiBzcGFjZSB0aGVyZSBjb3VsZCBtZWFu IGFib3J0aW5nIGEKLQkgKiBub24tc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uLgotCSAqLwot CWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkodm9pZCkgaGFzaF9zZWFyY2goUHJl ZGljYXRlTG9ja1RhcmdldEhhc2gsICZTY3JhdGNoVGFyZ2V0VGFnLAotCQkJCQkJICAgSEFT SF9FTlRFUiwgJmZvdW5kKTsKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0JfQotCiAJLyogUHJlLWNh bGN1bGF0ZSB0aGUgaGFzaCBhbmQgcGFydGl0aW9uIGxvY2sgb2YgdGhlIHNjcmF0Y2ggZW50 cnkgKi8KIAlTY3JhdGNoVGFyZ2V0VGFnSGFzaCA9IFByZWRpY2F0ZUxvY2tUYXJnZXRUYWdI YXNoQ29kZSgmU2NyYXRjaFRhcmdldFRhZyk7CiAJU2NyYXRjaFBhcnRpdGlvbkxvY2sgPSBQ cmVkaWNhdGVMb2NrSGFzaFBhcnRpdGlvbkxvY2soU2NyYXRjaFRhcmdldFRhZ0hhc2gpOwpA QCAtMTIwMiw0OSArMTE4OSw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkJ CQkJCQkgICByZXF1ZXN0U2l6ZSwKIAkJCQkJCQkgICAmZm91bmQpOwogCUFzc2VydChmb3Vu ZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWludAkJCWk7 Ci0KLQkJLyogY2xlYW4gZXZlcnl0aGluZywgYm90aCB0aGUgaGVhZGVyIGFuZCB0aGUgZWxl bWVudCAqLwotCQltZW1zZXQoUHJlZFhhY3QsIDAsIHJlcXVlc3RTaXplKTsKLQotCQlkbGlz dF9pbml0KCZQcmVkWGFjdC0+YXZhaWxhYmxlTGlzdCk7Ci0JCWRsaXN0X2luaXQoJlByZWRY YWN0LT5hY3RpdmVMaXN0KTsKLQkJUHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFs aWRUcmFuc2FjdGlvbklkOwotCQlQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluQ291bnQgPSAw OwotCQlQcmVkWGFjdC0+V3JpdGFibGVTeGFjdENvdW50ID0gMDsKLQkJUHJlZFhhY3QtPkxh c3RTeGFjdENvbW1pdFNlcU5vID0gRmlyc3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7Ci0J CVByZWRYYWN0LT5DYW5QYXJ0aWFsQ2xlYXJUaHJvdWdoID0gMDsKLQkJUHJlZFhhY3QtPkhh dmVQYXJ0aWFsQ2xlYXJlZFRocm91Z2ggPSAwOwotCQlQcmVkWGFjdC0+ZWxlbWVudAotCQkJ PSAoU0VSSUFMSVpBQkxFWEFDVCAqKSAoKGNoYXIgKikgUHJlZFhhY3QgKyBQcmVkWGFjdExp c3REYXRhU2l6ZSk7Ci0JCS8qIEFkZCBhbGwgZWxlbWVudHMgdG8gYXZhaWxhYmxlIGxpc3Qs IGNsZWFuLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NlcmlhbGl6YWJsZV94YWN0czsg aSsrKQotCQl7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZQcmVkWGFjdC0+ZWxlbWVudFtpXS5w ZXJYYWN0UHJlZGljYXRlTGlzdExvY2ssCi0JCQkJCQkJIExXVFJBTkNIRV9QRVJfWEFDVF9Q UkVESUNBVEVfTElTVCk7Ci0JCQlkbGlzdF9wdXNoX3RhaWwoJlByZWRYYWN0LT5hdmFpbGFi bGVMaXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0ueGFjdExpbmspOwotCQl9Ci0JCVByZWRY YWN0LT5PbGRDb21taXR0ZWRTeGFjdCA9IENyZWF0ZVByZWRYYWN0KCk7Ci0JCVNldEludmFs aWRWaXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnZ4 aWQpOwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnByZXBhcmVTZXFObyA9IDA7 Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+Y29tbWl0U2VxTm8gPSAwOwotCQlQ cmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxhc3RDb21taXRCZWZvcmVTbmFw c2hvdCA9IDA7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ b3V0Q29uZmxpY3RzKTsKLQkJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4 YWN0LT5pbkNvbmZsaWN0cyk7Ci0JCWRsaXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0 ZWRTeGFjdC0+cHJlZGljYXRlTG9ja3MpOwotCQlkbGlzdF9ub2RlX2luaXQoJlByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRMaW5rKTsKLQkJZGxpc3RfaW5pdCgmUHJl ZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5wb3NzaWJsZVVuc2FmZUNvbmZsaWN0cyk7Ci0J CVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+ZmluaXNoZWRCZWZvcmUg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0 LT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVByZWRYYWN0LT5PbGRDb21taXR0 ZWRTeGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKLQkJUHJlZFhhY3QtPk9s ZENvbW1pdHRlZFN4YWN0LT5waWQgPSAwOwotCQlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hh Y3QtPnBncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQl9Ci0JLyogVGhpcyBuZXZl ciBjaGFuZ2VzLCBzbyBsZXQncyBrZWVwIGEgbG9jYWwgY29weS4gKi8KLQlPbGRDb21taXR0 ZWRTeGFjdCA9IFByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdDsKIAogCS8qCiAJICogQWxs b2NhdGUgaGFzaCB0YWJsZSBmb3IgU0VSSUFMSVpBQkxFWElEIHN0cnVjdHMuICBUaGlzIHN0 b3JlcyBwZXIteGlkCkBAIC0xMjgxLDIzICsxMjI1LDYgQEAgUHJlZGljYXRlTG9ja1NobWVt SW5pdCh2b2lkKQogCQkJCQkJCQkJIHJlcXVlc3RTaXplLAogCQkJCQkJCQkJICZmb3VuZCk7 CiAJQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKLQlpZiAoIWZvdW5kKQot CXsKLQkJaW50CQkJaTsKLQotCQkvKiBjbGVhbiBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhl IGVsZW1lbnRzICovCi0JCW1lbXNldChSV0NvbmZsaWN0UG9vbCwgMCwgcmVxdWVzdFNpemUp OwotCi0JCWRsaXN0X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsKLQkJ UldDb25mbGljdFBvb2wtPmVsZW1lbnQgPSAoUldDb25mbGljdCkgKChjaGFyICopIFJXQ29u ZmxpY3RQb29sICsKLQkJCQkJCQkJCQkJCVJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUp OwotCQkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8K LQkJZm9yIChpID0gMDsgaSA8IG1heF9yd19jb25mbGljdHM7IGkrKykKLQkJewotCQkJZGxp c3RfcHVzaF90YWlsKCZSV0NvbmZsaWN0UG9vbC0+YXZhaWxhYmxlTGlzdCwKLQkJCQkJCQkm UldDb25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0TGluayk7Ci0JCX0KLQl9CiAKIAkvKgog CSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIGhlYWRlciBmb3IgdGhlIGxpc3Qgb2YgZmlu aXNoZWQgc2VyaWFsaXphYmxlCkBAIC0xMzA4LDggKzEyMzUsNiBAQCBQcmVkaWNhdGVMb2Nr U2htZW1Jbml0KHZvaWQpCiAJCQkJCQlzaXplb2YoZGxpc3RfaGVhZCksCiAJCQkJCQkmZm91 bmQpOwogCUFzc2VydChmb3VuZCA9PSBJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JaWYgKCFmb3Vu ZCkKLQkJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9ucyk7CiAK IAkvKgogCSAqIEluaXRpYWxpemUgdGhlIFNMUlUgc3RvcmFnZSBmb3Igb2xkIGNvbW1pdHRl ZCBzZXJpYWxpemFibGUKQEAgLTEzMzEsMTkgKzEyNTYsODggQEAgUHJlZGljYXRlTG9ja1No bWVtSW5pdCh2b2lkKQogCSAqLwogCXNlcmlhbENvbnRyb2wgPSAoU2VyaWFsQ29udHJvbCkK IAkJU2htZW1Jbml0U3RydWN0KCJTZXJpYWxDb250cm9sRGF0YSIsIHNpemVvZihTZXJpYWxD b250cm9sRGF0YSksICZmb3VuZCk7Ci0KIAlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3Rt YXN0ZXIpOwotCWlmICghZm91bmQpCisKKwkvKgorCSAqIElmIHdlIGp1c3QgYXR0YWNoZWQg dG8gZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeSAoRVhFQ19CQUNLRU5EKSwgd2UncmUgYWxsCisJ ICogZG9uZS4gIE90aGVyd2lzZSwgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCBwcm9jZWVk IHRvIGluaXRpYWxpemUgdGhlCisJICogc2hhcmVkIG1lbW9yeS4KKwkgKi8KKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCiAJewotCQkvKgotCQkgKiBTZXQgY29udHJvbCBpbmZvcm1hdGlv biB0byByZWZsZWN0IGVtcHR5IFNMUlUuCi0JCSAqLwotCQlMV0xvY2tBY3F1aXJlKFNlcmlh bENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCQlzZXJpYWxDb250cm9sLT5oZWFkUGFn ZSA9IC0xOwotCQlzZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7Ci0JCXNlcmlhbENvbnRyb2wtPnRhaWxYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK LQkJTFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9sTG9jayk7CisJCS8qIFRoaXMgbmV2ZXIg Y2hhbmdlcywgc28gbGV0J3Mga2VlcCBhIGxvY2FsIGNvcHkuICovCisJCU9sZENvbW1pdHRl ZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBSZXNlcnZlIGEgZHVtbXkgZW50cnkgaW4gdGhlIGhhc2ggdGFibGU7IHdl IHVzZSBpdCB0byBtYWtlIHN1cmUgdGhlcmUncworCSAqIGFsd2F5cyBvbmUgZW50cnkgYXZh aWxhYmxlIHdoZW4gd2UgbmVlZCB0byBzcGxpdCBvciBjb21iaW5lIGEgcGFnZSwKKwkgKiBi ZWNhdXNlIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIHRoZXJlIGNvdWxkIG1lYW4gYWJvcnRpbmcg YQorCSAqIG5vbi1zZXJpYWxpemFibGUgdHJhbnNhY3Rpb24uCisJICovCisJKHZvaWQpIGhh c2hfc2VhcmNoKFByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoLCAmU2NyYXRjaFRhcmdldFRhZywK KwkJCQkJICAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kKTsKKworCS8q IEluaXRpYWxpemUgUHJlZFhhY3QgbGlzdCAqLworCWRsaXN0X2luaXQoJlByZWRYYWN0LT5h dmFpbGFibGVMaXN0KTsKKwlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YWN0aXZlTGlzdCk7CisJ UHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVBy ZWRYYWN0LT5TeGFjdEdsb2JhbFhtaW5Db3VudCA9IDA7CisJUHJlZFhhY3QtPldyaXRhYmxl U3hhY3RDb3VudCA9IDA7CisJUHJlZFhhY3QtPkxhc3RTeGFjdENvbW1pdFNlcU5vID0gRmly c3ROb3JtYWxTZXJDb21taXRTZXFObyAtIDE7CisJUHJlZFhhY3QtPkNhblBhcnRpYWxDbGVh clRocm91Z2ggPSAwOworCVByZWRYYWN0LT5IYXZlUGFydGlhbENsZWFyZWRUaHJvdWdoID0g MDsKKwlQcmVkWGFjdC0+ZWxlbWVudAorCQk9IChTRVJJQUxJWkFCTEVYQUNUICopICgoY2hh ciAqKSBQcmVkWGFjdCArIFByZWRYYWN0TGlzdERhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVs ZW1lbnRzIHRvIGF2YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsg aSA8IG1heF9zZXJpYWxpemFibGVfeGFjdHM7IGkrKykKKwl7CisJCUxXTG9ja0luaXRpYWxp emUoJlByZWRYYWN0LT5lbGVtZW50W2ldLnBlclhhY3RQcmVkaWNhdGVMaXN0TG9jaywKKwkJ CQkJCSBMV1RSQU5DSEVfUEVSX1hBQ1RfUFJFRElDQVRFX0xJU1QpOworCQlkbGlzdF9wdXNo X3RhaWwoJlByZWRYYWN0LT5hdmFpbGFibGVMaXN0LCAmUHJlZFhhY3QtPmVsZW1lbnRbaV0u eGFjdExpbmspOwogCX0KKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QgPSBDcmVhdGVQ cmVkWGFjdCgpOworCVNldEludmFsaWRWaXJ0dWFsVHJhbnNhY3Rpb25JZChQcmVkWGFjdC0+ T2xkQ29tbWl0dGVkU3hhY3QtPnZ4aWQpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFj dC0+cHJlcGFyZVNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPmNv bW1pdFNlcU5vID0gMDsKKwlQcmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPlNlcU5vLmxh c3RDb21taXRCZWZvcmVTbmFwc2hvdCA9IDA7CisJZGxpc3RfaW5pdCgmUHJlZFhhY3QtPk9s ZENvbW1pdHRlZFN4YWN0LT5vdXRDb25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRYYWN0 LT5PbGRDb21taXR0ZWRTeGFjdC0+aW5Db25mbGljdHMpOworCWRsaXN0X2luaXQoJlByZWRY YWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+cHJlZGljYXRlTG9ja3MpOworCWRsaXN0X25vZGVf aW5pdCgmUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5pc2hlZExpbmspOworCWRs aXN0X2luaXQoJlByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+cG9zc2libGVVbnNhZmVD b25mbGljdHMpOworCVByZWRYYWN0LT5PbGRDb21taXR0ZWRTeGFjdC0+dG9wWGlkID0gSW52 YWxpZFRyYW5zYWN0aW9uSWQ7CisJUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0LT5maW5p c2hlZEJlZm9yZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5PbGRDb21t aXR0ZWRTeGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVByZWRYYWN0LT5P bGRDb21taXR0ZWRTeGFjdC0+ZmxhZ3MgPSBTWEFDVF9GTEFHX0NPTU1JVFRFRDsKKwlQcmVk WGFjdC0+T2xkQ29tbWl0dGVkU3hhY3QtPnBpZCA9IDA7CisJUHJlZFhhY3QtPk9sZENvbW1p dHRlZFN4YWN0LT5wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisKKwkvKiBUaGlz IG5ldmVyIGNoYW5nZXMsIHNvIGxldCdzIGtlZXAgYSBsb2NhbCBjb3B5LiAqLworCU9sZENv bW1pdHRlZFN4YWN0ID0gUHJlZFhhY3QtPk9sZENvbW1pdHRlZFN4YWN0OworCisJLyogSW5p dGlhbGl6ZSB0aGUgcnctY29uZmxpY3QgcG9vbCAqLworCWRsaXN0X2luaXQoJlJXQ29uZmxp Y3RQb29sLT5hdmFpbGFibGVMaXN0KTsKKwlSV0NvbmZsaWN0UG9vbC0+ZWxlbWVudCA9IChS V0NvbmZsaWN0KSAoKGNoYXIgKikgUldDb25mbGljdFBvb2wgKworCQkJCQkJCQkJCQlSV0Nv bmZsaWN0UG9vbEhlYWRlckRhdGFTaXplKTsKKwkvKiBBZGQgYWxsIGVsZW1lbnRzIHRvIGF2 YWlsYWJsZSBsaXN0LCBjbGVhbi4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yd19j b25mbGljdHM7IGkrKykKKwl7CisJCWRsaXN0X3B1c2hfdGFpbCgmUldDb25mbGljdFBvb2wt PmF2YWlsYWJsZUxpc3QsCisJCQkJCQkmUldDb25mbGljdFBvb2wtPmVsZW1lbnRbaV0ub3V0 TGluayk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJp YWxpemFibGUgdHJhbnNhY3Rpb25zICovCisJZGxpc3RfaW5pdChGaW5pc2hlZFNlcmlhbGl6 YWJsZVRyYW5zYWN0aW9ucyk7CisKKwkvKiBJbml0aWFsaXplIFNlcmlhbENvbnRyb2wgdG8g cmVmbGVjdCBlbXB0eSBTTFJVLiAqLworCUxXTG9ja0FjcXVpcmUoU2VyaWFsQ29udHJvbExv Y2ssIExXX0VYQ0xVU0lWRSk7CisJc2VyaWFsQ29udHJvbC0+aGVhZFBhZ2UgPSAtMTsKKwlz ZXJpYWxDb250cm9sLT5oZWFkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJc2VyaWFs Q29udHJvbC0+dGFpbFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUxXTG9ja1JlbGVh c2UoU2VyaWFsQ29udHJvbExvY2spOwogfQogCiAvKgotLSAKMi40Ny4zCgo= --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0006-Introduce-a-new-mechanism-for-registering-shared-.patch" Content-Disposition: attachment; filename*0="v8-0006-Introduce-a-new-mechanism-for-registering-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNzAxZGI5ZGYyZDA4YTM5OTU5NzRkNzQ0N2VkYjFjYTU5YmZmMzdmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgTWFyIDIwMjYgMDI6MzI6MzYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA2LzE2XSBJbnRyb2R1Y2UgYSBuZXcgbWVjaGFuaXNtIGZv ciByZWdpc3RlcmluZyBzaGFyZWQKIG1lbW9yeSBhcmVhcwoKRWFjaCBzaGFyZWQgbWVtb3J5 IGFyZWEgaXMgcmVnaXN0ZXJlZCB3aXRoIGEgImRlc2NyaXB0b3Igc3RydWN0IiB0aGF0CmNv bnRhaW5zIHBhcmFtZXRlcnMgbGlrZSBuYW1lIGFuZCBzaXplIG9mIHRoZSBhcmVhLiBUaGUg ZGVzY3JpcHRvcgpzdHJ1Y3QgbWFrZXMgaXQgZWFzaWVyIHRvIGFkZCBvcHRpb25hbCBmaWVs ZHMgaW4gdGhlIGZ1dHVyZTsgdGhlCmFkZGl0aW9uYWwgZmllbGRzIGNhbiBqdXN0IGJlIGxl ZnQgYXMgemVyb3MuCgpUaGlzIG1lcmdlcyB0aGUgc2VwYXJhdGUgW1N1YnN5c3RlbV1TaG1l bVNpemUoKSBhbmQKW1N1YnN5c3RlbV1TaG1lbUluaXQoKSBwaGFzZXMgYXQgcG9zdG1hc3Rl ciBzdGFydHVwLiBFYWNoIHN1YnN5c3RlbSBpcwpub3cgY2FsbGVkIGludG8ganVzdCBvbmNl LCBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBoYXMgYmVlbgphbGxvY2F0ZWQs IHRvIHJlZ2lzdGVyIHRoZSBzdWJzeXN0ZW0ncyBzaGFyZWQgbWVtb3J5IG5lZWRzLiBUaGUK cmVnaXN0cmF0aW9uIGluY2x1ZGVzIHRoZSBzaXplLCB3aGljaCByZXBsYWNlcyB0aGUKW1N1 YnN5c3RlbV1TaG1lbVNpemUoKSBjYWxscywgYW5kIGEgcG9pbnRlciB0byBhbiBpbml0aWFs aXphdGlvbgpjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggcmVwbGFjZXMgdGhlIFtTdWJzeXN0 ZW1dU2htZW1Jbml0KCkKY2FsbHMuIFRoaXMgaXMgbW9yZSBlcmdvbm9taWMsIGFzIHlvdSBv bmx5IG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplCm9uY2UsIHdoZW4geW91IHJlZ2lzdGVy IHRoZSBzdHJ1Y3QuCgpUaGlzIHJlcGxhY2VzIFNobWVtSW5pdFN0cnVjdCgpIGFuZCBTaG1l bUluaXRIYXNoKCksIHdoaWNoIGJlY29tZSBqdXN0CmJhY2t3YXJkcy1jb21wYXRpYmlsaXR5 IHdyYXBwZXJzIGFyb3VuZCB0aGUgbmV3IGZ1bmN0aW9ucy4gSW4gZnV0dXJlCmNvbW1pdHMs IEkgcGxhbiB0byByZXBsYWNlIGFsbCBTaG1lbUluaXRTdHJ1Y3QoKSBhbmQgU2htZW1Jbml0 SGFzaCgpCmNhbGxzIHdpdGggdGhlIG5ldyBmdW5jdGlvbnMsIGFsdGhvdWdoIHdlJ2xsIHN0 aWxsIG5lZWQgdG8ga2VlcCB0aGVtCmFyb3VuZCBmb3IgZXh0ZW5zaW9ucy4KClJldmlld2Vk LWJ5OiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2 aWV3ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+ClJl dmlld2VkLWJ5OiBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZpZXdl ZC1ieTogRGFuaWVsIEd1c3RhZnNzb24gPGRhbmllbEB5ZXNxbC5zZT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4SFc1dk0xYm5lTFlm ZzB3R2VBYT01MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5nbWFpbC5jb20KLS0t CiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAgICAgICAgfCAgIDQgKy0KIGRv Yy9zcmMvc2dtbC94ZnVuYy5zZ21sICAgICAgICAgICAgICAgICB8IDE2MSArKystLQogc3Jj L2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyB8ICAgNCArCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYyAgICAgICAgICB8ICAzMyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htZW0uYyAgICAgICAgIHwgNzcwICsrKysrKysrKysrKysrKysrKysrLS0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW1faGFzaC5jICAgIHwgIDkyICsrLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdXRp bHMvaGFzaC9keW5haGFzaC5jICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv c2htZW0uaCAgICAgICAgICAgICB8IDIxMCArKysrKystCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLmMgICAgfCAgIDEgLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgIHwgICA5ICstCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMTIwIGluc2Vy dGlvbnMoKyksIDE5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv c3lzdGVtLXZpZXdzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5k ZXggOWVlMWEyYmZjNmEuLjJlYmVjNjkyOGQ1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv c3lzdGVtLXZpZXdzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21s CkBAIC00MjU0LDggKzQyNTQsOCBAQCBTRUxFQ1QgKiBGUk9NIHBnX2xvY2tzIHBsIExFRlQg Sk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgPHBhcmE+CiAgICBBbm9ueW1vdXMgYWxs b2NhdGlvbnMgYXJlIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hZGUKICAgIHdpdGgg PGxpdGVyYWw+U2htZW1BbGxvYygpPC9saXRlcmFsPiBkaXJlY3RseSwgcmF0aGVyIHRoYW4g dmlhCi0gICA8bGl0ZXJhbD5TaG1lbUluaXRTdHJ1Y3QoKTwvbGl0ZXJhbD4gb3IKLSAgIDxs aXRlcmFsPlNobWVtSW5pdEhhc2goKTwvbGl0ZXJhbD4uCisgICA8bGl0ZXJhbD5TaG1lbVJl cXVlc3RTdHJ1Y3QoKTwvbGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPlNobWVtUmVxdWVzdEhh c2goKTwvbGl0ZXJhbD4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC94ZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXgg NzBlODE1YjhhMmMuLjFlOWZmODAxYTdjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwveGZ1 bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbApAQCAtMzYyOCw3MSArMzYy OCwxMzEgQEAgQ1JFQVRFIEZVTkNUSU9OIG1ha2VfYXJyYXkoYW55ZWxlbWVudCkgUkVUVVJO UyBhbnlhcnJheQogICAgICAgQWRkLWlucyBjYW4gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IG9u IHNlcnZlciBzdGFydHVwLiAgVG8gZG8gc28sIHRoZQogICAgICAgYWRkLWluJ3Mgc2hhcmVk IGxpYnJhcnkgbXVzdCBiZSBwcmVsb2FkZWQgYnkgc3BlY2lmeWluZyBpdCBpbgogICAgICAg PHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPjxpbmRleHRl cm0+PHByaW1hcnk+c2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPC9wcmltYXJ5PjwvaW5kZXh0 ZXJtPi4KLSAgICAgIFRoZSBzaGFyZWQgbGlicmFyeSBzaG91bGQgYWxzbyByZWdpc3RlciBh Ci0gICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+IGluIGl0cwot ICAgICAgPGZ1bmN0aW9uPl9QR19pbml0PC9mdW5jdGlvbj4gZnVuY3Rpb24uICBUaGlzCi0g ICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+IGNhbiByZXNlcnZl IHNoYXJlZCBtZW1vcnkgYnkKLSAgICAgIGNhbGxpbmc6CisgICAgICBUaGUgc2hhcmVkIGxp YnJhcnkgc2hvdWxkIHJlZ2lzdGVyIGNhbGxiYWNrcyBpbiBpdHMKKyAgICAgIGl0cyA8ZnVu Y3Rpb24+X1BHX2luaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgd2hpY2ggdGhlbiBnZXQgY2Fs bGVkIGF0IHRoZQorICAgICAgcmlnaHQgc3RhZ2VzIG9mIHRoZSBzeXN0ZW0gc3RhcnR1cCB0 byBpbml0aWFsaXplIHRoZSBzaGFyZWQgbWVtb3J5LgorICAgICAgSGVyZSBpcyBhbiBleGFt cGxlOgogPHByb2dyYW1saXN0aW5nPgotdm9pZCBSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKFNp emUgc2l6ZSkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICBFYWNoIGJhY2tlbmQgc2hvdWxk IG9idGFpbiBhIHBvaW50ZXIgdG8gdGhlIHJlc2VydmVkIHNoYXJlZCBtZW1vcnkgYnkKLSAg ICAgIGNhbGxpbmc6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkICpTaG1lbUluaXRTdHJ1Y3Qo Y29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKLTwvcHJvZ3Jh bWxpc3Rpbmc+Ci0gICAgICBJZiB0aGlzIGZ1bmN0aW9uIHNldHMgPGxpdGVyYWw+Zm91bmRQ dHI8L2xpdGVyYWw+IHRvCi0gICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSBj YWxsZXIgc2hvdWxkIHByb2NlZWQgdG8gaW5pdGlhbGl6ZSB0aGUKLSAgICAgIGNvbnRlbnRz IG9mIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5LiAgSWYgPGxpdGVyYWw+Zm91bmRQdHI8 L2xpdGVyYWw+Ci0gICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRo ZSBzaGFyZWQgbWVtb3J5IHdhcyBhbHJlYWR5Ci0gICAgICBpbml0aWFsaXplZCBieSBhbm90 aGVyIGJhY2tlbmQsIGFuZCB0aGUgY2FsbGVyIG5lZWQgbm90IGluaXRpYWxpemUKLSAgICAg IGZ1cnRoZXIuCi0gICAgIDwvcGFyYT4KK3R5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsK KyAgICBMV0xvY2sgICAgICBsb2NrOyAgICAvKiBwcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93 ICovCiAKLSAgICAgPHBhcmE+Ci0gICAgICBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIGVh Y2ggYmFja2VuZCBzaG91bGQgdXNlIHRoZSBMV0xvY2sKLSAgICAgIDxmdW5jdGlvbj5BZGRp blNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiB3aGVuIGluaXRpYWxpemluZyBpdHMgYWxsb2Nh dGlvbgotICAgICAgb2Ygc2hhcmVkIG1lbW9yeSwgYXMgc2hvd24gaGVyZToKLTxwcm9ncmFt bGlzdGluZz4KLXN0YXRpYyBteXN0cnVjdCAqcHRyID0gTlVMTDsKLWJvb2wgICAgICAgIGZv dW5kOworICAgIC4uLiBzaGFyZWQgbWVtb3J5IGNvbnRlbnRzIC4uLgorfSBNeVNobWVtRGF0 YTsKKworc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOyAgICAvKiBwb2ludGVyIHRvIHRo ZSBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeSAqLworCitzdGF0aWMgdm9pZCBteV9zaG1lbV9y ZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBteV9zaG1lbV9pbml0KHZvaWQgKmFy Zyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIG15X3NobWVtX2NhbGxiYWNrcyA9IHsKKyAg ICAuc2htZW1fcmVxdWVzdF9mbiA9IG15X3NobWVtX3JlcXVlc3QsCisgICAgLnNobWVtX2lu aXRfZm4gPSBteV9zaG1lbV9pbml0LAorfTsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNhbGxi YWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBJbiBv cmRlciB0byBjcmVhdGUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYSwgd2UgaGF2ZSB0byBiZSBs b2FkZWQgdmlhCisgICAgICogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorICAgICAqLwor ICAgIGlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3Mp CisgICAgICAgIHJldHVybjsKKworICAgIC8qIFJlZ2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5 IG5lZWRzICovCisgICAgUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcygmYW1wO215X3NobWVtX2Nh bGxiYWNrcyk7Cit9CisKKy8qIGNhbGxiYWNrIHRvIHJlcXVlc3QgICovCitzdGF0aWMgdm9p ZAorbXlfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCit7CisgICAgLyogQSBwZXJzaXN0ZW50 IGhhbmRsZSB0byB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGluIHRoaXMgYmFja2VuZCAqLwor ICAgIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXlTaG1lbURlc2M7CisKKyAgICBTaG1lbVJl cXVlc3RTdHJ1Y3QoJmFtcDtNeVNobWVtRGVzYywgJmFtcDsoU2htZW1SZXF1ZXN0U3RydWN0 T3B0cykgeworICAgICAgICAubmFtZSA9ICJNeSBzaG1lbSBhcmVhIiwKKyAgICAgICAgLnNp emUgPSBzaXplb2YoTXlTaG1lbURhdGEpLAorICAgICAgICAucHRyID0gKHZvaWQgKiopICZh bXA7TXlTaG1lbSwKKyAgICB9KTsKK30KIAotTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5p dExvY2ssIExXX0VYQ0xVU0lWRSk7Ci1wdHIgPSBTaG1lbUluaXRTdHJ1Y3QoIm15IHN0cnVj dCBuYW1lIiwgc2l6ZSwgJmFtcDtmb3VuZCk7Ci1pZiAoIWZvdW5kKQorLyogY2FsbGJhY2sg dG8gaW5pdGlhbGl6ZSB0aGUgY29udGVudHMgb2YgdGhlIE15U2htZW0gYXJlYSBhdCBzdGFy dHVwICovCitzdGF0aWMgdm9pZAorbXlfc2htZW1faW5pdCh2b2lkICphcmcpCiB7Ci0gICAg Li4uIGluaXRpYWxpemUgY29udGVudHMgb2Ygc2hhcmVkIG1lbW9yeSAuLi4KLSAgICBwdHIt PmxvY2tzID0gR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJteSB0cmFuY2hlIG5hbWUiKTsKKyAg ICBpbnQgICAgICAgICB0cmFuY2hlX2lkOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgbG9j ayAqLworICAgIHRyYW5jaGVfaWQgPSBMV0xvY2tOZXdUcmFuY2hlSWQoIm15IHRyYW5jaGUg bmFtZSIpOworICAgIExXTG9ja0luaXRpYWxpemUoJmFtcDtNeVNobWVtLT5sb2NrLCB0cmFu Y2hlX2lkKTsKKworICAgIC4uLiBpbml0aWFsaXplIHRoZSByZXN0IG9mIE15U2htZW0gZmll bGRzIC4uLgogfQotTFdMb2NrUmVsZWFzZShBZGRpblNobWVtSW5pdExvY2spOworCiA8L3By b2dyYW1saXN0aW5nPgotICAgICAgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRl cmFsPiBwcm92aWRlcyBhIGNvbnZlbmllbnQgcGxhY2UgZm9yIHRoZQotICAgICAgaW5pdGlh bGl6YXRpb24gY29kZSwgYnV0IGl0IGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZCB0aGF0IGFs bCBzdWNoIGNvZGUKLSAgICAgIGJlIHBsYWNlZCBpbiB0aGlzIGhvb2suICBPbiBXaW5kb3dz IChhbmQgYW55d2hlcmUgZWxzZSB3aGVyZQotICAgICAgPGxpdGVyYWw+RVhFQ19CQUNLRU5E PC9saXRlcmFsPiBpcyBkZWZpbmVkKSwgZWFjaCBiYWNrZW5kIGV4ZWN1dGVzIHRoZQotICAg ICAgcmVnaXN0ZXJlZCA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hvb2s8L2xpdGVyYWw+IHNo b3J0bHkgYWZ0ZXIgaXQKLSAgICAgIGF0dGFjaGVzIHRvIHNoYXJlZCBtZW1vcnksIHNvIGFk ZC1pbnMgc2hvdWxkIHN0aWxsIGFjcXVpcmUKLSAgICAgIDxmdW5jdGlvbj5BZGRpblNobWVt SW5pdExvY2s8L2Z1bmN0aW9uPiB3aXRoaW4gdGhpcyBob29rLCBhcyBzaG93biBpbiB0aGUK LSAgICAgIGV4YW1wbGUgYWJvdmUuICBPbiBvdGhlciBwbGF0Zm9ybXMsIG9ubHkgdGhlIHBv c3RtYXN0ZXIgcHJvY2VzcyBleGVjdXRlcwotICAgICAgdGhlIDxsaXRlcmFsPnNobWVtX3N0 YXJ0dXBfaG9vazwvbGl0ZXJhbD4sIGFuZCBlYWNoIGJhY2tlbmQgYXV0b21hdGljYWxseQot ICAgICAgaW5oZXJpdHMgdGhlIHBvaW50ZXJzIHRvIHNoYXJlZCBtZW1vcnkuCisgICAgICBU aGUgPGZ1bmN0aW9uPnJlcXVlc3RfZm48L2Z1bmN0aW9uPiBjYWxsYmFjayBpcyBjYWxsZWQg ZHVyaW5nIHN5c3RlbQorICAgICAgc3RhcnR1cCwgYmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5 IGhhcyBiZWVuIGFsbG9jYXRlZC4gSXQgc2hvdWxkIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5T aG1lbVJlcXVlc3RTdHJ1Y3QoKTwvZnVuY3Rpb24+IHRvIHJlZ2lzdGVyIHRoZSBhZGQtaW4n cworICAgICAgc2hhcmVkIG1lbW9yeSBuZWVkcy4gTm90ZSB0aGF0IDxmdW5jdGlvbj5TaG1l bVJlcXVlc3RTdHJ1Y3QoKTwvZnVuY3Rpb24+CisgICAgICBkb2Vzbid0IGltbWVkaWF0ZWx5 IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgdGhlIG1lbW9yeSwgaXQgbWVyZWx5CisgICAgICBy ZWdpc3RlcnMgdGhlIHNwYWNlIHRvIGJlIGFsbG9jYXRlZCBsYXRlciBpbiB0aGUgc3RhcnR1 cCBzZXF1ZW5jZS4gIFdoZW4KKyAgICAgIHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBpdCBp cyBpbml0aWFsaXplZCB0byB6ZXJvLiAgRm9yIGFueSBtb3JlCisgICAgICBjb21wbGV4IGlu aXRpYWxpemF0aW9uLCBzZXQgdGhlIDxmdW5jdGlvbj5pbml0X2ZuKCk8L2Z1bmN0aW9uPiBj YWxsYmFjaywKKyAgICAgIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBtZW1vcnkg aGFzIGJlZW4gYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZAorICAgICAgdG8gemVybywgYnV0 IGJlZm9yZSBhbnkgb3RoZXIgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLCBhbmQgdGh1cyBubyBs b2NraW5nCisgICAgICBpcyByZXF1aXJlZC4KICAgICAgPC9wYXJhPgotCiAgICAgIDxwYXJh PgotICAgICAgQW4gZXhhbXBsZSBvZiBhIDxsaXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwv bGl0ZXJhbD4gYW5kCi0gICAgICA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hvb2s8L2xpdGVy YWw+IGNhbiBiZSBmb3VuZCBpbgorICAgICAgT24gV2luZG93cywgdGhlIDxmdW5jdGlvbj5h dHRhY2hfZm48L2Z1bmN0aW9uPiBjYWxsYmFjaywgaWYgYW55LCBpcworICAgICAgYWRkaXRp b25hbGx5IGNhbGxlZCBhdCBldmVyeSBiYWNrZW5kIHN0YXJ0dXAuICBJdCBjYW4gYmUgdXNl ZCB0bworICAgICAgaW5pdGlhbGl6ZSBhZGRpdGlvbmFsIHBlci1iYWNrZW5kIHN0YXRlIHJl bGF0ZWQgdG8gdGhlIHNoYXJlZCBtZW1vcnkKKyAgICAgIGFyZWEgdGhhdCBpcyBpbmhlcml0 ZWQgdmlhIDxmdW5jdGlvbj5mb3JrKCk8L2Z1bmN0aW9uPiBvbiBvdGhlciBzeXN0ZW1zLgor ICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgQW4gZXhhbXBsZSBvZiBhbGxvY2F0 aW5nIHNoYXJlZCBtZW1vcnkgY2FuIGJlIGZvdW5kIGluCiAgICAgICA8ZmlsZW5hbWU+Y29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmM8L2ZpbGVuYW1l PiBpbgogICAgICAgdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g c291cmNlIHRyZWUuCiAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QzPgogCiAgICAgPHNlY3Qz IGlkPSJ4ZnVuYy1zaGFyZWQtYWRkaW4tYWZ0ZXItc3RhcnR1cCI+Ci0gICAgIDx0aXRsZT5S ZXF1ZXN0aW5nIFNoYXJlZCBNZW1vcnkgQWZ0ZXIgU3RhcnR1cDwvdGl0bGU+CisgICAgIDx0 aXRsZT5SZXF1ZXN0aW5nIFNoYXJlZCBNZW1vcnkgQWZ0ZXIgU3RhcnR1cCB3aXRoIDxmdW5j dGlvbj5TaG1lbVJlcXVlc3RTdHJ1Y3Q8L2Z1bmN0aW9uPjwvdGl0bGU+CisKKyAgICAgPHBh cmE+CisgICAgICBUaGUgPGZ1bmN0aW9uPlNobWVtUmVxdWVzdFN0cnVjdCgpPC9mdW5jdGlv bj4gY2FuIGFsc28gYmUgY2FsbGVkIGFmdGVyCisgICAgICBzeXN0ZW0gc3RhcnR1cCwgd2hp Y2ggaXMgdXNlZnVsIHRvIGFsbG93IHNtYWxsIGFsbG9jYXRpb25zIGluIGFkZC1pbgorICAg ICAgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaW4KKyAgICAgIDx4cmVmIGxp bmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiLz48aW5kZXh0ZXJtPjxwcmlt YXJ5PnNoYXJlZF9wcmVsb2FkX2xpYnJhcmllczwvcHJpbWFyeT48L2luZGV4dGVybT4uCisg ICAgICBIb3dldmVyLCBhZnRlciBzdGFydHVwIHRoZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGlm IHRoZXJlIGlzIG5vdCBlbm91Z2gKKyAgICAgIHNoYXJlZCBtZW1vcnkgYXZhaWxhYmxlLiBU aGUgc3lzdGVtIHJlc2VydmVzIHNvbWUgbWVtb3J5IGZvciBhbGxvY2F0aW9ucworICAgICAg YWZ0ZXIgc3RhcnR1cCwgYnV0IHRoYXQgcmVzZXJ2YXRpb24gaXMgc21hbGwuCisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBCeSBkZWZhdWx0LCA8ZnVuY3Rpb24+UmVnaXN0 ZXJTaG1lbUNhbGxiYWNrcygpPC9mdW5jdGlvbj4gZmFpbHMgd2l0aCBhbgorICAgICAgZXJy b3IgaWYgY2FsbGVkIGFmdGVyIHN5c3RlbSBzdGFydHVwLiBUbyB1c2UgaXQgYWZ0ZXIgc3Rh cnR1cCwgeW91IG11c3QKKyAgICAgIHNldCB0aGUgPGxpdGVyYWw+U0hNRU1fQUxMT1dfQUZU RVJfU1RBUlRVUDwvbGl0ZXJhbD4gZmxhZyBpbiB0aGUKKyAgICAgIGRlc2NyaXB0b3IgdG8g YWNrbm93bGVkZ2UgdGhlIHJpc2suCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAg ICBXaGVuIDxmdW5jdGlvbj5SZWdpc3RlclNobWVtQ2FsbGJhY2tzKCk8L2Z1bmN0aW9uPiBp cyBjYWxsZWQgYWZ0ZXIKKyAgICAgIHN0YXJ0dXAsIGl0IHdpbGwgaW1tZWRpYXRlbHkgY2Fs bCB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzLCBkZXBlbmRpbmcKKyAgICAgIG9uIHdoZXRo ZXIgdGhlIHJlcXVlc3RlZCBtZW1vcnkgYXJlYXMgd2VyZSBhbHJlYWR5IGluaXRpYWxpemVk IGJ5CisgICAgICBhbm90aGVyIGJhY2tlbmQuIFRoZSBjYWxsYmFja3Mgd2lsbCBiZSBjYWxs ZWQgd2hpbGUgaG9sZGluZyBhbiBpbnRlcm5hbAorICAgICAgbG9jaywgd2hpY2ggcHJldmVu dHMgY29uY3VycmVudCB0d28gYmFja2VuZHMgZnJvbSBpbml0aWFsaXphdGluZyB0aGUKKyAg ICAgIG1lbW9yeSBhcmVhIGNvbmN1cnJlbnRseS4KKyAgICAgPC9wYXJhPgorICAgIDwvc2Vj dDM+CisKKyAgICA8c2VjdDMgaWQ9InhmdW5jLXNoYXJlZC1hZGRpbi1keW5hbWljIj4KKyAg ICAgPHRpdGxlPkFsbG9jYXRpbmcgRHluYW1pYyBTaGFyZWQgTWVtb3J5IEFmdGVyIFN0YXJ0 dXA8L3RpdGxlPgogCiAgICAgIDxwYXJhPgogICAgICAgVGhlcmUgaXMgYW5vdGhlciwgbW9y ZSBmbGV4aWJsZSBtZXRob2Qgb2YgcmVzZXJ2aW5nIHNoYXJlZCBtZW1vcnkgdGhhdAotICAg ICAgY2FuIGJlIGRvbmUgYWZ0ZXIgc2VydmVyIHN0YXJ0dXAgYW5kIG91dHNpZGUgYQotICAg ICAgPGxpdGVyYWw+c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPi4gIFRvIGRvIHNvLCBl YWNoIGJhY2tlbmQgdGhhdCB3aWxsCisgICAgICBjYW4gYmUgZG9uZSBhZnRlciBzZXJ2ZXIg c3RhcnR1cC4gIFRvIGRvIHNvLCBlYWNoIGJhY2tlbmQgdGhhdCB3aWxsCiAgICAgICB1c2Ug dGhlIHNoYXJlZCBtZW1vcnkgc2hvdWxkIG9idGFpbiBhIHBvaW50ZXIgdG8gaXQgYnkgY2Fs bGluZzoKIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQgKkdldE5hbWVkRFNNU2VnbWVudChjb25z dCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwKQEAgLTM3MTEsMTAgKzM3NzEsNyBAQCB2b2lk ICpHZXROYW1lZERTTVNlZ21lbnQoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCiAg ICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFVubGlrZSBzaGFyZWQgbWVtb3J5 IHJlc2VydmVkIGF0IHNlcnZlciBzdGFydHVwLCB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAg ICBhY3F1aXJlIDxmdW5jdGlvbj5BZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiBvciBv dGhlcndpc2UgdGFrZSBhY3Rpb24KLSAgICAgIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3 aGVuIHJlc2VydmluZyBzaGFyZWQgbWVtb3J5IHdpdGgKLSAgICAgIDxmdW5jdGlvbj5HZXRO YW1lZERTTVNlZ21lbnQ8L2Z1bmN0aW9uPi4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0 IG9ubHkKKyAgICAgIDxmdW5jdGlvbj5HZXROYW1lZERTTVNlZ21lbnQ8L2Z1bmN0aW9uPiBl bnN1cmVzIHRoYXQgb25seQogICAgICAgb25lIGJhY2tlbmQgYWxsb2NhdGVzIGFuZCBpbml0 aWFsaXplcyB0aGUgc2VnbWVudCBhbmQgdGhhdCBhbGwgb3RoZXIKICAgICAgIGJhY2tlbmRz IHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoZSBmdWxseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxp emVkCiAgICAgICBzZWdtZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFw L2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4 IDY4YTQyZGUwODg5Li44NmZlODYzNTRmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9v dHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3Ry YXAuYwpAQCAtMzcwLDYgKzM3MCw3IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExv Y2tzKCk7CiAKKwlTaG1lbUNhbGxSZXF1ZXN0Q2FsbGJhY2tzKCk7CiAJQ3JlYXRlU2hhcmVk TWVtb3J5QW5kU2VtYXBob3JlcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYwppbmRleCA0MzRlMDY0MzAyMi4uNzU0MjMxMDRiZTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcg QEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNs dWRlICJ0Y29wL2JhY2tlbmRfc3RhcnR1cC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCkBAIC02NzIsNyArNjczLDEwIEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAKIAkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRl cnMgKi8KIAlpZiAoVXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCXsKIAkJSW5pdFNobWVt QWxsb2NhdG9yKFVzZWRTaG1lbVNlZ0FkZHIpOworCQlTaG1lbUNhbGxSZXF1ZXN0Q2FsbGJh Y2tzKCk7CisJfQogCiAJLyoKIAkgKiBSdW4gdGhlIGFwcHJvcHJpYXRlIE1haW4gZnVuY3Rp b24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggM2ZhYzQ2YzQwMmIu LmU4MWVmMjQ4YmYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAt OTU5LDcgKzk1OSwxNCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKIAkvKgotCSAqIEdpdmUgcHJlbG9h ZGVkIGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0aW9uYWwgc2hhcmVkIG1l bW9yeS4KKwkgKiBBc2sgYWxsIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBwcmVsb2FkZWQgbGli cmFyaWVzLCB0byByZWdpc3RlciB0aGVpcgorCSAqIHNoYXJlZCBtZW1vcnkgbmVlZHMuCisJ ICovCisJU2htZW1DYWxsUmVxdWVzdENhbGxiYWNrcygpOworCisJLyoKKwkgKiBBbHNvIGNh bGwgYW55IGxlZ2FjeSBzaG1lbSByZXF1ZXN0IGhvb2tzIHRoYXQgbWlnaHQnYmUgYmVlbiBp bnN0YWxsZWQKKwkgKiBieSBwcmVsb2FkZWQgbGlicmFyaWVzLgogCSAqLwogCXByb2Nlc3Nf c2htZW1fcmVxdWVzdHMoKTsKIApAQCAtMzIzNSw3ICszMjQyLDE0IEBAIFBvc3RtYXN0ZXJT dGF0ZU1hY2hpbmUodm9pZCkKIAkJLyogcmUtcmVhZCBjb250cm9sIGZpbGUgaW50byBsb2Nh bCBtZW1vcnkgKi8KIAkJTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUodHJ1ZSk7CiAKLQkJLyog cmUtY3JlYXRlIHNoYXJlZCBtZW1vcnkgYW5kIHNlbWFwaG9yZXMgKi8KKwkJLyoKKwkJICog UmUtaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGFuZCBzZW1hcGhvcmVzLiAgTm90ZTogV2Ug ZG9uJ3QgY2FsbAorCQkgKiBSZWdpc3RlclNobWVtU3RydWN0cygpIGhlcmUsIHdlIGtlZXAg dGhlIG9sZCByZWdpc3RyYXRpb25zLiAgSW4KKwkJICogb3JkZXIgdG8gcmUtcmVnaXN0ZXIg c3RydWN0cyBpbiBleHRlbnNpb25zLCB3ZSdkIG5lZWQgdG8gcmVsb2FkCisJCSAqIHNoYXJl ZCBwcmVsb2FkIGxpYnJhcmllcywgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhhdC4KKwkJ ICovCisJCVJlc2V0U2htZW1BbGxvY2F0b3IoKTsKKwkJU2htZW1DYWxsUmVxdWVzdENhbGxi YWNrcygpOwogCQlDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAkJVXBk YXRlUE1TdGF0ZShQTV9TVEFSVFVQKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBk NjkyZDQxOTg0Ni4uNDkzZGRkN2YxMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAg LTk5LDggKzk5LDkgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJICogZHVyaW5nIHRo ZSBhY3R1YWwgYWxsb2NhdGlvbiBwaGFzZS4KIAkgKi8KIAlzaXplID0gMTAwMDAwOwotCXNp emUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUoU0hNRU1fSU5ERVhfU0la RSwKLQkJCQkJCQkJCQkJIHNpemVvZihTaG1lbUluZGV4RW50KSkpOworCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTaG1lbUdldFJlcXVlc3RlZFNpemUoKSk7CisKKwkvKiBsZWdhY3kgc3Vi c3lzdGVtcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBkc21fZXN0aW1hdGVfc2l6ZSgp KTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0cnlTaG1lbVNpemUoKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUoKSk7CkBAIC0x NzQsNiArMTc1LDEzIEBAIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHModm9pZCkKIAkgKi8K IAlJbml0aWFsaXplRmFzdFBhdGhMb2NrcygpOwogCisJLyoKKwkgKiBBdHRhY2ggdG8gTFdM b2NrcyBmaXJzdC4gVGhleSBhcmUgbmVlZGVkIGJ5IG1vc3Qgb3RoZXIgc3Vic3lzdGVtcy4K KwkgKi8KKwlMV0xvY2tTaG1lbUluaXQoKTsKKworCS8qIEVzdGFibGlzaCBwb2ludGVycyB0 byBhbGwgc2hhcmVkIG1lbW9yeSBhcmVhcyBpbiB0aGlzIGJhY2tlbmQgKi8KKwlTaG1lbUF0 dGFjaFJlcXVlc3RlZCgpOwogCUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCk7CiAKIAkv KgpAQCAtMjE4LDcgKzIyNiwyMSBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KHZvaWQpCiAJICovCiAJSW5pdFNobWVtQWxsb2NhdG9yKHNlZ2hkcik7CiAKLQkvKiBJbml0 aWFsaXplIHN1YnN5c3RlbXMgKi8KKwkvKiBSZXNlcnZlIHNwYWNlIGZvciBzZW1hcGhvcmVz LiAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCVBHUmVzZXJ2ZVNlbWFwaG9yZXMo UHJvY0dsb2JhbFNlbWFzKCkpOworCisJLyoKKwkgKiBJbml0aWFsaXplIExXTG9ja3MgZmly c3QsIGluIGNhc2UgYW55IG9mIHRoZSBzaG1lbSBpbml0IGZ1bmN0aW9uIHVzZQorCSAqIExX TG9ja3MuICAoTm90aGluZyBlbHNlIGNhbiBiZSBydW5uaW5nIGR1cmluZyBzdGFydHVwLCBz byB0aGV5IGRvbid0CisJICogbmVlZCB0byBkbyBhbnkgbG9ja2luZyB5ZXQsIGJ1dCB3ZSBu ZXZlcnRoZWxlc3MgYWxsb3cgaXQuKQorCSAqLworCUxXTG9ja1NobWVtSW5pdCgpOworCisJ LyogSW5pdGlhbGl6ZSBhbGwgc2htZW0gYXJlYXMgKi8KKwlTaG1lbUluaXRSZXF1ZXN0ZWQo KTsKKworCS8qIEluaXRpYWxpemUgbGVnYWN5IHN1YnN5c3RlbXMgKi8KIAlDcmVhdGVPckF0 dGFjaFNobWVtU3RydWN0cygpOwogCiAJLyogSW5pdGlhbGl6ZSBkeW5hbWljIHNoYXJlZCBt ZW1vcnkgZmFjaWxpdGllcy4gKi8KQEAgLTI0OSwxMSArMjcxLDYgQEAgQ3JlYXRlU2hhcmVk TWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogc3RhdGljIHZvaWQKIENyZWF0ZU9yQXR0YWNo U2htZW1TdHJ1Y3RzKHZvaWQpCiB7Ci0JLyoKLQkgKiBTZXQgdXAgTFdMb2Nrcy4gIFRoZXkg YXJlIG5lZWRlZCBieSBtb3N0IG90aGVyIHN1YnN5c3RlbXMuCi0JICovCi0JTFdMb2NrU2ht ZW1Jbml0KCk7Ci0KIAlkc21fc2htZW1faW5pdCgpOwogCURTTVJlZ2lzdHJ5U2htZW1Jbml0 KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IGM4NmQ2OTFkY2ZiLi44NDA5 OWNlNzhmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC0xOSw0OCArMTksMTE2 IEBACiAgKiBtZXRob2RzKS4gIFRoZSByb3V0aW5lcyBpbiB0aGlzIGZpbGUgYXJlIHVzZWQg Zm9yIGFsbG9jYXRpbmcgYW5kCiAgKiBiaW5kaW5nIHRvIHNoYXJlZCBtZW1vcnkgZGF0YSBz dHJ1Y3R1cmVzLgogICoKLSAqIE5PVEVTOgotICoJCShhKSBUaGVyZSBhcmUgdGhyZWUga2lu ZHMgb2Ygc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVyZXMKLSAqCWF2YWlsYWJsZSB0byBQ T1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzLCBxdWV1ZXMgYW5kIGhhc2gKLSAqCXRh Ymxlcy4gIEZpeGVkLXNpemUgc3RydWN0dXJlcyBjb250YWluIHRoaW5ncyBsaWtlIGdsb2Jh bCB2YXJpYWJsZXMKLSAqCWZvciBhIG1vZHVsZSBhbmQgc2hvdWxkIG5ldmVyIGJlIGFsbG9j YXRlZCBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeQotICoJaW5pdGlhbGl6YXRpb24gcGhhc2Uu ICBIYXNoIHRhYmxlcyBoYXZlIGEgZml4ZWQgbWF4aW11bSBzaXplLCBidXQKLSAqCXRoZWly IGFjdHVhbCBzaXplIGNhbiB2YXJ5IGR5bmFtaWNhbGx5LiAgV2hlbiBlbnRyaWVzIGFyZSBh ZGRlZAotICoJdG8gdGhlIHRhYmxlLCBtb3JlIHNwYWNlIGlzIGFsbG9jYXRlZC4gIFF1ZXVl cyBsaW5rIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGVp dGhlciB3aXRoaW4gZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIG9yIGFzIGhhc2gKLSAqCWJ1Y2tl dHMuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBoYXMgYSBzdHJpbmcgbmFtZSB0byBp ZGVudGlmeQotICoJaXQgKGFzc2lnbmVkIGluIHRoZSBtb2R1bGUgdGhhdCBkZWNsYXJlcyBp dCkuCi0gKgotICoJCShiKSBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIGVhY2ggbW9kdWxlIGxv b2tzIGZvciBpdHMKLSAqCXNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgaW4gYSBoYXNoIHRhYmxl IGNhbGxlZCB0aGUgIlNobWVtIEluZGV4Ii4KLSAqCUlmIHRoZSBkYXRhIHN0cnVjdHVyZSBp cyBub3QgcHJlc2VudCwgdGhlIGNhbGxlciBjYW4gYWxsb2NhdGUKLSAqCWEgbmV3IG9uZSBh bmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBwcmVzZW50LAot ICoJdGhlIGNhbGxlciAiYXR0YWNoZXMiIHRvIHRoZSBzdHJ1Y3R1cmUgYnkgaW5pdGlhbGl6 aW5nIGEgcG9pbnRlcgotICoJaW4gdGhlIGxvY2FsIGFkZHJlc3Mgc3BhY2UuCi0gKgkJVGhl IHNobWVtIGluZGV4IGhhcyB0d28gcHVycG9zZXM6IGZpcnN0LCBpdCBnaXZlcyB1cwotICoJ YSBzaW1wbGUgbW9kZWwgb2YgaG93IHRoZSB3b3JsZCBsb29rcyB3aGVuIGEgYmFja2VuZCBw cm9jZXNzCi0gKglpbml0aWFsaXplcy4gIElmIHNvbWV0aGluZyBpcyBwcmVzZW50IGluIHRo ZSBzaG1lbSBpbmRleCwKLSAqCWl0IGlzIGluaXRpYWxpemVkLiAgSWYgaXQgaXMgbm90LCBp dCBpcyB1bmluaXRpYWxpemVkLiAgU2Vjb25kLAotICoJdGhlIHNobWVtIGluZGV4IGFsbG93 cyB1cyB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IG9uIGRlbWFuZAotICoJaW5zdGVhZCBv ZiB0cnlpbmcgdG8gcHJlYWxsb2NhdGUgc3RydWN0dXJlcyBhbmQgaGFyZC13aXJlIHRoZQot ICoJc2l6ZXMgYW5kIGxvY2F0aW9ucyBpbiBoZWFkZXIgZmlsZXMuICBJZiB5b3UgYXJlIHVz aW5nIGEgbG90Ci0gKglvZiBzaGFyZWQgbWVtb3J5IGluIGEgbG90IG9mIGRpZmZlcmVudCBw bGFjZXMgKGFuZCBjaGFuZ2luZwotICoJdGhpbmdzIGR1cmluZyBkZXZlbG9wbWVudCksIHRo aXMgaXMgaW1wb3J0YW50LgotICoKLSAqCQkoYykgSW4gc3RhbmRhcmQgVW5peC1pc2ggZW52 aXJvbm1lbnRzLCBpbmRpdmlkdWFsIGJhY2tlbmRzIGRvIG5vdAotICoJbmVlZCB0byByZS1l c3RhYmxpc2ggdGhlaXIgbG9jYWwgcG9pbnRlcnMgaW50byBzaGFyZWQgbWVtb3J5LCBiZWNh dXNlCi0gKgl0aGV5IGluaGVyaXQgY29ycmVjdCB2YWx1ZXMgb2YgdGhvc2UgdmFyaWFibGVz IHZpYSBmb3JrKCkgZnJvbSB0aGUKLSAqCXBvc3RtYXN0ZXIuICBIb3dldmVyLCB0aGlzIGRv ZXMgbm90IHdvcmsgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlLgotICoJSW4gcG9ydHMgdXNp bmcgRVhFQ19CQUNLRU5ELCBuZXcgYmFja2VuZHMgaGF2ZSB0byBzZXQgdXAgdGhlaXIgbG9j YWwKLSAqCXBvaW50ZXJzIHVzaW5nIHRoZSBtZXRob2QgZGVzY3JpYmVkIGluIChiKSBhYm92 ZS4KLSAqCi0gKgkJKGQpIG1lbW9yeSBhbGxvY2F0aW9uIG1vZGVsOiBzaGFyZWQgbWVtb3J5 IGNhbiBuZXZlciBiZQotICoJZnJlZWQsIG9uY2UgYWxsb2NhdGVkLiAgIEVhY2ggaGFzaCB0 YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3QsCi0gKglzbyBoYXNoIGJ1Y2tldHMgY2FuIGJl IHJldXNlZCB3aGVuIGFuIGl0ZW0gaXMgZGVsZXRlZC4gIEhvd2V2ZXIsCi0gKglpZiBvbmUg aGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0aGVuIHNocmlua3MsIGl0cyBzcGFj ZQotICoJY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gb3RoZXIgdGFibGVzLiAgV2UgY291 bGQgYnVpbGQgYSBzaW1wbGUKLSAqCWhhc2ggYnVja2V0IGdhcmJhZ2UgY29sbGVjdG9yIGlm IG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zCi0gKgl1bm5lY2Vzc2FyeS4KKyAqIFRo aXMgbW9kdWxlIHByb3ZpZGVzIGZhY2lsaXRpZXMgdG8gYWxsb2NhdGUgZml4ZWQtc2l6ZSBz dHJ1Y3R1cmVzIGluIHNoYXJlZAorICogbWVtb3J5LCBmb3IgdGhpbmdzIGxpa2UgdmFyaWFi bGVzIHNoYXJlZCBiZXR3ZWVuIGFsbCBiYWNrZW5kIHByb2Nlc3Nlcy4KKyAqIEVhY2ggc3Vj aCBzdHJ1Y3R1cmUgaGFzIGEgc3RyaW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQsIHNwZWNpZmll ZCBpbiB0aGUKKyAqIGRlc2NyaXB0b3Igd2hlbiBpdCBpcyByZXF1ZXN0ZWQuICBzaG1lbV9o YXNoLmMgcHJvdmlkZXMgYSBzaGFyZWQgaGFzaCB0YWJsZQorICogaW1wbGVtZW50YXRpb24g b24gdG9wIG9mIHRoYXQuCisgKgorICogU2hhcmVkIG1lbW9yeSBhcmVhcyBzaG91bGQgdXN1 YWxseSBub3QgYmUgYWxsb2NhdGVkIGFmdGVyIHBvc3RtYXN0ZXIKKyAqIHN0YXJ0dXAsIGFs dGhvdWdoIHdlIGRvIGFsbG93IHNtYWxsIGFsbG9jYXRpb25zIGxhdGVyIGZvciB0aGUgYmVu ZWZpdCBvZgorICogZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBsb2FkZWQgYWZ0ZXIgc3RhcnR1 cC4gIERlc3BpdGUgdGhhdCBhbGxvd2FuY2UsCisgKiBleHRlbnNpb25zIHRoYXQgbmVlZCBz aGFyZWQgbWVtb3J5IHNob3VsZCBiZSBhZGRlZCBpbgorICogc2hhcmVkX3ByZWxvYWRfbGli cmFyaWVzLCBiZWNhdXNlIHRoZSBhbGxvd2FuY2UgaXMgcXVpdGUgc21hbGwgYW5kIHRoZXJl IGlzCisgKiBubyBndWFyYW50ZWUgdGhhdCBhbnkgbWVtb3J5IGlzIGF2YWlsYWJsZSBhZnRl ciBzdGFydHVwLgorICoKKyAqIE5vd2FkYXlzLCB0aGVyZSBpcyBhbHNvIGEgdGhpcmQgd2F5 IHRvIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgY2FsbGVkCisgKiBEeW5hbWljIFNoYXJlZCBN ZW1vcnkuICBTZWUgZHNtLmMgZm9yIHRoYXQgZmFjaWxpdHkuICBPbmUgYmlnIGRpZmZlcmVu Y2UKKyAqIGJldHdlZW4gdHJhZGl0aW9uYWwgc2hhcmVkIG1lbW9yeSBoYW5kbGVkIGJ5IHNo bWVtLmMgYW5kIGR5bmFtaWMgc2hhcmVkCisgKiBtZW1vcnkgaXMgdGhhdCB0cmFkaXRpb25h bCBzaGFyZWQgbWVtb3J5IGFyZWFzIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUKKyAqIGFkZHJl c3MgaW4gYWxsIHByb2Nlc3Nlcywgc28geW91IGNhbiB1c2Ugbm9ybWFsIHBvaW50ZXJzIGlu IHNoYXJlZCBtZW1vcnkKKyAqIHN0cnVjdHMuICBXaXRoIER5bmFtaWMgU2hhcmVkIE1lbW9y eSwgeW91IG11c3QgdXNlIG9mZnNldHMgb3IgRFNBIHBvaW50ZXJzCisgKiBpbnN0ZWFkLgor ICoKKyAqIFNoYXJlZCBtZW1vcnkgbWFuYWdlZCBieSBzaG1lbS5jIGNhbiBuZXZlciBiZSBm cmVlZCwgb25jZSBhbGxvY2F0ZWQuICBFYWNoCisgKiBoYXNoIHRhYmxlIGhhcyBpdHMgb3du IGZyZWUgbGlzdCwgc28gaGFzaCBidWNrZXRzIGNhbiBiZSByZXVzZWQgd2hlbiBhbgorICog aXRlbSBpcyBkZWxldGVkLiAgSG93ZXZlciwgaWYgb25lIGhhc2ggdGFibGUgZ3Jvd3MgdmVy eSBsYXJnZSBhbmQgdGhlbgorICogc2hyaW5rcywgaXRzIHNwYWNlIGNhbm5vdCBiZSByZWRp c3RyaWJ1dGVkIHRvIG90aGVyIHRhYmxlcy4gIFdlIGNvdWxkIGJ1aWxkCisgKiBhIHNpbXBs ZSBoYXNoIGJ1Y2tldCBnYXJiYWdlIGNvbGxlY3RvciBpZiBuZWVkIGJlLiAgUmlnaHQgbm93 LCBpdCBzZWVtcworICogdW5uZWNlc3NhcnkuCisgKgorICogVXNhZ2UKKyAqIC0tLS0tCisg KgorICogVG8gYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSwgeW91IG5lZWQgdG8gcmVnaXN0ZXIg YSBzZXQgb2YgY2FsbGJhY2sgZnVuY3Rpb25zCisgKiB3aGljaCBoYW5kbGUgdGhlIGxpZmVj eWNsZSBvZiB0aGUgYWxsb2NhdGlvbi4gIEluIHRoZSByZWdpc3Rlcl9mbgorICogY2FsbGJh Y2ssIGZpbGwgaW4gYSBTaG1lbVN0cnVjdERlc2MgZGVzY3JpcHRvciB3aXRoIHRoZSBuYW1l LCBzaXplLCBhbmQgYW55CisgKiBvdGhlciBvcHRpb25zLCBhbmQgY2FsbCBTaG1lbVJlcXVl c3RTdHJ1Y3QoKS4gIExlYXZlIGFueSB1bnVzZWQgZmllbGRzIGFzCisgKiB6ZXJvcy4KKyAq CisgKgl0eXBlZGVmIHN0cnVjdCBNeVNobWVtRGF0YSB7CisgKgkJLi4uCisgKgl9IE15U2ht ZW1EYXRhOworICoKKyAqCXN0YXRpYyBNeVNobWVtRGF0YSAqTXlTaG1lbTsKKyAqCisgKglz dGF0aWMgdm9pZCBteV9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CisgKglzdGF0aWMgdm9p ZCBteV9zaG1lbV9pbml0KHZvaWQgKmFyZyk7CisgKgorICogIGNvbnN0IFNobWVtQ2FsbGJh Y2tzIE15U2htZW1DYWxsYmFja3MgPSB7CisgKgkJLnJlcXVlc3RfZm4gPSBteV9zaG1lbV9y ZXF1ZXN0LAorICoJCS5pbml0X2ZuID0gbXlfc2htZW1faW5pdCwKKyAqCX07CisgKgorICoJ c3RhdGljIHZvaWQKKyAqCW15X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQorICoJeworICoJ CXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXlTaG1lbURlc2M7CisgKgorICoJCVNobWVtUmVx dWVzdFN0cnVjdCgmTXlTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgewor ICoJCQkubmFtZSA9ICJNeSBzaG1lbSBhcmVhIiwKKyAqCQkJLnNpemUgPSBzaXplb2YoTXlT aG1lbURhdGEpLAorICoJCQkucHRyID0gKHZvaWQgKiopICZNeVNobWVtLAorICoJCX0pOwor ICoJfQorICoKKyAqIEluIGJ1aWx0aW4gUG9zdGdyZVNRTCBjb2RlLCBhZGQgdGhlIGNhbGxi YWNrcyB0byB0aGUgbGlzdCBpbgorICogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1s aXN0LmguIEluIGFuIGFkZC1pbiBtb2R1bGUsIHlvdSBjYW4gcmVnaXN0ZXIKKyAqIHRoZSBj YWxsYmFja3MgYnkgY2FsbGluZyBSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZNeVNobWVtQ2Fs bGJhY2tzKSBpbiB0aGUKKyAqIGV4dGVuc2lvbidzIF9QR19pbml0KCkgZnVuY3Rpb24uCisg KgorICogTGlmZWN5Y2xlCisgKiAtLS0tLS0tLS0KKyAqCisgKiBJbml0aWFsaXppbmcgc2hh cmVkIG1lbW9yeSBoYXBwZW5zIGluIG11bHRpcGxlIHBoYXNlcy4gSW4gdGhlIGZpcnN0IHBo YXNlLAorICogZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYWxsIHRoZSBzaG1lbV9yZXF1 ZXN0IGNhbGxiYWNrcyBhcmUgY2FsbGVkLgorICogT25seSBhZnRlciBhbGwgdGhlIHJlcXVl c3QgY2FsbGJhY2tzIGhhdmUgYmVlbiBjYWxsZWQgYW5kIGFsbCB0aGUgc2htZW0KKyAqIGFy ZWFzIGhhdmUgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgpIGNh bGxzIHdlIGtub3cgaG93CisgKiBtdWNoIHNoYXJlZCBtZW1vcnkgd2UgbmVlZCBpbiB0b3Rh bC4gQWZ0ZXIgdGhhdCwgcG9zdG1hc3RlciBhbGxvY2F0ZXMKKyAqIGdsb2JhbCBzaGFyZWQg bWVtb3J5IHNlZ21lbnQsIGFuZCBjYWxscyBhbGwgdGhlIGluaXRfZm4gY2FsbGJhY2tzIHRv CisgKiBpbml0aWFsaXplIGFsbCB0aGUgcmVxdWVzdGVkIHNobWVtIGFyZWFzLgorICoKKyAq IEluIHN0YW5kYXJkIFVuaXgtaXNoIGVudmlyb25tZW50cywgaW5kaXZpZHVhbCBiYWNrZW5k cyBkbyBub3QgbmVlZCB0bworICogcmUtZXN0YWJsaXNoIHRoZWlyIGxvY2FsIHBvaW50ZXJz IGludG8gc2hhcmVkIG1lbW9yeSwgYmVjYXVzZSB0aGV5IGluaGVyaXQKKyAqIGNvcnJlY3Qg dmFsdWVzIG9mIHRob3NlIHZhcmlhYmxlcyB2aWEgZm9yaygpIGZyb20gdGhlIHBvc3RtYXN0 ZXIuICBIb3dldmVyLAorICogdGhpcyBkb2VzIG5vdCB3b3JrIGluIHRoZSBFWEVDX0JBQ0tF TkQgY2FzZS4gIEluIHBvcnRzIHVzaW5nIEVYRUNfQkFDS0VORCwKKyAqIGJhY2tlbmQgc3Rh cnR1cCBhbHNvIGNhbGxzIHRoZSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcyB0byByZS1lc3Rh Ymxpc2ggdGhlCisgKiBrbm93bGVkZ2UgYWJvdXQgZWFjaCBzaGFyZWQgbWVtb3J5IGFyZWEs IHNldHMgdGhlIHBvaW50ZXIgdmFyaWFibGVzCisgKiAoKlNobWVtU3RydWN0RGVzYy0+cHRy KSwgYW5kIGNhbGxzIHRoZSBhdHRhY2hfZm4gY2FsbGJhY2ssIGlmIGFueSwgZm9yCisgKiBh ZGRpdGlvbmFsIHBlci1iYWNrZW5kIHNldHVwLgorICoKKyAqIExlZ2FjeSBTaG1lbUluaXRT dHJ1Y3QoKS9TaG1lbUluaXRIYXNoKCkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNobWVtSW5pdFN0 cnVjdCgpL1NobWVtSW5pdEhhc2goKSBpcyBhbm90aGVyIHdheSBvZiByZWdpc3RlcmluZyBz aG1lbQorICogYXJlYXMuICBJdCBwcmUtZGF0ZXMgdGhlIFNobWVtUmVxdWVzdFN0cnVjdCgp L1NobWVtUmVxdWVzdEhhc2goKSBmdW5jdGlvbnMsCisgKiBhbmQgc2hvdWxkIG5vdCBiZSB1 c2VkIGluIG5ldyBjb2RlLCBidXQgYXMgb2YgdGhpcyB3cml0aW5nIGl0IGlzIHN0aWxsCisg KiB3aWRlbHkgdXNlZCBpbiBleHRlbnNpb25zLgorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2ht ZW0gYXJlYSB3aXRoIFNobWVtSW5pdFN0cnVjdCgpLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5 CisgKiByZWdpc3RlciB0aGUgc2l6ZSBuZWVkZWQgZm9yIHRoZSBhcmVhIGJ5IGNhbGxpbmcg UmVxdWVzdEFkZGluU2htZW1TcGFjZSgpCisgKiBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1l bV9yZXF1ZXN0X2hvb2ssIGFuZCBhbGxvY2F0ZSB0aGUgYXJlYSBieSBjYWxsaW5nCisgKiBT aG1lbUluaXRTdHJ1Y3QoKSBmcm9tIHRoZSBleHRlbnNpb24ncyBzaG1lbV9zdGFydHVwX2hv b2suICBUaGVyZSBhcmUgbm8KKyAqIGluaXQvYXR0YWNoIGNhbGxiYWNrcy4gIEluc3RlYWQs IHRoZSBjYWxsZXIgb2YgU2htZW1Jbml0U3RydWN0KCkgbXVzdCBjaGVjaworICogdGhlIHJl dHVybiBzdGF0dXMgb2YgU2htZW1Jbml0U3RydWN0KCkgYW5kIGluaXRpYWxpemUgdGhlIHN0 cnVjdCBpZiBpdCB3YXMKKyAqIG5vdCBwcmV2aW91c2x5IGluaXRpYWxpemVkLgorICoKKyAq IENhbGxpbmcgU2htZW1BbGxvYygpIGRpcmVjdGx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIFRoZXJlJ3MgYSBtb3JlIGxvdy1sZXZlbCB3YXkgb2YgYWxs b2NhdGluZyBzaGFyZWQgbWVtb3J5IHRvbzogeW91IGNhbiBjYWxsCisgKiBTaG1lbUFsbG9j KCkgZGlyZWN0bHkuICBJdCdzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBoaWdoZXIgbGV2ZWwg bWVjaGFuaXNtcywKKyAqIGFuZCBzaG91bGQgZ2VuZXJhbGx5IG5vdCBiZSBjYWxsZWQgZGly ZWN0bHkuCiAgKi8KIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCkBAIC03OSw2ICsxNDcsNzQg QEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxl c3RvcmUuaCIKIAorLyoKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2tzLgorICoKKyAqIER1cmlu ZyBwb3N0bWFzdGVyIHN0YXJ0dXAsIHdlIGFjY3VtdWxhdGUgdGhlIGNhbGxiYWNrcyBmcm9t IGFsbCBzdWJzeXN0ZW1zCisgKiBpbiB0aGlzIGxpc3QuCisgKgorICogVGhpcyBpcyBpbiBw cm9jZXNzIHByaXZhdGUgbWVtb3J5LCBhbHRob3VnaCBvbiBVbml4LWxpa2Ugc3lzdGVtcywg d2UgZXhwZWN0CisgKiBhbGwgdGhlIHJlZ2lzdHJhdGlvbnMgdG8gaGFwcGVuIGF0IHBvc3Rt YXN0ZXIgc3RhcnR1cCB0aW1lIGFuZCBiZSBpbmhlcml0ZWQKKyAqIGJ5IGFsbCB0aGUgY2hp bGQgcHJvY2Vzc2VzIHZpYSBmb3JrKCkuCisgKi8KK3N0YXRpYyBMaXN0ICpyZWdpc3RlcmVk X3NobWVtX2NhbGxiYWNrczsKKworLyoKKyAqIEluIHRoZSBzaG1lbSByZXF1ZXN0IHBoYXNl LCBhbGwgdGhlIHNobWVtIGFyZWFzIHJlcXVlc3RlZCB3aXRoCisgKiBTaG1lbVJlcXVlc3RJ bnRlcm5hbCgpIGFyZSBhY2N1bXVsYXRlZCBoZXJlLgorICovCit0eXBlZGVmIHN0cnVjdAor eworCVNobWVtU3RydWN0RGVzYyAqZGVzYzsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzICpv cHRpb25zOworCVNobWVtQXJlYUtpbmQga2luZDsKK30gU2htZW1SZXF1ZXN0OworCitzdGF0 aWMgTGlzdCAqcmVxdWVzdGVkX3NobWVtX2FyZWFzOworCisvKgorICogUGVyLXByb2Nlc3Mg c3RhdGUgbWFjaGluZSwgZm9yIHNhbml0eSBjaGVja2luZyB0aGF0IHdlIGRvIHRoaW5ncyBp biB0aGUKKyAqIHJpZ2h0IG9yZGVyLgorICoKKyAqIFBvc3RtYXN0ZXI6CisgKiAgIElOSVRJ QUwgLT4gUkVRVUVTVElORyAtPiBJTklUSUFMSVpJTkcgLT4gRE9ORQorICoKKyAqIEJhY2tl bmRzIGluIEVYRUNfQkFDS0VORCBtb2RlOgorICogICBJTklUSUFMIC0+IFJFUVVFU1RJTkcg LT4gQVRUQUNISU5HIC0+IERPTkUKKyAqCisgKiBMYXRlIHJlcXVlc3Q6CisgKiAgIERPTkUg LT4gUkVRVUVTVElORyAtPiBMQVRFX0FUVEFDSF9PUl9JTklUIC0+IERPTkUKKyAqLworc3Rh dGljIGVudW0KK3sKKwkvKiBJbml0aWFsIHN0YXRlICovCisJU0JfSU5JVElBTCwKKworCS8q CisJICogV2hlbiB3ZSBjYWxsIHRoZSBzaG1lbV9yZXF1ZXN0IGNhbGxiYWNrcywgd2UgZW50 ZXIgdGhlIFNCX1JFUVVFU1RJTkcKKwkgKiBwaGFzZS4gQWxsIFNobWVtUmVxdWVzdFN0cnVj dCBjYWxscyBoYXBwZW4gaW4gdGhpcyBzdGF0ZS4KKwkgKi8KKwlTQl9SRVFVRVNUSU5HLAor CisJLyoKKwkgKiBQb3N0bWFzdGVyIGhhcyBmaW5pc2hlZCBhbGwgc2htZW0gcmVxdWVzdHMs IGFuZCBpcyBub3cgaW5pdGlhbGl6aW5nIHRoZQorCSAqIHNoYXJlZCBtZW1vcnkgc2VnbWVu dC4gV2UgYXJlIG5vdyBjYWxsaW5nIHRoZSBpbml0X2ZuIGNhbGxiYWNrcy4KKwkgKi8KKwlT Ql9JTklUSUFMSVpJTkcsCisKKwkvKgorCSAqIEEgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNz IGlzIHN0YXJ0aW5nIHVwLiBUaGUgYXR0YWNoX2ZuIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxs ZWQgaW4gdGhpcyBzdGF0ZS4KKwkgKi8KKwlTQl9BVFRBQ0hJTkcsCisKKwkvKiBBbiBhZnRl ci1zdGFydHVwIGFsbG9jYXRpb24gb3IgYXR0YWNobWVudCBpcyBpbiBwcm9ncmVzcy4gKi8K KwlTQl9MQVRFX0FUVEFDSF9PUl9JTklULAorCisJLyogTm9ybWFsIHN0YXRlIGFmdGVyIHNo bWVtIGluaXRpYWxpemF0aW9uIC8gYXR0YWNobWVudCAqLworCVNCX0RPTkUsCit9CQkJc2ht ZW1fc3RhcnR1cF9zdGF0ZTsKKwogLyoKICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3Ry dWN0dXJlIHN0b3JlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhl IG9mZnNldCB0aGF0IFBHU2htZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4g IEFsbG9jYXRpb25zIGJ5CkBAIC0xMDksMjUgKzI0NSwzNzMgQEAgc3RhdGljIHZvaWQgKlNo bWVtQmFzZTsJCQkvKiBzdGFydCBhZGRyZXNzIG9mIHNoYXJlZCBtZW1vcnkgKi8KIHN0YXRp YyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9mIHNoYXJlZCBtZW1vcnkg Ki8KIAogc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3I7Ci1zdGF0 aWMgSFRBQiAqU2htZW1JbmRleCA9IE5VTEw7IC8qIHByaW1hcnkgaW5kZXggaGFzaHRhYmxl IGZvciBzaG1lbSAqLworCisvKgorICogU2htZW1JbmRleCBpcyBhIGdsb2JhbCBkaXJlY3Rv cnkgb2Ygc2htZW0gYXJlYXMsIGl0c2VsZiBhbHNvIHN0b3JlZCBpbiB0aGUKKyAqIHNoYXJl ZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBIVEFCICpTaG1lbUluZGV4OworCisgLyogbWF4IHNp emUgb2YgZGF0YSBzdHJ1Y3R1cmUgc3RyaW5nIG5hbWUgKi8KKyNkZWZpbmUgU0hNRU1fSU5E RVhfS0VZU0laRQkJICg0OCkKKworLyoKKyAqICMgb2YgYWRkaXRpb25hbCBlbnRyaWVzIHRv IHJlc2VydmUgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlLCBmb3IKKyAqIGFsbG9jYXRpb25z IGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cC4gIChUaGlzIGlzIG5vdCBhIGhhcmQgbGltaXQs IHRoZSBoYXNoCisgKiB0YWJsZSBjYW4gZ3JvdyBsYXJnZXIgdGhhbiB0aGF0IGlmIHRoZXJl IGlzIHNoYXJlZCBtZW1vcnkgYXZhaWxhYmxlKQorICovCisjZGVmaW5lIFNITUVNX0lOREVY X0FERElUSU9OQUxfU0laRQkJICg2NCkKKworLyogdGhpcyBpcyBhIGhhc2ggYnVja2V0IGlu IHRoZSBzaG1lbSBpbmRleCB0YWJsZSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljaGFyCQlr ZXlbU0hNRU1fSU5ERVhfS0VZU0laRV07CS8qIHN0cmluZyBuYW1lICovCisJdm9pZAkgICAq bG9jYXRpb247CQkvKiBsb2NhdGlvbiBpbiBzaGFyZWQgbWVtICovCisJU2l6ZQkJc2l6ZTsJ CQkvKiAjIGJ5dGVzIHJlcXVlc3RlZCBmb3IgdGhlIHN0cnVjdHVyZSAqLworCVNpemUJCWFs bG9jYXRlZF9zaXplOyAvKiAjIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAqLworfSBTaG1l bUluZGV4RW50OwogCiAvKiBUbyBnZXQgcmVsaWFibGUgcmVzdWx0cyBmb3IgTlVNQSBpbnF1 aXJ5IHdlIG5lZWQgdG8gInRvdWNoIHBhZ2VzIiBvbmNlICovCiBzdGF0aWMgYm9vbCBmaXJz dE51bWFUb3VjaCA9IHRydWU7CiAKK3N0YXRpYyBib29sIEF0dGFjaE9ySW5pdChTaG1lbVJl cXVlc3QgKnJlcXVlc3QsIGJvb2wgaW5pdF9hbGxvd2VkLCBib29sIGF0dGFjaF9hbGxvd2Vk KTsKKwogRGF0dW0JCXBnX251bWFfYXZhaWxhYmxlKFBHX0ZVTkNUSU9OX0FSR1MpOwogCisv KgorICoJU2htZW1SZXF1ZXN0U3RydWN0KCkgLS0tIHJlcXVlc3QgYSBuYW1lZCBzaGFyZWQg bWVtb3J5IGFyZWEKKyAqCisgKiBTdWJzeXN0ZW1zIGNhbGwgdGhpcyB0byByZWdpc3RlciB0 aGVpciBzaGFyZWQgbWVtb3J5IG5lZWRzLiAgVGhpcyBpcworICogdXN1YWxseSBkb25lIGVh cmx5IGluIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNl Z21lbnQKKyAqIGhhcyBiZWVuIGNyZWF0ZWQsIHNvIHRoYXQgdGhlIHNpemUgY2FuIGJlIGlu Y2x1ZGVkIGluIHRoZSBlc3RpbWF0ZSBmb3IKKyAqIHRvdGFsIGFtb3VudCBvZiBzaGFyZWQg bWVtb3J5IG5lZWRlZC4gIFdlIHNldCBhc2lkZSBhIHNtYWxsIGFtb3VudCBvZgorICogbWVt b3J5IGZvciBhbGxvY2F0aW9ucyB0aGF0IGhhcHBlbiBsYXRlciwgZm9yIHRoZSBiZW5lZml0 IG9mIG5vbi1wcmVsb2FkZWQKKyAqIGV4dGVuc2lvbnMsIGJ1dCB0aGF0IHNob3VsZCBub3Qg YmUgcmVsaWVkIHVwb24uCisgKgorICogVGhpcyBkb2VzIG5vdCB5ZXQgYWxsb2NhdGUgdGhl IG1lbW9yeSwgYnV0IG1lcmVseSByZWdpc3RlciB0aGUgbmVlZCBmb3IgaXQuCisgKiBUaGUg YWN0dWFsIGFsbG9jYXRpb24gaGFwcGVucyBsYXRlciBpbiB0aGUgcG9zdG1hc3RlciBzdGFy dHVwIHNlcXVlbmNlLgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSBhIHNobWVt X3JlcXVlc3QgY2FsbGJhY2sgZnVuY3Rpb24sIHJlZ2lzdGVyZWQgd2l0aAorICogUmVnaXN0 ZXJTaG1lbUNhbGxiYWNrcygpLiAgVGhpcyBlbmZvcmNlcyBhIGNvZGluZyBwYXR0ZXJuIHRo YXQgd29ya3MgdGhlCisgKiBzYW1lIGluIG5vcm1hbCBVbml4IHN5c3RlbXMgYW5kIHdpdGgg RVhFQ19CQUNLRU5ELiAgSW4gcG9zdG1hc3RlciwgdGhlIHRoZQorICogc2htZW1fcmVxdWVz dCBjYWxsYmFjayBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAsIGJ1dCBpbiBFWEVDX0JBQ0tF TkQgbW9kZSwKKyAqIGl0IGlzIGFsc28gY2FsbGVkIGluIGVhY2ggYmFja2VuZCBhdCBiYWNr ZW5kIHN0YXJ0dXAuICBCeSBjYWxsaW5nIHRoZSBzYW1lCisgKiBmdW5jdGlvbiBpbiBib3Ro IGNhc2VzLCB3ZSBlbnN1cmUgdGhhdCBhbGwgdGhlIHNobWVtIGFyZWFzIGFyZSByZWdpc3Rl cmVkCisgKiB0aGUgc2FtZSB3YXkgaW4gYWxsIHByb2Nlc3Nlcy4KKyAqCisgKiAnZGVzYycg aXMgYSBiYWNrZW5kLXByaXZhdGUgaGFuZGxlIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBhcmVh LgorICoKKyAqICdvcHRpb25zJyBkZWZpbmVzIHRoZSBuYW1lIGFuZCBzaXplIG9mIHRoZSBh cmVhLCBhbmQgYW55IG90aGVyIG9wdGlvbmFsCisgKiBmZWF0dXJlcy4gTGVhdmUgdW51c2Vk IG9wdGlvbnMgYXMgemVyb3MuICBUaGUgb3B0aW9ucyBhcmUgY29waWVkIHRvCisgKiBsb25n ZXItbGl2ZWQgbWVtb3J5LCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gbGl2ZSBhZnRlciB0aGUK KyAqIFNobWVtUmVxdWVzdFN0cnVjdCgpIGNhbGwgYW5kIGNhbiBwb2ludCB0byBhIGxvY2Fs IHZhcmlhYmxlIGluIHRoZSBjYWxsaW5nCisgKiBmdW5jdGlvbi4gVGhlICduYW1lJyBtdXN0 IHBvaW50IHRvIGEgbG9uZy1saXZlZCBzdHJpbmcgdGhvdWdoLCBvbmx5IHRoZQorICogcG9p bnRlciB0byBpdCBpcyBjb3BpZWQuCisgKi8KK3ZvaWQKK1NobWVtUmVxdWVzdFN0cnVjdChT aG1lbVN0cnVjdERlc2MgKmRlc2MsIGNvbnN0IFNobWVtUmVxdWVzdFN0cnVjdE9wdHMgKm9w dGlvbnMpCit7CisJU2htZW1SZXF1ZXN0U3RydWN0T3B0cyAqb3B0aW9uc19jb3B5OworCisJ b3B0aW9uc19jb3B5ID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkgIHNpemVvZihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSk7CisJbWVtY3B5KG9w dGlvbnNfY29weSwgb3B0aW9ucywgc2l6ZW9mKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpKTsK KworCVNobWVtUmVxdWVzdEludGVybmFsKGRlc2MsIG9wdGlvbnNfY29weSwgU0hNRU1fS0lO RF9TVFJVQ1QpOworfQorCisvKgorICogSW50ZXJuYWwgd29ya2hvcnNlIG9mIFNobWVtUmVx dWVzdFN0cnVjdCgpIGFuZCBTaG1lbVJlcXVlc3RIYXNoKCkuCisgKgorICogTm90ZTogJ2Rl c2MnIGFuZCAnb3B0aW9ucycgbXVzdCBsaXZlIHVudGlsIHRoZSBpbml0L2F0dGFjaCBjYWxs YmFja3MgaGF2ZQorICogYmVlbiBjYWxsZWQuICBVbmxpa2UgaW4gdGhlIHB1YmxpYyBTaG1l bVJlcXVlc3RTdHJ1Y3QoKSBhbmQKKyAqIFNobWVtUmVxdWVzdEhhc2goKSBmdW5jdGlvbnMs ICdvcHRpb25zJyBpcyAqbm90KiBjb3BpZWQuICBUaGlzIGFsbG93cworICogU2htZW1SZXF1 ZXN0SGFzaCgpIHRvIHBhc3MgYSBwb2ludGVyIHRvIHRoZSBleHRlbmRlZCBTaG1lbVJlcXVl c3RIYXNoT3B0cworICogc3RydWN0IGluc3RlYWQuCisgKi8KK3ZvaWQKK1NobWVtUmVxdWVz dEludGVybmFsKFNobWVtU3RydWN0RGVzYyAqZGVzYywgU2htZW1SZXF1ZXN0U3RydWN0T3B0 cyAqb3B0aW9ucywKKwkJCQkJIFNobWVtQXJlYUtpbmQga2luZCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKwlTaG1lbVJlcXVlc3QgKnJlcXVlc3Q7CisKKwlpZiAob3B0aW9ucy0+bmFtZSA9 PSBOVUxMKQorCQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSByZXF1ZXN0IGlzIG1pc3Np bmcgJ25hbWUnIG9wdGlvbiIpOworCisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJ aWYgKG9wdGlvbnMtPnNpemUgPD0gMCAmJiBvcHRpb25zLT5zaXplICE9IFNITUVNX1JFUVVF U1RfVU5LTk9XTl9TSVpFKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2l6ZSAlemQgZm9y IHNoYXJlZCBtZW1vcnkgcmVxdWVzdCBmb3IgXCIlc1wiIiwKKwkJCQkgb3B0aW9ucy0+c2l6 ZSwgb3B0aW9ucy0+bmFtZSk7CisJfQorCWVsc2UKKwl7CisJCWlmIChvcHRpb25zLT5zaXpl ID09IFNITUVNX1JFUVVFU1RfVU5LTk9XTl9TSVpFKQorCQkJZWxvZyhFUlJPUiwgIlNITUVN X1JFUVVFU1RfVU5LTk9XTl9TSVpFIGNhbm5vdCBiZSB1c2VkIGR1cmluZyBzdGFydHVwIik7 CisJCWlmIChvcHRpb25zLT5zaXplIDw9IDApCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBz aXplICV6ZCBmb3Igc2hhcmVkIG1lbW9yeSByZXF1ZXN0IGZvciBcIiVzXCIiLAorCQkJCSBv cHRpb25zLT5zaXplLCBvcHRpb25zLT5uYW1lKTsKKwl9CisKKwlpZiAoc2htZW1fc3RhcnR1 cF9zdGF0ZSAhPSBTQl9SRVFVRVNUSU5HKQorCQllbG9nKEVSUk9SLCAiU2htZW1SZXF1ZXN0 U3RydWN0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIGEgc2htZW1fcmVxdWVzdCBjYWxsYmFj ayIpOworCisJLyogQ2hlY2sgdGhhdCBpdCdzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4g dGhpcyBwcm9jZXNzICovCisJZm9yZWFjaChsYywgcmVxdWVzdGVkX3NobWVtX2FyZWFzKQor CXsKKwkJU2htZW1TdHJ1Y3REZXNjICpleGlzdGluZyA9IChTaG1lbVN0cnVjdERlc2MgKikg bGZpcnN0KGxjKTsKKworCQlpZiAoc3RyY21wKGV4aXN0aW5nLT5uYW1lLCBvcHRpb25zLT5u YW1lKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygic2hhcmVkIG1l bW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCIsCisJCQkJCQkJb3B0 aW9ucy0+bmFtZSkpKTsKKwl9CisKKwlyZXF1ZXN0ID0gcGFsbG9jKHNpemVvZihTaG1lbVJl cXVlc3QpKTsKKwlyZXF1ZXN0LT5vcHRpb25zID0gb3B0aW9uczsKKwlyZXF1ZXN0LT5kZXNj ID0gZGVzYzsKKwlyZXF1ZXN0LT5raW5kID0ga2luZDsKKwlyZXF1ZXN0ZWRfc2htZW1fYXJl YXMgPSBsYXBwZW5kKHJlcXVlc3RlZF9zaG1lbV9hcmVhcywgcmVxdWVzdCk7Cit9CisKKy8q CisgKglTaG1lbUdldFJlcXVlc3RlZFNpemUoKSAtLS0gZXN0aW1hdGUgdGhlIHRvdGFsIHNp emUgb2YgYWxsIHJlZ2lzdGVyZWQgc2hhcmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1lbW9yeSBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIG9uY2Ug YXQgcG9zdG1hc3RlciBzdGFydHVwLCBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVu dAorICogaGFzIGJlZW4gY3JlYXRlZC4KKyAqLworc2l6ZV90CitTaG1lbUdldFJlcXVlc3Rl ZFNpemUodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzaXplX3QJCXNpemU7CisKKwkv KiBtZW1vcnkgbmVlZGVkIGZvciB0aGUgU2htZW1JbmRleCAqLworCXNpemUgPSBoYXNoX2Vz dGltYXRlX3NpemUobGlzdF9sZW5ndGgocmVxdWVzdGVkX3NobWVtX2FyZWFzKSArIFNITUVN X0lOREVYX0FERElUSU9OQUxfU0laRSwKKwkJCQkJCQkgIHNpemVvZihTaG1lbUluZGV4RW50 KSk7CisKKwkvKiBtZW1vcnkgbmVlZGVkIGZvciBhbGwgdGhlIHJlcXVlc3RlZCBhcmVhcyAq LworCWZvcmVhY2gobGMsIHJlcXVlc3RlZF9zaG1lbV9hcmVhcykKKwl7CisJCVNobWVtUmVx dWVzdCAqcmVxdWVzdCA9IChTaG1lbVJlcXVlc3QgKikgbGZpcnN0KGxjKTsKKworCQlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSk7CisJCXNpemUgPSBh ZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5leHRyYV9zaXplKTsKKwl9CisKKwly ZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqCVNobWVtSW5pdFJlcXVlc3RlZCgpIC0tLSBhbGxv Y2F0ZSBhbmQgaW5pdGlhbGl6ZSByZXF1ZXN0ZWQgc2hhcmVkIG1lbW9yeQorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIGlzIGNhbGxl ZCBvbmNlIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCwgYWZ0ZXIgdGhlIHNoYXJlZCBtZW1vcnkg c2VnbWVudAorICogaGFzIGJlZW4gY3JlYXRlZC4KKyAqLwordm9pZAorU2htZW1Jbml0UmVx dWVzdGVkKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBTaG91bGQgYmUgY2Fs bGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICov CisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KHNobWVtX3N0YXJ0dXBf c3RhdGUgPT0gU0JfSU5JVElBTElaSU5HKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBhbGwg dGhlIHJlcXVlc3RlZCBtZW1vcnkgYXJlYXMuICBUaGVyZSBhcmUgbm8gY29uY3VycmVudAor CSAqIHByb2Nlc3NlcyB5ZXQsIHNvIG5vIG5lZWQgZm9yIGxvY2tpbmcuCisJICovCisJZm9y ZWFjaChsYywgcmVxdWVzdGVkX3NobWVtX2FyZWFzKQorCXsKKwkJU2htZW1SZXF1ZXN0ICpy ZXF1ZXN0ID0gKFNobWVtUmVxdWVzdCAqKSBsZmlyc3QobGMpOworCisJCUF0dGFjaE9ySW5p dChyZXF1ZXN0LCB0cnVlLCBmYWxzZSk7CisJfQorCWxpc3RfZnJlZV9kZWVwKHJlcXVlc3Rl ZF9zaG1lbV9hcmVhcyk7CisJcmVxdWVzdGVkX3NobWVtX2FyZWFzID0gTklMOworCisJLyog Q2FsbCBpbml0IGNhbGxiYWNrcyAqLworCWZvcmVhY2gobGMsIHJlZ2lzdGVyZWRfc2htZW1f Y2FsbGJhY2tzKQorCXsKKwkJY29uc3QgU2htZW1DYWxsYmFja3MgKmNhbGxiYWNrcyA9IChj b25zdCBTaG1lbUNhbGxiYWNrcyAqKSBsZmlyc3QobGMpOworCisJCWlmIChjYWxsYmFja3Mt PmluaXRfZm4pCisJCQljYWxsYmFja3MtPmluaXRfZm4oY2FsbGJhY2tzLT5pbml0X2ZuX2Fy Zyk7CisJfQorCisJc2htZW1fc3RhcnR1cF9zdGF0ZSA9IFNCX0RPTkU7Cit9CisKKy8qCisg KiBSZS1lc3RhYmxpc2ggcHJvY2VzcyBwcml2YXRlIHN0YXRlIHJlbGF0ZWQgdG8gc2htZW0g YXJlYXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYXQgYmFja2VuZCBzdGFydHVwIGluIEVY RUNfQkFDS0VORCBtb2RlLCBpbiBldmVyeSBiYWNrZW5kLgorICovCisjaWZkZWYgRVhFQ19C QUNLRU5ECit2b2lkCitTaG1lbUF0dGFjaFJlcXVlc3RlZCh2b2lkKQoreworCUxpc3RDZWxs ICAgKmxjOworCisJLyogTXVzdCBiZSBpbml0aWFsaXppbmcgYSAobm9uLXN0YW5kYWxvbmUp IGJhY2tlbmQgKi8KKwlBc3NlcnQoSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2VydChTaG1l bUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7CisJQXNzZXJ0KHNobWVtX3N0YXJ0dXBfc3Rh dGUgPT0gU0JfUkVRVUVTVElORyk7CisJc2htZW1fc3RhcnR1cF9zdGF0ZSA9IFNCX0FUVEFD SElORzsKKworCUxXTG9ja0FjcXVpcmUoU2htZW1JbmRleExvY2ssIExXX1NIQVJFRCk7CisK KwkvKgorCSAqIEF0dGFjaCB0byBhbGwgdGhlIHJlcXVlc3RlZCBtZW1vcnkgYXJlYXMuCisJ ICovCisJZm9yZWFjaChsYywgcmVxdWVzdGVkX3NobWVtX2FyZWFzKQorCXsKKwkJU2htZW1S ZXF1ZXN0ICpyZXF1ZXN0ID0gKFNobWVtUmVxdWVzdCAqKSBsZmlyc3QobGMpOworCisJCUF0 dGFjaE9ySW5pdChyZXF1ZXN0LCBmYWxzZSwgdHJ1ZSk7CisJfQorCWxpc3RfZnJlZShyZXF1 ZXN0ZWRfc2htZW1fYXJlYXMpOworCXJlcXVlc3RlZF9zaG1lbV9hcmVhcyA9IE5JTDsKKwor CS8qIENhbGwgYXR0YWNoIGNhbGxiYWNrcyAqLworCWZvcmVhY2gobGMsIHJlZ2lzdGVyZWRf c2htZW1fY2FsbGJhY2tzKQorCXsKKwkJY29uc3QgU2htZW1DYWxsYmFja3MgKmNhbGxiYWNr cyA9IChjb25zdCBTaG1lbUNhbGxiYWNrcyAqKSBsZmlyc3QobGMpOworCisJCWlmIChjYWxs YmFja3MtPmF0dGFjaF9mbikKKwkJCWNhbGxiYWNrcy0+YXR0YWNoX2ZuKGNhbGxiYWNrcy0+ YXR0YWNoX2ZuX2FyZyk7CisJfQorCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7 CisKKwlzaG1lbV9zdGFydHVwX3N0YXRlID0gU0JfRE9ORTsKK30KKyNlbmRpZgorCisvKgor ICogV29ya2hvcnNlIHRvIGluc2VydCBvciBsb29rIHVwIGEgbmFtZWQgc2htZW0gYXJlYSBp biB0aGUgc2hhcmVkIG1lbW9yeQorICogaW5kZXgsIGFuZCBpbml0aWFsaXplIG9yIGF0dGFj aCB0byBpdC4KKyAqCisgKiBJZiAhaW5pdF9hbGxvd2VkIGFuZCB0aGUgZW50cnkgaXMgbm90 IGZvdW5kLCB0aHJvd3MgYW4gZXJyb3IuICBJZgorICogIWF0dGFjaF9hbGxvd2VkIGFuZCB0 aGUgZW50cnkgaXMgZm91bmQsIHRocm93cyBhbiBlcnJvci4KKyAqLworc3RhdGljIGJvb2wK K0F0dGFjaE9ySW5pdChTaG1lbVJlcXVlc3QgKnJlcXVlc3QsIGJvb2wgaW5pdF9hbGxvd2Vk LCBib29sIGF0dGFjaF9hbGxvd2VkKQoreworCS8qCisJICogSWYgY2FsbGVkIGFmdGVyIHBv c3RtYXN0ZXIgc3RhcnR1cCwgd2UgbmVlZCB0byBpbW1lZGlhdGVseSBhbHNvCisJICogaW5p dGlhbGl6ZSBvciBhdHRhY2ggdG8gdGhlIGFyZWEuCisJICovCisJU2htZW1TdHJ1Y3REZXNj ICpkZXNjID0gcmVxdWVzdC0+ZGVzYzsKKwlTaG1lbUluZGV4RW50ICppbmRleF9lbnRyeTsK Kwlib29sCQlmb3VuZDsKKworCWRlc2MtPm5hbWUgPSByZXF1ZXN0LT5vcHRpb25zLT5uYW1l OworCWRlc2MtPnB0ciA9IE5VTEw7CisKKwkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBp bmRleCAqLworCWluZGV4X2VudHJ5ID0gKFNobWVtSW5kZXhFbnQgKikKKwkJaGFzaF9zZWFy Y2goU2htZW1JbmRleCwgcmVxdWVzdC0+b3B0aW9ucy0+bmFtZSwKKwkJCQkJaW5pdF9hbGxv d2VkID8gSEFTSF9FTlRFUl9OVUxMIDogSEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3Vu ZCkKKwl7CisJCS8qIEFscmVhZHkgcHJlc2VudCwganVzdCBhdHRhY2ggdG8gaXQgKi8KKwkJ aWYgKCFhdHRhY2hfYWxsb3dlZCkKKwkJCWVsb2coRVJST1IsICJzaGFyZWQgbWVtb3J5IHN0 cnVjdCBcIiVzXCIgaXMgYWxyZWFkeSBpbml0aWFsaXplZCIsIGRlc2MtPm5hbWUpOworCisJ CWlmIChpbmRleF9lbnRyeS0+c2l6ZSAhPSByZXF1ZXN0LT5vcHRpb25zLT5zaXplICYmCisJ CQlyZXF1ZXN0LT5vcHRpb25zLT5zaXplICE9IFNITUVNX1JFUVVFU1RfVU5LTk9XTl9TSVpF KQorCQl7CisJCQllbG9nKEVSUk9SLCAic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIlc1wiIGlz IGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGRpZmZlcmVudCBzaXplIiwKKwkJCQkgZGVzYy0+ bmFtZSk7CisJCX0KKwkJZGVzYy0+cHRyID0gaW5kZXhfZW50cnktPmxvY2F0aW9uOworCQlk ZXNjLT5zaXplID0gaW5kZXhfZW50cnktPnNpemU7CisJCXN3aXRjaCAocmVxdWVzdC0+a2lu ZCkKKwkJeworCQkJY2FzZSBTSE1FTV9LSU5EX1NUUlVDVDoKKwkJCQlpZiAocmVxdWVzdC0+ b3B0aW9ucy0+cHRyKQorCQkJCQkqKHJlcXVlc3QtPm9wdGlvbnMtPnB0cikgPSBpbmRleF9l bnRyeS0+bG9jYXRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIFNITUVNX0tJTkRfSEFTSDoK KwkJCQlzaG1lbV9oYXNoX2F0dGFjaChkZXNjLCByZXF1ZXN0LT5vcHRpb25zKTsKKwkJCQli cmVhazsKKwkJfQorCX0KKwllbHNlIGlmICghaW5pdF9hbGxvd2VkKQorCXsKKwkJLyogYXR0 YWNoIHdhcyByZXF1ZXN0ZWQsIGJ1dCBpdCB3YXMgbm90IGZvdW5kICovCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJy bXNnKCJjb3VsZCBub3QgZmluZCBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVy ZSBcIiVzXCIiLAorCQkJCQkJZGVzYy0+bmFtZSkpKTsKKwl9CisJZWxzZSBpZiAoIWluZGV4 X2VudHJ5KQorCXsKKwkJLyogdHJpZWQgdG8gYWRkIGl0IHRvIHRoZSBoYXNoIHRhYmxlLCBi dXQgdGhlcmUgd2FzIG5vIHNwYWNlICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3Jl YXRlIFNobWVtSW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJCQkJ CQlkZXNjLT5uYW1lKSkpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBXZSBpbnNlcnRl ZCB0aGUgZW50cnkgdG8gdGhlIHNoYXJlZCBtZW1vcnkgaW5kZXguIEFsbG9jYXRlCisJCSAq IHJlcXVlc3RlZCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBmb3IgaXQsIGFuZCBkbyBiYXNp YworCQkgKiBpbml0aWFsaXppb24uCisJCSAqLworCQlzaXplX3QJCWFsbG9jYXRlZF9zaXpl OworCQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisKKwkJc3RydWN0UHRyID0gU2htZW1BbGxvY1Jh dyhyZXF1ZXN0LT5vcHRpb25zLT5zaXplLCAmYWxsb2NhdGVkX3NpemUpOworCQlpZiAoc3Ry dWN0UHRyID09IE5VTEwpCisJCXsKKwkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUg ZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8KKwkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgs IGRlc2MtPm5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coIm5v dCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJIiBc IiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKKwkJCQkJCQlkZXNjLT5uYW1lLCByZXF1 ZXN0LT5vcHRpb25zLT5zaXplKSkpOworCQl9CisJCWluZGV4X2VudHJ5LT5zaXplID0gcmVx dWVzdC0+b3B0aW9ucy0+c2l6ZTsKKwkJaW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0g YWxsb2NhdGVkX3NpemU7CisJCWluZGV4X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsK KworCQlkZXNjLT5wdHIgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CisJCWRlc2MtPnNpemUg PSBpbmRleF9lbnRyeS0+c2l6ZTsKKwkJc3dpdGNoIChyZXF1ZXN0LT5raW5kKQorCQl7CisJ CQljYXNlIFNITUVNX0tJTkRfU1RSVUNUOgorCQkJCWlmIChyZXF1ZXN0LT5vcHRpb25zLT5w dHIpCisJCQkJCSoocmVxdWVzdC0+b3B0aW9ucy0+cHRyKSA9IGluZGV4X2VudHJ5LT5sb2Nh dGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0hNRU1fS0lORF9IQVNIOgorCQkJCXNobWVt X2hhc2hfaW5pdChkZXNjLCByZXF1ZXN0LT5vcHRpb25zKTsKKwkJCQlicmVhazsKKwkJfQor CX0KKworCXJldHVybiBmb3VuZDsKK30KKwogLyoKICAqCUluaXRTaG1lbUFsbG9jYXRvcigp IC0tLSBzZXQgdXAgYmFzaWMgcG9pbnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4KICAqCiAgKiBD YWxsZWQgYXQgcG9zdG1hc3RlciBvciBzdGFuZC1hbG9uZSBiYWNrZW5kIHN0YXJ0dXAsIHRv IGluaXRpYWxpemUgdGhlCiAgKiBhbGxvY2F0b3IncyBkYXRhIHN0cnVjdHVyZSBpbiB0aGUg c2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgSW4gRVhFQ19CQUNLRU5ELAotICogdGhpcyBpcyBh bHNvIGNhbGxlZCBhdCBiYWNrZW5kIHN0YXJ0dXAsIHRvIHNldCB1cCBwb2ludGVycyB0byB0 aGUgc2hhcmVkCi0gKiBtZW1vcnkgYXJlYXMuCisgKiB0aGlzIGlzIGFsc28gY2FsbGVkIGF0 IGJhY2tlbmQgc3RhcnR1cCwgdG8gc2V0IHVwIHBvaW50ZXJzIHRvIHRoZQorICogYWxyZWFk eS1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZS4KICAqLwogdm9pZAogSW5pdFNobWVtQWxs b2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcikKIHsKIAlTaXplCQlvZmZzZXQ7CisJaW50 NjQJCWhhc2hfc2l6ZTsKIAlIQVNIQ1RMCQlpbmZvOwogCWludAkJCWhhc2hfZmxhZ3M7CiAJ c2l6ZV90CQlzaXplOwpAQCAtMTM3LDYgKzYyMSwxNiBAQCBJbml0U2htZW1BbGxvY2F0b3Io UEdTaG1lbUhlYWRlciAqc2VnaGRyKQogI2VuZGlmCiAJQXNzZXJ0KHNlZ2hkciAhPSBOVUxM KTsKIAorCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwl7CisJCUFzc2VydChzaG1lbV9zdGFy dHVwX3N0YXRlID09IFNCX0lOSVRJQUwpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQoc2ht ZW1fc3RhcnR1cF9zdGF0ZSA9PSBTQl9SRVFVRVNUSU5HKTsKKwkJc2htZW1fc3RhcnR1cF9z dGF0ZSA9IFNCX0lOSVRJQUxJWklORzsKKwl9CisKIAkvKgogCSAqIFdlIGFzc3VtZSB0aGUg cG9pbnRlciBhbmQgb2Zmc2V0IGFyZSBNQVhBTElHTi4gIE5vdCBhIGhhcmQgcmVxdWlyZW1l bnQsCiAJICogYnV0IGl0J3MgdHJ1ZSB0b2RheSBhbmQga2VlcHMgdGhlIG1hdGggYmVsb3cg c2ltcGxlci4KQEAgLTE4MSw5ICs2NzUsMTEgQEAgSW5pdFNobWVtQWxsb2NhdG9yKFBHU2ht ZW1IZWFkZXIgKnNlZ2hkcikKIAkgKiB1c2UgU2htZW1Jbml0SGFzaCgpIGhlcmUgYmVjYXVz ZSBpdCByZWxpZXMgb24gU2htZW1JbmRleCBiZWluZyBhbHJlYWR5CiAJICogaW5pdGlhbGl6 ZWQuCiAJICovCisJaGFzaF9zaXplID0gbGlzdF9sZW5ndGgocmVxdWVzdGVkX3NobWVtX2Fy ZWFzKSArIFNITUVNX0lOREVYX0FERElUSU9OQUxfU0laRTsKKwogCWluZm8ua2V5c2l6ZSA9 IFNITUVNX0lOREVYX0tFWVNJWkU7CiAJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1J bmRleEVudCk7Ci0JaW5mby5kc2l6ZSA9IGluZm8ubWF4X2RzaXplID0gaGFzaF9zZWxlY3Rf ZGlyc2l6ZShTSE1FTV9JTkRFWF9TSVpFKTsKKwlpbmZvLmRzaXplID0gaW5mby5tYXhfZHNp emUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKGhhc2hfc2l6ZSk7CiAJaW5mby5hbGxvYyA9IFNo bWVtQWxsb2NOb0Vycm9yOwogCWhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX1NUUklO R1MgfCBIQVNIX1NIQVJFRF9NRU0gfCBIQVNIX0FMTE9DIHwgSEFTSF9ESVJTSVpFOwogCWlm ICghSXNVbmRlclBvc3RtYXN0ZXIpCkBAIC0xOTQsMTAgKzY5MCwyNiBAQCBJbml0U2htZW1B bGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogCWVsc2UKIAkJaGFzaF9mbGFncyB8 PSBIQVNIX0FUVEFDSDsKIAlpbmZvLmhjdGwgPSBTaG1lbUFsbG9jYXRvci0+aW5kZXg7Ci0J U2htZW1JbmRleCA9IGhhc2hfY3JlYXRlKCJTaG1lbUluZGV4IiwgU0hNRU1fSU5ERVhfU0la RSwgJmluZm8sIGhhc2hfZmxhZ3MpOworCVNobWVtSW5kZXggPSBoYXNoX2NyZWF0ZSgiU2ht ZW1JbmRleCIsIGhhc2hfc2l6ZSwgJmluZm8sIGhhc2hfZmxhZ3MpOwogCUFzc2VydChTaG1l bUluZGV4ICE9IE5VTEwpOwogfQogCisvKgorICogUmVzZXQgc3RhdGUgb24gcG9zdG1hc3Rl ciBjcmFzaCByZXN0YXJ0LgorICovCit2b2lkCitSZXNldFNobWVtQWxsb2NhdG9yKHZvaWQp Cit7CisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisJc2htZW1fc3RhcnR1cF9zdGF0 ZSA9IFNCX0lOSVRJQUw7CisJcmVxdWVzdGVkX3NobWVtX2FyZWFzID0gTklMOworCisJLyoK KwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2tz LiAgV2Ugd2lsbCBuZWVkIHRvCisJICogY2FsbCB0aGVtIGFnYWluIGFzIHdlIHJlc3RhcnQK KwkgKi8KK30KKwogLyoKICAqIFNobWVtQWxsb2MgLS0gYWxsb2NhdGUgbWF4LWFsaWduZWQg Y2h1bmsgZnJvbSBzaGFyZWQgbWVtb3J5CiAgKgpAQCAtMjk1LDkyICs4MDcsMTI4IEBAIFNo bWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRkcikKIH0KIAogLyoKLSAqIFNobWVtSW5p dFN0cnVjdCAtLSBDcmVhdGUvYXR0YWNoIHRvIGEgc3RydWN0dXJlIGluIHNoYXJlZCBtZW1v cnkuCi0gKgotICoJCVRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiB0byBm aW5kIG9yIGFsbG9jYXRlCi0gKgkJYSBkYXRhIHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVtb3J5 LiAgSWYgbm8gb3RoZXIgcHJvY2VzcwotICoJCWhhcyBjcmVhdGVkIHRoZSBzdHJ1Y3R1cmUs IHRoaXMgcm91dGluZSBhbGxvY2F0ZXMgc3BhY2UKLSAqCQlmb3IgaXQuICBJZiBpdCBleGlz dHMgYWxyZWFkeSwgYSBwb2ludGVyIHRvIHRoZSBleGlzdGluZwotICoJCXN0cnVjdHVyZSBp cyByZXR1cm5lZC4KKyAqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IGRlZmluZSBhIHNoYXJl ZCBtZW1vcnkgYXJlYSAob3IgbXVsdGlwbGUgYXJlYXMpLgogICoKLSAqCVJldHVybnM6IHBv aW50ZXIgdG8gdGhlIG9iamVjdC4gICpmb3VuZFB0ciBpcyBzZXQgdHJ1ZSBpZiB0aGUgb2Jq ZWN0IHdhcwotICoJCWFscmVhZHkgaW4gdGhlIHNobWVtIGluZGV4IChoZW5jZSwgYWxyZWFk eSBpbml0aWFsaXplZCkuCisgKiBUaGUgc3lzdGVtIHdpbGwgY2FsbCB0aGUgY2FsbGJhY2tz IGF0IGRpZmZlcmVudCBzdGFnZXMgb2YgcG9zdG1hc3RlciBvcgorICogYmFja2VuZCBzdGFy dHVwLCB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgYXJlYS4KICAqCi0gKglOb3Rl OiBiZWZvcmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwgZm9y IHNvbWUgZmFpbHVyZQotICoJY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0aHJvd3MgZXJyb3Ig aW5zdGVhZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjawotICoJZm9yIE5VTEwuCisgKiBU aGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBlYXJseSBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVw LCBidXQgaWYgdGhlCisgKiBTSE1FTV9BTExPV19BRlRFUl9TVEFSVFVQIGlzIHNldCwgdGhp cyBjYW4gYWxzbyBiZSB1c2VkIGFmdGVyIHN0YXJ0dXAsCisgKiBhbHRob3VnaCBhZnRlciBz dGFydHVwIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhlcmUncyBlbm91Z2ggc2hhcmVk CisgKiBtZW1vcnkgYXZhaWxhYmxlLiAgV2hlbiBjYWxsZWQgYWZ0ZXIgc3RhcnR1cCwgdGhp cyBpbW1lZGlhdGVseSBjYWxscyB0aGUKKyAqIHJpZ2h0IGNhbGxiYWNrcyBkZXBlbmRpbmcg b24gd2hldGhlciBhbm90aGVyIGJhY2tlbmQgaGFkIGFscmVhZHkKKyAqIGluaXRpYWxpemVk IHRoZSBhcmVhLgogICovCi12b2lkICoKLVNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpu YW1lLCBTaXplIHNpemUsIGJvb2wgKmZvdW5kUHRyKQordm9pZAorUmVnaXN0ZXJTaG1lbUNh bGxiYWNrcyhjb25zdCBTaG1lbUNhbGxiYWNrcyAqY2FsbGJhY2tzKQogewotCVNobWVtSW5k ZXhFbnQgKnJlc3VsdDsKLQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisJaWYgKHNobWVtX3N0YXJ0 dXBfc3RhdGUgPT0gU0JfRE9ORSAmJiBJc1VuZGVyUG9zdG1hc3RlcikKKwl7CisJCS8qIEFm dGVyLXN0YXJ0dXAgaW5pdGlhbGl6YXRpb24gKi8KKwkJTGlzdENlbGwgICAqbGM7CisJCWJv b2wJCWZvdW5kID0gZmFsc2U7CiAKLQlBc3NlcnQoU2htZW1JbmRleCAhPSBOVUxMKTsKKwkJ aWYgKChjYWxsYmFja3MtPmZsYWdzICYgU0hNRU1fQUxMT1dfQUZURVJfU1RBUlRVUCkgPT0g MCkKKwkJCWVsb2coRVJST1IsICJjYW5ub3QgcmVxdWVzdCBzaGFyZWQgbWVtb3J5IGF0IHRo aXMgdGltZSIpOwogCi0JTFdMb2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhDTFVT SVZFKTsKKwkJQXNzZXJ0KHJlcXVlc3RlZF9zaG1lbV9hcmVhcyA9PSBOSUwpOworCQlBc3Nl cnQoc2htZW1fc3RhcnR1cF9zdGF0ZSA9PSBTQl9ET05FKTsKKwkJc2htZW1fc3RhcnR1cF9z dGF0ZSA9IFNCX1JFUVVFU1RJTkc7CisJCWlmIChjYWxsYmFja3MtPnJlcXVlc3RfZm4pCisJ CQljYWxsYmFja3MtPnJlcXVlc3RfZm4oY2FsbGJhY2tzLT5yZXF1ZXN0X2ZuX2FyZyk7CisJ CXNobWVtX3N0YXJ0dXBfc3RhdGUgPSBTQl9MQVRFX0FUVEFDSF9PUl9JTklUOwogCi0JLyog bG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KLQlyZXN1bHQgPSAoU2htZW1JbmRl eEVudCAqKQotCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBuYW1lLCBIQVNIX0VOVEVSX05V TEwsIGZvdW5kUHRyKTsKKwkJTFdMb2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhD TFVTSVZFKTsKIAotCWlmICghcmVzdWx0KQotCXsKLQkJTFdMb2NrUmVsZWFzZShTaG1lbUlu ZGV4TG9jayk7Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRf T0ZfTUVNT1JZKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIFNobWVtSW5kZXgg ZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCi0JCQkJCQluYW1lKSkpOwotCX0K KwkJZm9yZWFjaChsYywgcmVxdWVzdGVkX3NobWVtX2FyZWFzKQorCQl7CisJCQlTaG1lbVJl cXVlc3QgKnJlcXVlc3QgPSAoU2htZW1SZXF1ZXN0ICopIGxmaXJzdChsYyk7CisKKwkJCWZv dW5kID0gQXR0YWNoT3JJbml0KHJlcXVlc3QsIHRydWUsIHRydWUpOworCQl9CiAKLQlpZiAo KmZvdW5kUHRyKQotCXsKIAkJLyoKLQkJICogU3RydWN0dXJlIGlzIGluIHRoZSBzaG1lbSBp bmRleCBzbyBzb21lb25lIGVsc2UgaGFzIGFsbG9jYXRlZCBpdAotCQkgKiBhbHJlYWR5LiAg VGhlIHNpemUgYmV0dGVyIGJlIHRoZSBzYW1lIGFzIHRoZSBzaXplIHdlIGFyZSB0cnlpbmcg dG8KLQkJICogaW5pdGlhbGl6ZSB0bywgb3IgdGhlcmUgaXMgYSBuYW1lIGNvbmZsaWN0IChv ciB3b3JzZSkuCisJCSAqIEZJWE1FOiBXaGF0IHRvIGRvIGlmIG11bHRpcGxlIHNobWVtIGFy ZWFzIHdlcmUgcmVxdWVzdGVkLCBhbmQgc29tZQorCQkgKiBvZiB0aGVtIGFyZSBhbHJlYWR5 IGluaXRpYWxpemVkIGJ1dCBub3QgYWxsPyAgV2UgZXhwZWN0IGFsbCBzaG1lbQorCQkgKiBh cmVhcyByZXF1ZXN0ZWQgYnkgYSBzaW5nbGUgY2FsbGJhY2sgdG8gZm9ybSBhIGNvaGVyZW50 IHVuaXQuCiAJCSAqLwotCQlpZiAocmVzdWx0LT5zaXplICE9IHNpemUpCisJCWlmIChmb3Vu ZCkKIAkJewotCQkJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7Ci0JCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkoZXJybXNnKCJTaG1lbUluZGV4IGVudHJ5IHNpemUgaXMgd3Jvbmcg Zm9yIGRhdGEgc3RydWN0dXJlIgotCQkJCQkJCSIgXCIlc1wiOiBleHBlY3RlZCAlenUsIGFj dHVhbCAlenUiLAotCQkJCQkJCW5hbWUsIHNpemUsIHJlc3VsdC0+c2l6ZSkpKTsKKwkJCWlm IChjYWxsYmFja3MtPmF0dGFjaF9mbikKKwkJCQljYWxsYmFja3MtPmF0dGFjaF9mbihjYWxs YmFja3MtPmF0dGFjaF9mbl9hcmcpOwogCQl9Ci0JCXN0cnVjdFB0ciA9IHJlc3VsdC0+bG9j YXRpb247Ci0JfQotCWVsc2UKLQl7Ci0JCVNpemUJCWFsbG9jYXRlZF9zaXplOwotCi0JCS8q IEl0IGlzbid0IGluIHRoZSB0YWJsZSB5ZXQuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGl0 ICovCi0JCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9jYXRlZF9zaXpl KTsKLQkJaWYgKHN0cnVjdFB0ciA9PSBOVUxMKQorCQllbHNlCiAJCXsKLQkJCS8qIG91dCBv ZiBtZW1vcnk7IHJlbW92ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8KLQkJCWhh c2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKLQkJCUxX TG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkJIGVycm1zZygibm90IGVu b3VnaCBzaGFyZWQgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZSIKLQkJCQkJCQkiIFwiJXNc IiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAotCQkJCQkJCW5hbWUsIHNpemUpKSk7CisJCQlp ZiAoY2FsbGJhY2tzLT5pbml0X2ZuKQorCQkJCWNhbGxiYWNrcy0+aW5pdF9mbihjYWxsYmFj a3MtPmluaXRfZm5fYXJnKTsKIAkJfQotCQlyZXN1bHQtPnNpemUgPSBzaXplOwotCQlyZXN1 bHQtPmFsbG9jYXRlZF9zaXplID0gYWxsb2NhdGVkX3NpemU7Ci0JCXJlc3VsdC0+bG9jYXRp b24gPSBzdHJ1Y3RQdHI7CisKKwkJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisJ CXNobWVtX3N0YXJ0dXBfc3RhdGUgPSBTQl9ET05FOworCQlyZXR1cm47CiAJfQogCi0JTFdM b2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisJcmVnaXN0ZXJlZF9zaG1lbV9jYWxsYmFj a3MgPSBsYXBwZW5kKHJlZ2lzdGVyZWRfc2htZW1fY2FsbGJhY2tzLAorCQkJCQkJCQkJCSAo dm9pZCAqKSBjYWxsYmFja3MpOworfQorCisvKgorICogQ2FsbCBhbGwgc2htZW0gcmVxdWVz dCBjYWxsYmFja3MuCisgKi8KK3ZvaWQKK1NobWVtQ2FsbFJlcXVlc3RDYWxsYmFja3Modm9p ZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKIAotCUFzc2VydChTaG1lbUFkZHJJc1ZhbGlkKHN0 cnVjdFB0cikpOworCUFzc2VydChzaG1lbV9zdGFydHVwX3N0YXRlID09IFNCX0lOSVRJQUwp OworCXNobWVtX3N0YXJ0dXBfc3RhdGUgPSBTQl9SRVFVRVNUSU5HOwogCi0JQXNzZXJ0KHN0 cnVjdFB0ciA9PSAodm9pZCAqKSBDQUNIRUxJTkVBTElHTihzdHJ1Y3RQdHIpKTsKKwlmb3Jl YWNoKGxjLCByZWdpc3RlcmVkX3NobWVtX2NhbGxiYWNrcykKKwl7CisJCWNvbnN0IFNobWVt Q2FsbGJhY2tzICpjYWxsYmFja3MgPSAoY29uc3QgU2htZW1DYWxsYmFja3MgKikgbGZpcnN0 KGxjKTsKIAotCXJldHVybiBzdHJ1Y3RQdHI7CisJCWlmIChjYWxsYmFja3MtPnJlcXVlc3Rf Zm4pCisJCQljYWxsYmFja3MtPnJlcXVlc3RfZm4oY2FsbGJhY2tzLT5yZXF1ZXN0X2ZuX2Fy Zyk7CisJfQogfQogCisvKgorICogU2htZW1Jbml0U3RydWN0IC0tIENyZWF0ZS9hdHRhY2gg dG8gYSBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqCisgKgkJVGhpcyBpcyBjYWxs ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHRvIGZpbmQgb3IgYWxsb2NhdGUKKyAqCQlhIGRh dGEgc3RydWN0dXJlIGluIHNoYXJlZCBtZW1vcnkuICBJZiBubyBvdGhlciBwcm9jZXNzCisg KgkJaGFzIGNyZWF0ZWQgdGhlIHN0cnVjdHVyZSwgdGhpcyByb3V0aW5lIGFsbG9jYXRlcyBz cGFjZQorICoJCWZvciBpdC4gIElmIGl0IGV4aXN0cyBhbHJlYWR5LCBhIHBvaW50ZXIgdG8g dGhlIGV4aXN0aW5nCisgKgkJc3RydWN0dXJlIGlzIHJldHVybmVkLgorICoKKyAqCVJldHVy bnM6IHBvaW50ZXIgdG8gdGhlIG9iamVjdC4gICpmb3VuZFB0ciBpcyBzZXQgdHJ1ZSBpZiB0 aGUgb2JqZWN0IHdhcworICoJCWFscmVhZHkgaW4gdGhlIHNobWVtIGluZGV4IChoZW5jZSwg YWxyZWFkeSBpbml0aWFsaXplZCkuCisgKgorICogTm90ZTogVGhpcyBpcyBhIGxlZ2FjeSBp bnRlcmZhY2UsIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGV4 dGVuc2lvbnMuICBVc2UgU2htZW1SZXF1ZXN0U3RydWN0KCkgaW4gbmV3IGNvZGUhCisgKi8K K3ZvaWQgKgorU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwg Ym9vbCAqZm91bmRQdHIpCit7CisJU2htZW1TdHJ1Y3REZXNjIGRlc2M7CisJU2htZW1SZXF1 ZXN0U3RydWN0T3B0cyBvcHRpb25zID0geworCQkubmFtZSA9IG5hbWUsCisJCS5zaXplID0g c2l6ZSwKKwl9OworCVNobWVtUmVxdWVzdCByZXF1ZXN0ID0geyZkZXNjLCAmb3B0aW9ucywg U0hNRU1fS0lORF9TVFJVQ1R9OworCisJQXNzZXJ0KHNobWVtX3N0YXJ0dXBfc3RhdGUgPT0g U0JfRE9ORSB8fAorCQkgICBzaG1lbV9zdGFydHVwX3N0YXRlID09IFNCX0lOSVRJQUxJWklO RyB8fAorCQkgICBzaG1lbV9zdGFydHVwX3N0YXRlID09IFNCX1JFUVVFU1RJTkcpOworCisJ LyogbG9vayBpdCB1cCBpbW1lZGlhdGVseSAqLworCUxXTG9ja0FjcXVpcmUoU2htZW1JbmRl eExvY2ssIExXX0VYQ0xVU0lWRSk7CisJKmZvdW5kUHRyID0gQXR0YWNoT3JJbml0KCZyZXF1 ZXN0LCB0cnVlLCB0cnVlKTsKKwlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKKwor CUFzc2VydChkZXNjLnB0ciAhPSBOVUxMKTsKKwlyZXR1cm4gZGVzYy5wdHI7Cit9CiAKIC8q CiAgKiBBZGQgdHdvIFNpemUgdmFsdWVzLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYwppbmRleCBiMGM4ZDU5MzlhMC4uNDhiYjVk OTdjMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2gu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbV9oYXNoLmMKQEAgLTEsMTEg KzEsMTcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHNobWVtX2hhc2guYwot ICoJICBYWFgKKyAqCSAgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBpbiBzaGFyZWQgbWVt b3J5CiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKKyAq IEEgc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIG9uIHRvcCBvZiB0 aGUgbmFtZWQsIGZpeGVkLXNpemUKKyAqIHNoYXJlZCBtZW1vcnkgYXJlYXMgbWFuYWdlZCBi eSBzaG1lbS5jLiAgSGFzaCB0YWJsZXMgaGF2ZSBhIGZpeGVkIG1heGltdW0KKyAqIHNpemUs IGJ1dCB0aGVpciBhY3R1YWwgc2l6ZSBjYW4gdmFyeSBkeW5hbWljYWxseS4gIFdoZW4gZW50 cmllcyBhcmUgYWRkZWQKKyAqIHRvIHRoZSB0YWJsZSwgbW9yZSBzcGFjZSBpcyBhbGxvY2F0 ZWQuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBhbmQgaGFzaAorICogaGFzIGEgc3Ry aW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQsIHNwZWNpZmllZCBpbiBpdHMgZGVzY3JpcHRvciB3 aGVuIGl0cworICogcmVxdWVzdGVkLgogICoKICAqIElERU5USUZJQ0FUSU9OCiAgKgkgIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtX2hhc2guYwpAQCAtMTYsNiArMjIsODUgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgor I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBTaG1lbVJlcXVlc3RIYXNo IC0tIFJlcXVlc3QgYSBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuCisgKgorICogU2ltaWxh ciB0byBTaG1lbVJlcXVlc3RTdHJ1Y3QoKSwgYnV0IHJlcXVlc3RzIGEgaGFzaCB0YWJsZSBp bnN0ZWFkIG9mIGFuCisgKiBvcGFxdWUgYXJlYS4KKyAqLwordm9pZAorU2htZW1SZXF1ZXN0 SGFzaChTaG1lbUhhc2hEZXNjICpkZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RIYXNoT3B0cyAq b3B0aW9ucykKK3sKKwlTaG1lbVJlcXVlc3RIYXNoT3B0cyAqb3B0aW9uc19jb3B5OworCWlu dDY0CQlkaXJzaXplOworCisJQXNzZXJ0KG9wdGlvbnMtPm5hbWUgIT0gTlVMTCk7CisKKwlv cHRpb25zX2NvcHkgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCSAgc2l6ZW9mKFNobWVtUmVxdWVzdEhhc2hPcHRzKSk7CisJbWVtY3B5KG9wdGlv bnNfY29weSwgb3B0aW9ucywgc2l6ZW9mKFNobWVtUmVxdWVzdEhhc2hPcHRzKSk7CisKKwkv KgorCSAqIEhhc2ggdGFibGVzIGFsbG9jYXRlZCBpbiBzaGFyZWQgbWVtb3J5IGhhdmUgYSBm aXhlZCBkaXJlY3Rvcnk7IGl0IGNhbid0CisJICogZ3JvdyBvciBvdGhlciBiYWNrZW5kcyB3 b3VsZG4ndCBiZSBhYmxlIHRvIGZpbmQgaXQuIFNvLCBtYWtlIHN1cmUgd2UKKwkgKiBtYWtl IGl0IGJpZyBlbm91Z2ggdG8gc3RhcnQgd2l0aC4KKwkgKgorCSAqIFRoZSBzaGFyZWQgbWVt b3J5IGFsbG9jYXRvciBtdXN0IGJlIHNwZWNpZmllZCB0b28uCisJICovCisJZGlyc2l6ZSA9 IGhhc2hfc2VsZWN0X2RpcnNpemUob3B0aW9ucy0+bWF4X3NpemUpOworCW9wdGlvbnNfY29w eS0+aGFzaF9pbmZvLmRzaXplID0gZGlyc2l6ZTsKKwlvcHRpb25zX2NvcHktPmhhc2hfaW5m by5tYXhfZHNpemUgPSBkaXJzaXplOworCW9wdGlvbnNfY29weS0+aGFzaF9pbmZvLmFsbG9j ID0gU2htZW1BbGxvY05vRXJyb3I7CisJb3B0aW9uc19jb3B5LT5oYXNoX2ZsYWdzIHw9IEhB U0hfU0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CisKKwkvKgorCSAq IENyZWF0ZSBhIHN0cnVjdCBkZXNjcmlwdG9yIGZvciB0aGUgZml4ZWQtc2l6ZSBhcmVhIGhv bGRpbmcgdGhlIGhhc2gKKwkgKiB0YWJsZQorCSAqLworCW9wdGlvbnNfY29weS0+YmFzZS5u YW1lID0gb3B0aW9ucy0+bmFtZTsKKwlvcHRpb25zX2NvcHktPmJhc2Uuc2l6ZSA9IGhhc2hf Z2V0X3NoYXJlZF9zaXplKCZvcHRpb25zX2NvcHktPmhhc2hfaW5mbywKKwkJCQkJCQkJCQkJ CSAgIG9wdGlvbnNfY29weS0+aGFzaF9mbGFncyk7CisKKwkvKiBSZXNlcnZlIGV4dHJhIHNw YWNlIGZvciB0aGUgYnVja2V0cyAqLworCW9wdGlvbnNfY29weS0+YmFzZS5leHRyYV9zaXpl ID0KKwkJaGFzaF9lc3RpbWF0ZV9zaXplKG9wdGlvbnMtPm1heF9zaXplLCBvcHRpb25zX2Nv cHktPmhhc2hfaW5mby5lbnRyeXNpemUpIC0gb3B0aW9uc19jb3B5LT5iYXNlLnNpemU7CisK KwlTaG1lbVJlcXVlc3RJbnRlcm5hbCgmZGVzYy0+YmFzZSwgJm9wdGlvbnNfY29weS0+YmFz ZSwgU0hNRU1fS0lORF9IQVNIKTsKK30KKwordm9pZAorc2htZW1faGFzaF9pbml0KFNobWVt U3RydWN0RGVzYyAqYmFzZV9kZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzICpi YXNlX29wdGlvbnMpCit7CisJU2htZW1IYXNoRGVzYyAqZGVzYyA9IChTaG1lbUhhc2hEZXNj ICopIGJhc2VfZGVzYzsKKwlTaG1lbVJlcXVlc3RIYXNoT3B0cyAqb3B0aW9ucyA9IChTaG1l bVJlcXVlc3RIYXNoT3B0cyAqKSBiYXNlX29wdGlvbnM7CisJaW50CQkJaGFzaF9mbGFncyA9 IG9wdGlvbnMtPmhhc2hfZmxhZ3M7CisKKwlvcHRpb25zLT5oYXNoX2luZm8uaGN0bCA9IGRl c2MtPmJhc2UucHRyOworCUFzc2VydChvcHRpb25zLT5oYXNoX2luZm8uaGN0bCAhPSBOVUxM KTsKKwlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0ZShkZXNjLT5iYXNlLm5hbWUsIG9wdGlvbnMt PmluaXRfc2l6ZSwgJm9wdGlvbnMtPmhhc2hfaW5mbywgaGFzaF9mbGFncyk7CisKKwlpZiAo b3B0aW9ucy0+cHRyKQorCQkqb3B0aW9ucy0+cHRyID0gZGVzYy0+cHRyOworfQorCit2b2lk CitzaG1lbV9oYXNoX2F0dGFjaChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgY29uc3Qg U2htZW1SZXF1ZXN0U3RydWN0T3B0cyAqYmFzZV9vcHRpb25zKQoreworCVNobWVtSGFzaERl c2MgKmRlc2MgPSAoU2htZW1IYXNoRGVzYyAqKSBiYXNlX2Rlc2M7CisJU2htZW1SZXF1ZXN0 SGFzaE9wdHMgKm9wdGlvbnMgPSAoU2htZW1SZXF1ZXN0SGFzaE9wdHMgKikgYmFzZV9vcHRp b25zOworCWludAkJCWhhc2hfZmxhZ3MgPSBvcHRpb25zLT5oYXNoX2ZsYWdzOworCisJLyog YXR0YWNoIHRvIGl0IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG5ldyBz cGFjZSAqLworCWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRBQ0g7CisJb3B0aW9ucy0+aGFzaF9p bmZvLmhjdGwgPSBkZXNjLT5iYXNlLnB0cjsKKwlBc3NlcnQob3B0aW9ucy0+aGFzaF9pbmZv LmhjdGwgIT0gTlVMTCk7CisJZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+YmFzZS5u YW1lLCBvcHRpb25zLT5pbml0X3NpemUsICZvcHRpb25zLT5oYXNoX2luZm8sIGhhc2hfZmxh Z3MpOworCisJaWYgKG9wdGlvbnMtPnB0cikKKwkJKm9wdGlvbnMtPnB0ciA9IGRlc2MtPnB0 cjsKK30KIAogCiAvKgpAQCAtNDEsOSArMTI2LDggQEAKICAqIHRvIHNoYXJlZC1tZW1vcnkg aGFzaCB0YWJsZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0aGF0IGNhbGxlcnMgbWF5CiAg KiBjaG9vc2UgdG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9T SVpFLgogICoKLSAqIE5vdGU6IGJlZm9yZSBQb3N0Z3JlcyA5LjAsIHRoaXMgZnVuY3Rpb24g cmV0dXJuZWQgTlVMTCBmb3Igc29tZSBmYWlsdXJlCi0gKiBjYXNlcy4gIE5vdywgaXQgYWx3 YXlzIHRocm93cyBlcnJvciBpbnN0ZWFkLCBzbyBjYWxsZXJzIG5lZWQgbm90IGNoZWNrCi0g KiBmb3IgTlVMTC4KKyAqIE5vdGU6IFRoaXMgaXMgYSBsZWdhY3kgaW50ZXJmYWNlLCBrZXB0 IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisgKiBleHRlbnNpb25zLiAgVXNl IFNobWVtUmVxdWVzdEhhc2goKSBpbiBuZXcgY29kZSEKICAqLwogSFRBQiAqCiBTaG1lbUlu aXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2ht ZW0gaW5kZXggKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDVjNDdjZjEzNDcz Li45Yjg4MGE2YWY2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0xMjEsNiAr MTIxLDkgQEAgRmFzdFBhdGhMb2NrU2htZW1TaXplKHZvaWQpCiAKIAlzaXplID0gYWRkX3Np emUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgKGZwTG9ja0JpdHNTaXplICsgZnBSZWxJ ZFNpemUpKSk7CiAKKwlBc3NlcnQoVG90YWxQcm9jcyA+IDApOworCUFzc2VydChzaXplID4g MCk7CisKIAlyZXR1cm4gc2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGIzNTYz MTEzMjE5Li4yNzhkMmYyMDM3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDE2NCw3ICs0 MTY0LDE0IEBAIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSwKIAlJbml0aWFsaXplRmFzdFBhdGhMb2NrcygpOwogCiAJLyoKLQkgKiBHaXZlIHByZWxv YWRlZCBsaWJyYXJpZXMgYSBjaGFuY2UgdG8gcmVxdWVzdCBhZGRpdGlvbmFsIHNoYXJlZCBt ZW1vcnkuCisJICogQmVmb3JlIGNvbXB1dGluZyB0aGUgdG90YWwgc2l6ZSBuZWVkZWQsIGdp dmUgYWxsIHN1YnN5c3RlbXMsIGluY2x1ZGluZworCSAqIGFkZC1pbnMsIGEgY2hhbmNlIHRv IGNoYW5jZSB0byBhZGp1c3QgdGhlaXIgcmVxdWVzdGVkIHNobWVtIHNpemVzLgorCSAqLwor CVNobWVtQ2FsbFJlcXVlc3RDYWxsYmFja3MoKTsKKworCS8qCisJICogQWxzbyBjYWxsIGFu eSBsZWdhY3kgc2htZW0gcmVxdWVzdCBob29rcyB0aGF0IG1pZ2h0J2JlIGJlZW4gaW5zdGFs bGVkCisJICogYnkgcHJlbG9hZGVkIGxpYnJhcmllcy4KIAkgKi8KIAlwcm9jZXNzX3NobWVt X3JlcXVlc3RzKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHlu YWhhc2guYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2hhc2gvZHluYWhhc2guYwppbmRleCAxMWY1 Nzc4ZWJhMS4uYjQwZTE0YWJhY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2hh c2gvZHluYWhhc2guYworKysgYi9zcmMvYmFja2VuZC91dGlscy9oYXNoL2R5bmFoYXNoLmMK QEAgLTM5Niw2ICszOTYsOCBAQCBoYXNoX2NyZWF0ZShjb25zdCBjaGFyICp0YWJuYW1lLCBp bnQ2NCBuZWxlbSwgY29uc3QgSEFTSENUTCAqaW5mbywgaW50IGZsYWdzKQogCX0KIAogCS8q IEluaXRpYWxpemUgdGhlIGhhc2ggaGVhZGVyLCBwbHVzIGEgY29weSBvZiB0aGUgdGFibGUg bmFtZSAqLworCUFzc2VydCh0YWJuYW1lICE9IE5VTEwpOworCUFzc2VydChDdXJyZW50RHlu YUhhc2hDeHQgIT0gTlVMTCk7CiAJaGFzaHAgPSAoSFRBQiAqKSBNZW1vcnlDb250ZXh0QWxs b2MoQ3VycmVudER5bmFIYXNoQ3h0LAogCQkJCQkJCQkJCXNpemVvZihIVEFCKSArIHN0cmxl bih0YWJuYW1lKSArIDEpOwogCU1lbVNldChoYXNocCwgMCwgc2l6ZW9mKEhUQUIpKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2Uvc2htZW0uaAppbmRleCAyYTllOWJlY2QyNi4uYTA3ZmNjZmIxYmEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NobWVtLmgKQEAgLTI0LDE3ICsyNCwyMTIgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAKKy8qIERpZmZlcmVudCBraW5k cyBvZiBzaG1lbSBhcmVhcy4gKi8KK3R5cGVkZWYgZW51bQoreworCVNITUVNX0tJTkRfU1RS VUNUID0gMCwJCS8qIHBsYWluLCBjb250aWd1b3VzIGFyZWEgb2YgbWVtb3J5ICovCisJU0hN RU1fS0lORF9IQVNILAkJCS8qIGEgaGFzaCB0YWJsZSAqLworfSBTaG1lbUFyZWFLaW5kOwor CisvKgorICogU2htZW1TdHJ1Y3REZXNjIGRlc2NyaWJlcyBhIG5hbWVkIGFyZWEgb3Igc3Ry dWN0IGluIHNoYXJlZCBtZW1vcnkuCisgKgorICogJ25hbWUnIGFuZCAnc2l6ZScgYXJlIHJl cXVpcmVkLiAgSW5pdGlhbGl6ZSBhbnkgb3B0aW9uYWwgZmllbGRzIHRoYXQgeW91CisgKiBk b24ndCB1c2UgdG8gemVyb3MuCisgKgorICogQWZ0ZXIgcmVnaXN0cmF0aW9uLCB0aGUgc2ht ZW0gbWFjaGluZXJ5IHJlc2VydmVzIG1lbW9yeSBmb3IgdGhlIGFyZWEsIHNldHMKKyAqICcq cHRyJyB0byBwb2ludCB0byB0aGUgYWxsb2NhdGlvbiwgYW5kIGNhbGxzIHRoZSBjYWxsYmFj a3MgYXQgdGhlIHJpZ2h0CisgKiBtb21lbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1l bVN0cnVjdERlc2MKK3sKKwkvKiBOYW1lIGFuZCBzaXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5 IGFyZWEuICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXZvaWQJICAgKnB0cjsKKwlzaXpl X3QJCXNpemU7Cit9IFNobWVtU3RydWN0RGVzYzsKKworI2RlZmluZSBTSE1FTV9SRVFVRVNU X1VOS05PV05fU0laRSAoLTEpCisKK3R5cGVkZWYgc3RydWN0IFNobWVtUmVxdWVzdFN0cnVj dE9wdHMKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJc3NpemVfdAkJc2l6ZTsKKworCS8q CisJICogRXh0cmEgc3BhY2UgdG8gcmVzZXJ2ZSBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdt ZW50LCBidXQgaXQncyBub3QgcGFydAorCSAqIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLiAgVGhp cyBpcyB1c2VkIGZvciBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGVzIHRoYXQKKwkgKiBjYW4g Z3JvdyBiZXlvbmQgdGhlIGluaXRpYWwgc2l6ZSB3aGVuIG1vcmUgYnVja2V0cyBhcmUgYWxs b2NhdGVkLgorCSAqLworCXNpemVfdAkJZXh0cmFfc2l6ZTsKKworCS8qCisJICogV2hlbiB0 aGUgc2htZW0gYXJlYSBpcyBpbml0aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9pbnRlciB0 byBpdCBpcworCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1YWxseSBwb2ludHMgdG8gYSBn bG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCisJICogdGhlIHNoYXJlZCBtZW1vcnkg YXJlYSBsYXRlci4gICpwdHIgaXMgc2V0IGJlZm9yZSB0aGUgaW5pdF9mbiBvcgorCSAqIGF0 dGFjaF9mbiBjYWxsYmFjayBpcyBjYWxsZWQuCisJICovCisJdm9pZAkgICoqcHRyOworfSBT aG1lbVJlcXVlc3RTdHJ1Y3RPcHRzOworCit0eXBlZGVmIHN0cnVjdCBTaG1lbUhhc2hEZXNj Cit7CisJU2htZW1TdHJ1Y3REZXNjIGJhc2U7CisKKwkvKgorCSAqIFdoZW4gdGhlIGhhc2gg dGFibGUgaXMgaW5pdGlhbGl6ZWQgb3IgYXR0YWNoZWQgdG8sIHBvaW50ZXIgdG8gaXRzCisJ ICogYmFja2VuZC1wcml2YXRlIGhhbmRsZSBpcyBzdG9yZWQgaW4gKnB0ci4gIEl0IHVzdWFs bHkgcG9pbnRzIHRvIGEKKwkgKiBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzIHRo ZSBoYXNoIHRhYmxlIGxhdGVyLgorCSAqLworCUhUQUIJICAgKnB0cjsKK30gU2htZW1IYXNo RGVzYzsKKworLyoKKyAqIERlc2NyaXB0b3IgZm9yIGEgbmFtZWQgc2hhcmVkIG1lbW9yeSBo YXNoIHRhYmxlLgorICoKKyAqIFNpbWlsYXIgdG8gU2htZW1TdHJ1Y3REZXNjLCBidXQgZGVz Y3JpYmVzIGEgc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlLiAgRWFjaAorICogaGFzaCB0YWJs ZSBpcyBiYWNrZWQgYnkgYW4gYWxsb2NhdGVkIGFyZWEsIGRlc2NyaWJlZCBieSAnYmFzZV9k ZXNjJywgYnV0IGlmCisgKiAnbWF4X3NpemUnIGlzIGdyZWF0ZXIgdGhhbiAnaW5pdF9zaXpl JywgaXQgY2FuIGFsc28gZ3JvdyBiZXlvbmQgdGhlIGluaXRpYWwKKyAqIGFsbG9jYXRlZCBh cmVhIGJ5IGFsbG9jYXRpbmcgbW9yZSBoYXNoIGVudHJpZXMgZnJvbSB0aGUgZ2xvYmFsIHVu cmVzZXJ2ZWQKKyAqIHNwYWNlLgorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVJlcXVlc3RI YXNoT3B0cworeworCVNobWVtUmVxdWVzdFN0cnVjdE9wdHMgYmFzZTsKKworCS8qCisJICog TmFtZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhLiAgUmVxdWlyZWQuICBNdXN0IGJlIHVu aXF1ZSBhY3Jvc3MgdGhlCisJICogc3lzdGVtLgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWU7 CisKKwkvKgorCSAqIG1heF9zaXplIGlzIHRoZSBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIg b2YgaGFzaHRhYmxlIGVudHJpZXMuICBUaGlzIGlzCisJICogbm90IGEgaGFyZCBsaW1pdCwg YnV0IHRoZSBhY2Nlc3MgZWZmaWNpZW5jeSB3aWxsIGRlZ3JhZGUgaWYgaXQgaXMKKwkgKiBl eGNlZWRlZCBzdWJzdGFudGlhbGx5IChzaW5jZSBpdCdzIHVzZWQgdG8gY29tcHV0ZSBkaXJl Y3Rvcnkgc2l6ZSBhbmQKKwkgKiB0aGUgaGFzaCB0YWJsZSBidWNrZXRzIHdpbGwgZ2V0IG92 ZXJmdWxsKS4KKwkgKi8KKwlzaXplX3QJCW1heF9zaXplOworCisJLyoKKwkgKiBpbml0X3Np emUgaXMgdGhlIG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcyB0byBwcmVhbGxvY2F0ZS4g IEZvciBhCisJICogdGFibGUgd2hvc2UgbWF4aW11bSBzaXplIGlzIGNlcnRhaW4sIHRoaXMg c2hvdWxkIGJlIGVxdWFsIHRvIG1heF9zaXplOworCSAqIHRoYXQgZW5zdXJlcyB0aGF0IG5v IHJ1bi10aW1lIG91dC1vZi1zaGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBvY2N1ci4KKwkg Ki8KKwlzaXplX3QJCWluaXRfc2l6ZTsKKworCS8qCisJICogSGFzaCB0YWJsZSBvcHRpb25z IHBhc3NlZCB0byBoYXNoX2NyZWF0ZSgpCisJICoKKwkgKiBoYXNoX2luZm8gYW5kIGhhc2hf ZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHRoZSBlbnRyeSBzaXplcyBhbmQga2V5CisJ ICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcgYml0 cyBhbmQgdmFsdWVzCisJICogc3BlY2lmaWMgdG8gc2hhcmVkLW1lbW9yeSBoYXNoIHRhYmxl cyBhcmUgYWRkZWQgaW1wbGljaXRseSBpbgorCSAqIFNobWVtUmVxdWVzdEhhc2goKSwgZXhj ZXB0IHRoYXQgY2FsbGVycyBtYXkgY2hvb3NlIHRvIHNwZWNpZnkKKwkgKiBIQVNIX1BBUlRJ VElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpFLgorCSAqLworCUhBU0hDVEwJCWhhc2hfaW5m bzsKKwlpbnQJCQloYXNoX2ZsYWdzOworCisJLyoKKwkgKiBXaGVuIHRoZSBoYXNoIHRhYmxl IGlzIGluaXRpYWxpemVkIG9yIGF0dGFjaGVkIHRvLCBwb2ludGVyIHRvIGl0cworCSAqIGJh Y2tlbmQtcHJpdmF0ZSBoYW5kbGUgaXMgc3RvcmVkIGluICpwdHIuICBJdCB1c3VhbGx5IHBv aW50cyB0byBhCisJICogZ2xvYmFsIHZhcmlhYmxlLCB1c2VkIHRvIGFjY2VzcyB0aGUgaGFz aCB0YWJsZSBsYXRlci4KKwkgKi8KKwlIVEFCCSAgKipwdHI7Cit9IFNobWVtUmVxdWVzdEhh c2hPcHRzOworCisKK3R5cGVkZWYgdm9pZCAoKlNobWVtUmVxdWVzdENhbGxiYWNrKSAodm9p ZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAoKlNobWVtSW5pdENhbGxiYWNrKSAodm9pZCAqYXJn KTsKK3R5cGVkZWYgdm9pZCAoKlNobWVtQXR0YWNoQ2FsbGJhY2spICh2b2lkICphcmcpOwor CisvKgorICogU2hhcmVkIG1lbW9yeSBpcyByZXNlcnZlZCBhbmQgYWxsb2NhdGVkIGluIHN0 YWdlcyBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAsCisgKiBhbmQgaW4gRVhFQ19CQUNLRU5EIG1v ZGUsIHRoZXJlJ3Mgc29tZSBleHRyYSB3b3JrIGRvbmUgdG8gImF0dGFjaCIgdG8gdGhlbQor ICogYXQgYmFja2VuZCBzdGFydHVwLiAgU2htZW1DYWxsYmFja3MgaG9sZHMgY2FsbGJhY2sg ZnVuY3Rpb25zIHRoYXQgYXJlCisgKiBjYWxsZWQgYXQgZGlmZmVyZW50IHN0YWdlcy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgU2htZW1DYWxsYmFja3MKK3sKKwkvKiBTSE1FTV8qIGZsYWdz ICovCisJaW50CQkJZmxhZ3M7CisKKwkvKgorCSAqICdyZXF1ZXN0X2ZuJyBpcyBjYWxsZWQg ZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYmVmb3JlIHRoZSBzaGFyZWQKKwkgKiBtZW1v cnkgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCisJICog UmVxdWVzdFNobWVtU3RydWN0KCkgYW5kIFJlcXVlc3RTaG1lbUhhc2goKSB0byByZWdpc3Rl ciB0aGUgc3Vic3lzdGVtJ3MKKwkgKiBzaGFyZWQgbWVtb3J5IG5lZWRzLgorCSAqLworCVNo bWVtUmVxdWVzdENhbGxiYWNrIHJlcXVlc3RfZm47CisJdm9pZAkgICAqcmVxdWVzdF9mbl9h cmc7CisKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVGhp cyBpcyBjYWxsZWQgd2hlbiB0aGUgc2hhcmVkCisJICogbWVtb3J5IGFyZWEgaXMgYWxsb2Nh dGVkLCB1c3VhbGx5IGF0IHBvc3RtYXN0ZXIgc3RhcnR1cC4KKwkgKi8KKwlTaG1lbUluaXRD YWxsYmFjayBpbml0X2ZuOworCXZvaWQJICAgKmluaXRfZm5fYXJnOworCisJLyoKKwkgKiBB dHRhY2htZW50IGNhbGxiYWNrIGZ1bmN0aW9uLiAgSW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRo aXMgaXMgY2FsbGVkIGF0CisJICogc3RhcnR1cCBvZiBlYWNoIGJhY2tlbmQuICBJbiAhRVhF Q19CQUNLRU5EIG1vZGUsIHRoaXMgaXMgb25seSBjYWxsZWQgaWYKKwkgKiB0aGUgc2hhcmVk IG1lbW9yeSBhcmVhIGlzIHJlZ2lzdGVyZWQgYWZ0ZXIgcG9zdG1hc3RlciBzdGFydHVwIChz ZWUKKwkgKiBTSE1FTV9BTExPV19BRlRFUl9TVEFSVFVQKS4KKwkgKi8KKwlTaG1lbUF0dGFj aENhbGxiYWNrIGF0dGFjaF9mbjsKKwl2b2lkCSAgICphdHRhY2hfZm5fYXJnOworfSBTaG1l bUNhbGxiYWNrczsKKworLyoKKyAqIEFsbG93IHRoZXNlIHNoYXJlZCBtZW1vcnkgYWxsb2Nh dGlvbnMgYWZ0ZXIgcG9zdG1hc3RlciBzdGFydHVwLiAgTm9ybWFsbHksCisgKiBSZWdpc3Rl clNobWVtQ2FsbGJhY2tzKCkgZXJyb3JzIG91dCBpZiBpdCdzIGNhbGxlZCBhZnRlciBwb3N0 bWFzdGVyIHN0YXJ0dXAKKyAqIGUuZy4gaW4gYW4gYWRkLWluIGxpYnJhcnkgbG9hZGVkIG9u LWRlbWFpbmQgaW4gYSBiYWNrZW5kLiAgSWYgeW91IHNldCB0aGlzCisgKiBmbGFnLCBSZWdp c3RlclNobWVtQ2FsbGJhY2tzKCkgd2lsbCBpbnN0ZWFkIGltbWVkaWF0ZWx5IGNhbGwgdGhl IGNhbGxiYWNrcywKKyAqIHRvIGluaXRpYWxpemUgb3IgYXR0YWNoIHRvIHRoZSByZXF1ZXN0 ZWQgc2hhcmVkIG1lbW9yeSBhcmVhcy4KKyAqCisgKiBUaGlzIGlzIG5vdCB1c2VkIGJ5IGFu eSBidWlsdC1pbiBzdWJzeXN0ZW1zLCBidXQgZXh0ZW5zaW9ucyBjYW4gZmluZCBpdAorICog dXNlZnVsLgorICovCisjZGVmaW5lIFNITUVNX0FMTE9XX0FGVEVSX1NUQVJUVVAJCTB4MDAw MDAwMDEKIAogLyogc2htZW0uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgUEdTaG1lbUhlYWRlciBQ R1NobWVtSGVhZGVyOyAvKiBhdm9pZCBpbmNsdWRpbmcKIAkJCQkJCQkJCQkJICogc3RvcmFn ZS9wZ19zaG1lbS5oIGhlcmUgKi8KK2V4dGVybiB2b2lkIFJlc2V0U2htZW1BbGxvY2F0b3Io dm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAq c2VnaGRyKTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lkIEF0dGFjaFNobWVt QWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcik7CisjZW5kaWYKIGV4dGVybiB2b2lk ICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxvY05vRXJy b3IoU2l6ZSBzaXplKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9p ZCAqYWRkcik7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1DYWxsYmFja3MoY29uc3Qg U2htZW1DYWxsYmFja3MgKmNhbGxiYWNrcyk7CisKK2V4dGVybiB2b2lkIFNobWVtUmVxdWVz dEludGVybmFsKFNobWVtU3RydWN0RGVzYyAqZGVzYywgU2htZW1SZXF1ZXN0U3RydWN0T3B0 cyAqb3B0aW9ucywKKwkJCQkJCQkJIFNobWVtQXJlYUtpbmQga2luZCk7CisKK2V4dGVybiB2 b2lkIFNobWVtUmVxdWVzdFN0cnVjdChTaG1lbVN0cnVjdERlc2MgKmRlc2MsIGNvbnN0IFNo bWVtUmVxdWVzdFN0cnVjdE9wdHMgKm9wdGlvbnMpOworZXh0ZXJuIHZvaWQgU2htZW1SZXF1 ZXN0SGFzaChTaG1lbUhhc2hEZXNjICpkZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RIYXNoT3B0 cyAqb3B0aW9ucyk7CisKK2V4dGVybiB2b2lkIFNobWVtQ2FsbFJlcXVlc3RDYWxsYmFja3Mo dm9pZCk7CisKKy8qIGxlZ2FjeSBzaG1lbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0 ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50NjQgaW5pdF9z aXplLCBpbnQ2NCBtYXhfc2l6ZSwKIAkJCQkJCSAgIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFz aF9mbGFncyk7CiBleHRlcm4gdm9pZCAqU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5h bWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpOworCitleHRlcm4gc2l6ZV90IFNobWVt R2V0UmVxdWVzdGVkU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFNobWVtSW5pdFJlcXVlc3Rl ZCh2b2lkKTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lkIFNobWVtQXR0YWNo UmVxdWVzdGVkKHZvaWQpOworI2VuZGlmCisKK2V4dGVybiB2b2lkIHNobWVtX2hhc2hfaW5p dChTaG1lbVN0cnVjdERlc2MgKmJhc2VfZGVzYywgY29uc3QgU2htZW1SZXF1ZXN0U3RydWN0 T3B0cyAqb3B0aW9ucyk7CitleHRlcm4gdm9pZCBzaG1lbV9oYXNoX2F0dGFjaChTaG1lbVN0 cnVjdERlc2MgKmJhc2VfZGVzYywgY29uc3QgU2htZW1SZXF1ZXN0U3RydWN0T3B0cyAqb3B0 aW9ucyk7CisKIGV4dGVybiBTaXplIGFkZF9zaXplKFNpemUgczEsIFNpemUgczIpOwogZXh0 ZXJuIFNpemUgbXVsX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMik7CiAKQEAgLTQzLDE5ICsyMzgs NCBAQCBleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19nZXRfc2htZW1fcGFnZXNpemUodm9p ZCk7CiAvKiBpcGNpLmMgKi8KIGV4dGVybiB2b2lkIFJlcXVlc3RBZGRpblNobWVtU3BhY2Uo U2l6ZSBzaXplKTsKIAotLyogc2l6ZSBjb25zdGFudHMgZm9yIHRoZSBzaG1lbSBpbmRleCB0 YWJsZSAqLwotIC8qIG1heCBzaXplIG9mIGRhdGEgc3RydWN0dXJlIHN0cmluZyBuYW1lICov Ci0jZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAoNDgpCi0gLyogZXN0aW1hdGVkIHNp emUgb2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChub3QgYSBoYXJkIGxpbWl0KSAqLwotI2Rl ZmluZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQotCi0vKiB0aGlzIGlzIGEgaGFzaCBidWNr ZXQgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlICovCi10eXBlZGVmIHN0cnVjdAotewotCWNo YXIJCWtleVtTSE1FTV9JTkRFWF9LRVlTSVpFXTsJLyogc3RyaW5nIG5hbWUgKi8KLQl2b2lk CSAgICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGluIHNoYXJlZCBtZW0gKi8KLQlTaXplCQlz aXplOwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZvciB0aGUgc3RydWN0dXJlICovCi0JU2l6 ZQkJYWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMgYWN0dWFsbHkgYWxsb2NhdGVkICovCi19 IFNobWVtSW5kZXhFbnQ7Ci0KICNlbmRpZgkJCQkJCQkvKiBTSE1FTV9IICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5kZXggYjFhYThhZjllYzAuLmQ2ODc0MDhh ZjBjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC01MCw3ICs1 MCw2IEBAIHN0YXRpYyBJbmpJb0Vycm9yU3RhdGUgKmlual9pb19lcnJvcl9zdGF0ZTsKIHN0 YXRpYyBzaG1lbV9yZXF1ZXN0X2hvb2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9 IE5VTEw7CiBzdGF0aWMgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFy dHVwX2hvb2sgPSBOVUxMOwogCi0KIHN0YXRpYyBQZ0Fpb0hhbmRsZSAqbGFzdF9oYW5kbGU7 CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA3MTJkODQxMjhjYS4uZDhk MjU0OGVmMmQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yODQ4LDkgKzI4 NDgsMTYgQEAgU2hhcmVkVHlwbW9kVGFibGVFbnRyeQogU2hhcmVkc29ydAogU2hlbGxUeXBl SW5mbwogU2hpcHBhYmxlQ2FjaGVFbnRyeQotU2htZW1BbGxvY2F0b3JEYXRhCiBTaGlwcGFi bGVDYWNoZUtleQorU2htZW1BbGxvY2F0b3JEYXRhCitTaG1lbUFyZWFLaW5kCitTaG1lbUNh bGxiYWNrcwogU2htZW1JbmRleEVudAorU2htZW1IYXNoRGVzYworU2htZW1SZXF1ZXN0CitT aG1lbVJlcXVlc3RIYXNoT3B0cworU2htZW1SZXF1ZXN0U3RydWN0T3B0cworU2htZW1TdHJ1 Y3REZXNjCiBTaHV0ZG93bkZvcmVpZ25TY2FuX2Z1bmN0aW9uCiBTaHV0ZG93bkluZm9ybWF0 aW9uCiBTaHV0ZG93bk1vZGUKLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0007-Add-test-module-to-test-after-startup-shmem-alloc.patch" Content-Disposition: attachment; filename*0="v8-0007-Add-test-module-to-test-after-startup-shmem-alloc.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNTFjNzUyYjM2NTdjNjRjYWI5MzhiZjRmOGExZmMzYjkwOGZjZGE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDQ6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA3LzE2XSBBZGQgdGVzdCBtb2R1bGUgdG8gdGVzdCBhZnRl ci1zdGFydHVwIHNobWVtCiBhbGxvY2F0aW9ucwoKTm9uZSBvZiB0aGUgZXhpc3RpbmcgbW9k dWxlcyBjb3VsZCBtYWtlIHVzZSBvZiB0aGUgbGF6eSBzaG1lbQphbGxvY2F0aW9uIGFmdGVy IHBvc3RtYXN0ZXIgc3RhcnR1cDoKCi0gcGdfc3RhdF9zdGF0ZW1lbnRzIG5lZWRzIHRvIGxv YWQgYW5kIGR1bXAgc3RhdHMgZmlsZSBvbiBzdGFydHVwIGFuZAogIHNodXRkb3duLCB3aGlj aCBkb2Vzbid0IHJlYWxseSB3b3JrIGlmIHRoZSBsaWJyYXJ5IGlzIG5vdCBsb2FkZWQgaW50 bwogIHBvc3RtYXN0ZXIKCi0gdGVzdF9haW8gcmVnaXN0ZXJzIGluamVjdGlvbiBwb2ludHMs IHdoaWNoIHJlZmVyZW5jZSB0aGUgbGlicmFyeQogIGl0c2VsZiwgd2hpY2ggY3JlYXRlcyBh IHdlaXJkIGluaXRpYWxpemF0aW9uIGxvb3AgaWYgeW91IHRyeSB0byBkbwogIHRoYXQgZGly ZWN0bHkgZnJvbSBfUEdfaW5pdCgpIGluIGEgYmFja2VuZC4gVGhlIGluaXRpYWxpemF0aW9u CiAgcmVhbGx5IG5lZWRzIHRvIGhhcHBlbiBhZnRlciBfUEdfaW5pdCgpCgotIGluamVjdGlv bl9wb2ludHMgd291bGQgYmUgYSBjYW5kaWRhdGUsIGJ1dCBpdCBhbHJlYWR5IGtub3dzIHRv IHVzZQogIERTTSB3aGVuIGl0J3Mgbm90IGxvYWRlZCBmcm9tIHNoYXJlZF9wcmVsb2FkX2xp YnJhcmllcy4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZSAg ICAgICAgICB8ICAyNCArKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vbWVzb24u YnVpbGQgICAgICAgfCAgMzMgKysrKysrCiAuLi4vdGVzdF9zaG1lbS90LzAwMV9sYXRlX3No bWVtX2FsbG9jLnBsICAgICAgfCAgNDMgKysrKysrKwogLi4uL21vZHVsZXMvdGVzdF9zaG1l bS90ZXN0X3NobWVtLS0xLjAuc3FsICAgIHwgICA5ICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc2htZW0vdGVzdF9zaG1lbS5jICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrCiAu Li4vbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJvbCAgICAgfCAgIDMgKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsK IDkgZmlsZXMgY2hhbmdlZCwgMjIyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vbWVzb24uYnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1l bV9hbGxvYy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9z aG1lbS90ZXN0X3NobWVtLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmNvbnRyb2wKCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCAyOGNlM2IzNWVkYS4uNjJmYWI5ZjNjMmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpA QCAtNDcsNiArNDcsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfcmVzb3duZXIgXAogCQkg IHRlc3RfcmxzX2hvb2tzIFwKIAkJICB0ZXN0X3Nhc2xwcmVwIFwKKwkJICB0ZXN0X3NobWVt IFwKIAkJICB0ZXN0X3NobV9tcSBcCiAJCSAgdGVzdF9zbHJ1IFwKIAkJICB0ZXN0X3RpZHN0 b3JlIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDNhYzI5MTY1NmMxLi42Nzk5YmExMWUx MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigndGVz dF9yZWdleCcpCiBzdWJkaXIoJ3Rlc3RfcmVzb3duZXInKQogc3ViZGlyKCd0ZXN0X3Jsc19o b29rcycpCiBzdWJkaXIoJ3Rlc3Rfc2FzbHByZXAnKQorc3ViZGlyKCd0ZXN0X3NobWVtJykK IHN1YmRpcigndGVzdF9zaG1fbXEnKQogc3ViZGlyKCd0ZXN0X3NscnUnKQogc3ViZGlyKCd0 ZXN0X3RpZHN0b3JlJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1l bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjQwN2Y3NDYyZmUKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUKQEAg LTAsMCArMSwyNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vTWFrZWZpbGUK KworUEdGSUxFREVTQyA9ICJ0ZXN0X3NobWVtIC0gdGVzdCBjb2RlIGZvciBzaG1lbSBhbGxv Y2F0aW9ucyIKKworTU9EVUxFX2JpZyA9IHRlc3Rfc2htZW0KK09CSlMgPSBcCisJJChXSU4z MlJFUykgXAorCXRlc3Rfc2htZW0ubworCitFWFRFTlNJT04gPSB0ZXN0X3NobWVtCitEQVRB ID0gdGVzdF9zaG1lbS0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9Q R1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJ RykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0KK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZmI0YmYzMjhiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0vbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjQtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKwordGVzdF9zaG1lbV9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3NobWVtLmMnLAor KQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9zaG1lbV9zb3VyY2Vz ICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAg ICctLU5BTUUnLCAndGVzdF9zaG1lbScsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9zaG1l bSAtIHRlc3QgY29kZSBmb3Igc2htZW0gYWxsb2NhdGlvbnMnLF0pCitlbmRpZgorCit0ZXN0 X3NobWVtID0gc2hhcmVkX21vZHVsZSgndGVzdF9zaG1lbScsCisgIHRlc3Rfc2htZW1fc291 cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xp YnMgKz0gdGVzdF9zaG1lbQorCit0ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rl c3Rfc2htZW0uY29udHJvbCcsCisgICd0ZXN0X3NobWVtLS0xLjAuc3FsJywKKykKKwordGVz dHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3NobWVtJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisg ICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2xhdGVfc2htZW1fYWxs b2MucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1lbV9hbGxvYy5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9jLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NGVjODQxYjU0MgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9j LnBsCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMj IworIyBUZXN0IGFsbG9jYXRpbmcgbWVtb3J5IGFmdGVyIHN0YXJ0dXAsIGkuZS4gd2hlbiB0 aGUgbGlicmFyeSBpcyBub3QKKyMgaW4gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzCisjIyMK K215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Cisk bm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCiskbm9kZS0+c2FmZV9wc3FsKCJwb3N0 Z3JlcyIsICJDUkVBVEUgRVhURU5TSU9OIHRlc3Rfc2htZW07Iik7CisKKyMgQ2hlY2sgdGhh dCB0aGUgYXR0YWNoIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgb24gYSBuZXcgY29ubmVjdGlv bgorbXkgJGF0dGFjaF9jb3VudDEgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIsICJT RUxFQ1QgZ2V0X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KCk7Iik7CitteSAkYXR0YWNoX2Nv dW50MiA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgIlNFTEVDVCBnZXRfdGVzdF9z aG1lbV9hdHRhY2hfY291bnQoKTsiKTsKK2NtcF9vaygkYXR0YWNoX2NvdW50MiwgJz4nLCAk YXR0YWNoX2NvdW50MSwgImF0dGFjaCBjYWxsYmFjayBpcyBjYWxsZWQgaW4gZWFjaCBiYWNr ZW5kIik7Ciskbm9kZS0+c3RvcDsKKworIyMjCisjIFRlc3QgdGhhdCBsb2FkaW5nIHZpYSBz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgYWxzbyB3b3JrcworIyMjCiskbm9kZS0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAn dGVzdF9zaG1lbSciKTsKKyRub2RlLT5zdGFydDsKKworIyBXaGVuIGxvYWRlZCB2aWEgc2hh cmVkX3ByZWxvYWRfbGlicmFyaWVzLCB0aGUgYXR0YWNoIGNhbGxiYWNrIGlzCisjIGNhbGxl ZCBvciBub3QsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgYW4gRVhFQ19CQUNLRU5E IGJ1aWxkLgorJGF0dGFjaF9jb3VudDEgPSAkbm9kZS0+c2FmZV9wc3FsKCJwb3N0Z3JlcyIs ICJTRUxFQ1QgZ2V0X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KCk7Iik7CiskYXR0YWNoX2Nv dW50MiA9ICRub2RlLT5zYWZlX3BzcWwoInBvc3RncmVzIiwgIlNFTEVDVCBnZXRfdGVzdF9z aG1lbV9hdHRhY2hfY291bnQoKTsiKTsKKworb2soJGF0dGFjaF9jb3VudDEgPT0gMCAmJiAk YXR0YWNoX2NvdW50MiA9PSAwIHx8CisgICAkYXR0YWNoX2NvdW50MiA+PSAkYXR0YWNoX2Nv dW50MSwKKyAgICJsb2FkZWQgdmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyIpOworCisk bm9kZS0+c3RvcDsKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMmQwMWZkOTI1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS0tMS4wLnNxbApAQCAtMCwwICsx LDkgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLS0xLjAu c3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJh dGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRF TlNJT04gdGVzdF9zaG1lbSIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKworQ1JFQVRF IEZVTkNUSU9OIGdldF90ZXN0X3NobWVtX2F0dGFjaF9jb3VudCgpCitSRVRVUk5TIHBnX2Nh dGFsb2cuaW50NCBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWQ3ZjMxYjM3YzcKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jCkBAIC0wLDAg KzEsMTA3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X3NobWVtLmMK KyAqCQlIZWxwZXJzIHRvIHRlc3Qgc2htZW0gYWxsb2NhdGlvbiByb3V0aW5lcworICoKKyAq ICBYWFggVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgQyBm dW5jdGlvbmFsaXR5IHRvIFNRTCwgdG8KKyAqIG1ha2UgaXQgcG9zc2libGUgdG8gdGVzdCBB SU8gcmVsYXRlZCBiZWhhdmlvciBpbiBhIHRhcmdldGVkIHdheSBmcm9tIFNRTC4KKyAqIEl0 J2Qgbm90IGdlbmVyYWxseSBiZSBzYWZlIHRvIGV4cG9ydCB0aGVzZSBmdW5jdGlvbnMgdG8g U1FMLCBidXQgZm9yIGEgdGVzdAorICogdGhhdCdzIGZpbmUuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDIwLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVt L3Rlc3Rfc2htZW0uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5j bHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc2htZW0uaCIKKworCitQR19NT0RVTEVfTUFHSUM7CisKK3R5cGVkZWYgc3RydWN0IFRl c3RTaG1lbURhdGEKK3sKKwlpbnQJCQl2YWx1ZTsKKwlib29sCQlpbml0aWFsaXplZDsKKwlp bnQJCQlhdHRhY2hfY291bnQ7Cit9IFRlc3RTaG1lbURhdGE7CisKK3N0YXRpYyBUZXN0U2ht ZW1EYXRhICpUZXN0U2htZW07CisKK3N0YXRpYyBib29sIGF0dGFjaGVkX29yX2luaXRpYWxp emVkID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2htZW1fcmVxdWVzdCh2b2lkICph cmcpOworc3RhdGljIHZvaWQgdGVzdF9zaG1lbV9pbml0KHZvaWQgKmFyZyk7CitzdGF0aWMg dm9pZCB0ZXN0X3NobWVtX2F0dGFjaCh2b2lkICphcmcpOworCitzdGF0aWMgY29uc3QgU2ht ZW1DYWxsYmFja3MgVGVzdFNobWVtQ2FsbGJhY2tzID0geworCS5mbGFncyA9IFNITUVNX0FM TE9XX0FGVEVSX1NUQVJUVVAsCisJLnJlcXVlc3RfZm4gPSB0ZXN0X3NobWVtX3JlcXVlc3Qs CisJLmluaXRfZm4gPSB0ZXN0X3NobWVtX2luaXQsCisJLmF0dGFjaF9mbiA9IHRlc3Rfc2ht ZW1fYXR0YWNoLAorfTsKKworc3RhdGljIHZvaWQKK3Rlc3Rfc2htZW1fcmVxdWVzdCh2b2lk ICphcmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBUZXN0U2htZW1EZXNjOworCisJ ZWxvZyhMT0csICJ0ZXN0X3NobWVtX3JlcXVlc3QgY2FsbGJhY2sgY2FsbGVkIik7CisKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJlRlc3RTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0 T3B0cykgeworCQkubmFtZSA9ICJ0ZXN0X3NobWVtIGFyZWEiLAorCQkuc2l6ZSA9IHNpemVv ZihUZXN0U2htZW1EYXRhKSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmVGVzdFNobWVtLAorCQl9 KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2htZW1faW5pdCh2b2lkICphcmcpCit7CisJ ZWxvZyhMT0csICJpbml0IGNhbGxiYWNrIGNhbGxlZCIpOworCWlmIChUZXN0U2htZW0tPmlu aXRpYWxpemVkKQorCQllbG9nKEVSUk9SLCAic2htZW0gYXJlYSBhbHJlYWR5IGluaXRpYWxp emVkIik7CisJVGVzdFNobWVtLT5pbml0aWFsaXplZCA9IHRydWU7CisKKwlpZiAoYXR0YWNo ZWRfb3JfaW5pdGlhbGl6ZWQpCisJCWVsb2coRVJST1IsICJhdHRhY2ggb3IgaW5pdGlhbGl6 ZSBhbHJlYWR5IGNhbGxlZCBpbiB0aGlzIHByb2Nlc3MiKTsKKwlhdHRhY2hlZF9vcl9pbml0 aWFsaXplZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NobWVtX2F0dGFjaCh2 b2lkICphcmcpCit7CisJZWxvZyhMT0csICJ0ZXN0X3NobWVtX2F0dGFjaCBjYWxsYmFjayBj YWxsZWQiKTsKKwlpZiAoIVRlc3RTaG1lbS0+aW5pdGlhbGl6ZWQpCisJCWVsb2coRVJST1Is ICJzaG1lbSBhcmVhIG5vdCB5ZXQgaW5pdGlhbGl6ZWQiKTsKKwlUZXN0U2htZW0tPmF0dGFj aF9jb3VudCsrOworCisJaWYgKGF0dGFjaGVkX29yX2luaXRpYWxpemVkKQorCQllbG9nKEVS Uk9SLCAiYXR0YWNoIG9yIGluaXRpYWxpemUgYWxyZWFkeSBjYWxsZWQgaW4gdGhpcyBwcm9j ZXNzIik7CisJYXR0YWNoZWRfb3JfaW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCit2b2lkCitf UEdfaW5pdCh2b2lkKQoreworCWVsb2coTE9HLCAidGVzdF9zaG1lbSBtb2R1bGUncyBfUEdf aW5pdCBjYWxsZWQiKTsKKwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZUZXN0U2htZW1DYWxs YmFja3MpOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKGdldF90ZXN0X3NobWVtX2F0dGFj aF9jb3VudCk7CitEYXR1bQorZ2V0X3Rlc3Rfc2htZW1fYXR0YWNoX2NvdW50KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJaWYgKCFhdHRhY2hlZF9vcl9pbml0aWFsaXplZCkKKwkJZWxvZyhF UlJPUiwgInNobWVtIGFyZWEgbm90IGF0dGFjaGVkIG9yIGluaXRpYWxpemVkIGluIHRoaXMg cHJvY2VzcyIpOworCWlmICghVGVzdFNobWVtLT5pbml0aWFsaXplZCkKKwkJZWxvZyhFUlJP UiwgInNobWVtIGFyZWEgbm90IHlldCBpbml0aWFsaXplZCIpOworCVBHX1JFVFVSTl9JTlQz MihUZXN0U2htZW0tPmF0dGFjaF9jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZjJmMjZmNDUzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9zaG1lbS5jb250cm9sCkBAIC0wLDAgKzEs MyBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIHNobWVtIGFsbG9jYXRpb25zJworZGVm YXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3Rf c2htZW0nCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGQ4ZDI1NDhlZjJkLi4x MzljYjZmOWRhNSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTMxMjksNiAr MzEyOSw3IEBAIFRlc3REU01SZWdpc3RyeUhhc2hFbnRyeQogVGVzdERTTVJlZ2lzdHJ5U3Ry dWN0CiBUZXN0RGVjb2RpbmdEYXRhCiBUZXN0RGVjb2RpbmdUeG5EYXRhCitUZXN0U2htZW1E YXRhCiBUZXN0U3BlYwogVGVzdFZhbHVlVHlwZQogVGV4dEZyZXEKLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0008-Convert-pg_stat_statements-to-use-the-new-interfa.patch" Content-Disposition: attachment; filename*0="v8-0008-Convert-pg_stat_statements-to-use-the-new-interfa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhYzM4NTc5ZjMxNzI4N2JiMGY2MDNjM2RlMDgwODFkNjA5OWRlNjZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjM6MDA6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA4LzE2XSBDb252ZXJ0IHBnX3N0YXRfc3RhdGVtZW50cyB0 byB1c2UgdGhlIG5ldyBpbnRlcmZhY2UKCkFzIHBhcnQgb2YgdGhpcywgZW1iZWQgdGhlIExX TG9jayBpdCBuZWVkcyBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3QKaXRzZWxmLCBzbyB0 aGF0IHdlIGRvbid0IG5lZWQgdG8gdXNlIFJlcXVlc3ROYW1lZExXTG9ja1RyYW5jaGUoKQph bnltb3JlLiBMV0xvY2tOZXdUcmFuY2hlSWQrTFdMb2NrSW5pdGlhbGl6ZSBpcyBtb3JlIGNv bnZlbmllbnQgdG8gdXNlCmluIGV4dGVuc2lvbnMuCgpSZXZpZXdlZC1ieTogQXNodXRvc2gg QmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29s dCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogUm9i ZXJ0IEhhYXMgPHJvYmVydG1oYWFzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93 d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4SFc1dk0xYm5lTFlmZzB3R2VBYT01 MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAxNzcgKysrKysrKyst LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3Rh dF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0 YXRlbWVudHMuYwppbmRleCA2Y2IxNDgyNGVjMy4uZDliMWI4YjRmZTkgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBi L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0y NDksNyArMjQ5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdzc0VudHJ5CiAgKi8KIHR5cGVkZWYg c3RydWN0IHBnc3NTaGFyZWRTdGF0ZQogewotCUxXTG9jawkgICAqbG9jazsJCQkvKiBwcm90 ZWN0cyBoYXNodGFibGUgc2VhcmNoL21vZGlmaWNhdGlvbiAqLworCUxXTG9ja1BhZGRlZCBs b2NrOwkJCS8qIHByb3RlY3RzIGhhc2h0YWJsZSBzZWFyY2gvbW9kaWZpY2F0aW9uICovCiAJ ZG91YmxlCQljdXJfbWVkaWFuX3VzYWdlOwkvKiBjdXJyZW50IG1lZGlhbiB1c2FnZSBpbiBo YXNodGFibGUgKi8KIAlTaXplCQltZWFuX3F1ZXJ5X2xlbjsgLyogY3VycmVudCBtZWFuIGVu dHJ5IHRleHQgbGVuZ3RoICovCiAJc2xvY2tfdAkJbXV0ZXg7CQkJLyogcHJvdGVjdHMgZm9s bG93aW5nIGZpZWxkcyBvbmx5OiAqLwpAQCAtMjU5LDE0ICsyNTksMjQgQEAgdHlwZWRlZiBz dHJ1Y3QgcGdzc1NoYXJlZFN0YXRlCiAJcGdzc0dsb2JhbFN0YXRzIHN0YXRzOwkJLyogZ2xv YmFsIHN0YXRpc3RpY3MgZm9yIHBnc3MgKi8KIH0gcGdzc1NoYXJlZFN0YXRlOwogCisvKiBM aW5rcyB0byBzaGFyZWQgbWVtb3J5IHN0YXRlICovCitzdGF0aWMgcGdzc1NoYXJlZFN0YXRl ICpwZ3NzOworc3RhdGljIEhUQUIgKnBnc3NfaGFzaDsKKworc3RhdGljIHZvaWQgcGdzc19z aG1lbV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQo dm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIHBnc3Nfc2htZW1f Y2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gcGdzc19zaG1lbV9yZXF1ZXN0LAorCS5p bml0X2ZuID0gcGdzc19zaG1lbV9pbml0LAorfTsKKwogLyotLS0tIExvY2FsIHZhcmlhYmxl cyAtLS0tKi8KIAogLyogQ3VycmVudCBuZXN0aW5nIGRlcHRoIG9mIHBsYW5uZXIvRXhlY3V0 b3JSdW4vUHJvY2Vzc1V0aWxpdHkgY2FsbHMgKi8KIHN0YXRpYyBpbnQJbmVzdGluZ19sZXZl bCA9IDA7CiAKIC8qIFNhdmVkIGhvb2sgdmFsdWVzICovCi1zdGF0aWMgc2htZW1fcmVxdWVz dF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBOVUxMOwotc3RhdGljIHNo bWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsK IHN0YXRpYyBwb3N0X3BhcnNlX2FuYWx5emVfaG9va190eXBlIHByZXZfcG9zdF9wYXJzZV9h bmFseXplX2hvb2sgPSBOVUxMOwogc3RhdGljIHBsYW5uZXJfaG9va190eXBlIHByZXZfcGxh bm5lcl9ob29rID0gTlVMTDsKIHN0YXRpYyBFeGVjdXRvclN0YXJ0X2hvb2tfdHlwZSBwcmV2 X0V4ZWN1dG9yU3RhcnQgPSBOVUxMOwpAQCAtMjc1LDEwICsyODUsNiBAQCBzdGF0aWMgRXhl Y3V0b3JGaW5pc2hfaG9va190eXBlIHByZXZfRXhlY3V0b3JGaW5pc2ggPSBOVUxMOwogc3Rh dGljIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yRW5kID0gTlVMTDsKIHN0 YXRpYyBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgcHJldl9Qcm9jZXNzVXRpbGl0eSA9IE5V TEw7CiAKLS8qIExpbmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLXN0YXRpYyBwZ3Nz U2hhcmVkU3RhdGUgKnBnc3MgPSBOVUxMOwotc3RhdGljIEhUQUIgKnBnc3NfaGFzaCA9IE5V TEw7Ci0KIC8qLS0tLSBHVUMgdmFyaWFibGVzIC0tLS0qLwogCiB0eXBlZGVmIGVudW0KQEAg LTMzMSw4ICszMzcsNiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50 c18xXzEzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzKTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8pOwogCi1zdGF0aWMg dm9pZCBwZ3NzX3NobWVtX3JlcXVlc3Qodm9pZCk7Ci1zdGF0aWMgdm9pZCBwZ3NzX3NobWVt X3N0YXJ0dXAodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX3NodXRkb3duKGludCBj b2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgcGdzc19wb3N0X3BhcnNlX2FuYWx5emUo UGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksCiAJCQkJCQkJCQlKdW1ibGVTdGF0 ZSAqanN0YXRlKTsKQEAgLTM2Niw3ICszNzAsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0b3Jl KGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdfc3Rh dF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJ CQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJzaW9uLAogCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQp Owotc3RhdGljIFNpemUgcGdzc19tZW1zaXplKHZvaWQpOwogc3RhdGljIHBnc3NFbnRyeSAq ZW50cnlfYWxsb2MocGdzc0hhc2hLZXkgKmtleSwgU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBx dWVyeV9sZW4sCiAJCQkJCQkJICBpbnQgZW5jb2RpbmcsIGJvb2wgc3RpY2t5KTsKIHN0YXRp YyB2b2lkIGVudHJ5X2RlYWxsb2Modm9pZCk7CkBAIC00NzEsMTMgKzQ3NCwxNCBAQCBfUEdf aW5pdCh2b2lkKQogCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19zdGF0X3N0YXRlbWVu dHMiKTsKIAorCS8qCisJICogUmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1vcnkgbmVlZHMuCisJ ICovCisJUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcygmcGdzc19zaG1lbV9jYWxsYmFja3MpOwor CiAJLyoKIAkgKiBJbnN0YWxsIGhvb2tzLgogCSAqLwotCXByZXZfc2htZW1fcmVxdWVzdF9o b29rID0gc2htZW1fcmVxdWVzdF9ob29rOwotCXNobWVtX3JlcXVlc3RfaG9vayA9IHBnc3Nf c2htZW1fcmVxdWVzdDsKLQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9IHNobWVtX3N0YXJ0 dXBfaG9vazsKLQlzaG1lbV9zdGFydHVwX2hvb2sgPSBwZ3NzX3NobWVtX3N0YXJ0dXA7CiAJ cHJldl9wb3N0X3BhcnNlX2FuYWx5emVfaG9vayA9IHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29r OwogCXBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gcGdzc19wb3N0X3BhcnNlX2FuYWx5emU7 CiAJcHJldl9wbGFubmVyX2hvb2sgPSBwbGFubmVyX2hvb2s7CkBAIC00OTUsMzAgKzQ5OSw0 OCBAQCBfUEdfaW5pdCh2b2lkKQogfQogCiAvKgotICogc2htZW1fcmVxdWVzdCBob29rOiBy ZXF1ZXN0IGFkZGl0aW9uYWwgc2hhcmVkIHJlc291cmNlcy4gIFdlJ2xsIGFsbG9jYXRlIG9y Ci0gKiBhdHRhY2ggdG8gdGhlIHNoYXJlZCByZXNvdXJjZXMgaW4gcGdzc19zaG1lbV9zdGFy dHVwKCkuCisgKiBzaG1lbSByZXF1ZXN0IGNhbGxiYWNrOiBSZXF1ZXN0IHNoYXJlZCBtZW1v cnkgcmVzb3VyY2VzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGF0IHBvc3RtYXN0ZXIgc3Rh cnR1cC4gIE5vdGUgdGhhdCB0aGUgc2hhcmVkIG1lbW9yeSBpc24ndAorICogYWxsb2NhdGVk IGhlcmUgeWV0LCB0aGlzIG1lcmVseSByZWdpc3RlciBvdXIgbmVlZHMuCisgKgorICogSW4g RVhFQ19CQUNLRU5EIG1vZGUsIHRoaXMgaXMgYWxzbyBjYWxsZWQgaW4gZWFjaCBiYWNrZW5k LCB0byByZS1hdHRhY2ggdG8KKyAqIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgdGhhdCB3YXMg YWxyZWFkeSBpbml0aWFsaXplZC4KICAqLwogc3RhdGljIHZvaWQKLXBnc3Nfc2htZW1fcmVx dWVzdCh2b2lkKQorcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlpZiAocHJl dl9zaG1lbV9yZXF1ZXN0X2hvb2spCi0JCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7Ci0K LQlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKHBnc3NfbWVtc2l6ZSgpKTsKLQlSZXF1ZXN0TmFt ZWRMV0xvY2tUcmFuY2hlKCJwZ19zdGF0X3N0YXRlbWVudHMiLCAxKTsKKwlzdGF0aWMgU2ht ZW1IYXNoRGVzYyBwZ3NzU2hhcmVkSGFzaERlc2M7CisJc3RhdGljIFNobWVtU3RydWN0RGVz YyBwZ3NzU2hhcmVkU3RhdGVEZXNjOworCisJU2htZW1SZXF1ZXN0SGFzaCgmcGdzc1NoYXJl ZEhhc2hEZXNjLCAmKFNobWVtUmVxdWVzdEhhc2hPcHRzKSB7CisJCS5uYW1lID0gInBnX3N0 YXRfc3RhdGVtZW50cyBoYXNoIiwKKwkJLnB0ciA9ICZwZ3NzX2hhc2gsCisJCS5pbml0X3Np emUgPSBwZ3NzX21heCwKKwkJLm1heF9zaXplID0gcGdzc19tYXgsCisJCS5oYXNoX2luZm8u a2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSksCisJCS5oYXNoX2luZm8uZW50cnlzaXpl ID0gc2l6ZW9mKHBnc3NFbnRyeSksCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFT SF9CTE9CUywKKwl9KTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJnBnc3NTaGFyZWRTdGF0ZURl c2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJwZ19zdGF0X3N0 YXRlbWVudHMiLAorCQkuc2l6ZSA9IHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAorCQkucHRy ID0gKHZvaWQgKiopICZwZ3NzLAorCX0pOwogfQogCiAvKgotICogc2htZW1fc3RhcnR1cCBo b29rOiBhbGxvY2F0ZSBvciBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSwKLSAqIHRoZW4gbG9h ZCBhbnkgcHJlLWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgotICogQWxzbyBjcmVh dGUgYW5kIGxvYWQgdGhlIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVkIHRv IGV4aXN0Ci0gKiAoZXZlbiBpZiBlbXB0eSkgd2hpbGUgdGhlIG1vZHVsZSBpcyBlbmFibGVk LgorICogc2htZW0gaW5pdCBjYWxsYmFjazogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIG1lbW9y eSBkYXRhIHN0cnVjdHVyZXMgYXQKKyAqIHBvc3RtYXN0ZXIgc3RhcnR1cC4KKyAqCisgKiBM b2FkIGFueSBwcmUtZXhpc3Rpbmcgc3RhdGlzdGljcyBmcm9tIGZpbGUuICBBbHNvIGNyZWF0 ZSBhbmQgbG9hZCB0aGUKKyAqIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVk IHRvIGV4aXN0IChldmVuIGlmIGVtcHR5KSB3aGlsZSB0aGUKKyAqIG1vZHVsZSBpcyBlbmFi bGVkLgogICovCiBzdGF0aWMgdm9pZAotcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCitwZ3Nz X3NobWVtX2luaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCUhBU0hDVEwJCWlu Zm87CisJaW50CQkJdHJhbmNoZV9pZDsKIAlGSUxFCSAgICpmaWxlID0gTlVMTDsKIAlGSUxF CSAgICpxZmlsZSA9IE5VTEw7CiAJdWludDMyCQloZWFkZXI7CkBAIC01MjgsNTkgKzU1MCwz MiBAQCBwZ3NzX3NobWVtX3N0YXJ0dXAodm9pZCkKIAlpbnQJCQlidWZmZXJfc2l6ZTsKIAlj aGFyCSAgICpidWZmZXIgPSBOVUxMOwogCi0JaWYgKHByZXZfc2htZW1fc3RhcnR1cF9ob29r KQotCQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaygpOwotCi0JLyogcmVzZXQgaW4gY2FzZSB0 aGlzIGlzIGEgcmVzdGFydCB3aXRoaW4gdGhlIHBvc3RtYXN0ZXIgKi8KLQlwZ3NzID0gTlVM TDsKLQlwZ3NzX2hhc2ggPSBOVUxMOwotCiAJLyoKLQkgKiBDcmVhdGUgb3IgYXR0YWNoIHRv IHRoZSBzaGFyZWQgbWVtb3J5IHN0YXRlLCBpbmNsdWRpbmcgaGFzaCB0YWJsZQorCSAqIElu aXRpYWxpemUgdGhlIHNobWVtIGFyZWEgd2l0aCBubyBzdGF0aXN0aWNzLgogCSAqLwotCUxX TG9ja0FjcXVpcmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JcGdz cyA9IFNobWVtSW5pdFN0cnVjdCgicGdfc3RhdF9zdGF0ZW1lbnRzIiwKLQkJCQkJCSAgIHNp emVvZihwZ3NzU2hhcmVkU3RhdGUpLAotCQkJCQkJICAgJmZvdW5kKTsKLQotCWlmICghZm91 bmQpCi0JewotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2ggLi4uICovCi0JCXBnc3MtPmxvY2sg PSAmKEdldE5hbWVkTFdMb2NrVHJhbmNoZSgicGdfc3RhdF9zdGF0ZW1lbnRzIikpLT5sb2Nr OwotCQlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5fSU5JVDsKLQkJ cGdzcy0+bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVEX0xFTkdUSF9JTklUOwotCQlTcGluTG9j a0luaXQoJnBnc3MtPm11dGV4KTsKLQkJcGdzcy0+ZXh0ZW50ID0gMDsKLQkJcGdzcy0+bl93 cml0ZXJzID0gMDsKLQkJcGdzcy0+Z2NfY291bnQgPSAwOwotCQlwZ3NzLT5zdGF0cy5kZWFs bG9jID0gMDsKLQkJcGdzcy0+c3RhdHMuc3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7Ci0JfQotCi0JaW5mby5rZXlzaXplID0gc2l6ZW9mKHBnc3NIYXNoS2V5KTsKLQlp bmZvLmVudHJ5c2l6ZSA9IHNpemVvZihwZ3NzRW50cnkpOwotCXBnc3NfaGFzaCA9IFNobWVt SW5pdEhhc2goInBnX3N0YXRfc3RhdGVtZW50cyBoYXNoIiwKLQkJCQkJCQkgIHBnc3NfbWF4 LCBwZ3NzX21heCwKLQkJCQkJCQkgICZpbmZvLAotCQkJCQkJCSAgSEFTSF9FTEVNIHwgSEFT SF9CTE9CUyk7CisJdHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3RhdF9z dGF0ZW1lbnRzIik7CisJTFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+bG9jay5sb2NrLCB0cmFu Y2hlX2lkKTsKKwlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5fSU5J VDsKKwlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7CisJU3Bp bkxvY2tJbml0KCZwZ3NzLT5tdXRleCk7CisJcGdzcy0+ZXh0ZW50ID0gMDsKKwlwZ3NzLT5u X3dyaXRlcnMgPSAwOworCXBnc3MtPmdjX2NvdW50ID0gMDsKKwlwZ3NzLT5zdGF0cy5kZWFs bG9jID0gMDsKKwlwZ3NzLT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKIAotCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRMb2NrKTsKKwkvKiBUaGUg aGFzaCB0YWJsZSBtdXN0IGJlIGluaXRpYWxpemVkIGFscmVhZHkgKi8KKwlBc3NlcnQocGdz c19oYXNoICE9IE5VTEwpOwogCiAJLyoKLQkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9zdG1hc3Rl ciAob3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQotCSAqIGV4 aXQgaG9vayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCisJICogU2V0IHVwIGEg c2htZW0gZXhpdCBob29rIHRvIGR1bXAgdGhlIHN0YXRpc3RpY3MgdG8gZGlzayBvbiBwb3N0 bWFzdGVyCisJICogKG9yIHN0YW5kYWxvbmUgYmFja2VuZCkgZXhpdC4KIAkgKi8KLQlpZiAo IUlzVW5kZXJQb3N0bWFzdGVyKQotCQlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRv d24sIChEYXR1bSkgMCk7Ci0KLQkvKgotCSAqIERvbmUgaWYgc29tZSBvdGhlciBwcm9jZXNz IGFscmVhZHkgY29tcGxldGVkIG91ciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQlpZiAoZm91 bmQpCi0JCXJldHVybjsKKwlvbl9zaG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChE YXR1bSkgMCk7CiAKIAkvKgorCSAqIExvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0aWNz IGZyb20gZmlsZS4KKwkgKgogCSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGxvY2tz IGhlcmUsIGJlY2F1c2UgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyCiAJICogcHJvY2Vzc2Vz IHJ1bm5pbmcgd2hlbiB0aGlzIGNvZGUgaXMgcmVhY2hlZC4KIAkgKi8KQEAgLTEzMzgsNyAr MTMzMyw3IEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQs CiAJa2V5LnRvcGxldmVsID0gKG5lc3RpbmdfbGV2ZWwgPT0gMCk7CiAKIAkvKiBMb29rdXAg dGhlIGhhc2ggdGFibGUgZW50cnkgd2l0aCBzaGFyZWQgbG9jay4gKi8KLQlMV0xvY2tBY3F1 aXJlKHBnc3MtPmxvY2ssIExXX1NIQVJFRCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9j ay5sb2NrLCBMV19TSEFSRUQpOwogCiAJZW50cnkgPSAocGdzc0VudHJ5ICopIGhhc2hfc2Vh cmNoKHBnc3NfaGFzaCwgJmtleSwgSEFTSF9GSU5ELCBOVUxMKTsKIApAQCAtMTM1OSwxMSAr MTM1NCwxMSBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlk LAogCQkgKi8KIAkJaWYgKGpzdGF0ZSkKIAkJewotCQkJTFdMb2NrUmVsZWFzZShwZ3NzLT5s b2NrKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAJCQlub3JtX3F1 ZXJ5ID0gZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAogCQkJCQkJ CQkJCQkJICAgcXVlcnlfbG9jYXRpb24sCiAJCQkJCQkJCQkJCQkgICAmcXVlcnlfbGVuKTsK LQkJCUxXTG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwkJCUxXTG9ja0Fj cXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsKIAkJfQogCiAJCS8qIEFwcGVu ZCBuZXcgcXVlcnkgdGV4dCB0byBmaWxlIHdpdGggb25seSBzaGFyZWQgbG9jayBoZWxkICov CkBAIC0xMzc4LDggKzEzNzMsOCBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBp bnQ2NCBxdWVyeUlkLAogCQlkb19nYyA9IG5lZWRfZ2NfcXRleHRzKCk7CiAKIAkJLyogTmVl ZCBleGNsdXNpdmUgbG9jayB0byBtYWtlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeSAtIHByb21v dGUgKi8KLQkJTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKLQkJTFdMb2NrQWNxdWlyZShw Z3NzLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2Nr LmxvY2spOworCQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lW RSk7CiAKIAkJLyoKIAkJICogQSBnYXJiYWdlIGNvbGxlY3Rpb24gbWF5IGhhdmUgb2NjdXJy ZWQgd2hpbGUgd2Ugd2VyZW4ndCBob2xkaW5nIHRoZQpAQCAtMTUxOCw3ICsxNTEzLDcgQEAg cGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAl9CiAKIGRv bmU6Ci0JTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3Nz LT5sb2NrLmxvY2spOwogCiAJLyogV2UgcG9zdHBvbmUgdGhpcyBjbGVhbi11cCB1bnRpbCB3 ZSdyZSBvdXQgb2YgdGhlIGxvY2sgKi8KIAlpZiAobm9ybV9xdWVyeSkKQEAgLTE4MDcsNyAr MTgwMiw3IEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywKIAkgKiB3ZSBuZWVkIHRvIHBhcnRpdGlvbiB0aGUgaGFzaCB0YWJsZSB0byBs aW1pdCB0aGUgdGltZSBzcGVudCBob2xkaW5nIGFueQogCSAqIG9uZSBsb2NrLgogCSAqLwot CUxXTG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwlMV0xvY2tBY3F1aXJl KCZwZ3NzLT5sb2NrLmxvY2ssIExXX1NIQVJFRCk7CiAKIAlpZiAoc2hvd3RleHQpCiAJewpA QCAtMjA0NCw3ICsyMDM5LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAl9CiAKLQlMV0xv Y2tSZWxlYXNlKHBnc3MtPmxvY2spOworCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9j ayk7CiAKIAlmcmVlKHFidWZmZXIpOwogfQpAQCAtMjA4MywyMCArMjA3OCw2IEBAIHBnX3N0 YXRfc3RhdGVtZW50c19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0RBVFVN KEhlYXBUdXBsZUdldERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51 bGxzKSkpOwogfQogCi0vKgotICogRXN0aW1hdGUgc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVk ZWQuCi0gKi8KLXN0YXRpYyBTaXplCi1wZ3NzX21lbXNpemUodm9pZCkKLXsKLQlTaXplCQlz aXplOwotCi0Jc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKHBnc3NfbWF4LCBzaXpl b2YocGdzc0VudHJ5KSkpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAgKiBBbGxvY2F0 ZSBhIG5ldyBoYXNodGFibGUgZW50cnkuCiAgKiBjYWxsZXIgbXVzdCBob2xkIGFuIGV4Y2x1 c2l2ZSBsb2NrIG9uIHBnc3MtPmxvY2sKQEAgLTI3MjYsNyArMjcwNyw3IEBAIGVudHJ5X3Jl c2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBib29sIG1pbm1heF9v bmx5KQogCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAogCQkJCSBlcnJtc2coInBnX3N0YXRfc3RhdGVtZW50cyBtdXN0IGJlIGxvYWRl ZCB2aWEgXCJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNcIiIpKSk7CiAKLQlMV0xvY2tBY3F1 aXJlKHBnc3MtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJTFdMb2NrQWNxdWlyZSgmcGdzcy0+ bG9jay5sb2NrLCBMV19FWENMVVNJVkUpOwogCW51bV9lbnRyaWVzID0gaGFzaF9nZXRfbnVt X2VudHJpZXMocGdzc19oYXNoKTsKIAogCXN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOwpAQCAtMjgyMCw3ICsyODAxLDcgQEAgZG9uZToKIAlyZWNvcmRfZ2NfcXRleHRz KCk7CiAKIHJlbGVhc2VfbG9jazoKLQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCUxX TG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAKIAlyZXR1cm4gc3RhdHNfcmVzZXQ7 CiB9Ci0tIAoyLjQ3LjMKCg== --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0009-Introduce-registry-of-built-in-subsystems.patch" Content-Disposition: attachment; filename="v8-0009-Introduce-registry-of-built-in-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSA3N2RiZjNkZjhjNTZjYzc2MGZhMmQ0NjYxZjM1NDEzYjM5YjhkZGI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTM6NDI6MTEgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDA5LzE2XSBJbnRyb2R1Y2UgcmVnaXN0cnkgb2YgYnVpbHQt aW4gc3Vic3lzdGVtcwoKVG8gYWRkIGEgbmV3IGJ1aWx0LWluIHN1YnN5c3RlbSwgYWRkIGl0 IHRvIHN1YnN5c3RlbXNsaXN0LmguIFRoYXQKaG9va3MgdXAgaXRzIGNhbGxiYWNrcyBzbyB0 aGF0IHRoZXkgZ2V0IGNhbGxlZCBhdCB0aGUgcmlnaHQgdGltZXMKZHVyaW5nIHBvc3RtYXN0 ZXIgc3RhcnR1cC4gRm9yIG5vdyB0aGlzIGlzIHVudXNlZCwgYnV0IHdpbGwgcmVwbGFjZQp0 aGUgY3VycmVudCBTdWJzeXN0ZW1TaG1lbVNpemUoKSBhbmQgU3Vic3lzdGVtU2htZW1Jbml0 KCkgY2FsbHMgaW4KdGhlIG5leHQgY29tbWl0cy4KLS0tCiBzcmMvYmFja2VuZC9ib290c3Ry YXAvYm9vdHN0cmFwLmMgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYyB8ICA1ICsrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAg ICB8IDE5ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j ICAgICAgICAgfCAgMyArKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmggICAgICAgICAg IHwgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggfCAyMyArKysr KysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbXMuaCAg ICB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQs IDgzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9zdG9y YWdlL3N1YnN5c3RlbWxpc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3N0 b3JhZ2Uvc3Vic3lzdGVtcy5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFw L2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4 IDg2ZmU4NjM1NGY1Li42OWU5MGZlZjRmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9v dHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3Ry YXAuYwpAQCAtMzU5LDYgKzM1OSw4IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAlTZXRQcm9jZXNzaW5nTW9kZShCb290 c3RyYXBQcm9jZXNzaW5nKTsKIAlJZ25vcmVTeXN0ZW1JbmRleGVzID0gdHJ1ZTsKIAorCVJl Z2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKCk7CisKIAlJbml0aWFsaXplTWF4QmFja2Vu ZHMoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGU4 MWVmMjQ4YmYxLi5hZTllMWE5NGIwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKQEAgLTkyOSw2ICs5MjksMTEgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkgKi8KIAlBcHBseUxhdW5jaGVyUmVnaXN0ZXIoKTsKIAorCS8qCisJ ICogUmVnaXN0ZXIgdGhlIHNoYXJlZCBtZW1vcnkgbmVlZHMgb2YgYWxsIGNvcmUgc3Vic3lz dGVtcy4KKwkgKi8KKwlSZWdpc3RlckJ1aWx0aW5TaG1lbUNhbGxiYWNrcygpOworCiAJLyoK IAkgKiBwcm9jZXNzIGFueSBsaWJyYXJpZXMgdGhhdCBzaG91bGQgYmUgcHJlbG9hZGVkIGF0 IHBvc3RtYXN0ZXIgc3RhcnQKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCA0 OTNkZGQ3ZjEyZi4uYTJlZjI5MGI1YjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAg LTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0 LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAi dXRpbHMvd2FpdF9ldmVudC5oIgpAQCAtMjUzLDYgKzI1NCwyNCBAQCBDcmVhdGVTaGFyZWRN ZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJCXNobWVtX3N0YXJ0dXBfaG9vaygpOwogfQog CisvKgorICogRWFybHkgaW5pdGlhbGl6YXRpb24gb2YgdmFyaW91cyBzdWJzeXN0ZW1zLCBn aXZpbmcgdGhlbSBhIGNoYW5jZSB0bworICogcmVnaXN0ZXIgdGhlaXIgc2hhcmVkIG1lbW9y eSBuZWVkcyBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBpcworICogYWxsb2Nh dGVkLgorICovCit2b2lkCitSZWdpc3RlckJ1aWx0aW5TaG1lbUNhbGxiYWNrcyh2b2lkKQor eworCWNvbnN0IFNobWVtQ2FsbGJhY2tzICpidWlsdGluX3N1YnN5c3RlbXNbXSA9IHsKKyNk ZWZpbmUgUEdfU0hNRU1fU1VCU1lTVEVNKHN1YnN5c3RlbV9jYWxsYmFja3MpICZzdWJzeXN0 ZW1fY2FsbGJhY2tzLAorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIgorI3Vu ZGVmIFBHX1NITUVNX1NVQlNZU1RFTQorCX07CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGxl bmd0aG9mKGJ1aWx0aW5fc3Vic3lzdGVtcyk7IGkrKykKKwkJUmVnaXN0ZXJTaG1lbUNhbGxi YWNrcyhidWlsdGluX3N1YnN5c3RlbXNbaV0pOworfQorCiAvKgogICogSW5pdGlhbGl6ZSB2 YXJpb3VzIHN1YnN5c3RlbXMsIHNldHRpbmcgdXAgdGhlaXIgZGF0YSBzdHJ1Y3R1cmVzIGlu CiAgKiBzaGFyZWQgbWVtb3J5LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDI3OGQyZjIwMzc2 Li44MzIwZTQ3OGQwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDE0Niw2ICs0MTQ2LDkg QEAgUG9zdGdyZXNTaW5nbGVVc2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLAogCS8q IHJlYWQgY29udHJvbCBmaWxlIChlcnJvciBjaGVja2luZyBhbmQgY29udGFpbnMgY29uZmln ICkgKi8KIAlMb2NhbFByb2Nlc3NDb250cm9sRmlsZShmYWxzZSk7CiAKKwkvKiBSZWdpc3Rl ciB0aGUgc2hhcmVkIG1lbW9yeSBuZWVkcyBvZiBhbGwgY29yZSBzdWJzeXN0ZW1zLiAqLwor CVJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKCk7CisKIAkvKgogCSAqIHByb2Nlc3Mg YW55IGxpYnJhcmllcyB0aGF0IHNob3VsZCBiZSBwcmVsb2FkZWQgYXQgcG9zdG1hc3RlciBz dGFydAogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgKaW5kZXggZGEzMjc4N2FiNTEuLmIyMDViMDBlN2Ex IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvaXBjLmgKQEAgLTc3LDYgKzc3LDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tf b25fc2htZW1fZXhpdF9saXN0c19hcmVfZW1wdHkodm9pZCk7CiAvKiBpcGNpLmMgKi8KIGV4 dGVybiBQR0RMTElNUE9SVCBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBzaG1lbV9zdGFydHVw X2hvb2s7CiAKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKHZv aWQpOwogZXh0ZXJuIFNpemUgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZv aWQgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKTsKICNpZmRlZiBFWEVD X0JBQ0tFTkQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlz dC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkNDNjOTBiY2MzCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKQEAgLTAsMCArMSwy MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHN1YnN5c3RlbWxpc3QuaAorICoK KyAqIExpc3Qgb2YgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2tzIG9mIGJ1aWx0LWluIHN1YnN5 c3RlbXMuIFRoaXMgaXMga2VwdCBpbgorICogaXRzIG93biBzb3VyY2UgZmlsZSBmb3IgcG9z c2libGUgdXNlIGJ5IGF1dG9tYXRpYyB0b29scy4KKyAqIFBHX1NITUVNX1NVQlNZU1RFTSBp cyBkZWZpbmVkIGluIHRoZSBjYWxsZXJzIGRlcGVuZGluZyBvbiBob3cgdGhlIGxpc3QgaXMK KyAqIHVzZWQuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKy8qIHRoZXJlIGlzIGRlbGliZXJhdGVseSBub3QgYW4g I2lmbmRlZiBTVUJTWVNURU1MSVNUX0ggaGVyZSAqLworCisvKgorICogTm90ZTogdGhlcmUg YXJlIHNvbWUgaW50ZXItZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlc2UsIHNvIHRoZSBvcmRl ciBvZiBzb21lCisgKiBvZiB0aGVzZSBtYXR0ZXIuCisgKi8KKworLyogVE9ETzogZW1wdHkg Zm9yIG5vdyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1z LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbXMuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzhiNzM1YmVjNjcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbXMuaApAQCAtMCwwICsxLDMwIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzdWJzeXN0ZW1zLmgKKyAqCSAgUHJvdmlk ZSBleHRlcm4gZGVjbGFyYXRpb25zIGZvciBhbGwgdGhlIGJ1aWx0LWluIHN1YnN5c3RlbSBj YWxsYmFja3MKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtcy5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgU1VCU1lTVEVNU19ICisjZGVmaW5lIFNV QlNZU1RFTVNfSAorCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorCisvKgorICogRXh0 ZXJuIGRlY2xhcmF0aW9ucyBvZiBhbGwgdGhlIGJ1aWx0LWluIHN1YnN5c3RlbSBjYWxsYmFj a3MKKyAqCisgKiBUaGUgYWN0dWFsIGxpc3QgaXMgaW4gc3Vic3lzdGVtbGlzdC5oLCBzbyB0 aGF0IHRoZSBzYW1lIGxpc3QgY2FuIGJlIHVzZWQKKyAqIGZvciBvdGhlciBwdXJwb3Nlcy4K KyAqLworI2RlZmluZSBQR19TSE1FTV9TVUJTWVNURU0oY2FsbGJhY2tzKSBcCisJZXh0ZXJu IGNvbnN0IFNobWVtQ2FsbGJhY2tzIGNhbGxiYWNrczsKKyNpbmNsdWRlICJzdG9yYWdlL3N1 YnN5c3RlbWxpc3QuaCIKKyN1bmRlZiBQR19TSE1FTV9TVUJTWVNURU0KKworI2VuZGlmCQkJ CQkJCS8qIFNVQlNZU1RFTVNfSCAqLwotLSAKMi40Ny4zCgo= --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0010-Convert-injection-points-to-use-the-new-interface.patch" Content-Disposition: attachment; filename*0="v8-0010-Convert-injection-points-to-use-the-new-interface.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5NGNkZGU4YTQyMTFmMjZiYmM1YmUyNjM5ZjQ5ZDk4NjU1MWFhMTg5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDU6MjYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDEwLzE2XSBDb252ZXJ0IGluamVjdGlvbiBwb2ludHMgdG8g dXNlIHRoZSBuZXcgaW50ZXJmYWNlCgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYyAgICAgICAgICAgfCAgMyAtLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rp b25fcG9pbnQuYyB8IDYwICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS91dGls cy9pbmplY3Rpb25fcG9pbnQuaCAgICAgIHwgIDMgLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzAg aW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IGEyZWYyOTBiNWIzLi45ZDFiODdlODYzZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCi0jaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRp bHMvd2FpdF9ldmVudC5oIgogCiAvKiBHVUNzICovCkBAIC0xMzksNyArMTM4LDYgQEAgQ2Fs Y3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2ht ZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdEV2ZW50Q3VzdG9tU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBJbmplY3Rpb25Qb2ludFNobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgU2xvdFN5bmNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEFpb1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg V2FpdExTTlNobWVtU2l6ZSgpKTsKQEAgLTM1NSw3ICszNTMsNiBAQCBDcmVhdGVPckF0dGFj aFNobWVtU3RydWN0cyh2b2lkKQogCUFzeW5jU2htZW1Jbml0KCk7CiAJU3RhdHNTaG1lbUlu aXQoKTsKIAlXYWl0RXZlbnRDdXN0b21TaG1lbUluaXQoKTsKLQlJbmplY3Rpb25Qb2ludFNo bWVtSW5pdCgpOwogCUFpb1NobWVtSW5pdCgpOwogCVdhaXRMU05TaG1lbUluaXQoKTsKIAlM b2dpY2FsRGVjb2RpbmdDdGxTaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvaW5qZWN0aW9uX3BvaW50LmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2luamVjdGlvbl9wb2ludC5jCmluZGV4IGMwNmIwZTliODAwLi42MmU1Y2ZjZjRmOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9pbmplY3Rpb25fcG9pbnQuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2luamVjdGlvbl9wb2ludC5jCkBAIC0xNyw2ICsx Nyw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAic3RvcmFn ZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAK ICNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwpAQCAtMTA5LDYgKzExMCwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBJbmplY3Rpb25Qb2ludENhY2hlRW50cnkKIAogc3RhdGljIEhUQUIgKklu amVjdGlvblBvaW50Q2FjaGUgPSBOVUxMOwogCisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lO VFMKK3N0YXRpYyB2b2lkIEluamVjdGlvblBvaW50U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBJbmplY3Rpb25Qb2ludFNobWVtSW5pdCh2b2lkICphcmcpOworI2Vu ZGlmCisKIC8qCiAgKiBpbmplY3Rpb25fcG9pbnRfY2FjaGVfYWRkCiAgKgpAQCAtMjI2LDQ2 ICsyMzIsMzggQEAgaW5qZWN0aW9uX3BvaW50X2NhY2hlX2dldChjb25zdCBjaGFyICpuYW1l KQogfQogI2VuZGlmCQkJCQkJCS8qIFVTRV9JTkpFQ1RJT05fUE9JTlRTICovCiAKLS8qCi0g KiBSZXR1cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlLgotICov Ci1TaXplCi1JbmplY3Rpb25Qb2ludFNobWVtU2l6ZSh2b2lkKQoteworY29uc3QgU2htZW1D YWxsYmFja3MgSW5qZWN0aW9uUG9pbnRTaG1lbUNhbGxiYWNrcyA9IHsKICNpZmRlZiBVU0Vf SU5KRUNUSU9OX1BPSU5UUwotCVNpemUJCXN6ID0gMDsKLQotCXN6ID0gYWRkX3NpemUoc3os IHNpemVvZihJbmplY3Rpb25Qb2ludHNDdGwpKTsKLQlyZXR1cm4gc3o7Ci0jZWxzZQotCXJl dHVybiAwOworCS5yZXF1ZXN0X2ZuID0gSW5qZWN0aW9uUG9pbnRTaG1lbVJlcXVlc3QsCisJ LmluaXRfZm4gPSBJbmplY3Rpb25Qb2ludFNobWVtSW5pdCwKICNlbmRpZgotfQorfTsKIAog LyoKLSAqIEFsbG9jYXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoLgor ICogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUKICAq Lwotdm9pZAotSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQodm9pZCkKLXsKICNpZmRlZiBVU0Vf SU5KRUNUSU9OX1BPSU5UUwotCWJvb2wJCWZvdW5kOworc3RhdGljIHZvaWQKK0luamVjdGlv blBvaW50U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEluamVjdGlvblBvaW50U2htZW1EZXNjOwogCi0JQWN0aXZlSW5qZWN0aW9uUG9pbnRz ID0gU2htZW1Jbml0U3RydWN0KCJJbmplY3Rpb25Qb2ludCBoYXNoIiwKLQkJCQkJCQkJCQkJ c2l6ZW9mKEluamVjdGlvblBvaW50c0N0bCksCi0JCQkJCQkJCQkJCSZmb3VuZCk7Ci0JaWYg KCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQlwZ19hdG9t aWNfaW5pdF91MzIoJkFjdGl2ZUluamVjdGlvblBvaW50cy0+bWF4X2ludXNlLCAwKTsKLQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU5KRUNUSU9OX1BPSU5UUzsgaSsrKQotCQkJcGdf YXRvbWljX2luaXRfdTY0KCZBY3RpdmVJbmplY3Rpb25Qb2ludHMtPmVudHJpZXNbaV0uZ2Vu ZXJhdGlvbiwgMCk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLSNlbmRpZgorCVNo bWVtUmVxdWVzdFN0cnVjdCgmSW5qZWN0aW9uUG9pbnRTaG1lbURlc2MsICYoU2htZW1SZXF1 ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJJbmplY3Rpb25Qb2ludCBoYXNoIiwKKwkJ LnNpemUgPSBzaXplb2YoSW5qZWN0aW9uUG9pbnRzQ3RsKSwKKwkJLnB0ciA9ICh2b2lkICoq KSAmQWN0aXZlSW5qZWN0aW9uUG9pbnRzLAorCQl9KTsKIH0KIAorc3RhdGljIHZvaWQKK0lu amVjdGlvblBvaW50U2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlwZ19hdG9taWNfaW5pdF91 MzIoJkFjdGl2ZUluamVjdGlvblBvaW50cy0+bWF4X2ludXNlLCAwKTsKKwlmb3IgKGludCBp ID0gMDsgaSA8IE1BWF9JTkpFQ1RJT05fUE9JTlRTOyBpKyspCisJCXBnX2F0b21pY19pbml0 X3U2NCgmQWN0aXZlSW5qZWN0aW9uUG9pbnRzLT5lbnRyaWVzW2ldLmdlbmVyYXRpb24sIDAp OworfQorI2VuZGlmCisKIC8qCiAgKiBBdHRhY2ggYSBuZXcgaW5qZWN0aW9uIHBvaW50Lgog ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCmluZGV4IGVkNDNjOTBiY2Mz Li42NWRhNmYxN2M1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0 ZW1saXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKQEAg LTIwLDQgKzIwLDQgQEAKICAqIG9mIHRoZXNlIG1hdHRlci4KICAqLwogCi0vKiBUT0RPOiBl bXB0eSBmb3Igbm93ICovCitQR19TSE1FTV9TVUJTWVNURU0oSW5qZWN0aW9uUG9pbnRTaG1l bUNhbGxiYWNrcykKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2luamVjdGlvbl9w b2ludC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5qZWN0aW9uX3BvaW50LmgKaW5kZXggMjdh MjUyNjUyNGYuLmZhYmQxNDU1YzNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9p bmplY3Rpb25fcG9pbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9pbmplY3Rpb25fcG9p bnQuaApAQCAtNDYsOSArNDYsNiBAQCB0eXBlZGVmIHZvaWQgKCpJbmplY3Rpb25Qb2ludENh bGxiYWNrKSAoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJCQljb25zdCB2b2lkICpwcml2 YXRlX2RhdGEsCiAJCQkJCQkJCQkJdm9pZCAqYXJnKTsKIAotZXh0ZXJuIFNpemUgSW5qZWN0 aW9uUG9pbnRTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBJbmplY3Rpb25Qb2ludFNo bWVtSW5pdCh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgSW5qZWN0aW9uUG9pbnRBdHRhY2goY29u c3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJIGNvbnN0IGNoYXIgKmxpYnJhcnksCiAJCQkJCQkJ CSBjb25zdCBjaGFyICpmdW5jdGlvbiwKLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0011-Convert-test_aio-to-use-the-new-mechanism.patch" Content-Disposition: attachment; filename="v8-0011-Convert-test_aio-to-use-the-new-mechanism.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZDMwNjQwNGI4MTEyNmEzODZhN2IxNjljNjBmMDljNDk3MmViZjVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDU6NDUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDExLzE2XSBDb252ZXJ0IHRlc3RfYWlvIHRvIHVzZSB0aGUg bmV3IG1lY2hhbmlzbQoKSSB3YW50ZWQgdG8gdXNlIHRoaXMgdG8gc2hvd2Nhc2UgU0hNRU1f QUxMT1dfQUxMT0NfQUZURVJfU1RBUlRVUCwgYnV0CnVuZm9ydHVuYXRlbHkgdGhhdCBkaWRu J3Qgd29yayBiZWNhdXNlIHRoZW4gd2UnZCBjYWxsCkluamVjdGlvblBvaW50TG9hZCBmcm9t IF9QR19pbml0KCkuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5j IHwgMTA2ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ3 IGluc2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vdGVzdF9haW8uYwppbmRleCBkNjg3NDA4YWYwYy4uMmJhNWY3NzliODAgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYworKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNs dWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKLSNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKQEAgLTM1 LDYgKzM0LDcgQEAKIFBHX01PRFVMRV9NQUdJQzsKIAogCisvKiBJbiBzaGFyZWQgbWVtb3J5 ICovCiB0eXBlZGVmIHN0cnVjdCBJbmpJb0Vycm9yU3RhdGUKIHsKIAlib29sCQllbmFibGVk X3Nob3J0X3JlYWQ7CkBAIC00Niw3NSArNDYsNjYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5qSW9F cnJvclN0YXRlCiAKIHN0YXRpYyBJbmpJb0Vycm9yU3RhdGUgKmlual9pb19lcnJvcl9zdGF0 ZTsKIAotLyogU2hhcmVkIG1lbW9yeSBpbml0IGNhbGxiYWNrcyAqLwotc3RhdGljIHNobWVt X3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKLXN0 YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9 IE5VTEw7Ci0KLXN0YXRpYyBQZ0Fpb0hhbmRsZSAqbGFzdF9oYW5kbGU7CitzdGF0aWMgdm9p ZCBpbmpfaW9fc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5qX2lv X3NobWVtX2luaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGlual9pb19zaG1lbV9hdHRh Y2godm9pZCAqYXJnKTsKIAorc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIGlual9pb19z aG1lbV9jYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBpbmpfaW9fc2htZW1fcmVxdWVz dCwKKwkuaW5pdF9mbiA9IGlual9pb19zaG1lbV9pbml0LAorCS5hdHRhY2hfZm4gPSBpbmpf aW9fc2htZW1fYXR0YWNoLAorfTsKIAorc3RhdGljIFBnQWlvSGFuZGxlICpsYXN0X2hhbmRs ZTsKIAogc3RhdGljIHZvaWQKLXRlc3RfYWlvX3NobWVtX3JlcXVlc3Qodm9pZCkKK2lual9p b19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlpZiAocHJldl9zaG1lbV9yZXF1ZXN0 X2hvb2spCi0JCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7CisJc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBpbmpfaW9fc2htZW1fZGVzYzsKIAotCVJlcXVlc3RBZGRpblNobWVtU3BhY2Uo c2l6ZW9mKEluaklvRXJyb3JTdGF0ZSkpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmaW5qX2lv X3NobWVtX2Rlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJ0 ZXN0X2FpbyIsCisJCS5zaXplID0gc2l6ZW9mKEluaklvRXJyb3JTdGF0ZSksCisJCS5wdHIg PSAodm9pZCAqKikgJmlual9pb19lcnJvcl9zdGF0ZSwKKwkJfSk7CiB9CiAKIHN0YXRpYyB2 b2lkCi10ZXN0X2Fpb19zaG1lbV9zdGFydHVwKHZvaWQpCitpbmpfaW9fc2htZW1faW5pdCh2 b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlpZiAocHJldl9zaG1lbV9zdGFydHVw X2hvb2spCi0JCXByZXZfc2htZW1fc3RhcnR1cF9ob29rKCk7Ci0KLQkvKiBDcmVhdGUgb3Ig YXR0YWNoIHRvIHRoZSBzaGFyZWQgbWVtb3J5IHN0YXRlICovCi0JTFdMb2NrQWNxdWlyZShB ZGRpblNobWVtSW5pdExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlpbmpfaW9fZXJyb3Jfc3Rh dGUgPSBTaG1lbUluaXRTdHJ1Y3QoImluamVjdGlvbl9wb2ludHMiLAotCQkJCQkJCQkJCSBz aXplb2YoSW5qSW9FcnJvclN0YXRlKSwKLQkJCQkJCQkJCQkgJmZvdW5kKTsKLQotCWlmICgh Zm91bmQpCi0JewotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgKi8KLQkJ aW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Nob3J0X3JlYWQgPSBmYWxzZTsKLQkJaW5q X2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Jlb3BlbiA9IGZhbHNlOworCS8qIEZpcnN0IHRp bWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSAqLworCWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxl ZF9zaG9ydF9yZWFkID0gZmFsc2U7CisJaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Jl b3BlbiA9IGZhbHNlOwogCiAjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKLQkJSW5qZWN0 aW9uUG9pbnRBdHRhY2goImFpby1wcm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIs Ci0JCQkJCQkJICJ0ZXN0X2FpbyIsCi0JCQkJCQkJICJpbmpfaW9fc2hvcnRfcmVhZCIsCi0J CQkJCQkJIE5VTEwsCi0JCQkJCQkJIDApOwotCQlJbmplY3Rpb25Qb2ludExvYWQoImFpby1w cm9jZXNzLWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIpOwotCi0JCUluamVjdGlvblBvaW50 QXR0YWNoKCJhaW8td29ya2VyLWFmdGVyLXJlb3BlbiIsCi0JCQkJCQkJICJ0ZXN0X2FpbyIs Ci0JCQkJCQkJICJpbmpfaW9fcmVvcGVuIiwKLQkJCQkJCQkgTlVMTCwKLQkJCQkJCQkgMCk7 Ci0JCUluamVjdGlvblBvaW50TG9hZCgiYWlvLXdvcmtlci1hZnRlci1yZW9wZW4iKTsKLQor CUluamVjdGlvblBvaW50QXR0YWNoKCJhaW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9yZS1z aGFyZWQiLAorCQkJCQkJICJ0ZXN0X2FpbyIsCisJCQkJCQkgImlual9pb19zaG9ydF9yZWFk IiwKKwkJCQkJCSBOVUxMLAorCQkJCQkJIDApOworCUluamVjdGlvblBvaW50TG9hZCgiYWlv LXByb2Nlc3MtY29tcGxldGlvbi1iZWZvcmUtc2hhcmVkIik7CisKKwlJbmplY3Rpb25Qb2lu dEF0dGFjaCgiYWlvLXdvcmtlci1hZnRlci1yZW9wZW4iLAorCQkJCQkJICJ0ZXN0X2FpbyIs CisJCQkJCQkgImlual9pb19yZW9wZW4iLAorCQkJCQkJIE5VTEwsCisJCQkJCQkgMCk7CisJ SW5qZWN0aW9uUG9pbnRMb2FkKCJhaW8td29ya2VyLWFmdGVyLXJlb3BlbiIpOwogI2VuZGlm Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFByZS1sb2FkIHRoZSBpbmplY3Rpb24gcG9p bnRzIG5vdywgc28gd2UgY2FuIGNhbGwgdGhlbSBpbiBhCi0JCSAqIGNyaXRpY2FsIHNlY3Rp b24uCi0JCSAqLworfQorCitzdGF0aWMgdm9pZAoraW5qX2lvX3NobWVtX2F0dGFjaCh2b2lk ICphcmcpCit7CisJLyoKKwkgKiBQcmUtbG9hZCB0aGUgaW5qZWN0aW9uIHBvaW50cyBub3cs IHNvIHdlIGNhbiBjYWxsIHRoZW0gaW4gYSBjcml0aWNhbAorCSAqIHNlY3Rpb24uCisJICov CiAjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKLQkJSW5qZWN0aW9uUG9pbnRMb2FkKCJh aW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9yZS1zaGFyZWQiKTsKLQkJSW5qZWN0aW9uUG9p bnRMb2FkKCJhaW8td29ya2VyLWFmdGVyLXJlb3BlbiIpOwotCQllbG9nKExPRywgImluamVj dGlvbiBwb2ludCBsb2FkZWQiKTsKKwlJbmplY3Rpb25Qb2ludExvYWQoImFpby1wcm9jZXNz LWNvbXBsZXRpb24tYmVmb3JlLXNoYXJlZCIpOworCUluamVjdGlvblBvaW50TG9hZCgiYWlv LXdvcmtlci1hZnRlci1yZW9wZW4iKTsKKwllbG9nKExPRywgImluamVjdGlvbiBwb2ludCBs b2FkZWQiKTsKICNlbmRpZgotCX0KLQotCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRM b2NrKTsKIH0KIAogdm9pZApAQCAtMTIzLDEwICsxMTQsNyBAQCBfUEdfaW5pdCh2b2lkKQog CWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCiAJ CXJldHVybjsKIAotCXByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9o b29rOwotCXNobWVtX3JlcXVlc3RfaG9vayA9IHRlc3RfYWlvX3NobWVtX3JlcXVlc3Q7Ci0J cHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7Ci0Jc2htZW1f c3RhcnR1cF9ob29rID0gdGVzdF9haW9fc2htZW1fc3RhcnR1cDsKKwlSZWdpc3RlclNobWVt Q2FsbGJhY2tzKCZpbmpfaW9fc2htZW1fY2FsbGJhY2tzKTsKIH0KIAogCi0tIAoyLjQ3LjMK Cg== --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0012-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="v8-0012-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSA2MDYwYzQ3M2ZhYzdmYWZlNTkyY2E4NjgzYTU3NDY4ZGMwYWVmN2JlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTk6MDY6MDQgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDEyLzE2XSBVc2UgdGhlIG5ldyBtZWNoYW5pc20gaW4gYSBm ZXcgY29yZSBzdWJzeXN0ZW1zCgpJIGNob3NlIHRoZXNlIHN1YnN5c3RlbXMgc3BlY2lmaWNh bGx5IGJlY2F1c2UgdGhleSBoYXZlIHNvbWUKY29tcGxpY2F0aW5nIHByb3BlcnRpZXMsIG1h a2luZyB0aGVtIHNsaWdodGx5IGhhcmRlciB0byBjb252ZXJ0IHRoYW4KbW9zdDoKCi0gVGhl IGluaXRpYWxpemF0aW9uIGNhbGxiYWNrcyBvZiBzb21lIG9mIHRoZXNlIHN1YnN5c3RlbXMg aGF2ZQogIGRlcGVuZGVuY2llcywgaS5lLiB0aGV5IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQg aW4gdGhlIHJpZ2h0IG9yZGVyLgoKLSBUaGUgUHJvZ0dsb2JhbCBwb2ludGVyIHN0aWxsIG5l ZWRzIHRvIGJlIGluaGVyaXRlZCBieSB0aGUKICBCYWNrZW5kUGFyYW1ldGVycyBtZWNoYW5p c20gb24gRVhFQ19CQUNLRU5EIGJ1aWxkcywgYmVjYXVzZQogIFByb2NHbG9iYWwgaXMgcmVx dWlyZWQgYnkgSW5pdFByb2Nlc3MoKSB0byBnZXQgYSBQR1BST0MgZW50cnksIGFuZAogIHRo ZSBQR1BST0MgZW50cnkgaXMgcmVxdWlyZWQgdG8gdXNlIExXTG9ja3MsIGFuZCB1c3VhbGx5 IGF0dGFjaGluZwogIHRvIHNoYXJlZCBtZW1vcnkgYXJlYXMgcmVxdWlyZXMgdGhlIHVzZSBv ZiBMV0xvY2tzLgoKLSBTaW1pbGFybHksIFByb2NTaWduYWwgcG9pbnRlciBzdGlsbCBuZWVk cyB0byBiZSBoYW5kbGVkIGJ5CiAgQmFja2VuZFBhcmFtZXRlcnMsIGJlY2F1c2UgcXVlcnkg Y2FuY2VsbGF0aW9uIGNvbm5lY3Rpb25zIGFjY2VzcyBpdAogIHdpdGhvdXQgY2FsbGluZyBJ bml0UHJvY2VzcwoKSSdtIGJlbGlldmUgY29udmVydGluZyBhbGwgdGhlIHJlc3Qgb2YgdGhl IHN1YnN5c3RlbXMgYWZ0ZXIgdGhpcyB3aWxsCmJlIHByZXR0eSBtZWNoYW5pYy4KClJldmll d2VkLWJ5OiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29uYS5jb20+ CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FF eEhXNXZNMWJuZUxZZmcwd0dlQWE9NTJVaUozejR2S2QzQUo3Mlg4Rnc2azNLS3JnQG1haWwu Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgICAg IHwgIDM2ICsrLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMg fCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMgICAgICAgICAgIHwgIDY1 ICsrKysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMgIHwg IDM5ICsrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgIHwg IDMwIC0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgICAgICB8ICA1 NyArKysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgIHwg MTE5ICsrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWdu YWwuYyAgICB8ICA2NiArKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZh bGFkdC5jICAgICB8ICA0MCArKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMgICAgICAgICB8IDE3NiArKysrKysrKysrKystLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyB8ICA5NiArKysrKysrLS0tLS0tCiBzcmMv aW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9kc20uaCAgICAgICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvZHNtX3JlZ2lzdHJ5LmggICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9zdG9yYWdl L3Btc2lnbmFsLmggICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j LmggICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5 LmggICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAg ICAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaCAgICAgICAg IHwgICAyIC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgICB8ICAx OSArKysKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICB8ICAgMiAt CiAyMSBmaWxlcyBjaGFuZ2VkLCAzNzcgaW5zZXJ0aW9ucygrKSwgMzg3IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMKaW5kZXggMTQ0MWEwNTE3NzMu LjFlYjcyZDQ0MTU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92 YXJzdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwpAQCAt MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCkBAIC0zMCwzNSArMzEs MjggQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHByZWZldGNoIChwcmVhbGxvY2F0ZSkgcGVy IFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09JRF9QUkVGRVRDSAkJODE5MgogCitzdGF0 aWMgdm9pZCBWYXJzdXBTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKKwogLyogcG9pbnRlciB0 byB2YXJpYWJsZXMgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkgKi8KIFRyYW5zYW1WYXJpYWJs ZXNEYXRhICpUcmFuc2FtVmFyaWFibGVzID0gTlVMTDsKIAorY29uc3QgU2htZW1DYWxsYmFj a3MgVmFyc3VwU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBWYXJzdXBTaG1l bVJlcXVlc3QsCit9OwogCiAvKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9y eSBmb3IgVHJhbnNhbVZhcmlhYmxlcy4KKyAqIFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSBmb3Ig VHJhbnNhbVZhcmlhYmxlcy4KICAqLwotU2l6ZQotVmFyc3VwU2htZW1TaXplKHZvaWQpCi17 Ci0JcmV0dXJuIHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSk7Ci19Ci0KLXZvaWQKLVZh cnN1cFNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1ZhcnN1cFNobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBU cmFuc2FtVmFyaWFibGVzU2htZW1EZXNjOwogCi0JLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVk IHN0YXRlIHN0cnVjdCAqLwotCVRyYW5zYW1WYXJpYWJsZXMgPSBTaG1lbUluaXRTdHJ1Y3Qo IlRyYW5zYW1WYXJpYWJsZXMiLAotCQkJCQkJCQkJICAgc2l6ZW9mKFRyYW5zYW1WYXJpYWJs ZXNEYXRhKSwKLQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3Rl cikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQltZW1zZXQoVHJhbnNhbVZhcmlhYmxlcywg MCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0 KGZvdW5kKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlRyYW5zYW1WYXJpYWJsZXNTaG1lbURl c2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJUcmFuc2FtVmFy aWFibGVzIiwKKwkJLnNpemUgPSBzaXplb2YoVHJhbnNhbVZhcmlhYmxlc0RhdGEpLAorCQku cHRyID0gKHZvaWQgKiopICZUcmFuc2FtVmFyaWFibGVzLAorCX0pOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCmluZGV4IDc1NDIzMTA0YmU4 Li43YjgxMjAwZDNjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVu Y2hfYmFja2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tl bmQuYwpAQCAtNjYzLDYgKzY2Myw4IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJICovCiAJTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUoZmFsc2UpOwog CisJUmVnaXN0ZXJCdWlsdGluU2htZW1DYWxsYmFja3MoKTsKKwogCS8qCiAJICogUmVsb2Fk IGFueSBsaWJyYXJpZXMgdGhhdCB3ZXJlIHByZWxvYWRlZCBieSB0aGUgcG9zdG1hc3Rlci4g IFNpbmNlIHdlCiAJICogZXhlYydkIHRoaXMgcHJvY2VzcywgdGhvc2UgbGlicmFyaWVzIGRp ZG4ndCBjb21lIGFsb25nIHdpdGggdXM7IGJ1dCB3ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvZHNtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYwpp bmRleCA2YTViMTYzOTJmNy4uOWZhZGI0ZTZjZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2RzbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5j CkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKICNpbmNs dWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2ZyZWVw YWdlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9y ZXNvd25lci5oIgpAQCAtMTEwLDYgKzExMSwxNCBAQCBzdGF0aWMgYm9vbCBkc21faW5pdF9k b25lID0gZmFsc2U7CiAvKiBQcmVhbGxvY2F0ZWQgRFNNIHNwYWNlIGluIHRoZSBtYWluIHNo YXJlZCBtZW1vcnkgcmVnaW9uLiAqLwogc3RhdGljIHZvaWQgKmRzbV9tYWluX3NwYWNlX2Jl Z2luID0gTlVMTDsKIAorc3RhdGljIHZvaWQgZHNtX21haW5fc3BhY2VfcmVxdWVzdCh2b2lk ICphcmcpOworc3RhdGljIHZvaWQgZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICphcmcpOwor Citjb25zdCBTaG1lbUNhbGxiYWNrcyBkc21fc2htZW1fY2FsbGJhY2tzID0geworCS5yZXF1 ZXN0X2ZuID0gZHNtX21haW5fc3BhY2VfcmVxdWVzdCwKKwkuaW5pdF9mbiA9IGRzbV9tYWlu X3NwYWNlX2luaXQsCit9OworCiAvKgogICogTGlzdCBvZiBkeW5hbWljIHNoYXJlZCBtZW1v cnkgc2VnbWVudHMgdXNlZCBieSB0aGlzIGJhY2tlbmQuCiAgKgpAQCAtNDYzLDQzICs0NzIs NDUgQEAgZHNtX3NldF9jb250cm9sX2hhbmRsZShkc21faGFuZGxlIGgpCiB9CiAjZW5kaWYK IAorc3RhdGljIFNobWVtU3RydWN0RGVzYyBkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjOwor CiAvKgotICogUmVzZXJ2ZSBzb21lIHNwYWNlIGluIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkg c2VnbWVudCBmb3IgRFNNIHNlZ21lbnRzLgorICogUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgbWFp biBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIERTTSBzZWdtZW50cy4KICAqLwotc2l6ZV90 Ci1kc21fZXN0aW1hdGVfc2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK2RzbV9tYWluX3NwYWNl X3JlcXVlc3Qodm9pZCAqYXJnKQogewotCXJldHVybiAxMDI0ICogMTAyNCAqIChzaXplX3Qp IG1pbl9keW5hbWljX3NoYXJlZF9tZW1vcnk7CisJc2l6ZV90CQlzaXplID0gMTAyNCAqIDEw MjQgKiAoc2l6ZV90KSBtaW5fZHluYW1pY19zaGFyZWRfbWVtb3J5OworCisJaWYgKHNpemUg PT0gMCkKKwkJcmV0dXJuOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZkc21fbWFpbl9zcGFj ZV9zaG1lbV9kZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAi UHJlYWxsb2NhdGVkIERTTSIsCisJCS5zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICZkc21fbWFp bl9zcGFjZV9iZWdpbiwKKwl9KTsKIH0KIAotLyoKLSAqIEluaXRpYWxpemUgc3BhY2UgaW4g dGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBEU00gc2VnbWVudHMuCi0gKi8K LXZvaWQKLWRzbV9zaG1lbV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZAorZHNtX21haW5fc3Bh Y2VfaW5pdCh2b2lkICphcmcpCiB7Ci0Jc2l6ZV90CQlzaXplID0gZHNtX2VzdGltYXRlX3Np emUoKTsKLQlib29sCQlmb3VuZDsKKwlzaXplX3QJCXNpemUgPSBkc21fbWFpbl9zcGFjZV9z aG1lbV9kZXNjLnNpemU7CisJRnJlZVBhZ2VNYW5hZ2VyICpmcG0gPSAoRnJlZVBhZ2VNYW5h Z2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOworCXNpemVfdAkJZmlyc3RfcGFnZSA9IDA7 CisJc2l6ZV90CQlwYWdlczsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVybjsKIAotCWRz bV9tYWluX3NwYWNlX2JlZ2luID0gU2htZW1Jbml0U3RydWN0KCJQcmVhbGxvY2F0ZWQgRFNN Iiwgc2l6ZSwgJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCXsKLQkJRnJlZVBhZ2VNYW5hZ2Vy ICpmcG0gPSAoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOwotCQlz aXplX3QJCWZpcnN0X3BhZ2UgPSAwOwotCQlzaXplX3QJCXBhZ2VzOwotCi0JCS8qIFJlc2Vy dmUgc3BhY2UgZm9yIHRoZSBGcmVlUGFnZU1hbmFnZXIuICovCi0JCXdoaWxlIChmaXJzdF9w YWdlICogRlBNX1BBR0VfU0laRSA8IHNpemVvZihGcmVlUGFnZU1hbmFnZXIpKQotCQkJKytm aXJzdF9wYWdlOwotCi0JCS8qIEluaXRpYWxpemUgaXQgYW5kIGdpdmUgaXQgYWxsIHRoZSBy ZXN0IG9mIHRoZSBzcGFjZS4gKi8KLQkJRnJlZVBhZ2VNYW5hZ2VySW5pdGlhbGl6ZShmcG0s IGRzbV9tYWluX3NwYWNlX2JlZ2luKTsKLQkJcGFnZXMgPSAoc2l6ZSAvIEZQTV9QQUdFX1NJ WkUpIC0gZmlyc3RfcGFnZTsKLQkJRnJlZVBhZ2VNYW5hZ2VyUHV0KGZwbSwgZmlyc3RfcGFn ZSwgcGFnZXMpOwotCX0KKwkvKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgRnJlZVBhZ2VNYW5h Z2VyLiAqLworCXdoaWxlIChmaXJzdF9wYWdlICogRlBNX1BBR0VfU0laRSA8IHNpemVvZihG cmVlUGFnZU1hbmFnZXIpKQorCQkrK2ZpcnN0X3BhZ2U7CisKKwkvKiBJbml0aWFsaXplIGl0 IGFuZCBnaXZlIGl0IGFsbCB0aGUgcmVzdCBvZiB0aGUgc3BhY2UuICovCisJRnJlZVBhZ2VN YW5hZ2VySW5pdGlhbGl6ZShmcG0sIGRzbV9tYWluX3NwYWNlX2JlZ2luKTsKKwlwYWdlcyA9 IChzaXplIC8gRlBNX1BBR0VfU0laRSkgLSBmaXJzdF9wYWdlOworCUZyZWVQYWdlTWFuYWdl clB1dChmcG0sIGZpcnN0X3BhZ2UsIHBhZ2VzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKaW5kZXggOWJmY2Q2MTY4MjcuLjkyMzg1YTA4NzI3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYwpAQCAtNDUsNiAr NDUsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3R1cGxlc3Rv cmUuaCIKQEAgLTU3LDYgKzU4LDE0IEBAIHR5cGVkZWYgc3RydWN0IERTTVJlZ2lzdHJ5Q3R4 U3RydWN0CiAKIHN0YXRpYyBEU01SZWdpc3RyeUN0eFN0cnVjdCAqRFNNUmVnaXN0cnlDdHg7 CiAKK3N0YXRpYyB2b2lkIERTTVJlZ2lzdHJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7Citz dGF0aWMgdm9pZCBEU01SZWdpc3RyeVNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBT aG1lbUNhbGxiYWNrcyBEU01SZWdpc3RyeVNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0 X2ZuID0gRFNNUmVnaXN0cnlTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBEU01SZWdpc3Ry eVNobWVtSW5pdCwKK307CisKIHR5cGVkZWYgc3RydWN0IE5hbWVkRFNNU3RhdGUKIHsKIAlk c21faGFuZGxlCWhhbmRsZTsKQEAgLTExNCwyNyArMTIzLDIzIEBAIHN0YXRpYyBjb25zdCBk c2hhc2hfcGFyYW1ldGVycyBkc2hfcGFyYW1zID0gewogc3RhdGljIGRzYV9hcmVhICpkc21f cmVnaXN0cnlfZHNhOwogc3RhdGljIGRzaGFzaF90YWJsZSAqZHNtX3JlZ2lzdHJ5X3RhYmxl OwogCi1TaXplCi1EU01SZWdpc3RyeVNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0RT TVJlZ2lzdHJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlyZXR1cm4gTUFYQUxJR04o c2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSk7CisJc3RhdGljIFNobWVtU3RydWN0RGVz YyBEU01SZWdpc3RyeUN0eFNobWVtRGVzYzsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmRFNN UmVnaXN0cnlDdHhTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQku bmFtZSA9ICJEU00gUmVnaXN0cnkgRGF0YSIsCisJCS5zaXplID0gc2l6ZW9mKERTTVJlZ2lz dHJ5Q3R4U3RydWN0KSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmRFNNUmVnaXN0cnlDdHgsCisJ fSk7CiB9CiAKLXZvaWQKLURTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9p ZAorRFNNUmVnaXN0cnlTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwot Ci0JRFNNUmVnaXN0cnlDdHggPSAoRFNNUmVnaXN0cnlDdHhTdHJ1Y3QgKikKLQkJU2htZW1J bml0U3RydWN0KCJEU00gUmVnaXN0cnkgRGF0YSIsCi0JCQkJCQlEU01SZWdpc3RyeVNobWVt U2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQlEU01SZWdp c3RyeUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsKLQkJRFNNUmVnaXN0cnlDdHgt PmRzaGggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7Ci0JfQorCURTTVJlZ2lzdHJ5Q3R4LT5k c2FoID0gRFNBX0hBTkRMRV9JTlZBTElEOworCURTTVJlZ2lzdHJ5Q3R4LT5kc2hoID0gRFNI QVNIX0hBTkRMRV9JTlZBTElEOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmlu ZGV4IDlkMWI4N2U4NjNlLi4wYTRlOWVlNjUwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNs dWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIK LSNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFz ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFj Y2Vzcy94bG9ncmVjb3ZlcnkuaCIKQEAgLTQxLDE4ICs0MCwxMyBAQAogI2luY2x1ZGUgInN0 b3JhZ2UvYWlvX3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9kc20uaCIKLSNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1l bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdl L3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgotI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY2FycmF5LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCi0j aW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5 c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKLSNpbmNsdWRlICJ1dGlscy93YWl0 X2V2ZW50LmgiCiAKIC8qIEdVQ3MgKi8KIGludAkJCXNoYXJlZF9tZW1vcnlfdHlwZSA9IERF RkFVTFRfU0hBUkVEX01FTU9SWV9UWVBFOwpAQCAtMTAyLDE0ICs5NiwxMCBAQCBDYWxjdWxh dGVTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1 ZXN0ZWRTaXplKCkpOwogCiAJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgZHNtX2VzdGltYXRlX3NpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIERTTVJlZ2lzdHJ5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBC dWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2Nr TWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRl TG9ja1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJvY0dsb2JhbFNo bWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1ByZWZldGNoU2htZW1T aXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBWYXJzdXBTaG1lbVNpemUoKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsKQEAgLTExOSwxMSArMTA5LDcgQEAgQ2FsY3VsYXRl U2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tncm91bmRXb3Jr ZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE11bHRpWGFjdFNobWVt U2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcm9jQXJyYXlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIEJhY2tlbmRTdGF0dXNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFNoYXJlZEludmFsU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBQTVNpZ25hbFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg UHJvY1NpZ25hbFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ2hlY2tw b2ludGVyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBdXRvVmFjdXVt U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBSZXBsaWNhdGlvblNsb3Rz U2htZW1TaXplKCkpOwpAQCAtMTM3LDcgKzEyMyw2IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2 b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQXN5bmNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFN0YXRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBX YWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNs b3RTeW5jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBaW9TaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRMU05TaG1lbVNpemUoKSk7CkBA IC0yODgsMTMgKzI3Myw5IEBAIFJlZ2lzdGVyQnVpbHRpblNobWVtQ2FsbGJhY2tzKHZvaWQp CiBzdGF0aWMgdm9pZAogQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIHsKLQlk c21fc2htZW1faW5pdCgpOwotCURTTVJlZ2lzdHJ5U2htZW1Jbml0KCk7Ci0KIAkvKgogCSAq IFNldCB1cCB4bG9nLCBjbG9nLCBhbmQgYnVmZmVycwogCSAqLwotCVZhcnN1cFNobWVtSW5p dCgpOwogCVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0Y2hTaG1lbUluaXQoKTsKIAlY TG9nUmVjb3ZlcnlTaG1lbUluaXQoKTsKQEAgLTMxNywyMyArMjk4LDEzIEBAIENyZWF0ZU9y QXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJLyoKIAkgKiBTZXQgdXAgcHJvY2VzcyB0YWJs ZQogCSAqLwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JCUluaXRQcm9jR2xvYmFsKCk7 Ci0JUHJvY0FycmF5U2htZW1Jbml0KCk7CiAJQmFja2VuZFN0YXR1c1NobWVtSW5pdCgpOwog CVR3b1BoYXNlU2htZW1Jbml0KCk7CiAJQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCgpOwog Ci0JLyoKLQkgKiBTZXQgdXAgc2hhcmVkLWludmFsIG1lc3NhZ2luZwotCSAqLwotCVNoYXJl ZEludmFsU2htZW1Jbml0KCk7Ci0KIAkvKgogCSAqIFNldCB1cCBpbnRlcnByb2Nlc3Mgc2ln bmFsaW5nIG1lY2hhbmlzbXMKIAkgKi8KLQlQTVNpZ25hbFNobWVtSW5pdCgpOwotCVByb2NT aWduYWxTaG1lbUluaXQoKTsKIAlDaGVja3BvaW50ZXJTaG1lbUluaXQoKTsKIAlBdXRvVmFj dXVtU2htZW1Jbml0KCk7CiAJUmVwbGljYXRpb25TbG90c1NobWVtSW5pdCgpOwpAQCAtMzUy LDcgKzMyMyw2IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJU3luY1Nj YW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOwogCVN0YXRzU2htZW1Jbml0KCk7 Ci0JV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KCk7CiAJQWlvU2htZW1Jbml0KCk7CiAJV2Fp dExTTlNobWVtSW5pdCgpOwogCUxvZ2ljYWxEZWNvZGluZ0N0bFNobWVtSW5pdCgpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMKaW5kZXggNDYxODgyMGIzMzcuLmQ5MDFmOGU5 OTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMKQEAgLTI3LDYgKzI3LDcg QEAKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWdu YWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z dWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogCkBAIC04Myw2 ICs4NCwxNCBAQCBzdHJ1Y3QgUE1TaWduYWxEYXRhCiAvKiBQTVNpZ25hbFN0YXRlIHBvaW50 ZXIgaXMgdmFsaWQgaW4gYm90aCBwb3N0bWFzdGVyIGFuZCBjaGlsZCBwcm9jZXNzZXMgKi8K IE5PTl9FWEVDX1NUQVRJQyB2b2xhdGlsZSBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGUg PSBOVUxMOwogCitzdGF0aWMgdm9pZCBQTVNpZ25hbFNobWVtUmVxdWVzdCh2b2lkICopOwor c3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbUluaXQodm9pZCAqKTsKKworY29uc3QgU2htZW1D YWxsYmFja3MgUE1TaWduYWxTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFBN U2lnbmFsU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gUE1TaWduYWxTaG1lbUluaXQsCit9 OworCiAvKgogICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxh Z3MsIG9ubHkgdmFsaWQgaW4gdGhlCiAgKiBwb3N0bWFzdGVyLiAgUG9zdG1hc3RlciBrZWVw cyBhIGxvY2FsIGNvcHkgc28gdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8KQEAgLTEyMywzOSAr MTMyLDMxIEBAIHBvc3RtYXN0ZXJfZGVhdGhfaGFuZGxlcihTSUdOQUxfQVJHUykKIHN0YXRp YyB2b2lkIE1hcmtQb3N0bWFzdGVyQ2hpbGRJbmFjdGl2ZShpbnQgY29kZSwgRGF0dW0gYXJn KTsKIAogLyoKLSAqIFBNU2lnbmFsU2htZW1TaXplCi0gKgkJQ29tcHV0ZSBzcGFjZSBuZWVk ZWQgZm9yIHBtc2lnbmFsLmMncyBzaGFyZWQgbWVtb3J5CisgKiBQTVNpZ25hbFNobWVtUmVx dWVzdCAtIFJlZ2lzdGVyIHBtc2lnbmFsLmMncyBzaGFyZWQgbWVtb3J5IG5lZWRzCiAgKi8K LVNpemUKLVBNU2lnbmFsU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorUE1TaWduYWxT aG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCVNpemUJCXNpemU7Ci0KLQlzaXplID0gb2Zm c2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCksCi0JCQkJCQkJCSAg IHNpemVvZihzaWdfYXRvbWljX3QpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIFBNU2lnbmFsU2htZW1EZXNjOworCXNpemVfdAkJc2l6ZTsKKworCW51 bV9jaGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsKKworCXNpemUg PSBhZGRfc2l6ZShvZmZzZXRvZihQTVNpZ25hbERhdGEsIFBNQ2hpbGRGbGFncyksCisJCQkJ CW11bF9zaXplKG51bV9jaGlsZF9mbGFncywgc2l6ZW9mKHNpZ19hdG9taWNfdCkpKTsKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJlBNU2lnbmFsU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0 cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiUE1TaWduYWxTdGF0ZSIsCisJCS5zaXplID0gc2l6 ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmUE1TaWduYWxTdGF0ZSwKKwl9KTsKIH0KIAotLyoK LSAqIFBNU2lnbmFsU2htZW1Jbml0IC0gaW5pdGlhbGl6ZSBkdXJpbmcgc2hhcmVkLW1lbW9y eSBjcmVhdGlvbgotICovCi12b2lkCi1QTVNpZ25hbFNobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK1BNU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsK LQotCVBNU2lnbmFsU3RhdGUgPSAoUE1TaWduYWxEYXRhICopCi0JCVNobWVtSW5pdFN0cnVj dCgiUE1TaWduYWxTdGF0ZSIsIFBNU2lnbmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlp ZiAoIWZvdW5kKQotCXsKLQkJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2VzICov Ci0JCU1lbVNldCh1bnZvbGF0aXplKFBNU2lnbmFsRGF0YSAqLCBQTVNpZ25hbFN0YXRlKSwg MCwgUE1TaWduYWxTaG1lbVNpemUoKSk7Ci0JCW51bV9jaGlsZF9mbGFncyA9IE1heExpdmVQ b3N0bWFzdGVyQ2hpbGRyZW4oKTsKLQkJUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdz ID0gbnVtX2NoaWxkX2ZsYWdzOwotCX0KKwlBc3NlcnQoUE1TaWduYWxTdGF0ZSk7CisJQXNz ZXJ0KG51bV9jaGlsZF9mbGFncyA+IDApOworCVBNU2lnbmFsU3RhdGUtPm51bV9jaGlsZF9m bGFncyA9IG51bV9jaGlsZF9mbGFnczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY2FycmF5LmMKaW5kZXggY2MyMDdjYjU2ZTMuLjE1MDhjMzdlZjYyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0 ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKQEAgLTEwMyw2ICsx MDQsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJaW50CQkJcGdwcm9j bm9zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFByb2NBcnJheVN0cnVjdDsKIAorc3Rh dGljIHZvaWQgUHJvY0FycmF5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFByb2NBcnJh eVNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnBy b2NBcnJheTsKKworY29uc3Qgc3RydWN0IFNobWVtQ2FsbGJhY2tzIFByb2NBcnJheVNobWVt Q2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJvY0FycmF5U2htZW1SZXF1ZXN0LAor CS5pbml0X2ZuID0gUHJvY0FycmF5U2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBQcm9jQXJy YXlTaG1lbUF0dGFjaCwKK307CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0FycmF5 U2htZW1EZXNjOworCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1p bHkgb2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQg dG8gZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9s YXRpbmcKQEAgLTI2OSw5ICsyODQsNiBAQCB0eXBlZGVmIGVudW0gS0FYQ29tcHJlc3NSZWFz b24KIAlLQVhfU1RBUlRVUF9QUk9DRVNTX0lETEUsCS8qIHN0YXJ0dXAgcHJvY2VzcyBpcyBh Ym91dCB0byBzbGVlcCAqLwogfSBLQVhDb21wcmVzc1JlYXNvbjsKIAotCi1zdGF0aWMgUHJv Y0FycmF5U3RydWN0ICpwcm9jQXJyYXk7Ci0KIHN0YXRpYyBQR1BST0MgKmFsbFByb2NzOwog CiAvKgpAQCAtMjgyLDggKzI5NCwxNSBAQCBzdGF0aWMgVHJhbnNhY3Rpb25JZCBjYWNoZWRY aWRJc05vdEluUHJvZ3Jlc3MgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIC8qCiAgKiBCb29r a2VlcGluZyBmb3IgdHJhY2tpbmcgZW11bGF0ZWQgdHJhbnNhY3Rpb25zIGluIHJlY292ZXJ5 CiAgKi8KKwogc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWduZWRYaWRzOworCitz dGF0aWMgU2htZW1TdHJ1Y3REZXNjIEtub3duQXNzaWduZWRYaWRzU2htZW1EZXNjOworCiBz dGF0aWMgYm9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZDsKKworc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjOworCiBzdGF0aWMgVHJh bnNhY3Rpb25JZCBsYXRlc3RPYnNlcnZlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwog CiAvKgpAQCAtMzc0LDE5ICszOTMsMTMgQEAgc3RhdGljIGlubGluZSBGdWxsVHJhbnNhY3Rp b25JZCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsCiBzdGF0aWMg dm9pZCBHbG9iYWxWaXNVcGRhdGVBcHBseShDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmhv cml6b25zKTsKIAogLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBi eSBQcm9jQXJyYXlTaG1lbUluaXQKKyAqIFJlZ2lzdGVyIHRoZSBzaGFyZWQgUEdQUk9DIGFy cmF5IGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAuCiAgKi8KLVNpemUKLVByb2NBcnJheVNo bWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtUmVxdWVzdCh2b2lk ICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhlIFByb2NBcnJheSBz dHJ1Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQUk9DUwkoTWF4QmFj a2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zmc2V0b2YoUHJvY0Fy cmF5U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7Ci0KIAkvKgogCSAqIER1cmlu ZyBIb3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVjdHVyZSBjYWxs ZWQKIAkgKiBLbm93bkFzc2lnbmVkWGlkcywgY3JlYXRlZCBpbiBzaGFyZWQgbWVtb3J5LiBM b2NhbCBkYXRhIHN0cnVjdHVyZXMgYXJlCkBAIC00MDUsNjQgKzQxOCw1MiBAQCBQcm9jQXJy YXlTaG1lbVNpemUodm9pZCkKIAogCWlmIChFbmFibGVIb3RTdGFuZGJ5KQogCXsKLQkJc2l6 ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25J ZCksCi0JCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFk ZF9zaXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9D QUNIRURfU1VCWElEUykpOworCQlTaG1lbVJlcXVlc3RTdHJ1Y3QoJktub3duQXNzaWduZWRY aWRzU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJCS5uYW1lID0g Iktub3duQXNzaWduZWRYaWRzIiwKKwkJCS5zaXplID0gbXVsX3NpemUoc2l6ZW9mKFRyYW5z YWN0aW9uSWQpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAorCQkJLnB0ciA9ICh2b2lk ICoqKSAmS25vd25Bc3NpZ25lZFhpZHMsCisJCX0pOworCisJCVNobWVtUmVxdWVzdFN0cnVj dCgmS25vd25Bc3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1 Y3RPcHRzKSB7CisJCQkubmFtZSA9ICJLbm93bkFzc2lnbmVkWGlkc1ZhbGlkIiwKKwkJCS5z aXplID0gbXVsX3NpemUoc2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMp LAorCQkJLnB0ciA9ICh2b2lkICoqKSAmS25vd25Bc3NpZ25lZFhpZHNWYWxpZCwKKwkJfSk7 CiAJfQogCi0JcmV0dXJuIHNpemU7CisJLyogUmVnaXN0ZXIgdGhlIFByb2NBcnJheSBzaGFy ZWQgc3RydWN0dXJlICovCisJU2htZW1SZXF1ZXN0U3RydWN0KCZQcm9jQXJyYXlTaG1lbURl c2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJQcm9jIEFycmF5 IiwKKwkJLnNpemUgPSBhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJv Y25vcyksCisJCQkJCQkgbXVsX3NpemUoc2l6ZW9mKGludCksIFBST0NBUlJBWV9NQVhQUk9D UykpLAorCQkucHRyID0gKHZvaWQgKiopICZwcm9jQXJyYXksCisJfSk7CiB9CiAKIC8qCiAg KiBJbml0aWFsaXplIHRoZSBzaGFyZWQgUEdQUk9DIGFycmF5IGR1cmluZyBwb3N0bWFzdGVy IHN0YXJ0dXAuCiAgKi8KLXZvaWQKLVByb2NBcnJheVNobWVtSW5pdCh2b2lkKQorc3RhdGlj IHZvaWQKK1Byb2NBcnJheVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7 Ci0KLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBQcm9jQXJyYXkgc2hhcmVkIHN0cnVj dHVyZSAqLwotCXByb2NBcnJheSA9IChQcm9jQXJyYXlTdHJ1Y3QgKikKLQkJU2htZW1Jbml0 U3RydWN0KCJQcm9jIEFycmF5IiwKLQkJCQkJCWFkZF9zaXplKG9mZnNldG9mKFByb2NBcnJh eVN0cnVjdCwgcGdwcm9jbm9zKSwKLQkJCQkJCQkJIG11bF9zaXplKHNpemVvZihpbnQpLAot CQkJCQkJCQkJCSAgUFJPQ0FSUkFZX01BWFBST0NTKSksCi0JCQkJCQkmZm91bmQpOwotCi0J aWYgKCFmb3VuZCkKLQl7Ci0JCS8qCi0JCSAqIFdlJ3JlIHRoZSBmaXJzdCAtIGluaXRpYWxp emUuCi0JCSAqLwotCQlwcm9jQXJyYXktPm51bVByb2NzID0gMDsKLQkJcHJvY0FycmF5LT5t YXhQcm9jcyA9IFBST0NBUlJBWV9NQVhQUk9DUzsKLQkJcHJvY0FycmF5LT5tYXhLbm93bkFz c2lnbmVkWGlkcyA9IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUzsKLQkJcHJvY0FycmF5LT5u dW1Lbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+dGFpbEtub3duQXNzaWdu ZWRYaWRzID0gMDsKLQkJcHJvY0FycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHMgPSAwOwot CQlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 Ci0JCXByb2NBcnJheS0+cmVwbGljYXRpb25fc2xvdF94bWluID0gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7Ci0JCXByb2NBcnJheS0+cmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW4gPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJVHJhbnNhbVZhcmlhYmxlcy0+eGFjdENvbXBsZXRp b25Db3VudCA9IDE7Ci0JfQorCXByb2NBcnJheS0+bnVtUHJvY3MgPSAwOworCXByb2NBcnJh eS0+bWF4UHJvY3MgPSBQUk9DQVJSQVlfTUFYUFJPQ1M7CisJcHJvY0FycmF5LT5tYXhLbm93 bkFzc2lnbmVkWGlkcyA9IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUzsKKwlwcm9jQXJyYXkt Pm51bUtub3duQXNzaWduZWRYaWRzID0gMDsKKwlwcm9jQXJyYXktPnRhaWxLbm93bkFzc2ln bmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHMgPSAwOwor CXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK Kwlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlv bklkOworCXByb2NBcnJheS0+cmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW4gPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKKwlUcmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNv dW50ID0gMTsKIAogCWFsbFByb2NzID0gUHJvY0dsb2JhbC0+YWxsUHJvY3M7Cit9CiAKLQkv KiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBLbm93bkFzc2lnbmVkWGlkcyBhcnJheXMgdG9v LCBpZiBuZWVkZWQgKi8KLQlpZiAoRW5hYmxlSG90U3RhbmRieSkKLQl7Ci0JCUtub3duQXNz aWduZWRYaWRzID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCVNobWVtSW5pdFN0cnVjdCgiS25v d25Bc3NpZ25lZFhpZHMiLAotCQkJCQkJCW11bF9zaXplKHNpemVvZihUcmFuc2FjdGlvbklk KSwKLQkJCQkJCQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJCSZmb3Vu ZCk7Ci0JCUtub3duQXNzaWduZWRYaWRzVmFsaWQgPSAoYm9vbCAqKQotCQkJU2htZW1Jbml0 U3RydWN0KCJLbm93bkFzc2lnbmVkWGlkc1ZhbGlkIiwKLQkJCQkJCQltdWxfc2l6ZShzaXpl b2YoYm9vbCksIFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyksCi0JCQkJCQkJJmZvdW5kKTsK LQl9CitzdGF0aWMgdm9pZAorUHJvY0FycmF5U2htZW1BdHRhY2godm9pZCAqYXJnKQorewor CWFsbFByb2NzID0gUHJvY0dsb2JhbC0+YWxsUHJvY3M7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggN2UwMTdjOGQ1M2IuLjllZDI0ZmFlOGQ5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0zMiw2ICszMiw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2lu dmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z dWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgpAQCAtMTA1 LDcgKzEwNiwxNiBAQCBzdHJ1Y3QgUHJvY1NpZ25hbEhlYWRlcgogI2RlZmluZSBCQVJSSUVS X0NMRUFSX0JJVChmbGFncywgdHlwZSkgXAogCSgoZmxhZ3MpICY9IH4oKCh1aW50MzIpIDEp IDw8ICh1aW50MzIpICh0eXBlKSkpCiAKK3N0YXRpYyB2b2lkIFByb2NTaWduYWxTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFByb2NTaWduYWxTaG1lbUluaXQodm9p ZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgUHJvY1NpZ25hbFNobWVtQ2FsbGJh Y2tzID0geworCS5yZXF1ZXN0X2ZuID0gUHJvY1NpZ25hbFNobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IFByb2NTaWduYWxTaG1lbUluaXQsCit9OworCiBOT05fRVhFQ19TVEFUSUMgUHJv Y1NpZ25hbEhlYWRlciAqUHJvY1NpZ25hbCA9IE5VTEw7CisKIHN0YXRpYyBQcm9jU2lnbmFs U2xvdCAqTXlQcm9jU2lnbmFsU2xvdCA9IE5VTEw7CiAKIHN0YXRpYyBib29sIENoZWNrUHJv Y1NpZ25hbChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CkBAIC0xMTMsNTEgKzEyMyw0MSBA QCBzdGF0aWMgdm9pZCBDbGVhbnVwUHJvY1NpZ25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVt IGFyZyk7CiBzdGF0aWMgdm9pZCBSZXNldFByb2NTaWduYWxCYXJyaWVyQml0cyh1aW50MzIg ZmxhZ3MpOwogCiAvKgotICogUHJvY1NpZ25hbFNobWVtU2l6ZQotICoJCUNvbXB1dGUgc3Bh Y2UgbmVlZGVkIGZvciBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1lbW9yeQorICogUHJvY1NpZ25h bFNobWVtUmVxdWVzdAorICoJCVJlZ2lzdGVyIFByb2NTaWduYWwncyBzaGFyZWQgbWVtb3J5 IG5lZWRzIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cAogICovCi1TaXplCi1Qcm9jU2lnbmFsU2ht ZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY1NpZ25hbFNobWVtUmVxdWVzdCh2b2lk ICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNj OwogCVNpemUJCXNpemU7CiAKIAlzaXplID0gbXVsX3NpemUoTnVtUHJvY1NpZ25hbFNsb3Rz LCBzaXplb2YoUHJvY1NpZ25hbFNsb3QpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zm c2V0b2YoUHJvY1NpZ25hbEhlYWRlciwgcHNoX3Nsb3QpKTsKLQlyZXR1cm4gc2l6ZTsKKwor CVNobWVtUmVxdWVzdFN0cnVjdCgmUHJvY1NpZ25hbFNobWVtRGVzYywgJihTaG1lbVJlcXVl c3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIlByb2NTaWduYWwiLAorCQkuc2l6ZSA9IHNp emUsCisJCS5wdHIgPSAodm9pZCAqKikgJlByb2NTaWduYWwsCisJfSk7CiB9CiAKLS8qCi0g KiBQcm9jU2lnbmFsU2htZW1Jbml0Ci0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgUHJv Y1NpZ25hbCdzIHNoYXJlZCBtZW1vcnkKLSAqLwotdm9pZAotUHJvY1NpZ25hbFNobWVtSW5p dCh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKQog ewotCVNpemUJCXNpemUgPSBQcm9jU2lnbmFsU2htZW1TaXplKCk7Ci0JYm9vbAkJZm91bmQ7 CisJcGdfYXRvbWljX2luaXRfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmllckdlbmVyYXRp b24sIDApOwogCi0JUHJvY1NpZ25hbCA9IChQcm9jU2lnbmFsSGVhZGVyICopCi0JCVNobWVt SW5pdFN0cnVjdCgiUHJvY1NpZ25hbCIsIHNpemUsICZmb3VuZCk7Ci0KLQkvKiBJZiB3ZSdy ZSBmaXJzdCwgaW5pdGlhbGl6ZS4gKi8KLQlpZiAoIWZvdW5kKQorCWZvciAoaW50IGkgPSAw OyBpIDwgTnVtUHJvY1NpZ25hbFNsb3RzOyArK2kpCiAJewotCQlpbnQJCQlpOwotCi0JCXBn X2F0b21pY19pbml0X3U2NCgmUHJvY1NpZ25hbC0+cHNoX2JhcnJpZXJHZW5lcmF0aW9uLCAw KTsKKwkJUHJvY1NpZ25hbFNsb3QgKnNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3RbaV07 CiAKLQkJZm9yIChpID0gMDsgaSA8IE51bVByb2NTaWduYWxTbG90czsgKytpKQotCQl7Ci0J CQlQcm9jU2lnbmFsU2xvdCAqc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtpXTsKLQot CQkJU3BpbkxvY2tJbml0KCZzbG90LT5wc3NfbXV0ZXgpOwotCQkJcGdfYXRvbWljX2luaXRf dTMyKCZzbG90LT5wc3NfcGlkLCAwKTsKLQkJCXNsb3QtPnBzc19jYW5jZWxfa2V5X2xlbiA9 IDA7Ci0JCQlNZW1TZXQoc2xvdC0+cHNzX3NpZ25hbEZsYWdzLCAwLCBzaXplb2Yoc2xvdC0+ cHNzX3NpZ25hbEZsYWdzKSk7Ci0JCQlwZ19hdG9taWNfaW5pdF91NjQoJnNsb3QtPnBzc19i YXJyaWVyR2VuZXJhdGlvbiwgUEdfVUlOVDY0X01BWCk7Ci0JCQlwZ19hdG9taWNfaW5pdF91 MzIoJnNsb3QtPnBzc19iYXJyaWVyQ2hlY2tNYXNrLCAwKTsKLQkJCUNvbmRpdGlvblZhcmlh YmxlSW5pdCgmc2xvdC0+cHNzX2JhcnJpZXJDVik7Ci0JCX0KKwkJU3BpbkxvY2tJbml0KCZz bG90LT5wc3NfbXV0ZXgpOworCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19waWQs IDApOworCQlzbG90LT5wc3NfY2FuY2VsX2tleV9sZW4gPSAwOworCQlNZW1TZXQoc2xvdC0+ cHNzX3NpZ25hbEZsYWdzLCAwLCBzaXplb2Yoc2xvdC0+cHNzX3NpZ25hbEZsYWdzKSk7CisJ CXBnX2F0b21pY19pbml0X3U2NCgmc2xvdC0+cHNzX2JhcnJpZXJHZW5lcmF0aW9uLCBQR19V SU5UNjRfTUFYKTsKKwkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfYmFycmllckNo ZWNrTWFzaywgMCk7CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmc2xvdC0+cHNzX2JhcnJp ZXJDVik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z aW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmluZGV4 IGE3YTdjYzRmMGE5Li4xMTEzOGFmMGEyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lu dmFsYWR0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKIAogLyoKICAqIENvbmNl cHR1YWxseSwgdGhlIHNoYXJlZCBjYWNoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgYXJlIHN0 b3JlZCBpbiBhbgpAQCAtMjA1LDYgKzIwNiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBTSVNlZwog CiBzdGF0aWMgU0lTZWcgKnNobUludmFsQnVmZmVyOwkvKiBwb2ludGVyIHRvIHRoZSBzaGFy ZWQgaW52YWwgYnVmZmVyICovCiAKK3N0YXRpYyB2b2lkIFNoYXJlZEludmFsU2htZW1SZXF1 ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBTaGFyZWRJbnZhbFNobWVtSW5pdCh2b2lk ICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBTaGFyZWRJbnZhbFNobWVtQ2FsbGJh Y2tzID0geworCS5yZXF1ZXN0X2ZuID0gU2hhcmVkSW52YWxTaG1lbVJlcXVlc3QsCisJLmlu aXRfZm4gPSBTaGFyZWRJbnZhbFNobWVtSW5pdCwKK307CisKIAogc3RhdGljIExvY2FsVHJh bnNhY3Rpb25JZCBuZXh0TG9jYWxUcmFuc2FjdGlvbklkOwogCkBAIC0yMTIsMzcgKzIyMSwz MiBAQCBzdGF0aWMgdm9pZCBDbGVhbnVwSW52YWxpZGF0aW9uU3RhdGUoaW50IHN0YXR1cywg RGF0dW0gYXJnKTsKIAogCiAvKgotICogU2hhcmVkSW52YWxTaG1lbVNpemUgLS0tIHJldHVy biBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZAorICogU2hhcmVkSW52YWxTaG1lbVJlcXVl c3QKKyAqCQlSZWdpc3RlciBzaGFyZWQgbWVtb3J5IG5lZWRzIGZvciB0aGUgU0kgbWVzc2Fn ZSBidWZmZXIKICAqLwotU2l6ZQotU2hhcmVkSW52YWxTaG1lbVNpemUodm9pZCkKK3N0YXRp YyB2b2lkCitTaGFyZWRJbnZhbFNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBTaGFyZWRJbnZhbFNobWVtRGVzYzsKIAlTaXplCQlzaXplOwog CiAJc2l6ZSA9IG9mZnNldG9mKFNJU2VnLCBwcm9jU3RhdGUpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoUHJvY1N0YXRlKSwgTnVtUHJvY1N0YXRlU2xvdHMp KTsJLyogcHJvY1N0YXRlICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNp emVvZihpbnQpLCBOdW1Qcm9jU3RhdGVTbG90cykpOwkvKiBwZ3Byb2Nub3MgKi8KIAotCXJl dHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmU2hhcmVkSW52YWxTaG1lbURlc2Ms ICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJzaG1JbnZhbEJ1ZmZl ciIsCisJCS5zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmc2htSW52YWxCdWZm ZXIsCisJfSk7CiB9CiAKLS8qCi0gKiBTaGFyZWRJbnZhbFNobWVtSW5pdAotICoJCUNyZWF0 ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgU0kgbWVzc2FnZSBidWZmZXIKLSAqLwotdm9pZAotU2hh cmVkSW52YWxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitTaGFyZWRJbnZhbFNobWVt SW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJaTsKLQlib29sCQlmb3VuZDsKLQotCS8qIEFs bG9jYXRlIHNwYWNlIGluIHNoYXJlZCBtZW1vcnkgKi8KLQlzaG1JbnZhbEJ1ZmZlciA9IChT SVNlZyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoInNobUludmFsQnVmZmVyIiwgU2hhcmVkSW52 YWxTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQlpZiAoZm91bmQpCi0JCXJldHVybjsKIAotCS8q IENsZWFyIG1lc3NhZ2UgY291bnRlcnMsIHNhdmUgc2l6ZSBvZiBwcm9jU3RhdGUgYXJyYXks IGluaXQgc3BpbmxvY2sgKi8KKwkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBpbml0IHNw aW5sb2NrICovCiAJc2htSW52YWxCdWZmZXItPm1pbk1zZ051bSA9IDA7CiAJc2htSW52YWxC dWZmZXItPm1heE1zZ051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm5leHRUaHJlc2hvbGQg PSBDTEVBTlVQX01JTjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDliODgwYTZh ZjY1Li5lNzUwMWZlZTRjNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC01Miw2 ICs1Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCisjaW5jbHVk ZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgog I2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZl bnQuaCIKQEAgLTcwLDkgKzcxLDI1IEBAIFBHUFJPQwkgICAqTXlQcm9jID0gTlVMTDsKIAog LyogUG9pbnRlcnMgdG8gc2hhcmVkLW1lbW9yeSBzdHJ1Y3R1cmVzICovCiBQUk9DX0hEUiAg ICpQcm9jR2xvYmFsID0gTlVMTDsKK3N0YXRpYyB2b2lkICp0bXBBbGxQcm9jczsKK3N0YXRp YyB2b2lkICp0bXBGYXN0UGF0aExvY2tBcnJheTsKIE5PTl9FWEVDX1NUQVRJQyBQR1BST0Mg KkF1eGlsaWFyeVByb2NzID0gTlVMTDsKIFBHUFJPQwkgICAqUHJlcGFyZWRYYWN0UHJvY3Mg PSBOVUxMOwogCitzdGF0aWMgdm9pZCBQcm9jR2xvYmFsU2htZW1SZXF1ZXN0KHZvaWQgKmFy Zyk7CitzdGF0aWMgdm9pZCBQcm9jR2xvYmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2Nv bnN0IFNobWVtQ2FsbGJhY2tzIFByb2NHbG9iYWxTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVx dWVzdF9mbiA9IFByb2NHbG9iYWxTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBQcm9jR2xv YmFsU2htZW1Jbml0LAorfTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFs U2htZW1EZXNjOworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsQWxsUHJvY3NT aG1lbURlc2M7CitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEZhc3RQYXRoTG9ja0FycmF5U2ht ZW1EZXNjOworCitzdGF0aWMgdWludDMyIFRvdGFsUHJvY3M7CisKIC8qIElzIGEgZGVhZGxv Y2sgY2hlY2sgcGVuZGluZz8gKi8KIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290 X2RlYWRsb2NrX3RpbWVvdXQ7CiAKQEAgLTgyLDI0ICs5OSw2IEBAIHN0YXRpYyB2b2lkIEF1 eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIERlYWRMb2Nr U3RhdGUgQ2hlY2tEZWFkTG9jayh2b2lkKTsKIAogCi0vKgotICogUmVwb3J0IHNoYXJlZC1t ZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KLSAqLwotc3RhdGljIFNpemUKLVBHUHJv Y1NobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCVNpemUJCVRvdGFsUHJv Y3MgPQotCQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRkX3NpemUoTlVNX0FVWElMSUFSWV9Q Uk9DUywgbWF4X3ByZXBhcmVkX3hhY3RzKSk7Ci0KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg bXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRz KSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXpl b2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFn cykpKTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogUmVwb3J0IHNoYXJlZC1tZW1v cnkgc3BhY2UgbmVlZGVkIGJ5IEZhc3QtUGF0aCBsb2Nrcy4KICAqLwpAQCAtMTA3LDggKzEw Niw2IEBAIHN0YXRpYyBTaXplCiBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIHsKIAlT aXplCQlzaXplID0gMDsKLQlTaXplCQlUb3RhbFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFj a2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0 cykpOwogCVNpemUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwogCkBAIC0x MjcsMjUgKzEyNCw2IEBAIEZhc3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCXJldHVybiBz aXplOwogfQogCi0vKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5 IEluaXRQcm9jR2xvYmFsLgotICovCi1TaXplCi1Qcm9jR2xvYmFsU2htZW1TaXplKHZvaWQp Ci17Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBQcm9jR2xvYmFsICovCi0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIHNpemVvZihQUk9DX0hEUikpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBzaXplb2Yoc2xvY2tfdCkpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHU2VtYXBo b3JlU2htZW1TaXplKFByb2NHbG9iYWxTZW1hcygpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFBHUHJvY1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgRmFzdFBh dGhMb2NrU2htZW1TaXplKCkpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAgKiBSZXBv cnQgbnVtYmVyIG9mIHNlbWFwaG9yZXMgbmVlZGVkIGJ5IEluaXRQcm9jR2xvYmFsLgogICov CkBAIC0xNjAsNyArMTM4LDYzIEBAIFByb2NHbG9iYWxTZW1hcyh2b2lkKQogfQogCiAvKgot ICogSW5pdFByb2NHbG9iYWwgLQorICogUHJvY0dsb2JhbFNobWVtUmVxdWVzdAorICoJICBS ZWdpc3RlciBzaGFyZWQgbWVtb3J5IG5lZWRzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGR1 cmluZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUgYmFja2VuZCBzdGFydHVwLCBhbmQgYWxz bworICogZHVyaW5nIGJhY2tlbmQgc3RhcnR1cCBpbiBFWEVDX0JBQ0tFTkQgbW9kZS4KKyAq Lworc3RhdGljIHZvaWQKK1Byb2NHbG9iYWxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQorewor CVNpemUJCXNpemU7CisKKwkvKgorCSAqIFJlc2VydmUgYWxsIHRoZSBQR1BST0Mgc3RydWN0 dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlIHNpeCBzZXBhcmF0ZQorCSAqIGNvbnN1bWVy czogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBhbmQgc3Bl Y2lhbAorCSAqIHdvcmtlcnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMsICg0KSB3YWxzZW5k ZXJzLCAoNSkgYXV4aWxpYXJ5CisJICogcHJvY2Vzc2VzLCBhbmQgKDYpIHByZXBhcmVkIHRy YW5zYWN0aW9ucy4gIChGb3IgbGFyZ2VseS1oaXN0b3JpY2FsCisJICogcmVhc29ucywgd2Ug Y29tYmluZSBhdXRvdmFjdXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50byBvbmUgY2F0ZWdv cnkKKwkgKiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVjdHVy ZSBpcyBkZWRpY2F0ZWQgdG8gZXhhY3RseQorCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3Nlcywg YW5kIHRoZXkgZG8gbm90IG1vdmUgYmV0d2VlbiBncm91cHMuCisJICovCisJVG90YWxQcm9j cyA9CisJCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BS T0NTLCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKKworCXNpemUgPSAwOworCXNpemUgPSBhZGRf c2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DKSkpOworCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NH bG9iYWwtPnhpZHMpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFs UHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSkpOworCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwt PnN0YXR1c0ZsYWdzKSkpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmUHJvY0dsb2JhbEFsbFBy b2NzU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAi UEdQUk9DIHN0cnVjdHVyZXMiLAorCQkuc2l6ZSA9IHNpemUsCisJCS5wdHIgPSAodm9pZCAq KikgJnRtcEFsbFByb2NzLAorCX0pOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZGYXN0UGF0 aExvY2tBcnJheVNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5u YW1lID0gIkZhc3QtUGF0aCBMb2NrIEFycmF5IiwKKwkJLnNpemUgPSBJc1VuZGVyUG9zdG1h c3RlciA/IFNITUVNX1JFUVVFU1RfVU5LTk9XTl9TSVpFIDogRmFzdFBhdGhMb2NrU2htZW1T aXplKCksCisJCS5wdHIgPSAodm9pZCAqKikgJnRtcEZhc3RQYXRoTG9ja0FycmF5LAorCX0p OworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZQcm9jR2xvYmFsU2htZW1EZXNjLCAmKFNobWVt UmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiUHJvYyBIZWFkZXIiLAorCQkuc2l6 ZSA9IHNpemVvZihQUk9DX0hEUiksCisKKwkJLyoKKwkJICogUHJvY0dsb2JhbCBpcyByZWdp c3RlcmVkIGhlcmUgaW4gLnB0ciBhcyB1c3VhbCwgYnV0IGl0IG5lZWRzIHRvIGJlCisJCSAq IHByb3BhZ2F0ZWQgc3BlY2lhbGx5IGluIEVYRUNfQkFDS0VORCBtb2RlLCBiZWNhdXNlIFBy b2NHbG9iYWwgbmVlZHMKKwkJICogdG8gYmUgYWNjZXNzZWQgZWFybHkgYXQgYmFja2VuZCBz dGFydHVwLCBiZWZvcmUKKwkJICogU2htZW1BdHRhY2hSZXF1ZXN0ZWQoKSBoYXMgYmVlbiBj YWxsZWQuCisJCSAqLworCQkucHRyID0gKHZvaWQgKiopICZQcm9jR2xvYmFsLAorCX0pOwor fQorCisKKy8qCisgKiBQcm9jR2xvYmFsU2htZW1Jbml0IC0KICAqCSAgSW5pdGlhbGl6ZSB0 aGUgZ2xvYmFsIHByb2Nlc3MgdGFibGUgZHVyaW5nIHBvc3RtYXN0ZXIgb3Igc3RhbmRhbG9u ZQogICoJICBiYWNrZW5kIHN0YXJ0dXAuCiAgKgpAQCAtMTc5LDM2ICsyMTMsMjMgQEAgUHJv Y0dsb2JhbFNlbWFzKHZvaWQpCiAgKgkgIEFub3RoZXIgcmVhc29uIGZvciBjcmVhdGluZyBz ZW1hcGhvcmVzIGhlcmUgaXMgdGhhdCB0aGUgc2VtYXBob3JlCiAgKgkgIGltcGxlbWVudGF0 aW9uIHR5cGljYWxseSByZXF1aXJlcyB1cyB0byBjcmVhdGUgc2VtYXBob3JlcyBpbiB0aGUK ICAqCSAgcG9zdG1hc3Rlciwgbm90IGluIGJhY2tlbmRzLgotICoKLSAqIE5vdGU6IHRoaXMg aXMgTk9UIGNhbGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9zdG1hc3Rl ciwKLSAqIG5vdCBldmVuIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZS4gIFRoZSBQcm9jR2xv YmFsIGFuZCBBdXhpbGlhcnlQcm9jcwotICogcG9pbnRlcnMgbXVzdCBiZSBwcm9wYWdhdGVk IHNwZWNpYWxseSBmb3IgRVhFQ19CQUNLRU5EIG9wZXJhdGlvbi4KICAqLwotdm9pZAotSW5p dFByb2NHbG9iYWwodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9jR2xvYmFsU2htZW1Jbml0KHZv aWQgKmFyZykKIHsKKwljaGFyCSAgICpwdHI7CisJc2l6ZV90CQlyZXF1ZXN0U2l6ZTsKIAlQ R1BST0MJICAgKnByb2NzOwogCWludAkJCWksCiAJCQkJajsKLQlib29sCQlmb3VuZDsKLQl1 aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1Mg KyBtYXhfcHJlcGFyZWRfeGFjdHM7CiAKIAkvKiBVc2VkIGZvciBzZXR1cCBvZiBwZXItYmFj a2VuZCBmYXN0LXBhdGggc2xvdHMuICovCiAJY2hhcgkgICAqZnBQdHIsCiAJCQkgICAqZnBF bmRQdHIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwogCVNpemUJCWZwTG9ja0JpdHNTaXpl LAogCQkJCWZwUmVsSWRTaXplOwotCVNpemUJCXJlcXVlc3RTaXplOwotCWNoYXIJICAgKnB0 cjsKLQotCS8qIENyZWF0ZSB0aGUgUHJvY0dsb2JhbCBzaGFyZWQgc3RydWN0dXJlICovCi0J UHJvY0dsb2JhbCA9IChQUk9DX0hEUiAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgSGVh ZGVyIiwgc2l6ZW9mKFBST0NfSERSKSwgJmZvdW5kKTsKLQlBc3NlcnQoIWZvdW5kKTsKIAot CS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgotCSAqLworCUFzc2Vy dChQcm9jR2xvYmFsKTsKIAlQcm9jR2xvYmFsLT5zcGluc19wZXJfZGVsYXkgPSBERUZBVUxU X1NQSU5TX1BFUl9ERUxBWTsKIAlTcGluTG9ja0luaXQoJlByb2NHbG9iYWwtPmZyZWVQcm9j c0xvY2spOwogCWRsaXN0X2luaXQoJlByb2NHbG9iYWwtPmZyZWVQcm9jcyk7CkBAIC0yMjEs MjMgKzI0MiwxMiBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCXBnX2F0b21pY19pbml0X3Uz MigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwgSU5WQUxJRF9QUk9DX05VTUJF Uik7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5jbG9nR3JvdXBGaXJzdCwg SU5WQUxJRF9QUk9DX05VTUJFUik7CiAKLQkvKgotCSAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6 ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQuICBUaGVyZSBhcmUKLQkg KiBzaXggc2VwYXJhdGUgY29uc3VtZXJzOiAoMSkgbm9ybWFsIGJhY2tlbmRzLCAoMikgYXV0 b3ZhY3V1bSB3b3JrZXJzIGFuZAotCSAqIHNwZWNpYWwgd29ya2VycywgKDMpIGJhY2tncm91 bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBhdXhpbGlhcnkKLQkgKiBwcm9jZXNz ZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAgKEZvciBsYXJnZWx5LWhpc3Rv cmljYWwKLQkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1dG92YWN1dW0gYW5kIHNwZWNpYWwg d29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQotCSAqIHdpdGggYSBzaW5nbGUgZnJlZWxpc3Qu KSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRlZCB0byBleGFjdGx5Ci0JICog b25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBub3QgbW92ZSBiZXR3ZWVuIGdy b3Vwcy4KLQkgKi8KLQlyZXF1ZXN0U2l6ZSA9IFBHUHJvY1NobWVtU2l6ZSgpOwotCi0JcHRy ID0gU2htZW1Jbml0U3RydWN0KCJQR1BST0Mgc3RydWN0dXJlcyIsCi0JCQkJCQkgIHJlcXVl c3RTaXplLAotCQkJCQkJICAmZm91bmQpOwotCisJQXNzZXJ0KHRtcEFsbFByb2NzKTsKKwlw dHIgPSB0bXBBbGxQcm9jczsKKwlyZXF1ZXN0U2l6ZSA9IFByb2NHbG9iYWxBbGxQcm9jc1No bWVtRGVzYy5zaXplOwogCU1lbVNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsKIAorCS8qIENh cnZlIG91dCB0aGUgYWxsUHJvY3MgYXJyYXkgZnJvbSB0aGUgc2hhcmVkIG1lbW9yeSBhcmVh ICovCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKIAlwdHIgPSBwdHIgKyBUb3RhbFByb2Nz ICogc2l6ZW9mKFBHUFJPQyk7CiAKQEAgLTI0Niw3ICsyNTYsNyBAQCBJbml0UHJvY0dsb2Jh bCh2b2lkKQogCVByb2NHbG9iYWwtPmFsbFByb2NDb3VudCA9IE1heEJhY2tlbmRzICsgTlVN X0FVWElMSUFSWV9QUk9DUzsKIAogCS8qCi0JICogQWxsb2NhdGUgYXJyYXlzIG1pcnJvcmlu ZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUKKwkgKiBDYXJ2ZSBvdXQg YXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUK IAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBp bmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVuCkBAIC0yNjEsMzEgKzI3 MSwyNSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVByb2NHbG9iYWwtPnN0YXR1c0ZsYWdz ID0gKHVpbnQ4ICopIHB0cjsKIAlwdHIgPSBwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigq UHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKIAotCS8qIG1ha2Ugc3VyZSB3ZXIgZGlkbid0 IG92ZXJmbG93ICovCisJLyogbWFrZSBzdXJlIHdlIGRpZG4ndCBvdmVyZmxvdyAqLwogCUFz c2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3Mg KyByZXF1ZXN0U2l6ZSkpOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBhcnJheXMgZm9yIGZhc3Qt cGF0aCBsb2Nrcy4gVGhvc2UgYXJlIHZhcmlhYmxlLWxlbmd0aCwgc28KKwkgKiBJbml0aWFs aXplIGFycmF5cyBmb3IgZmFzdC1wYXRoIGxvY2tzLiBUaG9zZSBhcmUgdmFyaWFibGUtbGVu Z3RoLCBzbwogCSAqIGNhbid0IGJlIGluY2x1ZGVkIGluIFBHUFJPQyBkaXJlY3RseS4gV2Ug YWxsb2NhdGUgYSBzZXBhcmF0ZSBwaWVjZSBvZgogCSAqIHNoYXJlZCBtZW1vcnkgYW5kIHRo ZW4gZGl2aWRlIHRoYXQgYmV0d2VlbiBiYWNrZW5kcy4KIAkgKi8KIAlmcExvY2tCaXRzU2l6 ZSA9IE1BWEFMSUdOKEZhc3RQYXRoTG9ja0dyb3Vwc1BlckJhY2tlbmQgKiBzaXplb2YodWlu dDY0KSk7CiAJZnBSZWxJZFNpemUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tTbG90c1BlckJh Y2tlbmQoKSAqIHNpemVvZihPaWQpKTsKIAotCXJlcXVlc3RTaXplID0gRmFzdFBhdGhMb2Nr U2htZW1TaXplKCk7Ci0KLQlmcFB0ciA9IFNobWVtSW5pdFN0cnVjdCgiRmFzdC1QYXRoIExv Y2sgQXJyYXkiLAotCQkJCQkJCXJlcXVlc3RTaXplLAotCQkJCQkJCSZmb3VuZCk7Ci0KLQlN ZW1TZXQoZnBQdHIsIDAsIHJlcXVlc3RTaXplKTsKKwlBc3NlcnQodG1wRmFzdFBhdGhMb2Nr QXJyYXkpOworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJyYXk7CisJcmVxdWVzdFNpemUg PSBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXplOworCW1lbXNldChmcFB0ciwgMCwg cmVxdWVzdFNpemUpOwogCiAJLyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlkIG5vdCBv dmVyZmxvdy4gKi8KIAlmcEVuZFB0ciA9IGZwUHRyICsgcmVxdWVzdFNpemU7CiAKLQkvKiBS ZXNlcnZlIHNwYWNlIGZvciBzZW1hcGhvcmVzLiAqLwotCVBHUmVzZXJ2ZVNlbWFwaG9yZXMo UHJvY0dsb2JhbFNlbWFzKCkpOwotCiAJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJvY3M7IGkr KykKIAl7CiAJCVBHUFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBlNWEyMjg5ZjBiMC4uNTZiNDU1ZDAw MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTI1 LDYgKzI1LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9y YWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJz dG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNs dWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKQEAgLTk3LDYxICs5OCw1OCBAQCBzdGF0aWMg V2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEgKldhaXRFdmVudEN1c3RvbUNvdW50ZXI7CiBz dGF0aWMgdWludDMyIFdhaXRFdmVudEN1c3RvbU5ldyh1aW50MzIgY2xhc3NJZCwgY29uc3Qg Y2hhciAqd2FpdF9ldmVudF9uYW1lKTsKIHN0YXRpYyBjb25zdCBjaGFyICpHZXRXYWl0RXZl bnRDdXN0b21JZGVudGlmaWVyKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwogCitzdGF0aWMg dm9pZCBXYWl0RXZlbnRDdXN0b21TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIFdhaXRFdmVudEN1c3RvbVNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1l bUNhbGxiYWNrcyBXYWl0RXZlbnRDdXN0b21TaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVz dF9mbiA9IFdhaXRFdmVudEN1c3RvbVNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFdhaXRF dmVudEN1c3RvbVNobWVtSW5pdCwKK307CisKIC8qCi0gKiAgUmV0dXJuIHRoZSBzcGFjZSBm b3IgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZXMgYW5kIGR5bmFtaWMgYWxsb2NhdGlvbiBj b3VudGVyLgorICogUmVnaXN0ZXIgc2htZW0gc3BhY2UgZm9yIGR5bmFtaWMgc2hhcmVkIGhh c2ggYW5kIGR5bmFtaWMgYWxsb2NhdGlvbiBjb3VudGVyLgogICovCi1TaXplCi1XYWl0RXZl bnRDdXN0b21TaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitXYWl0RXZlbnRDdXN0b21T aG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCVNpemUJCXN6OwotCi0Jc3ogPSBNQVhBTElH TihzaXplb2YoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEpKTsKLQlzeiA9IGFkZF9zaXpl KHN6LCBoYXNoX2VzdGltYXRlX3NpemUoV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhfU0la RSwKLQkJCQkJCQkJCQkgc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUVudHJ5QnlJbmZvKSkpOwot CXN6ID0gYWRkX3NpemUoc3osIGhhc2hfZXN0aW1hdGVfc2l6ZShXQUlUX0VWRU5UX0NVU1RP TV9IQVNIX01BWF9TSVpFLAotCQkJCQkJCQkJCSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50 cnlCeU5hbWUpKSk7Ci0JcmV0dXJuIHN6OworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgV2Fp dEV2ZW50Q3VzdG9tQ291bnRlclNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1IYXNoRGVzYyBX YWl0RXZlbnRDdXN0b21IYXNoQnlJbmZvRGVzYzsKKwlzdGF0aWMgU2htZW1IYXNoRGVzYyBX YWl0RXZlbnRDdXN0b21IYXNoQnlOYW1lRGVzYzsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgm V2FpdEV2ZW50Q3VzdG9tQ291bnRlclNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RP cHRzKSB7CisJCS5uYW1lID0gIldhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhIiwKKwkJLnNp emUgPSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEpLAorCQkucHRyID0gKHZv aWQgKiopICZXYWl0RXZlbnRDdXN0b21Db3VudGVyLAorCX0pOworCVNobWVtUmVxdWVzdEhh c2goJldhaXRFdmVudEN1c3RvbUhhc2hCeUluZm9EZXNjLCAmKFNobWVtUmVxdWVzdEhhc2hP cHRzKSB7CisJCS5uYW1lID0gIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5IHdhaXQgZXZlbnQg aW5mb3JtYXRpb24iLAorCQkucHRyID0gJldhaXRFdmVudEN1c3RvbUhhc2hCeUluZm8sCisK KwkJLmluaXRfc2l6ZSA9IFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfSU5JVF9TSVpFLAorCQku bWF4X3NpemUgPSBXQUlUX0VWRU5UX0NVU1RPTV9IQVNIX01BWF9TSVpFLAorCQkuaGFzaF9p bmZvLmtleXNpemUgPSBzaXplb2YodWludDMyKSwKKwkJLmhhc2hfaW5mby5lbnRyeXNpemUg PSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50cnlCeUluZm8pLAorCQkuaGFzaF9mbGFncyA9 IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMsCisJfSk7CisJU2htZW1SZXF1ZXN0SGFzaCgmV2Fp dEV2ZW50Q3VzdG9tSGFzaEJ5TmFtZURlc2MsICYoU2htZW1SZXF1ZXN0SGFzaE9wdHMpIHsK KwkJLm5hbWUgPSAiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkgbmFtZSIsCisJCS5wdHIgPSAm V2FpdEV2ZW50Q3VzdG9tSGFzaEJ5TmFtZSwKKworCQkuaW5pdF9zaXplID0gV0FJVF9FVkVO VF9DVVNUT01fSEFTSF9JTklUX1NJWkUsCisJCS5tYXhfc2l6ZSA9IFdBSVRfRVZFTlRfQ1VT VE9NX0hBU0hfTUFYX1NJWkUsCisJCS8qIGtleSBpcyBhIE5VTEwtdGVybWluYXRlZCBzdHJp bmcgKi8KKwkJLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKGNoYXJbTkFNRURBVEFMRU5d KSwKKwkJLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50 cnlCeU5hbWUpLAorCQkuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUywK Kwl9KTsKIH0KIAotLyoKLSAqIEFsbG9jYXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNo YXJlZCBoYXNoIGFuZCBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlci4KLSAqLwotdm9pZAot V2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorV2FpdEV2ZW50 Q3VzdG9tU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQlIQVNIQ1RM CQlpbmZvOwotCi0JV2FpdEV2ZW50Q3VzdG9tQ291bnRlciA9IChXYWl0RXZlbnRDdXN0b21D b3VudGVyRGF0YSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIldhaXRFdmVudEN1c3RvbUNvdW50 ZXJEYXRhIiwKLQkJCQkJCXNpemVvZihXYWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YSksICZm b3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyogaW5pdGlhbGl6ZSB0aGUgYWxsb2Nh dGlvbiBjb3VudGVyIGFuZCBpdHMgc3BpbmxvY2suICovCi0JCVdhaXRFdmVudEN1c3RvbUNv dW50ZXItPm5leHRJZCA9IFdBSVRfRVZFTlRfQ1VTVE9NX0lOSVRJQUxfSUQ7Ci0JCVNwaW5M b2NrSW5pdCgmV2FpdEV2ZW50Q3VzdG9tQ291bnRlci0+bXV0ZXgpOwotCX0KLQotCS8qIGlu aXRpYWxpemUgb3IgYXR0YWNoIHRoZSBoYXNoIHRhYmxlcyB0byBzdG9yZSBjdXN0b20gd2Fp dCBldmVudHMgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YodWludDMyKTsKLQlpbmZvLmVu dHJ5c2l6ZSA9IHNpemVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5SW5mbyk7Ci0JV2FpdEV2 ZW50Q3VzdG9tSGFzaEJ5SW5mbyA9Ci0JCVNobWVtSW5pdEhhc2goIldhaXRFdmVudEN1c3Rv bSBoYXNoIGJ5IHdhaXQgZXZlbnQgaW5mb3JtYXRpb24iLAotCQkJCQkgIFdBSVRfRVZFTlRf Q1VTVE9NX0hBU0hfSU5JVF9TSVpFLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hf TUFYX1NJWkUsCi0JCQkJCSAgJmluZm8sCi0JCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9C Uyk7Ci0KLQkvKiBrZXkgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0JaW5mby5r ZXlzaXplID0gc2l6ZW9mKGNoYXJbTkFNRURBVEFMRU5dKTsKLQlpbmZvLmVudHJ5c2l6ZSA9 IHNpemVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5TmFtZSk7Ci0JV2FpdEV2ZW50Q3VzdG9t SGFzaEJ5TmFtZSA9Ci0JCVNobWVtSW5pdEhhc2goIldhaXRFdmVudEN1c3RvbSBoYXNoIGJ5 IG5hbWUiLAotCQkJCQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfSU5JVF9TSVpFLAotCQkJ CQkgIFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfTUFYX1NJWkUsCi0JCQkJCSAgJmluZm8sCi0J CQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTKTsKKwkvKiBpbml0aWFsaXplIHRoZSBh bGxvY2F0aW9uIGNvdW50ZXIgYW5kIGl0cyBzcGlubG9jay4gKi8KKwlXYWl0RXZlbnRDdXN0 b21Db3VudGVyLT5uZXh0SWQgPSBXQUlUX0VWRU5UX0NVU1RPTV9JTklUSUFMX0lEOworCVNw aW5Mb2NrSW5pdCgmV2FpdEV2ZW50Q3VzdG9tQ291bnRlci0+bXV0ZXgpOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90cmFuc2FtLmgKaW5kZXggNmZhOTFiZmNkYzAuLjU1YTRhYjI2YjM0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90cmFuc2FtLmgKQEAgLTM0NSw4ICszNDUsNiBAQCBleHRlcm4gVHJhbnNhY3Rp b25JZCBUcmFuc2FjdGlvbklkTGF0ZXN0KFRyYW5zYWN0aW9uSWQgbWFpbnhpZCwKIGV4dGVy biBYTG9nUmVjUHRyIFRyYW5zYWN0aW9uSWRHZXRDb21taXRMU04oVHJhbnNhY3Rpb25JZCB4 aWQpOwogCiAvKiBpbiB0cmFuc2FtL3ZhcnN1cC5jICovCi1leHRlcm4gU2l6ZSBWYXJzdXBT aG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBWYXJzdXBTaG1lbUluaXQodm9pZCk7CiBl eHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0TmV3VHJhbnNhY3Rpb25JZChib29sIGlzU3Vi WGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlTmV4dEZ1bGxUcmFuc2FjdGlvbklkUGFzdFhp ZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgUmVhZE5l eHRGdWxsVHJhbnNhY3Rpb25JZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvZHNtLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oCmluZGV4IDQwNzY1N2Rm M2ZmLi4xYmRlNzFiNDQwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20u aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbS5oCkBAIC0yNiw5ICsyNiw2IEBAIGV4 dGVybiB2b2lkIGRzbV9wb3N0bWFzdGVyX3N0YXJ0dXAoUEdTaG1lbUhlYWRlciAqKTsKIGV4 dGVybiB2b2lkIGRzbV9iYWNrZW5kX3NodXRkb3duKHZvaWQpOwogZXh0ZXJuIHZvaWQgZHNt X2RldGFjaF9hbGwodm9pZCk7CiAKLWV4dGVybiBzaXplX3QgZHNtX2VzdGltYXRlX3NpemUo dm9pZCk7Ci1leHRlcm4gdm9pZCBkc21fc2htZW1faW5pdCh2b2lkKTsKLQogI2lmZGVmIEVY RUNfQkFDS0VORAogZXh0ZXJuIHZvaWQgZHNtX3NldF9jb250cm9sX2hhbmRsZShkc21faGFu ZGxlIGgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9y ZWdpc3RyeS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaAppbmRleCA1 MDZmYWUyYzljYS4uYTIyNjljODlmMDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvZHNtX3JlZ2lzdHJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0 cnkuaApAQCAtMjIsNyArMjIsNSBAQCBleHRlcm4gZHNhX2FyZWEgKkdldE5hbWVkRFNBKGNv bnN0IGNoYXIgKm5hbWUsIGJvb2wgKmZvdW5kKTsKIGV4dGVybiBkc2hhc2hfdGFibGUgKkdl dE5hbWVkRFNIYXNoKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkJCQljb25zdCBkc2hhc2hf cGFyYW1ldGVycyAqcGFyYW1zLAogCQkJCQkJCQkJYm9vbCAqZm91bmQpOwotZXh0ZXJuIFNp emUgRFNNUmVnaXN0cnlTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBEU01SZWdpc3Ry eVNobWVtSW5pdCh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIERTTV9SRUdJU1RSWV9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKaW5kZXggMjA2ZmI3OGY4YTUuLjAwMWU2ZWVhNjFj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCkBAIC02Niw4ICs2Niw2IEBAIGV4dGVybiBQ R0RMTElNUE9SVCB2b2xhdGlsZSBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7CiAvKgog ICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHBtc2lnbmFsLmMKICAqLwotZXh0ZXJu IFNpemUgUE1TaWduYWxTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBQTVNpZ25hbFNo bWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU2ln bmFsUmVhc29uIHJlYXNvbik7CiBleHRlcm4gYm9vbCBDaGVja1Bvc3RtYXN0ZXJTaWduYWwo UE1TaWduYWxSZWFzb24gcmVhc29uKTsKIGV4dGVybiB2b2lkIFNldFF1aXRTaWduYWxSZWFz b24oUXVpdFNpZ25hbFJlYXNvbiByZWFzb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCAxZGFk MTI1NzA2ZS4uMzcyOWYyMDJmZmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC01NTEsNyArNTUx LDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7CiAgKiBG dW5jdGlvbiBQcm90b3R5cGVzCiAgKi8KIGV4dGVybiBpbnQJUHJvY0dsb2JhbFNlbWFzKHZv aWQpOwotZXh0ZXJuIFNpemUgUHJvY0dsb2JhbFNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2 b2lkIEluaXRQcm9jR2xvYmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3Modm9p ZCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY2Vzc1BoYXNlMih2b2lkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NhcnJheS5oCmluZGV4IGFiZGYwMjFlNjZlLi5kNzE4YTViNTQyZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NhcnJheS5oCkBAIC0xOSw4ICsxOSw2IEBACiAjaW5jbHVkZSAidXRpbHMv c25hcHNob3QuaCIKIAogCi1leHRlcm4gU2l6ZSBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBQ cm9jQXJyYXlBZGQoUEdQUk9DICpwcm9jKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheVJlbW92 ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaAppbmRleCAzNDhmYmE1M2E5My4uMDMxODk3MDE1ZjQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC02Myw5ICs2Myw2IEBAIHR5cGVkZWYgZW51 bQogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBwcm9jc2lnbmFsLmMKICAq LwotZXh0ZXJuIFNpemUgUHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lk IFByb2NTaWduYWxTaG1lbUluaXQodm9pZCk7Ci0KIGV4dGVybiB2b2lkIFByb2NTaWduYWxJ bml0KGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pOwogZXh0 ZXJuIGludAlTZW5kUHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVh c29uLAogCQkJCQkJICAgUHJvY051bWJlciBwcm9jTnVtYmVyKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Np bnZhbGFkdC5oCmluZGV4IDEyMmRiY2RmMTlmLi4yMDhlYTlkMDUxZSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NpbnZhbGFkdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAvKgogICogcHJvdG90eXBlcyBm b3IgZnVuY3Rpb25zIGluIHNpbnZhbGFkdC5jCiAgKi8KLWV4dGVybiBTaXplIFNoYXJlZElu dmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgU2hhcmVkSW52YWxTaG1lbUluaXQo dm9pZCk7CiBleHRlcm4gdm9pZCBTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGJvb2wgc2VuZE9u bHkpOwogCiBleHRlcm4gdm9pZCBTSUluc2VydERhdGFFbnRyaWVzKGNvbnN0IFNoYXJlZElu dmFsaWRhdGlvbk1lc3NhZ2UgKmRhdGEsIGludCBuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJz eXN0ZW1saXN0LmgKaW5kZXggNjVkYTZmMTdjNWQuLjVjMTFiMmIzNDk5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtMjAsNCArMjAsMjMgQEAKICAqIG9mIHRo ZXNlIG1hdHRlci4KICAqLwogCitQR19TSE1FTV9TVUJTWVNURU0oZHNtX3NobWVtX2NhbGxi YWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShEU01SZWdpc3RyeVNobWVtQ2FsbGJhY2tzKQor CisvKiB4bG9nLCBjbG9nLCBhbmQgYnVmZmVycyAqLworUEdfU0hNRU1fU1VCU1lTVEVNKFZh cnN1cFNobWVtQ2FsbGJhY2tzKQorCisvKiBwcm9jZXNzIHRhYmxlICovCitQR19TSE1FTV9T VUJTWVNURU0oUHJvY0dsb2JhbFNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVN KFByb2NBcnJheVNobWVtQ2FsbGJhY2tzKQorCisvKiBzaGFyZWQtaW52YWwgbWVzc2FnaW5n ICovCitQR19TSE1FTV9TVUJTWVNURU0oU2hhcmVkSW52YWxTaG1lbUNhbGxiYWNrcykKKwor LyogaW50ZXJwcm9jZXNzIHNpZ25hbGluZyBtZWNoYW5pc21zICovCitQR19TSE1FTV9TVUJT WVNURU0oUE1TaWduYWxTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShQcm9j U2lnbmFsU2htZW1DYWxsYmFja3MpCisKKy8qIG90aGVyIG1vZHVsZXMgdGhhdCBuZWVkIHNv bWUgc2hhcmVkIG1lbW9yeSBzcGFjZSAqLworUEdfU0hNRU1fU1VCU1lTVEVNKFdhaXRFdmVu dEN1c3RvbVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBv aW50U2htZW1DYWxsYmFja3MpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0 X2V2ZW50LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggMzRjMjdj YzNkYzMuLjg2ZWUzNDgyMjBkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0 X2V2ZW50LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00Miw4 ICs0Miw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCB1aW50MzIgKm15X3dhaXRfZXZlbnRfaW5m bzsKIGV4dGVybiB1aW50MzIgV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KGNvbnN0IGNoYXIgKndh aXRfZXZlbnRfbmFtZSk7CiBleHRlcm4gdWludDMyIFdhaXRFdmVudEluamVjdGlvblBvaW50 TmV3KGNvbnN0IGNoYXIgKndhaXRfZXZlbnRfbmFtZSk7CiAKLWV4dGVybiB2b2lkIFdhaXRF dmVudEN1c3RvbVNobWVtSW5pdCh2b2lkKTsKLWV4dGVybiBTaXplIFdhaXRFdmVudEN1c3Rv bVNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiBjaGFyICoqR2V0V2FpdEV2ZW50Q3VzdG9tTmFt ZXModWludDMyIGNsYXNzSWQsIGludCAqbndhaXRldmVudHMpOwogCiAvKiAtLS0tLS0tLS0t Ci0tIAoyLjQ3LjMKCg== --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0013-Convert-SLRUs-to-use-the-new-interface.patch" Content-Disposition: attachment; filename="v8-0013-Convert-SLRUs-to-use-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA5NWY0YTQzNjdkOGUzMDZmMTY4NzBhMTBlY2M1M2I4YjZlYzM0MWIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMjA6Mzk6NDYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDEzLzE2XSBDb252ZXJ0IFNMUlVzIHRvIHVzZSB0aGUgbmV3 IGludGVyZmFjZQoKSSByZXBsYWNlZCB0aGUgb2xkIFNpbXBsZUxydUluaXQoKSBmdW5jdGlv biB3aXRob3V0IGEgYmFja3dhcmRzCmNvbXBhdGliaWxpdHkgd3JhcHBlciwgYmVjYXVzZSBm ZXcgZXh0ZW5zaW9ucyBkZWZpbmUgdGhlaXIgb3duIFNMUlVzLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAgfCAgNTUgKystLQogc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgICB8ICA5MiArKystLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgfCAxNDAgKysrKystLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICAgIHwgMzY0ICsrKysrKysrKysrKy0t LS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgIHwg IDU3ICsrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgfCAx MTcgKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAg fCAgMTYgLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyAgICAgICAgICB8ICAg NyArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgIHwgMjk5ICsr KysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9z bHJ1LmMgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCAgICAgICAgICAgICAg ICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmggICAgICAgICAgIHwg ICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCAgICAgICAgICAgfCAgIDIg LQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgICB8IDEwNCArKysr LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCAgICAgICAgICAgIHwgICAyIC0K IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmggICAgICAgICAgICAgfCAgIDMgLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaCAgICAgICAgICB8ICAgNSAtCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oICAgICAgfCAgIDggKwogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMgICB8IDExMCArKystLS0tCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICA0ICstCiAyMSBmaWxlcyBjaGFuZ2Vk LCA3MTYgaW5zZXJ0aW9ucygrKSwgNjc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2Nsb2cuYwppbmRleCBjNjU0ZTA5MjliMy4uMmU5YTVjZmExOWUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJw Z190cmFjZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc3luYy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0 aWxzL3dhaXRfZXZlbnQuaCIKQEAgLTEwNiwxMyArMTA3LDIxIEBAIFRyYW5zYWN0aW9uSWRU b1BhZ2UoVHJhbnNhY3Rpb25JZCB4aWQpCiAvKgogICogTGluayB0byBzaGFyZWQtbWVtb3J5 IGRhdGEgc3RydWN0dXJlcyBmb3IgQ0xPRyBjb250cm9sCiAgKi8KLXN0YXRpYyBTbHJ1Q3Rs RGF0YSBYYWN0Q3RsRGF0YTsKK3N0YXRpYyB2b2lkIENMT0dTaG1lbVJlcXVlc3Qodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIENMT0dTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyBi b29sIENMT0dQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRp YyBpbnQJY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9k YXRhKTsKIAotI2RlZmluZSBYYWN0Q3RsICgmWGFjdEN0bERhdGEpCitjb25zdCBTaG1lbUNh bGxiYWNrcyBDTE9HU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBDTE9HU2ht ZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQ0xPR1NobWVtSW5pdCwKK307CisKK3N0YXRpYyBT bHJ1RGVzYyBYYWN0U2xydURlc2M7CisKKyNkZWZpbmUgWGFjdEN0bCAoJlhhY3RTbHJ1RGVz YykKIAogCi1zdGF0aWMgYm9vbCBDTE9HUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2 NCBwYWdlMik7Ci1zdGF0aWMgaW50CWNsb2dfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25z dCB2b2lkICpvcGFxdWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBXcml0ZVRydW5jYXRlWGxvZ1Jl YyhpbnQ2NCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkJIE9p ZCBvbGRlc3RYYWN0RGIpOwogc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0 dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKQEAgLTc3NSwxNiArNzg0LDEw IEBAIENMT0dTaG1lbUJ1ZmZlcnModm9pZCkKIH0KIAogLyoKLSAqIEluaXRpYWxpemF0aW9u IG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkg Zm9yIENMT0cKICAqLwotU2l6ZQotQ0xPR1NobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBT aW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVmZmVycygpLCBDTE9HX0xTTlNfUEVSX1BB R0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQ0xP R1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CiAJLyogSWYgYXV0by10dW5pbmcgaXMgcmVx dWVzdGVkLCBub3cgaXMgdGhlIHRpbWUgdG8gZG8gaXQgKi8KIAlpZiAodHJhbnNhY3Rpb25f YnVmZmVycyA9PSAwKQpAQCAtODA2LDEyICs4MDksMjYgQEAgQ0xPR1NobWVtSW5pdCh2b2lk KQogCQkJCQkJCVBHQ19TX09WRVJSSURFKTsKIAl9CiAJQXNzZXJ0KHRyYW5zYWN0aW9uX2J1 ZmZlcnMgIT0gMCk7CisJU2ltcGxlTHJ1UmVxdWVzdCgmWGFjdFNscnVEZXNjLCAmKFNscnVS ZXF1ZXN0T3B0cykgeworCQkubmFtZSA9ICJ0cmFuc2FjdGlvbiIsCisJCS5EaXIgPSAicGdf eGFjdCIsCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKKworCQkubnNsb3RzID0g Q0xPR1NobWVtQnVmZmVycygpLAorCQkubmxzbnMgPSBDTE9HX0xTTlNfUEVSX1BBR0UsCisK KwkJLnN5bmNfaGFuZGxlciA9IFNZTkNfSEFORExFUl9DTE9HLAorCQkuUGFnZVByZWNlZGVz ID0gQ0xPR1BhZ2VQcmVjZWRlcywKKwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9n X2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCiAKLQlYYWN0Q3RsLT5QYWdlUHJlY2VkZXMgPSBD TE9HUGFnZVByZWNlZGVzOwotCVhhY3RDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBj bG9nX2VycmRldGFpbF9mb3JfaW9fZXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAi dHJhbnNhY3Rpb24iLCBDTE9HU2htZW1CdWZmZXJzKCksIENMT0dfTFNOU19QRVJfUEFHRSwK LQkJCQkgICJwZ194YWN0IiwgTFdUUkFOQ0hFX1hBQ1RfQlVGRkVSLAotCQkJCSAgTFdUUkFO Q0hFX1hBQ1RfU0xSVSwgU1lOQ19IQU5ETEVSX0NMT0csIGZhbHNlKTsKKwkJLmJ1ZmZlcl90 cmFuY2hlX2lkID0gTFdUUkFOQ0hFX1hBQ1RfQlVGRkVSLAorCQkuYmFua190cmFuY2hlX2lk ID0gTFdUUkFOQ0hFX1hBQ1RfU0xSVSwKKwkJfSk7Cit9CisKK3N0YXRpYyB2b2lkCitDTE9H U2htZW1Jbml0KHZvaWQgKmFyZykKK3sKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFhh Y3RDdGwsIENMT0dfWEFDVFNfUEVSX1BBR0UpOwogfQogCkBAIC04MjcsNyArODQ0LDcgQEAg Y2hlY2tfdHJhbnNhY3Rpb25fYnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBH dWNTb3VyY2Ugc291cmNlKQogLyoKICAqIFRoaXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNF IG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3JlYXRlcwogICogdGhlIGluaXRpYWwgQ0xPRyBz ZWdtZW50LiAgKFRoZSBDTE9HIGRpcmVjdG9yeSBpcyBhc3N1bWVkIHRvCi0gKiBoYXZlIGJl ZW4gY3JlYXRlZCBieSBpbml0ZGIsIGFuZCBDTE9HU2htZW1Jbml0IG11c3QgaGF2ZSBiZWVu CisgKiBoYXZlIGJlZW4gY3JlYXRlZCBieSBpbml0ZGIsIGFuZCBDTE9HU2htZW1Jbml0IG11 c3QgaGF2ZSBiZWVuIFhYWAogICogY2FsbGVkIGFscmVhZHkuKQogICovCiB2b2lkCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDM2MjE5ZGQxM2NjLi5k NmU2N2NjODA1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29t bWl0X3RzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMK QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNs dWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIK QEAgLTgwLDkgKzgxLDE5IEBAIFRyYW5zYWN0aW9uSWRUb0NUc1BhZ2UoVHJhbnNhY3Rpb25J ZCB4aWQpCiAvKgogICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBm b3IgQ29tbWl0VHMgY29udHJvbAogICovCi1zdGF0aWMgU2xydUN0bERhdGEgQ29tbWl0VHND dGxEYXRhOworc3RhdGljIHZvaWQgQ29tbWl0VHNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsK K3N0YXRpYyB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0aWMgYm9v bCBDb21taXRUc1BhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOworc3Rh dGljIGludAljb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpv cGFxdWVfZGF0YSk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIENvbW1pdFRzU2htZW1DYWxs YmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBDb21taXRUc1NobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IENvbW1pdFRzU2htZW1Jbml0LAorfTsKKworc3RhdGljIFNscnVEZXNjIENvbW1p dFRzU2xydURlc2M7CiAKLSNkZWZpbmUgQ29tbWl0VHNDdGwgKCZDb21taXRUc0N0bERhdGEp CisjZGVmaW5lIENvbW1pdFRzQ3RsICgmQ29tbWl0VHNTbHJ1RGVzYykKIAogLyoKICAqIFdl IGtlZXAgYSBjYWNoZSBvZiB0aGUgbGFzdCB2YWx1ZSBzZXQgaW4gc2hhcmVkIG1lbW9yeS4K QEAgLTEwNCw2ICsxMTUsOSBAQCB0eXBlZGVmIHN0cnVjdCBDb21taXRUaW1lc3RhbXBTaGFy ZWQKIAogc3RhdGljIENvbW1pdFRpbWVzdGFtcFNoYXJlZCAqY29tbWl0VHNTaGFyZWQ7CiAK K3N0YXRpYyB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgQ29tbWl0VHNTaG1lbURlc2M7CiAKIC8qIEdVQyB2YXJpYWJsZSAq LwogYm9vbAkJdHJhY2tfY29tbWl0X3RpbWVzdGFtcDsKQEAgLTExNCw4ICsxMjgsNiBAQCBz dGF0aWMgdm9pZCBTZXRYaWRDb21taXRUc0luUGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50 IG5zdWJ4aWRzLAogc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5z YWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0cywKIAkJCQkJCQkJCSBSZXBsT3JpZ2luSWQg bm9kZWlkLCBpbnQgc2xvdG5vKTsKIHN0YXRpYyB2b2lkIGVycm9yX2NvbW1pdF90c19kaXNh YmxlZCh2b2lkKTsKLXN0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNlZGVzKGludDY0IHBh Z2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0aWMgaW50CWNvbW1pdF90c19lcnJkZXRhaWxfZm9y X2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0YXRpYyB2b2lkIEFjdGl2 YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMgdm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9p ZCk7CiBzdGF0aWMgdm9pZCBXcml0ZVRydW5jYXRlWGxvZ1JlYyhpbnQ2NCBwYWdlbm8sIFRy YW5zYWN0aW9uSWQgb2xkZXN0WGlkKTsKQEAgLTUxMiwyNCArNTI0LDEyIEBAIENvbW1pdFRz U2htZW1CdWZmZXJzKHZvaWQpCiB9CiAKIC8qCi0gKiBTaGFyZWQgbWVtb3J5IHNpemluZyBm b3IgQ29tbWl0VHMKKyAqIFJlZ2lzdGVyIENvbW1pdFRzIHNoYXJlZCBtZW1vcnkgbmVlZHMg YXQgc3lzdGVtIHN0YXJ0dXAgKHBvc3RtYXN0ZXIgc3RhcnQKKyAqIG9yIHN0YW5kYWxvbmUg YmFja2VuZCkKICAqLwotU2l6ZQotQ29tbWl0VHNTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1 cm4gU2ltcGxlTHJ1U2htZW1TaXplKENvbW1pdFRzU2htZW1CdWZmZXJzKCksIDApICsKLQkJ c2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJlZCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXpl IENvbW1pdFRzIGF0IHN5c3RlbSBzdGFydHVwIChwb3N0bWFzdGVyIHN0YXJ0IG9yIHN0YW5k YWxvbmUKLSAqIGJhY2tlbmQpCi0gKi8KLXZvaWQKLUNvbW1pdFRzU2htZW1Jbml0KHZvaWQp CitzdGF0aWMgdm9pZAorQ29tbWl0VHNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJv b2wJCWZvdW5kOwotCiAJLyogSWYgYXV0by10dW5pbmcgaXMgcmVxdWVzdGVkLCBub3cgaXMg dGhlIHRpbWUgdG8gZG8gaXQgKi8KIAlpZiAoY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzID09 IDApCiAJewpAQCAtNTUwLDMxICs1NTAsMzcgQEAgQ29tbWl0VHNTaG1lbUluaXQodm9pZCkK IAkJCQkJCQlQR0NfU19PVkVSUklERSk7CiAJfQogCUFzc2VydChjb21taXRfdGltZXN0YW1w X2J1ZmZlcnMgIT0gMCk7CisJU2ltcGxlTHJ1UmVxdWVzdCgmQ29tbWl0VHNTbHJ1RGVzYywg JihTbHJ1UmVxdWVzdE9wdHMpIHsKKwkJLm5hbWUgPSAiY29tbWl0X3RpbWVzdGFtcCIsCisJ CS5EaXIgPSAicGdfY29tbWl0X3RzIiwKKwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNl LAorCisJCS5uc2xvdHMgPSBDb21taXRUc1NobWVtQnVmZmVycygpLAorCisJCS5QYWdlUHJl Y2VkZXMgPSBDb21taXRUc1BhZ2VQcmVjZWRlcywKKwkJLmVycmRldGFpbF9mb3JfaW9fZXJy b3IgPSBjb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvciwKKworCQkuc3luY19oYW5k bGVyID0gU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0g TFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9IExXVFJB TkNIRV9DT01NSVRUU19TTFJVLAorCQl9KTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQ29t bWl0VHNTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9 ICJDb21taXRUcyBzaGFyZWQiLAorCQkuc2l6ZSA9IHNpemVvZihDb21taXRUaW1lc3RhbXBT aGFyZWQpLAorCQkucHRyID0gKHZvaWQgKiopICZjb21taXRUc1NoYXJlZCwKKwkJfSk7Cit9 CiAKLQlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7 Ci0JQ29tbWl0VHNDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjb21taXRfdHNfZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcjsKLQlTaW1wbGVMcnVJbml0KENvbW1pdFRzQ3RsLCAiY29t bWl0X3RpbWVzdGFtcCIsIENvbW1pdFRzU2htZW1CdWZmZXJzKCksIDAsCi0JCQkJICAicGdf Y29tbWl0X3RzIiwgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKLQkJCQkgIExXVFJBTkNI RV9DT01NSVRUU19TTFJVLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKLQkJCQkg IGZhbHNlKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKENvbW1pdFRzQ3RsLCBDT01N SVRfVFNfWEFDVFNfUEVSX1BBR0UpOwotCi0JY29tbWl0VHNTaGFyZWQgPSBTaG1lbUluaXRT dHJ1Y3QoIkNvbW1pdFRzIHNoYXJlZCIsCi0JCQkJCQkJCQkgc2l6ZW9mKENvbW1pdFRpbWVz dGFtcFNoYXJlZCksCi0JCQkJCQkJCQkgJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3Rt YXN0ZXIpCi0JewotCQlBc3NlcnQoIWZvdW5kKTsKK3N0YXRpYyB2b2lkCitDb21taXRUc1No bWVtSW5pdCh2b2lkICphcmcpCit7CisJY29tbWl0VHNTaGFyZWQtPnhpZExhc3RDb21taXQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlUSU1FU1RBTVBfTk9CRUdJTihjb21taXRUc1No YXJlZC0+ZGF0YUxhc3RDb21taXQudGltZSk7CisJY29tbWl0VHNTaGFyZWQtPmRhdGFMYXN0 Q29tbWl0Lm5vZGVpZCA9IEludmFsaWRSZXBsT3JpZ2luSWQ7CisJY29tbWl0VHNTaGFyZWQt PmNvbW1pdFRzQWN0aXZlID0gZmFsc2U7CiAKLQkJY29tbWl0VHNTaGFyZWQtPnhpZExhc3RD b21taXQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJVElNRVNUQU1QX05PQkVHSU4oY29t bWl0VHNTaGFyZWQtPmRhdGFMYXN0Q29tbWl0LnRpbWUpOwotCQljb21taXRUc1NoYXJlZC0+ ZGF0YUxhc3RDb21taXQubm9kZWlkID0gSW52YWxpZFJlcGxPcmlnaW5JZDsKLQkJY29tbWl0 VHNTaGFyZWQtPmNvbW1pdFRzQWN0aXZlID0gZmFsc2U7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0 KGZvdW5kKTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKENvbW1pdFRzQ3RsLCBDT01N SVRfVFNfWEFDVFNfUEVSX1BBR0UpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwppbmRleCA5ZjhkNTQyYzA5OC4uZjljYjBlYzhhM2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC04Myw2ICs4Myw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFn ZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVk ZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCkBAIC0xMTMsMTEgKzExNCwxNiBAQCBQcmV2aW91c011bHRpWGFjdElkKE11bHRpWGFj dElkIG11bHRpKQogLyoKICAqIExpbmtzIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1 cmVzIGZvciBNdWx0aVhhY3QgY29udHJvbAogICovCi1zdGF0aWMgU2xydUN0bERhdGEgTXVs dGlYYWN0T2Zmc2V0Q3RsRGF0YTsKLXN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RNZW1i ZXJDdGxEYXRhOworc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGlu dDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50CU11bHRpWGFjdE9mZnNldElv RXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOworc3RhdGljIGJvb2wgTXVs dGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Citz dGF0aWMgaW50CU11bHRpWGFjdE1lbWJlcklvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOworCitzdGF0aWMgU2xydURlc2MgTXVsdGlYYWN0T2Zmc2V0U2xydURlc2M7 CitzdGF0aWMgU2xydURlc2MgTXVsdGlYYWN0TWVtYmVyU2xydURlc2M7CiAKLSNkZWZpbmUg TXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0Q3RsRGF0YSkKLSNkZWZpbmUg TXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YSkKKyNkZWZpbmUg TXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0U2xydURlc2MpCisjZGVmaW5l IE11bHRpWGFjdE1lbWJlckN0bAkoJk11bHRpWGFjdE1lbWJlclNscnVEZXNjKQogCiAvKgog ICogTXVsdGlYYWN0IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRo aXMgc3RhdGUgaXMgcHJvdGVjdGVkCkBAIC0yMjAsNiArMjI2LDE1IEBAIHN0YXRpYyBNdWx0 aVhhY3RTdGF0ZURhdGEgKk11bHRpWGFjdFN0YXRlOwogc3RhdGljIE11bHRpWGFjdElkICpP bGRlc3RNZW1iZXJNWGFjdElkOwogc3RhdGljIE11bHRpWGFjdElkICpPbGRlc3RWaXNpYmxl TVhhY3RJZDsKIAorc3RhdGljIHZvaWQgTXVsdGlYYWN0U2htZW1SZXF1ZXN0KHZvaWQgKmFy Zyk7CitzdGF0aWMgdm9pZCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRp YyB2b2lkIE11bHRpWGFjdFNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVt Q2FsbGJhY2tzIE11bHRpWGFjdFNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0g TXVsdGlYYWN0U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gTXVsdGlYYWN0U2htZW1Jbml0 LAorCS5hdHRhY2hfZm4gPSBNdWx0aVhhY3RTaG1lbUF0dGFjaCwKK307CiAKIHN0YXRpYyBp bmxpbmUgTXVsdGlYYWN0SWQgKgogTXlPbGRlc3RNZW1iZXJNWGFjdElkU2xvdCh2b2lkKQpA QCAtMzIxLDEwICszMzYsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RNZW1iZXJTbHJ1 UmVhZENvbnRleHQKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogfSBNdWx0aVhhY3RNZW1i ZXJTbHJ1UmVhZENvbnRleHQ7CiAKLXN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFBhZ2VQ cmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOwotc3RhdGljIGJvb2wgTXVsdGlY YWN0TWVtYmVyUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7Ci1zdGF0 aWMgaW50CU11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3BhcXVl X2RhdGEpOwotc3RhdGljIGludAlNdWx0aVhhY3RNZW1iZXJJb0Vycm9yRGV0YWlsKGNvbnN0 IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNl dChNdWx0aVhhY3RJZCBtdWx0aSk7CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RNZW1i ZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKTsKIHN0YXRpYyB2b2lk IFNldE9sZGVzdE9mZnNldCh2b2lkKTsKQEAgLTE3NDcsODAgKzE3NTgsODMgQEAgbXVsdGl4 YWN0X3R3b3BoYXNlX3Bvc3RhYm9ydChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50MTYg aW5mbywKIAltdWx0aXhhY3RfdHdvcGhhc2VfcG9zdGNvbW1pdChmeGlkLCBpbmZvLCByZWNk YXRhLCBsZW4pOwogfQogCisKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVt b3J5IGZvciBNdWx0aVhhY3QuCi0gKgotICogTXVsdGlYYWN0U2hhcmVkU3RhdGVTaG1lbVNp emUoKSBjYWxjdWxhdGVzIHRoZSBzaXplIG9mIHRoZSBNdWx0aVhhY3RTdGF0ZQotICogc3Ry dWN0LCBhbmQgdGhlIHR3byBwZXItYmFja2VuZCBNdWx0aVhhY3RJZCBhcnJheXMuICBUaGV5 IGFyZSBjYXJ2ZWQgb3V0IG9mCi0gKiB0aGUgc2FtZSBhbGxvY2F0aW9uLiAgTXVsdGlYYWN0 U2htZW1TaXplKCkgYWRkaXRpb25hbGx5IGluY2x1ZGVzIHRoZSBtZW1vcnkKLSAqIG5lZWRl ZCBmb3IgdGhlIHR3byBTTFJVIGFyZWFzLgorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBu ZWVkcyBmb3IgTXVsdGlYYWN0LgogICovCi1zdGF0aWMgU2l6ZQotTXVsdGlYYWN0U2hhcmVk U3RhdGVTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitNdWx0aVhhY3RTaG1lbVJlcXVl c3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXVsdGlYYWN0U2ht ZW1EZXNjOwogCVNpemUJCXNpemU7CiAKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBv ZiB0aGUgTXVsdGlYYWN0U3RhdGUgc3RydWN0LCBhbmQgdGhlIHR3bworCSAqIHBlci1iYWNr ZW5kIE11bHRpWGFjdElkIGFycmF5cy4gIFRoZXkgYXJlIGNhcnZlZCBvdXQgb2YgdGhlIHNh bWUKKwkgKiBhbGxvY2F0aW9uLgorCSAqLwogCXNpemUgPSBvZmZzZXRvZihNdWx0aVhhY3RT dGF0ZURhdGEsIHBlckJhY2tlbmRYYWN0SWRzKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwK IAkJCQkJbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElkKSwgTnVtTWVtYmVyU2xvdHMpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwKIAkJCQkJbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFj dElkKSwgTnVtVmlzaWJsZVNsb3RzKSk7Ci0JcmV0dXJuIHNpemU7Ci19CisJU2htZW1SZXF1 ZXN0U3RydWN0KCZNdWx0aVhhY3RTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0 cykgeworCQkubmFtZSA9ICJTaGFyZWQgTXVsdGlYYWN0IFN0YXRlIiwKKwkJLnNpemUgPSBz aXplLAorCQkucHRyID0gKHZvaWQgKiopICZNdWx0aVhhY3RTdGF0ZSwKKwkJfSk7CiAKLVNp emUKLU11bHRpWGFjdFNobWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemU7CisJU2ltcGxl THJ1UmVxdWVzdCgmTXVsdGlYYWN0T2Zmc2V0U2xydURlc2MsICYoU2xydVJlcXVlc3RPcHRz KSB7CisJCS5uYW1lID0gIm11bHRpeGFjdF9vZmZzZXQiLAorCQkuRGlyID0gInBnX211bHRp eGFjdC9vZmZzZXRzIiwKKwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNlLAogCi0Jc2l6 ZSA9IE11bHRpWGFjdFNoYXJlZFN0YXRlU2htZW1TaXplKCk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShtdWx0aXhhY3Rfb2Zmc2V0X2J1ZmZlcnMsIDAp KTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKG11bHRpeGFj dF9tZW1iZXJfYnVmZmVycywgMCkpOworCQkubnNsb3RzID0gbXVsdGl4YWN0X29mZnNldF9i dWZmZXJzLAogCi0JcmV0dXJuIHNpemU7Ci19CisJCS5zeW5jX2hhbmRsZXIgPSBTWU5DX0hB TkRMRVJfTVVMVElYQUNUX09GRlNFVCwKKwkJLlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE9m ZnNldFBhZ2VQcmVjZWRlcywKKwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBNdWx0aVhh Y3RPZmZzZXRJb0Vycm9yRGV0YWlsLAogCi12b2lkCi1NdWx0aVhhY3RTaG1lbUluaXQodm9p ZCkKLXsKLQlib29sCQlmb3VuZDsKKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdUUkFOQ0hF X01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5D SEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUsCisJCX0pOwogCi0JZGVidWdfZWxvZzIoREVCVUcy LCAiU2hhcmVkIE1lbW9yeSBJbml0IGZvciBNdWx0aVhhY3QiKTsKKwlTaW1wbGVMcnVSZXF1 ZXN0KCZNdWx0aVhhY3RNZW1iZXJTbHJ1RGVzYywgJihTbHJ1UmVxdWVzdE9wdHMpIHsKKwkJ Lm5hbWUgPSAibXVsdGl4YWN0X21lbWJlciIsCisJCS5EaXIgPSAicGdfbXVsdGl4YWN0L21l bWJlcnMiLAorCQkubG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZSwKIAotCU11bHRpWGFjdE9m ZnNldEN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzOwot CU11bHRpWGFjdE1lbWJlckN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFn ZVByZWNlZGVzOwotCU11bHRpWGFjdE9mZnNldEN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJv ciA9IE11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWw7Ci0JTXVsdGlYYWN0TWVtYmVyQ3Rs LT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0TWVtYmVySW9FcnJvckRldGFp bDsKKwkJLm5zbG90cyA9IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVycywKIAotCVNpbXBsZUxy dUluaXQoTXVsdGlYYWN0T2Zmc2V0Q3RsLAotCQkJCSAgIm11bHRpeGFjdF9vZmZzZXQiLCBt dWx0aXhhY3Rfb2Zmc2V0X2J1ZmZlcnMsIDAsCi0JCQkJICAicGdfbXVsdGl4YWN0L29mZnNl dHMiLCBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKLQkJCQkgIExXVFJBTkNI RV9NVUxUSVhBQ1RPRkZTRVRfU0xSVSwKLQkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1Rf T0ZGU0VULAotCQkJCSAgZmFsc2UpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoTXVs dGlYYWN0T2Zmc2V0Q3RsLCBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSk7Ci0JU2ltcGxl THJ1SW5pdChNdWx0aVhhY3RNZW1iZXJDdGwsCi0JCQkJICAibXVsdGl4YWN0X21lbWJlciIs IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVycywgMCwKLQkJCQkgICJwZ19tdWx0aXhhY3QvbWVt YmVycyIsIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAotCQkJCSAgTFdUUkFO Q0hFX01VTFRJWEFDVE1FTUJFUl9TTFJVLAotCQkJCSAgU1lOQ19IQU5ETEVSX01VTFRJWEFD VF9NRU1CRVIsCi0JCQkJICB0cnVlKTsKLQkvKiBkb2Vzbid0IGNhbGwgU2ltcGxlTHJ1VHJ1 bmNhdGUoKSBvciBtZWV0IGNyaXRlcmlhIGZvciB1bml0IHRlc3RzICovCi0KLQkvKiBJbml0 aWFsaXplIG91ciBzaGFyZWQgc3RhdGUgc3RydWN0ICovCi0JTXVsdGlYYWN0U3RhdGUgPSBT aG1lbUluaXRTdHJ1Y3QoIlNoYXJlZCBNdWx0aVhhY3QgU3RhdGUiLAotCQkJCQkJCQkJIE11 bHRpWGFjdFNoYXJlZFN0YXRlU2htZW1TaXplKCksCi0JCQkJCQkJCQkgJmZvdW5kKTsKLQlp ZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJQXNzZXJ0KCFmb3VuZCk7CisJCS5zeW5j X2hhbmRsZXIgPSBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUiwKKwkJLlBhZ2VQcmVj ZWRlcyA9IE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcywKKwkJLmVycmRldGFpbF9mb3Jf aW9fZXJyb3IgPSBNdWx0aVhhY3RNZW1iZXJJb0Vycm9yRGV0YWlsLAogCi0JCS8qIE1ha2Ug c3VyZSB3ZSB6ZXJvIG91dCB0aGUgcGVyLWJhY2tlbmQgc3RhdGUgKi8KLQkJTWVtU2V0KE11 bHRpWGFjdFN0YXRlLCAwLCBNdWx0aVhhY3RTaGFyZWRTdGF0ZVNobWVtU2l6ZSgpKTsKLQl9 Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOworCQkuYnVmZmVyX3RyYW5jaGVfaWQgPSBMV1RS QU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9IExX VFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfU0xSVSwKKwkJfSk7CiAKKwkvKgorCSAqIG1lbWJl cnMgU0xSVSBkb2Vzbid0IGNhbGwgU2ltcGxlTHJ1VHJ1bmNhdGUoKSBvciBtZWV0IGNyaXRl cmlhIGZvciB1bml0CisJICogdGVzdHMKKwkgKi8KK30KKworc3RhdGljIHZvaWQKK011bHRp WGFjdFNobWVtSW5pdCh2b2lkICphcmcpCit7CisJLyoKKwkgKiBTZXQgdXAgYXJyYXkgcG9p bnRlcnMuCisJICovCisJT2xkZXN0TWVtYmVyTVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5w ZXJCYWNrZW5kWGFjdElkczsKKwlPbGRlc3RWaXNpYmxlTVhhY3RJZCA9IE9sZGVzdE1lbWJl ck1YYWN0SWQgKyBOdW1NZW1iZXJTbG90czsKKworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVz dHMoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSk7Cit9 CisKK3N0YXRpYyB2b2lkCitNdWx0aVhhY3RTaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CiAJ LyoKIAkgKiBTZXQgdXAgYXJyYXkgcG9pbnRlcnMuCiAJICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9zbHJ1LmMKaW5kZXggYTJiYjhmYTgwMzMuLmMzZmUwMGQ0MDM5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vc2xydS5jCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJ1dGls cy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3dhaXRfZXZlbnQuaCIKIAogLyoKQEAgLTg5LDkgKzkwLDkgQEAKICAqICBkaXIvMTIzNDU2 IGZvciBbMl4yMCwgMl4yNC0xXQogICovCiBzdGF0aWMgaW5saW5lIGludAotU2xydUZpbGVO YW1lKFNscnVDdGwgY3RsLCBjaGFyICpwYXRoLCBpbnQ2NCBzZWdubykKK1NscnVGaWxlTmFt ZShTbHJ1RGVzYyAqY3RsLCBjaGFyICpwYXRoLCBpbnQ2NCBzZWdubykKIHsKLQlpZiAoY3Rs LT5sb25nX3NlZ21lbnRfbmFtZXMpCisJaWYgKGN0bC0+b3B0aW9ucy5sb25nX3NlZ21lbnRf bmFtZXMpCiAJewogCQkvKgogCQkgKiBXZSBjb3VsZCB1c2UgMTYgY2hhcmFjdGVycyBoZXJl IGJ1dCB0aGUgZGlzYWR2YW50YWdlIHdvdWxkIGJlIHRoYXQKQEAgLTEwMSw3ICsxMDIsNyBA QCBTbHJ1RmlsZU5hbWUoU2xydUN0bCBjdGwsIGNoYXIgKnBhdGgsIGludDY0IHNlZ25vKQog CQkgKiB0aGF0IGluIHRoZSBmdXR1cmUgd2UgY2FuJ3QgZGVjcmVhc2UgU0xSVV9QQUdFU19Q RVJfU0VHTUVOVCBlYXNpbHkuCiAJCSAqLwogCQlBc3NlcnQoc2Vnbm8gPj0gMCAmJiBzZWdu byA8PSBJTlQ2NENPTlNUKDB4RkZGRkZGRkZGRkZGRkZGKSk7Ci0JCXJldHVybiBzbnByaW50 ZihwYXRoLCBNQVhQR1BBVEgsICIlcy8lMDE1IiBQUklYNjQsIGN0bC0+RGlyLCBzZWdubyk7 CisJCXJldHVybiBzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIlcy8lMDE1IiBQUklYNjQs IGN0bC0+b3B0aW9ucy5EaXIsIHNlZ25vKTsKIAl9CiAJZWxzZQogCXsKQEAgLTExMCw3ICsx MTEsNyBAQCBTbHJ1RmlsZU5hbWUoU2xydUN0bCBjdGwsIGNoYXIgKnBhdGgsIGludDY0IHNl Z25vKQogCQkgKiBpbnRlZ2VycyBhcmUgYWxsb3dlZC4gU2VlIFNscnVDb3JyZWN0U2VnbWVu dEZpbGVuYW1lTGVuZ3RoKCkKIAkJICovCiAJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25v IDw9IElOVDY0Q09OU1QoMHhGRkZGRkYpKTsKLQkJcmV0dXJuIHNucHJpbnRmKHBhdGgsIE1B WFBHUEFUSCwgIiVzLyUwNFgiLCAoY3RsKS0+RGlyLAorCQlyZXR1cm4gc25wcmludGYocGF0 aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwpLT5vcHRpb25zLkRpciwKIAkJCQkJCSh1 bnNpZ25lZCBpbnQpIHNlZ25vKTsKIAl9CiB9CkBAIC0xNzYsMTkgKzE3NywxOSBAQCBzdGF0 aWMgU2xydUVycm9yQ2F1c2Ugc2xydV9lcnJjYXVzZTsKIHN0YXRpYyBpbnQJc2xydV9lcnJu bzsKIAogCi1zdGF0aWMgdm9pZCBTaW1wbGVMcnVaZXJvTFNOcyhTbHJ1Q3RsIGN0bCwgaW50 IHNsb3Rubyk7Ci1zdGF0aWMgdm9pZCBTaW1wbGVMcnVXYWl0SU8oU2xydUN0bCBjdGwsIGlu dCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwg Y3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIGJvb2wgU2xy dVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3Ru byk7Ci1zdGF0aWMgYm9vbCBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGlu dDY0IHBhZ2VubywgaW50IHNsb3RubywKK3N0YXRpYyB2b2lkIFNpbXBsZUxydVplcm9MU05z KFNscnVEZXNjICpjdGwsIGludCBzbG90bm8pOworc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2Fp dElPKFNscnVEZXNjICpjdGwsIGludCBzbG90bm8pOworc3RhdGljIHZvaWQgU2xydUludGVy bmFsV3JpdGVQYWdlKFNscnVEZXNjICpjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBm ZGF0YSk7CitzdGF0aWMgYm9vbCBTbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1RGVzYyAqY3Rs LCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8pOworc3RhdGljIGJvb2wgU2xydVBoeXNpY2Fs V3JpdGVQYWdlKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubywKIAkJ CQkJCQkJICBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIHZvaWQgU2xydVJlcG9ydElP RXJyb3IoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywKK3N0YXRpYyB2b2lkIFNscnVSZXBv cnRJT0Vycm9yKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywKIAkJCQkJCQkgIGNvbnN0 IHZvaWQgKm9wYXF1ZV9kYXRhKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2UoU2xy dUN0bCBjdGwsIGludDY0IHBhZ2Vubyk7CitzdGF0aWMgaW50CVNscnVTZWxlY3RMUlVQYWdl KFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2Vubyk7CiAKLXN0YXRpYyBib29sIFNscnVTY2Fu RGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLAorc3RhdGlj IGJvb2wgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1RGVzYyAqY3RsLCBjaGFyICpm aWxlbmFtZSwKIAkJCQkJCQkJCSAgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1zdGF0 aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQ2NCBz ZWdubyk7CitzdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVEZXNj ICpjdGwsIGludDY0IHNlZ25vKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBTbHJ1UmVjZW50bHlV c2VkKFNscnVTaGFyZWQgc2hhcmVkLCBpbnQgc2xvdG5vKTsKIAogCkBAIC0xOTYsNyArMTk3 LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIFNscnVSZWNlbnRseVVzZWQoU2xydVNoYXJlZCBz aGFyZWQsIGludCBzbG90bm8pOwogICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9y eQogICovCiAKLVNpemUKK3N0YXRpYyBTaXplCiBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5z bG90cywgaW50IG5sc25zKQogewogCWludAkJCW5iYW5rcyA9IG5zbG90cyAvIFNMUlVfQkFO S19TSVpFOwpAQCAtMjM4LDEyMCArMjM5LDEzNCBAQCBTaW1wbGVMcnVBdXRvdHVuZUJ1ZmZl cnMoaW50IGRpdmlzb3IsIGludCBtYXgpCiB9CiAKIC8qCi0gKiBJbml0aWFsaXplLCBvciBh dHRhY2ggdG8sIGEgc2ltcGxlIExSVSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5LgotICoKLSAq IGN0bDogYWRkcmVzcyBvZiBsb2NhbCAodW5zaGFyZWQpIGNvbnRyb2wgc3RydWN0dXJlLgot ICogbmFtZTogbmFtZSBvZiBTTFJVLiAgKFRoaXMgaXMgdXNlci12aXNpYmxlLCBwaWNrIHdp dGggY2FyZSEpCi0gKiBuc2xvdHM6IG51bWJlciBvZiBwYWdlIHNsb3RzIHRvIHVzZS4KLSAq IG5sc25zOiBudW1iZXIgb2YgTFNOIGdyb3VwcyBwZXIgcGFnZSAoc2V0IHRvIHplcm8gaWYg bm90IHJlbGV2YW50KS4KLSAqIHN1YmRpcjogUEdEQVRBLXJlbGF0aXZlIHN1YmRpcmVjdG9y eSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZmlsZXMuCi0gKiBidWZmZXJfdHJhbmNoZV9pZDog dHJhbmNoZSBJRCB0byB1c2UgZm9yIHRoZSBTTFJVJ3MgcGVyLWJ1ZmZlciBMV0xvY2tzLgot ICogYmFua190cmFuY2hlX2lkOiB0cmFuY2hlIElEIHRvIHVzZSBmb3IgdGhlIGJhbmsgTFdM b2Nrcy4KLSAqIHN5bmNfaGFuZGxlcjogd2hpY2ggc2V0IG9mIGZ1bmN0aW9ucyB0byB1c2Ug dG8gaGFuZGxlIHN5bmMgcmVxdWVzdHMKLSAqIGxvbmdfc2VnbWVudF9uYW1lczogdXNlIHNo b3J0IG9yIGxvbmcgc2VnbWVudCBuYW1lcworICogUmVnaXN0ZXIgYSBzaW1wbGUgTFJVIGNh Y2hlIGluIHNoYXJlZCBtZW1vcnkuCiAgKi8KIHZvaWQKLVNpbXBsZUxydUluaXQoU2xydUN0 bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCSAg Y29uc3QgY2hhciAqc3ViZGlyLCBpbnQgYnVmZmVyX3RyYW5jaGVfaWQsIGludCBiYW5rX3Ry YW5jaGVfaWQsCi0JCQkgIFN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIsIGJvb2wg bG9uZ19zZWdtZW50X25hbWVzKQorU2ltcGxlTHJ1UmVxdWVzdChTbHJ1RGVzYyAqZGVzYywg Y29uc3QgU2xydVJlcXVlc3RPcHRzICpvcHRpb25zKQogeworCVNscnVSZXF1ZXN0T3B0cyAq b3B0aW9uc19jb3B5OworCisJQXNzZXJ0KG9wdGlvbnMtPm5hbWUgIT0gTlVMTCk7CisJQXNz ZXJ0KG9wdGlvbnMtPm5zbG90cyA+IDApOworCUFzc2VydChvcHRpb25zLT5QYWdlUHJlY2Vk ZXMgIT0gTlVMTCk7CisJQXNzZXJ0KG9wdGlvbnMtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Ig IT0gTlVMTCk7CisKKwlvcHRpb25zX2NvcHkgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgc2l6ZW9mKFNscnVSZXF1ZXN0T3B0cykpOworCW1l bWNweShvcHRpb25zX2NvcHksIG9wdGlvbnMsIHNpemVvZihTbHJ1UmVxdWVzdE9wdHMpKTsK KworCW9wdGlvbnNfY29weS0+YmFzZS5uYW1lID0gb3B0aW9ucy0+bmFtZTsKKwlvcHRpb25z X2NvcHktPmJhc2Uuc2l6ZSA9IFNpbXBsZUxydVNobWVtU2l6ZShvcHRpb25zX2NvcHktPm5z bG90cywgb3B0aW9uc19jb3B5LT5ubHNucyk7CisKKwlTaG1lbVJlcXVlc3RJbnRlcm5hbCgm ZGVzYy0+YmFzZSwgJm9wdGlvbnNfY29weS0+YmFzZSwgU0hNRU1fS0lORF9TTFJVKTsKK30K KworLyogSW5pdGlhbGl6ZSBsb2NrcyBhbmQgc2hhcmVkIG1lbW9yeSBhcmVhICovCit2b2lk CitzaG1lbV9zbHJ1X2luaXQoU2htZW1TdHJ1Y3REZXNjICpiYXNlX2Rlc2MsIGNvbnN0IFNo bWVtUmVxdWVzdFN0cnVjdE9wdHMgKmJhc2Vfb3B0aW9ucykKK3sKKwljb25zdCBTbHJ1UmVx dWVzdE9wdHMgKm9wdGlvbnMgPSAoU2xydVJlcXVlc3RPcHRzICopIGJhc2Vfb3B0aW9uczsK KwlTbHJ1RGVzYyAgICpkZXNjID0gKFNscnVEZXNjICopIGJhc2VfZGVzYzsKKwljaGFyCQlu YW1lYnVmW05BTUVEQVRBTEVOXTsKIAlTbHJ1U2hhcmVkCXNoYXJlZDsKLQlib29sCQlmb3Vu ZDsKKwlpbnQJCQluc2xvdHMgPSBvcHRpb25zLT5uc2xvdHM7CiAJaW50CQkJbmJhbmtzID0g bnNsb3RzIC8gU0xSVV9CQU5LX1NJWkU7CisJaW50CQkJbmxzbnMgPSBvcHRpb25zLT5ubHNu czsKKwljaGFyCSAgICpwdHI7CisJU2l6ZQkJb2Zmc2V0OworCisJc2hhcmVkID0gZGVzYy0+ c2hhcmVkID0gKFNscnVTaGFyZWQpIGRlc2MtPmJhc2UucHRyOworCWRlc2MtPm5iYW5rcyA9 IG5iYW5rczsKKwltZW1jcHkoJmRlc2MtPm9wdGlvbnMsIG9wdGlvbnMsIHNpemVvZihTbHJ1 UmVxdWVzdE9wdHMpKTsKKworCS8qIGFzc2lnbiBuZXcgdHJhbmNoZSBJRHMsIGlmIG5vdCBn aXZlbiAqLworCWlmIChkZXNjLT5vcHRpb25zLmJ1ZmZlcl90cmFuY2hlX2lkID09IDApCisJ eworCQlzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICIlcyBidWZmZXIiLCBk ZXNjLT5vcHRpb25zLm5hbWUpOworCQlkZXNjLT5vcHRpb25zLmJ1ZmZlcl90cmFuY2hlX2lk ID0gTFdMb2NrTmV3VHJhbmNoZUlkKG5hbWVidWYpOworCX0KKwlpZiAoZGVzYy0+b3B0aW9u cy5iYW5rX3RyYW5jaGVfaWQgPT0gMCkKKwl7CisJCXNucHJpbnRmKG5hbWVidWYsIHNpemVv ZihuYW1lYnVmKSwgIiVzIGJhbmsiLCBkZXNjLT5vcHRpb25zLm5hbWUpOworCQlkZXNjLT5v cHRpb25zLmJhbmtfdHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZChuYW1lYnVmKTsK Kwl9CiAKIAlBc3NlcnQobnNsb3RzIDw9IFNMUlVfTUFYX0FMTE9XRURfQlVGRkVSUyk7CiAK LQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KGN0bC0+ZXJy ZGV0YWlsX2Zvcl9pb19lcnJvciAhPSBOVUxMKTsKKwltZW1zZXQoc2hhcmVkLCAwLCBzaXpl b2YoU2xydVNoYXJlZERhdGEpKTsKIAotCXNoYXJlZCA9IChTbHJ1U2hhcmVkKSBTaG1lbUlu aXRTdHJ1Y3QobmFtZSwKLQkJCQkJCQkJCQkgIFNpbXBsZUxydVNobWVtU2l6ZShuc2xvdHMs IG5sc25zKSwKLQkJCQkJCQkJCQkgICZmb3VuZCk7CisJc2hhcmVkLT5udW1fc2xvdHMgPSBu c2xvdHM7CisJc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID0gbmxzbnM7CiAKLQlpZiAo IUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJLyogSW5pdGlhbGl6ZSBsb2NrcyBhbmQgc2hh cmVkIG1lbW9yeSBhcmVhICovCi0JCWNoYXIJICAgKnB0cjsKLQkJU2l6ZQkJb2Zmc2V0Owot Ci0JCUFzc2VydCghZm91bmQpOwotCi0JCW1lbXNldChzaGFyZWQsIDAsIHNpemVvZihTbHJ1 U2hhcmVkRGF0YSkpOwotCi0JCXNoYXJlZC0+bnVtX3Nsb3RzID0gbnNsb3RzOwotCQlzaGFy ZWQtPmxzbl9ncm91cHNfcGVyX3BhZ2UgPSBubHNuczsKLQotCQlwZ19hdG9taWNfaW5pdF91 NjQoJnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyLCAwKTsKLQotCQlzaGFyZWQtPnNscnVf c3RhdHNfaWR4ID0gcGdzdGF0X2dldF9zbHJ1X2luZGV4KG5hbWUpOwotCi0JCXB0ciA9IChj aGFyICopIHNoYXJlZDsKLQkJb2Zmc2V0ID0gTUFYQUxJR04oc2l6ZW9mKFNscnVTaGFyZWRE YXRhKSk7Ci0JCXNoYXJlZC0+cGFnZV9idWZmZXIgPSAoY2hhciAqKikgKHB0ciArIG9mZnNl dCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoY2hhciAqKSk7Ci0J CXNoYXJlZC0+cGFnZV9zdGF0dXMgPSAoU2xydVBhZ2VTdGF0dXMgKikgKHB0ciArIG9mZnNl dCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoU2xydVBhZ2VTdGF0 dXMpKTsKLQkJc2hhcmVkLT5wYWdlX2RpcnR5ID0gKGJvb2wgKikgKHB0ciArIG9mZnNldCk7 Ci0JCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoYm9vbCkpOwotCQlzaGFy ZWQtPnBhZ2VfbnVtYmVyID0gKGludDY0ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQg Kz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludDY0KSk7Ci0JCXNoYXJlZC0+cGFnZV9s cnVfY291bnQgPSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJ R04obnNsb3RzICogc2l6ZW9mKGludCkpOwotCi0JCS8qIEluaXRpYWxpemUgTFdMb2NrcyAq LwotCQlzaGFyZWQtPmJ1ZmZlcl9sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9m ZnNldCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFk ZGVkKSk7Ci0JCXNoYXJlZC0+YmFua19sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciAr IG9mZnNldCk7Ci0JCW9mZnNldCArPSBNQVhBTElHTihuYmFua3MgKiBzaXplb2YoTFdMb2Nr UGFkZGVkKSk7Ci0JCXNoYXJlZC0+YmFua19jdXJfbHJ1X2NvdW50ID0gKGludCAqKSAocHRy ICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5iYW5rcyAqIHNpemVvZihpbnQp KTsKLQotCQlpZiAobmxzbnMgPiAwKQotCQl7Ci0JCQlzaGFyZWQtPmdyb3VwX2xzbiA9IChY TG9nUmVjUHRyICopIChwdHIgKyBvZmZzZXQpOwotCQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5z bG90cyAqIG5sc25zICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsKLQkJfQorCXBnX2F0b21pY19p bml0X3U2NCgmc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIsIDApOwogCi0JCXB0ciArPSBC VUZGRVJBTElHTihvZmZzZXQpOwotCQlmb3IgKGludCBzbG90bm8gPSAwOyBzbG90bm8gPCBu c2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZzaGFyZWQtPmJ1 ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssCi0JCQkJCQkJIGJ1ZmZlcl90cmFuY2hlX2lkKTsK KwlzaGFyZWQtPnNscnVfc3RhdHNfaWR4ID0gcGdzdGF0X2dldF9zbHJ1X2luZGV4KGRlc2Mt Pm9wdGlvbnMubmFtZSk7CiAKLQkJCXNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSA9IHB0 cjsKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsK LQkJCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gZmFsc2U7Ci0JCQlzaGFyZWQtPnBh Z2VfbHJ1X2NvdW50W3Nsb3Rub10gPSAwOwotCQkJcHRyICs9IEJMQ0tTWjsKLQkJfQorCXB0 ciA9IChjaGFyICopIHNoYXJlZDsKKwlvZmZzZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNo YXJlZERhdGEpKTsKKwlzaGFyZWQtPnBhZ2VfYnVmZmVyID0gKGNoYXIgKiopIChwdHIgKyBv ZmZzZXQpOworCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBzaXplb2YoY2hhciAqKSk7 CisJc2hhcmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1UGFnZVN0YXR1cyAqKSAocHRyICsgb2Zm c2V0KTsKKwlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKFNscnVQYWdlU3Rh dHVzKSk7CisJc2hhcmVkLT5wYWdlX2RpcnR5ID0gKGJvb2wgKikgKHB0ciArIG9mZnNldCk7 CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihib29sKSk7CisJc2hhcmVk LT5wYWdlX251bWJlciA9IChpbnQ2NCAqKSAocHRyICsgb2Zmc2V0KTsKKwlvZmZzZXQgKz0g TUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludDY0KSk7CisJc2hhcmVkLT5wYWdlX2xydV9j b3VudCA9IChpbnQgKikgKHB0ciArIG9mZnNldCk7CisJb2Zmc2V0ICs9IE1BWEFMSUdOKG5z bG90cyAqIHNpemVvZihpbnQpKTsKIAotCQkvKiBJbml0aWFsaXplIHRoZSBzbG90IGJhbmtz LiAqLwotCQlmb3IgKGludCBiYW5rbm8gPSAwOyBiYW5rbm8gPCBuYmFua3M7IGJhbmtubysr KQotCQl7Ci0JCQlMV0xvY2tJbml0aWFsaXplKCZzaGFyZWQtPmJhbmtfbG9ja3NbYmFua25v XS5sb2NrLCBiYW5rX3RyYW5jaGVfaWQpOwotCQkJc2hhcmVkLT5iYW5rX2N1cl9scnVfY291 bnRbYmFua25vXSA9IDA7Ci0JCX0KKwkvKiBJbml0aWFsaXplIExXTG9ja3MgKi8KKwlzaGFy ZWQtPmJ1ZmZlcl9sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNldCk7CisJ b2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihMV0xvY2tQYWRkZWQpKTsKKwlz aGFyZWQtPmJhbmtfbG9ja3MgPSAoTFdMb2NrUGFkZGVkICopIChwdHIgKyBvZmZzZXQpOwor CW9mZnNldCArPSBNQVhBTElHTihuYmFua3MgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7CisJ c2hhcmVkLT5iYW5rX2N1cl9scnVfY291bnQgPSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwor CW9mZnNldCArPSBNQVhBTElHTihuYmFua3MgKiBzaXplb2YoaW50KSk7CiAKLQkJLyogU2hv dWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0gc2l6ZSAqLwotCQlBc3NlcnQocHRyIC0gKGNo YXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7CisJ aWYgKG5sc25zID4gMCkKKwl7CisJCXNoYXJlZC0+Z3JvdXBfbHNuID0gKFhMb2dSZWNQdHIg KikgKHB0ciArIG9mZnNldCk7CisJCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBubHNu cyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CiAJfQotCWVsc2UKKworCXB0ciArPSBCVUZGRVJB TElHTihvZmZzZXQpOworCWZvciAoaW50IHNsb3RubyA9IDA7IHNsb3RubyA8IG5zbG90czsg c2xvdG5vKyspCiAJewotCQlBc3NlcnQoZm91bmQpOwotCQlBc3NlcnQoc2hhcmVkLT5udW1f c2xvdHMgPT0gbnNsb3RzKTsKKwkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5idWZmZXJf bG9ja3Nbc2xvdG5vXS5sb2NrLAorCQkJCQkJIGRlc2MtPm9wdGlvbnMuYnVmZmVyX3RyYW5j aGVfaWQpOworCisJCXNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSA9IHB0cjsKKwkJc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOworCQlzaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOworCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50 W3Nsb3Rub10gPSAwOworCQlwdHIgKz0gQkxDS1NaOwogCX0KIAotCS8qCi0JICogSW5pdGlh bGl6ZSB0aGUgdW5zaGFyZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBkaXJlY3Rvcnkg cGF0aC4gV2UKLQkgKiBhc3N1bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0JICovCi0J Y3RsLT5zaGFyZWQgPSBzaGFyZWQ7Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hhbmRs ZXI7Ci0JY3RsLT5sb25nX3NlZ21lbnRfbmFtZXMgPSBsb25nX3NlZ21lbnRfbmFtZXM7Ci0J Y3RsLT5uYmFua3MgPSBuYmFua3M7Ci0Jc3RybGNweShjdGwtPkRpciwgc3ViZGlyLCBzaXpl b2YoY3RsLT5EaXIpKTsKKwkvKiBJbml0aWFsaXplIHRoZSBzbG90IGJhbmtzLiAqLworCWZv ciAoaW50IGJhbmtubyA9IDA7IGJhbmtubyA8IG5iYW5rczsgYmFua25vKyspCisJeworCQlM V0xvY2tJbml0aWFsaXplKCZzaGFyZWQtPmJhbmtfbG9ja3NbYmFua25vXS5sb2NrLCBkZXNj LT5vcHRpb25zLmJhbmtfdHJhbmNoZV9pZCk7CisJCXNoYXJlZC0+YmFua19jdXJfbHJ1X2Nv dW50W2Jhbmtub10gPSAwOworCX0KKworCS8qIFNob3VsZCBmaXQgdG8gZXN0aW1hdGVkIHNo bWVtIHNpemUgKi8KKwlBc3NlcnQocHRyIC0gKGNoYXIgKikgc2hhcmVkIDw9IFNpbXBsZUxy dVNobWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7Cit9CisKK3ZvaWQKK3NobWVtX3NscnVfYXR0 YWNoKFNobWVtU3RydWN0RGVzYyAqYmFzZV9kZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RTdHJ1 Y3RPcHRzICpiYXNlX29wdGlvbnMpCit7CisJY29uc3QgU2xydVJlcXVlc3RPcHRzICpvcHRp b25zID0gKFNscnVSZXF1ZXN0T3B0cyAqKSBiYXNlX29wdGlvbnM7CisJU2xydURlc2MgICAq ZGVzYyA9IChTbHJ1RGVzYyAqKSBiYXNlX2Rlc2M7CisJaW50CQkJbnNsb3RzID0gb3B0aW9u cy0+bnNsb3RzOworCWludAkJCW5iYW5rcyA9IG5zbG90cyAvIFNMUlVfQkFOS19TSVpFOwor CisJZGVzYy0+c2hhcmVkID0gKFNscnVTaGFyZWQpIGRlc2MtPmJhc2UucHRyOworCWRlc2Mt Pm5iYW5rcyA9IG5iYW5rczsKKwltZW1jcHkoJmRlc2MtPm9wdGlvbnMsIG9wdGlvbnMsIHNp emVvZihTbHJ1UmVxdWVzdE9wdHMpKTsKIH0KIAorCiAvKgogICogSGVscGVyIGZ1bmN0aW9u IGZvciBHVUMgY2hlY2tfaG9vayB0byBjaGVjayB3aGV0aGVyIHNscnUgYnVmZmVycyBhcmUg aW4KICAqIG11bHRpcGxlcyBvZiBTTFJVX0JBTktfU0laRS4KQEAgLTM3Nyw3ICszOTIsNyBA QCBjaGVja19zbHJ1X2J1ZmZlcnMoY29uc3QgY2hhciAqbmFtZSwgaW50ICpuZXd2YWwpCiAg KiBCYW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0 IGV4aXQuCiAgKi8KIGludAotU2ltcGxlTHJ1WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludDY0 IHBhZ2VubykKK1NpbXBsZUxydVplcm9QYWdlKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2Vu bykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludAkJCXNsb3Ru bzsKQEAgLTQzMCw3ICs0NDUsNyBAQCBTaW1wbGVMcnVaZXJvUGFnZShTbHJ1Q3RsIGN0bCwg aW50NjQgcGFnZW5vKQogICogVGhpcyBhc3N1bWVzIHRoYXQgSW52YWxpZFhMb2dSZWNQdHIg aXMgYml0d2lzZS1hbGwtMC4KICAqLwogc3RhdGljIHZvaWQKLVNpbXBsZUxydVplcm9MU05z KFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQorU2ltcGxlTHJ1WmVyb0xTTnMoU2xydURlc2Mg KmN0bCwgaW50IHNsb3RubykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwogCkBAIC00NDYsNyArNDYxLDcgQEAgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGws IGludCBzbG90bm8pCiAgKiBTTFJVIGJhbmsgbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFz ZWQgaGVyZS4KICAqLwogdm9pZAotU2ltcGxlTHJ1WmVyb0FuZFdyaXRlUGFnZShTbHJ1Q3Rs IGN0bCwgaW50NjQgcGFnZW5vKQorU2ltcGxlTHJ1WmVyb0FuZFdyaXRlUGFnZShTbHJ1RGVz YyAqY3RsLCBpbnQ2NCBwYWdlbm8pCiB7CiAJaW50CQkJc2xvdG5vOwogCUxXTG9jawkgICAq bG9jazsKQEAgLTQ3Miw3ICs0ODcsNyBAQCBTaW1wbGVMcnVaZXJvQW5kV3JpdGVQYWdlKFNs cnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCiAgKiBCYW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1T aW1wbGVMcnVXYWl0SU8oU2xydUN0bCBjdGwsIGludCBzbG90bm8pCitTaW1wbGVMcnVXYWl0 SU8oU2xydURlc2MgKmN0bCwgaW50IHNsb3RubykKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9 IGN0bC0+c2hhcmVkOwogCWludAkJCWJhbmtubyA9IFNsb3RHZXRCYW5rTnVtYmVyKHNsb3Ru byk7CkBAIC01MzAsNyArNTQ1LDcgQEAgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBp bnQgc2xvdG5vKQogICogVGhlIGNvcnJlY3QgYmFuayBsb2NrIG11c3QgYmUgaGVsZCBhdCBl bnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgogICovCiBpbnQKLVNpbXBsZUxydVJl YWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCitTaW1w bGVMcnVSZWFkUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVf b2ssCiAJCQkJICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNo YXJlZCA9IGN0bC0+c2hhcmVkOwpAQCAtNjM0LDcgKzY0OSw3IEBAIFNpbXBsZUxydVJlYWRQ YWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCiAgKiBJdCBp cyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBsb2NrIHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1 c2l2ZS4KICAqLwogaW50Ci1TaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0 bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK1NpbXBsZUxydVJl YWRQYWdlX1JlYWRPbmx5KFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywgY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsK IAlMV0xvY2sJICAgKmJhbmtsb2NrID0gU2ltcGxlTHJ1R2V0QmFua0xvY2soY3RsLCBwYWdl bm8pOwpAQCAtNjgxLDcgKzY5Niw3IEBAIFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNs cnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQogICog QmFuayBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBl eGl0LgogICovCiBzdGF0aWMgdm9pZAotU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwg Y3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCitTbHJ1SW50ZXJuYWxXcml0 ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQog ewogCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50NjQJCXBhZ2VubyA9 IHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXTsKQEAgLTc2MSw3ICs3NzYsNyBAQCBTbHJ1 SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFs bCBmZGF0YSkKICAqIGZkYXRhIGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUuCiAgKi8K IHZvaWQKLVNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKK1Np bXBsZUxydVdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5vKQogewogCUFzc2Vy dChjdGwtPnNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfRU1QVFkp OwogCkBAIC03NzUsNyArNzkwLDcgQEAgU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3Rs LCBpbnQgc2xvdG5vKQogICogbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBh Z2UuCiAgKi8KIGJvb2wKLVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3Rs IGN0bCwgaW50NjQgcGFnZW5vKQorU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNs cnVEZXNjICpjdGwsIGludDY0IHBhZ2VubykKIHsKIAlpbnQ2NAkJc2Vnbm8gPSBwYWdlbm8g LyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtODMzLDcgKzg0OCw3IEBAIFNpbXBsZUxydURv ZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQogICogcmVh ZC93cml0ZSBvcGVyYXRpb25zLiAgV2UgY291bGQgY2FjaGUgb25lIHZpcnR1YWwgZmlsZSBw b2ludGVyIC4uLgogICovCiBzdGF0aWMgYm9vbAotU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xy dUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubykKK1NscnVQaHlzaWNhbFJlYWRQ YWdlKFNscnVEZXNjICpjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubykKIHsKIAlTbHJ1 U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludDY0CQlzZWdubyA9IHBhZ2VubyAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CkBAIC05MDUsNyArOTIwLDcgQEAgU2xydVBoeXNp Y2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubykKICAq IFNpbXBsZUxydVdyaXRlQWxsLgogICovCiBzdGF0aWMgYm9vbAotU2xydVBoeXNpY2FsV3Jp dGVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVXcml0 ZUFsbCBmZGF0YSkKK1NscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2 NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKIHsKIAlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludDY0CQlzZWdubyA9IHBhZ2VubyAvIFNM UlVfUEFHRVNfUEVSX1NFR01FTlQ7CkBAIC0xMDM3LDExICsxMDUyLDExIEBAIFNscnVQaHlz aWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLCBT bHJ1V3JpdGVBbGwgZmRhdGEpCiAJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwogCiAJLyog UXVldWUgdXAgYSBzeW5jIHJlcXVlc3QgZm9yIHRoZSBjaGVja3BvaW50ZXIuICovCi0JaWYg KGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQorCWlmIChjdGwtPm9w dGlvbnMuc3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQogCXsKIAkJRmlsZVRh ZwkJdGFnOwogCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwg c2Vnbm8pOworCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3RsLT5vcHRpb25zLnN5bmNfaGFu ZGxlciwgc2Vnbm8pOwogCQlpZiAoIVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19S RVFVRVNULCBmYWxzZSkpCiAJCXsKIAkJCS8qIE5vIHNwYWNlIHRvIGVucXVldWUgc3luYyBy ZXF1ZXN0LiAgRG8gaXQgc3luY2hyb25vdXNseS4gKi8KQEAgLTEwNzcsNyArMTA5Miw3IEBA IFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQg c2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCiAgKiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2Uu ICBDYWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hhcmVkLW1lbW9yeSBzdGF0ZS4KICAq Lwogc3RhdGljIHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwgY3RsLCBpbnQ2NCBw YWdlbm8sIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQorU2xydVJlcG9ydElPRXJyb3IoU2xy dURlc2MgKmN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIHsK IAlpbnQ2NAkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWlu dAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtMTA5 MiwxNCArMTEwNywxNCBAQCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQg cGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBu b3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKSwKLQkJCQkJIG9wYXF1ZV9kYXRhID8g Y3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJ IG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRpb25zLmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3Bh cXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0xSVV9TRUVLX0ZBSUxFRDoK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAog CQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VlayBpbiBmaWxlIFwiJXNcIiB0byBvZmZzZXQg JWQ6ICVtIiwKIAkJCQkJCQlwYXRoLCBvZmZzZXQpLAotCQkJCQkgb3BhcXVlX2RhdGEgPyBj dGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOworCQkJCQkg b3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFx dWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTFJVX1JFQURfRkFJTEVEOgog CQkJaWYgKGVycm5vKQpAQCAtMTEwNywxMiArMTEyMiwxMiBAQCBTbHJ1UmVwb3J0SU9FcnJv cihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkK IAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkJIGVycm1zZygiY291 bGQgbm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6ICVtIiwKIAkJCQkJ CQkJcGF0aCwgb2Zmc2V0KSwKLQkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWls X2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CisJCQkJCQkgb3BhcXVlX2RhdGEg PyBjdGwtPm9wdGlvbnMuZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAw KSk7CiAJCQllbHNlCiAJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCShlcnJtc2coImNvdWxk IG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcg Ynl0ZXMiLAogCQkJCQkJCQlwYXRoLCBvZmZzZXQpLAotCQkJCQkJIG9wYXF1ZV9kYXRhID8g Y3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJ CSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9w YXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFrOwogCQljYXNlIFNMUlVfV1JJVEVfRkFJTEVE OgogCQkJaWYgKGVycm5vKQpAQCAtMTEyMCwyNiArMTEzNSwyNiBAQCBTbHJ1UmVwb3J0SU9F cnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0 YSkKIAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkJIGVycm1zZygi Q291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0iLAogCQkJ CQkJCQlwYXRoLCBvZmZzZXQpLAotCQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRh aWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJCSBvcGFxdWVfZGF0 YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6 IDApKTsKIAkJCWVsc2UKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycm1zZygiQ291 bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogd3JvdGUgdG9vIGZl dyBieXRlcy4iLAogCQkJCQkJCQlwYXRoLCBvZmZzZXQpLAotCQkJCQkJIG9wYXF1ZV9kYXRh ID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJ CQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+b3B0aW9ucy5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y KG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFrOwogCQljYXNlIFNMUlVfRlNZTkNfRkFJ TEVEOgogCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVSUk9SKSwKIAkJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmc3luYyBm aWxlIFwiJXNcIjogJW0iLAogCQkJCQkJCXBhdGgpLAotCQkJCQkgb3BhcXVlX2RhdGEgPyBj dGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOworCQkJCQkg b3BhcXVlX2RhdGEgPyBjdGwtPm9wdGlvbnMuZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFx dWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAog CQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJ CQlwYXRoKSwKLQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vy cm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKKwkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5vcHRp b25zLmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1c3QgKi8KQEAg LTExOTksNyArMTIxNCw3IEBAIFNscnVSZWNlbnRseVVzZWQoU2xydVNoYXJlZCBzaGFyZWQs IGludCBzbG90bm8pCiAgKiBUaGUgY29ycmVjdCBiYW5rIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KIHN0YXRpYyBpbnQKLVNs cnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCitTbHJ1U2VsZWN0 TFJVUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8pCiB7CiAJU2xydVNoYXJlZAlz aGFyZWQgPSBjdGwtPnNoYXJlZDsKIApAQCAtMTI5MSw4ICsxMzA2LDggQEAgU2xydVNlbGVj dExSVVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKIAkJCXsKIAkJCQlpZiAodGhp c19kZWx0YSA+IGJlc3RfdmFsaWRfZGVsdGEgfHwKIAkJCQkJKHRoaXNfZGVsdGEgPT0gYmVz dF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251 bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRfcGFnZV9udW1iZXIpKSkKKwkJCQkJIGN0 bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKKwkJCQkJCQkJCQkJ ICAgYmVzdF92YWxpZF9wYWdlX251bWJlcikpKQogCQkJCXsKIAkJCQkJYmVzdHZhbGlkc2xv dCA9IHNsb3RubzsKIAkJCQkJYmVzdF92YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7CkBAIC0x MzAzLDggKzEzMTgsOCBAQCBTbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQg cGFnZW5vKQogCQkJewogCQkJCWlmICh0aGlzX2RlbHRhID4gYmVzdF9pbnZhbGlkX2RlbHRh IHx8CiAJCQkJCSh0aGlzX2RlbHRhID09IGJlc3RfaW52YWxpZF9kZWx0YSAmJgotCQkJCQkg Y3RsLT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3Rf aW52YWxpZF9wYWdlX251bWJlcikpKQorCQkJCQkgY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRl cyh0aGlzX3BhZ2VfbnVtYmVyLAorCQkJCQkJCQkJCQkgICBiZXN0X2ludmFsaWRfcGFnZV9u dW1iZXIpKSkKIAkJCQl7CiAJCQkJCWJlc3RpbnZhbGlkc2xvdCA9IHNsb3RubzsKIAkJCQkJ YmVzdF9pbnZhbGlkX2RlbHRhID0gdGhpc19kZWx0YTsKQEAgLTEzNTIsNyArMTM2Nyw3IEBA IFNscnVTZWxlY3RMUlVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCiAgKiBlbnRy aWVzIGFyZSBvbiBkaXNrLgogICovCiB2b2lkCi1TaW1wbGVMcnVXcml0ZUFsbChTbHJ1Q3Rs IGN0bCwgYm9vbCBhbGxvd19yZWRpcnRpZWQpCitTaW1wbGVMcnVXcml0ZUFsbChTbHJ1RGVz YyAqY3RsLCBib29sIGFsbG93X3JlZGlydGllZCkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9 IGN0bC0+c2hhcmVkOwogCVNscnVXcml0ZUFsbERhdGEgZmRhdGE7CkBAIC0xNDIyLDggKzE0 MzcsOCBAQCBTaW1wbGVMcnVXcml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxvd19yZWRp cnRpZWQpCiAJCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCBOVUxMKTsKIAogCS8q IEVuc3VyZSB0aGF0IGRpcmVjdG9yeSBlbnRyaWVzIGZvciBuZXcgZmlsZXMgYXJlIG9uIGRp c2suICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQot CQlmc3luY19mbmFtZShjdGwtPkRpciwgdHJ1ZSk7CisJaWYgKGN0bC0+b3B0aW9ucy5zeW5j X2hhbmRsZXIgIT0gU1lOQ19IQU5ETEVSX05PTkUpCisJCWZzeW5jX2ZuYW1lKGN0bC0+b3B0 aW9ucy5EaXIsIHRydWUpOwogfQogCiAvKgpAQCAtMTQzOCw3ICsxNDUzLDcgQEAgU2ltcGxl THJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQogICogYWZ0 ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0dGVuIGRhdGEuCiAgKi8KIHZvaWQKLVNp bXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQ2NCBjdXRvZmZQYWdlKQorU2ltcGxl THJ1VHJ1bmNhdGUoU2xydURlc2MgKmN0bCwgaW50NjQgY3V0b2ZmUGFnZSkKIHsKIAlTbHJ1 U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludAkJCXByZXZiYW5rOwpAQCAtMTQ2 MCwxMiArMTQ3NSwxMiBAQCByZXN0YXJ0OgogCSAqIGJ1Z3MgZWxzZXdoZXJlIGluIFNMUlUg aGFuZGxpbmcsIHNvIHdlIGRvbid0IGNhcmUgaWYgd2UgcmVhZCBhIHNsaWdodGx5CiAJICog b3V0ZGF0ZWQgdmFsdWU7IHRoZXJlZm9yZSB3ZSBkb24ndCBhZGQgYSBtZW1vcnkgYmFycmll ci4KIAkgKi8KLQlpZiAoY3RsLT5QYWdlUHJlY2VkZXMocGdfYXRvbWljX3JlYWRfdTY0KCZz aGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciksCi0JCQkJCQkgIGN1dG9mZlBhZ2UpKQorCWlm IChjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHBnX2F0b21pY19yZWFkX3U2NCgmc2hhcmVk LT5sYXRlc3RfcGFnZV9udW1iZXIpLAorCQkJCQkJCQkgIGN1dG9mZlBhZ2UpKQogCXsKIAkJ ZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiY291bGQgbm90IHRydW5jYXRlIGRpcmVjdG9y eSBcIiVzXCI6IGFwcGFyZW50IHdyYXBhcm91bmQiLAotCQkJCQkJY3RsLT5EaXIpKSk7CisJ CQkJCQljdGwtPm9wdGlvbnMuRGlyKSkpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDg4LDcg KzE1MDMsNyBAQCByZXN0YXJ0OgogCiAJCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Ru b10gPT0gU0xSVV9QQUdFX0VNUFRZKQogCQkJY29udGludWU7Ci0JCWlmICghY3RsLT5QYWdl UHJlY2VkZXMoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dLCBjdXRvZmZQYWdlKSkKKwkJ aWYgKCFjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVzKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xv dG5vXSwgY3V0b2ZmUGFnZSkpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMTUzMywxNiAr MTU0OCwxNiBAQCByZXN0YXJ0OgogICogdGhleSBlaXRoZXIgY2FuJ3QgeWV0IGNvbnRhaW4g YW55dGhpbmcsIG9yIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgb3V0LgogICovCiBzdGF0 aWMgdm9pZAotU2xydUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50NjQg c2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVEZXNjICpjdGwsIGludDY0 IHNlZ25vKQogewogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAogCS8qIEZvcmdldCBhbnkg ZnN5bmMgcmVxdWVzdHMgcXVldWVkIGZvciB0aGlzIHNlZ21lbnQuICovCi0JaWYgKGN0bC0+ c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQorCWlmIChjdGwtPm9wdGlvbnMu c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQogCXsKIAkJRmlsZVRhZwkJdGFn OwogCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8p OworCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3RsLT5vcHRpb25zLnN5bmNfaGFuZGxlciwg c2Vnbm8pOwogCQlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfRk9SR0VUX1JFUVVF U1QsIHRydWUpOwogCX0KIApAQCAtMTU1Niw3ICsxNTcxLDcgQEAgU2xydUludGVybmFsRGVs ZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50NjQgc2Vnbm8pCiAgKiBEZWxldGUgYW4gaW5k aXZpZHVhbCBTTFJVIHNlZ21lbnQsIGlkZW50aWZpZWQgYnkgdGhlIHNlZ21lbnQgbnVtYmVy LgogICovCiB2b2lkCi1TbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50NjQgc2Vn bm8pCitTbHJ1RGVsZXRlU2VnbWVudChTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBzZWdubykKIHsK IAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwogCWludAkJCXByZXZiYW5rID0g U2xvdEdldEJhbmtOdW1iZXIoMCk7CkBAIC0xNjMzLDE5ICsxNjQ4LDE5IEBAIHJlc3RhcnQ6 CiAgKiBmaXJzdD49Y3V0b2ZmICYmIGxhc3Q+PWN1dG9mZjogbm87IGV2ZXJ5IHBhZ2Ugb2Yg dGhpcyBzZWdtZW50IGlzIHRvbyB5b3VuZwogICovCiBzdGF0aWMgYm9vbAotU2xydU1heURl bGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludDY0IHNlZ3BhZ2UsIGludDY0IGN1dG9mZlBh Z2UpCitTbHJ1TWF5RGVsZXRlU2VnbWVudChTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBzZWdwYWdl LCBpbnQ2NCBjdXRvZmZQYWdlKQogewogCWludDY0CQlzZWdfbGFzdF9wYWdlID0gc2VncGFn ZSArIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgLSAxOwogCiAJQXNzZXJ0KHNlZ3BhZ2UgJSBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UID09IDApOwogCi0JcmV0dXJuIChjdGwtPlBhZ2VQcmVj ZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAmJgotCQkJY3RsLT5QYWdlUHJlY2VkZXMoc2Vn X2xhc3RfcGFnZSwgY3V0b2ZmUGFnZSkpOworCXJldHVybiAoY3RsLT5vcHRpb25zLlBhZ2VQ cmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAmJgorCQkJY3RsLT5vcHRpb25zLlBhZ2VQ cmVjZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQYWdlKSk7CiB9CiAKICNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZAotU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZz ZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKK1NscnVQYWdl UHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVEZXNjICpjdGwsIGludCBwZXJfcGFnZSwgdWludDMy IG9mZnNldCkKIHsKIAlUcmFuc2FjdGlvbklkIGxocywKIAkJCQlyaHM7CkBAIC0xNjU0LDYg KzE2NjksOSBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50 IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogCVRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCwK IAkJCQlvbGRlc3RYYWN0OwogCisJLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUg U2xydSBoYXMgYmVlbiBpbml0aWFsaXplZCAqLworCUFzc2VydChjdGwtPm9wdGlvbnMuUGFn ZVByZWNlZGVzKTsKKwogCS8qCiAJICogQ29tcGFyZSBhbiBYSUQgcGFpciBoYXZpbmcgdW5k ZWZpbmVkIG9yZGVyIChzZWUgUkZDIDE5ODIpLCBhIHBhaXIgYXQKIAkgKiAib3Bwb3NpdGUg ZW5kcyIgb2YgdGhlIFhJRCBzcGFjZS4gIFRyYW5zYWN0aW9uSWRQcmVjZWRlcygpIHRyZWF0 cyBlYWNoCkBAIC0xNjcwLDE5ICsxNjg4LDE5IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zm c2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJQXNzZXJ0 KCFUcmFuc2FjdGlvbklkUHJlY2VkZXMocmhzLCBsaHMgKyAxKSk7CiAJQXNzZXJ0KCFUcmFu c2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGxocywgcmhzKSk7CiAJQXNzZXJ0KCFUcmFuc2Fj dGlvbklkRm9sbG93c09yRXF1YWxzKHJocywgbGhzKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQ cmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0 bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFz c2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdl KSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8gcGVy X3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJo cyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNz ZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBlcl9w YWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBl cl9wYWdlLCAobGhzIC0gMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKQorCUFzc2VydCghY3Rs LT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2Up KTsKKwlBc3NlcnQoIWN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2Us IHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVz KHJocyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghY3RsLT5vcHRp b25zLlBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBl cl9wYWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMocmhzIC8gcGVy X3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoY3Rs LT5vcHRpb25zLlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJf cGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChjdGwtPm9wdGlvbnMuUGFnZVByZWNlZGVz KHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKQogCQkg ICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7CS8qIFNlZSBDb21taXRUc1BhZ2VQ cmVjZWRlcygpICovCi0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAxICogcGVy X3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKQorCUFzc2VydChjdGwtPm9wdGlv bnMuUGFnZVByZWNlZGVzKChsaHMgKyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAv IHBlcl9wYWdlKQogCQkgICB8fCAoMVUgPDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNz ZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2Us IHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAz ICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFj dGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBl cl9wYWdlKSk7CisJQXNzZXJ0KGN0bC0+b3B0aW9ucy5QYWdlUHJlY2VkZXMoKGxocyArIDIg KiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoY3Rs LT5vcHRpb25zLlBhZ2VQcmVjZWRlcygobGhzICsgMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdl LCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghY3RsLT5vcHRpb25zLlBhZ2VQcmVjZWRl cyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CiAKIAkv KgogCSAqIEdldE5ld1RyYW5zYWN0aW9uSWQoKSBoYXMgYXNzaWduZWQgdGhlIGxhc3QgWElE IGl0IGNhbiBzYWZlbHkgdXNlLCBhbmQKQEAgLTE3MjcsNyArMTc0NSw3IEBAIFNscnVQYWdl UHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBv ZmZzZXQpCiAgKiBkbyBub3QgYXBwbHkgdG8gdGhlbS4pCiAgKi8KIHZvaWQKLVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSkKK1NscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoU2xydURlc2MgKmN0bCwgaW50IHBlcl9wYWdlKQogewogCS8q IFRlc3QgZmlyc3QsIG1pZGRsZSBhbmQgbGFzdCBlbnRyaWVzIG9mIGEgcGFnZS4gKi8KIAlT bHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGwsIHBlcl9wYWdlLCAwKTsKQEAgLTE3NDIs NyArMTc2MCw3IEBAIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydUN0bCBjdGwsIGlu dCBwZXJfcGFnZSkKICAqCQlvbmUgY29udGFpbmluZyB0aGUgcGFnZSBwYXNzZWQgYXMgImRh dGEiLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLAorU2xydVNjYW5EaXJDYlJlcG9y dFByZXNlbmNlKFNscnVEZXNjICpjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdl LAogCQkJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50NjQJCWN1dG9mZlBhZ2UgPSAqKGludDY0 ICopIGRhdGE7CkBAIC0xNzU4LDcgKzE3NzYsNyBAQCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJl c2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLAogICoJ CVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBzZWdtZW50cyBwcmlvciB0byB0aGUgb25lIHBhc3Nl ZCBpbiBhcyAiZGF0YSIuCiAgKi8KIHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRl Q3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKK1Ns cnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUs IGludDY0IHNlZ3BhZ2UsCiAJCQkJCQkgIHZvaWQgKmRhdGEpCiB7CiAJaW50NjQJCWN1dG9m ZlBhZ2UgPSAqKGludDY0ICopIGRhdGE7CkBAIC0xNzc0LDcgKzE3OTIsNyBAQCBTbHJ1U2Nh bkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQg c2VncGFnZSwKICAqCQlUaGlzIGNhbGxiYWNrIGRlbGV0ZXMgYWxsIHNlZ21lbnRzLgogICov CiBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVB bGwoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsIHZvaWQg KmRhdGEpCiB7CiAJU2xydUludGVybmFsRGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKIApAQCAtMTc4OCw5ICsxODA2LDkgQEAgU2xydVNj YW5EaXJDYkRlbGV0ZUFsbChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludDY0IHNl Z3BhZ2UsIHZvaWQgKmRhdGEpCiAgKiBTTFJVIHNlZ21lbnQuCiAgKi8KIHN0YXRpYyBpbmxp bmUgYm9vbAotU2xydUNvcnJlY3RTZWdtZW50RmlsZW5hbWVMZW5ndGgoU2xydUN0bCBjdGws IHNpemVfdCBsZW4pCitTbHJ1Q29ycmVjdFNlZ21lbnRGaWxlbmFtZUxlbmd0aChTbHJ1RGVz YyAqY3RsLCBzaXplX3QgbGVuKQogewotCWlmIChjdGwtPmxvbmdfc2VnbWVudF9uYW1lcykK KwlpZiAoY3RsLT5vcHRpb25zLmxvbmdfc2VnbWVudF9uYW1lcykKIAkJcmV0dXJuIChsZW4g PT0gMTUpOwkJLyogc2VlIFNscnVGaWxlTmFtZSgpICovCiAJZWxzZQogCkBAIC0xODIxLDcg KzE4MzksNyBAQCBTbHJ1Q29ycmVjdFNlZ21lbnRGaWxlbmFtZUxlbmd0aChTbHJ1Q3RsIGN0 bCwgc2l6ZV90IGxlbikKICAqIE5vdGUgdGhhdCBubyBsb2NraW5nIGlzIGFwcGxpZWQuCiAg Ki8KIGJvb2wKLVNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxi YWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJlY3RvcnkoU2xydURlc2Mg KmN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIHsKIAlib29s CQlyZXR2YWwgPSBmYWxzZTsKIAlESVIJCSAgICpjbGRpcjsKQEAgLTE4MjksOCArMTg0Nyw4 IEBAIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNh bGxiYWNrLCB2b2lkICpkYXRhKQogCWludDY0CQlzZWdubzsKIAlpbnQ2NAkJc2VncGFnZTsK IAotCWNsZGlyID0gQWxsb2NhdGVEaXIoY3RsLT5EaXIpOwotCXdoaWxlICgoY2xkZSA9IFJl YWREaXIoY2xkaXIsIGN0bC0+RGlyKSkgIT0gTlVMTCkKKwljbGRpciA9IEFsbG9jYXRlRGly KGN0bC0+b3B0aW9ucy5EaXIpOworCXdoaWxlICgoY2xkZSA9IFJlYWREaXIoY2xkaXIsIGN0 bC0+b3B0aW9ucy5EaXIpKSAhPSBOVUxMKQogCXsKIAkJc2l6ZV90CQlsZW47CiAKQEAgLTE4 NDMsNyArMTg2MSw3IEBAIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2Nh bkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQogCQkJc2VncGFnZSA9IHNlZ25vICog U0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKIAogCQkJZWxvZyhERUJVRzIsICJTbHJ1U2NhbkRp cmVjdG9yeSBpbnZva2luZyBjYWxsYmFjayBvbiAlcy8lcyIsCi0JCQkJIGN0bC0+RGlyLCBj bGRlLT5kX25hbWUpOworCQkJCSBjdGwtPm9wdGlvbnMuRGlyLCBjbGRlLT5kX25hbWUpOwog CQkJcmV0dmFsID0gY2FsbGJhY2soY3RsLCBjbGRlLT5kX25hbWUsIHNlZ3BhZ2UsIGRhdGEp OwogCQkJaWYgKHJldHZhbCkKIAkJCQlicmVhazsKQEAgLTE4NjEsNyArMTg3OSw3IEBAIFNs cnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNr LCB2b2lkICpkYXRhKQogICogcGVyZm9ybXMgdGhlIGZzeW5jLgogICovCiBpbnQKLVNscnVT eW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0 aCkKK1NscnVTeW5jRmlsZVRhZyhTbHJ1RGVzYyAqY3RsLCBjb25zdCBGaWxlVGFnICpmdGFn LCBjaGFyICpwYXRoKQogewogCWludAkJCWZkOwogCWludAkJCXNhdmVfZXJybm87CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCBjNmNlNzFmYzcwMy4uNDY5 YWMwMmExYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRy YW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwpAQCAt MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRl ICJ1dGlscy9zbmFwbWdyLmgiCiAKQEAgLTY2LDE2ICs2NywyMiBAQCBUcmFuc2FjdGlvbklk VG9QYWdlKFRyYW5zYWN0aW9uSWQgeGlkKQogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9FbnRy eSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBTVUJUUkFOU19YQUNUU19QRVJfUEFH RSkKIAogCitzdGF0aWMgdm9pZCBTVUJUUkFOU1NobWVtUmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgU1VCVFJBTlNTaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyBib29s IFN1YlRyYW5zUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0 aWMgaW50CXN1YnRyYW5zX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBTVUJUUkFOU1NobWVtQ2FsbGJh Y2tzID0geworCS5yZXF1ZXN0X2ZuID0gU1VCVFJBTlNTaG1lbVJlcXVlc3QsCisJLmluaXRf Zm4gPSBTVUJUUkFOU1NobWVtSW5pdCwKK307CisKIC8qCiAgKiBMaW5rIHRvIHNoYXJlZC1t ZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBTVUJUUkFOUyBjb250cm9sCiAgKi8KLXN0YXRp YyBTbHJ1Q3RsRGF0YSBTdWJUcmFuc0N0bERhdGE7Ci0KLSNkZWZpbmUgU3ViVHJhbnNDdGwg ICgmU3ViVHJhbnNDdGxEYXRhKQorc3RhdGljIFNscnVEZXNjIFN1YlRyYW5zU2xydURlc2M7 CiAKLQotc3RhdGljIGJvb2wgU3ViVHJhbnNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGlu dDY0IHBhZ2UyKTsKLXN0YXRpYyBpbnQJc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJv cihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CisjZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1 YlRyYW5zU2xydURlc2MpCiAKIAogLyoKQEAgLTIwNywxNyArMjE0LDEzIEBAIFNVQlRSQU5T U2htZW1CdWZmZXJzKHZvaWQpCiAJcmV0dXJuIE1pbihNYXgoMTYsIHN1YnRyYW5zYWN0aW9u X2J1ZmZlcnMpLCBTTFJVX01BWF9BTExPV0VEX0JVRkZFUlMpOwogfQogCisKKwogLyoKLSAq IEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFNVQlRSQU5TCisgKiBSZWdp c3RlciBzaGFyZWQgbWVtb3J5IGZvciBTVUJUUkFOUwogICovCi1TaXplCi1TVUJUUkFOU1No bWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoU1VCVFJBTlNT aG1lbUJ1ZmZlcnMoKSwgMCk7Ci19Ci0KLXZvaWQKLVNVQlRSQU5TU2htZW1Jbml0KHZvaWQp CitzdGF0aWMgdm9pZAorU1VCVFJBTlNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewogCS8q IElmIGF1dG8tdHVuaW5nIGlzIHJlcXVlc3RlZCwgbm93IGlzIHRoZSB0aW1lIHRvIGRvIGl0 ICovCiAJaWYgKHN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMgPT0gMCkKQEAgLTI0MCwxMSArMjQz LDI1IEBAIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpCiAJfQogCUFzc2VydChzdWJ0cmFuc2Fj dGlvbl9idWZmZXJzICE9IDApOwogCi0JU3ViVHJhbnNDdGwtPlBhZ2VQcmVjZWRlcyA9IFN1 YlRyYW5zUGFnZVByZWNlZGVzOwotCVN1YlRyYW5zQ3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vy cm9yID0gc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKLQlTaW1wbGVMcnVJbml0 KFN1YlRyYW5zQ3RsLCAic3VidHJhbnNhY3Rpb24iLCBTVUJUUkFOU1NobWVtQnVmZmVycygp LCAwLAotCQkJCSAgInBnX3N1YnRyYW5zIiwgTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwK LQkJCQkgIExXVFJBTkNIRV9TVUJUUkFOU19TTFJVLCBTWU5DX0hBTkRMRVJfTk9ORSwgZmFs c2UpOworCVNpbXBsZUxydVJlcXVlc3QoJlN1YlRyYW5zU2xydURlc2MsICYoU2xydVJlcXVl c3RPcHRzKSB7CisJCS5uYW1lID0gInN1YnRyYW5zYWN0aW9uIiwKKwkJLkRpciA9ICJwZ19z dWJ0cmFucyIsCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSBmYWxzZSwKKworCQkubnNsb3Rz ID0gU1VCVFJBTlNTaG1lbUJ1ZmZlcnMoKSwKKworCQkuc3luY19oYW5kbGVyID0gU1lOQ19I QU5ETEVSX05PTkUsCisJCS5QYWdlUHJlY2VkZXMgPSBTdWJUcmFuc1BhZ2VQcmVjZWRlcywK KwkJLmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBzdWJ0cmFuc19lcnJkZXRhaWxfZm9yX2lv X2Vycm9yLAorCisJCS5idWZmZXJfdHJhbmNoZV9pZCA9IExXVFJBTkNIRV9TVUJUUkFOU19C VUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVfU1VCVFJBTlNfU0xSVSwK Kwl9KTsKK30KKworc3RhdGljIHZvaWQKK1NVQlRSQU5TU2htZW1Jbml0KHZvaWQgKmFyZykK K3sKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zQ3RsLCBTVUJUUkFOU19Y QUNUU19QRVJfUEFHRSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDVjOWE1NmMz ZDQwLi42ZjQ2MzllZmVhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5 bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0xNzksNiArMTc5 LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZHNhLmgiCkBAIC0zNDUs NiArMzQ2LDE1IEBAIHR5cGVkZWYgc3RydWN0IEFzeW5jUXVldWVDb250cm9sCiAKIHN0YXRp YyBBc3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAKK3N0YXRpYyB2b2lk IEFzeW5jU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBBc3luY1NobWVt SW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBBc3luY1NobWVtQ2Fs bGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gQXN5bmNTaG1lbVJlcXVlc3QsCisJLmluaXRf Zm4gPSBBc3luY1NobWVtSW5pdCwKK307CisKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zNTksOSArMzY5LDEzIEBAIHN0YXRpYyBB c3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAvKgogICogVGhlIFNMUlUg YnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBx dWV1ZQogICovCi1zdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKK3N0YXRpYyBp bmxpbmUgYm9vbCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGludDY0IHAsIGludDY0IHEpOwor c3RhdGljIGludAlhc3luY1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcihjb25zdCB2b2lkICpv cGFxdWVfZGF0YSk7CisKK3N0YXRpYyBTbHJ1RGVzYyBOb3RpZnlTbHJ1RGVzYzsKIAotI2Rl ZmluZSBOb3RpZnlDdGwJCQkJCSgmTm90aWZ5Q3RsRGF0YSkKKworI2RlZmluZSBOb3RpZnlD dGwJCQkJCSgmTm90aWZ5U2xydURlc2MpCiAjZGVmaW5lIFFVRVVFX1BBR0VTSVpFCQkJCUJM Q0tTWgogCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8qIHdhcm4g YXQgbW9zdCBvbmNlIGV2ZXJ5IDVzICovCkBAIC01NzAsOSArNTg0LDcgQEAgYm9vbAkJVHJh Y2Vfbm90aWZ5ID0gZmFsc2U7CiBpbnQJCQltYXhfbm90aWZ5X3F1ZXVlX3BhZ2VzID0gMTA0 ODU3NjsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludAlh c3luY1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7 CiBzdGF0aWMgaW5saW5lIGludDY0IGFzeW5jUXVldWVQYWdlRGlmZihpbnQ2NCBwLCBpbnQ2 NCBxKTsKLXN0YXRpYyBpbmxpbmUgYm9vbCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGludDY0 IHAsIGludDY0IHEpOwogc3RhdGljIGlubGluZSB2b2lkIEdsb2JhbENoYW5uZWxLZXlJbml0 KEdsb2JhbENoYW5uZWxLZXkgKmtleSwgT2lkIGRib2lkLAogCQkJCQkJCQkJCWNvbnN0IGNo YXIgKmNoYW5uZWwpOwogc3RhdGljIGRzaGFzaF9oYXNoIGdsb2JhbENoYW5uZWxUYWJsZUhh c2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwKQEAgLTc4MCw3OCArNzkyLDY1IEBA IGluaXRQZW5kaW5nTGlzdGVuQWN0aW9ucyh2b2lkKQogfQogCiAvKgotICogUmVwb3J0IHNw YWNlIG5lZWRlZCBmb3Igb3VyIHNoYXJlZCBtZW1vcnkgYXJlYQorICogUmVnaXN0ZXIgb3Vy IHNoYXJlZCBtZW1vcnkgbmVlZHMKICAqLwotU2l6ZQotQXN5bmNTaG1lbVNpemUodm9pZCkK K3N0YXRpYyB2b2lkCitBc3luY1NobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBBc3luY1F1ZXVlQ29udHJvbFNobWVtRGVzYzsKIAlTaXplCQlz aXplOwogCi0JLyogVGhpcyBoYWQgYmV0dGVyIG1hdGNoIEFzeW5jU2htZW1Jbml0ICovCiAJ c2l6ZSA9IG11bF9zaXplKE1heEJhY2tlbmRzLCBzaXplb2YoUXVldWVCYWNrZW5kU3RhdHVz KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9mKEFzeW5jUXVldWVDb250cm9s LCBiYWNrZW5kKSk7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1T aXplKG5vdGlmeV9idWZmZXJzLCAwKSk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBc3luY1F1 ZXVlQ29udHJvbFNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5u YW1lID0gIkFzeW5jIFF1ZXVlIENvbnRyb2wiLAorCQkuc2l6ZSA9IHNpemUsCisJCS5wdHIg PSAodm9pZCAqKikgJmFzeW5jUXVldWVDb250cm9sLAorCX0pOwogCi0JcmV0dXJuIHNpemU7 Ci19CisJU2ltcGxlTHJ1UmVxdWVzdCgmTm90aWZ5U2xydURlc2MsICYoU2xydVJlcXVlc3RP cHRzKSB7CisJCS5uYW1lID0gIm5vdGlmeSIsCisJCS5EaXIgPSAicGdfbm90aWZ5IiwKIAot LyoKLSAqIEluaXRpYWxpemUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYQotICovCi12b2lkCi1B c3luY1NobWVtSW5pdCh2b2lkKQotewotCWJvb2wJCWZvdW5kOwotCVNpemUJCXNpemU7CisJ CS8qIGxvbmcgc2VnbWVudCBuYW1lcyBhcmUgdXNlZCBpbiBvcmRlciB0byBhdm9pZCB3cmFw YXJvdW5kICovCisJCS5sb25nX3NlZ21lbnRfbmFtZXMgPSB0cnVlLAogCi0JLyoKLQkgKiBD cmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBBc3luY1F1ZXVlQ29udHJvbCBzdHJ1Y3R1cmUuCi0J ICovCi0Jc2l6ZSA9IG11bF9zaXplKE1heEJhY2tlbmRzLCBzaXplb2YoUXVldWVCYWNrZW5k U3RhdHVzKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9mKEFzeW5jUXVldWVD b250cm9sLCBiYWNrZW5kKSk7CisJCS5uc2xvdHMgPSBub3RpZnlfYnVmZmVycywKIAotCWFz eW5jUXVldWVDb250cm9sID0gKEFzeW5jUXVldWVDb250cm9sICopCi0JCVNobWVtSW5pdFN0 cnVjdCgiQXN5bmMgUXVldWUgQ29udHJvbCIsIHNpemUsICZmb3VuZCk7CisJCS5zeW5jX2hh bmRsZXIgPSBTWU5DX0hBTkRMRVJfTk9ORSwKKwkJLlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVl dWVQYWdlUHJlY2VkZXMsCisJCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gYXN5bmNRdWV1 ZUVycmRldGFpbEZvcklvRXJyb3IsCiAKLQlpZiAoIWZvdW5kKQorCQkuYnVmZmVyX3RyYW5j aGVfaWQgPSBMV1RSQU5DSEVfTk9USUZZX0JVRkZFUiwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9 IExXVFJBTkNIRV9OT1RJRllfU0xSVSwKKwl9KTsKK30KKworc3RhdGljIHZvaWQKK0FzeW5j U2htZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAs IDApOworCVNFVF9RVUVVRV9QT1MoUVVFVUVfVEFJTCwgMCwgMCk7CisJUVVFVUVfU1RPUF9Q QUdFID0gMDsKKwlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IElOVkFMSURfUFJPQ19OVU1CRVI7 CisJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKKwlhc3luY1F1 ZXVlQ29udHJvbC0+Z2xvYmFsQ2hhbm5lbFRhYmxlRFNBID0gRFNBX0hBTkRMRV9JTlZBTElE OworCWFzeW5jUXVldWVDb250cm9sLT5nbG9iYWxDaGFubmVsVGFibGVEU0ggPSBEU0hBU0hf SEFORExFX0lOVkFMSUQ7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsr KQogCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplIGl0ICovCi0J CVNFVF9RVUVVRV9QT1MoUVVFVUVfSEVBRCwgMCwgMCk7Ci0JCVNFVF9RVUVVRV9QT1MoUVVF VUVfVEFJTCwgMCwgMCk7Ci0JCVFVRVVFX1NUT1BfUEFHRSA9IDA7Ci0JCVFVRVVFX0ZJUlNU X0xJU1RFTkVSID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQkJYXN5bmNRdWV1ZUNvbnRyb2wt Pmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKLQkJYXN5bmNRdWV1ZUNvbnRyb2wtPmdsb2JhbENo YW5uZWxUYWJsZURTQSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKLQkJYXN5bmNRdWV1ZUNvbnRy b2wtPmdsb2JhbENoYW5uZWxUYWJsZURTSCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKLQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsrKQotCQl7Ci0JCQlRVUVVRV9C QUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7Ci0JCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ID0gSW52YWxpZE9pZDsKLQkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BS T0NfTlVNQkVSOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwg MCk7Ci0JCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7Ci0JCQlR VUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwotCQl9CisJCVFVRVVFX0JB Q0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKKwkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9 IEludmFsaWRPaWQ7CisJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0Nf TlVNQkVSOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsK KwkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IGZhbHNlOworCQlRVUVVRV9C QUNLRU5EX0lTX0FEVkFOQ0lORyhpKSA9IGZhbHNlOwogCX0KIAogCS8qCi0JICogU2V0IHVw IFNMUlUgbWFuYWdlbWVudCBvZiB0aGUgcGdfbm90aWZ5IGRhdGEuIE5vdGUgdGhhdCBsb25n IHNlZ21lbnQKLQkgKiBuYW1lcyBhcmUgdXNlZCBpbiBvcmRlciB0byBhdm9pZCB3cmFwYXJv dW5kLgorCSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90 aWZ5IGRpcmVjdG9yeS4KIAkgKi8KLQlOb3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5j UXVldWVQYWdlUHJlY2VkZXM7Ci0JTm90aWZ5Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9y ID0gYXN5bmNRdWV1ZUVycmRldGFpbEZvcklvRXJyb3I7Ci0JU2ltcGxlTHJ1SW5pdChOb3Rp ZnlDdGwsICJub3RpZnkiLCBub3RpZnlfYnVmZmVycywgMCwKLQkJCQkgICJwZ19ub3RpZnki LCBMV1RSQU5DSEVfTk9USUZZX0JVRkZFUiwgTFdUUkFOQ0hFX05PVElGWV9TTFJVLAotCQkJ CSAgU1lOQ19IQU5ETEVSX05PTkUsIHRydWUpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8q Ci0JCSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5 IGRpcmVjdG9yeS4KLQkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlD dGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwotCX0KKwkodm9pZCkgU2xydVNj YW5EaXJlY3RvcnkoTm90aWZ5Q3RsLCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBOVUxMKTsK IH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggMGE0ZTllZTY1MDIuLjMyMjU1 ZWFkMmJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC05OCwxNiArOTgsMTEgQEAg Q2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgTG9ja01hbmFnZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFhMb2dQcmVmZXRjaFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgWExPR1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1Jl Y292ZXJ5U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDTE9HU2htZW1T aXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDb21taXRUc1NobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU1VCVFJBTlNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBNdWx0aVhhY3RTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IExXTG9ja1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2VuZFN0 YXR1c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ2hlY2twb2ludGVy U2htZW1TaXplKCkpOwpAQCAtMTIxLDcgKzExNiw2IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2 b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBcHBseUxhdW5jaGVyU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIEFzeW5jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdGF0 c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2xvdFN5bmNTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFpb1NobWVtU2l6ZSgpKTsKQEAgLTI3 OSwxMCArMjczLDYgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlYTE9H U2htZW1Jbml0KCk7CiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5 U2htZW1Jbml0KCk7Ci0JQ0xPR1NobWVtSW5pdCgpOwotCUNvbW1pdFRzU2htZW1Jbml0KCk7 Ci0JU1VCVFJBTlNTaG1lbUluaXQoKTsKLQlNdWx0aVhhY3RTaG1lbUluaXQoKTsKIAlCdWZm ZXJNYW5hZ2VyU2htZW1Jbml0KCk7CiAKIAkvKgpAQCAtMjkwLDExICsyODAsNiBAQCBDcmVh dGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCSAqLwogCUxvY2tNYW5hZ2VyU2htZW1J bml0KCk7CiAKLQkvKgotCSAqIFNldCB1cCBwcmVkaWNhdGUgbG9jayBtYW5hZ2VyCi0JICov Ci0JUHJlZGljYXRlTG9ja1NobWVtSW5pdCgpOwotCiAJLyoKIAkgKiBTZXQgdXAgcHJvY2Vz cyB0YWJsZQogCSAqLwpAQCAtMzIxLDcgKzMwNiw2IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1T dHJ1Y3RzKHZvaWQpCiAJICovCiAJQlRyZWVTaG1lbUluaXQoKTsKIAlTeW5jU2NhblNobWVt SW5pdCgpOwotCUFzeW5jU2htZW1Jbml0KCk7CiAJU3RhdHNTaG1lbUluaXQoKTsKIAlBaW9T aG1lbUluaXQoKTsKIAlXYWl0TFNOU2htZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ht ZW0uYwppbmRleCA4NDA5OWNlNzhmZS4uNTk1ZjFlNTgyZDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htZW0uYwpAQCAtMTM1LDYgKzEzNSw3IEBACiAKICNpbmNsdWRlIDx1bmlzdGQuaD4K IAorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgog I2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC01MzksNiArNTQw LDkgQEAgQXR0YWNoT3JJbml0KFNobWVtUmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBpbml0X2Fs bG93ZWQsIGJvb2wgYXR0YWNoX2FsbG93ZWQpCiAJCQljYXNlIFNITUVNX0tJTkRfSEFTSDoK IAkJCQlzaG1lbV9oYXNoX2F0dGFjaChkZXNjLCByZXF1ZXN0LT5vcHRpb25zKTsKIAkJCQli cmVhazsKKwkJCWNhc2UgU0hNRU1fS0lORF9TTFJVOgorCQkJCXNobWVtX3NscnVfYXR0YWNo KGRlc2MsIHJlcXVlc3QtPm9wdGlvbnMpOworCQkJCWJyZWFrOwogCQl9CiAJfQogCWVsc2Ug aWYgKCFpbml0X2FsbG93ZWQpCkBAIC01OTMsNiArNTk3LDkgQEAgQXR0YWNoT3JJbml0KFNo bWVtUmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBpbml0X2FsbG93ZWQsIGJvb2wgYXR0YWNoX2Fs bG93ZWQpCiAJCQljYXNlIFNITUVNX0tJTkRfSEFTSDoKIAkJCQlzaG1lbV9oYXNoX2luaXQo ZGVzYywgcmVxdWVzdC0+b3B0aW9ucyk7CiAJCQkJYnJlYWs7CisJCQljYXNlIFNITUVNX0tJ TkRfU0xSVToKKwkJCQlzaG1lbV9zbHJ1X2luaXQoZGVzYywgcmVxdWVzdC0+b3B0aW9ucyk7 CisJCQkJYnJlYWs7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNh dGUuYwppbmRleCA0ZjgwZmM3MzYzOS4uNjQ3NWI1MGEyYWIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTE1MiwxMCArMTUyLDYgQEAKIC8qCiAgKiBJTlRF UkZBQ0UgUk9VVElORVMKICAqCi0gKiBob3VzZWtlZXBpbmcgZm9yIHNldHRpbmcgdXAgc2hh cmVkIG1lbW9yeSBwcmVkaWNhdGUgbG9jayBzdHJ1Y3R1cmVzCi0gKgkJUHJlZGljYXRlTG9j a1NobWVtSW5pdCh2b2lkKQotICoJCVByZWRpY2F0ZUxvY2tTaG1lbVNpemUodm9pZCkKLSAq CiAgKiBwcmVkaWNhdGUgbG9jayByZXBvcnRpbmcKICAqCQlHZXRQcmVkaWNhdGVMb2NrU3Rh dHVzRGF0YSh2b2lkKQogICoJCVBhZ2VJc1ByZWRpY2F0ZUxvY2tlZChSZWxhdGlvbiByZWxh dGlvbiwgQmxvY2tOdW1iZXIgYmxrbm8pCkBAIC0yMTEsNiArMjA3LDggQEAKICNpbmNsdWRl ICJzdG9yYWdlL3ByZWRpY2F0ZV9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRl ICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRl ICJ1dGlscy9zbmFwbWdyLmgiCkBAIC0zMjIsOSArMzIwLDEyIEBACiAvKgogICogVGhlIFNM UlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG9sZCB4aWRzLgog ICovCi1zdGF0aWMgU2xydUN0bERhdGEgU2VyaWFsU2xydUN0bERhdGE7CitzdGF0aWMgYm9v bCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaW50NjQgcGFnZTEsIGludDY0IHBhZ2Uy KTsKK3N0YXRpYyBpbnQJc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpOwogCi0jZGVmaW5lIFNlcmlhbFNscnVDdGwJCQkoJlNlcmlhbFNs cnVDdGxEYXRhKQorc3RhdGljIFNscnVEZXNjIFNlcmlhbFNscnVEZXNjOworCisjZGVmaW5l IFNlcmlhbFNscnVDdGwJCQkoJlNlcmlhbFNscnVEZXNjKQogCiAjZGVmaW5lIFNFUklBTF9Q QUdFU0laRQkJCUJMQ0tTWgogI2RlZmluZSBTRVJJQUxfRU5UUllTSVpFCQkJc2l6ZW9mKFNl ckNvbW1pdFNlcU5vKQpAQCAtMzg0LDYgKzM4NSwxNyBAQCBpbnQJCQltYXhfcHJlZGljYXRl X2xvY2tzX3Blcl9wYWdlOwkvKiBpbiBndWNfdGFibGVzLmMgKi8KICAqLwogc3RhdGljIFBy ZWRYYWN0TGlzdCBQcmVkWGFjdDsKIAorc3RhdGljIHZvaWQgUHJlZGljYXRlTG9ja1NobWVt UmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUHJlZGljYXRlTG9ja1NobWVtSW5p dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUHJlZGljYXRlTG9ja1NobWVtQXR0YWNoKHZv aWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFByZWRpY2F0ZUxvY2tTaG1lbUNh bGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFByZWRpY2F0ZUxvY2tTaG1lbVJlcXVlc3Qs CisJLmluaXRfZm4gPSBQcmVkaWNhdGVMb2NrU2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBQ cmVkaWNhdGVMb2NrU2htZW1BdHRhY2gsCit9OworCisKIC8qCiAgKiBUaGlzIHByb3ZpZGVz IGEgcG9vbCBvZiBSV0NvbmZsaWN0IGRhdGEgZWxlbWVudHMgdG8gdXNlIGluIGNvbmZsaWN0 IGxpc3RzCiAgKiBiZXR3ZWVuIHRyYW5zYWN0aW9ucy4KQEAgLTQzMSw2ICs0NDMsMTYgQEAg c3RhdGljIGJvb2wgTXlYYWN0RGlkV3JpdGUgPSBmYWxzZTsKICAqLwogc3RhdGljIFNFUklB TElaQUJMRVhBQ1QgKlNhdmVkU2VyaWFsaXphYmxlWGFjdCA9IEludmFsaWRTZXJpYWxpemFi bGVYYWN0OwogCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFByZWRYYWN0TGlzdFNobWVtRGVz YzsKKworc3RhdGljIGludDY0IG1heF9zZXJpYWxpemFibGVfeGFjdHM7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgUldDb25mbGljdFBvb2xTaG1lbURlc2M7CisKK3N0YXRpYyBTaG1l bVN0cnVjdERlc2MgRmluaXNoZWRTZXJpYWxpemFibGVTaG1lbURlc2M7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgU2VyaWFsQ29udHJvbFNobWVtRGVzYzsKKwogLyogbG9jYWwgZnVu Y3Rpb25zICovCiAKIHN0YXRpYyBTRVJJQUxJWkFCTEVYQUNUICpDcmVhdGVQcmVkWGFjdCh2 b2lkKTsKQEAgLTQ0MiwxMyArNDY0LDE4IEBAIHN0YXRpYyB2b2lkIFNldFBvc3NpYmxlVW5z YWZlQ29uZmxpY3QoU0VSSUFMSVpBQkxFWEFDVCAqcm9YYWN0LCBTRVJJQUxJWkFCTEVYQUNU CiBzdGF0aWMgdm9pZCBSZWxlYXNlUldDb25mbGljdChSV0NvbmZsaWN0IGNvbmZsaWN0KTsK IHN0YXRpYyB2b2lkIEZsYWdTeGFjdFVuc2FmZShTRVJJQUxJWkFCTEVYQUNUICpzeGFjdCk7 CiAKLXN0YXRpYyBib29sIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShpbnQ2NCBwYWdl MSwgaW50NjQgcGFnZTIpOwotc3RhdGljIGludAlzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19l cnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBTZXJpYWxBZGQo VHJhbnNhY3Rpb25JZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZsaWN0Q29tbWl0U2Vx Tm8pOwogc3RhdGljIFNlckNvbW1pdFNlcU5vIFNlcmlhbEdldE1pbkNvbmZsaWN0Q29tbWl0 U2VxTm8oVHJhbnNhY3Rpb25JZCB4aWQpOwogc3RhdGljIHZvaWQgU2VyaWFsU2V0QWN0aXZl U2VyWG1pbihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIHN0YXRpYyB1aW50MzIgcHJlZGljYXRl bG9ja19oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKKworc3RhdGljIFNo bWVtSGFzaERlc2MgU2VyaWFsaXphYmxlWGlkSGFzaERlc2M7CisKK3N0YXRpYyBTaG1lbUhh c2hEZXNjIFByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoRGVzYzsKKworc3RhdGljIFNobWVtSGFz aERlc2MgUHJlZGljYXRlTG9ja0hhc2hEZXNjOworCiBzdGF0aWMgdm9pZCBTdW1tYXJpemVP bGRlc3RDb21taXR0ZWRTeGFjdCh2b2lkKTsKIHN0YXRpYyBTbmFwc2hvdCBHZXRTYWZlU25h cHNob3QoU25hcHNob3Qgb3JpZ1NuYXBzaG90KTsKIHN0YXRpYyBTbmFwc2hvdCBHZXRTZXJp YWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KFNuYXBzaG90IHNuYXBzaG90LApAQCAt MTEwMCw3MyArMTEyNyw2MSBAQCBDaGVja1BvaW50UHJlZGljYXRlKHZvaWQpCiAvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCiAKIC8qCi0gKiBQcmVkaWNhdGVMb2NrU2htZW1Jbml0IC0tIElu aXRpYWxpemUgdGhlIHByZWRpY2F0ZSBsb2NraW5nIGRhdGEgc3RydWN0dXJlcy4KLSAqCi0g KiBUaGlzIGlzIGNhbGxlZCBmcm9tIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMo KSwgd2hpY2ggc2VlIGZvcgotICogbW9yZSBjb21tZW50cy4gIEluIHRoZSBub3JtYWwgcG9z dG1hc3RlciBjYXNlLCB0aGUgc2hhcmVkIGhhc2ggdGFibGVzCi0gKiBhcmUgY3JlYXRlZCBo ZXJlLiAgQmFja2VuZHMgaW5oZXJpdCB0aGUgcG9pbnRlcnMKLSAqIHRvIHRoZSBzaGFyZWQg dGFibGVzIHZpYSBmb3JrKCkuICBJbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UsIGVhY2gKLSAq IGJhY2tlbmQgcmUtZXhlY3V0ZXMgdGhpcyBjb2RlIHRvIG9idGFpbiBwb2ludGVycyB0byB0 aGUgYWxyZWFkeSBleGlzdGluZwotICogc2hhcmVkIGhhc2ggdGFibGVzLgorICogUHJlZGlj YXRlTG9ja1NobWVtUmVxdWVzdCAtLSBSZWdpc3RlciB0aGUgcHJlZGljYXRlIGxvY2tpbmcg ZGF0YSBzdHJ1Y3R1cmVzLgogICovCi12b2lkCi1QcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZv aWQpCitzdGF0aWMgdm9pZAorUHJlZGljYXRlTG9ja1NobWVtUmVxdWVzdCh2b2lkICphcmcp CiB7Ci0JSEFTSENUTAkJaW5mbzsKIAlpbnQ2NAkJbWF4X3ByZWRpY2F0ZV9sb2NrX3Rhcmdl dHM7CiAJaW50NjQJCW1heF9wcmVkaWNhdGVfbG9ja3M7Ci0JaW50NjQJCW1heF9zZXJpYWxp emFibGVfeGFjdHM7CiAJaW50NjQJCW1heF9yd19jb25mbGljdHM7Ci0JU2l6ZQkJcmVxdWVz dFNpemU7Ci0JYm9vbAkJZm91bmQ7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JQXNzZXJ0 KCFJc1VuZGVyUG9zdG1hc3Rlcik7Ci0jZW5kaWYKIAogCS8qCi0JICogQ29tcHV0ZSBzaXpl IG9mIHByZWRpY2F0ZSBsb2NrIHRhcmdldCBoYXNodGFibGUuIE5vdGUgdGhlc2UKLQkgKiBj YWxjdWxhdGlvbnMgbXVzdCBhZ3JlZSB3aXRoIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUhCisJ ICogSGFzaCB0YWJsZXMgYW5kIG90aGVyIHN0cnVjdHMgYXJlIHNldCB1cCBieSBTaG1lbUlu aXRSZWdpc3RlcmVkKCkgLworCSAqIFNobWVtQXR0YWNoUmVnaXN0ZXJlZCgpIHZpYSByZWdp c3RlcmVkIGRlc2NyaXB0b3JzIGluCisJICogUHJlZGljYXRlTG9ja1NobWVtUmVnaXN0ZXIo KS4gIEhlcmUgd2UgZG8gdGhlIHJlbWFpbmluZyBpbml0aWFsaXphdGlvbgorCSAqIHRoYXQg Y2FuJ3QgYmUgZG9uZSBpbiBhIGNhbGxiYWNrLgogCSAqLwogCW1heF9wcmVkaWNhdGVfbG9j a190YXJnZXRzID0gTlBSRURJQ0FURUxPQ0tUQVJHRVRFTlRTKCk7CiAKIAkvKgotCSAqIEFs bG9jYXRlIGhhc2ggdGFibGUgZm9yIFBSRURJQ0FURUxPQ0tUQVJHRVQgc3RydWN0cy4gIFRo aXMgc3RvcmVzCisJICogUmVnaXN0ZXIgaGFzaCB0YWJsZSBmb3IgUFJFRElDQVRFTE9DS1RB UkdFVCBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMKIAkgKiBwZXItcHJlZGljYXRlLWxvY2stdGFy Z2V0IGluZm9ybWF0aW9uLgogCSAqLwotCWluZm8ua2V5c2l6ZSA9IHNpemVvZihQUkVESUNB VEVMT0NLVEFSR0VUVEFHKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVM T0NLVEFSR0VUKTsKLQlpbmZvLm51bV9wYXJ0aXRpb25zID0gTlVNX1BSRURJQ0FURUxPQ0tf UEFSVElUSU9OUzsKKwlTaG1lbVJlcXVlc3RIYXNoKCZQcmVkaWNhdGVMb2NrVGFyZ2V0SGFz aERlc2MsICYoU2htZW1SZXF1ZXN0SGFzaE9wdHMpIHsKKwkJLm5hbWUgPSAiUFJFRElDQVRF TE9DS1RBUkdFVCBoYXNoIiwKIAotCVByZWRpY2F0ZUxvY2tUYXJnZXRIYXNoID0gU2htZW1J bml0SGFzaCgiUFJFRElDQVRFTE9DS1RBUkdFVCBoYXNoIiwKLQkJCQkJCQkJCQkJbWF4X3By ZWRpY2F0ZV9sb2NrX3RhcmdldHMsCi0JCQkJCQkJCQkJCW1heF9wcmVkaWNhdGVfbG9ja190 YXJnZXRzLAotCQkJCQkJCQkJCQkmaW5mbywKLQkJCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFT SF9CTE9CUyB8Ci0JCQkJCQkJCQkJCUhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpF KTsKKwkJLmluaXRfc2l6ZSA9IG1heF9wcmVkaWNhdGVfbG9ja190YXJnZXRzLAorCQkubWF4 X3NpemUgPSBtYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0cywKIAotCS8qIFByZS1jYWxjdWxh dGUgdGhlIGhhc2ggYW5kIHBhcnRpdGlvbiBsb2NrIG9mIHRoZSBzY3JhdGNoIGVudHJ5ICov Ci0JU2NyYXRjaFRhcmdldFRhZ0hhc2ggPSBQcmVkaWNhdGVMb2NrVGFyZ2V0VGFnSGFzaENv ZGUoJlNjcmF0Y2hUYXJnZXRUYWcpOwotCVNjcmF0Y2hQYXJ0aXRpb25Mb2NrID0gUHJlZGlj YXRlTG9ja0hhc2hQYXJ0aXRpb25Mb2NrKFNjcmF0Y2hUYXJnZXRUYWdIYXNoKTsKKwkJLnB0 ciA9ICZQcmVkaWNhdGVMb2NrVGFyZ2V0SGFzaCwKKwkJLmhhc2hfaW5mby5rZXlzaXplID0g c2l6ZW9mKFBSRURJQ0FURUxPQ0tUQVJHRVRUQUcpLAorCQkuaGFzaF9pbmZvLmVudHJ5c2l6 ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLVEFSR0VUKSwKKwkJLmhhc2hfaW5mby5udW1fcGFy dGl0aW9ucyA9IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdz ID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhF RF9TSVpFLAorCX0pOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBoYXNoIHRhYmxlIGZvciBQUkVE SUNBVEVMT0NLIHN0cnVjdHMuICBUaGlzIHN0b3JlcyBwZXIKIAkgKiB4YWN0LWxvY2stb2Yt YS10YXJnZXQgaW5mb3JtYXRpb24uCiAJICovCi0JaW5mby5rZXlzaXplID0gc2l6ZW9mKFBS RURJQ0FURUxPQ0tUQUcpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFBSRURJQ0FURUxP Q0spOwotCWluZm8uaGFzaCA9IHByZWRpY2F0ZWxvY2tfaGFzaDsKLQlpbmZvLm51bV9wYXJ0 aXRpb25zID0gTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElUSU9OUzsKIAogCS8qIEFzc3VtZSBh biBhdmVyYWdlIG9mIDIgeGFjdHMgcGVyIHRhcmdldCAqLwogCW1heF9wcmVkaWNhdGVfbG9j a3MgPSBtYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0cyAqIDI7CiAKLQlQcmVkaWNhdGVMb2Nr SGFzaCA9IFNobWVtSW5pdEhhc2goIlBSRURJQ0FURUxPQ0sgaGFzaCIsCi0JCQkJCQkJCQkg IG1heF9wcmVkaWNhdGVfbG9ja3MsCi0JCQkJCQkJCQkgIG1heF9wcmVkaWNhdGVfbG9ja3Ms Ci0JCQkJCQkJCQkgICZpbmZvLAotCQkJCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0ZVTkNU SU9OIHwKLQkJCQkJCQkJCSAgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJWkUpOwor CVNobWVtUmVxdWVzdEhhc2goJlByZWRpY2F0ZUxvY2tIYXNoRGVzYywgJihTaG1lbVJlcXVl c3RIYXNoT3B0cykgeworCQkubmFtZSA9ICJQUkVESUNBVEVMT0NLIGhhc2giLAorCisJCS5p bml0X3NpemUgPSBtYXhfcHJlZGljYXRlX2xvY2tzLAorCQkubWF4X3NpemUgPSBtYXhfcHJl ZGljYXRlX2xvY2tzLAorCisJCS5wdHIgPSAmUHJlZGljYXRlTG9ja0hhc2gsCisJCS5oYXNo X2luZm8ua2V5c2l6ZSA9IHNpemVvZihQUkVESUNBVEVMT0NLVEFHKSwKKwkJLmhhc2hfaW5m by5lbnRyeXNpemUgPSBzaXplb2YoUFJFRElDQVRFTE9DSyksCisJCS5oYXNoX2luZm8uaGFz aCA9IHByZWRpY2F0ZWxvY2tfaGFzaCwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9 IE5VTV9QUkVESUNBVEVMT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9F TEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OIHwgSEFTSF9GSVhFRF9TSVpF LAorCQl9KTsKIAogCS8qCiAJICogQ29tcHV0ZSBzaXplIGZvciBzZXJpYWxpemFibGUgdHJh bnNhY3Rpb24gaGFzaHRhYmxlLiBOb3RlIHRoZXNlCkBAIC0xMTc5LDMwICsxMTk0LDMyIEBA IFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAltYXhfc2VyaWFsaXphYmxlX3hhY3Rz ID0gKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKSAqIDEwOwogCiAJLyoKLQkg KiBBbGxvY2F0ZSBhIGxpc3QgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0cmFuc2FjdGlvbnMg cGFydGljaXBhdGluZyBpbgorCSAqIFJlZ2lzdGVyIGEgbGlzdCB0byBob2xkIGluZm9ybWF0 aW9uIG9uIHRyYW5zYWN0aW9ucyBwYXJ0aWNpcGF0aW5nIGluCiAJICogcHJlZGljYXRlIGxv Y2tpbmcuCiAJICovCi0JcmVxdWVzdFNpemUgPSBhZGRfc2l6ZShQcmVkWGFjdExpc3REYXRh U2l6ZSwKLQkJCQkJCSAgIChtdWxfc2l6ZSgoU2l6ZSkgbWF4X3NlcmlhbGl6YWJsZV94YWN0 cywKLQkJCQkJCQkJCSBzaXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKSk7Ci0JUHJlZFhhY3Qg PSBTaG1lbUluaXRTdHJ1Y3QoIlByZWRYYWN0TGlzdCIsCi0JCQkJCQkJICAgcmVxdWVzdFNp emUsCi0JCQkJCQkJICAgJmZvdW5kKTsKLQlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3Rt YXN0ZXIpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmUHJlZFhhY3RMaXN0U2htZW1EZXNjLCAm KFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJCS5uYW1lID0gIlByZWRYYWN0TGlzdCIs CisJCQkuc2l6ZSA9IGFkZF9zaXplKFByZWRYYWN0TGlzdERhdGFTaXplLAorCQkJCQkJCSAo bXVsX3NpemUoKFNpemUpIG1heF9zZXJpYWxpemFibGVfeGFjdHMsCisJCQkJCQkJCQkgICBz aXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKSksCisJCQkucHRyID0gKHZvaWQgKiopICZQcmVk WGFjdCwKKwkJfSk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGhhc2ggdGFibGUgZm9yIFNFUklB TElaQUJMRVhJRCBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMgcGVyLXhpZAorCSAqIFJlZ2lzdGVy IGhhc2ggdGFibGUgZm9yIFNFUklBTElaQUJMRVhJRCBzdHJ1Y3RzLiAgVGhpcyBzdG9yZXMg cGVyLXhpZAogCSAqIGluZm9ybWF0aW9uIGZvciBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb25z IHdoaWNoIGhhdmUgYWNjZXNzZWQgZGF0YS4KIAkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXpl b2YoU0VSSUFMSVpBQkxFWElEVEFHKTsKLQlpbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihTRVJJ QUxJWkFCTEVYSUQpOworCVNobWVtUmVxdWVzdEhhc2goJlNlcmlhbGl6YWJsZVhpZEhhc2hE ZXNjLCAmKFNobWVtUmVxdWVzdEhhc2hPcHRzKSB7CisJCS5uYW1lID0gIlNFUklBTElaQUJM RVhJRCBoYXNoIiwKKworCQkuaW5pdF9zaXplID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cywK KwkJLm1heF9zaXplID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cywKIAotCVNlcmlhbGl6YWJs ZVhpZEhhc2ggPSBTaG1lbUluaXRIYXNoKCJTRVJJQUxJWkFCTEVYSUQgaGFzaCIsCi0JCQkJ CQkJCQkJbWF4X3NlcmlhbGl6YWJsZV94YWN0cywKLQkJCQkJCQkJCQltYXhfc2VyaWFsaXph YmxlX3hhY3RzLAotCQkJCQkJCQkJCSZpbmZvLAotCQkJCQkJCQkJCUhBU0hfRUxFTSB8IEhB U0hfQkxPQlMgfAotCQkJCQkJCQkJCUhBU0hfRklYRURfU0laRSk7CisJCS5wdHIgPSAmU2Vy aWFsaXphYmxlWGlkSGFzaCwKKwkJLmhhc2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKFNFUklB TElaQUJMRVhJRFRBRyksCisJCS5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKFNFUklB TElaQUJMRVhJRCksCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8 IEhBU0hfRklYRURfU0laRSwKKwkJfSk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHNwYWNlIGZv ciB0cmFja2luZyBydy1jb25mbGljdHMgaW4gbGlzdHMgYXR0YWNoZWQgdG8gdGhlCkBAIC0x MjE3LDU4ICsxMjM0LDUzIEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkKIAkgKi8K IAltYXhfcndfY29uZmxpY3RzID0gbWF4X3NlcmlhbGl6YWJsZV94YWN0cyAqIDU7CiAKLQly ZXF1ZXN0U2l6ZSA9IFJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUgKwotCQltdWxfc2l6 ZSgoU2l6ZSkgbWF4X3J3X2NvbmZsaWN0cywKLQkJCQkgUldDb25mbGljdERhdGFTaXplKTsK KwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlJXQ29uZmxpY3RQb29sU2htZW1EZXNjLCAmKFNobWVt UmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiUldDb25mbGljdFBvb2wiLAorCQku c2l6ZSA9IFJXQ29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUgKyBtdWxfc2l6ZSgoU2l6ZSkg bWF4X3J3X2NvbmZsaWN0cywKKwkJCQkJCQkJCQkJCQkJUldDb25mbGljdERhdGFTaXplKSwK KwkJLnB0ciA9ICh2b2lkICoqKSAmUldDb25mbGljdFBvb2wsCisJfSk7CiAKLQlSV0NvbmZs aWN0UG9vbCA9IFNobWVtSW5pdFN0cnVjdCgiUldDb25mbGljdFBvb2wiLAotCQkJCQkJCQkJ IHJlcXVlc3RTaXplLAotCQkJCQkJCQkJICZmb3VuZCk7Ci0JQXNzZXJ0KGZvdW5kID09IElz VW5kZXJQb3N0bWFzdGVyKTsKLQotCS8qCi0JICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUg aGVhZGVyIGZvciB0aGUgbGlzdCBvZiBmaW5pc2hlZCBzZXJpYWxpemFibGUKLQkgKiB0cmFu c2FjdGlvbnMuCi0JICovCi0JRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbnMgPSAo ZGxpc3RfaGVhZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkZpbmlzaGVkU2VyaWFsaXphYmxl VHJhbnNhY3Rpb25zIiwKLQkJCQkJCXNpemVvZihkbGlzdF9oZWFkKSwKLQkJCQkJCSZmb3Vu ZCk7Ci0JQXNzZXJ0KGZvdW5kID09IElzVW5kZXJQb3N0bWFzdGVyKTsKKwlTaG1lbVJlcXVl c3RTdHJ1Y3QoJkZpbmlzaGVkU2VyaWFsaXphYmxlU2htZW1EZXNjLCAmKFNobWVtUmVxdWVz dFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2Fj dGlvbnMiLAorCQkuc2l6ZSA9IHNpemVvZihkbGlzdF9oZWFkKSwKKwkJLnB0ciA9ICh2b2lk ICoqKSAmRmluaXNoZWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbnMsCisJfSk7CiAKIAkvKgog CSAqIEluaXRpYWxpemUgdGhlIFNMUlUgc3RvcmFnZSBmb3Igb2xkIGNvbW1pdHRlZCBzZXJp YWxpemFibGUKIAkgKiB0cmFuc2FjdGlvbnMuCiAJICovCi0JU2VyaWFsU2xydUN0bC0+UGFn ZVByZWNlZGVzID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5OwotCVNlcmlhbFNscnVD dGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19l cnJvcjsKLQlTaW1wbGVMcnVJbml0KFNlcmlhbFNscnVDdGwsICJzZXJpYWxpemFibGUiLAot CQkJCSAgc2VyaWFsaXphYmxlX2J1ZmZlcnMsIDAsICJwZ19zZXJpYWwiLAotCQkJCSAgTFdU UkFOQ0hFX1NFUklBTF9CVUZGRVIsIExXVFJBTkNIRV9TRVJJQUxfU0xSVSwKLQkJCQkgIFNZ TkNfSEFORExFUl9OT05FLCBmYWxzZSk7CisJU2ltcGxlTHJ1UmVxdWVzdCgmU2VyaWFsU2xy dURlc2MsICYoU2xydVJlcXVlc3RPcHRzKSB7CisJCS5uYW1lID0gInNlcmlhbGl6YWJsZSIs CisJCS5EaXIgPSAicGdfc2VyaWFsIiwKKwkJLmxvbmdfc2VnbWVudF9uYW1lcyA9IGZhbHNl LAorCisJCS5uc2xvdHMgPSBzZXJpYWxpemFibGVfYnVmZmVycywKKworCQkuc3luY19oYW5k bGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCS5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdl UHJlY2VkZXNMb2dpY2FsbHksCisJCS5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gc2VyaWFs X2VycmRldGFpbF9mb3JfaW9fZXJyb3IsCisKKwkJLmJ1ZmZlcl90cmFuY2hlX2lkID0gTFdU UkFOQ0hFX1NFUklBTF9CVUZGRVIsCisJCS5iYW5rX3RyYW5jaGVfaWQgPSBMV1RSQU5DSEVf U0VSSUFMX1NMUlUsCisJCX0pOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIAlTZXJp YWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHMoKTsKICNlbmRpZgotCVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoU2VyaWFsU2xydUN0bCwgU0VSSUFMX0VOVFJJRVNQRVJQQUdF KTsKIAotCS8qCi0JICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgU2VyaWFsQ29udHJvbCBz dHJ1Y3R1cmUuCi0JICovCi0Jc2VyaWFsQ29udHJvbCA9IChTZXJpYWxDb250cm9sKQotCQlT aG1lbUluaXRTdHJ1Y3QoIlNlcmlhbENvbnRyb2xEYXRhIiwgc2l6ZW9mKFNlcmlhbENvbnRy b2xEYXRhKSwgJmZvdW5kKTsKLQlBc3NlcnQoZm91bmQgPT0gSXNVbmRlclBvc3RtYXN0ZXIp OworCVNobWVtUmVxdWVzdFN0cnVjdCgmU2VyaWFsQ29udHJvbFNobWVtRGVzYywgJihTaG1l bVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIlNlcmlhbENvbnRyb2xEYXRhIiwK KwkJLnNpemUgPSBzaXplb2YoU2VyaWFsQ29udHJvbERhdGEpLAorCQkucHRyID0gKHZvaWQg KiopICZzZXJpYWxDb250cm9sLAorCX0pOworfQogCi0JLyoKLQkgKiBJZiB3ZSBqdXN0IGF0 dGFjaGVkIHRvIGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgKEVYRUNfQkFDS0VORCksIHdlJ3Jl IGFsbAotCSAqIGRvbmUuICBPdGhlcndpc2UsIGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAg cHJvY2VlZCB0byBpbml0aWFsaXplIHRoZQotCSAqIHNoYXJlZCBtZW1vcnkuCi0JICovCi0J aWYgKElzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJLyogVGhpcyBuZXZlciBjaGFuZ2VzLCBz byBsZXQncyBrZWVwIGEgbG9jYWwgY29weS4gKi8KLQkJT2xkQ29tbWl0dGVkU3hhY3QgPSBQ cmVkWGFjdC0+T2xkQ29tbWl0dGVkU3hhY3Q7Ci0JCXJldHVybjsKLQl9CitzdGF0aWMgdm9p ZAorUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkICphcmcpCit7CisJaW50CQkJbWF4X3J3 X2NvbmZsaWN0czsKKwlib29sCQlmb3VuZDsKIAogCS8qCiAJICogUmVzZXJ2ZSBhIGR1bW15 IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlOyB3ZSB1c2UgaXQgdG8gbWFrZSBzdXJlIHRoZXJl J3MKQEAgLTEyODAsNyArMTI5Miw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbUluaXQodm9pZCkK IAkJCQkJICAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKIAlBc3NlcnQoIWZvdW5kKTsKIAotCS8q IEluaXRpYWxpemUgUHJlZFhhY3QgbGlzdCAqLwogCWRsaXN0X2luaXQoJlByZWRYYWN0LT5h dmFpbGFibGVMaXN0KTsKIAlkbGlzdF9pbml0KCZQcmVkWGFjdC0+YWN0aXZlTGlzdCk7CiAJ UHJlZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAt MTMyMiw2ICsxMzMzLDkgQEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCWRsaXN0 X2luaXQoJlJXQ29uZmxpY3RQb29sLT5hdmFpbGFibGVMaXN0KTsKIAlSV0NvbmZsaWN0UG9v bC0+ZWxlbWVudCA9IChSV0NvbmZsaWN0KSAoKGNoYXIgKikgUldDb25mbGljdFBvb2wgKwog CQkJCQkJCQkJCQlSV0NvbmZsaWN0UG9vbEhlYWRlckRhdGFTaXplKTsKKworCW1heF9yd19j b25mbGljdHMgPSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzICogNTsKKwogCS8qIEFkZCBhbGwg ZWxlbWVudHMgdG8gYXZhaWxhYmxlIGxpc3QsIGNsZWFuLiAqLwogCWZvciAoaW50IGkgPSAw OyBpIDwgbWF4X3J3X2NvbmZsaWN0czsgaSsrKQogCXsKQEAgLTEzMzgsNjMgKzEzNTIsMjgg QEAgUHJlZGljYXRlTG9ja1NobWVtSW5pdCh2b2lkKQogCXNlcmlhbENvbnRyb2wtPmhlYWRY aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlzZXJpYWxDb250cm9sLT50YWlsWGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJTFdMb2NrUmVsZWFzZShTZXJpYWxDb250cm9sTG9j ayk7Ci19Ci0KLS8qCi0gKiBFc3RpbWF0ZSBzaGFyZWQtbWVtb3J5IHNwYWNlIHVzZWQgZm9y IHByZWRpY2F0ZSBsb2NrIHRhYmxlCi0gKi8KLVNpemUKLVByZWRpY2F0ZUxvY2tTaG1lbVNp emUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlpbnQ2NAkJbWF4X3ByZWRpY2F0ZV9s b2NrX3RhcmdldHM7Ci0JaW50NjQJCW1heF9wcmVkaWNhdGVfbG9ja3M7Ci0JaW50NjQJCW1h eF9zZXJpYWxpemFibGVfeGFjdHM7Ci0JaW50NjQJCW1heF9yd19jb25mbGljdHM7Ci0KLQkv KiBwcmVkaWNhdGUgbG9jayB0YXJnZXQgaGFzaCB0YWJsZSAqLwotCW1heF9wcmVkaWNhdGVf bG9ja190YXJnZXRzID0gTlBSRURJQ0FURUxPQ0tUQVJHRVRFTlRTKCk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShtYXhfcHJlZGljYXRlX2xvY2tfdGFy Z2V0cywKLQkJCQkJCQkJCQkJIHNpemVvZihQUkVESUNBVEVMT0NLVEFSR0VUKSkpOwotCi0J LyogcHJlZGljYXRlIGxvY2sgaGFzaCB0YWJsZSAqLwotCW1heF9wcmVkaWNhdGVfbG9ja3Mg PSBtYXhfcHJlZGljYXRlX2xvY2tfdGFyZ2V0cyAqIDI7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIGhhc2hfZXN0aW1hdGVfc2l6ZShtYXhfcHJlZGljYXRlX2xvY2tzLAotCQkJCQkJCQkJ CQkgc2l6ZW9mKFBSRURJQ0FURUxPQ0spKSk7CiAKLQkvKgotCSAqIFNpbmNlIE5QUkVESUNB VEVMT0NLVEFSR0VURU5UUyBpcyBvbmx5IGFuIGVzdGltYXRlLCBhZGQgMTAlIHNhZmV0eQot CSAqIG1hcmdpbi4KLQkgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZSAvIDEwKTsK LQotCS8qIHRyYW5zYWN0aW9uIGxpc3QgKi8KLQltYXhfc2VyaWFsaXphYmxlX3hhY3RzID0g KE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKSAqIDEwOwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBQcmVkWGFjdExpc3REYXRhU2l6ZSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKChTaXplKSBtYXhfc2VyaWFsaXphYmxlX3hhY3RzLAotCQkJCQkJCQkg ICBzaXplb2YoU0VSSUFMSVpBQkxFWEFDVCkpKTsKLQotCS8qIHRyYW5zYWN0aW9uIHhpZCB0 YWJsZSAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUobWF4 X3NlcmlhbGl6YWJsZV94YWN0cywKLQkJCQkJCQkJCQkJIHNpemVvZihTRVJJQUxJWkFCTEVY SUQpKSk7CisJLyogVGhpcyBuZXZlciBjaGFuZ2VzLCBzbyBsZXQncyBrZWVwIGEgbG9jYWwg Y29weS4gKi8KKwlPbGRDb21taXR0ZWRTeGFjdCA9IFByZWRYYWN0LT5PbGRDb21taXR0ZWRT eGFjdDsKIAotCS8qIHJ3LWNvbmZsaWN0IHBvb2wgKi8KLQltYXhfcndfY29uZmxpY3RzID0g bWF4X3NlcmlhbGl6YWJsZV94YWN0cyAqIDU7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJX Q29uZmxpY3RQb29sSGVhZGVyRGF0YVNpemUpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBt dWxfc2l6ZSgoU2l6ZSkgbWF4X3J3X2NvbmZsaWN0cywKLQkJCQkJCQkJICAgUldDb25mbGlj dERhdGFTaXplKSk7CisJLyogUHJlLWNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgcGFydGl0aW9u IGxvY2sgb2YgdGhlIHNjcmF0Y2ggZW50cnkgKi8KKwlTY3JhdGNoVGFyZ2V0VGFnSGFzaCA9 IFByZWRpY2F0ZUxvY2tUYXJnZXRUYWdIYXNoQ29kZSgmU2NyYXRjaFRhcmdldFRhZyk7CisJ U2NyYXRjaFBhcnRpdGlvbkxvY2sgPSBQcmVkaWNhdGVMb2NrSGFzaFBhcnRpdGlvbkxvY2so U2NyYXRjaFRhcmdldFRhZ0hhc2gpOwogCi0JLyogSGVhZCBmb3IgbGlzdCBvZiBmaW5pc2hl ZCBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb25zLiAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBzaXplb2YoZGxpc3RfaGVhZCkpOworCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2Vy aWFsU2xydUN0bCwgU0VSSUFMX0VOVFJJRVNQRVJQQUdFKTsKK30KIAotCS8qIFNoYXJlZCBt ZW1vcnkgc3RydWN0dXJlcyBmb3IgU0xSVSB0cmFja2luZyBvZiBvbGQgY29tbWl0dGVkIHhp ZHMuICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihTZXJpYWxDb250cm9sRGF0 YSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoc2VyaWFs aXphYmxlX2J1ZmZlcnMsIDApKTsKK3N0YXRpYyB2b2lkCitQcmVkaWNhdGVMb2NrU2htZW1B dHRhY2godm9pZCAqYXJnKQoreworCS8qIFRoaXMgbmV2ZXIgY2hhbmdlcywgc28gbGV0J3Mg a2VlcCBhIGxvY2FsIGNvcHkuICovCisJT2xkQ29tbWl0dGVkU3hhY3QgPSBQcmVkWGFjdC0+ T2xkQ29tbWl0dGVkU3hhY3Q7CiAKLQlyZXR1cm4gc2l6ZTsKKwkvKiBQcmUtY2FsY3VsYXRl IHRoZSBoYXNoIGFuZCBwYXJ0aXRpb24gbG9jayBvZiB0aGUgc2NyYXRjaCBlbnRyeSAqLwor CVNjcmF0Y2hUYXJnZXRUYWdIYXNoID0gUHJlZGljYXRlTG9ja1RhcmdldFRhZ0hhc2hDb2Rl KCZTY3JhdGNoVGFyZ2V0VGFnKTsKKwlTY3JhdGNoUGFydGl0aW9uTG9jayA9IFByZWRpY2F0 ZUxvY2tIYXNoUGFydGl0aW9uTG9jayhTY3JhdGNoVGFyZ2V0VGFnSGFzaCk7CiB9CiAKLQog LyoKICAqIENvbXB1dGUgdGhlIGhhc2ggY29kZSBhc3NvY2lhdGVkIHdpdGggYSBQUkVESUNB VEVMT0NLVEFHLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3Bnc3RhdF9zbHJ1LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xy dS5jCmluZGV4IDIxOTBmMzg4ZWFlLi5mNGRmZTg2OTdkNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NscnUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2xydS5jCkBAIC0xMTksNiArMTE5LDcgQEAgcGdzdGF0 X2dldF9zbHJ1X2luZGV4KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50CQkJaTsKIAorCUFz c2VydChuYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgU0xSVV9OVU1fRUxFTUVOVFM7IGkrKykK IAl7CiAJCWlmIChzdHJjbXAoc2xydV9uYW1lc1tpXSwgbmFtZSkgPT0gMCkKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xv Zy5oCmluZGV4IGExY2ZlZDVmNDNjLi43ODk0OTk4Yzc2MyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2Nsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCkBA IC00MCw4ICs0MCw2IEBAIGV4dGVybiB2b2lkIFRyYW5zYWN0aW9uSWRTZXRUcmVlU3RhdHVz KFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbik7CiBl eHRlcm4gWGlkU3RhdHVzIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4 aWQsIFhMb2dSZWNQdHIgKmxzbik7CiAKLWV4dGVybiBTaXplIENMT0dTaG1lbVNpemUodm9p ZCk7Ci1leHRlcm4gdm9pZCBDTE9HU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9v dFN0cmFwQ0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBDTE9HKHZvaWQpOwogZXh0 ZXJuIHZvaWQgVHJpbUNMT0codm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvY29tbWl0X3RzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKaW5kZXgg NDllZTIxY2Q1ZDIuLjgyNWNjZGE5MGVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvY29tbWl0X3RzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCkBA IC0yNyw4ICsyNyw2IEBAIGV4dGVybiBib29sIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0Rh dGEoVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRMYXRlc3RD b21taXRUc0RhdGEoVGltZXN0YW1wVHogKnRzLAogCQkJCQkJCQkJCSAgIFJlcGxPcmlnaW5J ZCAqbm9kZWlkKTsKIAotZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1lbVNpemUodm9pZCk7Ci1l eHRlcm4gdm9pZCBDb21taXRUc1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIEJvb3RT dHJhcENvbW1pdFRzKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cENvbW1pdFRzKHZvaWQp OwogZXh0ZXJuIHZvaWQgQ29tbWl0VHNQYXJhbWV0ZXJDaGFuZ2UoYm9vbCBuZXd2YWx1ZSwg Ym9vbCBvbGR2YWx1ZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggMmFlOGI1NzFk Y2MuLjZiZTUyOTlhYjY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0xMjEsOCAr MTIxLDYgQEAgZXh0ZXJuIHZvaWQgQXRFT1hhY3RfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJu IHZvaWQgQXRQcmVwYXJlX011bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RQcmVw YXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKTsKIAotZXh0ZXJuIFNpemUg TXVsdGlYYWN0U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgTXVsdGlYYWN0U2htZW1J bml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpOwogZXh0 ZXJuIHZvaWQgU3RhcnR1cE11bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFRyaW1NdWx0 aVhhY3Qodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAppbmRleCBmOTY2ZDBkOWZlNy4uZDRjNjY5YWE3 YTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnUuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImFjY2Vz cy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zeW5jLmgiCiAKIC8qCkBAIC0xMDYsMjMgKzEwNywyMCBAQCB0eXBlZGVm IHN0cnVjdCBTbHJ1U2hhcmVkRGF0YQogCiB0eXBlZGVmIFNscnVTaGFyZWREYXRhICpTbHJ1 U2hhcmVkOwogCi0vKgotICogU2xydUN0bERhdGEgaXMgYW4gdW5zaGFyZWQgc3RydWN0dXJl IHRoYXQgcG9pbnRzIHRvIHRoZSBhY3RpdmUgaW5mb3JtYXRpb24KLSAqIGluIHNoYXJlZCBt ZW1vcnkuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFNscnVDdGxEYXRhCit0eXBlZGVmIHN0cnVj dCBTbHJ1UmVxdWVzdE9wdHMKIHsKLQlTbHJ1U2hhcmVkCXNoYXJlZDsKLQotCS8qIE51bWJl ciBvZiBiYW5rcyBpbiB0aGlzIFNMUlUuICovCi0JdWludDE2CQluYmFua3M7CisJU2htZW1S ZXF1ZXN0U3RydWN0T3B0cyBiYXNlOwogCiAJLyoKLQkgKiBJZiB0cnVlLCB1c2UgbG9uZyBz ZWdtZW50IGZpbGUgbmFtZXMuICBPdGhlcndpc2UsIHVzZSBzaG9ydCBmaWxlIG5hbWVzLgot CSAqCi0JICogRm9yIGRldGFpbHMgYWJvdXQgdGhlIGZpbGUgbmFtZSBmb3JtYXQsIHNlZSBT bHJ1RmlsZU5hbWUoKS4KKwkgKiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2li bGUsIHBpY2sgd2l0aCBjYXJlISkKIAkgKi8KLQlib29sCQlsb25nX3NlZ21lbnRfbmFtZXM7 CisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIG51bWJlciBvZiBwYWdlIHNsb3RzIHRvIHVz ZS4gKi8KKwlpbnQJCQluc2xvdHM7CisKKwkvKiBudW1iZXIgb2YgTFNOIGdyb3VwcyBwZXIg cGFnZSAoc2V0IHRvIHplcm8gaWYgbm90IHJlbGV2YW50KS4gKi8KKwlpbnQJCQlubHNuczsK IAogCS8qCiAJICogV2hpY2ggc3luYyBoYW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhh bmRpbmcgc3luYyByZXF1ZXN0cyBvdmVyIHRvCkBAIC0xMzAsNiArMTI4LDE5IEBAIHR5cGVk ZWYgc3RydWN0IFNscnVDdGxEYXRhCiAJICovCiAJU3luY1JlcXVlc3RIYW5kbGVyIHN5bmNf aGFuZGxlcjsKIAorCS8qCisJICogUEdEQVRBLXJlbGF0aXZlIHN1YmRpcmVjdG9yeSB0aGF0 IHdpbGwgY29udGFpbiB0aGUgZmlsZXMuCisJICovCisJY29uc3QgY2hhciAqRGlyOworCisJ LyoKKwkgKiBJZiB0cnVlLCB1c2UgbG9uZyBzZWdtZW50IGZpbGUgbmFtZXMuICBPdGhlcndp c2UsIHVzZSBzaG9ydCBmaWxlIG5hbWVzLgorCSAqCisJICogRm9yIGRldGFpbHMgYWJvdXQg dGhlIGZpbGUgbmFtZSBmb3JtYXQsIHNlZSBTbHJ1RmlsZU5hbWUoKS4KKwkgKi8KKwlib29s CQlsb25nX3NlZ21lbnRfbmFtZXM7CisKKwogCS8qCiAJICogRGVjaWRlIHdoZXRoZXIgYSBw YWdlIGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKIAkgKiBl dmljdGluZyBwYWdlcyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRy eSBvZiB0aGUgZmlyc3QKQEAgLTE1MywxMyArMTY0LDI4IEBAIHR5cGVkZWYgc3RydWN0IFNs cnVDdGxEYXRhCiAJaW50CQkJKCplcnJkZXRhaWxfZm9yX2lvX2Vycm9yKSAoY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpOwogCiAJLyoKLQkgKiBEaXIgaXMgc2V0IGR1cmluZyBTaW1wbGVM cnVJbml0IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKLQkgKiBpdCdz IGFsd2F5cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBtZW1v cnkuCisJICogVHJhbmNoZSBJRHMgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIg YW5kIHBlci1iYW5rIExXTG9ja3MuICBJZgorCSAqIHRoZXNlIGFyZSBsZWZ0IGFzIHplcm9z LCBuZXcgdHJhbmNoZXMgd2lsbCBiZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KIAkgKi8KLQlj aGFyCQlEaXJbNjRdOwotfSBTbHJ1Q3RsRGF0YTsKKwlpbnQJCQlidWZmZXJfdHJhbmNoZV9p ZDsKKwlpbnQJCQliYW5rX3RyYW5jaGVfaWQ7Cit9IFNscnVSZXF1ZXN0T3B0czsKIAotdHlw ZWRlZiBTbHJ1Q3RsRGF0YSAqU2xydUN0bDsKKy8qCisgKiBTbHJ1RGVzYyBpcyBhbiB1bnNo YXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1hdGlvbgor ICogaW4gc2hhcmVkIG1lbW9yeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2xydURlc2MKK3sK KwlTaG1lbVN0cnVjdERlc2MgYmFzZTsKKworCVNscnVSZXF1ZXN0T3B0cyBvcHRpb25zOwor CisJU2xydVNoYXJlZAlzaGFyZWQ7CisKKwkvKiBOdW1iZXIgb2YgYmFua3MgaW4gdGhpcyBT TFJVLiAqLworCXVpbnQxNgkJbmJhbmtzOworfSBTbHJ1RGVzYzsKIAogLyoKICAqIEdldCB0 aGUgU0xSVSBiYW5rIGxvY2sgZm9yIGdpdmVuIFNscnVDdGwgYW5kIHRoZSBwYWdlbm8uCkBA IC0xNjgsNDggKzE5NCw0OCBAQCB0eXBlZGVmIFNscnVDdGxEYXRhICpTbHJ1Q3RsOwogICog cmVzcGVjdGl2ZSBiYW5rLgogICovCiBzdGF0aWMgaW5saW5lIExXTG9jayAqCi1TaW1wbGVM cnVHZXRCYW5rTG9jayhTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKQorU2ltcGxlTHJ1R2V0 QmFua0xvY2soU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKQogewogCWludAkJCWJhbmtu bzsKIAorCUFzc2VydChjdGwtPm5iYW5rcyAhPSAwKTsKIAliYW5rbm8gPSBwYWdlbm8gJSBj dGwtPm5iYW5rczsKIAlyZXR1cm4gJihjdGwtPnNoYXJlZC0+YmFua19sb2Nrc1tiYW5rbm9d LmxvY2spOwogfQogCi1leHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90 cywgaW50IG5sc25zKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVJlcXVlc3QoU2xydURlc2Mg KmRlc2MsIGNvbnN0IFNscnVSZXF1ZXN0T3B0cyAqb3B0aW9ucyk7CiBleHRlcm4gaW50CVNp bXBsZUxydUF1dG90dW5lQnVmZmVycyhpbnQgZGl2aXNvciwgaW50IG1heCk7Ci1leHRlcm4g dm9pZCBTaW1wbGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQg bnNsb3RzLCBpbnQgbmxzbnMsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IGJ1 ZmZlcl90cmFuY2hlX2lkLAotCQkJCQkJICBpbnQgYmFua190cmFuY2hlX2lkLCBTeW5jUmVx dWVzdEhhbmRsZXIgc3luY19oYW5kbGVyLAotCQkJCQkJICBib29sIGxvbmdfc2VnbWVudF9u YW1lcyk7Ci1leHRlcm4gaW50CVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQ2 NCBwYWdlbm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1WmVyb0FuZFdyaXRlUGFnZShTbHJ1 Q3RsIGN0bCwgaW50NjQgcGFnZW5vKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2Uo U2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKK2V4dGVybiBpbnQJ U2ltcGxlTHJ1WmVyb1BhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKK2V4dGVy biB2b2lkIFNpbXBsZUxydVplcm9BbmRXcml0ZVBhZ2UoU2xydURlc2MgKmN0bCwgaW50NjQg cGFnZW5vKTsKK2V4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydURlc2MgKmN0bCwg aW50NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAogCQkJCQkJCSAgY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOwotZXh0ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1 Q3RsIGN0bCwgaW50NjQgcGFnZW5vLAorZXh0ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShTbHJ1RGVzYyAqY3RsLCBpbnQ2NCBwYWdlbm8sCiAJCQkJCQkJCQkgICBjb25z dCB2b2lkICpvcGFxdWVfZGF0YSk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2Uo U2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVB bGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKK2V4dGVybiB2b2lkIFNp bXBsZUxydVdyaXRlUGFnZShTbHJ1RGVzYyAqY3RsLCBpbnQgc2xvdG5vKTsKK2V4dGVybiB2 b2lkIFNpbXBsZUxydVdyaXRlQWxsKFNscnVEZXNjICpjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0 aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFn ZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJu IHZvaWQgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1RGVzYyAqY3RsLCBpbnQgcGVy X3BhZ2UpOwogI2Vsc2UKICNkZWZpbmUgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhjdGws IHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgotZXh0ZXJuIHZvaWQgU2ltcGxl THJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGludDY0IGN1dG9mZlBhZ2UpOwotZXh0ZXJuIGJv b2wgU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNscnVDdGwgY3RsLCBpbnQ2NCBw YWdlbm8pOworZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNhdGUoU2xydURlc2MgKmN0bCwg aW50NjQgY3V0b2ZmUGFnZSk7CitleHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQ YWdlRXhpc3QoU2xydURlc2MgKmN0bCwgaW50NjQgcGFnZW5vKTsKIAotdHlwZWRlZiBib29s ICgqU2xydVNjYW5DYWxsYmFjaykgKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50 NjQgc2VncGFnZSwKK3R5cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2FsbGJhY2spIChTbHJ1RGVz YyAqY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwKIAkJCQkJCQkJICB2b2lk ICpkYXRhKTsKLWV4dGVybiBib29sIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBT bHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIFNs cnVEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQ2NCBzZWdubyk7CitleHRlcm4gYm9v bCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1RGVzYyAqY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNh bGxiYWNrLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KFNs cnVEZXNjICpjdGwsIGludDY0IHNlZ25vKTsKIAotZXh0ZXJuIGludAlTbHJ1U3luY0ZpbGVU YWcoU2xydUN0bCBjdGwsIGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOworZXh0 ZXJuIGludAlTbHJ1U3luY0ZpbGVUYWcoU2xydURlc2MgKmN0bCwgY29uc3QgRmlsZVRhZyAq ZnRhZywgY2hhciAqcGF0aCk7CiAKIC8qIFNscnVTY2FuRGlyZWN0b3J5IHB1YmxpYyBjYWxs YmFja3MgKi8KLWV4dGVybiBib29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1 Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsCitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiUmVw b3J0UHJlc2VuY2UoU2xydURlc2MgKmN0bCwgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkJ aW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNi RGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwK K2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydURlc2MgKmN0bCwgY2hh ciAqZmlsZW5hbWUsIGludDY0IHNlZ3BhZ2UsCiAJCQkJCQkJCSAgIHZvaWQgKmRhdGEpOwog ZXh0ZXJuIGJvb2wgY2hlY2tfc2xydV9idWZmZXJzKGNvbnN0IGNoYXIgKm5hbWUsIGludCAq bmV3dmFsKTsKIAorZXh0ZXJuIHZvaWQgc2htZW1fc2xydV9pbml0KFNobWVtU3RydWN0RGVz YyAqYmFzZV9kZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzICpvcHRpb25zKTsK K2V4dGVybiB2b2lkIHNobWVtX3NscnVfYXR0YWNoKFNobWVtU3RydWN0RGVzYyAqYmFzZV9k ZXNjLCBjb25zdCBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzICpvcHRpb25zKTsKKwogI2VuZGlm CQkJCQkJCS8qIFNMUlVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1 YnRyYW5zLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaAppbmRleCAxMWI3MzU1 ZGJkZi4uZDk4NmNkOWU4MDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0 cmFucy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCkBAIC0xNSw4ICsx NSw2IEBAIGV4dGVybiB2b2lkIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlk LCBUcmFuc2FjdGlvbklkIHBhcmVudCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFu c0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBT dWJUcmFuc0dldFRvcG1vc3RUcmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCk7CiAKLWV4 dGVybiBTaXplIFNVQlRSQU5TU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgU1VCVFJB TlNTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBTVUJUUkFOUyh2b2lk KTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFj dGl2ZVhJRCk7CiBleHRlcm4gdm9pZCBDaGVja1BvaW50U1VCVFJBTlModm9pZCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvYXN5bmMuaAppbmRleCAzYmFhZTdjYjhkYy4uMjAyZTRhYTVlNzQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvYXN5bmMuaApAQCAtMTksOSArMTksNiBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBUcmFjZV9ub3RpZnk7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9ub3RpZnlfcXVl dWVfcGFnZXM7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IG5v dGlmeUludGVycnVwdFBlbmRpbmc7CiAKLWV4dGVybiBTaXplIEFzeW5jU2htZW1TaXplKHZv aWQpOwotZXh0ZXJuIHZvaWQgQXN5bmNTaG1lbUluaXQodm9pZCk7Ci0KIGV4dGVybiB2b2lk IE5vdGlmeU15RnJvbnRFbmQoY29uc3QgY2hhciAqY2hhbm5lbCwKIAkJCQkJCQkgY29uc3Qg Y2hhciAqcGF5bG9hZCwKIAkJCQkJCQkgaW50MzIgc3JjUGlkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJlZGljYXRlLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3By ZWRpY2F0ZS5oCmluZGV4IGE1YWM1NWI4ZjdlLi40NDNiZmZiNThmZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3ByZWRpY2F0ZS5oCkBAIC00MSwxMSArNDEsNiBAQCB0eXBlZGVmIHZvaWQgKlNlcmlh bGl6YWJsZVhhY3RIYW5kbGU7CiAvKgogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCi0K LS8qIGhvdXNla2VlcGluZyBmb3Igc2hhcmVkIG1lbW9yeSBwcmVkaWNhdGUgbG9jayBzdHJ1 Y3R1cmVzICovCi1leHRlcm4gdm9pZCBQcmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpOwot ZXh0ZXJuIFNpemUgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2b2lkKTsKLQogZXh0ZXJuIHZv aWQgQ2hlY2tQb2ludFByZWRpY2F0ZSh2b2lkKTsKIAogLyogcHJlZGljYXRlIGxvY2sgcmVw b3J0aW5nICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKaW5kZXggYTA3ZmNjZmIxYmEuLmY1OTQ2MGFl MTBmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBAIC0yOSw2ICsyOSw3IEBAIHR5cGVkZWYgZW51 bQogewogCVNITUVNX0tJTkRfU1RSVUNUID0gMCwJCS8qIHBsYWluLCBjb250aWd1b3VzIGFy ZWEgb2YgbWVtb3J5ICovCiAJU0hNRU1fS0lORF9IQVNILAkJCS8qIGEgaGFzaCB0YWJsZSAq LworCVNITUVNX0tJTkRfU0xSVSwJCQkvKiBTTFJVIGJ1ZmZlcnMgYW5kIGNvbnRyb2wgc3Ry dWN0dXJlcyAqLwogfSBTaG1lbUFyZWFLaW5kOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1 YnN5c3RlbWxpc3QuaAppbmRleCA1YzExYjJiMzQ5OS4uNjNkMWQ2MGFlMzYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBAIC0yNSw2ICsyNSwxMyBAQCBQR19TSE1F TV9TVUJTWVNURU0oRFNNUmVnaXN0cnlTaG1lbUNhbGxiYWNrcykKIAogLyogeGxvZywgY2xv ZywgYW5kIGJ1ZmZlcnMgKi8KIFBHX1NITUVNX1NVQlNZU1RFTShWYXJzdXBTaG1lbUNhbGxi YWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShDTE9HU2htZW1DYWxsYmFja3MpCitQR19TSE1F TV9TVUJTWVNURU0oQ29tbWl0VHNTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RF TShTVUJUUkFOU1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKE11bHRpWGFj dFNobWVtQ2FsbGJhY2tzKQorCisvKiBwcmVkaWNhdGUgbG9jayBtYW5hZ2VyICovCitQR19T SE1FTV9TVUJTWVNURU0oUHJlZGljYXRlTG9ja1NobWVtQ2FsbGJhY2tzKQogCiAvKiBwcm9j ZXNzIHRhYmxlICovCiBQR19TSE1FTV9TVUJTWVNURU0oUHJvY0dsb2JhbFNobWVtQ2FsbGJh Y2tzKQpAQCAtMzgsNSArNDUsNiBAQCBQR19TSE1FTV9TVUJTWVNURU0oUE1TaWduYWxTaG1l bUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShQcm9jU2lnbmFsU2htZW1DYWxsYmFj a3MpCiAKIC8qIG90aGVyIG1vZHVsZXMgdGhhdCBuZWVkIHNvbWUgc2hhcmVkIG1lbW9yeSBz cGFjZSAqLworUEdfU0hNRU1fU1VCU1lTVEVNKEFzeW5jU2htZW1DYWxsYmFja3MpCiBQR19T SE1FTV9TVUJTWVNURU0oV2FpdEV2ZW50Q3VzdG9tU2htZW1DYWxsYmFja3MpCiBQR19TSE1F TV9TVUJTWVNURU0oSW5qZWN0aW9uUG9pbnRTaG1lbUNhbGxiYWNrcykKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKaW5kZXggZTRiZDJhZjBiZjUuLmMwMTc4Mzhh Njk0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUu YworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYwpAQCAtNDAs MTQgKzQwLDIyIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9zbHJ1X2RlbGV0ZV9hbGwp OwogLyogTnVtYmVyIG9mIFNMUlUgcGFnZSBzbG90cyAqLwogI2RlZmluZSBOVU1fVEVTVF9C VUZGRVJTCQkxNgogCi1zdGF0aWMgU2xydUN0bERhdGEgVGVzdFNscnVDdGxEYXRhOwotI2Rl ZmluZSBUZXN0U2xydUN0bAkJCSgmVGVzdFNscnVDdGxEYXRhKQorc3RhdGljIHZvaWQgdGVz dF9zbHJ1X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyBib29sIHRlc3Rfc2xy dV9wYWdlX3ByZWNlZGVzX2xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOwor c3RhdGljIGludAl0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lk ICpvcGFxdWVfZGF0YSk7CiAKLXN0YXRpYyBzaG1lbV9yZXF1ZXN0X2hvb2tfdHlwZSBwcmV2 X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7Ci1zdGF0aWMgc2htZW1fc3RhcnR1cF9ob29r X3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBOVUxMOworc3RhdGljIGNvbnN0IGNo YXIgKlRlc3RTbHJ1RGlyID0gInBnX3Rlc3Rfc2xydSI7CisKK3N0YXRpYyBTbHJ1RGVzYyBU ZXN0U2xydURlc2M7CisKK3N0YXRpYyBjb25zdCBTaG1lbUNhbGxiYWNrcyB0ZXN0X3NscnVf c2htZW1fY2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gdGVzdF9zbHJ1X3NobWVtX3Jl cXVlc3QKK307CisKKyNkZWZpbmUgVGVzdFNscnVDdGwJCQkoJlRlc3RTbHJ1RGVzYykKIAog c3RhdGljIGJvb2wKLXRlc3Rfc2xydV9zY2FuX2NiKFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK3Rlc3Rfc2xydV9zY2FuX2NiKFNs cnVEZXNjICpjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRh KQogewogCWVsb2coTk9USUNFLCAiQ2FsbGluZyB0ZXN0X3NscnVfc2Nhbl9jYigpIik7CiAJ cmV0dXJuIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoY3RsLCBmaWxlbmFtZSwgc2VncGFnZSwg ZGF0YSk7CkBAIC0xOTAsMjAgKzE5OCw2IEBAIHRlc3Rfc2xydV9kZWxldGVfYWxsKFBHX0ZV TkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIAotLyoKLSAqIE1vZHVsZSBs b2FkIGNhbGxiYWNrcyBhbmQgaW5pdGlhbGl6YXRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQK LXRlc3Rfc2xydV9zaG1lbV9yZXF1ZXN0KHZvaWQpCi17Ci0JaWYgKHByZXZfc2htZW1fcmVx dWVzdF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOwotCi0JLyogcmVzZXJ2 ZSBzaGFyZWQgbWVtb3J5IGZvciB0aGUgdGVzdCBTTFJVICovCi0JUmVxdWVzdEFkZGluU2ht ZW1TcGFjZShTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1RFU1RfQlVGRkVSUywgMCkpOwotfQot CiBzdGF0aWMgYm9vbAogdGVzdF9zbHJ1X3BhZ2VfcHJlY2VkZXNfbG9naWNhbGx5KGludDY0 IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIHsKQEAgLTIxOCw0OCArMjEyLDYgQEAgdGVzdF9zbHJ1 X2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpCiAJcmV0 dXJuIGVycmRldGFpbCgiQ291bGQgbm90IGFjY2VzcyB0ZXN0X3NscnUgZW50cnkgJXUuIiwg eGlkKTsKIH0KIAotc3RhdGljIHZvaWQKLXRlc3Rfc2xydV9zaG1lbV9zdGFydHVwKHZvaWQp Ci17Ci0JLyoKLQkgKiBTaG9ydCBzZWdtZW50cyBuYW1lcyBhcmUgd2VsbCB0ZXN0ZWQgZWxz ZXdoZXJlIHNvIGluIHRoaXMgdGVzdCB3ZSBhcmUKLQkgKiBmb2N1c2luZyBvbiBsb25nIG5h bWVzLgotCSAqLwotCWNvbnN0IGJvb2wJbG9uZ19zZWdtZW50X25hbWVzID0gdHJ1ZTsKLQlj b25zdCBjaGFyCXNscnVfZGlyX25hbWVbXSA9ICJwZ190ZXN0X3NscnUiOwotCWludAkJCXRl c3RfdHJhbmNoZV9pZCA9IC0xOwotCWludAkJCXRlc3RfYnVmZmVyX3RyYW5jaGVfaWQgPSAt MTsKLQotCWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKLQkJcHJldl9zaG1lbV9zdGFy dHVwX2hvb2soKTsKLQotCS8qCi0JICogQ3JlYXRlIHRoZSBTTFJVIGRpcmVjdG9yeSBpZiBp dCBkb2VzIG5vdCBleGlzdCB5ZXQsIGZyb20gdGhlIHJvb3Qgb2YKLQkgKiB0aGUgZGF0YSBk aXJlY3RvcnkuCi0JICovCi0JKHZvaWQpIE1ha2VQR0RpcmVjdG9yeShzbHJ1X2Rpcl9uYW1l KTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgU0xSVSBmYWNpbGl0eS4gIEluIEVYRUNf QkFDS0VORCBidWlsZHMsIHRoZQotCSAqIHNobWVtX3N0YXJ0dXBfaG9vayBpcyBjYWxsZWQg aW4gdGhlIHBvc3RtYXN0ZXIgYW5kIGluIGVhY2ggYmFja2VuZCwgYnV0Ci0JICogd2Ugb25s eSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBMV0xvY2sgdHJhbmNoZXMgb25jZS4gIE5vdGUgdGhh dCB0aGVzZQotCSAqIHRyYW5jaGUgSUQgdmFyaWFibGVzIGFyZSBub3QgdXNlZCBieSBTaW1w bGVMcnVJbml0KCkgd2hlbgotCSAqIElzVW5kZXJQb3N0bWFzdGVyIGlzIHRydWUuCi0JICov Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCXRlc3RfdHJhbmNoZV9pZCA9IExX TG9ja05ld1RyYW5jaGVJZCgidGVzdF9zbHJ1X3RyYW5jaGUiKTsKLQkJdGVzdF9idWZmZXJf dHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgidGVzdF9idWZmZXJfdHJhbmNoZSIp OwotCX0KLQotCVRlc3RTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSB0ZXN0X3NscnVfcGFnZV9w cmVjZWRlc19sb2dpY2FsbHk7Ci0JVGVzdFNscnVDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJy b3IgPSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKLQlTaW1wbGVMcnVJbml0 KFRlc3RTbHJ1Q3RsLCAiVGVzdFNMUlUiLAotCQkJCSAgTlVNX1RFU1RfQlVGRkVSUywgMCwg c2xydV9kaXJfbmFtZSwKLQkJCQkgIHRlc3RfYnVmZmVyX3RyYW5jaGVfaWQsIHRlc3RfdHJh bmNoZV9pZCwgU1lOQ19IQU5ETEVSX05PTkUsCi0JCQkJICBsb25nX3NlZ21lbnRfbmFtZXMp OwotfQotCiB2b2lkCiBfUEdfaW5pdCh2b2lkKQogewpAQCAtMjY5LDkgKzIyMSwzNyBAQCBf UEdfaW5pdCh2b2lkKQogCQkJCSBlcnJkZXRhaWwoIlwiJXNcIiBtdXN0IGJlIGxvYWRlZCB3 aXRoIFwic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzXCIuIiwKIAkJCQkJCSAgICJ0ZXN0X3Ns cnUiKSkpOwogCi0JcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hv b2s7Ci0Jc2htZW1fcmVxdWVzdF9ob29rID0gdGVzdF9zbHJ1X3NobWVtX3JlcXVlc3Q7CisJ LyoKKwkgKiBDcmVhdGUgdGhlIFNMUlUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0 IHlldCwgZnJvbSB0aGUgcm9vdCBvZgorCSAqIHRoZSBkYXRhIGRpcmVjdG9yeS4KKwkgKi8K Kwkodm9pZCkgTWFrZVBHRGlyZWN0b3J5KFRlc3RTbHJ1RGlyKTsKIAotCXByZXZfc2htZW1f c3RhcnR1cF9ob29rID0gc2htZW1fc3RhcnR1cF9ob29rOwotCXNobWVtX3N0YXJ0dXBfaG9v ayA9IHRlc3Rfc2xydV9zaG1lbV9zdGFydHVwOworCVJlZ2lzdGVyU2htZW1DYWxsYmFja3Mo JnRlc3Rfc2xydV9zaG1lbV9jYWxsYmFja3MpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z bHJ1X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCVNpbXBsZUxydVJlcXVlc3QoJlRl c3RTbHJ1RGVzYywgJihTbHJ1UmVxdWVzdE9wdHMpIHsKKwkJLm5hbWUgPSAiVGVzdFNMUlUi LAorCQkuRGlyID0gVGVzdFNscnVEaXIsCisKKwkJLyoKKwkJICogU2hvcnQgc2VnbWVudHMg bmFtZXMgYXJlIHdlbGwgdGVzdGVkIGVsc2V3aGVyZSBzbyBpbiB0aGlzIHRlc3Qgd2UgYXJl CisJCSAqIGZvY3VzaW5nIG9uIGxvbmcgbmFtZXMuCisJCSAqLworCQkubG9uZ19zZWdtZW50 X25hbWVzID0gdHJ1ZSwKKworCQkubnNsb3RzID0gTlVNX1RFU1RfQlVGRkVSUywKKwkJLm5s c25zID0gMCwKKworCQkuc3luY19oYW5kbGVyID0gU1lOQ19IQU5ETEVSX05PTkUsCisJCS5Q YWdlUHJlY2VkZXMgPSB0ZXN0X3NscnVfcGFnZV9wcmVjZWRlc19sb2dpY2FsbHksCisJCS5l cnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gdGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJy b3IsCisKKwkJLyogbGV0IHNscnUuYyBhc3NpZ24gdGhlc2UgKi8KKwkJLmJ1ZmZlcl90cmFu Y2hlX2lkID0gMCwKKwkJLmJhbmtfdHJhbmNoZV9pZCA9IDAsCisJfSk7CiB9CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDEzOWNiNmY5ZGE1Li5iNjU3Zjg5NTZkYyAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4ODYsMTAgKzI4ODYsMTAgQEAgU2xv dEludmFsaWRhdGlvbkNhdXNlTWFwCiBTbG90TnVtYmVyCiBTbG90U3luY0N0eFN0cnVjdAog U2xvdFN5bmNTa2lwUmVhc29uCi1TbHJ1Q3RsCi1TbHJ1Q3RsRGF0YQorU2xydURlc2MKIFNs cnVFcnJvckNhdXNlCiBTbHJ1UGFnZVN0YXR1cworU2xydVJlcXVlc3RPcHRzCiBTbHJ1U2Nh bkNhbGxiYWNrCiBTbHJ1U2VnU3RhdGUKIFNscnVTaGFyZWQKLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0014-Convert-AIO-to-the-new-interface.patch" Content-Disposition: attachment; filename="v8-0014-Convert-AIO-to-the-new-interface.patch" Content-Transfer-Encoding: base64 RnJvbSA1NTU2ZjJiMTM2NDkzNzhmMDM1YWM5OTQ0NjU1ODQ4NTYxOTg2OWU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMTI6NDM6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDE0LzE2XSBDb252ZXJ0IEFJTyB0byB0aGUgbmV3IGludGVy ZmFjZQoKVGhpcyByZXBsYWNlcyB0aGUgInNobWVtX3NpemUiIGFuZCAic2htZW1faW5pdCIg Y2FsbGJhY2tzIGluIHRoZSBJTwptZXRob2RzIHRhYmxlIHdpdGggdGhlIHNhbWUgU2htZW1D YWxsYmFjayBzdHJ1Y3QgdGhhdCB3ZSBub3cgdXNlIGluCm90aGVyIHN1YnN5c3RlbXMKLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jICAgICAgICB8IDExOSArKysr KysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9f dXJpbmcuYyB8ICA0MiArKysrLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9k X3dvcmtlci5jICAgfCAgODQgKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGNpLmMgICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fp b19pbnRlcm5hbC5oICAgICAgICB8ICAxNiArLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlv X3N1YnN5cy5oICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lz dGVtbGlzdC5oICAgICAgIHwgICAzICsKIDcgZmlsZXMgY2hhbmdlZCwgMTU1IGluc2VydGlv bnMoKyksIDExNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQu YwppbmRleCBkM2M2OGQ4YjA0Yy4uNTRhYjEyMzgxMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMjMsMTYgKzIzLDQ2IEBACiAjaW5jbHVkZSAic3RvcmFnZS9p cGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3No bWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRp bHMvZ3VjLmgiCiAKIAotCi1zdGF0aWMgU2l6ZQotQWlvQ3RsU2htZW1TaXplKHZvaWQpCi17 Ci0JLyogcGdhaW9fY3RsIGl0c2VsZiAqLwotCXJldHVybiBzaXplb2YoUGdBaW9DdGwpOwot fQorc3RhdGljIHZvaWQgQWlvU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBBaW9TaG1lbUluaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIEFpb1NobWVtQXR0YWNo KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEFpb1NobWVtQ2FsbGJhY2tz ID0geworCS5yZXF1ZXN0X2ZuID0gQWlvU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQWlv U2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBBaW9TaG1lbUF0dGFjaCwKK307CisKK3N0YXRp YyBTaG1lbVN0cnVjdERlc2MgQWlvQ3RsU2htZW1EZXNjID0geworCS5uYW1lID0gIkFpb0N0 bCIsCisJLnNpemUgPSBzaXplb2YoUGdBaW9DdGwpLAorCS5wdHIgPSAodm9pZCAqKikgJnBn YWlvX2N0bCwKK307CisKK3N0YXRpYyBQZ0Fpb0JhY2tlbmQgKkFpb0JhY2tlbmRTaG1lbVB0 cjsKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvQmFja2VuZFNobWVtRGVzYyA9IHsKKwku bmFtZSA9ICJBaW9CYWNrZW5kIiwKKwkucHRyID0gKHZvaWQgKiopICZBaW9CYWNrZW5kU2ht ZW1QdHIsCit9Oworc3RhdGljIFBnQWlvSGFuZGxlICpBaW9IYW5kbGVTaG1lbVB0cjsKK3N0 YXRpYyBTaG1lbVN0cnVjdERlc2MgQWlvSGFuZGxlU2htZW1EZXNjID0geworCS5uYW1lID0g IkFpb0hhbmRsZSIsCisJLnB0ciA9ICh2b2lkICoqKSAmQWlvSGFuZGxlU2htZW1QdHIsCit9 Oworc3RhdGljIHN0cnVjdCBpb3ZlYyAqQWlvSGFuZGxlSU9WU2htZW1QdHI7CitzdGF0aWMg U2htZW1TdHJ1Y3REZXNjIEFpb0hhbmRsZUlPVlNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJB aW9IYW5kbGVJT1YiLAorCS5wdHIgPSAodm9pZCAqKikgJkFpb0hhbmRsZUlPVlNobWVtUHRy LAorfTsKK3N0YXRpYyB1aW50NjQgKkFpb0hhbmRsZURhdGFTaG1lbVB0cjsKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgQWlvSGFuZGxlRGF0YVNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJB aW9IYW5kbGVEYXRhIiwKKwkucHRyID0gKHZvaWQgKiopICZBaW9IYW5kbGVEYXRhU2htZW1Q dHIsCit9OwogCiBzdGF0aWMgdWludDMyCiBBaW9Qcm9jcyh2b2lkKQpAQCAtMTA5LDEwICsx MzksMTMgQEAgQWlvQ2hvb3NlTWF4Q29uY3VycmVuY3kodm9pZCkKIAlyZXR1cm4gTWluKG1h eF9wcm9wb3J0aW9uYWxfcGlucywgNjQpOwogfQogCi1TaXplCi1BaW9TaG1lbVNpemUodm9p ZCkKKy8qCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGFyZWEgZm9yIEFJTyBzdWJzeXN0 ZW0uCisgKi8KK3N0YXRpYyB2b2lkCitBaW9TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewot CVNpemUJCXN6ID0gMDsKKwkvKiBSZXNvbHZlIGlvX21heF9jb25jdXJyZW5jeSBpZiBub3Qg YWxyZWFkeSBkb25lLiAqLwogCiAJLyoKIAkgKiBXZSBwcmVmZXIgdG8gcmVwb3J0IHRoaXMg dmFsdWUncyBzb3VyY2UgYXMgUEdDX1NfRFlOQU1JQ19ERUZBVUxULgpAQCAtMTMyLDQ4ICsx NjUsNDEgQEAgQWlvU2htZW1TaXplKHZvaWQpCiAJCQkJCQkJUEdDX1NfT1ZFUlJJREUpOwog CX0KIAotCXN6ID0gYWRkX3NpemUoc3osIEFpb0N0bFNobWVtU2l6ZSgpKTsKLQlzeiA9IGFk ZF9zaXplKHN6LCBBaW9CYWNrZW5kU2htZW1TaXplKCkpOwotCXN6ID0gYWRkX3NpemUoc3os IEFpb0hhbmRsZVNobWVtU2l6ZSgpKTsKLQlzeiA9IGFkZF9zaXplKHN6LCBBaW9IYW5kbGVJ T1ZTaG1lbVNpemUoKSk7Ci0Jc3ogPSBhZGRfc2l6ZShzeiwgQWlvSGFuZGxlRGF0YVNobWVt U2l6ZSgpKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0N0bFNobWVtRGVzYyk7CiAKLQkv KiBSZXNlcnZlIHNwYWNlIGZvciBtZXRob2Qgc3BlY2lmaWMgcmVzb3VyY2VzLiAqLwotCWlm IChwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9zaXplKQotCQlzeiA9IGFkZF9zaXplKHN6LCBw Z2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9zaXplKCkpOworCUFpb0JhY2tlbmRTaG1lbURlc2Mu c2l6ZSA9IEFpb0JhY2tlbmRTaG1lbVNpemUoKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFp b0JhY2tlbmRTaG1lbURlc2MpOwogCi0JcmV0dXJuIHN6OworCUFpb0hhbmRsZVNobWVtRGVz Yy5zaXplID0gQWlvSGFuZGxlU2htZW1TaXplKCk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZB aW9IYW5kbGVTaG1lbURlc2MpOworCisJQWlvSGFuZGxlSU9WU2htZW1EZXNjLnNpemUgPSBB aW9IYW5kbGVJT1ZTaG1lbVNpemUoKTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0hhbmRs ZUlPVlNobWVtRGVzYyk7CisKKwlBaW9IYW5kbGVEYXRhU2htZW1EZXNjLnNpemUgPSBBaW9I YW5kbGVEYXRhU2htZW1TaXplKCk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9IYW5kbGVE YXRhU2htZW1EZXNjKTsKKworCWlmIChwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFj a3MucmVxdWVzdF9mbikKKwkJcGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLnJl cXVlc3RfZm4ocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLnJlcXVlc3RfZm5f YXJnKTsKIH0KIAotdm9pZAotQWlvU2htZW1Jbml0KHZvaWQpCisvKgorICogSW5pdGlhbGl6 ZSBBSU8gc2hhcmVkIG1lbW9yeSBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLgorICovCitz dGF0aWMgdm9pZAorQWlvU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsK IAl1aW50MzIJCWlvX2hhbmRsZV9vZmYgPSAwOwogCXVpbnQzMgkJaW92ZWNfb2ZmID0gMDsK IAl1aW50MzIJCXBlcl9iYWNrZW5kX2lvdmVjcyA9IGlvX21heF9jb25jdXJyZW5jeSAqIGlv X21heF9jb21iaW5lX2xpbWl0OwogCi0JcGdhaW9fY3RsID0gKFBnQWlvQ3RsICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiQWlvQ3RsIiwgQWlvQ3RsU2htZW1TaXplKCksICZmb3VuZCk7Ci0K LQlpZiAoZm91bmQpCi0JCWdvdG8gb3V0OwotCi0JbWVtc2V0KHBnYWlvX2N0bCwgMCwgQWlv Q3RsU2htZW1TaXplKCkpOwotCiAJcGdhaW9fY3RsLT5pb19oYW5kbGVfY291bnQgPSBBaW9Q cm9jcygpICogaW9fbWF4X2NvbmN1cnJlbmN5OwogCXBnYWlvX2N0bC0+aW92ZWNfY291bnQg PSBBaW9Qcm9jcygpICogcGVyX2JhY2tlbmRfaW92ZWNzOwogCi0JcGdhaW9fY3RsLT5iYWNr ZW5kX3N0YXRlID0gKFBnQWlvQmFja2VuZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkFpb0Jh Y2tlbmQiLCBBaW9CYWNrZW5kU2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlwZ2Fpb19jdGwt PmlvX2hhbmRsZXMgPSAoUGdBaW9IYW5kbGUgKikKLQkJU2htZW1Jbml0U3RydWN0KCJBaW9I YW5kbGUiLCBBaW9IYW5kbGVTaG1lbVNpemUoKSwgJmZvdW5kKTsKLQotCXBnYWlvX2N0bC0+ aW92ZWNzID0gKHN0cnVjdCBpb3ZlYyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkFpb0hhbmRs ZUlPViIsIEFpb0hhbmRsZUlPVlNobWVtU2l6ZSgpLCAmZm91bmQpOwotCXBnYWlvX2N0bC0+ aGFuZGxlX2RhdGEgPSAodWludDY0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQWlvSGFuZGxl RGF0YSIsIEFpb0hhbmRsZURhdGFTaG1lbVNpemUoKSwgJmZvdW5kKTsKKwlwZ2Fpb19jdGwt PmJhY2tlbmRfc3RhdGUgPSBBaW9CYWNrZW5kU2htZW1QdHI7CisJcGdhaW9fY3RsLT5pb19o YW5kbGVzID0gQWlvSGFuZGxlU2htZW1QdHI7CisJcGdhaW9fY3RsLT5pb3ZlY3MgPSBBaW9I YW5kbGVJT1ZTaG1lbVB0cjsKKwlwZ2Fpb19jdGwtPmhhbmRsZV9kYXRhID0gQWlvSGFuZGxl RGF0YVNobWVtUHRyOwogCiAJZm9yIChpbnQgcHJvY25vID0gMDsgcHJvY25vIDwgQWlvUHJv Y3MoKTsgcHJvY25vKyspCiAJewpAQCAtMjA4LDEwICsyMzQsMTUgQEAgQWlvU2htZW1Jbml0 KHZvaWQpCiAJCX0KIAl9CiAKLW91dDoKLQkvKiBJbml0aWFsaXplIElPIG1ldGhvZCBzcGVj aWZpYyByZXNvdXJjZXMuICovCi0JaWYgKHBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2luaXQp Ci0JCXBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2luaXQoIWZvdW5kKTsKKwlpZiAocGdhaW9f bWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLmluaXRfZm4pCisJCXBnYWlvX21ldGhvZF9v cHMtPnNobWVtX2NhbGxiYWNrcy5pbml0X2ZuKHBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2Nh bGxiYWNrcy5pbml0X2ZuX2FyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitBaW9TaG1lbUF0dGFj aCh2b2lkICphcmcpCit7CisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2NhbGxiYWNr cy5hdHRhY2hfZm4pCisJCXBnYWlvX21ldGhvZF9vcHMtPnNobWVtX2NhbGxiYWNrcy5hdHRh Y2hfZm4ocGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLmF0dGFjaF9mbl9hcmcp OwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRo b2RfaW9fdXJpbmcuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmlu Zy5jCmluZGV4IDQ4NjdkZWQzNWVhLi5kZjJkMDFkNjZmYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTQ5LDggKzQ5LDggQEAKIAogCiAv KiBFbnRyeSBwb2ludHMgZm9yIElvTWV0aG9kT3BzLiAqLwotc3RhdGljIHNpemVfdCBwZ2Fp b191cmluZ19zaG1lbV9zaXplKHZvaWQpOwotc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfc2ht ZW1faW5pdChib29sIGZpcnN0X3RpbWUpOworc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfc2ht ZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfc2htZW1f aW5pdCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfaW5pdF9iYWNrZW5k KHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWludDE2IG51bV9zdGFn ZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9u KTsKQEAgLTU4LDcgKzU4LDYgQEAgc3RhdGljIHZvaWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUo UGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIC8qIGhlbHBlciBm dW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8oUGdBaW9I YW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTsKIAotCiBjb25zdCBJb01l dGhvZE9wcyBwZ2Fpb191cmluZ19vcHMgPSB7CiAJLyoKIAkgKiBXaGlsZSBpb191cmluZyBt b3N0bHkgaXMgT0sgd2l0aCBGRHMgZ2V0dGluZyBjbG9zZWQgd2hpbGUgdGhlIElPIGlzIGlu CkBAIC02OSw4ICs2OCw4IEBAIGNvbnN0IElvTWV0aG9kT3BzIHBnYWlvX3VyaW5nX29wcyA9 IHsKIAkgKi8KIAkud2FpdF9vbl9mZF9iZWZvcmVfY2xvc2UgPSB0cnVlLAogCi0JLnNobWVt X3NpemUgPSBwZ2Fpb191cmluZ19zaG1lbV9zaXplLAotCS5zaG1lbV9pbml0ID0gcGdhaW9f dXJpbmdfc2htZW1faW5pdCwKKwkuc2htZW1fY2FsbGJhY2tzLnJlcXVlc3RfZm4gPSBwZ2Fp b191cmluZ19zaG1lbV9yZXF1ZXN0LAorCS5zaG1lbV9jYWxsYmFja3MuaW5pdF9mbiA9IHBn YWlvX3VyaW5nX3NobWVtX2luaXQsCiAJLmluaXRfYmFja2VuZCA9IHBnYWlvX3VyaW5nX2lu aXRfYmFja2VuZCwKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCkBAIC0yNjUs MjMgKzI2NCwzNCBAQCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKHZvaWQpCiB7CiAJc2l6ZV90 CQlzejsKIAorCXN6ID0gcGdhaW9fdXJpbmdfY29udGV4dF9zaG1lbV9zaXplKCk7CisJc3og PSBhZGRfc2l6ZShzeiwgcGdhaW9fdXJpbmdfcmluZ19zaG1lbV9zaXplKCkpOworCisJcmV0 dXJuIHN6OworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfc2htZW1fcmVxdWVzdCh2 b2lkICphcmcpCit7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBBaW9VcmluZ1NobWVtRGVz YyA9IHsKKwkJLm5hbWUgPSAiQWlvVXJpbmdDb250ZXh0IiwKKwkJLnB0ciA9ICh2b2lkICoq KSAmcGdhaW9fdXJpbmdfY29udGV4dHMsCisJfTsKKwogCS8qCiAJICogS2VybmVsIGFuZCBs aWJ1cmluZyBzdXBwb3J0IGZvciB2YXJpb3VzIGZlYXR1cmVzIGluZmx1ZW5jZXMgaG93IG11 Y2gKIAkgKiBzaG1lbSB3ZSBuZWVkLCBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgY2hlY2tzLgog CSAqLwogCXBnYWlvX3VyaW5nX2NoZWNrX2NhcGFiaWxpdGllcygpOwogCi0Jc3ogPSBwZ2Fp b191cmluZ19jb250ZXh0X3NobWVtX3NpemUoKTsKLQlzeiA9IGFkZF9zaXplKHN6LCBwZ2Fp b191cmluZ19yaW5nX3NobWVtX3NpemUoKSk7Ci0KLQlyZXR1cm4gc3o7CisJQWlvVXJpbmdT aG1lbURlc2Muc2l6ZSA9IHBnYWlvX3VyaW5nX3NobWVtX3NpemUoKTsKKwlTaG1lbVJlcXVl c3RTdHJ1Y3QoJkFpb1VyaW5nU2htZW1EZXNjKTsKIH0KIAogc3RhdGljIHZvaWQKLXBnYWlv X3VyaW5nX3NobWVtX2luaXQoYm9vbCBmaXJzdF90aW1lKQorcGdhaW9fdXJpbmdfc2htZW1f aW5pdCh2b2lkICphcmcpCiB7CiAJaW50CQkJVG90YWxQcm9jcyA9IHBnYWlvX3VyaW5nX3By b2NzKCk7Ci0JYm9vbAkJZm91bmQ7CiAJY2hhcgkgICAqc2htZW07CiAJc2l6ZV90CQlyaW5n X21lbV9yZW1haW4gPSAwOwogCWNoYXIJICAgKnJpbmdfbWVtX25leHQgPSAwOwpAQCAtMjg5 LDEzICsyOTksMTEgQEAgcGdhaW9fdXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUp CiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCBQZ0Fpb1VyaW5nQ29udGV4 dCBpbnN0YW5jZXMgYW5kLCBpZgogCSAqIHN1cHBvcnRlZCwgdGhlIG1lbW9yeSByZXF1aXJl ZCBmb3IgZWFjaCBvZiB0aGUgaW9fdXJpbmcgaW5zdGFuY2VzLCBpbgotCSAqIG9uZSBTaG1l bUluaXRTdHJ1Y3QoKS4KKwkgKiBvbmUgY29tYmluZWQgYWxsb2NhdGlvbi4KKwkgKgorCSAq IHBnYWlvX3VyaW5nX2NvbnRleHRzIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBiYXNlIG9mIHRo ZSBhbGxvY2F0aW9uLgogCSAqLwotCXNobWVtID0gU2htZW1Jbml0U3RydWN0KCJBaW9Vcmlu Z0NvbnRleHQiLCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKCksICZmb3VuZCk7Ci0JaWYgKGZv dW5kKQotCQlyZXR1cm47Ci0KLQlwZ2Fpb191cmluZ19jb250ZXh0cyA9IChQZ0Fpb1VyaW5n Q29udGV4dCAqKSBzaG1lbTsKKwlzaG1lbSA9IChjaGFyICopIHBnYWlvX3VyaW5nX2NvbnRl eHRzOwogCXNobWVtICs9IHBnYWlvX3VyaW5nX2NvbnRleHRfc2htZW1fc2l6ZSgpOwogCiAJ LyogaWYgc3VwcG9ydGVkLCBoYW5kbGUgbWVtb3J5IGFsaWdubWVudCAvIHNpemluZyBmb3Ig aW9fdXJpbmcgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9tZXRob2Rfd29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29y a2VyLmMKaW5kZXggZWZlMzhlOWYxMTMuLjgyYzhiMDk4YTllIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQu aCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgpAQCAtNzMsMTYgKzc0LDIwIEBAIHR5 cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyQ29udHJvbAogfSBQZ0Fpb1dvcmtlckNvbnRyb2w7 CiAKIAotc3RhdGljIHNpemVfdCBwZ2Fpb193b3JrZXJfc2htZW1fc2l6ZSh2b2lkKTsKLXN0 YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmlyc3RfdGltZSk7Citz dGF0aWMgdm9pZCBwZ2Fpb193b3JrZXJfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9hdHRhY2godm9pZCAqYXJnKTsKKworc3RhdGljIFBn QWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICppb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZTsK IAogc3RhdGljIGJvb2wgcGdhaW9fd29ya2VyX25lZWRzX3N5bmNocm9ub3VzX2V4ZWN1dGlv bihQZ0Fpb0hhbmRsZSAqaW9oKTsKIHN0YXRpYyBpbnQJcGdhaW9fd29ya2VyX3N1Ym1pdCh1 aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcyk7CiAKIAog Y29uc3QgSW9NZXRob2RPcHMgcGdhaW9fd29ya2VyX29wcyA9IHsKLQkuc2htZW1fc2l6ZSA9 IHBnYWlvX3dvcmtlcl9zaG1lbV9zaXplLAotCS5zaG1lbV9pbml0ID0gcGdhaW9fd29ya2Vy X3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5yZXF1ZXN0X2ZuID0gcGdhaW9fd29y a2VyX3NobWVtX3JlcXVlc3QsCisJLnNobWVtX2NhbGxiYWNrcy5pbml0X2ZuID0gcGdhaW9f d29ya2VyX3NobWVtX2luaXQsCisJLnNobWVtX2NhbGxiYWNrcy5hdHRhY2hfZm4gPSBwZ2Fp b193b3JrZXJfc2htZW1fYXR0YWNoLAogCiAJLm5lZWRzX3N5bmNocm9ub3VzX2V4ZWN1dGlv biA9IHBnYWlvX3dvcmtlcl9uZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24sCiAJLnN1Ym1p dCA9IHBnYWlvX3dvcmtlcl9zdWJtaXQsCkBAIC05NSw3ICsxMDAsNiBAQCBpbnQJCQlpb193 b3JrZXJzID0gMzsKIAogc3RhdGljIGludAlpb193b3JrZXJfcXVldWVfc2l6ZSA9IDY0Owog c3RhdGljIGludAlNeUlvV29ya2VySWQ7Ci1zdGF0aWMgUGdBaW9Xb3JrZXJTdWJtaXNzaW9u UXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlvV29ya2Vy Q29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKIApAQCAtMTE2LDUwICsxMjAsNjAgQEAg cGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSh2b2lkKQogCQlzaXplb2YoUGdBaW9X b3JrZXJTbG90KSAqIE1BWF9JT19XT1JLRVJTOwogfQogCi1zdGF0aWMgc2l6ZV90Ci1wZ2Fp b193b3JrZXJfc2htZW1fc2l6ZSh2b2lkKQorLyoKKyAqIFNldCBzZWNvbmRhcnkgQUlPIHdv cmtlciBwb2ludGVyIGZyb20gdGhlIGNvbWJpbmVkIGFsbG9jYXRpb24uCisgKi8KK3N0YXRp YyB2b2lkCitwZ2Fpb193b3JrZXJfc2V0X3NlY29uZGFyeV9wdHIodm9pZCkKIHsKLQlzaXpl X3QJCXN6OwogCWludAkJCXF1ZXVlX3NpemU7CisJU2l6ZQkJcXVldWVfc3ogPSBwZ2Fpb193 b3JrZXJfcXVldWVfc2htZW1fc2l6ZSgmcXVldWVfc2l6ZSk7CiAKLQlzeiA9IHBnYWlvX3dv cmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKTsKLQlzeiA9IGFkZF9zaXplKHN6 LCBwZ2Fpb193b3JrZXJfY29udHJvbF9zaG1lbV9zaXplKCkpOwotCi0JcmV0dXJuIHN6Owor CWlvX3dvcmtlcl9jb250cm9sID0gKFBnQWlvV29ya2VyQ29udHJvbCAqKQorCQkoKGNoYXIg KikgaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUgKyBNQVhBTElHTihxdWV1ZV9zeikpOwog fQogCiBzdGF0aWMgdm9pZAotcGdhaW9fd29ya2VyX3NobWVtX2luaXQoYm9vbCBmaXJzdF90 aW1lKQorcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZv dW5kOwogCWludAkJCXF1ZXVlX3NpemU7CiAKLQlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1 ZSA9Ci0JCVNobWVtSW5pdFN0cnVjdCgiQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlIiwKLQkJ CQkJCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKSwKLQkJCQkJ CSZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1 ZXVlLT5zaXplID0gcXVldWVfc2l6ZTsKLQkJaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUt PmhlYWQgPSAwOwotCQlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+dGFpbCA9IDA7Ci0J fQorCXBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZxdWV1ZV9zaXplKTsKKwlpb193 b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+c2l6ZSA9IHF1ZXVlX3NpemU7CisJaW9fd29ya2Vy X3N1Ym1pc3Npb25fcXVldWUtPmhlYWQgPSAwOworCWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1 ZXVlLT50YWlsID0gMDsKKworCXBnYWlvX3dvcmtlcl9zZXRfc2Vjb25kYXJ5X3B0cigpOwog Ci0JaW9fd29ya2VyX2NvbnRyb2wgPQotCQlTaG1lbUluaXRTdHJ1Y3QoIkFpb1dvcmtlckNv bnRyb2wiLAotCQkJCQkJcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSgpLAotCQkJ CQkJJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQorCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dv cmtlcl9tYXNrID0gMDsKKwlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJTOyAr K2kpCiAJewotCQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayA9IDA7Ci0J CWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKLQkJewotCQkJaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOwotCQkJaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNlID0gZmFsc2U7Ci0JCX0KKwkJaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPSBOVUxMOworCQlpb193b3JrZXJfY29udHJv bC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitw Z2Fpb193b3JrZXJfc2htZW1fYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlwZ2Fpb193b3JrZXJf c2V0X3NlY29uZGFyeV9wdHIoKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9z aG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFp b1dvcmtlclNobWVtRGVzYyA9IHsKKwkJLm5hbWUgPSAiQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlIiwKKwkJLnB0ciA9ICh2b2lkICoqKSAmaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUs CisJfTsKKwlpbnQJCQlxdWV1ZV9zaXplOworCisJQWlvV29ya2VyU2htZW1EZXNjLnNpemUg PQorCQlNQVhBTElHTihwZ2Fpb193b3JrZXJfcXVldWVfc2htZW1fc2l6ZSgmcXVldWVfc2l6 ZSkpICsKKwkJcGdhaW9fd29ya2VyX2NvbnRyb2xfc2htZW1fc2l6ZSgpOworCVNobWVtUmVx dWVzdFN0cnVjdCgmQWlvV29ya2VyU2htZW1EZXNjKTsKK30KKwogc3RhdGljIGludAogcGdh aW9fd29ya2VyX2Nob29zZV9pZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMK aW5kZXggMzIyNTVlYWQyYmYuLmI5NDUwMzVkOThhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jCkBAIC0xMTgsNyArMTE4LDYgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFN5bmNTY2FuU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg U2xvdFN5bmNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFpb1NobWVt U2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdExTTlNobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9naWNhbERlY29kaW5nQ3RsU2htZW1TaXplKCkp OwogCkBAIC0zMDcsNyArMzA2LDYgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9p ZCkKIAlCVHJlZVNobWVtSW5pdCgpOwogCVN5bmNTY2FuU2htZW1Jbml0KCk7CiAJU3RhdHNT aG1lbUluaXQoKTsKLQlBaW9TaG1lbUluaXQoKTsKIAlXYWl0TFNOU2htZW1Jbml0KCk7CiAJ TG9naWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9f aW50ZXJuYWwuaAppbmRleCA1ZmVlYTE1YmU5ZS4uOWRkOGQ2M2IyNWMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgInBv cnQvcGdfaW92ZWMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpby5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAKIAogLyoKQEAgLTI2NywyMCArMjY5LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMKIAkgKi8KIAlib29sCQl3YWl0X29uX2Zk X2JlZm9yZV9jbG9zZTsKIAotCiAJLyogZ2xvYmFsIGluaXRpYWxpemF0aW9uICovCi0KLQkv KgotCSAqIEFtb3VudCBvZiBhZGRpdGlvbmFsIHNoYXJlZCBtZW1vcnkgdG8gcmVzZXJ2ZSBm b3IgdGhlIGlvX21ldGhvZC4gQ2FsbGVkCi0JICoganVzdCBsaWtlIGEgbm9ybWFsIGlwY2ku YyBzdHlsZSAqU2l6ZSgpIGZ1bmN0aW9uLiBPcHRpb25hbC4KLQkgKi8KLQlzaXplX3QJCSgq c2htZW1fc2l6ZSkgKHZvaWQpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1v cnkuIEZpcnN0IHRpbWUgaXMgdHJ1ZSBpZiBBSU8ncyBzaGFyZWQgbWVtb3J5IHdhcwotCSAq IGp1c3QgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZS4gT3B0aW9uYWwuCi0JICovCi0J dm9pZAkJKCpzaG1lbV9pbml0KSAoYm9vbCBmaXJzdF90aW1lKTsKKwlTaG1lbUNhbGxiYWNr cyBzaG1lbV9jYWxsYmFja3M7CiAKIAkvKgogCSAqIFBlci1iYWNrZW5kIGluaXRpYWxpemF0 aW9uLiBPcHRpb25hbC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX3N1 YnN5cy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9fc3Vic3lzLmgKaW5kZXggMjc2Y2Iz ZTMxYzQuLmRkNTQ4NjkzNTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp b19zdWJzeXMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19zdWJzeXMuaApAQCAt MjAsMTIgKzIwLDggQEAKIAogCiAvKiBhaW9faW5pdC5jICovCi1leHRlcm4gU2l6ZSBBaW9T aG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBBaW9TaG1lbUluaXQodm9pZCk7Ci0KIGV4 dGVybiB2b2lkIHBnYWlvX2luaXRfYmFja2VuZCh2b2lkKTsKIAotCiAvKiBhaW8uYyAqLwog ZXh0ZXJuIHZvaWQgcGdhaW9fZXJyb3JfY2xlYW51cCh2b2lkKTsKIGV4dGVybiB2b2lkIEF0 RU9YYWN0X0Fpbyhib29sIGlzX2NvbW1pdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3N1YnN5c3RlbWxpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVt bGlzdC5oCmluZGV4IDYzZDFkNjBhZTM2Li5lOGUwNmJlMzBjMiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zdWJzeXN0ZW1saXN0LmgKQEAgLTQ4LDMgKzQ4LDYgQEAgUEdfU0hNRU1fU1VCU1lT VEVNKFByb2NTaWduYWxTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShBc3lu Y1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFdhaXRFdmVudEN1c3RvbVNo bWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBvaW50U2htZW1D YWxsYmFja3MpCisKKy8qIEFJTyBzdWJzeXN0ZW0uIFRoaXMgZGVsZWdhdGVzIHRvIHRoZSBt ZXRob2Qtc3BlY2lmaWMgY2FsbGJhY2tzICovCitQR19TSE1FTV9TVUJTWVNURU0oQWlvU2ht ZW1DYWxsYmFja3MpCi0tIAoyLjQ3LjMKCg== --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0015-Add-option-for-aligning-shmem-allocations.patch" Content-Disposition: attachment; filename="v8-0015-Add-option-for-aligning-shmem-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZmRjOGNlZjE4ZTU0ZjkzOWRjYTBkYjIwM2Q4MGYxYmFlY2M4NmFlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFNhdCwgMjEgTWFyIDIwMjYgMjM6NDQ6MTUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDE1LzE2XSBBZGQgb3B0aW9uIGZvciBhbGlnbmluZyBzaG1l bSBhbGxvY2F0aW9ucwoKVGhlIGJ1ZmZlciBibG9ja3MgKGluIHRoZSBuZXh0IGNvbW1pdCkg YXJlIElPLWFsaWduZWQuIFRoaXMgbWlnaHQgY29tZQpoYW5keSBpbiBvdGhlciBwbGFjZXMg dG9vLCBzbyBtYWtlIGl0IGFuIGV4cGxpY2l0IGZlYXR1cmUgb2YKU2htZW1SZXF1ZXN0U3Ry dWN0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgfCAyMiArKysrKysr KysrKysrLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggICAgIHwgIDYg KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggNTk1ZjFlNTgyZDUuLmQzODA4 NDMyZmYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTIzNyw3ICsyMzcsNyBA QCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAogI2RlZmluZSBTaG1lbUlu ZGV4TG9jayAoJlNobWVtQWxsb2NhdG9yLT5pbmRleF9sb2NrKQogCi1zdGF0aWMgdm9pZCAq U2htZW1BbGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKTsKK3N0YXRp YyB2b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSBhbGlnbm1lbnQsIFNpemUg KmFsbG9jYXRlZF9zaXplKTsKIAogLyogc2hhcmVkIG1lbW9yeSBnbG9iYWwgdmFyaWFibGVz ICovCiAKQEAgLTQwMCw2ICs0MDAsNyBAQCBTaG1lbUdldFJlcXVlc3RlZFNpemUodm9pZCkK IAogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSk7CiAJ CXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5leHRyYV9zaXplKTsK KwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlcXVlc3QtPm9wdGlvbnMtPmFsaWdubWVudCk7 CiAJfQogCiAJcmV0dXJuIHNpemU7CkBAIC01NzEsNyArNTcyLDcgQEAgQXR0YWNoT3JJbml0 KFNobWVtUmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBpbml0X2FsbG93ZWQsIGJvb2wgYXR0YWNo X2FsbG93ZWQpCiAJCXNpemVfdAkJYWxsb2NhdGVkX3NpemU7CiAJCXZvaWQJICAgKnN0cnVj dFB0cjsKIAotCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHJlcXVlc3QtPm9wdGlvbnMt PnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXco cmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+YWxpZ25tZW50LCAm YWxsb2NhdGVkX3NpemUpOwogCQlpZiAoc3RydWN0UHRyID09IE5VTEwpCiAJCXsKIAkJCS8q IG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8K QEAgLTczMCw3ICs3MzEsNyBAQCBTaG1lbUFsbG9jKFNpemUgc2l6ZSkKIAl2b2lkCSAgICpu ZXdTcGFjZTsKIAlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsKIAotCW5ld1NwYWNlID0gU2htZW1B bGxvY1JhdyhzaXplLCAmYWxsb2NhdGVkX3NpemUpOworCW5ld1NwYWNlID0gU2htZW1BbGxv Y1JhdyhzaXplLCAwLCAmYWxsb2NhdGVkX3NpemUpOwogCWlmICghbmV3U3BhY2UpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKQEAg LTc0OSw3ICs3NTAsNyBAQCBTaG1lbUFsbG9jTm9FcnJvcihTaXplIHNpemUpCiB7CiAJU2l6 ZQkJYWxsb2NhdGVkX3NpemU7CiAKLQlyZXR1cm4gU2htZW1BbGxvY1JhdyhzaXplLCAmYWxs b2NhdGVkX3NpemUpOworCXJldHVybiBTaG1lbUFsbG9jUmF3KHNpemUsIDAsICZhbGxvY2F0 ZWRfc2l6ZSk7CiB9CiAKIC8qCkBAIC03NTksOCArNzYwLDkgQEAgU2htZW1BbGxvY05vRXJy b3IoU2l6ZSBzaXplKQogICogYmUgZXF1YWwgdG8gdGhlIG51bWJlciByZXF1ZXN0ZWQgcGx1 cyBhbnkgcGFkZGluZyB3ZSBjaG9vc2UgdG8gYWRkLgogICovCiBzdGF0aWMgdm9pZCAqCi1T aG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCitTaG1lbUFs bG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSBhbGlnbm1lbnQsIFNpemUgKmFsbG9jYXRlZF9zaXpl KQogeworCVNpemUJCXJhd1N0YXJ0OwogCVNpemUJCW5ld1N0YXJ0OwogCVNpemUJCW5ld0Zy ZWU7CiAJdm9pZAkgICAqbmV3U3BhY2U7CkBAIC03NzYsMTQgKzc3OCwxNSBAQCBTaG1lbUFs bG9jUmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCiAJICogc3RydWN0dXJl cyBvdXQgdG8gYSBwb3dlci1vZi10d28gc2l6ZSAtIGJ1dCB3aXRob3V0IHRoaXMsIGV2ZW4g dGhhdAogCSAqIHdvbid0IGJlIHN1ZmZpY2llbnQuCiAJICovCi0Jc2l6ZSA9IENBQ0hFTElO RUFMSUdOKHNpemUpOwotCSphbGxvY2F0ZWRfc2l6ZSA9IHNpemU7CisJaWYgKGFsaWdubWVu dCA8IFBHX0NBQ0hFX0xJTkVfU0laRSkKKwkJYWxpZ25tZW50ID0gUEdfQ0FDSEVfTElORV9T SVpFOwogCiAJQXNzZXJ0KFNobWVtU2VnSGRyICE9IE5VTEwpOwogCiAJU3BpbkxvY2tBY3F1 aXJlKCZTaG1lbUFsbG9jYXRvci0+c2htZW1fbG9jayk7CiAKLQluZXdTdGFydCA9IFNobWVt QWxsb2NhdG9yLT5mcmVlX29mZnNldDsKKwlyYXdTdGFydCA9IFNobWVtQWxsb2NhdG9yLT5m cmVlX29mZnNldDsKKwluZXdTdGFydCA9IFRZUEVBTElHTihhbGlnbm1lbnQsIHJhd1N0YXJ0 KTsKIAogCW5ld0ZyZWUgPSBuZXdTdGFydCArIHNpemU7CiAJaWYgKG5ld0ZyZWUgPD0gU2ht ZW1TZWdIZHItPnRvdGFsc2l6ZSkKQEAgLTc5Nyw4ICs4MDAsOSBAQCBTaG1lbUFsbG9jUmF3 KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCiAJU3BpbkxvY2tSZWxlYXNlKCZT aG1lbUFsbG9jYXRvci0+c2htZW1fbG9jayk7CiAKIAkvKiBub3RlIHRoaXMgYXNzZXJ0IGlz IG9rYXkgd2l0aCBuZXdTcGFjZSA9PSBOVUxMICovCi0JQXNzZXJ0KG5ld1NwYWNlID09ICh2 b2lkICopIENBQ0hFTElORUFMSUdOKG5ld1NwYWNlKSk7CisJQXNzZXJ0KG5ld1NwYWNlID09 ICh2b2lkICopIFRZUEVBTElHTihhbGlnbm1lbnQsIG5ld1NwYWNlKSk7CiAKKwkqYWxsb2Nh dGVkX3NpemUgPSBuZXdGcmVlIC0gcmF3U3RhcnQ7CiAJcmV0dXJuIG5ld1NwYWNlOwogfQog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3NobWVtLmgKaW5kZXggZjU5NDYwYWUxMGYuLjE1MGM4NmQ1ODg0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9zaG1lbS5oCkBAIC01OSw2ICs1OSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBTaG1l bVJlcXVlc3RTdHJ1Y3RPcHRzCiAKIAlzc2l6ZV90CQlzaXplOwogCisJLyoKKwkgKiBBbGln bm1lbnQgb2YgdGhlIHN0YXJ0aW5nIGFkZHJlc3MuIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRv IGNhY2hlbGluZQorCSAqIGJvdW5kYXJ5LiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorCSAq LworCXNpemVfdAkJYWxpZ25tZW50OworCiAJLyoKIAkgKiBFeHRyYSBzcGFjZSB0byByZXNl cnZlIGluIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQsIGJ1dCBpdCdzIG5vdCBwYXJ0CiAJ ICogb2YgdGhlIHN0cnVjdCBpdHNlbGYuICBUaGlzIGlzIHVzZWQgZm9yIHNoYXJlZCBtZW1v cnkgaGFzaCB0YWJsZXMgdGhhdAotLSAKMi40Ny4zCgo= --------------0TvMQ5YZDW0H8egpRR60Shwk Content-Type: text/x-patch; charset=UTF-8; name="v8-0016-Convert-all-remaining-subsystems-to-use-the-new-A.patch" Content-Disposition: attachment; filename*0="v8-0016-Convert-all-remaining-subsystems-to-use-the-new-A.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4NWQyMjY1OThkNTBhYTc4ZjkxMTlmNTgxZDljY2ZiOTMxNTQ3YTM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjcgTWFyIDIwMjYgMDI6MzE6MDYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDE2LzE2XSBDb252ZXJ0IGFsbCByZW1haW5pbmcgc3Vic3lz dGVtcyB0byB1c2UgdGhlIG5ldyBBUEkKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9zeW5jc2Nhbi5jICAgICAgICAgIHwgIDc5ICsrKystLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAgICAgfCAgNTYgKysrLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgNzcgKysrLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgICAgIHwgIDg2ICsrKyst LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jICAgfCAg NTQgKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAg ICB8ICAzNiArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jICAg ICAgICAgfCAgNTIgKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j ICAgICAgICAgICB8ICA4MSArKysrLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jICAgICAgICAgICAgIHwgMTA3ICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMgICAgICAgICB8ICA1OCArKystLS0KIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcGdhcmNoLmMgICAgICAgICAgICAgICB8ICA0NiArKystLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgICAgICAgIHwgIDY0ICsrKy0tLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwgIDU4ICsr Ky0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsY3RsLmMgIHwg IDMwICstLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICAg IHwgIDYxICsrKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3lu Yy5jICAgIHwgIDQ0ICsrLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAg ICAgICAgICAgICB8ICA2NiArKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyZnVuY3MuYyAgICB8ICA1MiArKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2Fsc2VuZGVyLmMgICAgICAgICAgIHwgIDYxICsrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvX2luaXQuYyAgICAgICAgICAgIHwgIDcxICsrKy0tLS0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jICAgICB8ICAxMiArLQogc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jICAgICAgIHwgIDE2ICstCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jICAgICAgICAgfCAxNjQgKysrKysrKy0t LS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYyAgICAgICAg fCAgNDAgKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAg ICAgIHwgIDk0ICsrKystLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAg ICAgICAgICAgICAgIHwgMTE5ICstLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvbG9jay5jICAgICAgICAgICAgICAgfCAxMjYgKysrKysrLS0tLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jICAgfCAxOTAgKysrKysrKystLS0t LS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0uYyAgICAg fCAxNjEgKysrKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3N5bmNzY2FuLmgg ICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5o ICAgICAgICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwcmVm ZXRjaGVyLmggICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaCAgICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dh aXQuaCAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5oICAgICAgICAgICB8ICAgNCAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVy L2Jnd29ya2VyX2ludGVybmFscy5oICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9iZ3dyaXRlci5oICAgICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvcGdhcmNoLmggICAgICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9wb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaCAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbGN0bC5oICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vcmlnaW4uaCAgICAgICAgICAgICAgfCAgIDQgLQogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc2xvdC5oICAgICAgICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Nsb3RzeW5jLmggICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2Fsc2VuZGVyLmggICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAgICB8ICAgNiArLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICAgICAgICAgIHwgICA0IC0KIHNyYy9pbmNs dWRlL3N0b3JhZ2UvbG9jay5oICAgICAgICAgICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaCAgICAgICAgICAgfCAgMjYgKysrCiBzcmMv aW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5oICAgICAgICAgICAgfCAgIDggLQogLi4u L2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jICAgICAgIHwgIDYwICsrLS0t LQogNTUgZmlsZXMgY2hhbmdlZCwgMTA2MSBpbnNlcnRpb25zKCspLCAxMjU5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vc3luY3NjYW4u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vc3luY3NjYW4uYwppbmRleCA2ZmNmY2Iw ZTU2MC4uNDVkYjZiYmM4YjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vc3luY3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3N5bmNzY2Fu LmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNs dWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog CkBAIC0xMTEsNiArMTEyLDE0IEBAIHR5cGVkZWYgc3RydWN0IHNzX3NjYW5fbG9jYXRpb25z X3QKICNkZWZpbmUgU2l6ZU9mU2NhbkxvY2F0aW9ucyhOKSBcCiAJKG9mZnNldG9mKHNzX3Nj YW5fbG9jYXRpb25zX3QsIGl0ZW1zKSArIChOKSAqIHNpemVvZihzc19scnVfaXRlbV90KSkK IAorc3RhdGljIHZvaWQgU3luY1NjYW5TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRp YyB2b2lkIFN5bmNTY2FuU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2Fs bGJhY2tzIFN5bmNTY2FuU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBTeW5j U2NhblNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFN5bmNTY2FuU2htZW1Jbml0LAorfTsK KwogLyogUG9pbnRlciB0byBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeSAqLwogc3RhdGljIHNz X3NjYW5fbG9jYXRpb25zX3QgKnNjYW5fbG9jYXRpb25zOwogCkBAIC0xMjAsNTggKzEyOSw1 MCBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgc3Nfc2VhcmNoKFJlbEZpbGVMb2NhdG9yIHJlbGZp bGVsb2NhdG9yLAogCiAKIC8qCi0gKiBTeW5jU2NhblNobWVtU2l6ZSAtLS0gcmVwb3J0IGFt b3VudCBvZiBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZAorICogU3luY1NjYW5TaG1lbVJl cXVlc3QgLS0tIHJlZ2lzdGVyIHRoaXMgbW9kdWxlJ3Mgc2hhcmVkIG1lbW9yeQogICovCi1T aXplCi1TeW5jU2NhblNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1N5bmNTY2FuU2ht ZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlyZXR1cm4gU2l6ZU9mU2NhbkxvY2F0aW9ucyhT WU5DX1NDQU5fTkVMRU0pOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgU3luY1NjYW5TaG1l bURlc2M7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlN5bmNTY2FuU2htZW1EZXNjLCAmKFNo bWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiU3luYyBTY2FuIExvY2F0aW9u cyBMaXN0IiwKKwkJLnNpemUgPSBTaXplT2ZTY2FuTG9jYXRpb25zKFNZTkNfU0NBTl9ORUxF TSksCisJCS5wdHIgPSAodm9pZCAqKikgJnNjYW5fbG9jYXRpb25zLAorCX0pOwogfQogCiAv KgogICogU3luY1NjYW5TaG1lbUluaXQgLS0tIGluaXRpYWxpemUgdGhpcyBtb2R1bGUncyBz aGFyZWQgbWVtb3J5CiAgKi8KLXZvaWQKLVN5bmNTY2FuU2htZW1Jbml0KHZvaWQpCitzdGF0 aWMgdm9pZAorU3luY1NjYW5TaG1lbUluaXQodm9pZCAqYXJnKQogewogCWludAkJCWk7Ci0J Ym9vbAkJZm91bmQ7CiAKLQlzY2FuX2xvY2F0aW9ucyA9IChzc19zY2FuX2xvY2F0aW9uc190 ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiU3luYyBTY2FuIExvY2F0aW9ucyBMaXN0IiwKLQkJ CQkJCVNpemVPZlNjYW5Mb2NhdGlvbnMoU1lOQ19TQ0FOX05FTEVNKSwKLQkJCQkJCSZmb3Vu ZCk7CisJc2Nhbl9sb2NhdGlvbnMtPmhlYWQgPSAmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zWzBd OworCXNjYW5fbG9jYXRpb25zLT50YWlsID0gJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tTWU5D X1NDQU5fTkVMRU0gLSAxXTsKIAotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJZm9yIChp ID0gMDsgaSA8IFNZTkNfU0NBTl9ORUxFTTsgaSsrKQogCXsKLQkJLyogSW5pdGlhbGl6ZSBz aGFyZWQgbWVtb3J5IGFyZWEgKi8KLQkJQXNzZXJ0KCFmb3VuZCk7Ci0KLQkJc2Nhbl9sb2Nh dGlvbnMtPmhlYWQgPSAmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zWzBdOwotCQlzY2FuX2xvY2F0 aW9ucy0+dGFpbCA9ICZzY2FuX2xvY2F0aW9ucy0+aXRlbXNbU1lOQ19TQ0FOX05FTEVNIC0g MV07Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNZTkNfU0NBTl9ORUxFTTsgaSsrKQotCQl7Ci0J CQlzc19scnVfaXRlbV90ICppdGVtID0gJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpXTsKLQot CQkJLyoKLQkJCSAqIEluaXRpYWxpemUgYWxsIHNsb3RzIHdpdGggaW52YWxpZCB2YWx1ZXMu IEFzIHNjYW5zIGFyZSBzdGFydGVkLAotCQkJICogdGhlc2UgaW52YWxpZCBlbnRyaWVzIHdp bGwgZmFsbCBvZmYgdGhlIExSVSBsaXN0IGFuZCBnZXQKLQkJCSAqIHJlcGxhY2VkIHdpdGgg cmVhbCBlbnRyaWVzLgotCQkJICovCi0JCQlpdGVtLT5sb2NhdGlvbi5yZWxmaWxlbG9jYXRv ci5zcGNPaWQgPSBJbnZhbGlkT2lkOwotCQkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0 b3IuZGJPaWQgPSBJbnZhbGlkT2lkOwotCQkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0 b3IucmVsTnVtYmVyID0gSW52YWxpZFJlbEZpbGVOdW1iZXI7Ci0JCQlpdGVtLT5sb2NhdGlv bi5sb2NhdGlvbiA9IEludmFsaWRCbG9ja051bWJlcjsKLQotCQkJaXRlbS0+cHJldiA9IChp ID4gMCkgPwotCQkJCSgmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zW2kgLSAxXSkgOiBOVUxMOwot CQkJaXRlbS0+bmV4dCA9IChpIDwgU1lOQ19TQ0FOX05FTEVNIC0gMSkgPwotCQkJCSgmc2Nh bl9sb2NhdGlvbnMtPml0ZW1zW2kgKyAxXSkgOiBOVUxMOwotCQl9CisJCXNzX2xydV9pdGVt X3QgKml0ZW0gPSAmc2Nhbl9sb2NhdGlvbnMtPml0ZW1zW2ldOworCisJCS8qCisJCSAqIElu aXRpYWxpemUgYWxsIHNsb3RzIHdpdGggaW52YWxpZCB2YWx1ZXMuIEFzIHNjYW5zIGFyZSBz dGFydGVkLAorCQkgKiB0aGVzZSBpbnZhbGlkIGVudHJpZXMgd2lsbCBmYWxsIG9mZiB0aGUg TFJVIGxpc3QgYW5kIGdldAorCQkgKiByZXBsYWNlZCB3aXRoIHJlYWwgZW50cmllcy4KKwkJ ICovCisJCWl0ZW0tPmxvY2F0aW9uLnJlbGZpbGVsb2NhdG9yLnNwY09pZCA9IEludmFsaWRP aWQ7CisJCWl0ZW0tPmxvY2F0aW9uLnJlbGZpbGVsb2NhdG9yLmRiT2lkID0gSW52YWxpZE9p ZDsKKwkJaXRlbS0+bG9jYXRpb24ucmVsZmlsZWxvY2F0b3IucmVsTnVtYmVyID0gSW52YWxp ZFJlbEZpbGVOdW1iZXI7CisJCWl0ZW0tPmxvY2F0aW9uLmxvY2F0aW9uID0gSW52YWxpZEJs b2NrTnVtYmVyOworCisJCWl0ZW0tPnByZXYgPSAoaSA+IDApID8KKwkJCSgmc2Nhbl9sb2Nh dGlvbnMtPml0ZW1zW2kgLSAxXSkgOiBOVUxMOworCQlpdGVtLT5uZXh0ID0gKGkgPCBTWU5D X1NDQU5fTkVMRU0gLSAxKSA/CisJCQkoJnNjYW5fbG9jYXRpb25zLT5pdGVtc1tpICsgMV0p IDogTlVMTDsKIAl9Ci0JZWxzZQotCQlBc3NlcnQoZm91bmQpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IDczMmJjNzUwYzllLi4xYWM4NTZl YmRkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMjUsNiAr MjUsNyBAQAogI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1 YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtNDE3LDYgKzQxOCwx MyBAQCB0eXBlZGVmIHN0cnVjdCBCVFZhY0luZm8KIAogc3RhdGljIEJUVmFjSW5mbyAqYnR2 YWNpbmZvOwogCitzdGF0aWMgdm9pZCBCVHJlZVNobWVtUmVxdWVzdCh2b2lkICphcmcpOwor c3RhdGljIHZvaWQgQlRyZWVTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1D YWxsYmFja3MgQlRyZWVTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEJUcmVl U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQlRyZWVTaG1lbUluaXQsCit9OwogCiAvKgog ICogX2J0X3ZhY3V1bV9jeWNsZWlkIC0tLSBnZXQgdGhlIGFjdGl2ZSB2YWN1dW0gY3ljbGUg SUQgZm9yIGFuIGluZGV4LApAQCAtNTUzLDQ3ICs1NjEsMzkgQEAgX2J0X2VuZF92YWN1dW1f Y2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZykKIH0KIAogLyoKLSAqIEJUcmVlU2htZW1T aXplIC0tLSByZXBvcnQgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkCisg KiBCVHJlZVNobWVtUmVxdWVzdCAtLS0gcmVnaXN0ZXIgdGhpcyBtb2R1bGUncyBzaGFyZWQg bWVtb3J5CiAgKi8KLVNpemUKLUJUcmVlU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAor QlRyZWVTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERl c2MgQlRyZWVTaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBvZmZzZXRvZihC VFZhY0luZm8sIHZhY3V1bXMpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShN YXhCYWNrZW5kcywgc2l6ZW9mKEJUT25lVmFjSW5mbykpKTsKLQlyZXR1cm4gc2l6ZTsKKwor CVNobWVtUmVxdWVzdFN0cnVjdCgmQlRyZWVTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3Ry dWN0T3B0cykgeworCQkubmFtZSA9ICJCVHJlZSBWYWN1dW0gU3RhdGUiLAorCQkuc2l6ZSA9 IHNpemUsCisJCS5wdHIgPSAodm9pZCAqKikgJmJ0dmFjaW5mbywKKwkJfSk7CiB9CiAKIC8q CiAgKiBCVHJlZVNobWVtSW5pdCAtLS0gaW5pdGlhbGl6ZSB0aGlzIG1vZHVsZSdzIHNoYXJl ZCBtZW1vcnkKICAqLwotdm9pZAotQlRyZWVTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lk CitCVHJlZVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlidHZh Y2luZm8gPSAoQlRWYWNJbmZvICopIFNobWVtSW5pdFN0cnVjdCgiQlRyZWUgVmFjdXVtIFN0 YXRlIiwKLQkJCQkJCQkJCQkJICBCVHJlZVNobWVtU2l6ZSgpLAotCQkJCQkJCQkJCQkgICZm b3VuZCk7Ci0KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJLyogSW5pdGlhbGl6 ZSBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KLQkJQXNzZXJ0KCFmb3VuZCk7Ci0KLQkJLyoKLQkJ ICogSXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoYXQgdGhlIGN5Y2xlIGNvdW50ZXIgc3Rh cnRzIGF0LCBidXQKLQkJICogaGF2aW5nIGl0IGFsd2F5cyBzdGFydCB0aGUgc2FtZSBkb2Vz bid0IHNlZW0gZ29vZC4gIFNlZWQgd2l0aAotCQkgKiBsb3ctb3JkZXIgYml0cyBvZiB0aW1l KCkgaW5zdGVhZC4KLQkJICovCi0JCWJ0dmFjaW5mby0+Y3ljbGVfY3RyID0gKEJUQ3ljbGVJ ZCkgdGltZShOVUxMKTsKKwkvKgorCSAqIEl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGF0 IHRoZSBjeWNsZSBjb3VudGVyIHN0YXJ0cyBhdCwgYnV0CisJICogaGF2aW5nIGl0IGFsd2F5 cyBzdGFydCB0aGUgc2FtZSBkb2Vzbid0IHNlZW0gZ29vZC4gIFNlZWQgd2l0aAorCSAqIGxv dy1vcmRlciBiaXRzIG9mIHRpbWUoKSBpbnN0ZWFkLgorCSAqLworCWJ0dmFjaW5mby0+Y3lj bGVfY3RyID0gKEJUQ3ljbGVJZCkgdGltZShOVUxMKTsKIAotCQlidHZhY2luZm8tPm51bV92 YWN1dW1zID0gMDsKLQkJYnR2YWNpbmZvLT5tYXhfdmFjdXVtcyA9IE1heEJhY2tlbmRzOwot CX0KLQllbHNlCi0JCUFzc2VydChmb3VuZCk7CisJYnR2YWNpbmZvLT5udW1fdmFjdXVtcyA9 IDA7CisJYnR2YWNpbmZvLT5tYXhfdmFjdXVtcyA9IE1heEJhY2tlbmRzOwogfQogCiBieXRl YSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCBkNDY4Yzk3 NzRiMy4uODhhOTMxZDUwMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhh c2UuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Nh cnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTE4Nyw4ICsxODgsMTYgQEAgdHlwZWRl ZiBzdHJ1Y3QgVHdvUGhhc2VTdGF0ZURhdGEKIAlHbG9iYWxUcmFuc2FjdGlvbiBwcmVwWGFj dHNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gVHdvUGhhc2VTdGF0ZURhdGE7CiAKK3N0 YXRpYyB2b2lkIFR3b1BoYXNlU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBUd29QaGFzZVNobWVtSW5pdCh2b2lkICphcmcpOworCiBzdGF0aWMgVHdvUGhhc2VTdGF0 ZURhdGEgKlR3b1BoYXNlU3RhdGU7CiAKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFR3b1BoYXNl U2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBUd29QaGFzZVNobWVtUmVxdWVz dCwKKwkuaW5pdF9mbiA9IFR3b1BoYXNlU2htZW1Jbml0LAorfTsKKwogLyoKICAqIEdsb2Jh bCB0cmFuc2FjdGlvbiBlbnRyeSBjdXJyZW50bHkgbG9ja2VkIGJ5IHVzLCBpZiBhbnkuICBO b3RlIHRoYXQgYW55CiAgKiBhY2Nlc3MgdG8gdGhlIGVudHJ5IHBvaW50ZWQgdG8gYnkgdGhp cyB2YXJpYWJsZSBtdXN0IGJlIHByb3RlY3RlZCBieQpAQCAtMjM0LDExICsyNDMsMTIgQEAg c3RhdGljIHZvaWQgUmVtb3ZlVHdvUGhhc2VGaWxlKEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQs IGJvb2wgZ2l2ZVdhcm5pbmcpOwogc3RhdGljIHZvaWQgUmVjcmVhdGVUd29QaGFzZUZpbGUo RnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdm9pZCAqY29udGVudCwgaW50IGxlbik7CiAKIC8q Ci0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5CisgKiBSZWdpc3RlciBzaGFy ZWQgbWVtb3J5IGZvciB0d28tcGhhc2Ugc3RhdGUuCiAgKi8KLVNpemUKLVR3b1BoYXNlU2ht ZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorVHdvUGhhc2VTaG1lbVJlcXVlc3Qodm9pZCAq YXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgVHdvUGhhc2VTaG1lbURlc2M7CiAJ U2l6ZQkJc2l6ZTsKIAogCS8qIE5lZWQgdGhlIGZpeGVkIHN0cnVjdCwgdGhlIGFycmF5IG9m IHBvaW50ZXJzLCBhbmQgdGhlIEdURCBzdHJ1Y3RzICovCkBAIC0yNDgsNDYgKzI1OCw0MSBA QCBUd29QaGFzZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBNQVhBTElHTihzaXplKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUobWF4X3ByZXBhcmVkX3hhY3RzLAogCQkJ CQkJCQkgICBzaXplb2YoR2xvYmFsVHJhbnNhY3Rpb25EYXRhKSkpOwotCi0JcmV0dXJuIHNp emU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZUd29QaGFzZVNobWVtRGVzYywgJihTaG1lbVJl cXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIlByZXBhcmVkIFRyYW5zYWN0aW9uIFRh YmxlIiwKKwkJLnNpemUgPSBzaXplLAorCQkucHRyID0gKHZvaWQgKiopICZUd29QaGFzZVN0 YXRlLAorCX0pOwogfQogCi12b2lkCi1Ud29QaGFzZVNobWVtSW5pdCh2b2lkKQorLyoKKyAq IEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgdHdvLXBoYXNlIHN0YXRlLgorICovCitz dGF0aWMgdm9pZAorVHdvUGhhc2VTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZv dW5kOwotCi0JVHdvUGhhc2VTdGF0ZSA9IFNobWVtSW5pdFN0cnVjdCgiUHJlcGFyZWQgVHJh bnNhY3Rpb24gVGFibGUiLAotCQkJCQkJCQkJVHdvUGhhc2VTaG1lbVNpemUoKSwKLQkJCQkJ CQkJCSZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUdsb2JhbFRy YW5zYWN0aW9uIGd4YWN0czsKLQkJaW50CQkJaTsKKwlHbG9iYWxUcmFuc2FjdGlvbiBneGFj dHM7CisJaW50CQkJaTsKIAotCQlBc3NlcnQoIWZvdW5kKTsKLQkJVHdvUGhhc2VTdGF0ZS0+ ZnJlZUdYYWN0cyA9IE5VTEw7Ci0JCVR3b1BoYXNlU3RhdGUtPm51bVByZXBYYWN0cyA9IDA7 CisJVHdvUGhhc2VTdGF0ZS0+ZnJlZUdYYWN0cyA9IE5VTEw7CisJVHdvUGhhc2VTdGF0ZS0+ bnVtUHJlcFhhY3RzID0gMDsKIAotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBsaW5rZWQg bGlzdCBvZiBmcmVlIEdsb2JhbFRyYW5zYWN0aW9uRGF0YSBzdHJ1Y3RzCi0JCSAqLwotCQln eGFjdHMgPSAoR2xvYmFsVHJhbnNhY3Rpb24pCi0JCQkoKGNoYXIgKikgVHdvUGhhc2VTdGF0 ZSArCi0JCQkgTUFYQUxJR04ob2Zmc2V0b2YoVHdvUGhhc2VTdGF0ZURhdGEsIHByZXBYYWN0 cykgKwotCQkJCQkgIHNpemVvZihHbG9iYWxUcmFuc2FjdGlvbikgKiBtYXhfcHJlcGFyZWRf eGFjdHMpKTsKLQkJZm9yIChpID0gMDsgaSA8IG1heF9wcmVwYXJlZF94YWN0czsgaSsrKQot CQl7Ci0JCQkvKiBpbnNlcnQgaW50byBsaW5rZWQgbGlzdCAqLwotCQkJZ3hhY3RzW2ldLm5l eHQgPSBUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzOwotCQkJVHdvUGhhc2VTdGF0ZS0+ZnJl ZUdYYWN0cyA9ICZneGFjdHNbaV07CisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBsaW5rZWQg bGlzdCBvZiBmcmVlIEdsb2JhbFRyYW5zYWN0aW9uRGF0YSBzdHJ1Y3RzCisJICovCisJZ3hh Y3RzID0gKEdsb2JhbFRyYW5zYWN0aW9uKQorCQkoKGNoYXIgKikgVHdvUGhhc2VTdGF0ZSAr CisJCSBNQVhBTElHTihvZmZzZXRvZihUd29QaGFzZVN0YXRlRGF0YSwgcHJlcFhhY3RzKSAr CisJCQkJICBzaXplb2YoR2xvYmFsVHJhbnNhY3Rpb24pICogbWF4X3ByZXBhcmVkX3hhY3Rz KSk7CisJZm9yIChpID0gMDsgaSA8IG1heF9wcmVwYXJlZF94YWN0czsgaSsrKQorCXsKKwkJ LyogaW5zZXJ0IGludG8gbGlua2VkIGxpc3QgKi8KKwkJZ3hhY3RzW2ldLm5leHQgPSBUd29Q aGFzZVN0YXRlLT5mcmVlR1hhY3RzOworCQlUd29QaGFzZVN0YXRlLT5mcmVlR1hhY3RzID0g Jmd4YWN0c1tpXTsKIAotCQkJLyogYXNzb2NpYXRlIGl0IHdpdGggYSBQR1BST0MgYXNzaWdu ZWQgYnkgSW5pdFByb2NHbG9iYWwgKi8KLQkJCWd4YWN0c1tpXS5wZ3Byb2NubyA9IEdldE51 bWJlckZyb21QR1Byb2MoJlByZXBhcmVkWGFjdFByb2NzW2ldKTsKLQkJfQorCQkvKiBhc3Nv Y2lhdGUgaXQgd2l0aCBhIFBHUFJPQyBhc3NpZ25lZCBieSBJbml0UHJvY0dsb2JhbCAqLwor CQlneGFjdHNbaV0ucGdwcm9jbm8gPSBHZXROdW1iZXJGcm9tUEdQcm9jKCZQcmVwYXJlZFhh Y3RQcm9jc1tpXSk7CiAJfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBmNWM5YTM0Mzc0ZC4uNjYwYjUzMGZl NTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTk0LDYgKzk0LDcgQEAK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVp bml0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z dWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAjaW5jbHVkZSAidXRp bHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5oIgpAQCAtNTY2 LDYgKzU2NywxNiBAQCB0eXBlZGVmIGVudW0KIAlXQUxJTlNFUlRfU1BFQ0lBTF9DSEVDS1BP SU5UCiB9IFdhbEluc2VydENsYXNzOwogCitzdGF0aWMgdm9pZCBYTE9HU2htZW1SZXF1ZXN0 KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBYTE9HU2htZW1Jbml0KHZvaWQgKmFyZyk7Citz dGF0aWMgdm9pZCBYTE9HU2htZW1BdHRhY2godm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1D YWxsYmFja3MgWExPR1NobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gWExPR1No bWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFhMT0dTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9 IFhMT0dTaG1lbUF0dGFjaCwKK307CisKIHN0YXRpYyBYTG9nQ3RsRGF0YSAqWExvZ0N0bCA9 IE5VTEw7CiAKIC8qIGEgcHJpdmF0ZSBjb3B5IG9mIFhMb2dDdGwtPkluc2VydC5XQUxJbnNl cnRMb2NrcywgZm9yIGNvbnZlbmllbmNlICovCkBAIC01NzQsNiArNTg1LDcgQEAgc3RhdGlj IFdBTEluc2VydExvY2tQYWRkZWQgKldBTEluc2VydExvY2tzID0gTlVMTDsKIC8qCiAgKiBX ZSBtYWludGFpbiBhbiBpbWFnZSBvZiBwZ19jb250cm9sIGluIHNoYXJlZCBtZW1vcnkuCiAg Ki8KK3N0YXRpYyBDb250cm9sRmlsZURhdGEgKkxvY2FsQ29udHJvbEZpbGUgPSBOVUxMOwog c3RhdGljIENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUgPSBOVUxMOwogCiAvKgpAQCAt NDkyMyw3ICs0OTM1LDggQEAgdm9pZAogTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUoYm9vbCBy ZXNldCkKIHsKIAlBc3NlcnQocmVzZXQgfHwgQ29udHJvbEZpbGUgPT0gTlVMTCk7Ci0JQ29u dHJvbEZpbGUgPSBwYWxsb2Nfb2JqZWN0KENvbnRyb2xGaWxlRGF0YSk7CisJTG9jYWxDb250 cm9sRmlsZSA9IHBhbGxvY19vYmplY3QoQ29udHJvbEZpbGVEYXRhKTsKKwlDb250cm9sRmls ZSA9IExvY2FsQ29udHJvbEZpbGU7CiAJUmVhZENvbnRyb2xGaWxlKCk7CiB9CiAKQEAgLTQ5 MzksMTEgKzQ5NTIsMTMgQEAgR2V0QWN0aXZlV2FsTGV2ZWxPblN0YW5kYnkodm9pZCkKIH0K IAogLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFhMT0cKKyAq IFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgZm9yIFhMT0cuCiAgKi8KLVNpemUKLVhMT0dTaG1l bVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitYTE9HU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykK IHsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFhMb2dDdGxTaG1lbURlc2M7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBDb250cm9sRmlsZVNobWVtRGVzYzsKIAlTaXplCQlzaXplOwog CiAJLyoKQEAgLTQ5ODIsMjMgKzQ5OTcsMjYgQEAgWExPR1NobWVtU2l6ZSh2b2lkKQogCS8q IGFuZCB0aGUgYnVmZmVycyB0aGVtc2VsdmVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IG11bF9zaXplKFhMT0dfQkxDS1NaLCBYTE9HYnVmZmVycykpOwogCi0JLyoKLQkgKiBOb3Rl OiB3ZSBkb24ndCBjb3VudCBDb250cm9sRmlsZURhdGEsIGl0IGNvbWVzIG91dCBvZiB0aGUg InNsb3AgZmFjdG9yIgotCSAqIGFkZGVkIGJ5IENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFw aG9yZXMuICBUaGlzIGxldHMgdXMgdXNlIHRoaXMKLQkgKiByb3V0aW5lIGFnYWluIGJlbG93 IHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIHNpemUuCi0JICovCi0KLQlyZXR1 cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlhMb2dDdGxTaG1lbURlc2MsICYoU2ht ZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJYTE9HIEN0bCIsCisJCS5zaXpl ID0gc2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmWExvZ0N0bCwKKwl9KTsKKwlTaG1lbVJl cXVlc3RTdHJ1Y3QoJkNvbnRyb2xGaWxlU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVj dE9wdHMpIHsKKwkJLm5hbWUgPSAiQ29udHJvbCBGaWxlIiwKKwkJLnNpemUgPSBzaXplb2Yo Q29udHJvbEZpbGVEYXRhKSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmQ29udHJvbEZpbGUsCisJ fSk7CiB9CiAKLXZvaWQKLVhMT0dTaG1lbUluaXQodm9pZCkKKy8qCisgKiBYTE9HU2htZW1J bml0IC0gaW5pdGlhbGl6ZSB0aGUgWExvZ0N0bCBzaGFyZWQgbWVtb3J5IGFyZWEuCisgKi8K K3N0YXRpYyB2b2lkCitYTE9HU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3Vu ZENGaWxlLAotCQkJCWZvdW5kWExvZzsKIAljaGFyCSAgICphbGxvY3B0cjsKIAlpbnQJCQlp OwotCUNvbnRyb2xGaWxlRGF0YSAqbG9jYWxDb250cm9sRmlsZTsKIAogI2lmZGVmIFdBTF9E RUJVRwogCkBAIC01MDE2LDM2ICs1MDM0LDE3IEBAIFhMT0dTaG1lbUluaXQodm9pZCkKIAl9 CiAjZW5kaWYKIAotCi0JWExvZ0N0bCA9IChYTG9nQ3RsRGF0YSAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIlhMT0cgQ3RsIiwgWExPR1NobWVtU2l6ZSgpLCAmZm91bmRYTG9nKTsKLQotCWxv Y2FsQ29udHJvbEZpbGUgPSBDb250cm9sRmlsZTsKLQlDb250cm9sRmlsZSA9IChDb250cm9s RmlsZURhdGEgKikKLQkJU2htZW1Jbml0U3RydWN0KCJDb250cm9sIEZpbGUiLCBzaXplb2Yo Q29udHJvbEZpbGVEYXRhKSwgJmZvdW5kQ0ZpbGUpOwotCi0JaWYgKGZvdW5kQ0ZpbGUgfHwg Zm91bmRYTG9nKQotCXsKLQkJLyogYm90aCBzaG91bGQgYmUgcHJlc2VudCBvciBuZWl0aGVy ICovCi0JCUFzc2VydChmb3VuZENGaWxlICYmIGZvdW5kWExvZyk7Ci0KLQkJLyogSW5pdGlh bGl6ZSBsb2NhbCBjb3B5IG9mIFdBTEluc2VydExvY2tzICovCi0JCVdBTEluc2VydExvY2tz ID0gWExvZ0N0bC0+SW5zZXJ0LldBTEluc2VydExvY2tzOwotCi0JCWlmIChsb2NhbENvbnRy b2xGaWxlKQotCQkJcGZyZWUobG9jYWxDb250cm9sRmlsZSk7Ci0JCXJldHVybjsKLQl9CiAJ bWVtc2V0KFhMb2dDdGwsIDAsIHNpemVvZihYTG9nQ3RsRGF0YSkpOwogCiAJLyoKIAkgKiBB bHJlYWR5IGhhdmUgcmVhZCBjb250cm9sIGZpbGUgbG9jYWxseSwgdW5sZXNzIGluIGJvb3Rz dHJhcCBtb2RlLiBNb3ZlCiAJICogY29udGVudHMgaW50byBzaGFyZWQgbWVtb3J5LgogCSAq LwotCWlmIChsb2NhbENvbnRyb2xGaWxlKQorCWlmIChMb2NhbENvbnRyb2xGaWxlKQogCXsK LQkJbWVtY3B5KENvbnRyb2xGaWxlLCBsb2NhbENvbnRyb2xGaWxlLCBzaXplb2YoQ29udHJv bEZpbGVEYXRhKSk7Ci0JCXBmcmVlKGxvY2FsQ29udHJvbEZpbGUpOworCQltZW1jcHkoQ29u dHJvbEZpbGUsIExvY2FsQ29udHJvbEZpbGUsIHNpemVvZihDb250cm9sRmlsZURhdGEpKTsK KwkJcGZyZWUoTG9jYWxDb250cm9sRmlsZSk7CisJCUxvY2FsQ29udHJvbEZpbGUgPSBOVUxM OwogCX0KIAogCS8qCkBAIC01MTAyLDYgKzUxMDEsMTUgQEAgWExPR1NobWVtSW5pdCh2b2lk KQogCXBnX2F0b21pY19pbml0X3U2NCgmWExvZ0N0bC0+dW5sb2dnZWRMU04sIEludmFsaWRY TG9nUmVjUHRyKTsKIH0KIAorLyoKKyAqIFhMT0dTaG1lbUF0dGFjaCAtIHNldCB1cCBXQUxJ bnNlcnRMb2NrcyBwb2ludGVyIGFmdGVyIGF0dGFjaGluZy4KKyAqLworc3RhdGljIHZvaWQK K1hMT0dTaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJV0FMSW5zZXJ0TG9ja3MgPSBYTG9n Q3RsLT5JbnNlcnQuV0FMSW5zZXJ0TG9ja3M7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmMgbXVz dCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMgcGdfY29u dHJvbAogICogYW5kIHRoZSBpbml0aWFsIFhMT0cgc2VnbWVudC4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5jCmluZGV4IGMyMzVlY2E3YzUxLi4w MDZjNDViODE3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3ByZWZldGNoZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJl ZmV0Y2hlci5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgog I2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdy cHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRp bHMvaHNlYXJjaC5oIgpAQCAtMjAwLDYgKzIwMSwxNCBAQCBzdGF0aWMgTHNuUmVhZFF1ZXVl TmV4dFN0YXR1cyBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2 YXRlLAogCiBzdGF0aWMgWExvZ1ByZWZldGNoU3RhdHMgKlNoYXJlZFN0YXRzOwogCitzdGF0 aWMgdm9pZCBYTG9nUHJlZmV0Y2hTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIFhMb2dQcmVmZXRjaFNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNh bGxiYWNrcyBYTG9nUHJlZmV0Y2hTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9 IFhMb2dQcmVmZXRjaFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFhMb2dQcmVmZXRjaFNo bWVtSW5pdCwKK307CisKIHN0YXRpYyBpbmxpbmUgTHNuUmVhZFF1ZXVlICoKIGxycV9hbGxv Yyh1aW50MzIgbWF4X2Rpc3RhbmNlLAogCQkgIHVpbnQzMiBtYXhfaW5mbGlnaHQsCkBAIC0y OTIsMTAgKzMwMSwyOCBAQCBscnFfY29tcGxldGVfbHNuKExzblJlYWRRdWV1ZSAqbHJxLCBY TG9nUmVjUHRyIGxzbikKIAkJbHJxX3ByZWZldGNoKGxycSk7CiB9CiAKLXNpemVfdAotWExv Z1ByZWZldGNoU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorWExvZ1ByZWZldGNoU2ht ZW1SZXF1ZXN0KHZvaWQgKmFyZykKK3sKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFhMb2dQ cmVmZXRjaFNobWVtRGVzYzsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmWExvZ1ByZWZldGNo U2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiWExv Z1ByZWZldGNoU3RhdHMiLAorCQkuc2l6ZSA9IHNpemVvZihYTG9nUHJlZmV0Y2hTdGF0cyks CisJCS5wdHIgPSAodm9pZCAqKikgJlNoYXJlZFN0YXRzLAorCX0pOworfQorCitzdGF0aWMg dm9pZAorWExvZ1ByZWZldGNoU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlyZXR1cm4gc2l6 ZW9mKFhMb2dQcmVmZXRjaFN0YXRzKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0 YXRzLT5yZXNldF90aW1lLCBHZXRDdXJyZW50VGltZXN0YW1wKCkpOworCXBnX2F0b21pY19p bml0X3U2NCgmU2hhcmVkU3RhdHMtPnByZWZldGNoLCAwKTsKKwlwZ19hdG9taWNfaW5pdF91 NjQoJlNoYXJlZFN0YXRzLT5oaXQsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVk U3RhdHMtPnNraXBfaW5pdCwgMCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0 cy0+c2tpcF9uZXcsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnNr aXBfZnB3LCAwKTsKKwlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX3Jl cCwgMCk7CiB9CiAKIC8qCkBAIC0zMTMsMjcgKzM0MCw2IEBAIFhMb2dQcmVmZXRjaFJlc2V0 U3RhdHModm9pZCkKIAlwZ19hdG9taWNfd3JpdGVfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9y ZXAsIDApOwogfQogCi12b2lkCi1YTG9nUHJlZmV0Y2hTaG1lbUluaXQodm9pZCkKLXsKLQli b29sCQlmb3VuZDsKLQotCVNoYXJlZFN0YXRzID0gKFhMb2dQcmVmZXRjaFN0YXRzICopCi0J CVNobWVtSW5pdFN0cnVjdCgiWExvZ1ByZWZldGNoU3RhdHMiLAotCQkJCQkJc2l6ZW9mKFhM b2dQcmVmZXRjaFN0YXRzKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+cmVzZXRfdGltZSwgR2V0Q3Vy cmVudFRpbWVzdGFtcCgpKTsKLQkJcGdfYXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+ cHJlZmV0Y2gsIDApOwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5oaXQs IDApOwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX2luaXQsIDAp OwotCQlwZ19hdG9taWNfaW5pdF91NjQoJlNoYXJlZFN0YXRzLT5za2lwX25ldywgMCk7Ci0J CXBnX2F0b21pY19pbml0X3U2NCgmU2hhcmVkU3RhdHMtPnNraXBfZnB3LCAwKTsKLQkJcGdf YXRvbWljX2luaXRfdTY0KCZTaGFyZWRTdGF0cy0+c2tpcF9yZXAsIDApOwotCX0KLX0KIAog LyoKICAqIENhbGxlZCB3aGVuIGFueSBHVUMgaXMgY2hhbmdlZCB0aGF0IGFmZmVjdHMgcHJl ZmV0Y2hpbmcuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CmluZGV4IGZkMWMzNmQwNjFkLi5kODdjNDA1OWRhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3Rl bXMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2luY2x1ZGUgInV0aWxzL2Zt Z3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKQEAgLTMwNyw2ICsz MDgsMTQgQEAgc3RhdGljIGNoYXIgKnByaW1hcnlfaW1hZ2VfbWFza2VkID0gTlVMTDsKIAog WExvZ1JlY292ZXJ5Q3RsRGF0YSAqWExvZ1JlY292ZXJ5Q3RsID0gTlVMTDsKIAorc3RhdGlj IHZvaWQgWExvZ1JlY292ZXJ5U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9p ZCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxs YmFja3MgWExvZ1JlY292ZXJ5U2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBY TG9nUmVjb3ZlcnlTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBYTG9nUmVjb3ZlcnlTaG1l bUluaXQsCit9OworCiAvKgogICogYWJvcnRlZFJlY1B0ciBpcyB0aGUgc3RhcnQgcG9pbnRl ciBvZiBhIGJyb2tlbiByZWNvcmQgYXQgZW5kIG9mIFdBTCB3aGVuCiAgKiByZWNvdmVyeSBj b21wbGV0ZXM7IG1pc3NpbmdDb250cmVjUHRyIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmly c3QKQEAgLTM4NSwyOCArMzk0LDIzIEBAIHN0YXRpYyB2b2lkIFNldEN1cnJlbnRDaHVua1N0 YXJ0VGltZShUaW1lc3RhbXBUeiB4dGltZSk7CiBzdGF0aWMgdm9pZCBTZXRMYXRlc3RYVGlt ZShUaW1lc3RhbXBUeiB4dGltZSk7CiAKIC8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFy ZWQgbWVtb3J5IGZvciBXQUwgcmVjb3ZlcnkKKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkg Zm9yIFdBTCByZWNvdmVyeQogICovCi1TaXplCi1YTG9nUmVjb3ZlcnlTaG1lbVNpemUodm9p ZCkKK3N0YXRpYyB2b2lkCitYTG9nUmVjb3ZlcnlTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQog ewotCVNpemUJCXNpemU7Ci0KLQkvKiBYTG9nUmVjb3ZlcnlDdGwgKi8KLQlzaXplID0gc2l6 ZW9mKFhMb2dSZWNvdmVyeUN0bERhdGEpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgWExv Z1JlY292ZXJ5U2htZW1EZXNjOwogCi0JcmV0dXJuIHNpemU7CisJU2htZW1SZXF1ZXN0U3Ry dWN0KCZYTG9nUmVjb3ZlcnlTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykg eworCQkubmFtZSA9ICJYTE9HIFJlY292ZXJ5IEN0bCIsCisJCS5zaXplID0gc2l6ZW9mKFhM b2dSZWNvdmVyeUN0bERhdGEpLAorCQkucHRyID0gKHZvaWQgKiopICZYTG9nUmVjb3ZlcnlD dGwsCisJfSk7CiB9CiAKLXZvaWQKLVhMb2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkKQorc3Rh dGljIHZvaWQKK1hMb2dSZWNvdmVyeVNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJ Zm91bmQ7Ci0KLQlYTG9nUmVjb3ZlcnlDdGwgPSAoWExvZ1JlY292ZXJ5Q3RsRGF0YSAqKQot CQlTaG1lbUluaXRTdHJ1Y3QoIlhMT0cgUmVjb3ZlcnkgQ3RsIiwgWExvZ1JlY292ZXJ5U2ht ZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZvdW5kKQotCQlyZXR1cm47CiAJbWVtc2V0KFhM b2dSZWNvdmVyeUN0bCwgMCwgc2l6ZW9mKFhMb2dSZWNvdmVyeUN0bERhdGEpKTsKIAogCVNw aW5Mb2NrSW5pdCgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3dhaXQuYwppbmRleCBiZjQ2MzA2NzdiNC4uODMwZWFkNDRiZGQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3dhaXQuYwpAQCAtNTcsNiArNTcs NyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z dWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUg InV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTY4LDYg KzY5LDE0IEBAIHN0YXRpYyBpbnQJd2FpdGxzbl9jbXAoY29uc3QgcGFpcmluZ2hlYXBfbm9k ZSAqYSwgY29uc3QgcGFpcmluZ2hlYXBfbm9kZSAqYiwKIAogc3RydWN0IFdhaXRMU05TdGF0 ZSAqd2FpdExTTlN0YXRlID0gTlVMTDsKIAorc3RhdGljIHZvaWQgV2FpdExTTlNobWVtUmVx dWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgV2FpdExTTlNobWVtSW5pdCh2b2lkICph cmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNrcyBXYWl0TFNOU2htZW1DYWxsYmFja3MgPSB7 CisJLnJlcXVlc3RfZm4gPSBXYWl0TFNOU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gV2Fp dExTTlNobWVtSW5pdCwKK307CisKIC8qCiAgKiBXYWl0IGV2ZW50IGZvciBlYWNoIFdhaXRM U05UeXBlLCB1c2VkIHdpdGggV2FpdExhdGNoKCkgdG8gcmVwb3J0CiAgKiB0aGUgd2FpdCBp biBwZ19zdGF0X2FjdGl2aXR5LgpAQCAtMTA5LDQxICsxMTgsMzYgQEAgR2V0Q3VycmVudExT TkZvcldhaXRUeXBlKFdhaXRMU05UeXBlIGxzblR5cGUpCiAJcGdfdW5yZWFjaGFibGUoKTsK IH0KIAotLyogUmVwb3J0IHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVk ZWQgZm9yIFdhaXRMU05TdGF0ZS4gKi8KLVNpemUKLVdhaXRMU05TaG1lbVNpemUodm9pZCkK Ky8qIFJlZ2lzdGVyIHRoZSBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgV2FpdExT TlN0YXRlLiAqLworc3RhdGljIHZvaWQKK1dhaXRMU05TaG1lbVJlcXVlc3Qodm9pZCAqYXJn KQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgV2FpdExTTlNobWVtRGVzYzsKIAlTaXpl CQlzaXplOwogCiAJc2l6ZSA9IG9mZnNldG9mKFdhaXRMU05TdGF0ZSwgcHJvY0luZm9zKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4QmFja2VuZHMgKyBOVU1fQVVY SUxJQVJZX1BST0NTLCBzaXplb2YoV2FpdExTTlByb2NJbmZvKSkpOwotCXJldHVybiBzaXpl OworCVNobWVtUmVxdWVzdFN0cnVjdCgmV2FpdExTTlNobWVtRGVzYywgJihTaG1lbVJlcXVl c3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIldhaXRMU05TdGF0ZSIsCisJCS5zaXplID0g c2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmd2FpdExTTlN0YXRlLAorCX0pOwogfQogCiAv KiBJbml0aWFsaXplIHRoZSBXYWl0TFNOU3RhdGUgaW4gdGhlIHNoYXJlZCBtZW1vcnkuICov Ci12b2lkCi1XYWl0TFNOU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorV2FpdExTTlNo bWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQl3YWl0TFNOU3RhdGUg PSAoV2FpdExTTlN0YXRlICopIFNobWVtSW5pdFN0cnVjdCgiV2FpdExTTlN0YXRlIiwKLQkJ CQkJCQkJCQkJCQlXYWl0TFNOU2htZW1TaXplKCksCi0JCQkJCQkJCQkJCQkJJmZvdW5kKTsK LQlpZiAoIWZvdW5kKQorCS8qIEluaXRpYWxpemUgaGVhcHMgYW5kIHRyYWNraW5nICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBXQUlUX0xTTl9UWVBFX0NPVU5UOyBpKyspCiAJewotCQlp bnQJCQlpOwotCi0JCS8qIEluaXRpYWxpemUgaGVhcHMgYW5kIHRyYWNraW5nICovCi0JCWZv ciAoaSA9IDA7IGkgPCBXQUlUX0xTTl9UWVBFX0NPVU5UOyBpKyspCi0JCXsKLQkJCXBnX2F0 b21pY19pbml0X3U2NCgmd2FpdExTTlN0YXRlLT5taW5XYWl0ZWRMU05baV0sIFBHX1VJTlQ2 NF9NQVgpOwotCQkJcGFpcmluZ2hlYXBfaW5pdGlhbGl6ZSgmd2FpdExTTlN0YXRlLT53YWl0 ZXJzSGVhcFtpXSwgd2FpdGxzbl9jbXAsIE5VTEwpOwotCQl9Ci0KLQkJLyogSW5pdGlhbGl6 ZSBwcm9jZXNzIGluZm8gYXJyYXkgKi8KLQkJbWVtc2V0KCZ3YWl0TFNOU3RhdGUtPnByb2NJ bmZvcywgMCwKLQkJCSAgIChNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpICog c2l6ZW9mKFdhaXRMU05Qcm9jSW5mbykpOworCQlwZ19hdG9taWNfaW5pdF91NjQoJndhaXRM U05TdGF0ZS0+bWluV2FpdGVkTFNOW2ldLCBQR19VSU5UNjRfTUFYKTsKKwkJcGFpcmluZ2hl YXBfaW5pdGlhbGl6ZSgmd2FpdExTTlN0YXRlLT53YWl0ZXJzSGVhcFtpXSwgd2FpdGxzbl9j bXAsIE5VTEwpOwogCX0KKworCS8qIEluaXRpYWxpemUgcHJvY2VzcyBpbmZvIGFycmF5ICov CisJbWVtc2V0KCZ3YWl0TFNOU3RhdGUtPnByb2NJbmZvcywgMCwKKwkJICAgKE1heEJhY2tl bmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykgKiBzaXplb2YoV2FpdExTTlByb2NJbmZvKSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1 dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDdlY2Iw NjljMjQ4Li5mZTAyNDI1OTg3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKQEAgLTk3LDYgKzk3LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bw cm90LmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9m bWdycHJvdG9zLmgiCkBAIC0zMDQsNiArMzA1LDE0IEBAIHR5cGVkZWYgc3RydWN0CiAKIHN0 YXRpYyBBdXRvVmFjdXVtU2htZW1TdHJ1Y3QgKkF1dG9WYWN1dW1TaG1lbTsKIAorc3RhdGlj IHZvaWQgQXV0b1ZhY3V1bVNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQg QXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNr cyBBdXRvVmFjdXVtU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBBdXRvVmFj dXVtU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQXV0b1ZhY3V1bVNobWVtSW5pdCwKK307 CisKIC8qCiAgKiB0aGUgZGF0YWJhc2UgbGlzdCAob2YgYXZsX2RiYXNlIGVsZW1lbnRzKSBp biB0aGUgbGF1bmNoZXIsIGFuZCB0aGUgY29udGV4dAogICogdGhhdCBjb250YWlucyBpdApA QCAtMzM1NCwxMiArMzM2MywxMyBAQCBhdXRvdmFjX2luaXQodm9pZCkKIH0KIAogLyoKLSAq IEF1dG9WYWN1dW1TaG1lbVNpemUKLSAqCQlDb21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgYXV0 b3ZhY3V1bS1yZWxhdGVkIHNoYXJlZCBtZW1vcnkKKyAqIEF1dG9WYWN1dW1TaG1lbVJlcXVl c3QKKyAqCQlSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBmb3IgYXV0b3Zh Y3V1bQogICovCi1TaXplCi1BdXRvVmFjdXVtU2htZW1TaXplKHZvaWQpCitzdGF0aWMgdm9p ZAorQXV0b1ZhY3V1bVNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVt U3RydWN0RGVzYyBBdXRvVmFjdXVtU2htZW1EZXNjOwogCVNpemUJCXNpemU7CiAKIAkvKgpA QCAtMzM2OSw1MyArMzM3OSw0MiBAQCBBdXRvVmFjdXVtU2htZW1TaXplKHZvaWQpCiAJc2l6 ZSA9IE1BWEFMSUdOKHNpemUpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShh dXRvdmFjdXVtX3dvcmtlcl9zbG90cywKIAkJCQkJCQkJICAgc2l6ZW9mKFdvcmtlckluZm9E YXRhKSkpOwotCXJldHVybiBzaXplOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZBdXRvVmFj dXVtU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAi QXV0b1ZhY3V1bSBEYXRhIiwKKwkJLnNpemUgPSBzaXplLAorCQkucHRyID0gKHZvaWQgKiop ICZBdXRvVmFjdXVtU2htZW0sCisJfSk7CiB9CiAKIC8qCiAgKiBBdXRvVmFjdXVtU2htZW1J bml0Ci0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYXV0b3ZhY3V1bS1yZWxhdGVkIHNo YXJlZCBtZW1vcnkKKyAqCQlJbml0aWFsaXplIGF1dG92YWN1dW0tcmVsYXRlZCBzaGFyZWQg bWVtb3J5CiAgKi8KLXZvaWQKLUF1dG9WYWN1dW1TaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2 b2lkCitBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsK LQotCUF1dG9WYWN1dW1TaG1lbSA9IChBdXRvVmFjdXVtU2htZW1TdHJ1Y3QgKikKLQkJU2ht ZW1Jbml0U3RydWN0KCJBdXRvVmFjdXVtIERhdGEiLAotCQkJCQkJQXV0b1ZhY3V1bVNobWVt U2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0J ewotCQlXb3JrZXJJbmZvCXdvcmtlcjsKLQkJaW50CQkJaTsKKwlXb3JrZXJJbmZvCXdvcmtl cjsKIAotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQlBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5j aGVycGlkID0gMDsKLQkJZGNsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdv cmtlcnMpOwotCQlkbGlzdF9pbml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X3J1bm5pbmdXb3Jr ZXJzKTsKLQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5VTEw7Ci0J CW1lbXNldChBdXRvVmFjdXVtU2htZW0tPmF2X3dvcmtJdGVtcywgMCwKLQkJCSAgIHNpemVv ZihBdXRvVmFjdXVtV29ya0l0ZW0pICogTlVNX1dPUktJVEVNUyk7Ci0KLQkJd29ya2VyID0g KFdvcmtlckluZm8pICgoY2hhciAqKSBBdXRvVmFjdXVtU2htZW0gKwotCQkJCQkJCSAgIE1B WEFMSUdOKHNpemVvZihBdXRvVmFjdXVtU2htZW1TdHJ1Y3QpKSk7Ci0KLQkJLyogaW5pdGlh bGl6ZSB0aGUgV29ya2VySW5mbyBmcmVlIGxpc3QgKi8KLQkJZm9yIChpID0gMDsgaSA8IGF1 dG92YWN1dW1fd29ya2VyX3Nsb3RzOyBpKyspCi0JCXsKLQkJCWRjbGlzdF9wdXNoX2hlYWQo JkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMsCi0JCQkJCQkJICZ3b3JrZXJbaV0u d2lfbGlua3MpOwotCQkJcGdfYXRvbWljX2luaXRfZmxhZygmd29ya2VyW2ldLndpX2RvYmFs YW5jZSk7Ci0JCX0KKwlBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlkID0gMDsKKwlk Y2xpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlV29ya2Vycyk7CisJZGxpc3Rf aW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vycyk7CisJQXV0b1ZhY3V1 bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5VTEw7CisJbWVtc2V0KEF1dG9WYWN1dW1T aG1lbS0+YXZfd29ya0l0ZW1zLCAwLAorCQkgICBzaXplb2YoQXV0b1ZhY3V1bVdvcmtJdGVt KSAqIE5VTV9XT1JLSVRFTVMpOwogCi0JCXBnX2F0b21pY19pbml0X3UzMigmQXV0b1ZhY3V1 bVNobWVtLT5hdl9ud29ya2Vyc0ZvckJhbGFuY2UsIDApOworCXdvcmtlciA9IChXb3JrZXJJ bmZvKSAoKGNoYXIgKikgQXV0b1ZhY3V1bVNobWVtICsKKwkJCQkJCSAgIE1BWEFMSUdOKHNp emVvZihBdXRvVmFjdXVtU2htZW1TdHJ1Y3QpKSk7CiAKKwkvKiBpbml0aWFsaXplIHRoZSBX b3JrZXJJbmZvIGZyZWUgbGlzdCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYXV0b3ZhY3V1 bV93b3JrZXJfc2xvdHM7IGkrKykKKwl7CisJCWRjbGlzdF9wdXNoX2hlYWQoJkF1dG9WYWN1 dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMsCisJCQkJCQkgJndvcmtlcltpXS53aV9saW5rcyk7 CisJCXBnX2F0b21pY19pbml0X2ZsYWcoJndvcmtlcltpXS53aV9kb2JhbGFuY2UpOwogCX0K LQllbHNlCi0JCUFzc2VydChmb3VuZCk7CisKKwlwZ19hdG9taWNfaW5pdF91MzIoJkF1dG9W YWN1dW1TaG1lbS0+YXZfbndvcmtlcnNGb3JCYWxhbmNlLCAwKTsKIH0KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCBkMWZlM2NjNzFjZS4uOTNkMDU2ODBhZWIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNp bmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdl L3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAi dXRpbHMvYXNjaWkuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpAQCAtMTA5LDYg KzExMCwxNCBAQCBzdHJ1Y3QgQmFja2dyb3VuZFdvcmtlckhhbmRsZQogCiBzdGF0aWMgQmFj a2dyb3VuZFdvcmtlckFycmF5ICpCYWNrZ3JvdW5kV29ya2VyRGF0YTsKIAorc3RhdGljIHZv aWQgQmFja2dyb3VuZFdvcmtlclNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1l bUNhbGxiYWNrcyBCYWNrZ3JvdW5kV29ya2VyU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVl c3RfZm4gPSBCYWNrZ3JvdW5kV29ya2VyU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gQmFj a2dyb3VuZFdvcmtlclNobWVtSW5pdCwKK307CisKIC8qCiAgKiBMaXN0IG9mIGludGVybmFs IGJhY2tncm91bmQgd29ya2VyIGVudHJ5IHBvaW50cy4gIFdlIG5lZWQgdGhpcyBmb3IKICAq IHJlYXNvbnMgZXhwbGFpbmVkIGluIExvb2t1cEJhY2tncm91bmRXb3JrZXJGdW5jdGlvbigp LCBiZWxvdy4KQEAgLTE1MSw3NyArMTYwLDcxIEBAIHN0YXRpYyBiZ3dvcmtlcl9tYWluX3R5 cGUgTG9va3VwQmFja2dyb3VuZFdvcmtlckZ1bmN0aW9uKGNvbnN0IGNoYXIgKmxpYnJhcnlu YW1lCiAKIAogLyoKLSAqIENhbGN1bGF0ZSBzaGFyZWQgbWVtb3J5IG5lZWRlZC4KKyAqIFJl Z2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZvciBiYWNrZ3JvdW5kIHdvcmtlcnMuCiAg Ki8KLVNpemUKLUJhY2tncm91bmRXb3JrZXJTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lk CitCYWNrZ3JvdW5kV29ya2VyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlzdGF0aWMg U2htZW1TdHJ1Y3REZXNjIEJhY2tncm91bmRXb3JrZXJTaG1lbURlc2M7CiAJU2l6ZQkJc2l6 ZTsKIAogCS8qIEFycmF5IG9mIHdvcmtlcnMgaXMgdmFyaWFibHkgc2l6ZWQuICovCiAJc2l6 ZSA9IG9mZnNldG9mKEJhY2tncm91bmRXb3JrZXJBcnJheSwgc2xvdCk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKG1heF93b3JrZXJfcHJvY2Vzc2VzLAogCQkJCQkJCQkg ICBzaXplb2YoQmFja2dyb3VuZFdvcmtlclNsb3QpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJkJhY2tncm91bmRXb3JrZXJTaG1lbURlc2MsICYoU2htZW1S ZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJCYWNrZ3JvdW5kIFdvcmtlciBEYXRh IiwKKwkJLnNpemUgPSBzaXplLAorCQkucHRyID0gKHZvaWQgKiopICZCYWNrZ3JvdW5kV29y a2VyRGF0YSwKKwl9KTsKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeS4K KyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBmb3IgYmFja2dyb3VuZCB3b3JrZXJzLgog ICovCi12b2lkCi1CYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9p ZAorQmFja2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91 bmQ7Ci0KLQlCYWNrZ3JvdW5kV29ya2VyRGF0YSA9IFNobWVtSW5pdFN0cnVjdCgiQmFja2dy b3VuZCBXb3JrZXIgRGF0YSIsCi0JCQkJCQkJCQkJICAgQmFja2dyb3VuZFdvcmtlclNobWVt U2l6ZSgpLAotCQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3Rl cikKLQl7Ci0JCWRsaXN0X2l0ZXIJaXRlcjsKLQkJaW50CQkJc2xvdG5vID0gMDsKKwlkbGlz dF9pdGVyCWl0ZXI7CisJaW50CQkJc2xvdG5vID0gMDsKIAotCQlCYWNrZ3JvdW5kV29ya2Vy RGF0YS0+dG90YWxfc2xvdHMgPSBtYXhfd29ya2VyX3Byb2Nlc3NlczsKLQkJQmFja2dyb3Vu ZFdvcmtlckRhdGEtPnBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50ID0gMDsKLQkJQmFja2dyb3Vu ZFdvcmtlckRhdGEtPnBhcmFsbGVsX3Rlcm1pbmF0ZV9jb3VudCA9IDA7CisJQmFja2dyb3Vu ZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzID0gbWF4X3dvcmtlcl9wcm9jZXNzZXM7CisJQmFj a2dyb3VuZFdvcmtlckRhdGEtPnBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50ID0gMDsKKwlCYWNr Z3JvdW5kV29ya2VyRGF0YS0+cGFyYWxsZWxfdGVybWluYXRlX2NvdW50ID0gMDsKIAotCQkv KgotCQkgKiBDb3B5IGNvbnRlbnRzIG9mIHdvcmtlciBsaXN0IGludG8gc2hhcmVkIG1lbW9y eS4gIFJlY29yZCB0aGUgc2hhcmVkCi0JCSAqIG1lbW9yeSBzbG90IGFzc2lnbmVkIHRvIGVh Y2ggd29ya2VyLiAgVGhpcyBlbnN1cmVzIGEgMS10by0xCi0JCSAqIGNvcnJlc3BvbmRlbmNl IGJldHdlZW4gdGhlIHBvc3RtYXN0ZXIncyBwcml2YXRlIGxpc3QgYW5kIHRoZSBhcnJheQot CQkgKiBpbiBzaGFyZWQgbWVtb3J5LgotCQkgKi8KLQkJZGxpc3RfZm9yZWFjaChpdGVyLCAm QmFja2dyb3VuZFdvcmtlckxpc3QpCi0JCXsKLQkJCUJhY2tncm91bmRXb3JrZXJTbG90ICpz bG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Nsb3Rub107Ci0JCQlSZWdpc3Rl cmVkQmdXb3JrZXIgKnJ3OworCS8qCisJICogQ29weSBjb250ZW50cyBvZiB3b3JrZXIgbGlz dCBpbnRvIHNoYXJlZCBtZW1vcnkuICBSZWNvcmQgdGhlIHNoYXJlZAorCSAqIG1lbW9yeSBz bG90IGFzc2lnbmVkIHRvIGVhY2ggd29ya2VyLiAgVGhpcyBlbnN1cmVzIGEgMS10by0xCisJ ICogY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgcG9zdG1hc3RlcidzIHByaXZhdGUgbGlz dCBhbmQgdGhlIGFycmF5CisJICogaW4gc2hhcmVkIG1lbW9yeS4KKwkgKi8KKwlkbGlzdF9m b3JlYWNoKGl0ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKKwl7CisJCUJhY2tncm91bmRX b3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Nsb3Rub107 CisJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CiAKLQkJCXJ3ID0gZGxpc3RfY29udGFpbmVy KFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKLQkJCUFzc2VydChz bG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3Nlcyk7Ci0JCQlzbG90LT5pbl91c2UgPSB0cnVl OwotCQkJc2xvdC0+dGVybWluYXRlID0gZmFsc2U7Ci0JCQlzbG90LT5waWQgPSBJbnZhbGlk UGlkOwotCQkJc2xvdC0+Z2VuZXJhdGlvbiA9IDA7Ci0JCQlydy0+cndfc2htZW1fc2xvdCA9 IHNsb3RubzsKLQkJCXJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQgPSAwOwkvKiBtaWdo dCBiZSByZWluaXQgYWZ0ZXIgY3Jhc2ggKi8KLQkJCW1lbWNweSgmc2xvdC0+d29ya2VyLCAm cnctPnJ3X3dvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKLQkJCSsrc2xvdG5v OwotCQl9CisJCXJ3ID0gZGxpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndf bG5vZGUsIGl0ZXIuY3VyKTsKKwkJQXNzZXJ0KHNsb3RubyA8IG1heF93b3JrZXJfcHJvY2Vz c2VzKTsKKwkJc2xvdC0+aW5fdXNlID0gdHJ1ZTsKKwkJc2xvdC0+dGVybWluYXRlID0gZmFs c2U7CisJCXNsb3QtPnBpZCA9IEludmFsaWRQaWQ7CisJCXNsb3QtPmdlbmVyYXRpb24gPSAw OworCQlydy0+cndfc2htZW1fc2xvdCA9IHNsb3RubzsKKwkJcnctPnJ3X3dvcmtlci5iZ3df bm90aWZ5X3BpZCA9IDA7CS8qIG1pZ2h0IGJlIHJlaW5pdCBhZnRlciBjcmFzaCAqLworCQlt ZW1jcHkoJnNsb3QtPndvcmtlciwgJnJ3LT5yd193b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5k V29ya2VyKSk7CisJCSsrc2xvdG5vOworCX0KIAotCQkvKgotCQkgKiBNYXJrIGFueSByZW1h aW5pbmcgc2xvdHMgYXMgbm90IGluIHVzZS4KLQkJICovCi0JCXdoaWxlIChzbG90bm8gPCBt YXhfd29ya2VyX3Byb2Nlc3NlcykKLQkJewotCQkJQmFja2dyb3VuZFdvcmtlclNsb3QgKnNs b3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEtPnNsb3Rbc2xvdG5vXTsKKwkvKgorCSAqIE1h cmsgYW55IHJlbWFpbmluZyBzbG90cyBhcyBub3QgaW4gdXNlLgorCSAqLworCXdoaWxlIChz bG90bm8gPCBtYXhfd29ya2VyX3Byb2Nlc3NlcykKKwl7CisJCUJhY2tncm91bmRXb3JrZXJT bG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Nsb3Rub107CiAKLQkJ CXNsb3QtPmluX3VzZSA9IGZhbHNlOwotCQkJKytzbG90bm87Ci0JCX0KKwkJc2xvdC0+aW5f dXNlID0gZmFsc2U7CisJCSsrc2xvdG5vOwogCX0KLQllbHNlCi0JCUFzc2VydChmb3VuZCk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9p bnRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwppbmRleCAz Yzk4MmM2ZmZhYy4uYzA0ZmFmOWExZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVj a3BvaW50ZXIuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0u aCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4u aCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9h Y2wuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgpAQCAtMTQzLDYgKzE0NCwxNCBAQCB0eXBlZGVmIHN0cnVjdAogCiBzdGF0aWMgQ2hl Y2twb2ludGVyU2htZW1TdHJ1Y3QgKkNoZWNrcG9pbnRlclNobWVtOwogCitzdGF0aWMgdm9p ZCBDaGVja3BvaW50ZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIENo ZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1lbUNhbGxiYWNr cyBDaGVja3BvaW50ZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IENoZWNr cG9pbnRlclNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IENoZWNrcG9pbnRlclNobWVtSW5p dCwKK307CisKIC8qIGludGVydmFsIGZvciBjYWxsaW5nIEFic29yYlN5bmNSZXF1ZXN0cyBp biBDaGVja3BvaW50V3JpdGVEZWxheSAqLwogI2RlZmluZSBXUklURVNfUEVSX0FCU09SQgkJ MTAwMAogCkBAIC05NTAsMTIgKzk1OSwxMyBAQCBSZXFTaHV0ZG93blhMT0coU0lHTkFMX0FS R1MpCiAgKi8KIAogLyoKLSAqIENoZWNrcG9pbnRlclNobWVtU2l6ZQotICoJCUNvbXB1dGUg c3BhY2UgbmVlZGVkIGZvciBjaGVja3BvaW50ZXItcmVsYXRlZCBzaGFyZWQgbWVtb3J5Cisg KiBDaGVja3BvaW50ZXJTaG1lbVJlcXVlc3QKKyAqCQlSZWdpc3RlciBzaGFyZWQgbWVtb3J5 IHNwYWNlIG5lZWRlZCBmb3IgY2hlY2twb2ludGVyCiAgKi8KLVNpemUKLUNoZWNrcG9pbnRl clNobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK0NoZWNrcG9pbnRlclNobWVtUmVxdWVz dCh2b2lkICphcmcpCiB7CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBDaGVja3BvaW50ZXJT aG1lbURlc2M7CiAJU2l6ZQkJc2l6ZTsKIAogCS8qCkBAIC05NjcsMzkgKzk3NywyNSBAQCBD aGVja3BvaW50ZXJTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVs X3NpemUoTWluKE5CdWZmZXJzLAogCQkJCQkJCQkJICAgTUFYX0NIRUNLUE9JTlRfUkVRVUVT VFMpLAogCQkJCQkJCQkgICBzaXplb2YoQ2hlY2twb2ludGVyUmVxdWVzdCkpKTsKLQotCXJl dHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVjdCgmQ2hlY2twb2ludGVyU2htZW1EZXNj LCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiQ2hlY2twb2ludGVy IERhdGEiLAorCQkuc2l6ZSA9IHNpemUsCisJCS5wdHIgPSAodm9pZCAqKikgJkNoZWNrcG9p bnRlclNobWVtLAorCX0pOwogfQogCiAvKgogICogQ2hlY2twb2ludGVyU2htZW1Jbml0Ci0g KgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgY2hlY2twb2ludGVyLXJlbGF0ZWQgc2hhcmVk IG1lbW9yeQorICoJCUluaXRpYWxpemUgY2hlY2twb2ludGVyLXJlbGF0ZWQgc2hhcmVkIG1l bW9yeQogICovCi12b2lkCi1DaGVja3BvaW50ZXJTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2 b2lkCitDaGVja3BvaW50ZXJTaG1lbUluaXQodm9pZCAqYXJnKQogewotCVNpemUJCXNpemUg PSBDaGVja3BvaW50ZXJTaG1lbVNpemUoKTsKLQlib29sCQlmb3VuZDsKLQotCUNoZWNrcG9p bnRlclNobWVtID0gKENoZWNrcG9pbnRlclNobWVtU3RydWN0ICopCi0JCVNobWVtSW5pdFN0 cnVjdCgiQ2hlY2twb2ludGVyIERhdGEiLAotCQkJCQkJc2l6ZSwKLQkJCQkJCSZmb3VuZCk7 Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyoKLQkJICogRmlyc3QgdGltZSB0aHJvdWdoLCBz byBpbml0aWFsaXplLiAgTm90ZSB0aGF0IHdlIHplcm8gdGhlIHdob2xlCi0JCSAqIHJlcXVl c3RzIGFycmF5OyB0aGlzIGlzIHNvIHRoYXQgQ29tcGFjdENoZWNrcG9pbnRlclJlcXVlc3RR dWV1ZSBjYW4KLQkJICogYXNzdW1lIHRoYXQgYW55IHBhZCBieXRlcyBpbiB0aGUgcmVxdWVz dCBzdHJ1Y3RzIGFyZSB6ZXJvZXMuCi0JCSAqLwotCQlNZW1TZXQoQ2hlY2twb2ludGVyU2ht ZW0sIDAsIHNpemUpOwotCQlTcGluTG9ja0luaXQoJkNoZWNrcG9pbnRlclNobWVtLT5ja3B0 X2xjayk7Ci0JCUNoZWNrcG9pbnRlclNobWVtLT5tYXhfcmVxdWVzdHMgPSBNaW4oTkJ1ZmZl cnMsIE1BWF9DSEVDS1BPSU5UX1JFUVVFU1RTKTsKLQkJQ2hlY2twb2ludGVyU2htZW0tPmhl YWQgPSBDaGVja3BvaW50ZXJTaG1lbS0+dGFpbCA9IDA7Ci0JCUNvbmRpdGlvblZhcmlhYmxl SW5pdCgmQ2hlY2twb2ludGVyU2htZW0tPnN0YXJ0X2N2KTsKLQkJQ29uZGl0aW9uVmFyaWFi bGVJbml0KCZDaGVja3BvaW50ZXJTaG1lbS0+ZG9uZV9jdik7Ci0JfQorCVNwaW5Mb2NrSW5p dCgmQ2hlY2twb2ludGVyU2htZW0tPmNrcHRfbGNrKTsKKwlDaGVja3BvaW50ZXJTaG1lbS0+ bWF4X3JlcXVlc3RzID0gTWluKE5CdWZmZXJzLCBNQVhfQ0hFQ0tQT0lOVF9SRVFVRVNUUyk7 CisJQ2hlY2twb2ludGVyU2htZW0tPmhlYWQgPSBDaGVja3BvaW50ZXJTaG1lbS0+dGFpbCA9 IDA7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZDaGVja3BvaW50ZXJTaG1lbS0+c3RhcnRf Y3YpOworCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmQ2hlY2twb2ludGVyU2htZW0tPmRvbmVf Y3YpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2Fy Y2guYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggZmE0YmRmZTlh YjkuLmNjOTgzNjc1MzczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bn YXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTQ4LDYg KzQ4LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKQEAg LTE1NCwzMyArMTU1LDM0IEBAIHN0YXRpYyBpbnQJcmVhZHlfZmlsZV9jb21wYXJhdG9yKERh dHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBMb2FkQXJjaGl2ZUxp YnJhcnkodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ2FyY2hfY2FsbF9tb2R1bGVfc2h1dGRvd25f Y2IoaW50IGNvZGUsIERhdHVtIGFyZyk7CiAKLS8qIFJlcG9ydCBzaGFyZWQgbWVtb3J5IHNw YWNlIG5lZWRlZCBieSBQZ0FyY2hTaG1lbUluaXQgKi8KLVNpemUKLVBnQXJjaFNobWVtU2l6 ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IHNpemVvZihQZ0FyY2hEYXRhKSk7CitzdGF0aWMgdm9pZCBQZ0FyY2hTaG1lbVJlcXVlc3Qo dm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIFBnQXJjaFNobWVtSW5pdCh2b2lkICphcmcpOwog Ci0JcmV0dXJuIHNpemU7Ci19Citjb25zdCBTaG1lbUNhbGxiYWNrcyBQZ0FyY2hTaG1lbUNh bGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFBnQXJjaFNobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IFBnQXJjaFNobWVtSW5pdCwKK307CiAKLS8qIEFsbG9jYXRlIGFuZCBpbml0aWFs aXplIGFyY2hpdmVyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLwotdm9pZAotUGdBcmNoU2ht ZW1Jbml0KHZvaWQpCisvKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZCBi eSB0aGUgYXJjaGl2ZXIgKi8KK3N0YXRpYyB2b2lkCitQZ0FyY2hTaG1lbVJlcXVlc3Qodm9p ZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUGdB cmNoU2htZW1EZXNjOwogCi0JUGdBcmNoID0gKFBnQXJjaERhdGEgKikKLQkJU2htZW1Jbml0 U3RydWN0KCJBcmNoaXZlciBEYXRhIiwgUGdBcmNoU2htZW1TaXplKCksICZmb3VuZCk7CisJ U2htZW1SZXF1ZXN0U3RydWN0KCZQZ0FyY2hTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3Ry dWN0T3B0cykgeworCQkubmFtZSA9ICJBcmNoaXZlciBEYXRhIiwKKwkJLnNpemUgPSBzaXpl b2YoUGdBcmNoRGF0YSksCisJCS5wdHIgPSAodm9pZCAqKikgJlBnQXJjaCwKKwl9KTsKK30K IAotCWlmICghZm91bmQpCi0JewotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRp YWxpemUgKi8KLQkJTWVtU2V0KFBnQXJjaCwgMCwgUGdBcmNoU2htZW1TaXplKCkpOwotCQlQ Z0FyY2gtPnBncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQkJcGdfYXRvbWljX2lu aXRfdTMyKCZQZ0FyY2gtPmZvcmNlX2Rpcl9zY2FuLCAwKTsKLQl9CisvKiBJbml0aWFsaXpl IGFyY2hpdmVyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLworc3RhdGljIHZvaWQKK1BnQXJj aFNobWVtSW5pdCh2b2lkICphcmcpCit7CisJTWVtU2V0KFBnQXJjaCwgMCwgc2l6ZW9mKFBn QXJjaERhdGEpKTsKKwlQZ0FyY2gtPnBncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsK KwlwZ19hdG9taWNfaW5pdF91MzIoJlBnQXJjaC0+Zm9yY2VfZGlyX3NjYW4sIDApOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCAwYzA2 NzBmN2RhOS4uOTllZjY1ZjA5YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z aG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0 aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvd2FpdF9ldmVudC5oIgpAQCAtMTA5LDYgKzExMCwxNCBAQCB0eXBlZGVmIHN0cnVjdAog LyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0YXRlLiAqLwogc3RhdGljIFdhbFN1bW1h cml6ZXJEYXRhICpXYWxTdW1tYXJpemVyQ3RsOwogCitzdGF0aWMgdm9pZCBXYWxTdW1tYXJp emVyU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBXYWxTdW1tYXJpemVy U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFdhbFN1bW1h cml6ZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFdhbFN1bW1hcml6ZXJT aG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBXYWxTdW1tYXJpemVyU2htZW1Jbml0LAorfTsK KwogLyoKICAqIFdoZW4gd2UgcmVhY2ggZW5kIG9mIFdBTCBhbmQgbmVlZCB0byByZWFkIG1v cmUsIHdlIHNsZWVwIGZvciBhIG51bWJlciBvZgogICogbWlsbGlzZWNvbmRzIHRoYXQgaXMg YW4gaW50ZWdlciBtdWx0aXBsZSBvZiBNU19QRVJfU0xFRVBfUVVBTlRVTS4gVGhpcyBpcwpA QCAtMTY4LDQzICsxNzcsMzggQEAgc3RhdGljIHZvaWQgc3VtbWFyaXplcl93YWl0X2Zvcl93 YWwodm9pZCk7CiBzdGF0aWMgdm9pZCBNYXliZVJlbW92ZU9sZFdhbFN1bW1hcmllcyh2b2lk KTsKIAogLyoKLSAqIEFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGlz IG1vZHVsZS4KKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IHRo aXMgbW9kdWxlLgogICovCi1TaXplCi1XYWxTdW1tYXJpemVyU2htZW1TaXplKHZvaWQpCitz dGF0aWMgdm9pZAorV2FsU3VtbWFyaXplclNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7Ci0J cmV0dXJuIHNpemVvZihXYWxTdW1tYXJpemVyRGF0YSk7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBXYWxTdW1tYXJpemVyU2htZW1EZXNjOworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZX YWxTdW1tYXJpemVyU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJ Lm5hbWUgPSAiV2FsIFN1bW1hcml6ZXIgQ3RsIiwKKwkJLnNpemUgPSBzaXplb2YoV2FsU3Vt bWFyaXplckRhdGEpLAorCQkucHRyID0gKHZvaWQgKiopICZXYWxTdW1tYXJpemVyQ3RsLAor CX0pOwogfQogCiAvKgotICogQ3JlYXRlIG9yIGF0dGFjaCB0byBzaGFyZWQgbWVtb3J5IHNl Z21lbnQgZm9yIHRoaXMgbW9kdWxlLgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGZv ciB0aGlzIG1vZHVsZS4KICAqLwotdm9pZAotV2FsU3VtbWFyaXplclNobWVtSW5pdCh2b2lk KQorc3RhdGljIHZvaWQKK1dhbFN1bW1hcml6ZXJTaG1lbUluaXQodm9pZCAqYXJnKQogewot CWJvb2wJCWZvdW5kOwotCi0JV2FsU3VtbWFyaXplckN0bCA9IChXYWxTdW1tYXJpemVyRGF0 YSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIldhbCBTdW1tYXJpemVyIEN0bCIsIFdhbFN1bW1h cml6ZXJTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJLyoKLQkJICogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXplLgotCQkgKgot CQkgKiBXZSdyZSBqdXN0IGZpbGxpbmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0gdGhlIHJl YWwgaW5pdGlhbGl6YXRpb24KLQkJICogd2lsbCBoYXBwZW4gd2hlbiBHZXRPbGRlc3RVbnN1 bW1hcml6ZWRMU04oKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdAotCQkgKiB0aW1lLgotCQkg Ki8KLQkJV2FsU3VtbWFyaXplckN0bC0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQkJV2FsU3Vt bWFyaXplckN0bC0+c3VtbWFyaXplZF90bGkgPSAwOwotCQlXYWxTdW1tYXJpemVyQ3RsLT5z dW1tYXJpemVkX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCQlXYWxTdW1tYXJpemVyQ3Rs LT5sc25faXNfZXhhY3QgPSBmYWxzZTsKLQkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXpl cl9wZ3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7Ci0JCVdhbFN1bW1hcml6ZXJDdGwt PnBlbmRpbmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7Ci0JCUNvbmRpdGlvblZhcmlhYmxl SW5pdCgmV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyeV9maWxlX2N2KTsKLQl9CisJLyoKKwkg KiBXZSdyZSBqdXN0IGZpbGxpbmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0gdGhlIHJlYWwg aW5pdGlhbGl6YXRpb24KKwkgKiB3aWxsIGhhcHBlbiB3aGVuIEdldE9sZGVzdFVuc3VtbWFy aXplZExTTigpIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0CisJICogdGltZS4KKwkgKi8KKwlX YWxTdW1tYXJpemVyQ3RsLT5pbml0aWFsaXplZCA9IGZhbHNlOworCVdhbFN1bW1hcml6ZXJD dGwtPnN1bW1hcml6ZWRfdGxpID0gMDsKKwlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVk X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCVdhbFN1bW1hcml6ZXJDdGwtPmxzbl9pc19l eGFjdCA9IGZhbHNlOworCVdhbFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZXJfcGdwcm9jbm8g PSBJTlZBTElEX1BST0NfTlVNQkVSOworCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNu ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTdW1t YXJpemVyQ3RsLT5zdW1tYXJ5X2ZpbGVfY3YpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDA5OTY0MTk4NTUwLi42MWEx NjI3NzNkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s YXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bw cm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgpAQCAtNzEsNiArNzIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJl cEN0eFN0cnVjdAogCiBzdGF0aWMgTG9naWNhbFJlcEN0eFN0cnVjdCAqTG9naWNhbFJlcEN0 eDsKIAorc3RhdGljIHZvaWQgQXBwbHlMYXVuY2hlclNobWVtUmVxdWVzdCh2b2lkICphcmcp Oworc3RhdGljIHZvaWQgQXBwbHlMYXVuY2hlclNobWVtSW5pdCh2b2lkICphcmcpOworCitj b25zdCBTaG1lbUNhbGxiYWNrcyBBcHBseUxhdW5jaGVyU2htZW1DYWxsYmFja3MgPSB7CisJ LnJlcXVlc3RfZm4gPSBBcHBseUxhdW5jaGVyU2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0g QXBwbHlMYXVuY2hlclNobWVtSW5pdCwKK307CisKIC8qIGFuIGVudHJ5IGluIHRoZSBsYXN0 LXN0YXJ0LXRpbWVzIHNoYXJlZCBoYXNoIHRhYmxlICovCiB0eXBlZGVmIHN0cnVjdCBMYXVu Y2hlckxhc3RTdGFydFRpbWVzRW50cnkKIHsKQEAgLTk3MiwxMiArOTgxLDEzIEBAIGxvZ2lj YWxyZXBfcGFfd29ya2VyX2NvdW50KE9pZCBzdWJpZCkKIH0KIAogLyoKLSAqIEFwcGx5TGF1 bmNoZXJTaG1lbVNpemUKLSAqCQlDb21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgcmVwbGljYXRp b24gbGF1bmNoZXIgc2hhcmVkIG1lbW9yeQorICogQXBwbHlMYXVuY2hlclNobWVtUmVxdWVz dAorICoJCVJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciByZXBsaWNh dGlvbiBsYXVuY2hlcgogICovCi1TaXplCi1BcHBseUxhdW5jaGVyU2htZW1TaXplKHZvaWQp CitzdGF0aWMgdm9pZAorQXBwbHlMYXVuY2hlclNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7 CisJc3RhdGljIFNobWVtU3RydWN0RGVzYyBBcHBseUxhdW5jaGVyU2htZW1EZXNjOwogCVNp emUJCXNpemU7CiAKIAkvKgpAQCAtOTg3LDcgKzk5NywxMSBAQCBBcHBseUxhdW5jaGVyU2ht ZW1TaXplKHZvaWQpCiAJc2l6ZSA9IE1BWEFMSUdOKHNpemUpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBtdWxfc2l6ZShtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzLAogCQkJ CQkJCQkgICBzaXplb2YoTG9naWNhbFJlcFdvcmtlcikpKTsKLQlyZXR1cm4gc2l6ZTsKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJkFwcGx5TGF1bmNoZXJTaG1lbURlc2MsICYoU2htZW1SZXF1 ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJMb2dpY2FsIFJlcGxpY2F0aW9uIExhdW5j aGVyIERhdGEiLAorCQkuc2l6ZSA9IHNpemUsCisJCS5wdHIgPSAodm9pZCAqKikgJkxvZ2lj YWxSZXBDdHgsCisJfSk7CiB9CiAKIC8qCkBAIC0xMDI4LDM1ICsxMDQyLDIzIEBAIEFwcGx5 TGF1bmNoZXJSZWdpc3Rlcih2b2lkKQogCiAvKgogICogQXBwbHlMYXVuY2hlclNobWVtSW5p dAotICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNo YXJlZCBtZW1vcnkKKyAqCQlJbml0aWFsaXplIHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJl ZCBtZW1vcnkKICAqLwotdm9pZAotQXBwbHlMYXVuY2hlclNobWVtSW5pdCh2b2lkKQorc3Rh dGljIHZvaWQKK0FwcGx5TGF1bmNoZXJTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJ CWZvdW5kOworCWludAkJCXNsb3Q7CiAKLQlMb2dpY2FsUmVwQ3R4ID0gKExvZ2ljYWxSZXBD dHhTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJMb2dpY2FsIFJlcGxpY2F0aW9uIExh dW5jaGVyIERhdGEiLAotCQkJCQkJQXBwbHlMYXVuY2hlclNobWVtU2l6ZSgpLAotCQkJCQkJ JmZvdW5kKTsKKwlMb2dpY2FsUmVwQ3R4LT5sYXN0X3N0YXJ0X2RzYSA9IERTQV9IQU5ETEVf SU5WQUxJRDsKKwlMb2dpY2FsUmVwQ3R4LT5sYXN0X3N0YXJ0X2RzaCA9IERTSEFTSF9IQU5E TEVfSU5WQUxJRDsKIAotCWlmICghZm91bmQpCisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgYW5k IHNwaW4gbG9ja3MgZm9yIGVhY2ggd29ya2VyIHNsb3QuICovCisJZm9yIChzbG90ID0gMDsg c2xvdCA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7IHNsb3QrKykKIAl7Ci0J CWludAkJCXNsb3Q7Ci0KLQkJbWVtc2V0KExvZ2ljYWxSZXBDdHgsIDAsIEFwcGx5TGF1bmNo ZXJTaG1lbVNpemUoKSk7Ci0KLQkJTG9naWNhbFJlcEN0eC0+bGFzdF9zdGFydF9kc2EgPSBE U0FfSEFORExFX0lOVkFMSUQ7Ci0JCUxvZ2ljYWxSZXBDdHgtPmxhc3Rfc3RhcnRfZHNoID0g RFNIQVNIX0hBTkRMRV9JTlZBTElEOworCQlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIgPSAm TG9naWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90XTsKIAotCQkvKiBJbml0aWFsaXplIG1lbW9y eSBhbmQgc3BpbiBsb2NrcyBmb3IgZWFjaCB3b3JrZXIgc2xvdC4gKi8KLQkJZm9yIChzbG90 ID0gMDsgc2xvdCA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7IHNsb3QrKykK LQkJewotCQkJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gJkxvZ2ljYWxSZXBDdHgtPndv cmtlcnNbc2xvdF07Ci0KLQkJCW1lbXNldCh3b3JrZXIsIDAsIHNpemVvZihMb2dpY2FsUmVw V29ya2VyKSk7Ci0JCQlTcGluTG9ja0luaXQoJndvcmtlci0+cmVsbXV0ZXgpOwotCQl9CisJ CW1lbXNldCh3b3JrZXIsIDAsIHNpemVvZihMb2dpY2FsUmVwV29ya2VyKSk7CisJCVNwaW5M b2NrSW5pdCgmd29ya2VyLT5yZWxtdXRleCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxjdGwuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5jCmluZGV4IDRlMjkyOTUxMjAxLi44 NmI0OGVkZDhlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsY3RsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s b2dpY2FsY3RsLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Mu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1 ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAvKgpAQCAtOTgsNiArOTksMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ3RsRGF0YQogCiBzdGF0aWMgTG9naWNh bERlY29kaW5nQ3RsRGF0YSAqTG9naWNhbERlY29kaW5nQ3RsID0gTlVMTDsKIAorc3RhdGlj IHZvaWQgTG9naWNhbERlY29kaW5nQ3RsU2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CisKK2Nv bnN0IFNobWVtQ2FsbGJhY2tzIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtQ2FsbGJhY2tzID0g eworCS5yZXF1ZXN0X2ZuID0gTG9naWNhbERlY29kaW5nQ3RsU2htZW1SZXF1ZXN0LAorfTsK KwogLyoKICAqIEEgcHJvY2Vzcy1sb2NhbCBjYWNoZSBvZiBMb2dpY2FsRGVjb2RpbmdDdGwt Pnhsb2dfbG9naWNhbF9pbmZvLiBUaGlzIGlzCiAgKiBpbml0aWFsaXplZCBhdCBwcm9jZXNz IHN0YXJ0dXAsIGFuZCB1cGRhdGVkIHdoZW4gcHJvY2Vzc2luZyB0aGUgcHJvY2VzcwpAQCAt MTIwLDIzICsxMjcsMTYgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3hsb2dfbG9naWNhbF9pbmZv KHZvaWQpOwogc3RhdGljIHZvaWQgYWJvcnRfbG9naWNhbF9kZWNvZGluZ19hY3RpdmF0aW9u KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgd3JpdGVfbG9naWNhbF9kZWNv ZGluZ19zdGF0dXNfdXBkYXRlX3JlY29yZChib29sIHN0YXR1cyk7CiAKLVNpemUKLUxvZ2lj YWxEZWNvZGluZ0N0bFNobWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBzaXplb2YoTG9naWNh bERlY29kaW5nQ3RsRGF0YSk7Ci19Ci0KLXZvaWQKLUxvZ2ljYWxEZWNvZGluZ0N0bFNobWVt SW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0xvZ2ljYWxEZWNvZGluZ0N0bFNobWVtUmVxdWVz dCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlMb2dpY2FsRGVjb2RpbmdDdGwg PSBTaG1lbUluaXRTdHJ1Y3QoIkxvZ2ljYWwgZGVjb2RpbmcgY29udHJvbCIsCi0JCQkJCQkJ CQkJIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtU2l6ZSgpLAotCQkJCQkJCQkJCSAmZm91bmQp OworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTG9naWNhbERlY29kaW5nQ3RsU2htZW1EZXNj OwogCi0JaWYgKCFmb3VuZCkKLQkJTWVtU2V0KExvZ2ljYWxEZWNvZGluZ0N0bCwgMCwgTG9n aWNhbERlY29kaW5nQ3RsU2htZW1TaXplKCkpOworCVNobWVtUmVxdWVzdFN0cnVjdCgmTG9n aWNhbERlY29kaW5nQ3RsU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsK KwkJLm5hbWUgPSAiTG9naWNhbCBkZWNvZGluZyBjb250cm9sIiwKKwkJLnNpemUgPSBzaXpl b2YoTG9naWNhbERlY29kaW5nQ3RsRGF0YSksCisJCS5wdHIgPSAodm9pZCAqKikgJkxvZ2lj YWxEZWNvZGluZ0N0bCwKKwl9KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDY2MWQ2OGFkNjUzLi4xYTczMTZiMjMzOCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC04OCw2ICs4 OCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdWJz eXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgpAQCAtMTc2LDYgKzE3Nywx NiBAQCBSZXBsT3JpZ2luWGFjdFN0YXRlIHJlcGxvcmlnaW5feGFjdF9zdGF0ZSA9IHsKICAq Lwogc3RhdGljIFJlcGxpY2F0aW9uU3RhdGUgKnJlcGxpY2F0aW9uX3N0YXRlczsKIAorc3Rh dGljIHZvaWQgUmVwbGljYXRpb25PcmlnaW5TaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1Jbml0KHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCBSZXBsaWNhdGlvbk9yaWdpblNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK2Nv bnN0IFNobWVtQ2FsbGJhY2tzIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1DYWxsYmFja3MgPSB7 CisJLnJlcXVlc3RfZm4gPSBSZXBsaWNhdGlvbk9yaWdpblNobWVtUmVxdWVzdCwKKwkuaW5p dF9mbiA9IFJlcGxpY2F0aW9uT3JpZ2luU2htZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBSZXBs aWNhdGlvbk9yaWdpblNobWVtQXR0YWNoLAorfTsKKwogLyoKICAqIEFjdHVhbCBzaGFyZWQg bWVtb3J5IGJsb2NrIChyZXBsaWNhdGlvbl9zdGF0ZXNbXSBpcyBub3cgcGFydCBvZiB0aGlz KS4KICAqLwpAQCAtNTM5LDUwICs1NTAsNTAgQEAgcmVwbG9yaWdpbl9ieV9vaWQoUmVwbE9y aWdpbklkIHJvaWRlbnQsIGJvb2wgbWlzc2luZ19vaywgY2hhciAqKnJvbmFtZSkKICAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLVNpemUKLVJlcGxpY2F0aW9uT3JpZ2luU2ht ZW1TaXplKHZvaWQpCitzdGF0aWMgdm9pZAorUmVwbGljYXRpb25PcmlnaW5TaG1lbVJlcXVl c3Qodm9pZCAqYXJnKQogeworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUmVwbGljYXRpb25P cmlnaW5TaG1lbURlc2M7CiAJU2l6ZQkJc2l6ZSA9IDA7CiAKIAlpZiAobWF4X2FjdGl2ZV9y ZXBsaWNhdGlvbl9vcmlnaW5zID09IDApCi0JCXJldHVybiBzaXplOworCQlyZXR1cm47CiAK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoUmVwbGljYXRpb25TdGF0ZUN0bCwg c3RhdGVzKSk7Ci0KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwKIAkJCQkJbXVsX3NpemUobWF4 X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zLCBzaXplb2YoUmVwbGljYXRpb25TdGF0ZSkp KTsKLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlJlcGxpY2F0aW9uT3Jp Z2luU2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAi UmVwbGljYXRpb25PcmlnaW5TdGF0ZSIsCisJCS5zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICh2 b2lkICoqKSAmcmVwbGljYXRpb25fc3RhdGVzX2N0bCwKKwl9KTsKIH0KIAotdm9pZAotUmVw bGljYXRpb25PcmlnaW5TaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitSZXBsaWNhdGlv bk9yaWdpblNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KIAlpZiAo bWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zID09IDApCiAJCXJldHVybjsKIAotCXJl cGxpY2F0aW9uX3N0YXRlc19jdGwgPSAoUmVwbGljYXRpb25TdGF0ZUN0bCAqKQotCQlTaG1l bUluaXRTdHJ1Y3QoIlJlcGxpY2F0aW9uT3JpZ2luU3RhdGUiLAotCQkJCQkJUmVwbGljYXRp b25PcmlnaW5TaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7CiAJcmVwbGljYXRpb25fc3Rh dGVzID0gcmVwbGljYXRpb25fc3RhdGVzX2N0bC0+c3RhdGVzOwogCi0JaWYgKCFmb3VuZCkK LQl7Ci0JCWludAkJCWk7CisJcmVwbGljYXRpb25fc3RhdGVzX2N0bC0+dHJhbmNoZV9pZCA9 IExXVFJBTkNIRV9SRVBMSUNBVElPTl9PUklHSU5fU1RBVEU7CiAKLQkJTWVtU2V0KHJlcGxp Y2F0aW9uX3N0YXRlc19jdGwsIDAsIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1TaXplKCkpOwor CWZvciAoaW50IGkgPSAwOyBpIDwgbWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zOyBp KyspCisJeworCQlMV0xvY2tJbml0aWFsaXplKCZyZXBsaWNhdGlvbl9zdGF0ZXNbaV0ubG9j aywKKwkJCQkJCSByZXBsaWNhdGlvbl9zdGF0ZXNfY3RsLT50cmFuY2hlX2lkKTsKKwkJQ29u ZGl0aW9uVmFyaWFibGVJbml0KCZyZXBsaWNhdGlvbl9zdGF0ZXNbaV0ub3JpZ2luX2N2KTsK Kwl9Cit9CiAKLQkJcmVwbGljYXRpb25fc3RhdGVzX2N0bC0+dHJhbmNoZV9pZCA9IExXVFJB TkNIRV9SRVBMSUNBVElPTl9PUklHSU5fU1RBVEU7CitzdGF0aWMgdm9pZAorUmVwbGljYXRp b25PcmlnaW5TaG1lbUF0dGFjaCh2b2lkICphcmcpCit7CisJaWYgKG1heF9hY3RpdmVfcmVw bGljYXRpb25fb3JpZ2lucyA9PSAwKQorCQlyZXR1cm47CiAKLQkJZm9yIChpID0gMDsgaSA8 IG1heF9hY3RpdmVfcmVwbGljYXRpb25fb3JpZ2luczsgaSsrKQotCQl7Ci0JCQlMV0xvY2tJ bml0aWFsaXplKCZyZXBsaWNhdGlvbl9zdGF0ZXNbaV0ubG9jaywKLQkJCQkJCQkgcmVwbGlj YXRpb25fc3RhdGVzX2N0bC0+dHJhbmNoZV9pZCk7Ci0JCQlDb25kaXRpb25WYXJpYWJsZUlu aXQoJnJlcGxpY2F0aW9uX3N0YXRlc1tpXS5vcmlnaW5fY3YpOwotCQl9Ci0JfQorCXJlcGxp Y2F0aW9uX3N0YXRlcyA9IHJlcGxpY2F0aW9uX3N0YXRlc19jdGwtPnN0YXRlczsKIH0KIAog LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXggZTc1ZGI2OWUzZjYuLjIyYzVmOGU0OGEyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC03Myw2 ICs3Myw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpA QCAtMTE4LDYgKzExOSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBTbG90U3luY0N0eFN0cnVjdAog CiBzdGF0aWMgU2xvdFN5bmNDdHhTdHJ1Y3QgKlNsb3RTeW5jQ3R4ID0gTlVMTDsKIAorc3Rh dGljIHZvaWQgU2xvdFN5bmNTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lk IFNsb3RTeW5jU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tz IFNsb3RTeW5jU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBTbG90U3luY1No bWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFNsb3RTeW5jU2htZW1Jbml0LAorfTsKKwogLyog R1VDIHZhcmlhYmxlICovCiBib29sCQlzeW5jX3JlcGxpY2F0aW9uX3Nsb3RzID0gZmFsc2U7 CiAKQEAgLTE4MjgsMzIgKzE4MzcsMjkgQEAgSXNTeW5jaW5nUmVwbGljYXRpb25TbG90cyh2 b2lkKQogfQogCiAvKgotICogQW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9y IHNsb3Qgc3luY2hyb25pemF0aW9uLgorICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBzcGFj ZSBuZWVkZWQgZm9yIHNsb3Qgc3luY2hyb25pemF0aW9uLgogICovCi1TaXplCi1TbG90U3lu Y1NobWVtU2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1Nsb3RTeW5jU2htZW1SZXF1ZXN0KHZv aWQgKmFyZykKIHsKLQlyZXR1cm4gc2l6ZW9mKFNsb3RTeW5jQ3R4U3RydWN0KTsKKwlzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIFNsb3RTeW5jU2htZW1EZXNjOworCisJU2htZW1SZXF1ZXN0 U3RydWN0KCZTbG90U3luY1NobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7 CisJCS5uYW1lID0gIlNsb3QgU3luYyBEYXRhIiwKKwkJLnNpemUgPSBzaXplb2YoU2xvdFN5 bmNDdHhTdHJ1Y3QpLAorCQkucHRyID0gKHZvaWQgKiopICZTbG90U3luY0N0eCwKKwl9KTsK IH0KIAogLyoKLSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzaGFyZWQgbWVtb3J5 IG9mIHNsb3Qgc3luY2hyb25pemF0aW9uLgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5 IGZvciBzbG90IHN5bmNocm9uaXphdGlvbi4KICAqLwotdm9pZAotU2xvdFN5bmNTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitTbG90U3luY1NobWVtSW5pdCh2b2lkICphcmcpCiB7 Ci0JU2l6ZQkJc2l6ZSA9IFNsb3RTeW5jU2htZW1TaXplKCk7Ci0JYm9vbAkJZm91bmQ7Ci0K LQlTbG90U3luY0N0eCA9IChTbG90U3luY0N0eFN0cnVjdCAqKQotCQlTaG1lbUluaXRTdHJ1 Y3QoIlNsb3QgU3luYyBEYXRhIiwgc2l6ZSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0J ewotCQltZW1zZXQoU2xvdFN5bmNDdHgsIDAsIHNpemUpOwotCQlTbG90U3luY0N0eC0+cGlk ID0gSW52YWxpZFBpZDsKLQkJU3BpbkxvY2tJbml0KCZTbG90U3luY0N0eC0+bXV0ZXgpOwot CX0KKwltZW1zZXQoU2xvdFN5bmNDdHgsIDAsIHNpemVvZihTbG90U3luY0N0eFN0cnVjdCkp OworCVNsb3RTeW5jQ3R4LT5waWQgPSBJbnZhbGlkUGlkOworCVNwaW5Mb2NrSW5pdCgmU2xv dFN5bmNDdHgtPm11dGV4KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Nsb3QuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRl eCBhOTA5MmZjMjM4Mi4uYjY4YjI3YzM1NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMK QEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5j bHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKICNpbmNsdWRlICJ1dGlscy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9pbmpl Y3Rpb25fcG9pbnQuaCIKQEAgLTE0NSw2ICsxNDYsMTQgQEAgU3RhdGljQXNzZXJ0RGVjbChs ZW5ndGhvZihTbG90SW52YWxpZGF0aW9uQ2F1c2VzKSA9PSAoUlNfSU5WQUxfTUFYX0NBVVNF UyArIDEpLAogLyogQ29udHJvbCBhcnJheSBmb3IgcmVwbGljYXRpb24gc2xvdCBtYW5hZ2Vt ZW50ICovCiBSZXBsaWNhdGlvblNsb3RDdGxEYXRhICpSZXBsaWNhdGlvblNsb3RDdGwgPSBO VUxMOwogCitzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RzU2htZW1SZXF1ZXN0KHZvaWQg KmFyZyk7CitzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KHZvaWQgKmFy Zyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIFJlcGxpY2F0aW9uU2xvdHNTaG1lbUNhbGxi YWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IFJlcGxpY2F0aW9uU2xvdHNTaG1lbVJlcXVlc3Qs CisJLmluaXRfZm4gPSBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0LAorfTsKKwogLyogTXkg YmFja2VuZCdzIHJlcGxpY2F0aW9uIHNsb3QgaW4gdGhlIHNoYXJlZCBtZW1vcnkgYXJyYXkg Ki8KIFJlcGxpY2F0aW9uU2xvdCAqTXlSZXBsaWNhdGlvblNsb3QgPSBOVUxMOwogCkBAIC0x ODMsNTYgKzE5Miw0MyBAQCBzdGF0aWMgdm9pZCBDcmVhdGVTbG90T25EaXNrKFJlcGxpY2F0 aW9uU2xvdCAqc2xvdCk7CiBzdGF0aWMgdm9pZCBTYXZlU2xvdFRvUGF0aChSZXBsaWNhdGlv blNsb3QgKnNsb3QsIGNvbnN0IGNoYXIgKmRpciwgaW50IGVsZXZlbCk7CiAKIC8qCi0gKiBS ZXBvcnQgc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgUmVwbGljYXRpb25TbG90c1No bWVtSW5pdC4KKyAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBy ZXBsaWNhdGlvbiBzbG90cy4KICAqLwotU2l6ZQotUmVwbGljYXRpb25TbG90c1NobWVtU2l6 ZSh2b2lkKQorc3RhdGljIHZvaWQKK1JlcGxpY2F0aW9uU2xvdHNTaG1lbVJlcXVlc3Qodm9p ZCAqYXJnKQogewotCVNpemUJCXNpemUgPSAwOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2Mg UmVwbGljYXRpb25TbG90c1NobWVtRGVzYzsKKwlTaXplCQlzaXplOwogCiAJaWYgKG1heF9y ZXBsaWNhdGlvbl9zbG90cyA9PSAwKQotCQlyZXR1cm4gc2l6ZTsKKwkJcmV0dXJuOwogCiAJ c2l6ZSA9IG9mZnNldG9mKFJlcGxpY2F0aW9uU2xvdEN0bERhdGEsIHJlcGxpY2F0aW9uX3Ns b3RzKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwKIAkJCQkJbXVsX3NpemUobWF4X3JlcGxp Y2F0aW9uX3Nsb3RzLCBzaXplb2YoUmVwbGljYXRpb25TbG90KSkpOwotCi0JcmV0dXJuIHNp emU7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZSZXBsaWNhdGlvblNsb3RzU2htZW1EZXNjLCAm KFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiUmVwbGljYXRpb25TbG90 IEN0bCIsCisJCS5zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmUmVwbGljYXRp b25TbG90Q3RsLAorCX0pOwogfQogCiAvKgotICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUg c2hhcmVkIG1lbW9yeSBmb3IgcmVwbGljYXRpb24gc2xvdHMuCisgKiBJbml0aWFsaXplIHNo YXJlZCBtZW1vcnkgZm9yIHJlcGxpY2F0aW9uIHNsb3RzLgogICovCi12b2lkCi1SZXBsaWNh dGlvblNsb3RzU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUmVwbGljYXRpb25TbG90 c1NobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlpZiAobWF4X3Jl cGxpY2F0aW9uX3Nsb3RzID09IDApCi0JCXJldHVybjsKLQotCVJlcGxpY2F0aW9uU2xvdEN0 bCA9IChSZXBsaWNhdGlvblNsb3RDdGxEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUmVw bGljYXRpb25TbG90IEN0bCIsIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUoKSwKLQkJCQkJ CSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQorCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4X3Jl cGxpY2F0aW9uX3Nsb3RzOyBpKyspCiAJewotCQlpbnQJCQlpOworCQlSZXBsaWNhdGlvblNs b3QgKnNsb3QgPSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90c1tpXTsK IAotCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUgKi8KLQkJTWVtU2V0 KFJlcGxpY2F0aW9uU2xvdEN0bCwgMCwgUmVwbGljYXRpb25TbG90c1NobWVtU2l6ZSgpKTsK LQotCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBpKyspCi0JCXsK LQkJCVJlcGxpY2F0aW9uU2xvdCAqc2xvdCA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJlcGxp Y2F0aW9uX3Nsb3RzW2ldOwotCi0JCQkvKiBldmVyeXRoaW5nIGVsc2UgaXMgemVyb2VkIGJ5 IHRoZSBtZW1zZXQgYWJvdmUgKi8KLQkJCXNsb3QtPmFjdGl2ZV9wcm9jID0gSU5WQUxJRF9Q Uk9DX05VTUJFUjsKLQkJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+bXV0ZXgpOwotCQkJTFdMb2Nr SW5pdGlhbGl6ZSgmc2xvdC0+aW9faW5fcHJvZ3Jlc3NfbG9jaywKLQkJCQkJCQkgTFdUUkFO Q0hFX1JFUExJQ0FUSU9OX1NMT1RfSU8pOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZz bG90LT5hY3RpdmVfY3YpOwotCQl9CisJCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyB6ZXJvZWQg YnkgdGhlIG1lbXNldCBhYm92ZSAqLworCQlzbG90LT5hY3RpdmVfcHJvYyA9IElOVkFMSURf UFJPQ19OVU1CRVI7CisJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+bXV0ZXgpOworCQlMV0xvY2tJ bml0aWFsaXplKCZzbG90LT5pb19pbl9wcm9ncmVzc19sb2NrLAorCQkJCQkJIExXVFJBTkNI RV9SRVBMSUNBVElPTl9TTE9UX0lPKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90 LT5hY3RpdmVfY3YpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXJmdW5jcy5jCmluZGV4IDQ1YjlkNGYwOWYyLi40OWMyMDNmOTE1ZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyZnVuY3MuYwpAQCAtMjksNDcg KzI5LDQ5IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJz dG9yYWdlL3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNp bmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKIFdhbFJjdkRhdGEgKldhbFJjdiA9IE5V TEw7CiAKK3N0YXRpYyB2b2lkIFdhbFJjdlNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgV2FsUmN2U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2Fs bGJhY2tzIFdhbFJjdlNobWVtQ2FsbGJhY2tzID0geworCS5yZXF1ZXN0X2ZuID0gV2FsUmN2 U2htZW1SZXF1ZXN0LAorCS5pbml0X2ZuID0gV2FsUmN2U2htZW1Jbml0LAorfTsKKwogLyoK ICAqIEhvdyBsb25nIHRvIHdhaXQgZm9yIHdhbHJlY2VpdmVyIHRvIHN0YXJ0IHVwIGFmdGVy IHJlcXVlc3RpbmcKICAqIHBvc3RtYXN0ZXIgdG8gbGF1bmNoIGl0LiBJbiBzZWNvbmRzLgog ICovCiAjZGVmaW5lIFdBTFJDVl9TVEFSVFVQX1RJTUVPVVQgMTAKIAotLyogUmVwb3J0IHNo YXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFdhbFJjdlNobWVtSW5pdCAqLwotU2l6ZQot V2FsUmN2U2htZW1TaXplKHZvaWQpCisvKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNl IG5lZWRlZCBieSB3YWxyZWNlaXZlciAqLworc3RhdGljIHZvaWQKK1dhbFJjdlNobWVtUmVx dWVzdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZSA9IDA7CisJc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBXYWxSY3ZTaG1lbURlc2M7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6 ZW9mKFdhbFJjdkRhdGEpKTsKLQotCXJldHVybiBzaXplOworCVNobWVtUmVxdWVzdFN0cnVj dCgmV2FsUmN2U2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5h bWUgPSAiV2FsIFJlY2VpdmVyIEN0bCIsCisJCS5zaXplID0gc2l6ZW9mKFdhbFJjdkRhdGEp LAorCQkucHRyID0gKHZvaWQgKiopICZXYWxSY3YsCisJfSk7CiB9CiAKLS8qIEFsbG9jYXRl IGFuZCBpbml0aWFsaXplIHdhbHJlY2VpdmVyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLwot dm9pZAotV2FsUmN2U2htZW1Jbml0KHZvaWQpCisvKiBJbml0aWFsaXplIHdhbHJlY2VpdmVy LXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLworc3RhdGljIHZvaWQKK1dhbFJjdlNobWVtSW5p dCh2b2lkICphcmcpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlXYWxSY3YgPSAoV2FsUmN2RGF0 YSAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIldhbCBSZWNlaXZlciBDdGwiLCBXYWxSY3ZTaG1l bVNpemUoKSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKiBGaXJzdCB0aW1l IHRocm91Z2gsIHNvIGluaXRpYWxpemUgKi8KLQkJTWVtU2V0KFdhbFJjdiwgMCwgV2FsUmN2 U2htZW1TaXplKCkpOwotCQlXYWxSY3YtPndhbFJjdlN0YXRlID0gV0FMUkNWX1NUT1BQRUQ7 Ci0JCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsUmN2LT53YWxSY3ZTdG9wcGVkQ1YpOwot CQlTcGluTG9ja0luaXQoJldhbFJjdi0+bXV0ZXgpOwotCQlwZ19hdG9taWNfaW5pdF91NjQo JldhbFJjdi0+d3JpdHRlblVwdG8sIDApOwotCQlXYWxSY3YtPnByb2NubyA9IElOVkFMSURf UFJPQ19OVU1CRVI7Ci0JfQorCU1lbVNldChXYWxSY3YsIDAsIHNpemVvZihXYWxSY3ZEYXRh KSk7CisJV2FsUmN2LT53YWxSY3ZTdGF0ZSA9IFdBTFJDVl9TVE9QUEVEOworCUNvbmRpdGlv blZhcmlhYmxlSW5pdCgmV2FsUmN2LT53YWxSY3ZTdG9wcGVkQ1YpOworCVNwaW5Mb2NrSW5p dCgmV2FsUmN2LT5tdXRleCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZXYWxSY3YtPndyaXR0 ZW5VcHRvLCAwKTsKKwlXYWxSY3YtPnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiB9 CiAKIC8qIElzIHdhbHJlY2VpdmVyIHJ1bm5pbmcgKG9yIHN0YXJ0aW5nIHVwKT8gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggNjY1MDdlOWMyZGQuLjcyNTVh OWI1ZTJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAtODYsNiAr ODYsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUg InN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInRjb3AvZGVzdC5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKQEAgLTExNyw2 ICsxMTgsMTQgQEAKIC8qIEFycmF5IG9mIFdhbFNuZHMgaW4gc2hhcmVkIG1lbW9yeSAqLwog V2FsU25kQ3RsRGF0YSAqV2FsU25kQ3RsID0gTlVMTDsKIAorc3RhdGljIHZvaWQgV2FsU25k U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBXYWxTbmRTaG1lbUluaXQo dm9pZCAqYXJnKTsKKworY29uc3QgU2htZW1DYWxsYmFja3MgV2FsU25kU2htZW1DYWxsYmFj a3MgPSB7CisJLnJlcXVlc3RfZm4gPSBXYWxTbmRTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4g PSBXYWxTbmRTaG1lbUluaXQsCit9OworCiAvKiBNeSBzbG90IGluIHRoZSBzaGFyZWQgbWVt b3J5IGFycmF5ICovCiBXYWxTbmQJICAgKk15V2FsU25kID0gTlVMTDsKIApAQCAtMzc2Myw0 NyArMzc3MiwzOSBAQCBXYWxTbmRTaWduYWxzKHZvaWQpCiAJcHFzaWduYWwoU0lHQ0hMRCwg U0lHX0RGTCk7CiB9CiAKLS8qIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBi eSBXYWxTbmRTaG1lbUluaXQgKi8KLVNpemUKLVdhbFNuZFNobWVtU2l6ZSh2b2lkKQorLyog UmVnaXN0ZXIgc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgd2Fsc2VuZGVyICovCitz dGF0aWMgdm9pZAorV2FsU25kU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlz aXplID0gMDsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFdhbFNuZFNobWVtRGVzYzsKKwlT aXplCQlzaXplOwogCiAJc2l6ZSA9IG9mZnNldG9mKFdhbFNuZEN0bERhdGEsIHdhbHNuZHMp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShtYXhfd2FsX3NlbmRlcnMsIHNp emVvZihXYWxTbmQpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3Qo JldhbFNuZFNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1l ID0gIldhbCBTZW5kZXIgQ3RsIiwKKwkJLnNpemUgPSBzaXplLAorCQkucHRyID0gKHZvaWQg KiopICZXYWxTbmRDdGwsCisJfSk7CiB9CiAKLS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXpl IHdhbHNlbmRlci1yZWxhdGVkIHNoYXJlZCBtZW1vcnkgKi8KLXZvaWQKLVdhbFNuZFNobWVt SW5pdCh2b2lkKQorLyogSW5pdGlhbGl6ZSB3YWxzZW5kZXItcmVsYXRlZCBzaGFyZWQgbWVt b3J5ICovCitzdGF0aWMgdm9pZAorV2FsU25kU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQli b29sCQlmb3VuZDsKLQlpbnQJCQlpOworCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1NZTkNf UkVQX1dBSVRfTU9ERTsgaSsrKQorCQlkbGlzdF9pbml0KCYoV2FsU25kQ3RsLT5TeW5jUmVw UXVldWVbaV0pKTsKIAotCVdhbFNuZEN0bCA9IChXYWxTbmRDdGxEYXRhICopCi0JCVNobWVt SW5pdFN0cnVjdCgiV2FsIFNlbmRlciBDdGwiLCBXYWxTbmRTaG1lbVNpemUoKSwgJmZvdW5k KTsKLQotCWlmICghZm91bmQpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfd2FsX3NlbmRl cnM7IGkrKykKIAl7Ci0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZSAq LwotCQlNZW1TZXQoV2FsU25kQ3RsLCAwLCBXYWxTbmRTaG1lbVNpemUoKSk7Ci0KLQkJZm9y IChpID0gMDsgaSA8IE5VTV9TWU5DX1JFUF9XQUlUX01PREU7IGkrKykKLQkJCWRsaXN0X2lu aXQoJihXYWxTbmRDdGwtPlN5bmNSZXBRdWV1ZVtpXSkpOwotCi0JCWZvciAoaSA9IDA7IGkg PCBtYXhfd2FsX3NlbmRlcnM7IGkrKykKLQkJewotCQkJV2FsU25kCSAgICp3YWxzbmQgPSAm V2FsU25kQ3RsLT53YWxzbmRzW2ldOwotCi0JCQlTcGluTG9ja0luaXQoJndhbHNuZC0+bXV0 ZXgpOwotCQl9CisJCVdhbFNuZAkgICAqd2Fsc25kID0gJldhbFNuZEN0bC0+d2Fsc25kc1tp XTsKIAotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX2ZsdXNoX2N2 KTsKLQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZXYWxTbmRDdGwtPndhbF9yZXBsYXlfY3Yp OwotCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX2NvbmZpcm1fcmN2 X2N2KTsKKwkJU3BpbkxvY2tJbml0KCZ3YWxzbmQtPm11dGV4KTsKIAl9CisKKwlDb25kaXRp b25WYXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX2ZsdXNoX2N2KTsKKwlDb25kaXRpb25W YXJpYWJsZUluaXQoJldhbFNuZEN0bC0+d2FsX3JlcGxheV9jdik7CisJQ29uZGl0aW9uVmFy aWFibGVJbml0KCZXYWxTbmRDdGwtPndhbF9jb25maXJtX3Jjdl9jdik7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYwppbmRleCA1NGFiMTIzODEzMS4uZmVhZDJm ZDM3NzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYwpAQCAtMzcsMzIgKzM3 LDExIEBAIGNvbnN0IFNobWVtQ2FsbGJhY2tzIEFpb1NobWVtQ2FsbGJhY2tzID0gewogCS5h dHRhY2hfZm4gPSBBaW9TaG1lbUF0dGFjaCwKIH07CiAKLXN0YXRpYyBTaG1lbVN0cnVjdERl c2MgQWlvQ3RsU2htZW1EZXNjID0gewotCS5uYW1lID0gIkFpb0N0bCIsCi0JLnNpemUgPSBz aXplb2YoUGdBaW9DdGwpLAotCS5wdHIgPSAodm9pZCAqKikgJnBnYWlvX2N0bCwKLX07CiAK IHN0YXRpYyBQZ0Fpb0JhY2tlbmQgKkFpb0JhY2tlbmRTaG1lbVB0cjsKLXN0YXRpYyBTaG1l bVN0cnVjdERlc2MgQWlvQmFja2VuZFNobWVtRGVzYyA9IHsKLQkubmFtZSA9ICJBaW9CYWNr ZW5kIiwKLQkucHRyID0gKHZvaWQgKiopICZBaW9CYWNrZW5kU2htZW1QdHIsCi19Owogc3Rh dGljIFBnQWlvSGFuZGxlICpBaW9IYW5kbGVTaG1lbVB0cjsKLXN0YXRpYyBTaG1lbVN0cnVj dERlc2MgQWlvSGFuZGxlU2htZW1EZXNjID0gewotCS5uYW1lID0gIkFpb0hhbmRsZSIsCi0J LnB0ciA9ICh2b2lkICoqKSAmQWlvSGFuZGxlU2htZW1QdHIsCi19Owogc3RhdGljIHN0cnVj dCBpb3ZlYyAqQWlvSGFuZGxlSU9WU2htZW1QdHI7Ci1zdGF0aWMgU2htZW1TdHJ1Y3REZXNj IEFpb0hhbmRsZUlPVlNobWVtRGVzYyA9IHsKLQkubmFtZSA9ICJBaW9IYW5kbGVJT1YiLAot CS5wdHIgPSAodm9pZCAqKikgJkFpb0hhbmRsZUlPVlNobWVtUHRyLAotfTsKIHN0YXRpYyB1 aW50NjQgKkFpb0hhbmRsZURhdGFTaG1lbVB0cjsKLXN0YXRpYyBTaG1lbVN0cnVjdERlc2Mg QWlvSGFuZGxlRGF0YVNobWVtRGVzYyA9IHsKLQkubmFtZSA9ICJBaW9IYW5kbGVEYXRhIiwK LQkucHRyID0gKHZvaWQgKiopICZBaW9IYW5kbGVEYXRhU2htZW1QdHIsCi19OwogCiBzdGF0 aWMgdWludDMyCiBBaW9Qcm9jcyh2b2lkKQpAQCAtMTQ1LDkgKzEyNCwxNSBAQCBBaW9DaG9v c2VNYXhDb25jdXJyZW5jeSh2b2lkKQogc3RhdGljIHZvaWQKIEFpb1NobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7Ci0JLyogUmVzb2x2ZSBpb19tYXhfY29uY3VycmVuY3kgaWYgbm90IGFs cmVhZHkgZG9uZS4gKi8KKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb0N0bFNobWVtRGVz YzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb0JhY2tlbmRTaG1lbURlc2M7CisJc3Rh dGljIFNobWVtU3RydWN0RGVzYyBBaW9IYW5kbGVTaG1lbURlc2M7CisJc3RhdGljIFNobWVt U3RydWN0RGVzYyBBaW9IYW5kbGVJT1ZTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3RydWN0 RGVzYyBBaW9IYW5kbGVEYXRhU2htZW1EZXNjOwogCiAJLyoKKwkgKiBSZXNvbHZlIGlvX21h eF9jb25jdXJyZW5jeSBpZiBub3QgYWxyZWFkeSBkb25lCisJICoKIAkgKiBXZSBwcmVmZXIg dG8gcmVwb3J0IHRoaXMgdmFsdWUncyBzb3VyY2UgYXMgUEdDX1NfRFlOQU1JQ19ERUZBVUxU LgogCSAqIEhvd2V2ZXIsIGlmIHRoZSBEQkEgZXhwbGljaXRseSBzZXQgaW9fbWF4X2NvbmN1 cnJlbmN5ID0gLTEgaW4gdGhlCiAJICogY29uZmlnIGZpbGUsIHRoZW4gUEdDX1NfRFlOQU1J Q19ERUZBVUxUIHdpbGwgZmFpbCB0byBvdmVycmlkZSB0aGF0IGFuZApAQCAtMTY1LDE5ICsx NTAsMzUgQEAgQWlvU2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIAkJCQkJCQlQR0NfU19PVkVS UklERSk7CiAJfQogCi0JU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9DdGxTaG1lbURlc2MpOwot Ci0JQWlvQmFja2VuZFNobWVtRGVzYy5zaXplID0gQWlvQmFja2VuZFNobWVtU2l6ZSgpOwot CVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvQmFja2VuZFNobWVtRGVzYyk7Ci0KLQlBaW9IYW5k bGVTaG1lbURlc2Muc2l6ZSA9IEFpb0hhbmRsZVNobWVtU2l6ZSgpOwotCVNobWVtUmVxdWVz dFN0cnVjdCgmQWlvSGFuZGxlU2htZW1EZXNjKTsKLQotCUFpb0hhbmRsZUlPVlNobWVtRGVz Yy5zaXplID0gQWlvSGFuZGxlSU9WU2htZW1TaXplKCk7Ci0JU2htZW1SZXF1ZXN0U3RydWN0 KCZBaW9IYW5kbGVJT1ZTaG1lbURlc2MpOwotCi0JQWlvSGFuZGxlRGF0YVNobWVtRGVzYy5z aXplID0gQWlvSGFuZGxlRGF0YVNobWVtU2l6ZSgpOwotCVNobWVtUmVxdWVzdFN0cnVjdCgm QWlvSGFuZGxlRGF0YVNobWVtRGVzYyk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9DdGxT aG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJBaW9D dGwiLAorCQkuc2l6ZSA9IHNpemVvZihQZ0Fpb0N0bCksCisJCS5wdHIgPSAodm9pZCAqKikg JnBnYWlvX2N0bCwKKwl9KTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvQmFja2VuZFNo bWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIkFpb0Jh Y2tlbmQiLAorCQkuc2l6ZSA9IEFpb0JhY2tlbmRTaG1lbVNpemUoKSwKKwkJLnB0ciA9ICh2 b2lkICoqKSAmQWlvQmFja2VuZFNobWVtUHRyLAorCX0pOworCisJU2htZW1SZXF1ZXN0U3Ry dWN0KCZBaW9IYW5kbGVTaG1lbURlc2MsICAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsK KwkJLm5hbWUgPSAiQWlvSGFuZGxlIiwKKwkJLnNpemUgPSBBaW9IYW5kbGVTaG1lbVNpemUo KSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmQWlvSGFuZGxlU2htZW1QdHIsCisJfSk7CisKKwlT aG1lbVJlcXVlc3RTdHJ1Y3QoJkFpb0hhbmRsZUlPVlNobWVtRGVzYywgICYoU2htZW1SZXF1 ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJBaW9IYW5kbGVJT1YiLAorCQkuc2l6ZSA9 IEFpb0hhbmRsZUlPVlNobWVtU2l6ZSgpLAorCQkucHRyID0gKHZvaWQgKiopICZBaW9IYW5k bGVJT1ZTaG1lbVB0ciwKKwl9KTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQWlvSGFuZGxl RGF0YVNobWVtRGVzYywgICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9 ICJBaW9IYW5kbGVEYXRhIiwKKwkJLnNpemUgPSBBaW9IYW5kbGVEYXRhU2htZW1TaXplKCks CisJCS5wdHIgPSAodm9pZCAqKikgJkFpb0hhbmRsZURhdGFTaG1lbVB0ciwKKwl9KTsKIAog CWlmIChwZ2Fpb19tZXRob2Rfb3BzLT5zaG1lbV9jYWxsYmFja3MucmVxdWVzdF9mbikKIAkJ cGdhaW9fbWV0aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLnJlcXVlc3RfZm4ocGdhaW9fbWV0 aG9kX29wcy0+c2htZW1fY2FsbGJhY2tzLnJlcXVlc3RfZm5fYXJnKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggZGYyZDAxZDY2ZmEuLmQw OGJlNzk0YTExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rf aW9fdXJpbmcuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwpAQCAtMjczLDEwICsyNzMsNyBAQCBwZ2Fpb191cmluZ19zaG1lbV9zaXplKHZvaWQp CiBzdGF0aWMgdm9pZAogcGdhaW9fdXJpbmdfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiB7 Ci0Jc3RhdGljIFNobWVtU3RydWN0RGVzYyBBaW9VcmluZ1NobWVtRGVzYyA9IHsKLQkJLm5h bWUgPSAiQWlvVXJpbmdDb250ZXh0IiwKLQkJLnB0ciA9ICh2b2lkICoqKSAmcGdhaW9fdXJp bmdfY29udGV4dHMsCi0JfTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb1VyaW5nU2ht ZW1EZXNjOwogCiAJLyoKIAkgKiBLZXJuZWwgYW5kIGxpYnVyaW5nIHN1cHBvcnQgZm9yIHZh cmlvdXMgZmVhdHVyZXMgaW5mbHVlbmNlcyBob3cgbXVjaApAQCAtMjg0LDggKzI4MSwxMSBA QCBwZ2Fpb191cmluZ19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKIAkgKi8KIAlwZ2Fpb191 cmluZ19jaGVja19jYXBhYmlsaXRpZXMoKTsKIAotCUFpb1VyaW5nU2htZW1EZXNjLnNpemUg PSBwZ2Fpb191cmluZ19zaG1lbV9zaXplKCk7Ci0JU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9V cmluZ1NobWVtRGVzYyk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZBaW9VcmluZ1NobWVtRGVz YywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIkFpb1VyaW5nQ29u dGV4dCIsCisJCS5zaXplICA9cGdhaW9fdXJpbmdfc2htZW1fc2l6ZSgpLAorCQkucHRyID0g KHZvaWQgKiopICZwZ2Fpb191cmluZ19jb250ZXh0cywKKwl9KTsKIH0KIAogc3RhdGljIHZv aWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwppbmRleCA4MmM4 YjA5OGE5ZS4uN2RjOWE1MWY1ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL21ldGhvZF93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRo b2Rfd29ya2VyLmMKQEAgLTE2MiwxNiArMTYyLDE4IEBAIHBnYWlvX3dvcmtlcl9zaG1lbV9h dHRhY2godm9pZCAqYXJnKQogc3RhdGljIHZvaWQKIHBnYWlvX3dvcmtlcl9zaG1lbV9yZXF1 ZXN0KHZvaWQgKmFyZykKIHsKLQlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb1dvcmtlclNo bWVtRGVzYyA9IHsKLQkJLm5hbWUgPSAiQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlIiwKLQkJ LnB0ciA9ICh2b2lkICoqKSAmaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUsCi0JfTsKKwlz dGF0aWMgU2htZW1TdHJ1Y3REZXNjIEFpb1dvcmtlclNobWVtRGVzYzsKIAlpbnQJCQlxdWV1 ZV9zaXplOworCXNpemVfdAkJc2l6ZTsKIAotCUFpb1dvcmtlclNobWVtRGVzYy5zaXplID0K LQkJTUFYQUxJR04ocGdhaW9fd29ya2VyX3F1ZXVlX3NobWVtX3NpemUoJnF1ZXVlX3NpemUp KSArCisJc2l6ZSA9IE1BWEFMSUdOKHBnYWlvX3dvcmtlcl9xdWV1ZV9zaG1lbV9zaXplKCZx dWV1ZV9zaXplKSkgKwogCQlwZ2Fpb193b3JrZXJfY29udHJvbF9zaG1lbV9zaXplKCk7Ci0J U2htZW1SZXF1ZXN0U3RydWN0KCZBaW9Xb3JrZXJTaG1lbURlc2MpOworCisJU2htZW1SZXF1 ZXN0U3RydWN0KCZBaW9Xb3JrZXJTaG1lbURlc2MsICYoU2htZW1SZXF1ZXN0U3RydWN0T3B0 cykgeworCQkubmFtZSA9ICJBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUiLAorCQkuc2l6ZSA9 IHNpemUsCisJCS5wdHIgPSAodm9pZCAqKikgJmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVl LAorCX0pOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm X2luaXQuYwppbmRleCBjMGMyMjNiMmUzMi4uYmZlZTYyYjgyMDggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUg InN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jbGlzdC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2ht ZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIKIAogQnVmZmVyRGVzY1Bh ZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9ja3M7CkBAIC0y NSw2ICsyNywxNSBAQCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVy SU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsK IENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKIAorc3RhdGljIHZvaWQgQnVmZmVyTWFu YWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdl clNobWVtSW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdlclNobWVt QXR0YWNoKHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJhY2tzIEJ1ZmZlck1hbmFn ZXJTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEJ1ZmZlck1hbmFnZXJTaG1l bVJlcXVlc3QsCisJLmluaXRfZm4gPSBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0LAorCS5hdHRh Y2hfZm4gPSBCdWZmZXJNYW5hZ2VyU2htZW1BdHRhY2gsCit9OwogCiAvKgogICogRGF0YSBT dHJ1Y3R1cmVzOgpAQCAtNjAsMzcgKzcxLDM5IEBAIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZl cklkczsKIAogCiAvKgotICogSW5pdGlhbGl6ZSBzaGFyZWQgYnVmZmVyIHBvb2wKLSAqCi0g KiBUaGlzIGlzIGNhbGxlZCBvbmNlIGR1cmluZyBzaGFyZWQtbWVtb3J5IGluaXRpYWxpemF0 aW9uIChlaXRoZXIgaW4gdGhlCi0gKiBwb3N0bWFzdGVyLCBvciBpbiBhIHN0YW5kYWxvbmUg YmFja2VuZCkuCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGFyZWEgZm9yIHRoZSBidWZm ZXIgcG9vbC4KICAqLwotdm9pZAotQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQorc3Rh dGljIHZvaWQKK0J1ZmZlck1hbmFnZXJTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKQogewotCWJv b2wJCWZvdW5kQnVmcywKLQkJCQlmb3VuZERlc2NzLAotCQkJCWZvdW5kSU9DViwKLQkJCQlm b3VuZEJ1ZkNrcHQ7Ci0KLQkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGluZSBi b3VuZGFyeS4gKi8KLQlCdWZmZXJEZXNjcmlwdG9ycyA9IChCdWZmZXJEZXNjUGFkZGVkICop Ci0JCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKLQkJCQkJCU5CdWZm ZXJzICogc2l6ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpLAotCQkJCQkJJmZvdW5kRGVzY3MpOwot Ci0JLyogQWxpZ24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBzaXplIGJvdW5kYXJ5LiAqLwot CUJ1ZmZlckJsb2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElHTihQR19JT19BTElHTl9TSVpF LAotCQkJCSAgU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgQmxvY2tzIiwKLQkJCQkJCQkJICBO QnVmZmVycyAqIChTaXplKSBCTENLU1ogKyBQR19JT19BTElHTl9TSVpFLAotCQkJCQkJCQkg ICZmb3VuZEJ1ZnMpKTsKLQotCS8qIEFsaWduIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gY2Fj aGVsaW5lIGJvdW5kYXJ5LiAqLwotCUJ1ZmZlcklPQ1ZBcnJheSA9IChDb25kaXRpb25WYXJp YWJsZU1pbmltYWxseVBhZGRlZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBJTyBD b25kaXRpb24gVmFyaWFibGVzIiwKLQkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlv blZhcmlhYmxlTWluaW1hbGx5UGFkZGVkKSwKLQkJCQkJCSZmb3VuZElPQ1YpOworCXN0YXRp YyBTaG1lbVN0cnVjdERlc2MgQnVmZmVyRGVzY3JpcHRvcnNTaG1lbURlc2M7CisJc3RhdGlj IFNobWVtU3RydWN0RGVzYyBCdWZmZXJCbG9ja3NTaG1lbURlc2M7CisJc3RhdGljIFNobWVt U3RydWN0RGVzYyBCdWZmZXJJT0NWQXJyYXlTaG1lbURlc2M7CisJc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBDa3B0QnVmZmVySWRzU2htZW1EZXNjOworCisJU2htZW1SZXF1ZXN0U3RydWN0 KCZCdWZmZXJEZXNjcmlwdG9yc1NobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRz KSB7CisJCS5uYW1lID0gIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCisJCS5zaXplID0gTkJ1ZmZl cnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCksCisJCS8qIEFsaWduIGRlc2NyaXB0b3Jz IHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLworCQkuYWxpZ25tZW50ID0gUEdfQ0FDSEVf TElORV9TSVpFLAorCQkucHRyID0gKHZvaWQgKiopICZCdWZmZXJEZXNjcmlwdG9ycywKKwl9 KTsKKworCVNobWVtUmVxdWVzdFN0cnVjdCgmQnVmZmVyQmxvY2tzU2htZW1EZXNjLCAgJihT aG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIkJ1ZmZlciBCbG9ja3MiLAor CQkuc2l6ZSA9IE5CdWZmZXJzICogKFNpemUpIEJMQ0tTWiwKKwkJLyogQWxpZ24gYnVmZmVy IHBvb2wgb24gSU8gcGFnZSBzaXplIGJvdW5kYXJ5LiAqLworCQkuYWxpZ25tZW50ID0gUEdf SU9fQUxJR05fU0laRSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmQnVmZmVyQmxvY2tzLAorCX0p OworCisJU2htZW1SZXF1ZXN0U3RydWN0KCZCdWZmZXJJT0NWQXJyYXlTaG1lbURlc2MsICAm KFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiQnVmZmVyIElPIENvbmRp dGlvbiBWYXJpYWJsZXMiLAorCQkuc2l6ZSA9IE5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlv blZhcmlhYmxlTWluaW1hbGx5UGFkZGVkKSwKKwkJLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8g YSBjYWNoZWxpbmUgYm91bmRhcnkuICovCisJCS5hbGlnbm1lbnQgPSBQR19DQUNIRV9MSU5F X1NJWkUsCisJCS5wdHIgPSAodm9pZCAqKikgJkJ1ZmZlcklPQ1ZBcnJheSwKKwl9KTsKIAog CS8qCiAJICogVGhlIGFycmF5IHVzZWQgdG8gc29ydCB0by1iZS1jaGVja3BvaW50ZWQgYnVm ZmVyIGlkcyBpcyBsb2NhdGVkIGluCkBAIC05OSw4MCArMTEyLDUxIEBAIEJ1ZmZlck1hbmFn ZXJTaG1lbUluaXQodm9pZCkKIAkgKiB0aGUgY2hlY2twb2ludGVyIGlzIHJlc3RhcnRlZCwg bWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd291bGQgYmUKIAkgKiBwYWluZnVsLgogCSAq LwotCUNrcHRCdWZmZXJJZHMgPSAoQ2twdFNvcnRJdGVtICopCi0JCVNobWVtSW5pdFN0cnVj dCgiQ2hlY2twb2ludCBCdWZmZXJJZHMiLAotCQkJCQkJTkJ1ZmZlcnMgKiBzaXplb2YoQ2tw dFNvcnRJdGVtKSwgJmZvdW5kQnVmQ2twdCk7CisJU2htZW1SZXF1ZXN0U3RydWN0KCZDa3B0 QnVmZmVySWRzU2htZW1EZXNjLCAgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5u YW1lID0gIkNoZWNrcG9pbnQgQnVmZmVySWRzIiwKKwkJLnNpemUgPSBOQnVmZmVycyAqIHNp emVvZihDa3B0U29ydEl0ZW0pLAorCQkucHRyID0gKHZvaWQgKiopICZDa3B0QnVmZmVySWRz LAorCX0pOworfQogCi0JaWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZzIHx8IGZvdW5kSU9D ViB8fCBmb3VuZEJ1ZkNrcHQpCi0JewotCQkvKiBzaG91bGQgZmluZCBhbGwgb2YgdGhlc2Us IG9yIG5vbmUgb2YgdGhlbSAqLwotCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMg JiYgZm91bmRJT0NWICYmIGZvdW5kQnVmQ2twdCk7Ci0JCS8qIG5vdGU6IHRoaXMgcGF0aCBp cyBvbmx5IHRha2VuIGluIEVYRUNfQkFDS0VORCBjYXNlICovCi0JfQotCWVsc2UKKy8qCisg KiBJbml0aWFsaXplIHNoYXJlZCBidWZmZXIgcG9vbAorICoKKyAqIFRoaXMgaXMgY2FsbGVk IG9uY2UgZHVyaW5nIHNoYXJlZC1tZW1vcnkgaW5pdGlhbGl6YXRpb24gKGVpdGhlciBpbiB0 aGUKKyAqIHBvc3RtYXN0ZXIsIG9yIGluIGEgc3RhbmRhbG9uZSBiYWNrZW5kKS4KKyAqLwor c3RhdGljIHZvaWQKK0J1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCAqYXJnKQoreworCS8q CisJICogSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1ZmZlciBoZWFkZXJzLgorCSAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKIAl7Ci0JCWludAkJCWk7Ci0KLQkJLyoK LQkJICogSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1ZmZlciBoZWFkZXJzLgotCQkgKi8KLQkJZm9y IChpID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCi0JCXsKLQkJCUJ1ZmZlckRlc2MgKmJ1ZiA9 IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7CisJCUJ1ZmZlckRlc2MgKmJ1ZiA9IEdldEJ1ZmZl ckRlc2NyaXB0b3IoaSk7CiAKLQkJCUNsZWFyQnVmZmVyVGFnKCZidWYtPnRhZyk7CisJCUNs ZWFyQnVmZmVyVGFnKCZidWYtPnRhZyk7CiAKLQkJCXBnX2F0b21pY19pbml0X3U2NCgmYnVm LT5zdGF0ZSwgMCk7Ci0JCQlidWYtPndhaXRfYmFja2VuZF9wZ3Byb2NubyA9IElOVkFMSURf UFJPQ19OVU1CRVI7CisJCXBnX2F0b21pY19pbml0X3U2NCgmYnVmLT5zdGF0ZSwgMCk7CisJ CWJ1Zi0+d2FpdF9iYWNrZW5kX3BncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAot CQkJYnVmLT5idWZfaWQgPSBpOworCQlidWYtPmJ1Zl9pZCA9IGk7CiAKLQkJCXBnYWlvX3dy ZWZfY2xlYXIoJmJ1Zi0+aW9fd3JlZik7CisJCXBnYWlvX3dyZWZfY2xlYXIoJmJ1Zi0+aW9f d3JlZik7CiAKLQkJCXByb2NsaXN0X2luaXQoJmJ1Zi0+bG9ja193YWl0ZXJzKTsKLQkJCUNv bmRpdGlvblZhcmlhYmxlSW5pdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWYpKTsKLQkJ fQorCQlwcm9jbGlzdF9pbml0KCZidWYtPmxvY2tfd2FpdGVycyk7CisJCUNvbmRpdGlvblZh cmlhYmxlSW5pdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWYpKTsKIAl9CiAKLQkvKiBJ bml0IG90aGVyIHNoYXJlZCBidWZmZXItbWFuYWdlbWVudCBzdHVmZiAqLwotCVN0cmF0ZWd5 SW5pdGlhbGl6ZSghZm91bmREZXNjcyk7Ci0KIAkvKiBJbml0aWFsaXplIHBlci1iYWNrZW5k IGZpbGUgZmx1c2ggY29udGV4dCAqLwogCVdyaXRlYmFja0NvbnRleHRJbml0KCZCYWNrZW5k V3JpdGViYWNrQ29udGV4dCwKIAkJCQkJCSAmYmFja2VuZF9mbHVzaF9hZnRlcik7CiB9CiAK LS8qCi0gKiBCdWZmZXJNYW5hZ2VyU2htZW1TaXplCi0gKgotICogY29tcHV0ZSB0aGUgc2l6 ZSBvZiBzaGFyZWQgbWVtb3J5IGZvciB0aGUgYnVmZmVyIHBvb2wgaW5jbHVkaW5nCi0gKiBk YXRhIHBhZ2VzLCBidWZmZXIgZGVzY3JpcHRvcnMsIGhhc2ggdGFibGVzLCBldGMuCi0gKi8K LVNpemUKLUJ1ZmZlck1hbmFnZXJTaG1lbVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitCdWZm ZXJNYW5hZ2VyU2htZW1BdHRhY2godm9pZCAqYXJnKQogewotCVNpemUJCXNpemUgPSAwOwot Ci0JLyogc2l6ZSBvZiBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSkpOwot CS8qIHRvIGFsbG93IGFsaWduaW5nIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBQR19DQUNIRV9MSU5FX1NJWkUpOwotCi0JLyogc2l6ZSBvZiBkYXRh IHBhZ2VzLCBwbHVzIGFsaWdubWVudCBwYWRkaW5nICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFBHX0lPX0FMSUdOX1NJWkUpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZShOQnVmZmVycywgQkxDS1NaKSk7Ci0KLQkvKiBzaXplIG9mIHN0dWZmIGNvbnRyb2xsZWQg YnkgZnJlZWxpc3QuYyAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdHJhdGVneVNobWVt U2l6ZSgpKTsKLQotCS8qIHNpemUgb2YgSS9PIGNvbmRpdGlvbiB2YXJpYWJsZXMgKi8KLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsCi0JCQkJCQkJCSAgIHNp emVvZihDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCkpKTsKLQkvKiB0byBhbGxv dyBhbGlnbmluZyB0aGUgYWJvdmUgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUEdfQ0FD SEVfTElORV9TSVpFKTsKLQotCS8qIHNpemUgb2YgY2hlY2twb2ludCBzb3J0IGFycmF5IGlu IGJ1Zm1nci5jICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJz LCBzaXplb2YoQ2twdFNvcnRJdGVtKSkpOwotCi0JcmV0dXJuIHNpemU7CisJLyogSW5pdGlh bGl6ZSBwZXItYmFja2VuZCBmaWxlIGZsdXNoIGNvbnRleHQgKi8KKwlXcml0ZWJhY2tDb250 ZXh0SW5pdCgmQmFja2VuZFdyaXRlYmFja0NvbnRleHQsCisJCQkJCQkgJmJhY2tlbmRfZmx1 c2hfYWZ0ZXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv YnVmX3RhYmxlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfdGFibGUuYwpp bmRleCAyM2Q4NWZkMzJlMi4uZWJhYzYwZjg0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl90YWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zl90YWJsZS5jCkBAIC0zMiwzNyArMzIsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QK IAogc3RhdGljIEhUQUIgKlNoYXJlZEJ1Zkhhc2g7CiAKLQotLyoKLSAqIEVzdGltYXRlIHNw YWNlIG5lZWRlZCBmb3IgbWFwcGluZyBoYXNodGFibGUKLSAqCQlzaXplIGlzIHRoZSBkZXNp cmVkIGhhc2ggdGFibGUgc2l6ZSAocG9zc2libHkgbW9yZSB0aGFuIE5CdWZmZXJzKQotICov Ci1TaXplCi1CdWZUYWJsZVNobWVtU2l6ZShpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gaGFzaF9l c3RpbWF0ZV9zaXplKHNpemUsIHNpemVvZihCdWZmZXJMb29rdXBFbnQpKTsKLX0KLQogLyoK LSAqIEluaXRpYWxpemUgc2htZW0gaGFzaCB0YWJsZSBmb3IgbWFwcGluZyBidWZmZXJzCisg KiBSZWdpc3RlciBzaG1lbSBoYXNoIHRhYmxlIGZvciBtYXBwaW5nIGJ1ZmZlcnMuCiAgKgkJ c2l6ZSBpcyB0aGUgZGVzaXJlZCBoYXNoIHRhYmxlIHNpemUgKHBvc3NpYmx5IG1vcmUgdGhh biBOQnVmZmVycykKICAqLwogdm9pZAotSW5pdEJ1ZlRhYmxlKGludCBzaXplKQorQnVmVGFi bGVTaG1lbVJlcXVlc3QoaW50IHNpemUpCiB7Ci0JSEFTSENUTAkJaW5mbzsKLQotCS8qIGFz c3VtZSBubyBsb2NraW5nIGlzIG5lZWRlZCB5ZXQgKi8KLQotCS8qIEJ1ZmZlclRhZyBtYXBz IHRvIEJ1ZmZlciAqLwotCWluZm8ua2V5c2l6ZSA9IHNpemVvZihCdWZmZXJUYWcpOwotCWlu Zm8uZW50cnlzaXplID0gc2l6ZW9mKEJ1ZmZlckxvb2t1cEVudCk7Ci0JaW5mby5udW1fcGFy dGl0aW9ucyA9IE5VTV9CVUZGRVJfUEFSVElUSU9OUzsKLQotCVNoYXJlZEJ1Zkhhc2ggPSBT aG1lbUluaXRIYXNoKCJTaGFyZWQgQnVmZmVyIExvb2t1cCBUYWJsZSIsCi0JCQkJCQkJCSAg c2l6ZSwgc2l6ZSwKLQkJCQkJCQkJICAmaW5mbywKLQkJCQkJCQkJICBIQVNIX0VMRU0gfCBI QVNIX0JMT0JTIHwgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJWkUpOworCXN0YXRp YyBTaG1lbUhhc2hEZXNjIFNoYXJlZEJ1Zkhhc2hEZXNjOworCisJU2htZW1SZXF1ZXN0SGFz aCgmU2hhcmVkQnVmSGFzaERlc2MsICYoU2htZW1SZXF1ZXN0SGFzaE9wdHMpIHsKKwkJLm5h bWUgPSAiU2hhcmVkIEJ1ZmZlciBMb29rdXAgVGFibGUiLAorCQkubWF4X3NpemUgPSBzaXpl LAorCQkuaW5pdF9zaXplID0gc2l6ZSwKKwkJLnB0ciA9ICZTaGFyZWRCdWZIYXNoLAorCQku aGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YoQnVmZmVyVGFnKSwKKwkJLmhhc2hfaW5mby5l bnRyeXNpemUgPSBzaXplb2YoQnVmZmVyTG9va3VwRW50KSwKKwkJLmhhc2hfaW5mby5udW1f cGFydGl0aW9ucyA9IE5VTV9CVUZGRVJfUEFSVElUSU9OUywKKwkJLmhhc2hfZmxhZ3MgPSBI QVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9QQVJUSVRJT04gfCBIQVNIX0ZJWEVEX1NJ WkUsCisJfSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3Qu YwppbmRleCBiNzY4NzgzNjE4OC4uZWYyMWEwMTc1YjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgogCiAjZGVmaW5lIElOVF9BQ0NFU1NfT05D RSh2YXIpCSgoaW50KSgqKCh2b2xhdGlsZSBpbnQgKikmKHZhcikpKSkKIApAQCAtNTYsNiAr NTgsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QKIC8qIFBvaW50ZXJzIHRvIHNoYXJlZCBzdGF0ZSAq Lwogc3RhdGljIEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCAqU3RyYXRlZ3lDb250cm9sID0gTlVM TDsKIAorc3RhdGljIHZvaWQgU3RyYXRlZ3lDdGxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsK K3N0YXRpYyB2b2lkIFN0cmF0ZWd5Q3RsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0 IFNobWVtQ2FsbGJhY2tzIFN0cmF0ZWd5Q3RsU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVl c3RfZm4gPSBTdHJhdGVneUN0bFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFN0cmF0ZWd5 Q3RsU2htZW1Jbml0LAorfTsKKwogLyoKICAqIFByaXZhdGUgKG5vbi1zaGFyZWQpIHN0YXRl IGZvciBtYW5hZ2luZyBhIHJpbmcgb2Ygc2hhcmVkIGJ1ZmZlcnMgdG8gcmUtdXNlLgogICog VGhpcyBpcyBjdXJyZW50bHkgdGhlIG9ubHkga2luZCBvZiBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBvYmplY3QsIGJ1dCBzb21lZGF5CkBAIC0zNjksNDEgKzM3OSwyMiBAQCBTdHJhdGVneU5v dGlmeUJnV3JpdGVyKGludCBiZ3dwcm9jbm8pCiAKIAogLyoKLSAqIFN0cmF0ZWd5U2htZW1T aXplCi0gKgotICogZXN0aW1hdGUgdGhlIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSB1c2VkIGJ5 IHRoZSBmcmVlbGlzdC1yZWxhdGVkIHN0cnVjdHVyZXMuCi0gKgotICogTm90ZTogZm9yIHNv bWV3aGF0IGhpc3RvcmljYWwgcmVhc29ucywgdGhlIGJ1ZmZlciBsb29rdXAgaGFzaHRhYmxl IHNpemUKLSAqIGlzIGFsc28gZGV0ZXJtaW5lZCBoZXJlLgorICogU3RyYXRlZ3lDdGxTaG1l bVJlcXVlc3QgLS0gcmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlcgorICoJ CWNhY2hlIHJlcGxhY2VtZW50IHN0cmF0ZWd5LgogICovCi1TaXplCi1TdHJhdGVneVNobWVt U2l6ZSh2b2lkKQorc3RhdGljIHZvaWQKK1N0cmF0ZWd5Q3RsU2htZW1SZXF1ZXN0KHZvaWQg KmFyZykKIHsKLQlTaXplCQlzaXplID0gMDsKLQotCS8qIHNpemUgb2YgbG9va3VwIGhhc2gg dGFibGUgLi4uIHNlZSBjb21tZW50IGluIFN0cmF0ZWd5SW5pdGlhbGl6ZSAqLwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBCdWZUYWJsZVNobWVtU2l6ZShOQnVmZmVycyArIE5VTV9CVUZG RVJfUEFSVElUSU9OUykpOwotCi0JLyogc2l6ZSBvZiB0aGUgc2hhcmVkIHJlcGxhY2VtZW50 IHN0cmF0ZWd5IGNvbnRyb2wgYmxvY2sgKi8KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTUFY QUxJR04oc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCkpKTsKKwlzdGF0aWMgU2htZW1T dHJ1Y3REZXNjIFN0cmF0ZWd5Q3RsU2htZW1EZXNjOwogCi0JcmV0dXJuIHNpemU7Ci19Ci0K LS8qCi0gKiBTdHJhdGVneUluaXRpYWxpemUgLS0gaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIGNh Y2hlIHJlcGxhY2VtZW50Ci0gKgkJc3RyYXRlZ3kuCi0gKgotICogQXNzdW1lczogQWxsIG9m IHRoZSBidWZmZXJzIGFyZSBhbHJlYWR5IGJ1aWx0IGludG8gYSBsaW5rZWQgbGlzdC4KLSAq CQlPbmx5IGNhbGxlZCBieSBwb3N0bWFzdGVyIGFuZCBvbmx5IGR1cmluZyBpbml0aWFsaXph dGlvbi4KLSAqLwotdm9pZAotU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKLXsKLQli b29sCQlmb3VuZDsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJlN0cmF0ZWd5Q3RsU2htZW1EZXNj LCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiQnVmZmVyIFN0cmF0 ZWd5IFN0YXR1cyIsCisJCS5zaXplID0gc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCks CisJCS5wdHIgPSAodm9pZCAqKikgJlN0cmF0ZWd5Q29udHJvbAorCX0pOwogCiAJLyoKLQkg KiBJbml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1cCBoYXNodGFibGUuCisJICog UmVxdWVzdCB0aGUgc2hhcmVkIGJ1ZmZlciBsb29rdXAgaGFzaHRhYmxlLgogCSAqCiAJICog U2luY2Ugd2UgY2FuJ3QgdG9sZXJhdGUgcnVubmluZyBvdXQgb2YgbG9va3VwIHRhYmxlIGVu dHJpZXMsIHdlIG11c3QgYmUKIAkgKiBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgdGFi bGUgc2l6ZSBoZXJlLiAgVGhlIG1heGltdW0gc3RlYWR5LXN0YXRlCkBAIC00MTIsMzcgKzQw MywyNiBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCSAqIGhhcHBlbmluZyBp biBlYWNoIHBhcnRpdGlvbiBjb25jdXJyZW50bHksIHNvIHdlIGNvdWxkIG5lZWQgYXMgbWFu eSBhcwogCSAqIE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TIGVudHJpZXMuCiAJ ICovCi0JSW5pdEJ1ZlRhYmxlKE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKTsK LQotCS8qCi0JICogR2V0IG9yIGNyZWF0ZSB0aGUgc2hhcmVkIHN0cmF0ZWd5IGNvbnRyb2wg YmxvY2sKLQkgKi8KLQlTdHJhdGVneUNvbnRyb2wgPSAoQnVmZmVyU3RyYXRlZ3lDb250cm9s ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIFN0cmF0ZWd5IFN0YXR1cyIsCi0JCQkJ CQlzaXplb2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlp ZiAoIWZvdW5kKQotCXsKLQkJLyoKLQkJICogT25seSBkb25lIG9uY2UsIHVzdWFsbHkgaW4g cG9zdG1hc3RlcgotCQkgKi8KLQkJQXNzZXJ0KGluaXQpOworCUJ1ZlRhYmxlU2htZW1SZXF1 ZXN0KE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKTsKK30KIAotCQlTcGluTG9j a0luaXQoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworLyoKKyAq IFN0cmF0ZWd5Q3RsU2htZW1Jbml0IC0tIGluaXRpYWxpemUgdGhlIGJ1ZmZlciBjYWNoZSBy ZXBsYWNlbWVudCBzdHJhdGVneS4KKyAqLworc3RhdGljIHZvaWQKK1N0cmF0ZWd5Q3RsU2ht ZW1Jbml0KHZvaWQgKmFyZykKK3sKKwlTcGluTG9ja0luaXQoJlN0cmF0ZWd5Q29udHJvbC0+ YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwogCi0JCS8qIEluaXRpYWxpemUgdGhlIGNsb2NrLXN3 ZWVwIHBvaW50ZXIgKi8KLQkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wt Pm5leHRWaWN0aW1CdWZmZXIsIDApOworCS8qIEluaXRpYWxpemUgdGhlIGNsb2NrLXN3ZWVw IHBvaW50ZXIgKi8KKwlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4 dFZpY3RpbUJ1ZmZlciwgMCk7CiAKLQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLwotCQlTdHJh dGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzID0gMDsKLQkJcGdfYXRvbWljX2luaXRfdTMy KCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7CisJLyogQ2xlYXIgc3Rh dGlzdGljcyAqLworCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMgPSAwOworCXBn X2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDAp OwogCi0JCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCi0JCVN0cmF0ZWd5Q29udHJv bC0+Ymd3cHJvY25vID0gLTE7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KCFpbml0KTsKKwkvKiBO byBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLworCVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25v ID0gLTE7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IGI5NDUwMzVkOThh Li4yMTdmNTI5MTI3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTQsMzYgKzE0 LDEzIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVkZSAiYWNjZXNz L2Nsb2cuaCIKLSNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCi0jaW5jbHVkZSAiYWNj ZXNzL211bHRpeGFjdC5oIgotI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKLSNpbmNsdWRl ICJhY2Nlc3Mvc3VidHJhbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKLSNp bmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKLSNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZl dGNoZXIuaCIKLSNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCi0jaW5jbHVkZSAi YWNjZXNzL3hsb2d3YWl0LmgiCi0jaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJwb3N0 bWFzdGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyX2lu dGVybmFscy5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKLSNpbmNsdWRl ICJwb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9s b2dpY2FsbGF1bmNoZXIuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKLSNp bmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCi0jaW5jbHVkZSAicmVwbGljYXRpb24vc2xv dHN5bmMuaCIKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgotI2luY2x1 ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1 YnN5cy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9kc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL3Btc2lnbmFsLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N1YnN5c3RlbXMuaCIK ICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKQEAgLTU1LDggKzMyLDYgQEAgc2htZW1fc3RhcnR1 cF9ob29rX3R5cGUgc2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKIAogc3RhdGljIFNpemUg dG90YWxfYWRkaW5fcmVxdWVzdCA9IDA7CiAKLXN0YXRpYyB2b2lkIENyZWF0ZU9yQXR0YWNo U2htZW1TdHJ1Y3RzKHZvaWQpOwotCiAvKgogICogUmVxdWVzdEFkZGluU2htZW1TcGFjZQog ICoJCVJlcXVlc3QgdGhhdCBleHRyYSBzaG1lbSBzcGFjZSBiZSBhbGxvY2F0ZWQgZm9yIHVz ZSBieQpAQCAtOTUsMzIgKzcwLDYgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6 ZSA9IDEwMDAwMDsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1HZXRSZXF1ZXN0ZWRT aXplKCkpOwogCi0JLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgQnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgTG9ja01hbmFnZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhM b2dQcmVmZXRjaFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExPR1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1JlY292ZXJ5U2htZW1T aXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUd29QaGFzZVNobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2NrU2htZW1TaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBCYWNrZW5kU3RhdHVzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBDaGVja3BvaW50ZXJTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIEF1dG9WYWN1dW1TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IFJlcGxpY2F0aW9uT3JpZ2luU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBXYWxTbmRTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhbFJjdlNo bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FsU3VtbWFyaXplclNobWVt U2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUGdBcmNoU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBBcHBseUxhdW5jaGVyU2htZW1TaXplKCkpOwotCXNp emUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IFN0YXRzU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTbG90U3luY1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdExTTlNobWVtU2l6ZSgp KTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9naWNhbERlY29kaW5nQ3RsU2htZW1TaXpl KCkpOwotCiAJLyogaW5jbHVkZSBhZGRpdGlvbmFsIHJlcXVlc3RlZCBzaG1lbSBmcm9tIHBy ZWxvYWQgbGlicmFyaWVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHRvdGFsX2FkZGlu X3JlcXVlc3QpOwogCkBAIC0xNTksNyArMTA4LDYgQEAgQXR0YWNoU2hhcmVkTWVtb3J5U3Ry dWN0cyh2b2lkKQogCiAJLyogRXN0YWJsaXNoIHBvaW50ZXJzIHRvIGFsbCBzaGFyZWQgbWVt b3J5IGFyZWFzIGluIHRoaXMgYmFja2VuZCAqLwogCVNobWVtQXR0YWNoUmVxdWVzdGVkKCk7 Ci0JQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHMoKTsKIAogCS8qCiAJICogTm93IGdpdmUg bG9hZGFibGUgbW9kdWxlcyBhIGNoYW5jZSB0byBzZXQgdXAgdGhlaXIgc2htZW0gYWxsb2Nh dGlvbnMKQEAgLTIxNyw5ICsxNjUsNiBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhv cmVzKHZvaWQpCiAJLyogSW5pdGlhbGl6ZSBhbGwgc2htZW0gYXJlYXMgKi8KIAlTaG1lbUlu aXRSZXF1ZXN0ZWQoKTsKIAotCS8qIEluaXRpYWxpemUgbGVnYWN5IHN1YnN5c3RlbXMgKi8K LQlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwotCiAJLyogSW5pdGlhbGl6ZSBkeW5h bWljIHNoYXJlZCBtZW1vcnkgZmFjaWxpdGllcy4gKi8KIAlkc21fcG9zdG1hc3Rlcl9zdGFy dHVwKHNoaW0pOwogCkBAIC0yNDgsNjggKzE5Myw2IEBAIFJlZ2lzdGVyQnVpbHRpblNobWVt Q2FsbGJhY2tzKHZvaWQpCiAJCVJlZ2lzdGVyU2htZW1DYWxsYmFja3MoYnVpbHRpbl9zdWJz eXN0ZW1zW2ldKTsKIH0KIAotLyoKLSAqIEluaXRpYWxpemUgdmFyaW91cyBzdWJzeXN0ZW1z LCBzZXR0aW5nIHVwIHRoZWlyIGRhdGEgc3RydWN0dXJlcyBpbgotICogc2hhcmVkIG1lbW9y eS4KLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcG9zdG1hc3RlciBvciBieSBhIHN0 YW5kYWxvbmUgYmFja2VuZC4KLSAqIEl0IGlzIGFsc28gY2FsbGVkIGJ5IGEgYmFja2VuZCBm b3JrZWQgZnJvbSB0aGUgcG9zdG1hc3RlciBpbiB0aGUKLSAqIEVYRUNfQkFDS0VORCBjYXNl LiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50Ci0gKiBh bHJlYWR5IGV4aXN0cyBhbmQgaGFzIGJlZW4gcGh5c2ljYWxseSBhdHRhY2hlZCB0bywgYnV0 IHdlIGhhdmUgdG8KLSAqIGluaXRpYWxpemUgcG9pbnRlcnMgaW4gbG9jYWwgbWVtb3J5IHRo YXQgcmVmZXJlbmNlIHRoZSBzaGFyZWQgc3RydWN0dXJlcywKLSAqIGJlY2F1c2Ugd2UgZGlk bid0IGluaGVyaXQgdGhlIGNvcnJlY3QgcG9pbnRlciB2YWx1ZXMgZnJvbSB0aGUgcG9zdG1h c3RlcgotICogYXMgd2UgZG8gaW4gdGhlIGZvcmsoKSBzY2VuYXJpby4gIFRoZSBlYXNpZXN0 IHdheSB0byBkbyB0aGF0IGlzIHRvIHJ1bgotICogdGhyb3VnaCB0aGUgc2FtZSBjb2RlIGFz IGJlZm9yZS4gIChOb3RlIHRoYXQgdGhlIGNhbGxlZCByb3V0aW5lcyBtb3N0bHkKLSAqIGNo ZWNrIElzVW5kZXJQb3N0bWFzdGVyLCByYXRoZXIgdGhhbiBFWEVDX0JBQ0tFTkQsIHRvIGRl dGVjdCB0aGlzIGNhc2UuCi0gKiBUaGlzIGlzIGEgYml0IGNvZGUtd2FzdGVmdWwgYW5kIGNv dWxkIGJlIGNsZWFuZWQgdXAuKQotICovCi1zdGF0aWMgdm9pZAotQ3JlYXRlT3JBdHRhY2hT aG1lbVN0cnVjdHModm9pZCkKLXsKLQkvKgotCSAqIFNldCB1cCB4bG9nLCBjbG9nLCBhbmQg YnVmZmVycwotCSAqLwotCVhMT0dTaG1lbUluaXQoKTsKLQlYTG9nUHJlZmV0Y2hTaG1lbUlu aXQoKTsKLQlYTG9nUmVjb3ZlcnlTaG1lbUluaXQoKTsKLQlCdWZmZXJNYW5hZ2VyU2htZW1J bml0KCk7Ci0KLQkvKgotCSAqIFNldCB1cCBsb2NrIG1hbmFnZXIKLQkgKi8KLQlMb2NrTWFu YWdlclNobWVtSW5pdCgpOwotCi0JLyoKLQkgKiBTZXQgdXAgcHJvY2VzcyB0YWJsZQotCSAq LwotCUJhY2tlbmRTdGF0dXNTaG1lbUluaXQoKTsKLQlUd29QaGFzZVNobWVtSW5pdCgpOwot CUJhY2tncm91bmRXb3JrZXJTaG1lbUluaXQoKTsKLQotCS8qCi0JICogU2V0IHVwIGludGVy cHJvY2VzcyBzaWduYWxpbmcgbWVjaGFuaXNtcwotCSAqLwotCUNoZWNrcG9pbnRlclNobWVt SW5pdCgpOwotCUF1dG9WYWN1dW1TaG1lbUluaXQoKTsKLQlSZXBsaWNhdGlvblNsb3RzU2ht ZW1Jbml0KCk7Ci0JUmVwbGljYXRpb25PcmlnaW5TaG1lbUluaXQoKTsKLQlXYWxTbmRTaG1l bUluaXQoKTsKLQlXYWxSY3ZTaG1lbUluaXQoKTsKLQlXYWxTdW1tYXJpemVyU2htZW1Jbml0 KCk7Ci0JUGdBcmNoU2htZW1Jbml0KCk7Ci0JQXBwbHlMYXVuY2hlclNobWVtSW5pdCgpOwot CVNsb3RTeW5jU2htZW1Jbml0KCk7Ci0KLQkvKgotCSAqIFNldCB1cCBvdGhlciBtb2R1bGVz IHRoYXQgbmVlZCBzb21lIHNoYXJlZCBtZW1vcnkgc3BhY2UKLQkgKi8KLQlCVHJlZVNobWVt SW5pdCgpOwotCVN5bmNTY2FuU2htZW1Jbml0KCk7Ci0JU3RhdHNTaG1lbUluaXQoKTsKLQlX YWl0TFNOU2htZW1Jbml0KCk7Ci0JTG9naWNhbERlY29kaW5nQ3RsU2htZW1Jbml0KCk7Ci19 Ci0KIC8qCiAgKiBJbml0aWFsaXplU2htZW1HVUNzCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s b2NrLmMKaW5kZXggMjM0NjQzZTRkZDcuLjU2NjM3NGI5YzQwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sb2NrLmMKQEAgLTQzLDggKzQzLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdy LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j YXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zcGluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgpA QCAtMzEyLDYgKzMxNCwxNCBAQCB0eXBlZGVmIHN0cnVjdAogCiBzdGF0aWMgdm9sYXRpbGUg RmFzdFBhdGhTdHJvbmdSZWxhdGlvbkxvY2tEYXRhICpGYXN0UGF0aFN0cm9uZ1JlbGF0aW9u TG9ja3M7CiAKK3N0YXRpYyB2b2lkIExvY2tNYW5hZ2VyU2htZW1SZXF1ZXN0KHZvaWQgKmFy Zyk7CitzdGF0aWMgdm9pZCBMb2NrTWFuYWdlclNobWVtSW5pdCh2b2lkICphcmcpOworCitj b25zdCBTaG1lbUNhbGxiYWNrcyBMb2NrTWFuYWdlclNobWVtQ2FsbGJhY2tzID0geworCS5y ZXF1ZXN0X2ZuID0gTG9ja01hbmFnZXJTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBMb2Nr TWFuYWdlclNobWVtSW5pdCwKK307CisKIAogLyoKICAqIFBvaW50ZXJzIHRvIGhhc2ggdGFi bGVzIGNvbnRhaW5pbmcgbG9jayBzdGF0ZQpAQCAtNDA5LDYgKzQxOSw3IEBAIFBST0NMT0NL X1BSSU5UKGNvbnN0IGNoYXIgKndoZXJlLCBjb25zdCBQUk9DTE9DSyAqcHJvY2xvY2tQKQog CiAKIHN0YXRpYyB1aW50MzIgcHJvY2xvY2tfaGFzaChjb25zdCB2b2lkICprZXksIFNpemUg a2V5c2l6ZSk7CisKIHN0YXRpYyB2b2lkIFJlbW92ZUxvY2FsTG9jayhMT0NBTExPQ0sgKmxv Y2FsbG9jayk7CiBzdGF0aWMgUFJPQ0xPQ0sgKlNldHVwTG9ja0luVGFibGUoTG9ja01ldGhv ZCBsb2NrTWV0aG9kVGFibGUsIFBHUFJPQyAqcHJvYywKIAkJCQkJCQkJICBjb25zdCBMT0NL VEFHICpsb2NrdGFnLCB1aW50MzIgaGFzaGNvZGUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKQEAg LTQzMiwyMiArNDQzLDE5IEBAIHN0YXRpYyB2b2lkIEdldFNpbmdsZVByb2NCbG9ja2VyU3Rh dHVzRGF0YShQR1BST0MgKmJsb2NrZWRfcHJvYywKIAogCiAvKgotICogSW5pdGlhbGl6ZSB0 aGUgbG9jayBtYW5hZ2VyJ3Mgc2htZW0gZGF0YSBzdHJ1Y3R1cmVzLgorICogUmVnaXN0ZXIg dGhlIGxvY2sgbWFuYWdlcidzIHNobWVtIGRhdGEgc3RydWN0dXJlcy4KICAqCi0gKiBUaGlz IGlzIGNhbGxlZCBmcm9tIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKSwgd2hp Y2ggc2VlIGZvciBtb3JlCi0gKiBjb21tZW50cy4gIEluIHRoZSBub3JtYWwgcG9zdG1hc3Rl ciBjYXNlLCB0aGUgc2hhcmVkIGhhc2ggdGFibGVzIGFyZQotICogY3JlYXRlZCBoZXJlLCBh bmQgYmFja2VuZHMgaW5oZXJpdCBwb2ludGVycyB0byB0aGVtIHZpYSBmb3JrKCkuICBJbiB0 aGUKLSAqIEVYRUNfQkFDS0VORCBjYXNlLCBlYWNoIGJhY2tlbmQgcmUtZXhlY3V0ZXMgdGhp cyBjb2RlIHRvIG9idGFpbiBwb2ludGVycyB0bwotICogdGhlIGFscmVhZHkgZXhpc3Rpbmcg c2hhcmVkIGhhc2ggdGFibGVzLiAgSW4gZWl0aGVyIGNhc2UsIGVhY2ggYmFja2VuZCBtdXN0 Ci0gKiBhbHNvIGNhbGwgSW5pdExvY2tNYW5hZ2VyQWNjZXNzKCkgdG8gY3JlYXRlIHRoZSBs b2NhbGxvY2sgaGFzaCB0YWJsZS4KKyAqIEluIGFkZGl0aW9uIHRvIHRoaXMsIGVhY2ggYmFj a2VuZCBtdXN0IGFsc28gY2FsbCBJbml0TG9ja01hbmFnZXJBY2Nlc3MoKSB0bworICogY3Jl YXRlIHRoZSBsb2NhbGxvY2sgaGFzaCB0YWJsZS4KICAqLwotdm9pZAotTG9ja01hbmFnZXJT aG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitMb2NrTWFuYWdlclNobWVtUmVxdWVzdCh2 b2lkICphcmcpCiB7Ci0JSEFTSENUTAkJaW5mbzsKLQlpbnQ2NAkJaW5pdF90YWJsZV9zaXpl LAorCXN0YXRpYyBTaG1lbUhhc2hEZXNjIExvY2tIYXNoRGVzYzsKKwlzdGF0aWMgU2htZW1I YXNoRGVzYyBQcm9jTG9ja0hhc2hEZXNjOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgRmFz dFBhdGhTaG1lbURlc2M7CisJbG9uZwkJaW5pdF90YWJsZV9zaXplLAogCQkJCW1heF90YWJs ZV9zaXplOwotCWJvb2wJCWZvdW5kOwogCiAJLyoKIAkgKiBDb21wdXRlIGluaXQvbWF4IHNp emUgdG8gcmVxdWVzdCBmb3IgbG9jayBoYXNodGFibGVzLiAgTm90ZSB0aGVzZQpAQCAtNDU2 LDQ3ICs0NjQsNTEgQEAgTG9ja01hbmFnZXJTaG1lbUluaXQodm9pZCkKIAltYXhfdGFibGVf c2l6ZSA9IE5MT0NLRU5UUygpOwogCWluaXRfdGFibGVfc2l6ZSA9IG1heF90YWJsZV9zaXpl IC8gMjsKIAotCS8qCi0JICogQWxsb2NhdGUgaGFzaCB0YWJsZSBmb3IgTE9DSyBzdHJ1Y3Rz LiAgVGhpcyBzdG9yZXMgcGVyLWxvY2tlZC1vYmplY3QKLQkgKiBpbmZvcm1hdGlvbi4KLQkg Ki8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoTE9DS1RBRyk7Ci0JaW5mby5lbnRyeXNpemUg PSBzaXplb2YoTE9DSyk7Ci0JaW5mby5udW1fcGFydGl0aW9ucyA9IE5VTV9MT0NLX1BBUlRJ VElPTlM7Ci0KLQlMb2NrTWV0aG9kTG9ja0hhc2ggPSBTaG1lbUluaXRIYXNoKCJMT0NLIGhh c2giLAotCQkJCQkJCQkJICAgaW5pdF90YWJsZV9zaXplLAotCQkJCQkJCQkJICAgbWF4X3Rh YmxlX3NpemUsCi0JCQkJCQkJCQkgICAmaW5mbywKLQkJCQkJCQkJCSAgIEhBU0hfRUxFTSB8 IEhBU0hfQkxPQlMgfCBIQVNIX1BBUlRJVElPTik7CisJU2htZW1SZXF1ZXN0SGFzaCgmTG9j a0hhc2hEZXNjLCAmKFNobWVtUmVxdWVzdEhhc2hPcHRzKSB7CisJCS5uYW1lID0gIkxPQ0sg aGFzaCIsCisJCS5pbml0X3NpemUgPSBpbml0X3RhYmxlX3NpemUsCisJCS5tYXhfc2l6ZSA9 IG1heF90YWJsZV9zaXplLAorCQkucHRyID0gJkxvY2tNZXRob2RMb2NrSGFzaCwKKwkJLmhh c2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKExPQ0tUQUcpLAorCQkuaGFzaF9pbmZvLmVudHJ5 c2l6ZSA9IHNpemVvZihMT0NLKSwKKwkJLmhhc2hfaW5mby5udW1fcGFydGl0aW9ucyA9IE5V TV9MT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9C TE9CUyB8IEhBU0hfUEFSVElUSU9OLAorCX0pOwogCiAJLyogQXNzdW1lIGFuIGF2ZXJhZ2Ug b2YgMiBob2xkZXJzIHBlciBsb2NrICovCiAJbWF4X3RhYmxlX3NpemUgKj0gMjsKIAlpbml0 X3RhYmxlX3NpemUgKj0gMjsKIAotCS8qCi0JICogQWxsb2NhdGUgaGFzaCB0YWJsZSBmb3Ig UFJPQ0xPQ0sgc3RydWN0cy4gIFRoaXMgc3RvcmVzCi0JICogcGVyLWxvY2stcGVyLWhvbGRl ciBpbmZvcm1hdGlvbi4KLQkgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoUFJPQ0xPQ0tU QUcpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFBST0NMT0NLKTsKLQlpbmZvLmhhc2gg PSBwcm9jbG9ja19oYXNoOwotCWluZm8ubnVtX3BhcnRpdGlvbnMgPSBOVU1fTE9DS19QQVJU SVRJT05TOwotCi0JTG9ja01ldGhvZFByb2NMb2NrSGFzaCA9IFNobWVtSW5pdEhhc2goIlBS T0NMT0NLIGhhc2giLAotCQkJCQkJCQkJCSAgIGluaXRfdGFibGVfc2l6ZSwKLQkJCQkJCQkJ CQkgICBtYXhfdGFibGVfc2l6ZSwKLQkJCQkJCQkJCQkgICAmaW5mbywKLQkJCQkJCQkJCQkg ICBIQVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9QQVJUSVRJT04pOworCVNobWVt UmVxdWVzdEhhc2goJlByb2NMb2NrSGFzaERlc2MsICYoU2htZW1SZXF1ZXN0SGFzaE9wdHMp IHsKKwkJLm5hbWUgPSAiUFJPQ0xPQ0sgaGFzaCIsCisJCS5pbml0X3NpemUgPSBpbml0X3Rh YmxlX3NpemUsCisJCS5tYXhfc2l6ZSA9IG1heF90YWJsZV9zaXplLAorCQkucHRyID0gJkxv Y2tNZXRob2RQcm9jTG9ja0hhc2gsCisJCS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihQ Uk9DTE9DS1RBRyksCisJCS5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKFBST0NMT0NL KSwKKwkJLmhhc2hfaW5mby5oYXNoID0gcHJvY2xvY2tfaGFzaCwKKwkJLmhhc2hfaW5mby5u dW1fcGFydGl0aW9ucyA9IE5VTV9MT0NLX1BBUlRJVElPTlMsCisJCS5oYXNoX2ZsYWdzID0g SEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfUEFSVElUSU9OLAorCX0pOworCisJ U2htZW1SZXF1ZXN0U3RydWN0KCZGYXN0UGF0aFNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RT dHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIkZhc3QgUGF0aCBTdHJvbmcgUmVsYXRpb24gTG9j ayBEYXRhIiwKKwkJLnNpemUgPSBzaXplb2YoRmFzdFBhdGhTdHJvbmdSZWxhdGlvbkxvY2tE YXRhKSwKKwkJLnB0ciA9ICh2b2lkICoqKSAodm9pZCAqKSAmRmFzdFBhdGhTdHJvbmdSZWxh dGlvbkxvY2tzLAorCX0pOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBmYXN0LXBhdGggc3RydWN0 dXJlcy4KKwkgKiBGSVhNRTogd2UgdXNlZCB0byBkbyB0aGlzIGluIHRoZSBzaXplIGNhbGN1 bGF0aW9uOgorCSAqCisJICogLy8gU2luY2UgTkxPQ0tFTlRTIGlzIG9ubHkgYW4gZXN0aW1h dGUsIGFkZCAxMCUgc2FmZXR5IG1hcmdpbi4KKwkgKiBzaXplID0gYWRkX3NpemUoc2l6ZSwg c2l6ZSAvIDEwKTsKIAkgKi8KLQlGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja3MgPQotCQlT aG1lbUluaXRTdHJ1Y3QoIkZhc3QgUGF0aCBTdHJvbmcgUmVsYXRpb24gTG9jayBEYXRhIiwK LQkJCQkJCXNpemVvZihGYXN0UGF0aFN0cm9uZ1JlbGF0aW9uTG9ja0RhdGEpLCAmZm91bmQp OwotCWlmICghZm91bmQpCi0JCVNwaW5Mb2NrSW5pdCgmRmFzdFBhdGhTdHJvbmdSZWxhdGlv bkxvY2tzLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkCitMb2NrTWFuYWdlclNobWVtSW5p dCh2b2lkICphcmcpCit7CisJU3BpbkxvY2tJbml0KCZGYXN0UGF0aFN0cm9uZ1JlbGF0aW9u TG9ja3MtPm11dGV4KTsKIH0KIAogLyoKQEAgLTM3NjEsMzAgKzM3NzMsNiBAQCBQb3N0UHJl cGFyZV9Mb2NrcyhGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogfQogCiAKLS8qCi0gKiBFc3Rp bWF0ZSBzaGFyZWQtbWVtb3J5IHNwYWNlIHVzZWQgZm9yIGxvY2sgdGFibGVzCi0gKi8KLVNp emUKLUxvY2tNYW5hZ2VyU2htZW1TaXplKHZvaWQpCi17Ci0JU2l6ZQkJc2l6ZSA9IDA7Ci0J bG9uZwkJbWF4X3RhYmxlX3NpemU7Ci0KLQkvKiBsb2NrIGhhc2ggdGFibGUgKi8KLQltYXhf dGFibGVfc2l6ZSA9IE5MT0NLRU5UUygpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNo X2VzdGltYXRlX3NpemUobWF4X3RhYmxlX3NpemUsIHNpemVvZihMT0NLKSkpOwotCi0JLyog cHJvY2xvY2sgaGFzaCB0YWJsZSAqLwotCW1heF90YWJsZV9zaXplICo9IDI7Ci0Jc2l6ZSA9 IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0aW1hdGVfc2l6ZShtYXhfdGFibGVfc2l6ZSwgc2l6 ZW9mKFBST0NMT0NLKSkpOwotCi0JLyoKLQkgKiBTaW5jZSBOTE9DS0VOVFMgaXMgb25seSBh biBlc3RpbWF0ZSwgYWRkIDEwJSBzYWZldHkgbWFyZ2luLgotCSAqLwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBzaXplIC8gMTApOwotCi0JcmV0dXJuIHNpemU7Ci19CiAKIC8qCiAgKiBH ZXRMb2NrU3RhdHVzRGF0YSAtIFJldHVybiBhIHN1bW1hcnkgb2YgdGhlIGxvY2sgbWFuYWdl cidzIGludGVybmFsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9i YWNrZW5kX3N0YXR1cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9z dGF0dXMuYwppbmRleCBjZDA4NzEyOTQ2OS4uOTU4ZDRiMDRlZjcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwpAQCAtMTgsNyArMTgsOSBA QAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCQkvKiBmb3IgTXlQcm9jICovCisjaW5jbHVkZSAic3Rv cmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVk ZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvYXNjaWkuaCIKICNp bmNsdWRlICJ1dGlscy9ndWMuaCIJCQkvKiBmb3IgYXBwbGljYXRpb25fbmFtZSAqLwogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC03MywxMzMgKzc1LDExNCBAQCBzdGF0aWMg dm9pZCBwZ3N0YXRfYmVzaHV0ZG93bl9ob29rKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3Rh dGljIHZvaWQgcGdzdGF0X3JlYWRfY3VycmVudF9zdGF0dXModm9pZCk7CiBzdGF0aWMgdm9p ZCBwZ3N0YXRfc2V0dXBfYmFja2VuZF9zdGF0dXNfY29udGV4dCh2b2lkKTsKIAorc3RhdGlj IHZvaWQgQmFja2VuZFN0YXR1c1NobWVtUmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgQmFja2VuZFN0YXR1c1NobWVtSW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgQmFj a2VuZFN0YXR1c1NobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK2NvbnN0IFNobWVtQ2FsbGJh Y2tzIEJhY2tlbmRTdGF0dXNTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9IEJh Y2tlbmRTdGF0dXNTaG1lbVJlcXVlc3QsCisJLmluaXRfZm4gPSBCYWNrZW5kU3RhdHVzU2ht ZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBCYWNrZW5kU3RhdHVzU2htZW1BdHRhY2gsCit9Owog CiAvKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IEJhY2tlbmRT dGF0dXNTaG1lbUluaXQuCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IG5lZWRzIGZvciBi YWNrZW5kIHN0YXR1cyByZXBvcnRpbmcuCiAgKi8KLVNpemUKLUJhY2tlbmRTdGF0dXNTaG1l bVNpemUodm9pZCkKK3N0YXRpYyB2b2lkCitCYWNrZW5kU3RhdHVzU2htZW1SZXF1ZXN0KHZv aWQgKmFyZykKIHsKLQlTaXplCQlzaXplOwotCi0JLyogQmFja2VuZFN0YXR1c0FycmF5OiAq LwotCXNpemUgPSBtdWxfc2l6ZShzaXplb2YoUGdCYWNrZW5kU3RhdHVzKSwgTnVtQmFja2Vu ZFN0YXRTbG90cyk7Ci0JLyogQmFja2VuZEFwcG5hbWVCdWZmZXI6ICovCi0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsCi0JCQkJCW11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1CYWNrZW5kU3Rh dFNsb3RzKSk7Ci0JLyogQmFja2VuZENsaWVudEhvc3RuYW1lQnVmZmVyOiAqLwotCXNpemUg PSBhZGRfc2l6ZShzaXplLAotCQkJCQltdWxfc2l6ZShOQU1FREFUQUxFTiwgTnVtQmFja2Vu ZFN0YXRTbG90cykpOwotCS8qIEJhY2tlbmRBY3Rpdml0eUJ1ZmZlcjogKi8KLQlzaXplID0g YWRkX3NpemUoc2l6ZSwKLQkJCQkJbXVsX3NpemUocGdzdGF0X3RyYWNrX2FjdGl2aXR5X3F1 ZXJ5X3NpemUsIE51bUJhY2tlbmRTdGF0U2xvdHMpKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEJhY2tlbmRTdGF0dXNBcnJheVNobWVtRGVzYzsKKwlzdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIEJhY2tlbmRBcHBuYW1lQnVmZmVyU2htZW1EZXNjOworCXN0YXRpYyBTaG1lbVN0cnVj dERlc2MgQmFja2VuZENsaWVudEhvc3RuYW1lQnVmZmVyU2htZW1EZXNjOworCXN0YXRpYyBT aG1lbVN0cnVjdERlc2MgQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZVNobWVtRGVzYzsKICNp ZmRlZiBVU0VfU1NMCi0JLyogQmFja2VuZFNzbFN0YXR1c0J1ZmZlcjogKi8KLQlzaXplID0g YWRkX3NpemUoc2l6ZSwKLQkJCQkJbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZFNTTFN0YXR1 cyksIE51bUJhY2tlbmRTdGF0U2xvdHMpKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJh Y2tlbmRTc2xTdGF0dXNCdWZmZXJTaG1lbURlc2M7CiAjZW5kaWYKICNpZmRlZiBFTkFCTEVf R1NTCi0JLyogQmFja2VuZEdzc1N0YXR1c0J1ZmZlcjogKi8KLQlzaXplID0gYWRkX3NpemUo c2l6ZSwKLQkJCQkJbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZEdTU1N0YXR1cyksIE51bUJh Y2tlbmRTdGF0U2xvdHMpKTsKKwlzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEJhY2tlbmRHc3NT dGF0dXNCdWZmZXJTaG1lbURlc2M7CisjZW5kaWYKKworCVNobWVtUmVxdWVzdFN0cnVjdCgm QmFja2VuZFN0YXR1c0FycmF5U2htZW1EZXNjLCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMp IHsKKwkJLm5hbWUgPSAiQmFja2VuZCBTdGF0dXMgQXJyYXkiLAorCQkuc2l6ZSA9IG11bF9z aXplKHNpemVvZihQZ0JhY2tlbmRTdGF0dXMpLCBOdW1CYWNrZW5kU3RhdFNsb3RzKSwKKwkJ LnB0ciA9ICh2b2lkICoqKSAmQmFja2VuZFN0YXR1c0FycmF5LAorCX0pOworCisJU2htZW1S ZXF1ZXN0U3RydWN0KCZCYWNrZW5kQXBwbmFtZUJ1ZmZlclNobWVtRGVzYywgJihTaG1lbVJl cXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gIkJhY2tlbmQgQXBwbGljYXRpb24gTmFt ZSBCdWZmZXIiLAorCQkuc2l6ZSA9IG11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1CYWNrZW5k U3RhdFNsb3RzKSwKKwkJLnB0ciA9ICh2b2lkICoqKSAmQmFja2VuZEFwcG5hbWVCdWZmZXIs CisJfSk7CisKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkJhY2tlbmRDbGllbnRIb3N0bmFtZUJ1 ZmZlclNobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0g IkJhY2tlbmQgQ2xpZW50IEhvc3QgTmFtZSBCdWZmZXIiLAorCQkuc2l6ZSA9CW11bF9zaXpl KE5BTUVEQVRBTEVOLCBOdW1CYWNrZW5kU3RhdFNsb3RzKSwKKwkJLnB0ciA9ICh2b2lkICoq KSAmQmFja2VuZENsaWVudEhvc3RuYW1lQnVmZmVyLAorCX0pOworCisJQmFja2VuZEFjdGl2 aXR5QnVmZmVyU2l6ZSA9IG11bF9zaXplKHBnc3RhdF90cmFja19hY3Rpdml0eV9xdWVyeV9z aXplLAorCQkJCQkJCQkJCSBOdW1CYWNrZW5kU3RhdFNsb3RzKTsKKwlTaG1lbVJlcXVlc3RT dHJ1Y3QoJkJhY2tlbmRBY3Rpdml0eUJ1ZmZlclNpemVTaG1lbURlc2MsICYoU2htZW1SZXF1 ZXN0U3RydWN0T3B0cykgeworCQkubmFtZSA9ICJCYWNrZW5kIEFjdGl2aXR5IEJ1ZmZlciIs CisJCS5zaXplID0gQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSwKKwkJLnB0ciA9ICh2b2lk ICoqKSAmQmFja2VuZEFjdGl2aXR5QnVmZmVyCisJfSk7CisKKyNpZmRlZiBVU0VfU1NMCisJ U2htZW1SZXF1ZXN0U3RydWN0KCZCYWNrZW5kU3NsU3RhdHVzQnVmZmVyU2htZW1EZXNjLCAm KFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiQmFja2VuZCBTU0wgU3Rh dHVzIEJ1ZmZlciIsCisJCS5zaXplID0gbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZFNTTFN0 YXR1cyksIE51bUJhY2tlbmRTdGF0U2xvdHMpLAorCQkucHRyID0gKHZvaWQgKiopICZCYWNr ZW5kU3NsU3RhdHVzQnVmZmVyLAorCX0pOworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfR1NT CisJU2htZW1SZXF1ZXN0U3RydWN0KCZCYWNrZW5kR3NzU3RhdHVzQnVmZmVyU2htZW1EZXNj LCAmKFNobWVtUmVxdWVzdFN0cnVjdE9wdHMpIHsKKwkJLm5hbWUgPSAiQmFja2VuZCBHU1Mg U3RhdHVzIEJ1ZmZlciIsCisJCS5zaXplID0gbXVsX3NpemUoc2l6ZW9mKFBnQmFja2VuZEdT U1N0YXR1cyksIE51bUJhY2tlbmRTdGF0U2xvdHMpLAorCQkucHRyID0gKHZvaWQgKiopICZC YWNrZW5kR3NzU3RhdHVzQnVmZmVyLAorCX0pOwogI2VuZGlmCi0JcmV0dXJuIHNpemU7CiB9 CiAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgc3RhdHVzIGFycmF5IGFuZCBzZXZl cmFsIHN0cmluZyBidWZmZXJzCiAgKiBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLgogICov Ci12b2lkCi1CYWNrZW5kU3RhdHVzU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorQmFj a2VuZFN0YXR1c1NobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQlib29s CQlmb3VuZDsKIAlpbnQJCQlpOwogCWNoYXIJICAgKmJ1ZmZlcjsKIAotCS8qIENyZWF0ZSBv ciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBhcnJheSAqLwotCXNpemUgPSBtdWxfc2l6ZShzaXpl b2YoUGdCYWNrZW5kU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0JQmFja2VuZFN0 YXR1c0FycmF5ID0gKFBnQmFja2VuZFN0YXR1cyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJh Y2tlbmQgU3RhdHVzIEFycmF5Iiwgc2l6ZSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCisJ LyogSW5pdGlhbGl6ZSBzdF9hcHBuYW1lIHBvaW50ZXJzLiAqLworCWJ1ZmZlciA9IEJhY2tl bmRBcHBuYW1lQnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3Rz OyBpKyspCiAJewotCQkvKgotCQkgKiBXZSdyZSB0aGUgZmlyc3QgLSBpbml0aWFsaXplLgot CQkgKi8KLQkJTWVtU2V0KEJhY2tlbmRTdGF0dXNBcnJheSwgMCwgc2l6ZSk7CisJCUJhY2tl bmRTdGF0dXNBcnJheVtpXS5zdF9hcHBuYW1lID0gYnVmZmVyOworCQlidWZmZXIgKz0gTkFN RURBVEFMRU47CiAJfQogCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIGFw cG5hbWUgYnVmZmVyICovCi0Jc2l6ZSA9IG11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1CYWNr ZW5kU3RhdFNsb3RzKTsKLQlCYWNrZW5kQXBwbmFtZUJ1ZmZlciA9IChjaGFyICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiQmFja2VuZCBBcHBsaWNhdGlvbiBOYW1lIEJ1ZmZlciIsIHNpemUs ICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQorCS8qIEluaXRpYWxpemUgc3RfY2xpZW50aG9z dG5hbWUgcG9pbnRlcnMuICovCisJYnVmZmVyID0gQmFja2VuZENsaWVudEhvc3RuYW1lQnVm ZmVyOworCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBpKyspCiAJewot CQlNZW1TZXQoQmFja2VuZEFwcG5hbWVCdWZmZXIsIDAsIHNpemUpOwotCi0JCS8qIEluaXRp YWxpemUgc3RfYXBwbmFtZSBwb2ludGVycy4gKi8KLQkJYnVmZmVyID0gQmFja2VuZEFwcG5h bWVCdWZmZXI7Ci0JCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBpKysp Ci0JCXsKLQkJCUJhY2tlbmRTdGF0dXNBcnJheVtpXS5zdF9hcHBuYW1lID0gYnVmZmVyOwot CQkJYnVmZmVyICs9IE5BTUVEQVRBTEVOOwotCQl9CisJCUJhY2tlbmRTdGF0dXNBcnJheVtp XS5zdF9jbGllbnRob3N0bmFtZSA9IGJ1ZmZlcjsKKwkJYnVmZmVyICs9IE5BTUVEQVRBTEVO OwogCX0KIAotCS8qIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBjbGllbnQgaG9z dG5hbWUgYnVmZmVyICovCi0Jc2l6ZSA9IG11bF9zaXplKE5BTUVEQVRBTEVOLCBOdW1CYWNr ZW5kU3RhdFNsb3RzKTsKLQlCYWNrZW5kQ2xpZW50SG9zdG5hbWVCdWZmZXIgPSAoY2hhciAq KQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJhY2tlbmQgQ2xpZW50IEhvc3QgTmFtZSBCdWZmZXIi LCBzaXplLCAmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKKwkvKiBJbml0aWFsaXplIHN0X2Fj dGl2aXR5IHBvaW50ZXJzLiAqLworCWJ1ZmZlciA9IEJhY2tlbmRBY3Rpdml0eUJ1ZmZlcjsK Kwlmb3IgKGkgPSAwOyBpIDwgTnVtQmFja2VuZFN0YXRTbG90czsgaSsrKQogCXsKLQkJTWVt U2V0KEJhY2tlbmRDbGllbnRIb3N0bmFtZUJ1ZmZlciwgMCwgc2l6ZSk7Ci0KLQkJLyogSW5p dGlhbGl6ZSBzdF9jbGllbnRob3N0bmFtZSBwb2ludGVycy4gKi8KLQkJYnVmZmVyID0gQmFj a2VuZENsaWVudEhvc3RuYW1lQnVmZmVyOwotCQlmb3IgKGkgPSAwOyBpIDwgTnVtQmFja2Vu ZFN0YXRTbG90czsgaSsrKQotCQl7Ci0JCQlCYWNrZW5kU3RhdHVzQXJyYXlbaV0uc3RfY2xp ZW50aG9zdG5hbWUgPSBidWZmZXI7Ci0JCQlidWZmZXIgKz0gTkFNRURBVEFMRU47Ci0JCX0K LQl9Ci0KLQkvKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgYWN0aXZpdHkgYnVm ZmVyICovCi0JQmFja2VuZEFjdGl2aXR5QnVmZmVyU2l6ZSA9IG11bF9zaXplKHBnc3RhdF90 cmFja19hY3Rpdml0eV9xdWVyeV9zaXplLAotCQkJCQkJCQkJCSBOdW1CYWNrZW5kU3RhdFNs b3RzKTsKLQlCYWNrZW5kQWN0aXZpdHlCdWZmZXIgPSAoY2hhciAqKQotCQlTaG1lbUluaXRT dHJ1Y3QoIkJhY2tlbmQgQWN0aXZpdHkgQnVmZmVyIiwKLQkJCQkJCUJhY2tlbmRBY3Rpdml0 eUJ1ZmZlclNpemUsCi0JCQkJCQkmZm91bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCU1l bVNldChCYWNrZW5kQWN0aXZpdHlCdWZmZXIsIDAsIEJhY2tlbmRBY3Rpdml0eUJ1ZmZlclNp emUpOwotCi0JCS8qIEluaXRpYWxpemUgc3RfYWN0aXZpdHkgcG9pbnRlcnMuICovCi0JCWJ1 ZmZlciA9IEJhY2tlbmRBY3Rpdml0eUJ1ZmZlcjsKLQkJZm9yIChpID0gMDsgaSA8IE51bUJh Y2tlbmRTdGF0U2xvdHM7IGkrKykKLQkJewotCQkJQmFja2VuZFN0YXR1c0FycmF5W2ldLnN0 X2FjdGl2aXR5X3JhdyA9IGJ1ZmZlcjsKLQkJCWJ1ZmZlciArPSBwZ3N0YXRfdHJhY2tfYWN0 aXZpdHlfcXVlcnlfc2l6ZTsKLQkJfQorCQlCYWNrZW5kU3RhdHVzQXJyYXlbaV0uc3RfYWN0 aXZpdHlfcmF3ID0gYnVmZmVyOworCQlidWZmZXIgKz0gcGdzdGF0X3RyYWNrX2FjdGl2aXR5 X3F1ZXJ5X3NpemU7CiAJfQogCiAjaWZkZWYgVVNFX1NTTAotCS8qIENyZWF0ZSBvciBhdHRh Y2ggdG8gdGhlIHNoYXJlZCBTU0wgc3RhdHVzIGJ1ZmZlciAqLwotCXNpemUgPSBtdWxfc2l6 ZShzaXplb2YoUGdCYWNrZW5kU1NMU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0J QmFja2VuZFNzbFN0YXR1c0J1ZmZlciA9IChQZ0JhY2tlbmRTU0xTdGF0dXMgKikKLQkJU2ht ZW1Jbml0U3RydWN0KCJCYWNrZW5kIFNTTCBTdGF0dXMgQnVmZmVyIiwgc2l6ZSwgJmZvdW5k KTsKLQotCWlmICghZm91bmQpCiAJewogCQlQZ0JhY2tlbmRTU0xTdGF0dXMgKnB0cjsKIAot CQlNZW1TZXQoQmFja2VuZFNzbFN0YXR1c0J1ZmZlciwgMCwgc2l6ZSk7Ci0KIAkJLyogSW5p dGlhbGl6ZSBzdF9zc2xzdGF0dXMgcG9pbnRlcnMuICovCiAJCXB0ciA9IEJhY2tlbmRTc2xT dGF0dXNCdWZmZXI7CiAJCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBp KyspCkBAIC0yMTEsMTcgKzE5NCw5IEBAIEJhY2tlbmRTdGF0dXNTaG1lbUluaXQodm9pZCkK ICNlbmRpZgogCiAjaWZkZWYgRU5BQkxFX0dTUwotCS8qIENyZWF0ZSBvciBhdHRhY2ggdG8g dGhlIHNoYXJlZCBHU1NBUEkgc3RhdHVzIGJ1ZmZlciAqLwotCXNpemUgPSBtdWxfc2l6ZShz aXplb2YoUGdCYWNrZW5kR1NTU3RhdHVzKSwgTnVtQmFja2VuZFN0YXRTbG90cyk7Ci0JQmFj a2VuZEdzc1N0YXR1c0J1ZmZlciA9IChQZ0JhY2tlbmRHU1NTdGF0dXMgKikKLQkJU2htZW1J bml0U3RydWN0KCJCYWNrZW5kIEdTUyBTdGF0dXMgQnVmZmVyIiwgc2l6ZSwgJmZvdW5kKTsK LQotCWlmICghZm91bmQpCiAJewogCQlQZ0JhY2tlbmRHU1NTdGF0dXMgKnB0cjsKIAotCQlN ZW1TZXQoQmFja2VuZEdzc1N0YXR1c0J1ZmZlciwgMCwgc2l6ZSk7Ci0KIAkJLyogSW5pdGlh bGl6ZSBzdF9nc3NzdGF0dXMgcG9pbnRlcnMuICovCiAJCXB0ciA9IEJhY2tlbmRHc3NTdGF0 dXNCdWZmZXI7CiAJCWZvciAoaSA9IDA7IGkgPCBOdW1CYWNrZW5kU3RhdFNsb3RzOyBpKysp CkBAIC0yMzMsNiArMjA4LDEzIEBAIEJhY2tlbmRTdGF0dXNTaG1lbUluaXQodm9pZCkKICNl bmRpZgogfQogCitzdGF0aWMgdm9pZAorQmFja2VuZFN0YXR1c1NobWVtQXR0YWNoKHZvaWQg KmFyZykKK3sKKwlCYWNrZW5kQWN0aXZpdHlCdWZmZXJTaXplID0gbXVsX3NpemUocGdzdGF0 X3RyYWNrX2FjdGl2aXR5X3F1ZXJ5X3NpemUsCisJCQkJCQkJCQkJIE51bUJhY2tlbmRTdGF0 U2xvdHMpOworfQorCiAvKgogICogSW5pdGlhbGl6ZSBwZ3N0YXRzIGJhY2tlbmQgYWN0aXZp dHkgc3RhdGUsIGFuZCBzZXQgdXAgb3VyIG9uLXByb2MtZXhpdAogICogaG9vay4gIENhbGxl ZCBmcm9tIEluaXRQb3N0Z3JlcyBhbmQgQXV4aWxpYXJ5UHJvY2Vzc01haW4uICBNeVByb2NO dW1iZXIgbXVzdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdz dGF0X3NobWVtLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0u YwppbmRleCAzM2ZiZGNhOTYwOS4uYWM5NmJhZjY1YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNp bmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIApAQCAtNTcsNiArNTgsMTMgQEAg c3RhdGljIHZvaWQgcGdzdGF0X3JlbGVhc2VfbWF0Y2hpbmdfZW50cnlfcmVmcyhib29sIGRp c2NhcmRfcGVuZGluZywgUmVsZWFzZU1hdGMKIAogc3RhdGljIHZvaWQgcGdzdGF0X3NldHVw X21lbWN4dCh2b2lkKTsKIAorc3RhdGljIHZvaWQgU3RhdHNTaG1lbVJlcXVlc3Qodm9pZCAq YXJnKTsKK3N0YXRpYyB2b2lkIFN0YXRzU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK2NvbnN0 IFNobWVtQ2FsbGJhY2tzIFN0YXRzU2htZW1DYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4g PSBTdGF0c1NobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IFN0YXRzU2htZW1Jbml0LAorfTsK IAogLyogcGFyYW1ldGVyIGZvciB0aGUgc2hhcmVkIGhhc2ggKi8KIHN0YXRpYyBjb25zdCBk c2hhc2hfcGFyYW1ldGVycyBkc2hfcGFyYW1zID0gewpAQCAtMTIzLDcgKzEzMSw3IEBAIHBn c3RhdF9kc2FfaW5pdF9zaXplKHZvaWQpCiAvKgogICogQ29tcHV0ZSBzaGFyZWQgbWVtb3J5 IHNwYWNlIG5lZWRlZCBmb3IgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzCiAgKi8KLVNpemUKK3N0 YXRpYyBTaXplCiBTdGF0c1NobWVtU2l6ZSh2b2lkKQogewogCVNpemUJCXN6OwpAQCAtMTUw LDEwMSArMTU4LDEwMCBAQCBTdGF0c1NobWVtU2l6ZSh2b2lkKQogfQogCiAvKgotICogSW5p dGlhbGl6ZSBjdW11bGF0aXZlIHN0YXRpc3RpY3Mgc3lzdGVtIGR1cmluZyBzdGFydHVwCisg KiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IGFyZWEgZm9yIGN1bXVsYXRpdmUgc3RhdGlzdGlj cwogICovCi12b2lkCi1TdGF0c1NobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1N0YXRz U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQlTaXplCQlzejsK LQotCXN6ID0gU3RhdHNTaG1lbVNpemUoKTsKLQlwZ1N0YXRMb2NhbC5zaG1lbSA9IChQZ1N0 YXRfU2htZW1Db250cm9sICopCi0JCVNobWVtSW5pdFN0cnVjdCgiU2hhcmVkIE1lbW9yeSBT dGF0cyIsIHN6LCAmZm91bmQpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgU3RhdHNTaG1l bURlc2M7CiAKLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQotCXsKLQkJZHNhX2FyZWEgICAq ZHNhOwotCQlkc2hhc2hfdGFibGUgKmRzaDsKLQkJUGdTdGF0X1NobWVtQ29udHJvbCAqY3Rs ID0gcGdTdGF0TG9jYWwuc2htZW07Ci0JCWNoYXIJICAgKnAgPSAoY2hhciAqKSBjdGw7CisJ U2htZW1SZXF1ZXN0U3RydWN0KCZTdGF0c1NobWVtRGVzYywgJihTaG1lbVJlcXVlc3RTdHJ1 Y3RPcHRzKSB7CisJCS5uYW1lID0gIlNoYXJlZCBNZW1vcnkgU3RhdHMiLAorCQkuc2l6ZSA9 IFN0YXRzU2htZW1TaXplKCksCisJCS5wdHIgPSAodm9pZCAqKikgJnBnU3RhdExvY2FsLnNo bWVtLAorCX0pOworfQogCi0JCUFzc2VydCghZm91bmQpOworLyoKKyAqIEluaXRpYWxpemUg Y3VtdWxhdGl2ZSBzdGF0aXN0aWNzIHN5c3RlbSBkdXJpbmcgc3RhcnR1cAorICovCitzdGF0 aWMgdm9pZAorU3RhdHNTaG1lbUluaXQodm9pZCAqYXJnKQoreworCWRzYV9hcmVhICAgKmRz YTsKKwlkc2hhc2hfdGFibGUgKmRzaDsKKwlQZ1N0YXRfU2htZW1Db250cm9sICpjdGwgPSBw Z1N0YXRMb2NhbC5zaG1lbTsKKwljaGFyCSAgICpwID0gKGNoYXIgKikgY3RsOwogCi0JCS8q IHRoZSBhbGxvY2F0aW9uIG9mIHBnU3RhdExvY2FsLnNobWVtIGl0c2VsZiAqLwotCQlwICs9 IE1BWEFMSUdOKHNpemVvZihQZ1N0YXRfU2htZW1Db250cm9sKSk7CisJLyogdGhlIGFsbG9j YXRpb24gb2YgcGdTdGF0TG9jYWwuc2htZW0gaXRzZWxmICovCisJcCArPSBNQVhBTElHTihz aXplb2YoUGdTdGF0X1NobWVtQ29udHJvbCkpOwogCi0JCS8qCi0JCSAqIENyZWF0ZSBhIHNt YWxsIGRzYSBhbGxvY2F0aW9uIGluIHBsYWluIHNoYXJlZCBtZW1vcnkuIFRoaXMgaXMKLQkJ ICogcmVxdWlyZWQgYmVjYXVzZSBwb3N0bWFzdGVyIGNhbm5vdCB1c2UgZHNtIHNlZ21lbnRz LiBJdCBhbHNvCi0JCSAqIHByb3ZpZGVzIGEgc21hbGwgZWZmaWNpZW5jeSB3aW4uCi0JCSAq LwotCQljdGwtPnJhd19kc2FfYXJlYSA9IHA7Ci0JCWRzYSA9IGRzYV9jcmVhdGVfaW5fcGxh Y2UoY3RsLT5yYXdfZHNhX2FyZWEsCi0JCQkJCQkJCSAgcGdzdGF0X2RzYV9pbml0X3NpemUo KSwKLQkJCQkJCQkJICBMV1RSQU5DSEVfUEdTVEFUU19EU0EsIE5VTEwpOwotCQlkc2FfcGlu KGRzYSk7CisJLyoKKwkgKiBDcmVhdGUgYSBzbWFsbCBkc2EgYWxsb2NhdGlvbiBpbiBwbGFp biBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzCisJICogcmVxdWlyZWQgYmVjYXVzZSBwb3N0bWFz dGVyIGNhbm5vdCB1c2UgZHNtIHNlZ21lbnRzLiBJdCBhbHNvCisJICogcHJvdmlkZXMgYSBz bWFsbCBlZmZpY2llbmN5IHdpbi4KKwkgKi8KKwljdGwtPnJhd19kc2FfYXJlYSA9IHA7CisJ ZHNhID0gZHNhX2NyZWF0ZV9pbl9wbGFjZShjdGwtPnJhd19kc2FfYXJlYSwKKwkJCQkJCQkg IHBnc3RhdF9kc2FfaW5pdF9zaXplKCksCisJCQkJCQkJICBMV1RSQU5DSEVfUEdTVEFUU19E U0EsIE5VTEwpOworCWRzYV9waW4oZHNhKTsKIAotCQkvKgotCQkgKiBUbyBlbnN1cmUgZHNo YXNoIGlzIGNyZWF0ZWQgaW4gInBsYWluIiBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcmlseQot CQkgKiBsaW1pdCBzaXplIG9mIGRzYSB0byB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBkc2Eu Ci0JCSAqLwotCQlkc2Ffc2V0X3NpemVfbGltaXQoZHNhLCBwZ3N0YXRfZHNhX2luaXRfc2l6 ZSgpKTsKKwkvKgorCSAqIFRvIGVuc3VyZSBkc2hhc2ggaXMgY3JlYXRlZCBpbiAicGxhaW4i IHNoYXJlZCBtZW1vcnksIHRlbXBvcmFyaWx5CisJICogbGltaXQgc2l6ZSBvZiBkc2EgdG8g dGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgZHNhLgorCSAqLworCWRzYV9zZXRfc2l6ZV9saW1p dChkc2EsIHBnc3RhdF9kc2FfaW5pdF9zaXplKCkpOwogCi0JCS8qCi0JCSAqIFdpdGggdGhl IGxpbWl0IGluIHBsYWNlLCBjcmVhdGUgdGhlIGRzaGFzaCB0YWJsZS4gWFhYOiBJdCdkIGJl IG5pY2UKLQkJICogaWYgdGhlcmUgd2VyZSBkc2hhc2hfY3JlYXRlX2luX3BsYWNlKCkuCi0J CSAqLwotCQlkc2ggPSBkc2hhc2hfY3JlYXRlKGRzYSwgJmRzaF9wYXJhbXMsIE5VTEwpOwot CQljdGwtPmhhc2hfaGFuZGxlID0gZHNoYXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShkc2gp OworCS8qCisJICogV2l0aCB0aGUgbGltaXQgaW4gcGxhY2UsIGNyZWF0ZSB0aGUgZHNoYXNo IHRhYmxlLiBYWFg6IEl0J2QgYmUgbmljZQorCSAqIGlmIHRoZXJlIHdlcmUgZHNoYXNoX2Ny ZWF0ZV9pbl9wbGFjZSgpLgorCSAqLworCWRzaCA9IGRzaGFzaF9jcmVhdGUoZHNhLCAmZHNo X3BhcmFtcywgTlVMTCk7CisJY3RsLT5oYXNoX2hhbmRsZSA9IGRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUoZHNoKTsKIAotCQkvKiBsaWZ0IGxpbWl0IHNldCBhYm92ZSAqLwotCQlk c2Ffc2V0X3NpemVfbGltaXQoZHNhLCAtMSk7CisJLyogbGlmdCBsaW1pdCBzZXQgYWJvdmUg Ki8KKwlkc2Ffc2V0X3NpemVfbGltaXQoZHNhLCAtMSk7CiAKLQkJLyoKLQkJICogUG9zdG1h c3RlciB3aWxsIG5ldmVyIGFjY2VzcyB0aGVzZSBhZ2FpbiwgdGh1cyBmcmVlIHRoZSBsb2Nh bAotCQkgKiBkc2EvZHNoYXNoIHJlZmVyZW5jZXMuCi0JCSAqLwotCQlkc2hhc2hfZGV0YWNo KGRzaCk7Ci0JCWRzYV9kZXRhY2goZHNhKTsKKwkvKgorCSAqIFBvc3RtYXN0ZXIgd2lsbCBu ZXZlciBhY2Nlc3MgdGhlc2UgYWdhaW4sIHRodXMgZnJlZSB0aGUgbG9jYWwKKwkgKiBkc2Ev ZHNoYXNoIHJlZmVyZW5jZXMuCisJICovCisJZHNoYXNoX2RldGFjaChkc2gpOworCWRzYV9k ZXRhY2goZHNhKTsKIAotCQlwZ19hdG9taWNfaW5pdF91NjQoJmN0bC0+Z2NfcmVxdWVzdF9j b3VudCwgMSk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZjdGwtPmdjX3JlcXVlc3RfY291bnQs IDEpOwogCi0JCS8qIERvIHRoZSBwZXIta2luZCBpbml0aWFsaXphdGlvbiAqLwotCQlmb3Ig KFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NUQVRfS0lORF9NSU47IGtpbmQgPD0gUEdTVEFUX0tJ TkRfTUFYOyBraW5kKyspCi0JCXsKLQkJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9p bmZvID0gcGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7Ci0JCQljaGFyCSAgICpwdHI7CisJ LyogRG8gdGhlIHBlci1raW5kIGluaXRpYWxpemF0aW9uICovCisJZm9yIChQZ1N0YXRfS2lu ZCBraW5kID0gUEdTVEFUX0tJTkRfTUlOOyBraW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2lu ZCsrKQorCXsKKwkJY29uc3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2luZm8gPSBwZ3N0YXRf Z2V0X2tpbmRfaW5mbyhraW5kKTsKKwkJY2hhcgkgICAqcHRyOwogCi0JCQlpZiAoIWtpbmRf aW5mbykKLQkJCQljb250aW51ZTsKKwkJaWYgKCFraW5kX2luZm8pCisJCQljb250aW51ZTsK IAotCQkJLyogaW5pdGlhbGl6ZSBlbnRyeSBjb3VudCB0cmFja2luZyAqLwotCQkJaWYgKGtp bmRfaW5mby0+dHJhY2tfZW50cnlfY291bnQpCi0JCQkJcGdfYXRvbWljX2luaXRfdTY0KCZj dGwtPmVudHJ5X2NvdW50c1traW5kIC0gMV0sIDApOworCQkvKiBpbml0aWFsaXplIGVudHJ5 IGNvdW50IHRyYWNraW5nICovCisJCWlmIChraW5kX2luZm8tPnRyYWNrX2VudHJ5X2NvdW50 KQorCQkJcGdfYXRvbWljX2luaXRfdTY0KCZjdGwtPmVudHJ5X2NvdW50c1traW5kIC0gMV0s IDApOwogCi0JCQkvKiBpbml0aWFsaXplIGZpeGVkLW51bWJlcmVkIHN0YXRzICovCi0JCQlp ZiAoa2luZF9pbmZvLT5maXhlZF9hbW91bnQpCisJCS8qIGluaXRpYWxpemUgZml4ZWQtbnVt YmVyZWQgc3RhdHMgKi8KKwkJaWYgKGtpbmRfaW5mby0+Zml4ZWRfYW1vdW50KQorCQl7CisJ CQlpZiAocGdzdGF0X2lzX2tpbmRfYnVpbHRpbihraW5kKSkKKwkJCQlwdHIgPSAoKGNoYXIg KikgY3RsKSArIGtpbmRfaW5mby0+c2hhcmVkX2N0bF9vZmY7CisJCQllbHNlCiAJCQl7Ci0J CQkJaWYgKHBnc3RhdF9pc19raW5kX2J1aWx0aW4oa2luZCkpCi0JCQkJCXB0ciA9ICgoY2hh ciAqKSBjdGwpICsga2luZF9pbmZvLT5zaGFyZWRfY3RsX29mZjsKLQkJCQllbHNlCi0JCQkJ ewotCQkJCQlpbnQJCQlpZHggPSBraW5kIC0gUEdTVEFUX0tJTkRfQ1VTVE9NX01JTjsKLQot CQkJCQlBc3NlcnQoa2luZF9pbmZvLT5zaGFyZWRfc2l6ZSAhPSAwKTsKLQkJCQkJY3RsLT5j dXN0b21fZGF0YVtpZHhdID0gU2htZW1BbGxvYyhraW5kX2luZm8tPnNoYXJlZF9zaXplKTsK LQkJCQkJcHRyID0gY3RsLT5jdXN0b21fZGF0YVtpZHhdOwotCQkJCX0KLQotCQkJCWtpbmRf aW5mby0+aW5pdF9zaG1lbV9jYihwdHIpOworCQkJCWludAkJCWlkeCA9IGtpbmQgLSBQR1NU QVRfS0lORF9DVVNUT01fTUlOOworCisJCQkJQXNzZXJ0KGtpbmRfaW5mby0+c2hhcmVkX3Np emUgIT0gMCk7CisJCQkJY3RsLT5jdXN0b21fZGF0YVtpZHhdID0gU2htZW1BbGxvYyhraW5k X2luZm8tPnNoYXJlZF9zaXplKTsKKwkJCQlwdHIgPSBjdGwtPmN1c3RvbV9kYXRhW2lkeF07 CiAJCQl9CisKKwkJCWtpbmRfaW5mby0+aW5pdF9zaG1lbV9jYihwdHIpOwogCQl9CiAJfQot CWVsc2UKLQl7Ci0JCUFzc2VydChmb3VuZCk7Ci0JfQogfQogCiB2b2lkCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmgKaW5kZXggZGE3NTAzYzU3YjYuLjMwOTdlOWJiMWFmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oCkBAIC0xMzAwLDggKzEzMDAsNiBAQCBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1f Y3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFj dXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlv biByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW1fY2FsbGJhY2soaW50IGNvZGUs IERhdHVtIGFyZyk7Ci1leHRlcm4gU2l6ZSBCVHJlZVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVy biB2b2lkIEJUcmVlU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIGJ5dGVhICpidG9wdGlvbnMo RGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSk7CiBleHRlcm4gYm9vbCBidHByb3Bl cnR5KE9pZCBpbmRleF9vaWQsIGludCBhdHRubywKIAkJCQkJICAgSW5kZXhBTVByb3BlcnR5 IHByb3AsIGNvbnN0IGNoYXIgKnByb3BuYW1lLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3N5bmNzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3luY3NjYW4uaAppbmRl eCAyNGNmMzMyOTRlNS4uMzJmODMzMmFhZWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zeW5jc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zeW5jc2Nhbi5oCkBA IC0yNCw3ICsyNCw1IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHRyYWNlX3N5bmNzY2Fu OwogCiBleHRlcm4gdm9pZCBzc19yZXBvcnRfbG9jYXRpb24oUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBsb2NhdGlvbik7CiBleHRlcm4gQmxvY2tOdW1iZXIgc3NfZ2V0X2xvY2F0aW9u KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgcmVsbmJsb2Nrcyk7Ci1leHRlcm4gdm9pZCBT eW5jU2NhblNobWVtSW5pdCh2b2lkKTsKLWV4dGVybiBTaXplIFN5bmNTY2FuU2htZW1TaXpl KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29w aGFzZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKaW5kZXggNzYxZDU2YTVm M2QuLjFkMmZmNDJjOWI3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhh c2UuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaApAQCAtMzMsOSArMzMs NiBAQCB0eXBlZGVmIHN0cnVjdCBHbG9iYWxUcmFuc2FjdGlvbkRhdGEgKkdsb2JhbFRyYW5z YWN0aW9uOwogLyogR1VDIHZhcmlhYmxlICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1h eF9wcmVwYXJlZF94YWN0czsKIAotZXh0ZXJuIFNpemUgVHdvUGhhc2VTaG1lbVNpemUodm9p ZCk7Ci1leHRlcm4gdm9pZCBUd29QaGFzZVNobWVtSW5pdCh2b2lkKTsKLQogZXh0ZXJuIHZv aWQgQXRBYm9ydF9Ud29waGFzZSh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RQcmVwYXJlX1R3 b3BoYXNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBkY2MxMmViOGNiZS4uMWEwOThh OTE0NDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMjQ2LDggKzI0Niw2IEBAIGV4dGVybiBjaGFy ICpHZXRNb2NrQXV0aGVudGljYXRpb25Ob25jZSh2b2lkKTsKIGV4dGVybiBib29sIERhdGFD aGVja3N1bXNFbmFibGVkKHZvaWQpOwogZXh0ZXJuIGJvb2wgR2V0RGVmYXVsdENoYXJTaWdu ZWRuZXNzKHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0RmFrZUxTTkZvclVubG9nZ2Vk UmVsKHZvaWQpOwotZXh0ZXJuIFNpemUgWExPR1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2 b2lkIFhMT0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBYTE9HKHVp bnQzMiBkYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVdh bENvbnNpc3RlbmN5Q2hlY2tpbmcodm9pZCk7CiBleHRlcm4gdm9pZCBMb2NhbFByb2Nlc3ND b250cm9sRmlsZShib29sIHJlc2V0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9ncHJlZmV0Y2hlci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dwcmVmZXRjaGVy LmgKaW5kZXggN2VjNDBjNGI3OGIuLjU2YTgxNjc2ZDkyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3ByZWZldGNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZ3ByZWZldGNoZXIuaApAQCAtMzQsOSArMzQsNiBAQCB0eXBlZGVmIHN0cnVjdCBYTG9n UHJlZmV0Y2hlciBYTG9nUHJlZmV0Y2hlcjsKIAogZXh0ZXJuIHZvaWQgWExvZ1ByZWZldGNo UmVjb25maWd1cmUodm9pZCk7CiAKLWV4dGVybiBzaXplX3QgWExvZ1ByZWZldGNoU2htZW1T aXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgWExvZ1ByZWZldGNoU2htZW1Jbml0KHZvaWQpOwot CiBleHRlcm4gdm9pZCBYTG9nUHJlZmV0Y2hSZXNldFN0YXRzKHZvaWQpOwogCiBleHRlcm4g WExvZ1ByZWZldGNoZXIgKlhMb2dQcmVmZXRjaGVyQWxsb2NhdGUoWExvZ1JlYWRlclN0YXRl ICpyZWFkZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVy eS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCmluZGV4IDI4NDIxMDZi Mjg1Li5iYTc3NTBkY2EwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dy ZWNvdmVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaApAQCAt MTUzLDkgKzE1Myw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHJlYWNoZWRDb25zaXN0 ZW5jeTsKIC8qIEFyZSB3ZSBjdXJyZW50bHkgaW4gc3RhbmRieSBtb2RlPyAqLwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgU3RhbmRieU1vZGU7CiAKLWV4dGVybiBTaXplIFhMb2dSZWNv dmVyeVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFhMb2dSZWNvdmVyeVNobWVtSW5p dCh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0 YSAqQ29udHJvbEZpbGUsCiAJCQkJCQkJYm9vbCAqd2FzU2h1dGRvd25fcHRyLCBib29sICpo YXZlQmFja3VwTGFiZWxfcHRyLAogCQkJCQkJCWJvb2wgKmhhdmVUYmxzcGNNYXBfcHRyKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nd2FpdC5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2d3YWl0LmgKaW5kZXggZDEyNTMxZDMyYjguLjA3MTU3ZjIyMGVhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3dhaXQuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3dhaXQuaApAQCAtMTAwLDggKzEwMCw2IEBAIHR5cGVkZWYgc3Ry dWN0IFdhaXRMU05TdGF0ZQogCiBleHRlcm4gUEdETExJTVBPUlQgV2FpdExTTlN0YXRlICp3 YWl0TFNOU3RhdGU7CiAKLWV4dGVybiBTaXplIFdhaXRMU05TaG1lbVNpemUodm9pZCk7Ci1l eHRlcm4gdm9pZCBXYWl0TFNOU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIg R2V0Q3VycmVudExTTkZvcldhaXRUeXBlKFdhaXRMU05UeXBlIGxzblR5cGUpOwogZXh0ZXJu IHZvaWQgV2FpdExTTldha2V1cChXYWl0TFNOVHlwZSBsc25UeXBlLCBYTG9nUmVjUHRyIGN1 cnJlbnRMU04pOwogZXh0ZXJuIHZvaWQgV2FpdExTTkNsZWFudXAodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4 IDhlMzU0OWMzNzUyLi4yNzg2YTdjNWZmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdz dGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAgLTU0MSwxMCArNTQxLDYgQEAg dHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0JhY2tlbmRQZW5kaW5nCiAgKiBGdW5jdGlvbnMgaW4g cGdzdGF0LmMKICAqLwogCi0vKiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gcG9zdG1hc3RlciAq LwotZXh0ZXJuIFNpemUgU3RhdHNTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBTdGF0 c1NobWVtSW5pdCh2b2lkKTsKLQogLyogRnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc2VydmVy IHN0YXJ0dXAgLyBzaHV0ZG93biAqLwogZXh0ZXJuIHZvaWQgcGdzdGF0X3Jlc3RvcmVfc3Rh dHModm9pZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZGlzY2FyZF9zdGF0cyh2b2lkKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIGIvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXggNWFhMGYzYThhYzEuLjZlYmZh ZmU2NDBkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0u aAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaApAQCAtNjIsOCAr NjIsNCBAQCBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydAogZXh0ZXJuIGJvb2wgQXV0b1Zh Y3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1dW1Xb3JrSXRlbVR5cGUgdHlwZSwKIAkJCQkJCQkJ ICBPaWQgcmVsYXRpb25JZCwgQmxvY2tOdW1iZXIgYmxrbm8pOwogCi0vKiBzaGFyZWQgbWVt b3J5IHN0dWZmICovCi1leHRlcm4gU2l6ZSBBdXRvVmFjdXVtU2htZW1TaXplKHZvaWQpOwot ZXh0ZXJuIHZvaWQgQXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lkKTsKLQogI2VuZGlmCQkJCQkJ CS8qIEFVVE9WQUNVVU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3Jr ZXJfaW50ZXJuYWxzLmgKaW5kZXggYjc4OWNhZjQwMzQuLmI2MjYxYmMwMWRmIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCisrKyBi L3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAgLTQxLDgg KzQxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVnaXN0ZXJlZEJnV29ya2VyCiAKIGV4dGVybiBQ R0RMTElNUE9SVCBkbGlzdF9oZWFkIEJhY2tncm91bmRXb3JrZXJMaXN0OwogCi1leHRlcm4g U2l6ZSBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQmFj a2dyb3VuZFdvcmtlclNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIEJhY2tncm91bmRX b3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93X25ld193b3JrZXJzKTsKIGV4dGVybiB2b2lk IEZvcmdldEJhY2tncm91bmRXb3JrZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydyk7CiBleHRl cm4gdm9pZCBSZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKFJlZ2lzdGVyZWRCZ1dvcmtlciAq cncpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oIGIv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCmluZGV4IDQ3NDcwY2JhODkzLi4z NmVlYTBiMWFiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRl ci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaApAQCAtMzksOSAr MzksNiBAQCBleHRlcm4gYm9vbCBGb3J3YXJkU3luY1JlcXVlc3QoY29uc3QgRmlsZVRhZyAq ZnRhZywgU3luY1JlcXVlc3RUeXBlIHR5cGUpOwogCiBleHRlcm4gdm9pZCBBYnNvcmJTeW5j UmVxdWVzdHModm9pZCk7CiAKLWV4dGVybiBTaXplIENoZWNrcG9pbnRlclNobWVtU2l6ZSh2 b2lkKTsKLWV4dGVybiB2b2lkIENoZWNrcG9pbnRlclNobWVtSW5pdCh2b2lkKTsKLQogZXh0 ZXJuIGJvb2wgRmlyc3RDYWxsU2luY2VMYXN0Q2hlY2twb2ludCh2b2lkKTsKIAogI2VuZGlm CQkJCQkJCS8qIF9CR1dSSVRFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL3BnYXJjaC5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2guaAppbmRl eCBmYWE3NjA5Y2Q4MS4uOTc3MmJiNTczYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvcGdhcmNoLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2gu aApAQCAtMjYsOCArMjYsNiBAQAogI2RlZmluZSBNQVhfWEZOX0NIQVJTCTQwCiAjZGVmaW5l IFZBTElEX1hGTl9DSEFSUyAiMDEyMzQ1Njc4OUFCQ0RFRi5oaXN0b3J5LmJhY2t1cC5wYXJ0 aWFsIgogCi1leHRlcm4gU2l6ZSBQZ0FyY2hTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBQZ0FyY2hTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gYm9vbCBQZ0FyY2hDYW5SZXN0YXJ0 KHZvaWQpOwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgUGdBcmNoaXZlck1haW4oY29uc3Qg dm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiBleHRlcm4g dm9pZCBQZ0FyY2hXYWtldXAodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5oCmluZGV4IGE0YzA1NTA2NmI0Li5iOWE3NTVmYWRiYyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKQEAgLTE5LDggKzE5LDYgQEAKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIHN1bW1hcml6ZV93YWw7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IHdhbF9zdW1tYXJ5X2tlZXBfdGltZTsKIAotZXh0ZXJuIFNpemUgV2FsU3VtbWFyaXpl clNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFdhbFN1bW1hcml6ZXJTaG1lbUluaXQo dm9pZCk7CiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBXYWxTdW1tYXJpemVyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKIAogZXh0 ZXJuIHZvaWQgR2V0V2FsU3VtbWFyaXplclN0YXRlKFRpbWVMaW5lSUQgKnN1bW1hcml6ZWRf dGxpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGN0bC5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGN0bC5oCmluZGV4IDQ5NTU1NGM1 MzJjLi4wYmMxMzAyZjEzMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbGN0bC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxjdGwu aApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBMT0dJQ0FMQ1RMX0gKICNkZWZpbmUgTE9H SUNBTENUTF9ICiAKLWV4dGVybiBTaXplIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtU2l6ZSh2 b2lkKTsKLWV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtSW5pdCh2b2lkKTsK IGV4dGVybiB2b2lkIFN0YXJ0dXBMb2dpY2FsRGVjb2RpbmdTdGF0dXMoYm9vbCBsYXN0X3N0 YXR1cyk7CiBleHRlcm4gdm9pZCBJbml0aWFsaXplUHJvY2Vzc1hMb2dMb2dpY2FsSW5mbyh2 b2lkKTsKIGV4dGVybiBib29sIFByb2Nlc3NCYXJyaWVyVXBkYXRlWExvZ0xvZ2ljYWxJbmZv KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaApp bmRleCA1MDRiNzEwNTM2YS4uNWYwYzFiOWM2ODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCkBAIC0xOSw5ICsxOSw2IEBAIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlv bjsKIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJSZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2 b2lkIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKTsKIAotZXh0ZXJuIFNpemUg QXBwbHlMYXVuY2hlclNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIEFwcGx5TGF1bmNo ZXJTaG1lbUluaXQodm9pZCk7Ci0KIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJGb3JnZXRX b3JrZXJTdGFydFRpbWUoT2lkIHN1YmlkKTsKIAogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hl cldha2V1cEF0Q29tbWl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRl eCBlYjQ2YjQxYjRiNy4uYTY5ZmFmNmVhYWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL29yaWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdp bi5oCkBAIC04NCw4ICs4NCw0IEBAIGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fcmVkbyhYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX2Rlc2MoU3Ry aW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKIGV4dGVybiBjb25zdCBj aGFyICpyZXBsb3JpZ2luX2lkZW50aWZ5KHVpbnQ4IGluZm8pOwogCi0vKiBzaGFyZWQgbWVt b3J5IGFsbG9jYXRpb24gKi8KLWV4dGVybiBTaXplIFJlcGxpY2F0aW9uT3JpZ2luU2htZW1T aXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25PcmlnaW5TaG1lbUluaXQodm9p ZCk7Ci0KICNlbmRpZgkJCQkJCQkvKiBQR19PUklHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v c2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJjLi4xYTM1NTdkZTYwNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Nsb3QuaApAQCAtMzI3LDEwICszMjcsNiBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1heF9yZXBsaWNhdGlvbl9zbG90czsKIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpzeW5j aHJvbml6ZWRfc3RhbmRieV9zbG90czsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgaWRsZV9y ZXBsaWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjczsKIAotLyogc2htZW0gaW5pdGlhbGl6YXRp b24gZnVuY3Rpb25zICovCi1leHRlcm4gU2l6ZSBSZXBsaWNhdGlvblNsb3RzU2htZW1TaXpl KHZvaWQpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90c1NobWVtSW5pdCh2b2lkKTsK LQogLyogbWFuYWdlbWVudCBvZiBpbmRpdmlkdWFsIHNsb3RzICovCiBleHRlcm4gdm9pZCBS ZXBsaWNhdGlvblNsb3RDcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBkYl9zcGVjaWZp YywKIAkJCQkJCQkJICBSZXBsaWNhdGlvblNsb3RQZXJzaXN0ZW5jeSBwZXJzaXN0ZW5jeSwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3RzeW5jLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90c3luYy5oCmluZGV4IGU1NDZkMGQwNTBkLi5kMjEy MWNkM2VkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdHN5bmMu aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90c3luYy5oCkBAIC0zMSw4ICsz MSw2IEBAIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIFJlcGxTbG90U3luY1dvcmtlck1haW4o Y29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3QKIGV4dGVybiB2b2lkIFNodXREb3du U2xvdFN5bmModm9pZCk7CiBleHRlcm4gYm9vbCBTbG90U3luY1dvcmtlckNhblJlc3RhcnQo dm9pZCk7CiBleHRlcm4gYm9vbCBJc1N5bmNpbmdSZXBsaWNhdGlvblNsb3RzKHZvaWQpOwot ZXh0ZXJuIFNpemUgU2xvdFN5bmNTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBTbG90 U3luY1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFN5bmNSZXBsaWNhdGlvblNsb3Rz KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uKTsKIAogI2VuZGlmCQkJCQkJCS8qIFNMT1RTWU5D X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDg1ZDI0 Yzg3Mjk4Li40N2MwNzU3NGQ0ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vd2FscmVjZWl2ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5oCkBAIC00OTEsOCArNDkxLDYgQEAgcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgV2Fs UmVjZWl2ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXAK IGV4dGVybiB2b2lkIFdhbFJjdlJlcXVlc3RBcHBseVJlcGx5KHZvaWQpOwogCiAvKiBwcm90 b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gd2FscmVjZWl2ZXJmdW5jcy5jICovCi1leHRlcm4g U2l6ZSBXYWxSY3ZTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBXYWxSY3ZTaG1lbUlu aXQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93bldhbFJjdih2b2lkKTsKIGV4dGVybiBi b29sIFdhbFJjdlN0cmVhbWluZyh2b2lkKTsKIGV4dGVybiBib29sIFdhbFJjdlJ1bm5pbmco dm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oCmluZGV4IGE0ZGYzYjhl MGFlLi44OTUyYzg0OGQxOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d2Fsc2VuZGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgK QEAgLTQxLDggKzQxLDYgQEAgZXh0ZXJuIHZvaWQgV2FsU25kRXJyb3JDbGVhbnVwKHZvaWQp OwogZXh0ZXJuIHZvaWQgUGh5c2ljYWxXYWtldXBMb2dpY2FsV2FsU25kKHZvaWQpOwogZXh0 ZXJuIFhMb2dSZWNQdHIgR2V0U3RhbmRieUZsdXNoUmVjUHRyKFRpbWVMaW5lSUQgKnRsaSk7 CiBleHRlcm4gdm9pZCBXYWxTbmRTaWduYWxzKHZvaWQpOwotZXh0ZXJuIFNpemUgV2FsU25k U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgV2FsU25kU2htZW1Jbml0KHZvaWQpOwog ZXh0ZXJuIHZvaWQgV2FsU25kV2FrZXVwKGJvb2wgcGh5c2ljYWwsIGJvb2wgbG9naWNhbCk7 CiBleHRlcm4gdm9pZCBXYWxTbmRJbml0U3RvcHBpbmcodm9pZCk7CiBleHRlcm4gdm9pZCBX YWxTbmRXYWl0U3RvcHBpbmcodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFs cy5oCmluZGV4IDhkMWUxNmI1ZDUxLi5kN2Y4YThjMWU2MyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmgKQEAgLTU3MCwxMiArNTcwLDggQEAgZXh0ZXJuIGJvb2wgU3Ry YXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiBleHRl cm4gaW50CVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLCB1aW50 MzIgKm51bV9idWZfYWxsb2MpOwogZXh0ZXJuIHZvaWQgU3RyYXRlZ3lOb3RpZnlCZ1dyaXRl cihpbnQgYmd3cHJvY25vKTsKIAotZXh0ZXJuIFNpemUgU3RyYXRlZ3lTaG1lbVNpemUodm9p ZCk7Ci1leHRlcm4gdm9pZCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KTsKLQogLyog YnVmX3RhYmxlLmMgKi8KLWV4dGVybiBTaXplIEJ1ZlRhYmxlU2htZW1TaXplKGludCBzaXpl KTsKLWV4dGVybiB2b2lkIEluaXRCdWZUYWJsZShpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBC dWZUYWJsZVNobWVtUmVxdWVzdChpbnQgc2l6ZSk7CiBleHRlcm4gdWludDMyIEJ1ZlRhYmxl SGFzaENvZGUoQnVmZmVyVGFnICp0YWdQdHIpOwogZXh0ZXJuIGludAlCdWZUYWJsZUxvb2t1 cChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlKTsKIGV4dGVybiBpbnQJQnVm VGFibGVJbnNlcnQoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSwgaW50IGJ1 Zl9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA0MDE3ODk2Zjk1MS4uMjY0NDE4ODYw MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMzY5LDEwICszNjksNiBAQCBleHRlcm4g dm9pZCBNYXJrRGlydHlBbGxVbnBpbm5lZEJ1ZmZlcnMoaW50MzIgKmJ1ZmZlcnNfZGlydGll ZCwKIAkJCQkJCQkJCQlpbnQzMiAqYnVmZmVyc19hbHJlYWR5X2RpcnR5LAogCQkJCQkJCQkJ CWludDMyICpidWZmZXJzX3NraXBwZWQpOwogCi0vKiBpbiBidWZfaW5pdC5jICovCi1leHRl cm4gdm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpOwotZXh0ZXJuIFNpemUgQnVm ZmVyTWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKLQogLyogaW4gbG9jYWxidWYuYyAqLwogZXh0 ZXJuIHZvaWQgQXRQcm9jRXhpdF9Mb2NhbEJ1ZmZlcnModm9pZCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2Nr LmgKaW5kZXggZmE2OGU2ZWNlY2UuLmVlM2NiMWRjMjAzIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaApA QCAtMzc1LDggKzM3NSw2IEBAIHR5cGVkZWYgZW51bQogLyoKICAqIGZ1bmN0aW9uIHByb3Rv dHlwZXMKICAqLwotZXh0ZXJuIHZvaWQgTG9ja01hbmFnZXJTaG1lbUluaXQodm9pZCk7Ci1l eHRlcm4gU2l6ZSBMb2NrTWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIElu aXRMb2NrTWFuYWdlckFjY2Vzcyh2b2lkKTsKIGV4dGVybiBMb2NrTWV0aG9kIEdldExvY2tz TWV0aG9kVGFibGUoY29uc3QgTE9DSyAqbG9jayk7CiBleHRlcm4gTG9ja01ldGhvZCBHZXRM b2NrVGFnc01ldGhvZFRhYmxlKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdWJzeXN0ZW1saXN0LmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3N1YnN5c3RlbWxpc3QuaAppbmRleCBlOGUwNmJlMzBjMi4uMjA2ZDZiNTg2YWQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oCkBAIC0yNSwxMCArMjUsMTgg QEAgUEdfU0hNRU1fU1VCU1lTVEVNKERTTVJlZ2lzdHJ5U2htZW1DYWxsYmFja3MpCiAKIC8q IHhsb2csIGNsb2csIGFuZCBidWZmZXJzICovCiBQR19TSE1FTV9TVUJTWVNURU0oVmFyc3Vw U2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oWExPR1NobWVtQ2FsbGJhY2tz KQorUEdfU0hNRU1fU1VCU1lTVEVNKFhMb2dQcmVmZXRjaFNobWVtQ2FsbGJhY2tzKQorUEdf U0hNRU1fU1VCU1lTVEVNKFhMb2dSZWNvdmVyeVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1f U1VCU1lTVEVNKENMT0dTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVNX1NVQlNZU1RFTShDb21t aXRUc1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFNVQlRSQU5TU2htZW1D YWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0oTXVsdGlYYWN0U2htZW1DYWxsYmFja3Mp CitQR19TSE1FTV9TVUJTWVNURU0oQnVmZmVyTWFuYWdlclNobWVtQ2FsbGJhY2tzKQorUEdf U0hNRU1fU1VCU1lTVEVNKFN0cmF0ZWd5Q3RsU2htZW1DYWxsYmFja3MpCisKKy8qIGxvY2sg bWFuYWdlciAqLworUEdfU0hNRU1fU1VCU1lTVEVNKExvY2tNYW5hZ2VyU2htZW1DYWxsYmFj a3MpCiAKIC8qIHByZWRpY2F0ZSBsb2NrIG1hbmFnZXIgKi8KIFBHX1NITUVNX1NVQlNZU1RF TShQcmVkaWNhdGVMb2NrU2htZW1DYWxsYmFja3MpCkBAIC0zNiw2ICs0NCw5IEBAIFBHX1NI TUVNX1NVQlNZU1RFTShQcmVkaWNhdGVMb2NrU2htZW1DYWxsYmFja3MpCiAvKiBwcm9jZXNz IHRhYmxlICovCiBQR19TSE1FTV9TVUJTWVNURU0oUHJvY0dsb2JhbFNobWVtQ2FsbGJhY2tz KQogUEdfU0hNRU1fU1VCU1lTVEVNKFByb2NBcnJheVNobWVtQ2FsbGJhY2tzKQorUEdfU0hN RU1fU1VCU1lTVEVNKEJhY2tlbmRTdGF0dXNTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NV QlNZU1RFTShUd29QaGFzZVNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKEJh Y2tncm91bmRXb3JrZXJTaG1lbUNhbGxiYWNrcykKIAogLyogc2hhcmVkLWludmFsIG1lc3Nh Z2luZyAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKFNoYXJlZEludmFsU2htZW1DYWxsYmFja3Mp CkBAIC00MywxMSArNTQsMjYgQEAgUEdfU0hNRU1fU1VCU1lTVEVNKFNoYXJlZEludmFsU2ht ZW1DYWxsYmFja3MpCiAvKiBpbnRlcnByb2Nlc3Mgc2lnbmFsaW5nIG1lY2hhbmlzbXMgKi8K IFBHX1NITUVNX1NVQlNZU1RFTShQTVNpZ25hbFNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1f U1VCU1lTVEVNKFByb2NTaWduYWxTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RF TShDaGVja3BvaW50ZXJTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShBdXRv VmFjdXVtU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oUmVwbGljYXRpb25T bG90c1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFJlcGxpY2F0aW9uT3Jp Z2luU2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oV2FsU25kU2htZW1DYWxs YmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oV2FsUmN2U2htZW1DYWxsYmFja3MpCitQR19T SE1FTV9TVUJTWVNURU0oV2FsU3VtbWFyaXplclNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1f U1VCU1lTVEVNKFBnQXJjaFNobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKEFw cGx5TGF1bmNoZXJTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZU1RFTShTbG90U3lu Y1NobWVtQ2FsbGJhY2tzKQogCiAvKiBvdGhlciBtb2R1bGVzIHRoYXQgbmVlZCBzb21lIHNo YXJlZCBtZW1vcnkgc3BhY2UgKi8KK1BHX1NITUVNX1NVQlNZU1RFTShCVHJlZVNobWVtQ2Fs bGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKFN5bmNTY2FuU2htZW1DYWxsYmFja3MpCiBQ R19TSE1FTV9TVUJTWVNURU0oQXN5bmNTaG1lbUNhbGxiYWNrcykKK1BHX1NITUVNX1NVQlNZ U1RFTShTdGF0c1NobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKFdhaXRFdmVu dEN1c3RvbVNobWVtQ2FsbGJhY2tzKQogUEdfU0hNRU1fU1VCU1lTVEVNKEluamVjdGlvblBv aW50U2htZW1DYWxsYmFja3MpCitQR19TSE1FTV9TVUJTWVNURU0oV2FpdExTTlNobWVtQ2Fs bGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKExvZ2ljYWxEZWNvZGluZ0N0bFNobWVtQ2Fs bGJhY2tzKQogCiAvKiBBSU8gc3Vic3lzdGVtLiBUaGlzIGRlbGVnYXRlcyB0byB0aGUgbWV0 aG9kLXNwZWNpZmljIGNhbGxiYWNrcyAqLwogUEdfU0hNRU1fU1VCU1lTVEVNKEFpb1NobWVt Q2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0 dXMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmgKaW5kZXggZGRkMDYz MDRlOTcuLmEzMzRlMDk2ZTRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9iYWNr ZW5kX3N0YXR1cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmgK QEAgLTI5OCwxNCArMjk4LDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwZ3N0YXRfdHJh Y2tfYWN0aXZpdHlfcXVlcnlfc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBQZ0JhY2tlbmRT dGF0dXMgKk15QkVFbnRyeTsKIAogCi0vKiAtLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMgY2Fs bGVkIGZyb20gcG9zdG1hc3RlcgotICogLS0tLS0tLS0tLQotICovCi1leHRlcm4gU2l6ZSBC YWNrZW5kU3RhdHVzU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQmFja2VuZFN0YXR1 c1NobWVtSW5pdCh2b2lkKTsKLQotCiAvKiAtLS0tLS0tLS0tCiAgKiBGdW5jdGlvbnMgY2Fs bGVkIGZyb20gYmFja2VuZHMKICAqIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMgYi9zcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCmluZGV4IGQ1 OWM1YWQwNTgyLi5jOWFiNzIxYzNmZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9p bmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYworKysgYi9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCkBAIC0xMDcsOSArMTA3 LDEzIEBAIGV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGluamVjdGlvbl93YWl0KGNvbnN0IGNo YXIgKm5hbWUsCiAvKiB0cmFjayBpZiBpbmplY3Rpb24gcG9pbnRzIGF0dGFjaGVkIGluIHRo aXMgcHJvY2VzcyBhcmUgbGlua2VkIHRvIGl0ICovCiBzdGF0aWMgYm9vbCBpbmplY3Rpb25f cG9pbnRfbG9jYWwgPSBmYWxzZTsKIAotLyogU2hhcmVkIG1lbW9yeSBpbml0IGNhbGxiYWNr cyAqLwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVz dF9ob29rID0gTlVMTDsKLXN0YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBwcmV2X3No bWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CitzdGF0aWMgdm9pZCBpbmplY3Rpb25fc2htZW1f cmVxdWVzdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgaW5qZWN0aW9uX3NobWVtX2luaXQo dm9pZCAqYXJnKTsKKworc3RhdGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIGluamVjdGlvbl9z aG1lbV9jYWxsYmFja3MgPSB7CisJLnJlcXVlc3RfZm4gPSBpbmplY3Rpb25fc2htZW1fcmVx dWVzdCwKKwkuaW5pdF9mbiA9IGluamVjdGlvbl9zaG1lbV9pbml0LAorfTsKIAogLyoKICAq IFJvdXRpbmUgZm9yIHNoYXJlZCBtZW1vcnkgYXJlYSBpbml0aWFsaXphdGlvbiwgdXNlZCBh cyBhIGNhbGxiYWNrCkBAIC0xMjYsNDQgKzEzMCwyNiBAQCBpbmplY3Rpb25fcG9pbnRfaW5p dF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKIAlDb25kaXRpb25WYXJpYWJsZUluaXQo JnN0YXRlLT53YWl0X3BvaW50KTsKIH0KIAotLyogU2hhcmVkIG1lbW9yeSBpbml0aWFsaXph dGlvbiB3aGVuIGxvYWRpbmcgbW9kdWxlICovCiBzdGF0aWMgdm9pZAotaW5qZWN0aW9uX3No bWVtX3JlcXVlc3Qodm9pZCkKK2luamVjdGlvbl9zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykK IHsKLQlTaXplCQlzaXplOwotCi0JaWYgKHByZXZfc2htZW1fcmVxdWVzdF9ob29rKQotCQlw cmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOworCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgSW5q ZWN0aW9uUG9pbnRzU2htZW1EZXNjOwogCi0Jc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihJbmpl Y3Rpb25Qb2ludFNoYXJlZFN0YXRlKSk7Ci0JUmVxdWVzdEFkZGluU2htZW1TcGFjZShzaXpl KTsKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoJkluamVjdGlvblBvaW50c1NobWVtRGVzYywgJihT aG1lbVJlcXVlc3RTdHJ1Y3RPcHRzKSB7CisJCS5uYW1lID0gImluamVjdGlvbl9wb2ludHMi LAorCQkuc2l6ZSA9IHNpemVvZihJbmplY3Rpb25Qb2ludFNoYXJlZFN0YXRlKSwKKwkJLnB0 ciA9ICh2b2lkICoqKSAmaW5qX3N0YXRlLAorCX0pOwogfQogCiBzdGF0aWMgdm9pZAotaW5q ZWN0aW9uX3NobWVtX3N0YXJ0dXAodm9pZCkKK2luamVjdGlvbl9zaG1lbV9pbml0KHZvaWQg KmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9v aykKLQkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2soKTsKLQotCS8qIENyZWF0ZSBvciBhdHRh Y2ggdG8gdGhlIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJlKEFkZGlu U2htZW1Jbml0TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCWlual9zdGF0ZSA9IFNobWVtSW5p dFN0cnVjdCgiaW5qZWN0aW9uX3BvaW50cyIsCi0JCQkJCQkJCXNpemVvZihJbmplY3Rpb25Q b2ludFNoYXJlZFN0YXRlKSwKLQkJCQkJCQkJJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0J ewotCQkvKgotCQkgKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUuICBUaGlz IGlzIHNoYXJlZCB3aXRoIHRoZSBkeW5hbWljCi0JCSAqIGluaXRpYWxpemF0aW9uIHVzaW5n IGEgRFNNLgotCQkgKi8KLQkJaW5qZWN0aW9uX3BvaW50X2luaXRfc3RhdGUoaW5qX3N0YXRl LCBOVUxMKTsKLQl9Ci0KLQlMV0xvY2tSZWxlYXNlKEFkZGluU2htZW1Jbml0TG9jayk7CisJ LyoKKwkgKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUuICBUaGlzIGlzIHNo YXJlZCB3aXRoIHRoZSBkeW5hbWljCisJICogaW5pdGlhbGl6YXRpb24gdXNpbmcgYSBEU00u CisJICovCisJaW5qZWN0aW9uX3BvaW50X2luaXRfc3RhdGUoaW5qX3N0YXRlLCBOVUxMKTsK IH0KIAogLyoKQEAgLTYwMSw5ICs1ODcsNSBAQCBfUEdfaW5pdCh2b2lkKQogCWlmICghcHJv Y2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCiAJCXJldHVybjsK IAotCS8qIFNoYXJlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8KLQlwcmV2X3NobWVtX3Jl cXVlc3RfaG9vayA9IHNobWVtX3JlcXVlc3RfaG9vazsKLQlzaG1lbV9yZXF1ZXN0X2hvb2sg PSBpbmplY3Rpb25fc2htZW1fcmVxdWVzdDsKLQlwcmV2X3NobWVtX3N0YXJ0dXBfaG9vayA9 IHNobWVtX3N0YXJ0dXBfaG9vazsKLQlzaG1lbV9zdGFydHVwX2hvb2sgPSBpbmplY3Rpb25f c2htZW1fc3RhcnR1cDsKKwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZpbmplY3Rpb25fc2ht ZW1fY2FsbGJhY2tzKTsKIH0KLS0gCjIuNDcuMwoK --------------0TvMQ5YZDW0H8egpRR60Shwk--