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 1w3Af5-000yKp-2Z for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 10:31:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3Af4-0007Fu-1A for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 10:31:30 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3Af3-0007Fk-1I for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 10:31:30 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w3Aet-00000000Xam-2snm for pgsql-hackers@postgresql.org; Thu, 19 Mar 2026 10:31:28 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4fc26X2RfFzyQm; Thu, 19 Mar 2026 12:31:16 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773916277; 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=PBXkMxCAf4IZKjwAIpviMnoanDOK8hG/yf78T5NsJtk=; b=SmbFH23YhgDZJywBvorYu6FhDILaCULFPCuUPSpicPkmUhf4QPzuz0lpC55F9dbo4yfMhy Dok/7ubtVK6YUluAgXLnFyFDPp6w9+RTZnIiZBgQOwRr0fQR4nSIEvORFwhvAVIpqPZY4D Fmr9iXHHK2I/A4jwKcwLH13GfY6pPMo= ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=meesny; cv=none; t=1773916277; b=amjS6Mvt3gQOznIx4YkObZDDdsSBFsQp6WGu0utxkN2y58iFLVVRbxkvPoDDuTVwOUwkQ0 9t5J3/IPbXGjkLROlpTRvJA/oeu1KsD+FCfBpkUvY1q/sRHCM90HXQNNcIAL5CDThDzdrP OyBIUqslmP54qKisCt9ROKxHGM5k07M= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773916277; 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=PBXkMxCAf4IZKjwAIpviMnoanDOK8hG/yf78T5NsJtk=; b=Q+CapCxXNW/3NHVjTt6ffa+S8QDs6QFqmM9Wb63kTy/yTZxuSDT1IYwWZmebPRqfo1PZV1 jFxcjPuK8PLXyze3350XffHatYx1U2MnwxbkAOmadgWykBE5aAlx/u4QMFKgnpDVfPK0vC V77GATgY4qHrhnGtsIkDko1IHwwAbG8= Content-Type: multipart/mixed; boundary="------------9KUsCkZJ2q1LfUJZKT3CK0fL" Message-ID: <8a6799be-bd42-49fb-8914-856c97bb1977@iki.fi> Date: Thu, 19 Mar 2026 12:31:10 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Better shared data structure management and resizable shared data structures To: Robert Haas Cc: Ashutosh Bapat , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com References: <5a37c2e3-619d-4816-84d7-0b27e3e6797f@iki.fi> <26c766d6-db0f-43d3-a618-44f8d40a3121@iki.fi> <62b8dc23-8f6a-4cac-91ff-f74bb5bc159a@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 18/03/2026 21:30, Robert Haas wrote: > On Fri, Mar 13, 2026 at 7:41 AM Heikki Linnakangas wrote: >> Yeah. IMHO the existing shmem_request/startup_hook mechanism is pretty >> awkward too, and in most cases, the new mechanism is more convenient. It >> might be slightly less convenient for some things, but mostly it's >> better. Would you agree with that, or do you actually like the old hooks >> and ShmemInitStruct() better? > > I'd say it's not massively different one way or the other. Looking at > the pg_stat_statements changes in particular, I feel like in v2, it > was actually worse, because you didn't get manage to get rid of > pgss_shmem_request(), but it was no longer the thing requesting shmem. > v3 is better in that regard: you get rid of some complexity in > exchange for what you add. It's not amazing, though: > pgss_shmem_startup() now has nothing to do with the name of the hook, > which is not this patch's fault but also isn't solved by it. I wonder > why in the world somebody decided to jam all of this non-shmem-related > logic into this function, and why they didn't add a comment explaining > why it was here and not someplace else. One of the worst things about > this area is that I often end up having to trace through a bunch of > postmaster startup logic to figure out whether any given bit of code > is actually in the right place, and that makes me feel like the hooks > are badly designed. pgss_shmem_startup() is a good example of that, > and the fact that it needs an IsUnderPostmaster check is another. Hmm, I assumed it was important that the pg_stat_statements file is loaded later in the startup sequence, and that's why it was in pgss_shmem_startup(). But now that I look at it, I don't think there was any grand plan, shmem_startup_hook was just the only easy way to get control during postmaster startup, after shmem initialization. So I think we can move that code to the init_fn callback with the new API, and that gets rid of shmem_startup_hook in pg_stat_statements. See attached (v6-0005-move-pgss-shmem_startup-hook-code-into-the-new-in.patch). > We should somehow try to make it clear what happens with this new > mechanism if a module is loaded via shared_preload_libraries vs. if > it's loaded via LOAD or session_preload_libraries or whatever. Writing > modules that don't require shared_preload_libraries is a boon to > users, because they can be added to a production system without a > server restart. I wonder whether this new facility handles that case > better, worse, or the same as existing facilities. Pretty much the same I think. Point taken that it could be documented better. The old documentation for ShmemInitStruct() assumed that it would be used from shared_preload_libraries, it didn't. With the new API, I tried to document how it behaves when used outside shared_preload_libraries, but still focused on how using it from shared_preload_libraries. I'm not sure it helped. Perhaps the after-startup behavior should be put in a separate section. >> One such wrinkle with ShmemRegisterStruct() in the patch now is that >> it's harder to do initialization that touches multiple structs or hash >> tables. Currently the callbacks are called in the same order that the >> structs are registered, so you can do all the initialization in the last >> struct's callback. The single pair of shmem_request/startup_hooks per >> module was more clear in that aspect. Fortunately, that kind of >> cross-struct dependencies are pretty rare. So I think it's fine. (The >> order that the callbacks are called needs be documented explicitly though). >> >> If we want to improve on that, one idea would be to introduce a >> ShmemRegisterCallbacks() function to register callbacks that are not >> tied to any particular struct and are called after all the per-struct >> callbacks. > > I think the whole idea of ShmemInitHash() and ShmemInitStruct() is > relatively poorly designed in this regard. Ideally, I want to > initialize all the shared memory that belongs to me, and that might > include arbitrary data structures, but the current design kind of > thinks that I want one struct or one hash table and nothing else. If > we're redesigning this mechanism, it would sure be nice to improve on > that. > > Looking just at the pg_stat_statements changes, I think my overall > view on this right now is that it's not terrible, but I'm also not > that happy about introducing yet another way to do it for this amount > of gain. To me, it doesn't yet rise to the level of a clear win. So here's another idea (not yet implemented in the attached patch): instead of thinking in terms of individual shmem structs and hashes, let's introduce a concept of a "subsystem" that ties them together: static pgss_subsystem_desc = { .name = "pg_stat_statements", .shmem_structs = { { .ptr = (void **) &pgss, .size = sizeof(pgssSharedState), }, }, .shmem_hashes = { { .ptr = &pgss_hash, .init_size = 0, /* set from 'pgss_max' */ .max_size = 0, /* set from 'pgss_max' */ .hash_info.keysize = sizeof(pgssHashKey), .hash_info.entrysize = sizeof(pgssEntry), .hash_flags = HASH_ELEM | HASH_BLOBS, }, }, /* called after the shmem structs and hashes have been allocated */ .init_fn = pgss_shmem_init, } void _PG_init(void) { ... RegisterSubsystem(&pgss_subsystem_desc); } We could add more callbacks that get called at different times. For example the callback that would get called before shared memory is allocated, which could adjust the size according to MaxBackends. That would fully replace shmem_request_hook. Or a callback that would get called later in the startup sequence, if we wanted to e.g. load the pg_stat_statements file later in startup. This would be a natural place for other resources in future too. We could support declaring "named lwlock tranches" here to replace RequestNamedLWLockTranche() for example, although I think it's still better to encourage embedding the LWLock in the struct instead. _PG_init in pg_stat_statements still does a lot more than register that struct. It declares the GUCs and installs other hooks for example. We could perhaps move those to the subsystem descriptor too, although I'm not sure if that's worth the code churn. - Heikki --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Disposition: attachment; filename*0="v6-0001-Test-pg_stat_statements-across-crash-restart.patch" Content-Transfer-Encoding: base64 RnJvbSA1NGUxNjk2NGY0NTNiOWU1NzJlMWVkNjQ5NmFiMDVmMmZjZWI3NWEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTYgTWFyIDIwMjYgMTY6NDE6MTcgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDEvNl0gVGVzdCBwZ19zdGF0X3N0YXRlbWVudHMgYWNyb3Nz IGNyYXNoIHJlc3RhcnQKCkFkZCAncGdfc3RhdF9zdGF0ZW1lbnRzJyB0byB0aGUgY3Jhc2gg cmVzdGFydCB0ZXN0LCB0byB0ZXN0IHRoYXQKc2hhcmVkIG1lbW9yeSBhbmQgTFdMb2NrIGlu aXRpYWxpemF0aW9uIHdvcmtzIGFjcm9zcyBjcmFzaCByZXN0YXJ0IGluCmEgbGlicmFyeSBs aXN0ZWQgaW4gc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgoKRGlzY3Vzc2lvbjogaHR0cHM6 Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4SFc1dk0xYm5lTFlmZzB3R2VB YT01MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMv dGVzdC9yZWNvdmVyeS90LzAxM19jcmFzaF9yZXN0YXJ0LnBsIHwgOSArKysrKysrKysKIDEg ZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWNvdmVyeS90LzAxM19jcmFzaF9yZXN0YXJ0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MTNfY3Jhc2hfcmVzdGFydC5wbAppbmRleCAyMGQ2NDhhZDZhZi4uOTYwZTU0NjJiNDkgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDEzX2NyYXNoX3Jlc3RhcnQucGwKKysr IGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTNfY3Jhc2hfcmVzdGFydC5wbApAQCAtMjEsNiAr MjEsMTUgQEAgbXkgJHBzcWxfdGltZW91dCA9IElQQzo6UnVuOjp0aW1lcigkUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7CiAKIG15ICRub2RlID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZS0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+IDEpOworCisjIEVuYWJsZSBwZ19zdGF0X3N0YXRlbWVudHMgdG8g dGVzdCByZXN0YXJ0IG9mIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KKyRub2RlLT5hcHBl bmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywKKwlxcXtzaGFyZWRfcHJlbG9hZF9saWJy YXJpZXMgPSAncGdfc3RhdF9zdGF0ZW1lbnRzJworcGdfc3RhdF9zdGF0ZW1lbnRzLm1heCA9 IDUwMDAwCitjb21wdXRlX3F1ZXJ5X2lkID0gJ3JlZ3Jlc3MnCit9KTsKKwogJG5vZGUtPnN0 YXJ0KCk7CiAKICMgYnkgZGVmYXVsdCBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyIGRvZXNu J3QgcmVzdGFydCBhZnRlciBhIGNyYXNoCi0tIAoyLjQ3LjMKCg== --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0002-Refactor-ShmemIndex-initialization.patch" Content-Disposition: attachment; filename="v6-0002-Refactor-ShmemIndex-initialization.patch" Content-Transfer-Encoding: base64 RnJvbSBhNWRkMmEyYzA5YjI4YzI1YzM2NzliMjdjYzBiYTVhZjMxZjAwYzQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTYgTWFyIDIwMjYgMjA6MzU6MzYgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDIvNl0gUmVmYWN0b3IgU2htZW1JbmRleCBpbml0aWFsaXph dGlvbgoKSW5pdGlhbGl6ZSB0aGUgU2htZW1JbmRleCBoYXNoIHRhYmxlIGluIEluaXRTaG1l bUFsbG9jYXRvcigpIGFscmVhZHksCnJlbW92aW5nIHRoZSBuZWVkIGZvciB0aGUgc2VwYXJh dGUgSW5pdFNobWVtSW5kZXgoKSBzdGVwLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L2lwY2kuYyAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgfCAx MzEgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2Uvc2htZW0uaCAgICAgfCAgIDEgLQogMyBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNlcnRpb25z KCspLCA5MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggYTQ3 ODVkYWYxZTUuLjNkM2YxNTM4MDliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0y NTAsMTYgKzI1MCwxMCBAQCBzdGF0aWMgdm9pZAogQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVj dHModm9pZCkKIHsKIAkvKgotCSAqIE5vdyBpbml0aWFsaXplIExXTG9ja3MsIHdoaWNoIGRv IHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYXJlCi0JICogbmVlZGVkIGZvciBJbml0 U2htZW1JbmRleC4KKwkgKiBOb3cgaW5pdGlhbGl6ZSBMV0xvY2tzLCB3aGljaCBkbyBzaGFy ZWQgbWVtb3J5IGFsbG9jYXRpb24uCiAJICovCiAJQ3JlYXRlTFdMb2NrcygpOwogCi0JLyoK LQkgKiBTZXQgdXAgc2htZW0uYyBpbmRleCBoYXNodGFibGUKLQkgKi8KLQlJbml0U2htZW1J bmRleCgpOwotCiAJZHNtX3NobWVtX2luaXQoKTsKIAlEU01SZWdpc3RyeVNobWVtSW5pdCgp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCAwNDI0YzQ0NTcyMy4uZGNlMzU1 ZTY2ODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTI0LDYgKzEyNCwxMiBA QCBEYXR1bQkJcGdfbnVtYV9hdmFpbGFibGUoUEdfRlVOQ1RJT05fQVJHUyk7CiB2b2lkCiBJ bml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogeworCVNpemUJCW9m ZnNldDsKKwlpbnQ2NAkJaGFzaF9zaXplOworCUhBU0hDVEwJCWluZm87CisJaW50CQkJaGFz aF9mbGFnczsKKwlzaXplX3QJCXNpemU7CisKIAlBc3NlcnQoc2VnaGRyICE9IE5VTEwpOwog CiAJLyoKQEAgLTEzNyw0MSArMTQzLDU0IEBAIEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVt SGVhZGVyICpzZWdoZHIpCiAJU2htZW1CYXNlID0gc2VnaGRyOwogCVNobWVtRW5kID0gKGNo YXIgKikgU2htZW1CYXNlICsgc2VnaGRyLT50b3RhbHNpemU7CiAKKwkvKgorCSAqIEFsbG9j YXRpb25zIGFmdGVyIHRoaXMgcG9pbnQgc2hvdWxkIGdvIHRocm91Z2ggU2htZW1BbGxvYywg d2hpY2gKKwkgKiBleHBlY3RzIHRvIGFsbG9jYXRlIGV2ZXJ5dGhpbmcgb24gY2FjaGUgbGlu ZSBib3VuZGFyaWVzLiAgTWFrZSBzdXJlIHRoZQorCSAqIGZpcnN0IGFsbG9jYXRpb24gYmVn aW5zIG9uIGEgY2FjaGUgbGluZSBib3VuZGFyeS4KKwkgKi8KKwlvZmZzZXQgPSBDQUNIRUxJ TkVBTElHTihzZWdoZHItPmNvbnRlbnRfb2Zmc2V0ICsgc2l6ZW9mKFNobWVtQWxsb2NhdG9y RGF0YSkpOworCWlmIChvZmZzZXQgPiBzZWdoZHItPnRvdGFsc2l6ZSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJt c2coIm91dCBvZiBzaGFyZWQgbWVtb3J5ICglenUgYnl0ZXMgcmVxdWVzdGVkKSIsCisJCQkJ CQlvZmZzZXQpKSk7CisKKwlTaG1lbUFsbG9jYXRvciA9IChTaG1lbUFsbG9jYXRvckRhdGEg KikgKChjaGFyICopIHNlZ2hkciArIHNlZ2hkci0+Y29udGVudF9vZmZzZXQpOworCVNobWVt TG9jayA9ICZTaG1lbUFsbG9jYXRvci0+c2htZW1fbG9jazsKKwogI2lmbmRlZiBFWEVDX0JB Q0tFTkQKIAlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyKTsKICNlbmRpZgotCWlmIChJc1Vu ZGVyUG9zdG1hc3RlcikKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQogCXsKLQkJUEdTaG1l bUhlYWRlciAqc2htaGRyID0gU2htZW1TZWdIZHI7Ci0KLQkJU2htZW1BbGxvY2F0b3IgPSAo U2htZW1BbGxvY2F0b3JEYXRhICopICgoY2hhciAqKSBzaG1oZHIgKyBzaG1oZHItPmNvbnRl bnRfb2Zmc2V0KTsKLQkJU2htZW1Mb2NrID0gJlNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2Nr OworCQlTcGluTG9ja0luaXQoJlNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2NrKTsKKwkJU2ht ZW1BbGxvY2F0b3ItPmZyZWVfb2Zmc2V0ID0gb2Zmc2V0OwogCX0KLQllbHNlCi0JewotCQlT aXplCQlvZmZzZXQ7CiAKLQkJLyoKLQkJICogQWxsb2NhdGlvbnMgYWZ0ZXIgdGhpcyBwb2lu dCBzaG91bGQgZ28gdGhyb3VnaCBTaG1lbUFsbG9jLCB3aGljaAotCQkgKiBleHBlY3RzIHRv IGFsbG9jYXRlIGV2ZXJ5dGhpbmcgb24gY2FjaGUgbGluZSBib3VuZGFyaWVzLiAgTWFrZSBz dXJlCi0JCSAqIHRoZSBmaXJzdCBhbGxvY2F0aW9uIGJlZ2lucyBvbiBhIGNhY2hlIGxpbmUg Ym91bmRhcnkuCi0JCSAqLwotCQlvZmZzZXQgPSBDQUNIRUxJTkVBTElHTihzZWdoZHItPmNv bnRlbnRfb2Zmc2V0ICsgc2l6ZW9mKFNobWVtQWxsb2NhdG9yRGF0YSkpOwotCQlpZiAob2Zm c2V0ID4gc2VnaGRyLT50b3RhbHNpemUpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJy Y29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkgZXJybXNnKCJvdXQgb2Ygc2hh cmVkIG1lbW9yeSAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAotCQkJCQkJCW9mZnNldCkpKTsK LQotCQlTaG1lbUFsbG9jYXRvciA9IChTaG1lbUFsbG9jYXRvckRhdGEgKikgKChjaGFyICop IHNlZ2hkciArIHNlZ2hkci0+Y29udGVudF9vZmZzZXQpOworCS8qCisJICogQ3JlYXRlIChv ciBhdHRhY2ggdG8pIHRoZSBzaGFyZWQgbWVtb3J5IGluZGV4IG9mIHNobWVtIGFyZWFzLgor CSAqCisJICogVGhpcyBpcyB0aGUgc2FtZSBpbml0aWFsaXphdGlvbiBhcyBTaG1lbUluaXRI YXNoKCkgZG9lcywgYnV0IHdlIGNhbm5vdAorCSAqIHVzZSBTaG1lbUluaXRIYXNoKCkgaGVy ZSBiZWNhdXNlIGl0IHJlbGllcyBvbiBTaG1lbUluZGV4IGJlaW5nIGFscmVhZHkKKwkgKiBp bml0aWFsaXplZC4KKwkgKi8KKwloYXNoX3NpemUgPSBTSE1FTV9JTkRFWF9TSVpFOwogCi0J CVNwaW5Mb2NrSW5pdCgmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2spOwotCQlTaG1lbUxv Y2sgPSAmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2s7Ci0JCVNobWVtQWxsb2NhdG9yLT5m cmVlX29mZnNldCA9IG9mZnNldDsKLQkJLyogU2htZW1JbmRleCBjYW4ndCBiZSBzZXQgdXAg eWV0IChuZWVkIExXTG9ja3MgZmlyc3QpICovCi0JCVNobWVtQWxsb2NhdG9yLT5pbmRleCA9 IE5VTEw7Ci0JCVNobWVtSW5kZXggPSAoSFRBQiAqKSBOVUxMOworCWluZm8ua2V5c2l6ZSA9 IFNITUVNX0lOREVYX0tFWVNJWkU7CisJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1J bmRleEVudCk7CisJaW5mby5kc2l6ZSA9IGluZm8ubWF4X2RzaXplID0gaGFzaF9zZWxlY3Rf ZGlyc2l6ZShoYXNoX3NpemUpOworCWluZm8uYWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsK KwloYXNoX2ZsYWdzID0gSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTIHwgSEFTSF9TSEFSRURf TUVNIHwgSEFTSF9BTExPQyB8IEhBU0hfRElSU0laRTsKKwlpZiAoIUlzVW5kZXJQb3N0bWFz dGVyKQorCXsKKwkJc2l6ZSA9IGhhc2hfZ2V0X3NoYXJlZF9zaXplKCZpbmZvLCBoYXNoX2Zs YWdzKTsKKwkJU2htZW1BbGxvY2F0b3ItPmluZGV4ID0gKEhBU0hIRFIgKikgU2htZW1BbGxv YyhzaXplKTsKIAl9CisJZWxzZQorCQloYXNoX2ZsYWdzIHw9IEhBU0hfQVRUQUNIOworCWlu Zm8uaGN0bCA9IFNobWVtQWxsb2NhdG9yLT5pbmRleDsKKwlTaG1lbUluZGV4ID0gaGFzaF9j cmVhdGUoIlNobWVtSW5kZXgiLCBoYXNoX3NpemUsICZpbmZvLCBoYXNoX2ZsYWdzKTsKKwlB c3NlcnQoU2htZW1JbmRleCAhPSBOVUxMKTsKIH0KIAogLyoKQEAgLTI3MCwzMSArMjg5LDYg QEAgU2htZW1BZGRySXNWYWxpZChjb25zdCB2b2lkICphZGRyKQogCXJldHVybiAoYWRkciA+ PSBTaG1lbUJhc2UpICYmIChhZGRyIDwgU2htZW1FbmQpOwogfQogCi0vKgotICoJSW5pdFNo bWVtSW5kZXgoKSAtLS0gc2V0IHVwIG9yIGF0dGFjaCB0byBzaG1lbSBpbmRleCB0YWJsZS4K LSAqLwotdm9pZAotSW5pdFNobWVtSW5kZXgodm9pZCkKLXsKLQlIQVNIQ1RMCQlpbmZvOwot Ci0JLyoKLQkgKiBDcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgc2htZW0gaW5kZXguCi0JICoK LQkgKiBTaW5jZSBTaG1lbUluaXRIYXNoIGNhbGxzIFNobWVtSW5pdFN0cnVjdCwgd2hpY2gg ZXhwZWN0cyB0aGUgU2htZW1JbmRleAotCSAqIGhhc2h0YWJsZSB0byBleGlzdCBhbHJlYWR5 LCB3ZSBoYXZlIGEgYml0IG9mIGEgY2lyY3VsYXJpdHkgcHJvYmxlbSBpbgotCSAqIGluaXRp YWxpemluZyB0aGUgU2htZW1JbmRleCBpdHNlbGYuICBUaGUgc3BlY2lhbCAiU2htZW1JbmRl eCIgaGFzaAotCSAqIHRhYmxlIG5hbWUgd2lsbCB0ZWxsIFNobWVtSW5pdFN0cnVjdCB0byBm YWtlIGl0LgotCSAqLwotCWluZm8ua2V5c2l6ZSA9IFNITUVNX0lOREVYX0tFWVNJWkU7Ci0J aW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1JbmRleEVudCk7Ci0KLQlTaG1lbUluZGV4 ID0gU2htZW1Jbml0SGFzaCgiU2htZW1JbmRleCIsCi0JCQkJCQkJICAgU0hNRU1fSU5ERVhf U0laRSwgU0hNRU1fSU5ERVhfU0laRSwKLQkJCQkJCQkgICAmaW5mbywKLQkJCQkJCQkgICBI QVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOwotfQotCiAvKgogICogU2htZW1Jbml0SGFzaCAt LSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQogICoJCXNoYXJlZCBt ZW1vcnkgaGFzaCB0YWJsZS4KQEAgLTM4MywzOCArMzc3LDkgQEAgU2htZW1Jbml0U3RydWN0 KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpCiAJU2htZW1J bmRleEVudCAqcmVzdWx0OwogCXZvaWQJICAgKnN0cnVjdFB0cjsKIAotCUxXTG9ja0FjcXVp cmUoU2htZW1JbmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CisJQXNzZXJ0KFNobWVtSW5kZXgg IT0gTlVMTCk7CiAKLQlpZiAoIVNobWVtSW5kZXgpCi0JewotCQkvKiBNdXN0IGJlIHRyeWlu ZyB0byBjcmVhdGUvYXR0YWNoIHRvIFNobWVtSW5kZXggaXRzZWxmICovCi0JCUFzc2VydChz dHJjbXAobmFtZSwgIlNobWVtSW5kZXgiKSA9PSAwKTsKLQotCQlpZiAoSXNVbmRlclBvc3Rt YXN0ZXIpCi0JCXsKLQkJCS8qIE11c3QgYmUgaW5pdGlhbGl6aW5nIGEgKG5vbi1zdGFuZGFs b25lKSBiYWNrZW5kICovCi0JCQlBc3NlcnQoU2htZW1BbGxvY2F0b3ItPmluZGV4ICE9IE5V TEwpOwotCQkJc3RydWN0UHRyID0gU2htZW1BbGxvY2F0b3ItPmluZGV4OwotCQkJKmZvdW5k UHRyID0gdHJ1ZTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgc2ht ZW0gaW5kZXggZG9lc24ndCBleGlzdCwgd2UgYXJlIGJvb3RzdHJhcHBpbmc6IHdlIG11c3QK LQkJCSAqIGJlIHRyeWluZyB0byBpbml0IHRoZSBzaG1lbSBpbmRleCBpdHNlbGYuCi0JCQkg KgotCQkJICogTm90aWNlIHRoYXQgdGhlIFNobWVtSW5kZXhMb2NrIGlzIHJlbGVhc2VkIGJl Zm9yZSB0aGUgc2htZW0KLQkJCSAqIGluZGV4IGhhcyBiZWVuIGluaXRpYWxpemVkLiAgVGhp cyBzaG91bGQgYmUgT0sgYmVjYXVzZSBubyBvdGhlcgotCQkJICogcHJvY2VzcyBjYW4gYmUg YWNjZXNzaW5nIHNoYXJlZCBtZW1vcnkgeWV0LgotCQkJICovCi0JCQlBc3NlcnQoU2htZW1B bGxvY2F0b3ItPmluZGV4ID09IE5VTEwpOwotCQkJc3RydWN0UHRyID0gU2htZW1BbGxvYyhz aXplKTsKLQkJCVNobWVtQWxsb2NhdG9yLT5pbmRleCA9IHN0cnVjdFB0cjsKLQkJCSpmb3Vu ZFB0ciA9IGZhbHNlOwotCQl9Ci0JCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwot CQlyZXR1cm4gc3RydWN0UHRyOwotCX0KKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2Nr LCBMV19FWENMVVNJVkUpOwogCiAJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXgg Ki8KIAlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oCmluZGV4 IDg5ZDQ1Mjg3YzE3Li4wZGU4YTM2NDI5YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAtMzMs NyArMzMsNiBAQCBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRl ciAqc2VnaGRyKTsKIGV4dGVybiB2b2lkICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRl cm4gdm9pZCAqU2htZW1BbGxvY05vRXJyb3IoU2l6ZSBzaXplKTsKIGV4dGVybiBib29sIFNo bWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCBJbml0U2ht ZW1JbmRleCh2b2lkKTsKIGV4dGVybiBIVEFCICpTaG1lbUluaXRIYXNoKGNvbnN0IGNoYXIg Km5hbWUsIGludDY0IGluaXRfc2l6ZSwgaW50NjQgbWF4X3NpemUsCiAJCQkJCQkgICBIQVNI Q1RMICppbmZvUCwgaW50IGhhc2hfZmxhZ3MpOwogZXh0ZXJuIHZvaWQgKlNobWVtSW5pdFN0 cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNpemUsIGJvb2wgKmZvdW5kUHRyKTsKLS0g CjIuNDcuMwoK --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0003-Introduce-a-new-mechanism-for-registering-shared-.patch" Content-Disposition: attachment; filename*0="v6-0003-Introduce-a-new-mechanism-for-registering-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMjM4YTMyZmYyNTliOWU3NjIzNTk5NWUyN2NlNmMyZDA4ZjhmZWVlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTYgTWFyIDIwMjYgMjA6MDg6MjUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDMvNl0gSW50cm9kdWNlIGEgbmV3IG1lY2hhbmlzbSBmb3Ig cmVnaXN0ZXJpbmcgc2hhcmVkCiBtZW1vcnkgYXJlYXMKCkVhY2ggc2hhcmVkIG1lbW9yeSBh cmVhIGlzIHJlZ2lzdGVyZWQgd2l0aCBhICJkZXNjcmlwdG9yIHN0cnVjdCIgdGhhdApjb250 YWlucyBwYXJhbWV0ZXJzIGxpa2UgbmFtZSBhbmQgc2l6ZSBvZiB0aGUgYXJlYS4gVGhlIGRl c2NyaXB0b3IKc3RydWN0IG1ha2VzIGl0IGVhc2llciB0byBhZGQgb3B0aW9uYWwgZmllbGRz IGluIHRoZSBmdXR1cmU7IHRoZQphZGRpdGlvbmFsIGZpZWxkcyBjYW4ganVzdCBiZSBsZWZ0 IGFzIHplcm9zLgoKVGhpcyBtZXJnZXMgdGhlIHNlcGFyYXRlIFtTdWJzeXN0ZW1dU2htZW1T aXplKCkgYW5kCltTdWJzeXN0ZW1dU2htZW1Jbml0KCkgcGhhc2VzIGF0IHBvc3RtYXN0ZXIg c3RhcnR1cC4gRWFjaCBzdWJzeXN0ZW0gaXMKbm93IGNhbGxlZCBpbnRvIGp1c3Qgb25jZSwg YmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaGFzIGJlZW4KYWxsb2NhdGVkLCB0 byByZWdpc3RlciB0aGUgc3Vic3lzdGVtJ3Mgc2hhcmVkIG1lbW9yeSBuZWVkcy4gVGhlCnJl Z2lzdHJhdGlvbiBpbmNsdWRlcyB0aGUgc2l6ZSwgd2hpY2ggcmVwbGFjZXMgdGhlCltTdWJz eXN0ZW1dU2htZW1TaXplKCkgY2FsbHMsIGFuZCBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6 YXRpb24KY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHJlcGxhY2VzIHRoZSBbU3Vic3lzdGVt XVNobWVtSW5pdCgpCmNhbGxzLiBUaGlzIGlzIG1vcmUgZXJnb25vbWljLCBhcyB5b3Ugb25s eSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZQpvbmNlLCB3aGVuIHlvdSByZWdpc3RlciB0 aGUgc3RydWN0LgoKVGhpcyByZXBsYWNlcyBTaG1lbUluaXRTdHJ1Y3QoKSBhbmQgU2htZW1J bml0SGFzaCgpLCB3aGljaCBiZWNvbWUganVzdApiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3 cmFwcGVycyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbnMuIEluIGZ1dHVyZQpjb21taXRzLCBJ IHBsYW4gdG8gcmVwbGFjZSBhbGwgU2htZW1Jbml0U3RydWN0KCkgYW5kIFNobWVtSW5pdEhh c2goKQpjYWxscyB3aXRoIHRoZSBuZXcgZnVuY3Rpb25zLCBhbHRob3VnaCB3ZSdsbCBzdGls bCBuZWVkIHRvIGtlZXAgdGhlbQphcm91bmQgZm9yIGV4dGVuc2lvbnMuCgpSZXZpZXdlZC1i eTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ClJldmll d2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZp ZXdlZC1ieTogUm9iZXJ0IEhhYXMgPHJvYmVydG1oYWFzQGdtYWlsLmNvbT4KRGlzY3Vzc2lv bjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUV4SFc1dk0xYm5l TFlmZzB3R2VBYT01MlVpSjN6NHZLZDNBSjcyWDhGdzZrM0tLcmdAbWFpbC5nbWFpbC5jb20K LS0tCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAgICAgICAgfCAgIDQgKy0K IGRvYy9zcmMvc2dtbC94ZnVuYy5zZ21sICAgICAgICAgICAgICAgICB8IDEyNiArKy0tCiBz cmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMgICAgICAgfCAgIDIgKwogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIHwgICA0ICsKIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvaXBjaS5jICAgICAgICAgIHwgIDUwICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zaG1lbS5jICAgICAgICAgfCA3MzUgKysrKysrKysrKysrKysrKysrKy0tLS0tCiBz cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9pcGMuaCAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L3N0b3JhZ2Uvc2htZW0uaCAgICAgICAgICAgICB8IDE1MyArKysrLQogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgIHwgICA0ICstCiAxMSBmaWxlcyBjaGFuZ2Vk LCA4NjMgaW5zZXJ0aW9ucygrKSwgMjMwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmll d3Muc2dtbAppbmRleCA5ZWUxYTJiZmM2YS4uZWNkZDVmYTU0NGEgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3lzdGVt LXZpZXdzLnNnbWwKQEAgLTQyNTQsOCArNDI1NCw4IEBAIFNFTEVDVCAqIEZST00gcGdfbG9j a3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBweAogICA8cGFyYT4KICAgIEFu b255bW91cyBhbGxvY2F0aW9ucyBhcmUgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIGJlZW4gbWFk ZQogICAgd2l0aCA8bGl0ZXJhbD5TaG1lbUFsbG9jKCk8L2xpdGVyYWw+IGRpcmVjdGx5LCBy YXRoZXIgdGhhbiB2aWEKLSAgIDxsaXRlcmFsPlNobWVtSW5pdFN0cnVjdCgpPC9saXRlcmFs PiBvcgotICAgPGxpdGVyYWw+U2htZW1Jbml0SGFzaCgpPC9saXRlcmFsPi4KKyAgIDxsaXRl cmFsPlNobWVtUmVnaXN0ZXJTdHJ1Y3QoKTwvbGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPlNo bWVtUmVnaXN0ZXJIYXNoKCk8L2xpdGVyYWw+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC94ZnVu Yy5zZ21sCmluZGV4IDcwZTgxNWI4YTJjLi4wNWQ5ZWM3ZTMzYSAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3hmdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKQEAg LTM2MjgsNTkgKzM2MjgsODcgQEAgQ1JFQVRFIEZVTkNUSU9OIG1ha2VfYXJyYXkoYW55ZWxl bWVudCkgUkVUVVJOUyBhbnlhcnJheQogICAgICAgQWRkLWlucyBjYW4gcmVzZXJ2ZSBzaGFy ZWQgbWVtb3J5IG9uIHNlcnZlciBzdGFydHVwLiAgVG8gZG8gc28sIHRoZQogICAgICAgYWRk LWluJ3Mgc2hhcmVkIGxpYnJhcnkgbXVzdCBiZSBwcmVsb2FkZWQgYnkgc3BlY2lmeWluZyBp dCBpbgogICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJhcmll cyIvPjxpbmRleHRlcm0+PHByaW1hcnk+c2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPC9wcmlt YXJ5PjwvaW5kZXh0ZXJtPi4KLSAgICAgIFRoZSBzaGFyZWQgbGlicmFyeSBzaG91bGQgYWxz byByZWdpc3RlciBhCi0gICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVy YWw+IGluIGl0cwotICAgICAgPGZ1bmN0aW9uPl9QR19pbml0PC9mdW5jdGlvbj4gZnVuY3Rp b24uICBUaGlzCi0gICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+ IGNhbiByZXNlcnZlIHNoYXJlZCBtZW1vcnkgYnkKLSAgICAgIGNhbGxpbmc6Ci08cHJvZ3Jh bWxpc3Rpbmc+Ci12b2lkIFJlcXVlc3RBZGRpblNobWVtU3BhY2UoU2l6ZSBzaXplKQotPC9w cm9ncmFtbGlzdGluZz4KLSAgICAgIEVhY2ggYmFja2VuZCBzaG91bGQgb2J0YWluIGEgcG9p bnRlciB0byB0aGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9yeSBieQotICAgICAgY2FsbGluZzoK KyAgICAgIFRoZSBzaGFyZWQgbGlicmFyeSBzaG91bGQgcmVnaXN0ZXIgdGhlIHNoYXJlZCBt ZW1vcnkgYWxsb2NhdGlvbiBpbgorICAgICAgaXRzIDxmdW5jdGlvbj5fUEdfaW5pdDwvZnVu Y3Rpb24+IGZ1bmN0aW9uLiAgSGVyZSBpcyBhbiBleGFtcGxlOgogPHByb2dyYW1saXN0aW5n Pgotdm9pZCAqU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwg Ym9vbCAqZm91bmRQdHIpCi08L3Byb2dyYW1saXN0aW5nPgotICAgICAgSWYgdGhpcyBmdW5j dGlvbiBzZXRzIDxsaXRlcmFsPmZvdW5kUHRyPC9saXRlcmFsPiB0bwotICAgICAgPGxpdGVy YWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgY2FsbGVyIHNob3VsZCBwcm9jZWVkIHRvIGluaXRp YWxpemUgdGhlCi0gICAgICBjb250ZW50cyBvZiB0aGUgcmVzZXJ2ZWQgc2hhcmVkIG1lbW9y eS4gIElmIDxsaXRlcmFsPmZvdW5kUHRyPC9saXRlcmFsPgotICAgICAgaXMgc2V0IHRvIDxs aXRlcmFsPnRydWU8L2xpdGVyYWw+LCB0aGUgc2hhcmVkIG1lbW9yeSB3YXMgYWxyZWFkeQot ICAgICAgaW5pdGlhbGl6ZWQgYnkgYW5vdGhlciBiYWNrZW5kLCBhbmQgdGhlIGNhbGxlciBu ZWVkIG5vdCBpbml0aWFsaXplCi0gICAgICBmdXJ0aGVyLgotICAgICA8L3BhcmE+Cit0eXBl ZGVmIHN0cnVjdCBNeVNobWVtRGF0YSB7CisgICAgTFdMb2NrICAgICAgbG9jazsgICAgLyog cHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdyAqLwogCi0gICAgIDxwYXJhPgotICAgICAgVG8g YXZvaWQgcmFjZSBjb25kaXRpb25zLCBlYWNoIGJhY2tlbmQgc2hvdWxkIHVzZSB0aGUgTFdM b2NrCi0gICAgICA8ZnVuY3Rpb24+QWRkaW5TaG1lbUluaXRMb2NrPC9mdW5jdGlvbj4gd2hl biBpbml0aWFsaXppbmcgaXRzIGFsbG9jYXRpb24KLSAgICAgIG9mIHNoYXJlZCBtZW1vcnks IGFzIHNob3duIGhlcmU6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgbXlzdHJ1Y3QgKnB0 ciA9IE5VTEw7Ci1ib29sICAgICAgICBmb3VuZDsKKyAgICAuLi4gc2hhcmVkIG1lbW9yeSBj b250ZW50cyAuLi4KK30gTXlTaG1lbURhdGE7CisKK3N0YXRpYyBNeVNobWVtRGF0YSAqTXlT aG1lbTsgICAgLyogcG9pbnRlciB0byB0aGUgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkgKi8K Kworc3RhdGljIHZvaWQgbXlfc2htZW1faW5pdCh2b2lkICphcmcpOworCitzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIE15U2htZW1EZXNjID0geworICAgIC5uYW1lID0gIk15IHNobWVtIGFy ZWEiLAorICAgIC5zaXplID0gc2l6ZW9mKE15U2htZW1EYXRhKSwKKyAgICAuaW5pdF9mbiA9 IG15X3NobWVtX2luaXQsCisgICAgLnB0ciA9ICh2b2lkICoqKSAmYW1wO015U2htZW0sCit9 OwogCi1MV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0TG9jaywgTFdfRVhDTFVTSVZFKTsK LXB0ciA9IFNobWVtSW5pdFN0cnVjdCgibXkgc3RydWN0IG5hbWUiLCBzaXplLCAmYW1wO2Zv dW5kKTsKLWlmICghZm91bmQpCisvKgorICogTW9kdWxlIGxvYWQgY2FsbGJhY2sKKyAqLwor dm9pZAorX1BHX2luaXQodm9pZCkKIHsKLSAgICAuLi4gaW5pdGlhbGl6ZSBjb250ZW50cyBv ZiBzaGFyZWQgbWVtb3J5IC4uLgotICAgIHB0ci0+bG9ja3MgPSBHZXROYW1lZExXTG9ja1Ry YW5jaGUoIm15IHRyYW5jaGUgbmFtZSIpOworICAgIC8qCisgICAgICogSW4gb3JkZXIgdG8g Y3JlYXRlIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEsIHdlIGhhdmUgdG8gYmUgbG9hZGVkIHZp YQorICAgICAqIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcy4KKyAgICAgKi8KKyAgICBpZiAo IXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX2luX3Byb2dyZXNzKQorICAgICAg ICByZXR1cm47CisKKyAgICAvKiBSZWdpc3RlciBvdXIgc2hhcmVkIG1lbW9yeSBuZWVkcyAq LworICAgIFNobWVtUmVnaXN0ZXJTdHJ1Y3QoJmFtcDtNeVNobWVtRGVzYyk7CiB9Ci1MV0xv Y2tSZWxlYXNlKEFkZGluU2htZW1Jbml0TG9jayk7CisKKy8qIGNhbGxiYWNrIHRvIGluaXRp YWxpemUgdGhlIGNvbnRlbnRzIG9mIHRoZSBNeVNobWVtIGFyZWEgYXQgc3RhcnR1cCAqLwor c3RhdGljIHZvaWQKK215X3NobWVtX2luaXQodm9pZCAqYXJnKQoreworICAgIGludCAgICAg ICAgIHRyYW5jaGVfaWQ7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBsb2NrICovCisgICAg dHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgibXkgdHJhbmNoZSBuYW1lIik7Cisg ICAgTFdMb2NrSW5pdGlhbGl6ZSgmYW1wO015U2htZW0tPmxvY2ssIHRyYW5jaGVfaWQpOwor CisgICAgLi4uIGluaXRpYWxpemUgdGhlIHJlc3Qgb2YgTXlTaG1lbSBmaWVsZHMgLi4uCit9 CisKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hv b2s8L2xpdGVyYWw+IHByb3ZpZGVzIGEgY29udmVuaWVudCBwbGFjZSBmb3IgdGhlCi0gICAg ICBpbml0aWFsaXphdGlvbiBjb2RlLCBidXQgaXQgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVk IHRoYXQgYWxsIHN1Y2ggY29kZQotICAgICAgYmUgcGxhY2VkIGluIHRoaXMgaG9vay4gIE9u IFdpbmRvd3MgKGFuZCBhbnl3aGVyZSBlbHNlIHdoZXJlCi0gICAgICA8bGl0ZXJhbD5FWEVD X0JBQ0tFTkQ8L2xpdGVyYWw+IGlzIGRlZmluZWQpLCBlYWNoIGJhY2tlbmQgZXhlY3V0ZXMg dGhlCi0gICAgICByZWdpc3RlcmVkIDxsaXRlcmFsPnNobWVtX3N0YXJ0dXBfaG9vazwvbGl0 ZXJhbD4gc2hvcnRseSBhZnRlciBpdAotICAgICAgYXR0YWNoZXMgdG8gc2hhcmVkIG1lbW9y eSwgc28gYWRkLWlucyBzaG91bGQgc3RpbGwgYWNxdWlyZQotICAgICAgPGZ1bmN0aW9uPkFk ZGluU2htZW1Jbml0TG9jazwvZnVuY3Rpb24+IHdpdGhpbiB0aGlzIGhvb2ssIGFzIHNob3du IGluIHRoZQotICAgICAgZXhhbXBsZSBhYm92ZS4gIE9uIG90aGVyIHBsYXRmb3Jtcywgb25s eSB0aGUgcG9zdG1hc3RlciBwcm9jZXNzIGV4ZWN1dGVzCi0gICAgICB0aGUgPGxpdGVyYWw+ c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiwgYW5kIGVhY2ggYmFja2VuZCBhdXRvbWF0 aWNhbGx5Ci0gICAgICBpbmhlcml0cyB0aGUgcG9pbnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4K KyAgICAgIFRoZSA8ZnVuY3Rpb24+U2htZW1SZWdpc3RlclN0cnVjdCgpPC9mdW5jdGlvbj4g Y2FsbCBkb2Vzbid0IGltbWVkaWF0ZWx5CisgICAgICBhbGxvY2F0ZSBvciBpbml0aWFsaXpl IHRoZSBtZW1vcnksIGl0IG1lcmVseSByZWdpc3RlcnMgdGhlIHNwYWNlIHRvIGJlCisgICAg ICBhbGxvY2F0ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAgc2VxdWVuY2UuICBJZiB0aGUgc2l6 ZSBvZiB0aGUgYWxsb2NhdGlvbgorICAgICAgZGVwZW5kcyBvbiA8dmFybmFtZT5NYXhCYWNr ZW5kczwvdmFybmFtZT4gb3Igb3RoZXIgdmFyaWFibGVzIHRoYXQgYXJlCisgICAgICBub3Qg eWV0IGluaXRpYWxpemVkIHdoZW4gPGZ1bmN0aW9uPl9QR19pbml0KCk8L2Z1bmN0aW9uPiBp cyBjYWxsZWQsIHRoZQorICAgICAgc2l6ZSBjYW4gc3RpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIg YnkgcmVnaXN0ZXJpbmcgYQorICAgICAgPGxpdGVyYWw+c2htZW1fcmVxdWVzdF9ob29rPC9s aXRlcmFsPiBhbmQgY2hhbmdpbmcgdGhlIGRlc2NyaXB0b3IgdGhlcmUuCisgICAgICBXaGVu IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCB0aGUgcmVnaXN0ZXJlZAorICAgICAgPGZ1bmN0 aW9uPmluaXRfZm48L2Z1bmN0aW9uPiBjYWxsYmFjayBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6 ZSBpdC4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSA8ZnVuY3Rpb24+ aW5pdF9mbigpPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgbm9ybWFsbHkgY2FsbGVkIGF0Cisg ICAgICBwb3N0bWFzdGVyIHN0YXJ0dXAsIHdoZW4gbm8gb3RoZXIgcHJvY2Vzc2VzIGFyZSBy dW5uaW5nIHlldCBhbmQgbm8KKyAgICAgIGxvY2tpbmcgaXMgcmVxdWlyZWQuICBIb3dldmVy LCBpZiBhIHNoYXJlZCBtZW1vcnkgYXJlYSBpcyByZWdpc3RlcmVkCisgICAgICBhZnRlciBz eXN0ZW0gc3RhcnQsIGUuZy4gaW4gYW4gZXh0ZW5zaW9uIHRoYXQgaXMgbm90IGluCisgICAg ICA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+PGluZGV4 dGVybT48cHJpbWFyeT5zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM8L3ByaW1hcnk+PC9pbmRl eHRlcm0+LAorICAgICAgPGZ1bmN0aW9uPlNobWVtUmVnaXN0ZXJTdHJ1Y3QoKTwvZnVuY3Rp b24+IHdpbGwgaW1tZWRpYXRlbHkgY2FsbAorICAgICAgdGhlIDxmdW5jdGlvbj5pbml0X2Zu PC9mdW5jdGlvbj4gY2FsbGJhY2suICBJbiB0aGF0IGNhc2UsIGl0IGhvbGRzIGEKKyAgICAg IGxvY2sgaW50ZXJuYWxseSB0aGF0IHByZXZlbnRzIGNvbmN1cnJlbnQgc2htZW0gYWxsb2Nh dGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBPbiBXaW5kb3dzLCB0 aGUgPGZ1bmN0aW9uPmF0dGFjaF9mbjwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIGFkZGl0aW9u YWxseQorICAgICAgY2FsbGVkIGF0IGV2ZXJ5IGJhY2tlbmQgc3RhcnR1cC4gIEl0IGNhbiBi ZSB1c2VkIGZvciBpbml0aWFsaXppbmcKKyAgICAgIGFkZGl0aW9uYWwgcGVyLWJhY2tlbmQg c3RhdGUgcmVsYXRlZCB0byB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIHRoYXQgaXMKKyAgICAg IGluaGVyaXRlZCB2aWEgPGZ1bmN0aW9uPmZvcmsoKTwvZnVuY3Rpb24+IG9uIG90aGVyIHN5 c3RlbXMuICBPbiBvdGhlcgorICAgICAgcGxhdGZvcm1zLCB0aGUgPGZ1bmN0aW9uPmF0dGFj aF9mbjwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkCisgICAgICBmb3Igc3Ry dWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIGFmdGVyIHN5c3RlbSBzdGFydHVwLgogICAgICA8 L3BhcmE+Ci0KICAgICAgPHBhcmE+Ci0gICAgICBBbiBleGFtcGxlIG9mIGEgPGxpdGVyYWw+ c2htZW1fcmVxdWVzdF9ob29rPC9saXRlcmFsPiBhbmQKLSAgICAgIDxsaXRlcmFsPnNobWVt X3N0YXJ0dXBfaG9vazwvbGl0ZXJhbD4gY2FuIGJlIGZvdW5kIGluCisgICAgICBBbiBleGFt cGxlIG9mIGFsbG9jYXRpbmcgc2hhcmVkIG1lbW9yeSBjYW4gYmUgZm91bmQgaW4KICAgICAg IDxmaWxlbmFtZT5jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVu dHMuYzwvZmlsZW5hbWU+IGluCiAgICAgICB0aGUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPiBzb3VyY2UgdHJlZS4KICAgICAgPC9wYXJhPgpAQCAtMzY5MSw4ICsz NzE5LDcgQEAgTFdMb2NrUmVsZWFzZShBZGRpblNobWVtSW5pdExvY2spOwogCiAgICAgIDxw YXJhPgogICAgICAgVGhlcmUgaXMgYW5vdGhlciwgbW9yZSBmbGV4aWJsZSBtZXRob2Qgb2Yg cmVzZXJ2aW5nIHNoYXJlZCBtZW1vcnkgdGhhdAotICAgICAgY2FuIGJlIGRvbmUgYWZ0ZXIg c2VydmVyIHN0YXJ0dXAgYW5kIG91dHNpZGUgYQotICAgICAgPGxpdGVyYWw+c2htZW1fcmVx dWVzdF9ob29rPC9saXRlcmFsPi4gIFRvIGRvIHNvLCBlYWNoIGJhY2tlbmQgdGhhdCB3aWxs CisgICAgICBjYW4gYmUgZG9uZSBhZnRlciBzZXJ2ZXIgc3RhcnR1cC4gIFRvIGRvIHNvLCBl YWNoIGJhY2tlbmQgdGhhdCB3aWxsCiAgICAgICB1c2UgdGhlIHNoYXJlZCBtZW1vcnkgc2hv dWxkIG9idGFpbiBhIHBvaW50ZXIgdG8gaXQgYnkgY2FsbGluZzoKIDxwcm9ncmFtbGlzdGlu Zz4KIHZvaWQgKkdldE5hbWVkRFNNU2VnbWVudChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qg c2l6ZSwKQEAgLTM3MTEsMTAgKzM3MzgsNyBAQCB2b2lkICpHZXROYW1lZERTTVNlZ21lbnQo Y29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCiAgICAgIDwvcGFyYT4KIAogICAgICA8 cGFyYT4KLSAgICAgIFVubGlrZSBzaGFyZWQgbWVtb3J5IHJlc2VydmVkIGF0IHNlcnZlciBz dGFydHVwLCB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAgICBhY3F1aXJlIDxmdW5jdGlvbj5B ZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiBvciBvdGhlcndpc2UgdGFrZSBhY3Rpb24K LSAgICAgIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlc2VydmluZyBzaGFyZWQg bWVtb3J5IHdpdGgKLSAgICAgIDxmdW5jdGlvbj5HZXROYW1lZERTTVNlZ21lbnQ8L2Z1bmN0 aW9uPi4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IG9ubHkKKyAgICAgIDxmdW5jdGlv bj5HZXROYW1lZERTTVNlZ21lbnQ8L2Z1bmN0aW9uPiBlbnN1cmVzIHRoYXQgb25seQogICAg ICAgb25lIGJhY2tlbmQgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgc2VnbWVudCBh bmQgdGhhdCBhbGwgb3RoZXIKICAgICAgIGJhY2tlbmRzIHJlY2VpdmUgYSBwb2ludGVyIHRv IHRoZSBmdWxseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCiAgICAgICBzZWdtZW50Lgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2Jh Y2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IDY4YTQyZGUwODg5Li5mNWFlMGNm YTY0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisr KyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtMzcwLDYgKzM3MCw4 IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgY2hl Y2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tzKCk7CiAKKwlSZWdpc3RlclNo bWVtU3RydWN0cygpOworCiAJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tl bmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwppbmRleCAz MDM1Nzg0NTcyOS4uZmVjYWU4MjdlNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xh dW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlv bi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL2JhY2tlbmRfc3RhcnR1 cC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC02NzcsNyArNjc4LDEwIEBA IFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkvKiBSZXN0 b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAlpZiAoVXNlZFNobWVtU2Vn QWRkciAhPSBOVUxMKQorCXsKIAkJSW5pdFNobWVtQWxsb2NhdG9yKFVzZWRTaG1lbVNlZ0Fk ZHIpOworCQlSZWdpc3RlclNobWVtU3RydWN0cygpOworCX0KIAogCS8qCiAJICogUnVuIHRo ZSBhcHByb3ByaWF0ZSBNYWluIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1h c3Rlci5jCmluZGV4IDNmYWM0NmM0MDJiLi5hM2JlM2JiZTNiNiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTk1OCw2ICs5NTgsOSBAQCBQb3N0bWFzdGVyTWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCUluaXRpYWxpemVGYXN0UGF0aExv Y2tzKCk7CiAKKwkvKiBSZWdpc3RlciB0aGUgc2hhcmVkIG1lbW9yeSBuZWVkcyBvZiBhbGwg Y29yZSBzdWJzeXN0ZW1zLiAqLworCVJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCk7CisKIAkvKgog CSAqIEdpdmUgcHJlbG9hZGVkIGxpYnJhcmllcyBhIGNoYW5jZSB0byByZXF1ZXN0IGFkZGl0 aW9uYWwgc2hhcmVkIG1lbW9yeS4KIAkgKi8KQEAgLTMyMzUsNyArMzIzOCwxMyBAQCBQb3N0 bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCS8qIHJlLXJlYWQgY29udHJvbCBmaWxlIGlu dG8gbG9jYWwgbWVtb3J5ICovCiAJCUxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKHRydWUpOwog Ci0JCS8qIHJlLWNyZWF0ZSBzaGFyZWQgbWVtb3J5IGFuZCBzZW1hcGhvcmVzICovCisJCS8q CisJCSAqIFJlLWluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBhbmQgc2VtYXBob3Jlcy4gIE5v dGU6IFdlIGRvbid0IGNhbGwKKwkJICogUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKSBoZXJlLCB3 ZSBrZWVwIHRoZSBvbGQgcmVnaXN0cmF0aW9ucy4gIEluCisJCSAqIG9yZGVyIHRvIHJlLXJl Z2lzdGVyIHN0cnVjdHMgaW4gZXh0ZW5zaW9ucywgd2UnZCBuZWVkIHRvIHJlbG9hZAorCQkg KiBzaGFyZWQgcHJlbG9hZCBsaWJyYXJpZXMsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIHRo YXQuCisJCSAqLworCQlSZXNldFNobWVtQWxsb2NhdG9yKCk7CiAJCUNyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXMoKTsKIAogCQlVcGRhdGVQTVN0YXRlKFBNX1NUQVJUVVApOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDNkM2YxNTM4MDliLi40MDVjNjk2NTVmMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtOTksMTAgKzk5LDEyIEBAIENhbGN1bGF0 ZVNobWVtU2l6ZSh2b2lkKQogCSAqIGR1cmluZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gcGhh c2UuCiAJICovCiAJc2l6ZSA9IDEwMDAwMDsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFz aF9lc3RpbWF0ZV9zaXplKFNITUVNX0lOREVYX1NJWkUsCi0JCQkJCQkJCQkJCSBzaXplb2Yo U2htZW1JbmRleEVudCkpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1SZWdpc3Rl cmVkU2l6ZSgpKTsKKwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBkc21fZXN0aW1hdGVfc2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0cnlTaG1lbVNpemUoKSk7 CisKKwkvKiBsZWdhY3kgc3Vic3lzdGVtcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBC dWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2Nr TWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRl TG9ja1NobWVtU2l6ZSgpKTsKQEAgLTIxOCw2ICsyMjAsMTAgQEAgQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCSAqLwogCUluaXRTaG1lbUFsbG9jYXRvcihzZWdo ZHIpOwogCisJLyogUmVzZXJ2ZSBzcGFjZSBmb3Igc2VtYXBob3Jlcy4gKi8KKwlpZiAoIUlz VW5kZXJQb3N0bWFzdGVyKQorCQlQR1Jlc2VydmVTZW1hcGhvcmVzKFByb2NHbG9iYWxTZW1h cygpKTsKKwogCS8qIEluaXRpYWxpemUgc3Vic3lzdGVtcyAqLwogCUNyZWF0ZU9yQXR0YWNo U2htZW1TdHJ1Y3RzKCk7CiAKQEAgLTIzMSw2ICsyMzcsMjIgQEAgQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCQlzaG1lbV9zdGFydHVwX2hvb2soKTsKIH0KIAor LyoKKyAqIEVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHZhcmlvdXMgc3Vic3lzdGVtcywgZ2l2 aW5nIHRoZW0gYSBjaGFuY2UgdG8KKyAqIHJlZ2lzdGVyIHRoZWlyIHNoYXJlZCBtZW1vcnkg bmVlZHMgYmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaXMKKyAqIGFsbG9jYXRl ZC4KKyAqLwordm9pZAorUmVnaXN0ZXJTaG1lbVN0cnVjdHModm9pZCkKK3sKKwkvKgorCSAq IFRPRE86IE5vdCB1c2VkIGluIGFueSBidWlsdC1pbiBzdWJzeXN0ZW1zIHlldC4gIEluIHRo ZSBmdXR1cmUsIG1vc3Qgb2YKKwkgKiB0aGUgY2FsbHMgKlNobWVtSW5pdCgpIGNhbGxzIGlu IENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCksIGFuZAorCSAqICpTaG1lbVNpemUoKSBj YWxscyBpbiBDYWxjdWxhdGVTaG1lbVNpemUoKSB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNhbGxz CisJICogaW50byB0aGUgc3Vic3lzdGVtcyBmcm9tIGhlcmUuCisJICovCit9CisKIC8qCiAg KiBJbml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVpciBkYXRh IHN0cnVjdHVyZXMgaW4KICAqIHNoYXJlZCBtZW1vcnkuCkBAIC0yNDksMTAgKzI3MSwyNiBA QCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiBzdGF0aWMgdm9pZAog Q3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIHsKLQkvKgotCSAqIE5vdyBpbml0 aWFsaXplIExXTG9ja3MsIHdoaWNoIGRvIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbi4KLQkg Ki8KLQlDcmVhdGVMV0xvY2tzKCk7CisjaWZkZWYgRVhFQ19CQUNLRU5ECisJaWYgKElzVW5k ZXJQb3N0bWFzdGVyKQorCXsKKwkJLyoKKwkJICogU2htZW1BdHRhY2hSZWdpc3RlcmVkKCkg dXNlcyBMV0xvY2tzLiBGb3J0dW5hdGVseSwgTFdMb2NrcyBkb24ndAorCQkgKiBuZWVkIGFu eSBzcGVjaWFsIGF0dGFjaGluZy4KKwkJICovCisJCVNobWVtQXR0YWNoUmVnaXN0ZXJlZCgp OworCX0KKwllbHNlCisjZW5kaWYKKwl7CisJCS8qCisJCSAqIEluaXRpYWxpemUgTFdMb2Nr cyBmaXJzdCwgaW4gY2FzZSBhbnkgb2YgdGhlIHNobWVtIGluaXQgZnVuY3Rpb24KKwkJICog dXNlIExXTG9ja3MuICAoTm90aGluZyBlbHNlIGNhbiBiZSBydW5uaW5nIGR1cmluZyBzdGFy dHVwLCBzbyB0aGV5CisJCSAqIGRvbid0IG5lZWQgdG8gZG8gYW55IGxvY2tpbmcgeWV0LCBi dXQgd2UgbmV2ZXJ0aGVsZXNzIGFsbG93IGl0LikKKwkJICovCisJCUNyZWF0ZUxXTG9ja3Mo KTsKKwkJU2htZW1Jbml0UmVnaXN0ZXJlZCgpOworCX0KIAogCWRzbV9zaG1lbV9pbml0KCk7 CiAJRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmlu ZGV4IGRjZTM1NWU2NjgzLi5kNzAyZGI3MGYwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bS5jCkBAIC0xOSw0OCArMTksMTAxIEBACiAgKiBtZXRob2RzKS4gIFRoZSByb3V0aW5lcyBp biB0aGlzIGZpbGUgYXJlIHVzZWQgZm9yIGFsbG9jYXRpbmcgYW5kCiAgKiBiaW5kaW5nIHRv IHNoYXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzLgogICoKLSAqIE5PVEVTOgotICoJCShh KSBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVjdHVy ZXMKLSAqCWF2YWlsYWJsZSB0byBQT1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzLCBx dWV1ZXMgYW5kIGhhc2gKLSAqCXRhYmxlcy4gIEZpeGVkLXNpemUgc3RydWN0dXJlcyBjb250 YWluIHRoaW5ncyBsaWtlIGdsb2JhbCB2YXJpYWJsZXMKLSAqCWZvciBhIG1vZHVsZSBhbmQg c2hvdWxkIG5ldmVyIGJlIGFsbG9jYXRlZCBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeQotICoJ aW5pdGlhbGl6YXRpb24gcGhhc2UuICBIYXNoIHRhYmxlcyBoYXZlIGEgZml4ZWQgbWF4aW11 bSBzaXplLCBidXQKLSAqCXRoZWlyIGFjdHVhbCBzaXplIGNhbiB2YXJ5IGR5bmFtaWNhbGx5 LiAgV2hlbiBlbnRyaWVzIGFyZSBhZGRlZAotICoJdG8gdGhlIHRhYmxlLCBtb3JlIHNwYWNl IGlzIGFsbG9jYXRlZC4gIFF1ZXVlcyBsaW5rIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCBo YXZlIGJlZW4gYWxsb2NhdGVkIGVpdGhlciB3aXRoaW4gZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVz IG9yIGFzIGhhc2gKLSAqCWJ1Y2tldHMuICBFYWNoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBo YXMgYSBzdHJpbmcgbmFtZSB0byBpZGVudGlmeQotICoJaXQgKGFzc2lnbmVkIGluIHRoZSBt b2R1bGUgdGhhdCBkZWNsYXJlcyBpdCkuCi0gKgotICoJCShiKSBEdXJpbmcgaW5pdGlhbGl6 YXRpb24sIGVhY2ggbW9kdWxlIGxvb2tzIGZvciBpdHMKLSAqCXNoYXJlZCBkYXRhIHN0cnVj dHVyZXMgaW4gYSBoYXNoIHRhYmxlIGNhbGxlZCB0aGUgIlNobWVtIEluZGV4Ii4KLSAqCUlm IHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBub3QgcHJlc2VudCwgdGhlIGNhbGxlciBjYW4gYWxs b2NhdGUKLSAqCWEgbmV3IG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoZSBkYXRhIHN0 cnVjdHVyZSBpcyBwcmVzZW50LAotICoJdGhlIGNhbGxlciAiYXR0YWNoZXMiIHRvIHRoZSBz dHJ1Y3R1cmUgYnkgaW5pdGlhbGl6aW5nIGEgcG9pbnRlcgotICoJaW4gdGhlIGxvY2FsIGFk ZHJlc3Mgc3BhY2UuCi0gKgkJVGhlIHNobWVtIGluZGV4IGhhcyB0d28gcHVycG9zZXM6IGZp cnN0LCBpdCBnaXZlcyB1cwotICoJYSBzaW1wbGUgbW9kZWwgb2YgaG93IHRoZSB3b3JsZCBs b29rcyB3aGVuIGEgYmFja2VuZCBwcm9jZXNzCi0gKglpbml0aWFsaXplcy4gIElmIHNvbWV0 aGluZyBpcyBwcmVzZW50IGluIHRoZSBzaG1lbSBpbmRleCwKLSAqCWl0IGlzIGluaXRpYWxp emVkLiAgSWYgaXQgaXMgbm90LCBpdCBpcyB1bmluaXRpYWxpemVkLiAgU2Vjb25kLAotICoJ dGhlIHNobWVtIGluZGV4IGFsbG93cyB1cyB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IG9u IGRlbWFuZAotICoJaW5zdGVhZCBvZiB0cnlpbmcgdG8gcHJlYWxsb2NhdGUgc3RydWN0dXJl cyBhbmQgaGFyZC13aXJlIHRoZQotICoJc2l6ZXMgYW5kIGxvY2F0aW9ucyBpbiBoZWFkZXIg ZmlsZXMuICBJZiB5b3UgYXJlIHVzaW5nIGEgbG90Ci0gKglvZiBzaGFyZWQgbWVtb3J5IGlu IGEgbG90IG9mIGRpZmZlcmVudCBwbGFjZXMgKGFuZCBjaGFuZ2luZwotICoJdGhpbmdzIGR1 cmluZyBkZXZlbG9wbWVudCksIHRoaXMgaXMgaW1wb3J0YW50LgotICoKLSAqCQkoYykgSW4g c3RhbmRhcmQgVW5peC1pc2ggZW52aXJvbm1lbnRzLCBpbmRpdmlkdWFsIGJhY2tlbmRzIGRv IG5vdAotICoJbmVlZCB0byByZS1lc3RhYmxpc2ggdGhlaXIgbG9jYWwgcG9pbnRlcnMgaW50 byBzaGFyZWQgbWVtb3J5LCBiZWNhdXNlCi0gKgl0aGV5IGluaGVyaXQgY29ycmVjdCB2YWx1 ZXMgb2YgdGhvc2UgdmFyaWFibGVzIHZpYSBmb3JrKCkgZnJvbSB0aGUKLSAqCXBvc3RtYXN0 ZXIuICBIb3dldmVyLCB0aGlzIGRvZXMgbm90IHdvcmsgaW4gdGhlIEVYRUNfQkFDS0VORCBj YXNlLgotICoJSW4gcG9ydHMgdXNpbmcgRVhFQ19CQUNLRU5ELCBuZXcgYmFja2VuZHMgaGF2 ZSB0byBzZXQgdXAgdGhlaXIgbG9jYWwKLSAqCXBvaW50ZXJzIHVzaW5nIHRoZSBtZXRob2Qg ZGVzY3JpYmVkIGluIChiKSBhYm92ZS4KLSAqCi0gKgkJKGQpIG1lbW9yeSBhbGxvY2F0aW9u IG1vZGVsOiBzaGFyZWQgbWVtb3J5IGNhbiBuZXZlciBiZQotICoJZnJlZWQsIG9uY2UgYWxs b2NhdGVkLiAgIEVhY2ggaGFzaCB0YWJsZSBoYXMgaXRzIG93biBmcmVlIGxpc3QsCi0gKglz byBoYXNoIGJ1Y2tldHMgY2FuIGJlIHJldXNlZCB3aGVuIGFuIGl0ZW0gaXMgZGVsZXRlZC4g IEhvd2V2ZXIsCi0gKglpZiBvbmUgaGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0 aGVuIHNocmlua3MsIGl0cyBzcGFjZQotICoJY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8g b3RoZXIgdGFibGVzLiAgV2UgY291bGQgYnVpbGQgYSBzaW1wbGUKLSAqCWhhc2ggYnVja2V0 IGdhcmJhZ2UgY29sbGVjdG9yIGlmIG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zCi0g Kgl1bm5lY2Vzc2FyeS4KKyAqIFR3byBraW5kcyBvZiBzaGFyZWQgbWVtb3J5IGRhdGEgc3Ry dWN0dXJlcyBhcmUgaGFuZGxlZCBieSB0aGlzIG1vZHVsZToKKyAqIGZpeGVkLXNpemUgc3Ry dWN0dXJlcyBhbmQgaGFzaCB0YWJsZXMuICBGaXhlZC1zaXplIHN0cnVjdHVyZXMgY29udGFp bgorICogdGhpbmdzIGxpa2UgdmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVuIGFsbCBiYWNrZW5k IHByb2Nlc3Nlcy4gIEhhc2ggdGFibGVzCisgKiBoYXZlIGEgZml4ZWQgbWF4aW11bSBzaXpl LCBidXQgdGhlaXIgYWN0dWFsIHNpemUgY2FuIHZhcnkgZHluYW1pY2FsbHkuCisgKiBXaGVu IGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZSB0YWJsZSwgbW9yZSBzcGFjZSBpcyBhbGxvY2F0 ZWQuICBFYWNoIHNoYXJlZAorICogZGF0YSBzdHJ1Y3R1cmUgYW5kIGhhc2ggaGFzIGEgc3Ry aW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQsIHNwZWNpZmllZCBpbiB0aGUKKyAqIGRlc2NyaXB0 b3Igd2hlbiBpdHMgcmVnaXN0ZXJlZC4KKyAqCisgKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHMg YW5kIGhhc2ggdGFibGVzIHNob3VsZCBub3QgYmUgYWxsb2NhdGVkIGFmdGVyCisgKiBwb3N0 bWFzdGVyIHN0YXJ0dXAsIGFsdGhvdWdoIHdlIGRvIGFsbG93IHNtYWxsIGFsbG9jYXRpb25z IGxhdGVyIGZvciB0aGUKKyAqIGJlbmVmaXQgb2YgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBs b2FkZWQgYWZ0ZXIgc3RhcnR1cC4gIERlc3BpdGUgdGhhdAorICogYWxsb3dhbmNlLCBleHRl bnNpb25zIHRoYXQgbmVlZCBzaGFyZWQgbWVtb3J5IHNob3VsZCBiZSBhZGRlZCBpbgorICog c2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLCBiZWNhdXNlIHRoZSBhbGxvd2FuY2UgaXMgcXVp dGUgc21hbGwgYW5kIHRoZXJlIGlzCisgKiBubyBndWFyYW50ZWUgdGhhdCBhbnkgbWVtb3J5 IGlzIGF2YWlsYWJsZSBhZnRlciBzdGFydHVwLgorICoKKyAqIE5vd2FkYXlzLCB0aGVyZSBp cyBhbHNvIHRoaXJkIHdheSB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGNhbGxlZCBEeW5h bWljCisgKiBTaGFyZWQgTWVtb3J5LiAgU2VlIGRzbS5jIGZvciB0aGF0IGZhY2lsaXR5LiAg T25lIGJpZyBkaWZmZXJlbmNlIGJldHdlZW4KKyAqIHRyYWRpdGlvbmFsIHNoYXJlZCBtZW1v cnkgaGFuZGxlZCBieSBzaG1lbS5jIGFuZCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaXMKKyAq IHRoYXQgdHJhZGl0aW9uYWwgc2hhcmVkIG1lbW9yeSBhcmVhcyBhcmUgbWFwcGVkIHRvIHRo ZSBzYW1lIGFkZHJlc3MgaW4gYWxsCisgKiBwcm9jZXNzZXMsIHNvIHlvdSBjYW4gdXNlIG5v cm1hbCBwb2ludGVycyBpbiBzaGFyZWQgbWVtb3J5IHN0cnVjdHMuICBXaXRoCisgKiBEeW5h bWljIFNoYXJlZCBNZW1vcnksIHlvdSBtdXN0IHVzZSBvZmZzZXRzIG9yIERTQSBwb2ludGVy cyBpbnN0ZWFkLgorICoKKyAqIFNoYXJlZCBtZW1vcnkgbWFuYWdlZCBieSBzaG1lbS5jIGNh biBuZXZlciBiZSBmcmVlZCwgb25jZSBhbGxvY2F0ZWQuICBFYWNoCisgKiBoYXNoIHRhYmxl IGhhcyBpdHMgb3duIGZyZWUgbGlzdCwgc28gaGFzaCBidWNrZXRzIGNhbiBiZSByZXVzZWQg d2hlbiBhbgorICogaXRlbSBpcyBkZWxldGVkLiAgSG93ZXZlciwgaWYgb25lIGhhc2ggdGFi bGUgZ3Jvd3MgdmVyeSBsYXJnZSBhbmQgdGhlbgorICogc2hyaW5rcywgaXRzIHNwYWNlIGNh bm5vdCBiZSByZWRpc3RyaWJ1dGVkIHRvIG90aGVyIHRhYmxlcy4gIFdlIGNvdWxkIGJ1aWxk CisgKiBhIHNpbXBsZSBoYXNoIGJ1Y2tldCBnYXJiYWdlIGNvbGxlY3RvciBpZiBuZWVkIGJl LiAgUmlnaHQgbm93LCBpdCBzZWVtcworICogdW5uZWNlc3NhcnkuCisgKgorICogVXNhZ2UK KyAqIC0tLS0tCisgKgorICogVG8gYWxsb2NhdGUgYSBzaGFyZWQgbWVtb3J5IGFyZWEsIGZp bGwgaW4gdGhlIG5hbWUsIHNpemUsIGFuZCBhbnkgb3RoZXIKKyAqIG9wdGlvbnMgaW4gU2ht ZW1TdHJ1Y3REZXNjLCBhbmQgY2FsbCBTaG1lbVJlZ2lzdGVyU3RydWN0KCkuICBMZWF2ZSBh bnkKKyAqIHVudXNlZCBmaWVsZHMgYXMgemVyb3MuCisgKgorICoJdHlwZWRlZiBzdHJ1Y3Qg TXlTaG1lbURhdGEgeworICoJCS4uLgorICoJfSBNeVNobWVtRGF0YTsKKyAqCisgKglzdGF0 aWMgTXlTaG1lbURhdGEgKk15U2htZW07CisgKgorICoJc3RhdGljIHZvaWQgbXlfc2htZW1f aW5pdCh2b2lkICphcmcpOworICoKKyAqCXN0YXRpYyBTaG1lbVN0cnVjdERlc2MgTXlTaG1l bURlc2MgPSB7CisgKgkJLm5hbWUgPSAiTXkgc2htZW0gYXJlYSIsCisgKgkJLnNpemUgPSBz aXplb2YoTXlTaG1lbURhdGEpLAorICoJCS5pbml0X2ZuID0gbXlfc2htZW1faW5pdCwKKyAq CQkucHRyID0gJk15U2htZW0sCisgKgl9OworICoKKyAqIEluIHRoZSBzdWJzeXN0ZW0ncyBp bml0aWFsaXphdGlvbiBjb2RlIChvciBpbiBfUEdfaW5pdCgpIGluIGV4dGVuc2lvbnMpLAor ICogY2FsbCBTaG1lbVJlZ2lzdGVyU3RydWN0KCZNeVNobWVtRGVzYykuCisgKgorICogTGlm ZWN5Y2xlCisgKiAtLS0tLS0tLS0KKyAqCisgKiBSZWdpc3RlclNobWVtU3RydWN0cygpIGlz IGNhbGxlZCBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAgYmVmb3JlIGNhbGN1bGF0aW5nCisgKiB0 aGUgc2l6ZSBvZiB0aGUgZ2xvYmFsIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gIE9uY2UgYWxs IHRoZSByZWdpc3RyYXRpb25zCisgKiBoYXZlIGJlZW4gZG9uZSwgcG9zdG1hc3RlciBjYWxs cyBTaG1lbVJlZ2lzdGVyZWRTaXplKCkgdG8gYWRkIHVwIHRoZSBzaXplcworICogb2YgYWxs IHRoZSByZWdpc3RlcmVkIGFyZWFzLiAgQWZ0ZXIgYWxsb2NhdGluZyB0aGUgc2hhcmVkIG1l bW9yeSBzZWdtZW50LAorICogcG9zdG1hc3RlciBjYWxscyBTaG1lbUluaXRSZWdpc3RlcmVk KCksIHdoaWNoIGNhbGxzIHRoZSBpbml0X2ZuIGNhbGxiYWNrLAorICogaWYgYW55LCBvZiBl YWNoIHJlZ2lzdGVyZWQgYXJlYSwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIHJlZ2lz dGVyZWQuCisgKgorICogSW4gc3RhbmRhcmQgVW5peC1pc2ggZW52aXJvbm1lbnRzLCBpbmRp dmlkdWFsIGJhY2tlbmRzIGRvIG5vdCBuZWVkIHRvCisgKiByZS1lc3RhYmxpc2ggdGhlaXIg bG9jYWwgcG9pbnRlcnMgaW50byBzaGFyZWQgbWVtb3J5LCBiZWNhdXNlIHRoZXkgaW5oZXJp dAorICogY29ycmVjdCB2YWx1ZXMgb2YgdGhvc2UgdmFyaWFibGVzIHZpYSBmb3JrKCkgZnJv bSB0aGUgcG9zdG1hc3Rlci4gIEhvd2V2ZXIsCisgKiB0aGlzIGRvZXMgbm90IHdvcmsgaW4g dGhlIEVYRUNfQkFDS0VORCBjYXNlLiAgSW4gcG9ydHMgdXNpbmcgRVhFQ19CQUNLRU5ELAor ICogYmFja2VuZCBzdGFydHVwIGFsc28gY2FsbHMgUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKSwg Zm9sbG93ZWQgYnkKKyAqIFNobWVtQXR0YWNoUmVnaXN0ZXJlZCgpLCB3aGljaCByZS1lc3Rh Ymxpc2hlcyB0aGUgcG9pbnRlciB2YXJpYWJsZXMKKyAqICgqU2htZW1TdHJ1Y3REZXNjLT5w dHIpLCBhbmQgY2FsbHMgdGhlIGF0dGFjaF9mbiBjYWxsYmFjaywgaWYgYW55LCBmb3IKKyAq IGFkZGl0aW9uYWwgcGVyLWJhY2tlbmQgc2V0dXAuCisgKgorICogTGVnYWN5IFNobWVtSW5p dFN0cnVjdCgpL1NobWVtSW5pdEhhc2goKSBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU2htZW1Jbml0 U3RydWN0KCkvU2htZW1Jbml0SGFzaCgpIGlzIGFub3RoZXIgd2F5IG9mIHJlZ2lzdHJpbmcg c2htZW0gYXJlYXMuCisgKiBJdCBwcmUtZGF0ZXMgdGhlIFNobWVtUmVnaXN0ZXJTdHJ1Y3Qo KS9TaG1lbVJlZ2lzdGVySGFzaCgpIGZ1bmN0aW9ucywgYW5kCisgKiBzaG91bGQgbm90IGJl IHVzZWQgaW4gbmV3IGNvZGUsIGJ1dCBhcyBvZiB0aGlzIHdyaXRpbmcgaXQgaXMgc3RpbGwg d2lkZWx5CisgKiB1c2VkIGluIGV4dGVuc2lvbnMuCisgKgorICogVG8gYWxsb2NhdGUgYSBz aG1lbSBhcmVhIHdpdGggU2htZW1Jbml0U3RydWN0KCksIHlvdSBuZWVkIHRvIHNlcGFyYXRl bHkKKyAqIHJlZ2lzdGVyIHRoZSBzaXplIG5lZWRlZCBmb3IgdGhlIGFyZWEgYnkgY2FsbGlu ZyBSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKCkKKyAqIGZyb20gdGhlIGV4dGVuc2lvbidzIHNo bWVtX3JlcXVlc3RfaG9vaywgYW5kIGFsbG9jYXRlIHRoZSBhcmVhIGJ5IGNhbGxpbmcKKyAq IFNobWVtSW5pdFN0cnVjdCgpIGZyb20gdGhlIGV4dGVuc2lvbidzIHNobWVtX3N0YXJ0dXBf aG9vay4gIFRoZXJlIGFyZSBubworICogaW5pdC9hdHRhY2ggY2FsbGJhY2tzLiAgSW5zdGVh ZCwgdGhlIGNhbGxlciBvZiBTaG1lbUluaXRTdHJ1Y3QoKSBtdXN0IGNoZWNrCisgKiB0aGUg cmV0dXJuIHN0YXR1cyBvZiBTaG1lbUluaXRTdHJ1Y3QoKSBhbmQgaW5pdGlhbGl6ZSB0aGUg c3RydWN0IGlmIGl0IHdhcworICogbm90IHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQuCisgKgor ICogQ2FsbGluZyBTaG1lbUFsbG9jKCkgZGlyZWN0bHkKKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogVGhlcmUncyBhIG1vcmUgbG93LWxldmVsIHdheSBvZiBh bGxvY2F0aW5nIHNoYXJlZCBtZW1vcnkgdG9vOiB5b3UgY2FuIGNhbGwKKyAqIFNobWVtQWxs b2MoKSBkaXJlY3RseS4gIEl0J3MgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGhpZ2hlciBsZXZl bCBtZWNoYW5pc21zLAorICogYW5kIHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIGNhbGxlZCBk aXJlY3RseS4KICAqLwogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKQEAgLTc5LDYgKzEzMiwy OCBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVw bGVzdG9yZS5oIgogCisvKgorICogQXJyYXkgb2YgcmVnaXN0ZXJlZCBzaGFyZWQgbWVtb3J5 IGFyZWFzLgorICoKKyAqIFRoaXMgaXMgaW4gcHJvY2VzcyBwcml2YXRlIG1lbW9yeSwgYWx0 aG91Z2ggb24gVW5peC1saWtlIHN5c3RlbXMsIHdlIGV4cGVjdAorICogYWxsIHRoZSByZWdp c3RyYXRpb25zIHRvIGhhcHBlbiBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAgdGltZSBhbmQgYmUg aW5oZXJpdGVkCisgKiBieSBhbGwgdGhlIGNoaWxkIHByb2Nlc3NlcyB2aWEgZm9yaygpLiAg RXh0ZW5zaW9ucyBtYXkgcmVnaXN0ZXIgYWRkaXRpb25hbAorICogYXJlYXMgYWZ0ZXIgc3Rh cnR1cCwgYnV0IG9ubHkgYXJlYXMgcmVnaXN0ZXJlZCBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAg YXJlCisgKiBpbmNsdWRlZCBpbiB0aGUgZXN0aW1hdGUgZm9yIHRoZSB0b3RhbCBtZW1vcnkg bmVlZGVkIGZvciBzaGFyZWQgbWVtb3J5LiAgSWYKKyAqIGFueSBub24tdHJpdmlhbCBhbGxv Y2F0aW9ucyBhcmUgbWFkZSBhZnRlciBzdGFydHVwLCB0aGVyZSBtaWdodCBub3QgYmUKKyAq IGVub3VnaCBzaGFyZWQgbWVtb3J5IGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHN0cnVjdAor eworCVNobWVtU3RydWN0RGVzYyAqZGVzYzsJCS8qIHJlZ2lzdGVyZWQgZGVzY3JpcHRvciAq LworCWJvb2wJCWxlZ2FjeTsJCQkvKiBsZWdhY3kgU2htZW1Jbml0U3RydWN0L0hhc2ggZW50 cnk/ICovCit9ICpyZWdpc3RlcmVkX3NobWVtX2FyZWFzOworc3RhdGljIGludAludW1fcmVn aXN0ZXJlZF9zaG1lbV9hcmVhcyA9IDA7CitzdGF0aWMgaW50CW1heF9yZWdpc3RlcmVkX3No bWVtX2FyZWFzID0gMDsgLyogYWxsb2NhdGVkIHNpemUgb2YgdGhlIGFycmF5ICovCisKKy8q IGVzdGltYXRlZCBzaXplIG9mIHJlZ2lzdGVyZWRfc2htZW1fYXJlYXMgKG5vdCBhIGhhcmQg bGltaXQpICovCisjZGVmaW5lIElOSVRJQUxfUkVHSVNUUllfU0laRQkJICg2NCkKKwogLyoK ICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiB0aGUgc2hh cmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhlIG9mZnNldCB0aGF0IFBHU2htZW1IZWFk ZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4gIEFsbG9jYXRpb25zIGJ5CkBAIC05Niw4 ICsxNzEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1BbGxvY2F0b3JEYXRhCiAJc2xvY2tf dAkJc2htZW1fbG9jazsKIH0gU2htZW1BbGxvY2F0b3JEYXRhOwogCitzdGF0aWMgYm9vbCBT aG1lbVJlZ2lzdGVyU3RydWN0SW50ZXJuYWwoU2htZW1TdHJ1Y3REZXNjICpkZXNjLCBib29s IGxlZ2FjeSk7CitzdGF0aWMgYm9vbCBTaG1lbVJlZ2lzdGVySGFzaEludGVybmFsKFNobWVt SGFzaERlc2MgKmRlc2MsIGJvb2wgbGVnYWN5KTsKIHN0YXRpYyB2b2lkICpTaG1lbUFsbG9j UmF3KFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpOwogCitzdGF0aWMgdm9pZCBz aG1lbV9oYXNoX2luaXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHNobWVtX2hhc2hfYXR0 YWNoKHZvaWQgKmFyZyk7CisKIC8qIHNoYXJlZCBtZW1vcnkgZ2xvYmFsIHZhcmlhYmxlcyAq LwogCiBzdGF0aWMgUEdTaG1lbUhlYWRlciAqU2htZW1TZWdIZHI7CS8qIHNoYXJlZCBtZW0g c2VnbWVudCBoZWFkZXIgKi8KQEAgLTEwNiwyMCArMTg2LDMzMiBAQCBzdGF0aWMgdm9pZCAq U2htZW1FbmQ7CQkJLyogZW5kKzEgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCiAKIHN0 YXRpYyBTaG1lbUFsbG9jYXRvckRhdGEgKlNobWVtQWxsb2NhdG9yOwogc2xvY2tfdCAgICAq U2htZW1Mb2NrOwkJCS8qIHBvaW50cyB0byBTaG1lbUFsbG9jYXRvci0+c2htZW1fbG9jayAq Lwotc3RhdGljIEhUQUIgKlNobWVtSW5kZXggPSBOVUxMOyAvKiBwcmltYXJ5IGluZGV4IGhh c2h0YWJsZSBmb3Igc2htZW0gKi8KKworc3RhdGljIGJvb2wgc2htZW1faW5pdGlhbGl6ZWQg PSBmYWxzZTsKKworLyoKKyAqIFNobWVtSW5kZXggaXMgYSBnbG9iYWwgZGlyZWN0b3J5IG9m IHNobWVtIGFyZWFzLCBpdHNlbGYgYWxzbyBzdG9yZWQgaW4gdGhlCisgKiBzaGFyZWQgbWVt b3J5LgorICovCitzdGF0aWMgSFRBQiAqU2htZW1JbmRleDsKKworIC8qIG1heCBzaXplIG9m IGRhdGEgc3RydWN0dXJlIHN0cmluZyBuYW1lICovCisjZGVmaW5lIFNITUVNX0lOREVYX0tF WVNJWkUJCSAoNDgpCisKKy8qCisgKiAjIG9mIGFkZGl0aW9uYWwgZW50cmllcyB0byByZXNl cnZlIGluIHRoZSBzaG1lbSBpbmRleCB0YWJsZSwgZm9yIGFsbG9jYXRpb25zCisgKiBhZnRl ciBwb3N0bWFzdGVyIHN0YXJ0dXAgKG5vdCBhIGhhcmQgbGltaXQpCisgKi8KKyNkZWZpbmUg U0hNRU1fSU5ERVhfQURESVRJT05BTF9TSVpFCQkgKDY0KQorCisvKiB0aGlzIGlzIGEgaGFz aCBidWNrZXQgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlICovCit0eXBlZGVmIHN0cnVjdAor eworCWNoYXIJCWtleVtTSE1FTV9JTkRFWF9LRVlTSVpFXTsJLyogc3RyaW5nIG5hbWUgKi8K Kwl2b2lkCSAgICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGluIHNoYXJlZCBtZW0gKi8KKwlT aXplCQlzaXplOwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZvciB0aGUgc3RydWN0dXJlICov CisJU2l6ZQkJYWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMgYWN0dWFsbHkgYWxsb2NhdGVk ICovCit9IFNobWVtSW5kZXhFbnQ7CiAKIC8qIFRvIGdldCByZWxpYWJsZSByZXN1bHRzIGZv ciBOVU1BIGlucXVpcnkgd2UgbmVlZCB0byAidG91Y2ggcGFnZXMiIG9uY2UgKi8KIHN0YXRp YyBib29sIGZpcnN0TnVtYVRvdWNoID0gdHJ1ZTsKIAogRGF0dW0JCXBnX251bWFfYXZhaWxh YmxlKFBHX0ZVTkNUSU9OX0FSR1MpOwogCisvKgorICoJU2htZW1SZWdpc3RlclN0cnVjdCgp IC0tLSByZWdpc3RlciBhIHNoYXJlZCBtZW1vcnkgc3RydWN0CisgKgorICogU3Vic3lzdGVt cyBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgdGhlaXIgc2hhcmVkIG1lbW9yeSBuZWVkcy4gIFRo YXQgc2hvdWxkIGJlCisgKiBkb25lIGVhcmx5IGluIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYmVm b3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaGFzIGJlZW4KKyAqIGNyZWF0ZWQsIHNv IHRoYXQgdGhlIHNpemUgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBlc3RpbWF0ZSBmb3IgdG90 YWwgYW1vdW50CisgKiBvZiBzaGFyZWQgbWVtb3J5IG5lZWRlZC4gIFdlIHNldCBhc2lkZSBh IHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZm9yCisgKiBhbGxvY2F0aW9ucyB0aGF0IGhhcHBl biBsYXRlciwgZm9yIHRoZSBiZW5lZml0IG9mIG5vbi1wcmVsb2FkZWQgZXh0ZW5zaW9ucywK KyAqIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUgcmVsaWVkIHVwb24uCisgKgorICogSW4gY29y ZSBzdWJzeXN0ZW1zLCBlYWNoIHN1YnN5c3RlbSdzIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBp cyBjYWxsZWQgZnJvbQorICogUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKS4gIEluIGV4dGVuc2lv bnMsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZQorICogX1BHX2luaXQoKSBmdW5j dGlvbi4gIEluIEVYRUNfQkFDS0VORCBtb2RlLCB0aGlzIGFsc28gbmVlZHMgdG8gYmUgY2Fs bGVkIGluCisgKiBlYWNoIGNoaWxkIHByb2Nlc3MsIHRvIHJlYXR0YWNoIGFuZCBzZXQgdGhl IHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBtZW1vcnkKKyAqIGFyZWEsIHVzdWFsbHkgaW4gYSBn bG9iYWwgdmFyaWFibGUuICBDYWxsaW5nIHRoaXMgZnJvbSB0aGUgX1BHX2luaXQoKQorICog aW5pdGlhbGl6ZXIgdGFrZXMgY2FyZSBvZiB0aGF0IHRvby4KKyAqCisgKiBXaGVuIGNhbGxl ZCBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLCBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkg aGFzIGJlZW4KKyAqIGFsbG9jYXRlZCwgdGhlIGZ1bmN0aW9uIG1lcmVseSByZW1lbWJlcnMg dGhlIHJlZ2lzdGVyZWQgZGVzY3JpcHRvciwgYnV0IHRoZQorICogZGVzY3JpcHRvciBtYXkg c3RpbGwgYmUgY2hhbmdlZCBsYXRlciwgdW50aWwgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVu dCBoYXMKKyAqIGJlZW4gYWxsb2NhdGVkLiAgVGhhdCBtZWFucyB0aGF0IGFuIGV4dGVuc2lv biBtYXkgc3RpbGwgbW9kaWZ5IHRoZQorICogYWxyZWFkeS1yZWdpc3RlcmVkIGRlc2NyaXB0 b3IgaW4gdGhlIHNobWVtX3JlcXVlc3RfaG9vay4gIEEgY29tbW9uIGV4YW1wbGUKKyAqIG9m IHdoZW4gdGhhdCdzIHVzZWZ1bCBpcyB3aGVuIHRoZSBzaXplIGRlcGVuZHMgb24gTWF4QmFj a2VuZHM6IHlvdSBjYW4KKyAqIGxlYXZlIHRoZSBzaXplIGVtcHR5IGluIHRoZSBTaG1lbVJl Z2lzdGVyU3RydWN0KCkgY2FsbCBhbmQgZmlsbCBpdCBsYXRlciBpbgorICogdGhlIHNobWVt X3JlcXVlc3RfaG9vay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cnVjdCB3YXMg YWxyZWFkeSBpbml0aWFsaXplZCBpbiBzaGFyZWQgbWVtb3J5IGFuZCB3ZQorICogbWVyZWx5 IGF0dGFjaGVkIHRvIGl0LgorICovCitib29sCitTaG1lbVJlZ2lzdGVyU3RydWN0KFNobWVt U3RydWN0RGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gU2htZW1SZWdpc3RlclN0cnVjdEludGVy bmFsKGRlc2MsIGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wKK1NobWVtUmVnaXN0ZXJTdHJ1 Y3RJbnRlcm5hbChTaG1lbVN0cnVjdERlc2MgKmRlc2MsIGJvb2wgbGVnYWN5KQoreworCWJv b2wJCWZvdW5kOworCisJLyogQ2hlY2sgdGhhdCBpdCdzIG5vdCBhbHJlYWR5IHJlZ2lzdGVy ZWQgaW4gdGhpcyBwcm9jZXNzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0 ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsKKwkJU2htZW1TdHJ1Y3REZXNjICpleGlzdGlu ZyA9IHJlZ2lzdGVyZWRfc2htZW1fYXJlYXNbaV0uZGVzYzsKKworCQlpZiAoc3RyY21wKGV4 aXN0aW5nLT5uYW1lLCBkZXNjLT5uYW1lKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycm1zZygic2hhcmVkIG1lbW9yeSBzdHJ1Y3QgXCIlc1wiIGlzIGFscmVhZHkgcmVn aXN0ZXJlZCIsCisJCQkJCQkJZGVzYy0+bmFtZSksCisJCQkJCSBlcnJiYWNrdHJhY2UoKSkp OworCX0KKworCS8qIGRlc2MtPnB0ciBjYW4gYmUgbm9uLU5VTEwgd2hlbiByZS1pbml0aWFs aXppbmcgYWZ0ZXIgY3Jhc2ggKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyICYmIGRlc2Mt PnB0cikKKwkJKmRlc2MtPnB0ciA9IE5VTEw7CisKKwkvKiBBZGQgdGhlIGRlc2NyaXB0b3Ig dG8gdGhlIGFycmF5LCBncm93aW5nIHRoZSBhcnJheSBpZiBuZWVkZWQgKi8KKwlpZiAobnVt X3JlZ2lzdGVyZWRfc2htZW1fYXJlYXMgPT0gbWF4X3JlZ2lzdGVyZWRfc2htZW1fYXJlYXMp CisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQlpZiAocmVnaXN0ZXJlZF9zaG1lbV9hcmVh cykKKwkJeworCQkJbmV3X3NpemUgPSBtYXhfcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyAqIDI7 CisJCQlyZWdpc3RlcmVkX3NobWVtX2FyZWFzID0gcmVwYWxsb2MocmVnaXN0ZXJlZF9zaG1l bV9hcmVhcywKKwkJCQkJCQkJCQkJICBuZXdfc2l6ZSAqIHNpemVvZigqcmVnaXN0ZXJlZF9z aG1lbV9hcmVhcykpOworCQl9CisJCWVsc2UKKwkJeworCQkJbmV3X3NpemUgPSBJTklUSUFM X1JFR0lTVFJZX1NJWkU7CisJCQlyZWdpc3RlcmVkX3NobWVtX2FyZWFzID0gTWVtb3J5Q29u dGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJCW5ld19zaXplICog c2l6ZW9mKCpyZWdpc3RlcmVkX3NobWVtX2FyZWFzKSk7CisJCX0KKwkJbWF4X3JlZ2lzdGVy ZWRfc2htZW1fYXJlYXMgPSBuZXdfc2l6ZTsKKwl9CisJcmVnaXN0ZXJlZF9zaG1lbV9hcmVh c1tudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhc10uZGVzYyA9IGRlc2M7CisJcmVnaXN0ZXJl ZF9zaG1lbV9hcmVhc1tudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhc10ubGVnYWN5ID0gbGVn YWN5OworCW51bV9yZWdpc3RlcmVkX3NobWVtX2FyZWFzKys7CisKKwkvKgorCSAqIElmIGNh bGxlZCBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAsIHdlIG5lZWQgdG8gaW1tZWRpYXRlbHkg YWxzbworCSAqIGluaXRpYWxpemUgb3IgYXR0YWNoIHRvIHRoZSBhcmVhLgorCSAqLworCWlm IChzaG1lbV9pbml0aWFsaXplZCkKKwl7CisJCVNobWVtSW5kZXhFbnQgKmluZGV4X2VudHJ5 OworCisJCUxXTG9ja0FjcXVpcmUoU2htZW1JbmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CisK KwkJLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KKwkJaW5kZXhfZW50cnkg PSAoU2htZW1JbmRleEVudCAqKQorCQkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgZGVzYy0+ bmFtZSwgSEFTSF9FTlRFUl9OVUxMLCAmZm91bmQpOworCQlpZiAoIWluZGV4X2VudHJ5KQor CQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9N RU1PUlkpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIFNobWVtSW5kZXggZW50 cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJCQkJCQkJZGVzYy0+bmFtZSkpKTsK KwkJfQorCQlpZiAoZm91bmQpCisJCXsKKwkJCS8qIEFscmVhZHkgcHJlc2VudCwganVzdCBh dHRhY2ggdG8gaXQgKi8KKwkJCWlmIChpbmRleF9lbnRyeS0+c2l6ZSAhPSBkZXNjLT5zaXpl KQorCQkJCWVsb2coRVJST1IsICJzaGFyZWQgbWVtb3J5IHN0cnVjdCBcIiVzXCIgaXMgYWxy ZWFkeSByZWdpc3RlcmVkIHdpdGggZGlmZmVyZW50IHNpemUiLAorCQkJCQkgZGVzYy0+bmFt ZSk7CisJCQlpZiAoZGVzYy0+cHRyKQorCQkJCSpkZXNjLT5wdHIgPSBpbmRleF9lbnRyeS0+ bG9jYXRpb247CisJCQlpZiAoZGVzYy0+YXR0YWNoX2ZuKQorCQkJCWRlc2MtPmF0dGFjaF9m bihkZXNjLT5hdHRhY2hfZm5fYXJnKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkg KiBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lLiAgSW5pdGlhbGl6ZSBpdCBsaWtlCisJCQkgKiBT aG1lbUluaXRSZWdpc3RlcmVkKCkgd291bGQKKwkJCSAqLworCQkJc2l6ZV90CQlhbGxvY2F0 ZWRfc2l6ZTsKKwkJCXZvaWQJICAgKnN0cnVjdFB0cjsKKworCQkJc3RydWN0UHRyID0gU2ht ZW1BbGxvY1JhdyhkZXNjLT5zaXplLCAmYWxsb2NhdGVkX3NpemUpOworCQkJaWYgKHN0cnVj dFB0ciA9PSBOVUxMKQorCQkJeworCQkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUg ZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8KKwkJCQloYXNoX3NlYXJjaChTaG1lbUluZGV4 LCBkZXNjLT5uYW1lLCBIQVNIX1JFTU9WRSwgTlVMTCk7CisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCQkgZXJybXNn KCJub3QgZW5vdWdoIHNoYXJlZCBtZW1vcnkgZm9yIGRhdGEgc3RydWN0dXJlIgorCQkJCQkJ CQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAorCQkJCQkJCQlkZXNjLT5uYW1l LCBkZXNjLT5zaXplKSkpOworCQkJfQorCQkJaW5kZXhfZW50cnktPnNpemUgPSBkZXNjLT5z aXplOworCQkJaW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0gYWxsb2NhdGVkX3NpemU7 CisJCQlpbmRleF9lbnRyeS0+bG9jYXRpb24gPSBzdHJ1Y3RQdHI7CisJCQlpZiAoZGVzYy0+ cHRyKQorCQkJCSpkZXNjLT5wdHIgPSBpbmRleF9lbnRyeS0+bG9jYXRpb247CisKKwkJCS8q CisJCQkgKiBYWFg6IGlmIHRoaXMgZXJyb3JzIG91dCwgdGhlIGFyZWEgaXMgbGVmdCBpbiBh IGhhbGYtaW5pdGlhbGl6ZWQKKwkJCSAqIHN0YXRlCisJCQkgKi8KKwkJCWlmIChkZXNjLT5p bml0X2ZuKQorCQkJCWRlc2MtPmluaXRfZm4oZGVzYy0+aW5pdF9mbl9hcmcpOworCQl9CisK KwkJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisJfQorCWVsc2UKKwkJZm91bmQg PSBmYWxzZTsKKworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAqCVNobWVtUmVnaXN0ZXJl ZFNpemUoKSAtLS0gZXN0aW1hdGUgdGhlIHRvdGFsIHNpemUgb2YgYWxsIHJlZ2lzdGVyZWQg c2hhcmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgc3RydWN0dXJl cy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBvbmNlIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCwg YmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAqIGhhcyBiZWVuIGNyZWF0ZWQu CisgKi8KK3NpemVfdAorU2htZW1SZWdpc3RlcmVkU2l6ZSh2b2lkKQoreworCXNpemVfdAkJ c2l6ZTsKKworCS8qIG1lbW9yeSBuZWVkZWQgZm9yIHRoZSBTaG1lbUluZGV4ICovCisJc2l6 ZSA9IGhhc2hfZXN0aW1hdGVfc2l6ZShudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyArIFNI TUVNX0lOREVYX0FERElUSU9OQUxfU0laRSwKKwkJCQkJCQkgIHNpemVvZihTaG1lbUluZGV4 RW50KSk7CisKKwkvKiBtZW1vcnkgbmVlZGVkIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQgYXJl YXMgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdpc3RlcmVkX3NobWVtX2FyZWFz OyBpKyspCisJeworCQlTaG1lbVN0cnVjdERlc2MgKmRlc2MgPSByZWdpc3RlcmVkX3NobWVt X2FyZWFzW2ldLmRlc2M7CisKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIGRlc2MtPnNpemUp OworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgZGVzYy0+ZXh0cmFfc2l6ZSk7CisJfQorCisJ cmV0dXJuIHNpemU7Cit9CisKKy8qCisgKglTaG1lbUluaXRSZWdpc3RlcmVkKCkgLS0tIGFs bG9jYXRlIGFuZCBpbml0aWFsaXplIHByZS1yZWdpc3RlcmVkIHNoYXJlZAorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBp cyBjYWxsZWQgb25jZSBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAsIGFmdGVyIHRoZSBzaGFyZWQg bWVtb3J5IHNlZ21lbnQKKyAqIGhhcyBiZWVuIGNyZWF0ZWQuCisgKi8KK3ZvaWQKK1NobWVt SW5pdFJlZ2lzdGVyZWQodm9pZCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkg dGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICovCisJQXNzZXJ0KCFJ c1VuZGVyUG9zdG1hc3Rlcik7CisJQXNzZXJ0KCFzaG1lbV9pbml0aWFsaXplZCk7CisKKwkv KgorCSAqIEluaXRpYWxpemUgYWxsIHRoZSByZWdpc3RlcmVkIG1lbW9yeSBhcmVhcy4gIFRo ZXJlIGFyZSBubyBjb25jdXJyZW50CisJICogcHJvY2Vzc2VzIHlldCwgc28gbm8gbmVlZCBm b3IgbG9ja2luZy4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdpc3RlcmVk X3NobWVtX2FyZWFzOyBpKyspCisJeworCQlTaG1lbVN0cnVjdERlc2MgKmRlc2MgPSByZWdp c3RlcmVkX3NobWVtX2FyZWFzW2ldLmRlc2M7CisJCXNpemVfdAkJYWxsb2NhdGVkX3NpemU7 CisJCXZvaWQJICAgKnN0cnVjdFB0cjsKKwkJYm9vbAkJZm91bmQ7CisJCVNobWVtSW5kZXhF bnQgKmluZGV4X2VudHJ5OworCisJCS8qIGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4 ICovCisJCWluZGV4X2VudHJ5ID0gKFNobWVtSW5kZXhFbnQgKikKKwkJCWhhc2hfc2VhcmNo KFNobWVtSW5kZXgsIGRlc2MtPm5hbWUsIEhBU0hfRU5URVJfTlVMTCwgJmZvdW5kKTsKKwkJ aWYgKCFpbmRleF9lbnRyeSkKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNy ZWF0ZSBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIiLAorCQkJ CQkJCWRlc2MtPm5hbWUpKSk7CisJCX0KKwkJaWYgKGZvdW5kKQorCQkJZWxvZyhFUlJPUiwg InNoYXJlZCBtZW1vcnkgc3RydWN0IFwiJXNcIiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIiwg ZGVzYy0+bmFtZSk7CisKKwkJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwkJ c3RydWN0UHRyID0gU2htZW1BbGxvY1JhdyhkZXNjLT5zaXplLCAmYWxsb2NhdGVkX3NpemUp OworCQlpZiAoc3RydWN0UHRyID09IE5VTEwpCisJCXsKKwkJCS8qIG91dCBvZiBtZW1vcnk7 IHJlbW92ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXggZW50cnkgKi8KKwkJCWhhc2hfc2VhcmNo KFNobWVtSW5kZXgsIGRlc2MtPm5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJ CSBlcnJtc2coIm5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUi CisJCQkJCQkJIiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKKwkJCQkJCQlkZXNj LT5uYW1lLCBkZXNjLT5zaXplKSkpOworCQl9CisJCWluZGV4X2VudHJ5LT5zaXplID0gZGVz Yy0+c2l6ZTsKKwkJaW5kZXhfZW50cnktPmFsbG9jYXRlZF9zaXplID0gYWxsb2NhdGVkX3Np emU7CisJCWluZGV4X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKworCQkqKGRlc2Mt PnB0cikgPSBzdHJ1Y3RQdHI7CisJCWlmIChkZXNjLT5pbml0X2ZuKQorCQkJZGVzYy0+aW5p dF9mbihkZXNjLT5pbml0X2ZuX2FyZyk7CisJfQorCisJc2htZW1faW5pdGlhbGl6ZWQgPSB0 cnVlOworfQorCisvKgorICogQ2FsbCB0aGUgYXR0YWNoX2ZuIGNhbGxiYWNrcyBvZiBhbGwg cmVnaXN0ZXJlZCBzaG1lbSBhcmVhcworICoKKyAqIFRoaXMgaXMgY2FsbGVkIGF0IGJhY2tl bmQgc3RhcnR1cCwgaW4gRVhFQ19CQUNLRU5EIG1vZGUuCisgKi8KKyNpZmRlZiBFWEVDX0JB Q0tFTkQKK3ZvaWQKK1NobWVtQXR0YWNoUmVnaXN0ZXJlZCh2b2lkKQoreworCS8qIE11c3Qg YmUgaW5pdGlhbGl6aW5nIGEgKG5vbi1zdGFuZGFsb25lKSBiYWNrZW5kICovCisJQXNzZXJ0 KElzVW5kZXJQb3N0bWFzdGVyKTsKKwlBc3NlcnQoU2htZW1BbGxvY2F0b3ItPmluZGV4ICE9 IE5VTEwpOworCisJTFdMb2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfU0hBUkVEKTsK KworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3JlZ2lzdGVyZWRfc2htZW1fYXJlYXM7IGkr KykKKwl7CisJCVNobWVtU3RydWN0RGVzYyAqZGVzYyA9IHJlZ2lzdGVyZWRfc2htZW1fYXJl YXNbaV0uZGVzYzsKKwkJYm9vbAkJZm91bmQ7CisJCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsK KworCQkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLworCQlyZXN1bHQgPSAo U2htZW1JbmRleEVudCAqKQorCQkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgZGVzYy0+bmFt ZSwgSEFTSF9GSU5ELCAmZm91bmQpOworCQlpZiAoIWZvdW5kKQorCQl7CisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgZmluZCBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVj dHVyZSBcIiVzXCIiLAorCQkJCQkJCWRlc2MtPm5hbWUpKSk7CisJCX0KKworCQlpZiAoZGVz Yy0+cHRyKQorCQkJKmRlc2MtPnB0ciA9IHJlc3VsdC0+bG9jYXRpb247CisJCWlmIChkZXNj LT5hdHRhY2hfZm4pCisJCQlkZXNjLT5hdHRhY2hfZm4oZGVzYy0+YXR0YWNoX2ZuX2FyZyk7 CisJfQorCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisKKwlzaG1lbV9pbml0 aWFsaXplZCA9IHRydWU7Cit9CisjZW5kaWYKKwogLyoKICAqCUluaXRTaG1lbUFsbG9jYXRv cigpIC0tLSBzZXQgdXAgYmFzaWMgcG9pbnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4KICAqCiAg KiBDYWxsZWQgYXQgcG9zdG1hc3RlciBvciBzdGFuZC1hbG9uZSBiYWNrZW5kIHN0YXJ0dXAs IHRvIGluaXRpYWxpemUgdGhlCiAgKiBhbGxvY2F0b3IncyBkYXRhIHN0cnVjdHVyZSBpbiB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgSW4gRVhFQ19CQUNLRU5ELAotICogdGhpcyBp cyBhbHNvIGNhbGxlZCBhdCBiYWNrZW5kIHN0YXJ0dXAsIHRvIHNldCB1cCBwb2ludGVycyB0 byB0aGUgc2hhcmVkCi0gKiBtZW1vcnkgYXJlYXMuCisgKiB0aGlzIGlzIGFsc28gY2FsbGVk IGF0IGJhY2tlbmQgc3RhcnR1cCwgdG8gc2V0IHVwIHBvaW50ZXJzIHRvIHRoZQorICogYWxy ZWFkeS1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZS4KICAqLwogdm9pZAogSW5pdFNobWVt QWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcikKQEAgLTEzMCw2ICs1MjIsNyBAQCBJ bml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKQogCWludAkJCWhhc2hf ZmxhZ3M7CiAJc2l6ZV90CQlzaXplOwogCisJQXNzZXJ0KCFzaG1lbV9pbml0aWFsaXplZCk7 CiAJQXNzZXJ0KHNlZ2hkciAhPSBOVUxMKTsKIAogCS8qCkBAIC0xNzQsNyArNTY3LDcgQEAg SW5pdFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcikKIAkgKiB1c2UgU2ht ZW1Jbml0SGFzaCgpIGhlcmUgYmVjYXVzZSBpdCByZWxpZXMgb24gU2htZW1JbmRleCBiZWlu ZyBhbHJlYWR5CiAJICogaW5pdGlhbGl6ZWQuCiAJICovCi0JaGFzaF9zaXplID0gU0hNRU1f SU5ERVhfU0laRTsKKwloYXNoX3NpemUgPSBudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyAr IFNITUVNX0lOREVYX0FERElUSU9OQUxfU0laRTsKIAogCWluZm8ua2V5c2l6ZSA9IFNITUVN X0lOREVYX0tFWVNJWkU7CiAJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1JbmRleEVu dCk7CkBAIC0xOTMsNiArNTg2LDM4IEBAIEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVh ZGVyICpzZWdoZHIpCiAJQXNzZXJ0KFNobWVtSW5kZXggIT0gTlVMTCk7CiB9CiAKKy8qCisg KiBSZXNldCB0aGUgc2htZW0gc3RydWN0IHJlZ2lzdHJ5IG9uIHBvc3RtYXN0ZXIgY3Jhc2gg cmVzdGFydC4KKyAqLwordm9pZAorUmVzZXRTaG1lbUFsbG9jYXRvcih2b2lkKQoreworCWlu dAkJCW51bV9yZXRhaW5lZDsKKworCXNobWVtX2luaXRpYWxpemVkID0gZmFsc2U7CisKKwkv KgorCSAqIFNoYXJlZCBtZW1vcnkgYXJlYXMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBhZ2Fp biBhZnRlciBhIGNyYXNoIHJlc3RhcnQuCisJICogV2UgZG9uJ3QgY2FsbCBSZWdpc3RlclNo bWVtU3RydWN0cygpIG9uIGNyYXNoIHJlc3RhcnQsIHdoaWNoIHdvdWxkCisJICogcmUtcmVn aXN0ZXIgY29yZSBzdWJzeXN0ZW1zLCBhbmQgd2UgZG9uJ3QgcmVsb2FkCisJICogc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzIGVpdGhlci4KKwkgKgorCSAqIEhvd2V2ZXIsIHdlIGRvIGV4 cGVjdCB0aGUgbGVnYWN5IFNobWVtSW5pdFN0cnVjdCgpIGZ1bmN0aW9uIHdpbGwgYmUKKwkg KiBjYWxsZWQgYWdhaW4gZm9yIGVhY2ggYXJlYSwgc28gcmVtb3ZlIHRob3NlIGZyb20gdGhl IHJlZ2lzdHJ5LgorCSAqLworCW51bV9yZXRhaW5lZCA9IDA7CisJZm9yIChpbnQgaSA9IDA7 IGkgPCBudW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsKKwkJaWYgKCFyZWdp c3RlcmVkX3NobWVtX2FyZWFzW2ldLmxlZ2FjeSkKKwkJeworCQkJaWYgKG51bV9yZXRhaW5l ZCAhPSBpKQorCQkJCXJlZ2lzdGVyZWRfc2htZW1fYXJlYXNbbnVtX3JldGFpbmVkXSA9IHJl Z2lzdGVyZWRfc2htZW1fYXJlYXNbaV07CisJCQludW1fcmV0YWluZWQrKzsKKwkJfQorCX0K KwludW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9IG51bV9yZXRhaW5lZDsKK30KKwogLyoK ICAqIFNobWVtQWxsb2MgLS0gYWxsb2NhdGUgbWF4LWFsaWduZWQgY2h1bmsgZnJvbSBzaGFy ZWQgbWVtb3J5CiAgKgpAQCAtMjkwLDQyICs3MTUsMjAgQEAgU2htZW1BZGRySXNWYWxpZChj b25zdCB2b2lkICphZGRyKQogfQogCiAvKgotICogU2htZW1Jbml0SGFzaCAtLSBDcmVhdGUg YW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQotICoJCXNoYXJlZCBtZW1vcnkgaGFz aCB0YWJsZS4KKyAqIFNobWVtUmVnaXN0ZXJIYXNoIC0tIFJlZ2lzdGVyIGEgc2hhcmVkIG1l bW9yeSBoYXNoIHRhYmxlLgogICoKLSAqIFdlIGFzc3VtZSBjYWxsZXIgaXMgZG9pbmcgc29t ZSBraW5kIG9mIHN5bmNocm9uaXphdGlvbgotICogc28gdGhhdCB0d28gcHJvY2Vzc2VzIGRv bid0IHRyeSB0byBjcmVhdGUvaW5pdGlhbGl6ZSB0aGUgc2FtZQotICogdGFibGUgYXQgb25j ZS4gIChJbiBwcmFjdGljZSwgYWxsIGNyZWF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgcG9zdG1h c3RlcgotICogcHJvY2VzczsgY2hpbGQgcHJvY2Vzc2VzIHNob3VsZCBhbHdheXMgYmUgYXR0 YWNoaW5nIHRvIGV4aXN0aW5nIHRhYmxlcy4pCi0gKgotICogbWF4X3NpemUgaXMgdGhlIGVz dGltYXRlZCBtYXhpbXVtIG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcy4gIFRoaXMgaXMK LSAqIG5vdCBhIGhhcmQgbGltaXQsIGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBk ZWdyYWRlIGlmIGl0IGlzCi0gKiBleGNlZWRlZCBzdWJzdGFudGlhbGx5IChzaW5jZSBpdCdz IHVzZWQgdG8gY29tcHV0ZSBkaXJlY3Rvcnkgc2l6ZSBhbmQKLSAqIHRoZSBoYXNoIHRhYmxl IGJ1Y2tldHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgotICoKLSAqIGluaXRfc2l6ZSBpcyB0aGUg bnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHByZWFsbG9jYXRlLiAgRm9yIGEgdGFi bGUKLSAqIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWluLCB0aGlzIHNob3VsZCBiZSBl cXVhbCB0byBtYXhfc2l6ZTsgdGhhdAotICogZW5zdXJlcyB0aGF0IG5vIHJ1bi10aW1lIG91 dC1vZi1zaGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBvY2N1ci4KLSAqCi0gKiAqaW5mb1Ag YW5kIGhhc2hfZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHRoZSBlbnRyeSBzaXplcyBh bmQga2V5Ci0gKiBjb21wYXJpc29uIHNlbWFudGljcyAoc2VlIGhhc2hfY3JlYXRlKCkpLiAg RmxhZyBiaXRzIGFuZCB2YWx1ZXMgc3BlY2lmaWMKLSAqIHRvIHNoYXJlZC1tZW1vcnkgaGFz aCB0YWJsZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0aGF0IGNhbGxlcnMgbWF5Ci0gKiBj aG9vc2UgdG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpF LgotICoKLSAqIE5vdGU6IGJlZm9yZSBQb3N0Z3JlcyA5LjAsIHRoaXMgZnVuY3Rpb24gcmV0 dXJuZWQgTlVMTCBmb3Igc29tZSBmYWlsdXJlCi0gKiBjYXNlcy4gIE5vdywgaXQgYWx3YXlz IHRocm93cyBlcnJvciBpbnN0ZWFkLCBzbyBjYWxsZXJzIG5lZWQgbm90IGNoZWNrCi0gKiBm b3IgTlVMTC4KKyAqIFNpbWlsYXIgdG8gU2htZW1SZWdpc3RlclN0cnVjdCgpLCBidXQgcmVn aXN0ZXJzIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGFuCisgKiBvcGFxdWUgYXJlYS4KICAq LwotSFRBQiAqCi1TaG1lbUluaXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsCQkvKiB0YWJsZSBz dHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXggKi8KLQkJCSAgaW50NjQgaW5pdF9zaXplLAkv KiBpbml0aWFsIHRhYmxlIHNpemUgKi8KLQkJCSAgaW50NjQgbWF4X3NpemUsCS8qIG1heCBz aXplIG9mIHRoZSB0YWJsZSAqLwotCQkJICBIQVNIQ1RMICppbmZvUCwJLyogaW5mbyBhYm91 dCBrZXkgYW5kIGJ1Y2tldCBzaXplICovCi0JCQkgIGludCBoYXNoX2ZsYWdzKQkvKiBpbmZv IGFib3V0IGluZm9QICovCitib29sCitTaG1lbVJlZ2lzdGVySGFzaChTaG1lbUhhc2hEZXNj ICpkZXNjKQogewotCWJvb2wJCWZvdW5kOwotCXZvaWQJICAgKmxvY2F0aW9uOworCXJldHVy biBTaG1lbVJlZ2lzdGVySGFzaEludGVybmFsKGRlc2MsIGZhbHNlKTsKK30KIAorc3RhdGlj IGJvb2wKK1NobWVtUmVnaXN0ZXJIYXNoSW50ZXJuYWwoU2htZW1IYXNoRGVzYyAqZGVzYywg Ym9vbCBsZWdhY3kpCit7CiAJLyoKIAkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hh cmVkIG1lbW9yeSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAogCSAqIGdyb3cg b3Igb3RoZXIgYmFja2VuZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFr ZSBzdXJlIHdlCkBAIC0zMzMsMjYgKzczNiw1NiBAQCBTaG1lbUluaXRIYXNoKGNvbnN0IGNo YXIgKm5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXggKi8KIAkg KgogCSAqIFRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRvciBtdXN0IGJlIHNwZWNpZmllZCB0 b28uCiAJICovCi0JaW5mb1AtPmRzaXplID0gaW5mb1AtPm1heF9kc2l6ZSA9IGhhc2hfc2Vs ZWN0X2RpcnNpemUobWF4X3NpemUpOwotCWluZm9QLT5hbGxvYyA9IFNobWVtQWxsb2NOb0Vy cm9yOwotCWhhc2hfZmxhZ3MgfD0gSEFTSF9TSEFSRURfTUVNIHwgSEFTSF9BTExPQyB8IEhB U0hfRElSU0laRTsKLQotCS8qIGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4ICovCi0J bG9jYXRpb24gPSBTaG1lbUluaXRTdHJ1Y3QobmFtZSwKLQkJCQkJCQkgICBoYXNoX2dldF9z aGFyZWRfc2l6ZShpbmZvUCwgaGFzaF9mbGFncyksCi0JCQkJCQkJICAgJmZvdW5kKTsKKwlk ZXNjLT5oYXNoX2luZm8uZHNpemUgPSBkZXNjLT5oYXNoX2luZm8ubWF4X2RzaXplID0gaGFz aF9zZWxlY3RfZGlyc2l6ZShkZXNjLT5tYXhfc2l6ZSk7CisJZGVzYy0+aGFzaF9pbmZvLmFs bG9jID0gU2htZW1BbGxvY05vRXJyb3I7CisJZGVzYy0+aGFzaF9mbGFncyB8PSBIQVNIX1NI QVJFRF9NRU0gfCBIQVNIX0FMTE9DIHwgSEFTSF9ESVJTSVpFOworCisJLyogU2V0IHVwIHRo ZSBiYXNlIHN0cnVjdCBkZXNjcmlwdG9yICovCisJbWVtc2V0KCZkZXNjLT5iYXNlX2Rlc2Ms IDAsIHNpemVvZihkZXNjLT5iYXNlX2Rlc2MpKTsKKwlkZXNjLT5iYXNlX2Rlc2MubmFtZSA9 IGRlc2MtPm5hbWU7CisJZGVzYy0+YmFzZV9kZXNjLnNpemUgPSBoYXNoX2dldF9zaGFyZWRf c2l6ZSgmZGVzYy0+aGFzaF9pbmZvLCBkZXNjLT5oYXNoX2ZsYWdzKTsKKwlkZXNjLT5iYXNl X2Rlc2MuaW5pdF9mbiA9IHNobWVtX2hhc2hfaW5pdDsKKwlkZXNjLT5iYXNlX2Rlc2MuaW5p dF9mbl9hcmcgPSBkZXNjOworCWRlc2MtPmJhc2VfZGVzYy5hdHRhY2hfZm4gPSBzaG1lbV9o YXNoX2F0dGFjaDsKKwlkZXNjLT5iYXNlX2Rlc2MuYXR0YWNoX2ZuX2FyZyA9IGRlc2M7CiAK IAkvKgotCSAqIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBhdHRhY2ggdG8gaXQgcmF0aGVyIHRo YW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKLQkgKiBuZXcgc3BhY2UKKwkgKiBXZSBuZWVk IGEgc3RhYmxlIHBvaW50ZXIgdG8gaG9sZCB0aGUgcG9pbnRlciB0byB0aGUgc2hhcmVkIG1l bW9yeS4gIFVzZQorCSAqIHRoZSBvbmUgcGFzc2VkIGluIHRoZSBkZXNjcmlwdG9yIG5vdy4g IEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUKKwkgKiBoYXNoIHRhYmxlIGhlYWRlciBi eSBpbml0IG9yIGF0dGFjaCBmdW5jdGlvbi4KIAkgKi8KLQlpZiAoZm91bmQpCi0JCWhhc2hf ZmxhZ3MgfD0gSEFTSF9BVFRBQ0g7CisJZGVzYy0+YmFzZV9kZXNjLnB0ciA9ICh2b2lkICoq KSBkZXNjLT5wdHI7CisKKwlkZXNjLT5iYXNlX2Rlc2MuZXh0cmFfc2l6ZSA9IGhhc2hfZXN0 aW1hdGVfc2l6ZShkZXNjLT5tYXhfc2l6ZSwgZGVzYy0+aGFzaF9pbmZvLmVudHJ5c2l6ZSkg LSBkZXNjLT5iYXNlX2Rlc2Muc2l6ZTsKKworCXJldHVybiBTaG1lbVJlZ2lzdGVyU3RydWN0 SW50ZXJuYWwoJmRlc2MtPmJhc2VfZGVzYywgbGVnYWN5KTsKK30KKworc3RhdGljIHZvaWQK K3NobWVtX2hhc2hfaW5pdCh2b2lkICphcmcpCit7CisJU2htZW1IYXNoRGVzYyAqZGVzYyA9 IChTaG1lbUhhc2hEZXNjICopIGFyZzsKKwlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFz aF9mbGFnczsKIAogCS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBo YXNoX2NyZWF0ZSAqLwotCWluZm9QLT5oY3RsID0gKEhBU0hIRFIgKikgbG9jYXRpb247CisJ ZGVzYy0+aGFzaF9pbmZvLmhjdGwgPSAoSEFTSEhEUiAqKSAqZGVzYy0+YmFzZV9kZXNjLnB0 cjsKIAotCXJldHVybiBoYXNoX2NyZWF0ZShuYW1lLCBpbml0X3NpemUsIGluZm9QLCBoYXNo X2ZsYWdzKTsKKwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVzYy0+ aW5pdF9zaXplLCAmZGVzYy0+aGFzaF9pbmZvLCBoYXNoX2ZsYWdzKTsKK30KKworc3RhdGlj IHZvaWQKK3NobWVtX2hhc2hfYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlTaG1lbUhhc2hEZXNj ICpkZXNjID0gKFNobWVtSGFzaERlc2MgKikgYXJnOworCWludAkJCWhhc2hfZmxhZ3MgPSBk ZXNjLT5oYXNoX2ZsYWdzOworCisJLyogYXR0YWNoIHRvIGl0IHJhdGhlciB0aGFuIGFsbG9j YXRlIGFuZCBpbml0aWFsaXplIG5ldyBzcGFjZSAqLworCWhhc2hfZmxhZ3MgfD0gSEFTSF9B VFRBQ0g7CisKKwkvKiBQYXNzIGxvY2F0aW9uIG9mIGhhc2h0YWJsZSBoZWFkZXIgdG8gaGFz aF9jcmVhdGUgKi8KKwlkZXNjLT5oYXNoX2luZm8uaGN0bCA9IChIQVNISERSICopICpkZXNj LT5iYXNlX2Rlc2MucHRyOworCisJKmRlc2MtPnB0ciA9IGhhc2hfY3JlYXRlKGRlc2MtPm5h bWUsIGRlc2MtPmluaXRfc2l6ZSwgJmRlc2MtPmhhc2hfaW5mbywgaGFzaF9mbGFncyk7CiB9 CiAKIC8qCkBAIC0zNjcsODIgKzgwMCw3NiBAQCBTaG1lbUluaXRIYXNoKGNvbnN0IGNoYXIg Km5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXggKi8KICAqCVJl dHVybnM6IHBvaW50ZXIgdG8gdGhlIG9iamVjdC4gICpmb3VuZFB0ciBpcyBzZXQgdHJ1ZSBp ZiB0aGUgb2JqZWN0IHdhcwogICoJCWFscmVhZHkgaW4gdGhlIHNobWVtIGluZGV4IChoZW5j ZSwgYWxyZWFkeSBpbml0aWFsaXplZCkuCiAgKgotICoJTm90ZTogYmVmb3JlIFBvc3RncmVz IDkuMCwgdGhpcyBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKLSAq CWNhc2VzLiAgTm93LCBpdCBhbHdheXMgdGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxl cnMgbmVlZCBub3QgY2hlY2sKLSAqCWZvciBOVUxMLgorICogTm90ZTogVGhpcyBpcyBhIGxl Z2FjeSBpbnRlcmZhY2UsIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgK KyAqIGV4dGVuc2lvbnMuICBVc2UgU2htZW1SZWdpc3RlclN0cnVjdCgpIGluIG5ldyBjb2Rl IQogICovCiB2b2lkICoKIFNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXpl IHNpemUsIGJvb2wgKmZvdW5kUHRyKQogewotCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsKLQl2 b2lkCSAgICpzdHJ1Y3RQdHI7Ci0KLQlBc3NlcnQoU2htZW1JbmRleCAhPSBOVUxMKTsKKwlT aG1lbVN0cnVjdERlc2MgKmRlc2M7CiAKLQlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2Nr LCBMV19FWENMVVNJVkUpOworCUFzc2VydChzaG1lbV9pbml0aWFsaXplZCk7CiAKLQkvKiBs b29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLwotCXJlc3VsdCA9IChTaG1lbUluZGV4 RW50ICopCi0JCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfRU5URVJfTlVM TCwgZm91bmRQdHIpOworCWRlc2MgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKFRvcE1lbW9y eUNvbnRleHQsIHNpemVvZihTaG1lbVN0cnVjdERlc2MpICsgc2l6ZW9mKHZvaWQgKikpOwor CWRlc2MtPm5hbWUgPSBuYW1lOworCWRlc2MtPnNpemUgPSBzaXplOworCWRlc2MtPnB0ciA9 ICh2b2lkICopICgoKGNoYXIgKikgZGVzYykgKyBzaXplb2YoU2htZW1TdHJ1Y3REZXNjKSk7 CiAKLQlpZiAoIXJlc3VsdCkKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2sp OwotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9S WSksCi0JCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBTaG1lbUluZGV4IGVudHJ5IGZv ciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIiLAotCQkJCQkJbmFtZSkpKTsKLQl9Ci0KLQlpZiAo KmZvdW5kUHRyKQotCXsKLQkJLyoKLQkJICogU3RydWN0dXJlIGlzIGluIHRoZSBzaG1lbSBp bmRleCBzbyBzb21lb25lIGVsc2UgaGFzIGFsbG9jYXRlZCBpdAotCQkgKiBhbHJlYWR5LiAg VGhlIHNpemUgYmV0dGVyIGJlIHRoZSBzYW1lIGFzIHRoZSBzaXplIHdlIGFyZSB0cnlpbmcg dG8KLQkJICogaW5pdGlhbGl6ZSB0bywgb3IgdGhlcmUgaXMgYSBuYW1lIGNvbmZsaWN0IChv ciB3b3JzZSkuCi0JCSAqLwotCQlpZiAocmVzdWx0LT5zaXplICE9IHNpemUpCi0JCXsKLQkJ CUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwotCQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkJKGVycm1zZygiU2htZW1JbmRleCBlbnRyeSBzaXplIGlzIHdyb25nIGZvciBkYXRhIHN0 cnVjdHVyZSIKLQkJCQkJCQkiIFwiJXNcIjogZXhwZWN0ZWQgJXp1LCBhY3R1YWwgJXp1IiwK LQkJCQkJCQluYW1lLCBzaXplLCByZXN1bHQtPnNpemUpKSk7Ci0JCX0KLQkJc3RydWN0UHRy ID0gcmVzdWx0LT5sb2NhdGlvbjsKLQl9Ci0JZWxzZQotCXsKLQkJU2l6ZQkJYWxsb2NhdGVk X3NpemU7CisJKmZvdW5kUHRyID0gU2htZW1SZWdpc3RlclN0cnVjdEludGVybmFsKGRlc2Ms IHRydWUpOworCUFzc2VydCgqZGVzYy0+cHRyICE9IE5VTEwpOworCXJldHVybiAqZGVzYy0+ cHRyOworfQogCi0JCS8qIEl0IGlzbid0IGluIHRoZSB0YWJsZSB5ZXQuIGFsbG9jYXRlIGFu ZCBpbml0aWFsaXplIGl0ICovCi0JCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcoc2l6ZSwg JmFsbG9jYXRlZF9zaXplKTsKLQkJaWYgKHN0cnVjdFB0ciA9PSBOVUxMKQotCQl7Ci0JCQkv KiBvdXQgb2YgbWVtb3J5OyByZW1vdmUgdGhlIGZhaWxlZCBTaG1lbUluZGV4IGVudHJ5ICov Ci0JCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBuYW1lLCBIQVNIX1JFTU9WRSwgTlVMTCk7 Ci0JCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKLQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJCSBlcnJtc2co Im5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCi0JCQkJCQkJ IiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKLQkJCQkJCQluYW1lLCBzaXplKSkp OwotCQl9Ci0JCXJlc3VsdC0+c2l6ZSA9IHNpemU7Ci0JCXJlc3VsdC0+YWxsb2NhdGVkX3Np emUgPSBhbGxvY2F0ZWRfc2l6ZTsKLQkJcmVzdWx0LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsK LQl9CisvKgorICogU2htZW1Jbml0SGFzaCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9y IGF0dGFjaCB0bywgYQorICoJCXNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KKyAqCisgKiBX ZSBhc3N1bWUgY2FsbGVyIGlzIGRvaW5nIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24K KyAqIHNvIHRoYXQgdHdvIHByb2Nlc3NlcyBkb24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxp emUgdGhlIHNhbWUKKyAqIHRhYmxlIGF0IG9uY2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVh dGlvbnMgYXJlIGRvbmUgaW4gdGhlIHBvc3RtYXN0ZXIKKyAqIHByb2Nlc3M7IGNoaWxkIHBy b2Nlc3NlcyBzaG91bGQgYWx3YXlzIGJlIGF0dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMu KQorICoKKyAqIG1heF9zaXplIGlzIHRoZSBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2Yg aGFzaHRhYmxlIGVudHJpZXMuICBUaGlzIGlzCisgKiBub3QgYSBoYXJkIGxpbWl0LCBidXQg dGhlIGFjY2VzcyBlZmZpY2llbmN5IHdpbGwgZGVncmFkZSBpZiBpdCBpcworICogZXhjZWVk ZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5 IHNpemUgYW5kCisgKiB0aGUgaGFzaCB0YWJsZSBidWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxs KS4KKyAqCisgKiBpbml0X3NpemUgaXMgdGhlIG51bWJlciBvZiBoYXNodGFibGUgZW50cmll cyB0byBwcmVhbGxvY2F0ZS4gIEZvciBhIHRhYmxlCisgKiB3aG9zZSBtYXhpbXVtIHNpemUg aXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUgZXF1YWwgdG8gbWF4X3NpemU7IHRoYXQKKyAq IGVuc3VyZXMgdGhhdCBubyBydW4tdGltZSBvdXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJl cyBjYW4gb2NjdXIuCisgKgorICogKmluZm9QIGFuZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lm eSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtleQorICogY29tcGFyaXNvbiBzZW1h bnRpY3MgKHNlZSBoYXNoX2NyZWF0ZSgpKS4gIEZsYWcgYml0cyBhbmQgdmFsdWVzIHNwZWNp ZmljCisgKiB0byBzaGFyZWQtbWVtb3J5IGhhc2ggdGFibGVzIGFyZSBhZGRlZCBoZXJlLCBl eGNlcHQgdGhhdCBjYWxsZXJzIG1heQorICogY2hvb3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJU SVRJT04gYW5kL29yIEhBU0hfRklYRURfU0laRS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGEg bGVnYWN5IGludGVyZmFjZSwga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0 aAorICogZXh0ZW5zaW9ucy4gIFVzZSBTaG1lbVJlZ2lzdGVySGFzaCgpIGluIG5ldyBjb2Rl IQorICovCitIVEFCICoKK1NobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRh YmxlIHN0cmluZyBuYW1lIGZvciBzaG1lbSBpbmRleCAqLworCQkJICBpbnQ2NCBpbml0X3Np emUsCS8qIGluaXRpYWwgdGFibGUgc2l6ZSAqLworCQkJICBpbnQ2NCBtYXhfc2l6ZSwJLyog bWF4IHNpemUgb2YgdGhlIHRhYmxlICovCisJCQkgIEhBU0hDVEwgKmluZm9QLAkvKiBpbmZv IGFib3V0IGtleSBhbmQgYnVja2V0IHNpemUgKi8KKwkJCSAgaW50IGhhc2hfZmxhZ3MpCS8q IGluZm8gYWJvdXQgaW5mb1AgKi8KK3sKKwlTaG1lbUhhc2hEZXNjICpkZXNjOwogCi0JTFdM b2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7CisJQXNzZXJ0KHNobWVtX2luaXRpYWxpemVk KTsKIAotCUFzc2VydChTaG1lbUFkZHJJc1ZhbGlkKHN0cnVjdFB0cikpOworCWRlc2MgPSBN ZW1vcnlDb250ZXh0QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihTaG1lbUhh c2hEZXNjKSArIHNpemVvZihIVEFCICopKTsKKwlkZXNjLT5uYW1lID0gbmFtZTsKKwlkZXNj LT5pbml0X3NpemUgPSBpbml0X3NpemU7CisJZGVzYy0+bWF4X3NpemUgPSBtYXhfc2l6ZTsK KwltZW1jcHkoJmRlc2MtPmhhc2hfaW5mbywgaW5mb1AsIHNpemVvZihIQVNIQ1RMKSk7CisJ ZGVzYy0+aGFzaF9mbGFncyA9IGhhc2hfZmxhZ3M7CiAKLQlBc3NlcnQoc3RydWN0UHRyID09 ICh2b2lkICopIENBQ0hFTElORUFMSUdOKHN0cnVjdFB0cikpOworCWRlc2MtPnB0ciA9IChI VEFCICoqKSAoKChjaGFyICopIGRlc2MpICsgc2l6ZW9mKFNobWVtSGFzaERlc2MpKTsKIAot CXJldHVybiBzdHJ1Y3RQdHI7CisJU2htZW1SZWdpc3Rlckhhc2hJbnRlcm5hbChkZXNjLCB0 cnVlKTsKKwlyZXR1cm4gKmRlc2MtPnB0cjsKIH0KIAotCiAvKgogICogQWRkIHR3byBTaXpl IHZhbHVlcywgY2hlY2tpbmcgZm9yIG92ZXJmbG93CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpp bmRleCBiMzU2MzExMzIxOS4uOWJmYzY2M2Y0NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAg LTQxNjMsNiArNDE2Myw5IEBAIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSwKIAkvKiBJbml0aWFsaXplIHNpemUgb2YgZmFzdC1wYXRoIGxvY2sgY2Fj aGUuICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRoTG9ja3MoKTsKIAorCS8qIFJlZ2lzdGVyIHRo ZSBzaGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFsbCBjb3JlIHN1YnN5c3RlbXMuICovCisJUmVn aXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwogCS8qCiAJICogR2l2ZSBwcmVsb2FkZWQgbGlicmFy aWVzIGEgY2hhbmNlIHRvIHJlcXVlc3QgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5LgogCSAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvaXBjLmgKaW5kZXggZGEzMjc4N2FiNTEuLjhhM2I3MWFkNWQzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvaXBjLmgKQEAgLTc3LDYgKzc3LDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tfb25fc2htZW1f ZXhpdF9saXN0c19hcmVfZW1wdHkodm9pZCk7CiAvKiBpcGNpLmMgKi8KIGV4dGVybiBQR0RM TElNUE9SVCBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBzaG1lbV9zdGFydHVwX2hvb2s7CiAK K2V4dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1TdHJ1Y3RzKHZvaWQpOwogZXh0ZXJuIFNpemUg Q2FsY3VsYXRlU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3Jlcyh2b2lkKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2htZW0uaAppbmRleCAwZGU4YTM2NDI5Yi4uMDhhYTYzODBhNDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3No bWVtLmgKQEAgLTI0LDE4ICsyNCwxNTYgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIK ICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAKK3R5cGVkZWYgdm9pZCAoKlNobWVtSW5p dENhbGxiYWNrKSAodm9pZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAoKlNobWVtQXR0YWNoQ2Fs bGJhY2spICh2b2lkICphcmcpOworCisvKgorICogU2htZW1TdHJ1Y3REZXNjIGRlc2NyaWJl cyBhIG5hbWVkIGFyZWEgb3Igc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuCisgKgorICogU2hh cmVkIG1lbW9yeSBpcyByZXNlcnZlZCBhbmQgYWxsb2NhdGVkIGluIGEgZmV3IHBoYXNlcyBh dCBwb3N0bWFzdGVyCisgKiBzdGFydHVwLCBhbmQgaW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRo ZXJlJ3Mgc29tZSBleHRyYSB3b3JrIGRvbmUgdG8gImF0dGFjaCIKKyAqIHRvIHRoZW0gYXQg YmFja2VuZCBzdGFydHVwLiAgU2htZW1TdHJ1Y3REZXNjIGNvbnRhaW5zIGFsbCB0aGUgaW5m b3JtYXRpb24KKyAqIG5lZWRlZCB0byBtYW5hZ2UgdGhlIGxpZmVjeWNsZS4KKyAqCisgKiAn bmFtZScgbXVzdCBiZSBmaWxsZWQgaW4gYmVmb3JlIGNhbGxpbmcgU2htZW1SZWdpc3RlclN0 cnVjdCgpOyBhbGwgb3RoZXIKKyAqIGZpZWxkcyBjYW4gYmUgYWRqdXN0ZWQgbGF0ZXIgZHVy aW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCwgdW50aWwgdGhlIHNoYXJlZAorICogbWVtb3J5IGlz IGFsbG9jYXRlZCBhbmQgaW5pdCBjYWxsYmFjayBpcyBjYWxsZWQuIEluaXRpYWxpemUgYW55 IG9wdGlvbmFsCisgKiBmaWVsZHMgdGhhdCB5b3UgZG9uJ3QgdXNlIHRvIHplcm9zLgorICoK KyAqIEFmdGVyIHJlZ2lzdHJhdGlvbiwgdGhlIHNobWVtIG1hY2hpbmVyeSByZXNlcnZlcyBt ZW1vcnkgZm9yIHRoZSBhcmVhLCBzZXRzCisgKiAnKnB0cicgdG8gcG9pbnQgdG8gdGhlIGFs bG9jYXRpb24sIGFuZCBjYWxscyB0aGUgY2FsbGJhY2tzIGF0IHRoZSByaWdodAorICogbW9t ZW50cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2htZW1TdHJ1Y3REZXNjCit7CisJLyoKKwkg KiBOYW1lIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEuICBSZXF1aXJlZCwgbXVzdCBiZSB1 bmlxdWUsIGFuZCBtdXN0IGJlCisJICogc2V0IGFscmVhZHkgYmVmb3JlIGNhbGxpbmcgU2ht ZW1SZWdpc3RlclN0cnVjdCgpLgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBT aXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEuICBSZXF1aXJlZC4gKi8KKwlzaXplX3QJ CXNpemU7CisKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLiAg VGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgc2hhcmVkCisJICogbWVtb3J5IGFyZWEgaXMgYWxs b2NhdGVkLCB1c3VhbGx5IGF0IHBvc3RtYXN0ZXIgc3RhcnR1cC4gICdpbml0X2ZuX2FyZycK KwkgKiBpcyBhbiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4KKwkg Ki8KKwlTaG1lbUluaXRDYWxsYmFjayBpbml0X2ZuOworCXZvaWQJICAgKmluaXRfZm5fYXJn OworCisJLyoKKwkgKiBBdHRhY2htZW50IGNhbGxiYWNrIGZ1bmN0aW9uLiAgSW4gRVhFQ19C QUNLRU5EIG1vZGUsIHRoaXMgaXMgY2FsbGVkIGF0CisJICogc3RhcnR1cCBvZiBlYWNoIGJh Y2tlbmQuICBJbiAhRVhFQ19CQUNLRU5EIG1vZGUsIHRoaXMgaXMgb25seSBjYWxsZWQgaWYK KwkgKiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhIGlzIHJlZ2lzdGVyZWQgYWZ0ZXIgcG9zdG1h c3RlciBzdGFydHVwLiAgV2UKKwkgKiBuZXZlciBkbyB0aGF0IGluIGNvcmUgY29kZSwgYnV0 IGV4dGVuc2lvbnMgbWlnaHQuCisJICovCisJU2htZW1Jbml0Q2FsbGJhY2sgYXR0YWNoX2Zu OworCXZvaWQJICAgKmF0dGFjaF9mbl9hcmc7CisKKwkvKgorCSAqIEV4dHJhIHNwYWNlIHRv IHJlc2VydmUgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgYnV0IGl0J3Mgbm90IHBh cnQKKwkgKiBvZiB0aGUgc3RydWN0IGl0c2VsZi4gIFRoaXMgaXMgdXNlZCBmb3Igc2hhcmVk IG1lbW9yeSBoYXNoIHRhYmxlcyB0aGF0CisJICogY2FuIGdyb3cgYmV5b25kIHRoZSBpbml0 aWFsIHNpemUgd2hlbiBtb3JlIGJ1Y2tldHMgYXJlIGFsbG9jYXRlZC4KKwkgKi8KKwlzaXpl X3QJCWV4dHJhX3NpemU7CisKKwkvKgorCSAqIFdoZW4gdGhlIHNobWVtIGFyZWEgaXMgaW5p dGlhbGl6ZWQgb3IgYXR0YWNoZWQgdG8sIHBvaW50ZXIgdG8gaXQgaXMKKwkgKiBzdG9yZWQg aW4gKnB0ci4gIEl0IHVzdWFsbHkgcG9pbnRzIHRvIGEgZ2xvYmFsIHZhcmlhYmxlLCB1c2Vk IHRvIGFjY2VzcworCSAqIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgbGF0ZXIuICAqcHRyIGlz IHNldCBiZWZvcmUgdGhlIGluaXRfZm4gb3IKKwkgKiBhdHRhY2hfZm4gY2FsbGJhY2sgaXMg Y2FsbGVkLgorCSAqLworCXZvaWQJICAqKnB0cjsKK30gU2htZW1TdHJ1Y3REZXNjOworCisv KgorICogRGVzY3JpcHRvciBmb3IgYSBuYW1lZCBzaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUu CisgKgorICogU2ltaWxhciB0byBTaG1lbVN0cnVjdERlc2MsIGJ1dCBkZXNjcmliZXMgYSBz aGFyZWQgbWVtb3J5IGhhc2ggdGFibGUuICBFYWNoCisgKiBoYXNoIHRhYmxlIGlzIGJhY2tl ZCBieSBhbiBhbGxvY2F0ZWQgYXJlYSwgZGVzY3JpYmVkIGJ5ICdiYXNlX2Rlc2MnLCBidXQg aWYKKyAqICdtYXhfc2l6ZScgaXMgZ3JlYXRlciB0aGFuICdpbml0X3NpemUnLCBpdCBjYW4g YWxzbyBncm93IGJleW9uZCB0aGUgaW5pdGlhbAorICogYWxsb2NhdGVkIGFyZWEgYnkgYWxs b2NhdGluZyBtb3JlIGhhc2ggZW50cmllcyBmcm9tIHRoZSBnbG9iYWwgdW5yZXNlcnZlZAor ICogc3BhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNobWVtSGFzaERlc2MKK3sKKwkvKgor CSAqIE5hbWUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYS4gIFJlcXVpcmVkLiAgTXVzdCBi ZSB1bmlxdWUgYWNyb3NzIHRoZQorCSAqIHN5c3RlbS4KKwkgKi8KKwljb25zdCBjaGFyICpu YW1lOworCisJLyoKKwkgKiBtYXhfc2l6ZSBpcyB0aGUgZXN0aW1hdGVkIG1heGltdW0gbnVt YmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzLiAgVGhpcyBpcworCSAqIG5vdCBhIGhhcmQgbGlt aXQsIGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBkZWdyYWRlIGlmIGl0IGlzCisJ ICogZXhjZWVkZWQgc3Vic3RhbnRpYWxseSAoc2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUg ZGlyZWN0b3J5IHNpemUgYW5kCisJICogdGhlIGhhc2ggdGFibGUgYnVja2V0cyB3aWxsIGdl dCBvdmVyZnVsbCkuCisJICovCisJc2l6ZV90CQltYXhfc2l6ZTsKKworCS8qCisJICogaW5p dF9zaXplIGlzIHRoZSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMgdG8gcHJlYWxsb2Nh dGUuICBGb3IgYQorCSAqIHRhYmxlIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWluLCB0 aGlzIHNob3VsZCBiZSBlcXVhbCB0byBtYXhfc2l6ZTsKKwkgKiB0aGF0IGVuc3VyZXMgdGhh dCBubyBydW4tdGltZSBvdXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJlcyBjYW4gb2NjdXIu CisJICovCisJc2l6ZV90CQlpbml0X3NpemU7CisKKwkvKgorCSAqIEhhc2ggdGFibGUgb3B0 aW9ucyBwYXNzZWQgdG8gaGFzaF9jcmVhdGUoKQorCSAqCisJICogaGFzaF9pbmZvIGFuZCBo YXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50cnkgc2l6ZXMgYW5kIGtl eQorCSAqIGNvbXBhcmlzb24gc2VtYW50aWNzIChzZWUgaGFzaF9jcmVhdGUoKSkuICBGbGFn IGJpdHMgYW5kIHZhbHVlcworCSAqIHNwZWNpZmljIHRvIHNoYXJlZC1tZW1vcnkgaGFzaCB0 YWJsZXMgYXJlIGFkZGVkIGltcGxpY2l0bHkgaW4KKwkgKiBTaG1lbVJlZ2lzdGVySGFzaCgp LCBleGNlcHQgdGhhdCBjYWxsZXJzIG1heSBjaG9vc2UgdG8gc3BlY2lmeQorCSAqIEhBU0hf UEFSVElUSU9OIGFuZC9vciBIQVNIX0ZJWEVEX1NJWkUuCisJICovCisJSEFTSENUTAkJaGFz aF9pbmZvOworCWludAkJCWhhc2hfZmxhZ3M7CisKKwkvKgorCSAqIFdoZW4gdGhlIGhhc2gg dGFibGUgaXMgaW5pdGlhbGl6ZWQgb3IgYXR0YWNoZWQgdG8sIHBvaW50ZXIgdG8gaXRzCisJ ICogYmFja2VuZC1wcml2YXRlIGhhbmRsZSBpcyBzdG9yZWQgaW4gKnB0ci4gIEl0IHVzdWFs bHkgcG9pbnRzIHRvIGEKKwkgKiBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzIHRo ZSBoYXNoIHRhYmxlIGxhdGVyLgorCSAqLworCUhUQUIJICAqKnB0cjsKKworCS8qCisJICog RGVzY3JpcHRvciBmb3IgdGhlIHVuZGVybHlpbmcgImFyZWEiLiAgQ2FsbGVycyBvZiBTaG1l bVJlZ2lzdGVySGFzaCgpCisJICogZG8gbm90IG5lZWQgdG8gdG91Y2ggdGhpcywgaXQgaXMg ZmlsbGVkIGluIGJ5IFNobWVtUmVnaXN0ZXJIYXNoKCkgYmFzZWQKKwkgKiBvbiB0aGUgaGFz aCB0YWJsZSBwYXJhbWV0ZXJzLgorCSAqLworCVNobWVtU3RydWN0RGVzYyBiYXNlX2Rlc2M7 Cit9IFNobWVtSGFzaERlc2M7CiAKIC8qIHNobWVtLmMgKi8KIGV4dGVybiBQR0RMTElNUE9S VCBzbG9ja190ICpTaG1lbUxvY2s7CiB0eXBlZGVmIHN0cnVjdCBQR1NobWVtSGVhZGVyIFBH U2htZW1IZWFkZXI7IC8qIGF2b2lkIGluY2x1ZGluZwogCQkJCQkJCQkJCQkgKiBzdG9yYWdl L3BnX3NobWVtLmggaGVyZSAqLworZXh0ZXJuIHZvaWQgUmVzZXRTaG1lbUFsbG9jYXRvcih2 b2lkKTsKIGV4dGVybiB2b2lkIEluaXRTaG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpz ZWdoZHIpOworI2lmZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgQXR0YWNoU2htZW1B bGxvY2F0b3IoUEdTaG1lbUhlYWRlciAqc2VnaGRyKTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQg KlNobWVtQWxsb2MoU2l6ZSBzaXplKTsKIGV4dGVybiB2b2lkICpTaG1lbUFsbG9jTm9FcnJv cihTaXplIHNpemUpOwogZXh0ZXJuIGJvb2wgU2htZW1BZGRySXNWYWxpZChjb25zdCB2b2lk ICphZGRyKTsKKworZXh0ZXJuIGJvb2wgU2htZW1SZWdpc3RlclN0cnVjdChTaG1lbVN0cnVj dERlc2MgKmRlc2MpOworZXh0ZXJuIGJvb2wgU2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNo RGVzYyAqZGVzYyk7CisKKy8qIGxlZ2FjeSBzaG1lbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAq LwogZXh0ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50NjQg aW5pdF9zaXplLCBpbnQ2NCBtYXhfc2l6ZSwKIAkJCQkJCSAgIEhBU0hDVEwgKmluZm9QLCBp bnQgaGFzaF9mbGFncyk7CiBleHRlcm4gdm9pZCAqU2htZW1Jbml0U3RydWN0KGNvbnN0IGNo YXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpOworCitleHRlcm4gc2l6ZV90 IFNobWVtUmVnaXN0ZXJlZFNpemUodm9pZCk7CitleHRlcm4gdm9pZCBTaG1lbUluaXRSZWdp c3RlcmVkKHZvaWQpOworI2lmZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgU2htZW1B dHRhY2hSZWdpc3RlcmVkKHZvaWQpOworI2VuZGlmCisKIGV4dGVybiBTaXplIGFkZF9zaXpl KFNpemUgczEsIFNpemUgczIpOwogZXh0ZXJuIFNpemUgbXVsX3NpemUoU2l6ZSBzMSwgU2l6 ZSBzMik7CiAKQEAgLTQ0LDE5ICsxODIsNCBAQCBleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBw Z19nZXRfc2htZW1fcGFnZXNpemUodm9pZCk7CiAvKiBpcGNpLmMgKi8KIGV4dGVybiB2b2lk IFJlcXVlc3RBZGRpblNobWVtU3BhY2UoU2l6ZSBzaXplKTsKIAotLyogc2l6ZSBjb25zdGFu dHMgZm9yIHRoZSBzaG1lbSBpbmRleCB0YWJsZSAqLwotIC8qIG1heCBzaXplIG9mIGRhdGEg c3RydWN0dXJlIHN0cmluZyBuYW1lICovCi0jZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJ CSAoNDgpCi0gLyogZXN0aW1hdGVkIHNpemUgb2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChu b3QgYSBoYXJkIGxpbWl0KSAqLwotI2RlZmluZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQot Ci0vKiB0aGlzIGlzIGEgaGFzaCBidWNrZXQgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlICov Ci10eXBlZGVmIHN0cnVjdAotewotCWNoYXIJCWtleVtTSE1FTV9JTkRFWF9LRVlTSVpFXTsJ Lyogc3RyaW5nIG5hbWUgKi8KLQl2b2lkCSAgICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGlu IHNoYXJlZCBtZW0gKi8KLQlTaXplCQlzaXplOwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZv ciB0aGUgc3RydWN0dXJlICovCi0JU2l6ZQkJYWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMg YWN0dWFsbHkgYWxsb2NhdGVkICovCi19IFNobWVtSW5kZXhFbnQ7Ci0KICNlbmRpZgkJCQkJ CQkvKiBTSE1FTV9IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDE3NGUy Nzk4NDQzLi44ZmRhODNkNTFmMCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAg LTI4MzcsOSArMjgzNywxMSBAQCBTaGFyZWRUeXBtb2RUYWJsZUVudHJ5CiBTaGFyZWRzb3J0 CiBTaGVsbFR5cGVJbmZvCiBTaGlwcGFibGVDYWNoZUVudHJ5Ci1TaG1lbUFsbG9jYXRvckRh dGEKIFNoaXBwYWJsZUNhY2hlS2V5CitTaG1lbUFsbG9jYXRvckRhdGEKIFNobWVtSW5kZXhF bnQKK1NobWVtSGFzaERlc2MKK1NobWVtU3RydWN0RGVzYwogU2h1dGRvd25Gb3JlaWduU2Nh bl9mdW5jdGlvbgogU2h1dGRvd25JbmZvcm1hdGlvbgogU2h1dGRvd25Nb2RlCi0tIAoyLjQ3 LjMKCg== --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0004-Convert-pg_stat_statements-to-use-the-new-interfa.patch" Content-Disposition: attachment; filename*0="v6-0004-Convert-pg_stat_statements-to-use-the-new-interfa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4NTVhNjFlNjdmYTljMzcyZTYxOTcxZmI5ZWY4N2RiZTEwOTM2NzgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjM6MDA6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDQvNl0gQ29udmVydCBwZ19zdGF0X3N0YXRlbWVudHMgdG8g dXNlIHRoZSBuZXcgaW50ZXJmYWNlCgpBcyBwYXJ0IG9mIHRoaXMsIGVtYmVkIHRoZSBMV0xv Y2sgaXQgbmVlZHMgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0Cml0c2VsZiwgc28gdGhh dCB3ZSBkb24ndCBuZWVkIHRvIHVzZSBSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCkKYW55 bW9yZS4gTFdMb2NrTmV3VHJhbmNoZUlkK0xXTG9ja0luaXRpYWxpemUgaXMgbW9yZSBjb252 ZW5pZW50IHRvIHVzZQppbiBleHRlbnNpb25zLgoKUmV2aWV3ZWQtYnk6IEFzaHV0b3NoIEJh cGF0IDxhc2h1dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogWnNvbHQg UGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVy dCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FFeEhXNXZNMWJuZUxZZmcwd0dlQWE9NTJV aUozejR2S2QzQUo3Mlg4Rnc2azNLS3JnQG1haWwuZ21haWwuY29tCi0tLQogLi4uL3BnX3N0 YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwgMTYxICsrKysrKysrLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDk0IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0 ZW1lbnRzLmMKaW5kZXggNmNiMTQ4MjRlYzMuLjhkZjQ3NDlhNDNiIDEwMDY0NAotLS0gYS9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysgYi9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAtMjQ5 LDcgKzI0OSw3IEBAIHR5cGVkZWYgc3RydWN0IHBnc3NFbnRyeQogICovCiB0eXBlZGVmIHN0 cnVjdCBwZ3NzU2hhcmVkU3RhdGUKIHsKLQlMV0xvY2sJICAgKmxvY2s7CQkJLyogcHJvdGVj dHMgaGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KKwlMV0xvY2tQYWRkZWQgbG9j azsJCQkvKiBwcm90ZWN0cyBoYXNodGFibGUgc2VhcmNoL21vZGlmaWNhdGlvbiAqLwogCWRv dWJsZQkJY3VyX21lZGlhbl91c2FnZTsJLyogY3VycmVudCBtZWRpYW4gdXNhZ2UgaW4gaGFz aHRhYmxlICovCiAJU2l6ZQkJbWVhbl9xdWVyeV9sZW47IC8qIGN1cnJlbnQgbWVhbiBlbnRy eSB0ZXh0IGxlbmd0aCAqLwogCXNsb2NrX3QJCW11dGV4OwkJCS8qIHByb3RlY3RzIGZvbGxv d2luZyBmaWVsZHMgb25seTogKi8KQEAgLTI1OSwxMyArMjU5LDM5IEBAIHR5cGVkZWYgc3Ry dWN0IHBnc3NTaGFyZWRTdGF0ZQogCXBnc3NHbG9iYWxTdGF0cyBzdGF0czsJCS8qIGdsb2Jh bCBzdGF0aXN0aWNzIGZvciBwZ3NzICovCiB9IHBnc3NTaGFyZWRTdGF0ZTsKIAorLyogTGlu a3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLworc3RhdGljIHBnc3NTaGFyZWRTdGF0ZSAq cGdzczsKK3N0YXRpYyBIVEFCICpwZ3NzX2hhc2g7CisKK3N0YXRpYyB2b2lkIHBnc3Nfc2ht ZW1faW5pdCh2b2lkICphcmcpOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIHBnc3NTaGFy ZWRTdGF0ZVNobWVtRGVzYyA9Cit7CisJLm5hbWUgPSAicGdfc3RhdF9zdGF0ZW1lbnRzIiwK Kwkuc2l6ZSA9IHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAorCS5pbml0X2ZuID0gcGdzc19z aG1lbV9pbml0LAorCS5wdHIgPSAodm9pZCAqKikgJnBnc3MsCit9OworCitzdGF0aWMgU2ht ZW1IYXNoRGVzYyBwZ3NzU2hhcmVkSGFzaERlc2MgPQoreworCS5uYW1lID0gInBnX3N0YXRf c3RhdGVtZW50cyBoYXNoIiwKKwkucHRyID0gJnBnc3NfaGFzaCwKKworCS5pbml0X3NpemUg PSAwLAkJCQkvKiBzZXQgZnJvbSAncGdzc19tYXgnICovCisJLm1heF9zaXplID0gMCwJCQkJ Lyogc2V0IGZyb20gJ3Bnc3NfbWF4JyAqLworCS5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVv ZihwZ3NzSGFzaEtleSksCisJLmhhc2hfaW5mby5lbnRyeXNpemUgPSBzaXplb2YocGdzc0Vu dHJ5KSwKKwkuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMsCit9OworCisK IC8qLS0tLSBMb2NhbCB2YXJpYWJsZXMgLS0tLSovCiAKIC8qIEN1cnJlbnQgbmVzdGluZyBk ZXB0aCBvZiBwbGFubmVyL0V4ZWN1dG9yUnVuL1Byb2Nlc3NVdGlsaXR5IGNhbGxzICovCiBz dGF0aWMgaW50CW5lc3RpbmdfbGV2ZWwgPSAwOwogCiAvKiBTYXZlZCBob29rIHZhbHVlcyAq Lwotc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVzdF9o b29rID0gTlVMTDsKIHN0YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBwcmV2X3NobWVt X3N0YXJ0dXBfaG9vayA9IE5VTEw7CiBzdGF0aWMgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tf dHlwZSBwcmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gTlVMTDsKIHN0YXRpYyBwbGFu bmVyX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfaG9vayA9IE5VTEw7CkBAIC0yNzUsMTAgKzMw MSw2IEBAIHN0YXRpYyBFeGVjdXRvckZpbmlzaF9ob29rX3R5cGUgcHJldl9FeGVjdXRvckZp bmlzaCA9IE5VTEw7CiBzdGF0aWMgRXhlY3V0b3JFbmRfaG9va190eXBlIHByZXZfRXhlY3V0 b3JFbmQgPSBOVUxMOwogc3RhdGljIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBwcmV2X1By b2Nlc3NVdGlsaXR5ID0gTlVMTDsKIAotLyogTGlua3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0 ZSAqLwotc3RhdGljIHBnc3NTaGFyZWRTdGF0ZSAqcGdzcyA9IE5VTEw7Ci1zdGF0aWMgSFRB QiAqcGdzc19oYXNoID0gTlVMTDsKLQogLyotLS0tIEdVQyB2YXJpYWJsZXMgLS0tLSovCiAK IHR5cGVkZWYgZW51bQpAQCAtMzMxLDcgKzM1Myw2IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEo cGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0 X3N0YXRlbWVudHMpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNf aW5mbyk7CiAKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkKTsKIHN0YXRp YyB2b2lkIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnc3Nfc2ht ZW1fc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3NzX3Bv c3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwKQEAg LTM2Niw3ICszODcsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0ZW1lbnRzX2lu dGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJCQkJCXBnc3NWZXJzaW9u IGFwaV92ZXJzaW9uLAogCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQpOwotc3RhdGljIFNpemUg cGdzc19tZW1zaXplKHZvaWQpOwogc3RhdGljIHBnc3NFbnRyeSAqZW50cnlfYWxsb2MocGdz c0hhc2hLZXkgKmtleSwgU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4sCiAJCQkJ CQkJICBpbnQgZW5jb2RpbmcsIGJvb2wgc3RpY2t5KTsKIHN0YXRpYyB2b2lkIGVudHJ5X2Rl YWxsb2Modm9pZCk7CkBAIC00NzEsMTEgKzQ5MSwxOCBAQCBfUEdfaW5pdCh2b2lkKQogCiAJ TWFya0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19zdGF0X3N0YXRlbWVudHMiKTsKIAorCS8qCisJ ICogUmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1vcnkgbmVlZHMsIGluY2x1ZGluZyBoYXNoIHRh YmxlCisJICovCisJU2htZW1SZWdpc3RlclN0cnVjdCgmcGdzc1NoYXJlZFN0YXRlU2htZW1E ZXNjKTsKKworCXBnc3NTaGFyZWRIYXNoRGVzYy5pbml0X3NpemUgPSBwZ3NzX21heDsKKwlw Z3NzU2hhcmVkSGFzaERlc2MubWF4X3NpemUgPSBwZ3NzX21heDsKKwlTaG1lbVJlZ2lzdGVy SGFzaCgmcGdzc1NoYXJlZEhhc2hEZXNjKTsKKwogCS8qCiAJICogSW5zdGFsbCBob29rcy4K IAkgKi8KLQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IHNobWVtX3JlcXVlc3RfaG9vazsK LQlzaG1lbV9yZXF1ZXN0X2hvb2sgPSBwZ3NzX3NobWVtX3JlcXVlc3Q7CiAJcHJldl9zaG1l bV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7CiAJc2htZW1fc3RhcnR1cF9o b29rID0gcGdzc19zaG1lbV9zdGFydHVwOwogCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hv b2sgPSBwb3N0X3BhcnNlX2FuYWx5emVfaG9vazsKQEAgLTQ5NCwzMSArNTIxLDMxIEBAIF9Q R19pbml0KHZvaWQpCiAJUHJvY2Vzc1V0aWxpdHlfaG9vayA9IHBnc3NfUHJvY2Vzc1V0aWxp dHk7CiB9CiAKLS8qCi0gKiBzaG1lbV9yZXF1ZXN0IGhvb2s6IHJlcXVlc3QgYWRkaXRpb25h bCBzaGFyZWQgcmVzb3VyY2VzLiAgV2UnbGwgYWxsb2NhdGUgb3IKLSAqIGF0dGFjaCB0byB0 aGUgc2hhcmVkIHJlc291cmNlcyBpbiBwZ3NzX3NobWVtX3N0YXJ0dXAoKS4KLSAqLwogc3Rh dGljIHZvaWQKLXBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkKQorcGdzc19zaG1lbV9pbml0KHZv aWQgKmFyZykKIHsKLQlpZiAocHJldl9zaG1lbV9yZXF1ZXN0X2hvb2spCi0JCXByZXZfc2ht ZW1fcmVxdWVzdF9ob29rKCk7CisJaW50CQkJdHJhbmNoZV9pZDsKIAotCVJlcXVlc3RBZGRp blNobWVtU3BhY2UocGdzc19tZW1zaXplKCkpOwotCVJlcXVlc3ROYW1lZExXTG9ja1RyYW5j aGUoInBnX3N0YXRfc3RhdGVtZW50cyIsIDEpOworCXRyYW5jaGVfaWQgPSBMV0xvY2tOZXdU cmFuY2hlSWQoInBnX3N0YXRfc3RhdGVtZW50cyIpOworCUxXTG9ja0luaXRpYWxpemUoJnBn c3MtPmxvY2subG9jaywgdHJhbmNoZV9pZCk7CisJcGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9 IEFTU1VNRURfTUVESUFOX0lOSVQ7CisJcGdzcy0+bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVE X0xFTkdUSF9JTklUOworCVNwaW5Mb2NrSW5pdCgmcGdzcy0+bXV0ZXgpOworCXBnc3MtPmV4 dGVudCA9IDA7CisJcGdzcy0+bl93cml0ZXJzID0gMDsKKwlwZ3NzLT5nY19jb3VudCA9IDA7 CisJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7CisJcGdzcy0+c3RhdHMuc3RhdHNfcmVzZXQg PSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiB9CiAKIC8qCi0gKiBzaG1lbV9zdGFydHVwIGhv b2s6IGFsbG9jYXRlIG9yIGF0dGFjaCB0byBzaGFyZWQgbWVtb3J5LAotICogdGhlbiBsb2Fk IGFueSBwcmUtZXhpc3Rpbmcgc3RhdGlzdGljcyBmcm9tIGZpbGUuCi0gKiBBbHNvIGNyZWF0 ZSBhbmQgbG9hZCB0aGUgcXVlcnktdGV4dHMgZmlsZSwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8g ZXhpc3QKLSAqIChldmVuIGlmIGVtcHR5KSB3aGlsZSB0aGUgbW9kdWxlIGlzIGVuYWJsZWQu CisgKiBzaG1lbV9zdGFydHVwIGhvb2s6IExvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0 aWNzIGZyb20gZmlsZSBhdAorICogcG9zdG1hc3RlciBzdGFydHVwLiAgQWxzbyBjcmVhdGUg YW5kIGxvYWQgdGhlIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzCisgKiBleHBlY3RlZCB0 byBleGlzdCAoZXZlbiBpZiBlbXB0eSkgd2hpbGUgdGhlIG1vZHVsZSBpcyBlbmFibGVkLgog ICovCiBzdGF0aWMgdm9pZAogcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCiB7Ci0JYm9vbAkJ Zm91bmQ7Ci0JSEFTSENUTAkJaW5mbzsKIAlGSUxFCSAgICpmaWxlID0gTlVMTDsKIAlGSUxF CSAgICpxZmlsZSA9IE5VTEw7CiAJdWludDMyCQloZWFkZXI7CkBAIC01MzEsNTQgKzU1OCwx NCBAQCBwZ3NzX3NobWVtX3N0YXJ0dXAodm9pZCkKIAlpZiAocHJldl9zaG1lbV9zdGFydHVw X2hvb2spCiAJCXByZXZfc2htZW1fc3RhcnR1cF9ob29rKCk7CiAKLQkvKiByZXNldCBpbiBj YXNlIHRoaXMgaXMgYSByZXN0YXJ0IHdpdGhpbiB0aGUgcG9zdG1hc3RlciAqLwotCXBnc3Mg PSBOVUxMOwotCXBnc3NfaGFzaCA9IE5VTEw7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQor CQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIGRvIGluIGJhY2tlbmRzICovCiAKIAkvKgot CSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBtZW1vcnkgc3RhdGUsIGluY2x1 ZGluZyBoYXNoIHRhYmxlCisJICogU2V0IHVwIGEgc2htZW0gZXhpdCBob29rIHRvIGR1bXAg dGhlIHN0YXRpc3RpY3MgdG8gZGlzayBvbiBwb3N0bWFzdGVyCisJICogKG9yIHN0YW5kYWxv bmUgYmFja2VuZCkgZXhpdC4KIAkgKi8KLQlMV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0 TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXBnc3MgPSBTaG1lbUluaXRTdHJ1Y3QoInBnX3N0 YXRfc3RhdGVtZW50cyIsCi0JCQkJCQkgICBzaXplb2YocGdzc1NoYXJlZFN0YXRlKSwKLQkJ CQkJCSAgICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyogRmlyc3QgdGltZSB0 aHJvdWdoIC4uLiAqLwotCQlwZ3NzLT5sb2NrID0gJihHZXROYW1lZExXTG9ja1RyYW5jaGUo InBnX3N0YXRfc3RhdGVtZW50cyIpKS0+bG9jazsKLQkJcGdzcy0+Y3VyX21lZGlhbl91c2Fn ZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7Ci0JCXBnc3MtPm1lYW5fcXVlcnlfbGVuID0gQVNT VU1FRF9MRU5HVEhfSU5JVDsKLQkJU3BpbkxvY2tJbml0KCZwZ3NzLT5tdXRleCk7Ci0JCXBn c3MtPmV4dGVudCA9IDA7Ci0JCXBnc3MtPm5fd3JpdGVycyA9IDA7Ci0JCXBnc3MtPmdjX2Nv dW50ID0gMDsKLQkJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7Ci0JCXBnc3MtPnN0YXRzLnN0 YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCX0KLQotCWluZm8ua2V5c2l6 ZSA9IHNpemVvZihwZ3NzSGFzaEtleSk7Ci0JaW5mby5lbnRyeXNpemUgPSBzaXplb2YocGdz c0VudHJ5KTsKLQlwZ3NzX2hhc2ggPSBTaG1lbUluaXRIYXNoKCJwZ19zdGF0X3N0YXRlbWVu dHMgaGFzaCIsCi0JCQkJCQkJICBwZ3NzX21heCwgcGdzc19tYXgsCi0JCQkJCQkJICAmaW5m bywKLQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCi0JTFdMb2NrUmVsZWFz ZShBZGRpblNobWVtSW5pdExvY2spOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9z dG1hc3RlciAob3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQot CSAqIGV4aXQgaG9vayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCi0JICovCi0J aWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQkJb25fc2htZW1fZXhpdChwZ3NzX3NobWVtX3No dXRkb3duLCAoRGF0dW0pIDApOwotCi0JLyoKLQkgKiBEb25lIGlmIHNvbWUgb3RoZXIgcHJv Y2VzcyBhbHJlYWR5IGNvbXBsZXRlZCBvdXIgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JaWYg KGZvdW5kKQotCQlyZXR1cm47CisJb25fc2htZW1fZXhpdChwZ3NzX3NobWVtX3NodXRkb3du LCAoRGF0dW0pIDApOwogCiAJLyoKIAkgKiBOb3RlOiB3ZSBkb24ndCBib3RoZXIgd2l0aCBs b2NrcyBoZXJlLCBiZWNhdXNlIHRoZXJlIHNob3VsZCBiZSBubyBvdGhlcgpAQCAtMTMzOCw3 ICsxMzI1LDcgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJ ZCwKIAlrZXkudG9wbGV2ZWwgPSAobmVzdGluZ19sZXZlbCA9PSAwKTsKIAogCS8qIExvb2t1 cCB0aGUgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHNoYXJlZCBsb2NrLiAqLwotCUxXTG9ja0Fj cXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5s b2NrLmxvY2ssIExXX1NIQVJFRCk7CiAKIAllbnRyeSA9IChwZ3NzRW50cnkgKikgaGFzaF9z ZWFyY2gocGdzc19oYXNoLCAma2V5LCBIQVNIX0ZJTkQsIE5VTEwpOwogCkBAIC0xMzU5LDEx ICsxMzQ2LDExIEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5 SWQsCiAJCSAqLwogCQlpZiAoanN0YXRlKQogCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKHBnc3Mt PmxvY2spOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKIAkJCW5vcm1f cXVlcnkgPSBnZW5lcmF0ZV9ub3JtYWxpemVkX3F1ZXJ5KGpzdGF0ZSwgcXVlcnksCiAJCQkJ CQkJCQkJCQkgICBxdWVyeV9sb2NhdGlvbiwKIAkJCQkJCQkJCQkJCSAgICZxdWVyeV9sZW4p OwotCQkJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOworCQkJTFdMb2Nr QWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBMV19TSEFSRUQpOwogCQl9CiAKIAkJLyogQXBw ZW5kIG5ldyBxdWVyeSB0ZXh0IHRvIGZpbGUgd2l0aCBvbmx5IHNoYXJlZCBsb2NrIGhlbGQg Ki8KQEAgLTEzNzgsOCArMTM2NSw4IEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnks IGludDY0IHF1ZXJ5SWQsCiAJCWRvX2djID0gbmVlZF9nY19xdGV4dHMoKTsKIAogCQkvKiBO ZWVkIGV4Y2x1c2l2ZSBsb2NrIHRvIG1ha2UgYSBuZXcgaGFzaHRhYmxlIGVudHJ5IC0gcHJv bW90ZSAqLwotCQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOwotCQlMV0xvY2tBY3F1aXJl KHBnc3MtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxv Y2subG9jayk7CisJCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfRVhDTFVT SVZFKTsKIAogCQkvKgogCQkgKiBBIGdhcmJhZ2UgY29sbGVjdGlvbiBtYXkgaGF2ZSBvY2N1 cnJlZCB3aGlsZSB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlCkBAIC0xNTE4LDcgKzE1MDUsNyBA QCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogCX0KIAog ZG9uZToKLQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCUxXTG9ja1JlbGVhc2UoJnBn c3MtPmxvY2subG9jayk7CiAKIAkvKiBXZSBwb3N0cG9uZSB0aGlzIGNsZWFuLXVwIHVudGls IHdlJ3JlIG91dCBvZiB0aGUgbG9jayAqLwogCWlmIChub3JtX3F1ZXJ5KQpAQCAtMTgwNyw3 ICsxNzk0LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAogCSAqIHdlIG5lZWQgdG8gcGFydGl0aW9uIHRoZSBoYXNoIHRhYmxlIHRv IGxpbWl0IHRoZSB0aW1lIHNwZW50IGhvbGRpbmcgYW55CiAJICogb25lIGxvY2suCiAJICov Ci0JTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOworCUxXTG9ja0FjcXVp cmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsKIAogCWlmIChzaG93dGV4dCkKIAl7 CkBAIC0yMDQ0LDcgKzIwMzEsNyBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+ c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOwogCX0KIAotCUxX TG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CisJTFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5s b2NrKTsKIAogCWZyZWUocWJ1ZmZlcik7CiB9CkBAIC0yMDgzLDIwICsyMDcwLDYgQEAgcGdf c3RhdF9zdGF0ZW1lbnRzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fREFU VU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywg bnVsbHMpKSk7CiB9CiAKLS8qCi0gKiBFc3RpbWF0ZSBzaGFyZWQgbWVtb3J5IHNwYWNlIG5l ZWRlZC4KLSAqLwotc3RhdGljIFNpemUKLXBnc3NfbWVtc2l6ZSh2b2lkKQotewotCVNpemUJ CXNpemU7Ci0KLQlzaXplID0gTUFYQUxJR04oc2l6ZW9mKHBnc3NTaGFyZWRTdGF0ZSkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUocGdzc19tYXgsIHNp emVvZihwZ3NzRW50cnkpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoKICAqIEFsbG9j YXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeS4KICAqIGNhbGxlciBtdXN0IGhvbGQgYW4gZXhj bHVzaXZlIGxvY2sgb24gcGdzcy0+bG9jawpAQCAtMjcyNiw3ICsyNjk5LDcgQEAgZW50cnlf cmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0IHF1ZXJ5aWQsIGJvb2wgbWlubWF4 X29ubHkpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lU RV9TVEFURSksCiAJCQkJIGVycm1zZygicGdfc3RhdF9zdGF0ZW1lbnRzIG11c3QgYmUgbG9h ZGVkIHZpYSBcInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiIikpKTsKIAotCUxXTG9ja0Fj cXVpcmUocGdzcy0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3Nz LT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJbnVtX2VudHJpZXMgPSBoYXNoX2dldF9u dW1fZW50cmllcyhwZ3NzX2hhc2gpOwogCiAJc3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CkBAIC0yODIwLDcgKzI3OTMsNyBAQCBkb25lOgogCXJlY29yZF9nY19xdGV4 dHMoKTsKIAogcmVsZWFzZV9sb2NrOgotCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CisJ TFdMb2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKIAogCXJldHVybiBzdGF0c19yZXNl dDsKIH0KLS0gCjIuNDcuMwoK --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0005-move-pgss-shmem_startup-hook-code-into-the-new-in.patch" Content-Disposition: attachment; filename*0="v6-0005-move-pgss-shmem_startup-hook-code-into-the-new-in.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1YjYzNzk0ZjRhZTI0YTk0MGFlZjEyMzhiYTUwM2M1MWIwZWUzOTNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTkgTWFyIDIwMjYgMTE6NTc6MDIgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDUvNl0gbW92ZSBwZ3NzIHNobWVtX3N0YXJ0dXAgaG9vayBj b2RlIGludG8gdGhlIG5ldyBpbml0X2ZuCiBjYWxsYmFjawoKLS0tCiAuLi4vcGdfc3RhdF9z dGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCA1NiArKysrKysrKystLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0 ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVu dHMuYwppbmRleCA4ZGY0NzQ5YTQzYi4uOGM4NDIzMmY0ZDAgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0yOTIsNyAr MjkyLDYgQEAgc3RhdGljIFNobWVtSGFzaERlc2MgcGdzc1NoYXJlZEhhc2hEZXNjID0KIHN0 YXRpYyBpbnQJbmVzdGluZ19sZXZlbCA9IDA7CiAKIC8qIFNhdmVkIGhvb2sgdmFsdWVzICov Ci1zdGF0aWMgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hv b2sgPSBOVUxMOwogc3RhdGljIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcHJldl9w b3N0X3BhcnNlX2FuYWx5emVfaG9vayA9IE5VTEw7CiBzdGF0aWMgcGxhbm5lcl9ob29rX3R5 cGUgcHJldl9wbGFubmVyX2hvb2sgPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9v a190eXBlIHByZXZfRXhlY3V0b3JTdGFydCA9IE5VTEw7CkBAIC0zNTMsNyArMzUyLDYgQEAg UEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfMV8xMyk7CiBQR19GVU5D VElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50cyk7CiBQR19GVU5DVElPTl9JTkZPX1Yx KHBnX3N0YXRfc3RhdGVtZW50c19pbmZvKTsKIAotc3RhdGljIHZvaWQgcGdzc19zaG1lbV9z dGFydHVwKHZvaWQpOwogc3RhdGljIHZvaWQgcGdzc19zaG1lbV9zaHV0ZG93bihpbnQgY29k ZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHBnc3NfcG9zdF9wYXJzZV9hbmFseXplKFBh cnNlU3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LAogCQkJCQkJCQkJSnVtYmxlU3RhdGUg KmpzdGF0ZSk7CkBAIC00OTIsMTkgKzQ5MCwxOCBAQCBfUEdfaW5pdCh2b2lkKQogCU1hcmtH VUNQcmVmaXhSZXNlcnZlZCgicGdfc3RhdF9zdGF0ZW1lbnRzIik7CiAKIAkvKgotCSAqIFJl Z2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzLCBpbmNsdWRpbmcgaGFzaCB0YWJsZQor CSAqIFJlZ2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzLiAgUmVnaXN0ZXIgdGhlIGhh c2ggdGFibGUgZmlyc3QsIHNvCisJICogdGhhdCBpdCdzIGFscmVhZHkgaW5pdGlhbGl6ZWQg d2hlbiBwZ3NzX3NobWVtX2luaXQoKSBpcyBjYWxsZWQuCiAJICovCi0JU2htZW1SZWdpc3Rl clN0cnVjdCgmcGdzc1NoYXJlZFN0YXRlU2htZW1EZXNjKTsKLQogCXBnc3NTaGFyZWRIYXNo RGVzYy5pbml0X3NpemUgPSBwZ3NzX21heDsKIAlwZ3NzU2hhcmVkSGFzaERlc2MubWF4X3Np emUgPSBwZ3NzX21heDsKIAlTaG1lbVJlZ2lzdGVySGFzaCgmcGdzc1NoYXJlZEhhc2hEZXNj KTsKIAorCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJnBnc3NTaGFyZWRTdGF0ZVNobWVtRGVzYyk7 CisKIAkvKgogCSAqIEluc3RhbGwgaG9va3MuCiAJICovCi0JcHJldl9zaG1lbV9zdGFydHVw X2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7Ci0Jc2htZW1fc3RhcnR1cF9ob29rID0gcGdz c19zaG1lbV9zdGFydHVwOwogCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2sgPSBwb3N0 X3BhcnNlX2FuYWx5emVfaG9vazsKIAlwb3N0X3BhcnNlX2FuYWx5emVfaG9vayA9IHBnc3Nf cG9zdF9wYXJzZV9hbmFseXplOwogCXByZXZfcGxhbm5lcl9ob29rID0gcGxhbm5lcl9ob29r OwpAQCAtNTIxLDExICs1MTgsMjkgQEAgX1BHX2luaXQodm9pZCkKIAlQcm9jZXNzVXRpbGl0 eV9ob29rID0gcGdzc19Qcm9jZXNzVXRpbGl0eTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUg b3VyIHNoYXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGF0IHBvc3RtYXN0ZXIgc3RhcnR1 cC4KKyAqCisgKiBMb2FkIGFueSBwcmUtZXhpc3Rpbmcgc3RhdGlzdGljcyBmcm9tIGZpbGUu ICBBbHNvIGNyZWF0ZSBhbmQgbG9hZCB0aGUKKyAqIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNo IGlzIGV4cGVjdGVkIHRvIGV4aXN0IChldmVuIGlmIGVtcHR5KSB3aGlsZSB0aGUKKyAqIG1v ZHVsZSBpcyBlbmFibGVkLgorICovCiBzdGF0aWMgdm9pZAogcGdzc19zaG1lbV9pbml0KHZv aWQgKmFyZykKIHsKIAlpbnQJCQl0cmFuY2hlX2lkOworCUZJTEUJICAgKmZpbGUgPSBOVUxM OworCUZJTEUJICAgKnFmaWxlID0gTlVMTDsKKwl1aW50MzIJCWhlYWRlcjsKKwlpbnQzMgkJ bnVtOworCWludDMyCQlwZ3ZlcjsKKwlpbnQzMgkJaTsKKwlpbnQJCQlidWZmZXJfc2l6ZTsK KwljaGFyCSAgICpidWZmZXIgPSBOVUxMOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBz aG1lbSBhcmVhIHdpdGggbm8gc3RhdGlzdGljcy4KKwkgKi8KIAl0cmFuY2hlX2lkID0gTFdM b2NrTmV3VHJhbmNoZUlkKCJwZ19zdGF0X3N0YXRlbWVudHMiKTsKIAlMV0xvY2tJbml0aWFs aXplKCZwZ3NzLT5sb2NrLmxvY2ssIHRyYW5jaGVfaWQpOwogCXBnc3MtPmN1cl9tZWRpYW5f dXNhZ2UgPSBBU1NVTUVEX01FRElBTl9JTklUOwpAQCAtNTM2LDMwICs1NTEsOSBAQCBwZ3Nz X3NobWVtX2luaXQodm9pZCAqYXJnKQogCXBnc3MtPmdjX2NvdW50ID0gMDsKIAlwZ3NzLT5z dGF0cy5kZWFsbG9jID0gMDsKIAlwZ3NzLT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJl bnRUaW1lc3RhbXAoKTsKLX0KLQotLyoKLSAqIHNobWVtX3N0YXJ0dXAgaG9vazogTG9hZCBh bnkgcHJlLWV4aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlIGF0Ci0gKiBwb3N0bWFzdGVy IHN0YXJ0dXAuICBBbHNvIGNyZWF0ZSBhbmQgbG9hZCB0aGUgcXVlcnktdGV4dHMgZmlsZSwg d2hpY2ggaXMKLSAqIGV4cGVjdGVkIHRvIGV4aXN0IChldmVuIGlmIGVtcHR5KSB3aGlsZSB0 aGUgbW9kdWxlIGlzIGVuYWJsZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1wZ3NzX3NobWVtX3N0 YXJ0dXAodm9pZCkKLXsKLQlGSUxFCSAgICpmaWxlID0gTlVMTDsKLQlGSUxFCSAgICpxZmls ZSA9IE5VTEw7Ci0JdWludDMyCQloZWFkZXI7Ci0JaW50MzIJCW51bTsKLQlpbnQzMgkJcGd2 ZXI7Ci0JaW50MzIJCWk7Ci0JaW50CQkJYnVmZmVyX3NpemU7Ci0JY2hhcgkgICAqYnVmZmVy ID0gTlVMTDsKIAotCWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKLQkJcHJldl9zaG1l bV9zdGFydHVwX2hvb2soKTsKLQotCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKLQkJcmV0dXJu OwkJCQkJLyogbm90aGluZyB0byBkbyBpbiBiYWNrZW5kcyAqLworCS8qIFRoZSBoYXNoIHRh YmxlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWxyZWFkeSAqLworCUFzc2VydChwZ3NzX2hhc2gg IT0gTlVMTCk7CiAKIAkvKgogCSAqIFNldCB1cCBhIHNobWVtIGV4aXQgaG9vayB0byBkdW1w IHRoZSBzdGF0aXN0aWNzIHRvIGRpc2sgb24gcG9zdG1hc3RlcgpAQCAtNTY4LDYgKzU2Miw4 IEBAIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogCW9uX3NobWVtX2V4aXQocGdzc19zaG1l bV9zaHV0ZG93biwgKERhdHVtKSAwKTsKIAogCS8qCisJICogTG9hZCBhbnkgcHJlLWV4aXN0 aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgorCSAqCiAJICogTm90ZTogd2UgZG9uJ3QgYm90 aGVyIHdpdGggbG9ja3MgaGVyZSwgYmVjYXVzZSB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXIK IAkgKiBwcm9jZXNzZXMgcnVubmluZyB3aGVuIHRoaXMgY29kZSBpcyByZWFjaGVkLgogCSAq LwotLSAKMi40Ny4zCgo= --------------9KUsCkZJ2q1LfUJZKT3CK0fL Content-Type: text/x-patch; charset=UTF-8; name="v6-0006-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="v6-0006-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSA3MTYwYWUwMDY1N2Q1ZTQwZTc0YjNiMGYzMWRlMTQ0MzVkYjczMTkwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjM6MDE6NDQgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDYvNl0gVXNlIHRoZSBuZXcgbWVjaGFuaXNtIGluIGEgZmV3 IGNvcmUgc3Vic3lzdGVtcwoKSSBjaG9zZSB0aGVzZSBzdWJzeXN0ZW1zIHNwZWNpZmljYWxs eSBiZWNhdXNlIHRoZXkgaGF2ZSBzb21lCmNvbXBsaWNhdGluZyBwcm9wZXJ0aWVzLCBtYWtp bmcgdGhlbSBzbGlnaHRseSBoYXJkZXIgdG8gY29udmVydCB0aGFuCm1vc3Q6CgotIFRoZSBp bml0aWFsaXphdGlvbiBjYWxsYmFja3Mgb2Ygc29tZSBvZiB0aGVzZSBzdWJzeXN0ZW1zIGhh dmUKICBkZXBlbmRlbmNpZXMsIGkuZS4gdGhleSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGlu IHRoZSByaWdodCBvcmRlci4KCi0gVGhlIFByb2dHbG9iYWwgcG9pbnRlciBzdGlsbCBuZWVk cyB0byBiZSBpbmhlcml0ZWQgYnkgdGhlCiAgQmFja2VuZFBhcmFtZXRlcnMgbWVjaGFuaXNt IG9uIEVYRUNfQkFDS0VORCBidWlsZHMsIGJlY2F1c2UKICBQcm9jR2xvYmFsIGlzIHJlcXVp cmVkIGJ5IEluaXRQcm9jZXNzKCkgdG8gZ2V0IGEgUEdQUk9DIGVudHJ5LCBhbmQKICB0aGUg UEdQUk9DIGVudHJ5IGlzIHJlcXVpcmVkIHRvIHVzZSBMV0xvY2tzLCBhbmQgdXN1YWxseSBh dHRhY2hpbmcKICB0byBzaGFyZWQgbWVtb3J5IGFyZWFzIHJlcXVpcmVzIHRoZSB1c2Ugb2Yg TFdMb2Nrcy4KCi0gU2ltaWxhcmx5LCBQcm9jU2lnbmFsIHBvaW50ZXIgc3RpbGwgbmVlZHMg dG8gYmUgaGFuZGxlZCBieQogIEJhY2tlbmRQYXJhbWV0ZXJzLCBiZWNhdXNlIHF1ZXJ5IGNh bmNlbGxhdGlvbiBjb25uZWN0aW9ucyBhY2Nlc3MgaXQKICB3aXRob3V0IGNhbGxpbmcgSW5p dFByb2Nlc3MKCkknbSBiZWxpZXZlIGNvbnZlcnRpbmcgYWxsIHRoZSByZXN0IG9mIHRoZSBz dWJzeXN0ZW1zIGFmdGVyIHRoaXMgd2lsbApiZSBwcmV0dHkgbWVjaGFuaWMuCgpSZXZpZXdl ZC1ieTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBRXhI VzV2TTFibmVMWWZnMHdHZUFhPTUyVWlKM3o0dktkM0FKNzJYOEZ3NmszS0tyZ0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jICAgICB8 ICAzMyArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMgICAgICAgICAgIHwg IDYxICsrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyAg fCAgMzQgKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICB8 ICA1MCArKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jICAgICAg fCAgNDkgKysrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAg IHwgMTIyICsrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nz aWduYWwuYyAgICB8ICA2MyArKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Np bnZhbGFkdC5jICAgICB8ICAzNiArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYyAgICAgICAgIHwgMTc4ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIHwgIDk0ICsrKysrKy0tLS0tLS0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAgICAgICAgICB8ICAgMyArLQogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9kc20uaCAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NhcnJheS5oICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQu aCAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggICAg ICAgICAgfCAgIDMgKy0KIDE5IGZpbGVzIGNoYW5nZWQsIDM2NiBpbnNlcnRpb25zKCspLCAz ODAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdmFyc3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwppbmRl eCAzZTk1ZDRjZmQxNi4uODRlNmM5MGY0ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3ZhcnN1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3ZhcnN1cC5jCkBAIC0zMCwzNSArMzAsMzIgQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHBy ZWZldGNoIChwcmVhbGxvY2F0ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09J RF9QUkVGRVRDSAkJODE5MgogCitzdGF0aWMgdm9pZCBWYXJzdXBTaG1lbUluaXQodm9pZCAq YXJnKTsKKwogLyogcG9pbnRlciB0byB2YXJpYWJsZXMgc3RydWN0IGluIHNoYXJlZCBtZW1v cnkgKi8KIFRyYW5zYW1WYXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVzID0gTlVMTDsK IAorc3RhdGljIFNobWVtU3RydWN0RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0g eworCS5uYW1lID0gIlRyYW5zYW1WYXJpYWJsZXMiLAorCS5zaXplID0gc2l6ZW9mKFRyYW5z YW1WYXJpYWJsZXNEYXRhKSwKKwkuaW5pdF9mbiA9IFZhcnN1cFNobWVtSW5pdCwKKwkucHRy ID0gKHZvaWQgKiopICZUcmFuc2FtVmFyaWFibGVzLAorfTsKIAogLyoKICAqIEluaXRpYWxp emF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFRyYW5zYW1WYXJpYWJsZXMuCiAgKi8KLVNp emUKLVZhcnN1cFNobWVtU2l6ZSh2b2lkKQordm9pZAorVmFyc3VwU2htZW1SZWdpc3Rlcih2 b2lkKQogewotCXJldHVybiBzaXplb2YoVHJhbnNhbVZhcmlhYmxlc0RhdGEpOworCVNobWVt UmVnaXN0ZXJTdHJ1Y3QoJlRyYW5zYW1WYXJpYWJsZXNTaG1lbURlc2MpOwogfQogCi12b2lk Ci1WYXJzdXBTaG1lbUluaXQodm9pZCkKLXsKLQlib29sCQlmb3VuZDsKK3N0YXRpYyB2b2lk CitWYXJzdXBTaG1lbUluaXQodm9pZCAqYXJnKQogCi0JLyogSW5pdGlhbGl6ZSBvdXIgc2hh cmVkIHN0YXRlIHN0cnVjdCAqLwotCVRyYW5zYW1WYXJpYWJsZXMgPSBTaG1lbUluaXRTdHJ1 Y3QoIlRyYW5zYW1WYXJpYWJsZXMiLAotCQkJCQkJCQkJICAgc2l6ZW9mKFRyYW5zYW1WYXJp YWJsZXNEYXRhKSwKLQkJCQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1h c3RlcikKLQl7Ci0JCUFzc2VydCghZm91bmQpOwotCQltZW1zZXQoVHJhbnNhbVZhcmlhYmxl cywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSk7Ci0JfQotCWVsc2UKLQkJQXNz ZXJ0KGZvdW5kKTsKK3sKKwltZW1zZXQoVHJhbnNhbVZhcmlhYmxlcywgMCwgc2l6ZW9mKFRy YW5zYW1WYXJpYWJsZXNEYXRhKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9kc20uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jCmlu ZGV4IDZhNWIxNjM5MmY3Li41MmI0YTFlMDE3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMK QEAgLTExMCw2ICsxMTAsMTUgQEAgc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZhbHNl OwogLyogUHJlYWxsb2NhdGVkIERTTSBzcGFjZSBpbiB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5 IHJlZ2lvbi4gKi8KIHN0YXRpYyB2b2lkICpkc21fbWFpbl9zcGFjZV9iZWdpbiA9IE5VTEw7 CiAKK3N0YXRpYyB2b2lkIGRzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqKTsKKworc3RhdGlj IFNobWVtU3RydWN0RGVzYyBkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjID0geworCS5uYW1l ID0gIlByZWFsbG9jYXRlZCBEU00iLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQg bGF0ZXIgKi8KKwkuaW5pdF9mbiA9IGRzbV9tYWluX3NwYWNlX2luaXQsCisJLnB0ciA9ICZk c21fbWFpbl9zcGFjZV9iZWdpbiwKK307CisKIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hh cmVkIG1lbW9yeSBzZWdtZW50cyB1c2VkIGJ5IHRoaXMgYmFja2VuZC4KICAqCkBAIC00NjQs NDIgKzQ3MywzNiBAQCBkc21fc2V0X2NvbnRyb2xfaGFuZGxlKGRzbV9oYW5kbGUgaCkKICNl bmRpZgogCiAvKgotICogUmVzZXJ2ZSBzb21lIHNwYWNlIGluIHRoZSBtYWluIHNoYXJlZCBt ZW1vcnkgc2VnbWVudCBmb3IgRFNNIHNlZ21lbnRzLgotICovCi1zaXplX3QKLWRzbV9lc3Rp bWF0ZV9zaXplKHZvaWQpCi17Ci0JcmV0dXJuIDEwMjQgKiAxMDI0ICogKHNpemVfdCkgbWlu X2R5bmFtaWNfc2hhcmVkX21lbW9yeTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgc3BhY2Ug aW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciBEU00gc2VnbWVudHMuCisg KiBSZXNlcnZlIHNwYWNlIGluIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBmb3Ig RFNNIHNlZ21lbnRzLgogICovCiB2b2lkCi1kc21fc2htZW1faW5pdCh2b2lkKQorZHNtX3No bWVtX3JlZ2lzdGVyKHZvaWQpCiB7Ci0Jc2l6ZV90CQlzaXplID0gZHNtX2VzdGltYXRlX3Np emUoKTsKLQlib29sCQlmb3VuZDsKKwlzaXplX3QJCXNpemUgPSAxMDI0ICogMTAyNCAqIChz aXplX3QpIG1pbl9keW5hbWljX3NoYXJlZF9tZW1vcnk7CiAKIAlpZiAoc2l6ZSA9PSAwKQog CQlyZXR1cm47CiAKLQlkc21fbWFpbl9zcGFjZV9iZWdpbiA9IFNobWVtSW5pdFN0cnVjdCgi UHJlYWxsb2NhdGVkIERTTSIsIHNpemUsICZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0J CUZyZWVQYWdlTWFuYWdlciAqZnBtID0gKEZyZWVQYWdlTWFuYWdlciAqKSBkc21fbWFpbl9z cGFjZV9iZWdpbjsKLQkJc2l6ZV90CQlmaXJzdF9wYWdlID0gMDsKLQkJc2l6ZV90CQlwYWdl czsKLQotCQkvKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgRnJlZVBhZ2VNYW5hZ2VyLiAqLwot CQl3aGlsZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUgPCBzaXplb2YoRnJlZVBhZ2VN YW5hZ2VyKSkKLQkJCSsrZmlyc3RfcGFnZTsKLQotCQkvKiBJbml0aWFsaXplIGl0IGFuZCBn aXZlIGl0IGFsbCB0aGUgcmVzdCBvZiB0aGUgc3BhY2UuICovCi0JCUZyZWVQYWdlTWFuYWdl ckluaXRpYWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7Ci0JCXBhZ2VzID0gKHNp emUgLyBGUE1fUEFHRV9TSVpFKSAtIGZpcnN0X3BhZ2U7Ci0JCUZyZWVQYWdlTWFuYWdlclB1 dChmcG0sIGZpcnN0X3BhZ2UsIHBhZ2VzKTsKLQl9CisJZHNtX21haW5fc3BhY2Vfc2htZW1f ZGVzYy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZkc21fbWFpbl9zcGFj ZV9zaG1lbV9kZXNjKTsKK30KKworc3RhdGljIHZvaWQKK2RzbV9tYWluX3NwYWNlX2luaXQo dm9pZCAqYXJnKQoreworCXNpemVfdAkJc2l6ZSA9IGRzbV9tYWluX3NwYWNlX3NobWVtX2Rl c2Muc2l6ZTsKKwlGcmVlUGFnZU1hbmFnZXIgKmZwbSA9IChGcmVlUGFnZU1hbmFnZXIgKikg ZHNtX21haW5fc3BhY2VfYmVnaW47CisJc2l6ZV90CQlmaXJzdF9wYWdlID0gMDsKKwlzaXpl X3QJCXBhZ2VzOworCisJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIEZyZWVQYWdlTWFuYWdl ci4gKi8KKwl3aGlsZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUgPCBzaXplb2YoRnJl ZVBhZ2VNYW5hZ2VyKSkKKwkJKytmaXJzdF9wYWdlOworCisJLyogSW5pdGlhbGl6ZSBpdCBh bmQgZ2l2ZSBpdCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHNwYWNlLiAqLworCUZyZWVQYWdlTWFu YWdlckluaXRpYWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7CisJcGFnZXMgPSAo c2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsKKwlGcmVlUGFnZU1hbmFnZXJQ dXQoZnBtLCBmaXJzdF9wYWdlLCBwYWdlcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2RzbV9yZWdpc3RyeS5jCmluZGV4IDliZmNkNjE2ODI3Li4wODBlMzA2NDhjYyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKQEAgLTU3LDYgKzU3 LDE2IEBAIHR5cGVkZWYgc3RydWN0IERTTVJlZ2lzdHJ5Q3R4U3RydWN0CiAKIHN0YXRpYyBE U01SZWdpc3RyeUN0eFN0cnVjdCAqRFNNUmVnaXN0cnlDdHg7CiAKK3N0YXRpYyB2b2lkIERT TVJlZ2lzdHJ5Q3R4U2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVj dERlc2MgRFNNUmVnaXN0cnlDdHhTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiRFNNIFJlZ2lz dHJ5IERhdGEiLAorCS5zaXplID0gc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSwKKwku aW5pdF9mbiA9IERTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikg JkRTTVJlZ2lzdHJ5Q3R4LAorfTsKKworCiB0eXBlZGVmIHN0cnVjdCBOYW1lZERTTVN0YXRl CiB7CiAJZHNtX2hhbmRsZQloYW5kbGU7CkBAIC0xMTQsMjcgKzEyNCwxNyBAQCBzdGF0aWMg Y29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgZHNoX3BhcmFtcyA9IHsKIHN0YXRpYyBkc2FfYXJl YSAqZHNtX3JlZ2lzdHJ5X2RzYTsKIHN0YXRpYyBkc2hhc2hfdGFibGUgKmRzbV9yZWdpc3Ry eV90YWJsZTsKIAotU2l6ZQotRFNNUmVnaXN0cnlTaG1lbVNpemUodm9pZCkKK3ZvaWQKK0RT TVJlZ2lzdHJ5U2htZW1SZWdpc3Rlcih2b2lkKQogewotCXJldHVybiBNQVhBTElHTihzaXpl b2YoRFNNUmVnaXN0cnlDdHhTdHJ1Y3QpKTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZEU01S ZWdpc3RyeUN0eFNobWVtRGVzYyk7CiB9CiAKLXZvaWQKLURTTVJlZ2lzdHJ5U2htZW1Jbml0 KHZvaWQpCitzdGF0aWMgdm9pZAorRFNNUmVnaXN0cnlDdHhTaG1lbUluaXQodm9pZCAqYXJn KQogewotCWJvb2wJCWZvdW5kOwotCi0JRFNNUmVnaXN0cnlDdHggPSAoRFNNUmVnaXN0cnlD dHhTdHJ1Y3QgKikKLQkJU2htZW1Jbml0U3RydWN0KCJEU00gUmVnaXN0cnkgRGF0YSIsCi0J CQkJCQlEU01SZWdpc3RyeVNobWVtU2l6ZSgpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICgh Zm91bmQpCi0JewotCQlEU01SZWdpc3RyeUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJ RDsKLQkJRFNNUmVnaXN0cnlDdHgtPmRzaGggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7Ci0J fQorCURTTVJlZ2lzdHJ5Q3R4LT5kc2FoID0gRFNBX0hBTkRMRV9JTlZBTElEOworCURTTVJl Z2lzdHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDQwNWM2OTY1NWYwLi40MGNlZWRkYWU1OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTAxLDE2ICsxMDEsMTEgQEAgQ2FsY3VsYXRl U2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IDEwMDAwMDsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgU2htZW1SZWdpc3RlcmVkU2l6ZSgpKTsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBk c21fZXN0aW1hdGVfc2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0 cnlTaG1lbVNpemUoKSk7Ci0KIAkvKiBsZWdhY3kgc3Vic3lzdGVtcyAqLwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBMb2NrTWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgUHJvY0dsb2JhbFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExv Z1ByZWZldGNoU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBWYXJzdXBT aG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsKQEAgLTEyMCwxMSArMTE1 LDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IEJhY2tncm91bmRXb3JrZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IE11bHRpWGFjdFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTFdMb2Nr U2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcm9jQXJyYXlTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJhY2tlbmRTdGF0dXNTaG1lbVNpemUo KSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNoYXJlZEludmFsU2htZW1TaXplKCkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBQTVNpZ25hbFNobWVtU2l6ZSgpKTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgUHJvY1NpZ25hbFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3Np emUoc2l6ZSwgQ2hlY2twb2ludGVyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBBdXRvVmFjdXVtU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBS ZXBsaWNhdGlvblNsb3RzU2htZW1TaXplKCkpOwpAQCAtMTM4LDcgKzEyOSw2IEBAIENhbGN1 bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNo bWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQXN5bmNTaG1lbVNpemUoKSk7 CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN0YXRzU2htZW1TaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEluamVjdGlvblBvaW50U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTbG90U3luY1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgQWlvU2htZW1TaXplKCkpOwpAQCAtMjQ2LDExICsyMzYsMjggQEAgdm9pZAogUmVnaXN0 ZXJTaG1lbVN0cnVjdHModm9pZCkKIHsKIAkvKgotCSAqIFRPRE86IE5vdCB1c2VkIGluIGFu eSBidWlsdC1pbiBzdWJzeXN0ZW1zIHlldC4gIEluIHRoZSBmdXR1cmUsIG1vc3Qgb2YKLQkg KiB0aGUgY2FsbHMgKlNobWVtSW5pdCgpIGNhbGxzIGluIENyZWF0ZU9yQXR0YWNoU2htZW1T dHJ1Y3RzKCksIGFuZAotCSAqICpTaG1lbVNpemUoKSBjYWxscyBpbiBDYWxjdWxhdGVTaG1l bVNpemUoKSB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNhbGxzCi0JICogaW50byB0aGUgc3Vic3lz dGVtcyBmcm9tIGhlcmUuCisJICogVE9ETzogSW4gdGhlIGZ1dHVyZSwgYWxsIHRoZSBjYWxs cyAqU2htZW1Jbml0KCkgY2FsbHMgaW4KKwkgKiBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0 cygpLCBhbmQgYWxsIHRoZSAqU2htZW1TaXplKCkgY2FsbHMgaW4KKwkgKiBDYWxjdWxhdGVT aG1lbVNpemUoKSB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNhbGxzIGludG8gdGhlIHN1YnN5c3Rl bXMgZnJvbQorCSAqIGhlcmUuCisJICovCisKKwkvKgorCSAqIE5vdGU6IHRoZXJlIGFyZSBz b21lIGludGVyLWRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZXNlLCBzbyB0aGUgb3JkZXIgb2YK KwkgKiBzb21lIG9mIHRoZXNlIG1hdHRlci4KIAkgKi8KKworCURTTVJlZ2lzdHJ5U2htZW1S ZWdpc3RlcigpOworCWRzbV9zaG1lbV9yZWdpc3RlcigpOworCisJUHJvY0dsb2JhbFNobWVt UmVnaXN0ZXIoKTsKKwlWYXJzdXBTaG1lbVJlZ2lzdGVyKCk7CisJUHJvY0FycmF5U2htZW1S ZWdpc3RlcigpOworCVNoYXJlZEludmFsU2htZW1SZWdpc3RlcigpOworCVBNU2lnbmFsU2ht ZW1SZWdpc3RlcigpOworCVByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKCk7CisKKwlXYWl0RXZl bnRDdXN0b21TaG1lbVJlZ2lzdGVyKCk7CiB9CiAKIC8qCkBAIC0yOTIsMTMgKzI5OSw5IEBA IENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJCVNobWVtSW5pdFJlZ2lzdGVy ZWQoKTsKIAl9CiAKLQlkc21fc2htZW1faW5pdCgpOwotCURTTVJlZ2lzdHJ5U2htZW1Jbml0 KCk7Ci0KIAkvKgogCSAqIFNldCB1cCB4bG9nLCBjbG9nLCBhbmQgYnVmZmVycwogCSAqLwot CVZhcnN1cFNobWVtSW5pdCgpOwogCVhMT0dTaG1lbUluaXQoKTsKIAlYTG9nUHJlZmV0Y2hT aG1lbUluaXQoKTsKIAlYTG9nUmVjb3ZlcnlTaG1lbUluaXQoKTsKQEAgLTMyMSwyMyArMzI0 LDEzIEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJLyoKIAkgKiBTZXQg dXAgcHJvY2VzcyB0YWJsZQogCSAqLwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JCUlu aXRQcm9jR2xvYmFsKCk7Ci0JUHJvY0FycmF5U2htZW1Jbml0KCk7CiAJQmFja2VuZFN0YXR1 c1NobWVtSW5pdCgpOwogCVR3b1BoYXNlU2htZW1Jbml0KCk7CiAJQmFja2dyb3VuZFdvcmtl clNobWVtSW5pdCgpOwogCi0JLyoKLQkgKiBTZXQgdXAgc2hhcmVkLWludmFsIG1lc3NhZ2lu ZwotCSAqLwotCVNoYXJlZEludmFsU2htZW1Jbml0KCk7Ci0KIAkvKgogCSAqIFNldCB1cCBp bnRlcnByb2Nlc3Mgc2lnbmFsaW5nIG1lY2hhbmlzbXMKIAkgKi8KLQlQTVNpZ25hbFNobWVt SW5pdCgpOwotCVByb2NTaWduYWxTaG1lbUluaXQoKTsKIAlDaGVja3BvaW50ZXJTaG1lbUlu aXQoKTsKIAlBdXRvVmFjdXVtU2htZW1Jbml0KCk7CiAJUmVwbGljYXRpb25TbG90c1NobWVt SW5pdCgpOwpAQCAtMzU2LDcgKzM0OSw2IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3Rz KHZvaWQpCiAJU3luY1NjYW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOwogCVN0 YXRzU2htZW1Jbml0KCk7Ci0JV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KCk7CiAJSW5qZWN0 aW9uUG9pbnRTaG1lbUluaXQoKTsKIAlBaW9TaG1lbUluaXQoKTsKIAlXYWl0TFNOU2htZW1J bml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwppbmRleCA0NjE4ODIwYjMz Ny4uZDc0NjNkZjczYWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Bt c2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwpAQCAt ODMsNiArODMsMTUgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogLyogUE1TaWduYWxTdGF0ZSBw b2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1hc3RlciBhbmQgY2hpbGQgcHJvY2Vzc2Vz ICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0 YXRlID0gTlVMTDsKIAorc3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbUluaXQodm9pZCAqKTsK Kworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsKKwkubmFt ZSA9ICJQTVNpZ25hbFN0YXRlIiwKKwkuc2l6ZSA9IDAsCQkJCQkvKiBjYWxjdWxhdGVkIGxh dGVyICovCisJLmluaXRfZm4gPSBQTVNpZ25hbFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQg KiopICZQTVNpZ25hbFN0YXRlLAorfTsKKwogLyoKICAqIExvY2FsIGNvcHkgb2YgUE1TaWdu YWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRoZQogICogcG9zdG1h c3Rlci4gIFBvc3RtYXN0ZXIga2VlcHMgYSBsb2NhbCBjb3B5IHNvIHRoYXQgaXQgZG9lc24n dCBuZWVkIHRvCkBAIC0xMjMsMzkgKzEzMiwyOSBAQCBwb3N0bWFzdGVyX2RlYXRoX2hhbmRs ZXIoU0lHTkFMX0FSR1MpCiBzdGF0aWMgdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3Rp dmUoaW50IGNvZGUsIERhdHVtIGFyZyk7CiAKIC8qCi0gKiBQTVNpZ25hbFNobWVtU2l6ZQot ICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9y eQorICogUE1TaWduYWxTaG1lbVJlZ2lzdGVyIC0gUmVnaXN0ZXIgcG1zaWduYWwuYydzIHNo YXJlZCBtZW1vcnkgbmVlZHMKICAqLwotU2l6ZQotUE1TaWduYWxTaG1lbVNpemUodm9pZCkK K3ZvaWQKK1BNU2lnbmFsU2htZW1SZWdpc3Rlcih2b2lkKQogewogCVNpemUJCXNpemU7CiAK LQlzaXplID0gb2Zmc2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCks Ci0JCQkJCQkJCSAgIHNpemVvZihzaWdfYXRvbWljX3QpKSk7CisJbnVtX2NoaWxkX2ZsYWdz ID0gTWF4TGl2ZVBvc3RtYXN0ZXJDaGlsZHJlbigpOwogCi0JcmV0dXJuIHNpemU7CisJc2l6 ZSA9IG9mZnNldG9mKFBNU2lnbmFsRGF0YSwgUE1DaGlsZEZsYWdzKTsKKwlzaXplID0gYWRk X3NpemUoc2l6ZSwgbXVsX3NpemUobnVtX2NoaWxkX2ZsYWdzLCBzaXplb2Yoc2lnX2F0b21p Y190KSkpOworCVBNU2lnbmFsU2htZW1EZXNjLnNpemUgPSBzaXplOworCVNobWVtUmVnaXN0 ZXJTdHJ1Y3QoJlBNU2lnbmFsU2htZW1EZXNjKTsKIH0KIAotLyoKLSAqIFBNU2lnbmFsU2ht ZW1Jbml0IC0gaW5pdGlhbGl6ZSBkdXJpbmcgc2hhcmVkLW1lbW9yeSBjcmVhdGlvbgotICov Ci12b2lkCi1QTVNpZ25hbFNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1BNU2lnbmFs U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCVBNU2lnbmFsU3Rh dGUgPSAoUE1TaWduYWxEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUE1TaWduYWxTdGF0 ZSIsIFBNU2lnbmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsK LQkJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2VzICovCi0JCU1lbVNldCh1bnZv bGF0aXplKFBNU2lnbmFsRGF0YSAqLCBQTVNpZ25hbFN0YXRlKSwgMCwgUE1TaWduYWxTaG1l bVNpemUoKSk7Ci0JCW51bV9jaGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRy ZW4oKTsKLQkJUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdzID0gbnVtX2NoaWxkX2Zs YWdzOwotCX0KKwkvKiBpbml0aWFsaXplIGFsbCBmbGFncyB0byB6ZXJvZXMgKi8KKwlBc3Nl cnQoUE1TaWduYWxTdGF0ZSk7CisJTWVtU2V0KHVudm9sYXRpemUoUE1TaWduYWxEYXRhICos IFBNU2lnbmFsU3RhdGUpLCAwLCBQTVNpZ25hbFNobWVtRGVzYy5zaXplKTsKKwlBc3NlcnQo bnVtX2NoaWxkX2ZsYWdzID4gMCk7CisJUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdz ID0gbnVtX2NoaWxkX2ZsYWdzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYwppbmRleCAwZjkxMzg5N2FjYy4uNWRhZjMzZDUzMjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC0xMDMsNiArMTAzLDE5IEBAIHR5cGVkZWYgc3Ry dWN0IFByb2NBcnJheVN0cnVjdAogCWludAkJCXBncHJvY25vc1tGTEVYSUJMRV9BUlJBWV9N RU1CRVJdOwogfSBQcm9jQXJyYXlTdHJ1Y3Q7CiAKK3N0YXRpYyB2b2lkIFByb2NBcnJheVNo bWVtSW5pdCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgUHJvY0FycmF5U2htZW1BdHRhY2go dm9pZCAqYXJnKTsKKworc3RhdGljIFByb2NBcnJheVN0cnVjdCAqcHJvY0FycmF5OworCitz dGF0aWMgU2htZW1TdHJ1Y3REZXNjIFByb2NBcnJheVNobWVtRGVzYyA9IHsKKwkubmFtZSA9 ICJQcm9jIEFycmF5IiwKKwkuc2l6ZSA9IDAsCQkJCQkvKiBjYWxjdWxhdGVkIGxhdGVyICov CisJLmluaXRfZm4gPSBQcm9jQXJyYXlTaG1lbUluaXQsCisJLmF0dGFjaF9mbiA9IFByb2NB cnJheVNobWVtQXR0YWNoLAorCS5wdHIgPSAodm9pZCAqKikgJnByb2NBcnJheSwKK307CisK IC8qCiAgKiBTdGF0ZSBmb3IgdGhlIEdsb2JhbFZpc1Rlc3QqIGZhbWlseSBvZiBmdW5jdGlv bnMuIFRob3NlIGZ1bmN0aW9ucyBjYW4KICAqIGUuZy4gYmUgdXNlZCB0byBkZWNpZGUgaWYg YSBkZWxldGVkIHJvdyBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IHZpb2xhdGluZwpAQCAtMjY5 LDkgKzI4Miw2IEBAIHR5cGVkZWYgZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCUtBWF9TVEFS VFVQX1BST0NFU1NfSURMRSwJLyogc3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0IHRvIHNsZWVw ICovCiB9IEtBWENvbXByZXNzUmVhc29uOwogCi0KLXN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3Qg KnByb2NBcnJheTsKLQogc3RhdGljIFBHUFJPQyAqYWxsUHJvY3M7CiAKIC8qCkBAIC0yODIs OCArMjkyLDI1IEBAIHN0YXRpYyBUcmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90SW5Qcm9n cmVzcyA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogLyoKICAqIEJvb2trZWVwaW5nIGZvciB0 cmFja2luZyBlbXVsYXRlZCB0cmFuc2FjdGlvbnMgaW4gcmVjb3ZlcnkKICAqLworCiBzdGF0 aWMgVHJhbnNhY3Rpb25JZCAqS25vd25Bc3NpZ25lZFhpZHM7CisKK3N0YXRpYyBTaG1lbVN0 cnVjdERlc2MgS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiS25v d25Bc3NpZ25lZFhpZHMiLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIg Ki8KKwkuaW5pdF9mbiA9IE5VTEwsCQkJLyogbm8gaW5pdGlhbGl6YXRpb24gbmVlZGVkICov CisJLnB0ciA9ICh2b2lkICoqKSAmS25vd25Bc3NpZ25lZFhpZHMsCit9OworCiBzdGF0aWMg Ym9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZDsKKworc3RhdGljIFNobWVtU3RydWN0RGVz YyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjID0geworCS5uYW1lID0gIktub3du QXNzaWduZWRYaWRzVmFsaWQiLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0 ZXIgKi8KKwkuaW5pdF9mbiA9IE5VTEwsCQkJLyogbm8gaW5pdGlhbGl6YXRpb24gbmVlZGVk ICovCisJLnB0ciA9ICh2b2lkICoqKSAmS25vd25Bc3NpZ25lZFhpZHNWYWxpZCwKK307CisK IHN0YXRpYyBUcmFuc2FjdGlvbklkIGxhdGVzdE9ic2VydmVkWGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CiAKIC8qCkBAIC0zNzQsMTggKzQwMSwxOCBAQCBzdGF0aWMgaW5saW5lIEZ1 bGxUcmFuc2FjdGlvbklkIEZ1bGxYaWRSZWxhdGl2ZVRvKEZ1bGxUcmFuc2FjdGlvbklkIHJl bCwKIHN0YXRpYyB2b2lkIEdsb2JhbFZpc1VwZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jpem9u c1Jlc3VsdCAqaG9yaXpvbnMpOwogCiAvKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3Bh Y2UgbmVlZGVkIGJ5IFByb2NBcnJheVNobWVtSW5pdAorICogUmVnaXN0ZXIgdGhlIHNoYXJl ZCBQR1BST0MgYXJyYXkgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cC4KICAqLwotU2l6ZQot UHJvY0FycmF5U2htZW1TaXplKHZvaWQpCit2b2lkCitQcm9jQXJyYXlTaG1lbVJlZ2lzdGVy KHZvaWQpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhlIFByb2NBcnJheSBz dHJ1Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQUk9DUwkoTWF4QmFj a2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zmc2V0b2YoUHJvY0Fy cmF5U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6 ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7CisJLyogUmVnaXN0ZXIgdGhl IFByb2NBcnJheSBzaGFyZWQgc3RydWN0dXJlICovCisJUHJvY0FycmF5U2htZW1EZXNjLnNp emUgPQorCQlhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJvY25vcyks CisJCQkJIG11bF9zaXplKHNpemVvZihpbnQpLCBQUk9DQVJSQVlfTUFYUFJPQ1MpKTsKKwlT aG1lbVJlZ2lzdGVyU3RydWN0KCZQcm9jQXJyYXlTaG1lbURlc2MpOwogCiAJLyoKIAkgKiBE dXJpbmcgSG90IFN0YW5kYnkgcHJvY2Vzc2luZyB3ZSBoYXZlIGEgZGF0YSBzdHJ1Y3R1cmUg Y2FsbGVkCkBAIC00MDUsNjQgKzQzMiw0MSBAQCBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCkK IAogCWlmIChFbmFibGVIb3RTdGFuZGJ5KQogCXsKLQkJc2l6ZSA9IGFkZF9zaXplKHNpemUs Ci0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCSBUT1RB TF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFkZF9zaXplKHNpemUsCi0JCQkJ CQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNIRURfU1VCWElEUykpOwor CQlLbm93bkFzc2lnbmVkWGlkc1NobWVtRGVzYy5zaXplID0KKwkJCW11bF9zaXplKHNpemVv ZihUcmFuc2FjdGlvbklkKSwKKwkJCQkJIFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyk7CisJ CVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJktub3duQXNzaWduZWRYaWRzU2htZW1EZXNjKTsKKwor CQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjLnNpemUgPQorCQkJbXVsX3NpemUo c2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpOworCQlTaG1lbVJlZ2lz dGVyU3RydWN0KCZLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjKTsKIAl9Ci0KLQly ZXR1cm4gc2l6ZTsKIH0KIAogLyoKICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBQR1BST0Mg YXJyYXkgZHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cC4KICAqLwotdm9pZAotUHJvY0FycmF5 U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUHJvY0FycmF5U2htZW1Jbml0KHZvaWQg KmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCS8qIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhl IFByb2NBcnJheSBzaGFyZWQgc3RydWN0dXJlICovCi0JcHJvY0FycmF5ID0gKFByb2NBcnJh eVN0cnVjdCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgQXJyYXkiLAotCQkJCQkJYWRk X3NpemUob2Zmc2V0b2YoUHJvY0FycmF5U3RydWN0LCBwZ3Byb2Nub3MpLAotCQkJCQkJCQkg bXVsX3NpemUoc2l6ZW9mKGludCksCi0JCQkJCQkJCQkJICBQUk9DQVJSQVlfTUFYUFJPQ1Mp KSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAoIWZvdW5kKQotCXsKLQkJLyoKLQkJICogV2Un cmUgdGhlIGZpcnN0IC0gaW5pdGlhbGl6ZS4KLQkJICovCi0JCXByb2NBcnJheS0+bnVtUHJv Y3MgPSAwOwotCQlwcm9jQXJyYXktPm1heFByb2NzID0gUFJPQ0FSUkFZX01BWFBST0NTOwot CQlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0gVE9UQUxfTUFYX0NBQ0hFRF9T VUJYSURTOwotCQlwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzID0gMDsKLQkJcHJv Y0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPmhlYWRL bm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJcHJvY0FycmF5LT5yZXBsaWNhdGlvbl9zbG90 X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQkJcHJvY0FycmF5LT5yZXBsaWNhdGlv bl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCQlUcmFuc2Ft VmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKLQl9CisJcHJvY0FycmF5LT5u dW1Qcm9jcyA9IDA7CisJcHJvY0FycmF5LT5tYXhQcm9jcyA9IFBST0NBUlJBWV9NQVhQUk9D UzsKKwlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0gVE9UQUxfTUFYX0NBQ0hF RF9TVUJYSURTOworCXByb2NBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPSAwOworCXBy b2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKKwlwcm9jQXJyYXktPmhlYWRL bm93bkFzc2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOworCXByb2NBcnJheS0+cmVwbGljYXRpb25fc2xvdF94 bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJcHJvY0FycmF5LT5yZXBsaWNhdGlvbl9z bG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVRyYW5zYW1WYXJp YWJsZXMtPnhhY3RDb21wbGV0aW9uQ291bnQgPSAxOwogCiAJYWxsUHJvY3MgPSBQcm9jR2xv YmFsLT5hbGxQcm9jczsKK30KIAotCS8qIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIEtub3du QXNzaWduZWRYaWRzIGFycmF5cyB0b28sIGlmIG5lZWRlZCAqLwotCWlmIChFbmFibGVIb3RT dGFuZGJ5KQotCXsKLQkJS25vd25Bc3NpZ25lZFhpZHMgPSAoVHJhbnNhY3Rpb25JZCAqKQot CQkJU2htZW1Jbml0U3RydWN0KCJLbm93bkFzc2lnbmVkWGlkcyIsCi0JCQkJCQkJbXVsX3Np emUoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLAotCQkJCQkJCQkJIFRPVEFMX01BWF9DQUNIRURf U1VCWElEUyksCi0JCQkJCQkJJmZvdW5kKTsKLQkJS25vd25Bc3NpZ25lZFhpZHNWYWxpZCA9 IChib29sICopCi0JCQlTaG1lbUluaXRTdHJ1Y3QoIktub3duQXNzaWduZWRYaWRzVmFsaWQi LAotCQkJCQkJCW11bF9zaXplKHNpemVvZihib29sKSwgVE9UQUxfTUFYX0NBQ0hFRF9TVUJY SURTKSwKLQkJCQkJCQkmZm91bmQpOwotCX0KK3N0YXRpYyB2b2lkCitQcm9jQXJyYXlTaG1l bUF0dGFjaCh2b2lkICphcmcpCit7CisJYWxsUHJvY3MgPSBQcm9jR2xvYmFsLT5hbGxQcm9j czsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nz aWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCA3 ZTAxN2M4ZDUzYi4uYTBjOTRkZGQ3N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMKQEAgLTEwNSw3ICsxMDUsMTggQEAgc3RydWN0IFByb2NTaWduYWxIZWFkZXIK ICNkZWZpbmUgQkFSUklFUl9DTEVBUl9CSVQoZmxhZ3MsIHR5cGUpIFwKIAkoKGZsYWdzKSAm PSB+KCgodWludDMyKSAxKSA8PCAodWludDMyKSAodHlwZSkpKQogCitzdGF0aWMgdm9pZCBQ cm9jU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKIE5PTl9FWEVDX1NUQVRJQyBQcm9j U2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsID0gTlVMTDsKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2NTaWduYWwiLAor CS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIgKi8KKwkuaW5pdF9mbiA9IFBy b2NTaWduYWxTaG1lbUluaXQsCisJLnB0ciA9ICh2b2lkICoqKSAmUHJvY1NpZ25hbCwKK307 CisKKwogc3RhdGljIFByb2NTaWduYWxTbG90ICpNeVByb2NTaWduYWxTbG90ID0gTlVMTDsK IAogc3RhdGljIGJvb2wgQ2hlY2tQcm9jU2lnbmFsKFByb2NTaWduYWxSZWFzb24gcmVhc29u KTsKQEAgLTExMyw1MSArMTI0LDM3IEBAIHN0YXRpYyB2b2lkIENsZWFudXBQcm9jU2lnbmFs U3RhdGUoaW50IHN0YXR1cywgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIFJlc2V0UHJvY1Np Z25hbEJhcnJpZXJCaXRzKHVpbnQzMiBmbGFncyk7CiAKIC8qCi0gKiBQcm9jU2lnbmFsU2ht ZW1TaXplCi0gKgkJQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIFByb2NTaWduYWwncyBzaGFy ZWQgbWVtb3J5CisgKiBQcm9jU2lnbmFsU2htZW1SZWdpc3RlcgorICoJCVJlZ2lzdGVyIFBy b2NTaWduYWwncyBzaGFyZWQgbWVtb3J5IG5lZWRzIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cAog ICovCi1TaXplCi1Qcm9jU2lnbmFsU2htZW1TaXplKHZvaWQpCit2b2lkCitQcm9jU2lnbmFs U2htZW1SZWdpc3Rlcih2b2lkKQogewogCVNpemUJCXNpemU7CiAKIAlzaXplID0gbXVsX3Np emUoTnVtUHJvY1NpZ25hbFNsb3RzLCBzaXplb2YoUHJvY1NpZ25hbFNsb3QpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2YoUHJvY1NpZ25hbEhlYWRlciwgcHNoX3Nsb3Qp KTsKLQlyZXR1cm4gc2l6ZTsKKworCVByb2NTaWduYWxTaG1lbURlc2Muc2l6ZSA9IHNpemU7 CisJU2htZW1SZWdpc3RlclN0cnVjdCgmUHJvY1NpZ25hbFNobWVtRGVzYyk7CiB9CiAKLS8q Ci0gKiBQcm9jU2lnbmFsU2htZW1Jbml0Ci0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUg UHJvY1NpZ25hbCdzIHNoYXJlZCBtZW1vcnkKLSAqLwotdm9pZAotUHJvY1NpZ25hbFNobWVt SW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJn KQogewotCVNpemUJCXNpemUgPSBQcm9jU2lnbmFsU2htZW1TaXplKCk7Ci0JYm9vbAkJZm91 bmQ7CisJcGdfYXRvbWljX2luaXRfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmllckdlbmVy YXRpb24sIDApOwogCi0JUHJvY1NpZ25hbCA9IChQcm9jU2lnbmFsSGVhZGVyICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiUHJvY1NpZ25hbCIsIHNpemUsICZmb3VuZCk7Ci0KLQkvKiBJZiB3 ZSdyZSBmaXJzdCwgaW5pdGlhbGl6ZS4gKi8KLQlpZiAoIWZvdW5kKQorCWZvciAoaW50IGkg PSAwOyBpIDwgTnVtUHJvY1NpZ25hbFNsb3RzOyArK2kpCiAJewotCQlpbnQJCQlpOwotCi0J CXBnX2F0b21pY19pbml0X3U2NCgmUHJvY1NpZ25hbC0+cHNoX2JhcnJpZXJHZW5lcmF0aW9u LCAwKTsKKwkJUHJvY1NpZ25hbFNsb3QgKnNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3Rb aV07CiAKLQkJZm9yIChpID0gMDsgaSA8IE51bVByb2NTaWduYWxTbG90czsgKytpKQotCQl7 Ci0JCQlQcm9jU2lnbmFsU2xvdCAqc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtpXTsK LQotCQkJU3BpbkxvY2tJbml0KCZzbG90LT5wc3NfbXV0ZXgpOwotCQkJcGdfYXRvbWljX2lu aXRfdTMyKCZzbG90LT5wc3NfcGlkLCAwKTsKLQkJCXNsb3QtPnBzc19jYW5jZWxfa2V5X2xl biA9IDA7Ci0JCQlNZW1TZXQoc2xvdC0+cHNzX3NpZ25hbEZsYWdzLCAwLCBzaXplb2Yoc2xv dC0+cHNzX3NpZ25hbEZsYWdzKSk7Ci0JCQlwZ19hdG9taWNfaW5pdF91NjQoJnNsb3QtPnBz c19iYXJyaWVyR2VuZXJhdGlvbiwgUEdfVUlOVDY0X01BWCk7Ci0JCQlwZ19hdG9taWNfaW5p dF91MzIoJnNsb3QtPnBzc19iYXJyaWVyQ2hlY2tNYXNrLCAwKTsKLQkJCUNvbmRpdGlvblZh cmlhYmxlSW5pdCgmc2xvdC0+cHNzX2JhcnJpZXJDVik7Ci0JCX0KKwkJU3BpbkxvY2tJbml0 KCZzbG90LT5wc3NfbXV0ZXgpOworCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19w aWQsIDApOworCQlzbG90LT5wc3NfY2FuY2VsX2tleV9sZW4gPSAwOworCQlNZW1TZXQoc2xv dC0+cHNzX3NpZ25hbEZsYWdzLCAwLCBzaXplb2Yoc2xvdC0+cHNzX3NpZ25hbEZsYWdzKSk7 CisJCXBnX2F0b21pY19pbml0X3U2NCgmc2xvdC0+cHNzX2JhcnJpZXJHZW5lcmF0aW9uLCBQ R19VSU5UNjRfTUFYKTsKKwkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfYmFycmll ckNoZWNrTWFzaywgMCk7CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmc2xvdC0+cHNzX2Jh cnJpZXJDVik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmlu ZGV4IGE3YTdjYzRmMGE5Li5iOWRmM2I4NGRlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c2ludmFsYWR0LmMKQEAgLTIwMyw4ICsyMDMsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgU0lTZWcK ICAqLwogI2RlZmluZSBOdW1Qcm9jU3RhdGVTbG90cwkoTWF4QmFja2VuZHMgKyBOVU1fQVVY SUxJQVJZX1BST0NTKQogCitzdGF0aWMgdm9pZCBTaGFyZWRJbnZhbFNobWVtSW5pdCh2b2lk ICphcmcpOworCiBzdGF0aWMgU0lTZWcgKnNobUludmFsQnVmZmVyOwkvKiBwb2ludGVyIHRv IHRoZSBzaGFyZWQgaW52YWwgYnVmZmVyICovCiAKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2Mg U2hhcmVkSW52YWxTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAic2htSW52YWxCdWZmZXIiLAor CS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIgKi8KKwkuaW5pdF9mbiA9IFNo YXJlZEludmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJnNobUludmFsQnVmZmVy LAorfTsKKwogCiBzdGF0aWMgTG9jYWxUcmFuc2FjdGlvbklkIG5leHRMb2NhbFRyYW5zYWN0 aW9uSWQ7CiAKQEAgLTIxMiwxMCArMjIxLDExIEBAIHN0YXRpYyB2b2lkIENsZWFudXBJbnZh bGlkYXRpb25TdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogCiAKIC8qCi0gKiBTaGFy ZWRJbnZhbFNobWVtU2l6ZSAtLS0gcmV0dXJuIHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVk CisgKiBTaGFyZWRJbnZhbFNobWVtUmVnaXN0ZXIKKyAqCQlSZWdpc3RlciBzaGFyZWQgbWVt b3J5IG5lZWRzIGZvciB0aGUgU0kgbWVzc2FnZSBidWZmZXIKICAqLwotU2l6ZQotU2hhcmVk SW52YWxTaG1lbVNpemUodm9pZCkKK3ZvaWQKK1NoYXJlZEludmFsU2htZW1SZWdpc3Rlcih2 b2lkKQogewogCVNpemUJCXNpemU7CiAKQEAgLTIyMywyNiArMjMzLDE2IEBAIFNoYXJlZElu dmFsU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNp emVvZihQcm9jU3RhdGUpLCBOdW1Qcm9jU3RhdGVTbG90cykpOwkvKiBwcm9jU3RhdGUgKi8K IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoc2l6ZW9mKGludCksIE51bVByb2NT dGF0ZVNsb3RzKSk7CS8qIHBncHJvY25vcyAqLwogCi0JcmV0dXJuIHNpemU7CisJU2hhcmVk SW52YWxTaG1lbURlc2Muc2l6ZSA9IHNpemU7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmU2hh cmVkSW52YWxTaG1lbURlc2MpOwogfQogCi0vKgotICogU2hhcmVkSW52YWxTaG1lbUluaXQK LSAqCQlDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFNJIG1lc3NhZ2UgYnVmZmVyCi0gKi8K LXZvaWQKLVNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorU2hhcmVk SW52YWxTaG1lbUluaXQodm9pZCAqYXJnKQogewogCWludAkJCWk7Ci0JYm9vbAkJZm91bmQ7 Ci0KLQkvKiBBbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVtb3J5ICovCi0Jc2htSW52YWxC dWZmZXIgPSAoU0lTZWcgKikKLQkJU2htZW1Jbml0U3RydWN0KCJzaG1JbnZhbEJ1ZmZlciIs IFNoYXJlZEludmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZvdW5kKQotCQlyZXR1 cm47CiAKLQkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBzYXZlIHNpemUgb2YgcHJvY1N0 YXRlIGFycmF5LCBpbml0IHNwaW5sb2NrICovCisJLyogQ2xlYXIgbWVzc2FnZSBjb3VudGVy cywgaW5pdCBzcGlubG9jayAqLwogCXNobUludmFsQnVmZmVyLT5taW5Nc2dOdW0gPSAwOwog CXNobUludmFsQnVmZmVyLT5tYXhNc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5uZXh0 VGhyZXNob2xkID0gQ0xFQU5VUF9NSU47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRl eCA4ZjVjZTBlMmE4YS4uZjg4MGFiYTliZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YwpAQCAtNjksOSArNjksNDEgQEAgUEdQUk9DCSAgICpNeVByb2MgPSBOVUxMOwogCiAvKiBQ b2ludGVycyB0byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KIFBST0NfSERSICAgKlBy b2NHbG9iYWwgPSBOVUxMOworc3RhdGljIHZvaWQgKnRtcEFsbFByb2NzOworc3RhdGljIHZv aWQgKnRtcEZhc3RQYXRoTG9ja0FycmF5OwogTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqQXV4 aWxpYXJ5UHJvY3MgPSBOVUxMOwogUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9IE5V TEw7CiAKK3N0YXRpYyB2b2lkIFByb2NHbG9iYWxTaG1lbUluaXQodm9pZCAqYXJnKTsKKwor c3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsU2htZW1EZXNjID0geworCS5uYW1l ID0gIlByb2MgSGVhZGVyIiwKKwkuc2l6ZSA9IHNpemVvZihQUk9DX0hEUiksCisJLmluaXRf Zm4gPSBQcm9jR2xvYmFsU2htZW1Jbml0LAorCisJLyoKKwkgKiBQcm9jR2xvYmFsIGlzIHJl Z2lzdGVyZWQgaGVyZSBpbiAucHRyIGFzIHVzdWFsLCBidXQgaXQgbmVlZHMgdG8gYmUKKwkg KiBwcm9wYWdhdGVkIHNwZWNpYWxseSBpbiBFWEVDX0JBQ0tFTkQgbW9kZSwgYmVjYXVzZSBQ cm9jR2xvYmFsIG5lZWRzIHRvCisJICogYmUgYWNjZXNzZWQgZWFybHkgYXQgYmFja2VuZCBz dGFydHVwLCBiZWZvcmUgU2htZW1BdHRhY2hSZWdpc3RlcmVkKCkKKwkgKiBoYXMgYmVlbiBj YWxsZWQuCisJICovCisJLnB0ciA9ICh2b2lkICoqKSAmUHJvY0dsb2JhbCwKK307CisKK3N0 YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjID0gewor CS5uYW1lID0gIlBHUFJPQyBzdHJ1Y3R1cmVzIiwKKwkuc2l6ZSA9IDAsCQkJCQkvKiBjYWxj dWxhdGVkIGxhdGVyICovCisJLnB0ciA9ICh2b2lkICoqKSAmdG1wQWxsUHJvY3MsCit9Owor CitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEZhc3RQYXRoTG9ja0FycmF5U2htZW1EZXNjID0g eworCS5uYW1lID0gIkZhc3QtUGF0aCBMb2NrIEFycmF5IiwKKwkuc2l6ZSA9IDAsCQkJCQkv KiBjYWxjdWxhdGVkIGxhdGVyICovCisJLnB0ciA9ICh2b2lkICoqKSAmdG1wRmFzdFBhdGhM b2NrQXJyYXksCit9OworCitzdGF0aWMgdWludDMyIFRvdGFsUHJvY3M7CisKIC8qIElzIGEg ZGVhZGxvY2sgY2hlY2sgcGVuZGluZz8gKi8KIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgZ290X2RlYWRsb2NrX3RpbWVvdXQ7CiAKQEAgLTgxLDI0ICsxMTMsNiBAQCBzdGF0aWMg dm9pZCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyBE ZWFkTG9ja1N0YXRlIENoZWNrRGVhZExvY2sodm9pZCk7CiAKIAotLyoKLSAqIFJlcG9ydCBz aGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQR1BST0MuCi0gKi8KLXN0YXRpYyBTaXpl Ci1QR1Byb2NTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlTaXplCQlU b3RhbFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJ TElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwotCi0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7Ci0Jc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2Jh bC0+eGlkcykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9j cywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7Ci0Jc2l6ZSA9IGFkZF9z aXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3Rh dHVzRmxhZ3MpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoKICAqIFJlcG9ydCBzaGFy ZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBGYXN0LVBhdGggbG9ja3MuCiAgKi8KQEAgLTEw Niw4ICsxMjAsNiBAQCBzdGF0aWMgU2l6ZQogRmFzdFBhdGhMb2NrU2htZW1TaXplKHZvaWQp CiB7CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JU2l6ZQkJVG90YWxQcm9jcyA9Ci0JCWFkZF9zaXpl KE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZX1BST0NTLCBtYXhfcHJlcGFy ZWRfeGFjdHMpKTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJlbElkU2l6ZTsK IApAQCAtMTIzLDI1ICsxMzUsNiBAQCBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIAly ZXR1cm4gc2l6ZTsKIH0KIAotLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5l ZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KLSAqLwotU2l6ZQotUHJvY0dsb2JhbFNobWVtU2l6 ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0JLyogUHJvY0dsb2JhbCAqLwotCXNp emUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJPQ19IRFIpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKLQotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQ R1NlbWFwaG9yZVNobWVtU2l6ZShQcm9jR2xvYmFsU2VtYXMoKSkpOwotCXNpemUgPSBhZGRf c2l6ZShzaXplLCBQR1Byb2NTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IEZhc3RQYXRoTG9ja1NobWVtU2l6ZSgpKTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgog ICogUmVwb3J0IG51bWJlciBvZiBzZW1hcGhvcmVzIG5lZWRlZCBieSBJbml0UHJvY0dsb2Jh bC4KICAqLwpAQCAtMTU2LDcgKzE0OSw1MCBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKIH0K IAogLyoKLSAqIEluaXRQcm9jR2xvYmFsIC0KKyAqIFByb2NHbG9iYWxTaG1lbVJlZ2lzdGVy IC0KKyAqCSAgUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBuZWVkcy4KKyAqCisgKiBUaGlzIGlz IGNhbGxlZCBkdXJpbmcgcG9zdG1hc3RlciBvciBzdGFuZGFsb25lIGJhY2tlbmQgc3RhcnR1 cCwgYW5kIGFsc28KKyAqIGR1cmluZyBiYWNrZW5kIHN0YXJ0dXAgaW4gRVhFQ19CQUNLRU5E IG1vZGUuCisgKi8KK3ZvaWQKK1Byb2NHbG9iYWxTaG1lbVJlZ2lzdGVyKHZvaWQpCit7CisJ U2l6ZQkJc2l6ZSA9IDA7CisKKwkvKgorCSAqIFJlc2VydmUgYWxsIHRoZSBQR1BST0Mgc3Ry dWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlIHNpeCBzZXBhcmF0ZQorCSAqIGNvbnN1 bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBhbmQg c3BlY2lhbAorCSAqIHdvcmtlcnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMsICg0KSB3YWxz ZW5kZXJzLCAoNSkgYXV4aWxpYXJ5CisJICogcHJvY2Vzc2VzLCBhbmQgKDYpIHByZXBhcmVk IHRyYW5zYWN0aW9ucy4gIChGb3IgbGFyZ2VseS1oaXN0b3JpY2FsCisJICogcmVhc29ucywg d2UgY29tYmluZSBhdXRvdmFjdXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50byBvbmUgY2F0 ZWdvcnkKKwkgKiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVj dHVyZSBpcyBkZWRpY2F0ZWQgdG8gZXhhY3RseQorCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3Nl cywgYW5kIHRoZXkgZG8gbm90IG1vdmUgYmV0d2VlbiBncm91cHMuCisJICovCisJVG90YWxQ cm9jcyA9CisJCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZ X1BST0NTLCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKKworCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DKSkpOworCXNpemUgPSBhZGRf c2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwtPnhp ZHMpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNp emVvZigqUHJvY0dsb2JhbC0+c3VieGlkU3RhdGVzKSkpOworCXNpemUgPSBhZGRfc2l6ZShz aXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0Zs YWdzKSkpOworCisJUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnNpemUgPSBzaXplOwor CVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9iYWxBbGxQcm9jc1NobWVtRGVzYyk7CisK KwlGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXplID0gRmFzdFBhdGhMb2NrU2htZW1T aXplKCk7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURl c2MpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgUHJvY0dsb2JhbCBzaGFyZWQgc3RydWN0 dXJlIGxhc3QuICBJdHMgaW5pdCBjYWxsYmFjaworCSAqIGluaXRpYWxpemVzIHRoZSBvdGhl cnMgdG9vLgorCSAqLworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9iYWxTaG1lbURl c2MpOworfQorCisKKy8qCisgKiBQcm9jR2xvYmFsU2htZW1Jbml0IC0KICAqCSAgSW5pdGlh bGl6ZSB0aGUgZ2xvYmFsIHByb2Nlc3MgdGFibGUgZHVyaW5nIHBvc3RtYXN0ZXIgb3Igc3Rh bmRhbG9uZQogICoJICBiYWNrZW5kIHN0YXJ0dXAuCiAgKgpAQCAtMTc1LDM2ICsyMTEsMjMg QEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiAgKgkgIEFub3RoZXIgcmVhc29uIGZvciBjcmVh dGluZyBzZW1hcGhvcmVzIGhlcmUgaXMgdGhhdCB0aGUgc2VtYXBob3JlCiAgKgkgIGltcGxl bWVudGF0aW9uIHR5cGljYWxseSByZXF1aXJlcyB1cyB0byBjcmVhdGUgc2VtYXBob3JlcyBp biB0aGUKICAqCSAgcG9zdG1hc3Rlciwgbm90IGluIGJhY2tlbmRzLgotICoKLSAqIE5vdGU6 IHRoaXMgaXMgTk9UIGNhbGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9z dG1hc3RlciwKLSAqIG5vdCBldmVuIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZS4gIFRoZSBQ cm9jR2xvYmFsIGFuZCBBdXhpbGlhcnlQcm9jcwotICogcG9pbnRlcnMgbXVzdCBiZSBwcm9w YWdhdGVkIHNwZWNpYWxseSBmb3IgRVhFQ19CQUNLRU5EIG9wZXJhdGlvbi4KICAqLwotdm9p ZAotSW5pdFByb2NHbG9iYWwodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9jR2xvYmFsU2htZW1J bml0KHZvaWQgKmFyZykKIHsKKwljaGFyCSAgICpwdHI7CisJc2l6ZV90CQlyZXF1ZXN0U2l6 ZTsKIAlQR1BST0MJICAgKnByb2NzOwogCWludAkJCWksCiAJCQkJajsKLQlib29sCQlmb3Vu ZDsKLQl1aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllf UFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CiAKIAkvKiBVc2VkIGZvciBzZXR1cCBvZiBw ZXItYmFja2VuZCBmYXN0LXBhdGggc2xvdHMuICovCiAJY2hhcgkgICAqZnBQdHIsCiAJCQkg ICAqZnBFbmRQdHIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwogCVNpemUJCWZwTG9ja0Jp dHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwotCVNpemUJCXJlcXVlc3RTaXplOwotCWNoYXIJ ICAgKnB0cjsKLQotCS8qIENyZWF0ZSB0aGUgUHJvY0dsb2JhbCBzaGFyZWQgc3RydWN0dXJl ICovCi0JUHJvY0dsb2JhbCA9IChQUk9DX0hEUiAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlBy b2MgSGVhZGVyIiwgc2l6ZW9mKFBST0NfSERSKSwgJmZvdW5kKTsKLQlBc3NlcnQoIWZvdW5k KTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgotCSAqLwor CUFzc2VydChQcm9jR2xvYmFsKTsKIAlQcm9jR2xvYmFsLT5zcGluc19wZXJfZGVsYXkgPSBE RUZBVUxUX1NQSU5TX1BFUl9ERUxBWTsKIAlTcGluTG9ja0luaXQoJlByb2NHbG9iYWwtPmZy ZWVQcm9jc0xvY2spOwogCWRsaXN0X2luaXQoJlByb2NHbG9iYWwtPmZyZWVQcm9jcyk7CkBA IC0yMTcsMjMgKzI0MCwxMiBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCXBnX2F0b21pY19p bml0X3UzMigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwgSU5WQUxJRF9QUk9D X05VTUJFUik7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5jbG9nR3JvdXBG aXJzdCwgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAKLQkvKgotCSAqIENyZWF0ZSBhbmQgaW5p dGlhbGl6ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQuICBUaGVyZSBh cmUKLQkgKiBzaXggc2VwYXJhdGUgY29uc3VtZXJzOiAoMSkgbm9ybWFsIGJhY2tlbmRzLCAo MikgYXV0b3ZhY3V1bSB3b3JrZXJzIGFuZAotCSAqIHNwZWNpYWwgd29ya2VycywgKDMpIGJh Y2tncm91bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBhdXhpbGlhcnkKLQkgKiBw cm9jZXNzZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLiAgKEZvciBsYXJnZWx5 LWhpc3RvcmljYWwKLQkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1dG92YWN1dW0gYW5kIHNw ZWNpYWwgd29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQotCSAqIHdpdGggYSBzaW5nbGUgZnJl ZWxpc3QuKSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGljYXRlZCB0byBleGFjdGx5 Ci0JICogb25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBkbyBub3QgbW92ZSBiZXR3 ZWVuIGdyb3Vwcy4KLQkgKi8KLQlyZXF1ZXN0U2l6ZSA9IFBHUHJvY1NobWVtU2l6ZSgpOwot Ci0JcHRyID0gU2htZW1Jbml0U3RydWN0KCJQR1BST0Mgc3RydWN0dXJlcyIsCi0JCQkJCQkg IHJlcXVlc3RTaXplLAotCQkJCQkJICAmZm91bmQpOwotCisJQXNzZXJ0KHRtcEFsbFByb2Nz KTsKKwlwdHIgPSB0bXBBbGxQcm9jczsKKwlyZXF1ZXN0U2l6ZSA9IFByb2NHbG9iYWxBbGxQ cm9jc1NobWVtRGVzYy5zaXplOwogCU1lbVNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsKIAor CS8qIENhcnZlIG91dCB0aGUgYWxsUHJvY3MgYXJyYXkgZnJvbSB0aGUgc2hhcmVkIG1lbW9y eSBhcmVhICovCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKIAlwdHIgPSBwdHIgKyBUb3Rh bFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CiAKQEAgLTI0Miw3ICsyNTQsNyBAQCBJbml0UHJv Y0dsb2JhbCh2b2lkKQogCVByb2NHbG9iYWwtPmFsbFByb2NDb3VudCA9IE1heEJhY2tlbmRz ICsgTlVNX0FVWElMSUFSWV9QUk9DUzsKIAogCS8qCi0JICogQWxsb2NhdGUgYXJyYXlzIG1p cnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVyLiBTZWUKKwkgKiBDYXJ2 ZSBvdXQgYXJyYXlzIG1pcnJvcmluZyBQR1BST0MgZmllbGRzIGluIGEgZGVuc2UgbWFubmVy LiBTZWUKIAkgKiBQUk9DX0hEUi4KIAkgKgogCSAqIFhYWDogSXQgbWlnaHQgbWFrZSBzZW5z ZSB0byBpbmNyZWFzZSBwYWRkaW5nIGZvciB0aGVzZSBhcnJheXMsIGdpdmVuCkBAIC0yNTcs MzEgKzI2OSwyNSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCVByb2NHbG9iYWwtPnN0YXR1 c0ZsYWdzID0gKHVpbnQ4ICopIHB0cjsKIAlwdHIgPSBwdHIgKyAoVG90YWxQcm9jcyAqIHNp emVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKTsKIAotCS8qIG1ha2Ugc3VyZSB3ZXIg ZGlkbid0IG92ZXJmbG93ICovCisJLyogbWFrZSBzdXJlIHdlIGRpZG4ndCBvdmVyZmxvdyAq LwogCUFzc2VydCgocHRyID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikg cHJvY3MgKyByZXF1ZXN0U2l6ZSkpOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBhcnJheXMgZm9y IGZhc3QtcGF0aCBsb2Nrcy4gVGhvc2UgYXJlIHZhcmlhYmxlLWxlbmd0aCwgc28KKwkgKiBJ bml0aWFsaXplIGFycmF5cyBmb3IgZmFzdC1wYXRoIGxvY2tzLiBUaG9zZSBhcmUgdmFyaWFi bGUtbGVuZ3RoLCBzbwogCSAqIGNhbid0IGJlIGluY2x1ZGVkIGluIFBHUFJPQyBkaXJlY3Rs eS4gV2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBwaWVjZSBvZgogCSAqIHNoYXJlZCBtZW1vcnkg YW5kIHRoZW4gZGl2aWRlIHRoYXQgYmV0d2VlbiBiYWNrZW5kcy4KIAkgKi8KIAlmcExvY2tC aXRzU2l6ZSA9IE1BWEFMSUdOKEZhc3RQYXRoTG9ja0dyb3Vwc1BlckJhY2tlbmQgKiBzaXpl b2YodWludDY0KSk7CiAJZnBSZWxJZFNpemUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tTbG90 c1BlckJhY2tlbmQoKSAqIHNpemVvZihPaWQpKTsKIAotCXJlcXVlc3RTaXplID0gRmFzdFBh dGhMb2NrU2htZW1TaXplKCk7Ci0KLQlmcFB0ciA9IFNobWVtSW5pdFN0cnVjdCgiRmFzdC1Q YXRoIExvY2sgQXJyYXkiLAotCQkJCQkJCXJlcXVlc3RTaXplLAotCQkJCQkJCSZmb3VuZCk7 Ci0KLQlNZW1TZXQoZnBQdHIsIDAsIHJlcXVlc3RTaXplKTsKKwlBc3NlcnQodG1wRmFzdFBh dGhMb2NrQXJyYXkpOworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJyYXk7CisJcmVxdWVz dFNpemUgPSBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXplOworCW1lbXNldChmcFB0 ciwgMCwgcmVxdWVzdFNpemUpOwogCiAJLyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlk IG5vdCBvdmVyZmxvdy4gKi8KIAlmcEVuZFB0ciA9IGZwUHRyICsgcmVxdWVzdFNpemU7CiAK LQkvKiBSZXNlcnZlIHNwYWNlIGZvciBzZW1hcGhvcmVzLiAqLwotCVBHUmVzZXJ2ZVNlbWFw aG9yZXMoUHJvY0dsb2JhbFNlbWFzKCkpOwotCiAJZm9yIChpID0gMDsgaSA8IFRvdGFsUHJv Y3M7IGkrKykKIAl7CiAJCVBHUFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBhY2EyYzhmYzc0Mi4uOTNl ODdhNjhmZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMK QEAgLTc5LDYgKzc5LDMwIEBAIHR5cGVkZWYgc3RydWN0IFdhaXRFdmVudEN1c3RvbUVudHJ5 QnlOYW1lCiAJdWludDMyCQl3YWl0X2V2ZW50X2luZm87CiB9IFdhaXRFdmVudEN1c3RvbUVu dHJ5QnlOYW1lOwogCitzdGF0aWMgU2htZW1IYXNoRGVzYyBXYWl0RXZlbnRDdXN0b21IYXNo QnlJbmZvRGVzYyA9Cit7CisJLm5hbWUgPSAiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkgd2Fp dCBldmVudCBpbmZvcm1hdGlvbiIsCisJLnB0ciA9ICZXYWl0RXZlbnRDdXN0b21IYXNoQnlJ bmZvLAorCisJLmluaXRfc2l6ZSA9IFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfSU5JVF9TSVpF LAorCS5tYXhfc2l6ZSA9IFdBSVRfRVZFTlRfQ1VTVE9NX0hBU0hfTUFYX1NJWkUsCisJLmhh c2hfaW5mby5rZXlzaXplID0gc2l6ZW9mKHVpbnQzMiksCisJLmhhc2hfaW5mby5lbnRyeXNp emUgPSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9tRW50cnlCeUluZm8pLAorCS5oYXNoX2ZsYWdz ID0gSEFTSF9FTEVNIHwgSEFTSF9CTE9CUywKK307CisKK3N0YXRpYyBTaG1lbUhhc2hEZXNj IFdhaXRFdmVudEN1c3RvbUhhc2hCeU5hbWVEZXNjID0KK3sKKwkubmFtZSA9ICJXYWl0RXZl bnRDdXN0b20gaGFzaCBieSBuYW1lIiwKKwkucHRyID0gJldhaXRFdmVudEN1c3RvbUhhc2hC eU5hbWUsCisKKwkuaW5pdF9zaXplID0gV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJ WkUsCisJLm1heF9zaXplID0gV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhfU0laRSwKKwkv KiBrZXkgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCisJLmhhc2hfaW5mby5rZXlz aXplID0gc2l6ZW9mKGNoYXJbTkFNRURBVEFMRU5dKSwKKwkuaGFzaF9pbmZvLmVudHJ5c2l6 ZSA9IHNpemVvZihXYWl0RXZlbnRDdXN0b21FbnRyeUJ5TmFtZSksCisJLmhhc2hfZmxhZ3Mg PSBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MsCit9OwogCiAvKiBkeW5hbWljIGFsbG9jYXRp b24gY291bnRlciBmb3IgY3VzdG9tIHdhaXQgZXZlbnRzICovCiB0eXBlZGVmIHN0cnVjdCBX YWl0RXZlbnRDdXN0b21Db3VudGVyRGF0YQpAQCAtOTAsNiArMTE0LDE2IEBAIHR5cGVkZWYg c3RydWN0IFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhCiAvKiBwb2ludGVyIHRvIHRoZSBz aGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEgKldh aXRFdmVudEN1c3RvbUNvdW50ZXI7CiAKK3N0YXRpYyB2b2lkIFdhaXRFdmVudEN1c3RvbUNv dW50ZXJEYXRhU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERl c2MgV2FpdEV2ZW50Q3VzdG9tQ291bnRlclNobWVtRGVzYyA9Cit7CisJLm5hbWUgPSAiV2Fp dEV2ZW50Q3VzdG9tQ291bnRlckRhdGEiLAorCS5zaXplID0gc2l6ZW9mKFdhaXRFdmVudEN1 c3RvbUNvdW50ZXJEYXRhKSwKKwkuaW5pdF9mbiA9IFdhaXRFdmVudEN1c3RvbUNvdW50ZXJE YXRhU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJldhaXRFdmVudEN1c3RvbUNvdW50 ZXIsCit9OworCiAvKiBmaXJzdCBldmVudCBJRCBvZiBjdXN0b20gd2FpdCBldmVudHMgKi8K ICNkZWZpbmUgV0FJVF9FVkVOVF9DVVNUT01fSU5JVElBTF9JRAkxCiAKQEAgLTk3LDYwICsx MzEsMjIgQEAgc3RhdGljIHVpbnQzMiBXYWl0RXZlbnRDdXN0b21OZXcodWludDMyIGNsYXNz SWQsIGNvbnN0IGNoYXIgKndhaXRfZXZlbnRfbmFtZSk7CiBzdGF0aWMgY29uc3QgY2hhciAq R2V0V2FpdEV2ZW50Q3VzdG9tSWRlbnRpZmllcih1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsK IAogLyoKLSAqICBSZXR1cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRh YmxlcyBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50ZXIuCisgKiBSZWdpc3RlciBzaG1l bSBzcGFjZSBmb3IgZHluYW1pYyBzaGFyZWQgaGFzaCBhbmQgZHluYW1pYyBhbGxvY2F0aW9u IGNvdW50ZXIuCiAgKi8KLVNpemUKLVdhaXRFdmVudEN1c3RvbVNobWVtU2l6ZSh2b2lkKQor dm9pZAorV2FpdEV2ZW50Q3VzdG9tU2htZW1SZWdpc3Rlcih2b2lkKQogewotCVNpemUJCXN6 OwotCi0Jc3ogPSBNQVhBTElHTihzaXplb2YoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEp KTsKLQlzeiA9IGFkZF9zaXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUoV0FJVF9FVkVOVF9D VVNUT01fSEFTSF9NQVhfU0laRSwKLQkJCQkJCQkJCQkgc2l6ZW9mKFdhaXRFdmVudEN1c3Rv bUVudHJ5QnlJbmZvKSkpOwotCXN6ID0gYWRkX3NpemUoc3osIGhhc2hfZXN0aW1hdGVfc2l6 ZShXQUlUX0VWRU5UX0NVU1RPTV9IQVNIX01BWF9TSVpFLAotCQkJCQkJCQkJCSBzaXplb2Yo V2FpdEV2ZW50Q3VzdG9tRW50cnlCeU5hbWUpKSk7Ci0JcmV0dXJuIHN6OworCVNobWVtUmVn aXN0ZXJTdHJ1Y3QoJldhaXRFdmVudEN1c3RvbUNvdW50ZXJTaG1lbURlc2MpOworCVNobWVt UmVnaXN0ZXJIYXNoKCZXYWl0RXZlbnRDdXN0b21IYXNoQnlJbmZvRGVzYyk7CisJU2htZW1S ZWdpc3Rlckhhc2goJldhaXRFdmVudEN1c3RvbUhhc2hCeU5hbWVEZXNjKTsKIH0KIAotLyoK LSAqIEFsbG9jYXRlIHNobWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIGFuZCBk eW5hbWljIGFsbG9jYXRpb24gY291bnRlci4KLSAqLwotdm9pZAotV2FpdEV2ZW50Q3VzdG9t U2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRh dGFTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCUhBU0hDVEwJCWlu Zm87Ci0KLQlXYWl0RXZlbnRDdXN0b21Db3VudGVyID0gKFdhaXRFdmVudEN1c3RvbUNvdW50 ZXJEYXRhICopCi0JCVNobWVtSW5pdFN0cnVjdCgiV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRh dGEiLAotCQkJCQkJc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhKSwgJmZvdW5k KTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0aW9u IGNvdW50ZXIgYW5kIGl0cyBzcGlubG9jay4gKi8KLQkJV2FpdEV2ZW50Q3VzdG9tQ291bnRl ci0+bmV4dElkID0gV0FJVF9FVkVOVF9DVVNUT01fSU5JVElBTF9JRDsKLQkJU3BpbkxvY2tJ bml0KCZXYWl0RXZlbnRDdXN0b21Db3VudGVyLT5tdXRleCk7Ci0JfQotCi0JLyogaW5pdGlh bGl6ZSBvciBhdHRhY2ggdGhlIGhhc2ggdGFibGVzIHRvIHN0b3JlIGN1c3RvbSB3YWl0IGV2 ZW50cyAqLwotCWluZm8ua2V5c2l6ZSA9IHNpemVvZih1aW50MzIpOwotCWluZm8uZW50cnlz aXplID0gc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUVudHJ5QnlJbmZvKTsKLQlXYWl0RXZlbnRD dXN0b21IYXNoQnlJbmZvID0KLQkJU2htZW1Jbml0SGFzaCgiV2FpdEV2ZW50Q3VzdG9tIGhh c2ggYnkgd2FpdCBldmVudCBpbmZvcm1hdGlvbiIsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNU T01fSEFTSF9JTklUX1NJWkUsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhf U0laRSwKLQkJCQkJICAmaW5mbywKLQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsK LQotCS8qIGtleSBpcyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgKi8KLQlpbmZvLmtleXNp emUgPSBzaXplb2YoY2hhcltOQU1FREFUQUxFTl0pOwotCWluZm8uZW50cnlzaXplID0gc2l6 ZW9mKFdhaXRFdmVudEN1c3RvbUVudHJ5QnlOYW1lKTsKLQlXYWl0RXZlbnRDdXN0b21IYXNo QnlOYW1lID0KLQkJU2htZW1Jbml0SGFzaCgiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkgbmFt ZSIsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJWkUsCi0JCQkJCSAg V0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhfU0laRSwKLQkJCQkJICAmaW5mbywKLQkJCQkJ ICBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOworCS8qIGluaXRpYWxpemUgdGhlIGFsbG9j YXRpb24gY291bnRlciBhbmQgaXRzIHNwaW5sb2NrLiAqLworCVdhaXRFdmVudEN1c3RvbUNv dW50ZXItPm5leHRJZCA9IFdBSVRfRVZFTlRfQ1VTVE9NX0lOSVRJQUxfSUQ7CisJU3Bpbkxv Y2tJbml0KCZXYWl0RXZlbnRDdXN0b21Db3VudGVyLT5tdXRleCk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaAppbmRleCA2ZmE5MWJmY2RjMC4uMmRmYzhiMGY4NWYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaApAQCAtMzQ1LDggKzM0NSw3IEBAIGV4dGVybiBUcmFuc2FjdGlvbklk IFRyYW5zYWN0aW9uSWRMYXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhM b2dSZWNQdHIgVHJhbnNhY3Rpb25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7 CiAKIC8qIGluIHRyYW5zYW0vdmFyc3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVt U2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKK2V4dGVy biB2b2lkIFZhcnN1cFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0 aW9uSWQgR2V0TmV3VHJhbnNhY3Rpb25JZChib29sIGlzU3ViWGFjdCk7CiBleHRlcm4gdm9p ZCBBZHZhbmNlTmV4dEZ1bGxUcmFuc2FjdGlvbklkUGFzdFhpZChUcmFuc2FjdGlvbklkIHhp ZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgUmVhZE5leHRGdWxsVHJhbnNhY3Rpb25J ZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2RzbS5oCmluZGV4IDQwNzY1N2RmM2ZmLi4wNjFiZjcyNWY4OCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc20uaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2RzbS5oCkBAIC0yNiw4ICsyNiw3IEBAIGV4dGVybiB2b2lkIGRzbV9wb3N0 bWFzdGVyX3N0YXJ0dXAoUEdTaG1lbUhlYWRlciAqKTsKIGV4dGVybiB2b2lkIGRzbV9iYWNr ZW5kX3NodXRkb3duKHZvaWQpOwogZXh0ZXJuIHZvaWQgZHNtX2RldGFjaF9hbGwodm9pZCk7 CiAKLWV4dGVybiBzaXplX3QgZHNtX2VzdGltYXRlX3NpemUodm9pZCk7Ci1leHRlcm4gdm9p ZCBkc21fc2htZW1faW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRzbV9zaG1lbV9yZWdpc3Rl cih2b2lkKTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAogZXh0ZXJuIHZvaWQgZHNtX3NldF9j b250cm9sX2hhbmRsZShkc21faGFuZGxlIGgpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9kc21fcmVnaXN0cnkuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX3JlZ2lz dHJ5LmgKaW5kZXggNTA2ZmFlMmM5Y2EuLjlhMWI0ZDk4MmFmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvZHNtX3JlZ2lzdHJ5LmgKQEAgLTIyLDcgKzIyLDYgQEAgZXh0ZXJuIGRzYV9hcmVhICpH ZXROYW1lZERTQShjb25zdCBjaGFyICpuYW1lLCBib29sICpmb3VuZCk7CiBleHRlcm4gZHNo YXNoX3RhYmxlICpHZXROYW1lZERTSGFzaChjb25zdCBjaGFyICpuYW1lLAogCQkJCQkJCQkJ Y29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgKnBhcmFtcywKIAkJCQkJCQkJCWJvb2wgKmZvdW5k KTsKLWV4dGVybiBTaXplIERTTVJlZ2lzdHJ5U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZv aWQgRFNNUmVnaXN0cnlTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9pZCBEU01SZWdpc3Ry eVNobWVtUmVnaXN0ZXIodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBEU01fUkVHSVNUUllf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCmluZGV4IDIwNmZiNzhmOGE1Li43Y2RjNDg1 MjMzNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaApAQCAtNjYsOCArNjYsNyBAQCBleHRl cm4gUEdETExJTVBPUlQgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRlOwog LyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBwbXNpZ25hbC5jCiAgKi8KLWV4 dGVybiBTaXplIFBNU2lnbmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUE1TaWdu YWxTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9pZCBQTVNpZ25hbFNobWVtUmVnaXN0ZXIo dm9pZCk7CiBleHRlcm4gdm9pZCBTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNpZ25hbFJlYXNv biByZWFzb24pOwogZXh0ZXJuIGJvb2wgQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU2lnbmFs UmVhc29uIHJlYXNvbik7CiBleHRlcm4gdm9pZCBTZXRRdWl0U2lnbmFsUmVhc29uKFF1aXRT aWduYWxSZWFzb24gcmVhc29uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggYmYzMDk0ZjBmN2Qu LmQ3YTRjNTdmNzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtNTQ5LDcgKzU0OSw3IEBAIGV4 dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKkF1eGlsaWFyeVByb2NzOwogICogRnVuY3Rpb24g UHJvdG90eXBlcwogICovCiBleHRlcm4gaW50CVByb2NHbG9iYWxTZW1hcyh2b2lkKTsKLWV4 dGVybiBTaXplIFByb2NHbG9iYWxTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBQcm9j R2xvYmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRQcm9jR2xvYmFs KHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBJ bml0UHJvY2Vzc1BoYXNlMih2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY2FycmF5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4 IGM1YWIxNTc0ZmUzLi41NzI1MTZjNGUyMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jYXJyYXkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o CkBAIC0yMCw4ICsyMCw3IEBACiAjaW5jbHVkZSAidXRpbHMvc25hcHNob3QuaCIKIAogCi1l eHRlcm4gU2l6ZSBQcm9jQXJyYXlTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBQcm9j QXJyYXlTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jQXJyYXlTaG1lbVJlZ2lz dGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYyk7CiBl eHRlcm4gdm9pZCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklk IGxhdGVzdFhpZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKaW5kZXggMzQ4ZmJh NTNhOTMuLmQyMzQ0YjFjYmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAt NjMsOCArNjMsNyBAQCB0eXBlZGVmIGVudW0KIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5j dGlvbnMgaW4gcHJvY3NpZ25hbC5jCiAgKi8KLWV4dGVybiBTaXplIFByb2NTaWduYWxTaG1l bVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBQcm9jU2lnbmFsU2htZW1Jbml0KHZvaWQpOwor ZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIodm9pZCk7CiAKIGV4dGVybiB2 b2lkIFByb2NTaWduYWxJbml0KGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2Vs X2tleV9sZW4pOwogZXh0ZXJuIGludAlTZW5kUHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NT aWduYWxSZWFzb24gcmVhc29uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9z aW52YWxhZHQuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmgKaW5kZXggYTE2 OTQ1MDBhODUuLjRlZGJhMjkzNmU2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3NpbnZhbGFkdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmgKQEAg LTI4LDggKzI4LDcgQEAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gc2lu dmFsYWR0LmMKICAqLwotZXh0ZXJuIFNpemUgU2hhcmVkSW52YWxTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBTaGFyZWRJbnZhbFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lk IFNoYXJlZEludmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFNoYXJlZElu dmFsQmFja2VuZEluaXQoYm9vbCBzZW5kT25seSk7CiAKIGV4dGVybiB2b2lkIFNJSW5zZXJ0 RGF0YUVudHJpZXMoY29uc3QgU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50 IG4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IDM0YzI3Y2MzZGMzLi44NmZjODYz N2Y1ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsOCArNDIsNyBAQCBleHRl cm4gUEdETExJTVBPUlQgdWludDMyICpteV93YWl0X2V2ZW50X2luZm87CiBleHRlcm4gdWlu dDMyIFdhaXRFdmVudEV4dGVuc2lvbk5ldyhjb25zdCBjaGFyICp3YWl0X2V2ZW50X25hbWUp OwogZXh0ZXJuIHVpbnQzMiBXYWl0RXZlbnRJbmplY3Rpb25Qb2ludE5ldyhjb25zdCBjaGFy ICp3YWl0X2V2ZW50X25hbWUpOwogCi1leHRlcm4gdm9pZCBXYWl0RXZlbnRDdXN0b21TaG1l bUluaXQodm9pZCk7Ci1leHRlcm4gU2l6ZSBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUodm9p ZCk7CitleHRlcm4gdm9pZCBXYWl0RXZlbnRDdXN0b21TaG1lbVJlZ2lzdGVyKHZvaWQpOwog ZXh0ZXJuIGNoYXIgKipHZXRXYWl0RXZlbnRDdXN0b21OYW1lcyh1aW50MzIgY2xhc3NJZCwg aW50ICpud2FpdGV2ZW50cyk7CiAKIC8qIC0tLS0tLS0tLS0KLS0gCjIuNDcuMwoK --------------9KUsCkZJ2q1LfUJZKT3CK0fL--